From 326ee2c0d0aaa794ed9f2157c1ac964b1d36c038 Mon Sep 17 00:00:00 2001 From: "m.heisig" Date: Wed, 18 Mar 2026 22:48:08 +0100 Subject: [PATCH 1/4] Started change to new pattern with FB_AxisPTP --- BasicComponents/BasicComponents.plcproj | 6 + BasicComponents/DUTs/E_CmdResult.TcDUT | 24 + .../Components/AxisPTP/E_AXIS_PTP_STATE.TcDUT | 28 +- .../POUs/Components/AxisPTP/FB_AxisPTP.TcPOU | 590 ++++++++---------- .../Components/AxisPTP/ST_AxisPTP_IO.TcDUT | 12 + 5 files changed, 325 insertions(+), 335 deletions(-) create mode 100644 BasicComponents/DUTs/E_CmdResult.TcDUT create mode 100644 BasicComponents/POUs/Components/AxisPTP/ST_AxisPTP_IO.TcDUT diff --git a/BasicComponents/BasicComponents.plcproj b/BasicComponents/BasicComponents.plcproj index 124a628..14875d4 100644 --- a/BasicComponents/BasicComponents.plcproj +++ b/BasicComponents/BasicComponents.plcproj @@ -45,6 +45,9 @@ + + Code + Code @@ -72,6 +75,9 @@ Code + + Code + Code diff --git a/BasicComponents/DUTs/E_CmdResult.TcDUT b/BasicComponents/DUTs/E_CmdResult.TcDUT new file mode 100644 index 0000000..7e49151 --- /dev/null +++ b/BasicComponents/DUTs/E_CmdResult.TcDUT @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/BasicComponents/POUs/Components/AxisPTP/E_AXIS_PTP_STATE.TcDUT b/BasicComponents/POUs/Components/AxisPTP/E_AXIS_PTP_STATE.TcDUT index 40c18a8..7814430 100644 --- a/BasicComponents/POUs/Components/AxisPTP/E_AXIS_PTP_STATE.TcDUT +++ b/BasicComponents/POUs/Components/AxisPTP/E_AXIS_PTP_STATE.TcDUT @@ -6,16 +6,24 @@ {attribute 'to_string'} TYPE E_AXIS_PTP_STATE : ( - OFF := 0, - WAIT_FOR_ENABLE, - ENABLED, - HOMING, - MOVING_ABSOLUTE, - MOVING_RELATIVE, - MOVING_VELOCITY, - MOVING_MODULO, - HALTING, - WAIT_FOR_DISABLE, + IDLE := 0, + START_ENABLE, + WAIT_ENABLE, + START_DISABLE, + WAIT_DISABLE, + START_HOMING, + WAIT_HOMING, + START_MOVING_ABSOLUTE, + WAIT_MOVING_ABSOLUTE, + START_MOVING_RELATIVE, + WAIT_MOVING_RELATIVE, + START_MOVING_VELOCITY, + WAIT_MOVING_VELOCITY, + START_MOVING_MODULO, + WAIT_MOVING_MODULO, + START_HALTING, + WAIT_HALTING, + ENTER_ERROR, ERROR, RESET ); diff --git a/BasicComponents/POUs/Components/AxisPTP/FB_AxisPTP.TcPOU b/BasicComponents/POUs/Components/AxisPTP/FB_AxisPTP.TcPOU index 61f2d5d..6232180 100644 --- a/BasicComponents/POUs/Components/AxisPTP/FB_AxisPTP.TcPOU +++ b/BasicComponents/POUs/Components/AxisPTP/FB_AxisPTP.TcPOU @@ -3,8 +3,6 @@ +xHomed := stIO.io_fbAxisRef.Status.Homed; +lrActPosition := stIO.io_fbAxisRef.NcToPlc.ActPos; +xIsStopped := stIO.io_fbAxisRef.Status.StandStill OR stIO.io_fbAxisRef.Status.Disabled;]]> + + + + + + + + + + + + - - + - - + E_AXIS_PTP_STATE.ERROR: + M_Homing := E_CmdResult.ERROR; + + ELSE + M_Homing := E_CmdResult.BUSY; +END_CASE]]> - - - - + E_AXIS_PTP_STATE.ERROR: + M_MoveModulo := E_CmdResult.ERROR; + + ELSE + M_MoveModulo := E_CmdResult.BUSY; +END_CASE]]> - - + E_AXIS_PTP_STATE.ERROR: + M_MoveRel := E_CmdResult.ERROR; + + ELSE + M_MoveRel := E_CmdResult.BUSY; +END_CASE]]> - - + +CASE _eState OF + E_AXIS_PTP_STATE.IDLE: + _eMoveDirection := eDirection; + _eState := E_AXIS_PTP_STATE.START_MOVING_VELOCITY; + + xBusy := TRUE; + xDone := FALSE; + M_MoveRel := E_CmdResult.ACCEPTED; + + E_AXIS_PTP_STATE.ERROR: + M_MoveRel := E_CmdResult.ERROR; + + ELSE + M_MoveRel := E_CmdResult.BUSY; +END_CASE]]> diff --git a/BasicComponents/POUs/Components/AxisPTP/ST_AxisPTP_IO.TcDUT b/BasicComponents/POUs/Components/AxisPTP/ST_AxisPTP_IO.TcDUT new file mode 100644 index 0000000..6d68578 --- /dev/null +++ b/BasicComponents/POUs/Components/AxisPTP/ST_AxisPTP_IO.TcDUT @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file From cf9501ea013a473cfd7fee0b0a0e177d015d55df Mon Sep 17 00:00:00 2001 From: "m.heisig" Date: Thu, 19 Mar 2026 12:17:10 +0100 Subject: [PATCH 2/4] Changed all components to use HAL structs as in and outs - All components now use HAL structs as inputs and outputs - Restructured library folders - FB_Axis_PTP now implements the execute pattern with E_CmdResult - Bumped version number to 2.0.0 --- BaseComponents.tsproj | 350 +--------------- BasicComponents.library | Bin 1028740 -> 1035852 bytes BasicComponents/BasicComponents.plcproj | 381 +++++++++--------- .../Analog/DUTs}/ST_ANALOG_EW_CONFIG.TcDUT | 0 .../Analog/DUTs}/ST_ANALOG_EW_DELAYS.TcDUT | 0 .../Analog/DUTs}/ST_ANALOG_EW_LEVELS.TcDUT | 0 .../Analog/DUTs}/ST_ANALOG_IO_CONFIG.TcDUT | 0 .../Analog/DUTs/ST_AnalogInput_IO.TcDUT | 22 + .../Analog/DUTs/ST_AnalogOutput_IO.TcDUT | 11 + .../Analog/POUs}/FB_AnalogInput.TcPOU | 24 +- .../Analog/POUs}/FB_AnalogOutput.TcPOU | 7 +- .../AxisPTP/DUTs}/E_AXIS_PTP_STATE.TcDUT | 1 + .../AxisPTP/DUTs}/ST_AxisPTP_IO.TcDUT | 0 .../AxisPTP/POUs}/FB_AxisPTP.TcPOU | 99 +++-- .../Controller/POUs}/FB_Limit.TcPOU | 0 .../Controller/POUs}/FB_PI.TcPOU | 0 .../Controller/POUs}/FB_PID.TcPOU | 0 .../Controller/POUs}/FB_RampGenerator.TcPOU | 0 .../EventListener/DUTs}/E_EventType.TcDUT | 0 .../DUTs}/ST_BufferEventEntry.TcDUT | 0 .../POUs}/FB_EventListener.TcPOU | 0 .../Components/Motor/FB_MotorBecker.TcPOU | 0 .../Motor/Types/ST_MOTOR_BECKER_CONFIG.TcDUT | 0 .../Utilities/FB_AlarmMessage.TcPOU | 0 .../Components/Utilities/FB_Blinker.TcPOU | 0 .../Utilities/FB_ReleaseSignal.TcPOU | 0 .../Utilities/FC_HashFNV1a_32Bit.TcPOU | 0 .../Utilities/F_GetTaskCycleTime.TcPOU | 0 .../Valves/DUTs}/ST_ValveAnalogConfig.TcDUT | 0 .../Valves/DUTs/ST_ValveAnalog_IO.TcDUT | 16 + .../Valves/DUTs}/ST_ValveConfig.TcDUT | 0 .../Components/Valves/DUTs/ST_Valve_IO.TcDUT | 21 + .../Valves/POUs}/FB_Valve.TcPOU | 20 +- .../Valves/POUs}/FB_ValveAnalog.TcPOU | 26 +- .../{POUs/GVL => GVLs}/GVL_CONFIGS.TcGVL | 0 .../Constants => GVLs}/GVL_TYPE_CONST.TcGVL | 0 .../Datentypen/ST_HMI_ANALOG_MOTOR_DATA.TcDUT | 0 .../HMI/Datentypen/ST_HMI_ANALOG_VALUE.TcDUT | 0 .../Datentypen/ST_HMI_ANALOG_VALVE_DATA.TcDUT | 0 .../Datentypen/ST_HMI_CONTROL_BUTTON.TcDUT | 0 .../HMI/Datentypen/ST_HMI_INTEGER_VALUE.TcDUT | 0 .../HMI/Datentypen/ST_HMI_INTERLOCK.TcDUT | 0 .../HMI/Datentypen/ST_HMI_VALVE_DATA.TcDUT | 0 .../HMI/Datentypen/T_INTERLOCK.TcDUT | 0 .../HMI/Enum/E_HMI_ANALOG_VALUE_STATUS.TcDUT | 0 .../HMI/Enum/E_HMI_BUTTON_FEEDBACK.TcDUT | 0 .../{POUs => }/HMI/Enum/E_HMI_MODE.TcDUT | 0 .../HMI/Enum/E_HMI_MOTOR_STATUS.TcDUT | 0 .../HMI/Enum/E_HMI_VALVE_STATUS.TcDUT | 0 BasicComponents/{POUs => }/PRG_MAIN.TcPOU | 28 +- .../AITests/FB_AnalogInputTest.TcPOU | 256 ++++++------ .../AOTests/FB_AnalogOutputTest.TcPOU | 24 +- .../FB_ValveAnalog_Test.TcPOU | 18 +- .../FB_ReleaseSignalTest.TcPOU | 0 .../UtilitiesTests/FB_BlinkerTest.TcPOU | 0 .../FB_HashFNV1a_32BitTest.TcPOU | 0 .../Unittests/UtilitiesTests/FB_PT1Test.TcPOU | 0 .../UtilitiesTests/FB_RampGeneratorTest.TcPOU | 0 .../ValveTests/FB_ValveTestHMI.TcPOU | 70 ++-- .../ValveTests/FB_ValveTestTimoutClose.TcPOU | 4 +- .../ValveTests/FB_ValveTestTimoutOpen.TcPOU | 4 +- .../FB_ValveTestTriggerTimoutClose.TcPOU | 2 +- .../FB_ValveTestTriggerTimoutOpen.TcPOU | 2 +- .../Unittests/ValveTests/FB_Valve_Test.TcPOU | 24 +- 64 files changed, 573 insertions(+), 837 deletions(-) rename BasicComponents/{POUs/Components/Analog/Types => Components/Analog/DUTs}/ST_ANALOG_EW_CONFIG.TcDUT (100%) rename BasicComponents/{POUs/Components/Analog/Types => Components/Analog/DUTs}/ST_ANALOG_EW_DELAYS.TcDUT (100%) rename BasicComponents/{POUs/Components/Analog/Types => Components/Analog/DUTs}/ST_ANALOG_EW_LEVELS.TcDUT (100%) rename BasicComponents/{POUs/Components/Analog/Types => Components/Analog/DUTs}/ST_ANALOG_IO_CONFIG.TcDUT (100%) create mode 100644 BasicComponents/Components/Analog/DUTs/ST_AnalogInput_IO.TcDUT create mode 100644 BasicComponents/Components/Analog/DUTs/ST_AnalogOutput_IO.TcDUT rename BasicComponents/{POUs/Components/Analog => Components/Analog/POUs}/FB_AnalogInput.TcPOU (97%) rename BasicComponents/{POUs/Components/Analog => Components/Analog/POUs}/FB_AnalogOutput.TcPOU (98%) rename BasicComponents/{POUs/Components/AxisPTP => Components/AxisPTP/DUTs}/E_AXIS_PTP_STATE.TcDUT (97%) rename BasicComponents/{POUs/Components/AxisPTP => Components/AxisPTP/DUTs}/ST_AxisPTP_IO.TcDUT (100%) rename BasicComponents/{POUs/Components/AxisPTP => Components/AxisPTP/POUs}/FB_AxisPTP.TcPOU (89%) rename BasicComponents/{POUs/Components/Controller => Components/Controller/POUs}/FB_Limit.TcPOU (100%) rename BasicComponents/{POUs/Components/Controller => Components/Controller/POUs}/FB_PI.TcPOU (100%) rename BasicComponents/{POUs/Components/Controller => Components/Controller/POUs}/FB_PID.TcPOU (100%) rename BasicComponents/{POUs/Components/Controller => Components/Controller/POUs}/FB_RampGenerator.TcPOU (100%) rename BasicComponents/{POUs/Components/EventListener/Types => Components/EventListener/DUTs}/E_EventType.TcDUT (100%) rename BasicComponents/{POUs/Components/EventListener/Types => Components/EventListener/DUTs}/ST_BufferEventEntry.TcDUT (100%) rename BasicComponents/{POUs/Components/EventListener => Components/EventListener/POUs}/FB_EventListener.TcPOU (100%) rename BasicComponents/{POUs => }/Components/Motor/FB_MotorBecker.TcPOU (100%) rename BasicComponents/{POUs => }/Components/Motor/Types/ST_MOTOR_BECKER_CONFIG.TcDUT (100%) rename BasicComponents/{POUs => }/Components/Utilities/FB_AlarmMessage.TcPOU (100%) rename BasicComponents/{POUs => }/Components/Utilities/FB_Blinker.TcPOU (100%) rename BasicComponents/{POUs => }/Components/Utilities/FB_ReleaseSignal.TcPOU (100%) rename BasicComponents/{POUs => }/Components/Utilities/FC_HashFNV1a_32Bit.TcPOU (100%) rename BasicComponents/{POUs => }/Components/Utilities/F_GetTaskCycleTime.TcPOU (100%) rename BasicComponents/{POUs/Components/Valves/Types => Components/Valves/DUTs}/ST_ValveAnalogConfig.TcDUT (100%) create mode 100644 BasicComponents/Components/Valves/DUTs/ST_ValveAnalog_IO.TcDUT rename BasicComponents/{POUs/Components/Valves/Types => Components/Valves/DUTs}/ST_ValveConfig.TcDUT (100%) create mode 100644 BasicComponents/Components/Valves/DUTs/ST_Valve_IO.TcDUT rename BasicComponents/{POUs/Components/Valves => Components/Valves/POUs}/FB_Valve.TcPOU (96%) rename BasicComponents/{POUs/Components/Valves => Components/Valves/POUs}/FB_ValveAnalog.TcPOU (95%) rename BasicComponents/{POUs/GVL => GVLs}/GVL_CONFIGS.TcGVL (100%) rename BasicComponents/{POUs/Constants => GVLs}/GVL_TYPE_CONST.TcGVL (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/ST_HMI_ANALOG_MOTOR_DATA.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/ST_HMI_ANALOG_VALUE.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/ST_HMI_ANALOG_VALVE_DATA.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/ST_HMI_CONTROL_BUTTON.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/ST_HMI_INTEGER_VALUE.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/ST_HMI_INTERLOCK.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/ST_HMI_VALVE_DATA.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Datentypen/T_INTERLOCK.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Enum/E_HMI_ANALOG_VALUE_STATUS.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Enum/E_HMI_BUTTON_FEEDBACK.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Enum/E_HMI_MODE.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Enum/E_HMI_MOTOR_STATUS.TcDUT (100%) rename BasicComponents/{POUs => }/HMI/Enum/E_HMI_VALVE_STATUS.TcDUT (100%) rename BasicComponents/{POUs => }/PRG_MAIN.TcPOU (53%) rename BasicComponents/{POUs => }/Unittests/AITests/FB_AnalogInputTest.TcPOU (93%) rename BasicComponents/{POUs => }/Unittests/AOTests/FB_AnalogOutputTest.TcPOU (96%) rename BasicComponents/{POUs => }/Unittests/AnalogValveTests/FB_ValveAnalog_Test.TcPOU (93%) rename BasicComponents/{POUs => }/Unittests/ReleaseSignalTests/FB_ReleaseSignalTest.TcPOU (100%) rename BasicComponents/{POUs => }/Unittests/UtilitiesTests/FB_BlinkerTest.TcPOU (100%) rename BasicComponents/{POUs => }/Unittests/UtilitiesTests/FB_HashFNV1a_32BitTest.TcPOU (100%) rename BasicComponents/{POUs => }/Unittests/UtilitiesTests/FB_PT1Test.TcPOU (100%) rename BasicComponents/{POUs => }/Unittests/UtilitiesTests/FB_RampGeneratorTest.TcPOU (100%) rename BasicComponents/{POUs => }/Unittests/ValveTests/FB_ValveTestHMI.TcPOU (88%) rename BasicComponents/{POUs => }/Unittests/ValveTests/FB_ValveTestTimoutClose.TcPOU (89%) rename BasicComponents/{POUs => }/Unittests/ValveTests/FB_ValveTestTimoutOpen.TcPOU (89%) rename BasicComponents/{POUs => }/Unittests/ValveTests/FB_ValveTestTriggerTimoutClose.TcPOU (92%) rename BasicComponents/{POUs => }/Unittests/ValveTests/FB_ValveTestTriggerTimoutOpen.TcPOU (92%) rename BasicComponents/{POUs => }/Unittests/ValveTests/FB_Valve_Test.TcPOU (88%) diff --git a/BaseComponents.tsproj b/BaseComponents.tsproj index 2a3426e..5d534d2 100644 --- a/BaseComponents.tsproj +++ b/BaseComponents.tsproj @@ -136,357 +136,9 @@ - + BasicComponents Instance {08500001-0000-0000-F000-000000000064} - - PlcTask Inputs - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOn.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOn.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOn.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOn.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOn.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOn.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorLowOff.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningLowOff.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIWarningHighOff.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIErrorHighOff.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIUnderrangeOff.xErrorCard - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.iAnalogValue - - INT - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.xUnderrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.xOverrange - - BOOL - - - PRG_MAIN._fbAnalogInputTest._fbAIOverrangeOff.xErrorCard - - BOOL - - - PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xOpenFeedback - BOOL - - - PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xCloseFeedback - BOOL - - - PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xOpenFeedback - BOOL - - - PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xCloseFeedback - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xOpenFeedback - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xCloseFeedback - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xOpenFeedback - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xCloseFeedback - BOOL - - - PRG_MAIN._fbValveTestHMI._fbValveOC.xOpenFeedback - BOOL - - - PRG_MAIN._fbValveTestHMI._fbValveOC.xCloseFeedback - BOOL - - - - PlcTask Outputs - - PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xOpenValve - - BOOL - - - PRG_MAIN._fbValve_TimeoutTestOpen._fbValveTimeout.xCloseValve - - BOOL - - - PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xOpenValve - - BOOL - - - PRG_MAIN._fbValve_TimeoutTestClose._fbValveTimeout.xCloseValve - - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xOpenValve - - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerOpen._fbValveTimeout.xCloseValve - - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xOpenValve - - BOOL - - - PRG_MAIN._fbValve_TimoutTriggerClose._fbValveTimeout.xCloseValve - - BOOL - - - PRG_MAIN._fbValveTestHMI._fbValveOC.xOpenValve - - BOOL - - - PRG_MAIN._fbValveTestHMI._fbValveOC.xCloseValve - - BOOL - - 0 diff --git a/BasicComponents.library b/BasicComponents.library index b8f96a4c9405605af7e8b2d8259bb88b6fd5fb54..8ba660df19a4d1ef4605fdfe616d1de09561a501 100644 GIT binary patch delta 75105 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 z

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 delta 69228 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 diff --git a/BasicComponents/BasicComponents.plcproj b/BasicComponents/BasicComponents.plcproj index 14875d4..e505420 100644 --- a/BasicComponents/BasicComponents.plcproj +++ b/BasicComponents/BasicComponents.plcproj @@ -21,7 +21,7 @@ false Heisig GmbH BaseComponents - 1.3.4 + 2.0.0 BC M.Heisig Basic components fb's (Valves, AI, AO, Motors, etc.) @@ -45,218 +45,231 @@ + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + true + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + Code + + Code + true + + + Code + true + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + + + Code + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - + Code - - Code - - - Code - - - Code - true - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - true - - - Code - true - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - + Code + + + + + + + + + + + + + + + + + + - - - - - - - true - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - @@ -310,8 +323,8 @@ - - + + "<ProjectRoot>" {192FAD59-8248-4824-A8DE-9177C94C195A} @@ -2692,16 +2705,16 @@ - - - System.Boolean - System.Collections.Hashtable - System.Int32 - {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} - System.String - System.UInt32 - - + + + System.Boolean + System.Collections.Hashtable + System.Int32 + {54dd0eac-a6d8-46f2-8c27-2f43c7e49861} + System.String + System.UInt32 + + \ No newline at end of file diff --git a/BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_EW_CONFIG.TcDUT b/BasicComponents/Components/Analog/DUTs/ST_ANALOG_EW_CONFIG.TcDUT similarity index 100% rename from BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_EW_CONFIG.TcDUT rename to BasicComponents/Components/Analog/DUTs/ST_ANALOG_EW_CONFIG.TcDUT diff --git a/BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_EW_DELAYS.TcDUT b/BasicComponents/Components/Analog/DUTs/ST_ANALOG_EW_DELAYS.TcDUT similarity index 100% rename from BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_EW_DELAYS.TcDUT rename to BasicComponents/Components/Analog/DUTs/ST_ANALOG_EW_DELAYS.TcDUT diff --git a/BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_EW_LEVELS.TcDUT b/BasicComponents/Components/Analog/DUTs/ST_ANALOG_EW_LEVELS.TcDUT similarity index 100% rename from BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_EW_LEVELS.TcDUT rename to BasicComponents/Components/Analog/DUTs/ST_ANALOG_EW_LEVELS.TcDUT diff --git a/BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_IO_CONFIG.TcDUT b/BasicComponents/Components/Analog/DUTs/ST_ANALOG_IO_CONFIG.TcDUT similarity index 100% rename from BasicComponents/POUs/Components/Analog/Types/ST_ANALOG_IO_CONFIG.TcDUT rename to BasicComponents/Components/Analog/DUTs/ST_ANALOG_IO_CONFIG.TcDUT diff --git a/BasicComponents/Components/Analog/DUTs/ST_AnalogInput_IO.TcDUT b/BasicComponents/Components/Analog/DUTs/ST_AnalogInput_IO.TcDUT new file mode 100644 index 0000000..cca463b --- /dev/null +++ b/BasicComponents/Components/Analog/DUTs/ST_AnalogInput_IO.TcDUT @@ -0,0 +1,22 @@ + + + + + + \ No newline at end of file diff --git a/BasicComponents/Components/Analog/DUTs/ST_AnalogOutput_IO.TcDUT b/BasicComponents/Components/Analog/DUTs/ST_AnalogOutput_IO.TcDUT new file mode 100644 index 0000000..b493847 --- /dev/null +++ b/BasicComponents/Components/Analog/DUTs/ST_AnalogOutput_IO.TcDUT @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/BasicComponents/POUs/Components/Analog/FB_AnalogInput.TcPOU b/BasicComponents/Components/Analog/POUs/FB_AnalogInput.TcPOU similarity index 97% rename from BasicComponents/POUs/Components/Analog/FB_AnalogInput.TcPOU rename to BasicComponents/Components/Analog/POUs/FB_AnalogInput.TcPOU index 1aeda2a..abf1b2a 100644 --- a/BasicComponents/POUs/Components/Analog/FB_AnalogInput.TcPOU +++ b/BasicComponents/Components/Analog/POUs/FB_AnalogInput.TcPOU @@ -3,19 +3,6 @@ + + + + + \ No newline at end of file diff --git a/BasicComponents/POUs/Components/Valves/Types/ST_ValveConfig.TcDUT b/BasicComponents/Components/Valves/DUTs/ST_ValveConfig.TcDUT similarity index 100% rename from BasicComponents/POUs/Components/Valves/Types/ST_ValveConfig.TcDUT rename to BasicComponents/Components/Valves/DUTs/ST_ValveConfig.TcDUT diff --git a/BasicComponents/Components/Valves/DUTs/ST_Valve_IO.TcDUT b/BasicComponents/Components/Valves/DUTs/ST_Valve_IO.TcDUT new file mode 100644 index 0000000..8f67b51 --- /dev/null +++ b/BasicComponents/Components/Valves/DUTs/ST_Valve_IO.TcDUT @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/BasicComponents/POUs/Components/Valves/FB_Valve.TcPOU b/BasicComponents/Components/Valves/POUs/FB_Valve.TcPOU similarity index 96% rename from BasicComponents/POUs/Components/Valves/FB_Valve.TcPOU rename to BasicComponents/Components/Valves/POUs/FB_Valve.TcPOU index 7360b4c..ef7271e 100644 --- a/BasicComponents/POUs/Components/Valves/FB_Valve.TcPOU +++ b/BasicComponents/Components/Valves/POUs/FB_Valve.TcPOU @@ -3,8 +3,7 @@ iSetpoint, xError => _xAnalogOutputError, + stIO := stIO.stAnalogOutputIO, stHMIInterface:= stHMIInterface.stSetpoint); IF _fbAnalogOutput.xError THEN @@ -250,10 +243,6 @@ ELSE END_IF _fbAnalogInput( - iAnalogValue:= iFeedbackValue, - xUnderrange:= _xHasUnderrangeFeedback AND xFeedbackUnderrange, - xOverrange:= _xHasOverrangeFeedback AND xFeedbackOverrange, - xErrorCard:= _xHasCardError AND xErrorCard, stAnalogIOConfig:= stValveConfig.stAnalogInputConfig, stAnalogEWConfig:= stValveConfig.stAnalogInputEWConfig, xReleaseErrors:= xReleaseErrors, @@ -267,7 +256,8 @@ _fbAnalogInput( xErrorLow=> , xWarningLow=> , xWarningHigh=> , - xErrorHigh=> ); + xErrorHigh=> , + stIO := stIO.stAnalogInputIO); IF _fbAnalogInput.xError THEN _xError := TRUE; @@ -279,8 +269,8 @@ END_IF // Handle open close feedback -_xIsOpen := (stValveConfig.xHasOpenFeedback AND xOpenFeedback AND (NOT xCloseFeedback)) OR ((NOT stValveConfig.xHasOpenFeedback) AND (_rCurrentValvePosition >= stValveConfig.rPVIsOpen)); -_xIsClosed := (stValveConfig.xHasClosedFeedback AND xCloseFeedback AND (NOT xOpenFeedback)) OR ((NOT stValveConfig.xHasClosedFeedback) AND (_rCurrentValvePosition <= stValveConfig.rPVIsOpen)); +_xIsOpen := (stValveConfig.xHasOpenFeedback AND stIO.i_xOpenFeedback AND (NOT stIO.i_xCloseFeedback)) OR ((NOT stValveConfig.xHasOpenFeedback) AND (_rCurrentValvePosition >= stValveConfig.rPVIsOpen)); +_xIsClosed := (stValveConfig.xHasClosedFeedback AND stIO.i_xCloseFeedback AND (NOT stIO.i_xOpenFeedback)) OR ((NOT stValveConfig.xHasClosedFeedback) AND (_rCurrentValvePosition <= stValveConfig.rPVIsOpen)); // Calculate target tolerance diff --git a/BasicComponents/POUs/GVL/GVL_CONFIGS.TcGVL b/BasicComponents/GVLs/GVL_CONFIGS.TcGVL similarity index 100% rename from BasicComponents/POUs/GVL/GVL_CONFIGS.TcGVL rename to BasicComponents/GVLs/GVL_CONFIGS.TcGVL diff --git a/BasicComponents/POUs/Constants/GVL_TYPE_CONST.TcGVL b/BasicComponents/GVLs/GVL_TYPE_CONST.TcGVL similarity index 100% rename from BasicComponents/POUs/Constants/GVL_TYPE_CONST.TcGVL rename to BasicComponents/GVLs/GVL_TYPE_CONST.TcGVL diff --git a/BasicComponents/POUs/HMI/Datentypen/ST_HMI_ANALOG_MOTOR_DATA.TcDUT b/BasicComponents/HMI/Datentypen/ST_HMI_ANALOG_MOTOR_DATA.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/ST_HMI_ANALOG_MOTOR_DATA.TcDUT rename to BasicComponents/HMI/Datentypen/ST_HMI_ANALOG_MOTOR_DATA.TcDUT diff --git a/BasicComponents/POUs/HMI/Datentypen/ST_HMI_ANALOG_VALUE.TcDUT b/BasicComponents/HMI/Datentypen/ST_HMI_ANALOG_VALUE.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/ST_HMI_ANALOG_VALUE.TcDUT rename to BasicComponents/HMI/Datentypen/ST_HMI_ANALOG_VALUE.TcDUT diff --git a/BasicComponents/POUs/HMI/Datentypen/ST_HMI_ANALOG_VALVE_DATA.TcDUT b/BasicComponents/HMI/Datentypen/ST_HMI_ANALOG_VALVE_DATA.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/ST_HMI_ANALOG_VALVE_DATA.TcDUT rename to BasicComponents/HMI/Datentypen/ST_HMI_ANALOG_VALVE_DATA.TcDUT diff --git a/BasicComponents/POUs/HMI/Datentypen/ST_HMI_CONTROL_BUTTON.TcDUT b/BasicComponents/HMI/Datentypen/ST_HMI_CONTROL_BUTTON.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/ST_HMI_CONTROL_BUTTON.TcDUT rename to BasicComponents/HMI/Datentypen/ST_HMI_CONTROL_BUTTON.TcDUT diff --git a/BasicComponents/POUs/HMI/Datentypen/ST_HMI_INTEGER_VALUE.TcDUT b/BasicComponents/HMI/Datentypen/ST_HMI_INTEGER_VALUE.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/ST_HMI_INTEGER_VALUE.TcDUT rename to BasicComponents/HMI/Datentypen/ST_HMI_INTEGER_VALUE.TcDUT diff --git a/BasicComponents/POUs/HMI/Datentypen/ST_HMI_INTERLOCK.TcDUT b/BasicComponents/HMI/Datentypen/ST_HMI_INTERLOCK.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/ST_HMI_INTERLOCK.TcDUT rename to BasicComponents/HMI/Datentypen/ST_HMI_INTERLOCK.TcDUT diff --git a/BasicComponents/POUs/HMI/Datentypen/ST_HMI_VALVE_DATA.TcDUT b/BasicComponents/HMI/Datentypen/ST_HMI_VALVE_DATA.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/ST_HMI_VALVE_DATA.TcDUT rename to BasicComponents/HMI/Datentypen/ST_HMI_VALVE_DATA.TcDUT diff --git a/BasicComponents/POUs/HMI/Datentypen/T_INTERLOCK.TcDUT b/BasicComponents/HMI/Datentypen/T_INTERLOCK.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Datentypen/T_INTERLOCK.TcDUT rename to BasicComponents/HMI/Datentypen/T_INTERLOCK.TcDUT diff --git a/BasicComponents/POUs/HMI/Enum/E_HMI_ANALOG_VALUE_STATUS.TcDUT b/BasicComponents/HMI/Enum/E_HMI_ANALOG_VALUE_STATUS.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Enum/E_HMI_ANALOG_VALUE_STATUS.TcDUT rename to BasicComponents/HMI/Enum/E_HMI_ANALOG_VALUE_STATUS.TcDUT diff --git a/BasicComponents/POUs/HMI/Enum/E_HMI_BUTTON_FEEDBACK.TcDUT b/BasicComponents/HMI/Enum/E_HMI_BUTTON_FEEDBACK.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Enum/E_HMI_BUTTON_FEEDBACK.TcDUT rename to BasicComponents/HMI/Enum/E_HMI_BUTTON_FEEDBACK.TcDUT diff --git a/BasicComponents/POUs/HMI/Enum/E_HMI_MODE.TcDUT b/BasicComponents/HMI/Enum/E_HMI_MODE.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Enum/E_HMI_MODE.TcDUT rename to BasicComponents/HMI/Enum/E_HMI_MODE.TcDUT diff --git a/BasicComponents/POUs/HMI/Enum/E_HMI_MOTOR_STATUS.TcDUT b/BasicComponents/HMI/Enum/E_HMI_MOTOR_STATUS.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Enum/E_HMI_MOTOR_STATUS.TcDUT rename to BasicComponents/HMI/Enum/E_HMI_MOTOR_STATUS.TcDUT diff --git a/BasicComponents/POUs/HMI/Enum/E_HMI_VALVE_STATUS.TcDUT b/BasicComponents/HMI/Enum/E_HMI_VALVE_STATUS.TcDUT similarity index 100% rename from BasicComponents/POUs/HMI/Enum/E_HMI_VALVE_STATUS.TcDUT rename to BasicComponents/HMI/Enum/E_HMI_VALVE_STATUS.TcDUT diff --git a/BasicComponents/POUs/PRG_MAIN.TcPOU b/BasicComponents/PRG_MAIN.TcPOU similarity index 53% rename from BasicComponents/POUs/PRG_MAIN.TcPOU rename to BasicComponents/PRG_MAIN.TcPOU index 75b1bcd..a90dad3 100644 --- a/BasicComponents/POUs/PRG_MAIN.TcPOU +++ b/BasicComponents/PRG_MAIN.TcPOU @@ -4,20 +4,20 @@ _xError, rScaledValue=> ); @@ -179,13 +179,13 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // run analog input _fbAnalogInput( - iAnalogValue:= 1234, + i_iAnalogValue:= 1234, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, xReleaseLimitErrors := TRUE, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xInUnitTestMode := TRUE, xError=> _xError, rScaledValue=> ); @@ -229,12 +229,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // run analog input _fbAnalogInput( - iAnalogValue:= 1234, + i_iAnalogValue:= 1234, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xInUnitTestMode := TRUE, xError=> _xError, rScaledValue=> _rResult); @@ -281,12 +281,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // Check with active release signal _fbAI( - iAnalogValue:= 95, + i_iAnalogValue:= 95, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -304,10 +304,10 @@ AssertTrue(Condition:= _xResultErrorHigh, Message:= 'Error high is not active'); // Check without active release signal _fbAI( - iAnalogValue:= 95, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 95, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , @@ -365,12 +365,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; IF NOT _xErrorHighOffInitDone THEN _xErrorHighOffInitDone := TRUE; _fbAIErrorHighOff( - iAnalogValue:= 95, + i_iAnalogValue:= 95, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -382,10 +382,10 @@ IF NOT _xErrorHighOffInitDone THEN ELSE _fbErrorHighOffTimer(IN := TRUE, PT := timOffTime); _fbAIErrorHighOff( - iAnalogValue:= 50, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 50, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -454,12 +454,12 @@ _fbErrorHighOnTimer(IN := TRUE, PT := timOnTime); // Check with active release signal _fbAIErrorHighOn( - iAnalogValue:= 95, + i_iAnalogValue:= 95, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -518,12 +518,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // Error low with release _fbAI( - iAnalogValue:= 0, + i_iAnalogValue:= 0, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -542,10 +542,10 @@ AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active'); // Error low without release _fbAI( - iAnalogValue:= 0, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 0, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , @@ -602,12 +602,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; IF NOT _xErrorLowOffInitDone THEN _xErrorLowOffInitDone := TRUE; _fbAIErrorLowOff( - iAnalogValue:= 5, + i_iAnalogValue:= 5, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -619,10 +619,10 @@ IF NOT _xErrorLowOffInitDone THEN ELSE _fbErrorLowOffTimer(IN := TRUE, PT := timOffTime); _fbAIErrorLowOff( - iAnalogValue:= 50, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 50, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -688,12 +688,12 @@ _fbErrorLowOnTimer(IN := TRUE, PT := timOnTime); // Check with active release signal _fbAIErrorLowOn( - iAnalogValue:= 5, + i_iAnalogValue:= 5, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -753,12 +753,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // run analog input _fbAnalogInput( - iAnalogValue:= 3071, // 0,75 * 4095 = 3071,25 + i_iAnalogValue:= 3071, // 0,75 * 4095 = 3071,25 stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xError=> , xInUnitTestMode := TRUE, rScaledValue=> _rResult); @@ -807,12 +807,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // run AI to check for overrange error _fbAI( - iAnalogValue:= 50, + i_iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= TRUE, - xErrorCard:= , + i_xUnderrange:= FALSE, + i_xOverrange:= TRUE, + i_xErrorCard:= , xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -866,12 +866,12 @@ IF NOT _xOverrangeOffInitDone THEN _xOverrangeOffInitDone := TRUE; // run AI to check for overrange error _fbAIOverrangeOff( - iAnalogValue:= 50, + i_iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= TRUE, - xErrorCard:= , + i_xUnderrange:= FALSE, + i_xOverrange:= TRUE, + i_xErrorCard:= , xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -884,12 +884,12 @@ END_IF // run AI cyclically until overrange error is supposed to be off _fbAIOverrangeOff( - iAnalogValue:= 50, + i_iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= , + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= , xReleaseErrors := TRUE, xReleaseHardwareErrors := TRUE, xReleaseLimitErrors:= TRUE, @@ -945,12 +945,12 @@ _fbOverrangeOnTimer(IN := TRUE, PT := T#100MS); // run AI to check for overrange error _fbAIOverrangeOn( - iAnalogValue:= 50, + i_iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= TRUE, - xErrorCard:= , + i_xUnderrange:= FALSE, + i_xOverrange:= TRUE, + i_xErrorCard:= , xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1003,12 +1003,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // run AI to check for underrange error _fbAI( - iAnalogValue:= 50, + i_iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= TRUE, - xOverrange:= FALSE, - xErrorCard:= , + i_xUnderrange:= TRUE, + i_xOverrange:= FALSE, + i_xErrorCard:= , xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1062,12 +1062,12 @@ IF NOT _xUnderrangeOffInitDone THEN _xUnderrangeOffInitDone := TRUE; // run AI to check for underrange error _fbAIUnderrangeOff( - iAnalogValue:= 50, + i_iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= TRUE, - xOverrange:= FALSE, - xErrorCard:= , + i_xUnderrange:= TRUE, + i_xOverrange:= FALSE, + i_xErrorCard:= , xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1080,12 +1080,12 @@ END_IF // run AI cyclically until underrange error is supposed to be off _fbAIUnderrangeOff( - iAnalogValue:= 0, + i_iAnalogValue:= 0, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= , + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= , xReleaseErrors := TRUE, xReleaseHardwareErrors := TRUE, xReleaseLimitErrors:= TRUE, @@ -1141,12 +1141,12 @@ _fbUnderrangeOnTimer(IN := TRUE, PT := T#100MS); // run AI to check for underrange error _fbAIUnderrangeOn( - iAnalogValue:= 50, + i_iAnalogValue:= 50, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= TRUE, - xOverrange:= FALSE, - xErrorCard:= , + i_xUnderrange:= TRUE, + i_xOverrange:= FALSE, + i_xErrorCard:= , xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1200,12 +1200,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // Check with active release signal _fbAI( - iAnalogValue:= 85, + i_iAnalogValue:= 85, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1224,10 +1224,10 @@ AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active'); // Check without active release signal _fbAI( - iAnalogValue:= 85, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 85, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , @@ -1283,12 +1283,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; IF NOT _xWarningHighOffInitDone THEN _xWarningHighOffInitDone := TRUE; _fbAIWarningHighOff( - iAnalogValue:= 85, + i_iAnalogValue:= 85, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1300,10 +1300,10 @@ IF NOT _xWarningHighOffInitDone THEN ELSE _fbWarningHighOffTimer(IN := TRUE, PT := timOffTime); _fbAIWarningHighOff( - iAnalogValue:= 50, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 50, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1369,12 +1369,12 @@ _fbWarningHighOnTimer(IN := TRUE, PT := timOnTime); // Check with active release signal _fbAIWarningHighOn( - iAnalogValue:= 85, + i_iAnalogValue:= 85, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1433,12 +1433,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; // Warning low with release _fbAI( - iAnalogValue:= 15, + i_iAnalogValue:= 15, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1457,10 +1457,10 @@ AssertFalse(Condition:= _xResultErrorHigh, Message:= 'Error high is active'); // Warning low without release _fbAI( - iAnalogValue:= 15, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 15, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= FALSE, xError=> _xResultError, rScaledValue=> , @@ -1517,12 +1517,12 @@ _stAnalogEWConfig.stDelays := _stDelayConfig; IF NOT _xWarningLowOffInitDone THEN _xWarningLowOffInitDone := TRUE; _fbAIWarningLowOff( - iAnalogValue:= 15, + i_iAnalogValue:= 15, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1534,10 +1534,10 @@ IF NOT _xWarningLowOffInitDone THEN ELSE _fbWarningLowOffTimer(IN := TRUE, PT := timOffTime); _fbAIWarningLowOff( - iAnalogValue:= 50, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_iAnalogValue:= 50, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , @@ -1603,12 +1603,12 @@ _fbWarningLowOnTimer(IN := TRUE, PT := timOnTime); // Check with active release signal _fbAIWarningLowOn( - iAnalogValue:= 15, + i_iAnalogValue:= 15, stAnalogIOConfig := _stAnalogInputConfig, stAnalogEWConfig := _stAnalogEWConfig, - xUnderrange:= FALSE, - xOverrange:= FALSE, - xErrorCard:= FALSE, + i_xUnderrange:= FALSE, + i_xOverrange:= FALSE, + i_xErrorCard:= FALSE, xReleaseLimitErrors:= TRUE, xError=> _xResultError, rScaledValue=> , diff --git a/BasicComponents/POUs/Unittests/AOTests/FB_AnalogOutputTest.TcPOU b/BasicComponents/Unittests/AOTests/FB_AnalogOutputTest.TcPOU similarity index 96% rename from BasicComponents/POUs/Unittests/AOTests/FB_AnalogOutputTest.TcPOU rename to BasicComponents/Unittests/AOTests/FB_AnalogOutputTest.TcPOU index 3098565..a98217a 100644 --- a/BasicComponents/POUs/Unittests/AOTests/FB_AnalogOutputTest.TcPOU +++ b/BasicComponents/Unittests/AOTests/FB_AnalogOutputTest.TcPOU @@ -63,7 +63,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError, xInUnitTestMode := TRUE); @@ -112,7 +112,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError, xInUnitTestMode := TRUE); @@ -170,7 +170,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError, xInUnitTestMode := TRUE); @@ -198,7 +198,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError); // reading error from HMI interface @@ -251,7 +251,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError, xInUnitTestMode := TRUE); @@ -266,7 +266,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError); // and evaluate result @@ -280,7 +280,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError); // and evaluate result @@ -294,7 +294,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError); // and evaluate result @@ -308,7 +308,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError); // and evaluate result @@ -359,7 +359,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError, xInUnitTestMode := TRUE); @@ -410,7 +410,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError, xInUnitTestMode := TRUE); @@ -454,7 +454,7 @@ _fbAnalogOutput( xReleaseErrors := , xConfirmAlarms := , stHMIInterface := _stHMIInterface, - iAnalogValue => _iAnalogOutput, + o_iAnalogValue => _iAnalogOutput, xError => _xError, xInUnitTestMode := TRUE); diff --git a/BasicComponents/POUs/Unittests/AnalogValveTests/FB_ValveAnalog_Test.TcPOU b/BasicComponents/Unittests/AnalogValveTests/FB_ValveAnalog_Test.TcPOU similarity index 93% rename from BasicComponents/POUs/Unittests/AnalogValveTests/FB_ValveAnalog_Test.TcPOU rename to BasicComponents/Unittests/AnalogValveTests/FB_ValveAnalog_Test.TcPOU index 44cd6fe..00f6ad6 100644 --- a/BasicComponents/POUs/Unittests/AnalogValveTests/FB_ValveAnalog_Test.TcPOU +++ b/BasicComponents/Unittests/AnalogValveTests/FB_ValveAnalog_Test.TcPOU @@ -63,7 +63,7 @@ _fbValve.ReqAutomaticMode(); _fbValve.rSPAutomatic := 100; // needs one cycle to write values (scaled feedback ~75, tolerance 95 to 105) -_fbValve(xAutomaticOpen := TRUE, stValveConfig := _stValveConfig, stHMIInterface := _stHMIValve, iFeedbackValue := 3000, xError => _xError, xInUnitTestMode := TRUE); +_fbValve(xAutomaticOpen := TRUE, stValveConfig := _stValveConfig, stHMIInterface := _stHMIValve, i_iFeedbackValue := 3000, xError => _xError, xInUnitTestMode := TRUE); // assert result AssertTrue(_xError, 'Expected NotInRangeError, got no error.'); @@ -102,7 +102,7 @@ _xOpenFeedback := FALSE; _xCloseFeedback := FALSE; _fbValve.xReleaseManualMode := TRUE; _fbValve.ReqManualMode(); -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); // We should now be in manual mode @@ -112,7 +112,7 @@ AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not chang // Test closed _xOpenFeedback := FALSE; _xCloseFeedback := TRUE; -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); AssertTrue(Condition := _fbValve.IsClosed, Message := 'Valve should be closed'); AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open'); @@ -120,14 +120,14 @@ AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open') _xOpenFeedback := TRUE; _xCloseFeedback := FALSE; _stHMIValve.stSetpoint.rValue := 100.0; -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve should be open'); AssertFalse(Condition := _fbValve.IsClosed, Message := 'Valve should not be closed'); // Test open and close _xOpenFeedback := TRUE; _xCloseFeedback := TRUE; -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); AssertFalse(Condition := _fbValve.IsClosed OR _fbValve.IsOpen, Message := 'Valve should not signal open or closed with both feedback signals high'); TEST_FINISHED();]]> @@ -161,7 +161,7 @@ _stValveConfig.xHasAnalogFeedback := TRUE; _fbValve( stValveConfig := _stValveConfig, stHMIInterface := _stHMIValve, - xFeedbackOverrange := TRUE, + i_xFeedbackOverrange := TRUE, xError => _xError, xInUnitTestMode := TRUE); @@ -199,7 +199,7 @@ _stValveConfig.xHasAnalogFeedback := TRUE; _fbValve( stValveConfig := _stValveConfig, stHMIInterface := _stHMIValve, - xFeedbackUnderrange := TRUE, + i_xFeedbackUnderrange := TRUE, xError => _xError, xInUnitTestMode := TRUE); @@ -487,7 +487,7 @@ IF _fbValve.IsOpen THEN // Valve should now be closed AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open with active Interlock'); AssertTrue(Condition := _fbValve.IsClosed, Message := 'Close output not active with active Interlock'); - AssertEquals_INT(Expected := 0, Actual := _fbValve.iSetpoint, Message := 'Analog output should be zero'); + AssertEquals_INT(Expected := 0, Actual := _fbValve.o_iSetpoint, Message := 'Analog output should be zero'); ELSE AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test'); END_IF @@ -535,7 +535,7 @@ IF _fbValve.IsOpen THEN // Valve should now be closed AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open with active Interlock'); AssertTrue(Condition := _fbValve.IsClosed, Message := 'Close output not active with active Interlock'); - AssertEquals_INT(Expected := 0, Actual := _fbValve.iSetpoint, Message := 'Analog output should be zero'); + AssertEquals_INT(Expected := 0, Actual := _fbValve.o_iSetpoint, Message := 'Analog output should be zero'); ELSE AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test'); END_IF diff --git a/BasicComponents/POUs/Unittests/ReleaseSignalTests/FB_ReleaseSignalTest.TcPOU b/BasicComponents/Unittests/ReleaseSignalTests/FB_ReleaseSignalTest.TcPOU similarity index 100% rename from BasicComponents/POUs/Unittests/ReleaseSignalTests/FB_ReleaseSignalTest.TcPOU rename to BasicComponents/Unittests/ReleaseSignalTests/FB_ReleaseSignalTest.TcPOU diff --git a/BasicComponents/POUs/Unittests/UtilitiesTests/FB_BlinkerTest.TcPOU b/BasicComponents/Unittests/UtilitiesTests/FB_BlinkerTest.TcPOU similarity index 100% rename from BasicComponents/POUs/Unittests/UtilitiesTests/FB_BlinkerTest.TcPOU rename to BasicComponents/Unittests/UtilitiesTests/FB_BlinkerTest.TcPOU diff --git a/BasicComponents/POUs/Unittests/UtilitiesTests/FB_HashFNV1a_32BitTest.TcPOU b/BasicComponents/Unittests/UtilitiesTests/FB_HashFNV1a_32BitTest.TcPOU similarity index 100% rename from BasicComponents/POUs/Unittests/UtilitiesTests/FB_HashFNV1a_32BitTest.TcPOU rename to BasicComponents/Unittests/UtilitiesTests/FB_HashFNV1a_32BitTest.TcPOU diff --git a/BasicComponents/POUs/Unittests/UtilitiesTests/FB_PT1Test.TcPOU b/BasicComponents/Unittests/UtilitiesTests/FB_PT1Test.TcPOU similarity index 100% rename from BasicComponents/POUs/Unittests/UtilitiesTests/FB_PT1Test.TcPOU rename to BasicComponents/Unittests/UtilitiesTests/FB_PT1Test.TcPOU diff --git a/BasicComponents/POUs/Unittests/UtilitiesTests/FB_RampGeneratorTest.TcPOU b/BasicComponents/Unittests/UtilitiesTests/FB_RampGeneratorTest.TcPOU similarity index 100% rename from BasicComponents/POUs/Unittests/UtilitiesTests/FB_RampGeneratorTest.TcPOU rename to BasicComponents/Unittests/UtilitiesTests/FB_RampGeneratorTest.TcPOU diff --git a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestHMI.TcPOU b/BasicComponents/Unittests/ValveTests/FB_ValveTestHMI.TcPOU similarity index 88% rename from BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestHMI.TcPOU rename to BasicComponents/Unittests/ValveTests/FB_ValveTestHMI.TcPOU index 356cc0a..4d0d771 100644 --- a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestHMI.TcPOU +++ b/BasicComponents/Unittests/ValveTests/FB_ValveTestHMI.TcPOU @@ -46,13 +46,13 @@ _fbValve( wProcessINTLKUsed:= _wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= _stValveConfig, - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); // Valve should now be in manual mode and xRequest should have been reset AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not change to manual mode'); @@ -90,13 +90,13 @@ _fbValve( wProcessINTLKUsed:= _wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= _stValveConfig, - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); AssertFalse(Condition := _stHMIValve.stManualButton.xRelease, Message := 'Manual mode button was released but should not have been'); @@ -108,13 +108,13 @@ _fbValve( wProcessINTLKUsed:= _wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= , - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); AssertTrue(Condition := _stHMIValve.stManualButton.xRelease, Message := 'Manual mode button was not released but should have been'); @@ -151,13 +151,13 @@ _fbValveOC( wProcessINTLKUsed:= _wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= _stValveConfig, - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); // Valve should now be in manual mode AssertTrue(Condition := _fbValveOC.IsInManualMode, Message := 'Valve did not change to manual mode pre test'); @@ -170,16 +170,16 @@ _fbValveOC( wProcessINTLKUsed:= _wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= , - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); // test for valve state and HMI feedback -AssertTrue(Condition := _fbValveOC.xOpenValve, Message := 'Valve did not open as requested by hmi button'); +AssertTrue(Condition := _fbValveOC.o_xOpenValve, Message := 'Valve did not open as requested by hmi button'); AssertFalse(Condition := _stHMIValve.stOpenButton.xRequest, Message := 'Valve did not reset open request'); _eExpectedOpenButtonFeedback := E_HMI_BUTTON_FEEDBACK.ACTIVE; _eExpectedCloseButtonFeedback := E_HMI_BUTTON_FEEDBACK.NONE; @@ -194,16 +194,16 @@ _fbValveOC( wProcessINTLKUsed:= _wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= , - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); // test for valve state and HMI feedback -AssertTrue(Condition := _fbValveOC.xCloseValve, Message := 'Valve did not close as requested by hmi button'); +AssertTrue(Condition := _fbValveOC.o_xCloseValve, Message := 'Valve did not close as requested by hmi button'); AssertFalse(Condition := _stHMIValve.stCloseButton.xRequest, Message := 'Valve did not reset close request'); _eExpectedOpenButtonFeedback := E_HMI_BUTTON_FEEDBACK.NONE; _eExpectedCloseButtonFeedback := E_HMI_BUTTON_FEEDBACK.ACTIVE; @@ -243,13 +243,13 @@ _fbValve( wProcessINTLKUsed:= wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= _stValveConfig, - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); // Valve should now be in manual mode AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not change to manual mode pre test'); @@ -265,15 +265,15 @@ _fbValve( wProcessINTLKUsed:= wInterlocksUsed, stHMIInterface:= _stHMIValve, xError=> , - xOpenFeedback:= , - xCloseFeedback:= , + i_xOpenFeedback:= , + i_xCloseFeedback:= , xReleaseErrors:= , xConfirmAlarms:= , stValveConfig:= , - xOpenValve=> , - xCloseValve=> ); + o_xOpenValve=> , + o_xCloseValve=> ); -AssertFalse(Condition := _fbValve.xOpenValve, Message := 'Valve did not block manual open command with active interlock'); +AssertFalse(Condition := _fbValve.o_xOpenValve, Message := 'Valve did not block manual open command with active interlock'); TEST_FINISHED();]]> diff --git a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTimoutClose.TcPOU b/BasicComponents/Unittests/ValveTests/FB_ValveTestTimoutClose.TcPOU similarity index 89% rename from BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTimoutClose.TcPOU rename to BasicComponents/Unittests/ValveTests/FB_ValveTestTimoutClose.TcPOU index b0e27bf..b0bd758 100644 --- a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTimoutClose.TcPOU +++ b/BasicComponents/Unittests/ValveTests/FB_ValveTestTimoutClose.TcPOU @@ -48,8 +48,8 @@ CASE _iState OF 10: // set close feedback after 50ms and call valve block _xOpenFeedback := FALSE; - _xCloseFeedback := _fbValveTimeout.xCloseValve AND _fbDelayFeedbackSignalTimer.Q; - _fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); + _xCloseFeedback := _fbValveTimeout.o_xCloseValve AND _fbDelayFeedbackSignalTimer.Q; + _fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); // test timeout after 200ms IF _fbTimeoutCloseTestTimer.Q THEN diff --git a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTimoutOpen.TcPOU b/BasicComponents/Unittests/ValveTests/FB_ValveTestTimoutOpen.TcPOU similarity index 89% rename from BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTimoutOpen.TcPOU rename to BasicComponents/Unittests/ValveTests/FB_ValveTestTimoutOpen.TcPOU index 502ee48..b72fc3b 100644 --- a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTimoutOpen.TcPOU +++ b/BasicComponents/Unittests/ValveTests/FB_ValveTestTimoutOpen.TcPOU @@ -48,9 +48,9 @@ CASE _iState OF 10: // set open feedback after 50ms and call valve block - _xOpenFeedback := _fbValveTimeout.xOpenValve AND _fbDelayFeedbackSignalTimer.Q; + _xOpenFeedback := _fbValveTimeout.o_xOpenValve AND _fbDelayFeedbackSignalTimer.Q; _xCloseFeedback := FALSE; - _fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); + _fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); // test timeout after 200ms IF _fbTimeoutOpenTestTimer.Q THEN diff --git a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTriggerTimoutClose.TcPOU b/BasicComponents/Unittests/ValveTests/FB_ValveTestTriggerTimoutClose.TcPOU similarity index 92% rename from BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTriggerTimoutClose.TcPOU rename to BasicComponents/Unittests/ValveTests/FB_ValveTestTriggerTimoutClose.TcPOU index 1ef858b..20d0afe 100644 --- a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTriggerTimoutClose.TcPOU +++ b/BasicComponents/Unittests/ValveTests/FB_ValveTestTriggerTimoutClose.TcPOU @@ -50,7 +50,7 @@ CASE _iState OF // both feedback false and call valve block _xOpenFeedback := FALSE; _xCloseFeedback := FALSE; - _fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); + _fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); // test timeout after 200ms IF _fbTimeoutCloseTestTimer.Q THEN diff --git a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTriggerTimoutOpen.TcPOU b/BasicComponents/Unittests/ValveTests/FB_ValveTestTriggerTimoutOpen.TcPOU similarity index 92% rename from BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTriggerTimoutOpen.TcPOU rename to BasicComponents/Unittests/ValveTests/FB_ValveTestTriggerTimoutOpen.TcPOU index 2dd502d..d793682 100644 --- a/BasicComponents/POUs/Unittests/ValveTests/FB_ValveTestTriggerTimoutOpen.TcPOU +++ b/BasicComponents/Unittests/ValveTests/FB_ValveTestTriggerTimoutOpen.TcPOU @@ -51,7 +51,7 @@ CASE _iState OF // both feedback false and call valve block _xOpenFeedback := FALSE; _xCloseFeedback := FALSE; - _fbValveTimeout(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); + _fbValveTimeout(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, xInUnitTestMode := TRUE, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig); // test timeout after 200ms IF _fbTimeoutOpenTestTimer.Q THEN diff --git a/BasicComponents/POUs/Unittests/ValveTests/FB_Valve_Test.TcPOU b/BasicComponents/Unittests/ValveTests/FB_Valve_Test.TcPOU similarity index 88% rename from BasicComponents/POUs/Unittests/ValveTests/FB_Valve_Test.TcPOU rename to BasicComponents/Unittests/ValveTests/FB_Valve_Test.TcPOU index 3979e99..17fd003 100644 --- a/BasicComponents/POUs/Unittests/ValveTests/FB_Valve_Test.TcPOU +++ b/BasicComponents/Unittests/ValveTests/FB_Valve_Test.TcPOU @@ -53,7 +53,7 @@ _xOpenFeedback := FALSE; _xCloseFeedback := FALSE; _fbValve.xReleaseManualMode := TRUE; _fbValve.ReqManualMode(); -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); // We should now be in manual mode AssertTrue(Condition := _fbValve.IsInManualMode, Message := 'Valve did not changed to manual mode'); @@ -65,7 +65,7 @@ AssertFalse(Condition := _fbValve.IsClosed OR _fbValve.IsOpen, Message := 'Valve // Test closed _xOpenFeedback := FALSE; _xCloseFeedback := TRUE; -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback,stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback,stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); AssertTrue(Condition := _fbValve.IsClosed, Message := 'Valve should be closed'); AssertFalse(Condition := _fbValve.IsOpen, Message := 'Valve should not be open'); @@ -74,14 +74,14 @@ _xOpenFeedback := TRUE; _xCloseFeedback := FALSE; _stHMIValve.stOpenButton.xRequest := TRUE; _fbValve(stHMIInterface := _stHMIValve); -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve should be open'); AssertFalse(Condition := _fbValve.IsClosed, Message := 'Valve should not be closed'); // Test open and close _xOpenFeedback := TRUE; _xCloseFeedback := TRUE; -_fbValve(xOpenFeedback := _xOpenFeedback, xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); +_fbValve(i_xOpenFeedback := _xOpenFeedback, i_xCloseFeedback := _xCloseFeedback, stHMIInterface := _stHMIValve, stValveConfig := _stValveConfig, xInUnitTestMode := TRUE); AssertFalse(Condition := _fbValve.IsClosed OR _fbValve.IsOpen, Message := 'Valve should not signal open or closed with both feedback signals high'); TEST_FINISHED();]]> @@ -347,16 +347,16 @@ IF _fbValve.IsOpen THEN _fbValve(wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve); // Valve should now be closed - AssertFalse(Condition := _fbValve.xOpenValve, Message := 'Valve should not be open with active Interlock'); - AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock'); + AssertFalse(Condition := _fbValve.o_xOpenValve, Message := 'Valve should not be open with active Interlock'); + AssertTrue(Condition := _fbValve.o_xCloseValve, Message := 'Close output not active with active Interlock'); // Test the same with open valve when interlock active _stValveConfig.xNormallyOpen := TRUE; _fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve); // Valve should now be open - AssertTrue(Condition := _fbValve.xOpenValve, Message := 'Valve should be open with active Interlock and inverted config'); - AssertFalse(Condition := _fbValve.xCloseValve, Message := 'Close output active with active Interlock and inverted config'); + AssertTrue(Condition := _fbValve.o_xOpenValve, Message := 'Valve should be open with active Interlock and inverted config'); + AssertFalse(Condition := _fbValve.o_xCloseValve, Message := 'Close output active with active Interlock and inverted config'); ELSE AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test'); END_IF @@ -405,16 +405,16 @@ IF _fbValve.IsOpen THEN _fbValve(wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve); // Valve should now be closed - AssertFalse(Condition := _fbValve.xOpenValve, Message := 'Valve should not be open with active Interlock'); - AssertTrue(Condition := _fbValve.xCloseValve, Message := 'Close output not active with active Interlock'); + AssertFalse(Condition := _fbValve.o_xOpenValve, Message := 'Valve should not be open with active Interlock'); + AssertTrue(Condition := _fbValve.o_xCloseValve, Message := 'Close output not active with active Interlock'); // Test the same with open valve when interlock active _stValveConfig.xNormallyOpen := TRUE; _fbValve(stValveConfig := _stValveConfig, wProcessINTLK := _wInterlocks, wProcessINTLKUsed := _wInterlocksUsed, stHMIInterface := _stHMIValve); // Valve should now be open - AssertTrue(Condition := _fbValve.xOpenValve, Message := 'Valve should be open with active Interlock and inverted config'); - AssertFalse(Condition := _fbValve.xCloseValve, Message := 'Close output active with active Interlock and inverted config'); + AssertTrue(Condition := _fbValve.o_xOpenValve, Message := 'Valve should be open with active Interlock and inverted config'); + AssertFalse(Condition := _fbValve.o_xCloseValve, Message := 'Close output active with active Interlock and inverted config'); AssertTrue(Condition := _stHMIValve.stOpenButton.eFeedback = E_HMI_BUTTON_FEEDBACK.ACTIVE, Message := 'Open button should be set active with active Interlock and inverted config'); ELSE AssertTrue(Condition := _fbValve.IsOpen, Message := 'Valve did not open before the test'); From 8f93e0f07665d701d267923644934faae224aa22 Mon Sep 17 00:00:00 2001 From: "m.heisig" Date: Thu, 19 Mar 2026 19:40:53 +0100 Subject: [PATCH 3/4] Fixed AxisPTP MoveVelocity --- BaseComponents.tsproj | 2 +- BasicComponents.library | Bin 1035852 -> 1038391 bytes .../Components/AxisPTP/POUs/FB_AxisPTP.TcPOU | 8 ++++---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/BaseComponents.tsproj b/BaseComponents.tsproj index 5d534d2..8c93cc4 100644 --- a/BaseComponents.tsproj +++ b/BaseComponents.tsproj @@ -136,7 +136,7 @@ - + BasicComponents Instance {08500001-0000-0000-F000-000000000064} diff --git a/BasicComponents.library b/BasicComponents.library index 8ba660df19a4d1ef4605fdfe616d1de09561a501..8b2a14fd8f2e82cf527016e011a97027b5dd82a7 100644 GIT binary patch delta 57456 zcmb@PcU%+6+rZgudUk^-R`3LgU{ExLP}Docjx|cqD=LN%6bnf4&QtFM3-*Gej2*Bm z7O<^du{RWZN3r+b>-%g1rm*jO{PF(o6Uojz^L?IqraUvVoBf?w(45I@?xF8U^4(or zT*NNz6OwyE zGqDVjghI@+7JkTkjv5oc)^hn2#Zmm)!HF3thv+rx)@MN+AY8oIe_RB0U0i&;(a9jz z3>P2v9~Xhb#igG2r2PFJ>{UJX9~S|b=;!_O#BA1h7eDqN7eRfn+M5vx6WA*y`;Uvj zAFT84FtB$9du4&T2pYP$1bA<+wzCB!jdBTKb6fMW7*Ew1LWcOEh@cVdQ%EAASU}V4X>&*2RVd1Zrb+0fB+W zkbuyjP;G!JBv29@6syweLSkc46yeoPM+C9*E-zNq%P8;jL$$j7 z=whQ|gF{0#(K?F(*Z7q?R32U4faG4z{-_YL#3R7cK^qOf<%0$b%_f`VfMRUzPWO$WoS^3?MFt`M%w-|a>{R-xUpSa<(H{^dOxLJhI_ zd-1g`StyU{<-Tq^hm;pRz>V$9@dIDGH-?T3quWJ^+~oDqe!7ACS#g8%V4i$HWwuCR z?~DaMin!p$3fBf`mE6z0q%lXKJMsb6No?fFYN&^6FK($ruJIPB+5e6>fSOh6LZb430vXZdSDUyLlv{D)(^@FXWK=x3bmD z!<8?2q8F9>x}V+Nu)GIisw7y<#JNG6(A6q^-8+;7l$Yx2o?vn9so@U~H3bvdc}R)6 zRjrTSy9c{pZq=xKk(O15TEJ0WiC@s3s(sv_4d9ScS1YYb*3{l;MYaD$s%CYo)UZ9b z>!9h?qugC)a(s(W|Fj2*-bt-c}P^>8iW=|uGp}^R{fap+N zklGxq4Gjr0BcsL(jqz~rz(p=Um@0&X!DO*#C-1Jw-X3j;Mg?se8IDugT>+<&_tnu$Jo_IK~xn8S-hYg_y2+qXMcq5HM_ zyZ7nAA!Yh0E|_h${bR3RZ6U35UKF2o!VsE$zwL>q(Pn>IQqFeXG36cdCJ z!@ZHBj(Z0#aCui(fEbO+swS26oQIe?aqgd%s>*keKribUSjS7Af%3hg+(T}1NGZIn z{Wkc;hZr=^JIXyzq%O~*>sn`uw&!b}VmlhUGJ%<*s}^R8t#$p~cQ)cE^scTI-TG74 zvuKb{lsjtaEES%BZurED!@;+%JD<9vNJW&pXaI-Q5rtLiK-&)8&@c6(+<6%sQu+0) zQjPnogOQ(al>5u$98&Xqtx_9TrEf%){G!~YaT=#8gI#0%;zL-wCXL@U!M@F*k+mTv zSSJM=)!KkSRV=JdVglhZHdqxH6Km8#=eG3c@cQl@zDzGqF5l=CLPDblv-V62uesFT z9uo{9liC~_UT*;F$JN%8gJB4Sy6K;Kr~wVAZw1>Uw??u z9%Y>Smo4S1ikkTkwKVP?bx$9(%|Fil(QOW?paw(TSXN};TTCR_eLPVD;|yN6fIo(dq@Rl22d zru?xZ%@%!2RQ1t#Rj_-%l^kwAqZ(i-67zXUhONjcb$v8c9qeAYh@;3}b)2QrRsA(} z>?<9l2@X~pHEP%km{l;t#;OBCW7rLWE+{Bi6Q~Og3DiNQ13Pe0%QrxUa4^y==2L4_ za$9%I*49UDv?1x zR;l2$Z8W;6i*g@T!XXtAWR?2HG#HAG21U7tx$4T>)hsx^GCQ)!H1GFz^LCw9FmK-v z_UA5CFT{$T8*#cmnjaG7-YJL!Ef2M#-$&fuYlj}y8qnK9{oViV%~9xm=wQoGOX_XB zX5Y*vjXGGX34*0TNHDudP^(~4)oB9EvC-yGO>7KIvzDQ@vx$2LE^zslt^mR<;NtP2h>Mr(8d8kI4|sEbvpLNz9&KkpTFpGQ34 z5vgvjO~vqUs$0liUa-rovE^%C-oOg!fUamA7DLnC{uoJMWS~(Sq6>!j6QWibVbTu? z4uEZvCO{Q!3XV}3168IV4aykq75$J$JaRDbKCcB>8a8bYmyM=h-i>5WHhzK+yNj=o zn#9qH_K$f_cu#q@qXxFmJ+1G**}jcKH5y}3G;Ho*$U+;dLSh0!LPJ^4s*OQ0F(EpY zCYYVS`aI(i&mC;m1-lGB$7QecF1tc1*wqtjU$EJ?I_la~|MLqT@zO!xGhQ?gd}N{? zaw%Z7y2`1p+>$C5JXd}18wM6do=FVfELtoC4c`{o|Xbn-oKJo&@! ztP5PaT--0dLsOa?YD^#}ma}{G-u*k!hvs_iBr=_}w>$qU7pwKMm;c!8CR)@-OIrB& zO(v&U?4Igu_jmp9k9Kx{4+pzzgn1~Zf!*U+Ck?jvXssfcqfJ-&{d*Pl3Nv_4CuaaY zgPch^`ka(MT8vJF>6Hj@vsgF$U%1~U)O>~7v^03mCNlwt$vIBAi}!{^qRlP!%DI4> zXY(qK;<9ee{_gImQ7c1@`Q(CfUj60q@mgqJD}CTXa;}3{`;X^h9gCeH`r%a_QS_~~p~ez&X*pB*Zv7gf z0d4ew%g7uDQ@L3s->=H;OikzvrdDn1Ll0!H; z+T^p;SaiBwWZisn1JE~;o5;;%d3^QCQzoJI?e*F%B*Adv3X0aMRBDwezzheEuCoYn*#=1vFUJ zu$J9Q!Vb|G+jP`eUmu<8T1R`HBrZ6(;~Z&S+l;%<<&PHrgVK<%KCy`I_W*2*V?BT+Vo0-`d-S2Mj zyiYy=+(Yt_6K>DG6>Ct>2)*(#;GWp(7Ic;icVgYbfv70L;Q5q%2DsN^;cms$4M)mIz4jg8-rM5ia~&6M zOi`6EyY5}*H|XAHBYkRoAU~4toR;gaO|9P`c@Mq+C-R*`xa3A_dZqcH2|Wz8Ka*d; z()q+!=lIyg`;HWS?4j3w15>}-Of4G1W$Mw|>3i%<9rZhyx}>L1^;CWu-`Uik(kOJj zXE*=R{BI7Ha+8JHob%|{Uk$a#@W=8ki%`DPB6P?=>J&Qqt6rPVKTnS5Lx;4kmgBRy zEbYh`Gwm$B@dsF%{F_gW3H*uWETzWB<)d}K>HR11)A{y`(94Io(6_x;T|xDKH`JcY zpJFj}s*l@R}J%>HzXg|l|-N}z4iWc_?ZrdE_upjXly-&4jt*;!(*<+%z4gc zrq0~85ry{A2hIoFBD?*Kd)1#gTvX$i;`b=9^G+WhzXkk-7XBi>)5foVbj~-s zox=LQ5U75O@=#`hSF&vl$gOSC@s|Z?VU(dp4u5gE7F+zv?<*KeSzszF!a%a!fJ~R4(o#n34V7b!hpxAbUW}pkR{l1NBey#{k_=ofN0~8t?G8S%lW)HkD2vAL7yQD}*V_AC>4R#TBkS(s z?*{T7{$73ozx?u@e|^&sG{dY{?&I&^+ePCK`?;WBR%UCEB-Y?rOzsEhP4a+~Cr5rA z%13|4>gyi_oLzLT+?>P2&~;BPp_f2A#6JwQ(ZmraS_4V*9AxaLR~`kLU33oe<-*Nq zlJ^t3($C;|jDH+(56KfwxDo%{yNNpV*J}#_XBVAUcjm%nWYT)}2^@HI2hOwb^nTFg z-}LwKJ;^@>^yg%e6aCV%aT#_!zIlJ>@%`gGl&3+NUF;q)flHa>(D!9%O`O5=4F4?9 z-;n2==zpYEmLbmpdgXb**~RX&>$!08f73hB>;VP{))&fk(L;HQ3J@_+?|+eh-l2<% zE^@I(ed{$EjTp!V>q}tTeB!cm7hNJc^$&V7P_MiKw%G;iE04H%uCIbTka-Xs81b)` zvn^*tlc(tPAie)J{uKw?ye78b=t08;+XkYJgW2$W-C|p@vu)QsynaPH2kVtLz&5+^ z%+1^9+O-Jj;^9z;f3uuzJ^D?bf^y>Z{w4ey4z|_0#AVy}g<%x(NMPgfEsJfpoo(~} zsl)D%Sh8Q3K-z{g`z26hspu{11|9kv94z|^+62{@T8v;qk;`%Ts4tT8w`(7d1@Q`#*+}^T zc)9$KPV>h2yK}FjqCfS@Pk^(Fl%4yw!vQ{4X|Aeg<4V|BDlDe|i@a+V+=T z`xS6@k@Ds-E?n)VgD=^w%bF*{6lxmg1A+5fIY&16i8+QA4b%I7=YMr@WcVvCbhqH$ z-B69c4V}00Qw8j-lqPUmm`|?yBAb0EiJimQrzXv@F+oPHE(o^V@Hk$e#vBAkGg?!C zNvF~U!3`sAP^=Mc``asGw1D^-zj=c5Mu@Q(R{SP zavoEyUMr4v(aoQ<#?Fylhk_&BNBFcKCrB5J7dWnsvM;aCV;`|#muqajLxTfVF*Sp#h<$SY1GLkX9EM7#yez(P~ikBQL`Q0WncvsW`V0&K0i^xUAxRLp2nt zKTLZP`{vrv09{BB+{F)7g#;Ki zDtKfk+GLD2s$<|uoj}%iKg|*lv#q}4Qp-M5>QfOEc*}CE82M#O9s7HVp`k%0omw3m zpi=3e4cRBOjBs)U4QV!+0)vdf8l&}|Vy1w=4&7>&AlT(w8!k_jYtD-300S-egvV4_ zxWeuPE#Yri?9@p0(997Ka~lwv$)abe^~TePY%vH2@v>sg^`yZI!`|m%68jmrcsBx7n2UxGW&d5UZ$LP`F zaX*UgleFRJtMh9Fl%U#U4K>yZ)|IQsv8+Em(ZsR(X6pq+9+%5Mui#?7ThXVpov&_; z1Yb29=TjqJutDH_6E>oz?gD!9=dXo`)2CtqSs0V=gIFgDg`f(Mpj*xT{SodRN)gAMG^;WEJTg!q3`*(by; z4etALZ8{2`px5jc5PKXn?6eM!nd-J2t>5VCnPF(#1cUcpL4jbOlN+0y^`B>RW8TF2 zsK>-QNI%)l`~PJAai~fcv|^&c`=H>Epo`;lnrceu@B`_Bzo){GZa2vT{W8U^K`C_L zZ(N4nr>{-0>rznA4;`H3Q{$-MSUI~7w5~d1=45@d;{xIYmn(*(a%uQ==~nwwv-N49 zVdG?<8ij(B0_U3t3kw1lqGyx!no|Ozh)YGC6Q!G3@5gHA5dCcl)c*Y+dKi5VF$A%hJ>Y!+2j3q3b6%gmFVS!7lwIlr}%JNeK z_MwC4g55vcckR$noyr&;6deGa7#`{hQU?VXRXTWDHzp=9Mx%kJJalHulP2c{#03Xe zoQ1BM~QWd;z$ZHeALVF5I4y!rticOt=*w zcn!EWg11h%K*931C>ZIL?*RAShMVEho};p4aPl&ghYX${1RnwSN$}YTcb;kb6Y`p+ zSAGH9R~v3p4=&u&A$1gJ?kt1nH^Fznr3%x8j#Cl!yW%O5%!bECgck*4gg;u=Z5bDC zeNf&QyMvnM6WQ5ewvX>v;W(j8nl2pgM90J9>ezLo=M$kD`DJ=2CxEhvHf4Vnaw*&E znNu4L%rtmT5>5vC6ya1Sdg>GDzvyZv9I^v$x(zq&4Hqu4`RS#0wr5QO+s9!a-x>L|^ES z7NWIt^vZdFn{UHqz2d_0n|Qk--?;|Q1;T}ZTO`bK!o^jZH5z5k)hn|Bmt(_i23S( z=tg%I`uJ`a?g08u;Vvio?Ga}h*>$5jGoTx>r}Mi(*&drR|K?oEBsC&K(Sk(=&%MF| zpzjmzccM#$qk<8YrB@yR+(8>|-E=OTU)-Pl(6}r(1r{C#+!5hXCtTC-DYMX9z#RkJ zaT_j1(22tpBWo|4iQ=;jo+pHbfIBHX<%IkB%gAA+)^(ucrhjaAG3xK<5!!4Y|g@nPRotU?V(t06%hr zB?J7bCIp`OgeRnpW_Xs;92^~rx}Nv$b4y6v7TOCMrCnad)*?+NciwI2u{3d74U7Y_clL5}`h1`$|z zNBG$0%Ej)TIr>fP`w%zud>KSw;ZtBf6Fzrx<-nQkOHkBuh`@k*X~TKzxp4gY_fMir z%OL^_Ujy!q@U0V0x}g0S)P4m-V8GeUwSWD^iEG-!1r@9?c)k~Y0Nh96CnsFJ5Ofo% zSL&6Y0cSUxB`)H^4dlJkqtz=7o?nDt0ryS#-3d48R@+sm)+)U=Rdh#~Ci)S9|ESW1 z!*{Ce;OchMPt+Wkeh#ei@f|H1Ba%tSipGf?1U zCS1y<{5kPC8oAowIYBfL=#xZ~o#=Q@;tBL*wO%;|a8vDYMlRf-mWjE@oNMr$CYlbo z8KMj)Tx?I_BXmAjubc@uWW&u{z=eC0&InMKH3rXFqS=7U6k#XaMf0+GX!jbuat`3; z+Hg-Va^dE$Sw0^HuQhni6U_(Q0?|SzT$geChocp1^~yzn%d+7*e&@oe%pG%(*E)k| zwkQX1i$zPEaLtddyoP41(<_$(ZrOj~esb^s9ZA+3IxQEi0NhH^DkogfyU&UC(~nN0 zgI{1o2M3s9;7~142T#d|M(ecj{JAdJ7;H4czQuZuwOT~vik#=4!@gZPI-m3WQz0E? zJC-J?c>_@IJiT^}h*;~OaJ9%f0j+GprSxgmuG#2jUS!>MqV-VoJW;-AgQ)xzbl)xS zHtLxVHN))EwYOn^KbQzg?}t9m zf;`#OHVpE1n>>^ULD?ajvR+0mWo?Wn1ZeUmgXdw< z5uhIx9dn|OSH|^1pEv2X#{qZZzi?FV!(n!|cg+FYmu>d(Efk#u`YBP76aA=h#WFkF zzvqDMHMhXMTu^q#rmScJm+ePS*ZYEcZ!vhD6`ce6dC>(Y`n+0&{ZZi-z49X9F4=I` z)^p(|pV)N=wPg$)FN>}K?yBgT6Yf17>}5a5w8rRYjZte12r|PFG5l~A&WS^#weSNJ z7#cC~ORvyqON_rRB8nZlJR9RnE^yi4JjN=bqAbQ&{q@=+G;gb3dqYIrbkKLbbck{5 z^iJe2M76g?HY^d{f_mQ;-4Wg87-GAQ{XWyKsrD>|raHRKLwQehLv-Kf+s|LQ>UFzI zpFBiwH+Vh}Jp>((M30?(t3IgqNB?ZsE1v-FsSW2^uN%h@A%`!2gWdt|ndmv-UWi^g z;hJ^t_6o)BfE$m1du_uNeRRfkfb*XDyZio*ZtO60dLw!ZxObxWb~skx>B`tf_AMV9 zt<%K>1;f+F@Dd6*momX`d}86}hgy|M7id()>Yy*M2SR;5h=`94O~E!jw-L@wUjZHL z)6s6MeFqo6IBR>XbkDB(C}vk3?I#iO*+Kb-(taTF?(XDN7Glg@F%WIp6; zhQ<9<*fbVZ+oM;G2iyc3u66T`65u9_r#Ru(B>VP9-vKujaMNr! z|4c62{j0fq(XhSn8xQdez-5SMI^p`PP1%bc?1kTW0B)8I7rcuLS3Tv#Lu4#~-*|{K z0f)tNoN$sFiGJvG0sO`TaPw@qR(H5?)9TcXLLK%QJm-rS0B)gpkrR#B>44x6<9GOBx{G1Ce!Ch*yG^RpQm+T#imP+~>$@wD16&5r~(G*V<|_ zK*Lp&Tb;knL)8w#8G(2`K=Z`;PNt83xab2)KL}?8fZJ%p7471}4WAeih`s}ElXx@W zwul)g+@H(f94+CHUbz);+ibW4&$)0_mnc`G2Zs!v+r>Kow^O{!30LQu#DIQ1tXJ*^ z+@Al!9p5^w6FPkuP65OPfZHeD?}S@D?eks~b_7lV0C&)a>s{Tz(F^V#U0WG#KLV!! z;=_PDB0lPbOQHwmBmbj%?J>X|x8WZC!iC$t>)-o!ohl&@I@P(OKJ`wB3xR%8e9DRb zpz^=-ZJjFXSbfy`SRHMVm^jVZsTxOcDXlr=ARlEOi}XGtJ_}mTiO-9jeviY>EF*fk zMIq`q92kg;#20N9NgvL|?7OMXUNr7F92kf%1M`abs*~lS50&eqw}86_xa&4tL=G3u zQ`RjX#h-u&_{28=cT-&AgzJ0wh&L)ep;z7l+-)1K&lxTpZymh(qGzGO^N#o~;O>d< zJK_FayQLmFT&Pz*0Ng_x?(#=2+~BcmgHel<2G2+0$AEhxe(Hp~{rJOnly_49^D{B= zoU>&lnUNg5>-~yJ2km}#Ieim5$DC5seIb4cdR~cNi*uarH&|Ng%_4+WpVDjJh@Xky z+Kg|pi%Z9=3*UPxf?wCVgv@93%5=bux8ZJh^x$xJmkZtJq2e>JMVCwj+$70lC)`Mv zG3`;8v#>=6+*BJbt`!$<-L2Kd=~`xoI1A8;#dEv3E5g)=leRTK5S1ZVh?Re)P9$#udF zA0^+4iY`HX2HaX3&M>kkN4MN04(^S@FGGBmtOs14B;N_=w)ywLXxnAIb_3w-PL8H8 z;ljm)D=*j$_)|M!z?-i4_->SJ0{Ujj7AN|#vmFxc2K=a9r5j=fl-ZptaVz`nDDf-u zxN7j+D%l3~?UEf%^dXr&CZfq#_1c|)vpZLseT>U?*&iRe+S%TCH`uPb=Ht6dvK#1o zBzv9cxsl>ScDCQx4Ysek=AkSAWp<}d8G>Iq{67B7^4;j^HG}6q$$p?8kQ{WP7schw zN4>A>m4^Ulcj{CrfD>0xeF(a69nJO+oI}FRzyraJR>k+D8)NF=wOZ z4d+t2@DIPHsNe0#x=$oeLCZ7AbBXisjM)G;d-89cQ1NXz-IqL)ytLJ1dkz>dgUzXH0f-cwI$hH&>_*suFia9=#(kNz?>tU>trlC zk^IE|Ng_2ofNL@bYhXbEKNSxQ35B1ttKp5Rp&^=>AaiseJf#+Dc{q2Tl$g&dhZ8zZ z#m?)A3W3>EaJKV*JoRBW3V*Dxzd%YXWVKiq4!Qn+aP+33l^S}Wg2$2Gi=L{$E;>tEC`iS?w-Auj!M7OrW`Z;` zyeU?N36-cFdhwzqQ%Nlql5JEj(U2Kx`Ogf30e~|>kwEyy77w1~{zwCMX>Z z-`MLA_%9Sb!4|zxNt|IKET-a<9i{yld5Cll@BiK2z^2kb$^R!c`@LWuE^0wkVivTK z#t8mj(NcbE27D1+o!23O(U_!N`IbK1a(WM6Jh7iNY}9h8XoWP@Z6$m%2>B}MxYg2J z_`XK!vQ{ePt&atzx!rvhk z?1Y3}@YyYu?~%F)T?KokRDo2!PfF~Ux*U+o4?^BfsdUsKsr;~%I3gvEN{M4q;y5V$ zi98`~Q79dAQhG`{ZoO0#Oca5zxG8a3I_`{A^1oV~<_0E9&q{gcr1JApxh#yhAa$i$ z@GeSSFG=OJiM^CZi!Mu3uSl;-T`kF@?m%Z&d7O#kx z{;sIVyPa{p1gYAm0`FjE{!WlykT$HyyMCki`mT}5eHGZdE*PCPT>5*@$cntyw15zW z4U0?G8}$1KMMd5_%5*s+Z9w`}J#!LCKc=3<)8y}^ij*>6GOY7V6OL(%M@FIci-X9ftx8yjUv{gcU zN>ak0LFS}%o}wZzfE>?L;L{;sJSmcGuHL62Z#G=Tqucyxj!)?nmz-jbHz%#;DJt*+ z!q{BUl=CxaYEnlAjZl$S_%UAIvd!M3D)J7vdptqsgp`D&`#eQO-pKZVCoudy#GL$) zr})p8qZ!~OY>#-=A`DTTyBfN7k80VbRmV2nqgr+C(l)%^W8O}&;WvF7FYauwCejE) z_sCWTsibjZug-Dtaf62r_DUXN#u+4~Xpm$uCiOF?K)P2GukLNaI(aqu*-O<()l@36 z7BCKTC{UxUfN_{z0kuknt3=Cs3%!QM$E76WuoS5eM$xi*qskNxNlGx8lasyvG!7bS z_WG;8Io>O!zu9Xr>oKq7{s}_|#dt-Vy^_t4VNCW)8X6xT7vIlfLThuZap<6wWUrJ2 zFSSL1RFb6cVR3duO2UvK<`{cZY_=QX2IC#kvP3TnCL+a{lrnUPS4!MqvsY|V!eB2| zJ+A;SFufiwh>_J(cQ+0m5;+74nE_`A@7$)$2domiVr&U0SXwNQE!H~WuXv7v?V%>t z8k*vgOhe;RyrPrL#)0M}Ji{ytB0INgiHQQ4yE`-tE1F~;VvGZC{1umC>TeODx?7SW ztSPLlm~BMXY53;>GDE@>p87v~4|JZW)@IY7s7`V5=J1&0r#xPu?imc33cN<|IZqOq z5;rI=CC;4u0)|gX8&^fOm%PetquQBM494Vvt^PI*GP6~Ggr4<|*knI<`-**qimAQ<(K}qGP<-bJ!%Qi0f0|RtYWnV7 z^=-Nve)F=XK>N1r+O<;}iM_&Q8geuV^8ys%jUn-faG4KpEQzxrgE!9d*B5^Zmr?NU zH;`)Ys*sN-C1FYZh7N`aD0u>jn|6@-!&~FjmP|aQgN!C8foQjIR|PQ{7j%#{Af{mN zjxs+weDIJTjWCr>(vs6alIQ@E)0vSSWj6_82G;AHL^GI-&a&M+VkVoVB@wAW-C8Q> zS)`ngPRIe3 z8LbucVp3vAitE?UoMet!f|U_64|v6zn$5xkBS3B$uun(G6vT3z9U*H(tiY!tWLjb+ z`^OLa8^HCe0A*~ekgq1C&`DYjii?Lal*J<8uZPUnJ&&veknZL|W@EBBBCcP&aZo<XQ-+ji-pHb!YRE#p$QGKxQBo&>QChxLLAY-fh{ zg0?4i;GEtvZSS2VPZPY0RD}Nb3&nzVlfoXxL4TT)_mGN;yy0svR`-$lx)zW!hyj+8 zQQ=+pF|mDQJqdVcmm2zjtD>rdGY*hEb?pjE zOKp{LD1H=*tB*nPmr$HMPP%74pxnhL$WJmh6yfjpsjAF$qwFeA;PQDCKb08}BNLKD zAx`WEzC20tbh=YeI48nYQMrhem+6MJLu_2X)6A`YvW*0;6Dw2T-Ep$B@Cq#$T_B6M z4v^7}&q7nE&XJ0WywvJEXdxm&%LP<#0wnMRHROm_>2HDp@U@y;yde@f#!yl)-zd z)D~H}L#MvX%=k-IB7*lW@a-O^>XiASu2mV68a z3wpXL+@Fy0_Qv>_LFV?I!^7i;3{81Tu4Vcjl|}Fv)kN7JJb3?<+9K&_^K-m+GT8j0 zG!xgH0ye*7t@#xuhF46NDY8rnylhHsNx-s9$bLhH;Ha(ApKxfVtQNe2sx)snoA(Zi zdjICCpx%?>@Z?s55@1&PfVXGD{O}P3*)05p75oH(X&7q!8LP3ZCd~Y!u+tRzl}*x; z-&o1tVSIik-NKW@~W=6j?-Z}6e=fD{$sApi<}7MSP91& zXcEqwEAxe@aB;4z9YlpX^Pq93vVZ*W@OjX<(*PXS+f|{M&KHI!cO7DmpTV#GBY0U; zO6O^520jhN$(c~(B^0TN_*KdTe)ftQX8qoD78t^2DP&B6xG#$$k^0w)j8W0SPxd=Me}g2)2AV}Yz2u@HwXbdp@eCTYnmkjw{3cr{TK zocNKdLgnxkKdNF$!9@#YVsbIq#0ui?3&Ex(P|UapLd;TreXCITB3V^p8ID>6zFN-y z@x$8}fv;A8WLTC=;l7ezsk=GRp{-Y8B1`r&u^Knel4(72`87JXF|_a6+RIr^x`vhT zbG2VZtOagCG)#)?_%z7d+IBrZD!eWBo+)$3wU5ihxMsF2jLZY;S!u_yl8>in%c_$b zN;7d`HdJjRfD=uwiW-~vl_TIKe<^?4ri-o}H}hNKtk!Z*tjm%4l3So8E9=;Q7(4?q ziLIE)k=2Jdb2EpHGwdHf+;lPcWCy4?9Rt(dPQJWsy0cE`yO`9)vaQv~-2i4KaMU&k zmwQ$W-Uh|?mL^tnnBxohB)lPEAB#K)qi;Vxbr94YVE;f|J_O|sLSD{c$UDUJfop;| zjI$0qb%!Htl9oKmVvfiZ{A2vn1kM>FtBNZhk?kao<5Nd~dV>7})T2Nx1ksFs(8o?P zeU8d*^T|_S9-Dysp9D7+m0c}huTFz-Sbq>c!<;@T3zm^*A)8IWjjurVxzZ~~Kc2^l zSHQ^^_-d3h0AdU)d6BJ49Q4;qP=x)0YhH!q%Vk%c*{dsj1xg&GAg@A6_={JviPxYc zF%V3+j@_;~)xMZb(vmlzTv)tWR5AGSArvS{R6q=9Q4DrG2GP^S&|pvS zsbVKnpR!3>@);|V0JP`W|Ay=#`2q}KuW^%`pzCGXRXlt33S`rUfX`k-GW!J|Ws~1P zvN{ox-$F9`#c`SVt~3?@S^~oFLAV5Dh!41+#L1+OY?7Az1R@zpAo3aOZ#jv4VUx7v zR}cwH29@6c&VF%p@ppXV7PvT70JHKfSXDH<4Vu%+uKL22|7d}tA}{Y4BY-(_C{$^z zK-MOz)!>-!=49BMjuYVHw`Ez@)eatTN4A(u2Rtj;%3)BA7x2`f69kHiyf0&-fZwi1 zr{qbXGXGCkh3jO246aMJ{Si~}s=F{5OvOd;hd)hli@=4qWwmkjd$NP%bWqNgadg8B z>~>$~TQx%4pSxh#TDW`pT$4wk+F;T#ZF zFJ_(i5#q`c;Fr9nY7k4As5i2%0thYZKSB>$4gzT-fVM(V6%%5rs(7W~AfNS7rkJY6 zH2)-Pz#~@ym=$tdORpC2H0oR^uO11r`x=2etY^UsQQ=(-ZQ8*(O^>ink!{v8x4y`_ z@yT_7VCC@d1VxkUp;QT6x#tNg*_G8ua2L z0%;pd6+3rr-R3AxbfuEWW8fAx6H6C z49}`W^&(E|N5h)2sH~vXjn;yvvC)m1N1g#)tk5Wjv3!>G(|`VAKjxf3 z5(%ebDdyyqsqtgB|&8f?$)?& zS-`WBmzko<)MFlb1x!sG%Z_~eEx}dhMOA17@>*#w?ogYe#n%PA(BNWlfcH4?+zmk$ z%O=LU3u}{-Thakdvl6StUkUetPmyj_~=*hTL^ za}ybg>UTN7aq;(UGNT^ zTLNXs_kvouYY0_~|3UCtj;FMwYT{o)C=smPs5Q7}E2=TmI+PkFBtHU%E#TOEpO}}; zDK8%RxilAtv;;?d0eHp)h>KtG;FgpJ@r{|-l9CIE@AySH<%jpQqbOdgkST0O)#dTh zg!pAR1&3Wih?Emyi8w|`+v?dV;jghmrdJ1QpoknNgb)f6_*ploXS#5awVoL2DPZb% zr`{6e_)-za%1!{Zx)01I6NNSLA_G;En8eIBP`)DA@igv3IUaybVP5<}{lbIz1zB(q z24!<5fup7iYhc$Hs)lriaHZ7HCc;qP&vK1(TY{%ft)UW`+fme0l7Rh>iPFNUm>`B4 zAhaAaB;mAR$`fbjQ@3$~nJOX>E91Dlp9PA#O@=9aw$QC~&kkGQ2$K;`mHK5e>tiW6 zXPg%Y6BouelQ3TT8OBdD7EmBIos zYlJ)V?+7Y@Pp*Q-VI%4yfzT+r32gxtZ#m&Y8b^~AwK$h5u6US4viA~J(@l+)d zu^DGigF0*xjjY;ec2zLDMWjbMMo(KY2 zSPuAJo<&joeZs}1qhjg~O2mX`QSS-ZA%TFFJRpRF&nyLbQ0R%h@~Nu0?$%U#M12U1VfK5|LE_m$( z^F5ck#U~3v29mKjAI9rR;VwQ-+d)-f8s<~}Jn~d&=06(&Pz2Rf&xC`E)1}Q>T1^=K zXP5&Uslg)hEck~N!N2YR+BsoP=`08J{7R7LOLHC9l^5`yUC}oi^Dn&8b2iZCGYN?20 zTU~=nWFY9_*P-E?AE9cI#ln4pyK5}EIS882sn8Fz(Mu=g3N3jdyPIf>~LbOWYu5jBD!?}H{* z!qJWgxY8M_Gx@MI)3I)k0Gcx!R*{c|?v{SoB_Sm|zB@aYSmMzWrsxb60MQLfvvO_@ zQT~}QlV^!Z__qtxEAn}%kYi)Lz^NCZv0e(RWABr6bvU^zxJYF{cmwHfnb7cm-+=ab zBRp(HG3#znJ_Px;Ece4r=tu9sOajCBea{4xP=P%117x!ac*1Qc{82cg)DCun!-sBD zt4eo9ZWpO0qC3F)46J;X^@S1Kr9yb*SIA})9P9Q?m{H1vaV%w-x5@9Nl6dU{ z0Humx=9>czk|wH+8$O|GOGk^23rhPTdyPk2qPycAe7YK*@esz~*+*1UeDf0RgIj!r zurc^DJq_!gQ?7UepRUCme?&!CGSF}$WS z)GH5fuS_SA`K5`DTgVL}o+fZ3U^5m$eKtXTrn}L#iOtN~Ds)wn+yaHz9Q?2vP4gMi z1ItjT!_=%!hZE%1vfPO^Xqwyxl&~zIY!`XsJU7~#+#y^iO0E@0~ZME4bw z`#_u(z^i-#yI+)Hi5_*B%f9q0f;>=~>o_4D%v938RS${WSfUkIx*R*qG*!|MCFBt( zmy-?Dj#{7|72#6q2rd1AAdi*h&eMU3$HByIIWV2Tk)n>SCM^^_E1LsO>u7g|45H8R z$dgcpmBQabpv);zF1z0FVj6|gQwXxCG}F<{)A)H4+PB6TkvnT=ggIqMLR@@GBs_kQ z)XF&IEECX_e$6A!Veem{Yn~Tb_Ag!-h!ivC7kV^7Twt^Oa6k*1A}@lK`HLYmToOrH zTx9%ExczaNiElw0dBhc5)RNZnuZk{|wzF?5I+!4?vB`cN?Uz8;MT!di{5rN+RN3K% zC#y2~2H4=X)KyXIrpO(7aXEn!Q8X?YMtfraHgsF!7EWvf6}v5(f?rayD$Mpa^l*Z> z!>0P-UhQZ~d{@L%hui~b0YIzV7rC-pdd8*n?;0D+J|XacS<#MO$tNCSeJ5HAN0MVZ z(UXbCxKd}}K7n#+-DpMSry}`}a+YT*o-rdk(``sNj~vwvR6W$w6!8MT)6)}(mu!-j zdy6Fdzq5{8b z4*DpP|9CXQ;?GZP6;{B`>a&PFd@sFC&1QYUk9*QL$*-V>6>v1-+m_$xqkQsvX(oQr zo2JF7VxBHAO$@8Gl`xV=i)-MtU+Jnsb^GCC#5?i7DKNz~??VgV7BBr1Nsbl6nhgYT zt`U0kIB^Ef9zc6oB=A)uOgibM0*;G~@xU)(`4g=C8sx-MICC?ao=%j;?6ARfbzE$s zK zeIQ)}!Wn=(nF9l95lLo(D4Xf%Y7DH|`#mvJm6X=@ceDQkLzaC8e zA?(b%0EF3WN6&`@EogUb5g)EVlmGC3wr+& z3*qHo^e|#6o8q{mTn3nKYhY+D7gvL>@ z59Nrp0KPT?zFn zE#l`^Qm=pME3m19M0j9j6ikU*fn!_;oNdk=?RG0?$0*?Jz-g&4H|`W4Cvj9dU6m2htvAQs7>ebd4;48n6^WO9f#)yteytL^P<=t>(|om#3d$S8r_RW zUKYa+^|;d*xRRMcFC(v7v+#)wFyxw8fru0AjWA*+-GC@&0%p=pMdS^Tfn+>=E=2E} zVmM!cC3Fou@;ht|yXHwL=Ehvwk047*#RBF7>K4>Vy%7e|ZShZddM;g4q7DifoP0-I zL}S%V80U-U)0>3kU8n~uhW}X%?0e!%&TLEB755g?upKLtrI&(&2cV#YRq#*@i>+L` zHvf@$V<|grDUF5XV~}ShaPwSXKM`MaW;0N%20=b8lRLQvxX*x_u?e`(!Ha#@ffrxk zT5IX=$lRU;Mfpyv}CFT8u5(6BTZ6`?M7vfH?q(5#>K-kjDL@oFtfMOpLo165}dJ<*6_zl z?poI=xc4zy%sksk|3dJ_Su%YcZmp*SI`NFceY~WSJ(>;F6PWqC>29z+lEBvHj8i=) zG2R6*XOfexnRvuLsOJ<3%#nv_1)Lz}?E_a$V-D}5pYVw3xa(n<39cT5_5KXWZJT9M zJZ~-R3Vu37s|Ywf1SxoW0wDQYA!Z|qW!YhS26Ps)<1pQkN6wbOZWJVNz%l3rnUXbD zAOlr}K7~tjTRUw2=1AaB;lF<-JXa#M9Vg5KOWd}@(t5sxhCyt7ii`Eq0!Dg*Rukkx zP{j&3c7a8BNFm*h%qq>q#f31Drsel5* zzWx_n=RI8+?|M(m@P*e@WvqWs(>UcKodBnaAP$?uOE8}<2h$RFK#y91n_r@95i6PB zFVPzbauq0L(_I}7Ay!Lpx2?1{-f4&?P<|_uT0(c?k=r1fO>p$|c1+x% z;|0X(xX4T#Rt)Rn$#>}HKQBnxQVjik5Z@1LmFmXiwR(+e8@e<}9E-rQ*yGy zA@{9vLc%_)`=jf^Ca@5%B;>;&I(hTtTK*{sJin%DCilR}Jozl5h)wmwjY&BrJS~9- zme1fYQtnHhmDIx1NO>&?O5-4pB+rA=mwTbzwhHAm|AJ&w>Dc|LmRySGkZ_A|$$hG! zwH=|)Dsi?*-kZEwTFP;4dkLzZQvfFxmnGHNQDi;-XgM?`B_Y0ar*nl#7R%xPZ15^h zq`>NHl6*UT%xOw4CLoeQp5xlA7|7lB!5n=9B#mW2l=o@ayU!T$Z1}x6o1gj;i*8W zHP!JHZ?qJ5)5`0SW8e|SJx%2`MHV-XmEyTtxd%B8$|N3w%3sw&Tck@r|4(Dr0TtEp z^${$%>aM8RX;D}eS79j&q9PUq3#bIU;x-gTmTEyGVgYQRKJ|hPu@}S=6)Rv@5Rn*5 ztg&lii6&9g=f0VFGxG?y_JvJ6rD2v<>BhoLZ!FA^ zVA4B};kZB|h9g@MO`d#4M=dP8>n&|v(`peal1stS4^6rlI{9JXEHMf*P-vBjXq9*g zKI=~SNgZ$s@U9>7S%w!8F*tNZ&E5 zZ7jHnWfy~}mg$;#kdrKXytn!%j zOBZj1w|%89O*Tmy;&kLhy*AMiCuOjYGCpB5xCTjGnr@La3Qxel`%J^`G%jlv_uFiR z@mTiNHc8FCNm07(63HNSJT5^Yf9$|N;te>TLv}mtggrshb{%&~tce;a&X?HqnXJ+4 zbb6gpl(1V;m-sLt5jTMpfK{;6#d41X0+vYag7!+JxJROwVREcGW_sW7;NJTr^~t7* zsKjVJ`E$QmK2#r1-dz*Hx01%BTtAIWuM!rb)&W==EN$B2pu`pnLz0j{{O84opg36C zyk()JDHb!Z&&vrACqavg9y3m;D>19X_ zcMAkWN0a_5`uUPXD&AC&A@Q|Z6Rj_o)Cxwlgv+AanzReRH@DNt#s(d(k( zF~*R&sCES^`%9bHR7x69+k|RJ1SWh3@B2&J)wl`{1Eemkzn3&8?(7+D&;%Od!}Reu zzKcr01<8h(YoHz=we5agg4uamVsC?1+)r{tQdgW)$4`;yZ%S;iVZnKZN(uDhxrU5!#Kq3zPHA#v3up~`_9&Z+t_#+x50fXfM3>_%7PkAV5*k_tHI!UJw z#643zlMv;R#M;=T9%E??F(dU!FLiYE6N!ujeH88hMDOF4qlBjt33b9$_4I^i5?l?V zqXo~6zU)M2AYMoshF}z{jS-H`(EcaU!Wa|iFyfYpt#%15;bFvO8xNEQ8BfHiGEY4&T$n6*siI;7@z}`S;%` zOWdDt#%|V5STpsY{xvL{STsRxYl|QQOlu``N-;;*AV%Gn+6kk_%jz`pLM%7@`I1zQ zm4$^l8)uPJLlai*TFV?$%+lu5s#Cv{mQO1gzq0CK#x~tflWk0mb+fh1sk=GKd{&*3 zAGQINoh;N64WD5r8z%bPbxFPlJY!NHdnR4%@w_E~J-zn1QQ9F>=>vTos5IMwUHjzj zqoeSFNrN1j)bXk9RoLc8ul|9{^Q5D$Que zuB}LZaSom_sZV=Wfe6RAzunO^L@7Aa0Lrc-EKvs3N^{WEnn8k zsg;F=IoscP0cza|6N*{N`~W>}`9#ZSRkJlF6d$Eqq{=r^q4dNL8+dx+ZyGOOrNZ3{ zKW(6K_w@CNRB{u_VWj16mNuW(^d{$)L$l7*gcCY5SN#6_@g4tuQOoEC^8YnE;jJA; zwi}CVH)iyN=+Z)d^-kGaSeSDz0MFc!%u?ppPEvQ+>i?a?^m#Qbwm1kU9b93e zJFUkwcNS6wmI+JYhC8)KJ0+8}WDy;BtwjZ>Jg8cR2UF|) zXXsUUhEnm95#QfV9!S-`_Cz)ET`bx0S4{vsQ7za2&ppxlM0zH$-{5~w9r~PhM`z)r zvmDaAWb})C`L4aUQOE;c46^eCcNKi_qL4w}$b>+CyCdye*yc^8A5l7jNEfD`$lyDT z96@T%844y&!+LC2VM{Sf+0SjdmNJXfJdM>!1bf~gEiP3XdKQX;ea!1*o| zr@0@)k-ggK$d81T3SpnZ6^{C0awbMIoc(DBjfBU3GC$F~>$<=E#JA%tOtI!1UBUD2 zw65q~vy}N}w6@Ij;ImTWv(%iEF}U7s*A2aEmNuW(;!(#^A-x;5|IKd9{<^<5E#v1w zrMqy&T@F*aQ$J>OXHCksgVKRtJ@Vx)b58N#8QsTU%!4YGyISdvpS;oI7jWDo-4*yr z3SWhfm$$b{>FK4yh4-EKwX2`+CgsPYrH7E`A&2Y!v>wm>Sv;=V@OvNV+k@I8y9cvJ z#5!4Hemp+$6l!?6LYDv*j~4%Qdr#w07r-);D)mSM*cLz`KL)THeJXTKf?+*bj=cBV z=t`<~rYBRgN_F}Gb$U^?;k}qzPFQ6-C`73k{kz`gCsVbyy_wpFuty~@zBg4n+?%;4 zevJAK-#sI{U~W;mt2~t6`0Vvjk*6?zXb3;Ati(g}tU#uJFK+z}=-yt| z)Y9Njq;hD`mjRqw7I&E6SfBcXe_sYLr^xNT=n2b+9z-gK6GnhfilBIYhrFx@yfFgg z75)(q_vFZ+PXLk1VR8^-&}`~xD?Wom0gxNS7+5s9@gAfz&;+=tI0*Iaf|>rDlGDfd z1lII~&|s$Dd&}EzC;{7EL@I}JBS6)lB=nZ@NF$N zNTVXJuaMPSE_Ci=%B7~w_>O!o4T8Whka2lXbz4fgq>EBHyc)>3DAUh(;D`9fAaDp_ z06kaL83JQNFu-O63lV{GSQojm%wb**QRYz@9;6QT_5P(nZ@v!ir{D;b}fsi$rSzYG)Y!?)0u{DGc zAttsV%xkGNZ>stFIU&mj;Gk{@>xBF=czzCz;#Q%{2ViD1A|xHlZp=qW4;5ku%Asi( z8)2P0e|Hgus5=NtOq=$#qxu{^RMH^G4P%uV`p;Zk*n-bH%MYRylib%Vg!WZN59f!F zb}$aYv^tH>LyMn1)Oq8FaquJtg<9){J(Nf{jjvLrRC@bxyCfupMm;bWfbS>6u{v}4 zts`)V;5JAOF5%2dJvv0E(iU=&l$ctnoqzNZe%9#`CO8hp4yX}o$cK45X)ZlNN=%`0 zPM?^~pR{WKwXk%sD=Zw!+}}9&MGGj%!U!S-n8Svc=CDb^ygk_96)2S&u}8eggSx|_*L8c zH-1LnHykRA0Lsy+xc84d@m)s{DJImB3?Rhmv4qcH?FdL2$rxO;ODm=fY)29)CR8JU zeQN!hdo26Q!7*#xQ^@KY0DZXV7&F_>W-#%BI<7EVxz5K+te1JRSpvnl~vgmLY1sJL(QtWt* zV+paa9$02#xVv9%if-(Rp_B1Qn_$B!nBQVd?){hPbOaj5o(52?|eFoDHkn~ z%Hgh>k+J)3&T~E)(1J|E0ES%1jG~#Vp^ix9!g{qSnUleB*?g?oI$@kf4o@{K;e2N& z)lj@YNQr62sXD0pfe#g>7p`brVYQZJoQnSCY1B>+Nr_yD)tWNf^kG0g-%KHq;Gko* zoRYk$6ZP4JNTIXNl$Dj|)@tS&e8&qLbguBHj91~B8Br$6!mUQL9o@r=N-RSgEgF{U(zj?Y@mr_nnOBBB{e)w+QCltz&##Y_^-XgG~}a*$7>b3Di4J3f!91Te%f9)te6 zbrCKPMsp+z_v1`yEa}^?nn&g1L~t-Ll=gQE?ok?JlZX`i8wN(BNBYYgemyFZguMy) ze%8Q}VVCgxwJAvO6f802^0>@a&9BkXDS}g?E9{JAX=mW39{Z_vJ*Hv_W{p@zXIbUD z8hkprQ-#?{IBg%t=#+1dVh`UI)3C&p&fB@u8t~~XoF=?Y!Z&E~jLyfE0Y_*Ov6_x0 zm_yfs%!<_$sdO|0EWbM^Tnn@t1jIQ3u=XkzoSS+HjctC}Qn zelEP8f?fDADMX4pJ*Tp$X}My@dp2)aEu`w~Zf^X>-6Zoq2APAvBylD(4D@ z*`}E%S8eIXhe@0Z4#^Bgda*|k6t%%tFA6ayCo}*5RAc-o~X*?FC z*m;}50Bokuz0C(0G#^rCFajedoUWh%--%MWFmA4CpY+$zrMY~p?rG3@Cc|3OT=9Tn zm55Tg5Himct2B2?Yd%)TbhvNCdcSS#K#El$N--aQ!zvcm!et>Jpk;=TIv?N0e#2Tu z>5z5l6l5(a!JIscVNA^)62r%^ULd?plSAYz_K0!5y6snrv5=G~^#6ZSxzm8TT7D?M zUx01Ij6>0?jpU?-W&-dd+2!r-G=3#-EffMWT%k0D8LHFm@21g8j$VW%*m0cA4Atdo zht+(H3yXw(3-HzJY-XrY=NgBAy&LATev7fhv_;I;8v5~}4lahO*(`{jHMo;Osi>9^ zDRv%H8J9D?ZI|)^HZ6fYsSIHF=EH1G!8wyiF{jR90P9YAuHyqN%Y=wI3?MgC`;jte zoJFLVP!T{(sAcNXzxW9?C5yP~zYlh+&etiwnhU`9^_yBn-S|;Bd?`tX|8;(xt(U$! zYNKwLg@6EjYJr;ErTqEJuFJqMk6HcR((Az>4aH0-3UNAZ9`oAPqRMUj{*(7|aG1~Z zxBES858VOvMImO=`AmQFgO!PVeFp(5jQVN)PEMu$zidIMT51};Ju+ujGiI<}0V!#W z#@+6X=D_-Fq_ILUERzee<)#_%dGpQHOsc$HAyh8M{%tyIQ^gO;$52ueS7M1NDbHG4 z1Nn8kwNeNWuz#Dunz)rJVGDf9L1L@00Mls(Gtad`KYKpJ=~a-G!Roa+)}bwB(iMml zbLj#GP=93GSA2kc0RIIHV2}6Sx#F@#{Ja1Pv43mShvX=-C<8xW_5Zu4E3@H^QNN^h zo*gA1%^_0k-!5bXX1|oo;seaef!u|RK%76Wn=I0!0Yo9@xJ69A<>)hoeEspOA#@Sb zj|h49CnfNsD3uE_*`~f-*Fjjv#~QRoaLd8T`o+w*HM=;;DBeX&QXDR4F@T>E zKYsQRQ4E*={kxkBhAf$?w)mFU3R*kMnp+OtKxCLmjOveOeAkJ8|8pC_VJWLX-R9xG z^#1;NM2eYYDZ9U*^eaU4p#qWKVETOdnd)w;K9;Tb4OLv>MzX=DX^ zw$>cyKa&3h>$(-+b7~_!JXC6Y0f(#8aV&?+bA5F99c2%9wO);jb5$DO$Z8*8$IJ!b zKfoHddhO1CfH`i1H!E1p8XVNrqVLByiBe2ZE17A|PTeo%o2JEfVfGg6h^=JSjr`za zLxXQQDUl0~TTR_QX?f5CKAhza2wlba)NJ?cGKHEUN^#h{${5FMgXZ!9e%=99{{!$F zYC!>XJBbu~V!!~LeS~VJRlmnQaKIQ$vV1>?0u0VlkVCN#I^gDi&uES|D}B_oI3M2g8MhcSTcxJ!HnS-YXw2oT*f zj-^BE0>QA$wBbY!tNjxnW?BIlRx=*Ir4`nq6?t1A+}|Y^Qu0mRdPBcuH6Kd7M+n$0 zhrl(gHLuCvx`x8tA|SwO6?(R?_z(b44lUy7kO9 z&usQS;@jrWZw2)}9D=TA_RX2m>n454d;kkD-Q_Zf{m}!fc}4r^0DfSCajFuLN^G&e65JK~qe*H1$1K_fN`iF@SbC6O0qI%mFzJB^)s50tb ztaSdHhL^<=B9#l7hfG_}>Xzjb_*k(=gh7S4tYIT-Ig2ixcuetLkP_3;{D%fAM}E+b zIEwp2)EbRa?V(n9>vi6^GF9WP@b%SrD3op(&N>gTNM8;2DTFIi?M9lb&yQK#;dj>a zW47BdkZor6c8aUH4(tQb-l7m^V2+rY>qP0u<$QCgjzh5#>QTtpz0_2DMX6lqe$*7p z{j7TjK9=K&<;QTd&=zKStK_Y}QMeo|FilxqhYWtl2dY~n#2#~nep|6gk&g|pDH=DD zBF!Nsa-rez+F#7dkc(bzkL<+v3IFgv^Pm#ch7UN06(PRL>FHZ&QzQoU>2B$|Lmlwir1 zHX|1lE`KwCZ?h{U!rmh6|7~Yb&W*plN^KT=5=%^>?92Tk`A|nr3Xa9NY-TPq|9Giu z8HG}w!Ve=mGB^0XFX(Gk+xD(S0DH^*wv4qcO z(P{AC$pD%qUU~tq!!g{?5Fw^Vqki4yadN(X;u&~j)X#MIDgs{b7WGkx>2Vjke}mfT z8GQXQXCZeNyZ>#w7xQTau8UI4kNFIs;C$E$zMBKj32tX_;w+!}rl|6PD_gZiN=$u| z+~&egK9?Tn1;?{Errgb-9uEApn({e9N=%{VyjWjNKfnD2Vd+^MQ|@MNPF~>SNuf59 z61m`Z&eY9Qwm7uqGi!7aA_|z5Y&W%MYsnUgQtZYRFe^FSsrxk_;IE4y+rt3L4rdOa zToOx(6uWVI7{JcVzp9Co$E8qg1bA|BcOwcgri@5&Ou3f<#5aiE$7fKEN7w9S42n+7 zdPV^PFA*t@Dvbco8_in7cl4o4!iG}pw(VoyX%Tz2CLJO8mSc&jcV>*XiQseDQw|mT z7?*Je97^c;^0JUsW{OhhW21I_l~kGpj(YU- z$D@2ZhgCw>0amRK+ZLXsjp@25#guZ80nGSqy};)%@H_B7$N=75|8#|V`kW}moMHrs z`Tf)zK7jXCcw+?Eu~FenCn7~5=9EK>fXjNDYL>w}d=I&Yj07xRvh_yU-wRchrnXf5 z+VUo!hV?ZFEo3ku*N3d86Oq>h!*@6ldDYavGcD!@@sZwM6DqG_VmZwGTkvq_J!+MS z*RjNuRM@zbhkU48*M)%ZF|izG4)%75j-?ZkH?RQ5ghz0^KvKRUY<4UDBm49XG6C@4 zhoe>d$nJU5OaT5P` zMPzb{^e~@J!fkLk&O+&cwQ3Aq+8_#XLhLxxw>da+GGBl69jGws>w?=~r}w`mN^y{R zf&r9X?H9)f=yMlRPA~!^F4h;nvm6C^owf_l^4L-)${|P8(2P6v_qryQYolN>tt&epM`f6n?xbheO3I zNYYO>i>3CMPD)H&J7e{))$|=+{3r~%hfC{Am}@7Tyz5TWUGxJi!DLm!YBubn;~YMn zM-Sjl3A0SE-(2$P`0^nUVzN5P^y?k0S&OfK=^^BvWcnTNsg!hl`G^Ry|8t7zpKh31 z%-28o2trRW{q$zHtm*jjF%jbU(5Ro9-ldw{wEi(v8TEHW{(+~?lkw#fBE%`G)9n7w z@}2YfZ8rUh5cdejgr}K1){T<;LBTx4c!~w4-dMS4L^Zwa)Te^_G42CD!;qGi|2~sG z1xbM^(ykWc|Kf9+_)MsLjQcjvGQaMfw`K$N>nl=%9iFqSUTt2#?#j2T?l}~nWp-UO zT3!q8t;9NsLhSFHWBP4>*q+PhFz^K!&N2PYb?kQ0`(F{Ia$)Q<(~v(bdG|Y?OW&Ws z;XK27?$w>|em=<@PgF7_lsG=DAT`--=R9B^Ox5W*eTqshuc{Z2c`voqS;*0#yH&}u_s4`h2au$+PnXI+t zZ9Vvx$y~)jTF1@VE_BC<3w0kChIC*rFoRtZ_f)Wi*)??@~Tgh;3;0^ zM4tXf9S0Vt)k7@&ar_qufBPd`3VtC{CpcOrt1lu};9;Dn5vmA(8hvr?2{kOeBy$w6 zy7$NafyS$BzPM`dQn+$S=0NK7_7c`6eWzOvhkIYH!v!>zI3HXCYW_R8){+1cOEi2~F3&u3e%A`-%aAVgV6!*Iidp><#fM*N)h` zVjH_+Zy?yaU{@?)ulSrvz=SZ*`|`)LpHGN0_uTLK-E;5UHj`Oqdy5N8Th!KfBKZmj z2M4i3^@xQ2t!pakH-IB=_^7axmt+0ZHa>N)kAD-9Ir*NryzQ__?%g85?oaqMU~LqIa$88;UuyD_kzTMj1r^@u`^^#ei_|VE;G>yc`_rdTvZ< zFpfQ{%l>f?C>R8=PzC;Gp(AFtW)?I2iAsww!F_;LzCfR=_k@_OLO*{uTH+IA}aC z*J^l@J<_m$90dM^gI0IBLH(NSk(O{UTRN1F&9kWKSANA2%z{D!BcehABGn-w5&mjj zL_oAUL>CgJHU%0bk$zE{sK|h*C=^b3bPpf`S$hZF{DH=bF+WwS+h44{8t`HH{|~Me zTToja%vMO%@V~+XAQKeI92}$0Kfvg3)T*O`H34d!zcBldEfkgSW8=2ed$LAY;&~SlC(f5O~Lg>*G!JsN^5NDi_R1by#YRy5! z8gEA*G)1UW43b1v%#WJZU!qw1h$B9kKj9f#E(kp(So+3u(fI@JfzJ;gf3=C@H5 z(aXga^!r&OTo5fWDHIve6|JU7Ea>6yslhhr;`)I0mg*G7GaQ*>rGw1vW$f85eQfK; zd>!>Igq$lsYmpQWxSM5gi#7&DM{92QF$tfBUvu3EZ!`IdNOO z8y%KKE6)BssA4IDsS)Nd5A|`v`jy228yiCS*2o(uE)jz(s(DnJ>F0yo2R50U)sShbV*`b8 zIY*{bjlRFwhTR^zG+F$?(9)Mz^@sxnZ~bTkJms%o6s%6mkb54v4-prY$C4y#Z_ zoH^3L4I=bSK_c6usZh6S_0cCqkYY$7N0!#rMw!9m)_HwKN2(1_tX(psVo@~JEk$wZ zz2PBRSABp&c$~wkW(|u~Z0eCHlu{#H;psfIB8%r@v8vy}DIWdp^1oOWx(pGqjV8pY zDe7O-sQB551C>|P5|xko)4fsqS_2g^2^>}jYsHx_tL7hWI|e~S{LPgI(a{8JLV~qA zbx^c6Sgi{-1*n6gVSq4djQ&wZe^ZcA8;Fel9w@oCq9Yf%;-yt7WLY;nc)NZ z(a|CPfl)A41w;nISQTVa8~xyd4+-}7i;4^}`h{rx%zC0-6&;fnS1f5oJ(WU&9&-~| zc~iX~eQ_PEP%Ii&vD!wtS=wn>l>-CNQ@6p2otuVNw2G_~V~+LZnb|FE%VvU64o1BQ zbwr?1qt@wyL)5{+!8+*2G!fdUkm$hRkSKH6lS?ZZn$ED>hFqH_v>0b zb?m;QmyM@_-@wxpWh2Ey;-89{&L}Nto%4*xsCm6`MYoW#6|FMsS*)VJ1_UA>?{LM1 z!v88-E%vrpwVkfjAt#@3#nt=cD_SM{#G0GLQq|a=woO78>=zKJGnt?@gg|o-(gvwR zq9gs(CT)aHqYLtjFc~AvO`=161vlA~U)AgX4?z>$8<_*WMXT5*D}^j;lf3_m|3ODoF^cp?NfpEP zo3Eu!Ud!R_Mf-eX6ggu#tO6U1G7n7ahBe9g4H^|&K4@*m*3bqXH3(K*JI9g9ub~B9 zd|-?}+R`vaLH#?Sq5xmD#VSGgaxz+{4p(@s> zG|S-#=_NnQ^YJHU{cTs*oxFU{7 zuIRBxpvCI2VU`m*8yK#*JDS7lw;)TeI`9zE+4QR2IzjXw1~pP>mvdyQ7i>ZIf88h( zEeQ@+gumpll80E(;p;v2+MqK#1A2EzBgKfSlPaqI6f)f0d)->Qayq z-Vo@+%CG8Ux9vKCN}B7nuX)59PW-)ZQ#tT$8a{1@CbS6iD&iFb{w?nv?>z^;PStHk z(dQO=)d${d-bWs|pGScDRsq+iaX^POp7;>Ow=}qX;(g{VAj&IEY%0Bk?zYtXe&K!K zVRo2bNSMo?xp@W$>(#yc`%te|2Dh)gZy<09@ttP}Jh&ZoLT6g(RX;#miB;Q*yqO%l zHlYhwpjNF7E0Up76&Um?#eaf)5hR7kxV98ZIehl zZTn`%??wyT=v9-+*SyKrISrLRhl6+TssB~v{JX(*3ON;c)5z&$`Pfl)It@k>e%GsJ z0B$A;v9nB(*6f?hft!p9JkVFb%_3(5ZVs7Zhttk!e+Ug}tJls2Tq=vR)T;lyR1TbQ zV)LQwrdJ*KG;qKfVUB84>kl`Vc_gY3Nc0%bK%sx=edm*NN!v;uzhfQ;`snIL8_?N5 z3~md^G;<)aeIQTQ3b=!sw9{)Bg49J;sZEw44&J2tH(T3CC3=C>7wz0!7L!XVNDbY3 za4d3fulHR_E-WW?^ZNN5=z4p+*P=!34Q|WG&Xq^dn37t+)P$<-v3ea_vlAQy><&pY~}RU|K(y1 zZ@V7z8I;s1tot@{JK!_P9pp|9e9+T>-q?2FQ4xN@{<`Q$m=~E~NyN@gVEGBVfWdyI zKv+mZZ_LhrJ^Pcy?s94Zf*iPo*l+Yy!o#o0apCs}e_M4S5hj0KfS*xqjEshPgTK~K zZ487%oxdq6B*YjH80{a-4le`tkVG@vX0VG4au`~52}hjl@63LJ!DI^v;MmYmrt**^Ab^ut_GKVxEv=>kSFbs z&X_-*uWN{Vx^NSWO(CzMF4Rgqga4qJNdE_OIYq5p@=2bQ`u;Os&XOerkt1gol z$SZ9BYZ-Y?|GAtaunqh6XoSx9Ft}bNuYr&2MXOI*&n zf10!rEe$gucZ0%wS>X$k?uhEC*FJ#k53MENQ^J+KbN84XHd=`Y(0Z_^oA)E~F=%~4 zKDE=jAY|hw8?BiUpw+vVyXqM@n`xadXamzZ!u-cMRSJsjWpI5?z5se5`O=171GWac z_L%b+-Rq@Sy#m~8>!>;RPkS6|y*;{QChFDO;Pr+qB46>WQx7w$-KSLc#)4(gz|K)1 z^nGu4-(vDrxlxnY%!PiQwt5z7*2m!XmV5_Fmk{r5M@^QWnpxWmZS4ayOpyA~D%JHe z7jHw(#SG-r*WmSu{9Hk*?D8hQjnsG(NIlWl-S-Rmp`6ri?N`_Zl@&rw+MJB&elX!A zznP_ex0l-aand0)t{+S|L28LrYF;82&;L^IC+Jf@gV#?oiEkg(cB|>FHd6DVLF)Ye z?!FWFKgvnHw}cBFTsSKp-R%$aPku7rJpbg|%s<(}te;kL6?Od+=AZlvJYqXxM9PUlbN+s^R5Kj%W<{W57B+A_f4 zHiJLYEOnN>)ay6gdZ9Yudev-@n#wkPi&Q7)431jjFIoN{!r?tV=J0JN@obsLd^YKA zgr>%TP~AXx-xU7razdShxxjbEURr?u8`!h_GDNJLqtP-ghxStz60f{>Ft?@%NoT!I1{HCH$pksmtukzW&qR z_h>_;Ub`Hmrn6ElgTV3*D>tMDp8@!l{8jw&Jxqckg|X=h ziQ!OhtGBtUR)e!OR%dHQa5-CZxAib2GZ|dh^49@)kk_K+r&954&pp|u)As>e+S=YWbb^4%SY;1{y}tjFgvpE2OrnT19ov9|MprR z)F=jKjDWL_?A1PV(eCV43T&E4{0Ip1-559TL;S-4pGX|BgU>dO`Dr8FGajV38{)1y z3chSc_U>M*Il?2EoxoPo{*>QaP!|JcSO&I>Q!d|XET=PFX6(qx^KFJjKd7BXZhy!`-A4 zpP;;9desHM*^K3Hk8$BT=!<5dj>FlpJi9`R{k9-{mrV~@kN{zPI^5kihkv151LnQp zLT6twHb;K3>{xyglrAB1?He!|do&$o#OhUfAk}6pmpiZFsF%^$aVV-4$ByNfDoFj{ zk+soAYO7Hom5Forz0A)mC$)Gw7y4p@@0;h1V2AQ6W~Eo{mCjM_3`FrG^r~y1)MhB> zXL8|Gk0)+NFGjFK`Sl7)4-7uN+D2){Xiz#e-re^G|5`bv)D155kh+(OP;NXsl;1Q< zy=5=8$IpkiP^*!8)oqY!GnCi;$;F$mx#W-bk7S4PI~Alx`yE_rBbE3Yr1na1_r1%% zT~4aM_gaqnqK6--k5(kGL-{?k)cf{QJ^L8~kaMD5l@C&FhVr&uxOm;h-mZgYB=+}4u5j`l?bqx8Oy z0cSgu_gTV)`+VobTGVf}!R-nEsTugpekecH`}Y^K{YOG4ku|$;lmmd8w%Bj}mpmiM8vUywKK-A!GcKCj2miNlOyst;} zdyJO;4SU2O&t~|RP2u7lADN$S(>HsL1$mvvu*3Hoz^~*N+4WBikMW1w^v!u=p|19f zaaR?CGn?W2;ASpoHy7k;P{|l}_u~{P|7+;7jsM9U=Fj$F z_Fa+h!9M-M29JHvFWMAsG)4!*ZQBTwR;`1rA=okUi-7w}#t2KX?DHeBxWV3C0(`d8bJ1xSpeh zId;pMju!rBX#bu6gI{7-LBChoaD=^)56?N8OC1^PuQh4|g4IEh8rTyH4)B9}*Kl7k zI3zeKMC%^}k81>=tP~H!PY@t57n|FweX%PAW;aRLVvktWU^}`yPTzWhfS4$N+YHG9 z$132A{Z9sy_oj}eH(`GACkfa+GI78Lj*?GkJ#Q|G8*ivNSulmwT7KfH%?}f!JLC1O zrwWK^m2vXV9~(KGygzwt9*RvebeJxfQPD|(PLXXJUw=QiTN@G)sSbjNA>poNgjOA_ ziPWk!ei70BT1{Z2$rNag?@R$P%MxF1xAyU^6d2+g#KxER>Em4M!+X$nP1*o>HYZZ8 zg=P)49&A)c1o#K4+3JplTig+T0cc!P&+yp-Vh$VcUpK*K3W6NchjWF+USB0#M540# zCtTthqJ!90hfa>;w>BwqOJx}NIc2ll_tP~g?0{FF3HmVasYetlc9rJGs*q8MFL_m zmy4N=wsN=_v9SLno8bj0YNVd*=Cwqyv_g>>#$y)i5lwbS*OHwZlm=?Q%Qg-t z^0O`5+c<%YYE*lQ8|pvF$$b4?q8^nX{S-YqG3giSScB~xq-Sl`x!aK9rvOPZ)y-wK zU`>SpooPPR5jCHx_g^a@)^SCoakESg7kvjGzle@bHK5=r7IhDA9_Wo4PSc|mQ=C0Z z%jx~w4vwtV0=AAvTc;UZwg|Qgw%OHJj}I?1P_5~D|Lp=IlS|IpE;~7x&324VKuf0^ z+V2qT6xeSJ-AkxdVtZi)z>{t82!>7_oYn% zOYeU~Kpf>l?l`=M1G&U-_Yc%zw!t$?aIAvN_F4Tq{kmFE%Q^MYliBXbcb2nfY0=*w zW;mE=_p(?NG{@j|QgBLOdsBq%NLx0l+wT_>Zm!OPEAYx3cT{7xbAwXqzTCYWRQ zJ#4NU$f!pBQ{3906`ZT!;%&I^bOmNA4|gndh@6c}1kFk5t=pZ&aSn>sw-se`9EgVezh@VuEW8lJT` z`bS2qgF-?AqNAe&{7fdTxv6Ihh@5g&dLEj3c(9(4a;Eo44dv0}h)%74pC={>y=b^C+46ZK(g+PBPcx6YQ{ov4i^l|~LaRB$m zisKFC!mY_^IM_zJ=RDB9G|kPsNKg#)w}N+eblfI*i;ecYd7xd0-Bs_w*$1n$e)G7T z%{<~5h`M5f>qo&Spnn#8v7TtJ)e!{ zF4C)}0B))kw>yjrcT3x{K9VdpxK0yJ2iy$dOgo&cNLCMxS*+L20^DpX?$lT=TocjW zVKx<&x&SIlwZzSPjxYu2bA_pP^kcu(U1w8Ktx@umRz{(=W+dQv=^s=_HRqwycY|X0DY-& znH@dh^lXid_6!W#P0QR>%fVT?)miWyE@#mm6Qj|VWd_$3!VI9V6t1$Pf0(~A54kPZ zYgYqqjTI+7%Y|#-EhE@Qd$)z4J$t#E_gdjPpsyEhu%idhVm_r0|(3%yC#tF{9!(~9d;;|NDJ#(&*X1r1(d zaNQx?3AkOt-FCR+sY5rS8!PmxJ%D4Zxb~;HaM=y3zChhF46b{H`vA9Jc)$+VXsWP2 z%F58I4g&6w6}P(DQ4V#}C;1hjCMylDhlNJ~cT|{VhZ}REV|BD~rCxgsaL28W!qF#{8Ff>6RX@+XTaH6tFtFFxSZ|I zDa=CDYJ=-J;d!865N6xa*9>W~1&v*;*X983q7_$^$%W&;TJpDzcF$#?z2O=+?_6OX z&@Txu+tE{>jw`g$p0^CNr>${UT>)oTtLT z>6+V4M_?wRjf(V-hV7dm_$eYh8mx{8iPoxvG^T)nh#)^>fHv4X9l0eWZVPSKwCr?* zTZH|5sZu^*I#Pw5F9j^$^~mN4FikoXKXRRWvpYiKZaM$AgqEpF+fK(h0ue1GE|*OP z8#rLVsL{)Hbv*A0??YVjg$2S66(=sUy(0=xgY_^q5Z)0!w8pyUNG=yg<%90nRBQq3 z;`Vx&8VDbQizmXTcA@Xj`#avIVpCT@$=Ys!sR1~9Zgm#1h|AeF<>=OE_6C?52n&J! zQuxY_?$9~6Gy1UsrUrns83g`4%7yFLX59-L?X5CE`<9Jv-fx6OKra@)wWAB>{&Utw zdvOM6ud&Hp^$wibbhFc+ayiTXwqY3x-(+xoFZ=-XkHSxO^bqt+uce7qq0=S=6T-2J=95~;UYhFmR#o(GG znjnJPa-w8W`KbX8c(aUWH*LflY^!cI%c62wL&pFh8JKW6&9Jb<^crM(8 zJ)h@#D1Mur?#)(uM}B&zNB3j zIVv%KR9J@1v#)?rqYFFhc&!z!gSf00Z4hk~RqXn1b*tlms9k#PCedoqW^1q~-RANU zX>zJ#Q?q%jkAu71ytjz9f{$&Y?RK%hx)GK8E!+ku8vGVcl?l#vSe;>BE=PgZK7YFk z#qKt^?iB3;`fkx4JNk)clb)e_yY(staC@ydawiw=(fc6>P_I1(*L|Y>fIA>MXonM= zlQu)A_vlrJ0C(7m^Ss4{``7JObJUVCxE>K51zeWsm>sUywM*yGc1Eu{4!9Fm+`z_p z9EJV1r|&7G+6(vHMW+CFT6D$^*WQmwM2q(7wPyi$&Wg+F$%Tu!yK96G^jM`27q;3A z71d#%oA-Iq1)yh(a_s0`8%%Pxxde+hLq+Y}=dQX4&T_5JF8#;lOdaq*g}&`Gbj}l9 z0{Ugq6+8OdE-fC|UV{G7aDhZw9sOA-MWEV;_1YJJE41P|&bi5f^V?B;%|^R%J7_pAv;Ob?3Pg>h9lTZr&5b6U8!VvUrls+iBPd{Hu3^`8L|~ zc7pcD$J|wu#cxGZtj_xXEZ}gqy660%NPXPkI#oOk=+nhB?C1@T{V<|s$MxEofSYB- zUH$fu1NUl3dSe^y6Lx|2E+^c)XN%_mJw-g%j()pwyL&d;HM>DObHZJf3eM(PorUV2 za5$^~am!CdMrHS=Dk_G1?XGF+wADolez`iXwTRS+QZJe ztG0u)Oslg2zrEpbwzKc(L1@`o*jW+p1o|%VZaey$+_$$8eNM04131QtGyE*#z&Xx3 zWBa5@w|$`f&^b5nz2bd9-!DF3M}OIF+Grc?#D383bKYHb5S$&dIytBwKgxD{99?t2cL%kQ4PsP_ef>k08mz?~AGw!?K9 zI5P^JxuDmc5ff)Q+u+B{j~w8&QKT2@lpW@IPJAA~7sT0OyI+H`UCHg5(Lp8Xct z!=}w;9fW%8d(qANn)o`R}aCY13tmdO{9L{#O-@X=6 zxdzue;=4eDU#BGDoAEHBLKnfN()c_A(oFXXs8 zl>B|uKPdc?UiDJ^MEuHHl5r`7-OI|@CVSaIJL7B+^`gtq8zPQ*EhPP;KX~x_Ku_CP-js zLXs>gzcbNM7Cg|V$+bELO-^^sT{TJaL_AsYYg`XpE9P)^YCt0i8hZ^kDkM{ZK20*+ zjvi9eLy2BqgN+Kn&9vfN21_|`%Y1))x6xjF474x3?$&vhWH!*}NK)+RKSGYvwo^P< za|gnWe~sEN&=>?y{J=(}F-jY$Hu)K~5m6fd0Bz|b0COcos>F7*GjBwuaA~ri;#JB= z*%WVByZFm!-wnNXo`gW<9L|+k*584DQyhU9aqbuo{dO~~;e5#gD0!L$OBPBh4zDp! z=iB~_i#Q2&_vog(YLR4~#AY{8Q=jJW(TDo)HEMXv;JR3{1bi%&EVGMl^EHb!Xz4BZ zEd$`vt##Kx;K+e{dvfj-o4U(933b=`HarX|$pHFF$tpW~Zs?3ZZQ7mj6lmXb8>R-} zY>m}f>;)$dXLok(oPkPi!_+{s4(RJ88|>)g7L03wV(;ix8v$pt-!^S^6%O3RwtM@c zr*{mln;B5BW{)$#`;C}iISb%cx8eF$aG6A8usi?fOP*Lm}@Gv;D*-;zoQ-eeM zzC%POG&3J|HY7)Zo+UYEM_+Ku;W+x1uh$-z5GOdVkcVVV4)E-aOT5syg0O}sC8q#< zT5?8mmg5Rpb$!Mu8}XX+Am00dyXu_exa7RGm8CS`^6~652gyyq-ICn4!)?l1(;sbr1kXGG?yeR009d5p>mjo?(3^z6;#6!-S>X%%bqozh^B^{CLldy)5B##07MDkQ(|I2oEkakX- zSH-5LGIF4%PCS7-8V4)C8Zcjuv>Ps17(Ns0mdR`QNhe3z(#yEfv9ToAwR89enMc`f;16+chM z9v}OtOPDtV>%pD!gAuud$~4ku+@j;Ictay-fA zhNtHhDDjrpbv)Cg7)rcQx=6~gz}md8S0H-%T3>Imlvu)gSSoc`yQ3Zleov$8LCMB9 zQ;ly3`0(IE!iNtZ0epn;5y3~y7~e?J+O&;=x3mU0=p2IKU5kG3`d+nz5sq~5K1wzG zjdF;D^J++CZGz0H(eNGOU~-5sr$>XOKTiFJXp21-h<|5JYNbN5trl`dKuQGUG(uiA zP_)1gF;m&|er8q>q_KR~evjE_NdHe&K5r(~N&fGOeLrm~ zS%vA*UK%0zzk^zej-lv-nZmBpuhn@qBABNpX(->^hL0N7Wa8#Sq^-s;mx|J*NzNDPV9!y9;uv>ItU#Fd!^JqseHebI3RU6D3u?Av|Uo^_`_295h-z0 zN@PiiV^ZQcIIKgSkhVN2O+F<(EuFkhDheXbfU&qKaaKC{oK*6^DxTmBlBMURybDr! zwp1=_MdU~wsg}HpQpa4WoQ`A<WvQe2^mzFdY0_2cHP+j8Dd9MrXGw9I zN0jDsUPzFZb2p?!m1KeFrc``OO5BzbccjE!sr;UlxG$ZMFRf~?Yf4!p&AJqm1bpyV zAa!^kCBRd)rBdRdbV991c3s}Mo_~Lw{)luiKEl<9NkfRojDDE(Ilpem|N6r0UoW=C z{o|#5m6dtrG`!q1SBOx}*O1zrb#MJ*!I;B_d%Diedix9Q?J0?MI&>tg| zm3bHHaYBiyAV($RdsWIOeJb;c(QL@#8Uk6y+>k085xekmp)3@4;>-HrP9oU^TwfrY zg$IdcPx@8ng_o0g(l&9ii6i5N4Kt0L!c$h}g_2WwO1wfUQ!*DMvfVWXROU5_8+dfv z(WcnM&M^szrdZR+jXY&#-e$N7JZ<*^Po$UZ7~xZycMI<3DUpX($v7!xb3C<`dBfZj zo+K`#Oj49zM1%%A)MIVM03-d7&(*G*Oz zUj2rXAc6PY{Oyfzb(2x>iZ&(c(po7m;YnJJ95iY;)Kn@|o z38WHV>@HIh6LCg&Spy;&6Fp=;bcf+1ewBO@drC`A2Fn&KsX{-bM8jWJy7 z-#R978^e#3xe~;7>=^~#GMTU_s8(VJo?wz`|J+IP{DXFp%1XT4D`Gb(>}eb}+LW+| zR95C~TMTxNmU%nwC1pJf;pUv-9YXgpe?-fA5yXDHd=ThAK=L$!2O)y@2FsMy4w24f zrmdj-af2YkVO(Xf>@0Bv-x&<{N5Ni`1@?FPJ1WUzqyn$FM=8X|$*(d)AAMV#evhig z#Kp*N^KkM|nI|)1nCvkR-h!nuXTW3QWVG-k$qNWLg;U~W-c?SM@-mOmQ%1)OI>Vff zlkFq~4&TP}lkh+BvQO~7D-BMKlPU4SkutjRIf%I5c~V)K7f@XQq0Pt3lvT1xF;uQO z207#|m&T1fa7L!A7EanId&r0qWjYyg5&t$G>L-^OF#* zGSu>b9?Gg$NXIsVO_4)8#3q_X4vUK%nsAjlIaRisfcHmfSPOZ$?bUi6Z<`L?#0^Ut z7SDiIeUokd1||O%xsAZBa%9_x+qh^3c)!Db`QT17pwSV(Akh2Nl7_z^(EALCL@y=roM|*)mL`EWIBD2pT)52K zNq<=;YXa|cvYhL?95TED?Np?rl6p;wJ0!Fj76-k?8@zZqT;4@cn`{!k!x|QYp)nl_ z`4&5;%W6Wu9G-61hrMS{Y2kfH&_hN!Dyx4aojW9Sh;210F>bgqF($H0T$Je(i7%$h z>cR__G-e}Qa|OV^K$hGUY}ZWU&=sEjp29mIe+p87!SyRv805Qv-~c` z*ipt|Ec_>ln`X#7h$P%U1L|l3o|_@_hW?q!khO#U`6qjF68q(Y`>uqFo6J|@hJzfH z$|-zdhlJ1(rr4?c8o$O6%bC&+Q#uW2u7tu(=POZ*0m_;)_*Ki&n|Xx)ZTWZ8nS2eK zircS(Ld_~Y7z+o`YtL8(TIS%)RX|ArisL{fF&DR7Z5PB;_LP>K2h!fGh9MR4L$Ti> zsRC!NmNg~jW6w2q85Xdov}76}2Sh00Wj|GM9!XcF7V?$9io%{zNG+qGbP?zROMHI~ zh+GVQTCD{?OZfH8R@ir~OhGKgE!IM?ma$(xc=1{Y)^f1)Tqjd1()mu^P4VSwbp_R9y?-Uz|i0m0B` zLw~iCFE8t_EFJMKX5dEI-s;3|+%+4lTV}yfv}aux_KRUpX(fC4q&6UM9~8UWU?p_# z+u$T|fc=7TG6&!X0Y2d(Txy4y=5S09hw=D}cC~(lJ*6d&f@x;1Ov%sU=fQ|MQ&tVX zy(l|K9K+jkfqI<%0%{&mPk`yzct<61l4+hNd&nnG@ipcXxcxN<*y*yPvFyAbvLp3FILd>9Z;4gHYgshxH=f3xybS)1JOqDNaPdRCqF!ZBX~}C~()AITT*sXs zf%_Xc=@Hb?O?>+i2+Mf{!fvtu)U_GBSA%6|rqUgCStK+`Ms%Lj)%2TiXb zgXb6}@djr+x6@F>p3;)VV37(IZ?WGCJBxShDJ}UP__JRC{{x;0$HYf`+vU&>aJKY-7gVwYDkITE`nwUdDF<_cW!)?%3pnJUP|t-i|? z%)w$=GXXIVfBgvaJ0#%gLgqu!s7WxtTOfd5|A(w9k;aVpB%V5$dYWTRy09@;s) zb(p~r+BKcw@u>DZa)m&{+EpvpWo8I?{+g9QxHm=VvPz&RC3NU&XxpxB_wb&rI)}Ag z%^c%X-T34h0Du{8BB5w9n4iD4~1>Ft6Vtr?kS2P>g_0 zxIj*MSKBOLXTYpTK=*7L{(CD!t1XPHBbCi3w&E96DXn-LnCrF!e!PNGI%W!FhHzGn znY;t{hLglj{GWo-Hr^#rR_1r=y9NBVv7?6X!S@xEH^~TU;(;fmHOak#zt~pqkCSRp zG8}zES`{Z&qkPDHPzMFzrTlVuzkmoi0HS`I0rhrJPz@I>lvN`S39{J+ti|^WWfV@& zpdE2!bt;KG3=Gy1OKU)^jzGSw8kExMs6g7*T=*`bzqid2jQHihIduI;YCvTkhpNb$ zt*m}RP^HY$5ZXPwhoO}rtj9^**o9h3o`QM+oAP7d>9m@Zx67HbY?kO+vYi!RR%CNL zwkFk=JO{ZoDN6jKCPkah3zU`lef9-`BrG;2G0~Ken2;?{R^}JeIRa6u4hA;EMI2X) z@~)mMr~*T-WwbTVmf6HSW>YPykVjm?Kb4dZKI}$O#AW8Z8>JP&m;&dt;;RB)NYFJ1 zOZGf=5DBkGRU>Z*?%>V7lnawmk2=XCZ$gnE75`fwf_+P{85hS>^_cDTsc8gxyEHA_ z7t-!PMT}@nDQnynR5h=F}ukJ;!;-Q&S16WbWnY*$khFJFK)f6$&d z_Z}_4fTWlrHT53>qYl`>r~|^%=PPSGECv1^Gdd7{VReU8^30h zmj6PQLKoeQOSD`%pB$M6kTH*d=|auLSwCEY-a~lqLzQ`-9*K z!kXC4jjBmZWJbWTh)fo0aO3{KI1~w1lbG|7RC69Vx$LZ8G@PA+n@3aLu2Y3B<#hCl zNgNy+`@3nFam+L(DVk~^fUO>nSgQPn(F~kFlp3-wPFx>V<{&bI+L1! zJubm@GjlZMMvx021n!9tn2Ucwm8A(Y&FvB|ETpR7jasTUGj}#MkRWlH+1@c=wos_V z&J&;$UW8wbpu zVl`;`jvbX%*9a|p2Vt>Mr6F0%Y@1H?f*0cB;yG}IG@1=p$a>)poS6mkaEfp(LyHqJ|yfLgU{rTv^)q-PTbh1bLt|wft3k5bHNUd=Cj- zalR{64ad4sBJ!{>2WK3BuHem1N@6~R)&D>PnbVP4jq`JudL1S;cN=Y7v=z-_j z#0losPU-=lIEfGKg%F%#iub}@AL2B7=!5$lfaslpJn5^HRnL}ITWJiS131T|AE1Vd zV9`P!hs+n4R>vtNkH}^Zeemp)kU0l36Kj;Pv6OWZT5~RQ|0LB~MCQST0;h5NY>3$< z;SqBosxrf}sfIlAa%tj`i_mJW03d#ilDrC4H!z!0;6}NWkhsP;=Tay6;=TBpQ!Z$eq}g`MzRt-J>2-=cJ6L1|L> zEl7F*#oWGL>GDvhFgLWWafuybyR+Sed31TiY`R6MVT^)2V1|F*g*;D$X}F*x?O_@A zboZ#YQG}ZnLWLLO_(JMt+80WZb{|sTvS-WZdxsCdgp~Kp zJ{;cP4U5VieNPVEW}HTsCwiVp&KqNqTI-@!t=P* z2WaHqil~1|J7eMn$W4DpJ2A_Osj58k8(e71ir_N5{tlYLci}yP9eUmI-=CpRg?u#L z>O@b3RVeL2{wTA3^&Y}h0%2;lMOo*kuok;bW!|SV*Rt*QR}$0W1NDGMP7rBWW8D5T zc$p}=ZS``HOfF69_XVhvM6eX!q9i8cxnHOn#OpU>zJwnj#i(@U*X-vK&91as69O6f9FRHesXF^Q3b4RO|8omrwY z%%9I`0T2IpMAyWA4`9Z;yoBD3Y8<14K&gSBhpOkmaR8cjy zA?ruRMZ(P_>mJX%-OcE8LK2BI^Jyh+B%*2ld{Lp0jkXK+eoqf(!Lj(wd-@quO+qh# z5zK7rRBlR<2H`2#4qIv>51jRh_8=BADj6*okc*(akbnm`(XfLiy2UmWm=x52N&D6- zG|fOQ)+Wd$rB+4GV6_xj-7=NrGLak0s*0V&aw)l7v=}##(Y4G+%+M_qbX5XIIb$taORg7W2f6e_hg z?M7}9&BI4L=<3Xh+Vl?|xfS%L?ov9H+h*S;dS)&X^SKV)mLRv6+1QTlnGh{vx02i; z^29T1(w@Xl=8y;7m?U?BH6)bZ|J%)YD(MjfxyO=-_tt~RG0+SLHlmfzdqp%`Fjy&C zO1Y2uQI8%dhK;uYjc6_ZfGE}6A-glX8qseF;vjn(_LKZ*iaZ32Zp~0W*BFC6wf}XcIeY@n9sa=vf4LrZnwfYe+i_ygK`o zusv7YnyyZqXT)vjcRbjdD`-cTpIT-!et*#03D}{7BrSOnGS1njl;?`1tdOwSQLyo! z$8=~<8+qg)tGCO{{f=}Wg1ll$#NnN3y2VwIvNFH)ye6tr?tUHXGT}N%xOYGa z8+o~%>FVT7Q3O7iM7v@^7y1v_%5w^}E5U6hsSBM#z^xZZ(u(hjc$(mQz{okMta@MM z$TH2d?C5CrE_FULF_d1Sd=fz0~~IEd#ex2(rnw_BkUeVdslfZlK&#cvcM-y zuQ0kTNj?>6uxA);M|_6!dehU$=cS1_sSni73sAS>u(E2QRb3ohW&nH1obE$A@yS=9 z04#9HpEOOpW~c#lHG+Ioda`{uO@|bTl$H63WU)y8>+Zcdx^MBEa45z*5xYNKdaIR9 zc#lto)A{5F5IQ#;dadk%AoQc?6!xSkH~eM-T)a+3dOobe$}G;CXc~Sl$qUeZ5#jqL zx*qveeh zVE-c)bS8^S@o@uT5#1z~9!XBJq?ez&PR0eXw0Es3;_7UXEtl;dBTez6OtFz;H0}SH z%6P`nhO#viHJlE>8{_H4#5C-f02lwTku(L%vu)#PH=H(-{u?$3;k=fdDTez+yBw9Z zW^sc3+y65g1K5>GPoPC4-0X?}i|tBA11-fu`#c(GbJ_D+G8JfdfJV*}*T5~u(h8wp z`+tyl8_pO)*J5~o!!<$97sLHnu)!_L3+pP#y#Ur#a0F#cf;w3S+0rLKw&i$55@buq`;zE~#0tD@ z0%XX*c@v;tUCAE#;FyUt1;1G2X#!S@;a1aWSR;we7ae;Wy+`6mSaN9A;_*|V9?wst zPr?Y2n#_(M;v3j=3SAxFO{R~-2$C@gPHqIk(KE`bo9qexn=OQTlj)P>7N}aVDu3y2 z#qLw+x8ycU8V;TcrQZ(4FwUTrRWt2*+8r$K4y>NSXV`ToyO_Dt=p1$>1xZ?R4=}#( zg_R#;&(Q6)XnHsUH0^`1vu60>OmMuvtZ*M@(#OdIWoh?kL1i7puV&HSRS((Y0^n{A z8>D8l0e1wlyqN`;p=u7`j*7onVih`vene)KrS(mLv}2&J|9-fAa~!9n(AA|U#7~IQ zO_bCWT7i$J&=+8ZGn;!9N#3GtR+O8VvXs#R}{q$zoa}BCkWWf)yT;0Y$zce!|WaYO*u7+RWAr&_v!WH4v`?gImB%2j*>Y9hO-g zAKpldi95`IRrF;cc^6C}75ClAD~2@ zk}MFrS)fTf;Uan<-iZgUqCJ@K&GdXB`4Dn|5w5ipay$}Wx3U>vD+%&(slkR_VDJQx z@p($(DZaN0M(Jnx!!G(K`5a8(EUvu=TFVPYwTJFNl7*!w7wv<5FQJxN9s=AeoU;!u z&)3Y;eY76_U!1u4A&7SPL5OydIHxq)a}Ltmh+;NLOTGn<*_V|r@5JVLMu%8~apWLV zqUAPC*ogPc_Cxd^>{{pBQ2^CB3ZRc-c;?2u905=j9DbBu0xKR!*YZA#v0oPS`(MP> zan=dCI`6BP8IeVQg%u67QB4-DbSyVj_%3EvoS+90W;RE+yIx~~|0L!eElCo9=W?RTrmbCJt^J?t*koK;*MpBJk%T`#%u4M*3r0=s!kXBDm_GP+bGawc-m(w5YKr}8}Z@ylo$pV$N+;26rOknSIs77=@UAFAU3Bxx8rR2#VK3K zt|YdCm6qHFnYX-z%-flM&*{!QA`@?V2`%zsAzUImB&SN1NT{?XKC3KU!CD{vF(A}B7ujtx*0Wm4+-zCgiK0CwS19esaZt#zH5Hv=T zV_BOr(9;EylW!?277N5Ad0tWruaL-V!T2)}5=k-}6hlJ!X+RE> zA(sacsOH=XfYEZCiP_Wp#a`u*yQ+2sJaf9)zE*~j_2M>nTg#w)O1dX>Osg@<$ z7f<;}0v06CKpw;+pOz)wRYT%4ASLNJvv^I`98oImJ)iFben z3_ft=gG>D76!99%v{0lslIl2JE3fWcB$2VX+3Ohm7lR903$13n7HZ=yGg~X~4flk~ z&QgKk_&qpY(L}DKK1jr6SwAwJ1LfWLFx)I}B8TBdf-g6b*CoENhcG%dg_3`T*75qe zlKdvAgZ;Y7>yY1}nPfGW*ARf;9}=9}RPIlfNWQTpcKe^o&I7EetBvCUM>T3v+_tq9 z2Tm{{K!^hcRNN48i`7g;QDiuh~#P;t}=xWy4HT4zO^)!JhF)z;ef zd(S2i?s?Wh(WZ2%d3X#a!@w>Wzxgn{3!YRePiy_!pw9w%eHWHA8Ex`1 zy*owrN>~VPT@_v*FOrvw=n*!kTX3iDU&$-=G_gmqK0SJMNBe;1oO=QB2!2<0g}ijw=xFmwxje!UkMknfhjjc9A3Mqt&*q-5 zf>{xYM$J~s%P|@IdX3zp{RpGQY_^!4NeOG^<=HhlArUYC>)sA zr>uv@ju>SanH1KmQ@f4wifj&hbYhH!ecU8{-`f(;95Z{$_j_m**NAd$I{RGZ~h z-$?ak2XB#A!{qLx(NKKx!?((-V|qwzY!J>%9$EaGZPGW6-z)ybcDV;ix<(s|dC7oV zdPS{jJLEWZ62Eb@TW0plJ3-My;T5<`?%v6qiLsZ$7mAZhhQ!7vbu#akS7?Wu!r(NV z?uHSTJ#t0YSoVN$yv58uC+x*p>k2RHKDmeEDC`Ty#*9wH7_)s#5t(iChb0ZbCy-vz2;|=F%Q{rfxjNUuiGL{)SC9lLo5^iK= zGT}7XBNdJCX6AXM!V5>lJbNlW=y_INMOu|G(i$7V3IJP%VX~Z)V>3D~v0bc5n(u#J zUS1kXw&JN>kb7V)!GVKL<}kKm!;lyoZ+2!xh5~?tWDSP+mS3xJm#T>n3x-KB`fdIxOfF~7nfZm z+?30CkjEO55`K{5tP3;$;+8Y7eE2Pq6g${A zVdoXkBiMgJ>nQuUNt@z^)T-JDR(UGJrB5-_KGDOUo=Uy+>5+L&F7&AD_^xWr+$XTH zu2SExI!#R7^R6u7LQ~0ax=M(8b7kwRldXpPPrAgV4gYxh z#l|-c2Xp#(Bx_t)O-6-rXMLq-kSki+)$b2CHH69yl;Q4}C8h?-K2m9zbrd@w*^bmI zUXIl8Fq{Aw@5PVJai*4Q8+HWhHsq-Z4IRh+HfK~#$aAFDYvf2B@ms~AFr^Vc_9CVx zv+_0JRJVR_MurFG3@+YvW$hdhnE%SjunJDB&QI&@ue18%KJ_YJZ==d!_BNSJemY;H z)nv9>eCVJZy;d$0Za3zqp=shcxxr0B(_ujqo?7Tk9rRIk6@)b9skWw$V}q)WX$(&t zsiDmrssG--a2r-N=KR>5&Qz~aUt!j(c&bU|I5x1UF#@t3sa4dD)Jf~>{sHl7er%32wPxRq zg;3X*rzZF+`@F}pb7U&cPH3U50S|nYI##UeX&m1)>hwP7PvAFc8ve~i=Qq0dTY}n8 z8Nm*p>gV{;-y=@+h1-4{ukm-3mZ1M#Qx@Oi{Z$3^{7@!yW%=YgmX;MSvB?_TyT__w zdt_Psy>Sb9e6gq6;A=McTC@gDfS|MtoxTefRm*S*_M0tL>5s5Qv08P$I8VEgZWiubp#wzYW`Um3ioRkmPR z6smP(QLoDTKZR9Vo<+Z6s#Kvb&OY0gKI3fM0@;<-r_M8W@r2uc;>7Cwjo!upgBoAE z8mRLQ3=G6AmsDz_#;n7)uj|0>bZq$+&ZBt9f@%8QD=ODW!KfX#UM{4IDJNiI;E1sHzsS?G{ zV-}=nkP_IMQxaM`j<-Jd4}iSZ{P=o7j@0%uHGVK9h^Jn}R4M#R8&Bv>hyOmlJi?Xb zy6+f%OCu*X*#!heHCo&|(1aT(YK(qrKds7WF&G8mPrLv9c-ru3B)hU!*lF0+ z8qyKF3@&l$8sa{&X#A^Jh7_+M>)Y}gQrOm!MVHRG?}d zt2C?`RI9PIQfsx|MuXXGRco=H`I`ipocQqMSF~Y6bD7MQW!g@|u4eKNu5#&2?$$T2 z2i**gZO=1#XM0D+&AEB(6jbiOv&huJkwt$idxp_x{0UwQTv=uAJYyHLXjw6=4&Nfo zRzR5WB8A&um~iJ(f2+U2Z1Klyl^~1C7j?%DUKl@(oG{19O;FVN9qM-EsRE;jnu*sJ(JiFz5 z^>2OAeIt%T5UzP6zX&P^RK++g+GN2XjU!=zHUf zwkCHd-R#X<`y*?7Hqy~_Z^u+T1SdZ52mLw>K|(ul>m#r^t)YHuEGEw^`>{3&>cHHbXmrp|8N^zTN3tUcKe2c%~nhRNQ7o zZQKdE;zxYF8!IRW99CNk2X=m+Y#PlKtKp>;nWvqi**FiFEB4*M+Hg(J<$3y+y)h zcd!wP60jHfOj$s)tzDVQ(IkG-8M30VcI0&h^*{ltN8#8zG^%Gers6h}C*QtH+dR_E zmKxEtL^Ct>a>!paHl#ZgAXX~8C--gKPnU(Q-SM8@7@!OE(_$f01+d+A%xZ7!XBfRr ztf*Q2b%9!y##t6z?8G$-cVhK#;nHOxM{oa%uF0w45Ijf_<3E0E(}u3eRU?>+$GDB} z=GFAIVs-=+iP+8hNBYp$q0)M$;_S!6sx(())7K3DULVj+)I<7Uf$v$*tv}H0$C8S( zUtB+0?5)Jb+t;Wbpf?EEJ)TY5M6>fH6=y?k`5tsk+DC$$QNZrnBYFqTJ|wAl^;o3a zgb%H;dieB&3=yis>BjSD)Oty!dyl=$w0q=SX=uT{MlYM8Z^>>9J7&A}pV@ScnBNNw zCd?>_6!t8YzFNNM1s-PNgqiB$S8L|bSIaTInToShGd`?K2lIY!o4P-3d*iwD>9p;^ zeIN_bQUEGk{07`C7|Yx~5N8p%tT=7+RN7^SzD&hkcD*}U&}G`w*X9;QyY$WLdyjUh z>Ia@y2Rdv`rLA;um-Yj@RbV^t(VRHicJ=;D#cgkx@lQS--0A&o_JOo*!^VSSXxp*@ zkTS%9K0Cx~I&C{<0H}uwY~T2E+9cZcJxRrFU;e&!AKG@GC|mj<+IHzB%O}#dFGNAX zP>1cLKP(Zn?N$RJHCkZ%`h>hiwC&xJiraozHGeYAZult#4->Had+k0zv(qINXBR%b zxPcByX>vuxcdEmJS>-QN0xQ!5?*4_vywk2`#3qd<0Q*o50$pSE( zLewrJWQb5{rCQ9Pqv>s8Dt^ZClfKzRM{}_W3?l_Lr#($8Pe-$gnW;EC`u3`k^p$>^ z89ZVIZ1vxM-_lq5_bg1sLr^{53+yW~1d}X~B|@c6D1Cs=m}ioT+f06XsULk|A7X{L zQ39LSGwYY3**{1s&i>Mn^eG7O>AZeX*JLtsB8qoISVx&H&o?rV&siVmH1!Wjozk)EmiE zoV|bOi8XXfTKj}iDDRxj@t+IRU_rsC|#e+#eDzQ@Oceyo7KP@U&X`~Fo@akf=; zU@7f;&?s;lCtz0^vA+@R`--IEY|jBbi*0&Uyvgny2N@!^e!{hnY2P`LinHT)=Ood- zo5zD8N#J{IZ=D!&DsAEW0$MA4k-oF<=*=t}MEsrrSsDSf=7x_exi4Js&zjmCYgE?m$s3!>`P^L+pTsoL#lbA}E%q}cVR^F<^ z?v2?AzJ7l^HVL12;M7Ee72oV{F|s%N>vXt_q)BDOr#=RwpDDoL8)!0>7>Hn4@qDKr zUt;xd;g%eTVC0U~%gE^gneg$Dnk)#0QlB-G4zyiT@nE#8yz#Je!1VQCwEj#cbLH)4 z?--1Xmsq`jptshfHsB->e-%FBHsZLVF3_yg_-b*!hClK6hXrHQ>ZaSfV9s?Yk$crA zK+$ADFj7Jm%&(6MoZj%poNei_U2B)*6lYoXup!{Up>T4emW{wEAk)0Vazj;2i@!<0UrvEnK?Pxj*}T ze(?>sFmjH6KOxzbSIRjJzZ$#!?|KrG>>`&o>{c_j8CgwA$?VCHF;$R#4RUK9qw7iJ zWTxUpW8}h}CrP;M@MJJd6R^$s+KMzgIEAS=yX}%J4b9$?0v?|W*rU>-rqS%?Q<#dg z7yY^=ie@jF0$C!q;#Av?G`sdxrsC|pig*5@*)yj?+!q4h4?@>}LbEGOV=B%*88lr< zv&T*Y&*=ho|DieOY4)Fzin9x^?C(pnEuVv3#IEMQHJN7LmsFe``M<~MG&}MONSPt< z-FnBE1e%>Msdy7|GvR}O=o%S3T_$toy@1Xd`EmsPzboXCmsq{l&)clh;wIc$D^3Kn zs&W1vUI+vIail)L&njrEhkSgCewrd{Faru^3WA|*e(n+-jP;U=2YTHXaauaiRc1o! zECKsq&&V5Wuk+gY_xfY;MUslM_bi+92hEnvvf1an{se@Da7oV_9car_Wr-z4jlMn`(&q@G5pjBEB+dSG4pZ@BcW6bo z*Y-YgUIt{c({r$kU^4qztp=61+N!}zxzT`AIRgR=-nsylRb%!wX|>jpGerKo*ady* z#3sLmOJ4{Y{yU&9T~Agc*_Bs0I_rt6SFXBqUF6b+%cQxVC&!;k$)@9rxaSJ8Z}!Q* z8_)w#@_9_f3-jc&`Ze_JYRWt?%oDI{-FV_f-vK8sKslNCxTj?xr70yTR=6PXHGBGhLmx`orOawQc%<96}`S@apVS^#mW0-IHT zin7z}Oi9IUetG*K=$D|)1~%|qAV94>*K8<_S}v)$O$ZI#Lfcd<1iOem`>-;AW>1$? zoE`MtpO0wvvxT{j*gRf&jNk_N$F2~ewYCS}vEsxD?Ko+TS(8G^@~(-uRKh<)~9Y!uD@TT*d$ z!ig`{bTmhN4e228ZLKrKO0(}tD$f4j!c}&f-Fpe>(**2}`t(4WeO^*=wl?#oU<9Gf zQgB-=U{`4nf0kzNl~kPF|LQhDE6`{eWFXsCXJyGz=eXxvD%0$ANyUprPU>*5@5W-` zu^bFv3v8ZkR^>+;HA_-)l+X0CklF=N&zFP85&>%FG}SLODq#gv@iR_3+PONNQ-v!a zOT@l<=lLL-9kr6FIQ!()#e({pyAtA-3Vdgtdz3}9+ov-XXRjUBM$iyuri14)0lV~1 zOUBV`pH)o7*{Sy@2^zxXtH3T|H(9z@aP_OPnyGlls8I#KAiAG1eKk(UGHEqtldlyA zlC=Ifkc1mn8+BHVw^nWO_cv-)27gVUv!CH&f4uA(CszL!F5S=YU%u-O+0T#-UjynD zf$C|TDF;I;!@1>j3M(gmo_q3Z<|b(^H(C8^B(@u%q8^~nY(60y(z zwQ(73Gfh%)_R-;S&uMl!d=b?uWy1xVOEy)j?0W?d-%=zIkHFCo6S%R9VbMm=uNFk0 z$-GN-X_vz`F%@^|Ugq=w+U3A{e+2=uMdz0&DB zqH~gp2l}f1V`&W`Yt&vJ^KPF3b`jfTdH-WN6Awu$UfuFH*`(!b?moC3+eU%Sbq}Ae zrcvu9m80gio(2WOvF6s;X*2AmyX<#<8@8V&&EE;?O^%XP=CoW;vShn#_T44>@SoMb z8bo80c0qv?+vif=8M?qe+y$xM2u}X5-TjZ#Y-1)<@ssbU+5_qH@Z|F{A$YR@WxTO# z6piY#o2fXed(&wUY(&)l-B2V#dHdgPOr!kvFcq&xPrJ3bO;@8edvFlniWSMIv3gt0 zRvanwGviQ*N@w)O1(UuOqhFv|t$DG$`{PFRj#$;9bT1;x+z;|s$54^J{zy8ljL+R}IJP27Cf?(8- z{%0s^%>;dx4-Y}y4gq^~_I<&0-G!2hmxqGh!P4q9_tJ;KbEg26^(?V0 zoo5pz6}S1*uR}}I<>9BpU>C91^j`#_ku-ZlHWVP+w(?lXMqt=qcW2RT z&m5-W?E1!dBVEE$b0BrMz<0UayxnvOt9q2FczAmSm>^{khIjT+2;L(=%_Tm+|`vh#|oRflyABQCsXFm>`F@|P0KM8K%3fNuhKl+^Zy+Kkr>TAJod=R7N zDab&S?fu-61*&E{&n7e~RZ?-A-3HG#(*+9O9d6h!u({4$sxEzxI!#h>_O-rAv2+NY zp9YTu0`~E4Z7b2f6V5OdXSW@6yA91QJOf!G_JdZYNSYm$%TzqP{lC5eo>^ECa&sZ> zpupzNj@#GKsP<=>irbue{)%8cB=anI9ulz6OnmyBX8W9DD$c%_6(2`u-STr_7qOQt ze(xaN7I>a#DjtHVFTR2FwHSi5^N?~FOW6Fpk|hjQ?CL<<^tixO+~$6L*9&w`rCb2@ z5kUx)1L7ah?B|k-+YI)@C*M8L<}f=Hh){#$Ok-$Np`_v{xLXdg*f@J+9;9XoTs>%B zN$_kXS5oma?pz^oFnz|YE<$j&fPMT^pYpWLOi9IU>T1;i^Tg|6CAxd1$jA4)m@EPK^jYn#3NUDKiVTjY8O$1!w?$>p7|m*5e+@o|eseMS ze?Msa@+CI#EnK>L6%!T*`V2hxr}>~iDhT7K)7kEH`5t|VsdyGe-(M(LSoQc4xE&L) z`&FFygpRA_GE;GO(Avds$qo6OQKO_tgjZ!i4!(ZH5~qZ-D<* zeY%LIl)na9PKsf(k>6P+U4yujf^!{kEo}>pdMc^-xyE&j5 z>dQEJVlh@PpC3SdMu2+o#~#7j{PmKGqYh8Z1bb^l)wpFd6w)PUR>PtH(kDFs78IOu z6w0o5whIP9Wd$~SVacKtP;}`%8kuQD$e#uTu_-VO1b#@@^b>;Ewjvm$5-v|FcoLt zXkC9lU6eBKfd0IIJ@9d+o%S7gm#KLEcQY4AuTyc~b{E_(2vBQm+8T6DHM+-C+-7#w zeqCsrY4>o8Yt}V+Sh8!9G@!_Xw)x?Grs8bn^L~Q$kPGgE!7lLK>D2Ke+INKqOvTyd z*FW1y`~K_!c;pG#H{F$A)4utqbjf z*+!rKh_9M5;mgN-aTc|&KbxJc(cwH7R_b^`KVV%hBM|Kie} zfNYq0gI<-TeFUE03F12Vi=4^y4a+u3#q(_QzCHoY=)XQv-QY3UMeN-^m$ji|%FFJI zF8{_Px349Yj=kQrV!rYtcP|q($yYX&RwEzjxi;eqH<>I2|JZN7`Zsn6*z=XOU~ay$ zo^-s66sd8d@jfPb$a+9{eH+KT;v@)G{Q$KApEl9Ihx6$Y};xBJ0omy~tb=Vk13 z{tVcEN%;x;d>ucRI~mC2xO7<=sZh8p+^6o6$#&LKqWk{?2OiJ| diff --git a/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU b/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU index 71852e4..0d7a8a5 100644 --- a/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU +++ b/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU @@ -537,7 +537,7 @@ END_VAR From 33e2b96d4890f146e75083db6c74a17659ffeab0 Mon Sep 17 00:00:00 2001 From: "m.heisig" Date: Fri, 20 Mar 2026 11:47:56 +0100 Subject: [PATCH 4/4] Fixed AxisPTP homing position error --- BasicComponents.library | Bin 1038391 -> 1038491 bytes .../Components/AxisPTP/POUs/FB_AxisPTP.TcPOU | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/BasicComponents.library b/BasicComponents.library index 8b2a14fd8f2e82cf527016e011a97027b5dd82a7..3f4a5d31aba9aa82ab9c59c50de5b68167deea8c 100644 GIT binary patch delta 28525 zcmb_l2Y6IP*WNTr3W1ml2qGjb5Xx@07n<}EdWh7>W-AF0VjyCufe%#-+_~i)3wFJ-YWFJ* z2lfdFj8rHTH59q8Wh5SmZauv<{Av!Lmbi9wc+BFiEriUlDG`(Ad{g5ewu`ei*B~yA z+S&C`tlzK(i)Kx$YL)oo*{5c--Y+q0cG0@efmP9j{80o&D-=zm`n~vj4EfcR{80oc z6^dq2b?+HYl3&fpA4L#E(jsdAxzTONuNLHwA_#n1Ms2oiTu*+rB!3h^trUvZQK5~7 z)g!-16#xStRn$A0c3a^`mO@2AwL%dawbNofLVm{jk-tG2g+d#Z`nb{eHGQ3UDy z6naBS!bOow@23zg75_*ptQ%#-4 zV=x=6dOfoFHHkO+nZVwx_@hQvohqqKJl0^)n=e5*sSM$N25$xJt%fQKX^_>cKV4%4 zC#aN|9Jf!KRb_EmjVg!9p>eu24x`)SL}4LK(9?j3xP2eUiANSC z#A7D$-1xiyY43QMv>%nqYTW7pdaC^RGr{U;E@`9w}Q zG8iog!V&xH`!-W|lp5p~R{p}_Mt6fe5hUuxbv{nCKnC?<7O}Q@cndVAnnAePXlB(0 zLtj+$h~&o6t*Vw%%Z|l>X4SK{(lPOTX9d01&JhOq3Wp4{F-fRd%rm?2BF)aK=21q}t3i_Bf1hV| zsKIz~qz#_k!C{8X=){IpD2y>h(bWpcPpFw(Rda=y^0Oje7MEm67NvB)c&E+JqrKy?+f8PTS?^X^Jw~g_V0RhdB<9hm40^Z5?bdrdMw3&F z$Mcfhcw|vZqkl%(fBr(hy_75jN6g_g%A`iLQHu6E`lGvze3`jkP8PHMtL0XfckLW5 zvsvrZ=~Wt!6KZEN>Qxr2!=lpIH5#qPY;b5zCb4$P#*uN?ESw0cWLp-cRJ%S`PK-bW zjZ=iaJ2>3P*n|!Tr+aBVw7ZE-7e3&idUV3!7B`nRPlloBhE%*00g@Sh_RY=c92=Z9;6$Tu!^(Y)X$c zzbAgt>sYti!?ETl)jqsVDk=F7PY?cuIySQjkGAs2_cWts8??Gq)S|gf=y8E(wyHTb zJJn0s2-R-k%Pglws@OMPxHtA6eZyd|>pc!wxoNdlSea;zT9rfV(yQDiqsikinH&Zu z?fJc9BICFbROuVCD5a5@^>FGM@4l+DSPX8b%dE0nH4u-{ZBbd=9=A%X(>XO-r`zb% zxy8QPre$Pr^>3VvREb9hCA!&AEl$aHbx{C1(lSNhQlk#7Xjfe{Hy{HYXq6(wyfTl| zFU+ko#PiqapLLDeLsugegg$8R0{x=2wM97R;dyD>P;&Re{9v@bO^VR|AA8e-ZchO!E%Mp|_ZfMuP|XA6z*YTy~h7oEp2zXtzLs8dxNI z%wl_g9xFEvE#vynRa(gXU_?LZ{aAIn8=eLsv?h|4O}6?gLXx4`|jm zw7$FwwRBd#9{WeCcg>x4r_t%OTT~8*5iXoeR;SA0vA9)wy~XU&SUhg4#tt<%#BqbE z(h9QZq*|w5o;0VtW1@BX7}Q;F5x$S-)q07Z_P3b&`xl{F2AlABGS4jAKJ9w~znD zySY79lf~(RnapB`+09_pI#d>;7Dk}k?a&!uIRt}J?C1yEM#gais?y}LD5Zh-xM^&3 z#U&EVNlu;4>Vbhl^?$ z2`0DEWVE{6E;OivA@0ytIW>?)Ck>#m3pZO=44_3FW00|z#Nj}WtJJSWab>Yw-(235z z*xGlYY}X?-1JU*_NkUoUcQ`{Kx+`V-uW{uWw7jd$hgoPhISQ#gyG>}klxOx$cN*J|rscQMfF4OgQ4!CqxCf1G%lBbzP}`n1A7(pxQnrWn z50s+Dy@2g|9$RiN$~NPC0|N@~o#Ml6Uhj!wPu>vwLQ;7@P~bYlp(h*SEW-KP?{d;O zD~>ktl>3pz=+C$mp_PSaHnmTN*x^t3?G5(s@OrbyWHspwDlOc{f*}hhafizaClI&6 z;nHa|PKTDRje7Qt?9HXFGHhi~lC_Z-&Z1+p-trDdYc}XTI)@%cog2b&m^~_sUZ+uc z^f0?Q;hvz`r4whgR{bL5x!~VX^ zVg^vN5id3JpcMm>g~&NPwz>nUS@)>v_0Zgb$%1w}&n$2dovWhaGOl>%3f8U`v)iCm z>2+qf;5B8gV z@8{4rLv23H;)l`o-jj__2aUsBMOJ47UmU zd+^MnM^N(5-f6qvi#**8~ zRH#w@&c@2^ftLez1VY!MHzXG67IB)Unw$36d#mOiLsQ*0fp7Mcn?}B6^sz9MnobKVe(v|3SLB6h5c#BJwXmVaVosTvQFkA zb;>AVXDrWbeF{xWb#2@TFY>5#An!RwE&MW^=k@j&O8(0qVLzb1$Jl(BO&m+je!6dJ zjP8xK2{>j6C)C7o)U2oRgGcmSD(B!5kkG28Y{dyl1JWpJWcW% zecBDQe!LB4QJ$HQM#cYXuN3({hJcs)&{N)1ZtJN6Aq zzRcb3KDzZrl29Fv@y}zhX)0-(`9%6H=<)htiCJEsm^4OYZ zQnu^!erb$WXWD$2)t;OxwuQa9uC7;yFPR24+CNz>)W5(Z|7~)r7(>g_>W9(zDK_EF z-*{%Xr_gi_GE95ul`icJAkUc^D{KtQ<>cYS)bSS5&^KRcw~{<#AN(vkjELgJkEW-H@fU6heUIGdB@fm~{05yzud`S+Dviqmt1Tm3);g?OgUSx~!CfY& z)oL=@QQ^WS3G;&d<_Cd;S;0L(m72&RChJpDld`bf!RYH5nZllByx_-VjS3B3tAjjM@Mz&7gU&&&#^DyOMhDNnUGV5s z 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 Gru`pq5W^w> diff --git a/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU b/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU index 0d7a8a5..e129bd4 100644 --- a/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU +++ b/BasicComponents/Components/AxisPTP/POUs/FB_AxisPTP.TcPOU @@ -62,7 +62,7 @@ VAR _lrTargetPosition : LREAL; _lrRelativeDistance : LREAL; - _lrHomingPos : LREAL; + _lrHomingPos : LREAL := Tc2_MC2.DEFAULT_HOME_POSITION; _eHomingMode : MC_HomingMode := MC_HomingMode.MC_DefaultHoming; _xCalibrationCam : BOOL; @@ -424,6 +424,8 @@ END_IF CASE _eState OF E_AXIS_PTP_STATE.IDLE: + _lrHomingPos := lrHomingPosition; + _eHomingMode := eHomingMode; _eState := E_AXIS_PTP_STATE.START_HOMING; xBusy := TRUE;