From 97c62e8b8085832defe24e33336ed0df1c515831 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 18 Mar 2026 15:38:41 +0100 Subject: [PATCH] Macchina rilasciata a cliente --- Beam/BeamData.lua | 113 + Beam/BeamTableTemplate.ini | 9 + Beam/CutData.lua | 13 + Beam/DrillData.lua | 25 + Beam/EbwData.lua | 45 + Beam/GetTs3Data.lua | 30 + Beam/MachData.ini | 52 + Beam/MachiningTypes.ini | 43 + Beam/MillingData.lua | 33 + Beam/PocketingData.lua | 21 + Beam/SawingData.lua | 10 + Machinings/Machinings.data | Bin 0 -> 3958 bytes Machinings/Machinings.data.bak | Bin 0 -> 3914 bytes Messages/Eng.txt | 4 + Messages/Ita.txt | 11 + Messages/oem_alarms_plc_ita.xml | 262 ++ README.md | 93 - Saomad-KAIROS-MK1.SIEMENS.mlpe | 1780 ++++++++ Saomad-KAIROS-MK1.ini | 112 + Saomad-KAIROS-MK1.mlde | 561 +++ Saomad-KAIROS-MK1.mlpe | 1430 ++++++ Saomad-KAIROS-MK1.mlse | 3847 +++++++++++++++++ Saomad-KAIROS-MK1.nge | Bin 0 -> 2619783 bytes Scripts/ExitMach.lua | 36 + Scripts/InitMach.lua | 44 + Scripts/SetUp.lua | 207 + SetUp/Standard.stu | 19 + THolders/ChainSaw.nge | Bin 0 -> 34633 bytes THolders/MillNoTip.nge | Bin 0 -> 47708 bytes THolders/Standard.nge | Bin 0 -> 72717 bytes THolders/Standard97.nge | Bin 0 -> 51535 bytes THolders/Standard_78.nge | Bin 0 -> 73180 bytes THolders/Standard_LC.nge | Bin 0 -> 55797 bytes THolders/TcSaw.nge | Bin 0 -> 102418 bytes THolders/TcSaw2.nge | Bin 0 -> 84713 bytes .../0147ED47-EB5D-44D6-9CE2-5282B484B5BD.nge | Bin 0 -> 280627 bytes .../0A54F32E-C48D-45DB-8502-953CA94FD7A0.nge | Bin 0 -> 252709 bytes .../10EEA905-AB81-43FF-8059-89B7FEA77DBE.nge | Bin 0 -> 323237 bytes .../175E7164-4161-4767-B7AF-41A7EBA7EA82.nge | Bin 0 -> 837310 bytes .../2CC5CD84-B083-4122-8548-9B2AA54A52E7.nge | Bin 0 -> 493667 bytes .../3B1EFA29-E112-4090-8F4F-4EC5DA598D69.nge | Bin 0 -> 202912 bytes .../4275A573-54A7-40FA-B828-D108298E1F69.nge | Bin 0 -> 256893 bytes .../463BE81B-336D-40BE-991C-24765BC28846.nge | Bin 0 -> 198519 bytes .../57898FF3-0FCA-4185-B40F-2318E501260A.nge | Bin 0 -> 203400 bytes .../5BC80CC4-B497-4509-981C-C7593EC1279F.nge | Bin 0 -> 234407 bytes .../6DBB8C3F-4744-4AF9-B213-9D40A7E19390.nge | Bin 0 -> 206328 bytes .../8071E2FC-B181-45E9-9EF1-DA7906A95EF2.nge | Bin 0 -> 199984 bytes .../82505C4D-26F2-4197-824F-25129D782E2D.nge | Bin 0 -> 203888 bytes .../877C9B3A-9078-42B6-808D-5ED5CF5C505B.nge | Bin 0 -> 242407 bytes .../A6CFDA65-DABB-441E-990A-776B5C24C2E4.nge | Bin 0 -> 116453 bytes .../B449357F-293E-4EDC-8EE4-127A9863F116.nge | Bin 0 -> 200960 bytes .../B5B974EF-D18A-45DE-9842-05B91639BE91.nge | Bin 0 -> 201936 bytes .../D077C810-A58B-41DE-A3F5-D2187EBB1B67.nge | Bin 0 -> 235654 bytes .../E7F6A2BB-1F66-48B9-9561-496231C33403.nge | Bin 0 -> 287507 bytes .../FDD392CA-7100-404C-AE0B-96FCA08959E0.nge | Bin 0 -> 397537 bytes Tools/Tools.data | Bin 0 -> 2008 bytes Tools/Tools.data.bak | Bin 0 -> 2007 bytes Tools/penna.nge | Bin 0 -> 289937 bytes 58 files changed, 8707 insertions(+), 93 deletions(-) create mode 100644 Beam/BeamData.lua create mode 100644 Beam/BeamTableTemplate.ini create mode 100644 Beam/CutData.lua create mode 100644 Beam/DrillData.lua create mode 100644 Beam/EbwData.lua create mode 100644 Beam/GetTs3Data.lua create mode 100644 Beam/MachData.ini create mode 100644 Beam/MachiningTypes.ini create mode 100644 Beam/MillingData.lua create mode 100644 Beam/PocketingData.lua create mode 100644 Beam/SawingData.lua create mode 100644 Machinings/Machinings.data create mode 100644 Machinings/Machinings.data.bak create mode 100644 Messages/Eng.txt create mode 100644 Messages/Ita.txt create mode 100644 Messages/oem_alarms_plc_ita.xml delete mode 100644 README.md create mode 100644 Saomad-KAIROS-MK1.SIEMENS.mlpe create mode 100644 Saomad-KAIROS-MK1.ini create mode 100644 Saomad-KAIROS-MK1.mlde create mode 100644 Saomad-KAIROS-MK1.mlpe create mode 100644 Saomad-KAIROS-MK1.mlse create mode 100644 Saomad-KAIROS-MK1.nge create mode 100644 Scripts/ExitMach.lua create mode 100644 Scripts/InitMach.lua create mode 100644 Scripts/SetUp.lua create mode 100644 SetUp/Standard.stu create mode 100644 THolders/ChainSaw.nge create mode 100644 THolders/MillNoTip.nge create mode 100644 THolders/Standard.nge create mode 100644 THolders/Standard97.nge create mode 100644 THolders/Standard_78.nge create mode 100644 THolders/Standard_LC.nge create mode 100644 THolders/TcSaw.nge create mode 100644 THolders/TcSaw2.nge create mode 100644 Tools/0147ED47-EB5D-44D6-9CE2-5282B484B5BD.nge create mode 100644 Tools/0A54F32E-C48D-45DB-8502-953CA94FD7A0.nge create mode 100644 Tools/10EEA905-AB81-43FF-8059-89B7FEA77DBE.nge create mode 100644 Tools/175E7164-4161-4767-B7AF-41A7EBA7EA82.nge create mode 100644 Tools/2CC5CD84-B083-4122-8548-9B2AA54A52E7.nge create mode 100644 Tools/3B1EFA29-E112-4090-8F4F-4EC5DA598D69.nge create mode 100644 Tools/4275A573-54A7-40FA-B828-D108298E1F69.nge create mode 100644 Tools/463BE81B-336D-40BE-991C-24765BC28846.nge create mode 100644 Tools/57898FF3-0FCA-4185-B40F-2318E501260A.nge create mode 100644 Tools/5BC80CC4-B497-4509-981C-C7593EC1279F.nge create mode 100644 Tools/6DBB8C3F-4744-4AF9-B213-9D40A7E19390.nge create mode 100644 Tools/8071E2FC-B181-45E9-9EF1-DA7906A95EF2.nge create mode 100644 Tools/82505C4D-26F2-4197-824F-25129D782E2D.nge create mode 100644 Tools/877C9B3A-9078-42B6-808D-5ED5CF5C505B.nge create mode 100644 Tools/A6CFDA65-DABB-441E-990A-776B5C24C2E4.nge create mode 100644 Tools/B449357F-293E-4EDC-8EE4-127A9863F116.nge create mode 100644 Tools/B5B974EF-D18A-45DE-9842-05B91639BE91.nge create mode 100644 Tools/D077C810-A58B-41DE-A3F5-D2187EBB1B67.nge create mode 100644 Tools/E7F6A2BB-1F66-48B9-9561-496231C33403.nge create mode 100644 Tools/FDD392CA-7100-404C-AE0B-96FCA08959E0.nge create mode 100644 Tools/Tools.data create mode 100644 Tools/Tools.data.bak create mode 100644 Tools/penna.nge diff --git a/Beam/BeamData.lua b/Beam/BeamData.lua new file mode 100644 index 0000000..684ab3d --- /dev/null +++ b/Beam/BeamData.lua @@ -0,0 +1,113 @@ +-- BeamData.lua by Egaltech s.r.l. 2022/03/20 +-- Raccolta dati generali per Travi + +EgtOutLog( ' KAIROS-BeamData started', 1) + +-- Tabella per definizione modulo +local BeamData = { + ROT90 = false, -- flag abilitazione rotazione 90 gradi + MIN_WIDTH = 40, -- larghezza minima del grezzo + MIN_HEIGHT = 40, -- altezza minima del grezzo + MAX_WIDTH = 450, -- larghezza massima del grezzo + MAX_HEIGHT = 250, -- altezza massima del grezzo + LEN_SHORT_PART = 1200, -- lunghezza massima pezzo corto + LEN_VERY_SHORT_PART = 400, -- lunghezza massima pezzo molto corto (molto probabile lo scarico a caduta) + MAX_RAW = 30000, -- massima lunghezza grezzo (deve essere minore di LenTable - RAW_OFFSET) + STD_RAW = 14000, -- lunghezza standard della barra di grezzo + OVM_HEAD = 10, -- sovramateriale testa + OVM_MID = 5.4, -- sovramateriale intermedio (spessore lama) + MINRAW_S = 750, -- minimo grezzo in coda scaricabile per sezioni piccole + MINRAW_L = 1070, -- minimo grezzo in coda scaricabile per sezioni grandi + MAX_LEN_SCRAP = 270, -- massima lunghezza scarto di coda + MAX_LEN_SCRAP_START = 270, -- massima lunghezza scarto di testa + MAX_DIM_HTCUT = 220, -- larghezza massima taglio di testa o coda + MAX_DIM_HTCUT_HBEAM = -220, -- larghezza massima taglio di testa o coda con trave alta + MIN_DIM_HBEAM = 190, -- altezza minima di trave alta + MAX_DIM_DICE = 155, -- dimensione trasversale massima cubetto + MAX_LEN_DICE = 400, -- lunghezza massima cubetto + DECR_VERT_CUT = 12.5, -- riduzione profondità per affondamento verticale in taglio orizzontale + COLL_SIC = 5, -- distanza di sicurezza per collisioni + CUT_SIC = 20, -- distanza di sicurezza per tagli + CUT_EXTRA = 5, -- affondamento extra standard per tagli di lama e fresature + CUT_EXTRA_MIN = 1, -- affondamento extra ridotto per tagli di lama e fresature + NZ_MINA = -0.6, -- componente limite in Z normale di una faccia (-36.8deg) + NZ_MINB = -0.4, -- componente limite in Z normale di un insieme di facce (-23deg) + DRILL_TOL = 0.2, -- tolleranza tra diametro foro e diametro punta + DRILL_VZ_MIN = -0.51, -- componente limite in Z del versore di un foro + DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali + DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature + MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature + MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale + MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda + LONGCUT_ENDLEN = 600, -- lunghezza lavoro estremi iniziale e finale (std=600) + LONGCUT_MAXLEN = 1200, -- lunghezza massima sezione di taglio longitudinale (std=1200) + MAX_LEN_RIDGELAP_FROM_BOTTOM = 141, -- massima lunghezza ridgelap lavorabile da sotto + MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM = 96, -- massima lunghezza ridgelap lavorabile da sotto con trave alta + DIM_TO_CENTER_STRIP = 100, -- larghezza minima trave per inseriemento codolo nel centro del trave; 0 = automatico + DIM_STRIP = -1, -- dimensione codolo sostegno parti lasciate su contorno libero o archi (-1 = da Q...) + DIM_STRIP_SMALL = 1, -- dimensione codolo piccolo (quando le parti sostenute sono sicuramente sulla parte sopra del pezzo) + RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo + RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split + VICE_MINH = 110, -- altezza minima della morsa + OFFSET_DRILL_TENON = 0, -- offset fori su tenoni verso base degli stessi (0=non fare) + USER_HOLE_DIAM = 0, -- diametro foro per L20 + MAX_TOOL_LEN_FOR_HOR_MACH = 311, -- massima lunghezza utensile per poter fare forature (fresature) oltre i 10 gradi dalla verticale + DRILL_VZ_MIN_LONG_TOOL = 0.984, -- componente limite per lavorazioni con punta lunga + MAX_TOOL_LEN_BACK_HOR_MACH = 250, -- massima lunghezza utensile per poter eseguire lavorazioni (forature/svuotature) da dietro (faccia 4) + MAX_HEIGHT_ROT_B_ABOVE = 500, -- massima altezza della trave che permette di ruotare l'asse B sopra la stessa senza collisioni + KIOTP = 3, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare + MAXDIAM_POCK_CORNER = 30, -- diametro massimo utensile ammesso per tasche con angoli interni + ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con robabile caduta + ADVANCE_TAIL_OFFS = 5, -- accorciamento taglio di coda avanzato (minimo 1) +} + +-- Aggiornamento con dati da B&W +local sData = EgtGetSourceDir().."EbwData.lua" +if EgtExistsFile( sData) then + local Machine = dofile( sData) + if Machine then + if Machine.Trave then + BeamData.MIN_WIDTH = Machine.Trave.YMIN or BeamData.MIN_WIDTH + BeamData.MIN_HEIGHT = Machine.Trave.ZMIN or BeamData.MIN_HEIGHT + BeamData.MAX_WIDTH = Machine.Trave.YMAX or BeamData.MAX_WIDTH + BeamData.MAX_HEIGHT = Machine.Trave.ZMAX or BeamData.MAX_HEIGHT + end + if Machine.User then + if Machine.User.OPTIMIZATIONS_ENABLE_SLICES_F5 == 1 then + BeamData.MAX_LEN_SCRAP = Machine.User.OPTIMIZATIONS_LENGTH_SLICES or BeamData.MAX_LEN_SCRAP + else + BeamData.MAX_LEN_SCRAP = 100000 + end + if Machine.User.OPTIMIZATIONS_ENABLE_SLICES_F6 == 1 then + BeamData.MAX_LEN_SCRAP_START = Machine.User.OPTIMIZATIONS_LENGTH_SLICES or BeamData.MAX_LEN_SCRAP_START + else + BeamData.MAX_LEN_SCRAP_START = 100000 + end + BeamData.USER_HOLE_DIAM = Machine.User.L020_DIAM_HOLE or BeamData.USER_HOLE_DIAM + BeamData.OFFSET_DRILL_TENON = Machine.User.L040_OFFSET_P1 or BeamData.OFFSET_DRILL_TENON + end + end +end + +--------------------------------------------------------------------- +local function GetChainSawBlockedAxis( nInd) + --if nInd == 1 then + -- return 'CS=-90' + --else + return 'CS=0' + --end +end +BeamData.GetChainSawBlockedAxis = GetChainSawBlockedAxis + +--------------------------------------------------------------------- +local function GetMaxLenRidgeLapFromBottom( dHRaw) + if dHRaw < BeamData.MIN_DIM_HBEAM then + return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM + 0.01 + else + return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM + 0.01 + end +end +BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom + +--------------------------------------------------------------------- +return BeamData diff --git a/Beam/BeamTableTemplate.ini b/Beam/BeamTableTemplate.ini new file mode 100644 index 0000000..ccb02c1 --- /dev/null +++ b/Beam/BeamTableTemplate.ini @@ -0,0 +1,9 @@ +-- %TABLE_NAME%.lua by Egaltech s.r.l. %DATE_TIME% +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local %TABLE_NAME% = { +} + +--------------------------------------------------------------------- +return %TABLE_NAME% diff --git a/Beam/CutData.lua b/Beam/CutData.lua new file mode 100644 index 0000000..cc3d163 --- /dev/null +++ b/Beam/CutData.lua @@ -0,0 +1,13 @@ +-- CutData.lua by Egaltech s.r.l. 02/11/2023 17:30:43 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local CutData = { + { On = false, Name = 'MiSideInvSaw350', Type = 'HeadSide'}, + { On = false, Name = 'MiSideSaw350', Type = 'TailSide'}, + { On = true, Name = 'MiSideInvSaw600', Type = 'HeadSide'}, + { On = true, Name = 'MiSideSaw600', Type = 'TailSide'} +} + +--------------------------------------------------------------------- +return CutData diff --git a/Beam/DrillData.lua b/Beam/DrillData.lua new file mode 100644 index 0000000..0f378fb --- /dev/null +++ b/Beam/DrillData.lua @@ -0,0 +1,25 @@ +-- DrillData.lua by Egaltech s.r.l. 06/12/2023 11:29:49 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local DrillData = { + { On = true, Name = 'DrillD05_4', Type = 'Drill'}, + { On = true, Name = 'DrillD08', Type = 'Drill'}, + { On = true, Name = 'DrillD08_Long', Type = 'Drill'}, + { On = true, Name = 'DrillD10', Type = 'Drill'}, + { On = true, Name = 'DrillD12', Type = 'Drill'}, + { On = true, Name = 'DrillD12_Long', Type = 'Drill'}, + { On = true, Name = 'DrillD14', Type = 'Drill'}, + { On = true, Name = 'DrillD16', Type = 'Drill'}, + { On = true, Name = 'DrillD18', Type = 'Drill'}, + { On = true, Name = 'DrillD18_Short', Type = 'Drill'}, + { On = true, Name = 'DrillD20', Type = 'Drill'}, + { On = true, Name = 'DrillD30', Type = 'Drill'}, + { On = true, Name = 'DrillD45', Type = 'Drill'}, + { On = true, Name = 'DrillD38', Type = 'AngleDrill'}, + { On = true, Name = 'DrillPockD20', Type = 'Pocket'}, + { On = true, Name = 'DrillPockD30', Type = 'Pocket'} +} + +--------------------------------------------------------------------- +return DrillData diff --git a/Beam/EbwData.lua b/Beam/EbwData.lua new file mode 100644 index 0000000..6fdf063 --- /dev/null +++ b/Beam/EbwData.lua @@ -0,0 +1,45 @@ +-- C:\EgtData\Machines\Saomad-KAIROS\Beam\EbwData.lua + +local Offsets = { + MIN_Y=-1225, + MAX_Y=540, + MIN_Z=-512, + MAX_Z=630, + MIN_A=-109.5, + MAX_A=109.5, + MIN_C=-240, + MAX_C=240, + MIN_X1=290, + MAX_X1=3735, + PARK_X1=600, + MIN_X2=-3735, + MAX_X2=-290, + PARK_X2=-600, + BEAM_LOAD=1800.0, + BEAM_UNLOAD=-1800, + TURN_OFFS=0, + MILL_PIVOT=-217.00, + TAB_OFFSET_Y=0, + TAB_OFFSET_Z=0, + TIPO_CN=0, + RIBCAR=0, + NOULOAD=0 +} + +local Trave = { + YMIN=30, + YMAX=451, + ZMIN=30, + ZMAX=251 +} + +local User = { + OPTIMIZATIONS_ENABLE_SLICES_F5=1, + OPTIMIZATIONS_ENABLE_SLICES_F6=1, + OPTIMIZATIONS_LENGTH_SLICES=100, + L020_DIAM_HOLE=14, + L040_OFFSET_P1=0 +} + +local Machine = { Offsets=Offsets, Trave=Trave, User=User} +return Machine diff --git a/Beam/GetTs3Data.lua b/Beam/GetTs3Data.lua new file mode 100644 index 0000000..d6da2fa --- /dev/null +++ b/Beam/GetTs3Data.lua @@ -0,0 +1,30 @@ +-- GetTs3Data.lua by Egaltech s.r.l. 2023/09/22 +-- Recupero dati da file EbwData.lua di macchina + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Per test +--GTSD = {} +--GTSD.TS3PATH = 'EbwData.lua' + +local sLog = 'GetEbwData : ' .. GTSD.TS3PATH +EgtOutLog( sLog) + +if EgtExistsFile( GTSD.TS3PATH) then + local Machine = dofile( GTSD.TS3PATH) + -- Assegno valori di interesse + Offsets = Machine.Offsets + _G.Offsets = Offsets + Trave = Machine.Trave + _G.Trave = Trave + User = Machine.User + _G.User = User +end + +-- Tutto ok +GTSD.ERR = 0 + +EgtOutLog( ' +++ GetEbwData completed') diff --git a/Beam/MachData.ini b/Beam/MachData.ini new file mode 100644 index 0000000..dae59d4 --- /dev/null +++ b/Beam/MachData.ini @@ -0,0 +1,52 @@ +; PIndex = Type, PName, Default, Description +; Type : d=double, l=length, s=string + +[1] +Name=Offsets +1=l,YCARICO,-1460.0,YCARICO +2=l,YSCARICO,1700.0,YSCARICO +3=l,OFFSETRIB,150.0,OFFSETRIB +4=l,PARKYY,480,PARKYY +5=l,PARKVV,-480,PARKVV +6=l,PIVOTFRESA,-177.0,PIVOTFRESA +7=l,PIVOTLAMA,242.0,PIVOTLAMA +8=l,OFFSETX,-900.0,OFFSETX +9=l,OFFSETZ,-1015.0,OFFSETZ +10=l,MIN_X,-1350,MIN_X +11=l,MAX_X,0,MAX_X +12=l,MIN_Y,110,MIN_Y +13=l,MAX_Y,3735,MAX_Y +14=l,MIN_Z,-1350,MIN_Z +15=l,MAX_Z,0,MAX_Z +16=d,MIN_B,-180,MIN_B +17=d,MAX_B,360,MAX_B +18=d,MIN_C,-360,MIN_C +19=d,MAX_C,360,MAX_C +20=l,MIN_V,-3735,MIN_V +21=l,MAX_V,-110,MAX_V +22=d,TIPO_CN,2,TIPO_CN +23=d,OFFSETCLAMA,0,OFFSETCLAMA +24=d,OFFSETBLAMA,0,OFFSETBLAMA +25=d,RIBCAR,0,RIBCAR +26=d,SECSUP,1,SECSUP +27=d,BLOCKHAUS,0,Blockhaus Configuration +28=l,NOULOAD,0,Max Unload Length (0=no limits) +29=l,OFFSETX_RINV_1,150,OFFSETX_RINV_1 +30=l,OFFSETZ_RINV_1,347,OFFSETZ_RINV_1 +31=l,OFFSETX_RINV_2,150,OFFSETX_RINV_2 +32=l,OFFSETZ_RINV_2,347,OFFSETZ_RINV_2 + +[2] +Name=Trave +1=l,XMIN,29,XMIN +2=l,XMAX,305,XMAX +3=l,ZMIN,20,ZMIN +4=l,ZMAX,625,ZMAX + +[3] +Name=User +1=d,OPTIMIZATIONS_ENABLE_SLICES_F5,1,ENABLE_SLICES_ON_END +2=d,OPTIMIZATIONS_ENABLE_SLICES_F6,1,ENABLE_SLICES_ON_START +3=d,OPTIMIZATIONS_LENGTH_SLICES,100,SLICES_LENGTH +4=l,L020_DIAM_HOLE,20,L020_HOLE_DIAM +5=l,L040_OFFSET_P1,0,L040_ON_TENON_OFFSET diff --git a/Beam/MachiningTypes.ini b/Beam/MachiningTypes.ini new file mode 100644 index 0000000..6cddc2c --- /dev/null +++ b/Beam/MachiningTypes.ini @@ -0,0 +1,43 @@ +[Cut] +1=HeadSide +2=TailSide + +[Drill] +1=Drill +2=Drill_AT +3=Pocket +4=AngleDrill + +[Milling] +1=Prof +2=FreeContour +3=Tenon +4=DtTenon +5=DtMortise +6=DtMortise_AT +7=BirdsMouth +8=Chamfer +9=Mark +10=Text +11=Text_AT +12=Decor01 +13=Long2Cut +14=Long2CutDown +15=LongSmallCut +16=BHSideMill +17=CleanCorner +18=ProfTCone +19=Long2CutSide +20=SmallToolContour +21=AntiSplintMillCut + +[Pocketing] +1=Pocket +2=Pocket_AT +3=OpenPocket +4=Mortise +5=Mortise_AT + +[Sawing] +1=Sawing +2=Mortising diff --git a/Beam/MillingData.lua b/Beam/MillingData.lua new file mode 100644 index 0000000..c7ec3f5 --- /dev/null +++ b/Beam/MillingData.lua @@ -0,0 +1,33 @@ +-- MillingData.lua by Egaltech s.r.l. 05/12/2023 11:50:11 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local MillingData = { + { On = true, Name = 'Profiling30x180', Type = 'Prof'}, + { On = true, Name = 'FreeCont30x180', Type = 'FreeContour'}, + { On = true, Name = 'FreeCont20x50', Type = 'FreeContour'}, + { On = true, Name = 'FreeCont45x80', Type = 'FreeContour'}, + { On = true, Name = 'Mill_Tenon100x120', Type = 'Tenon'}, + { On = true, Name = 'Mill_DtTen60x160', Type = 'DtTenon'}, + { On = true, Name = 'Mill_DtMrt60x160', Type = 'DtMortise'}, + { On = true, Name = 'Milling100x120', Type = 'BirdsMouth'}, + { On = false, Name = 'Chamfer30x180', Type = 'Chamfer'}, + { On = true, Name = 'Milling100x120', Type = 'Chamfer'}, + { On = true, Name = 'Text45x40', Type = 'Mark'}, + { On = true, Name = 'Text45x40', Type = 'Text'}, + { On = true, Name = 'Text45x40', Type = 'Decor01'}, + { On = true, Name = 'Mill_L2C100x120', Type = 'Long2Cut'}, + { On = true, Name = 'Mill_L2CD30x180', Type = 'Long2CutDown'}, + { On = false, Name = 'Mill_L2CD100x120', Type = 'Long2CutDown'}, + { On = true, Name = 'Mill_L2CD30x180', Type = 'Long2CutSide'}, + { On = true, Name = 'Mill_L2CD100x120', Type = 'Long2CutSide'}, + { On = true, Name = 'Milling30x180', Type = 'LongSmallCut'}, + { On = true, Name = 'MillOnSideBH', Type = 'BHSideMill'}, + { On = true, Name = 'FreeCont30x180', Type = 'SmallToolContour'}, + { On = true, Name = 'Milling10x50', Type = 'SmallToolContour'}, + { On = true, Name = 'Milling30x180', Type = 'AntiSplintMillCut'}, + { On = true, Name = 'Clean35x40', Type = 'CleanCorner'} +} + +--------------------------------------------------------------------- +return MillingData diff --git a/Beam/PocketingData.lua b/Beam/PocketingData.lua new file mode 100644 index 0000000..edffbbd --- /dev/null +++ b/Beam/PocketingData.lua @@ -0,0 +1,21 @@ +-- PocketingData.lua by Egaltech s.r.l. 05/12/2023 08:55:15 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local PocketingData = { + { On = true, Name = 'Svuot100x120', Type = 'OpenPocket'}, + { On = false, Name = 'Svuot100x150', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot60x80', Type = 'OpenPocket'}, + { On = false, Name = 'Svuot35x70', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot20x50', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot30x180', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot45x80', Type = 'OpenPocket'}, + { On = false, Name = 'Svuot35x70', Type = 'Pocket'}, + { On = true, Name = 'Svuot20x50', Type = 'Pocket'}, + { On = true, Name = 'Svuot30x180', Type = 'Pocket'}, + { On = true, Name = 'Svuot45x80', Type = 'Pocket'}, + { On = true, Name = 'Mortiser38.89x130', Type = 'Mortise'} +} + +--------------------------------------------------------------------- +return PocketingData diff --git a/Beam/SawingData.lua b/Beam/SawingData.lua new file mode 100644 index 0000000..c99c229 --- /dev/null +++ b/Beam/SawingData.lua @@ -0,0 +1,10 @@ +-- SawingData.lua by Egaltech s.r.l. 22/09/2023 23:00:58 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local SawingData = { + { On = true, Name = 'TaglioCatena', Type = 'Sawing'} +} + +--------------------------------------------------------------------- +return SawingData diff --git a/Machinings/Machinings.data b/Machinings/Machinings.data new file mode 100644 index 0000000000000000000000000000000000000000..d8bba522ed7fd41e8cc75f64dcbd99cc18f0bbae GIT binary patch literal 3958 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 Qy1Nej7tzoXn$t)C0ODYu6951J literal 0 HcmV?d00001 diff --git a/Machinings/Machinings.data.bak b/Machinings/Machinings.data.bak new file mode 100644 index 0000000000000000000000000000000000000000..a1f45d6a96cecdfaf13a1403121a3104f8a49844 GIT binary patch literal 3914 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 YX7gRWNl&_Z*WOm=|MF-7hO|cj078L!$N&HU literal 0 HcmV?d00001 diff --git a/Messages/Eng.txt b/Messages/Eng.txt new file mode 100644 index 0000000..25af1c9 --- /dev/null +++ b/Messages/Eng.txt @@ -0,0 +1,4 @@ +// English machine message file 2023/12/06 + +[PLC] + diff --git a/Messages/Ita.txt b/Messages/Ita.txt new file mode 100644 index 0000000..f594dc9 --- /dev/null +++ b/Messages/Ita.txt @@ -0,0 +1,11 @@ +// File dei messaggi macchina Italiano 2023/12/06 +[MDI] + + +[PLC] + + +[CNC] + + +[INPUT] diff --git a/Messages/oem_alarms_plc_ita.xml b/Messages/oem_alarms_plc_ita.xml new file mode 100644 index 0000000..c602b12 --- /dev/null +++ b/Messages/oem_alarms_plc_ita.xml @@ -0,0 +1,262 @@ + + + + slaeconv + + 700000/PLC/PMC + MACCHINA IN EMERGENZA + + + 700001/PLC/PMC + FUNGO SU QUADRO PREMUTO + + + 700002/PLC/PMC + FUNGO SU CONSOLLE PREMUTO + + + 700003/PLC/PMC + PORTE APERTE + + + 700004/PLC/PMC + ANOMALIA PRESENZA ARIA + + + 700005/PLC/PMC + CAMBIO UTENSILE INTERROTTO! PREMERE RESET PER 5 SECONDI + + + 700006/PLC/PMC + ANOMALIA SBLOCCO UTENSILE + + + 700007/PLC/PMC + ANOMALIA BLOCCO UTENSILE + + + 700008/PLC/PMC + ANOMALIA APERTURA PRESSORE ORIZZONTALE X2 + + + 700009/PLC/PMC + ANOMALIA CHIUSURA PRESSORE ORIZZONTALE X2 + + + 700010/PLC/PMC + ANOMALIA AVANTI PISTONE SCARICO + + + 700011/PLC/PMC + ANOMALIA INDIETRO PISTONE SCARICO + + + 700012/PLC/PMC + ANOMALIA SALITA SOLLEVATORE X1 + + + 700013/PLC/PMC + ANOMALIA DISCESA SOLLEVATORE X1 + + + 700014/PLC/PMC + ANOMALIA SALITA SOLLEVATORE X2 + + + 700015/PLC/PMC + ANOMALIA DISCESA SOLLEVATORE X2 + + + 700016/PLC/PMC + ANOMALIA SEGA AVANTI + + + 700017/PLC/PMC + ANOMALIA SEGA INDIETRO + + + 700018/PLC/PMC + ANOMALIA SALITA BATTUTA INTERMEDIA INGRESSO + + + 700019/PLC/PMC + ANOMALIA DISCESA BATTUTA INTERMEDIA INGRESSO + + + 700020/PLC/PMC + ANOMALIA CATENE INGRESSO SU + + + 700021/PLC/PMC + ANOMALIA CATENE INGRESSO GIU + + + 700022/PLC/PMC + ANOMALIA PIATTO AVANTI X1 + + + 700023/PLC/PMC + ANOMALIA PIATTO INDIETRO X1 + + + 700024/PLC/PMC + ANOMALIA PIATTO AVANTI X2 + + + 700025/PLC/PMC + ANOMALIA PIATTO INDIETRO X2 + + + 700026/PLC/PMC + ANOMALIA SALITA PRESSORE VERTICALE X1 + + + 700027/PLC/PMC + ANOMALIA DISCESA PRESSORE VERTICALE X1 + + + 700028/PLC/PMC + ANOMALIA SALITA PRESSORE VERTICALE X2 + + + 700029/PLC/PMC + ANOMALIA DISCESA PRESSORE VERTICALE X2 + + + 700030/PLC/PMC + ANOMALIA APERTURA PRESSORE ORIZZONTALE X1 + + + 700031/PLC/PMC + ANOMALIA CHIUSURA PRESSORE ORIZZONTALE X1 + + + 700032/PLC/PMC + ANOMALIA CONDIZIONATORE QUADRO ELETTRICO + + + 700033/PLC/PMC + SBLOCCO UT NON POSSIBILE CON MANDRINO NON FERMO + + + 700034/PLC/PMC + ANOMALIA SBLOCCO UTENSILE 2 + + + 700035/PLC/PMC + INTERVENTO TERMICO POMPA DI LUBRIFICAZIONE + + + 700036/PLC/PMC + LIVELLO MINIMO OLIO LUBRIFICAZIONE + + + 700037/PLC/PMC + ANOMALIA APERTURA PROTEZIONE CONI SINISTRA + + + 700038/PLC/PMC + ANOMALIA CHIUSURA PROTEZIONE CONI SINISTRA + + + 700039/PLC/PMC + ANOMALIA APERTURA PROTEZIONE CONI DESTRA + + + 700040/PLC/PMC + ANOMALIA CHIUSURA PROTEZIONE CONI DESTRA + + + 700041/PLC/PMC + ANOMALIA AVANTI RULLIERA MODILE X1 + + + 700042/PLC/PMC + ANOMALIA INDIETRO RULLIERA MOBILE X1 + + + 700043/PLC/PMC + ANOMALIA AVANTI RULLIERA 100 MODILE X1 + + + 700044/PLC/PMC + ANOMALIA INDIETRO RULLIERA 100 MOBILE X1 + + + 700045/PLC/PMC + ANOMALIA AVANTI RULLIERA MODILE X2 + + + 700046/PLC/PMC + ANOMALIA INDIETRO RULLIERA MOBILE X2 + + + 700047/PLC/PMC + ANOMALIA AVANTI RULLIERA 100 MODILE X2 + + + 700048/PLC/PMC + ANOMALIA INDIETRO RULLIERA 100 MOBILE X2 + + + 700049/PLC/PMC + SCARICO PIENO + + + 700050/PLC/PMC + PASSO LEGNO IMPEGNATO + + + 700051/PLC/PMC + ASSE Z NON IN POSIZIONE PER START CICLO + + + 700052/PLC/PMC + ASSE Y NON IM POSIZIONE PER START CICLO + + + 700053/PLC/PMC + INCONGRUENZA DATI UTENSILE IN MANDRINO + + + 700054/PLC/PMC + STOP WORKING ATTIVO + + + 700055/PLC/PMC + AUTO OFF ATTIVO + + + 700056/PLC/PMC + LUNGHEZZA PEZZO ERRATA + + + 700057/PLC/PMC + LARGHEZZA PEZZO ERRATA + + + 700058/PLC/PMC + SPESSORE PEZZO ERRATO + + + 700059/PLC/PMC + FEED HOLD - SPINDLE HOLD + + + 700060/PLC/PMC + PRERISCALDO MANDRINO + + + 700061/PLC/PMC + PRERISCALDO MANDRINO IN CORSO + + + 700062/PLC/PMC + SELETTORE BYPASS PULSANTIERA WIRELESS ATTIVO + + + 700063/PLC/PMC + VALVOLA PROPORZIONALE SMC PROFIBUS CHIUSURA PINZE FAULT + + + diff --git a/README.md b/README.md deleted file mode 100644 index 3e8da76..0000000 --- a/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# Saomad-KAIROS-MK1 - - - -## Getting started - -To make it easy for you to get started with GitLab, here's a list of recommended next steps. - -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! - -## Add your files - -* [Create](https://docs.gitlab.com/user/project/repository/web_editor/#create-a-file) or [upload](https://docs.gitlab.com/user/project/repository/web_editor/#upload-a-file) files -* [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command: - -``` -cd existing_repo -git remote add origin https://gitlab.steamware.net/egalware-machines/saomad/saomad-kairos-mk1.git -git branch -M main -git push -uf origin main -``` - -## Integrate with your tools - -* [Set up project integrations](https://gitlab.steamware.net/egalware-machines/saomad/saomad-kairos-mk1/-/settings/integrations) - -## Collaborate with your team - -* [Invite team members and collaborators](https://docs.gitlab.com/user/project/members/) -* [Create a new merge request](https://docs.gitlab.com/user/project/merge_requests/creating_merge_requests/) -* [Automatically close issues from merge requests](https://docs.gitlab.com/user/project/issues/managing_issues/#closing-issues-automatically) -* [Enable merge request approvals](https://docs.gitlab.com/user/project/merge_requests/approvals/) -* [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/) - -## Test and Deploy - -Use the built-in continuous integration in GitLab. - -* [Get started with GitLab CI/CD](https://docs.gitlab.com/ci/quick_start/) -* [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/user/application_security/sast/) -* [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/topics/autodevops/requirements/) -* [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/user/clusters/agent/) -* [Set up protected environments](https://docs.gitlab.com/ci/environments/protected_environments/) - -*** - -# Editing this README - -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template. - -## Suggestions for a good README - -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name -Choose a self-explaining name for your project. - -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. - -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. - -## License -For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. diff --git a/Saomad-KAIROS-MK1.SIEMENS.mlpe b/Saomad-KAIROS-MK1.SIEMENS.mlpe new file mode 100644 index 0000000..4e1cf14 --- /dev/null +++ b/Saomad-KAIROS-MK1.SIEMENS.mlpe @@ -0,0 +1,1780 @@ +-- Processore macchina Saomad-KAIROS by EgalTech s.r.l. 2023/12/06 +-- Con controllo numerico Siemens + +-- Variabili di modulo +local MLE_INFO = 'Saomad-KAIROS-MK1.SIEMENS.mlpe ver.'..PP_VER..' by EgalWare s.r.l.' +local TEST_USE = false + +--------------------------------------------------------------------- +-- *** GENERATION *** +--------------------------------------------------------------------- +function OnStart() + EMT.USETO1 = false -- abilitazione uso origine tavola + EMT.MODAL = true -- abilitazione emissione modale + EMT.INCHES = false -- unità di misura mm/inches + EMT.NUM = false -- abilitazione numerazione linee + --EMT.Nt = 'N' -- token per la numerazione di linea + --EMT.LINENBR = 0 -- numero di linea + --EMT.LINEINC = 1 -- incremento numerazione linee + --EMT.Ft = 'F' -- token per feed + --EMT.St = 'S' -- token per speed + EMT.C1t = 'I=AC(' -- X centro arco, dopo valore chiudere la tonda + EMT.C2t = 'J=AC(' -- Y centro arco, dopo valore chiudere la tonda + EMT.C3t = 'K=AC(' -- Z centro arco, dopo valore chiudere la tonda + EMT.RRt = 'CR=' -- raggio per arco + EMT.FMAXPINZE = 45000 -- feed massima pinze +end + +--------------------------------------------------------------------- +function OnEnd() + -- Ripristino fase iniziale come corrente + EgtSetCurrPhase( 1) +end + +--------------------------------------------------------------------- +function OnProgramStart() + -- Intestazioni + if EMT.INFO then + EmtOutput( ';'..EMT.INFO) + else + EmtOutput( ';Program Start') + end + EmtOutput( ';'.. MLE_INFO..'\n') + -- Cerco primo utensile su testa 1 + EMT.TOOL_1, EMT.TLEN_1 = FindFirstToolOnHead( 'H1') + -- Dichiaro inizio + EMT.FIRST = true + EMT.TLAST = nil + EMT.NSTEP = 0 +end + +--------------------------------------------------------------------- +function OnProgramEnd() + -- Emissione scarico + --for i = 1, #EMT.AUXCMD do + -- EmtOutput( '( ' .. EMT.AUXCMD[i] .. ' )') + --end + EMT.AUXCMD = {} + for i = 1, #EMT.AUXSTR do + EmtOutput( EMT.AUXSTR[i]) + end + if #EMT.AUXSTR > 0 then + if EMT.AUXTYPE == 'S' or EMT.AUXTYPE == 'R' then + ; + elseif EMT.AUXTYPE == 'U' then + -- emissione conclusione pezzo precedente + if EMT.PRODID then + local sOut = ';Part End' + EmtOutput( sOut) + sOut= 'PRODUCTION('..tostring( EMT.PRODID)..','..tostring( EMT.PATTID)..','..tostring( EMT.CUTID)..',2)' + EmtOutput( sOut) + end + end + end + EmtOutput( 'STOPRE') + EmtOutput( '_STEP=0') + EmtOutput( 'M30') + EMT.AUXSTR = {} + EMT.AUXTYPE = nil + EMT.U_STD = nil + EMT.UNL = nil + EMT.PREROT = nil + EMT.SPLITROT = nil + EMT.CHY_ON = nil + EMT.FALL = nil + EMT.RELOAD = nil + EMT.RELOAD2 = nil +end + +--------------------------------------------------------------------- +function OnToolData() + -- tabella codice -> nome tipo utensile + local tToolType = { [256] = 'DRILL', [257] = 'DRILL_L', [512] = 'SAW', [513] = 'SAW_F', [1024] = 'MILL', [1025] = 'MILL_NT', + [1026] = 'POLISHING', [2048] = 'CHAINSAW', [4096] = 'CHISEL'} + -- emissione dati utensile + --local sOut = ';'..EMT.TCPOS..' L='..EmtLenToString( EMT.TLEN, 3)..' D='..EmtLenToString( EMT.TDIAM, 3)..' A='..EgtIf( EMT.TUSED, '1', '0')..' '..( tToolType[EMT.TTYPE] or 'NONE') + local sOut = ';'..EMT.TCPOS..' L='..EmtLenToString( EMT.TLEN, 3)..' D='..EmtLenToString( EMT.TDIAM, 3)..' A='..EgtIf( EMT.TUSED, '1', '0')..' '..EMT.TOOL + EmtOutput( sOut) +end + +--------------------------------------------------------------------- +function OnDispositionStart() + --EmtOutput( '(Disposition '..EMT.DISPIND..' = '..EMT.DISPID..')') + EMT.OPEISDISP = true + -- Assegnazione parametri disposizione + EMT.TPOS = EgtGetInfo( EMT.DISPID, 'TPOS', 'd') + EMT.X1POS = EgtGetInfo( EMT.DISPID, 'YPOS', 'd') + -- Se prima disposizione + if EMT.PHASE == 1 then + -- inizio programma + EmtOutput( '\nRESTART') + EmtOutput( 'STOPRE') + EmtOutput( '_STEP=0') + -- carico barra + EMT.LOAD = true + else + EMT.LOAD = false + if IsEnd2Phase( EMT.PHASE - 1) then + EMT.RELOAD = true + EMT.RELOAD2 = false + elseif IsStartPhase( EMT.PHASE) then + EMT.X1DELTA = EMT.X1POS - LoadT + EMT.X2DELTA = nil + end + end +end + +--------------------------------------------------------------------- +function OnDispositionEnd() + -- Se disposizione inizio o rimanenza + if IsStartOrRestPhase( EMT.PHASE) then + -- reset recupero sovramateriale in X non più presente + EMT.X_OFF = nil + -- dati della barra + local LBarra = EMT.LB + -- dati del pezzo + local IdTrave = EMT.IT + local LTrave = EMT.LT + local HTrave = EMT.HT + local STrave = EMT.ST + local HOverM = EMT.HOVM + -- se carico barra + if EMT.LOAD then + -- assegnazione dati barra + local sOut = ';Bar Dimensions' + EmtOutput( sOut) + sOut = 'C_WIDTH='..EmtLenToString( HTrave, 3) + EmtOutput( sOut) + sOut = 'C_HEIGHT='..EmtLenToString( STrave, 3) + EmtOutput( sOut) + sOut = 'C_LENGTH='..EmtLenToString( LBarra, 3) + EmtOutput( sOut) + -- se altrimenti ricarico barra dopo rotazione speciale + elseif EMT.RELOAD then + local sOut = ';Bar Dimensions' + EmtOutput( sOut) + sOut = 'C_WIDTH='..EmtLenToString( HTrave, 3) + EmtOutput( sOut) + sOut = 'C_HEIGHT='..EmtLenToString( STrave, 3) + EmtOutput( sOut) + sOut = 'C_LENGTH='..EmtLenToString( LBarra, 3) + EmtOutput( sOut) + -- altrimenti recupero rimanenza + else + -- aggiorno dati aggancio carrelli alla trave + EMT.X1DELTA = EMT.X1POS - LoadT + EMT.X2DELTA = nil + end + -- Inizio produzione trave + if IdTrave >= 0 then + local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL + EMT.PRODID = EgtGetInfo( BtlInfoId, 'PRODID', 'i') or 0 + EMT.PATTID = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 0 + EMT.CUTID = EgtGetInfo( EMT.IDT, 'CUTID', 'i') or 0 + local sOut = ';Part Start' + EmtOutput( sOut) + sOut= 'PRODUCTION('..tostring( EMT.PRODID)..','..tostring( EMT.PATTID)..','..tostring( EMT.CUTID)..',1)' + EmtOutput( sOut) + else + EmtOutput( '') + EmtOutput( ';REMAIN UNLOAD') + EMT.PRODID = nil + EMT.PATTID = nil + EMT.CUTID = nil + end + -- eventuale preparazione per rotazione immediata + if IsStartPhase( EMT.PHASE) and EMT.AUXSTR then + -- emissione movimento carrelli per rotazione + EMT.AUXCMD = {} + if #EMT.AUXSTR > 0 then + EmtOutput( ';ROTATION') + end + for i = 1, #EMT.AUXSTR do + EmtOutput( EMT.AUXSTR[i]) + end + if #EMT.AUXSTR > 0 then EMT.CHAN2 = true end + EMT.AUXSTR = {} + EMT.AUXTYPE = nil + end + -- se altrimenti disposizione intermedia, eventuale rotazione + elseif IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then + -- se rotazioni diverse, emetto il comando e aggiorno lo stato + if VerifyEmitRotation() then + -- imposto stato post-rotazione + EMT.POSTROT = true + -- imposto recupero sovramateriale in X non più presente + EMT.X_OFF = EMT.HOVM + end + -- se altrimenti disposizione intermedia speciale con eventuale rotazione + elseif IsMid2Phase( EMT.PHASE) then + -- emissione movimento carrelli + EMT.AUXCMD = {} + if #EMT.AUXSTR > 0 then + EmtOutput( ';ROTATION') + end + for i = 1, #EMT.AUXSTR do + EmtOutput( EMT.AUXSTR[i]) + end + if #EMT.AUXSTR > 0 then EMT.CHAN2 = true end + EMT.AUXSTR = {} + EMT.AUXTYPE = nil + -- se rotazioni diverse, emetto il comando e aggiorno lo stato + if VerifyEmitRotation() then + -- imposto stato post-rotazione + EMT.POSTROT = true + -- imposto recupero sovramateriale in X non più presente + EMT.X_OFF = EMT.HOVM + end + -- altrimenti disposizione finale, eventuale scarico pezzo lavorato se non ci sono lavorazioni + else + EMT.AUXCMD = {} + if #EMT.AUXSTR > 0 then + EmitSpeedOff() + EmtOutput( '') + EmtOutput( ';PART UNLOAD') + end + for i = 1, #EMT.AUXSTR do + EmtOutput( EMT.AUXSTR[i]) + end + if #EMT.AUXSTR > 0 then + EMT.CHAN2 = true + -- emissione conclusione pezzo precedente + if EMT.PRODID then + local sOut = ';Part End' + EmtOutput( sOut) + sOut= 'PRODUCTION('..tostring( EMT.PRODID)..','..tostring( EMT.PATTID)..','..tostring( EMT.CUTID)..',2)' + EmtOutput( sOut) + end + end + EMT.AUXSTR = {} + EMT.AUXTYPE = nil + EMT.U_STD = nil + end + + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnTableData() +end + +--------------------------------------------------------------------- +function OnFixtureData() +end + +--------------------------------------------------------------------- +function OnRawMoveData() + -- Se disposizione inizio o rimanenza + if IsStartOrRestPhase( EMT.PHASE) then + -- se primo grezzo, reset lunghezza barra + if EMT.RAWIND == 1 then EMT.LB = 0 end + -- aggiungo la lunghezza del grezzo (solo se movimento in corner) + if EMT.RAWTYPE == 1 then + local b3Raw = EgtGetBBoxGlob( EgtGetFirstNameInGroup( EMT.RAWID, 'RawSolid'), GDB_BB.STANDARD) + local LBarra = b3Raw:getDimX() + EMT.LB = EMT.LB + LBarra + end + -- se primo grezzo, calcolo dati del pezzo + if EMT.RAWIND == 1 then + local PartId = EgtGetFirstPartInRawPart( EMT.RAWID) + if PartId then + EMT.IDT = PartId + EMT.IT = EgtGetInfo( PartId, 'PDN', 'i') or 0 + local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PartId, 'Box'), GDB_BB.STANDARD) + EMT.LT = b3Part:getDimX() + EMT.HT = b3Part:getDimY() + EMT.ST = b3Part:getDimZ() + EMT.HOVM = EgtGetInfo( EMT.RAWID, 'HOVM', 'd') or 0 + else + EMT.IDT = GDB_ID.NULL + EMT.IT = -1 + EMT.LT = 0 + EMT.HT = EMT.HT or 0 + EMT.ST = EMT.ST or 0 + EMT.HOVM = 0 + end + end + end +end + +--------------------------------------------------------------------- +function OnToolSelect() + -- se utensile definito (non definito per disposizioni con movimento) + if EMT.TOOL ~= '' then + -- verifiche su utensile + local sTool = EgtTdbGetToolFromUUID( EgtGetMachiningParam( MCH_MP.TUUID) or "") + if sTool ~= EMT.TOOL then error( "Tool name mismatch") end + -- predefinite EMT.TCPOS EMT.HEAD EMT.EXIT + EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + EMT.TOOLSEL = EMT.TCPOS..' M06' + EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM) + EMT.TTOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM) + EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN) + EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end + if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end + -- dichiaro utensile appena selezionato + EMT.TSELECT = true + end +end + +--------------------------------------------------------------------- +function OnToolDeselect() + EmitSpeedOff() +end + +--------------------------------------------------------------------- +function OnMachiningStart() + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) + -- non ancora iniziata la lavorazione + EMT.MCHFIRST = true + EMT.FEEDFIRST = true + -- determino subito se taglio di separazione di pezzo a caduta + EMT.PREFALLCUT = nil + if EMT.MCHUSERNOTES and EMT.MCHUSERNOTES:find( 'Split') then + local ClId = EgtGetFirstNameInGroup( EMT.MCHID, 'CL') + local P1Id = EgtGetFirstNameInGroup( ClId or GDB_ID.NULL, 'P1') + local sAE1 = EgtGetInfo( P1Id or GDB_ID.NULL, 'AE1') or '' + if sAE1 == '0,Fall' then + EMT.PREFALLCUT = true + end + end +end + +--------------------------------------------------------------------- +function OnMachiningEnd() + --EmtOutput( ';Mach End') + -- Emissione split + --for i = 1, #EMT.AUXCMD do + -- EmtOutput( '( ' .. EMT.AUXCMD[i] .. ' )') + --end + EMT.AUXCMD = {} + if #EMT.AUXSTR > 0 then + if EMT.AUXTYPE == 'S' then + EmitSpeedOff() + EmtOutput( ';PART SPLIT') + elseif EMT.AUXTYPE == 'U' then + if not EMT.ZMAX then + EmitZmax() + EMT.ZMAX = true + end + if IsLastMachining( EMT.MCHID) then + EmitSpeedOff() + end + EmtOutput( ';PART UNLOAD') + elseif EMT.AUXTYPE == 'P' then + if EMT.PREROT then + if not EMT.ZMAX then + EmitZmax() + EMT.ZMAX = true + end + EmtOutput( ';PART ROTATION') + elseif EMT.FALL then + if not EMT.ZMAX then + EmitZmax() + EMT.ZMAX = true + end + EmtOutput( ';FALL') + else + if not EMT.ZMAX then + EmitZmax() + EMT.ZMAX = true + end + EmtOutput( ';SPLIT 2') + end + end + end + for i = 1, #EMT.AUXSTR do + EmtOutput( EMT.AUXSTR[i]) + end + if #EMT.AUXSTR > 0 then + EMT.CHAN2 = true + if EMT.AUXTYPE == 'S' then + ; + elseif EMT.AUXTYPE == 'U' then + -- emissione conclusione pezzo precedente + if EMT.PRODID then + local sOut = ';Part End' + EmtOutput( sOut) + sOut= 'PRODUCTION('..tostring( EMT.PRODID)..','..tostring( EMT.PATTID)..','..tostring( EMT.CUTID)..',2)' + EmtOutput( sOut) + end + elseif EMT.AUXTYPE == 'P' then + if EMT.FALL then + -- emissione conclusione pezzo precedente + if EMT.PRODID then + local sOut = ';Part End' + EmtOutput( sOut) + sOut= 'PRODUCTION('..tostring( EMT.PRODID)..','..tostring( EMT.PATTID)..','..tostring( EMT.CUTID)..',2)' + EmtOutput( sOut) + end + elseif not EMT.PREROT then + ; + end + end + end + EMT.AUXSTR = {} + EMT.AUXTYPE = nil + EMT.U_STD = nil + EMT.PREVTOOL = EMT.TOOL + EMT.PREVR3 = EMT.R3 +end + +--------------------------------------------------------------------- +function OnPathStart() + -- non ancora iniziata la lavorazione + EMT.MCHFIRST = true + -- primo posizionamento sempre in globale + EMT.REFLOC = nil + EMT.IPLGL = false + -- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento) + EMT.L1opp = EMT.L1op + EMT.L2opp = EgtIf( EMT.TSELECT, ParkY, EMT.L2op) + EMT.L3opp = EgtIf( EMT.TSELECT, ParkZ, EMT.L3op) + EMT.R1pp = EgtIf( EMT.TSELECT, ParkC, EMT.R1p) + EMT.R2pp = EgtIf( EMT.TSELECT, ParkA, EMT.R2p) + EmtResetPrev() + EMT.AUXCMD = {} + EMT.AUXSTR = {} +end + +--------------------------------------------------------------------- +function OnPathEnd() + EMT.AUXTYPE = nil + EMT.UNL = nil + EMT.PREROT = nil + EMT.SPLITROT = nil + EMT.CHY_ON = nil + EMT.FALL = nil + EMT.AUXCMD = {} + EMT.AUXSTR = {} +end + +--------------------------------------------------------------------- +function OnPathStartAux() + --EgtOutLog( 'OnPathStartAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + + -- se richiesto, preparo il carico barra + if EMT.LOAD or EMT.RELOAD then + PrepareLoad( EMT.AUX, true) + -- se altrimenti carico dopo rotazione + elseif EMT.POSTROT then + PreparePostRotation( EMT.AUX) + -- altrimenti, preparo lo spostamento carrelli + else + PrepareMoveChar( EMT.AUX) + end +end + +--------------------------------------------------------------------- +function OnPathEndAux() + --EgtOutLog( 'OnPathEndAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + -- verifico tipo di emissione + if EMT.OPEISDISP then + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + elseif EgtGetInfo( EMT.DISPID, 'TYPE') == 'REST' then + EMT.AUXTYPE = 'R' + else + EMT.AUXTYPE = 'P' + end + end + else + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Split' then + EMT.AUXTYPE = 'S' + elseif Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + else + EMT.AUXTYPE = 'P' + if Cmd[1] == '0' and Cmd[2] == 'Fall' then + EMT.FALL = true + end + end + elseif EMT.AUXTYPE == 'P' then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.CHY_ON = true + EMT.AUXTYPE = 'U' + end + end + end + -- preparo a seconda del tipo + if EMT.AUXTYPE == 'R' then + -- per il carico della rimanenza dopo rotazione speciale + if EMT.RELOAD and not EMT.RELOAD2 then + PrepareLoad( EMT.AUX, false) + -- per lo scarico della rimanenza + else + PrepareResidue( EMT.AUX) + end + elseif EMT.AUXTYPE == 'S' then + -- per lo split + PrepareSplit( EMT.AUX) + elseif EMT.AUXTYPE == 'U' then + -- per lo scarico + PrepareUnload( EMT.AUX) + elseif EMT.AUXTYPE == 'P' then + -- per la pre-rotazione + PreparePreRotation( EMT.AUX) + end +end + +--------------------------------------------------------------------- +function OnRapid() + MyBackupAxes() + -- se primo movimento della lavorazione, gestione speciale + if EMT.MCHFIRST and not EMT.OPEISDISP then + -- decido se muovere prima testa o carrelli (standard prima testa) + local bHeadFirst = true + local sLateG101 + if not ( EMT.LOAD or EMT.RELOAD) and not EMT.ZMAX then + local DeltaT = EMT.L1 - EMT.TLAST + if ( DeltaT < -GEO.EPS_SMALL and EMT.X2DELTA) or ( DeltaT > GEO.EPS_SMALL and EMT.X1DELTA) then bHeadFirst = false end + end + -- sistemo movimenti + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + -- verifico presenza movimento carrelli + local bMoveChar = ( #EMT.AUXSTR > 0) + -- carico + if EMT.LOAD then + EmtOutput( 'STOPRE') + EMT.NSTEP = EMT.NSTEP + 10 + local sStep = EgtNumToString( EMT.NSTEP, 0) + EmtOutput( '_STEP='..sStep) + -- eseguo carico + EMT.AUXCMD = {} + for i = 1, #EMT.AUXSTR do + EmtOutput( EMT.AUXSTR[i]) + end + EMT.AUXSTR = {} + -- supporti in posizione intermedia + sOut = 'SUPPORT(1,1)' + EmtOutput( sOut) + -- prima lavorazione + sOut = EMT.MCHNAME..'/'..EMT.TOOL + EmtOutput( '; *** ' .. sOut .. ' ***') + EMT.LOAD = false + -- altri casi + else + if not EMT.RELOAD and not EMT.ZMAX and #EMT.AUXSTR > 0 then + EmitZmax() + EMT.ZMAX = true + EMT.PREVTOOL = EMT.TOOL + end + if bMoveChar then + local bStoPre + if EMT.CHAN2 then + EmtOutput( 'WAIT_CHAN(2)') + EmtOutput( 'STOPRE') + bStoPre = true + EMT.CHAN2 = nil + end + if EMT.TRAILON then + EmtOutput( 'TRAILOF(X2,X1)') + EmtOutput( 'TRANS') + EmtOutput( 'STOPRE') + bStoPre = true + EMT.TRAILON = nil + end + if not bStoPre then EmtOutput( 'STOPRE') end + EmtOutput( '') + EMT.NSTEP = EMT.NSTEP + 10 + local sStep = EgtNumToString( EMT.NSTEP, 0) + EmtOutput( '_STEP='..sStep) + end + local sOut = EMT.MCHNAME..'/'..EMT.TOOL + EmtOutput( '; *** ' .. sOut .. ' ***') + -- movimento carrelli + EMT.AUXCMD = {} + for i = 1, #EMT.AUXSTR do + EmtOutput( EMT.AUXSTR[i]) + end + EMT.AUXSTR = {} + EMT.POSTROT = false + EMT.RELOAD = false + EMT.RELOAD2 = nil + EMT.CHAN2 = bMoveChar + end + -- se utensile appena selezionato, lo devo dichiarare + if EMT.TSELECT then + EMT.TSELECT = nil + if bMoveChar then + local sStep = EgtNumToString( EMT.NSTEP, 0) + EmtOutput( '_N'..sStep..':STOPRE') + end + local nTool = 100 + tonumber( string.sub( EMT.TCPOS, 2)) + local sOut = 'PRE_WORK(1,1,' .. EgtNumToString( nTool, 0) .. ','..EgtNumToString( EMT.S, 0) ..',,,,)' + EmtOutput( sOut) + EMT.SPEED_ON = true + -- eventuali emissioni per ripartenza successiva al carico + elseif bMoveChar then + local sStep1 = EgtNumToString( EMT.NSTEP + 1, 0) + EmtOutput( 'GOTOF '..'_N'..sStep1) + local sStep = EgtNumToString( EMT.NSTEP, 0) + EmtOutput( '_N'..sStep..':STOPRE') + local nTool = 100 + tonumber( string.sub( EMT.TCPOS, 2)) + local sOut = 'PRE_WORK(1,1,' .. EgtNumToString( nTool, 0) .. ','..EgtNumToString( EMT.S, 0) ..',,,,)' + EmtOutput( sOut) + EMT.SPEED_ON = true + EmtOutput( '_N'..sStep1..':STOPRE') + end + -- eventuale avvio mandrino (se non già avviato) + EmitSpeedOn( EMT.S) + -- primo posizionamento testa rispetto a 0M + EmtResetPrev() + if EMT.ZMAX then + sOut = 'SUPA G0 D0 Z'..EgtNumToString( ParkZ, 3) + else + sOut = 'SUPA G0 D0' .. EmtGetAxis( 'L3') + end + EmtOutput( sOut) + -- movimento YAC con interpolazione approssimata tramite F opportune per ogni asse + --EmtOutput( string.format( '; Y:%.3f->%.3f A:%.3f->%.3f C::%.3f->%.3f', EMT.L2opp, EMT.L2, EMT.R2pp, EMT.R2, EMT.R1pp, EMT.R1)) + local dFeedY, dFeedA, dFeedC = CalcFeedYAC( EMT.L2opp - EMT.L2, EMT.R2pp - EMT.R2, EMT.R1pp - EMT.R1) + sOut = '_POSIZ_YAC('..EgtNumToString( EMT.L2, 3)..','..EgtNumToString( EMT.R2, 3)..','..EgtNumToString( EMT.R1, 3)..','.. + EgtNumToString( dFeedY, 0)..','..EgtNumToString( dFeedA, 0)..','..EgtNumToString( dFeedC, 0)..')' + EmtOutput( sOut) + -- se necessario, attesa fine movimenti carrelli e presa assi relativi + if bMoveChar then + sOut = 'WAIT_CHAN(2)' + EmtOutput( sOut) + EMT.CHAN2 = nil + if EMT.X1DELTA and EMT.X2DELTA then + EmtOutput( 'GET(X1,X2)') + EmtOutput( 'STOPRE') + EmtOutput( 'TRAILON(X2,X1)') + EMT.TRAILON = true + elseif EMT.X1DELTA then + EmtOutput( 'GET(X1)') + elseif EMT.X2DELTA then + EmtOutput( 'GET(X2)') + end + end + if EMT.ZMAX and EMT.L3 < ParkZ - 10 then + sOut = 'SUPA G0 D0' .. EmtGetAxis( 'L3') + EmtOutput( sOut) + end + -- assegnazione assi geometrici (GEOMAX) + EmtOutput( 'TRANS') + if EMT.X1DELTA then + sOut = 'GEOAX(1,X1,2,Y1,3,Z1)' + else + sOut = 'GEOAX(1,X2,2,Y1,3,Z1)' + end + EmtOutput( sOut) + EmtOutput( 'G90 G17') + -- primo posizionamento carrello rispetto a 0M + if EMT.X1DELTA then + local dPosX1 = EMT.L1 + EMT.X1DELTA + sOut = 'G1 X' .. EmtLenToString( dPosX1, 3) .. ' F' .. GetClampFeed( EMT.LB) + EmtOutput( sOut) + elseif EMT.X2DELTA then + local dPosX2 = EMT.L1 + EMT.X2DELTA + sOut = 'G1 X' .. EmtLenToString( dPosX2, 3) .. ' F' .. GetClampFeed( EMT.LB) + EmtOutput( sOut) + else + EmtSetLastError( 1213, "Part to machine without charriots") + end + -- se taglio di separazione prima di scarico a caduta, emissione stop tappeto scarico trucioli + if EMT.PREFALLCUT then + EmtOutput( ';M29') + EMT.PREFALLCUT = nil + end + EMT.REFLOC = 0 + EMT.MCHFIRST = false + EMT.ZMAX = false + -- se alto in Z (non serve l'avvicinamento finale) + if EMT.FLAG == 2 then + -- aggiorno valori come precedenti + EMT.TLAST = EMT.L1b + EmtUpdatePrev() + return + -- altrimenti ripristino i valori originali degli assi + else + MyRestoreAxes() + end + end + -- se standard + if EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then + -- se necessario, impostazione riferimento locale + if EMT.REFLOC == 0 then + -- calcolo del piano generico + CalcInterpPlane() + EMT.REFLOC = 1 + -- emissione del piano generico + EmtOutput( EMT.IPLGLSTR) + end + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3') + EmtOutput( sOut) + -- se altrimenti risalita a Z max a fine lavorazione + elseif EMT.FLAG == 3 then + EMT.REFLOC = nil + EMT.IPLGL = false + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EmitZmax() + EMT.ZMAX = true + -- se altrimenti movimento in Home + elseif EMT.FLAG == 4 then + -- non previsto + -- se altrimenti rotazione a Z max + elseif EMT.FLAG == 5 then + -- viene gestito all'inizio della lavorazione successiva + -- altrimenti errore + else + EmtSetLastError( 1212, "Unknown Rapid flag") + end + -- aggiorno valori come precedenti + EMT.TLAST = EMT.L1b + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnLinear() + MyBackupAxes() + EMT.TLAST = EMT.L1 + -- se necessario, impostazione riferimento locale + if EMT.REFLOC == 0 then + -- calcolo del piano generico + CalcInterpPlane() + EMT.REFLOC = 1 + -- emissione del piano generico + EmtOutput( EMT.IPLGLSTR) + -- salvo posizione attuale + local OldL1 = EMT.L1 + local OldL2 = EMT.L2 + local OldL3 = EMT.L3 + -- imposto posizione precedente (non contiene l'offset in X per sovramateriale di testa EMT.X_OFF) + EMT.L1 = EMT.L1o + EMT.L2 = EMT.L2o + EMT.L3 = EMT.L3o + -- trasformo i punti nel piano + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EMT.L1p = nil + EMT.L2p = nil + EMT.L3p = nil + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3') + EmtOutput( sOut) + -- ripristino posizione attuale + EMT.L1 = OldL1 + EMT.L2 = OldL2 + EMT.L3 = OldL3 + end + + if EMT.FEEDFIRST then + local sOut = 'M_OK(1,'..EgtNumToString( EMT.S, 0)..')' + EmtOutput( sOut) + EMT.FEEDFIRST = false + end + + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + -- valori degli assi + local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3') + -- se nulla da emettere, esco + if #sAxes == 0 then + return + end + -- aggiungo feed + local sFeed = EmtGetFeed() + -- emetto linea + EmtOutput( "G1"..sAxes..sFeed) + + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnArc() + MyBackupAxes() + EMT.TLAST = EMT.L1 + + if EMT.FEEDFIRST then + local sOut = 'M_OK(1,'..EgtNumToString( EMT.S, 0)..')' + EmtOutput( sOut) + EMT.FEEDFIRST = false + end + + -- non modale su archi + EmtResetPrevLinear() + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + -- valori degli assi + local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + -- se nulla da emettere, esco + if #sAxes == 0 then + return + end + -- valori delle coordinate del centro + EmtAdjustCenterAxes() + -- coordinate centro (per ora solo archi nel piano XY) + --local sCen = ' ' .. EMT.C1t .. EmtLenToString(EMT.C1,3) .. + -- ' ' .. EMT.C2t .. EmtLenToString(EMT.C2,3) + -- raggio + local sRad = ' ' .. EMT.RRt .. EmtLenToString(EMT.RR,3) + -- aggiungo feed + local sFeed = EmtGetFeed() + -- tipo arco + local sArc = 'G' .. EgtNumToString( EMT.MOVE, 0) + -- emetto arco + EmtOutput( sArc..sAxes..sRad..sFeed) + + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function CalcDinamicaPinze( dH, dS, dL) + local MinTempoAcc = 0.3 -- [s] + local MaxTempoAcc = 4.0 -- [s] + local KgMtCubo= 550 -- densità legno [Kg / metro cubo] + local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg] + local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min] + local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N] + local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000) + if ( TempoAcc < MinTempoAcc) then TempoAcc = MinTempoAcc end + if ( TempoAcc > MaxTempoAcc) then TempoAcc = MaxTempoAcc end + local AccMaxPinze = FMaxPinze / ( 60 * MinTempoAcc) + local AccPinze = FMaxPinze / ( 60 * TempoAcc) + local RidFeed = 100 / Massa * 100 + if RidFeed > 100 then + RidFeed = 100 + elseif RidFeed < 10 then + RidFeed = 10 + end + return AccPinze, AccMaxPinze, RidFeed, TempoAcc +end + +--------------------------------------------------------------------- +function CalcCharStatus( sCmd, bSkipPress) + -- aperto + if sCmd == '0' then + return '1' + -- chiuso + elseif sCmd == '1' then + return '2' + -- chiuso con pressore attivato + elseif sCmd == '2' then + return EgtIf( bSkipPress, '2', '0') + end +end + +--------------------------------------------------------------------- +function CalcFeedYAC( dDeltaY, dDeltaA, dDeltaC) + local dTY = abs( dDeltaY) / FmaxY + local dTA = abs( dDeltaA) / FmaxA + local dTC = abs( dDeltaC) / FmaxC + local dT = max( dTY, dTA, dTC) + local dFeedY = FmaxY + if dTY > 0.001 then dFeedY = FmaxY * dTY / dT end + local dFeedA = FmaxA + if dTA > 0.001 then dFeedA = FmaxA * dTA / dT end + local dFeedC = FmaxC + if dTC > 0.001 then dFeedC = FmaxC * dTC / dT end + return dFeedY, dFeedA, dFeedC +end + +--------------------------------------------------------------------- +function PrepareLoad( sCmd, bStart) + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + -- se inizio + if EMT.AUXIND == 1 then + -- reset stato pinze + EMT.X1STAT = 0 + EMT.X2STAT = 0 + end + elseif Cmd[1] == '1' then + elseif Cmd[1] == '2' then + elseif Cmd[1] == '3' then + elseif Cmd[1] == '11' then + EMT.X1STAT = tonumber( Cmd[2]) + elseif Cmd[1] == '12' then + EMT.X2STAT = tonumber( Cmd[2]) + elseif Cmd[1] == '21' then + local dX1Delta = tonumber( Cmd[2]) + local dX2Delta = tonumber( Cmd[3]) + if dX1Delta > 0 and dX2Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = dX2Delta + elseif dX1Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = nil + elseif dX2Delta > 0 then + EMT.X1DELTA = nil + EMT.X2DELTA = dX2Delta + end + if EMT.X1DELTA and not EMT.X2DELTA then + local sInfo = string.format( ';LOAD D1=%.1f', EMT.X1DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 1 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 0 + local sRef1 = EmtLenToString( EMT.X1DELTA, 3) + local sRef2 = EmtLenToString( ParkX1 + EMT.X1DELTA, 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2) + table.insert( EMT.AUXSTR, sOut) + end + end +end + +--------------------------------------------------------------------- +function PrepareMoveChar( sCmd) + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + -- se inizio + if EMT.AUXIND == 1 then + -- reset stato + EMT.MCIND = 0 + EMT.X1DLTP = EMT.X1DELTA + EMT.X2DLTP = EMT.X2DELTA + EMT.X1STAP = EgtIf( EMT.X1DELTA, 1, 0) + EMT.X2STAP = EgtIf( EMT.X2DELTA, 1, 0) + EMT.X1STAI = EMT.X1STAP + EMT.X2STAI = EMT.X2STAP + EMT.X1STAT = 0 + EMT.X2STAT = 0 + EMT.MCX1 = {} + EMT.MCX2 = {} + end + elseif Cmd[1] == '1' then + if Cmd[2] ~= 'Z' then + EMT.MCIND = EMT.MCIND + 1 + if Cmd[2] == 'X1' then + EMT.MCX1[EMT.MCIND] = tonumber( Cmd[3]) + EMT.MCX2[EMT.MCIND] = 0 + elseif Cmd[2] == 'X2' then + EMT.MCX1[EMT.MCIND] = 0 + EMT.MCX2[EMT.MCIND] = tonumber( Cmd[3]) + end + end + elseif Cmd[1] == '2' then + EMT.MCIND = EMT.MCIND + 1 + for i = 2, 4, 2 do + if Cmd[i] == 'X1' then + EMT.MCX1[EMT.MCIND] = tonumber( Cmd[i+1]) + elseif Cmd[i] == 'X2' then + EMT.MCX2[EMT.MCIND] = tonumber( Cmd[i+1]) + end + end + if not EMT.MCX1[EMT.MCIND] then EMT.MCX1[EMT.MCIND] = 0 end + if not EMT.MCX2[EMT.MCIND] then EMT.MCX2[EMT.MCIND] = 0 end + elseif Cmd[1] == '3' then + EMT.MCIND = EMT.MCIND + 1 + for i = 2, 6, 2 do + if Cmd[i] == 'X1' then + EMT.MCX1[EMT.MCIND] = tonumber( Cmd[i+1]) + elseif Cmd[i] == 'X2' then + EMT.MCX2[EMT.MCIND] = tonumber( Cmd[i+1]) + end + end + elseif Cmd[1] == '11' then + EMT.X1STAT = tonumber( Cmd[2]) + if EMT.MCIND == 0 then EMT.X1STAI = EMT.X1STAT end + elseif Cmd[1] == '12' then + EMT.X2STAT = tonumber( Cmd[2]) + if EMT.MCIND == 0 then EMT.X2STAI = EMT.X2STAT end + elseif Cmd[1] == '21' then + local dX1Delta = tonumber( Cmd[2]) + local dX2Delta = tonumber( Cmd[3]) + if dX1Delta > 0 and dX2Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = dX2Delta + elseif dX1Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = nil + elseif dX2Delta > 0 then + EMT.X1DELTA = nil + EMT.X2DELTA = dX2Delta + end + if EMT.X1STAP ~= 0 and EMT.X2STAP ~= 0 and EMT.X1STAI == 0 and EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND == 1 then + local sInfo = string.format( ';X1+X2->X1+X2 D12=%.1f', EMT.X1DELTA - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 11 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 0 + local sRef1 = EmtLenToString( EMT.MCX1[1], 3) + local sRef2 = EmtLenToString( EMT.MCX1[1], 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,,,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X2STAP ~= 0 and EMT.X2STAI == 0 and EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND == 1 then + local sInfo = string.format( ';X1+X2->X1+X2 D12=%.1f', EMT.X1DELTA - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 12 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 0 + local sRef1 = EmtLenToString( EMT.MCX2[1], 3) + local sRef2 = EmtLenToString( EMT.MCX2[1], 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,,,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X2STAP ~= 0 and EMT.X1DELTA and not EMT.X2DELTA and EMT.MCIND == 1 then + local sInfo = string.format( ';X1+X2->X1 D1=%.1f', EMT.X1DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 12 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EMT.MCX2[1], 3) + local sRef2 = EmtLenToString( EMT.MCX2[1], 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,,,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X2STAP ~= 0 and EMT.X1DELTA and not EMT.X2DELTA and EMT.MCIND == 2 then + local sInfo = string.format( ';%sX2->X1 D1=%.1f', EgtIf( EMT.X1STAP > 0, 'X1+', ''), EMT.X1DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 32 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EgtIf( EMT.MCX2[1] == 0, EMT.L1opp + EMT.X2DLTP, EMT.MCX2[1]), 3) + local sRef2 = EmtLenToString( EMT.MCX1[1], 3) + local sRef3 = EmtLenToString( EMT.MCX2[2], 3) + local sRef4 = EmtLenToString( EgtIf( EMT.MCX1[2] == 0, EMT.MCX1[1], EMT.MCX1[2]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X2STAP ~= 0 and not EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND == 1 then + local sInfo = string.format( ';X1+X2->X2 D2=%.1f', EMT.LB - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 21 + local nVertClamp = EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 0 + local sRef1 = EmtLenToString( EMT.L1opp + EMT.X1DLTP, 3) + local sRef2 = EmtLenToString( EMT.MCX1[1], 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,,,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X2STAP ~= 0 and not EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND >= 3 then + local sInfo = string.format( ';X1+X2->X2 D2=%.1f', EMT.LB - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 34 + local nVertClamp = EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = EgtIf( EMT.MCIND >= 4, 2, 1) + local sRef1 = EmtLenToString( EMT.MCX2[1], 3) + local sRef2 = EmtLenToString( EMT.MCX1[1], 3) + local sRef3 = EmtLenToString( EMT.MCX2[2], 3) + local sRef4 = EmtLenToString( EMT.MCX1[2], 3) + local sRef5 = EmtLenToString( EgtIf( EMT.MCX2[3] == 0, EMT.MCX2[2], EMT.MCX2[3]), 3) + local sRef6 = EmtLenToString( EgtIf( EMT.MCX1[3] == 0, EMT.MCX1[2], EMT.MCX1[3]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,%s,%s)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4, sRef5, sRef6) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X2STAP == 0 and not EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND == 1 then + local sInfo = string.format( ';X1->X2 D2=%.1f', EMT.LB - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 31 + local nVertClamp = EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EMT.L1opp + EMT.X1DLTP, 3) + local sRef2 = EmtLenToString( ParkX2, 3) + local sRef3 = EmtLenToString( EMT.MCX1[1], 3) + local sRef4 = EmtLenToString( ParkX2, 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and not EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND == 2 then + local sInfo = string.format( ';X1%s->X2 D2=%.1f', EgtIf( EMT.X2STAP > 0, '+X2', ''), EMT.LB - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 31 + local nVertClamp = EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EgtIf( EMT.MCX1[1] == 0, EMT.L1opp + EMT.X1DLTP, EMT.MCX1[1]), 3) + local sRef2 = EmtLenToString( EMT.MCX2[1], 3) + local sRef3 = EmtLenToString( EMT.MCX1[2], 3) + local sRef4 = EmtLenToString( EgtIf( EMT.MCX2[2] == 0, EMT.MCX2[1], EMT.MCX2[2]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and not EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND >= 3 then + local sInfo = string.format( ';X1%s->X2 D2=%.1f', EgtIf( EMT.X2STAP > 0, '+X2', ''), EMT.LB - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local sGet = 'GET(X1,X2)' + table.insert( EMT.AUXSTR, sGet) + local sReset = 'TRANS' + table.insert( EMT.AUXSTR, sReset) + local sFeed = 'FA[X1]='..GetFmaxClamp()..' FA[X2]='..GetFmaxClamp() + table.insert( EMT.AUXSTR, sFeed) + local sMove = 'POS[X1]='..EmtLenToString( EMT.MCX1[1], 3)..' POS[X2]='..EmtLenToString( EMT.MCX2[1], 3) + table.insert( EMT.AUXSTR, sMove) + local nFunz = 34 + local nVertClamp = EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = EgtIf( EMT.MCIND >= 5, 2, 1) + local sRef1 = EmtLenToString( EMT.MCX2[2], 3) + local sRef2 = EmtLenToString( EMT.MCX1[2], 3) + local sRef3 = EmtLenToString( EMT.MCX2[3], 3) + local sRef4 = EmtLenToString( EMT.MCX1[3], 3) + local sRef5 = EmtLenToString( EgtIf( EMT.MCX2[4] == 0, EMT.MCX2[3], EMT.MCX2[4]), 3) + local sRef6 = EmtLenToString( EgtIf( EMT.MCX1[4] == 0, EMT.MCX1[3], EMT.MCX1[4]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,%s,%s)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4, sRef5, sRef6) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X1STAI ~= 0 and EMT.X1DELTA and EMT.X2DELTA and ( EMT.MCIND == 1 or EMT.MCIND == 2) then + local sInfo = string.format( ';X1%s->X1+X2 D12=%.1f', EgtIf( EMT.X2STAP > 0, '+X2', ''), EMT.X1DELTA - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 41 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EgtIf( EMT.MCX1[1] == 0, EMT.L1opp + EMT.X1DLTP, EMT.MCX1[1]), 3) + local sRef2 = EmtLenToString( EMT.MCX2[1], 3) + local sRef3 = EmtLenToString( EgtIf( not EMT.MCX1[2] or EMT.MCX1[2] == 0, EMT.MCX1[1], EMT.MCX1[2]), 3) + local sRef4 = EmtLenToString( EgtIf( not EMT.MCX2[2] or EMT.MCX2[2] == 0, EMT.MCX2[1], EMT.MCX2[2]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X1STAI == 0 and EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND == 2 then + local sInfo = string.format( ';X1%s->X1+X2 D12=%.1f', EgtIf( EMT.X2STAP > 0, '+X2', ''), EMT.X1DELTA - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 42 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EMT.MCX2[1], 3) + local sRef2 = EmtLenToString( EMT.MCX1[1], 3) + local sRef3 = EmtLenToString( EgtIf( EMT.MCX2[2] == 0, EMT.MCX2[1], EMT.MCX2[2]), 3) + local sRef4 = EmtLenToString( EgtIf( EMT.MCX1[2] == 0, EMT.MCX1[1], EMT.MCX1[2]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND >= 3 then + local sInfo = string.format( ';X1%s->X1+X2 D12=%.1f', EgtIf( EMT.X2STAP > 0, '+X2', ''), EMT.X1DELTA - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 43 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = EgtIf( EMT.MCIND >= 4, 2, 1) + local sRef1 = EmtLenToString( EMT.MCX1[1], 3) + local sRef2 = EmtLenToString( EMT.MCX2[1], 3) + local sRef3 = EmtLenToString( EMT.MCX1[2], 3) + local sRef4 = EmtLenToString( EMT.MCX2[2], 3) + local sRef5 = EmtLenToString( EgtIf( EMT.MCX1[3] == 0, EMT.MCX1[2], EMT.MCX1[3]), 3) + local sRef6 = EmtLenToString( EgtIf( EMT.MCX2[3] == 0, EMT.MCX2[2], EMT.MCX2[3]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,%s,%s)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4, sRef5, sRef6) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP ~= 0 and EMT.X1DELTA and not EMT.X2DELTA and EMT.MCIND >= 3 then + local sInfo = string.format( ';X1->X1 D1=%.1f', EMT.X1DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 33 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = EgtIf( EMT.MCIND >= 4, 2, 1) + local sRef1 = EmtLenToString( EMT.MCX1[1], 3) + local sRef2 = EmtLenToString( EMT.MCX2[1], 3) + local sRef3 = EmtLenToString( EMT.MCX1[2], 3) + local sRef4 = EmtLenToString( EgtIf( EMT.MCX2[2] == 0, EMT.MCX2[1], EMT.MCX2[2]), 3) + local sRef5 = EmtLenToString( EgtIf( EMT.MCX1[3] == 0, EMT.MCX1[2], EMT.MCX1[3]), 3) + local sRef6 = EmtLenToString( EgtIf( EMT.MCX2[3] == 0, EgtIf( EMT.MCX2[2] == 0, EMT.MCX2[1], EMT.MCX2[2]), EMT.MCX2[3]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,%s,%s)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4, sRef5, sRef6) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP == 0 and EMT.X1DELTA and EMT.X2DELTA and ( EMT.MCIND == 1 or EMT.MCIND == 2) then + local sInfo = string.format( ';X2->X1+X2 D12=%.1f', EMT.X1DELTA - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 42 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EMT.MCX2[1], 3) + local sRef2 = EmtLenToString( EMT.MCX1[1], 3) + local sRef3 = EmtLenToString( EgtIf( not EMT.MCX2[2] or EMT.MCX2[2] == 0, EMT.MCX2[1], EMT.MCX2[2]), 3) + local sRef4 = EmtLenToString( EgtIf( not EMT.MCX1[2] or EMT.MCX1[2] == 0, EMT.MCX1[1], EMT.MCX1[2]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP == 0 and EMT.X1STAI == 0 and EMT.X2STAP ~= 0 and EMT.X2STAI ~= 0 and EMT.X1DELTA and not EMT.X2DELTA and EMT.MCIND == 4 then + local sInfo = string.format( ';X2->X1 D1=%.1f', EMT.X1DELTA) + table.insert( EMT.AUXSTR, sInfo) + local sGet = 'GET(X1,X2)' + table.insert( EMT.AUXSTR, sGet) + local sReset = 'TRANS' + table.insert( EMT.AUXSTR, sReset) + local sFeed = 'FA[X1]='..GetFmaxClamp()..' FA[X2]='..GetFmaxClamp() + table.insert( EMT.AUXSTR, sFeed) + local sMove = 'POS[X1]='..EmtLenToString( EMT.MCX1[1], 3)..' POS[X2]='..EmtLenToString( EMT.MCX2[1], 3) + table.insert( EMT.AUXSTR, sMove) + local nFunz = 33 + local nVertClamp = EgtIf( EMT.X1STAT == 2, 1, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EMT.MCX1[2], 3) + local sRef2 = EmtLenToString( EMT.MCX2[2], 3) + local sRef3 = EmtLenToString( EMT.MCX1[3], 3) + local sRef4 = EmtLenToString( EgtIf( EMT.MCX2[3] == 0, EMT.MCX2[2], EMT.MCX2[3]), 3) + local sRef5 = EmtLenToString( EgtIf( EMT.MCX1[4] == 0, EMT.MCX1[3], EMT.MCX1[4]), 3) + local sRef6 = EmtLenToString( EgtIf( EMT.MCX2[4] == 0, EMT.MCX2[3], EMT.MCX2[4]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,%s,%s)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4, sRef5, sRef6) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.X1STAP == 0 and EMT.X1STAI == 0 and EMT.X2STAP ~= 0 and EMT.X2STAI ~= 0 and not EMT.X1DELTA and EMT.X2DELTA and EMT.MCIND == 3 then + local sInfo = string.format( ';X2->X2 D2=%.1f', EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local nFunz = 34 + local nVertClamp = EgtIf( EMT.X2STAT == 2, 2, 0) + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = 1 + local sRef1 = EmtLenToString( EMT.MCX2[1], 3) + local sRef2 = EmtLenToString( EMT.MCX1[1], 3) + local sRef3 = EmtLenToString( EMT.MCX2[2], 3) + local sRef4 = EmtLenToString( EgtIf( EMT.MCX1[2] == 0, EMT.MCX1[1], EMT.MCX1[2]), 3) + local sRef5 = EmtLenToString( EgtIf( EMT.MCX2[3] == 0, EMT.MCX2[2], EMT.MCX2[3]), 3) + local sRef6 = EmtLenToString( EgtIf( EMT.MCX1[3] == 0, EMT.MCX1[2], EMT.MCX1[3]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s,%s,%s)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4, sRef5, sRef6) + table.insert( EMT.AUXSTR, sOut) + elseif EMT.MCIND > 0 then + EmtSetLastError( 1215, "Charriot move : unmanaged case ("..EMT.MCHNAME..')') + end + end +end + +--------------------------------------------------------------------- +function PrepareResidue( sCmd) + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + -- se non è scarico + if Cmd[2] ~= 'Unloading' then + -- se inizio + if EMT.AUXIND <= 2 then + -- reset stato + EMT.MCIND = 0 + EMT.X1STAT = 0 + EMT.X2STAT = 0 + EMT.MCX1 = {} + EMT.MCX2 = {} + end + else + EMT.UNL = true + end + elseif Cmd[1] == '1' then + if Cmd[2] ~= 'Z' then + EMT.MCIND = EMT.MCIND + 1 + if Cmd[2] == 'X1' then + EMT.MCX1[EMT.MCIND] = tonumber( Cmd[3]) + EMT.MCX2[EMT.MCIND] = 0 + elseif Cmd[2] == 'X2' then + EMT.MCX1[EMT.MCIND] = 0 + EMT.MCX2[EMT.MCIND] = tonumber( Cmd[3]) + end + end + elseif Cmd[1] == '2' then + EMT.MCIND = EMT.MCIND + 1 + for i = 2, 4, 2 do + if Cmd[i] == 'X1' then + EMT.MCX1[EMT.MCIND] = tonumber( Cmd[i+1]) + elseif Cmd[i] == 'X2' then + EMT.MCX2[EMT.MCIND] = tonumber( Cmd[i+1]) + end + end + if not EMT.MCX1[EMT.MCIND] then EMT.MCX1[EMT.MCIND] = 0 end + if not EMT.MCX2[EMT.MCIND] then EMT.MCX2[EMT.MCIND] = 0 end + elseif Cmd[1] == '3' then + EMT.MCIND = EMT.MCIND + 1 + for i = 2, 6, 2 do + if Cmd[i] == 'X1' then + EMT.MCX1[EMT.MCIND] = tonumber( Cmd[i+1]) + elseif Cmd[i] == 'X2' then + EMT.MCX2[EMT.MCIND] = tonumber( Cmd[i+1]) + end + end + elseif Cmd[1] == '11' then + EMT.X1STAT = tonumber( Cmd[2]) + elseif Cmd[1] == '12' then + EMT.X2STAT = tonumber( Cmd[2]) + if EMT.UNL and EMT.X2STAT == 0 then + local sWait = 'WAIT_CHAN(2)' + table.insert( EMT.AUXSTR, sWait) + local sSync = 'STOPRE' + table.insert( EMT.AUXSTR, sSync) + local nFunz = 6 + local nVertClamp = 0 + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LT) + local dAcc = 4 + local nOpt = 0 + local sRef1 = EMT.MCX2[#EMT.MCX2] + local sRef2 = EmtLenToString( ParkX2 - ( EMT.LB - EMT.X2DELTA), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2) + table.insert( EMT.AUXSTR, sOut) + end + elseif Cmd[1] == '21' then + local dX1Delta = tonumber( Cmd[2]) + local dX2Delta = tonumber( Cmd[3]) + if dX1Delta > 0 and dX2Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = dX2Delta + elseif dX1Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = nil + elseif dX2Delta > 0 then + EMT.X1DELTA = nil + EMT.X2DELTA = dX2Delta + end + if EMT.AUXIND > 1 then + local sInfo = string.format( ';X1->X2 D2=%.1f', EMT.LB - EMT.X2DELTA) + table.insert( EMT.AUXSTR, sInfo) + local sWait = 'WAIT_CHAN(2)' + table.insert( EMT.AUXSTR, sWait) + local sSync = 'STOPRE' + table.insert( EMT.AUXSTR, sSync) + local nFunz = 31 + local nVertClamp = 0 + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LB) + local dAcc = 4 + local nOpt = EgtIf( EMT.MCIND >= 3, 2, 1) + local sRef1 = EmtLenToString( EMT.MCX1[1], 3) + local sRef2 = EmtLenToString( EMT.MCX2[1], 3) + local sRef3 = EmtLenToString( EMT.MCX1[2], 3) + local sRef4 = EmtLenToString( EgtIf( EMT.MCX2[2] == 0, EMT.MCX2[1], EMT.MCX2[2]), 3) + local sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,%s,%s)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2, sRef3, sRef4) + table.insert( EMT.AUXSTR, sOut) + end + end +end + +--------------------------------------------------------------------- +function PrepareSplit( sCmd) + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + -- non interessa + elseif Cmd[1] == '1' then + local sMsg = Cmd[2] .. Cmd[3] + table.insert( EMT.AUXCMD, sMsg) + if Cmd[2] == 'X1' then + local sOut = 'STOPRE' + table.insert( EMT.AUXSTR, sOut) + EMT.NSTEP = EMT.NSTEP + 10 + local sStep = EgtNumToString( EMT.NSTEP, 0) + sOut = '_STEP='..sStep + table.insert( EMT.AUXSTR, sOut) + sOut = 'TRAILOF(X2,X1)' + table.insert( EMT.AUXSTR, sOut) + sOut = '_N'..sStep..':STOPRE' + table.insert( EMT.AUXSTR, sOut) + sOut = 'TRANS' + table.insert( EMT.AUXSTR, sOut) + sOut = 'STOPRE' + table.insert( EMT.AUXSTR, sOut) + EMT.TRAILON = nil + sOut = 'POS[X1]='..Cmd[3]..' FA[X1]='..GetFmaxClamp() + table.insert( EMT.AUXSTR, sOut) + EMT.X1POS = tonumber( Cmd[3]) + end + elseif Cmd[1] == '21' then + local dX1Delta = tonumber( Cmd[2]) + local dX2Delta = tonumber( Cmd[3]) + if dX1Delta > 0 and dX2Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = dX2Delta + elseif dX1Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = nil + elseif dX2Delta > 0 then + EMT.X1DELTA = nil + EMT.X2DELTA = dX2Delta + end + end +end + +--------------------------------------------------------------------- +function PrepareUnload( sCmd) + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + -- non interessa + elseif Cmd[1] == '1' then + ; + elseif Cmd[1] == '2' then + local sOut = 'STOPRE' + table.insert( EMT.AUXSTR, sOut) + EMT.NSTEP = EMT.NSTEP + 10 + local sStep = EgtNumToString( EMT.NSTEP, 0) + sOut = '_STEP='..sStep + table.insert( EMT.AUXSTR, sOut) + local nFunz = 6 + local nVertClamp = 0 + local dPress = 2.5 + local dFeed = GetClampFeed( EMT.LT) + local dAcc = 4 + local nOpt = 0 + local sRef1 = Cmd[5] + local sRef2 = EmtLenToString( ParkX2 - ( EMT.LT - EMT.X2DELTA), 3) + sOut = string.format( '_POSIZ_T(%d,%d,%.1f,%.1f,%.1f,%d,%s,%s,,)', nFunz, nVertClamp, dPress, dFeed, dAcc, nOpt, sRef1, sRef2) + table.insert( EMT.AUXSTR, sOut) + sOut = '_N'..sStep..':STOPRE' + table.insert( EMT.AUXSTR, sOut) + EMT.U_STD = true + elseif Cmd[1] == '3' then + ; + elseif Cmd[1] == '11' then + ; + elseif Cmd[1] == '12' then + ; + elseif Cmd[1] == '21' then + -- non interessa + end +end + +--------------------------------------------------------------------- +function PreparePreRotation( sCmd) + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + -- se inizio o subito dopo, imposto stato iniziale pinze + if EMT.AUXIND <= 2 then + EMT.SA = EgtIf( EMT.X1DELTA, ' EA112', ' EA111') + EMT.SB = EgtIf( EMT.X1DELTA, ' EB112', ' EB111') + EMT.SC = EgtIf( EMT.X2DELTA, ' EC142', ' EC141') + EMT.SD = EgtIf( EMT.X2DELTA, ' ED142', ' ED141') + EMT.SE = EgtIf( EMT.X1DELTA, ' EE1', ' EE2') + end + -- se è pre-rotazione + if Cmd[2] == 'Pre-Rotation' then + EMT.PREROT = true + elseif Cmd[2] == 'SplitRot' then + EMT.SPLITROT = true + end + elseif Cmd[1] == '1' then + local sMsg = Cmd[2] .. Cmd[3] + table.insert( EMT.AUXCMD, sMsg) + if Cmd[2] ~= 'Z' then + local sOut + if not EMT.PREROT then + sOut = 'G111 '..Cmd[2]..'='..Cmd[3]..EMT.SA..EMT.SB..EMT.SC..EMT.SD..EMT.SE..' EF'..GetFmaxClamp() + else + sOut = 'G111 '..Cmd[2]..'='..Cmd[3]..' EA86 EB87 EC141 EE0 EF'..GetFmaxClamp() + end + table.insert( EMT.AUXSTR, sOut) + end + elseif Cmd[1] == '2' then + local sMsg = Cmd[2] ..'=' .. Cmd[3] ..' '.. Cmd[4] ..'=' .. Cmd[5] + table.insert( EMT.AUXCMD, sMsg) + local sOut = 'G111'..(EgtIf( Cmd[2] ~= 'T', ' '..Cmd[2]..'='..Cmd[3], '')).. + (EgtIf( Cmd[4] ~= 'T', ' '..Cmd[4]..'='..Cmd[5], '')).. + EMT.SA..EMT.SB..EMT.SC..EMT.SD..EMT.SE..' EF'..GetFmaxClamp() + table.insert( EMT.AUXSTR, sOut) + elseif Cmd[1] == '3' then + local sMsg = Cmd[2] ..'=' .. Cmd[3] ..' '.. Cmd[4] ..'=' .. Cmd[5] ..' '.. Cmd[6] ..'=' .. Cmd[7] + table.insert( EMT.AUXCMD, sMsg) + local sOut = 'G111'..(EgtIf( Cmd[2] ~= 'T', ' '..Cmd[2]..'='..Cmd[3], '')).. + (EgtIf( Cmd[4] ~= 'T', ' '..Cmd[4]..'='..Cmd[5], '')).. + (EgtIf( Cmd[6] ~= 'T', ' '..Cmd[6]..'='..Cmd[7], '')).. + EMT.SA..EMT.SB..EMT.SC..EMT.SD..EMT.SE..' EF'..GetFmaxClamp() + table.insert( EMT.AUXSTR, sOut) + elseif Cmd[1] == '11' then + local sMsg = 'PX1=' .. ' ' .. Cmd[2] + table.insert( EMT.AUXCMD, sMsg) + if #EMT.AUXSTR > 0 then + local sVal = ' EB11' .. CalcCharStatus( Cmd[2], true) + local sOut = EMT.AUXSTR[#EMT.AUXSTR] + EMT.AUXSTR[#EMT.AUXSTR] = sOut:gsub( EMT.SB, sVal) + end + if EMT.SPLITROT then + EMT.SA = EgtIf( Cmd[2] ~= '0', ' EA11' .. CalcCharStatus( Cmd[2], true), ' EA86') + EMT.SB = EgtIf( Cmd[2] ~= '0', ' EB11' .. CalcCharStatus( Cmd[2], true), ' EB87') + EMT.SE = EgtIf( Cmd[2] ~= '0', ' EE1', ' EE2') + else + EMT.SA = ' EA11' .. CalcCharStatus( Cmd[2], true) + EMT.SB = ' EB11' .. CalcCharStatus( Cmd[2], true) + EMT.SE = EgtIf( Cmd[2] ~= '0', ' EE1', ' EE2') + end + elseif Cmd[1] == '12' then + local sMsg = 'PX2=' .. ' ' .. Cmd[2] + table.insert( EMT.AUXCMD, sMsg) + if #EMT.AUXSTR > 0 then + local sVal = ' ED14' .. CalcCharStatus( Cmd[2], true) + local sOut = EMT.AUXSTR[#EMT.AUXSTR] + EMT.AUXSTR[#EMT.AUXSTR] = sOut:gsub( EMT.SD, sVal) + end + EMT.SC = ' EC14' .. CalcCharStatus( Cmd[2], true) + EMT.SD = ' ED14' .. CalcCharStatus( Cmd[2], true) + EMT.SE = EgtIf( Cmd[2] ~= '0', ' EE2', ' EE1') + elseif Cmd[1] == '21' then + local dX1Delta = tonumber( Cmd[2]) + local dX2Delta = tonumber( Cmd[3]) + if dX1Delta > 0 and dX2Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = dX2Delta + elseif dX1Delta > 0 then + EMT.X1DELTA = dX1Delta + EMT.X2DELTA = nil + elseif dX2Delta > 0 then + EMT.X1DELTA = nil + EMT.X2DELTA = dX2Delta + end + end +end + +--------------------------------------------------------------------- +function PreparePostRotation( sCmd) + -- è sostanzialmente un carico + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + -- se inizio + if EMT.AUXIND == 1 then + -- imposto stato pinze + EMT.SB = ' EB112' + end + -- se dichiarazione inizio riposizionamento carrelli + if Cmd[2] == 'CARR_MOVE' then + EMT.POSTROT = false + for i = 1, #EMT.AUXSTR do + EMT.AUXSTR[i] = string.gsub( EMT.AUXSTR[i], 'ET1', '') + end + end + elseif Cmd[1] == '1' then + local sMsg = Cmd[2] .. '=' .. Cmd[3] + table.insert( EMT.AUXCMD, sMsg) + elseif Cmd[1] == '2' then + local sMsg = Cmd[2] .. '=' .. Cmd[3] ..' '.. Cmd[4] .. '=' .. Cmd[5] + table.insert( EMT.AUXCMD, sMsg) + if Cmd[2] == 'X1' then + -- tolgo eventuale sovramateriale presente sul pezzo in posizione iniziale (la misura laser è ora col finito) + local sX1Taking = ' X1='..EmtLenToString( Cmd[3] - EMT.HOVM) + local sOut = 'G111'..sX1Taking..' EA75 EB110 EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1 E80058=0' + table.insert( EMT.AUXSTR, sOut) + end + elseif Cmd[1] == '3' then + local sMsg = Cmd[2] .. '=' .. Cmd[3] ..' '.. Cmd[4] .. '=' .. Cmd[5] ..' '.. Cmd[6] .. '=' .. Cmd[7] + table.insert( EMT.AUXCMD, sMsg) + elseif Cmd[1] == '11' then + local sMsg = 'PX1=' .. ' ' .. Cmd[2] + table.insert( EMT.AUXCMD, sMsg) + EMT.SB = ' EB11' .. CalcCharStatus( Cmd[2]) + elseif Cmd[1] == '12' then + local sMsg = 'PX2=' .. ' ' .. Cmd[2] + table.insert( EMT.AUXCMD, sMsg) + elseif Cmd[1] == '21' then + local dX1YDelta = tonumber( Cmd[2]) + local dX2Delta = tonumber( Cmd[3]) + if dX1YDelta > 0 and dX2Delta > 0 then + EMT.X1DELTA = dX1YDelta + EMT.X2DELTA = dX2Delta + elseif dX1YDelta > 0 then + EMT.X1DELTA = dX1YDelta + EMT.X2DELTA = nil + elseif dX2Delta > 0 then + EMT.X1DELTA = nil + EMT.X2DELTA = dX2Delta + end + local sX1Load = ' X1='..EmtLenToString( LoadT) + local sOut = 'G111'..sX1Load..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1' + table.insert( EMT.AUXSTR, sOut) + end +end + +--------------------------------------------------------------------- +function MyBackupAxes() + EMT.L1b = EMT.L1 + EMT.L2b = EMT.L2 + EMT.L3b = EMT.L3 + EMT.R1b = EMT.R1 + EMT.R2b = EMT.R2 + EMT.R3b = EMT.R3 + EMT.R4b = EMT.R4 + EMT.RRb = EMT.RR + EMT.C1b = EMT.C1 + EMT.C2b = EMT.C2 + EMT.C3b = EMT.C3 +end + +--------------------------------------------------------------------- +function MyRestoreAxes() + EMT.L1 = EMT.L1b + EMT.L2 = EMT.L2b + EMT.L3 = EMT.L3b + EMT.R1 = EMT.R1b + EMT.R2 = EMT.R2b + EMT.R3 = EMT.R3b + EMT.R4 = EMT.R4b + EMT.RR = EMT.RRb + EMT.C1 = EMT.C1b + EMT.C2 = EMT.C2b + EMT.C3 = EMT.C3b +end + +--------------------------------------------------------------------- +function MyAdjustLinearAxes() + local MyL1o = EMT.L1 + local MyL2o = EMT.L2 + local MyL3o = EMT.L3 + + --if EMT.REFLOC then + -- local vtE + -- if EMT.HEAD ~= 'H3' then + -- local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( 0)) + -- local LenRef = MillOffs + -- vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef + -- else + -- local LenAux = ( EMT.TDIST or ChSawLen) + MillOffs + -- local LenRef = MillOffs + -- local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + -- vtE = vtAux * LenAux - Z_AX() * LenRef + -- end + -- EMT.L1 = EMT.L1 - vtE:getX() + -- EMT.L2 = EMT.L2 - vtE:getY() + -- EMT.L3 = EMT.L3 - vtE:getZ() + --end + + if EMT.X_OFF then EMT.L1 = EMT.L1 + EMT.X_OFF end + + EmtAdjustLinearAxes() + + EMT.L1o = MyL1o + EMT.L2o = MyL2o + EMT.L3o = MyL3o + + -- Assi geometrici sempre XYZ (indipendentemente dal nome assi fisici) + EMT.L1t = 'X' + EMT.L2t = 'Y' + EMT.L3t = 'Z' +end + +--------------------------------------------------------------------- +function CalcInterpPlane() + -- origine del piano + local xS = EMT.START[1] + LoadT + if EMT.X_OFF then xS = xS + EMT.X_OFF end + local ptS = Point3d( xS, DeltaTabY, DeltaTabZ) + -- calcolo per piano generico + local vtE + if EMT.HEAD ~= 'H3' then + vtE = Vector3d( EMT.EXTR) + else + vtE = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + end + EMT.IPLGLFR = Frame3d( ptS, vtE) + --EmtOutput( 'IPLGLFR='..tostring(EMT.IPLGLFR)) + local _, dAngV, dAngO = SphericalFromVector( vtE) + local dAngO2 = EmtGetAngO2( EMT.IPLGLFR:getVersZ(), EMT.IPLGLFR:getVersX(), dAngV, dAngO) + local sXout, sYout, sZout + if EMT.X1DELTA then + sXout = ' X='..EmtLenToString( xS + EMT.X1DELTA)..'+OFS_T5_X1[0]' + sYout = ' Y=OFS_T5_X1[1]' + sZout = ' Z=OFS_T5_X1[2]' + elseif EMT.X2DELTA then + sXout = ' X='..EmtLenToString( xS + EMT.X2DELTA)..'+OFS_T5_X2[0]' + sYout = ' Y=OFS_T5_X2[1]' + sZout = ' Z=OFS_T5_X2[2]' + else + EmtSetLastError( 1214, "Part to machine without charriots") + end + EMT.IPLGLSTR = 'TRANS'..sXout..sYout..sZout.. + '\nAROT Z'..EgtNumToString( dAngO)..'\nAROT Y'..EgtNumToString( dAngV)..'\nAROT Z'..EgtNumToString( dAngO2) + EMT.IPLGL = true +end + +--------------------------------------------------------------------- +function VerifyEmitRotation() + -- recupero le rotazioni delle fasi corrente e precedente + local nRot = GetPhaseRot( EMT.PHASE) + local nPrevRot = GetPhaseRot( EMT.PHASE - 1) + -- se sono uguali non devo fare alcunchè + if nRot == nPrevRot then + return false + end + -- determino quanto ruotare + local nDeltaRot = nRot - nPrevRot + -- se rotazione automatica richiesta e possibile + if AutomaticRotation and EMT.LB >= AutoRotMinLen then + local sOut = 'M180 L0=' .. tostring( nDeltaRot) + EmtOutput( sOut) + else + local sOut + if nDeltaRot == 1 then + sOut = 'M151' + elseif nDeltaRot == 2 then + sOut = 'M152' + elseif nDeltaRot == 3 then + sOut = 'M153' + end + EmtOutput( sOut) + EmtOutput( 'M86') + EmtOutput( 'G4F.5') + end + return true +end + +--------------------------------------------------------------------- +function EmitZmax() + local sOut = 'SUPA G0 D0 Z'..EgtNumToString( ParkZ, 3) + EmtOutput( sOut) +end + +--------------------------------------------------------------------- +function EmitSpeedOn( nSpeed) + if not EMT.SPEED_ON then + EmtOutput( 'M_ON(1,'..EgtNumToString( nSpeed, 0) ..')') + EMT.SPEED_ON = true + end +end + +--------------------------------------------------------------------- +function EmitSpeedOff() + if EMT.SPEED_ON then + EmtOutput( 'M_OFF(1)') + EMT.SPEED_ON = nil + end +end + +--------------------------------------------------------------------- +function GetFmaxClamp() + return EmtLenToString( EMT.FMAXPINZE, 0) +end + +--------------------------------------------------------------------- +function GetClampFeed( dLen) + local KgMtCubo= 550 -- densità legno [Kg / metro cubo] + local Massa = ( EMT.HT * EMT.ST * dLen * KgMtCubo ) / 1e9 -- massa [Kg] + local RefMassa = 100 -- massa di riferimento con massima feed + local dCoeff = EgtClamp( RefMassa / Massa, 0.1, 1) + return EmtLenToString( dCoeff * EMT.FMAXPINZE, 0) +end + +--------------------------------------------------------------------- +-- *** END GENERATION *** +--------------------------------------------------------------------- diff --git a/Saomad-KAIROS-MK1.ini b/Saomad-KAIROS-MK1.ini new file mode 100644 index 0000000..b20647e --- /dev/null +++ b/Saomad-KAIROS-MK1.ini @@ -0,0 +1,112 @@ +; Commento per evitare BOM con UTF-8 +[General] +Material=Beam +NCType=5 ; 1=Tpa, 2=Num Flexium, 3=Num Axium APServer, 4=Num Axium PCToolkit, 5=Siemens_Sharp7 +Flow=2 +IsoFileDir=\\192.168.214.253\iso +Ip=192.168.214.1 +Rack=0 +Slot=1 +Debug=2 + +[MainVariables] +; 1 = Name, Variable Path, ReadType, Type +; ReadType => o=one time;c=continuous +; Type => plc;cn +1=Data_ToRead,302:0.0:1,c,plc +2=Reset_State,302:0.1:1,c,plc +3=Running,302:2.0:2,c,plc +;1=Data_ToRead,302:0.0:3,c,plc +;2=Reset_State,302:1.0:2,c,plc +;3=Running,302:2.0:2,c,plc +4=P_Prod,302:4.0:2,c,plc +5=P_Machgroup,302:6.0:2,c,plc +6=P_Part,302:8.0:2,c,plc +7=P_State,302:10.0:2,c,plc +8=Laser_X,302:12.0:2,c,plc +9=Laser_Y,302:14.0:2,c,plc +10=Laser_Z,302:16.0:2,c,plc +11=Alarms1,302:18.0:2,c,plc +12=Alarms2,302:20.0:2,c,plc +13=Alarms3,302:22.0:2,c,plc +14=Alarms4,302:24.0:2,c,plc +15=Alarms5,302:26.0:2,c,plc +16=Alarms6,302:28.0:2,c,plc +17=Data_Readed,301:0.0:1,c,plc +18=Reset_Readed,301:0.1:1,c,plc +19=ISO_Num,301:2.0:2,c,plc +20=Reset_Step,301:1.4:1,c,plc +21=Reset_Step_Ok,302:0.2:1,c,plc +22=NC_Status,302:30.0:2,c,plc +23=NC_Mode,302:32.0:2,c,plc +24=Open_Clamp,302:0.4:1,c,plc +25=PLC_Messages1,302:18.0:2,c,plc +26=PLC_Messages2,302:20.0:2,c,plc +27=PLC_Messages3,302:22.0:2,c,plc +28=PLC_Messages4,302:24.0:2,c,plc +29=PLC_Messages5,302:26.0:2,c,plc +30=PLC_Messages6,302:28.0:2,c,plc + +[Languages] +Enable=0 +Language1=Italiano,Ita.txt +Language2=English,Eng.txt + +[Tools] +Drillbit=1 +Sawblade=1 +Mill=1 +Mortise=1 +Chisel=0 +DrillMaker=MakeWoodDrill.lua +SawbladeMaker=MakeSawblade.lua +MillMaker=MakeWoodCylMill.lua +MortiseMaker=MakeMortise.lua +ChiselMaker=MakeChisel.lua +Active=0 + +[ToolHolder] +H1.1=Standard.nge +H1.1:MILL_NOTIP=MillNoTip.nge +H1.1:SAW_FLAT=TcSaw2.nge +H3.1=ChainSaw.nge + +[Machinings] +Drilling=1 +Sawing=1 +Milling=1 +Pocketing=1 +Mortising=1 +Chiseling=0 +SawRoughing=0 +SawFinishing=0 +GenMachining=0 +SurfFinishing=1 + +[Machining] +InitScript=InitMach.lua +ExitScript=ExitMach.lua + +[Disposition] +;InitScript=InitDisp.lua + +[Heads] +; 5 axis head +H1=6608 +; 5 axis saw +H2=6615 +; Chainsaw +H3=6616 +; Angular transmission +H5=6603 + +[SetUp] +Default=Standard + +[Estimations] +Enable=1 +WinPlace=0,458,74,669,933 + +[VMill] +Enable=1 +Save=0 diff --git a/Saomad-KAIROS-MK1.mlde b/Saomad-KAIROS-MK1.mlde new file mode 100644 index 0000000..3c8d467 --- /dev/null +++ b/Saomad-KAIROS-MK1.mlde @@ -0,0 +1,561 @@ +-- Descrizione macchina Saomad-KAIROS by EgalWare s.r.l. 2023/12/07 +-- 2023/09/22 DS ver 2.5i1 Prima versione +-- 2023/10/06 DS ver 2.5j1 Completato modello macchina e simulazione. +-- 2023/10/14 DS ver 2.5j2 Generazione di semplici programmi di lavorazione. +-- 2023/10/16 DS ver 2.5j3 Commenti prima di movimenti carrelli con sporgenza pinzaggi e relative ripetizioni ora sono esecuzioni. +-- 2023/10/18 DS ver 2.5j4 Aggiunta gestione nuovi tipi di scambio. Migliorato controllo pinzaggio per limiti corse X1 e X2. +-- 2023/10/24 DS ver 2.5j5 Ulteriori migliorie agli scambi. Gestione ripartenze. +-- 2023/11/27 DS ver 2.5k3 Aggiunta gestione ripartenze. +-- 2023/11/29 DS ver 2.5k6 Aggiunti diversi scambi carrelli. Corretto SpecAdjustCarrA3 in mlse. +-- 2023/12/07 DS ver 2.5l7 Modifiche ed aggiustamenti vari durante le prove. +-- 2023/12/13 AV ver.2.5l8 Piccola correzione per errore digitazione variabile in calcolo riposizionamento carrelli (SpecAdjustCarrB3) + +require( 'EmtGenerator') +EgtEnableDebug( false) + +PP_VER = '2.5l8' +MIN_MACH_VER = '2.5j1' + +EgtOutLog ( '** Saomad-KAIROS '..PP_VER..' (MinMach '.. MIN_MACH_VER ..') **', 1) + +-- Parametri macchina +NumericalControl = 'SIEMENS' +ChainSaw = false +MinY = -1225 +MaxY = 690 +ParkY = 400 +FmaxY = 45000 +MinZ = -512 +MaxZ = 630 +ParkZ = 620 +FmaxZ = 45000 +MinA = -109.5 +MaxA = 109.5 +ParkA = 0 +FmaxA = 10440 +MinC = -240 +MaxC = 240 +ParkC = 90 +FmaxC = 18000 +MillOffs = 217.0 +ChSawLen = 90.0 +MinX1 = 290.0 +MaxX1 = 3760.0 +ParkX1 = 480.0 +FmaxX1 = 45000 +MinX2 = -3760.0 +MaxX2 = -290.0 +ParkX2 = -480.0 +FmaxX2 = 45000 +LoadT = 1800.0 +UnloadT = -1800 +TurnerOffs = 0 +MaxHOpen = 460 +MaxVOpen = 280 +LenToPress = 500 +MinRX = -10 +MidRX = 130 +MaxRX = 430 +DeltaTabY = 0 +DeltaTabZ = 0 +DimTabY = 500 +DimTabX = 34000 +DistBack = 880 +StartRotation = true +AutomaticRotation = true +AutoRotMinLen = 2600 +MaxUnloadLen = 0 +DefTcPos = 'T1' +CoeffVM = 0.5 + +-- Aggiornamento con dati da B&W +local sData = EgtGetSourceDir().."Beam\\EbwData.lua" +if EgtExistsFile( sData) then + local Machine = dofile( sData) + if Machine then + if Machine.Offsets then + if Machine.Offsets.TIPO_CN == 0 then + NumericalControl = 'SIEMENS' + end + if Machine.Offsets.MIN_Y then MinY = Machine.Offsets.MIN_Y end + if Machine.Offsets.MAX_Y then MaxY = Machine.Offsets.MAX_Y end + if Machine.Offsets.MIN_Z then MinZ = Machine.Offsets.MIN_Z end + if Machine.Offsets.MAX_Z then MaxZ = Machine.Offsets.MAX_Z end + if Machine.Offsets.MIN_A then MinA = Machine.Offsets.MIN_A end + if Machine.Offsets.MAX_A then MaxA = Machine.Offsets.MAX_A end + if Machine.Offsets.MIN_C then MinC = Machine.Offsets.MIN_C end + if Machine.Offsets.MAX_C then MaxC = Machine.Offsets.MAX_C end + if Machine.Offsets.MILL_PIVOT then MillOffs = - Machine.Offsets.MILL_PIVOT end + if Machine.Offsets.MIN_X1 then MinX1 = Machine.Offsets.MIN_X1 end + if Machine.Offsets.MAX_X1 then MaxX1 = Machine.Offsets.MAX_X1 end + if Machine.Offsets.MIN_X2 then MinX2 = Machine.Offsets.MIN_X2 end + if Machine.Offsets.MAX_X2 then MaxX2 = Machine.Offsets.MAX_X2 end + ParkX1 = Machine.Offsets.PARK_X1 or ParkX1 + ParkX2 = Machine.Offsets.PARK_X2 or ParkX2 + if Machine.Offsets.BEAM_LOAD then LoadT = Machine.Offsets.BEAM_LOAD end + if Machine.Offsets.BEAM_UNLOAD then UnloadT = Machine.Offsets.BEAM_UNLOAD end + TurnerOffs = Machine.Offsets.TURN_OFFS or TurnerOffs + if Machine.Offsets.TAB_OFFSET_Y then DeltaTabY = Machine.Offsets.TAB_OFFSET_Y end + if Machine.Offsets.TAB_OFFSET_Z then DeltaTabZ = Machine.Offsets.TAB_OFFSET_Z end + if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end + end + ParkY = EgtClamp( ParkY, MinY, MaxY) + ParkZ = EgtClamp( ParkZ, MinZ, MaxZ) + ParkA = EgtClamp( ParkA, MinA, MaxA) + ParkC = EgtClamp( ParkC, MinC, MaxC) + end +end + +EmtGeneral { + File='Saomad-KAIROS-MK1.nge', + Offset = Vector3d( 0.0, -35.34, -804.0), + AxisMaxAdjust = 30, + AxisMaxRotAdj = 0.5, + ExitMaxAdjust = 30, + ExitMaxRotAdj = 0.5, + AngDeltaMinForHome = 165, + Special = 'Saomad-KAIROS-MK1.mlse', + Processor = 'Saomad-KAIROS-MK1.mlpe'} +local BaseId = EmtBase { + Name = 'Base', + Geo='BASE/GEO', + Aux={'BASE/SOLID', 'BASE/LOAD', 'BASE/UNLOAD','BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}} +EmtAxis { + Name = 'RX1', + Parent = 'Base', + Type = MCH_AT.LINEAR, + Dir = X_AX(), + Pos = Point3d( -1194.4, -513.5, -52.4), + Stroke = {MinRX, MaxRX}, + Home = MinRX, + Geo = 'RX1_AXIS/GEO', + Aux = {'RX1_AXIS/SOLID', 'RX1_AXIS/COLLISION'}} +EmtAxis { + Name = 'RX2', + Parent = 'Base', + Type = MCH_AT.LINEAR, + Dir = -X_AX(), + Pos = Point3d( 1194.4, -513.5, -52.4), + Stroke = {MinRX, MaxRX}, + Home = MinRX, + Geo = 'RX2_AXIS/GEO', + Aux = {'RX2_AXIS/SOLID', 'RX2_AXIS/COLLISION'}} +local YId = EmtAxis { + Name = 'Y', + Parent = 'Base', + Token = 'Y1', + Type = MCH_AT.LINEAR, + Dir = Y_AX(), + Pos = Point3d( -639.5, 372.66, 945.7), + Stroke = {MinY, MaxY}, + Home = ParkY, + Geo = 'Y_AXIS/GEO', + Aux = 'Y_AXIS/SOLID'} +EmtAxis { + Name = 'Z', + Parent = 'Y', + Token = 'Z1', + Type = MCH_AT.LINEAR, + Dir = Z_AX(), + Pos = Point3d( -19.25, -113.54, 790.0), + Stroke = {MinZ, MaxZ}, + Home = ParkZ, + Geo = 'Z_AXIS/GEO', + Aux = {'Z_AXIS/SOLID', 'Z_AXIS/COLLISION'}} +local CId = EmtAxis { + Name = 'C', + Parent = 'Z', + Token = 'C1', + Type = MCH_AT.ROTARY, + Dir = -Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinC, MaxC}, + Home = ParkC, + Geo = 'C_AXIS/GEO', + Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION'}} +EmtAxis { + Name = 'A', + Parent = 'C', + Token = 'A1', + Type = MCH_AT.ROTARY, + Dir = X_AX(), + Pos = Point3d( 0, 0, MillOffs), + Stroke = {MinA, MaxA}, + Home = ParkA, + Geo = 'A_AXIS/GEO', + Aux = {'A_AXIS/SOLID', 'A_AXIS/COLLISION'}} +-- Frese +local H1Id = EmtHead { + Name = 'H1', + Parent = 'A', + HSet = 'H1', + Type = MCH_HT.STD, + Pos = Point3d( 0, 0, 0), + TDir = Z_AX(), + ADir = X_AX(), + Rot1W = 2, + OthColl = {'A/SOLID', 'C/SOLID'}, + Geo = 'H1_HEAD/GEO'} +EgtSetInfo( H1Id, 'ZMAXONROT', '1,60') +-- Sega a catena +if ChainSaw then + EmtAxis { + Name = 'CS', + Parent = 'A', + Token = '**', + Type = MCH_AT.ROTARY, + Dir = Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = { -90, 90}, + Home = 0, + Geo = 'CS_AXIS/GEO'} + local H3Id = EmtHead { + Name = 'H3', + Parent = 'CS', + HSet = 'H1', + Type = MCH_HT.STD, + Pos = Point3d( 0, 0, -ChSawLen), + TDir = X_AX(), + ADir = Z_AX(), + Rot1W = 0.2, + SolCh = MCH_SCC.ADIR_NEAR, + OthColl = {'A/SOLID', 'C/SOLID'}, + Geo = 'H3_HEAD/GEO'} + EgtSetInfo( H3Id, 'ZMAXONROT', '1,5') +end +-- Morse +local X1Id = EmtAxis { + Name = 'X1', + Token = 'X1', + Parent = 'Base', + Type = MCH_AT.LINEAR, + Dir = -X_AX(), + Pos = Point3d( -953.0, 111.75, 1450.0), + Stroke = { MinX1, MaxX1}, + Home = ParkX1, + Geo = 'X1_AXIS/GEO', + Aux = {'X1_AXIS/SOLID', 'X1_AXIS/COLLISION'}} +local PX1Id = EmtAxis { + Name = 'PX1', + Parent = 'X1', + Type = MCH_AT.LINEAR, + Dir = -Y_AX(), + Pos = Point3d( -904.0, -276.5, 1449.0), + Stroke = { 0, MaxHOpen}, + Home = MaxHOpen, + Geo = 'PX1_AXIS/GEO', + Aux = {'PX1_AXIS/SOLID', 'PX1_AXIS/COLLISION'}} +local QX1Id = EmtAxis { + Name = 'QX1', + Parent = 'X1', + Type = MCH_AT.LINEAR, + Dir = Z_AX(), + Pos = Point3d( -904.0, -276.5, 1449.0), + Stroke = { 0, MaxVOpen}, + Home = MaxVOpen, + Geo = 'QX1_AXIS/GEO', + Aux = {'QX1_AXIS/SOLID', 'QX1_AXIS/COLLISION'}} +local X2Id = EmtAxis { + Name = 'X2', + Token = 'X2', + Parent = 'Base', + Type = MCH_AT.LINEAR, + Dir = -X_AX(), + Pos = Point3d( 953.0, 111.75, 1450.0), + Stroke = { MinX2, MaxX2}, + Home = ParkX2, + Geo = 'X2_AXIS/GEO', + Aux = {'X2_AXIS/SOLID', 'X2_AXIS/COLLISION'}} +local PX2Id = EmtAxis { + Name = 'PX2', + Parent = 'X2', + Type = MCH_AT.LINEAR, + Dir = -Y_AX(), + Pos = Point3d( 904.0, -276.5, 1449.0), + Stroke = { 0, MaxHOpen}, + Home = MaxHOpen, + Geo = 'PX2_AXIS/GEO', + Aux = {'PX2_AXIS/SOLID', 'PX2_AXIS/COLLISION'}} +local QX2Id = EmtAxis { + Name = 'QX2', + Parent = 'X2', + Type = MCH_AT.LINEAR, + Dir = Z_AX(), + Pos = Point3d( 904.0, -276.5, 1449.0), + Stroke = { 0, MaxVOpen}, + Home = MaxVOpen, + Geo = 'QX2_AXIS/GEO', + Aux = {'QX2_AXIS/SOLID', 'QX2_AXIS/COLLISION'}} +EmtAxis { + Name = 'T', + Parent = 'Base', + --Token = '**', + Type = MCH_AT.LINEAR, + Dir = - X_AX(), + Pos = Point3d( 0, 613.16, -830.037), + Stroke = { -30000, 30000}, + Home = LoadT, + Geo = 'T_AXIS/GEO'} +EmtTable { + Name = 'Tab', + Parent = 'T', + Type = MCH_TT.FLAT, + Ref1 = Point3d( -DimTabX, DeltaTabY - DimTabY, DeltaTabZ), + Scale = { DimTabX / 20000, DimTabY / 500, 1}, + Geo = 'TABLE/GEO', + Aux = 'TABLE/SOLID'} +-- ToolChanger +local ptTcCen = Point3d( 0, 1633.0, 79.2) +EmtTcPos { + Name = 'T1', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, -3 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T1'} +EmtTcPos { + Name = 'T2', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, -2 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T2'} +EmtTcPos { + Name = 'T3', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, -1 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T3'} +EmtTcPos { + Name = 'T4', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 0 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T4'} +EmtTcPos { + Name = 'T5', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 1 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T5'} +EmtTcPos { + Name = 'T6', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 2 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T6'} +EmtTcPos { + Name = 'T7', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 3 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T7'} +EmtTcPos { + Name = 'T8', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 4 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T8'} +EmtTcPos { + Name = 'T9', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 5 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T9'} +EmtTcPos { + Name = 'T10', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 6 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T10'} +EmtTcPos { + Name = 'T11', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 7 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T11'} +EmtTcPos { + Name = 'T12', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 8 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T12'} +EmtTcPos { + Name = 'T13', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 9 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T13'} +EmtTcPos { + Name = 'T14', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 10 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T14'} +EmtTcPos { + Name = 'T15', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 11 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T15'} +if ChainSaw then + EmtTcPos { + Name = 'T16', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 12 * 22.5) - ChSawLen * Z_AX(), + TDir = -Y_AX(), + ADir = Z_AX(), + Geo = 'BASE/T16CS'} +else + EmtTcPos { + Name = 'T16', + Parent = 'Base', + Pos = ptTcCen + VectorFromPolar( 400, 12 * 22.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T16'} +end +EmtTcPos { + Name = 'T17', + Parent = 'Base', + Pos = Point3d( 0.0, 1693.5, 534.5), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T17'} + +-- Aggiusto posizioni geometriche +local vtMove = Vector3d( 0, ( DeltaTabY - 0), ( DeltaTabZ - 0)) +local vtMoveY = Vector3d( 0, 0, ( DeltaTabZ - 0)) +EgtMove( EgtGetFirstNameInGroup( BaseId, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( BaseId, 'LOAD'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( BaseId, 'UNLOAD'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( BaseId, 'SIGN'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( BaseId, 'COLLISION'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( X1Id, 'COLLISION'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( PX1Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( PX1Id, 'COLLISION'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( QX1Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( QX1Id, 'COLLISION'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( X2Id, 'COLLISION'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( PX2Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( PX2Id, 'COLLISION'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( QX2Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( QX2Id, 'COLLISION'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( YId, 'SOLID'), vtMoveY, GDB_RT.GLOB) + +-- Assegno identificativi alle spie delle morse +PX1LightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( X1Id, 'SOLID') or GDB_ID.NULL, 'Light') +PX2LightId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( X2Id, 'SOLID') or GDB_ID.NULL, 'Light') + +--------------------------------------------------------------------- +-- Funzioni richiamate per modificare i dati macchina in casi particolari +--function OnSetTable() +--end + +--------------------------------------------------------------------- +function OnSetHead() + -- Se testa con sega a catena + if EMC.HEAD == 'H3' then + -- aggiustamenti per distanza + local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen) + EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist)) + if not EMC.VER or EMC.VER < '2.5h2' then + local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS) + local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT)) + EgtMove( ExitId, vtMove) + end + -- recupero valore asse CS bloccato + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) + local dPosCS = tonumber( sVal:sub( 4) or '') + EmtModifyAxisHome( 'C', GetChainSawCHomeFromVirtualAxis( dPosCS)) + else + EmtModifyAxisHome( 'C', ParkC) + end +end + +--------------------------------------------------------------------- +-- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale +function GetChainSawCHomeFromVirtualAxis( dPosCS) + -- se CS=0 -> HomeC = -90 + if abs( dPosCS) < 0.1 then + return 90 + -- altrimenti CS=90 -> HomeC = -180 + else + return 0 + end +end + +--------------------------------------------------------------------- +-- Funzione per impostare spia stato morsa carrello X1 +function SetPX1Light( bClosed) + if not PX1LightId then return end + EgtSetColor( PX1LightId, EgtIf( bClosed, 'RED', 'LIME')) + if bClosed then + EgtSetInfo( PX1LightId, 'On', '1') + else + EgtRemoveInfo( PX1LightId, 'On') + end +end + +--------------------------------------------------------------------- +-- Funzione per leggere lo stato della morsa carrello X1 +function GetPX1Light() + if not PX1LightId then return false end + return ( EgtGetInfo( PX1LightId, 'On') == '1') +end + +--------------------------------------------------------------------- +-- Funzione per impostare spia stato morsa carrello X2 +function SetPX2Light( bClosed) + if not PX2LightId then return end + EgtSetColor( PX2LightId, EgtIf( bClosed, 'RED', 'LIME')) + if bClosed then + EgtSetInfo( PX2LightId, 'On', '1') + else + EgtRemoveInfo( PX2LightId, 'On') + end +end + +--------------------------------------------------------------------- +-- Funzione per leggere lo stato della morsa carrello X2 +function GetPX2Light() + if not PX2LightId then return false end + return ( EgtGetInfo( PX2LightId, 'On') == '1') +end + +--------------------------------------------------------------------- +-- Funzione per resettare tutte le attivazioni della macchina +function OnResetMachine() + EmtUnlinkAllRawPartsFromGroups() + EmtUnlinkAllFixturesFromGroups() + SetPX1Light( false) + SetPX2Light( false) + -- nascondo Vmill + local nRawId = EgtGetFirstRawPart() + while nRawId do + local nVmId = EgtGetFirstNameInGroup( nRawId, 'VMill') + local nId = EgtGetFirstInGroup( nRawId) + while nId do + EgtSetStatus( nId, EgtIf( nId ~= nVmId, GDB_ST.ON, GDB_ST.OFF)) + nId = EgtGetNext( nId) + end + nRawId = EgtGetNextRawPart( nRawId) + end + EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF) +end diff --git a/Saomad-KAIROS-MK1.mlpe b/Saomad-KAIROS-MK1.mlpe new file mode 100644 index 0000000..320c004 --- /dev/null +++ b/Saomad-KAIROS-MK1.mlpe @@ -0,0 +1,1430 @@ +-- Processore macchina Saomad-KAIROS by EgalWare s.r.l. 2023/12/03 +-- Funzioni generiche indipendenti dal controllo + +-- Intestazioni +require( 'EmtGenerator') +EgtEnableDebug( false) + +LONG_TOOL_MINLEN = 221 +BIG_TOOL_DIAM = 300 + +--------------------------------------------------------------------- +-- *** GENERATION *** +--------------------------------------------------------------------- +local sBaseDir = EgtGetSourceDir() +if NumericalControl == 'SIEMENS' then + dofile( sBaseDir .. 'Saomad-KAIROS-MK1.SIEMENS.mlpe') +else + EmtSetLastError( 1201, 'Numerical Control error : unkwnown type') +end + +--------------------------------------------------------------------- +-- *** SIMULATION *** +--------------------------------------------------------------------- +local COLL_SAFE_DIST = 4 + +--------------------------------------------------------------------- +function OnSimulStart() + -- Carico gli utensili sulle barre portautensili + local vTcPos = EgtGetAllTcPosNames() + if vTcPos then + for i = 1, #vTcPos do + local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i]) + if vTools and vTools[1] then + EgtLoadTool( vTcPos[i], 1, vTools[1]) + ShowToolInTcPos( vTcPos[i], true) + end + end + end + -- Se reset o home, esco + if EMT.SIM1ST then return end + -- Muovo i supporti nella posizione intermedia + SimulMoveAxes( 'RX1', MidRX, MCH_SIM_STEP.RAPID, 'RX2',MidRX, MCH_SIM_STEP.RAPID) + -- Creo o svuoto gruppo per copia finale degli oggetti virtual milling + local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') + if nVmGrpId then + EgtSetStatus( nVmGrpId, GDB_ST.ON) + EgtEmptyGroup( nVmGrpId) + else + nVmGrpId = EgtGroup( GDB_ID.ROOT) + EgtSetName( nVmGrpId, 'VMill') + EgtSetLevel( nVmGrpId, GDB_LV.TEMP) + end + -- Preparo lista oggetti da verificare per collisioni + EMT.COLLOBJ = {} + AddToCollisionCheck( 'Z', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'A', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'C', 'COLLISION', EMT.COLLOBJ) + DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4) + -- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill) + EMT.MCODET = {} + EMT.MCODET[1] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X1'), 'COLLISION'), 'STM1') or GDB_ID.NULL + EMT.MCODET[2] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X1'), 'COLLISION'), 'STM2') or GDB_ID.NULL + EMT.MCODET[3] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X1'), 'COLLISION'), 'STM3') or GDB_ID.NULL + EMT.MCODET[4] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PX1'), 'COLLISION'), 'STM1') or GDB_ID.NULL + EMT.MCODET[5] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PX1'), 'COLLISION'), 'STM2') or GDB_ID.NULL + EMT.MCODET[6] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'QX1'), 'COLLISION'), 'STM1') or GDB_ID.NULL + EMT.MCODET[7] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'QX1'), 'COLLISION'), 'STM2') or GDB_ID.NULL + EMT.MCODET[8] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X2'), 'COLLISION'), 'STM1') or GDB_ID.NULL + EMT.MCODET[9] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X2'), 'COLLISION'), 'STM2') or GDB_ID.NULL + EMT.MCODET[10] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'X2'), 'COLLISION'), 'STM3') or GDB_ID.NULL + EMT.MCODET[11] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PX2'), 'COLLISION'), 'STM1') or GDB_ID.NULL + EMT.MCODET[12] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'PX2'), 'COLLISION'), 'STM2') or GDB_ID.NULL + EMT.MCODET[13] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'QX2'), 'COLLISION'), 'STM1') or GDB_ID.NULL + EMT.MCODET[14] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'QX2'), 'COLLISION'), 'STM2') or GDB_ID.NULL + EMT.MCODET[15] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'SIDE1') or GDB_ID.NULL + EMT.MCODET[16] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'SIDE2') or GDB_ID.NULL + EMT.MCODET[17] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'BACK') or GDB_ID.NULL + EMT.MCODET[18] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'BELT') or GDB_ID.NULL + EMT.MCODET[19] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'RX1'), 'COLLISION'), 'STM1') or GDB_ID.NULL + EMT.MCODET[20] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetAxisId( 'RX2'), 'COLLISION'), 'STM1') or GDB_ID.NULL + for i = #EMT.MCODET, 1, -1 do + if not EMT.MCODET[i] or EMT.MCODET[i] == GDB_ID.NULL then + table.remove( EMT.MCODET, i) + EgtOutLog( ' Warning : MCODET element (' .. tostring( i) .. ') is null') + elseif EgtGetDebugLevel() >= 4 then + EgtOutLog( ' MCODET element (' .. tostring( i) .. ') is ok') + end + end + -- Preparo lista collisioni vuota + EMT.COLLIDE = {} +end + +--------------------------------------------------------------------- +function OnSimulEnd() + -- Muovo i supporti nella posizione home + SimulMoveAxes( 'RX1', MinRX, MCH_SIM_STEP.RAPID, 'RX2',MinRX, MCH_SIM_STEP.RAPID) +end + +--------------------------------------------------------------------- +function OnSimulDispositionStarting() + EmtUnlinkAllRawPartsFromGroups() + if EMT.PHASE > 1 then + if IsStartOrRestPhase( EMT.PHASE) then + EgtSetAxisPos( 'T', LoadT) + end + end +end + +--------------------------------------------------------------------- +function OnSimulDispositionStart() + EMT.OPEISDISP = true + + -- Se prima disposizione + if EMT.PHASE == 1 then + -- Determino dimensioni del grezzo + local nSolId = EgtGetFirstNameInGroup( EgtGetFirstRawPart() or GDB_ID.NULL, 'RawSolid') or GDB_ID.NULL + local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD) + EMT.LB = 0 + EMT.SB = 0 + EMT.HB = 0 + if b3Sol then + EMT.LB = b3Sol:getDimX() + EMT.SB = b3Sol:getDimY() + EMT.HB = b3Sol:getDimZ() + end + -- Carico primo utensile sulla testa 1 + local sTool, nTlen = FindFirstToolOnHead( 'H1') + if sTool then + EMT.TOOL_1 = sTool + else + EMT.TOOL_1 = GetDefaultToolName() + end + EgtLoadTool( 'H1', 1, EMT.TOOL_1) + EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1) + ShowToolInTcPos( EMT.TCPOS_1, false) + EMT.LOAD = true + -- Se vero inizio e abilitato creo gli Zmap + EMT.VMILL = {} + if not EMT.SIM1ST and EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b') then + local nLastOrd = GetPhaseOrd( EgtGetPhaseCount()) + local nPartRawId = EgtGetFirstRawPart() + while nPartRawId do + -- se è lo scarto finale tagliato a pezzi, esco + local nRawOrd = EgtGetInfo( nPartRawId, 'ORD', 'i') + if nRawOrd == nLastOrd + 1 then break end + -- elimino eventuale vecchio Zmap + EgtErase( EgtGetFirstNameInGroup( nPartRawId, 'VMill') or GDB_ID.NULL) + -- recupero il solido + local nSolId = EgtGetFirstNameInGroup( nPartRawId, 'RawSolid') + local b3Raw = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD) + -- aggiungo eventuale scrap successivo + if nRawOrd == nLastOrd then + local nScrapId = EgtGetNextRawPart( nPartRawId) + if nScrapId then + local nScrapSolId = EgtGetFirstNameInGroup( nScrapId, 'RawSolid') + local b3ScrapRaw = EgtGetBBoxGlob( nScrapSolId, GDB_BB.STANDARD) + if b3ScrapRaw then + b3Raw:Add( b3ScrapRaw) + end + end + end + -- determino la risoluzione dello Zmap + local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ() + local dTol = 4.71 + if dArea < CoeffVM * 0.15e6 then + dTol = 0.71 + elseif dArea < CoeffVM * 0.3e6 then + dTol = 1.01 + elseif dArea < CoeffVM * 0.6e6 then + dTol = 1.51 + elseif dArea < CoeffVM * 1.2e6 then + dTol = 1.97 + elseif dArea < CoeffVM * 2.4e6 then + dTol = 2.81 + elseif dArea < CoeffVM * 4.8e6 then + dTol = 3.77 + end + -- creo lo Zmap + local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB) + if VMillId then + EgtSetName( VMillId, 'VMill') + EgtSetLevel( VMillId, GDB_LV.TEMP) + EgtSetColor( VMillId, EgtGetColor( nSolId), false) + -- nascondo le altre geometrie + local nId = EgtGetFirstInGroup( nPartRawId) + while nId do + if nId ~= VMillId then + EgtSetStatus( nId, GDB_ST.OFF) + end + nId = EgtGetNext( nId) + end + table.insert( EMT.VMILL, VMillId) + end + nPartRawId = EgtGetNextRawPart( nPartRawId) + end + end + -- fasi successive + else + EMT.LOAD = false + end + -- recupero sovramateriale di testa del pezzo corrente + local nCurrRawId = EgtGetFirstRawPart() + while nCurrRawId do + if EgtVerifyRawPartPhase( nCurrRawId, EMT.PHASE) then + break + end + nCurrRawId = EgtGetNextRawPart( nCurrRawId) + end + EMT.HOVM = EgtGetInfo( nCurrRawId or GDB_ID.NULL, 'HOVM', 'd') or 0 + + -- Nascondo tutte le lavorazioni + local nMchId = EgtGetFirstOperation() + while nMchId do + if EgtGetOperationType( nMchId) ~= MCH_OY.DISP then + EgtSetOperationStatus( nMchId, false) + end + nMchId = EgtGetNextOperation( nMchId) + end + + -- Se fase inizio o rimanenza, aggancio grezzi della fase alla tavola + if IsStartOrRestPhase( EMT.PHASE) then + -- se fase inizio, segnalo giacitura del grezzo + if IsStartPhase( EMT.PHASE) then + local nRot = GetPhaseRot( EMT.PHASE) + if nRot ~= 0 then + EgtOutText( tostring( -90 * nRot) .. '° rotated bar') + else + EgtOutText( 'Not rotated bar') + end + end + -- indice primo grezzo della fase + local nOrd = GetPhaseOrd( EMT.PHASE) + local nScrapOrd = GetPhaseOrd( EgtGetPhaseCount()) + 1 + local b3Raw = BBox3d() + local nPartRawId, nScrapRawId + local nRawId = EgtGetFirstRawPart() + while nRawId do + local nNextRawId = EgtGetNextRawPart( nRawId) + if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then + EmtLinkRawPartToGroup( nRawId, 'Tab') + local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i') + if nRawOrd == nOrd then + b3Raw = EgtGetRawPartBBox( nRawId) + nPartRawId = nRawId + elseif nRawOrd == nOrd + 1 and nRawOrd == nScrapOrd then + local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d() + b3Raw:Add( b3Tmp) + nScrapRawId = nRawId + end + end + nRawId = nNextRawId + end + -- gestione eventuale scarto affettato successivo + if EMT.VMILL and #EMT.VMILL > 0 then + EMT.SCRAP = nScrapRawId + EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF) + else + EMT.SCRAP = nil + end + -- recupero CutId del pezzo in lavorazione + EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0 + EMT.X1SPEC = nil + -- se vero inizio, assegno solidi per verifica collisione + if not EMT.SIM1ST then + EMT.CODET = {} + for i = 1, #( EMT.MCODET or {}) do + EMT.CODET[i] = EMT.MCODET[i] + end + for i = 1, #( EMT.VMILL or {}) do + table.insert( EMT.CODET, EMT.VMILL[i]) + end + end + -- se altrimenti fase intermedia, aggancio grezzi della fase alla tavola + elseif IsMidPhase( EMT.PHASE) then + -- se cambiata giacitura, lo segnalo + local nPrevRot = GetPhaseRot( EMT.PHASE - 1) + local nRot = GetPhaseRot( EMT.PHASE) + if nRot ~= nPrevRot then + if nRot ~= 0 then + EgtOutText( 'Barra ruotata di ' .. tostring( -90 * nRot) .. '°') + else + EgtOutText( 'Barra non ruotata') + end + end + -- eseguo aggancio + local nRawId = EgtGetFirstRawPart() + while nRawId do + local nNextRawId = EgtGetNextRawPart( nRawId) + if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then + EmtLinkRawPartToGroup( nRawId, 'Tab') + end + nRawId = nNextRawId + end + -- se Vmill, nascondo eventuale scrap + if EMT.VMILL then + EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF) + end + -- se altrimenti fasi intermedia o finale speciali, aggancio primo grezzo alla tavola e gli altri in posizione pre-carico + elseif IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then + -- se cambiata giacitura, lo segnalo + local nPrevRot = GetPhaseRot( EMT.PHASE - 1) + local nRot = GetPhaseRot( EMT.PHASE) + if nRot ~= nPrevRot then + if nRot ~= 0 then + EgtOutText( 'Barra ruotata di ' .. tostring( -90 * nRot) .. '°') + else + EgtOutText( 'Barra non ruotata') + end + end + -- indice primo grezzo della fase + local nOrd = GetPhaseOrd( EMT.PHASE) + -- ricerco vettore movimento per i successivi + local vtMove = Vector3d() + local nRawId = EgtGetFirstRawPart() + while nRawId do + if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then + vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0) + break + end + nRawId = EgtGetNextRawPart( nRawId) + end + -- eseguo + nRawId = EgtGetFirstRawPart() + while nRawId do + local nNextRawId = EgtGetNextRawPart( nRawId) + if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then + if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then + EmtLinkRawPartToGroup( nRawId, 'Tab') + else + EgtMove( nRawId, vtMove, GDB_RT.GLOB) + EgtSetStatus( nRawId, GDB_ST.OFF) + end + end + nRawId = nNextRawId + end + -- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y + else + -- indice primo grezzo della fase + local nOrd = GetPhaseOrd( EMT.PHASE) + -- ricerco vettore movimento per i successivi + local vtMove = Vector3d() + local nRawId = EgtGetFirstRawPart() + while nRawId do + if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then + vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0) + break + end + nRawId = EgtGetNextRawPart( nRawId) + end + -- eseguo + nRawId = EgtGetFirstRawPart() + while nRawId do + local nNextRawId = EgtGetNextRawPart( nRawId) + if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then + if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then + EmtLinkRawPartToGroup( nRawId, 'Tab') + else + EgtMove( nRawId, vtMove, GDB_RT.GLOB) + EmtLinkRawPartToGroup( nRawId, 'X1') + end + end + nRawId = nNextRawId + end + end + -- Indicazione angolo rotazione pezzo + EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0 + local SignId = EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'SIGN') + EgtSetStatus( EgtGetFirstNameInGroup( SignId, '0'), EgtIf( EMT.ROT == 0, GDB_ST.ON, GDB_ST.OFF)) + EgtSetStatus( EgtGetFirstNameInGroup( SignId, '90'), EgtIf( EMT.ROT == -1, GDB_ST.ON, GDB_ST.OFF)) + EgtSetStatus( EgtGetFirstNameInGroup( SignId, '180'), EgtIf( EMT.ROT == -2, GDB_ST.ON, GDB_ST.OFF)) +end + +--------------------------------------------------------------------- +function OnSimulDispositionEnd() + if EMT.UNLOADING or EMT.FALL then + ExecUnloading() + EMT.UNLOADING = false + EMT.FALL = false + end + -- se disposizione intermedia + if IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then + -- se le rotazioni delle fasi corrente e precedente sono diverse + if GetPhaseRot( EMT.PHASE) ~= GetPhaseRot( EMT.PHASE - 1) then + -- imposto stato post-rotazione + EMT.POSTROT = true + end + -- se altrimenti disposizione intermedia speciale con eventuale rotazione + elseif IsMid2Phase( EMT.PHASE) then + -- se le rotazioni delle fasi corrente e precedente sono diverse + if GetPhaseRot( EMT.PHASE) ~= GetPhaseRot( EMT.PHASE - 1) then + -- imposto stato post-rotazione + EMT.POSTROT = true + end + end + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnSimulToolSelect( dPosCS) + -- se utensile non definito, è disposizione ed esco + if EMT.TOOL == '' then return end + -- recupero dati utensile + EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + EMT.TOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + EMT.TOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM) + -- se non è chiamato da altro script (non c'è parametro) + if not dPosCS then + -- se attivo Vmill + SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL) + -- se attivo Collision Check + EMT.SAFEDIST = COLL_SAFE_DIST + if EMT.COLLOBJ then + for i, Coll in ipairs( EMT.COLLOBJ) do + EmtAddCollisionObjEx( i, Coll.Fr, Coll.Ty, Coll.Mv, Coll.P1, Coll.P2, Coll.P3) + end + AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, 1001) + AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, 1002) + end + -- dichiaro assi ausiliari da visualizzare + EMT.AuxAxes = 2 + EMT.A1n = 'X1' + EMT.A2n = 'X2' + end + -- se sega a catena, imposto subito angolo scelto per asse virtuale CS + if EMT.HEAD == 'H3' then + if not dPosCS then + -- recupero la lavorazione successiva + local NextMchId + if EMT.MCHID then + NextMchId = EgtGetNextActiveOperation( EMT.MCHID) + else + NextMchId = EgtGetFirstActiveOperation() + end + while NextMchId and EgtGetOperationType( NextMchId) == MCH_OY.DISP do + NextMchId = EgtGetNextActiveOperation( NextMchId) + end + EgtSetCurrMachining( NextMchId) + -- recupero il valore dell'asse virtuale bloccato CS + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) + dPosCS = tonumber( sVal:sub( 4)) + else + -- imposto visualizzazione + EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD) + end + -- imposto il valore di CS + EgtSetAxisPos( 'CS', dPosCS) + EgtSetAxisPos( 'C', GetChainSawCHomeFromVirtualAxis( dPosCS)) + EgtSetAxisPos( 'A', 0) + end + -- breve pausa + EgtPause( 100) + EgtOutText( '') + EMT.TOOL_1 = EMT.TOOL + EMT.TCPOS_1 = EMT.TCPOS + -- lo nascondo sul portautensili + ShowToolInTcPos( EMT.TCPOS, false) +end + +--------------------------------------------------------------------- +function OnSimulToolDeselect() + -- se prossimo utensile non definito, è disposizione ed esco + if EMT.NEXTTOOL == '' then return end + -- se sega a catena o punta lunga o utensile di grosso diametro, devo cambiare + if EMT.HEAD == 'H3' or ( EMT.HEAD == 'H1' and ( EMT.TOTLEN > LONG_TOOL_MINLEN or EMT.TOTDIAM > BIG_TOOL_DIAM)) then + EgtOutText( 'Tool change in progress...') + -- movimento scarico sega a catena + if EMT.HEAD == 'H3' then + local dPosCS = EgtGetAxisPos( 'CS') + SimulMoveAxes( 'A', ParkA, MCH_SIM_STEP.COLLROT, 'C', GetChainSawCHomeFromVirtualAxis( dPosCS), MCH_SIM_STEP.COLLROT) + SimulMoveAxis( 'Y', ParkY, MCH_SIM_STEP.RAPID) + end + -- breve pausa + EgtPause( 100) + -- nascondo utensile su testa e lo visualizzo su TcPos + EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN) + ShowToolInTcPos( EMT.TCPOS_1, true) + -- movimento per carico utensile + SimulMoveAxes( 'A', ParkA, MCH_SIM_STEP.RAPROT, 'C', ParkC, MCH_SIM_STEP.RAPROT) + EgtOutText( '') + -- deposito utensile + else + if EMT.NEXTTOOL ~= EMT.TOOL_1 then + EgtOutText( 'Tool change in progress...') + -- simulo movimento + SimulMoveAxes( 'A', ParkA, MCH_SIM_STEP.COLLROT, 'C', ParkC, MCH_SIM_STEP.COLLROT) + SimulMoveAxis( 'Y', ParkY, MCH_SIM_STEP.RAPID) + -- breve pausa + EgtPause( 100) + ShowToolInTcPos( EMT.TCPOS_1, true) + -- nascondo l'utensile corrente + EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF) + -- eseguo movimento opportuno + SimulMoveAxes( 'A', ParkA, MCH_SIM_STEP.RAPROT, 'C', ParkC, MCH_SIM_STEP.RAPROT) + else + EMT.TOOL_1 = nil + EMT.TCPOS_1 = nil + end + end +end + +--------------------------------------------------------------------- +function OnSimulMachiningStart() + -- se lavorazione attuale e precedente con sega a catena con angolo CS diverso, devo scaricare e ricaricare + if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then + local dPrevCS = EgtGetAxisPos( 'CS') + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) + local dPosCS = tonumber( sVal:sub( 3)) + if abs( dPosCS - dPrevCS) > 1 then + OnSimulToolDeselect() + EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON) + OnSimulToolSelect( dPosCS) + end + end + -- recupero alcuni dati della lavorazione + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) + EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not ( sNotes and sNotes:find( 'VMRS=0;', 1, true))) + -- recupero TASKID della feature lavorata + local vId = EgtGetMachiningGeometry() + if vId and #vId > 0 and #vId[1] > 0 then + EMT.TASKID = EgtGetInfo( vId[1][1], 'TASKID', 'i') or 0 ; + else + EMT.TASKID = 0 + end + -- non ancora iniziata la lavorazione + EMT.MCHFIRST = true +end + +--------------------------------------------------------------------- +function OnSimulMachiningEnd() + if EMT.LOAD then + EMT.LOAD = false + elseif EMT.UNLOADING or EMT.FALL then + ExecUnloading() + EMT.UNLOADING = false + EMT.FALL = false + end + EMT.PREVHEAD = EMT.HEAD + EMT.PREVEXIT = EMT.EXIT +end + +--------------------------------------------------------------------- +--function OnSimulPathStart() +--end + +--------------------------------------------------------------------- +function OnSimulPathEnd() + -- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi + if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then + EgtOutLog( 'OnSimulPathEnd', 5) + local vMillId = EMT.VMILL[1] + local nPart = EgtVolZmapPartCount( vMillId) + if nPart > 1 then + -- ricerca del pezzo con massimo volume + local nPartMax = 0 + local dVolMax = 0 + for i = 1, nPart do + local dVol = EgtVolZmapPartVolume( vMillId, i - 1) + if dVol > dVolMax then + dVolMax = dVol + nPartMax = i + end + end + -- eliminazione di tutti i pezzi piccoli + for i = nPart, 1, -1 do + if i ~= nPartMax then + local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD) + if b3Vmill:getDimX() < 1200 then + EgtRemoveVolZmapPart( vMillId, i - 1) + end + end + end + -- aggiorno visualizzazione + EgtDraw() + end + end +end + +--------------------------------------------------------------------- +function OnSimulPathStartAux() + --EgtOutLog( 'OnSimulPathStartAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + EgtOutLog( 'OnSimulPathStartAux', 5) + -- eseguo il comando + ExecAuxCmd( EMT.AUX) +end + +--------------------------------------------------------------------- +function OnSimulPathEndAux() + --EgtOutLog( 'OnSimulPathEndAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + EgtOutLog( 'OnSimulPathEndAux', 5) + -- eseguo il comando + ExecAuxCmd( EMT.AUX) +end + +--------------------------------------------------------------------- +function OnSimulMoveStart() + -- Recupero la posizione corrente dei carrelli + local X1p = EgtGetAxisPos( 'X1') + local X2p = EgtGetAxisPos( 'X2') + -- Imposto movimento carrelli insieme con la tavola : + -- entrambe le pinze + if EMT.X1DELTA and EMT.X2DELTA then + EMT.AuxAxes = 2 + EMT.A1n = 'X1' + EMT.A1m = 'T' + EMT.A1 = EMT.L1 + EMT.X1DELTA + EMT.A2n = 'X2' + EMT.A2m = 'T' + EMT.A2 = EMT.L1 + EMT.X2DELTA + -- solo pinza Y + elseif EMT.X1DELTA then + EMT.AuxAxes = 2 + EMT.A1n = 'X1' + EMT.A1m = 'T' + EMT.A1 = EMT.L1 + EMT.X1DELTA + EMT.A2n = 'X2' + EMT.A2m = nil + EMT.A2 = ParkX2 + -- solo pinza V + elseif EMT.X2DELTA then + EMT.AuxAxes = 2 + EMT.A1n = 'X1' + EMT.A1m = nil + EMT.A1 = EgtIf( EMT.X1SPEC, X1p, ParkX1) + EMT.A2n = 'X2' + EMT.A2m = 'T' + EMT.A2 = EMT.L1 + EMT.X2DELTA + end + -- Controllo scorrimento pinze chiuse X1 e X2 + if EMT.X1DELTA then + local dX1DeltaP = X1p - EMT.L1p + if abs( EMT.X1DELTA - dX1DeltaP) > 0.1 then + EMT.ERR = 2 + local sErr = 'X1 slide : ' .. EmtLenToString( dX1DeltaP, 3) .. ' -> ' .. EmtLenToString( EMT.X1DELTA, 3) + EmtSetLastError( 1202, sErr) + end + end + if EMT.X2DELTA then + local dX2DeltaP = X2p - EMT.L1p + if abs( EMT.X2DELTA - dX2DeltaP) > 0.1 then + EMT.ERR = 2 + local sErr = 'X2 slide : ' .. EgtNumToString( dX2DeltaP, 3) .. ' -> ' .. EgtNumToString( EMT.X2DELTA, 3) + EmtSetLastError( 1202, sErr) + end + end + -- Controllo corse assi X1 e X2 + VerifyX1Stroke( EMT.A1) + VerifyX2Stroke( EMT.A2) + -- se inizio lavorazione + if EMT.MCHFIRST then + EgtOutText( '') + EMT.MCHFIRST = false + EMT.POSTROT = nil + end +end + +--------------------------------------------------------------------- +--function OnSimulMoveEnd() +--end + +--------------------------------------------------------------------- +function OnSimulCollision() + -- se prima collisione della lavorazione, la segnalo + if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then + local Class = '' + if EMT.SIMCOBIND == 1001 then + Class = 'T_H1' + elseif EMT.SIMCOBIND == 1002 then + Class = 'TH_H1' + else + Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl + end + table.insert( EMT.COLLIDE, { Mc = EMT.MCHNAME, Cl = Class, Vm = EMT.SIMVMID}) + EMT.LAST_MCHNAME_COLLIDE = EMT.MCHNAME + EMT.ERR = 1 + local sErr = 'CUTID='..tostring( EMT.CUTID)..'; TASKID='..tostring( EMT.TASKID)..'; Mach='..EMT.MCHNAME..'; Class='..Class..'; VMill='..EMT.SIMVMID + EmtSetLastError( 1221, sErr, true) + EgtOutLog( 'Collision : ' .. sErr, 1) + end +end + +--------------------------------------------------------------------- +function ExecAuxCmd( sCmd) + local Cmd = EgtSplitString( sCmd) + if Cmd[1] == '0' then + if Cmd[2] == 'Unloading' then + EMT.UNLOADING = true + elseif Cmd[2] == 'Fall' then + EMT.FALL = true + end + EgtOutText( EgtIf( Cmd[3], Cmd[3], Cmd[2])) + elseif Cmd[1] == '1' then + if not SimulMoveAxis( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID) then + if VerifyX12Stroke( Cmd[2], tonumber( Cmd[3])) == nil then + EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd) + end + end + elseif Cmd[1] == '2' then + if Cmd[2] == 'X1' and EMT.POSTROT then + local dPosY = tonumber( Cmd[3]) - EMT.HOVM + Cmd[3] = EgtNumToString( dPosY, 3) + EMT.HOVM = 0 + end + -- Verifico movimento carrello con trave agganciata + VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5]) + -- Eseguo il movimento + local _, bOk, bOk2 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID, + Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID) + if not ( bOk and bOk2) then + local nI = EgtIf( not bOk, 2, 4) + if VerifyX12Stroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then + EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd) + end + end + elseif Cmd[1] == '3' then + -- Verifico movimento carrelli con trave agganciata + VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7]) + -- Eseguo il movimento + local _, bOk, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID, + Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID, + Cmd[6], tonumber( Cmd[7]), MCH_SIM_STEP.RAPID) + if not ( bOk and bOk2 and bOk3) then + local nI = EgtIf( not bOk, 2, EgtIf( not bOk2, 4, 6)) + if VerifyX12Stroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then + EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd) + end + end + elseif Cmd[1] == '11' then + local dPX1 = MaxHOpen + if Cmd[2] ~= '0' then + dPX1 = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB) + end + SimulMoveAxis( 'PX1', dPX1, MCH_SIM_STEP.RAPID) + local dQX1 = MaxVOpen + if Cmd[2] == '2' then + dQX1 = EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB) + end + SimulMoveAxis( 'QX1', dQX1, MCH_SIM_STEP.RAPID) + SetPX1Light( Cmd[2] ~= '0') + elseif Cmd[1] == '12' then + local dPX2 = MaxHOpen + if Cmd[2] ~= '0' then + dPX2 = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB) + end + SimulMoveAxis( 'PX2', dPX2, MCH_SIM_STEP.RAPID) + local dQX2 = MaxVOpen + if Cmd[2] == '2' then + dQX2 = EgtIf( EMT.ROT == -1, EMT.SB, EMT.HB) + end + SimulMoveAxis( 'QX2', dQX2, MCH_SIM_STEP.RAPID) + SetPX2Light( Cmd[2] ~= '0') + elseif Cmd[1] == '21' then + local nX1Delta = tonumber( Cmd[2]) + local nX2Delta = tonumber( Cmd[3]) + if nX1Delta > 0.01 and nX2Delta > 0.01 then + EMT.X1DELTA = nX1Delta + EMT.X2DELTA = nX2Delta + elseif nX1Delta > 0.01 then + EMT.X1DELTA = nX1Delta + EMT.X2DELTA = nil + elseif nX2Delta > 0.01 then + EMT.X1DELTA = nil + EMT.X2DELTA = nX2Delta + end + elseif Cmd[1] == '31' then + local nRawId = tonumber( Cmd[2]) + EmtUnlinkRawPartFromGroup( nRawId) + EmtLinkRawPartToGroup( nRawId, Cmd[3]) + EMT.X1SPEC = true + end +end + +--------------------------------------------------------------------- +function ExecUnloading() + if EMT.VMILL and #EMT.VMILL > 0 then + local vMillId = EMT.VMILL[1] + -- gruppo dei Vmill + local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') + -- li sposto per lasciare spazio al nuovo pezzo + local nId = EgtGetFirstInGroup( nVmGrpId) + while nId do + EgtMove( nId, Vector3d( 0, -( EMT.SB + 50.0), 0), GDB_RT.GLOB) + nId = EgtGetNext( nId) + end + -- creo un nuovo layer e vi inserisco il nuovo pezzo + local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId)) + EgtRelocate( vMillId, nLayId) + local vtMove = Vector3d( 0, -800, 0) + if EMT.FALL then vtMove = Vector3d( -300, -800, -600) end + EgtMove( nLayId, vtMove, GDB_RT.GLOB) + EgtSetLevel( vMillId, GDB_LV.USER) + -- aggiungo gli spigoli + local nFirstId, nCount = EgtVolZmapGetEdges( vMillId, nLayId) + if nFirstId then + for nId = nFirstId, nFirstId + nCount - 1 do + EgtSetColor( nId, Color3d( 96, 96, 96)) + end + end + -- rilascio Vmill + table.remove( EMT.VMILL, 1) + -- aggiorno la visualizzazione + EgtDraw() + -- se finito + if EMT.PHASE == EgtGetPhaseCount() then + -- se impostato di salvare i Vmill, lo faccio + local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini' + if EgtGetStringFromIni( 'VMill', 'Save', '', sMachIni) == '1' then + local sFile = EgtGetCurrFilePath() + if sFile then + local sDir, sName, sExt = EgtSplitPath( sFile) + if sExt and sExt:lower() == ".nge" then + sName = sName .. '_VM_' .. EgtGetMachGroupName( EgtGetCurrMachGroup()) + EgtSetLevel( nVmGrpId, GDB_LV.USER) + EgtSaveObjToFile( nVmGrpId, sDir .. sName .. '.Nge') + EgtSetLevel( nVmGrpId, GDB_LV.TEMP) + end + end + end + end + end +end + +--------------------------------------------------------------------- +function VerifyYSlide( sName1, dVal1, sName2, dVal2) + -- Se movimento trave agganciata con carrello Y + if sName1 == 'T' and sName2 == 'X1' and GetPX1Light() then + local dYDeltaP = EgtGetAxisPos( 'T') - EgtGetAxisPos( 'X1') + local dYDeltaA = tonumber( dVal1) - tonumber( dVal2) + EgtOutLog( string.format( 'YDeltaP=%.3f YDeltaA=%.3f', dYDeltaP, dYDeltaA), 5) + if abs( dYDeltaA - dYDeltaP) > 0.5 then + EMT.ERR = 2 + local sErr = 'Y slide : ' .. EmtLenToString( dYDeltaP, 3) .. ' -> ' .. EmtLenToString( dYDeltaA, 3) + EmtSetLastError( 1202, sErr) + end + end + -- Tutto bene + return true +end + +--------------------------------------------------------------------- +function VerifyVSlide( sName1, dVal1, sName2, dVal2) + -- Se movimento trave agganciata con carrello V + if sName1 == 'T' and sName2 == 'X2' and GetPX2Light() then + local dVDeltaP = EgtGetAxisPos( 'T') - EgtGetAxisPos( 'X2') + local dVDeltaA = tonumber( dVal1) - tonumber( dVal2) + EgtOutLog( string.format( 'VDeltaP=%.3f VDeltaA=%.3f', dVDeltaP, dVDeltaA), 5) + if abs( dVDeltaA - dVDeltaP) > 0.5 then + EMT.ERR = 2 + local sErr = 'V slide : ' .. EmtLenToString( dVDeltaP, 3) .. ' -> ' .. EmtLenToString( dVDeltaA, 3) + EmtSetLastError( 1202, sErr) + end + end + return true +end + +--------------------------------------------------------------------- +function VerifyOneChariotSlide( sName1, dVal1, sName2, dVal2) + -- Metto in prima posizione la trave + if sName2 == 'T' then + sName1, sName2 = sName2, sName1 + dVal1, dVal2 = dVal2, dVal1 + end + -- Eseguo verifica + if sName2 == 'X1' then + return VerifyYSlide( sName1, dVal1, sName2, dVal2) + elseif sName2 == 'X2' then + return VerifyVSlide( sName1, dVal1, sName2, dVal2) + end + return true +end + +--------------------------------------------------------------------- +function VerifyTwoChariotsSlide( sName1, dVal1, sName2, dVal2, sName3, dVal3) + -- Metto in prima posizione la trave + if sName2 == 'T' then + sName1, sName2 = sName2, sName1 + dVal1, dVal2 = dVal2, dVal1 + elseif sName3 == 'T' then + sName1, sName3 = sName3, sName1 + dVal1, dVal3 = dVal3, dVal1 + end + -- Eseguo verifica + if sName2 == 'X1' then + return VerifyYSlide( sName1, dVal1, sName2, dVal2) and VerifyVSlide( sName1, dVal1, sName3, dVal3) + elseif sName2 == 'X2' then + return VerifyVSlide( sName1, dVal1, sName2, dVal2) and VerifyYSlide( sName1, dVal1, sName3, dVal3) + end + return true +end + +--------------------------------------------------------------------- +function VerifyX1Stroke( dX1) + if dX1 < MinX1 then + EmtSetOutstrokeInfo( 'X1', 'X1', true, dX1 - MinX1, ' (L1-)') + EMT.ERR = 1 + local sErr = 'X1 axis outstroke ' .. EgtNumToString( dX1 - MinX1, 3) + EgtOutLog( sErr) + return false + elseif dX1 > MaxX1 then + EmtSetOutstrokeInfo( 'X1', 'X1', true, dX1 - MaxX1, ' (L1+)') + EMT.ERR = 1 + local sErr = 'X1 axis outstroke ' .. EgtNumToString( dX1 - MaxX1, 3) + EgtOutLog( sErr) + return false + end + return true +end + +--------------------------------------------------------------------- +function VerifyX2Stroke( dX2) + if dX2 > MaxX2 then + EmtSetOutstrokeInfo( 'X2', 'X2', true, dX2 - MaxX2, ' (L1+)') + EMT.ERR = 1 + local sErr = 'X2 axis outstroke ' .. EgtNumToString( dX2 - MaxX2, 3) + EgtOutLog( sErr) + return false + elseif dX2 < MinX2 then + EmtSetOutstrokeInfo( 'X2', 'X2', true, dX2 - MinX2, ' (L1-)') + EMT.ERR = 1 + local sErr = 'X2 axis outstroke ' .. EgtNumToString( dX2 - MinX2, 3) + EgtOutLog( sErr) + return false + end + return true +end + +--------------------------------------------------------------------- +function VerifyX12Stroke( sName, dVal) + if sName == 'X1' then + return VerifyX1Stroke( dVal) + elseif sName == 'X2' then + return VerifyX2Stroke( dVal) + else + return nil + end +end + +--------------------------------------------------------------------- +function ShowToolInTcPos( sTcPos, bShow) + -- recupero il gruppo dell'utensile + local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1') + if not TcExitId then return end + -- imposto lo stato di visualizzazione + EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) +end + +--------------------------------------------------------------------- +function GetToolTcPos( sTool) + -- salvo stato iniziale + local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) + -- recupero la posizione di cambio utensile dell'utensile indicato + local sTcPos + if EgtTdbSetCurrTool( sTool) then + sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS) + end + -- ripristino stato iniziale + if CurrTool then + EgtTdbSetCurrTool( CurrTool) + else + EgtTdbSetCurrTool( '') + end + -- restituisco risultato + return sTcPos +end + + +--------------------------------------------------------------------- +-- *** ESTIMATION T&L *** +--------------------------------------------------------------------- +local RAPID_X_FEED = 75000 -- mm/min +local RAPID_Y_FEED = 100000 -- mm/min +local RAPID_Z_FEED = 50000 -- mm/min +local RAPID_C_FEED = 15000 -- deg/min +local RAPID_B_FEED = 15000 -- deg/min +local RAPID_MIN_T = 0.1 -- s +local LOAD_T = 6 -- s +local CHAR_ONE_MOVE_T = 1 -- s +local ROTATION_T = 40 -- s +local SPLIT_T = 6 -- s +local UNLOAD_T = 6 -- s +local FALL_T = 2 -- s + +--------------------------------------------------------------------- +function OnEstimStart() + EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches +end + +--------------------------------------------------------------------- +function OnEstimEnd() +end + +--------------------------------------------------------------------- +function OnEstimProgramStart() + -- imposto inizio movimenti da Home + EMT.L1 = EgtGetAxisHomePos( 'T') + EMT.L2 = EgtGetAxisHomePos( 'Y') + EMT.L3 = EgtGetAxisHomePos( 'Z') + EMT.R1 = EgtGetAxisHomePos( 'C') + EMT.R2 = EgtGetAxisHomePos( 'A') + -- aggiorno valori come precedenti + EmtUpdatePrev() + -- totalizzatori tempi e lunghezze + EMT.TOTCUTLEN = 0 + EMT.TOTCUTTIME = 0 + EMT.TOTEXTLEN = 0 + EMT.TOTEXTTIME = 0 + -- variabile per lunghezza taglio utensili + EMT.TOOLCUTLEN = {} + -- intestazioni + EmtTleStart( EMT.INFO) +end + +--------------------------------------------------------------------- +function OnEstimProgramEnd() + -- stampa dei totali delle lavorazioni + EmtTleAddTotal( EmtSecToHMS( EMT.TOTCUTTIME + EMT.TOTEXTTIME), EmtLenToMF( EMT.TOTCUTLEN)) + -- stampa dei totali degli utensili + for i = 1, #EMT.TOOLCUTLEN do + local TCL = EMT.TOOLCUTLEN[i] + EmtTleAddTool( TCL.Name, EmtLenToMF( TCL.Len)) + end + -- completo il file + local _, _, sExt = EgtSplitPath( EMT.FILE) + EmtTleEnd( sExt:sub( 2)) + -- salvo i dati principali nel progetto + EgtSetInfo( EgtGetCurrMachGroup(), 'Ttot', EgtNumToString( EMT.TOTCUTTIME + EMT.TOTEXTTIME, 0)) + EgtSetInfo( EgtGetCurrMachGroup(), 'Ltot', EgtNumToString( EMT.TOTCUTLEN, 0)) +end + +--------------------------------------------------------------------- +function OnEstimDispositionStart() + -- inizio disposizione + EMT.OPEISDISP = true + -- sulla prima fase dichiaro carico barra + if EMT.PHASE == 1 then + EMT.LOAD = true + else + EMT.LOAD = false + end +end + +--------------------------------------------------------------------- +function OnEstimDispositionEnd() + -- Se disposizione inizio o rimanenza + if IsStartOrRestPhase( EMT.PHASE) then + ; + -- se altrimenti disposizione intermedia o finale dopo separazione e rotazione, eventuale rotazione + elseif IsMidPhase( EMT.PHASE) or IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then + -- recupero le rotazioni delle fasi corrente e precedente + local nRot = GetPhaseRot( EMT.PHASE) + local nPrevRot = GetPhaseRot( EMT.PHASE - 1) + -- verifico se sono diverse + if nRot ~= nPrevRot then + -- imposto stato post-rotazione + EMT.POSTROT = true + end + -- altrimenti disposizione finale, eventuale scarico pezzo lavorato se non ci sono lavorazioni + else + ; + end + -- emetto dati in sospeso + if EMT.TLE_NAME then + EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ') + EMT.TLE_NAME = nil + EMT.TLE_TIME = nil + end + -- termine disposizione + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnEstimToolSelect() + -- reset indice utensile in tabella lunghezze + EMT.TCLIND = 0 + -- verifico che l'utensile sia definito + if #EMT.TOOL == 0 then return end + -- cerco l'utensile nella tabella + for i = 1, #EMT.TOOLCUTLEN do + if EMT.TOOLCUTLEN[i].Name == EMT.TOOL then + EMT.TCLIND = i + break + end + end + -- se non trovato, lo aggiungo + if EMT.TCLIND == 0 then + table.insert( EMT.TOOLCUTLEN, { Name = EMT.TOOL, Len = 0}) + EMT.TCLIND = #EMT.TOOLCUTLEN + end +end + +--------------------------------------------------------------------- +function OnEstimToolDeselect() +end + +--------------------------------------------------------------------- +function OnEstimMachiningStart() + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + EgtOutLog( 'Mach : ' .. EMT.MCHNAME, 5) + -- reset contatori di lavorazione + EMT.MCHCUTLEN = 0 + EMT.MCHCUTTIME = 0 + EMT.MCHEXTLEN = 0 + EMT.MCHEXTTIME = 0 +end + +--------------------------------------------------------------------- +function OnEstimMachiningEnd() + -- nel caso di foratura devo dimezzare la lunghezza di taglio perchè comprende anche l'uscita + if EMT.MCHTYPE == MCH_MY.DRILLING then + EMT.MCHCUTLEN = EMT.MCHCUTLEN / 2 + end + local sName = EgtGetName( EMT.MCHID) + EmtTleAddMachining( sName, EmtSecToHMS( EMT.MCHCUTTIME + EMT.MCHEXTTIME), EmtLenToMF( EMT.MCHCUTLEN), EMT.TOOL) + -- aggiorno totali e utensili + EMT.TOTCUTLEN = EMT.TOTCUTLEN + EMT.MCHCUTLEN + EMT.TOTCUTTIME = EMT.TOTCUTTIME + EMT.MCHCUTTIME + EMT.TOTEXTLEN = EMT.TOTEXTLEN + EMT.MCHEXTLEN + EMT.TOTEXTTIME = EMT.TOTEXTTIME + EMT.MCHEXTTIME + EMT.TOOLCUTLEN[EMT.TCLIND].Len = EMT.TOOLCUTLEN[EMT.TCLIND].Len + EMT.MCHCUTLEN + -- emetto dati in sospeso + if EMT.TLE_NAME then + EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ') + EMT.TLE_NAME = nil + EMT.TLE_TIME = nil + end +end + +--------------------------------------------------------------------- +function OnEstimPathStart() + EMT.AUXTYPE = nil + EMT.MCHMOVEFIRST = true + EMT.CHARMOVE = nil +end + +--------------------------------------------------------------------- +function OnEstimPathEnd() + EMT.AUXTYPE = nil +end + +--------------------------------------------------------------------- +function OnEstimPathStartAux() + -- se richiesto, preparo il carico barra + if EMT.LOAD then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = LOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Loading', EmtSecToHMS( dTime), ' - ', ' - ') + EMT.LOAD = false + end + -- se altrimenti carico dopo rotazione + elseif EMT.POSTROT then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = ROTATION_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Rotation', EmtSecToHMS( dTime), ' - ', ' - ') + EMT.POSTROT = false + end + -- altrimenti, spostamento carrelli + else + local Cmd = EgtSplitString( EMT.AUX) + if ( Cmd[1] == '1' and Cmd[2] ~= 'Z') or Cmd[1] == '2' or Cmd[1] == '3' then + EMT.CHARMOVE = true + end + if EMT.AUXIND == EMT.AUXTOT and EMT.CHARMOVE then + local dTime = ( EMT.AUXTOT - 2) * CHAR_ONE_MOVE_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Charriots move', EmtSecToHMS( dTime), ' - ', ' - ') + end + end +end + +--------------------------------------------------------------------- +function OnEstimPathEndAux() + -- verifico tipo di emissione + if EMT.OPEISDISP then + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + else + EMT.AUXTYPE = 'R' + end + end + else + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Split' then + EMT.AUXTYPE = 'S' + elseif Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + elseif Cmd[1] == '0' and Cmd[2] == 'Fall' then + EMT.AUXTYPE = 'F' + else + EMT.AUXTYPE = 'P' + end + end + end + -- per lo scarico della rimanenza + if EMT.AUXTYPE == 'R' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = LOAD_T + UNLOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Remnant unloading' + EMT.TLE_TIME = dTime + end + -- per lo split + elseif EMT.AUXTYPE == 'S' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = SPLIT_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Splitting' + EMT.TLE_TIME = dTime + end + -- per lo scarico + elseif EMT.AUXTYPE == 'U' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = UNLOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Unloading' + EMT.TLE_TIME = dTime + end + -- per lo scarico a caduta + elseif EMT.AUXTYPE == 'F' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = FALL_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Fall' + EMT.TLE_TIME = dTime + end + -- per la pre-rotazione + elseif EMT.AUXTYPE == 'P' then + ; -- calcolato come parte della rotazione + end +end + +--------------------------------------------------------------------- +function OnEstimRapid() + -- dati movimento + local dL1 = EMT.L1 - EMT.L1p + local dL2 = EMT.L2 - EMT.L2p + local dL3 = EMT.L3 - EMT.L3p + local dR1 = 0 + if EMT.R1 and EMT.R1p then dR1 = EMT.R1 - EMT.R1p end + local dR2 = 0 + if EMT.R2 and EMT.R2p then dR2 = EMT.R2 - EMT.R2p end + -- se primo posizionamento della lavorazione il movimento di L1 è già conteggiato in quello dei carrelli + if EMT.MCHMOVEFIRST then + EMT.MCHMOVEFIRST = false + dL1 = 0 + end + -- calcolo lunghezza + local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3) + EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen + -- calcolo tempo + local dTime = RAPID_MIN_T + local dT1 = abs( dL1) / RAPID_X_FEED * 60 + if dT1 > dTime then dTime = dT1 end + local dT2 = abs( dL2) / RAPID_Y_FEED * 60 + if dT2 > dTime then dTime = dT2 end + local dT3 = abs( dL3) / RAPID_Z_FEED * 60 + if dT3 > dTime then dTime = dT3 end + local dT4 = abs( dR1) / RAPID_C_FEED * 60 + if dT4 > dTime then dTime = dT4 end + local dT5 = abs( dR2) / RAPID_B_FEED * 60 + if dT5 > dTime then dTime = dT5 end + EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime + EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnEstimLinear() + -- dati movimento + local dL1 = EMT.L1 - EMT.L1p + local dL2 = EMT.L2 - EMT.L2p + local dL3 = EMT.L3 - EMT.L3p + -- calcolo lunghezza + local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3) + EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen + -- calcolo tempo + local dTime = dLen / EMT.F * 60 + EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime + EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnEstimArc() + -- dati movimento + local dLxy = EMT.RR * abs( EMT.AC) * pi / 180 + local dLz = abs( ( Point3d( EMT.L1, EMT.L2, EMT.L3) - Point3d( EMT.L1p, EMT.L2p, EMT.L3p)) * Vector3d( EMT.EXTR)) + -- calcolo lunghezza + local dLen = sqrt( dLxy * dLxy + dLz * dLz) + EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen + -- calcolo tempo + local dTime = dLen / EMT.F * 60 + EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime + EgtOutLog( string.format( ' G2 Len=%.0f Time=%.2f', dLen, dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +-- *** GENERAL *** +--------------------------------------------------------------------- +function FindFirstToolOnHead( sH1) + -- salvo stato iniziale + local CurrMachId = EgtGetCurrMachining() + local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) + -- cerco lavorazione con utensile su testa indicata + local sTool, nTlen + local OpId = EgtGetFirstActiveOperation() + while OpId do + local nType = EgtGetOperationType( OpId) + if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then + if EgtSetCurrMachining( OpId) then + local sTest = EgtGetMachiningParam( MCH_MP.TOOL) + if EgtTdbSetCurrTool( sTest) then + local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + if sHead and ( sHead == sH1) then + sTool = sTest + nTlen = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + break + end + end + end + end + OpId = EgtGetNextActiveOperation( OpId) + end + -- ripristino stato iniziale + if CurrMachId then + EgtSetCurrMachining( CurrMachId) + else + EgtResetCurrMachining() + end + if CurrTool then + EgtTdbSetCurrTool( CurrTool) + else + EgtTdbSetCurrTool( '') + end + -- restituisco risultato + return sTool, nTlen +end + +--------------------------------------------------------------------- +function GetDefaultToolName() + local vTools = EgtGetToolsInCurrSetupPos( DefTcPos) + if vTools and vTools[1] and #vTools[1] > 0 then + return vTools[1] + else + local sErr = 'Missing tool in Default Position ' .. DefTcPos + EgtOutLog( 'Error : ' .. sErr) + if EMT.VER and EMT.VER >= '2.3a2' and EMT.SIM1ST then + EgtOutBox( sErr, 'ERROR', 'ERROR') + end + return '' + end +end + +--------------------------------------------------------------------- +function IsStartPhase( nPhase) + local sVal = GetPhaseType( nPhase) + return ( sVal == 'START') +end + +--------------------------------------------------------------------- +function IsRestPhase( nPhase) + local sVal = GetPhaseType( nPhase) + return ( sVal == 'REST') +end + +--------------------------------------------------------------------- +function IsStartOrRestPhase( nPhase) + local sVal = GetPhaseType( nPhase) + return ( sVal == 'START' or sVal == 'REST') +end + +--------------------------------------------------------------------- +function IsMidPhase( nPhase) + local sVal = GetPhaseType( nPhase) + return ( sVal == 'MID') +end + +--------------------------------------------------------------------- +function IsMid2Phase( nPhase) + local sVal = GetPhaseType( nPhase) + return ( sVal == 'MID2') +end + +--------------------------------------------------------------------- +function IsEnd2Phase( nPhase) + local sVal = GetPhaseType( nPhase) + return ( sVal == 'END2') +end + +--------------------------------------------------------------------- +function GetPhaseType( nPhase) + return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'TYPE') or '') +end + +--------------------------------------------------------------------- +function GetPhaseOrd( nPhase) + return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ORD', 'i') or 0) +end + +--------------------------------------------------------------------- +function GetPhaseRot( nPhase) + return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0) +end + +--------------------------------------------------------------------- +function IsLastMachining( nMchId) + local nOpeId = EgtGetNextActiveOperation( nMchId) + while nOpeId do + local nType = EgtGetOperationType( nOpeId) + if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then + return false + end + nOpeId = EgtGetNextActiveOperation( nOpeId) + end + return true +end + +--------------------------------------------------------------------- +-- *** END GENERAL *** +--------------------------------------------------------------------- diff --git a/Saomad-KAIROS-MK1.mlse b/Saomad-KAIROS-MK1.mlse new file mode 100644 index 0000000..5bda9bc --- /dev/null +++ b/Saomad-KAIROS-MK1.mlse @@ -0,0 +1,3847 @@ +-- Special Operations macchina Saomad-KAIROS by EgalWare s.r.l. 2023/12/01 + +-- Intestazioni +require( 'EmtGenerator') +EgtEnableDebug( false) + +-- Carico i dati globali +local sBaseDir = EgtGetSourceDir() +local BD = dofile( sBaseDir .. 'Beam\\BeamData.lua') + +---------------------- OnSpecialMoveZup ----------------------------- +--------------------------------------------------------------------- +function OnSpecialMoveZup() + --EgtOutLog( 'OnSpecialMoveZup : ' .. EMC.HEAD .. '.' .. tostring( EMC.EXIT)) + + -- Inizializzazioni + EMC.ERR = 0 + EMC.MODIF = false + + -- se sega a catena + if EMC.HEAD == 'H3' then + + + end + +end + +---------- OnSpecialApplyDisposition & OnPostApplyMachining --------- +----------------------- Costanti ------------------------------------ +local DELTA_TOL_V = 110 +local DELTA_TOL_S = 160 +local DELTA_TOL_L = 310 +local DELTA_TOL_FIXED = 50 +local DeltaTol = DELTA_TOL_S +local DELTA_SIC = 1 +local AGG_LOAD = 0 +local MIN_JOIN_VV = 75 +local MIN_JOIN_SS = 100 +local MIN_JOIN_LS = 100 +local MIN_JOIN_SL = 290 +local MIN_JOIN_LL = 400 +local MinJoin = MIN_JOIN_SS +local MinOther = abs( MinX1) + abs( MaxX2) + MinJoin + +----------------------- Variabili ----------------------------------- +local Test = false + +--------------------------------------------------------------------- +local function PrepareClGroup( nParentId) + + local nClId = EgtGetFirstNameInGroup( nParentId, 'CL') + -- se non c'è, lo aggiunge + if not nClId then + nClId = EgtGroup( EMC.DISPID) + if not nClId then + return nil + end + EgtSetName( nClId, 'CL') + -- altrimenti lo svuoto + else + EgtEmptyGroup( nClId) + end + + return nClId +end + +--------------------------------------------------------------------- +local function IsStartOrRestPhase( nPhase) + local sVal = EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'TYPE') + return ( sVal == 'START' or sVal == 'REST') +end + +--------------------------------------------------------------------- +local function IsMidPhase( nPhase) + local sVal = EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'TYPE') + return ( sVal == 'MID') +end + +--------------------------------------------------------------------- +local function IsEndPhase( nPhase) + local sVal = EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'TYPE') + return ( sVal == 'END') +end + +--------------------------------------------------------------------- +local function IsMid2Phase( nPhase) + local sVal = EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'TYPE') + return ( sVal == 'MID2') +end + +--------------------------------------------------------------------- +local function IsEnd2Phase( nPhase) + local sVal = EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'TYPE') + return ( sVal == 'END2') +end + +--------------------------------------------------------------------- +local function GetNextStartOrRestPhase( nPhase) + local nNextPhase = nPhase + 1 + while nNextPhase <= EgtGetPhaseCount() do + if IsStartOrRestPhase( nNextPhase) then + break ; + end + nNextPhase = nNextPhase + 1 + end + return nNextPhase +end + +--------------------------------------------------------------------- +local function GetPhaseRot( nPhase) + return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0) +end + +--------------------------------------------------------------------- +local function IsLastOperationBeforeRotation( nOperId) + -- se ultima fase o ultima fase del pezzo, ritorno risultato negativo + if EMC.PHASE == EgtGetPhaseCount() or IsEndPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) then + return false + end + -- recupero la successiva operazione attiva + local nNextOperId = EgtGetNextActiveOperation( nOperId) + -- se non esiste o non è una disposizione, ritorno risultato negativo + if not nNextOperId or EgtGetOperationType( nNextOperId) ~= MCH_OY.DISP then + return false + end + -- recupero le rotazioni della fase corrente e della prossima fase + local nRot = GetPhaseRot( EMC.PHASE) + local nNextRot = GetPhaseRot( EMC.PHASE + 1) + -- ritorno se sono diverse + return ( nRot ~= nNextRot) +end + +--------------------------------------------------------------------- +local function IsFirstMachiningAfterRotation( nMchId) + -- se prima fase o prima fase del pezzo, ritorno risultato negativo + if EMC.PHASE == 1 or IsStartOrRestPhase( EMC.PHASE) then + return false + end + -- recupero la precedente operazione attiva + local nPrevOperId = EgtGetPrevActiveOperation( nMchId) + -- se non esiste o non è una disposizione, ritorno risultato negativo + if not nPrevOperId or EgtGetOperationType( nPrevOperId) ~= MCH_OY.DISP then + return false + end + -- recupero le rotazioni della fase corrente e della fase precedente + local nRot = GetPhaseRot( EMC.PHASE) + local nPrevRot = GetPhaseRot( EMC.PHASE - 1) + -- ritorno se sono diverse + return ( nRot ~= nPrevRot) +end + +--------------------------------------------------------------------- +local function UpdateMinJoinDeltaTol() + local L_SMALL = 800 + local H_V = 90 + local H_S = 150 + local H_L = 250 + local W_V = 90 + local W_S = 150 + local W_L = 450 + if EMC.SB <= W_V and EMC.HB <= H_V then + MinJoin = MIN_JOIN_VV + DeltaTol = DELTA_TOL_V + elseif EMC.LB <= L_SMALL then + MinJoin = MIN_JOIN_SS + DeltaTol = DELTA_TOL_S + else + local dMinJoinS + local dMinJoinL + if EMC.SB <= W_S then + dMinJoinS = MIN_JOIN_SS + dMinJoinL = MIN_JOIN_LS + elseif EMC.SB <= W_L then + local Coeff = ( EMC.SB - W_S) / ( W_L - W_S) + dMinJoinS = ( 1 - Coeff) * MIN_JOIN_SS + Coeff * MIN_JOIN_SL + dMinJoinL = ( 1 - Coeff) * MIN_JOIN_LS + Coeff * MIN_JOIN_LL + else + dMinJoinS = MIN_JOIN_SL + dMinJoinL = MIN_JOIN_LL + end + if EMC.HB <= H_S then + MinJoin = dMinJoinS + DeltaTol = DELTA_TOL_S + elseif EMC.HB <= H_L then + local Coeff = ( EMC.HB - H_S) / ( H_L - H_S) + MinJoin = ( 1 - Coeff) * dMinJoinS + Coeff * dMinJoinL + DeltaTol = ( 1 - Coeff) * DELTA_TOL_S + Coeff * DELTA_TOL_L + else + MinJoin = dMinJoinL + DeltaTol = DELTA_TOL_L + end + if EMC.SB < W_V then + DeltaTol = DELTA_TOL_V + end + end + MinOther = abs( MinX1) + abs( MaxX2) + MinJoin +end + +--------------------------------------------------------------------- +local function GetCUTID() + -- recupero CUTID del pezzo in lavoro + local nOrd = GetPhaseOrd( EMC.PHASE) + local nPartRawId + local nRawId = EgtGetFirstRawPart() + while nRawId do + local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i') + if nRawOrd == nOrd then + nPartRawId = nRawId + break + end + nRawId = EgtGetNextRawPart( nRawId) + end + local CutID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0 + return CutID +end + +--------------------------------------------------------------------- +local function EnsureZmax( bZmaxOk, vCmd) + if not bZmaxOk then table.insert( vCmd, { 1, 'Z', EgtGetAxisHomePos( 'Z')}) end + return true +end + +--------------------------------------------------------------------- +local function EmitComment( vCmd, sOut) + EgtOutLog( ' ' .. sOut, 1) + if Test then + table.insert( vCmd, { 0, sOut}) + end +end + +--------------------------------------------------------------------- +function OnSpecialApplyDisposition() + + EgtOutLog( ' *** Fase : ' .. EgtNumToString( EMC.PHASE, 0) .. ' ***', 1) + + -- Inizializzo codice di errore + EMC.ERR = 0 + + -- Campi obbligatori ma non usati + EMC.HEAD = "" + EMC.EXIT = 1 + EMC.TCPOS = "" + EMC.SHIFTS = 0 + EMC.SBH = false + + -- Se disposizione da saltare non devo fare alcunché + if EgtExistsInfo( EMC.DISPID, 'SKIP') then return end + + -- Assegno flag di pezzo separato dal resto del grezzo + local bSplit = IsEndPhase( EMC.PHASE) or IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) + + -- Recupero il tipo dell'operazione successiva + local nNextOpeType = EgtGetOperationType( EgtGetNextActiveOperation( EMC.DISPID) or GDB_ID.NULL) + + -- Se ci sono lavorazioni successive non devo fare alcunché + if nNextOpeType ~= MCH_OY.NONE and nNextOpeType ~= MCH_OY.DISP then return end + + -- Imposto gruppo e path di movimento + local nClId = PrepareClGroup( EMC.DISPID) + if not nClId then + EMC.ERR = 3 + return + end + local nPathId = EgtGroup( nClId) + if not nPathId then + EMC.ERR = 6 + return + end + EgtSetName( nPathId, 'Empty') + EMC.PATHID = nPathId + EMC.SHIFTS = -1 + + -- Se l'operazione successiva è una disposizione con rotazione, devo preparare il pezzo alla rotazione + if IsLastOperationBeforeRotation( EMC.DISPID) then + -- aggiornamento posizioni + if IsStartPhase( EMC.PHASE) then + -- carico le posizioni + local dPosT = EgtGetInfo( EMC.DISPID, 'TPOS', 'd') + local dPosY = EgtGetInfo( EMC.DISPID, 'YPOS', 'd') + EMC.TPOS = dPosT + EMC.YDELTA = dPosY - dPosT + EMC.VDELTA = nil + EMC.CNT = 1 + else + local nPrevOpeId = EgtGetPrevActiveOperation( EMC.DISPID) + local nLastPathId = EgtGetLastInGroup( EgtGetFirstNameInGroup( nPrevOpeId, 'CL') or GDB_ID.NULL) + local nLastEntId = EgtGetLastInGroup( nLastPathId) + local vAxes = EmtGetAxesPos( nLastEntId) + if #vAxes > 0 then EMC.TPOS = vAxes[1] end + EMC.YDELTA = EgtGetInfo( nLastPathId, 'YDELTA', 'd') + EMC.VDELTA = EgtGetInfo( nLastPathId, 'VDELTA', 'd') + EMC.CNT = EgtGetInfo( nLastPathId, 'CNT', 'i') + end + -- Determinazione delle dimensioni del grezzo in lavoro + local b3Raw = BBox3d() + local nRawId = EgtGetFirstRawPart() + while nRawId do + if EgtVerifyRawPartPhase( nRawId, EMC.PHASE) then + b3Raw = EgtGetRawPartBBox( nRawId) + break + end + nRawId = EgtGetNextRawPart( nRawId) + end + EMC.LB = b3Raw:getDimX() + 10 * GEO.EPS_SMALL + -- Assegno sovramateriale di testa e ingombro tagli di testa e di coda + EMC.HOVM = EgtGetInfo( nRawId, 'HOVM', 'd') or 0 + EMC.HCING = 0 + EMC.TCING = EgtGetInfo( nRawId, 'TCING', 'd') or 0 + -- Eseguo preparazione alla rotazione + local vCmd = SpecCalcPreRot() + SpecOutputCmds( vCmd, true) + return + end + + -- Se l'operazione successiva è ancora una disposizione, devo scaricare il pezzo + if nNextOpeType == MCH_OY.DISP and bSplit and not IsEnd2Phase( EMC.PHASE) then + -- aggiornamento posizioni + local nPrevOpeId = EgtGetPrevActiveOperation( EMC.DISPID) + local nLastPathId = EgtGetLastInGroup( EgtGetFirstNameInGroup( nPrevOpeId, 'CL') or GDB_ID.NULL) + local nLastEntId = EgtGetLastInGroup( nLastPathId) + local vAxes = EmtGetAxesPos( nLastEntId) + if #vAxes > 0 then EMC.TPOS = vAxes[1] end + EMC.YDELTA = EgtGetInfo( nLastPathId, 'YDELTA', 'd') + EMC.VDELTA = EgtGetInfo( nLastPathId, 'VDELTA', 'd') + EMC.CNT = EgtGetInfo( nLastPathId, 'CNT', 'i') + -- Determinazione delle dimensioni del grezzo in lavoro + local b3Raw = BBox3d() + local nRawId = EgtGetFirstRawPart() + while nRawId do + if EgtVerifyRawPartPhase( nRawId, EMC.PHASE) and not EgtVerifyRawPartPhase( nRawId, EMC.PHASE + 1) then + b3Raw = EgtGetRawPartBBox( nRawId) + break + end + nRawId = EgtGetNextRawPart( nRawId) + end + EMC.LB = b3Raw:getDimX() + 10 * GEO.EPS_SMALL + EMC.HOVM = EgtGetInfo( nRawId or GDB_ID.NULL, 'HOVM', 'd') or 0 + -- Eseguo scarico + local vCmd = SpecCalcUnload() + SpecOutputCmds( vCmd, true) + return + end + + -- Verifico ci sia un solo grezzo nella fase corrente + local nRawCount = 0 + local nCurrRawId = GDB_ID.NULL + local nRawId = EgtGetFirstRawPart() + while nRawId do + if EgtVerifyRawPartPhase( nRawId, EMC.PHASE) then + nRawCount = nRawCount + 1 + nCurrRawId = nRawId + end + nRawId = EgtGetNextRawPart( nRawId) + end + + -- Determinazione delle sue dimensioni + local b3Raw = EgtGetRawPartBBox( nCurrRawId) + if not b3Raw or b3Raw:isEmpty() then + EMC.ERR = 11 + return + end + EMC.LB = b3Raw:getDimX() + 10 * GEO.EPS_SMALL + EMC.SB = b3Raw:getDimY() + EMC.HB = b3Raw:getDimZ() + EMC.ZMIN = b3Raw:getMin():getZ() + + -- Aggiorno limiti di presa e tolleranza + UpdateMinJoinDeltaTol() + + -- Assegno sovramateriale di testa e ingombro tagli di testa e di coda + EMC.HOVM = 0 + EMC.HCING = 0 + EMC.TCING = 0 + + -- Devo scaricare il grezzo rimasto (deve essere unico) + -- Posizione trave + local dPosT + + -- Se fase 1 o dopo rotazione eseguo carico con carrello Y + local vCmd = {} + if EMC.PHASE == 1 or IsEnd2Phase( EMC.PHASE) then + dPosT = LoadT + if IsEnd2Phase( EMC.PHASE) then dPosT = dPosT + TurnerOffs end + vCmd = SpecCalcLoad( dPosT, 0, min( EMC.LB - MinOther - AGG_LOAD, MaxX1 - dPosT)) + -- se altrimenti fase successiva alla prima di tipo inizio o rimanenza + elseif IsStartOrRestPhase( EMC.PHASE) then + -- recupero posizione trave e quota di aggancio carrello + dPosT = EgtGetInfo( EMC.DISPID, 'TPOS', 'd') + local dPosY = EgtGetInfo( EMC.DISPID, 'YPOS', 'd') + -- se carrello agganciato + if dPosY then + -- confermo i nuovi parametri di aggancio + table.insert( vCmd, { 21, dPosY - dPosT, 0}) + -- recupero CNT + local nPrevOpeId = EgtGetPrevActiveOperation( EMC.DISPID) + if EgtGetOperationType( nPrevOpeId) == MCH_OY.DISP and EgtExistsInfo( nPrevOpeId, 'SKIP') then + nPrevOpeId = EgtGetPrevActiveOperation( nPrevOpeId) + end + local nLastPathId = EgtGetLastInGroup( EgtGetFirstNameInGroup( nPrevOpeId, 'CL') or GDB_ID.NULL) + EMC.CNT = EgtGetInfo( nLastPathId, 'CNT', 'i') + -- altrimenti è grezzo scaricato al carico e devo ricaricarlo + else + vCmd = SpecCalcLoad( dPosT, 0, min( EMC.LB - MinOther - AGG_LOAD, MaxX1 - dPosT)) + end + -- altrimenti fase successiva pari + else + local dPosV = EgtGetInfo( EMC.DISPID, 'VPOS', 'd') + EMC.VDELTA = dPosV + end + -- Se fase inizio o rimanenza, eseguo scambio per avere solo pinza V + local vCmd2 = {} + if IsStartOrRestPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) then + EMC.TPOS = dPosT + SpecSetCarrPosFromCmds( vCmd) + local dDistFront = EgtIf( EMC.LB < abs( MinX2 - UnloadT), MinJoin, EMC.LB - abs( MinX2 - UnloadT) + MinJoin + DeltaTol) + vCmd2 = SpecCalcCarriages( dDistFront, 0) + if vCmd and #vCmd > 1 and vCmd2 and #vCmd2 > 1 then + table.insert( vCmd, { 0, 'CARR_MOVE'}) + end + end + -- eseguo scarico + SpecSetCarrPosFromCmds( vCmd2) + local vCmd3 = SpecCalcUnload() + -- unisco ed emetto i comandi + vCmd = EgtJoinTables( vCmd, vCmd2) + vCmd = EgtJoinTables( vCmd, vCmd3) + SpecOutputCmds( vCmd, true) +end + +--------------------------------------------------------------------- +function OnPostApplyMachining() + + EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID), 1) + + -- Inizializzo codice di errore + EMC.ERR = 0 + + -- Recupero la posizione della trave e dei carrelli al termine della precedente operazione + local nPrevOpeId = EgtGetPrevActiveOperation( EMC.MCHID) + -- se precedente operazione non esiste, errore + if not nPrevOpeId then + EMC.ERR = 1 + return + -- se precedente operazione è disposizione + elseif EgtGetOperationType( nPrevOpeId) == MCH_OY.DISP then + if EMC.PHASE == 1 or IsFirstMachiningAfterRotation( EMC.MCHID) then + -- posizioni home + EMC.TPOS = nil + EMC.YDELTA = nil + EMC.VDELTA = nil + EMC.HCING_IGNORE = true + elseif IsStartOrRestPhase( EMC.PHASE) then + -- carico le posizioni + local dPosT = EgtGetInfo( nPrevOpeId, 'TPOS', 'd') + local dPosY = EgtGetInfo( nPrevOpeId, 'YPOS', 'd') + -- se carrello agganciato + if dPosY then + EMC.TPOS = dPosT + EMC.YDELTA = dPosY - dPosT + EMC.VDELTA = nil + -- altrimenti è grezzo scaricato al carico e devo ricaricarlo + else + EMC.TPOS = nil + EMC.YDELTA = nil + EMC.VDELTA = nil + end + EMC.HCING_IGNORE = true + else + -- aggiornamento posizioni (da lavorazione precedente a disposizione) + local nPrev2OpeId = EgtGetPrevActiveOperation( nPrevOpeId) + if not nPrev2OpeId then + EMC.ERR = 2 + return + end + local nLastPathId = EgtGetLastInGroup( EgtGetFirstNameInGroup( nPrev2OpeId, 'CL') or GDB_ID.NULL) + local nLastEntId = EgtGetLastInGroup( nLastPathId) + local vAxes = EmtGetAxesPos( nLastEntId or GDB_ID.NULL) + if not vAxes then + EMC.ERR = 3 + return + end + if #vAxes > 0 then EMC.TPOS = vAxes[1] end + EMC.YDELTA = EgtGetInfo( nLastPathId, 'YDELTA', 'd') + EMC.VDELTA = EgtGetInfo( nLastPathId, 'VDELTA', 'd') + end + EMC.CNT = nil + -- altrimenti precedente operazione è lavorazione + else + -- aggiornamento posizioni + local nLastPathId = EgtGetLastInGroup( EgtGetFirstNameInGroup( nPrevOpeId, 'CL') or GDB_ID.NULL) + local nLastEntId = EgtGetLastInGroup( nLastPathId) + local vAxes = EmtGetAxesPos( nLastEntId or GDB_ID.NULL) + if not vAxes then + EMC.ERR = 4 + return + end + if #vAxes > 0 then EMC.TPOS = vAxes[1] end + EMC.YDELTA = EgtGetInfo( nLastPathId, 'YDELTA', 'd') + EMC.VDELTA = EgtGetInfo( nLastPathId, 'VDELTA', 'd') + EMC.CNT = EgtGetInfo( nLastPathId, 'CNT', 'i') + end + + -- Verifico se ultima lavorazione della fase + local nNextOpeId = EgtGetNextActiveOperation( EMC.MCHID) + local bMchLast = ( not nNextOpeId or EgtGetOperationPhase( nNextOpeId) ~= EMC.PHASE) + + -- Verifico se ultima lavorazione prima di una rotazione + local bPreRotMch = IsLastOperationBeforeRotation( EMC.MCHID) + + -- Verifico flag di separazione e fase di scarico + local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) + local bPreSplit = ( sNotes:find( 'Presplit') ~= nil) + local bSplitting = ( sNotes:find( 'Split') ~= nil) + local bPreCut = ( sNotes:find( 'Precut') ~= nil) + local bCutting = ( sNotes:find( 'Cut') ~= nil) + local bUnload = IsEndPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) + if bPreSplit or bPreCut then + EgtSetInfo( EMC.MCHID, 'IS_PRE', '1') + else + EgtRemoveInfo( EMC.MCHID, 'IS_PRE') + end + + -- Agisco sui diversi percorsi della lavorazione + local nPathId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( EMC.MCHID, 'CL') or GDB_ID.NULL) + while nPathId do + -- assegno id percorso da elaborare + EMC.PATHID = nPathId + -- recupero id del successivo + nPathId = EgtGetNext( nPathId) + -- verifico se ultimo percorso di ultima lavorazione della fase + local bLast = ( bMchLast and ( not nPathId)) + -- se ultimo, elimino ritorno in home + if bLast then EgtRemoveOperationHome( EMC.MCHID) end + -- salvo lo stato di trave e carrelli + local OriTPos = EMC.TPOS + local OriYDelta = EMC.YDELTA + local OriVDelta = EMC.VDELTA + local OriCnt = EMC.CNT + -- eseguo le elaborazioni + SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bLast and bUnload, bLast and bPreRotMch) + -- se separazione, verifico il risultato + if bSplitting then + -- recupero CUTID del pezzo in lavoro + local CutID = GetCUTID() + -- in caso di errore mancato pinzaggio uscita riprovo dopo aver disabilitato le lavorazioni finali + if EMC.ERR == 18 then + -- segnalazione warning + EMC.ERR = -101 + EMC.MSG = 'Warning : skipped final processes (WRN=101,CUTID='..tostring( CutID)..')' + -- ripristino lo stato originale di trave e carrelli + EMC.TPOS = OriTPos + EMC.YDELTA = OriYDelta + EMC.VDELTA = OriVDelta + EMC.CNT = OriCnt + -- eseguo le elaborazioni + SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bLast and bUnload, bLast and bPreRotMch) + -- pinzaggio ancora impossibile, pezzo a caduta + if EMC.ERR == 18 then + -- segnalazione warning + EMC.ERR = -102 + EMC.MSG = 'Warning : skipped final processes and unload by fall (WRN=102,CUTID='..tostring( CutID)..')' + end + -- scarico standard + elseif EMC.ERR == 0 then + -- segnalazione warning + EMC.ERR = -100 + EMC.MSG = 'Warning : standard unload (WRN=100,CUTID='..tostring( CutID)..')' + end + -- se taglio del residuo finale, scarico standard + elseif bCutting then + -- recupero CUTID del pezzo in lavoro + local CutID = GetCUTID() + -- se non ci sono errori, segnalazione warning + if EMC.ERR == 0 then + EMC.ERR = -100 + EMC.MSG = 'Warning : standard unload (WRN=100,CUTID='..tostring( CutID)..')' + end + end + if EMC.ERR > 0 then return end + -- determino la posizione finale della trave + local nLastEntId = EgtGetLastInGroup( EMC.PATHID) + local vAxes = EmtGetAxesPos( nLastEntId) + if #vAxes > 0 then EMC.TPOS = vAxes[1] end + end + +end + +--------------------------------------------------------------------- +function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreRotMch) + + -- Assegno flag di pezzo separato dal resto del grezzo + local bSplit = IsEndPhase( EMC.PHASE) or IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) + + -- Assegno flag di pezzo in separazione + local bFixedDelta = ( bPreSplit or bSplitting or bPreCut or bCutting) + + -- Se separazione o taglio del grezzo finale, verifico se precedente era una preparazione + local bFixedPos = false + if bPreSplit or bSplitting or bPreCut or bCutting then + local nPrevOpeId = EgtGetPrevActiveOperation( EMC.MCHID) + bFixedPos = EgtExistsInfo( nPrevOpeId or GDB_ID.NULL, 'IS_PRE') + end + + -- Determinazione delle dimensioni totali dei grezzi e del grezzo in lavoro + local b3Tot = BBox3d() + local b3Raw = BBox3d() + local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE) + local nRawId = EgtGetFirstRawPart() + local nCurrRawId = GDB_ID.NULL + while nRawId do + if EgtVerifyRawPartPhase( nRawId, EMC.PHASE) then + local b3Tmp = EgtGetRawPartBBox( nRawId) + b3Tot:Add( b3Tmp) + if EgtGetPartInRawPartCount( nRawId) > 0 and not EgtVerifyRawPartPhase( nRawId, nNextOddPhase) then + b3Raw = b3Tmp + nCurrRawId = nRawId + end + end + nRawId = EgtGetNextRawPart( nRawId) + end + if b3Tot:isEmpty() then + EMC.ERR = 11 + return + end + EMC.LB = EgtIf( bSplit, b3Raw:getDimX(), b3Tot:getDimX()) + 10 * GEO.EPS_SMALL + EMC.SB = b3Tot:getDimY() + EMC.HB = b3Tot:getDimZ() + EMC.LR = b3Raw:getDimX() + 10 * GEO.EPS_SMALL + EMC.YMIN = b3Raw:getMin():getY() + EMC.ZMIN = b3Raw:getMin():getZ() + + -- Aggiorno limiti di presa e tolleranza + UpdateMinJoinDeltaTol() + + -- Recupero sovramateriale di testa e ingombro tagli di testa e di coda + EMC.HOVM = EgtGetInfo( nCurrRawId, 'HOVM', 'd') or 0 + EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0 + EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0 + EMC.XMAX = b3Raw:getMax():getX() - EMC.HOVM + + -- Calcolo dell'ingombro della lavorazione + local dDistFront, dDistBack = SpecialCalcMachiningEncumbrance( EMC.MCHID, bPreCut) + if not dDistFront or not dDistBack then return end + if bPreSplit or bSplitting then + local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1) + dDistFront = min( dDistFront, dDistF) + local dNextHOVM = EgtGetInfo( EgtGetNextRawPart( nCurrRawId) or GDB_ID.NULL, 'HOVM', 'd') or 0 + local dBackOther = b3Tot:getDimX() - b3Raw:getDimX() - MinOther - dNextHOVM + EgtOutLog( 'DistBack='..EgtNumToString( dDistBack)..' OtherBack='..EgtNumToString( dBackOther), 3) + dDistBack = min( dDistBack, dBackOther) + elseif bPreCut or bCutting then + local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1) + dDistFront = min( dDistFront, dDistF) + dDistBack = 0.0 + end + + -- Verifico lunghezza pezzo + if not bSplit and not VerifyPartLength() then + return + end + + -- Se inizio o appena dopo rotazione, eseguo il carico + if not EMC.TPOS then + local dPosT = LoadT + if IsFirstMachiningAfterRotation( EMC.MCHID) then dPosT = dPosT + TurnerOffs end + local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin)) + local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos) + if vCmd2 and #vCmd2 > 1 then + table.insert( vCmd, { 0, 'CARR_MOVE'}) + end + EgtJoinTables( vCmd, vCmd2) + SpecOutputCmds( vCmd) + + -- Se altrimenti carri entrambi diponibili, eseguo calcoli per carrelli + elseif not IsEndPhase( EMC.PHASE) then + local vCmd = SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos) + -- Se non ci sono spostamenti, confermo i parametri di aggancio + if SpecTestOnlyRemarkInCmds( vCmd) then + table.insert( vCmd, { 21, EgtIf( EMC.YDELTA, EMC.YDELTA, 0), EgtIf( EMC.VDELTA, EMC.VDELTA, 0)}) + end + SpecOutputCmds( vCmd) + + -- Altrimenti, non muovo i carrelli rispetto alla trave + else + local vCmd = {} + SpecOutputCmds( vCmd) + end + EMC.HCING_IGNORE = nil + + -- Se taglio di separazione + local vCmd = {} + if bSplitting then + -- rimuovo eventuale vecchia info di Skip + local NextDispId = EgtGetPhaseDisposition( EMC.PHASE + 1) or GDB_ID.NULL + EgtRemoveInfo( NextDispId, 'SKIP') + -- verifico se separazione con caduta + if not EMC.VDELTA then + EgtOutLog( ' Warning SPLITTING -> separazione con caduta pezzo') + if IsEndPhase( EMC.PHASE + 1) then + EgtSetInfo( NextDispId, 'SKIP', '1') + local NextOpeId = EgtGetNextOperation( NextDispId) + while NextOpeId and EgtGetOperationPhase( NextOpeId) == EMC.PHASE + 1 do + EgtSetOperationMode( NextOpeId, false) + NextOpeId = EgtGetNextOperation( NextOpeId) + end + end + EMC.ERR = 18 + -- verifico che la barra sia agganciata ad entrambi i carrelli + elseif not EMC.YDELTA or not EMC.VDELTA then + EMC.ERR = 19 + EMC.MSG = ' Error SPLIT : Y or V not clamped' + return false + end + -- eseguo la separazione ( standard o di pezzo ruotato) + if not IsMid2Phase( EMC.PHASE + 1) then + vCmd = SpecCalcSplit( b3Raw:getDimX()) + else + vCmd = SpecCalcSplitRot( b3Raw:getDimX()) + end + end + -- Se taglio finale di grezzo a perdere + if bCutting then + -- salvo distanza carrello V da inizio grezzo rimasto nella disposizione della prossima fase + local NextDispId = EgtGetPhaseDisposition( EMC.PHASE + 1) + if NextDispId then + EgtSetInfo( NextDispId, 'VPOS', EMC.VDELTA) + end + end + + -- Se previsto scarico, lo eseguo + if bUnload then + EMC.LB = b3Raw:getDimX() + 10 * GEO.EPS_SMALL + local vCmdTmp = SpecCalcUnload() + vCmd = EgtJoinTables( vCmd, vCmdTmp) + end + + -- Se ritorno al carico per rotazione + if bPreRotMch then + -- determino posizione testa trave + local nLastEntId = EgtGetLastInGroup( EMC.PATHID) + local vAxes = EmtGetAxesPos( nLastEntId) + if #vAxes > 0 then EMC.TPOS = vAxes[1] end + -- eseguo movimento prima di rotazione + local vCmdTmp = SpecCalcPreRot() + vCmd = EgtJoinTables( vCmd, vCmdTmp) + end + + -- Emetto eventuali comandi di separazione e/o scarico + if #vCmd > 0 then + SpecOutputCmds( vCmd, true) + end + +end --SpecApplyPath( bLast) + +--------------------------------------------------------------------- +function SpecialCalcMachiningEncumbrance( nMchId, bPreCut) + -- gruppi della lavorazione + local nClId = EgtGetFirstNameInGroup( nMchId, 'CL') + local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL) + if not nPathId then + EMC.ERR = 12 + return + end + -- recupero ptMin ptMax della lavorazione + local ptMin = EgtGetInfo( nClId, 'MMIN', 'p') + local ptMax = EgtGetInfo( nClId, 'MMAX', 'p') + if not ptMin or not ptMax then + EMC.ERR = 13 + return + end + -- se pre-taglio, aggiorno ptMax con quello del taglio finale + if bPreCut then + local ptFinMax = GetFinalCutPmax( nMchId) + if ptFinMax then + ptMax = ptFinMax + end + end + -- Recupero del vettore estrusione (coincide con il vettore utensile) + local vtTool = EgtGetInfo( nPathId, 'EXTR', 'v') + if not vtTool then + EMC.ERR = 14 + return + end + -- Recupero testa + local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + -- Calcolo del vettore ausiliario + local vAxes = EmtGetAxesPos( EgtGetFirstInGroup( nPathId)) + if not vAxes or #vAxes < 5 or ( sHead == 'H3' and #vAxes < 6) then + EMC.ERR = 15 + return + end + local vtAux = EgtGetCalcAuxDirFromAngles( vAxes[4], vAxes[5], vAxes[6]) + if not vtAux then + EMC.ERR = 16 + return + end + local vtArm = vtAux + -- Recupero dei dati dell'utensile + local nToolType = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + local bSaw = ( nToolType == MCH_TY.SAW_STD or nToolType == MCH_TY.SAW_FLAT) + local bChain = ( nToolType == MCH_TY.MORTISE_STD) + local dTLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) + local dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) + local dTDist = EgtIf( EgtTdbGetCurrToolParam( MCH_TP.DIST) > 1, EgtTdbGetCurrToolParam( MCH_TP.DIST), ChSawLen) + -- Se sega a catena, devo correggere il versore Aux per farlo coincidere con la direzione del braccio C + if bChain then + if abs( vAxes[6] or 0) < 1 then + vtArm = vtTool + else + vtArm = vtTool ^ vtAux + end + end + -- Calcolo limiti derivanti dalla lavorazione + local dDistFront, dDistBack = SpecCalcEncumbrance( vtTool, vtArm, vtAux, ptMin, ptMax, bSaw, bChain, dTLen, dTDiam, dTDist) + return dDistFront, dDistBack +end + +--------------------------------------------------------------------- +function SpecialCalcPhaseEncumbrance( nPhase) + -- Deve essere la fase finale di lavorazione di un pezzo (già staccato dal resto della trave) + local dDistFront = EMC.LB + local dDistBack = EMC.LB + -- Salvo lavorazione e utensile correnti, per ripristinarli alla fine + local nOrigMchId = EgtGetCurrMachining() + local sOrigTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) + local sOrigHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + local nOrigExit = EgtTdbGetCurrToolParam( MCH_TP.EXIT) + -- Ciclo sulle lavorazioni + local nMchId = EgtGetNextActiveOperation( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL) + while nMchId and EgtGetOperationPhase( nMchId) == nPhase do + -- imposto lavorazione e utensile correnti + EgtSetCurrMachining( nMchId) + local sTool = EgtGetMachiningParam( MCH_MP.TOOL) + if not EgtTdbSetCurrTool( sTool) then + local sTuuid = EgtGetMachiningParam( MCH_MP.TUUID) + sTool = EgtTdbGetToolFromUUID( sTuuid) + EgtTdbSetCurrTool( sTool) + end + local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + local nExit = EgtTdbGetCurrToolParam( MCH_TP.EXIT) + if sTool and sHead and nExit then EgtSetCalcTool( sTool, sHead, nExit) end + -- calcolo ingombri + local dDistF, dDistB = SpecialCalcMachiningEncumbrance( nMchId) + if dDistF and dDistB then + dDistFront = min( dDistFront, dDistF) + dDistBack = min( dDistBack, dDistB) + end + nMchId = EgtGetNextActiveOperation( nMchId) + end + -- Ripristino lavorazione e utensile correnti + if nOrigMchId then EgtSetCurrMachining( nOrigMchId) end + if sOrigTool then EgtTdbSetCurrTool( sOrigTool) end + if sOrigTool and sOrigHead and nOrigExit then EgtSetCalcTool( sOrigTool, sOrigHead, nOrigExit) end + -- Restituisco gli ingombri trovati + return dDistFront, dDistBack +end + +--------------------------------------------------------------------- +function GetFinalCutPmax( nMchId) + local nFinalCutId + local nId = EgtGetNextActiveOperation( nMchId) + while nId and EgtGetOperationPhase( nId) == EMC.PHASE do + nFinalCutId = nId + nId = EgtGetNextActiveOperation( nId) + end + if not nFinalCutId then return end + local nCLId = EgtGetFirstNameInGroup( nFinalCutId, 'CL') + if not nCLId then return end + return EgtGetInfo( nCLId, 'MMAX', 'p') +end + +--------------------------------------------------------------------- +function SpecCalcEncumbrance( vtTool, vtArm, vtAux, ptMin, ptMax, bSaw, bChain, dTLen, dTDiam, dTDist) + -- Quota in Z dal punto di inclinazione dei carrelli + local dCompZ = sqrt( 1 - vtTool:getZ() * vtTool:getZ()) + local dZup = ptMin:getZ() - 0.5 * dCompZ * dTDiam - ( EMC.ZMIN + 130) + -- Posizione min e max del naso mandrino (rispetto a testa pezzo in X e riferimento pezzo in Y e Z) + local ptHeadMin = ptMin + vtTool * dTLen - Vector3d( EMC.XMAX, EMC.YMIN + EMC.SB, EMC.ZMIN) + local ptHeadMax = ptMax + vtTool * dTLen - Vector3d( EMC.XMAX, EMC.YMIN + EMC.SB, EMC.ZMIN) + -- Ingombro a sinistra + local dDistBack = EMC.LB + ptMin:getX() + LoadT + local dHeadBack = 350 + if bSaw then + if vtTool:getX() > 0 and abs( vtTool:getY()) < 0.088 and abs( vtTool:getZ()) < 0.088 then + dHeadBack = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.35 then + dHeadBack = EgtIf( vtArm:getX() < 0, 540, 350) + elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then + if vtArm:getX() < 0 then + dHeadBack = 450 + else + dHeadBack = EgtIf( vtTool:getX() > 0, 50, 90) + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + end + elseif ( vtTool:getX() > 0.7 and abs( vtTool:getY()) < 0.2 and ptMax:getZ() > EMC.ZMIN + 0.9 * EMC.HB) then + if vtTool:getZ() > 0 then + dHeadBack = max( 50, 90 - 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX())) + else + dHeadBack = max( 50, 40 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX())) + end + if ptMax:getZ() < EMC.ZMIN + BD.VICE_MINH then + dHeadBack = dHeadBack + BD.VICE_MINH + end + elseif ( vtTool:getX() > 0.2 and abs( vtTool:getZ()) < 0.5) then + dHeadBack = max( 90, 40 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX())) + elseif abs( vtTool:getZ()) < 0.93 then + if vtTool:getX() > 0 and abs( vtTool:getY()) < 0.2 and ptMax:getZ() > EMC.ZMIN + BD.VICE_MINH then + dHeadBack = 180 + elseif vtTool:getX() > -0.05 then + dHeadBack = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + elseif vtTool:getX() > -0.3 then + dHeadBack = 250 + elseif vtTool:getX() > -0.707 then + dHeadBack = 350 + elseif vtTool:getX() > -0.8667 then + dHeadBack = 450 + else + dHeadBack = 650 + end + else + dHeadBack = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + end + -- per limiti corsa asse X1 + dHeadBack = max( dHeadBack, MinX1 + 1 - vtTool:getX() * ( MillOffs + dTLen)) + else + if ( vtTool:getX() > -0.1 and vtArm:getX() > -0.1) or + ( abs( vtTool:getX()) < 0.1 and abs( vtTool:getZ()) < 0.1) then + dHeadBack = EgtIf( EMC.CNT == 1, 180, 130) + elseif ( vtTool:getX() > -0.1 and vtArm:getX() > -0.95) then + dHeadBack = 180 + elseif ( vtTool:getX() < -0.8) then + dHeadBack = 675 + elseif ( vtTool:getX() < -0.75) then + dHeadBack = 650 + elseif ( vtTool:getX() < -0.5) then + dHeadBack = 450 + end + if vtTool:getX() < -0.25 then + dHeadBack = dHeadBack + max( dTLen - 130, 0) * abs( vtTool:getX()) + elseif vtTool:getX() < 0 then + dHeadBack = dHeadBack + ( dTLen + 180) * abs( vtTool:getX()) + end + if vtTool:getX() > 0.866 then + dHeadBack = 50 + elseif vtTool:getX() >= 0 and dZup > 0 then + dHeadBack = max( EgtIf( EMC.CNT == 1, 180, 130), dHeadBack - dZup) + end + if abs( vtTool:getX()) < 0.5 and abs( vtTool:getZ()) > 0.259 and dZup < 0 then + if vtArm:getX() < -0.259 then + dHeadBack = 510 + else + dHeadBack = EgtIf( vtTool:getZ() > 0.966, 160, 280) + end + end + -- per fresature longitudinali con utensile di fianco + if abs( vtTool:getX()) < 0.1 and vtTool:getZ() < 0.707 and vtArm:getX() < -0.5 then + dHeadBack = 500 + end + -- per sega a catena di fianco + if bChain and vtTool:getX() < 0.5 and vtTool:getZ() < 0.5 and vtArm:getX() < -0.5 then + dHeadBack = max( dHeadBack, 510) + end + -- per fresa diretta quasi esattamente come Y+/- e con la testa non troppo nel pezzo + if not bChain and abs( vtTool:getX()) < 0.017 and abs( vtTool:getZ()) < 0.017 and + (( vtTool:getY() > 0 and ptHeadMin:getY() > 80) or ( vtTool:getY() < 0 and ptHeadMax:getY() < -EMC.SB - 80)) then + dHeadBack = EgtIf( EMC.CNT == 1, 180, 130) + end + -- per limiti corsa asse X1 + if not bChain then + dHeadBack = max( dHeadBack, MinX1 + 1 - vtTool:getX() * ( MillOffs + dTLen)) + else + dHeadBack = max( dHeadBack, MinX1 + 1 - vtAux:getX() * ( MillOffs + dTDist) - vtTool:getX() * dTLen) + end + end + -- Ingombro a destra + local dDistFront = - ptMax:getX() - LoadT + local dHeadFront = 350 + if bSaw then + if vtTool:getX() < 0 and abs( vtTool:getY()) < 0.088 and abs( vtTool:getZ()) < 0.088 then + dHeadFront = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.35 then + dHeadFront = EgtIf( vtArm:getX() > 0, 540, 350) + elseif abs( vtTool:getZ()) < 0.26 and abs( vtTool:getX()) < 0.71 then + if vtArm:getX() > 0 then + dHeadFront = 450 + else + dHeadFront = EgtIf( vtTool:getX() < 0, 50, 90) + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + end + elseif ( vtTool:getX() < - 0.7 and abs( vtTool:getY()) < 0.2 and ptMax:getZ() > EMC.ZMIN + 0.9 * EMC.HB) then + if vtTool:getZ() > 0 then + dHeadFront = max( 50, 90 - 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX())) + else + dHeadFront = max( 50, 40 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX())) + end + if ptMax:getZ() < EMC.ZMIN + BD.VICE_MINH then + dHeadFront = dHeadFront + BD.VICE_MINH + end + elseif ( vtTool:getX() < -0.2 and abs( vtTool:getZ()) < 0.5) then + dHeadFront = max( 90, 40 + 0.5 * dTDiam * sqrt( vtTool:getY() * vtTool:getY() + vtTool:getZ() * vtTool:getZ())) + elseif abs( vtTool:getZ()) < 0.93 then + if vtTool:getX() < 0 and abs( vtTool:getY()) < 0.2 and ptMax:getZ() > EMC.ZMIN + BD.VICE_MINH then + dHeadFront = 180 + elseif vtTool:getX() < 0.05 then + dHeadFront = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + elseif vtTool:getX() < 0.3 then + dHeadFront = 250 + elseif vtTool:getX() < 0.707 then + dHeadFront = 350 + elseif vtTool:getX() < 0.8667 then + dHeadFront = 450 + else + dHeadFront = 650 + end + else + dHeadFront = 50 + 0.5 * dTDiam * sqrt( 1 - vtTool:getX() * vtTool:getX()) + end + -- per limiti corsa asse X2 + dHeadFront = max( dHeadFront, -MaxX2 + 1 + vtTool:getX() * ( MillOffs + dTLen)) + else + if ( vtTool:getX() < -0.5 and vtArm:getX() < 0.1) then + dHeadFront = max( 50, dTDiam / 2 * abs( vtTool:getZ()) + 20) + elseif ( vtTool:getX() < 0.1 and vtArm:getX() < 0.1) or + ( abs( vtTool:getX()) < 0.1 and abs( vtTool:getZ()) < 0.1) then + dHeadFront = 130 + elseif ( vtTool:getX() < 0.1 and vtArm:getX() < 0.95) then + dHeadFront = 180 + elseif ( vtTool:getX() > 0.8) then + dHeadFront = 675 + elseif ( vtTool:getX() > 0.75) then + dHeadFront = 650 + elseif ( vtTool:getX() > 0.5) then + dHeadFront = 450 + end + if vtTool:getX() > 0.25 then + dHeadFront = dHeadFront + max( dTLen - 130, 0) * vtTool:getX() + elseif vtTool:getX() > 0 then + dHeadFront = dHeadFront + ( dTLen + 180) * vtTool:getX() + end + if vtTool:getX() < -0.866 then + dHeadFront = 50 + elseif vtTool:getX() <= 0 and dZup > 0 then + dHeadFront = max( 130, dHeadFront - dZup) + end + if abs( vtTool:getX()) < 0.5 and abs( vtTool:getZ()) > 0.259 and dZup < 0 then + if vtArm:getX() > 0.259 then + dHeadFront = 510 + else + dHeadFront = EgtIf( vtTool:getZ() > 0.966, 160, 280) + end + end + -- per fresature longitudinali con utensile di fianco + if abs( vtTool:getX()) < 0.1 and vtTool:getZ() < 0.707 and vtArm:getX() > 0.5 then + dHeadFront = 500 + end + -- per sega a catena di fianco + if bChain and vtTool:getX() > -0.5 and vtTool:getZ() < 0.5 and vtArm:getX() > 0.5 then + dHeadFront = max( dHeadFront, 510) + end + -- per fresa diretta quasi esattamente come Y+/- e con la testa non troppo nel pezzo + if not bChain and abs( vtTool:getX()) < 0.017 and abs( vtTool:getZ()) < 0.017 and + (( vtTool:getY() > 0 and ptHeadMin:getY() > 80) or ( vtTool:getY() < 0 and ptHeadMax:getY() < -EMC.SB - 80)) then + dHeadFront = 130 + end + -- per limiti corsa asse X2 + if not bChain then + dHeadFront = max( dHeadFront, -MaxX2 + 1 + vtTool:getX() * ( MillOffs + dTLen)) + else + dHeadFront = max( dHeadFront, -MaxX2 + 1 + vtAux:getX() * ( MillOffs + dTDist) + vtTool:getX() * dTLen) + end + end + -- Stampe debug + EgtOutLog( ' Tdir=' .. tostring( vtTool) .. ' Adir=' .. tostring( vtArm) .. ' Zup=' .. EgtNumToString( dZup), 3) + EgtOutLog( ' DistFront=' .. EgtNumToString( dDistFront) .. ' DistBack=' .. EgtNumToString( dDistBack) .. + ' HeadFront=' .. EgtNumToString( dHeadFront) .. ' HeadBack=' .. EgtNumToString( dHeadBack), 3) + -- Restituisco ingombri effettivi + return ( dDistFront - dHeadFront), ( dDistBack - dHeadBack) +end + +--------------------------------------------------------------------- +function VerifyPartLength() + + -- Verifico lunghezza pezzo + if EMC.LB < MinJoin + MinOther + AGG_LOAD + EMC.HCING + EMC.HOVM then + EgtOutLog( ' Error CLAMP -> pezzo troppo corto') + EMC.ERR = 17 + return false + end + + return true +end + +--------------------------------------------------------------------- +function SpecCalcLoad( dPosT, dDistFront, dDistBack) + --[L] + local dMinDistBack= max( dDistBack, MinJoin + EgtIf( IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE), EMC.TCING, 0)) + local dNewYDelta = max( EMC.LB - dMinDistBack, MinOther + AGG_LOAD + EMC.HCING + EMC.HOVM) + local dNewVDelta = nil + local dNewY = dPosT + TurnerOffs + dNewYDelta + local vCmd = {} + EgtOutLog( ' *[L]', 1) + -- [L-1] + if dNewY - MaxX1 > 0 then + dNewYDelta = min( EMC.LB - MinJoin + AGG_LOAD, MaxX1 - dPosT - TurnerOffs) + EgtOutLog( ' *[L1]', 1) + end --[L-2] + if EMC.LB - dNewYDelta < MinJoin then + dNewYDelta = min( EMC.LB - MinJoin + AGG_LOAD, MaxX1 - dPosT - TurnerOffs) + EgtOutLog( ' *[L2]', 1) + end + -- Commento + table.insert( vCmd, { 0, 'Loading'}) + -- risalita testa a Zmax + local bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- Apro entrambe le morse + table.insert( vCmd, { 11, 0}) + table.insert( vCmd, { 12, 0}) + -- Sposto il carrello Y per il carico + table.insert( vCmd, { 2, 'X1', dPosT + dNewYDelta, 'X2', ParkX2}) + -- Chiudo morsa Y + table.insert( vCmd, { 11, EgtIf( EMC.LB - dNewYDelta < LenToPress, 1, 2)}) + -- confermo i nuovi parametri di aggancio + table.insert( vCmd, { 21, dNewYDelta, 0}) + -- Inizializzo contatore globale + EMC.CNT = 1 + SpecOutputCNT() + -- Assegno stato corrente + EMC.TPOS = dPosT + EMC.YDELTA = dNewYDelta + EMC.VDELTA = nil + -- Restituisco i comandi + return vCmd +end -- SpecAdjustLoad [L] + +--------------------------------------------------------------------- +function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos) + + local MinFrontJoin = MinJoin + EMC.HCING + EMC.HOVM + local MinBackJoin = MinJoin + EgtIf( IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE), EMC.TCING, 0) + local MyMinOther = MinOther + EgtIf( EMC.CNT == 1, AGG_LOAD, 0) + + local dDistFrontEff = min( dDistFront, EMC.LB - MyMinOther - EMC.TCING) + if bFixedDelta and IsMid2Phase( EMC.PHASE + 1) then + dDistFrontEff = min( dDistFrontEff, EMC.LR - MinOther - EMC.TCING) + end + local dDistBackEff = min( dDistBack, EMC.LB - MyMinOther - EMC.HCING - EMC.HOVM) + + EgtOutLog( ' Dist/Min : Back=' .. EgtNumToString( dDistBackEff, 1) .. '/' .. EgtNumToString( MinBackJoin, 1) .. + ' Front=' .. EgtNumToString( dDistFrontEff, 1) .. '/' .. EgtNumToString( MinFrontJoin, 1) .. + ' Fixed : Delta=' .. EgtIf( bFixedDelta, 'T', 'F') .. ' Pos=' .. EgtIf( bFixedPos, 'T', 'F'), 3) + + -- [A] se posso mettere solo carrello Y + if dDistFrontEff < MinFrontJoin and dDistBackEff > MinBackJoin - GEO.EPS_SMALL then + + local dPosT = EMC.TPOS + local dYDelta = EMC.YDELTA + local dVDelta = EMC.VDELTA + + local dNewPosT = nil + local dNewYDelta = EMC.LB - dDistBackEff + local dNewVDelta = nil + + return SpecAdjustCarriages( dPosT, dYDelta, dVDelta, dNewPosT, dNewYDelta, dNewVDelta, bFixedDelta, bFixedPos) + + -- [B] se altrimenti posso mettere entrambi i carrelli Y e V + elseif dDistBackEff > MinBackJoin - GEO.EPS_SMALL and + dDistFrontEff > MinFrontJoin - GEO.EPS_SMALL then + + local dPosT = EMC.TPOS + local dYDelta = EMC.YDELTA + local dVDelta = EMC.VDELTA + + local dNewPosT = nil + local dNewYDelta = EMC.LB - dDistBackEff + local dNewVDelta = dDistFrontEff + + return SpecAdjustCarriages( dPosT, dYDelta, dVDelta, dNewPosT, dNewYDelta, dNewVDelta, bFixedDelta, bFixedPos) + + -- [C] se altrimenti posso mettere solo carrello V + elseif dDistBackEff < MinBackJoin and dDistFrontEff > MinFrontJoin - GEO.EPS_SMALL then + + local dPosT = EMC.TPOS + local dYDelta = EMC.YDELTA + local dVDelta = EMC.VDELTA + + local dNewPosT = nil + local dNewYDelta = nil + local dNewVDelta = dDistFrontEff + + return SpecAdjustCarriages( dPosT, dYDelta, dVDelta, dNewPosT, dNewYDelta, dNewVDelta, bFixedDelta, bFixedPos) + + -- altrimenti errore + else + if EgtGetDebugLevel() < 3 then + EgtOutLog( ' Dist/Min : Back=' .. EgtNumToString( dDistBackEff, 1) .. '/' .. EgtNumToString( MinBackJoin, 1) .. + ' Front=' .. EgtNumToString( dDistFrontEff, 1) .. '/' .. EgtNumToString( MinFrontJoin, 1)) + end + EgtOutLog( ' Error CLAMP impossible') + EMC.ERR = 18 + return {} + end + +end + +--------------------------------------------------------------------- +function SpecCalcSplit( dLenRaw) + local vCmd = {} + EgtOutLog( ' *[S]', 1) + table.insert( vCmd, { 0, EgtIf( EMC.VDELTA, 'Split', 'Fall')}) + -- determino i grezzi da agganciare al carrello Y (sono quelli presenti nella fase successiva dispari) + local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE) + local nRawId = EgtGetFirstRawPart() + while nRawId do + if EgtVerifyRawPartPhase( nRawId, nNextOddPhase) then + table.insert( vCmd, { 31, nRawId, 'X1'}) + end + nRawId = EgtGetNextRawPart( nRawId) + end + -- riporto il carrello Y al carico con il resto della trave + local dLDelta = EMC.YDELTA - dLenRaw + table.insert( vCmd, { 1, 'X1', LoadT + dLDelta}) + table.insert( vCmd, { 21, 0, EMC.VDELTA or 0}) + -- imposto subito Y non più attaccato al trave in lavoro + EMC.YDELTA = nil + -- salvo posizione carrello Y in disposizione del pezzo dopo split + local PostDispId = EgtGetPhaseDisposition( EMC.PHASE + 1) + if PostDispId then + EgtSetInfo( PostDispId, 'YPOS', LoadT + dLDelta) + end + -- salvo posizione grezzo rimasto e posizione carrello Y nella disposizione iniziale del pezzo succ (prossima fase dispari) + local NextDispId = EgtGetPhaseDisposition( nNextOddPhase) + if NextDispId then + EgtSetInfo( NextDispId, 'TPOS', LoadT) + EgtSetInfo( NextDispId, 'YPOS', LoadT + dLDelta) + end + return vCmd +end + +--------------------------------------------------------------------- +function SpecCalcSplitRot( dLenRaw) + local vCmd = {} + EgtOutLog( ' *[SR]', 1) + table.insert( vCmd, { 0, 'SplitRot'}) + -- determino i grezzi da agganciare al carrello Y (sono quelli presenti nella fase successiva dispari) + local vRaw = {} + local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE) + local nRawId = EgtGetFirstRawPart() + while nRawId do + if EgtVerifyRawPartPhase( nRawId, nNextOddPhase) then + table.insert( vRaw, nRawId) + end + nRawId = EgtGetNextRawPart( nRawId) + end + for _, nId in ipairs( vRaw) do + table.insert( vCmd, { 31, nId, 'X1'}) + end + -- riporto il carrello Y al carico con il resto della trave + local dLDelta = EMC.YDELTA - dLenRaw + table.insert( vCmd, { 1, 'X1', LoadT + TurnerOffs + dLDelta}) + table.insert( vCmd, { 21, 0, EMC.VDELTA}) + -- imposto subito Y non più attaccato alla trave in lavoro + EMC.YDELTA = nil + -- apro il carrello Y + table.insert( vCmd, { 11, 0}) + -- sgancio i grezzi dal carrello Y + for _, nId in ipairs( vRaw) do + table.insert( vCmd, { 31, nId, ''}) + end + -- lo porto in parcheggio + table.insert( vCmd, { 1, 'X1', ParkX1}) + -- salvo posizione grezzo rimasto nella disposizione iniziale del pezzo succ (prossima fase dispari) + local NextDispId = EgtGetPhaseDisposition( nNextOddPhase) + if NextDispId then + EgtSetInfo( NextDispId, 'TPOS', LoadT) + end + return vCmd +end + +--------------------------------------------------------------------- +function SpecCalcUnload() + local vCmdPre = {} + EgtOutLog( ' *[U]', 1) + -- Se pinza Y chiusa , devo effettuare uno scambio + if EMC.YDELTA then + -- determino posizione testa trave + local nLastEntId = EgtGetLastInGroup( EMC.PATHID) + local vAxes = EmtGetAxesPos( nLastEntId) + if #vAxes > 0 then EMC.TPOS = vAxes[1] end + -- imposto quote aggancio per avere solo pinza V + local dDistFront = EMC.LB - MinOther - EMC.TCING - 10 * GEO.EPS_SMALL + local dDistBack = 0 + -- effettuo scambio + vCmdPre = SpecCalcCarriages( dDistFront, dDistBack) + if EMC.ERR ~= 0 then + return {} + end + -- recupero nuova posizione carrelli + SpecSetCarrPosFromCmds( vCmdPre) + EgtOutLog( ' *[U1]', 1) + end + local vCmd = {} + -- Tipo di scarico + local bStdUl = ( MaxUnloadLen < 1 or EMC.LB - EMC.HOVM < MaxUnloadLen + 1) + -- Commento + table.insert( vCmd, { 0, 'Unloading', EgtIf( bStdUl, 'Unloading', 'Manual Unloading')}) + -- risalita testa a Zmax + local bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- Se pinza Y chiusa, la apro + if EMC.YDELTA then + table.insert( vCmd, { 11, 0}) + end + -- Se non supero la lunghezza massima di scarico, sposto il pezzo in posizione di scarico + if bStdUl then + local dFinT = UnloadT - EMC.LB + local dFinV = dFinT + EMC.VDELTA + table.insert( vCmd, { 2, 'T', dFinT, 'X2', dFinV}) + else + table.insert( vCmd, { 1, 'X2', MaxX2}) + end + -- apro la morsa + table.insert( vCmd, { 12, 0}) + -- riporto il carrello in home + table.insert( vCmd, { 1, 'X2', ParkX2}) + + -- eventuale unione tabelle + if #vCmdPre > 0 then + vCmd = EgtJoinTables( vCmdPre, vCmd) + end + + return vCmd +end + +--------------------------------------------------------------------- +function SpecCalcPreRot() + local vCmdPre = {} + EgtOutLog( ' *[PR]', 1) + -- Se pinza V chiusa , devo effettuare uno scambio + if EMC.VDELTA then + -- imposto quote aggancio per avere solo pinza Y + local dDistFront = 0 + local dDistBack = EMC.LB - MinOther - EMC.HOVM + 10 * GEO.EPS_SMALL + -- effettuo scambio + vCmdPre = SpecCalcCarriages( dDistFront, dDistBack) + -- recupero nuova posizione carrelli + SpecSetCarrPosFromCmds( vCmdPre) + EgtOutLog( ' *[PR1]', 1) + end + -- porto il pezzo alla zona di rotazione con il carro Y + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'Pre-Rotation'}) + -- risalita testa a Zmax + local bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- Se pinza V chiusa, la apro + if EMC.VDELTA then + table.insert( vCmd, { 12, 0}) + end + -- riporto la trave al carico + local RotT = LoadT + TurnerOffs - EMC.HOVM + table.insert( vCmd, { 2, 'X1', RotT + EMC.YDELTA, 'T', RotT}) + -- apro la morsa + table.insert( vCmd, { 11, 0}) + -- riporto il carrello in home + table.insert( vCmd, { 1, 'X1', ParkX1}) + + -- eventuale unione tabelle + if #vCmdPre > 0 then + vCmd = EgtJoinTables( vCmdPre, vCmd) + end + + return vCmd +end + +--------------------------------------------------------------------- +function SpecAdjustCarriages( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) + + -- [A] richiesto solo carrello Y + if dYDeltaF and ( not dVDeltaF) then + -- [A1] rimango sul carrello Y + if dYDeltaI and ( not dVDeltaI) then + return SpecAdjustCarrA1( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF) + -- [A2] torno da entrambi + elseif dYDeltaI and dVDeltaI then + return SpecAdjustCarrA2( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF) + -- [A3] torno da carrello V + elseif dVDeltaI and (not dYDeltaI) then + return SpecAdjustCarrA3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF) + else + EgtOutLog( ' Error CLAMP NULL-> Y impossibile') + error( 'Error CLAMP NULL-> Y impossibile') + end + + -- (B) richiesti entrambi i carrelli + elseif dYDeltaF and dVDeltaF then + -- [B1] passo da carrello Y a entrambi + if dYDeltaI and ( not dVDeltaI) then + return SpecAdjustCarrB1( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + -- [B2] continuo con entrambi i carrelli + elseif dYDeltaI and dVDeltaI then + return SpecAdjustCarrB2( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + -- [B3] passo da carrello V a entrambi + elseif dVDeltaI and (not dYDeltaI) then + return SpecAdjustCarrB3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + else + EgtOutLog( ' Error CLAMP NULL-> Y+V impossibile') + error( 'Error CLAMP NULL-> Y+V impossibile') + end + + -- [C] richiesto solo carrello V + elseif ( not dYDeltaF) and dVDeltaF then + -- [C1] provengo da solo carrello Y + if dYDeltaI and ( not dVDeltaI) then + return SpecAdjustCarrC1( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + -- [C2] provengo da carrelli Y e V + elseif dYDeltaI and dVDeltaI then + return SpecAdjustCarrC2( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + -- [C3] rimango sul carrello V + elseif ( not dYDeltaI) and dVDeltaI then + return SpecAdjustCarrC3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) + else + EgtOutLog( ' Error CLAMP NULL-> V impossibile') + error( 'Error CLAMP NULL-> V impossibile') + end + + end + +end + +--------------------------------------------------------------------- +local function CalcCharStatus( sType, dDelta) + -- se per carrello Y + if sType == 'X1' then + return EgtIf( EMC.LB - dDelta < LenToPress, 1, 2) + -- altrimenti per carrello V + else + return EgtIf( dDelta < LenToPress, 1, 2) + end +end + +--------------------------------------------------------------------- +local function GetDeltaTol( dLenPresa, TCING, HCING, HOVM, Carr, bFixedDelta) + local dDeltaTolEff = DELTA_SIC + if Carr == 'X1' then + local dLenPreEff = dLenPresa - TCING + if dLenPreEff < MinJoin + DeltaTol then + dDeltaTolEff = max( DELTA_SIC, dLenPreEff - MinJoin + 10 * GEO.EPS_SMALL) + else + dDeltaTolEff = DeltaTol + end + elseif Carr == 'X2' then + local dLenPreEff = dLenPresa - HCING - HOVM + if dLenPreEff < MinJoin + DeltaTol then + dDeltaTolEff = max( DELTA_SIC, dLenPreEff - MinJoin + 10 * GEO.EPS_SMALL) + else + dDeltaTolEff = DeltaTol + end + end + return EgtIf( bFixedDelta, min( dDeltaTolEff, DELTA_TOL_FIXED), dDeltaTolEff) +end + +--------------------------------------------------------------------- +local function GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistN, sSide) + local dRecTotn = min( dDistN, dCorsaYfc+ dCorsaVfc) -- recupero possibile al netto di dCorsa..TrA) + local dCorsaYd, dCorsaYTd, dCorsaVd, dCorsaVTd + if sSide == 'Fr' then + if dRecTotn / 2 <= dCorsaYfc then + if dRecTotn / 2 <= dCorsaVfc then + dCorsaYTd = dRecTotn / 2 + dCorsaVd = dRecTotn / 2 + else + dCorsaVd = dCorsaVfc + dCorsaYTd = min( dCorsaYfc, dRecTotn - dCorsaVd) + end + else + dCorsaYTd = dCorsaYfc + dCorsaVd = min( dCorsaVfc, dRecTotn - dCorsaYTd) + end + dCorsaY = dCorsaYTd + dCorsaV = dCorsaVd + else + if dRecTotn / 2 <= dCorsaVfc then + if dRecTotn / 2 <= dCorsaYfc then + dCorsaVTd = dRecTotn / 2 + dCorsaYd = dRecTotn / 2 + else + dCorsaYd = dCorsaYfc + dCorsaVTd = min( dCorsaVfc, dRecTotn - dCorsaYd) + end + else + dCorsaVTd = dCorsaVfc + dCorsaYd = min( dCorsaYfc, dRecTotn - dCorsaVTd) + end + dCorsaY = dCorsaYd + dCorsaV = dCorsaVTd + end + return dCorsaY, dCorsaV +end + +--------------------------------------------------------------------- +local function PosxExtraYV( dX1PosA, dX2PosA, dTPosA, dMinX1, dMaxX2, sYV) + -- svolge la predisposizione iniziale di trave e carrelli in caso di situazione iniziale con un solo carrello chiuso + -- con un solo carrello chiuso per l'aggancio del carrello aperto + local dX1Pos, dX2Pos, dTPos + -- per aggancio del carrello X2 + if sYV == 'X2' then + dTPos = min( dTPosA, dX2PosA - MinJoin - EgtIf( EMC.HCING_IGNORE, 0, EMC.HCING) - EMC.HOVM) + dX1Pos = dX1PosA + ( dTPos - dTPosA) + if dX1Pos < dMinX1 then + dX2Pos = dX2PosA + ( dMinX1 - dX1Pos) + if dX2Pos > dMaxX2 + GEO.EPS_SMALL then + EmitComment( vCmd, ' Error CLAMP X2') + error( 'Error CLAMP X2') + return + elseif dX2Pos > dMaxX2 - GEO.EPS_SMALL then + dX2Pos = dMaxX2 + end + dX1Pos = dMinX1 + dTPos = dTPosA + ( dX1Pos - dX1PosA) + else + --dX1Pos = dMinX1 + --dX1Pos = dX1Pos! + --dTPos = dTPosA + ( dX1Pos - dX1PosA) + --dTPos = dTPos! + dX2Pos = dX2PosA + end + end + -- per aggancio del carrello X1 + if sYV == 'X1' then + dTPos = max( dTPosA, dX1PosA + MinJoin + EMC.TCING - EMC.LB) + dX2Pos = dX2PosA + ( dTPos - dTPosA) + if dX2Pos > dMaxX2 then + dX1Pos = dX1PosA - ( dX2Pos - dMaxX2) + if dX1Pos < dMinX1 - GEO.EPS_SMALL then + EmitComment( vCmd, ' Error CLAMP X1') + error( 'Error CLAMP X1') + return + elseif dX1Pos < dMinX1 + GEO.EPS_SMALL then + dX1Pos = dMinX1 + end + dX2Pos = dMaxX2 + dTPos = dTPosA + ( dX2Pos - dX2PosA) + else + -- ++++++++++++++++++++++++++++++++ + --dX2Pos = dMaxX2 + --dX2Pos = dX2Pos! + --dTPos = dTPosA + ( dX2Pos - dX2PosA) + --dTpos = dTPos!! + dX1Pos = dX1PosA + end + end + return dX1Pos, dX2Pos, dTPos +end + +--------------------------------------------------------------------- +local function PosXs2Enl (dYa, dVa, dTa, dExtraC, dCorsaTra, dCorsaYd, dCorsaVd, sYV) + -- svolge la fase di allontanamento dei carrelli per il recupero di 'ExtraX2'/'ExtraX1' + -- richiesto alle posizioni [--.xs2] delle funzioni SpecAdjustCarr.. + if sYV == 'X2' then -- caso di ExtraX2 (ed eventuale ulteriore allontanamento di X1) + local dCorsaYTrA = dCorsaTra + local dExtraX2n = dExtraC - dCorsaYTrA + -- eseguo allontanamento di Y e (V+T) + if dExtraX2n / 2 <= dCorsaYd then + if dExtraX2n / 2 <= dCorsaVd then + dYa = dYa + dExtraX2n / 2 + dVa = dVa - dExtraX2n / 2 + dTa = dTa - dExtraX2n / 2 + else + dVa = dVa - dCorsaVd + dTa = dTa - dCorsaVd + dYa = dYa + min( dExtraX2n - dCorsaVd, dCorsaYd) + end + else + dYa = dYa + dCorsaYd + dVa = dVa - min( dExtraX2n - dCorsaYd, dCorsaVd) + dTa = dTa - min( dExtraX2n - dCorsaYd, dCorsaVd) + end + end + + if sYV == 'X1' then -- caso di ExtraX1 (ed eventuale ulteriore allontanamento di X2) + local dCorsaVTrA = dCorsaTra + local dExtraX1n = -dExtraC - dCorsaVTrA + -- eseguo allontanamento di (Y+T) e V + if dExtraX1n / 2 <= dCorsaVd then + if dExtraX1n / 2 <= dCorsaYd then + dVa = dVa - dExtraX1n / 2 + dYa = dYa + dExtraX1n / 2 + dTa = dTa + dExtraX1n / 2 + else + dYa = dYa + dCorsaYd + dTa = dTa + dCorsaYd + dVa = dVa - min( dExtraX1n - dCorsaYd, dCorsaVd) + end + else + dVa = dVa - dCorsaVd + dYa = dYa + min( dExtraX1n - dCorsaVd, dCorsaYd) + dTa = dTa + min( dExtraX1n - dCorsaVd, dCorsaYd) + end + end + return dYa, dVa, dTa +end + +--------------------------------------------------------------------- +-- *** [A1] da carrello X1 a X1 : X1 -> X1 *** +--------------------------------------------------------------------- +function +SpecAdjustCarrA1( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF) + EgtOutLog( ' *[A1] = X1 -> X1', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X1 -> X1'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + -- recupero le posizioni correnti dei carrelli + local dX1PosA = dTPosI + dYDeltaI + local dX2PosA = ParkX2 + local dTPosA = dTPosI + local dYDeltaA = dYDeltaI + local dVDeltaA = dX2PosA - dTPosA + local dNewYDelta -- = dYDeltaF + local dCorsaYfc = MaxX1 - dX1PosA + local dCorsaYd = min( dCorsaYfc, EMC.LB - dYDeltaI - MinJoin) + + -- tolleranza + local dYDeltaTol = GetDeltaTol( EMC.LB - dYDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, 'X1') + local bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + + if bYDeltaS then + dNewYDelta = dYDeltaF + dYDeltaTol / 4 + else + dNewYDelta = dYDeltaA + end + EgtOutLog( ' YDeltaI=' .. EgtNumToString( dYDeltaI) .. ' TPosI=' .. EgtNumToString( dTPosI), 1) + EgtOutLog( ' YDeltaF=' .. EgtNumToString( dYDeltaF) .. ' NewYDelta=' .. EgtNumToString( dNewYDelta), 1) + -- flag per risalita resta a Zmax + local bZmaxOk = false + + -- **[A1Ys]** |pos. di Y cambia in modo significativo| + if bYDeltaS then + -- eventuale risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- definisco 'ExtraX1' con (Y+T) e V accentrati q.b. per la presa con V + local dX1Pos, dX2Pos, dTPos = PosxExtraYV( dX1PosA, dX2PosA, dTPosA, MyMinX1, MaxX2, 'X2') + local dNewY = dTPos + dNewYDelta + local dExtraX1 = dNewY - MyMinX1 + -- effettuo spostamenti di (Y+T) e V per predisporre all'aggancio di T con V + dX1PosA = dX1Pos + dX2PosA = dX2Pos + dTPosA = dTPos + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + dVDeltaA = dX2PosA - dTPosA + + -- **[A1Ys-x]** posizione di |Y non raggiungibile| (oltre MyMinX1) + if dExtraX1 < 0 then + -- **[A1Ys-xs]** posizione di Y non raggiungibile, |con ExtraX1 'significativo'| + if -dExtraX1 > dYDeltaTol /2 then + --EmitComment( vCmd, '[A1Ys-xs]') + -- calcolo le **corse disponibili dei carrelli a partire da Y e V c.s.** per allontanare q.p. (Y+T) e V + local dCorsaYfc = MaxX1 - dX1Pos + local dCorsaVfc = dX2Pos - MinX2 + local dDistFrN = (dX2Pos-dTPos) - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + local dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto **le corse di 'recupero'** dai due carrelli possibili riaccentrando Y e (V+T) + local dCorsaVTr = dCorsaVd + (MaxX2 - dX2Pos) + local dCorsaYr = dCorsaYTd + -- **[A1Ys-xsw]** posizione finale dNewV non raggiungibile, con |dExtraX1 > CorsaVr + CorsaYr| + if -dExtraX1 > ( dCorsaVTr + dCorsaYr) and bYDeltaS then + EmitComment( vCmd, '[A1Ys-xsw]' .. 'CASO NON GESTITO') + return + end + + local dCorsaVTrA = MaxX2 - dX2Pos -- !! att.ne: non dX2PosA !! + -- **[A1Ys-xs1]** se posso recuperare ExtraX1 semplicem' accentrando Y e (V+T) + -- (dalle posizione impostate sopra per l'aggancio di V) + if dCorsaVTrA >= -dExtraX1 then + EmitComment( vCmd, '[A1Ys-xs1]') + -- chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1: accentro** Y e (V+T) + dX1PosA = MyMinX1 -- (pos. finale) + dX2PosA = dX2PosA + (-dExtraX1) + dTPosA = dTPosA + (-dExtraX1) + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + dYDeltaA = dX1PosA - dTPosA + + else -- **[A1Ys-xs2]** + -- ci sarebbe un doppio movimento di Y ? => caso impossibile ? + EmitComment( vCmd, '[A1Ys-xs2]') + -- **1:** posiziono (ulteriormente!) (Y+T) e V + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX1, dCorsaVTrA, dCorsaYTd, dCorsaVd, 'X1') + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + dVDeltaA = dX2PosA - dTPosA + -- chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **2: accentro** Y e (V+T) + dX1PosA = MyMinX1 -- (pos. finale) + dX2PosA = MaxX2 + dTPosA = dX2PosA - dVDeltaA + --dVDeltaA = dX2PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [A1Ys-xs1/-xs2] + + -- **[A1Ys-xn]** |dExtraX1 ancora < 0 ma non 'significativo')| + else --if -dExtraX1 < DeltaToll/2 + EmitComment( vCmd, '[A1Ys-xn]') + -- chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1:** accentro Y + dExtraX1 = 0 + dX1PosA = MyMinX1 -- (pos. finale) + table.insert( vCmd, { 1, 'X1', dX1PosA}) + -- dYDeltaA = dX1PosA - dTPosA + end --[A1Ys-xs/xn] + + -- **[A1Ys-r]** |posizione di Y raggiungibile| (ExtraX1 >=0) + -- (si esclude la possibilità di extra corsa oltre maxX1) + else + EmitComment( vCmd, '[A1Ys-r]') + -- chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1:** posiziono Y alla posizione richiesta + dX1PosA = dNewY + table.insert( vCmd, { 1, 'X1', dX1PosA}) + end -- [A1Ys] + + -- calcolo il nuovo parametro di aggancio + dYDeltaA = dX1PosA - dTPosA + -- chiudo Y e apro V + table.insert( vCmd, { 11, CalcCharStatus( 'X1', dYDeltaA)}) + table.insert( vCmd, { 12, 0}) + -- sposto il carrello V in parcheggio + table.insert( vCmd, { 1, 'X2', ParkX2}) + -- imposto il nuovo parametro di aggancio + table.insert( vCmd, { 21, dYDeltaA, 0}) + + -- reset contatore + EMC.CNT = nil + + else -- **[A1Yns]** |spostamento| finale richiesto (ev' residuo) di |Y non 'significativo'| + EmitComment( vCmd, '[A1Yns]') + end --[A1Ys/ns] + + EgtOutLog(' YDeltaA =' .. EgtNumToString( dYDeltaA), 1) + + SpecOutputCNT() + return vCmd +end --SpecAdjustCarrA1 + +--------------------------------------------------------------------- +-- *** [A2] da entrambi a carrello X1 : X1+X2 -> X1 *** +--------------------------------------------------------------------- +function SpecAdjustCarrA2( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF) + EgtOutLog( ' *[A2] = X1+X2 -> X1 ', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X1+X2 -> X1'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + local dCorsaY = MaxX1 - MyMinX1 + local dCorsaV = MaxX2 - MinX2 + -- recupero le posizioni correnti dei carrelli + local dX1PosA = dTPosI + dYDeltaI + local dX2PosA = dTPosI + dVDeltaI + local dTPosA = dTPosI + local dYDeltaA = dYDeltaI + local dVDeltaA = dVDeltaI + local dNewYDelta -- = dYDeltaF + -- tolleranze + local dYDeltaTol = GetDeltaTol( EMC.LB - dYDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, 'X1') + local bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + + if bYDeltaS then + dNewYDelta = dYDeltaF + dYDeltaTol / 4 + else + dNewYDelta = dYDeltaA + end + -- definisco 'ExtraX1' + local dNewY = dTPosA + dNewYDelta + local dExtraX1 = dNewY - MyMinX1 -- < 0 = nuova pos. di Y 'non raggiungibile' (= oltre MyMinX1) + -- definisco 'ExtraX1 significativo' + local bYxs = -dExtraX1 > dYDeltaTol / 2 + + EgtOutLog( ' YDeltaI=' .. EgtNumToString( dYDeltaI) .. ' TPosI=' .. EgtNumToString( dTPosI) .. + ' VDeltaI=' .. EgtNumToString( dVDeltaI), 1) + EgtOutLog( ' YDeltaF=' .. EgtNumToString( dYDeltaF) .. ' NewYDelta=' .. EgtNumToString( dNewYDelta), 1) + -- flag per risalita resta a Zmax + local bZmaxOk = false + -- risalita testa a Zmax (da effettuare comunque, per il parcheggio di V) + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + -- calcoli preliminari in caso di spostamento richiesto per Y significativo + local dCorsaYfc, dCorsaVfc, dDistFrN, dCorsaYTd, dCorsaVd, dCorsaVTr, dCorsaYr, bXsw + if bYDeltaS then + if bYxs then + -- calcolo le **corse disponibili** dei carrelli **a partire dalle posizioni attuali** (=iniziali) + -- per allontanare q.p. (Y+T) e V + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto **le corse di 'recupero'** dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + (MaxX2 - dX2PosA) + dCorsaYr = dCorsaYTd + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaYr + dCorsaVTr + end + end + + -- **[A2Ys-xsw]** posizione NewY non raggiungibile (oltre MyMinX1), con ||dExtraX1 | > CorsaYr + CorsaVTr| + while bXsw do + EmitComment( vCmd, '[A2Ys-xsw]') + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- chiudo eventualmente il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1:** allontano q.p. (Y+T) e V + dX1PosA = dX1PosA + dCorsaYTd + dTPosA = dTPosA + dCorsaYTd + dX2PosA = dX2PosA - dCorsaVd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + -- chiudo il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **2:** accentro Y e (V+T) + dX1PosA = MyMinX1 + dX2PosA = dX2PosA + dCorsaVTr + dTPosA = dTPosA + dCorsaVTr + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + -- valuto Delta attuali + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + -- aggiorno l'extra corsa residua per Y + dExtraX1 = dExtraX1 + dCorsaYr + dCorsaVTr + bYxs = -dExtraX1 > dYDeltaTol/2 + -- **aggiorno la valutazione delle corse disponibili** + -- a partire da Y e V c.s. per allontanare q.p. (Y+T) e V + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto le corse di 'recupero' dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + dCorsaYr = dCorsaYTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaVTr + dCorsaYr + end -- [A2Ys-xw] + + -- **[A2Ys]** se lo |spostamento| richiesto (ev' residuo) per |Y| è |'significativo'| + if bYDeltaS then + -- **[A2Ys-x]** se la |posizione per Y non è 'raggiungibile'| + if dExtraX1 < 0 then + -- **[A2Ys-xs]** se |ExtraX1 'significativo'| + if bYxs then + local dCorsaVTrA = MaxX2 - dX2PosA + -- **[A2Ys-xs1]** se posso recuperare ExtraX1 solo accentrando (V+T) e Y + if dCorsaVTrA >= -dExtraX1 then + EmitComment( vCmd, '[A2Ys-xs1]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1:** accentro (V+T) q.b. e Y + dX2PosA = dX2PosA + (-dExtraX1) + dTPosA = dTPosA + (-dExtraX1) + dX1PosA = MyMinX1 -- (pos. finale) + --dYDeltaA = dX1PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + else -- **[A2Ys-xs2]** + EmitComment( vCmd, '[A2Ys-xs2]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1:** allontano (Y+T) e V + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX1, dCorsaVTrA, dCorsaYTd, dCorsaVd, 'X1') + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + dVDeltaA = dX2PosA - dTPosA + -- chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **2:** accentro Y e (V+T) q.b. per recupero di dExtraX1 + dX1PosA = MyMinX1 + dX2PosA = MaxX2 + dTPosA = dX2PosA - dVDeltaA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end --[A2Ys-xs1/-xs2] + + -- [A2Ys-xn] |ExtraX1 ancora <= 0, ma 'non significativo'| + else --if dExtraX1 <= 0 then + EmitComment( vCmd, '[A2Ys-xn]') + dExtraX1 = 0 + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- 1: accentro Y + dX1PosA = MyMinX1 -- (pos. finale) + table.insert( vCmd, { 1, 'X1', dX1PosA}) + end -- [A2Ys-xs/xn] + + --[A2Ys-r] dExtraX2 > 0 ( |pos. Y'raggiungibile|) + else + EmitComment( vCmd, '[A2Ys-r]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- posizione Y + dX1PosA = dTPosA + dNewYDelta -- (pos. finale) + table.insert( vCmd, { 1, 'X1', dX1PosA}) + end -- [A2Ys-x/r] + + else -- [A2Yns] |spostamento Y| (ev' residuo) |non significativo| + EmitComment( vCmd, '[A2Yns]') + end -- [A2Ys/ns] + + -- calcolo i nuovi parametri di aggancio + dYDeltaA = dX1PosA - dTPosA + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, CalcCharStatus( 'X1', dYDeltaA)}) + table.insert( vCmd, { 12, 0}) + -- sposto il carrello V in parcheggio + table.insert( vCmd, { 1, 'X2', ParkX2}) + -- imposto i nuovi parametri di aggancio + table.insert( vCmd, { 21, dYDeltaA, 0}) + + EgtOutLog( ' YDeltaA =' .. EgtNumToString( dYDeltaA), 1) + -- reset contatore + EMC.CNT = nil + + SpecOutputCNT() + return vCmd +end --SpecAdjustCarrA2 + +--------------------------------------------------------------------- +-- *** [A3] da carrello X2 a X1 : X2 -> X1 *** +--------------------------------------------------------------------- +function SpecAdjustCarrA3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF) + EgtOutLog( ' *[A3] = X2 -> X1', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X2 -> X1'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + -- recupero le posizioni correnti + local dX1PosA = ParkX1 + local dTPosA = dTPosI + local dX2PosA = dTPosI + dVDeltaI + local dYDeltaA = dX1PosA - dTPosA + local dVDeltaA = dVDeltaI + local dNewYDelta -- = dVDeltaF + -- tolleranza + local dYDeltaTol = GetDeltaTol( EMC.LB - dYDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, 'X1') + local bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + -- reimposto i delta finali in caso di spostamenti richiesti significativi, tenuto conto delle tolleranze + if bYDeltaS then + dNewYDelta = dYDeltaF + dYDeltaTol / 4 + else + dNewYDelta = dYDeltaA + end + -- + EgtOutLog(' VDeltaI=' .. EgtNumToString( dVDeltaA) .. ' YDeltaI(Park)='.. EgtNumToString( dYDeltaA).. + ' TPosI=' .. EgtNumToString( dTPosI) , 1) + EgtOutLog(' YDeltaF=' .. EgtNumToString( dYDeltaF) .. ' NewYDelta=' .. EgtNumToString( dNewYDelta) , 1) + local bZmaxOk = false + -- risalita testa a Zmax (da effettuare comunque, dato lo scambio di carrelli) + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + -- calcoli preliminari in caso di spostamento richiesto per Y significativo + local dX1Pos, dX2Pos, dTPos + local dNewY, dExtraX1, bYxs + local dCorsaYfc, dCorsaVfc, dDistFrN, dCorsaYTd, dCorsaVd, dCorsaVTr, dCorsaYr, bXsw + if bYDeltaS then + -- definisco 'ExtraX1' con Y e (V+T) accentrati q.b. per la presa con Y + dX1Pos, dX2Pos, dTPos = PosxExtraYV( dX1PosA, dX2PosA, dTPosA, MyMinX1, MaxX2, 'X1') + dNewY = dTPos + dNewYDelta + dExtraX1 = dNewY - MyMinX1 --( <0 <=> pos. 'non raggiungibile') + bYxs = -dExtraX1 > dYDeltaTol/2 + if bYxs then + -- calcolo le **corse disponibili dei carrelli a partire da Y e V c.s.** per allontanare q.p. (Y+T) e V + dCorsaYfc = MaxX1 - dX1Pos + dCorsaVfc = dX2Pos - MinX2 + --local dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dDistFrN = (dX2Pos-dTPos) - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto **le corse di 'recupero'** dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + (MaxX2 - dX2Pos) + dCorsaYr = dCorsaYTd + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaVTr + dCorsaYr + end + -- inizializzo + dX1PosA = dX1Pos + dX2PosA = dX2Pos + dTPosA = dTPos + end + + -- **[A3Ys-xsw]** posizione finale dNewY non raggiungibile, con |dExtraX1 > CorsaVr + CorsaYr| + while bXsw do + EmitComment( vCmd, '[A3Ys-xsw]') + -- |1:| posiziono (V+T) e Y come calcolato sopra + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo ev' il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- |2:| allontano (Y+T) e V quanto possibile + dX1PosA = dX1PosA + dCorsaYTd + dTPosA = dTPosA + dCorsaYTd + dX2PosA = dX2PosA - dCorsaVd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- |3:| accentro (V+T) e Y + dX2PosA = dX2PosA + dCorsaVTr + dTPosA = dTPosA + dCorsaVTr + dX1PosA = MyMinX1 + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- valuto i Delta ottenuti + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + -- aggiorno ExtraX1 + dExtraX1 = dExtraX1 + dCorsaYr + dCorsaVTr + -- **aggiorno la valutazione delle corse disponibili** + -- a partire da Y e V c.s. per allontanare q.p. (Y+T) e V + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto le corse di 'recupero' dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + dCorsaYr = dCorsaYTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaVTr + dCorsaYr + end --[A3Ys-xw] + + -- **[A3Ys]** |spostamento| richiesto (ev' residuo) |di Y| |'significativo'| + if bYDeltaS then + EmitComment( vCmd, '[A3Ys]') + -- **[A3Ys-x]** posizione di |Y non raggiungibile| + if dExtraX1 < 0 then + + -- **[A3Ys-xs]** |pos. NewY non raggiungibile, con ExtraX1 'significativo'| + -- ( -dExtraX1 <= (CorsaYr+CorsaVr) da ciclo precedente ) + if bYxs then + local dCorsaVTrA = MaxX2 - dX2PosA + -- **[A3Ys-xs1]** se posso recuperare ExtraX1 semplicem' accentrando Y e (V+T) + -- ulteriormente rispetto a YPos e Vpos definiti c.s. + if dCorsaVTrA >= -dExtraX1 then + EmitComment( vCmd, '[A3Ys-xs1]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1: accentro** Y e (V+T) + dX1PosA = MyMinX1 -- (pos. finale) + dX2PosA = dX2PosA - dExtraX1 + dTPosA = dTPosA - dExtraX1 + dYDeltaA = dX1PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + + else -- **[A3Ys-xs2]** + EmitComment( vCmd, '[A3Ys-xs2]') + + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1: accentro** ev' Y e (V+T) alle posizioni impostate + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + dYDeltaA = dX1PosA - dTPosA + + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **2: allontano** (Y+T) e V + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX1, dCorsaVTrA, dCorsaYTd, dCorsaVd, 'X1') + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + dVDeltaA = dX2PosA - dTPosA + + -- chiudo il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **3: accentro** Y e (V+T) + dX1PosA = MyMinX1 -- (pos. finale) + dX2PosA = MaxX2 + dTPosA = dX2PosA - dVDeltaA + --dYDeltaA = dX1PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [A3Ys-xs1/-xs2] + + -- **[A3Ys-xn]** |dExtraX1 ancora < 0 ma non 'significativo')| + else --if -dExtraX1 < DeltaToll/2 + EmitComment( vCmd, '[A3Ys-xn]') + -- ev' chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1:** accentro Y e porto (V+T) alla posizione impostata + dExtraX1 = 0 + dX1PosA = MyMinX1 -- (pos. finale) + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end --[A3Ys-xs/xn] + + -- **[A3Ys-r]** |posizione di Y raggiungibile (ExtraX1 >=0)| + else + EmitComment( vCmd, '[A3Ys-r]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- posizione Y in posizione finale ed ev' (V+T) come impostato sopra + dX1PosA = dTPosA + dNewYDelta + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [A3Ys] + + else -- **[A3Yns]** |spostamento| finale richiesto (ev' residuo) di |Y non 'significativo'| + EmitComment( vCmd, '[A3Yns]') + end --[A3Ys/ns] + + -- calcolo il nuovo parametro di aggancio + dYDeltaA = dX1PosA - dTPosA + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, CalcCharStatus( 'X1', dYDeltaA)}) + table.insert( vCmd, { 12, 0}) + -- sposto il carrello V in parcheggio + table.insert( vCmd, { 1, 'X2', ParkX2}) + -- imposto il nuovo parametro di aggancio + table.insert( vCmd, { 21, dYDeltaA, 0}) + + EgtOutLog( ' YDeltaA =' .. EgtNumToString( dYDeltaA), 1) + -- reset contatore + EMC.CNT = nil + + SpecOutputCNT() + return vCmd +end --SpecAdjustCarrA3 + +--------------------------------------------------------------------- +local function AdjustPositionsForB( dNewYDelta, dNewVDelta, TCING, HCING, HOVM, bFixedDelta) + local REF_DIST = 1400 + local dYDelta = 0 + local dVDelta = 0 + -- incremento se possibile la distanza tra le due posizioni + if not bFixedDelta and ( dNewYDelta - dNewVDelta) < REF_DIST then + local dEffAddDist = ( REF_DIST - ( dNewYDelta - dNewVDelta)) / 2 + dYDelta = max( min( dEffAddDist, EMC.LB - dNewYDelta - MinJoin - TCING), 0) + dVDelta = max( min( dEffAddDist, dNewVDelta - MinJoin - HOVM - HCING), 0) + end + return dYDelta, dVDelta +end + +--------------------------------------------------------------------- +-- *** [B1] da carrello X1 a entrambi : X1 -> X1+X2 *** +--------------------------------------------------------------------- +function SpecAdjustCarrB1( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + EgtOutLog( ' *[B1] = X1 -> X1+X2', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X1 -> X1+X2'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + local dCorsaY = MaxX1 - MyMinX1 + local dCorsaV = MaxX2 - MinX2 + -- recupero le posizioni correnti + local dX1PosA = dTPosI + dYDeltaI + local dX2PosA = ParkX2 + local dTPosA = dTPosI + local dYDeltaA = dYDeltaI + local dVDeltaA = dX2PosA - dTPosA + local dNewYDelta + local dNewVDelta + -- incremento la distanza tra le due posizioni ( se abilitato e possibile) + local dYDeltaAgg, dVDeltaAgg = AdjustPositionsForB( dYDeltaF, dVDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, bFixedDelta) + -- tolleranze + local dYDeltaTol = dYDeltaAgg + GetDeltaTol( EMC.LB - dYDeltaF - dYDeltaAgg, EMC.TCING, EMC.HCING, EMC.HOVM, 'X1', bFixedDelta) + local dVDeltaTol = dVDeltaAgg + GetDeltaTol( dVDeltaF - dVDeltaAgg, EMC.TCING, EMC.HCING, EMC.HOVM, 'X2', bFixedDelta) + -- definisco criteri per movimenti 'significativi' in base alle 'nuove' tolleranze + local bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + local bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- reimposto i delta finali in caso di spostamenti richiesti significativi, tenuto conto delle tolleranze + if bYDeltaS then + dNewYDelta = dYDeltaF + dYDeltaTol / 2 + else + dNewYDelta = dYDeltaA + end + if bVDeltaS then + dNewVDelta = dVDeltaF - dVDeltaTol / 2 + else + dNewVDelta = dVDeltaA + end + + EgtOutLog(' YDeltaI=' .. EgtNumToString( dYDeltaA) .. ' VDeltaI(Park)='.. EgtNumToString( dVDeltaA) .. + ' TPosI='.. EgtNumToString( dTPosI), 1) + EgtOutLog(' YDeltaF=' .. EgtNumToString( dYDeltaF) .. ' VDeltaF=' .. EgtNumToString( dVDeltaF), 1) + EgtOutLog(' NewYDelta=' .. EgtNumToString( dNewYDelta) .. ' NewVDelta=' .. EgtNumToString( dNewVDelta), 1) + + -- risalita testa a Zmax + local bZmaxOk = false + + -- calcoli preliminari in caso di spostamento richiesto per V significativo + local dX1Pos, dX2Pos, dTPos + local dNewV, dExtraX2, bVxs + local dCorsaYfc, dCorsaVfc, dDistBkN, dCorsaYd, dCorsaVTd, dCorsaYTr, dCorsaVr, bXsw + if bVDeltaS then + -- definisco 'ExtraX2' con (Y+T) e V accentrati q.b. per la presa di V + dX1Pos, dX2Pos, dTPos = PosxExtraYV( dX1PosA, dX2PosA, dTPosA, MyMinX1, MaxX2, 'X2') + dNewV = dTPos + dNewVDelta + dExtraX2 = dNewV - MaxX2 -- se > 0 pos. V non direttamente 'raggiungibile' + bVxs = dExtraX2 > dVDeltaTol/2 -- ExtraX2 'significativo' + if bVxs then + -- calcolo le **corse disponibili** dei carrelli a partire da Y e V c.s.| + -- per allontanare q.p. Y e (V+T) + dCorsaYfc = MaxX1 - dX1Pos + dCorsaVfc = dX2Pos - MinX2 + dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- valuto le **corse di 'recupero'** dai due carrelli possibili riaccentrando (Y+T) e V + dCorsaYTr = dCorsaYd + (dX1Pos - MyMinX1) + dCorsaVr = dCorsaVTd + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaVr + dCorsaYTr + end + -- inizializzo + dX1PosA = dX1Pos + dX2PosA = dX2Pos + dTPosA = dTPos + end + + -- **[B1Vs-xsw]** posizione finale dNewV non raggiungibile, con |dExtraX2 > CorsaVr + CorsaYr| + while bXsw do + EmitComment( vCmd, '[B1Vs-xsw]') + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + -- |1:| imposto (Y+T) e V come calcolato sopra + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- |2:| allontano Y e (V+T) quanto possibile + dX1PosA = dX1PosA + dCorsaYd + dX2PosA = dX2PosA - dCorsaVTd + dTPosA = dTPosA - dCorsaVTd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- |3:| accentro (Y+T) e V + dX1PosA = dX1PosA - dCorsaYTr + dTPosA = dTPosA - dCorsaYTr + dX2PosA = MaxX2 + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- valuto i Delta ottenuti + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- aggiorno l'extra corsa residuo per V + dExtraX2 = dExtraX2 - dCorsaYTr - dCorsaVr + + -- **aggiorno la valutazione delle corse disponibili** + -- a partire da Y e V c.s. per allontanare q.p. Y e (V+T) + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- aggiorno i prossimi recuperi disponibili + dCorsaYTr = dCorsaYd + dCorsaVr = dCorsaVTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaVr + dCorsaYTr + end --[B1Vs-xw] + + -- **[B1Vs]** se lo |spostamento| finale richiesto (ev' residuo) di |V| è |'significativo'| + if bVDeltaS then + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- **[B1Vs-x]** posizione di |V non raggiungibile| + if dExtraX2 > 0 then + -- **[B1Vs-xs]** |ExtraX2 'signfificativo'| + -- (ExtraX2 <= (CorsaYr+CorsaVr) da ciclo precedente ) + if bVxs then + local dCorsaYTrA = dX1PosA - MyMinX1 + local dCorsaVra = MaxX2 - dX2PosA + -- **[B1Vs-xs1]** se posso recuperare ExtraX2 semplicem' accentrando V e (Y+T) + -- ulteriormente rispetto a YPos e Vpos definiti c.s. + if dCorsaYTrA >= dExtraX2 then + EmitComment( vCmd, '[B1Vs-xs1]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1: accentro** (Y+T) e V + dX1PosA = dX1PosA - dExtraX2 + dTPosA = dTPosA - dExtraX2 + dX2PosA = MaxX2 -- (pos. finale) + dVDeltaA = dX2PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + + else -- **[B1Vs-xs2]** + EmitComment( vCmd, '[B1Vs-xs2]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1: accentro** ev' (Y+T) e V alle posizioni impostate + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + dVDeltaA = dX2PosA - dTPosA + + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **2: allontano** (V+T) e Y + -- tenendo conto di dover 'recuperare' ExtraX2.... + local dX1Pos1, dX2Pos1, dTPos1 = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX2, dCorsaYTrA, dCorsaYd, dCorsaVTd, 'X2') + local dYDispl1 = dX1Pos1 - dX1PosA + local dVDispl1 = dX2Pos1 - dX2PosA + --local dTDispl1 = dTPos1 - dTPosA + local dYDeltaDiff = dNewYDelta - (dX1Pos1 - dTPos1) + -- ...e anche di posizionare possibilmente Y alla posizione finale + if dYDeltaDiff > 0 then + dCorsaYfc = MaxX1 - dX1Pos1 + dCorsaVfc = dX2Pos1 - MinX2 + dDistBkN = EMC.LB - (dX1Pos1-dTPos1) - MinJoin - EMC.TCING -- DistBack1 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1Pos1, dX2Pos1, dTPos1, dYDeltaDiff, 0, dCorsaYd, dCorsaVTd, 'X2') + else + dX1PosA = dX1Pos1; dX2PosA = dX2Pos1; dTPosA = dTPos1 + end + + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + + -- chiudo il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **3: accentro** (Y+T) e V + dX1PosA = dX1PosA - dYDispl1 - dCorsaYTrA -- POS. FINALE + dTPosA = dTPosA - dYDispl1 - dCorsaYTrA + dX2PosA = dX2PosA - dVDispl1 + dCorsaVra -- POS. FINALE + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [B1Vs-xs1/-xs2] + + -- **[B1Vs-xn]** |dExtraX2 ancora > 0 ma non 'significativo')| + else --if dExtraX2 < DeltaToll/2 + EmitComment( vCmd, '[B1Vs-xn]') + -- ev' chiudo Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- 1: accentro (Y+T) alla posizione impostate e V al max + dExtraX2 = 0 + dX2PosA = MaxX2 -- (pos. finale) + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [B1s-xs/xn] + + -- **[B1Vs-r]** |dExtraX2 < 0 (pos. V raggiungibile)| + else + EmitComment( vCmd, '[B1Vs-r]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- posiziono ev' (Y+T) come impostato sopra e V in posizione finale + dX2PosA = dTPosA + dNewVDelta + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [B1Vs] + + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + + else -- **[B1Vns]** |spostamento| finale richiesto (ev' residuo) di |V non 'significativo'| + EmitComment( vCmd, '[B1Vns]') + if SpecTestOnlyRemarkInCmds( vCmd) then + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- emetto posizione di V + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end + end -- [B1-s/ns] + + -- aggiorno la verifica di movimento 'significativo' per Y + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + -- **[B1Ys]** Se vi è uno |spostamento residuo di Y significativo'| + if bYDeltaS then + EmitComment( vCmd, '[B1Ys]') + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + local dNewY = dTPosA + dNewYDelta + local dExtraX1 = dNewY - MyMinX1 + -- **[B1Ys-r]** se pos. NewY è raggiungibile direttamente + if dExtraX1 >= 0 then --dNewY > MyMinX1 then + EmitComment( vCmd, '[B1Ys-r]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- sposto il carrello Y + dX1PosA = dTPosA + dNewYDelta + table.insert( vCmd, { 1, 'X1', dX1PosA}) + + -- **[B1Ys-xn]** se pos. NewY non è raggiungibile direttamente, ma ExtraX1 non è 'significativo' + elseif -dExtraX1 <= dYDeltaTol / 2 then + EmitComment( vCmd, '[B1Ys-xn]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- accentro Y + dX1PosA = MyMinX1 + table.insert( vCmd, { 1, 'X1', dX1PosA}) + -- [B1sY-nr.xs] ma ExtraX1 'significativo' + + else -- **[B1Ys-xs]** + EmitComment( vCmd, '[B1Ys-xs]') + EgtOutLog( ' CLAMP : caso [B1Ys-xs] non gestito') + error( ' CLAMP : caso [B1Ys-xs] non gestito') + + end --[B1Ys-r/-nr] + else -- [B1Yns] spostamento residuo di Y non significativo + EmitComment( vCmd, '[B1Yns]') + end -- [B1Ys/ns] + + -- calcolo i nuovi parametri di aggancio + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- se non emessi movimenti, imposto posizione V + if not bZmaxOk then + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end + -- imposto stato carrelli, per eventuale uso pressori (sempre eseguita risalita Z) + table.insert( vCmd, { 11, CalcCharStatus( 'X1', dYDeltaA)}) + table.insert( vCmd, { 12, CalcCharStatus( 'X2', dVDeltaA)}) + -- imposto i nuovi parametri di aggancio + table.insert( vCmd, { 21, dYDeltaA, dVDeltaA}) + + EgtOutLog( ' YDeltaA =' .. EgtNumToString( dYDeltaA) .. ' VDeltaA =' .. EgtNumToString( dVDeltaA), 1) + -- reset contatore + EMC.CNT = nil + + SpecOutputCNT() + return vCmd +end -- SpecAdjustCarrB1 + +--------------------------------------------------------------------- +-- *** [B2] da entrambi a entrambi i carrelli : X1+X2 -> X1+X2 *** +--------------------------------------------------------------------- +function SpecAdjustCarrB2( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + EgtOutLog( ' *[B2] = X1+X2 -> X1+X2', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X1+X2 -> X1+X2'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + -- recupero le posizioni correnti + local dX1PosA = dTPosI + dYDeltaI + local dX2PosA = dTPosI + dVDeltaI + local dTPosA = dTPosI + local dYDeltaA = dYDeltaI + local dVDeltaA = dVDeltaI + local dNewYDelta + local dNewVDelta + -- incremento la distanza tra le due posizioni ( se abilitato e possibile) + local dYDeltaAgg, dVDeltaAgg = AdjustPositionsForB( dYDeltaF, dVDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, bFixedDelta) + -- tolleranze + local dYDeltaTol = dYDeltaAgg + GetDeltaTol( EMC.LB - dYDeltaF - dYDeltaAgg, EMC.TCING, EMC.HCING, EMC.HOVM, 'X1', bFixedDelta) + local dVDeltaTol = dVDeltaAgg + GetDeltaTol( dVDeltaF - dVDeltaAgg, EMC.TCING, EMC.HCING, EMC.HOVM, 'X2', bFixedDelta) + -- definisco criteri per movimenti 'significativi' in base alle 'nuove' tolleranze + local bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + local bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- reimposto i delta finali in caso di spostamenti richiesti significativi, tenuto conto delle tolleranze + if bYDeltaS then + dNewYDelta = dYDeltaF + dYDeltaTol / 2 + else + dNewYDelta = dYDeltaA + end + if bVDeltaS then + dNewVDelta = dVDeltaF - dVDeltaTol / 2 + else + dNewVDelta = dVDeltaA + end + -- definisco 'ExtraX1' e ExtraX2' + local dNewY = dTPosA + dNewYDelta + local dNewV = dTPosA + dNewVDelta + local dExtraX1 = dNewY - MyMinX1 -- < 0 => nuova pos. di Y 'non raggiungibile' + local dExtraX2 = dNewV - MaxX2 -- > 0 => nuova pos. di V 'non raggiungibile' + local bYxs = -dExtraX1 > dYDeltaTol/2 + local bVxs = dExtraX2 > dVDeltaTol/2 + + EgtOutLog( ' YDeltaI=' .. EgtNumToString( dYDeltaI) .. ' VDeltaI=' .. EgtNumToString( dVDeltaI) .. + ' TPosI='.. EgtNumToString( dTPosI), 1) + EgtOutLog( ' YDeltaF=' .. EgtNumToString( dYDeltaF) .. ' VDeltaF=' .. EgtNumToString( dVDeltaF), 1) + EgtOutLog( ' NewYDelta=' .. EgtNumToString( dNewYDelta) .. ' NewVDelta=' .. EgtNumToString( dNewVDelta), 1) + -- flag risalita a Zmax + local bZmaxOk = false + + -- **[B2V]** |accentramento di V| + if dVDeltaF > dVDeltaI then + EmitComment( vCmd, '[B2V]') + + -- calcoli preliminari in caso di spostamento richiesto per V significativo + local dCorsaYfc, dCorsaVfc, dDistBkN, dCorsaYd, dCorsaVTd, dCorsaYTr, dCorsaVr, bXsw + if bVDeltaS then + -- eventuale risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + if bVxs then + -- calcolo le corse disponibili dei carrelli **dalle posizioni iniziali** + -- per allontanare Y e (V+T) + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- calcolo le corse di 'recupero' accentrando (Y+T) e V dopo l'allontanamento + dCorsaYTr = dCorsaYd + (dX1PosA - MyMinX1) + dCorsaVr = dCorsaVTd -- ((MaxX2-dNewV) non fa parte del recupero in quanto già disponibile!) + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaYTr + dCorsaVr + end + end + + -- **[B2V-xsw]** posizione NewV non raggiungibile, con |dExtraX2 > CorsaVr + CorsaYTr| + -- e spostamento richiesto di V significativo; + while bXsw do + EmitComment( vCmd, '[B2V-xsw]') + + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1**: allontano Y e V(+T) quanto possibile + dX1PosA = dX1PosA + dCorsaYd + dX2PosA = dX2PosA - dCorsaVTd + dTPosA = dTPosA - dCorsaVTd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **2:** accentro (Y+T) e V + dX1PosA = dX1PosA - dCorsaYTr -- = MyMinX1 + dTPosA = dTPosA - dCorsaYTr + dX2PosA = MaxX2 + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- valuto Delta ottenuti + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- aggiorno ExtraX2 residuo + dExtraX2 = dExtraX2 - dCorsaYTr - dCorsaVr + -- **aggiorno i recuperi disponibili** riallontanando Y e (V+T) e riaccentrando (Y+T) e V + dCorsaYfc = dCorsaY -- MaxX1 - dNewY + dCorsaVfc = dCorsaV -- dNewV - MinX2 + dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + dCorsaYTr = dCorsaYd + dCorsaVr = dCorsaVTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaYTr + dCorsaVr + end -- [B2V-xsw] + + + --[B2Vs] |accentramento| (ev' residuo) |di V 'significativo'| + if bVDeltaS then + --[B2Vs-x] accentramento di V 'significativo' |con pos. NewV 'non raggiungibile'|(= oltre MaxX2) + if dExtraX2 > 0 then + -- (ExtraX2 <= (CorsaYTr+CorsaVr) da ciclo precedente) + --[B2Vs-xs] accentramento di V con |ExtraX2 'significativo'| + if bVxs then + local dCorsaYTrA = dX1PosA - MyMinX1 + local dCorsaVra = MaxX2 - dX2PosA + -- **[B2Vs-xs1]** se posso recuperare ExtraX2 solo accentrando V e (Y+T) + if dCorsaYTrA >= dExtraX2 then + EmitComment( vCmd, '[B2Vs-xs1]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1:** accentro (Y+T) q.b. e V + dX1PosA = dX1PosA - dExtraX2 + dTPosA = dTPosA - dExtraX2 + dX2PosA = MaxX2 -- (pos. finale) + dExtraX2 = 0 + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + + else -- **[B2Vs-xs2]** + EmitComment( vCmd, '[B2Vs-xs2]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1: allontano** (V+T) e Y + -- tenendo conto di dover 'recuperare' ExtraX2... + local dX1Pos1, dX2Pos1, dTPos1 = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX2, dCorsaYTrA, dCorsaYd, dCorsaVTd, 'X2') + local dYDispl1 = dX1Pos1 - dX1PosA + local dVDispl1 = dX2Pos1 - dX2PosA + --local dTDispl1 = dTPos1 - dTPosA + local dYDeltaDiff = dNewYDelta - (dX1Pos1 - dTPos1) + -- ...e anche possibilmente di posizionare Y alla posizione finale + if dYDeltaDiff > 0 then + dCorsaYfc = MaxX1 - dX1Pos1 + dCorsaVfc = dX2Pos1 - MinX2 + dDistBkN = EMC.LB - (dX1Pos1-dTPos1) - MinJoin - EMC.TCING -- DistBack1 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + --dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1Pos1, dX2Pos1, dTPos1, dYDeltaDiff, 0, dCorsaYd-dYDispl1, dCorsaVTd+dVDispl1, 'X2') + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1Pos1, dX2Pos1, dTPos1, dYDeltaDiff, 0, dCorsaYd, dCorsaVTd, 'X2') + else + dX1PosA = dX1Pos1; dX2PosA = dX2Pos1; dTPosA = dTPos1 + end + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + -- chiudo il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **2: accentro** (Y+T) e V + dX1PosA = dX1PosA - dYDispl1 - dCorsaYTrA -- POS. FINALE + dTPosA = dTPosA - dYDispl1 - dCorsaYTrA + dX2PosA = dX2PosA - dVDispl1 + dCorsaVra -- POS. FINALE + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [B2Vs-xs1/xs2] + + -- **[B2Vs-xn]** |dExtraX2 non 'significativo'| + else + EmitComment( vCmd, '[B2Vs-xn]') + dExtraX2 = 0 + -- ev' chiudo Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- 1: posiziono V assumendo maxX2 come pos. finale + dX2PosA = MaxX2 -- (pos finale) + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end -- [B2Vs-xs/xn] + + -- **[B2Vs-r]** accentramento di |V| 'significativo' con pos.|'raggiungibile'| (= non oltre MaxX2) + else + EmitComment( vCmd, '[B2Vs-r]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- 1: posiziono V -- (pos finale) + dX2PosA = dTPosA + dNewVDelta + dExtraX2 = 0 + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end --[B2Vs] + + -- **[B2Vns]** accentramento di V non 'significativo'| + else + EmitComment( vCmd, '[B2Vns]') + dExtraX2 = 0 + end --[B2Vs/ns] + end --[B2V] ( accentramento di V) + + -- --------------------------------------------------------------------------- + -- **[B2Y]** |accentramento di Y| + if dYDeltaF < dYDeltaI then + EmitComment( vCmd, '[B2Y]') + + -- calcoli preliminari in caso di spostamento richiesto per Y significativo + local dCorsaYfc, dCorsaVfc, dDistFrN, dCorsaYTd, dCorsaVd, dCorsaVTr, dCorsaYr + if bYDeltaS then + -- eventuale risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + if bYxs then + -- calcolo le **corse disponibili** dei carrelli dalle posizioni iniziali + -- per allontanare (Y+T) e V + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto le corse di 'recupero' dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + (MaxX2 - dX2PosA) + dCorsaYr = dCorsaYTd + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaVTr + dCorsaYr + end + end + + -- **[B2Ys-xsw]** |-dExtraX1 > dCorsaYr + dCorsaVTr| + while bXsw do + EmitComment( vCmd, '[B2Y-xsw]') + + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- |1:| allontano (Y+T) e V quanto possibile + dX1PosA = dX1PosA + dCorsaYTd + dTPosA = dTPosA + dCorsaYTd + dX2PosA = dX2PosA - dCorsaVd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + + -- |2:| accentro Y e (V+T) + dX1PosA = MyMinX1 -- = dX1PosA - dCorsaYr + dX2PosA = dX2PosA + dCorsaVTr -- = MaxX2 + dTPosA = dTPosA + dCorsaVTr + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- valuto Delta 'attuali' + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- aggiorno ExtraX1 residuo + dExtraX1 = dExtraX1 + dCorsaYr + dCorsaVTr + -- aggiorno i recuperi disponibili riallontanando (Y+T) V e riaccentrando succ' Y e (V+T) + dCorsaYfc = dCorsaY -- MaxX1 - dNewY + dCorsaVfc = dCorsaV -- dNewV - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto le corse di 'recupero' dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + dCorsaYr = dCorsaYTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaVTr + dCorsaYr + end -- [B2Ys-xsw] + + -- **[B2Ys]** |accentramento di Y 'significativo'| + if bYDeltaS then + -- **[B2Ys-x]** accentramento di Y 'significativo' |con pos. NewY 'non raggiungibile'|(= oltre MyMinX1) + if dExtraX1 < 0 then + -- (-ExtraX1 <= (dCorsaYr + dCorsaVTr ) a ciclo precedente + -- **[B2Ys-xs]** accentramento di Y con |'ExtraX1 'significativo'| + if bYxs then + local dCorsaVTrA = MaxX2 - dX2PosA + local dCorsaYra = dX1PosA - MyMinX1 + -- **[B2Ys-xs1]** se posso recuperare ExtraX1 solo accentrando Y e (V+T) + if dCorsaVTrA >= -dExtraX1 then + EmitComment( vCmd, '[B2Ys-xs1]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- accentro Y e (V+T) q.b. + dX1PosA = MyMinX1 -- (pos. finale) + dX2PosA = dX2PosA - dExtraX1 -- = +(-dExtraX1) + dTPosA = dTPosA - dExtraX1 -- = +(-dExtraX1) + dExtraX1 = 0 + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + + else -- **[B2Ys-xs2]** + EmitComment( vCmd, '[B2Ys-xs2]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1: allontano** (Y+T) e V + -- tenendo conto di dover 'recuperare' ExtraX1... + dX1Pos1, dX2Pos1, dTPos1 = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX1, dCorsaVTrA, dCorsaYTd, dCorsaVd, 'X1') + local dYDispl1 = dX1Pos1 - dX1PosA + local dVDispl1 = dX2Pos1 - dX2PosA + local dVDeltaDiff = dNewVDelta - (dX2Pos1 - dTPos1) + -- ...e anche possibilmente di posizionare V alla posizione finale + if dVDeltaDiff < 0 then + dCorsaYfc = MaxX1 - dX1Pos1 + dCorsaVfc = dX2Pos1 - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront1 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1Pos1, dX2Pos1, dTPos1, dVDeltaDiff, 0, dCorsaYTd, dCorsaVd, 'X1') + else + dX1PosA = dX1Pos1; dX2PosA = dX2Pos1; dTPosA = dTPos1 + end + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + --dVDeltaA = dX2PosA - dTPosA + -- chiudo il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- |2:| accentro Y e (V+T) + dX1PosA = dX1PosA - dYDispl1 - dCorsaYra -- POS. FINALE + dX2PosA = dX2PosA - dVDispl1 + dCorsaVTrA -- POS. FINALE + dTPosA = dTPosA - dVDispl1 + dCorsaVTrA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [B2Ys-xs1/xs2] + + -- **[B2Ys-xn]** |dExtraX1 non 'significativo'| + else + EmitComment( vCmd, '[B2Ys-xn]') + dExtraX1 = 0 + -- ev' chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- 1: posiziono Y assumendo MyMinX1 come pos. finale + dX1PosA = MyMinX1 -- (pos finale) + table.insert( vCmd, { 1, 'X1', dX1PosA}) + end -- [B2Ys-xs/xn] + + --[B2Ys-r] accentramento di |Y| 'significativo' con pos.|'raggiungibile'| (non oltre MyMinX1) + else + EmitComment( vCmd, '[B2Ys-r]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- |1:| posiziono Y -- (pos finale) + dX1PosA = dTPosA + dNewYDelta + dExtraX2 = 0 + table.insert( vCmd, { 1, 'X1', dX1PosA}) + end --[B2Ys] + + -- [B2Yns] accentramento di V non 'significativo'| + else + EmitComment( vCmd, '[B2Yns]') + dExtraX2 = 0 + end --[B2Ys/ns] + end --[B2Y] ( accentramento di V) + + -- ricalcolo gli 'spostamenti significativi' + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + + -- ------------------------------------------------------------------------------------------ + -- **[B2C]** |Spostamenti| di Y e/o V (ev' |residui| da cicli precedenti) + -- ++ possono essere solo allontanamenti ? +++++++++++++++++++++ + EmitComment( vCmd, '[B2C]') + -- **[B2Cs]** se c'è uno |spostamento (ev' residuo) significativo| + if bYDeltaS or bVDeltaS then + -- **[B2CYs]** se lo |spostamento (ev' residuo) di Y è 'significativo'| + if bYDeltaS then + EmitComment( vCmd, '[B2CYs]') + -- eventuale risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + local dNewY = dTPosA + dNewYDelta + local dExtraX1 = dNewY - MyMinX1 + + -- **[B2CYs-r]** se posizione di |Y raggiungibile| + if dExtraX1 >= 0 and dNewY <= MaxX1 then + EmitComment( vCmd, '[B2CYs-r]') + -- chiudo eventualmente V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- sposto il carrello Y + dX1PosA = dNewY + table.insert( vCmd, { 1, 'X1', dX1PosA}) + -- **[B2CYs-nr]** + else + EmitComment( vCmd, '[B2CYs-nr]') + EgtOutLog( ' CLAMP : posizione Y non raggiungibile' .. '- caso [B2Ys-nr] non gestito') + error( 'CLAMP : posizione Y non raggiungibile') + end + end -- [B2CYs] + + -- **[B2CVs]** se lo |spostamento (ev' residuo) di V è 'significativo'| + if bVDeltaS then + EmitComment( vCmd, '[B2CVs]') + -- eventuale risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + local dNewV = dTPosA + dNewVDelta + local dExtraX2 = dNewV - MaxX2 + + -- **[B2CVs-r]** se posizione NewV raggiungibile + if dExtraX2 <= 0 and dNewV >= MinX2 then + EmitComment( vCmd, '[B2CVs-r]') + -- chiudo eventualmente Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- sposto il carrello V + dX2PosA = dNewV + table.insert( vCmd, { 1, 'X2', dX2PosA}) + -- **[B2CVs-nr]** + else -- se ExtraX2 > 0 anche se non significativo + EmitComment( vCmd, '[B2CVs-nr]') + EgtOutLog( ' CLAMP : posizione V non raggiungibile' .. '- caso [B2cVs-nr] non gestito') + error( 'CLAMP : posizione V non raggiungibile') + end + end --[B2CsV] + + -- **[B2Cn]** |nessuno spostamento (ev' residuo significativo)| + else + EmitComment( vCmd, '[B2Cn]') + end -- [B2C] + + -- calcolo i nuovi parametri di aggancio + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- imposto stato carrelli, per eventuale uso pressori + table.insert( vCmd, { 11, CalcCharStatus( 'X1', dYDeltaA)}) + table.insert( vCmd, { 12, CalcCharStatus( 'X2', dVDeltaA)}) + -- imposto i nuovi parametri di aggancio + table.insert( vCmd, { 21, dYDeltaA, dVDeltaA}) + + EgtOutLog( ' YDeltaA =' .. EgtNumToString( dYDeltaA) .. ' VDeltaA =' .. EgtNumToString( dVDeltaA), 1) + -- reset contatore + EMC.CNT = nil + + SpecOutputCNT() + return vCmd +end --SpecAdjustCarrB2 + +--------------------------------------------------------------------------------------------------------- +-- *** [B3] da carrello X2 a entrambi i carrelli : X2 -> X1+X2 *** +--------------------------------------------------------------------------------------------------------- +function SpecAdjustCarrB3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + EgtOutLog( ' *[B3] = X2 -> X1+X2', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X2 -> X1+X2'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + local dCorsaY = MaxX1 - MyMinX1 + local dCorsaV = MaxX2 - MinX2 + -- recupero le posizioni correnti + local dX2PosA = dTPosI + dVDeltaI + local dX1PosA = ParkX1 + local dTPosA = dTPosI + local dVDeltaA = dVDeltaI + local dYDeltaA = dX1PosA - dTPosA + local dNewYDelta + local dNewVDelta + -- incremento la distanza tra le due posizioni ( se abilitato e possibile) + local dYDeltaAgg, dVDeltaAgg = AdjustPositionsForB( dYDeltaF, dVDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, bFixedDelta) + -- tolleranze + local dYDeltaTol = dYDeltaAgg + GetDeltaTol( EMC.LB - dYDeltaF - dYDeltaAgg, EMC.TCING, EMC.HCING, EMC.HOVM, 'X1', bFixedDelta) + local dVDeltaTol = dVDeltaAgg + GetDeltaTol( dVDeltaF - dVDeltaAgg, EMC.TCING, EMC.HCING, EMC.HOVM, 'X2', bFixedDelta) + -- definisco criteri per movimenti 'significativi' in base alle 'nuove' tolleranze + local bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + local bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- reimposto i delta finali in caso di spostamenti richiesti significativi, tenuto conto delle tolleranze + if bYDeltaS then + dNewYDelta = dYDeltaF + dYDeltaTol / 2 + else + dNewYDelta = dYDeltaA + end + if bVDeltaS then + dNewVDelta = dVDeltaF - dVDeltaTol / 2 + else + dNewVDelta = dVDeltaA + end + + EgtOutLog( ' YDeltaI(Park)='.. EgtNumToString( dYDeltaA)..' VDeltaI=' .. EgtNumToString( dVDeltaA) .. + ' TPosI='.. EgtNumToString( dTPosI), 1) + EgtOutLog( ' YDeltaF=' .. EgtNumToString( dYDeltaF) .. ' VDeltaF=' .. EgtNumToString( dVDeltaF), 1) + EgtOutLog( ' NewYDelta=' .. EgtNumToString( dNewYDelta) .. ' NewVDelta=' .. EgtNumToString( dNewVDelta), 1) + -- risalita testa a Zmax + local bZmaxOk = false + + -- calcoli preliminari in caso di spostamento richiesto per Y significativo + local dX1Pos, dX2Pos, dTPos + local dNewY, dExtraX1, bYxs + local dCorsaYfc, dCorsaVfc, dDistFrN, dCorsaYTd, dCorsaVd, dCorsaVTr, dCorsaYr, bXsw + if bYDeltaS then + -- definisco 'ExtraX1' con (V+T) e Y accentrati q.b. per la presa di Y + dX1Pos, dX2Pos, dTPos = PosxExtraYV( dX1PosA, dX2PosA, dTPosA, MyMinX1, MaxX2, 'X1') + dNewY = dTPos + dNewYDelta + dExtraX1 = dNewY - MyMinX1 -- se < 0 pos. Y non direttamente 'raggiungibile' + bYxs = -dExtraX1 > dYDeltaTol/2 -- ExtraX1 'significativo' + if bYxs then + -- calcolo le **corse disponibili dei carrelli a partire da Y e V c.s.** per allontanare q.p. (Y+T) e V + dCorsaYfc = MaxX1 - dX1Pos + dCorsaVfc = dX2Pos - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto **le corse di 'recupero'** dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + (MaxX2 - dX2Pos) + dCorsaYr = dCorsaYTd + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaVTr + dCorsaYr + end + -- inizializzo + dX1PosA = dX1Pos + dX2PosA = dX2Pos + dTPosA = dTPos + end + + -- **[B3Ys-xsw]** posizione finale dNewV non raggiungibile, con |dExtraX1 > CorsaVr + CorsaYr| + while bXsw do + EmitComment( vCmd, '[B3Ys-xsw]') + + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + -- |1:| posiziono (V+T) e Y come calcolato sopra + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- |2:| allontano (Y+T) e V quanto possibile + dX1PosA = dX1PosA + dCorsaYTd + dTPosA = dTPosA + dCorsaYTd + dX2PosA = dX2PosA - dCorsaVd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- |3:| accentro (V+T) e Y + dX2PosA = dX2PosA + dCorsaVTr + dTPosA = dTPosA + dCorsaVTr + dX1PosA = MyMinX1 + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- valuto i Delta ottenuti + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bYDeltaS = ( dYDeltaF < dYDeltaA - dYDeltaTol or dYDeltaF > dYDeltaA + DELTA_SIC) + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- aggiorno ExtraX1 + dExtraX1 = dExtraX1 + dCorsaYr + dCorsaVTr + + -- **aggiorno la valutazione delle corse disponibili** + -- a partire da Y e V c.s. per allontanare q.p. (Y+T) e V + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + -- valuto le corse di 'recupero' dai due carrelli possibili riaccentrando Y e (V+T) + dCorsaVTr = dCorsaVd + dCorsaYr = dCorsaYTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bYDeltaS and bYxs and -dExtraX1 > dCorsaVTr + dCorsaYr + end --[B3Ys-xsw] + + -- **[B3Ys]** |spostamento| finale richiesto (ev' residuo) di |Y| |'significativo'| + if bYDeltaS then + EmitComment( vCmd, '[B3Ys]') + + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + -- **[B3Ys-x]** posizione di |Y non raggiungibile| + -- ( -dExtraX1 <= (CorsaYr+CorsaVr) da ciclo precedente ) + if dExtraX1 < 0 then + --EmitComment( vCmd, '[B3Ys-x]') + + -- **[B3Ys-xs]** |ExtraX1 'significativo'| + if bYxs then + --EmitComment( vCmd, '[B3Ys-xs]') + + local dCorsaVTrA = MaxX2 - dX2PosA + local dCorsaYra = dX1PosA - MyMinX1 + -- **[B3Ys-xs1]** se posso recuperare ExtraX1 semplicem' accentrando Y e (V+T) + -- ulteriormente rispetto a YPos e Vpos definiti c.s. + if dCorsaVTrA >= -dExtraX1 then + EmitComment( vCmd, '[B3Ys-xs1]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1: accentro** Y e (V+T) + dX1PosA = MyMinX1 -- (pos. finale) + dX2PosA = dX2PosA - dExtraX1 + dTPosA = dTPosA - dExtraX1 + dYDeltaA = dX1PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + + else -- **[B3Ys-xs2]** + EmitComment( vCmd, '[B3Ys-xs2]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1: accentro** ev' Y e (V+T) alle posizioni impostate + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + dYDeltaA = dX1PosA - dTPosA + + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **2: allontano** (Y+T) e V + -- tenendo conto di dover 'recuperare' ExtraX1... + dX1Pos1, dX2Pos1, dTPos1 = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX1, dCorsaVTrA, dCorsaYTd, dCorsaVd, 'X1') + local dYDispl1 = dX1Pos1 - dX1PosA + local dVDispl1 = dX2Pos1 - dX2PosA + local dVDeltaDiff = dNewVDelta - (dX2Pos1 - dTPos1) + -- ...e anche di posizionare possibilmente V alla posizione finale + if dVDeltaDiff < 0 then + CorsaYfc = MaxX1 - dX1Pos1 + dCorsaVfc = dX2Pos1 - MinX2 + dDistFrN = dVDeltaA - MinJoin - EMC.HCING - EMC.HOVM -- DistFront1 'netta' + dCorsaYTd, dCorsaVd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistFrN, 'Fr') + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1Pos1, dX2Pos1, dTPos1, dVDeltaDiff, 0, dCorsaYTd, dCorsaVd, 'X1') + else + dX1PosA = dX1Pos1; dX2PosA = dX2Pos1; dTPosA = dTPos1 + end + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + + -- chiudo il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **3: accentro** Y e (V+T) + dX1PosA = dX1PosA - dYDispl1 - dCorsaYra -- POS. FINALE + dX2PosA = dX2PosA - dVDispl1 + dCorsaVTrA -- POS. FINALE + dTPosA = dTPosA - dVDispl1 + dCorsaVTrA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [B3Ys-xs1/-xs2] + + -- **[B3Ys-xn]** |dExtraX1 ancora < 0 ma non 'significativo')| + else --if -dExtraX1 < DeltaToll/2 + EmitComment( vCmd, '[B3Ys-xn]') + -- ev' chiudo V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- 1: accentro Y e porto (V+T) alla posizione impostata + dExtraX1 = 0 + dX1PosA = MyMinX1 -- (pos. finale) + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end --[B3Ys-xs/xn] + + -- **[B3Ys-r]** |dExtraX1 > 0 (pos. Y raggiungibile)| + else + EmitComment( vCmd, '[B3Ys-r]') + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- posizione ev' (V+T) come impostato sopra e Y in posizione finale + dX1PosA = dTPosA + dNewYDelta + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [B3Ys] + -- + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + + else -- [B3Yns] |spostamento| finale richiesto (ev' residuo) di |Y non 'significativo'| + EmitComment( vCmd, '[B3Yns]') + end --[B3Ys/ns] + + -- aggiorno la verifica di movimento 'significativo' per V + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- **[B3Vs]** Se vi è uno |spostamento residuo di V significativo'| + if bVDeltaS then + EmitComment( vCmd, '[B3Vs]') + + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + local dNewV = dTPosA + dNewVDelta + local dExtraX2 = dNewV - MaxX2 + + -- **[B3Vs-x]** se pos. |NewV non è raggiungibile direttamente| (oltre MaxX2) + if dExtraX2 > 0 then --dNewV <= MaxX2 then + -- **[B3Vs-xs]** |ExtraX2 'significativo'| + if dExtraX2 > dVDeltaTol /2 then + EmitComment( vCmd, '[B3Vs-xs]') + EgtOutLog( ' CLAMP : caso [B3Vs-xs] non gestito') + error( ' CLAMP : caso [B3Vs-xs] non gestito') + + -- **[B3Vs-xn]** |ExtraX2 non 'significativo'| + else + EmitComment( vCmd, '[B3Vs-xn]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- accentro V q.p. + dX2PosA = MaxX2 + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end -- [B3Vs-xs/xn] + + else -- **[B3Vs-r]** pos. |NewV raggiungibile direttamente| (non oltre MaxX2) + EmitComment( vCmd, '[B3Vs-r]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- sposto il carrello V + dX2PosA = dNewV + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end --[B3Vs-x/-r] + + else -- [B3Vns] spostamento residuo di V non significativo + EmitComment( vCmd, '[B3Vns]') + end -- [B3Vs/ns] + + -- calcolo i nuovi parametri di aggancio + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- se non emessi movimenti, imposto posizione Y + if not bZmaxOk then + -- risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + table.insert( vCmd, { 1, 'X1', dX1PosA}) + end + -- imposto stato carrelli, per eventuale uso pressori (sempre effettuato movimento) + table.insert( vCmd, { 11, CalcCharStatus( 'X1', dYDeltaA)}) + table.insert( vCmd, { 12, CalcCharStatus( 'X2', dVDeltaA)}) + -- imposto i nuovi parametri di aggancio + table.insert( vCmd, { 21, dYDeltaA, dVDeltaA}) + + EgtOutLog( ' YDeltaA =' .. EgtNumToString( dYDeltaA) .. ' VDeltaA =' .. EgtNumToString( dVDeltaA), 1) + -- reset contatore + EMC.CNT = nil + + SpecOutputCNT() + return vCmd +end -- SpecAdjustCarrB3 + +--------------------------------------------------------------------- +-- *** [C1] da carrello X1 a X2 : X1 -> X2 *** +--------------------------------------------------------------------- +function SpecAdjustCarrC1( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + EgtOutLog( ' *[C1] = X1 -> X2 ', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X1 -> X2'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + -- recupero le posizioni correnti + --local dCorsaY = MaxX1 - MyMinX1 + --local dCorsaV = MaxX2 - MinX2 + local dX1PosA = dTPosI + dYDeltaI + local dX2PosA = ParkX2 + local dTPosA = dTPosI + local dYDeltaA = dYDeltaI + local dVDeltaA = dX2PosA - dTPosA + local dNewVDelta -- = dVDeltaF + -- tolleranza + local dVDeltaTol = GetDeltaTol( dVDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, 'X2', bFixedDelta) + local bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- reimposto i delta finali in caso di spostamenti richiesti significativi, tenuto conto delle tolleranze + if bVDeltaS then + dNewVDelta = dVDeltaF - dVDeltaTol / 4 + else + dNewVDelta = dVDeltaA + end + EgtOutLog(' YDeltaI=' .. EgtNumToString( dYDeltaA) .. ' VDeltaI(Park)='.. EgtNumToString( dVDeltaA).. + ' TPosI=' .. EgtNumToString( dTPosI) , 1) + EgtOutLog(' VDeltaF=' .. EgtNumToString( dVDeltaF) .. ' NewVDelta=' .. EgtNumToString( dNewVDelta) , 1) + + -- risalita testa a Zmax (da effettuare comunque, dato lo scambio di carrelli) + local bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + -- calcoli preliminari in caso di spostamento richiesto per V significativo + local dX1Pos, dX2Pos, dTPos + local dNewV, dExtraX2, bVxs + local dCorsaYfc, dCorsaVfc, dDistFrN, dCorsaYTd, dCorsaVd, dCorsaVTr, dCorsaYr, bXsw + if bVDeltaS then + -- definisco 'ExtraX2' con (Y+T) e V accentrati q.b. per la presa di V + dX1Pos, dX2Pos, dTPos = PosxExtraYV( dX1PosA, dX2PosA, dTPosA, MyMinX1, MaxX2, 'X2') + dNewV = dTPos + dNewVDelta + dExtraX2 = dNewV - MaxX2 + bVxs = dExtraX2 > dVDeltaTol/2 -- ExtraX2 'significativo' + if bVxs then + -- calcolo le **corse disponibili dei carrelli a partire da Y e V c.s.** per allontanare q.p. Y e (V+T) + dCorsaYfc = MaxX1 - dX1Pos + dCorsaVfc = dX2Pos - MinX2 + --local dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dDistBkN = EMC.LB - (dX1Pos-dTPos) - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- valuto le corse di 'recupero' dai due carrelli possibili riaccentrando (Y+T) e V + dCorsaYTr = dCorsaYd + (dX1Pos -MyMinX1) + dCorsaVr = dCorsaVTd + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaVr + dCorsaYTr + end + -- inizializzo + dX1PosA = dX1Pos + dX2PosA = dX2Pos + dTPosA = dTPos + end + + -- **[C1Vs-xsw]** posizione finale di V non raggiungibile, con |dExtraX2 > CorsaVr + CorsaYr| + -- con spostamento richiesto significativo e ExtraX2 significativo + while bXsw do + EmitComment( vCmd, '[C1Vs-xsw]') + -- **1:** posiziono (Y+T) e V come calcolato sopra + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **2:** allontano Y e (V+T) quanto possibile + dX1PosA = dX1PosA + dCorsaYd + dX2PosA = dX2PosA - dCorsaVTd + dTPosA = dTPosA - dCorsaVTd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **3:** accentro (Y+T) e V + dX1PosA = dX1PosA - dCorsaYTr -- = MyMinX1 + dTPosA = dTPosA - dCorsaYTr + dX2PosA = MaxX2 + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- valuto i Delta ottenuti + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- **aggiorno ExtraX2** + dExtraX2 = dExtraX2 - dCorsaYTr - dCorsaVr + -- **aggiorno la valutazione di ulteriori corse disponibili** + -- a partire da Y e V c.s. per allontanare q.p. Y e (V+T) + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- aggiorno i prossimi recuperi disponibili + dCorsaYTr = dCorsaYd + dCorsaVr = dCorsaVTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaVr + dCorsaYTr + end --[C1Vs-xw] + + -- **[C1Vs]** |spostamento| richiesto (ev' residuo) |di V| |'significativo'| + if bVDeltaS then + -- **[C1Vs-x]** posizione di |V non raggiungibile| + if dExtraX2 > 0 then + -- (dExtraX2 <= (CorsaYr+CorsaVr) da ciclo precedente) + -- **[C1Vs-xs]** posizione di V non raggiungibile, |con ExtraX2 'significativo'| + if bVxs then + local dCorsaYTrA = dX1PosA - MyMinX1 + -- **[C1Vs-xs1]** se posso recuperare dExtraX2 solo accentrando V e (Y+T) + if dCorsaYTrA >= dExtraX2 then + EmitComment( vCmd, '[C1Vs-xs1]') + + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1:** accentro (Y+T) q.b. e V + dX1PosA = dX1PosA - dExtraX2 + dTPosA = dTPosA - dExtraX2 + dX2PosA = MaxX2 -- (pos. finale) + dVDeltaA = dX2PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + + -- **[C1Vs-xs2]** dCorsaYTrA < dExtraX2 + else + EmitComment( vCmd, '[C1Vs-xs2]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1: accentro** ev' (Y+T) e V alle posizioni impostate + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + dVDeltaA = dX2PosA - dTPosA + -- chiudo (ev') il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **2:allontano** (V+T) q.b./q.p. e Y per preparare il recupero di ExtraX2 + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX2, dCorsaYTrA, dCorsaYd, dCorsaVTd, 'X2') + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + dYDeltaA = dX1PosA - dTPosA + + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **3: accentro**(Y+T) e V (pos. finale) + dX1PosA = MyMinX1 + dTPosA = dX1PosA - dYDeltaA + dX2PosA = MaxX2 + dVDeltaA = dX2PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + end -- [C1Vs-xs1/xs2] + + -- **[C1Vs-xn]** |ExtraX2 ancora > 0 , ma non 'significativo'| (<= DeltaTol/2) + else + EmitComment( vCmd, '[C1Vs-xn]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- 1: porto ev' (Y+T) alla posizione impostata sopra e accentro V + dExtraX2 = 0 + dX2PosA = MaxX2 -- pos. finale + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + -- chiudo V (?) + table.insert( vCmd, { 12, 1}) + end -- [C1Vs-xs/xn] + + -- **[C1Vs-r]** posizione di V 'raggiungibile' (ExtraX2 <= 0) + else + EmitComment( vCmd, '[C1Vs-r]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- posizione ev' (Y+T) come impostato sopra e V in posizione finale + dX2PosA = dTPosA + dNewVDelta + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [C1V-s] + + -- **[C1Vns]** |spostamento| richIesto per V |non 'significativo'| + else + EmitComment( vCmd, '[C1Vns]') + end + + -- calcolo i nuovi parametri di aggancio + dVDeltaA = dX2PosA - dTPosA + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, CalcCharStatus( 'X2', dVDeltaA)}) + table.insert( vCmd, { 11, 0}) + -- sposto il carrello Y in parcheggio + table.insert( vCmd, { 1, 'X1', ParkX1}) + -- imposto i nuovi parametri di aggancio + table.insert( vCmd, { 21, 0, dVDeltaA}) + + EgtOutLog( ' VDeltaA =' .. EgtNumToString( dVDeltaA), 1) + -- reset contatore + EMC.CNT = nil + + SpecOutputCNT() + return vCmd +end --SpecAdjustCarrC1 + +--------------------------------------------------------------------- +-- *** [C2] da entrambi i carrelli a X2 : X1+X2 -> X2 *** +--------------------------------------------------------------------- +function SpecAdjustCarrC2( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta) + EgtOutLog( ' *[C2] = X1+X2 -> X2', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X1+X2 -> X2'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + local dCorsaY = MaxX1 - MyMinX1 + local dCorsaV = MaxX2 - MinX2 + -- recupero le posizioni correnti dei carrelli + local dX1PosA = dTPosI + dYDeltaI + local dX2PosA = dTPosI + dVDeltaI + local dTPosA = dTPosI + local dYDeltaA = dYDeltaI + local dVDeltaA = dVDeltaI + local dNewVDelta -- = dVDeltaF + -- tolleranze + local dVDeltaTol = GetDeltaTol( dVDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, 'X2', bFixedDelta) + -- definisco spostamento 'significativo' in base alle tolleranze + local bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- reimposto ev' il delta finale + if bVDeltaS then + dNewVDelta = dVDeltaF - dVDeltaTol / 4 + else + dNewVDelta = dVDeltaA + end + -- definisco 'ExtraX2' + local dNewV = dTPosI + dNewVDelta + local dExtraX2 = dNewV - MaxX2 -- > 0 se nuova pos. di X2 'non raggiungibile' (= oltre MaxX2) + local bVxs = dExtraX2 > dVDeltaTol/2 -- 'ExtraX2 significativo' + + EgtOutLog( ' YDeltaI=' .. EgtNumToString( dYDeltaI) .. ' VDeltaI=' .. EgtNumToString( dVDeltaI) .. + ' VDeltaF=' .. EgtNumToString( dVDeltaF) ,1) + EgtOutLog( ' NewVDelta=' .. EgtNumToString( dNewVDelta), 1) + + -- risalita testa a Zmax (da effettuare comunque, per il parcheggio di Y) + local bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + + -- calcoli preliminari in caso di spostamento richiesto per YV significativo + local dCorsaYfc, dCorsaVfc, dDistBkN, dCorsaYd, dCorsaVd, dCorsaVTd, dCorsaYTr, dCorsaVr, bXsw + if bVDeltaS then + if bVxs then + -- calcolo le corse disponibili dei carrelli dalle posizioni attuali (=iniziali) + -- per allontanare Y e (V+T) q.p. + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- valuto le corse di 'recupero' dai due carrelli possibili riaccentrando (Y+T) e V + dCorsaYTr = dCorsaYd + (dX1PosA - MyMinX1) + dCorsaVr = dCorsaVTd + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaYTr + dCorsaVr + end + end + + -- **[C2Vs-xsw]** posizione finale di V non raggiungibile, |con dExtraX2 > CorsaYTr + CorsaVr| + while bXsw do + EmitComment( vCmd, '[C2Vs-xsw]') + + -- chiudo eventualmente il carrello V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- |1:| allontano Y e (V+T) quanto possibile + dX1PosA = dX1PosA + dCorsaYd + dX2PosA = dX2PosA - dCorsaVTd + dTPosA = dTPosA - dCorsaVTd + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- chiudo il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- |3:| accentro (Y+T) e V + dX1PosA = dX1PosA - dCorsaYTr + dTPosA = dTPosA - dCorsaYTr + dX2PosA = MaxX2 + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + + -- valuto i Delta ottenuti + dYDeltaA = dX1PosA - dTPosA + dVDeltaA = dX2PosA - dTPosA + -- aggiorno la verifica di spostamento significativo + bVDeltaS = ( dVDeltaF > dVDeltaA + dVDeltaTol or dVDeltaF < dVDeltaA - DELTA_SIC) + -- **aggiorno ExtraX2** + dExtraX2 = dExtraX2 - dCorsaYTr - dCorsaVr + -- **aggiorno la valutazione di ulteriori corse disponibili** + dCorsaYfc = MaxX1 - dX1PosA + dCorsaVfc = dX2PosA - MinX2 + dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- aggiorno i prossimi recuperi disponibili + dCorsaYTr = dCorsaYd + (dX1PosA - MyMinX1) + dCorsaVr = dCorsaVTd + -- aggiorno verifica per ripetizione del ciclo + bXsw = bVDeltaS and bVxs and dExtraX2 > dCorsaYTr + dCorsaVr + end -- [C2V-xsw] + + -- **[C2Vs]** se lo |spostamento richiesto per V è significativo| + if bVDeltaS then + -- **[C2Vs-x]** posizione di |V non raggiungibile| (oltre MaxX2) + if dExtraX2 > 0 then + -- **[C2Vs-xs]** |ExtraX2 'significativo'| + if bVxs then + local dCorsaYTrA = dX1PosA - MyMinX1 + -- **[C2Vs-xs1]** se posso recuperare ExtraX2 semplicem' accentrando V e (Y+T) + if dCorsaYTrA >= dExtraX2 then + EmitComment( vCmd, '[C2Vs-xs1]') + + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1: accentro** (Y+T) e V + dX1PosA = dX1PosA - dExtraX2 + dTPosA = dTPosA - dExtraX2 + dX2PosA = MaxX2 -- (pos. finale) + dVDeltaA = dX2PosA - dTPosA + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + + else -- **[C2Vs-xs2]** + EmitComment( vCmd, '[C2Vs-xs2]') + + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, 1}) + table.insert( vCmd, { 11, 0}) + -- **1: allontano** (V+T) e Y + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX2, dCorsaYTrA, dCorsaYd, dCorsaVTd, 'X2') + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + dYDeltaA = dX1PosA - dTPosA + + -- chiudo il carrello Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **2: accentro** (Y+T) e V + dX1PosA = MyMinX1 + dTPosA = dX1PosA - dYDeltaA + dX2PosA = MaxX2 -- (pos. finale) + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [C2Vs-xs1/-xs2] + + -- **[C2Vs-xn]** |dExtraX2 ancora > 0 ma non 'significativo')| + else --if dExtraX2 < DeltaToll/2 + EmitComment( vCmd, '[B1Vs-xn]') + -- ev' chiudo Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1:** accentro V + dExtraX2 = 0 + dX2PosA = MaxX2 -- (pos. finale) + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end -- [C2s-xs/xn] + + -- **[C2Vs-r]** |dExtraX2 < 0 (pos. V raggiungibile)| + else + EmitComment( vCmd, '[C2Vs-r]') + -- chiudo ev' Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- porto V in posizione finale + dX2PosA = dTPosA + dNewVDelta + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end --[C2Vs] + + -- **[C2Vns]** = |spostamento di V non significativo| + else + EmitComment( vCmd, '[C2Vns]') + end --[C2Vs/n] + + -- calcolo il nuovo parametro di aggancio + dVDeltaA = dX2PosA - dTPosA + -- chiudo eventualmente il carrello V e apro Y + table.insert( vCmd, { 12, CalcCharStatus( 'X2', dVDeltaA)}) + table.insert( vCmd, { 11, 0}) + -- sposto il carrello Y in parcheggio + table.insert( vCmd, { 1, 'X1', ParkX1}) + -- imposto il nuovo parametro di aggancio + table.insert( vCmd, { 21, 0, dVDeltaA}) + + EgtOutLog( ' VDeltaA =' .. EgtNumToString( dVDeltaA), 1) + -- reset contatore + EMC.CNT = nil + + SpecOutputCNT() + return vCmd +end --SpecAdjustCarrC2 + +--------------------------------------------------------------------- +-- *** [C3] da carrello X2 a X2 : X2 -> X2 *** +--------------------------------------------------------------------- +function SpecAdjustCarrC3( dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) + EgtOutLog( ' *[C3] = X2 -> X2', 1) + -- elenco comandi + local vCmd = {} + -- Commento + table.insert( vCmd, { 0, 'X2 -> X2'}) + -- se primo scambio + local MyMinX1 = EgtIf( EMC.CNT == 1, MinX1 + AGG_LOAD, MinX1) + -- recupero le posizioni correnti dei carrelli + local dX2PosA = dTPosI + dVDeltaI + local dX1PosA = ParkX1 + local dTPosA = dTPosI + local dVDeltaA = dVDeltaI + local dYDeltaA = dX1PosA - dTPosA + local dNewVDelta + -- tolleranza + local dVDeltaTol = GetDeltaTol( dVDeltaF, EMC.TCING, EMC.HCING, EMC.HOVM, 'X2', bFixedDelta) + local bVDeltaS = (( dVDeltaF > dVDeltaA + dVDeltaTol and not bFixedPos) or dVDeltaF < dVDeltaA - DELTA_SIC) + if bVDeltaS then + dNewVDelta = dVDeltaF - dVDeltaTol / 4 + else + dNewVDelta = dVDeltaA + end + EgtOutLog( ' VDeltaI=' .. EgtNumToString( dVDeltaI) .. ' TPosI=' .. EgtNumToString( dTPosI), 1) + EgtOutLog( ' VDeltaF=' .. EgtNumToString( dVDeltaF) .. ' NewVDelta=' .. EgtNumToString( dNewVDelta), 1) + -- flag per risalita testa a Zmax + local bZmaxOk = false + + -- **[C3Vs]** |pos. di V cambia in modo significativo| + if bVDeltaS then + EmitComment( vCmd, '[C3Vs]') + -- eventuale risalita testa a Zmax + bZmaxOk = EnsureZmax( bZmaxOk, vCmd) + -- definisco 'ExtraX2' con (V+T) e Y accentrati q.b. per la presa con Y + local dX1Pos, dX2Pos, dTPos = PosxExtraYV( dX1PosA, dX2PosA, dTPosA, MyMinX1, MaxX2, 'X1') + local dNewV = dTPos + dNewVDelta + local dExtraX2 = dNewV - MaxX2 + -- effettuo spostamenti per predisporre all'aggancio di T con Y + dX1PosA = dX1Pos + dX2PosA = dX2Pos + dTPosA = dTPos + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + dYDeltaA = dX1PosA - dTPosA + + -- **[C3Vs-x]** posizione di |V non raggiungibile| (oltre MaxX2) + if dExtraX2 > 0 then + -- **[C3Vs-xs]** posizione di V non raggiungibile, |con ExtraX2 'significativo'| + if dExtraX2 > dVDeltaTol /2 then + -- calcolo le **corse disponibili dei carrelli a partire da Y e V c.s.** per allontanare q.p. (V+T) e Y + local dCorsaYfc = MaxX1 - dX1Pos + local dCorsaVfc = dX2Pos - MinX2 + local dDistBkN = EMC.LB - dYDeltaA - MinJoin - EMC.TCING -- DistBack 'netta' + local dCorsaYd, dCorsaVTd = GetCorseDisp( dCorsaYfc, dCorsaVfc, dDistBkN, 'Bk') + -- valuto **le corse di 'recupero'** dai due carrelli possibili riaccentrando (Y+T) e V + local dCorsaYTr = dCorsaYd + (dX1Pos - MyMinX1) + local dCorsaVr = dCorsaVTd + + -- **[C3Vs-xsw]** posizione finale dNewV non raggiungibile, con |dExtraX2 > CorsaVr + CorsaYr| + if dExtraX2 > ( dCorsaYTr + dCorsaVr) and bVDeltaS then + EmitComment( vCmd, '[C3Vs-xsw]' .. 'CASO NON GESTITO') + return + end + + local dCorsaYTrA = dX1Pos - MyMinX1 -- !! att.ne: non dX1PosA !! + -- **[C3Vs-xs1]** se posso recuperare ExtraX2 semplicem' accentrando (Y+T) e V + -- (dalle posizione impostate sopra per l'aggancio di Y) + if dCorsaYTrA >= dExtraX2 then + EmitComment( vCmd, '[C3Vs-xs1]') + -- chiudo Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1: accentro** (Y+T) e V + dX1PosA = dX1PosA - dExtraX2 + dTPosA = dTPosA - dExtraX2 + dX2PosA = MaxX2 -- (pos. finale) + table.insert( vCmd, { 3, 'X1', dX1PosA , 'T', dTPosA, 'X2', dX2PosA}) + dVDeltaA = dX2PosA - dTPosA + + else -- **[C3Vs-xs2]** + -- ci sarebbe un doppio movimento di V ? => caso impossibile ? + EmitComment( vCmd, '[C3Vs-xs2]') + -- **1:** posiziono (ulteriormente!) Y e (V+T) + dX1PosA, dX2PosA, dTPosA = PosXs2Enl( dX1PosA, dX2PosA, dTPosA, dExtraX2, dCorsaYTrA, dCorsaYd, dCorsaVTd, 'X2') + table.remove( vCmd) + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA }) + dYDeltaA = dX1PosA - dTPosA + -- chiudo Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **2: accentro** (Y+T) e V + dX1PosA = MyMinX1 + dX2PosA = MaxX2 -- (pos. finale) + dTPosA = dX1PosA - dYDeltaA + table.insert( vCmd, { 3, 'X1', dX1PosA, 'T', dTPosA, 'X2', dX2PosA}) + end -- [C3Vs-xs1/-xs2] + + -- **[C3Vs-xn]** |dExtraX2 > 0 ma 'non significativo')| + else --if dExtraX2 < DeltaToll/2 + EmitComment( vCmd, '[C3Vs-xn]') + -- chiudo Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **1:** accentro V + dExtraX2 = 0 + dX2PosA = MaxX2 -- (pos. finale) + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end --[C3Vs-xs/xn] + + -- **[C3Vs-r]** |posizione di Y raggiungibile| (ExtraX1 >=0) + -- (si esclude la possibilità di extra corsa oltre maxX1) + else + EmitComment( vCmd, '[C3Vs-r]') + -- chiudo Y e apro V + table.insert( vCmd, { 11, 1}) + table.insert( vCmd, { 12, 0}) + -- **2:** posiziono V alla posizione richiesta + dX2PosA = dNewV + table.insert( vCmd, { 1, 'X2', dX2PosA}) + end -- [C3Vs] + + -- calcolo il nuovo parametro di aggancio + dVDeltaA = dX2PosA - dTPosA + -- chiudo ev' V e apro Y + table.insert( vCmd, { 12, CalcCharStatus( 'X2', dVDeltaA)}) + table.insert( vCmd, { 11, 0}) + -- sposto il carrello Y in parcheggio + table.insert( vCmd, { 1, 'X1', ParkX1}) + -- imposto il nuovo parametro di aggancio + table.insert( vCmd, { 21, 0, dVDeltaA}) + + -- reset contatore + EMC.CNT = nil + + else -- **[C3Vns]** |spostamento| finale richiesto (ev' residuo) di |V non 'significativo'| + EmitComment( vCmd, '[C3Vns]') + end --[C3Vs/ns] + + EgtOutLog( ' VDeltaA =' .. EgtNumToString( dVDeltaA), 1) + + SpecOutputCNT() + return vCmd +end --SpecAdjustCarrC3 + +--------------------------------------------------------------------- +function SpecOutputCNT() + if EMC.CNT == 1 then + EgtSetInfo( EMC.PATHID, 'CNT', 1) + else + EgtRemoveInfo( EMC.PATHID, 'CNT') + end +end + +--------------------------------------------------------------------- +function SpecOutputCmds( vCmd, bEnd) + + local sRoot = EgtIf( not bEnd, 'AS', 'AE') + + -- Registro il numero di comandi + if #vCmd > 0 then + EgtSetInfo( EMC.PATHID, sRoot..'#', #vCmd) + else + EgtRemoveInfo( EMC.PATHID, sRoot..'#') + end + -- Registro i comandi + for i = 1, #vCmd do + local Cmd = vCmd[i] + local sKey = sRoot..tostring( i) + -- commento + if Cmd[1] == 0 then + local sInfo = '0,'..Cmd[2] + if Cmd[3] then sInfo = sInfo..','..Cmd[3] end + EgtSetInfo( EMC.PATHID, sKey, sInfo) + -- movimento di 1 asse + elseif Cmd[1] == 1 then + local sInfo = '1,'..Cmd[2]..','..EgtNumToString( Cmd[3],3) + EgtSetInfo( EMC.PATHID, sKey, sInfo) + -- movimento di 2 assi + elseif Cmd[1] == 2 then + local sInfo = '2,'..Cmd[2]..','..EgtNumToString( Cmd[3],3)..','..Cmd[4]..','..EgtNumToString( Cmd[5],3) + EgtSetInfo( EMC.PATHID, sKey, sInfo) + -- movimento di 3 assi + elseif Cmd[1] == 3 then + local sInfo = '3,'..Cmd[2]..','..EgtNumToString( Cmd[3],3)..','..Cmd[4]..','..EgtNumToString( Cmd[5],3)..','.. + Cmd[6]..','..EgtNumToString( Cmd[7],3) + EgtSetInfo( EMC.PATHID, sKey, sInfo) + -- apertura/chiusura morsa Y + elseif Cmd[1] == 11 then + local sInfo = '11,'..EgtNumToString( Cmd[2],0) + EgtSetInfo( EMC.PATHID, sKey, sInfo) + if Cmd[2] == 0 then EMC.YDELTA = nil end + -- apertura/chiusura morsa V + elseif Cmd[1] == 12 then + local sInfo = '12,'..EgtNumToString( Cmd[2],0) + EgtSetInfo( EMC.PATHID, sKey, sInfo) + if Cmd[2] == 0 then EMC.VDELTA = nil end + -- impostazione nuovo stato dei carrelli + elseif Cmd[1] == 21 then + local sInfo = '21,'..EgtNumToString( Cmd[2],3)..','..EgtNumToString( Cmd[3],3) + EgtSetInfo( EMC.PATHID, sKey, sInfo) + if Cmd[2] > 0 and Cmd[3] > 0 then + EMC.YDELTA = Cmd[2] + EMC.VDELTA = Cmd[3] + elseif Cmd[2] > 0 then + EMC.YDELTA = Cmd[2] + EMC.VDELTA = nil + elseif Cmd[3] > 0 then + EMC.YDELTA = nil + EMC.VDELTA = Cmd[3] + end + -- aggancio grezzo a carrello + elseif Cmd[1] == 31 then + local sInfo = '31,'..EgtNumToString( Cmd[2],0)..','..Cmd[3] + EgtSetInfo( EMC.PATHID, sKey, sInfo) + end + end + + -- Salvo i nuovi delta dei carrelli + if EMC.YDELTA then + EgtSetInfo( EMC.PATHID, 'YDELTA', EMC.YDELTA) + else + EgtRemoveInfo( EMC.PATHID, 'YDELTA') + end + if EMC.VDELTA then + EgtSetInfo( EMC.PATHID, 'VDELTA', EMC.VDELTA) + else + EgtRemoveInfo( EMC.PATHID, 'VDELTA') + end + +end + +--------------------------------------------------------------------- +function SpecSetCarrPosFromCmds( vCmd) + -- recupero nuova posizione carrelli + for i = 1, #vCmd do + local Cmd = vCmd[i] + if Cmd[1] == 21 then + if Cmd[2] > 0 and Cmd[3] > 0 then + EMC.YDELTA = Cmd[2] + EMC.VDELTA = Cmd[3] + elseif Cmd[2] > 0 then + EMC.YDELTA = Cmd[2] + EMC.VDELTA = nil + elseif Cmd[3] > 0 then + EMC.YDELTA = nil + EMC.VDELTA = Cmd[3] + end + end + end +end + +--------------------------------------------------------------------- +function SpecTestOnlyRemarkInCmds( vCmd) + if not vCmd then return true end + -- verifico se nella lista dei comandi ci sono solo commenti + for i = 1, #vCmd do + if vCmd[i][1] ~= 0 then + return false + end + end + return true +end diff --git a/Saomad-KAIROS-MK1.nge b/Saomad-KAIROS-MK1.nge new file mode 100644 index 0000000000000000000000000000000000000000..68fb46661254e8989810877d98812c478189942b GIT binary patch literal 2619783 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

CYIEJaFcX$u63@VHQ0%WE!yYWHU^-=_~`44Kga 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

s9JOm{Bhy-zhg2i*#Q zW`r3#X`1Y>=FF64Wv8P%5ZhSK5W6A|*UCdcocIkK#D$A?-AlzN)`z`(YZuk9r1>)e zpKIZ{fOvKKd|@Mlyomh$YA?}+bEGk+J*ntY!A2F`rv&B6 zZ({et#Qt_Yjp$^b4^K{Wk#0H{26&TPGx{3m6xT28X=B^9iA~*r(Pv?ti;yf$Y6frEvoR1tJlK5&a_B!AARGcX6(*!G+et?NUHVxa@ z7=NkG`fFeY`d4XvQ#=9PQ4Ka>)V*AIlHx%Z*Z?VN5Bd%|-JLO}Yd660pR*0i=K#h; zL3NB%^ZBUhtH}W)#(e>~0-G$F?%uwrgE<2nH1ILg&8CBQVvpcL--vC8Ipg_wlNkc* zV|WLiD}}z%#Ez7+7+&$RVQzvIj?G3bBdP75=)(=1)S5+;@fL9yeFeldib1mticq%u zH|}hDf~%FI1E%LspKmkQrmwhzgH-oX&n(y-#M!m^wu^~U;_fax0=Havu1J!Y!`kw= zX>pjwb3*^{=ut)NYBPTU59ajB6mVLz6dN6qc^taVZ|`l?p2MIuQ}tSTgpnSZI-uFi z&HB4iIW5h>1_Uh38E))LWd+fF<+*`Q@++FepHSBof6X0u88o_MLhbmtM-Kc&5SagC zlTZ~ifXPXN@5@2F4!Bk}{RgcD*Sv}pqZ^2q@qg~BK0>OchRHup|7Gc{T)>;qSH9JA zf+xl_O_IgZc%`<1GQ4eLC`jUuZPCbzjJg9bN-LQe8}QsJTroT+DB_3;f!PwFkYbK+&;tG3Hz>gfc=ltFh$ zImTLeSybfu^e&>Ik@siE#(3*4;CWBbIQo3mc8jD)8b7a;Z!5sI^gdQ@0$Tc9)W$C9pyS0bsEwdEN#0CH zM6%CkhQzS`?$}rwfo0r{xj19$QdL8#i}h#EIAi{!=ATOi{i-h^PNa>S$Dp#@+wwsA z$!luclMv-c@7Em}EkdagG&hno3EJ%!Fs_Q-aSB>XXjm9dWhc(y%uo~9u;F1bF5qN7 z+p8$nR|9Xm7<rA}T_(adVgs7H5;row5+q*rGQO_%2o2mYb3kEHo3&GRIoHM|Pv2lJ&O$qM z(im#9ak1DN%{pO16H_?S{uA$1WgpKjre6bFhJZ!vxHJGp2L{waK-M5ukWs zFgWx<23Cqtg?*>Ubc$fzpI_Kp_%I@iiqyNWUfEVR3Li{h?HE2hR845FJ(k^#24x@}^tDc+c` zZ?r7`j<-YqD!o5(jA2}Ez(YGdFwRCJP?cSne@~$5e);eUH7cwHBb5nPSjjlDcZlX3 zKID1*ECe&5hHigZ8Ec8G=uO5c+6u|0-;kYZ;bg>CfH7D$fiY~K+#Azo@!wtB*vt*Q zCbP2DeKgX?`4jrp0n>P(d zINN}L7A~T@_wxX?mC4Q!TZLbrrPuY zb4!e^Is)MiJh3t-$~5XqC2_tcG0ZzQ5MzD7v^ok=N+5?W>K7ZYa3*1ZNLk4P_UT4gl!#g=Z%TkAuIb@ z@hU9T;Ul}R+%1iWfkMIDSE#&*q7=LBdGf1hWwInefJ1IIgFB0kwv$nJx*y4>%0768 z@ceC#&FM>m-$xSa*~F(YPXwCaF32Zsfd_g)mk`B6M{50k#GzpZ++`zlA}@^<2}xSOq{Juj zW34=KNeW$TKw!WrNhks%Co$zW=y?S#-imjuI+hl&Z9ncyk0edymbwc(9elVCF4w;F zh|=^b(izGOhFpOh(QMWG+9ONTs0eQ;ns6MPDEwmYSbMHwx)ep~^FNC+Ca2xk9y+E) zk^WFSlq{kfow!2}9WB^u=!8ktImiy(?|HYzvwCoLlCr~L)=gcTxl%w^4!Ng{a_&t} z%;=^yPGFGsD+_@wZ*W`CMf|>Nq+PK{>a;?eU)5I`&cIQclWKF9JOU0-!XnOIzzPBmS3bUfNUOU-LWQ~;Cw*^{t5wIIuLRr;*YvlH^7g~n7i0=kKZ@z2m!V4X7Q6U2}4C=n{yb~3jz-M53m(ob>c5L6)!urkp^^HJep!)9AjZ`6PMi&8sIL*Lh+7vQG}`9 z=u2*olLkjsk~|smZMWqidNqT;pqsVr;?vN+1H({N2X{d?8Eq1j(iofH#zz@ut=4@P zbPET25X~WD8udlkydKKETwr3EgTP85>Pxmc=#_g7oo0@qO@$!Xl|9tU$X78kITlUWT{@mqmk$=o&Pw(?v6EmwosC`*#({W7fo%Q z+PD(TpWW*X2=0sdv8&i&clHS=BdEj^Boq#)UxLD_FS> z6|Y+RMfefL7;}p_dCY(&s8jVM3mWCN_MKMQMfd=@Kt{i4Q^ZBcDLd4X#U^Q#trI?e z=>@&z(~({?YghT4SWgDI{f&97*dn(3sNW%h3+w)*B!I!#dRV;d~JrcHhVTU?-vg;D> zfh&by?K_RIL;2XKLMtFP$H70{zXa%#u)H#ilNXw1IQH1wce2)2!Ww`f`=Jvr(W!UK zTH)6_sl+xyO_nWZZK3a?ej4lXpDU9eeV#&|wUHVGccElRnK5t%5)2#_G)`Lka^Ijw zS0f-6_0`O#Xx(J)U@X_LvbFZ;f#kLZ+I;dT4`iR&vvUi=DE#V>X?cx>K+$03PH-&= zB5mlNo{2#FSO&VTC9PQq6cFm&b~5Nrv+LSP&~4)sN59^$rP8l=A}Q;Xop(Yy$48d6S@!V&#CGD2tD@$u-Zr@?q~Tnc*g79zBIC-LzZ2EcF<-My3T-i(U}k5oE} z!2C7Qs}89qc2hMb%z+vo9}mG{tjUEyg8ADa=T64QV^jpPXWM3jkw~{mz;$urTl3(r~}|_ZS;}4W^wWqbY!tvP2gm|!J|*<<*ALB50D%os+Mau%_UsdwxwhrGKrzE z7a5CN62>&K1yyO07X&7^my|GK9Wdy9?QW9~w3G~O$lfn#f(|uWd+lT@3F$ny=$`at z@(_tC@hoi6!zH?Til@>vb)Yx9MbTFX)XfuqwZd+8LWFZ;lO9n3w4}^kP%&Sp-1rqe zW!AQvR<7AX-|op$?)5fuBdbEV=z=Z2(PeV%anR`&bu4NmR8f34n2E{Ex^cJyOb>v? zOrM*}MwwTe(7{ui2%3vetI6Ra$`T7`q=sq!aaKu0i1Cjjsc0?y53uN4X?~Q8NJ`2^ zkd^d?;P_IdrLZ(ihcd+r&TriIFex_>4OjwuMi?`Khe!nlu_ReGeYVcSL|o~yx}9xm z{+R~VD9hDMOBM2FHtwCe1=P=`M0BcLIEv}Eb(hhK|0Wc6v_oLYpfzFmwufbDL>R! zu2UN%7-PI(2|x87FjZ`tMR7@a6$w_5Ub5#!jW?b?e&%w4FY{&NT~Z0&bJfNXfJ-ag zHXI=kV5fOeo4=>|4Vl4q0h=)qk)?w`FVuvzW<(WaqNhyEtu6rBjQ5*0iP(f{76!v1b+vW{ zWQH@4C7s1%o#05JC z#3v(rq+Q``A(H6=ozq$8^v41@H!ny!UbGK3(ZIS%Ikb6Ftv>^MssNL#n#Fb-bcOa z^JO+fUgEzKcB3&=cU!+D-io?yVSU# z*AaE6y-SS+Jn;v*;QU=`T+l;8vuyq*H7@9(VSF%uks25D95OzbzetS>dJd@%rbzRU z8Vh*6_$D`#Gp|zP0$ztB&GcPrEZ7OeIK|>` zQsV+%hfALRtJJuF=X9X&Z&Kp|p7UX+{7q_Hz;iwfl{();YAo1gA7H8cO=?`gb3Sy5 zzetS>b{&sGnRlsi!LHNAmUxvK7jT`^z)%l{7lAhsn14SARQ>?yT*!t5KRy5h=!Zc3qk*06*I?-%-#_>rfW8a# z3m`VL0a-Wn-^Z^HULl?ofIb0Yw;Pbf3V%L+f7tfrmq2XXi1!9$p%;7kuv4BZp=KpQ zu>n~h^!?+{hyC$>3&h6Fv)+L0yYqqV3?mA{wjYSJnB;@gS%WDIyT)AHk!>05hh;j} zUJAsnPaJ6@fouN9qDz24CtCWk5*TC|7PHz?Aa;G?2x7B9dMLr>0GV!ap3E8po>w#z ziSsEG{|XE3J4b4$%K->DFP1hA$i$tr!&#fm=Oi(+ERK&s3f@x>eB#}|`v)wFBmRMuYL0Ru-oIlR76V-%J~MMq#QS&OA*^)c9{^%c zC*t`#Xcqc|cDxqSa>oIG_2&Z=r9CH@!U+LW95DPH!3c1JX=2V6P%Nr>v*DA!HRsF! zkv}1#ePc4|X@~p#!sK?vKVPWMK>Y{SAFJ_~2m%gis|B(C<3l@UUy8qzw7}6(TA+VF zEK%Kn{JVcY&{lAzVLt%GeLWGu-?108SBwobNq}I56BGO$ze3mr8v`#~nhRQex&Iu0 z$AJ`LV1eJm8~0(^U}L)C-(dr5wvmbJP_4 z+KOxcQH2Z$^7tN-N<+_k04ZcZwTM(AIo;`b$ovXBv4JIsMtKcsd9tV2um*###K3Igq%3 z2qf67kR(+uoOu`fkK&?cTm0^yFXRkR|9+?f?m)l4uv&j{g8#m776A0?!_1Q%=<|yw z2A3O3GIA|-d-|Dnpg%PJ_`q3%W)7VJ;$b|Q5eIlMygDWtG3JfW+j9|tS@$3c!@i%C`;2ave1!(;i#7&_zgALLETA5bhsVN6^s+ zOqsj-Ko^vNe#YtODtp#c&;4Vdrw31@czL)`iq@&#}_?mCZm<<*)xHpcb{2FMRQ=?|$32Am>-2qEU? z<*@a>{bcsFRD1aEEb#q{_Z28~-t(N`zzj>aPLL%B;8lO_A2ktFvI<*fMWFukACF%| ztNf0}%+^q=xJUGca@hk4r#c^JFS)!=aA1Jd{(PWA z87@HEQ{#BRi39a{w#RMZcGEjUV(hDl1C;QnfjEk!xL(ooR*D34VPnI@xnMUuv+(A* zH?iPKu1Gu?5@g=xNdoY|(J~jt_!czCSe}!I?CyvLtLNC*mNMJiq>~76i={TkjHwq7 zuVqZ&Ne25TYQ30gV&6WgYQGe|IFVw{43Fxvssj*%>NnW;v8KhQ{;>PRB)}8^Qt5GG zQ1r%sie_$K8e(yRvX`ex3yK}vX4bcDY3xVW-uWBNEsX>ZWx40WIuO;q z)Bdo3>qY?eUmnI8=%%%STgz{X2to_PAFo-yT*& zXjwC5vOO_j?p8K_AWK?eJ$1A2+;oT)>^(psRz?SCyn7AYt67y#K_D$_7@Xkr+3>No z@evR#i;dN2WmCyoawzsW*nC@M%FR*U^VtO7A1%${}f z4xsMli2;5zpsp;VW6zN+DX*REB8$lOCOcx(#hgvwjfb%l7QvF!iD0)n2@I%veaK>2 zM2DWKKw6SGJA~EY@^l39tGe~fYSw-ui57>Fmi!AWKbur@w;^U>Zrg^vfkLlja2gsD zvoJUPJ;Uk8m61u(FU`|VUnaE2p%6YB}kI?K?Eay$@NH}8|Fr6*a9Ni!u!(!lc)p{ZxozW z1Ip9!R5fIhsyh}Ojt~RYk?OH3M=`kyD+X{t#X!#azyM4_9SfkG1mjLjKrIpd#DM)M zp_FxQn55ztP&fa?fFUARbY(kla=kOY=wTt*?TfZ&fVp4$Zi<048+u4s8P5kWtzK+j z?5as_e@Ivv&oWjMk2O{41LCrns!stU=Ve(P)Z7C-1$+PzUSMq@!%nkfyV`KQRC>J> z2We$J&o3UZ+`N{6Dj1%AbbAL2p^AA5&u^yN*Raz74km|bUq{>lZ>F!BhLMS-91l=2 z_h4>V4~H+HY{JA+kOrvecp%Hs5wXrmc4 zipeL3LD=xm<5*^SXgY}r`VF8vn({gu5-Y$ zK?O1Uz<~_yHOY>>mJlJMj2^D8Ff`| zml9CL$U_*(&^o?#>ZGBXURL9xPmZ-QArGdF#H*be@`b7~y!j9LVp~FEPAXV7w&(DG z*2a&$W+o}8H=mFVM1*Fua^?ma#E+HJ6Gj) z`8SE&Nn|nL&peGOn-QW9o2YH4A-RzjPO|U=12VK*^U!H$PuL<=e~*Y6{0}Gx#!R-$ z5O@u&0j38Rnj@WMp#e%RrJ$%!S~G93<~QiwbjRKwVlb4><+7bPu#d9AM)06%1*5aH z;^rB>G!kt5(*O1P5CL*%vVvh>H5~}0Rl=BJ7C$(BvmE<4p)S1L0w2Bfud=A3x~c*p^$Jo&(Y*Ce2>EIB+Dih)<{T-B^-f86~V*cVyu<{7|EPBcd{ zpyzl&m^`z}()DUbmeGGhdR!Gdnc<6&wZO79r6+8BroibA=V`;J_F!x zqZmC^if^FM%R_lM^n4i|P|@`a(3@JpIYb%OLojQT2W7~)S#yV6G2r1|vieJi9iUJ! z93UqcFok;oRTw>v1z&`(q_V*CWfPL>Gpvn|GK z0{|$>jyb+Ny&V22t*|@*&)Yy&qha_*J`R^pCBUp|z(YDfMaL5Zj<4eMSV^|qk-~t= zJx>fkEwgsKB{p~WdRtnMMA30vlSDDf675{HO^-UMM@e!#ePQ-2T9T zmruhK?G^B_4m{vq9~kiRA$y(h2zcIHK;7#@!g~3FrRMf!S!jSl zP7$2y69VB47AA40*|C^~UXgbX)6f0q{Nlm3>&D%~Y!B;OtOToK*RJaZ-=q0FoLk~L zw323+MgF#>juDLq5gg+n2gnH+D@t$^+9PmJP^BST6YrRCz6*dVV;}VLO3SU-oPZa{ z)(iEZmw68|wR8tG^ zunwTI?-N-Z1)IQ_E8yV=@}u1ALu`7bO(IiJX(uOpMD^Q>$NkQFr4>@>?|=)+4zw2d zrw1%&$+G4hK?B>!0%rcr6PClc)9hI0;e~PLMY?+(Td>oyd4VPnidj~5rj$bL1U36F zDTK)oRDfni?+Xs%{1PnSfN~^<9*FXDRp(75dr|Nx6BIJI*9UVur9ozqY3zG$P87ox zBk|8wm4^C0!7OHl4^t}X(jV!-fV0Bmcs zflp8ngppw~6W|OPKrjMp4%!n1U?|JRJSMv=$z@>n1y)g^m609$=m8ql?BR)vs8C}9 z54Lzw)&i=`d(cZ!p-)#v(E#uw(yA>2_c)lM!cewqTN;q_e{BJ$7(YR6>CECdwtMLzlI5S*vTp_;n+`2F-v}TdSwQKM^exCQksnCJNqyw zZTDB8uIzijzL~%i!E~-l0+jZ%!2S~>a>)HXfDk;UH+p*Vj|9T?@BrdQ>AZ?pN<8|w zK7c^7?%Q~|6hDCR+Yc}h42bLHgQ)h8FuX#>pL1_mY*HB{Kh|=mW;|CWH$d2b4}7O>8H=Z`$Izav;gJ35g`x)c$@-~RLSu*PFz6@>ZIiIDb+FJT0u^}k8jB*2kN;i9HJK9vpKZ;4+Uyd#~0Oa_NxJTqnyDjM*Ki<3-5CW8;x z!(XOEL13FuVg`dd0FZ>I$E$@rL2WU;%q$UGve|Ux$^Hlv-@crj>Uy$#C z@&HmG<*s?>RI}~7^;41e$j|n&=CYfEYL0KtoX6ymz^g!tUqwGmY1x2!nn%`f1d3?M4ItxLpn<1={ZFZIIT6KEtXo^6R)y)ugTAC%* zj1h_}PB4 z;rUyn#H+T|74xk!v-;eSgPD?kZkU7LG{gLWLC_iYNv3iVj?EN4VLD5d-ymDiB#)>d zClmtAY|@AuZl9*$!yDML%?!=tIiedq6e#7Id0oEA)-CW)WV1a`V8#oXbL7;K=w`y9 zS%T-DOlC0^!DKD-g@le;cmkSuWXgaU1|}0Ftt@$9CuBV+W*p>|FiS$8?UToo7~xA} z4A{3N$v;WeIo32UB5`iXj;Fp-DU$ebLQde;TnD4bNe;-{dqNt_F%m438?`isUT^*h zX~e+@f{Z51C4!!K_X(+k$-tIt8vRH}Hu10%(lCWSUb)!lOCpz9|AZXBcex`w4wU%L z38_qrMc?5B<&~P?L%Jx^ydLoy>Top-<9&RTUg!yo2T=z|^4i<4|18o_;VnN`1hIZZ z{nXDI6a9ek+-N1ce!Q;nksc?CIMb}s8Q@dt6QCOWgw&4EFwr*94-mgtyjbU&+BD(E zda<;djix;`RMnxfC^SCQ{NuTZpW$3nY@`rRXCS}(Nddn9!AAbHf*_4a*Ej#-uv8LQ zQTJi#uGJGxZOt!gA+3=N0r)?B3zPGO3`fo_*wy?o`5hIRW;~7rAyk0jFSalZX%x?`!xmUS>O^zDEu`2Z znXY86;pez431{MsC}e+6-CDrOhFon^ z985qli@g7X-_u;v8n$2cJzXolgL1cm45OK#Nyuv@tpgu!X{jl!Ye03PPK9bir!%C8 zD-k_G;BzI&p&|AkyZ+%)DH4l;GkgjYqPmx{U&O+hgI7=nfy}F%Jo6*NLt{{G)trCt_a!Tp{X2DIbQDH%vUa=f4uD< zvg+4Mq8GLx@BuX`t0U0+`tg?mpDGIRi8Y}B2K{g7bW*DB7?nlz3&2Au3OYK2W?x;E zTo;d7U)FIFe{x^h+zV4$Py=iR9^l23TH@8Tb3S@f3!k&FnH7Q;Pxug4;&q&H+YkO6 zVd*KQ{wH=!j7&dPB-P9M&P}xl)mcm()$dT|O!eZ{H8p zHF%gTJ{~9F{W7EBT5sOrp)RoWCd9~**<9J=-}JqEtPX93v}FJ~E6^N0$xf~3?`uQa zKteB^-asckC!f5m4P|{-d?0kZ(=WIGGZNasX`m;9LRJof%-2 zKU*pLZ%=3_s*lvwI3s{zT`}?oZH01vSDXtS{P}Aya!ePskkuy~>O{Y%4~2icTn_!z zI*iR2qi4DBewho{=IVY@sHrcyy2K-ED(f^Cy!GrI-WZSOtr7;oiq}@qw14a9?+y<| zjT}W7+0HUKjWyS#+mrUIWP3Bm`|<8)~4zP`-^ zh2=Z!TP~AkQaWamlm4JA3K%8l#40UN!xc{#AWbh@H*_3oUz-Y6Ao1u9WL(ptkzddib|IOK0 z)!@MN6w96a(+b>qAjsYY;My1>j{Y>qmaIr)a}G z+N-cWF*bh{UdF9IUbq)UOjx^g*@PB&YsRV{{>!@!9Pmc@(M!-60T1>GM0B)y-wl*a zu7#DUfwt7um*I^c4F)8M!_8vW0Pa~UL;ejn_WCg8A!QAoHT}%;`HK!=??GYdod|4bM%fXY`agB4`^FW5^)k2E)n(y$?*5(x5&{BA*P(Si=TW$T3ju-WoNvm*? z`|pIheSK(a8;$g6$1jdFj(05#@xsdl50d1Nlp}&TjL_yEl4JaGuVAh~n#+VY3uynr zT<;Ei?0bQ-frMVXkU$$B;NtRMo?L8BotalAY9;u9>eoN^0t{J`(PaWy@_PEq&Xw8s zVYe0mO@K;Xnu(;mIPU5p#8^SCJ>e!jcA1-O+0;8U^h{tXI278As0F=YgkKM&wO;hP zrx!qqu6%_lNO{={)J%&KMUhu2Pu{Qm>)Ty|g2Ecvq5=YxqiG1L_;}HoSR44HunCXk zur)5A`H`1*6_=W@#>5aU_A*diVzid10jbf5* z$94X)7lezj2JDpW!so0(?F(%YUc$zvLADF;FR2*dy?WWb4M6NfquAwP2R>hh)Gv1x z14~$3UnQo2cPlDdzq*QJ!#z5qu+{t$1qxnpD=Ko5;&D&R{R5VX-F951gcvi-7h53b2W)YQ}F`sx4jAchb_u(5q^JrIhc` z&{Ig|r&*6ta3$$GMvR}E&+Sb@oTf=D5ge)c_O6nEBP4Z&e zlzG6wtB}#e+&|tZ1U-Qz6&(N`S>XL86?AI!pO}P0gzbQ;Z7A}k1_KRvU*MrBz79$V zT;KiYpY$A2u<-(KV;&R3#R>`$@N7NPvH9o)9?AkscX*W(zzq{dujvfMZUh)li|h& zK0?)3lN#3N`bZODGo6UCT;biiDir0hFYwUTyN_rjlV0#(-xIxXCbBJ%KHPXefbOmF z#mm}IR!B=g(8V1&ZYH>EzwI2#T32Ejib;n~rD#;WEDc!&w7kW#A1`0;>;)K_2GH(P z0X89A3+cs|;%_^(+`0nK=gU`^q3){yQgRly7J*7QZRm^h|2lqmwfpU?f!?#*(+ zdY0q`U9etA{&@0&FNLsPJKr*C8!F_Zr(^;*z(d+a;+nG{iU>X50 zR;!oH3)kak5;jTJhaULZMVsofpDFFyhs|>5SGC%(pGe4XT_>7 z*vHQ#tV$T}0>LGPo|m`X;G`=^+i}WhgIYd&(u(sJB=o}S$K?@kupBfj?ewj?ykH`A5P-0H=A7Mw(5%>|ZK+K--Zx`2cvgt}&RobVt-LJYtiJ zY#84K@bG2A_UPs>@Q^hvM3Qaj=Coa+mcL~%Xw(Rc@{a7Vw~l=&)6Jm^0k^vf?S-_V z&L8wopp`PF;&$o94()nol}1))FFC7w>2{<$yyStl>A|CdgO5B^$VV?{g|_yX_5M3B zjDHE0MeUo;6E%myMBj;o|Q#nlGL)J%hsj%5_len6H^ZE++fEoE3TkTlZg~X`KV0Zt5i> zAYFvbgdfWb%xV)fn|gT=@G}Wp^1_G5+93M0`6F+7tz2U7m$dK8vzA`{8YGj8yW>Z- zC#~jGP6W5oBXa&l4r7xD$@>U&HlqgQ2<9&R-qt1#E@Z@!Vwx8(WXjQBq%fQ%EUJd^ zF0VCYO^Y8raj#&vCr{*;eZ4Kv0o2dmECg?-?S6CtJ4+S#eCfZw*oyEC@HTcU*)F{Q zlvar^(E<1dczecqKnZPun_TA~FRzr{qHLKRQ558BZCT90A5Y63zM*-yExDl=wkx`5 zu~+v3;zgfTgs^HdGSsA-;}yG&DC{JrgGZP$)+z$ zL&*TL7-}=X(l~ta0&IhF0XbCxrwqfbzuXR107`7+i~#Dn3P#?b!9x0QibE?a>z(vA zzDO}%QX%c$Ob)Y751(t(wfWMmp#W?TAYHuZuXT{*UwR^C}o2E6~I zqBSMA+kOn$*ezDkV#NvY9@WQn>TY*<+#A3eHrE2ecYrhwrzmF4Ds^a3B(5Acz_I&DH$9|>zo zpX=)ivE_Z;0oAl^>@iTdwh0Vku3s-;_?RrOMF2^00@FnojR#Vk%b{t?Xts*qV zKRdi`I%r$Zn6%XtvIy8Am5=?ym%u|?oF0Vo1rPS+?k6Y1l|Tc@V_-}k=w>^c6~bX;1CCsWy`fzVHW$xXf3@<{;#Ht|v$FaYnD z)!O-OeZyaA<&Eqxt`|9PP3(&oD+x(5tOdRN640b}do%drg;s{*Y{@Q0P;LSDtm(A; z;w?{l6tGEqw2TN^dDe*H7ac<05;l1S*5d;oEQ#8e3on<1=Y9evBBt!UScG%a*CUa*?kTTyS5=*)u1h^h(2PHtSFoNS8WNRvPpS0qYDM+V*xD^xk?Fjdl$>e`C9fEaT z-`-YUv0Ss~(x|Tm$YNF_S;5vk{Q?Y41#gu%9KKJ@`1;m{YO1!$VJClbK@c9{d-t!PY52h$xM zngW|l4x0r6?@1JA(`s^qHvtUTBpq8C34B03&da-P-m|de$Raz;A90$N(HK0*Pd+dm z4M=m6%of8{v`J~BSqt1F%9o1b9@P>#pAwzQ*NMb zv~0v0ydxX<&Q9~j9o`fmXY=H(k+$hTt~i_e)D7NgOPT%xy^Po!#0(?h#($ocXRIIr z!p;P`ug#yA7-|wF0|~vbVu`a_yRU}!;+;$yrXzCxA7gKqWJiv3*}h-1JCo`*l@uXG znC3sPUTcBwI#G_QRJYanGBdE9KOjMH69j!r#~VWCpE#3vsfd{(6y#$JL4>VHb7m1n zrwQ`+5jN$3Yx%N6@C$}i`>ddCgh^>U{x@m#nPh#av=te|QWLbPWVW@bZkBZJ2qu`#8-I(Ze40M;x13mZKUZ7Bx;CuuiPdLP|F;4Jp6t z_s!3yNgLzvFz^^f1-(7!9SwwM{(8CQDa@sn1WglBnilJ!x3%ntyPksq^?t8yL{JaK z9$BTiKZB&#B>Jzx)0u>=Vw`0y>5f7cZrerl9jum-Y8*LztrF7!f+dm=`f`QN8t>_ z9#w%gSme3if~=SPk@wP2$V^$kX1o zIh-*+<>^9YyC&%c8srm29e@^jZ%6rhowJFpCYP+Ly7gIZYj_V-S@VM-Z+&|9s`sUq z^BC`$D$A`N+v_E<-rUmAlD2uNPgmKH&)jwCD`e{4+Us>HABSuyb3Ejt$Yfow8-1}h z%sXYxMCN+tc(5hXgx6z4U*)~OgnoNENn(Oa^NObKMZZ`9Wldk^El(mN>V8M;GCG-k zBk9wC4bGXwA|8Fy)vF|ZAkeCKIoVU>?RK&M&C8(XCIIEte$84IW%)E}O^}b-iyrx$ zS-%LQ(*)`F5%!|K_skbQr3+~|8YWJwjU5$Ek38p}y_BTSqq4FiowXkO`k!_WOTaUM zKIH3kcAHq|eN$N^FJI)*rWf1Y07KY%{n~-<;32KTB9AtG7uLlQLfGrzj$Q{d2^1E2 z^ogv|2aF~!zGt1BjNg{?C+`_6TRQM>Ui0q~9(h5OUwVfLt*l83k@psUhNk8$`*|z@ z@;$9+w=SplAKPe`kiYF5R0KFAu6BJW+|UMN=H_GX>*B>*k*-c&YmfdV?wc_F5}KzCT2^_Lf}nGjyQM>Pz&XT@2&lqHRf^62T8Yicu#DX_@< zcq$cWrA8mWq9&W^WABJYd6Zn3PeUSOwN!BxkjK3I2Ue@WOd5|p>SRu9l3PnD5nC@5e3 zYp>nAnLbt`!0oKJ2k5zq_it+dV- zRL8TubP2NUT2Za?jf@Ie^b6snENNCs#e(?Bbh3ptHJ^|ql}u?|n27#EO<%^Q*(=qwM>@IFzUfE#OZAc($@ULj2tqhhgCmW=J^C7Y>fGiZFlc z5o4ZWW<^HOuP=2rqlfP+qY%ETuyv+h%WX3!jDjc*VIFN|Ek@9)EF+PHP(hDv>@9?? z0z-e&jOhZcF%I3+7juBevAnc3$F zmsfAufq$B%Jn!JLDk^%$F?) zw({yInMxM!L~>=RYi8MvwC$gndO? z+c-rn!YFa7XdYsPsn0ZG5q6LohhhF!>x@D)&D*s~429i=uz6vvGp19szujTgM@SI< zhDZ;EJt(0cw~Y_RCPAqmOEGrwxHHc>W5*QqjZ&8~g!MD>l@?*gg9cgi$*6N1dmOPv z*deb$)_gL(3=2L!-XiRL(jaR-`DbI4kNda?J6SczE@~>p)Qa4MdxSu-!6l^kaxJ#ud~T&>$h~;$|_6i^A+t(A*VTBZT#bT9uz)W?m|Y zm5I`Z;Oih)d$3d*92)Xw1{Gtcx%@RM3>nE{q0X9h&b|&|zuJFz*4YJcK7_E7#r1ZI zT7>DZsUpJ86;|`ph(#E^P2&-EuCREY?pcHpm~KT_OJj=Z>G(yMq7}rzc&LJ~<0_pl z!Zb?3Vh#JU^CW+D>kj%$NwdV8+SCZ!;~p=cMiZrzcaduacN*q+FT$v>H1!%I4PJt| z^iN@zco%K6<>TQqP*Z#(vLhZr^U=G4PfP$C+wJ_#$kinM8uK4%ZCQ-g)*sH(%FO^EJ?q_;?8cFM zT9g4m*kw1sv)1qzr>`;qj7?Ynmfl6!fteOE00_H&wWu$`Ie;@DFaQYK!rX;L*m>H> z$p9eS9$CO5tOaOHYB3ac(&XYS!r2z>q80;T=j1p~i?H35#mxX9tYB{0BHYTOG0y-X zth1NHw+JgRm#>T|=l|xMdT-__tkdcs_6E=hdr!&ME)CQjM$lU{WXiS_TU))BFZ(qF z9hPtd$k4!P@gl4u5Ok)(4Ir%U>&r!$uW6OpgMH`>%Kv`!zpWYyAZVNPgFFZ$!?=Lu z%MMGYtJh_zhNp7pKPI334NetF5JHtauRM)dgwdch5AF`B(k#Ww zTc@SY_|^)NF&$y+?1*z6S~ii`0R&7oz{3S@B0W~-s;_`&HC%V3d1P-YMaN)VmPOd2 z`J3zw9z4Q2Z#hGYu#Hj=nn%ZWd%oPPMcD4r;JU&&Yub9|z%9aPP(cV89cP5CLayN= z%-0lT0W|gyVZWNwxd>BF1-*6zkBG2>xwDI~Z%826tt0EKLdH>k3hPHH2noX^P}n|f z9bJUcpo01XFdqoJ(zQY_!f4RHL%-+>Anb{EFP(51Mx8JtnE%;(jl#zG(nbVkZty>AonW(P5&rni z^mD#u0Qg^ns!{lCB1%-yQGxAbcps-?$;+02g3>b>0ED%=0iIvBXayadFh&Tg!2Fv< z7$qtwJ>!ds9xB<%5H2?@Z4Rfp)VN_@;QZ0fMlwl^vWnY9*p<07>`E;-6!H_xq9Vw5=g7c7|nFrnL zl^WG9+4g$4B?-d1e7ff9=c4#V%Ja*pP(chAZ(F*4smmEDPhnK3Aj{OJE4bb$if^Pm zg;Ak`<}h;w*TF>bjg+S_DpU}QZ@OrNZ6JNQt>Dlz38D-0!y=rnZQ;|Pn-M8Vzvk9G zp0~q;#j$dHopLh(NV_Oa5`zD%HA5ZYT9g4mI8U}51W#dfIDM4?K=`cD%dr^K6XCRw z0YF$+A;9uwbU6CeBIw=N!rX;L7#+^Y(PAiU19LkIPm3@*RB$YY!g{m0Je_4&TV2zrgS&g7xD=mjMKw+-$#a6<41x?xK2s7>t zKUA}J0mBfDSq)N&8_k4prV5^_ZreWEXk`Dno<=Qw6P1l5_IE)rr@&%EsUwi^CV)y2 zxdydB3dv||RmN^afrkCR4=&we>PRTwG46_9o~1a2Gs3Z39>de{@4pR|h5XRe{mdy~ z|L+EuIUaV~u3R>V&3H?54}rUB+ZO|ThN07@-p+5&S!5?nGbc*8Se1jPG}vU(sXD!c z+&r+9RM|)IhKnfWy&t&Wz&w1ILT(K^@P8JM&Cg6rHd+7A;8msGk!U#6uB6xAnvyB} zkygl9X!Q6Uy^|F6^?{eg-ScOTw!|-s@Ks@hGY;L~JYyqHu?_WXhn2MNT;#a^*54Vr zSx0jcN&VmvxHs`t40ovCXT}uk{mHUTduikd!4Q4oto5w7bJPxcmIDDuceXI*rNB(;3HuhjvOQwr7ZwE z-3z3Vl)cNJj&{zxqu3u(#iJ8NL7P`(ici`y=SFNfa$)#F{md;vB4|try>*pSSL(C$ z_z^lpismnfm(PMKS&3nWfo@n{tPVk95wgnyL27a|4IEoOiaCr$tHdsbY77$X<=vy^ zicv+a5G@K$o#AH84eqKBZm*;21nZM0N{Y}hu(P5;q1x_jA_;F6_vD!E4nDrIxVZc5-ak^Hi@@2 zpOQtlE`mwSW=pAK%RK>R{=?75vZU-RrNx%{D|J+p{&=?+8Uln!c&&$S$3?f+U82V^ zlnE~((MUmyWhSg}E5yq~?3f1H$Dh^}J_*ru@b`TY=>mSGVV zcxO0gz(GSx!9N*S@R{CwN%c^dxLi&iI4YcKG~5i_Y{`D=YB}rj_9LH>8~%*&3o}%H z`2!(v3|v>Ar`a&6V7sqEcHjJdG8UrYtPN+I6-*2%V*E5_t04z>T;Md*(u`U#d06ED z--8aO{h5}}M-WLB_eBU-12!aC52+7m8NYkn0rLHB>j}p_ z;kgG8>$e3V2p6PVO0J~t8M1GQ7dkeu5(`0tn#RXm4EnrZwG~eN=iyw$?lXI2GXK4A6}!g@3rwV(3Clty=vxP+{GOo44# znJ9dlkEv8CG?a&=mLi-Z$(&ezeh2|x1Pl-`Ut22Q_&?stM#kgjItcwkyhq`Yx5 zX1m)uAs$Um(F8`v3cPIXTiTX*S6X{1dI!G^aG`4|Pmht=MGb;PueS&i`|?0R$9Zc+ z#M3PF9j!G_o#2UaY%OLlH+TJVikTcg&uG9#M+i^fy9giUYK24`@r}q677)npypweL#hy-6LxpI%4%6K_ z;AWlcjH#^|(F9qarIm%ekQzQhh?f!D6I?LB__I!R#=&<$1puDCFt0tGrc2M-`Q@U* zP4?&~1GMpjW|Z9*hTV3#gXZx%xayfZ+44*vp7H_5q+_JqfW2PornUX8At&jII=gUS zVLiVrS@X-xKq!>D%;3v)CCIp4X5HRw_tNF>Mn})Bno6c_#ceREOw8Wu^A|zH##1gCFR9)Y`DB1ID z&sI->?i+MIlVkXr9)NHK;}chH5JASD6lwALmir>%-m4 zagVH^22APah3Db^kl8iVbYE}jwq}sjq?r+E{`_IWS!{?m1?l0dJ>^9Y!7gUByAHDQ zE}$=PeAjp}Uo`e9I1krp*J{P>D2@8Xk#5zCG>jL?sI%=8g5%-)?@0obl|L7R>?0v% zMw)3adTFdlH_Ih=5=dVwTgo>L;8@mL%~qAZsYrJ)J2BhGX!;@y8yF(kj2P_UD<7E1 zxCj2$qwE3Ak!=DKHIAPc#pcHv7!qApa(+{CgeGdEeAMaN+e$qj^K=?vP1^vcmS4Gb znnd6%9qoGz|F&2E+x#^B2USgPjUk_wx+VYD-`bPPR*X#NbQJ6!gJ|}5P{Z)>mU_ak zRI{`#d`JEx%2YLmR=hQcoL`au1m6ZWqc8i@5JhN0 zv)AMnhy&R)2@5|nj#>{({3;d zVqENFIC;B|;o{1uIyQsK|6|za$1-%5I1e8lcv&WFHP&j5sk-B_Rk_j9RyU~Z$*n>9 z6FdJYM)^l0W{Ur%E~*-IRs1M&Y0a_GU)>T_jqK5RO@tWIDC6Hs$1Tr*>kAQ4Gx`K2 zDji^A4JYoR_&k7S>(awsv>~x3#B|B@F>FmU(^q}6c}L@Br=$imixzG#nPt2me_!V; zK?FnY6)|Y+hh7waJ@Tr<0HzXGmO_wY-d#OA-2E9^TGlr8m>!`iX#E8H>=UIoHQ}_Z zyBi76GwF0Ni)9D?XLITIiWt?+T3cg!p7Hc^L2FGv3!g)sIe+an3{&h(hnq5?6n||m zxA}X1$GyH2O#{yN6plDs@J+vMz-%R#yJ$_TgsHy2Rc=jre^fj#eMg~t^86lpZNb^z zw@tR0n#vRCn5Gngp5v|^0;Oho7W9Ol==OW+#o)H&r_Y)dT*20%~ zF}V&8o6VGY=tb;e=K6^+`qyH%(EO7GvDpl1)U}=>9BmH7BANeF)avaMP zy5#!E)?y3(Q>youF-Ltdn-*HV07F^?8x$t_DSoko)6nsE?lfb{TKiRR%gdDbg_@(- zdXm2sy*1!vf)tldG&d*s<+OEMtknX)rRZyTx^|`8Bg(W^&@h0xHE)MWnfg|Ami~V5 zbHHu%Pna^+V$%)BQ03%<%A7(hol>5sl9QlkX%eW;srw;FKQUeHBTFwotu_;0 zsl!pQS{OIUmmj`?18!vPz)>9Or51rmN#He`o0I>j*P`n=xXrPbV+G>oMjR$1s}?-z z;T;)RD<8YzE@eh8y~zWAo|kkD)t8I&wZyM=C6@snm!)LITeNiGRJM$=H<3||5O0wv zMONG#Dx0#mHWd*HK?=S1q$8?T7w);~9rwEXtm%w0WPb-ET$m{JG_9z-gDhtyt3`M# zeBN4jHt4TAoiBX;U1ihGE;f1!mQm1&Zcr+ZrB?uqN3i~FVi#1Wz2nYIL+RqJD#~9y zDqNma%$fY&h9waGyr(&Gva;5PG=vMuXB#kjJn+=x=o@Z3UdaCaVe8a2>hkhy_Cz(v zFW@S=sM~Sj7=F>_$rH)~O1kzuA0byjQ~ug&t0!?E5=6n={sS6gW@<)?BDv)9sa>{$LaG>;sm`T1ut z`~1yk{Lv?1t3by3fWy9tir7 zRoJqk>e5XCS`~__yxxHv_<{sa=*G@Krn$Br3j{7&u3Fg;>H=gEGI*?&71ou9dRMvp zj!%o`pt~q`&;zsT3B8-w!@Xen@QKaxV|}erP4qmGFTe1eGZndve-7bMecx5SIpORd zR@hRhvDOmb{C7bq_K$k0*`^tXvCzfGhzA%8;(BB=sc~x(`%v=*4wYi%&;Qn?f5R#e zpCJ*tfUI_k)uzjvs)hNv$`NbXAtlpb<}bh5Ep_Z$?#W~Ah_cD^k#E>$Z=jyVprZ?+ zq+R*WY^{Ru9&Q=?QHE7o8G0e?T!*#P8f9Ds2rAz1-d3~?*b~IFzS|tX6N0d&JR@=C zc+T4&Gr|@+{;kN0&SMr4+Ck_L=&m4ku3Y%?qt-mTvs}LguJKn* zwMfD)XwPy6s?ot%jdWmaY%Q>l~#gZ30+78$)Q z3>+eun^4SN>PtXX4A81ikGtw9Q}h>D;lN5noI%FYq-a3dCqImg-BvW)~ZgdDWZu;AI8M$*-;jyWR-Rv=pyub2#6 z{OoAknWh_10HrT>{H*s8%WElf&<@-fw|jIu7&eQawY5g4n`Xfb89kOq#zse_i(jzo zVJDWKs3a1hOtsbu(+%=#s9q5zv4mNmZ)lf%eb6GN4uUheOk)lcM(83jq`@){1tO){ z1{%(m+h}K};qOK2+jmcm{PlPhFC9yWx{jg13Odqj@N@rme)BPSvg1H|y!X8U+`Ctw zrEYnm8cBIF(C)r{N?L8%@>jx6gtwQOB-0EX><9gO9QD!Ng8tY(L4C z-)XE#^TfpW^PQ1f1~jCL?HT| z{%@)K4CSElT$pS*MH)%+P|JT82u0DF4*D6%NHnG?B&S8EjzjMaK4Alt30gm}d>gk8 zS(!NMJiDidCY~v<=AZ)b^LU>Zwb>i}DZB7{>ZZR~lORDPEmjsu3`R~W!Zf?4{K#cu ztaBg1pKWjGSNa(oVY>V+QnnXo|K>Czc9T^gLVr?HInu?0n{CiJA0|KRT=QweJfFey zEhB-5$VthEnhd`{P7Eu&l zKy*Kb@unho_;rGkmCn~3&KIva)Oz%CLTcv5pDalq<(Av=Z$=0v2d_PnQrYW!7ktj< z&H$o7yFZ*uDvd($R(#hlvb^drZBcMZ{LyxzOi~o~vSV91MhX zFBYwRx#wa1HO?-y?hVpTw7yA)zMPfP^ZpBKFJDo4wmxBn=Wo#Es-DSKcWDan|NBiQa2JSXAGHQ_QSQ~3$!oP3OKNfw^v=+xO0LYWuDN`L}2UMAA)@2 z7J7eY1Lm?0A@=n>;SJe1EwljI?@`tml-r2~XA~@EMBB-T^viW*nUqTz1M*ig~~My)qh9*RJRX$T)V` z(PtnEFy@-zDM8dqdaqwz*i*FP7kmhK^syi2AKYE>ss6F>jx$t@x1Vj5e!G}W;>;s` zLpUd$*aYHtVs#$^@Kqae1Kg_m=8hk{S%h70?_Xa1mj(vo?D|RfiL*$Epx8`W33lAsjQ!C$?q_x z#1+_bhtHy}L2^6GU)h)ORUZHuC&VoYz>b^@XHE^O(71~5>1_eL-Jwo1*nYPius2gaZ6Gk*XjILO_jSx zPfdnHQ@YfpDtr1c!rL6ICFmJlt2~e>yy*hsYGr@P725#xCrot8dHqA`cB44tZzyr0 zsGg08FmL?i&0&b@6bvc78nSFcqTL_Z-byv!CEJkP!Kq|x!pc9Iq}vl;VGq`f6dP#E ziX2UQ*l4yKYh4BW3~0cb(hiE0s4lx(6TDRRR?@RCT)uJcXdQkV^tbqJ;)d@s-ZqqQ z;*kQeo)fE*QL}2CMAAjXdjBfch@9uT!zgV72Y@ND$pB0Gi&!?UsDS+P#PtHK_Iu00 zcI)(RQ2tB_RMmD@ARKqLHy!!XfQig3Dny*7A~36U+;y1W@?jdzO4wU*(~)XwrqUG{ zd6apFE_R8{c!HXX6;zhufgs7Su`RiSjYCx{rRq83z!S=4F4Ep17>5-MPJ&H;K`dBH zc!FH)e@m9F)FouxAv< zvy8^Idht=cH#6LJh5Uxy-34+A;-B%AY?d|i04^bT%~ou3kPmRDcP{F>Hju0qI zaZk!?9xX%H+^Vt7cE{RYn$nf~QtGHlIabU5L??vA%k&YL0YOimA7gO42p ziBoAu1ZFuJ$VIyMe{5|?R5nDMZFn=G@bpfF!qhCbBMC_OJkI*^C?Q>7{uo6DO+?dE^-d5LDFvWcN@<@iAnzY5}Qc zTJMLlH@;JvFG`TqF8S&bk*Yz;Ecms#8xuvf+`f+=y=XPk?_Mq7Ao9=gmt!!kX5(u! z4e>eKD!`7<%?~4N8wdWx)9(zSX6~Ez+%NkVw{7vSD#7^I9DHoKsVoW*BD$V}R+6r7 zvt>2Emb+lel~*Y!m^`&o6l_3G0gFyhDevH#;`gf@TU{!WP+N_lSH;zT`0F*RfEe3- zTL2e{2ZV5_QSXy34nc*Z3Ta>sX5)A;Ro4`M&i1q)@NH3@+qer@NS834FAu`s87~1C zdOwIE6eP?NQWxVg3^tGR+xtU3YfkL@8(jNur?HicOp*KWyulIIq~_)!rH(~QRt+NSUzqdYz+wPRP)n=2$*Z2tsvc8pu_B zp&w9BTOw@N^giaf8-JE>z!tzCs2v7$9D*>9;)p41pa-3#J`4%SlKwk#G{q#@-;CBN zyV5}k_rj|vLQSabAr1Oq;Gl4y*YgFy_3Xo<0fM))ZzvN#+eLD&P7Z8J0IJJDa7IT4 z0r{A#bLzcLPsl%hK{bebdS1e^YOda9VB?gUI8rqNc%snj&h0=h2d5&pEa2_&vR9wXpV3WwOs2~?9J^B}r) z-2u!>BZejZy+q|RI17lrJXi~sunDUd4{=_d)HBp^Z3aIh7=Igtd_gB>;kL3lW;joR zIWLYvK-8P5Vo}k0iwBoP9_vdA7Le%+Y`Fp}myJIQ|BDNCF@Jcw5$uJReZrfU@NGGGQ$QzabQe7Y3Sva# zTY>-dX#m6~ao_`(?_};QRe5C53n)c{y2dKhN8iqwixv$f?xGms0LJ;K1?;J@(%2-# zg6OD!e?$_PkS*iX)3#?E2duDS;WW)F7!3{#qjl0D^r7!|!ic$I_oLfi=?F1~kc-r` z2E0Jm0=iWO(IGaPTf>e;7+~8+^9neI&Ju$X1|e_rO&vmYz2(vAcQ;w|0_AzKHn&apz8gW6ojnw zRBaozoL)}Hm!s~b@|(L!)(Yu|xgg*@6#1nlC1yk(%{J;3rnjAEbu}q}Bdg zX@4GcdrKui`c&sAdLI>$!A(w$d+X*K*Ixk=6x9n*C1W}OaL2zX81M21Y3iwr{yavQ z`f0@hreWBHZToB}f)`*(K4!WMo9|4J0pS&CD%Gl+KWwxKW(2KjnQ52HaqpJ_>W)S| z0dD0YLB$I8!}E4dNi1V=&}rQHz(_q!Yf}TA-u2~UVeup0Pf_-pz2zG?@Xy)uV7QYF z?eC`+R8e$Yc8~=R!8zNXL?mTJh+6Cmd;RwaL;Uj*mT3E&w97rejw5Sc{~dy}jT&9Y zkLQ}?LC03P%EnqEqfO^iAp4=;8`+Ec;pG&dx-;CXX_-Fl-4ds_ti!3iPgDOGS_j6^ zno1e$ww|rhnQ{rq;XY96BLmyp*=<|+AB7Y?P9dc(MfGCYD`uYDRJ}B?`1Ne>NEtkA zNw=<7e+d>ck9JCB5Gqj2{&?cegpaIq0 zRw;UwcL579x_gNn8Z>XI|YpqC<1FTup>MAAiBMgzT0bg zxcgW&@+$s5*%cK+IjldTuBo6zreCeT!t!VwX}E1!Jw$brtx^JQr>-ZVg6OLfmf~I* z?EBxzKWeOojfw!KX?|0lA!|;s9}4_p^oIKv10KGIr8-2|lgI$-S!JvI5}0mEkIKZS zS#a2)sZTqZumrVMHE+V;SoiE@o}z3eK#NLZUn#jI7n%KQ^kJ9xgx+~F%Sc?3VN63z z4;TQGi}e#U+?kx>BHJcNuweWk{~dLwdjdhf7-2`D;D2@5^_v5bF{@zhs?q z5X}`KgN+*jJ#-*m0qkOmL#^|b<^F`R8T_jjaS>35ry$B@+8?~u>g4EQ$mmQox>77j%vYZZr* ziIfvxLUK7kXYs-AQrye-uRD-Va&|M z*YfC%r$&xg$)tRTZg${lf0EzIk81b%4HkO0v4_$;3TrXd_(py)!QQtO?gldn8Uqg+uy0<&m!4-!7N|&POy!Nmi%<> zf|efO&E3~ysC3mTEbo}P3AcFEVwb*^QD^aB`w?|WMzx#WQ{^~=O`@ZgENHLw?()kd z|9@N+tG*9u^*S9nI{O&KIEtfm2QVD6e&k41F5};<6pF*dKXKl<1F#ATY zpung)sXy4Sq7ck9iZhNC)H_>c&QP$so3tC=5vqX{@9mZ8G{SFfP?C}{24{iF^NxIp zk@Y8+g!>+KMPSQf1N+>3Uezj{Erw*{Q)guwCJ>YzikMg{o4w^er8A*XBBmz*sOJqH zI;Ai-pAO|Un90(s8$tM?A-*#B4;lm#4Y$7atzp8*>3qQGTJJIHRP29D?4`@Q3YELZ zl_i(SVqHa>cXw{R`XC3yZLD&?a(on=*uXW$kQo75*|NRqCHnYO9J!ndfLT5d$`l=S zMlazfmfK2PEvL6@zn-Lc*<^uNhBGj>Bn`1OF0zgQ6CimvTRfO$qfEW=L8Otm&8%Nz z)Jmn=rFhrPCj*5GMYOFOb7%4fg!}m3H-a>qw_`sD0bmf~U3 zc0Oik29LJ40iuhIn{~Hk3!@#WQd8nKKay#dlAm|*zGlk8k`^UwGN(&Q3{c&Aw~v9V zuT8ijI&&!)Uz8zcGE=8FbO71kv-p7 z9%3IbblYnj&I&O4aX%f@frT0--4hD+`P6THZ!tYqh1|z-G?IR2dT60l-C%&M_ldDm zf07FJycjabl5x%WO_(_VTPgexOZ67rzG2tywYa_v?}ua4WCsvC4rm3TrpYh&G=AJB zI<#IKB@fAN%_-(q&URR-ZE`g64n&>Wp@Id0b{T8HB$;DLJoRP#8(6^+9;?Lq2sAp_L9O#t54C)NY4Of7 z;jX-LJ>a?}y!w5$JLKE(aEr*!V0@7AQAF#qmtP`~j{Vz!qvl87mu_~t`9*Mow%h`K z1m$oZEFy3dwYAS5M3W)e`7fu;^fv0dj*^4s&Y|;<|5W*u@5Py#uV5M2+lLD&Y*jDu z#oqZ-vISOG^_@AP460E?u%+W|!V2C>;%84WW{NRU*V zn_-^QZAj6BH^>sMadud#Xm@Vw=noR^65CoEKfyn;ar@{mvk3c&^8?L-c3pMOi5pJt zF9w@qy=GV({i{+xj15e*LI{%*cYJ#B0l>~(f>qjI32f_+O$*X^Zy@mNv>yLrWvng|3G|=(zj439Z5pek5X7%uHeV>?{lnnBNi$XY;O|CWSQt8$M2ZL? z<6voW{K&AR2(~s)K*)XQJqDJgnzN$)SW?53$_tGqCNjJm!gsJ#e{VJl*T*<}3B)E_ z()LW7nYcHGvs`2p2-Iz|o*dDqw8a_n3j#z`CMFxyUya1Tt1TxHn-Fd^6G4l@n~R|- z3xYG;)_a)9Faicg{<HQ&G|WIIjbQg0H{`Jg5db0rZ@o~<4KK+&5hf#4_qAqNGZehaK3(JWrrul1%Q+!11bte0#NI-0@$x=y+cHu~)y_CBZ z0!9QbWlBUhF&%#laNi}sc~GW|c^A>5{pT^LV1f#9@j=}YL2}dk*5E71`+MSUxYRc$ zoLn;pB#8Du5XO;n1MshN3m{nY7h62kR#qXzILA!O75t=z1uCQ~2tz)42VmEqdn{%F z4i2!5?Pn`Xa$(IY^kx-HM3`Er+^n1ViOHr1y9ii_KDo8R!E!j}=>O~`Ci4xhMu9Ys zk8x})6xPMFf*n7nNIr`12<{7gaB&U)a|{RGw1%~TdT_J3T=yZfCOT2=&3v4Vi=nPJi7EcD;G zau*qz%@}WWH{}Z}>#$~>UhH6hyxw$l{pe&T4q(3Q znA;xRbt%T;;UShnuB?d%7zuYCg|5|X2!h~Z=X%f3*4c68j?jjTa;k81U4t_{g!Z{TzsV&h#-LTA6qnWj%Kkm$V^mOdFT3z-R` z7i%hFcXd?wTOl0HO+Bwb2k8j1>v>K%i%dL^;m&br{_gIdH_P@)H(tOY{j*_p;zai3 zCPuxvBH{Kd83G&Kw!Y&1hwXMA9|pWa{lDU0#X>PwGnkV7?(OGl_xR;@wBechx5ODTu#ioc7NIH5 zKBqm4KfUPRvhT;hy%shv`>0QNujs+>Wv>r!kl#MrD8CpjG%>+}TqdRbr>q-H-aA7d z_=nz4DVy(CiWpq;(*2iWrt5jfS(%Of=rbq#A8w}`)A zEmGTw*gjCD`B39g_Lj5Zl0gzCkhfF-3O++1to(tb39in6y?&V?7n7WUK zGPB5P#|n^x=IwV3eX?Fa+_`M`Z3D*qXYBTmoqK9MXQ;NEC0nQ4+JZ3{H8A4fH2UV{ zOG9yfN+wYB@t+%ZJt};Nw7l4wa&z|nrKuOdD*#7vua^%@1a-lHgrcU5s}t?Fc~UmR z(EngKXlQI(o8h06cA@-ru`+tH30r|FT`ycx;dU~!1DSYFRpx(QG6xR=lz_xvtl!180WWQlNny?y+B-|Z1>5Y zR{zQMzeNRGz86Z&Wumrd5hh%Ak}O>uD@|WbR)lAKhz&_e5*zH6gY6mcgWj#?%kNP1 z@O9>liw?EL@G7yUb;{Ogk6$n9(_VP8_YN)fw&d#4NGgr)u2!W`;Hb4{g~3yJ6Gm1D7&=EOXH9JhKjqf|2i=Mi+@wTfAM!Fh@vxH zX$|!L@^@h~R~iUZg*sYV`KLf~e0o7JNcIojr9~}$lLJETE7f=eFyQg7ispV>bDZek;t*^b zR!PgzIuFIY8B|)YuMt16@>^1@K+`Oo^oN_`uzn)#mTi%=uheR+z19C}C77^U31$LX zhsghf=c;$C*!0A9u=;2VyDd0Snyay&(%9mkE-QL%FtcJ8`XAyN!;(Fas=j<%%%~aB zrzK0Yt^=4d@8>oekJmURRrTu3RDOY);M$_l@IvdDW&iOrg$j6^Uk1udsx2SXD2am7 zHS4+_j0Rnu95OcO2HFh6=maN8G-zHm9EAX!k~{L&%iV^KLb6~T-7zNB zT_ZIo9UqVpH)ju`sdGfP_Q&qgw$=l`XV}+<&okk&dOp9CUnwj`vajXs`Iq(I6!Qjj ziZ2CHXf%vtAwVOQ?)y2??9hfBFNkjk46ab%%HC8z0O}0%QX5r{^hwBj{b-(jD%ad$ zc|A4>QNEbXTowPUH;$hmCsHufScIE;CagsQ53ACH%EPdcczu3t47iU5ufSR}av$o? z9AMMlS`8%t>(hq5*bXCAcK<`@DnE~v|Mg|CIr-OJ6=N=IZlM`J=zb4(hwd_CJV0<~ zfvy-Xu>KgTK*J#cns?72^naZd_ZN=|W|si7#al)pSm|!$iq7YVkPZo!KDLFyqT*!p zp_EoMHZEw>1{wC(tuw`(2Z-b4aJIjBrM(E`KONTUPXV9 z$np={2(nG8NcF{bx&b`ty>hpfaliaTw*;4W%B17P#*1(sJv14X!l$HewM;)|VTC~; zPvxZ4{f)x{e_gcWlMO}`%GO%g=_gs$UiN?~Cs?!yB>MBiKikshT>B<#G_2iX4SmQl zY`H}XXl?NR5oPLog_Z?5RRXXQmrVu*j@RkS+mJ+{r67+r8FIhyFQM{=CAVhq3@E)8 zGb*et%xYEQxF*k?PeNqdN>vNR|8&$V~re2FoFr6hh_n$&8e!-y?kJ z2IB62otc-3OA3q#Ce46lvn~oPr?2fEBMg z1*c)*E4a$CR_grg zU9O$1H}!?=mv$|!n_O0GZ!zZ??SCp8iz!w4Hx-+<#zWdC7Lj0J*y&i0O zR~@iAfqz52L2~se#etAuUN-cNXOyC07;4ECsMI>m+z|0zteKlu0Ff)pRv;HEH#TK_ z43~nI`k2-Rq3wl#KN%0cZY_HRbpMn6p7Hrrgi&KsE6Wq{dD9A6z&uI5_i@Ih!`*4W zlj5fpI{$-7r*i7D8uRv2MJ=-Y*ZEh{>=_hClhIW4K|o?gzifrfHwK^AWw&C@Bgn9@ zQhexxfp}cP#V^ew%zRdj5=vrQ5Wg+u15ee!J0_E(>+4Bs=;;b7UC%yxpGC~RO<6@m zm~Zv|r$yW{^Ps88z=XI55BdErFH`)f|UODa}@aaz|o+7YFd3gWm~6 z_dAIh=wK%ux<7RP?Gni_==T>K?Zeocqzgv3*V?UG!uR?)j#LBj1S>5MAq~efK zJhyv{Woy;Rm^CxFE8qm3ySD9c>{oSziNJu;?@p_%ry9R2q*R5a=Mx4WR*{wZJ*$Tv zoT(q|+a%fN;nrWS4;jZt%)et0qZh`{XL7T1xq}*(48}Dl@5Zi;4|J-JD~8RR;cSXE zXVPy+WNt25c6}fb>VdumBO@w`X5(6EY7j||s@IqKH@;G3^0O9vdyPZD@WFnGnZSoX zan;2sqssyYK9c5#A9xZUNb`K&=Q%9JDCM*VuE@k*Q?vbgyRVh)@=3t>8%AKKQLU)> zg{$7(S51=a8+8(gB(0%{e^fxX$Wo6_??-vU|e= zXlH{LQ9eQgN6wmd-}?Df(56h|yRadA`_B25L4Y0D8Qe5&p7LWUyIUq1J#{R$s=>5@ zpJcpp(Y?1oj@b7r@Gvt`1W<{*fs=?>3h6t=jk@G-_Uw9nmI3_oEjhHItefIYtUH zi9D@1yET7xbBaHOvbt|DXDok{(eH4T{{G1#j8-ktN0+J)Xs0yudJ(r?jPc^Y8s{I0 z+AT8o*0AjLK}6wuQHb{Bw>T(g`6xAt<=Cx*q4Vc!U$~uOr}c0i^?CVqW)v5cXwjFz z2l2?$>?m8W)u@uabozDeZTi2-Tp#uT!f`fV8ugeSm{e#M!GegG!#o8y9>KL_<~UA7 z55(-_6V;hr?QhS9{5{JMlY4rDv1qYHeCx1mKId(F?-^P6E^U6;!?Fi!M?Q?k0?2fD z$zl}8h_{G0-22+GE@7h6=ByMXiNmUi1B=w9{Nx>3cOcQB%#)9n${AnOwQ zQ2iblT?@{8N@+h`#TdoHw)NNfyZsb zVdBCUY#%7?vd6B4iUG~>^A1^6_-gGoz>cvq&KK{rpS&0bcz$ybY$Xy^@yBeF7*i8E z(d(jpc0tJenvcY1!BWf_X9vsNtqDkbq|-#ag0GRCfA-oEE=!vLsp=2CuX`!KPMDsy zu{Oz5B9iSp(}19AZoJ1crFHcfh2jINl8U?SANutk*!-8)u<8Lt^>qq%Yk8m%XR5azE<^tx$`;q6Cuc$*u@R*-a%qm<*z1nk z5>nu{uzb?MSK{fL5%`hAYU7ZD;+D})0dszt1y;*s%uOuZacK9NJ|d#Lz?b&zxqfV| zUQ2d0do&4ZsDnAmu~De4?L?3xl-C?)(+Xsmy_ENdiMkGX;c-f>lSP<%?FdcS;?K+Q z2i%p7mv7t`jL)B#6J0U#?~OhmzI8 z?|nM5>M~dVqZfhQV|`Tx@ai)Lp}@^dx+llqU(qoWDO?9LBZLZ%dVk(rXXI>78~Gp< z%vyJJH*C&bPCB1;@S7fq4m`{Wf97c6h+2+@U!cA3KKGCEB|&WXqv`9Z%~R*MD#(uAe`Eb?c7(rW1-nF45BWNtTdmn>Ns|Wmotd zEr0o7{eHl-1gUhSu{jt%@w~a+r>jV9+Z&cSq09NIbhcbUoXI)H?`t8zvT!G8eGuC7 zO%lf|{o?n{`H_>L4y9KK<&D5#H^s*Q!*#mPjB>LyUjEgar*aFz!i8s#?|WX=0}C1m zoyBK@X5LLu-;)!y1RQ9m*91Pc1|BM5Im(H2bh@NJV;pe@lJb?bzNgo56HJ;mEo~TT zEyte=z6?LCyUS^dwfYtdEhz4$^lgiG9J?9kPERtdh6^` zbxe18nw-BYjPg?{gy#EIIBhWV9O~7--EvoD#w#7nA#;k)x)G$hqyv}Vsf+SIv{sXP z?_;mxeFD;xR{S8qM85pXb@rDt!6VbOwLR}y0=WmbZKe>5V*4Up&5KEr;Z*m;LR)FKWz>P$*->3zRm zZE5p?;4HmJN>EbK-5YFUf)`sF>PtC2wNKIV+22(!+FFD{49x(mSsEApSix{G&1BTM zf?o8Aku+}xk&L=~vPlQ_lIYOzxMcpL7aRe6o#!5sP_wUeqPD}PbJvp{BvF67!5$`f zb|#xMIfwBf_mBva*XS<~M0pb;Q76%3xLK5K4=0}EXyOl%s{3e=1%aL7u?q13S_kG2 zSxjuJUbx^De;zq2snV;^8+ps7cON{wC_Dw@svFh!(c;dvMI3~B6LKoGk3^3c*lULJ zuRe#JZn-VrHez~E64BF@l%Vv)_M>cClbt$N5PaXjg?oSao(XMU;yFELHH~`(gZ}xw z0@{wk15;?=BaiXCPN?vC6U!EJ@hs6XPp`*WlD{l$>Uu8Sn4;ZbY?1K7a0jhx8B0Og zk0I^`i_G7@sw1?2o|r-@`^s>NDE)h z+I?tHkY>q4ZxjnrRVwlC0NhRHdV(It6yFQmaRSMfS)S8oA z>b|(8^QnFe$A3Gtl`fQurUy+KMJ61*;l} z%h{PJI5#J_gjC?oM#*FM&&C$GXT5uRb$&^CmXfMMT~rV|XkouN1&>v3MiHP|SEVKB zN*edLEUv-F#64Ijp_xyc;(4QyNN?PX8F!y#04Sg8y(~Y->((=aeoQoCR!H*(et>Oa z0q^MK6#n9o-`8$V_B5=wo2VzQ?1b7}lwI?#9@);dh}3`BGe42tk0UtWL6dmgcu@u; z!<3pVt&dqfvTM5MX?!U1OFb?nHhOVwJ~ch}vSv!>Wmlmdtk^wr3;p}K*GeWt zscAJ;qf$G4HmWLP+pul@{53)kC&VZ7OLE;^Zfq(TUR6_-BajBQ?84f`T;mCQpi4 zOrj`x6Q#*IUw=0T-NUq+fJ5C3*F&QQ*6=L4snUy*fRnaxHzm*WfGR)k104sveO3KJ z`DH;OLbXXXRBET!QkDPThl2;ma@}(tU+KC$hoFYhS)-VZqTK$ms56t-EncDifScY+ z(LDJ42ZxrB1K$Ss!THU4iSk$-<>o|aTY`h@?U!GZc{5SS9`>@)<;RPsnoEJ>hhi6$ zCU^&;n_JnU1n>!NqBVahPG6<^ruqeF2OAm8rkfiMPEIja{*R}t42z>_wj{W_yN6)G z-8GQlu(-RsOK`W~9$1`U!97@T7MI}e?tUll_dNIK%=YY5S9f)tI#tts85T0bh+JpD zH#(oD?S;*~p}&G?q!Kp*t?A0bnsYu;7hLL5Ig4obsvVZKS+73P5WY<}BFdZR%_xCy zTkuocQ9z@bRQ+Tl?H(Qztq|d_n5n$81=*EulSW^2E5&u{aP-mEx1QX`PY25_qEmE| zOXIFXC3uY#GY?9mUZ#|4{U3JNAXlR@yp8P>h^q0MxA!U7S5HMALXa=byc5CAcW{b| zYhQyA)aUp{lP8;pnRWhB3T2+d{PK2~{8r)4)RW7chVr%fm>OPrq~b3-qyskVeB!r0 zM8FESH zrkE1^Q*tKi(^fBiLax@le*MoFXrHw>Zz=wqt4-8-m_RRy(d}KpJpJ*>WqmvsKK6XH zZ$a(0x2dvz(UOjAUp+_Ro6BYHVX+jI%D!ecFjtGwU$yD`qF@N4Fgd4~C$_5-;sK6b z^`Ec4CUWT%MxH^Ae+bPC5osGdfoZ$+`%uH}a4QU>2K&4MS|9!?*)R!7k#%Xm!zFBY zcuSjS;T2lH)(*qX%OVf}QwpP#%u@P**%rg zssIZi_MCp#?|1Ow7`AKAL1oxw?gq`4jx=0sY@RD7Z$Dfn7~eXIrRJPtWGAYkQQvw} zI0Tu=?b;Qj){8fCS?RP34Sve4x}Qa(-L^wTT}8L24HDv?<``^a5Yzu&bq{TM43qVL zqQ;+S+#vc}^+e3X;mM^!%Z(Om`~jjBI{@#>6}(pvG>f%XS3!i}->#@$a$xV$RZy!P z=_H+Yng(%#d0V*(7n!wjt!S$HP&(4)eK8zRBvdUv(|$y)+&12=TGFNTqrH$GjoZ?D z$rk!&>Fqsv*aPuEq}xS5{+&hJJw$7A^3gK-ogdp0acW?Uw7JKDG6bhIPE%~Ayd+pq z29{dnZM5nSn9<@yxt8x~Tq|Z%Ml*KaTXZWL-hX4}SI~d(VcZ%L~%8f;IDxMuWGoe4p8L zSaxzjvO5Mso5Mu2E8)vAdwETsb*bd?4~hm(L;HShvMjo~<_>;xV9(TzpM0yw&BL+c zYRyt>qzIEp2z%dGJ4cbl&0RynWjH;&7%8LiYDNsarS^?zm($5Z@*t5NLj52~86zZ% zb<=-Hi=9VQknXfLArUD;>J2@!%MCLp9aVPh!c8SsjwpJF_!$r*j3KM0^AvUs1`qp#4v^q`Qlp z?%t^4McMl;)y$y1m7L5g;-s>pB+RH?NPkghqePC+Fct1!yga9V5zMMx$j-$-SJ!T3 zvF&|2gT?fW`Jb#CU*L8*mpo$T$5uL0Ck3lx%JIZUCX`z4u2~T>CQXQ3)^rST>`Sxv z2Uz`RIrue%_WUuJ>u~G$CCsmRQNG^t4if2!5mQyS+I<~^=)YJ!u*;cB%kZ)A zS3g@RcO@Z@h9*D(r@~~wvt!u^%kx%`^?@Ow6YnRNWwOW2f zTZ$oH*zyHHB?2>tsx%tR%W84~rF(!jK%%pL5Q44<8GbksKJ%$e;U~Aw4;^l!3l;g1 z>$c>4dKF;yF3EbE01ut7;QE4oV9ruUFeZ37n zq4WE%IL22Bs;c%#0&&#w1wHA{qx+H9&6wp>{cEH9@&;aPrUjp)aI%kNxrwU2E=-{T zcqV3r!nS9$8$biTaY&gFRN0$rf{jH#ieeg{keVn{uBc|dY%FK&3GSg&Wo~*^Qo4*r)5J7%f7x z);8h%B70MSk(5t3LEX+!EV%$|o((*Ga1Cijct7g~pnW%bW6=;?>-^S?NqoQGAM`AY z`Lqtfb#TXpHANcyd3%!jA&o1sdgF*SuorYaUG9$T2wV$rMi*r_qu6l^Gr=;!?tM-c zsgr2^E_FY6HX*Bq5`(YV5mm&A78xpy?)z944-kgthE{i`->InqQRyeKCi6PUZhf|{ zsb1p+$>)5#m!>B&E}#A!nJ*h~4vNq%v!w}q#PsrONsETd5cdG|$nZtrJwDq)9qAX_ zcwi&XfmZhgOuHZW5S2I1jkuO;6RG-I8=i~nvWMV^@xG~+2!8QHuPcw6%(Dn!#R1cP zGQW!>^*jM!>CPFT7dKTiCjJru>|4$w>Fsax>1Mg$?T~7ds$olzDgN3d9BV@qV)kHG zSo>ilmu2pn1!^^dolma+SF^J0$_L&#dZ9Udh6FOKEnO5pCiTp6*d* zJG9YVFY9GrIER5`_ui&pM@-}DXZ+6$yaB;>gxCoKVN1h^D6ydnP$pea%~$m_2OPkO zUaTLyJ`>$tn6oBp-QNp%SqJ5WeNF4$g-b1@YEgNep^#zK9~@QH4$0y zaZ1m6#bsceRFL{NOO0qNW82?k>U}+)@9g`@Szf)Yf8eAKCA9H($yOjz$W|KDb$SLA zMPWSmB%f(I*5wL}@O&xV>w{rg8bLXfl|uL1$UKW<4HWp|^ltI**=Z-i2BlV*4W#bB zdj|G>P&Vx%E7Y@r^ps0-9)CCYO|61F1fO)S@(yPYAC+-aE53Et*c&hUEqjL z@Av~hu`ay`QS0a)SD7~wi+Rz6I60%1@!v$#z7fCVml(m1QqRa_^Par?M*{4QET}8c za_x_7dU5c|hlBn+T*pwjXUh7>1ad!EqeS|%i-KfN38B0$nTykC}H$zj@K0M1}1b zc5C?BJfV)Ei9eh@HhD7APDK=nv{%E9E=n_s-r?RJ29l(2l=>kl9a1BXy0)b1E7km$ zZdqB_{5?zx=SnmHpa*8MpJYNaStJ!N+O|+^ZYApz###b$2@vH4_hlA#*BCeCD{D|? znoC`zKOzWE%q2yO%M${ez}DKRgs~D#%H`hbT1V;zuPm>0PxMZhwGw%NJ?rVeP${nV zO3Mjaw!L{9vSZZoFT9l6fBMpF#5@!39LRhE#HRxns6DBBEUU}6HiS84?%NeaV_!@V zFd~MVpNoK?F7HZrK#&HNsD6@2QRB2ocb;xoD25nphI{pj9nx`AL;txjeE^`51z4n7!Ed7UQyO6k?ase+dW4dZjw8 zu6(+g6|!++i*uw44&^%<5Upq9@wkh!%msy=5QL<5qY@OGm#JU*j<$p*_1?*Lc4%G;A8TT4sdR8t{o ze>Uapqsy!*Es>jOdHyq>vYX7WA0)+@!A~&V)ABpOBmLs<-=O{d;vt;r{^xUVD6`V; zr|e_Jvr9kBuf-B`fsVS1ZKm;>!%BNj+`tD0aw9dQ{1j^r3ito0khO(LJ^|G4iKXaw zOxd2SW~Enr77n@@R%KijES*682Rpx#O0%jHht~lO)iPub1bC|n4i{@B?e`XZ3w0XD za&eCK9EC^-I#oHGUJIYvSsR?Qrp&1yvp59YPOqoE1G==nfh3ob@W$Lr8kYyNWOd%# zrv4)kChv>a*qgJ9ddpV?$888J_n0%8?W%%XesJvyn|T4+523I6ipmYv%?V@%C>@vU zwVD1NFSEl-s9cu>NW?xA_0>0TU&B*R!f5z)Igjxe`U1!ebrLa$cb@n^DfPa?Ixf3PpA3n{;cChX zB=YU_>ZAlZHr^g=xo}$-^BpY?`!vFRxCW6Ajfdm09No=-+$Bq+*w+T_(IpSMox)f; zx`rXn2;*xPPFFp(Ip>CW3S45>(v03UCP(IZpZdYOeQ{sV#qZpX=;70=8{+(N)n{`; z0$F<7YU(Qn>fUKc0q}Z01IT@t(jK3dN8z1~LD>~{G=(^8FPE$Brr-A~fXNA!wH`&M zVihc6;ve`$W`vKjRr~?mZ*C|Lv<;#Er6x(!UZKbbSsT6+3hk*MEQ3mHWTHe`n7T%Rmu_0pIahj=Up-zzr7B}_co+ECOZxjX{QV2S zPTdbxl6WnZSwqDk%mAoH^vJNpXy^^%?vfmE3~75uSa6V5;lu%E1=9ds9!HjQATV0w zz7)pw|2O8yFjpGtI!(UTh7k9O9GT{;AhGSvqI?;2<1((WaTS0a{k8>OSq zROe99@plK8U4V4M3HTecSu^3jWByeT#$UajzEI{Xk}ap4>Jk@nXUOU9=~~QF^f;Rm znU9XNLMk)lwDIMyp#0|%##2SfhT#wOvAWNapNFDTIx!EIS2bVs+RYhkt!KL<=~e7j zeAzS>>Z&PN#~-|TRNyDIbqJ%!H||dt5{M_+fxYei*%|M6BS`wGJF{zc*h|=HAcOC< zVS0uGg3l-yPp%kH!1$$dYEJj=J8F+g1#br1(K7+(%1|BQRv|r}q_A$B$|(vd8_f6w z(?~Os0wh`Y6@v9;Wjy>G&(eQD@oSX-tW)cihjprCc! zL-GQ%;%Fijee$OsHQMzvTvq9lSCjd-iC6^JqJ?^^89bLwT{3kt(zy(x;u4M+O|K6y zsYFbw$lt%)+>qDCxnX&6@~Z`EdCLY5IXhd)4m^B6i}C(#4V3wQ;i;tMQL(5eMH%= z=Q~4wW1#Gms3YxtkktzHq^*s2gl#15Ggt_q-@f5vZ_ZE%kPc+Hw=uxY8s|R1OgRn< zZ$jBUCnHdXPYU_8Sv5Z4N(A(PvV{VEQT?*#q z&bP7<4qQ6X{`dK756=P2&i(B>yCbG~{2jZ6HUECLFP@x7D;b|D7=wgD%}BT40ki{ zh>tJTy_g+46?803yF=;dMj`wX7QPxeUC&Xj2j@;XXl-FW@ZqtzDHm146CY0T60~G9UA9q&wyXwK3QHUX;^BxWE{&%sV~)o!K%)cXX><*#JNZ^8z!Bi)Hh=uQoOjwE zmD;8+`N}R*D6fd2VP2)Zc!|^+nf8zA7t_RE(yX-gie0q*T=E6c$xYlgIMpckuE)282s~36CKAU zry?2t9#U4c9;7iK`i}&91z|46@E4vxE0#CVsT!w$q*eSwIGZpP_D<)oGEQO-sYR$I zX*OST!?Up08G;Lj7yH*fslBP93rrVgEGiU$J^mqpxojf<%wgSL>6AdyfO zKSno|BeU?A*x(BxYMJk3kq053izGplNaG5nQZ`>r5h*~pJr{TqMq#OaNm+JwaYZoRT+pIMM zb!)xhcH~d<tWL zj<>s=ywDHa|0a2_fJo%J1+!z zBddal^0cFS_kbABt4H&1NW{cCZoi@!guPIn-t|{H2{6l*0^FHAtozeybquc&*IO`K zG#(sB1jE6utfqusra$3?%>!d%G(gWQx;qQ}IfA!Aok%O2t2Z-`;PJUhZZ>yxv2NVpw3(!@rr9W+<1)VEz2UganX*v$Hw;umEA|Fp5Wo@}k z@~a7LIFvri2TruS490f>SA=;|W3x6F(Q;2$8TkR=<`v_dJB*0mX-C(uH|I7pGs2eL z4Yb!r{x|Wy^aw4{UVDsi!~^YJgv8D{bjim9e4fGt{R2%kRMHh6da>-1wdv zZCp+l0Gp!W#nS*oV`<-!Yh{oagOZf4Lq6O)JCKjcjKZdy(4gDP{)*JzTi?aE_>@b< zS5{s9`-_kN3aZ@Wd1~QrF2P& zP{zce9z3>;l?Mw=Y`1#TE%-xhFbsO}aHZ=ZH#(Xt!g<#Xu=DUDOy1H7@my)_dYN)K z=9`Wisl~%?9BwU`ZSyOhL1Z!6+X?$O^F!-sy(39W0Xq5Q-T2|xJ+p5j2Kl-+@4x0! z?}B{KGZfia)?CX=KGG6p+!1*8Ed}f{bXR=r{NWP`PIx3)J4qepuG+puc zDn5Z0LIkkg@&F#VZ}bzJtYinpDYV*(_Expn%ty>S{rv_Mpan9RJfy){ac@hkj=h7z zR6=GUG&eK427Q_5y$%Lib_nt*&kXax`PaOE!9s zpB$$cyv6*|mVpl_r|BD>&3+sO4}_Sl=fAKK`xvJOX(-A^eYZ@^%|FOms)lC__K4=r z``xL0rK!Y7&ZpWiCIP_Vkh%2B38VQ6ZniRs?*L1IseGTsq6QW)5I zx{_{05Xftb7`3CnNbrP~Xb@8=wkoS!kw)?hnEYtcCKU7zO_=YenhAF?w`;L2rDUdO zQH3K>=oVX0Y1D*UoM5cc%dznzNq4Z1@bx;K1btjbTFMVMz1+}Z1`l;=S}#rOi z>1_V+s_<|iyO-LNI_r~jcRpDpASvxReBKQ-zyxC1_r2SeV1>2%e%)RjAYj90`Sj(L zlgib0Xsn_=S-D1{r{8SY?w53f890kellkU(p4 z{&=+aNfkC7RzQ>era?1=#Xs`FiF&7 zaJoBiUl)=7%BQEPizFy`XKZ56eGL#<|1Jk(h^Xzp1_~`v67%=i@xx7CA6Zzn;PfHj zql-j5>$&;Y<^NZ+Vk78_k&zIhy-K6Syz~F)B-E`H%EB83uCL!FJ3di5c|8 z&KM6f4Zd2Cl|R`~qpoo)Ig}}1+Z7%3b^KR8W`1bF*xI(J#~Yyl-qznY(nGU~kQNXjxGxzulR#!j*OUp;5nb3PX?ZfflovpO>UdA>&__UKq*H0?X8aKu zD+T^m3?t;FB}x4sR>aO_w8?#KOCUoxoaC!|!DM;dkA>S+{NeIZd?s$LyPwraA|RvvdoEE@#fEsch-HIx{Ldiid0BJ9 z@9TILFaSPkXxb}6dv(=tG8`~=51XDkHs`btx+bZKnlT2B1 zi|Gz*d44lvzq)R#_(djRc&O4kNJk397)Ge@_o_4{yW_hDeF0a zDjZa&jfNoz8(mMkbq6P#~&ztfB{c?3A zZ;zC$E&}|_vEC94!i!{ATd(ef zNAP`7%jk5F>7MbcqhMuUnt3*^dEO&an{pM;B>yT4v_Z@5y)V*|zU5+%`Y>IcVo|i@ zya&2}OOnz-B5iZGae2o)qmkFs7fvcv9Zw6mYt4v`?7szM13ioPw+r$PGqiaYReblL zYz*(RnZEvPo@bL~74yMAEKlBJ!_I`W;wPVhCy=4QYqdb*En(03az@_nBl>pIv_0{F zL>mmdcI`wn!{OEI2ev?qKudXLe!{Ss^?Uk#7fbpyKOh_47e4-JojodAgKp>0#)aC6 zaXL6xg<9-!tt@8u!E9{&rbW7`JQ!h)qBH*Q;hnwzbLi>l$)ebgzI)%00Pw(@+F@Rb zMRKvlUuXE~SvnkN%mQ4G`c9`{=jmdd=FH!eQ8pta8WQN_q4CA9FpmyOQ^B>SlAs8| ze!ixaYX~CQX#2F`s?^?UP|;h);wk6ehg@zOTSBT0Vwcgxu18tuv@KZMXW!m?U&ZBn zw7h*kXjf1%MO7-tHCxQg7Nn4S#^pWkqr#1Bq+j2k=YE-Ofmltq9Y?}@t3i*jXrvr4 zngiJ)d4|wvI()$2H!v#V1mf_%KswP!md&MSse{^E%9AYBv3n@k(YLj3 z>)@tHqpFVnyB3UlS6ksits!#HhMKG;<@BFAH;(I-dyZTaZH%~_$ZB^SZ|$kjV2^px ze|OMQuy2^(=M~yubW~jXpXKXov(WR)ykuBpl(JY{>*M1u=b8~v^7n*d*C0Y~JWhpl zzBJ9Vx8j2x1947;kWdEppIlCm0aFp&=n+`PHx1+cjRa78IrO?XJruSrI2g#&K|nOm z9f)w7wbDIPjHH8c*iMYB7yC(FbzauTCXUtus1$UG|A#kBALd9zMw;2hU3;jIzF+;3 zX|e>mLoLAj3kKEJwGPMArudA{XFR4vi!PEcii;!Ll3Y^DZkQz_~Bd$2Jp#?7+V za)!=4d^dpXDSdW-!cT`L_TnS+lYh26DzA<``5}?2e~RhEQg7&!c~L`5?Dx5F0lX_< z(Gc#b{6MK~#%MViUM3x%Hz9}hqzPuUl&H7;uLQ7M`mQbpi&|2qnHRwr{nLJma=0Df z0QXo_t?N;0LbIWLZd0-??}|2GP$!Ije>{GSviJo!P~FU5Y?lu!F;Z7lc=F7EkSp27 zMet$*rCBvVY=wP_luU1Grn51hXTy45AjUU&)S1jYK$j{&Td=V=HqcHr)8g~%eM`m# zm91CfwmIlOJ-=_+=^nAUw0HQ~D5-GWdIu{`*3Lu=dkwAQ-DF7TwhGJf@a!CyK0N)i z2pP!SFIfV}#Z=ybU=v3e)42fjGZ{f=_4JP)k^K`eGAxJKgC`7bWuoU?FIr3uOFuDL z5|-*U%mj@cjIVe?_(gc|Bul&T#_-CYY|o|0rG(rbDn#wGK}_}|suBN{%)M_JySe5# znx1O(f`Y57d5lzIuy<>%;bz?Po4V5mlC6$LiQA;)ejImRN%>LE?ol1(Zo+My*oHj&EuqNV@b!`jF{LA}bH+WDMBl6Kl z-y~vp*i+;xPlZCuA>G=xv_SL2&lAM5QN^aB54?C0gpR?Pnu0JdA!zMlXN*KKa^?57)!jB`xX z{H3SIL`B5}#lf$~7HMGW8}(RK`FWD~#C)R9QMat@=#*>b5mw6?8Q18)%3 zK`TCkI4ihFFv~M<0~kfGz~xXgbSiQMKU;2P1=o=1u~g+F=QYj4C({F9?)jg3@ViS{ zHiLnjN=L;w@-_>1RwZUc_EsP>f}6j6&T0h7d}@f)UMR5FQR#y1;(DBVoA-@>Ntv%z zc-!3(%W)_{H7nr$TXb$1bMK_Ln{+C&8hn@m1uq3sP4K5_KQQ{y^#WdUa+ z{I0&(JvWOB>4}gFKYNAi293pAC%1=5osXuwE3-HYs^s6|fstCxk2)vGdyLca2L4Nt z!XqmI!)gL;$=6!&idxsUF%dB|(3Jsu0j%+_TqAS{ee*A|ZLV+@943+hzNP2_Ou+MM z_QtbSxIhf`GAXU%AQH6IzE&p+un1_i>bGpt;Uyo=_Og9i`JizQX%2$%2F8x!CaAGsx+-!NJVbV6A`vXvf z32uN(+;Dx1Je#8q$1VRlQ)LTM@2FJBm75@ z+J3xih(4PsWCaUFv7Wh|9u9xnjoxKv7KXmFV-AM7_=*23trm2OKwFfHUgJ%{Cy3`9 z9P|2JB)PqSc8bLR_QLZBIh8pAmTdPpl=BEWv4w4>$hd=S-z@$2+DdYh^8mT|;8$4P zTt3xOJim~A2XS(WkuXII4Dz1Lr-+F$;UVxW?^kw#V*AF=IIS_J;bk~ByYzL|qU-B`_vM`@5VappT&yHXJUvJovL zHb!x=4{kyij+ppq%oA?Acv(M*)yT5@{O06dCGWk=Ti~1j!q#XeALaFS$De_SSMk@l z$$DJ!xT!HqG!X{jTXXF$E%K0{lVRescW-(wM_VaWys(BMda~X$7OaB=3dgthiUv@Y z&4AA)6!2{Vitt3dO*n~fe8@b*wVK|&>E4GADmk^iNk%yqi3SM?eC~Q-?~x;eOe~uX z{=AZ+-biL%mQ7o5XCJvIGIGE4_HK9>j<4!;R5qse{$AcpIxXrX!6TSrJJkGfj+`pu z)ow_K^_>fmp@jP4VYnNcoTEjtO)DqqchnY|?WH0@b{txuhbBtpCe551w`@TY&6Lw5 zBmC`eW@q!TxAr94RG<_(B#m-Qaq;l-@_{0ID zdL^%Rd_l)1R3cMLoV(dtcy*sfT<%P1=O&yrzH+PoqnzNjrCIzAic+;1jK{$wx$c=F!?&9Hzr^Q%#;lClCBgEvy^PQZ;3Ef7=sxU- z83)%PwQOp}>Sd<*zPNnf^mO2k6@y#^xfa7;#^0o!1=X(7X*49Vw+TF)Ds>7JDgi|} z$UzgL0tize7VJYlwvM8tQqU#44ot)dDD#SJ^MDa(!jC)!T4tifg&gFF7WxPMye2wk z5q-`n}z2>TY*t${N2D6C*w%nk1HD7?R>{T{7X#O7<2sB_^K z`Q~~{yz)Ys;Od;mKS|qluz-*FO)$B#U6E9by_Hn2fPiAK*5`pfY|@1vEFa(7`K}MV zIr(h*pu9GzT1%nxSgk4BOtwrn4FPfo05A@Nx=dbN+&5C`5e^^vEC-J#|Kf}usexIv)oSL zhS1PKZPCb`#+RhD|5WZ}qN#nJz9*%#{uFoS4~(+`tYMI-+^|3F=a{_IYI?Ww(ejVo z=Kx!bKX{;aDAy6S1{ZSR*?O5t@)fq?gkGTS+Ug6guCGqVDZ+*eGry{ZYsOX}PRz)f zqgr**4wv^wLKtGC5lNTHX!S465{EMz~tVF`0A# z+Zfm#HQ`sU4jM(>91c%XL;-_Roa68PgJrQufA}79vX!mv1H_echGq%7%|*TMbV$|T zDby)={*-|oc|X*eGQ5mx)5!4>1?;59id}V#uc60!vpA0Q7-d~5?5r3s#c!o-4%hd)OtU-f}voR>L zG@pmbN~>q|z>Gv5USlYNl}aR*6MB@dg$ zo<;4VQ>b)JelC7@AbMFXW24K}!S2aOGC99Nyb_c8*tRtmUM>5gzU>}p`XR2&(U9Pk zDq^PEwXixSai$M#W`0`}Jc9Sf23Gb@MNDH-W-fNcy6X;}1IGMj&aP$eIldTsB8SXV zl*<&}x+;8FnW7k&k$kfGvPfN(Cs-g55M@M-U@@p!%i390cp&u6h#3$DHvuI=rf6w) zh-kjt09-*iySC4f9y5N+$JT|`SF!0Dyv!3#4M;KEO7#6fZr8GpuS)8Wr*+#oyY!nb zh-_T}uw6!6zu>G!*-mzt5mZlXQbAYSbjc8Z~G zf)i7E8;9yi)i0ac%duxGvhLYD}Nnx^on;g5mG%y`)K|2A;vIzZt?ca2ni<& z@TLjdRvhoX@?<=xCTF4vRd8;~b4DEMx?Q=n9rmPnwCD@&yC>cH=mt*w=0$5_TurRF zg$DbYW0&ka{FcK+ZNXn_!90pObA!$6Z&rC5XmUvRAPHI&d z=V4Qqt*tSn*toggYwTg{}Y*d#}*K_Z#&y>aABjd&5R^A%nB4uGP zG9$IDH5ARUCvKs=h6YLJGn=aEpAz1vlgYZ>*!79a7k)Y+;KS6ZZAfl7`w(zGBJqYZ zkXWl6|1PkO9)or$?VZQwO}=TpREPawkS#9OLT8BhiqjKXir5^wI*|P$&xEAatMpwI z)Kojlj+s6M62nhf=E5#I#aW01j;j{(5$?A~8`;axqQ`TIF2TVV=Y%9vsqv^%$H*QQ z9owBd`Dxbb?AXjA>1#(xGx~m8Y8=O=S#`NKjddIy)}&!!Se`3WOi)QDJ?S?OY@W6k z-n{2z1K-3}8HzOtOd5(Ur|GF#Htlz$4j+){Z6e6vQ2vp*>UvqwqsgP-*SDxQQPWp~ zjA5bHj`sE)Tk?bH-C$nnEe82&X%UvOBW`43t4QR~L42wr&TVTvy#v~6vmC9P^zDD1 z^T;QvO27ETo~vm?J8;>ft)HscU2Bwr6?Z zC38TAJ$=y{HC;$AO+XO~2W?afxWIOz1AV^d#~k_P`wiHb^(Dl@Lyj_oPI3>mQiupH z#&fNzW1elNe<1W^VY&Bu=!?z>y?7!A`n%a6EQhjM+illFP*E)O{`om0o}6In7& zn+(gwa#*Z@x$5~}{C{f2aFIoID^L=p?2j2;b zg=B$^%N8Ga*+{EZ+mt;=zC@M>9}4>DcgD@DL+^P_p6LJGizmVJU^=fg;ny!IF3jW_ z=R#yb!iOeN^C2UU9`Tn}j7`e^$*cx^mNJZJs{ZiRKYp?P+n|a4W&G0Fb9TB#*CcHz zaS@|bbu;mcprQdo;NYafYLvn+ox-7uxk8l8FtuP_vuVCGl*Y2GknLDH{R9_{ zoXC0pEE=AcPWv832QPWZxD-*8O-BcS0|jfi(9Wn$0g=N}&@!InHs>*fF2g5zhu&W@{4GL=17v1=y!NkUN1D>SY+C~p3< z0IT1kqpX`{8Av-k&;1Lq{0mNte*c8{Ey-K`YxU&LFxEXhO$Y0sLV3U-8{o6RBb=ld zv~TH1;a5EdP*$$$>d;g0zvR${#gk0t4H1KyKa_K@^$AG(Oow&>C4=%3O&Fg^QX}yeoXZ66m-|P#Zj9~@%Lg>X~ zv?-O1#%MKIF}k#}ta_N!db~0N%+It<&{Kh5Omj;e;8xXtFd`IG10S+&HJu%Z`Elsd zZ!}&a(*}h43K2pr8yN#ue0}|1;xY|Zcf#7UttSur(91o~Rh3LE(- zyujD!^XD>>y*)9VA*cn_w0~+fEByMhd&yIUN#!IM%2yNC8nV+TbeyMUP_&o##M#4 zFu>?^Ug`he0@5npEQ&Q?|9ru+n`58mixjjC!Pl1~b}RwVPZS|zXzhgg_}x)aEz1aK`S`?E5se!XOtQ#$+$v`M6mhcN`xs7~ zz_ifmT+nIXr7oDZjZR}Gn8$xiFg~Ey)+W{pYJ?w%{QSaFrDr_aw)wsl@*2s~TD_Y& zftsru*mAgJ)_2rzW$fki>rc{7VBtOcP&|c}-=g}WFuz!bx$*M73l{z(N(Y|TYe)DI z_H^L5r*2^5S{dU=wc^yH@a!c!AA4e*uk9+abGjM$DzwS6zJ*=$SFH1_SwOgSmyxgw zfp`1){b=M?EWAtGD(QzB0!KKV<18-yU0bxS87^V0wAO;5k;PSD$`6cV}1R#OSW@irGl3%CIq-Rvk{u;1>6C zp54|(*m)R*Ax#JkU8g61%&ox)XNYeoxXVmsFoX$Ffn%~`c`H8-?TvU}rfe5~#;y9D z4_)P{M?Bxfn31Oy$Le^$>PRl?-lyrpa>1_=N~&7!Np?J3U!haqbBx8pystOhmKICs z*X{MSc~?FeP3C(i_W;U7=Q<^=b<~GZPTG{<*syD5^dm~>DAc#%474oV;IaL&_k&CSo>YnO?t^ORB>NOWwRK3|rnO zRyxoI0jb}fnu6u_%SVMUm(xMyfGi2ekqGN$&P{kSM9Kbm$65rE&R%YK!;HXkg24Q5 zI~w)!$wx)#pXt)Y9(q9sq@TzewsaiEjxr@(o|hYrdFDV z6#rp%W)jii5>8`{|EVDu^uzkF!-SUP-yN|{_z4Xp+waH}adSzcA5QA=EP22q8WKxT zo3G{ZmZBa|lRMsSxXuG8!`?@ai)71~nFD>UEw}HFuURjtlsnAI+3x&NTSM#{MWAQ%OL1+Uhdr{mZuk2Di4=ROK*pvx&;J`dIeeDqv3-nae6stIHYWyG zRJRl4ug#cC2X|9F&KcBaqGDjs2hm$Oy>g!Ss?E2qo>o97*|8*z_V>QoeE2a9`bnlq z>H@=de@gjMcJpvGzU1dGb%;Ns{Hz&(EGw=q=1MOsEb82{3(o5li&Xxc0oB$KsF*PB zul>6LC1R7xW%Cw6P;5$wVIKv9yM_wgo9fZUm>^qnexK8Tf)LK{P%=$>Ggc@cYT{ii zVhz1J%;)ev{eyyS%@NCofA&9&iENvJqwKPx(j=nQIg|J6XdKyAt9m)ls$Br-ewnRI z1T6H|>paeRa&!iuL}bgzHVlEP%=g$KJ;E!H<90rcm$u2gedX+_JiqTsU-Vx34480ca>! zs%b|bOHy+0yPz&me3T!(1Tb@L5+A1#mA$n+LDYwNRxtuzCx}!xCEMEGL|oO?*NSgT zkR|f#f3qM(y5y4?!5wJR@SY@9gfw~Tr6)W-yOSDy>r?z`ADMh zU-X7wtc;V~%nvs-q^3ly@MyVen`KDxIQ27kS77cwJAHN_We-XVb7+2IFQ91voNBxrZ)RiPhd9eJxmxsAglc5K_PD*)<&b1Pn^!8lVq zQX@-a1t1dX=r_|_SI&6X#K+jGVi|O8<~o0K!_!p?#Y3A~h~-!$?03Q8AR&VDe~<%| z%Wv?RtO34c=g2u{QoRKBdw&w(7Ar-#7j@?=QomxLVzI^4w@b(fM6U5s3O)6XFU?HtIkRodQy6`~r$E{_2|6}Y4yi!2oPbUC*1Cr#1 z(FSsAALjjZn!O%AN!jJ5r3xa@`^6IX@5i|X!UUQx#XZVr|D?eEh9+yShz%g}v?Fzv zj}ejCp9#=m9K(0g3UurO01-B|sm6!G0LH?U$|4Sl9ZQ z&~6=H`O(!OGleYnkz59o$g=)JG=++RjdkGtJBK|BfyMbvi)&6ESLV;@n(O1{p5Ijf zhzj(<>cMZPZ^)a*!ZkDudh>E?OaQWefji9zH0D4p%+is$lJx6{)dTju-jZqgc3Kxu zAfJMvhuwO1WSm*i*^_kCADBGX5PxQjHB&@0@4RQ(}aAulju4M6bTv8kS)gxl)rm zp4}0LNsFJl`ahPgGN5g)ZR0**_+T(#xVyVM!ySgZ7k3@*t{V=;okC%_!*F-^VZ-4o z&-?u(O~Yw&lKZ+Z$r78-5o@XP>&=QNEoQg|Uxoi9F zhFn5p38;fThorW$6+PWYh_p!aToYU0lOXf^UWL(0$%(U&YsFA?c4^jO6wqqe(Dg@D zdiq`i4Ifn9IE{YS=9R1QTy=ER;V&s5#;@6+`PwG=>I|mM*|HjH3 z^jzz===3w*{mmF}tqF;KTi_2aT=pjIIJ1f12_E|I5{qS)O8D8pV&xIAH7nGkeAwFP?y~ZhYE}h_vdU zZQ?vmS*`Imyu5A5{&J1s2$!&*-e|gT_2phzN?Y~e_`*x6JxxU3yYA^Z+O zDxAeStl;oc-a_ z84Ga$;m^djl8Ekw@>a8uUoefl)=KdQ@{>JaTkJ4mgwg`gT^V!nLU^?g`p8l*Tp6>C z9{-Gk%*sTVfOz#hHL`4DlzXyiij(Z8y6Ph@Ysyz)JzgQv-RwDEaZI97V>}j6zP-G# z=x(C7sXAPN$7soF-`L}9^M^cA7l|IAYVz`eu?+OKmP7gzw#26WEa>Ft-wE z5dkXf9nyn?d))H;bi-ewFN-q$p;=C)isz?yxK^Da`a*d=@PCkt8uI@rM2S<$XU>pi zeWZq};286SbKWV+Qd@-n4BAJowjcV~{K01aqlPmQip>(C2BX4?V*(3O>D3l* zxFSWUZ)eGSCxG1DW*1I3$ZL|tFiMyO6pLZFD5OoW%2>pByWQ5=9~ky z;B~(U#)WT)&!A?)Vi--Np6j|`wKHo_3jj)6<+3Nb`8jeIqe)3Zq0nRBqAzcTvVGMa zxcU)v0AZ?^dJ$|YE8+Y0s58%39wC>A8+2-X;x8Rand!jY1Npn=pK}F8dOnZR*lMIL zq&n5?`0&kr;vVF212}a>IcpS<#^p_X>ulu8rW_*X@rR%=e(z;2Oe0tdH3n9HKIZ*4 z!w+|G4@@$Tl#mKe2lg>Ae}(MMg zo%WHU$Vc|jjaJf9Z!wZh6_xwKVFFmbp!h!SY7Y=3z>}d9R@$L4ABHK!E*a{LbwsCM;j zjZBS0)oae8gP)d)` zWOQ^&|Dcv^`jF?2b_l$0X!tTT^mQu^GA2$HAeU_Z^_N7py8sFL$(xUQ=!?X%MD$r&GI@pI;%kW}(JP z}J(f#El zNs3xDDl>3(boxX(6H|Sg5>zYP%E1aM^uns`9O5XnjpZP{^fTgB*`Us}Xe_V_x(|wQ zwImc+fJkY%W?40W8nkmBRtUXgsYOzhfd6f>7SOgsI9X$MZ5iD+5r8_ql+NR^HU(P* zH!47!xm(5<>)kc2aRi{drL?%&zp885xccy`7;;4fN=DTz)0dPj%=U@d{Z#YuJ3)k< zyH5-r+L77WW6qQ`hTb~!95}kQdXbpRl5iYR?mzM zuZslr|FvWvI;Sd~HkfYm@H(Edds4AfXd1PRKf3%7n%+yCkrP%M#7)Ta#WWAcxB9~- zK=gXLv1Hao;Vz{z8PsvQ8JOR(1~AzAdALqhzkT#4JdXvTV#7&-#Kq<3z@1myd^cH0 z)jT`{8k;VkiCdU9g?wG=`XK8-K8 z3s|8WF)Qt~qxQbjgn!NYXbY^_NuyiO}1} z+dGG+SBV!2t+J4W*_UTd=Cr!Dfuouww}3>?4vdL2Ef>R?8Q%a&LDvCLcKs7-q;#qL zPVH~ht4{4x5DrGlC4j3_J1Qpg+TRgf7ELh^pg_laCXaK;1Mo!&Ai+7(+sXmx6ZLp-QrBw=EaJH0ED16OTB3#4k2;a z@ci!yN&+|z?NHYxxw9ysKgOt|Pf=@_NL7upA>a46hf3;L$bOYyeiT35uB%5myR)i% zmN86mjoKu$m{rhT%x}qSso#C9C-ihn_=IVOMseBAzuAo7A3T&g100+s8nYL9j3T|0 zJVq`Ebi2X9MMtu;YvB8D4|R2#1`V~yGX>R;E5-o=TTIz|$f{vKd&*6eBY!bbS$E}s zjmSy)(rO|>0Zq)Gn*pkem>Asi-gYX};Cv_gCX>vQXQI z9oyf~V96DRXihQ}kJRlJ{eylq zw1%qk9|Bb_UC^p*dwkQbD2)z=MiDX=#;J_q=APvakK(@?b|Dq~ZLK3vf-9a5O%T1-GOwg_jwavDFKrwI&X;bGy zMULC?&TM9W`5QpKF(*oOMooJu!c6HuNc~ z`dA+IYe*m~^n|lw{G@+kE}fRpQi?1E77l;BzGnd`3JsfK8`SK_5JA*px_D`YeA|n% zxlMCFO8z$Z+(Xp~>%viu{;+{QEGEXozG29*q>>@K`kV}x~S1*S)EFoWc&*GfZeD`8`v$Cm+cZykdoQ8O!b&5 zqWaxB2K%X(?7N>Rs}~R{s-x}PTrJ?yH8Mzb zVrLIX9frlire=@RBKhK!#kX(0A5&io-2;kV^M8Q=;n(BQdQrYq`<2KPTJTjSnCy$E2z!O%Mr0r*6uATp0 zOf^a^8lGZ)WB) zeZ^CE{^T0YKmJ(4N0aDXD2l_S#?9`(19rOb$b?ZmvEb80mc%XlVyxhoV zzhLEDnNsn*^C&p9Yf9a>{p%FFdGWS5pTjxmPJ;ozhY1T}vz{!bgZ*+)e5kKml}V$E zl*^dyJC(~@ZpDOCs~yiW%4TC3hcBrx+SS66#cvc`&POpUs?=1^#OJM zZ95VBV3qaQkZ&VUvwnB8Y+^D-lm5wu=*vy(i-99>P ztQaC+Ub3xpK3QG6SV@j;sw3V8%Nj?Qg9)WHTlm2un|~yq$+C06pSQb2#aWOHj09`6 z=Q)b9{XD+m%AtUKxwFErsq3F9>hBfJzUpsJAhnrtMg-^h#S zv4q%ZiHewf=Q-}VldW{fnN_hSW_k;+{!inRN-c}h8fAl`S9@pWW0l_E4g7a#_oc#h zTFu3hJ6MSywuPm}K?_J5uB04PLuUZ5U>aH5zbYEDfjrAZWJ%{Ntl5y8tfJhl)12$a4Rz<(E-0Y;FsLHu_fZP*S^6W(Z|iN#pOEbMw3@SeQV-2)U-n$ zw(w#(zaM*V6rjG9R~de_3&gnd!n@e5MU+8bfDzFkMI`t6rAWDFo$T6*2UU@!>(L$$ z1vRbJOnLhpHS2Mc;>C`A^4Zv=ZQw^<+U+G=;v;imA^*3YmZo6Mg8Bz{roMeu72sx;KPrcX`-v75t*#P}I@+n(H z%;`IAAZ)K23Tv$|z|n$4i- zyZpwINb|_B2io7Z=dul}Nz@YVi$l8jnAX2vl(RqI3Nojv6Y>2Wm&;geTAgZpZ|Uu2 zMnk#z4q#IP0ai*$!ar=e<3~DTCmymW3YX04^)awVx0VlsIr!rJ2$NEM=o}X&Oik1p zs_f4E3#k`9NYWv`0uE(NAV2*)b5Tg;j^g*bg~L^yo<^S?~4te^nX9 zRm2|q7mfIv?%C@|_MPGjvWfAuO*VA|;Bum0QXv6b@7O6f={AbIO%fUcL)H_G+?UPD zgdsdTheg~<_f$0`swqfavhE15e`RghWL+o##$~S`(Wj+pLCwVe3C#N>ARoEWJq%$o zT9pQKgEAB3#dvgeL=lu^c zDNDhaWDbbFAf*gTYlSG|ZIr-&{rX<&K)i;eAN>`=Acb?Qg58ue;g}xb_uFjSa49@j@D2|6^pB=7Hykn39ieIS`4r!c4+yFy!i%=~Q##S5d)d3* zoJuPYJB897gaPO}&zTV!sWIyy%ecFARY#rLM_;G z5w@hP#mGlKeIf%`S_N!THbV_IkLFp^_tQ0zLe$rE=p?xEetw|$wAiGdP+SS+kK9{@ zAT9x71K9EydY^?%A)?iwlqU2XcePLEGXD9s2J`p1-{0?YBSB5>h$4>eW4qXeivm2c z2b}SYTB6+b!p;ATnhz)ME(2+ZwBT4Mz7gU$-8_1N==$Jk;?%iYHz(WC17W@~@cmMMk6uoj};}%5&^ZAyCmsi*!*W7&{ zz9`z(@{RQSyYSFOIv&`l@Z3_E%OPzokIAeC;^?HM7wp*|4D+<$G^pf*+Z%Crr)yc56_sbF!uS zZeXiReg>W*TcDoXJi1;i!zrhSX-HQM*Tb1%UX;r)2C<>_M!@~_aI&i<$dc@ z+SfO+-hf>Tv|FKn;?vmxbeSgn_3&r#2gj!b!`8te%rd{c z@38$?d+zFfq!RuWD^sYLBrU`fYZDUhUXf=d+h}oc)?9W@9&xnCx#|fXCF-r8cdV}3 zG5uz;110#YQw+J&eNB((?Ra9h>a9oGD_m&97(xFq_xpv+LO9Xw-!9M=c)&g+D1N+9 zy%fJwTOVfo<6u(iu1_!+RwZVO8>i97rUwazfng-2I=L6IMkWJ!*JA5qe6XFp6lV5o zvGU5{aTDn_&rEGAF-A1QPs$JNT~c37UE6@!>tZuWjf}PZHLrHFm|FASF215x6m_Yd zXT@Q02*|{pH~hWTorz!21{5qWj#vA9$BOn3I0%;C^^Su1;Vo@OQhq;bshTnB_k0VS z&-VBhSu#H770nb7FFj|gFe3Ls5IX8xb`T$9okCECK?PNuY5mYLh92r{fdeKc!4nWW zap-$yR}hyTuaPu-bD1t*yPQF6ony=NLXEfIH#Y&l$zS=T5qOg^Ep*3?OnX;wkr;E{ z8ke8aCI>AWG+!N0=BXo++#ZWqbK$qwy~RVZAie_Q8Qj<=y`B**0UzGE^DIcYH!D$k zops`4{V>`EkofpT*jEzqbnaXUlVRN#Pon>2DeCGHm$(+FMg(iG2P?zB58cXaqKwH~ zkgWQlG_RUtv}N_;?!zTA`Bxmwig4`wm6ihjfFu7m_iSHfO!K+M;pDt^575CICHo(* z$41|BVL!y;(uF98DmdW({K(4EsSxWxG06>y(7QcZSq<5tJ&gNxdJgtoh~(B4Ta1KK z1-VG_eu8<2?u;u%LQLKwgpAi4Q=q}Pqd)`VgH22yZm4N17To(bmdMo}-tKk7%*ZXhG6`kmv4R{_m{%ueN*kQ+FufK*0pbX9bVEWBu2x~dLmYQtFj|@{2{3UYutAb2Eb^o0xprM zu2?o8V2vpZvZ2PXaa(5ef-34K@Sx@ibO%?bWm;(4_Z>|TksBdJnA%w-RkiR0YHS>y zoKH9G;S8NzxXZ-A?}Y+HMz~2&YnO6QT0?;>pL4!q|M&f8+E4c2Z`g%UJeAa$nZ#86A8uxuxAD7?+IDSpp&WAzM* zTZRJpoFb(*O!Fc`{>oq_fQ)3~4~l*{dRo>wK6QEav7Kw#_h)-HDM z&!hQ6J`W@|WJF!S|Hlsa;*bK=9L_9NbIyT*F}crZ^!>|Crsn zWhu`d050OPqdqBy@&1GL$jX?lS&MrF7SWiV*d-Kj@8vP?phT5ZMyF3jC`)w6wHDar{W0 zAZA01V+bm$;SGxPm3`e+ky;|I=oID1BQjV)i?!=YvN*FMagTvmEpJhm(IQ3{3Vj;~ zG-ljwuqc|)dd*naCT;@CkQ~(AgsX=PKu_$GO#NZn3eS5f@$NL#xPI7^>TW zYxacPLw*fBGX6A-5tdy)$9;?UJQ{c)@q>lc>YuS*gpsw?0>5+9m~XX4hfyhz*;|0U zOLxb+ZV(XGQ_g_(SZIndo%H{|TIOy9Z48^XZN^~yte|s547pbn_1(YO#pf{c%p{Dw z^WoJh&Su``n6HkhL&=U}43dRXRZg8l0fYdmCMbmMUB;C)yU0cL<*}%guX0!Ze$U8) zu8Nx=D%!h)M6&H+#7vlMGu_?%C|v`D+;pR7Yvuqo5^x0@gK>QR$8ZJX8ybyV0vTS0 zB6mx|Q(@7+K~xH+A{VI!o*I7^V@hjw&xQ$=(-4!kM=6AZ&2H@xKUTK;inA^cgML3^ z!X1!kAL&=IRdZ%2C3Uh>J5{L9z8DPm z;C7E$d8^NEIvd92##kD=Tr~71TlBaR*QY*amc>47Yq<4;e^G%#>;ry?=FfgJtdZd- zoVgd7C{gPFu9r?ytsVInu0V3y)9}M!X`ONHR^(wiAtGp%evLncQc9k-qwwi6_(@qb z+TJv!N6+CH0HVNM2U)YELK)xVz;vcFPqj}&VG?y}(Gs8AxZ-xwmd+c0gT`)1!|qnI zp0Kg|^1F=wP$k$af%a(erHZF*nthE^F4%E9x@P^OSHJ9n2xRreK)p&zc2AWr&1?Pk z*7L_V*PvQd19jtY!KGU7!7qHRkYw>$N^^81|E0SOxZ>;u2 zg=RLph+6)W-iLpjInGEy0P>mt5x&&;bJ0{fz(0DBF7b$vGj>~KG~06Xo8dFq&A(XN z_AA4FE8i(Ira?vqnaco|mr&qPnBd;GbfrCiW2F3Dm~+*tFCr>ODAJ&OTaX-9! zijR(HZ=3qj`kkgOE%AE;w4-O0F%}F)6cWhg2(VxE(No`JS%yH37}LL`l)EyDDisz= z*uW4AM4ewiaK39Dz+G2~Sfny3drHv%mxtnT>+W(Kxe&EQ)NqUv7P^eC=(gS6Z^Q(S zZ&7?I6LAmTYpN9dlQ*z3X`Y2Mfku7%*HLNac_N+@T>fRnp|tRsn$ zvJ0>BjZBRcDwQi-UN6LxJfq<^UAQVb+Z$ScYT->PwISboxz`2jrem+EW)^Vblw8J{ z|Lb1}@xe^u29uIzXg1nFU2}VrYAELdSRkgg-QG%KS+T#~dhZr#aEl^o<9_gz5|6&| zt#KBY#@Ne|y4tueh8kNP6A`%n5dh_-gE`Z zCh!d_#yZ4_WYcq}{u!Han#ecE`Q=iUOtJE5xMSfz7@bsTChJ^18WZr=FP#xwUDH1p zl~UR-E2~;8mh^elp2Ny8$`I$;e>j7>1jLp*>2`AJ0gEk~@!oU|-4TYD)c?Hc>izM8 z?Jkqyu2-qy|9fw2GJmCPT8>^%>L(K9s#%kT9h*1!DPnBrQU1b`DHpC%Y7|gS2gUxM z5wR!{EW!oa&p<6QH!~*gQaunt-cXz;wK*@gBiQs8G=cPS@qVn?5c`<@%6lk5_d`L{ z(xPeg0+pO4BBXs>L0m{I%82zs@j?Ms30@IEnoUlfF$)nKrru#hh~X|!K{_eUg0w#U zN+eWG`{8FNwaM+%5i)fHnaiW59_l-^t?_rkm!bQA;vkNq-|jIguW_XK{y+Mg6C`he zG<{{>xW>2J3z^@ua^$5?WD0{STnXtFsc}2x1LP>Fl%vo*)YG_CutZ}mxG2pygGD_y z=I#iR!0ghsHY7Erd32qAZ-2{;#!6~-YZoN;)PB?)1{hRvsEvLTmc4J$gIPr`n%}CT z6lcX;m=0FrLJRl^QTJUr5*nv`-*ZVu2NfnK54pr%vVXnj`A%8eGzNGMQ>OocU{ zBOeW;hzwlE;HO7SgJzZnKeXvu<27W~08W$BN+b7NPwDs+v#*If)cKyMLABQ>S>MuW zgqJnCNTBtZ(X&s(%<~3;vT1B6@nPf)Pmf4R-AdkqJCLdLrZ)>%9q% zp-*0*-L|H@s~GaAM`j3Nfa=oavi}&X zbC7k%uA)NClUshHMm8K@@icf#iieRbFd1DDVeKEr2NxfG`QlL<807NgBRV3=?AY7^ zk84$s?GX@hM~LC!zkvu~D=;a{mMNn%ZY_-ZQZitNCR%d_d9@e#3lx*442viZ`3`o? z<4!Ol56ANvL1lg0?6?y0-}J+9AM(LlIb(jWV8QFSpp%bk$%zxZKP^;h{*+lI ze)<>jPsidaFvf^R;?Ev^POnG8;x+T%^b1MeOg+FMixWwR9EYZJPyy%514(?$bXKT^ z&D+@e!0+?|mVf>#680V5#zs)S_0-(2os45G)Gtwqv(hFFg zBESCtsfVUuBhD9qRV}2?C&Hi$pH&3NEFaT&yVr#|VW^#mvV#(Jw;X>YuADnT&7LYJ z2NMiPemWyrwYfqjUr>NGZqbR4nG|IuYlfQFDGQ@ny>nlDn+37w}4#%7d z4|IDWY#q!E5pY_73Bim}O*8PUk<_1(|Dn|v6_}j%a%Nl?qi6097pyfuUx2aV z>|y=8Pd^{?FK2E2;C&zOvEmtq2%8dDcYg0YQq_(2kq#nLZWf~$5@gub8f>-GQ!NX) z#E15_Pe6V-g0O5DNL;|rtz0?oml?u;oN8WIBGdPwh)PEqu#7SUv~jM%!)cL{s;Xp1 zbhbdA;a!GMAB!So{g{0^lWwC!x0*ObQ_}Kiue~=}%P&ao|1Ci>*)^rI`a(oJ&EHV2 z(f_UjRDvqhKdrs|`I}eMACL83d&~2!4nu=TiJWv$2Ip-10hzi`OB99o$~$i0`9z0h z4%_?(sKYW%2fQD$d)~Pv6PH>CLi3LbO%(+-B@;&rT-pT(AxjVU@z}#gaLxd-B9WwZ zQ>xF6tN|a3nmn^f64DYST`;$@h-?Ari1vHyA;bRAkmw-o#$k0d>@?eQb4Yh7aii42 zl90tz6HGpw$D>?IJW(<}n>?NBm$A$)-}?HgYmwnVfaY>D_U*|b%Lkui{GdL12(#Y@ zu&o^EP~F)4jxl#HmJg|FNX9e!M=Y%(`U5#bGgoeQ3c@|xGJgGfzgpCV-5yb9yB_IL zw~b}1y)Pgo5$0CQ@%s@kDU+$h*hjeIn)BJ=Xc1j0n4?zT0d+|&`W^Tr@RwCtRd3d; zfx-U7Z!y08<`lFSnA74QD_>5~L_8`*J0uuiR`bQ~Q36kT8s>^@=i}CIVs`~#?Nn3I z=kk2=3DWkE+4#sK?_7km{zNzi_ z=9c_LbmdpvYwsQ)d8KOczc82Ta-W6V7R?N5W|UiblEPCb6TYj(y179JhPdjB+)0Z~ z$B}}GaQ>=d3of_eQ7;}+of@{cVXTD$qqCvT(S+SBIE>+zHS^| z7qIcxOpk)c+IXiB6dys4^9~S0WCky8 zee&dVV=9(f=AS=$YHPUQMV1jNBY*Cj4cI0qW}_h7H_MXX#$PgFjqRUx{GQabbo>WA9P$Snj;VePI(?Pozv=Qd{7X+a>lO%Lxmxd;K(b&yo7Tuu4r{XAG-;`4HKaqHZd`RfbvcnqGaPn)xxHl_^H z!s{R&MdgZHVHC*`3u*Dx@akNr@vqck3xJPDeq$Ji1Dmxz(dG|02IvjWRNkU{oXJqO zkvlt<;Pt?nzzmG#p3Kv4fw0Wfg`-n5RWnEV59R#xs0<2TdD1Zr9r#PHCm^};YRo8# zY9pCn+^|lBOTf~BUR%9{!Gd9h`GMDJmxk+^^%QOyrw07n<r_-{2<+?hMsCH&ckA z%kqH?6s_x5A?!KVcc&2u8Q4UHi z>#FDFb2z5q{J7`L>mX);nHq~3nEIh-pq|Pwn-m*uoeO@%k6>+BI)BT;XVl6o1F#i4 zxUnyG9&_duQ9MP*eV5uP|NP^F*uQ1;j1n+yL124jZT|dD6SoUwSw~6uER|6&lgsZN z{jOe0u>@>|&P`W~oZ8=#zF*#xva(`*X!azJaKPoPue2SP^5dIOrwq1|^1BNuejrqS zb(`SGiv7e(#6>%a)10g#`1T`ca2=4>1gPQdYeDwJP?%z}sZ@Qvs zqXb>;L3FyUVz0UKjajVJ33chYcBc(5nVizwEY-#oERk$!=-rwbPN{vtvody*buE^p zbGi(BvU`Lk>mYh^=D@q&Z`Md>)Pzn;bwjB5>O&c1SK`@Qe7y$zkX+w0mOhn#0W3_g zq-!a5iS*9%=zP@o7PSE~=U%}>GTxKMZC&ED_`CNY_A zTRl@=z`OQ}r4rh^Ui>#^DaN>a zhdyXAPol0U1HaT3hSgfCBO;~zp}jsGY}DB+_BntFV}aAY;0tm46n4IJ_PA}kMY4jT z>1BW_?s{N%e-fHcNI&Rz=6Ih;$6LDD&nD1c?d5Qg@i^TF`Q02#p9XU}k*&Ynq;G=naKkuKaixup?Z#As=T51WuVt&J=FU1u#)9*-O|wtqX^ ziuSlu@WzrXT#`&@hVHjeAT4$OrsB`864f3uD^SucQ`z5Fg{muhilw@$V&pbjUZ_mW zUAzwrzZ-B?)BUVt2igUA5^L|~eH4p38k_3CyhtMveZK44BA|V6&fSUI&|dpLD3hON zTfU{(!Yv>s!p@W*$DgjJEYueCH&>@`d-qIFpT+;Bm2~Sd%*ctMt=&g~0Sj)%o)hMp z*F}rF>KHByBpaQH19r^`ZdUA{^gAC1h0V5Ditn@)e6zDX)Lgh+squ8?p}hD6^mtNB zJjYT_JtcF-((2>v$gf$-ClNs{SvX^doLDnEAea686w?viS)bpP^^T-q;?NR7nrami zZb@I3PrZ}TN}yAqq4s&uV`I@$=9CXZ@f2^Oem>vjsKd?nSjWJ0HwrLiXvxZOA#h^J z?&#!?1zT%nf`jc-r0u$K;tyBR107Z;mDhG?sQuKb5ap=pU~{o;$KOS#JV#h<%~E*# zGa*rCY*neV1nl0?MeYO-&8D9V`3+Ds5XVN;=}xKEpEJ^+ck2?1Eq8%rS$p?`|nc1oKZ$!+oJ9RM2*QH z6y~@2)O%vA;tPnuC&5+rFvn~Z&SCw^Wxuq0*y3a}L zGs=(p7IB851BG{U)mT{{PNI8R%lLa9R@XwLT2GHM}8=cJT;?Q5^P@oo=e#WwK@!s%5*IxzN`g z-U<0UHV`pUkjOpl641M6+fpB$r@MwyQ#aIpyHx(As@rC{Nukr;_Hk8+qs)K2*n#Z~ zMfmahCP@J=c42^D|U zDJVnMZd6sxci%}?kKAX~*k^%#t8V()=rS(MrKnh=*tQPdh6>CSB2T**rcVO@z$r_p z;WiZb7DO!tTPj;1>6(vX z&+p0~DPcSH)Nw?Q?F+nkb(qEk6MBf_75l2%t<6f+2er^F@sTMCmVG#`bsNaS4Qn$q zI=EC@d=;^sz6RucU&FNY$J0J^h?{6iIME45&AI=OVWL|4&(i8#T@TJM6q>ku<7VxkxdfB6l{l4C`-gxfA zJqa=y!!)$H@N&%#}M)9{ga4c z1I$9{VzjX7R+QgG+k$HG4IQDATPz#OsHQ3rb(^WP|CS{`h7btSA*K`8~$U* zw<}s~K9nHa5Svj8xcKu2{6l9M|3RC*0LkH#7q$RRfgR$?C>x^ybA?*MhRX^z*vgM* z`tFI!EIyJga#3B4>D(-RK^E9GdBeG9gns+77|CMme+_5Th^M19SWbvk=x}Bdc?91s zpl`Em!Ow%=yvka^)4u3`%)>w%h7?6}pbG57x&S-mQ*YRST235`ZPG@(%QU=CkQq1; ze1g7Mc`)Mov1r4*x0t)5}E7zosZ8(LMe%WlH2loIYUCF2zm($pBoUa#DTgCF`NCst%84pu3t6v z51`;?v#6nU*pX{6tL==~2H>mxZ(di>D0^2H;nRi$MdVb7nq&f8Ny_K`x_^l$ELVUf zEcHAJebr7luT0cJdx%^SPSgR?LG;=%toLny-FVF*b2|c?Z>_ zz5sBWnA=p0V(`mJWqoQ@Js8lWTq_I!I;_=wt*4od37e1P2yu`@xhsFY`6isw#a&eg zsP~eSNe{D9qUjkuVX=IySMukb#yII4oz5`%WPaQaGk29$#{5){{jwC~pP|f0O)bve zPVpV!H}UNy{%yYB6r0rSWf2zr+*F?f#iYi?f`sfW*5lh}MgzwU*a6VCvH z^8)XFmi5qh;usU|3yq7P_Zs^X4EIaJ z^c?hhI`!zCbR0q7Io6tMmayPhJTUyV`CRjQ?7Zk8IQyD%pvq|f{a*aCKnAujfNDnx z#)~O|dKroghtYe?Tb3z#Ju>#!U%K&2brg)hQ9^KAE(W?TQ_45aboAYC@d%%%O6tx` zfg4-Zx{iWrMrKF-^3tmx_C$owJ3R|%jL#W7EELK|Ii?EUR1jxm5owFf3%2_VP?uLH zlgRQUW?18X?`N8`TMvaKBrN0h&EL}fJ(KM*hoE~Ve|A3xY$YHu$HHgK?(#yD>5|Ea z{j`fvNs(kyCDV+yRP*vGbTL6U2Fbw#HjD@m3q|Sh%Rd4X1cB6)7$$aOfSq9**;~ex z5lKNvAthOHRE||2tmirRU_#-xHJ!DNn%E$r*7yBPwgSb2!Xq^s(sT{QgdP85)MAFb zk|gNBzWXUbQCs~vA%2+rbA5ORa>1zqpJu(6t$8R#_F=Z5TFpGVrMqRXCLG~vXYHaKUGIW7?i%9Djafk#!S!WIWDC9IB1o<&pDKZ3Gk^WrwF4AsDb!O%p7bk z7^Cr#o1&AG2V00+WjAiMLV5Hu?uCi5JLz@$0ta5Cf={G5uAOmnKhz|ljt0mv1{qAh zd5vAic;9rl6is}t=$|-I`1sT|HPp>IPT);)#S}u~i^)XBBW)A6;8uX7w`#S!G4-G* z`+Amj+=gh(_Q3b;%Oo~gdTdD)HPv*A1QH>dgpxvu$yvh2&tdi(MYMo$d5#UqWMrU3 z=U(4I^fV)BY(ZM9#C5zC8@_wRv}3cjQQ&9niwJoR6Jmag;DD~;mW6;NZYjJ}?LO{* zbM@2#qrQd@f{MBH&XEIiv0LdZ>$>~bh2KlUG))Kf^$VP92FVqJ*X1s*ldU5(jbWqq zXA`gT2h`WyUb~WU<`bC&6i2Y*!jSS7J;~XaDYV>lFG;4=b!bT5tgG>6mPGlFY(;g? zG&_DM;HT3~MvkW2Uf>qeE2MvNj--+rTNS1C_lLgBN)DFOi0qy@o37-79&eY&472(&S_LT zWb41v`zD*V&Znc4p7Mv%FJU0}tAT(onG`+_rVKqR#cp(a955)rVh`$-H;+VFZ0wp( z-b*xfMFspo&)+6LN#O;&{=FaDpo`U;0yL*Vejx@in;>-61qDoi_7$@LE-$aZg|0zU*1U4C`Pu_Rr2VuE)ro08`l9^fZ6v zKXWrIgw9JZP0*3%N-5H-$~Q(ggKuXoiL$>PeDhKqI&fcUqXKYLN5gbw&h8Rr106$2 zQkW{$@D4?33ra{3Z}-+-_}C&pLx%PZ)TT7|6R|iW3x#-fw3}ZC;pERVVWvcuLrj=Q zdymb%*0I!UCV?Og;K2oHARWibIUWfZQHhO+qUg9wr$%s z&)BwYn|Hqd;l5_=RC;wME7iMpQWowDx}M4r<>mYR-RKSt&?&cXER1VL7iglfi-Yqwg+855bafGhFMxF7J_b9v1_=Yd?P5oVGwbh+Kqk2vHu;<$>Nxrc>j` z$Q&Z>RC%$CT#F;RVaoiy9A@nZ6Xjqjhd2B&cH|FThd>wme9EhKgh_L)b)#C9cyy`8 zva{$5K<}l@d~njeafbxEByx=9U6#ifVOZ?x4DK>V50%uB_hmRq$x4ehQLKJJA)5Z{ z4_FOvhsdqL>vBcQ?zR_G@kPq`hTI|IuEbcLNwMeF{{~ZPQOd!hCq|kZkq>TXNgu3! z;lF5EGq`W*Mt#uu3+slmDZ=zeh< z>CWzd;csZ0Q}biT<%NMMNZ}rYU4XOyVJ}P6Z%NljHDD^3Z)(Vqolp3_Q!>6W=R#hY zQk$}>me<@#glGK{n&0pA)^rnbWjblPtU6Td5rw7qI}LY!5kSrBw=S=!Z!+M>-Shpy z7wCVN1aI_VK<5@j2afy1Lp06m>H`}>^MA3X-g{fuG+X)|?=DD;d7#%)&VIjdO_!zU zVzau#1OvFrV-$|4Vz=jUVkLg;#6^638l_ZI(w6I} z$%xfPM?AIcZ@-M!5+%-f6))o8WVf_HH=5Flqbro?`eLPfZ~G8jZ*Hgd8N{eUM2W~r z9;2l?&O5hugcck~sVBru6~>7(f3m@U@1y5YUV*am%UkOMGc^&r($fFHFzd0Cd5Zg_ zr^;J@Qb`&087Cn{hWvmI)OwS20ec)U2+G^*J7ZkNjwo<{veEk*Lq8IQ~K^Ph|7E91MwqB`_#E7B`$e-qo!X%JVHea1ndJDrT1N%Qp7;O z4$$e?@Z9&nqqNh+@Q5Oj-IbbgZD1woy?uKod=D6PRq{WtI^8>#WTCR5_d1I{-#-SE z7V+#^U{B9J%`I>tU${p^pI_)Z+P>11qWtm&JfcK52aF6YW{Xx|?o(6CqjJDs zs^DaQS_Abj?~jaH33X}?9uprG7z+4F)_=hwXr?jh34>qmlQQGu6d*k$E-~?AotP6H zVc{P%LNh|Pw5mPiza+suN_sn4IW4$Ag7k&x$8!7FAMlqTB#s{HfE@MxM-EP{qj=H( zJQLB)9b!-xa2UwUosOoY>)fOL&boqou%q_t((bw1tGR?fGx+1Z0lhOc(^{JD6L@r6 znErY3k(EBa0yhCIAYhR2Pbr2BOh?gGZ!vGu7t4PywZo+hF3*$vaFgf=6JrbIXIobJ z6-p9>BeF?i$y}c;jPD&7Bi9M7Aw?priDQn`_R~3caQNSp75_BeAwMihQv;VCYayO2 zj2_aoCpnDG7L_;1bAKyExD(pS}Xcr(@xdL!7>P0vm`CyW45yJLwB-c~! zRG_fPbJE(7u_8#+T^2*^bpNu0!6w^xHS5BE0?a)*trco6xjgYE1gr?*j8u-!uch&0 zp$vIn@xh7JM6B>A9upNqu5W~lZ*{WFVT^5z-NK}}bEG|CT{1_nPG5JfsY8(p!$cOwyNb%6%YdI*& zl#|hu^7qHt%bTao&eCJ0;A6eCXIwt73aK9c?t9uFMZ6+*y_}^kA&;*k{=KHu!hg<; z;Ozu-DT5MLZpZS~7x;#S;&^))B_5e|d;V*J=P3YI+k3I6ft7_??3Jh#3bmbtbJ9SE z3rkECuMrgP*g&gz58?aW%3ci61a*^I%gl8?Wh%9%c< zV{pN5R!^_e)%H@fe#^#A`C50meRLY|x)vz2RySe5ubMlysl+HZPFmZgTq+wrZKA}b z?9*vqFQR+r`Iw9gzSXN|paHUYp`k{zr|U9FkB0`;oXa<+mX;&WT>Wz7bnzl#+(TxR zn823~9XkE8Cuw=Xp<()n3c)HA^5sdVYI~+pbB&&OC_@FEPnX(>23;wnXwhu1Aca-!FR!D6HX z_X4@}SA7fB2p3g-5@Cx?}Y+QhIs_cp=*88OR?r0l6?RylLuAqI#hx zt9SkzeWe4o!DMPV_l(Lht3fS|nm1t{-mx!KYv0${h(iHSQuDc7STQL<9l=t8BqOA{ z8DGb#c}ff8nAfPDX8mWDczvZRkd1wJ&7+h`? z3QhY>LV5--(|*B4Eve;U@)+91c+)aLrF4+t&=)28XvGruZg&S9ai1gO5-~}tjsJxG z?8>R+84J>pc5;m3gN?|lNn%dcca+|wBL@6uSzYe_NOFd79*#fgcisKQCSKnG4_OKpbM|q1NemtyQ=@v zgbQyi1?-jYyH?HXR4D%MeEvybHeM!3;*XC~*cCN|AH082YoFh7?oY$RIZ|Yg*~{S3 z>fLCxJ}G59V)!|$SZKKAx1~_1u$z#rMI}}j^LPKh-n+Kf?Sup;UHp7Bn;TfG`00mZ z&M{8}pQ~_-fk(o&cc6L7+TXi3^{#pL*u#sTRY?_IR#9m@o@2WD`;h{=8>>V(?HXSU z-Cfmf@CxW1-ls?o_li<)26Vw%P)iMw%2Jea2Xb9J-GhaEj}BKA<7^G~U*G&#z(lG{ zQw8B+XOc|X$98(&Bx{)3tF?HXlTBbKXCIwwo)o(-+qi(fabvkV*YDS#uIX~pjaaY7 zf#Ju#Nc5XIGiYFA1l?3xgfd43K{B={ir>VQJfp?*D$>WFU+Sf>8x8yxrV{BbPmFQR zas)3uDUH~Q!mlfwLRsU3CC3s#M`d%MC*9oR8cFpxnx=WZ^B9z%c+%TV)9=vm~UAfj|X%<&PJbb?bG_^1FzLvWlmWzJyud?*(a|O!K>EAryFe@ zoo7l38%*yDfM0#}v~*yIJ&wedv*blb#|9HA@2+N{ZohaZbR;H=`1Y>y$Oc>BU55 zd$grLSW=Wlwj@s+EOrb=)YdDn#>YG9JR|NJj%labCiFodSX+V70Bhm3AqRx5 zsJW*<6`M{%>wNT&BqK2W4Mwy0Ut_LB$V1_+D|1O7`Pit#*p;8DHy91{HFNKiU|$-5t%O9; z_I*(l9uTmy725Bg>+4^|U~xGnGIk}Glm>>Mb8n6`!zO`#%B&W@9G@ppE{#15`Airu zvzpd$P^zDCrKSCMIV2tMv#&wHWn>AJjcgNkGn+%8!f0H{*@{HK{XfQrLC>BJX zFgK}_6$TD^sjHR4C(sUSxn6iYEZxK`=IQr42&OX52E=TcH`GzjXB*j%ZM1&Er|A@- zRV5hWu=XCNy9Q)X1E#_KJILvD1~x)U7o)G2C_pzDp2nWIR&@;^tL6KU250g3k7u{0 zr=a>qmqb7(pAQK6WF=Wmn8Ehj^-MertCrI$A7Nt3d*f$LvmQmxR^zcYV&(>%KR-DI zU?pO`pfp~V+Z>~WQWzzUQ0WIa{l=gg&}eQ41|zW#gQr)Iu?d@&u>&3_wFw{qr`DbD z4l#40R|TP=WdpV^Vr=@vaHWnjb5^DcTEEVNJJ~2IKao{WLRRcfKQorhmg zg7oobZVzUc?Yjvk|? zMk$4E{~#EcfmkTrD1T6#0yu{>xN7({uuj{s$q%zacDlt)g9&b~7ngK5OV?Iv<0vmw ztolvg4}_K{cg{`P03xl-9SjE_eFGSXflz1}sd2INDKfIMCM)U88#FzdNoLHwpt>q5 z(*&w4C7d68a!m!>J3pFHzK7Qh_mJ`~!EfQhPtFDgWZ!6~M&ZDGg$INfy#QO?X~pgc zROt3^0;ovqlzCp9$SppAdE+3KX~jBwNtt)D^WC9@b~Qhkjbq?A%hf3rC}LDmCR1b6 z(o8#2^vq4=mLJ1`^N=1}F0pUbpyb6{)G1|O6kmz4)i&PQEkzNy%+whbNMck~Afv+7 zq#yr2(*ype3X5OgDF*{wmF>Cf;GftNV1Zp@IxcJH2eS%{kGq^gG80XkP}SlDk*Vsb z@NYl;$FejN)kK#K8~jLa$~NMxD-+)s+izu-8^;xWQ%|UB&0wRl@+D!qsKQLJgW8HW z|Jgxu*nq}N4^9z?K)1fJW2T*sH>Rbo2{WMdF`BA#WMT}zuy(RipNr!e6y9(G8jA|#er#ZBs8KyR#i@AT4gLxv^Ofa#EKCk5^jY%>vN)07qiTXXyDggHfzk8cV7ad` zSauex1n|DQo)SILC6AsAL+e9^h%|l=&;w& zjsuAY(W47iGv7aMS7IhHYotSE8H-bYPPr4E0H_aWDgxV2{;+4L3)gO=P8(G{?NK@j z{|!E}4)jf$33^)QsmilKz=3pd;-P#PV`rZG%a(S%HaISM(r+Ee4uDkYDgZm&HRE`JT5%8%{nf6bd+F;$2(8i~f)s-nQ zj5Q$|EsGcKeijQUS(gwITCARBmeTaF$dL%8vsYz?RJbmu6`B-lL%Q~8Rn5Rv$EVhi z?ap3&>afPuyu^K7NlRB(|%mV)LhCZ#|r%j(;)BPDg5d*st9$yXcG}k6%4x zELw5jJqW{RBt5Jd1P!#ej%&IuE^Bo1FR@H^&>BY^wUClh=6t})eP%J$;T<^wvhW=w zwQjB-GhWhGH%sYYt!vX-OCH0DhUU2Rh$eX`#?b;)Tg!f#JjkxiR67heb+W9~q}!M$ zYOGS`(~!o6o=dhS4r+V2<^*5S0^0mt$afCSYV&Ce`Nohe<~4Ux%3t?iw3AB;sbjS@yQ?Avvl0sPY{>t(OkL;$Z_ zqOI#HJi#Is!IN>2!lV5>c=~8s@QzQdz3WIiOwpa(cPop61D~A=R#lL8f^!}dS$duG z3lx(wx+xt6{yQAr268L94uy)Ji2Ei$L#o>3qLSnCNaEEGnd}7-6dHGqqW%bYM1Kh=lt4Sl}k2TsI zx7B(VN3y=wYND8|S8ke==)cO|xEKd``ntYegahsMM=o7xA9JV`m2LR{fV~3V73gz@ zmZ*6c3cj^Qcz&)TsN*PUs3egMeaf0pVgR|U)>Q`CBYEh8&vi=C`42o8{t$kn-v-EeA%;HAD6WiY_bSJ=cjD z%HSa%3P6F(VYzje@4ELy3?&`S^*HG>5;(Fc*sNe zlTZT(r~h(&%WPJY9(ON@;;FM6p^5p=B`W5roK;LZCZY3C3{C0^f8AwW`!J(#e$1Bt zIihsurW)o?>WJ)MoJqduW7-LCRNuvNQ=dn$3(83bOt+*k;WPiObWvS|mg2;3HN{JY zI1Hc(+N?)@>RbkgpON$zn^0Sn`(&GmK!9&vDX?vSf=WY48qv2;5kF695 zx7dPrj~7j0YGEbUAdr2A8=P~YI~f#uCcYLid_7urLH;IMq1TqYE2YVih|5_WR$e-m+(EZRRAzsA5Jjkb$#7K zM@3haB&M_GD}IG9+;`B$7~T;4TI;HlZ^8KTzX`NSSyEC)##BupS+I@+!EKd4X)CZm zZp_c}&}8%Q8eyNpQW)Cw+(Av2*f^}A>FPrglf1hZP0+-Sg>{YJ_jvML9Z9+<9c&gd zImaK;Ph@xs0xx!Z6VSl#qHk~pq+B|2M+^KgUj!@G4;+6~$(Ud@=e>oXEtIIp`%$o1 zGh_G3Fm0B~j8OGP>?E$7zqe=PC=VOJ(r@(;OL`7eZH5!Y|D%Na>987LL(m_*ioKu}R(k1Rtn5b4|!A&!&)kD#|?QBYz zhkBSI2<^pXq#;aXTsy#f2U`02S1huwW*{heW@Ost|A!~4!0)3IY7Tcds-HlUVxb~? z@xZBU%uXqGGwCh_;)mXG``$dr@+6jMo1+kN_g0IYKaxEaf`xPxPR4Zj^o)dwe3WF@ z3*O0Vn=%x_MMLsrJaJL?^Y3r0+L~0VBAfk~=4Qplv*?}kPzMZhney%(BA2XUYt#ui zq*n#s)8RFwR&Wy9r>xHY?A5~0-WdXcIj>9q^|^X*sd)luxW!q;!Z;C;;N0ctUaxjt zXM;*UZ3eJ_nV|0i&mjlGUU0~)-n=d!Tx^0D#m7ynPHII5f?P+#f+lz?S2$l{eXlot zfd+4KIPqnH;!~cvVqCd)Y}qzbY!J9vtb;&$EprZhgR^(9I(Mr}#3i+_3kDD*oQ^{d zFhd2QE3*}cLQAAWs*@#GSSh}1RgwBaFzHVu0(WjF=&ysfYP9?OtOohG7LOid_ph2X zbVVo$Qv>lBWx!>c_)W>76Qza@xqZ}ISGTXhova*ZyuxP*B^!0zz-3~(C2i!r&xJ$y zn@;BR^T>dTx&jovT7;;ra!P3~_gmLbC+~e$y8;xRIT994fgVL%X7#|!jHTc%y zEt^cs8z#wJFI@ESO7ec^p6spsNisufQpeYUxa+n++alSjW$`HJ?zwrY#=%OCoZH2y|(&W_h9Od zO>tv3(%=zkl?{d#$73@!LiP)zZowP*px}$+wd-PW@$`VAHwsLydyk=7l!4Y%+a>%5 z^7$H*$tL>FUQac;blbjUxB$I&!2$aD`kg*H&p}%6IHh!ZH(#^>{iI3P(Ox|Dud|n} zj%`)zHqHd}<1E(25;O81BJRlPdCmB|D>~Y(NzV8Ts45G%SI#GpKPOS7{ZDcIBq{1V z19K|u#Zzrty9k9Qp7S@h3~u4LeJLz zr;x#^0vZL29jOVE56-rq{N{3pW=(zm=wM?`azt&)bjJAV496^^&ec*(@aW(|qT*V* zTKA2eT+q>-W;u>he0V8ZO~c<2I$xys1tiP-nidN~A>;kC?rQ6Y?E6QqaD)6BR0~7t z-=?=(TA0|+0wK*=p#Y7FN`ee+lyrB`DT)Pa;|HvGOF7`H8RG6$;YBIw^yprReot_Z z3zufj1s+2r1v?;_T)vI$DNxn!KVV<1D z;IJ zC=(@(_cdarO^CXiN~+`+CKAKR81EiWRkqWU$s1tT(3Z17x-c`+vj~yoYVD8MGy$%5 zv@%gWEnZ9kBBi;zPm;u_h~9(mCd$X5XYkQd%{><>^fqcdzp`m;yOUZ2uE7YAW;~53 zBY(D*`U*&I$hTAnK{7nM>sb)8L7FD?q=3HE04ERD zjUyRNBBu^7?P5{nG6_2Y4DxlO{_T%v7-|9+SN$Gl+`cP_@Tf!x-hSE~Nq+Ym?C;RF ze*VBg%~)0*z5W`YRDm~_a^Wt`N+nkP&fv>oOOXa(_%oz^jRgs0v(QREM^4IO9k+t@ zNrgSRu`+GOA#27OoNnKfp6FYt3zZWF6U+2D1=Y#>r%(F1d)a^5(4asf%C@PQ%!7Dm zw+<=(H>oI7w0?o(HqIo>0%PS)>L03A8W(xZ-PQZIwW-}Yaz4K#5sr34&f?%zkh7B! zH&;#l62LgH>m8|_+v_c-#GEj5A7Oo4iLr|_Xs@xTH(P%Ii{jH%OW=#qCLrfeI(l8I0tTo27~P#ps{AlPfJ3^~vZlLs?!oD63HBtQN65 zh6{&(9tr{T4>f2(`Ct_{kh||$D9g6XzC+LywVNBQRu6lF2Q=mDh!l_s_iyqT@oi-| zMjc6Zw0*D_ksFR4XWYGJwhI_XjQuTo-G!hd(h6sd8x%$RRAf{wCTrG;*pV(f<&t4H zC`)Sd;`x|%#DDb22*n8Le2D8LvEk>9PGT)n5B zPTm$l^DcPjGE;dWy~Ch7p_VkE)Vk)Zvw$X*_tbl82R?Z~4OLXz0|a8nX`D*zQ1IFo z((h)j!f7RE`%^;b|2SQ{ng*0Pq;IIX-Pe7{`Ky23+F?AvqNIrKF*!wUFw;FuAvSa!UJ;I4=2jvpf* z+8@V~LP8gAGN$@Z0hYy;wf=zfR8Vl%iHj4u#vst(4k4msP&wOx4hmE2;7w*Oc(SA$PiIl zlY0%Cf9rBRz|Q18J}LGQpof`qVX=m2zx;fZG9L;sp2-=_Sg>@^a4DZ{xIu+>MovK_ z9PuCKy80FF7}PTmiOu;^A8LgMxw2?FSvx@vu5??7D+mWIi!5((C3bc#`n$#(qY_XW zNN-15ND6xf4-H3!k)aJ)o61SsyGd#qvbKnBdS%!EO$T$xwp)qgtYD+&+)wVW`BJv{ z`X7RQRQSh<)5{4JLy}_Hsutdb0Cq@f*V#25QM>gT(*SKCab5qNUaISt2vRKH-o*!R zGi6+GAbq1bV67h|!#-BY;n#&pC=K8ItyRnwho%bz%8}qT^<8p)hJoA&D>$fKe5S&czmdc!?srK2W7rN8*Xywwi2GSKkC1|xY z_Op?Ly4AdSqk2Ivt?SA4Nc?8;<{1YwGgK7rjL@$>{m1ygt+I-SCuCi{0lrccWa=oT z>bcWJ04kBqjLvXtIBiyoxuvUlCoB6gE!N2((6Ih`V+>~N3$tMiNy#y5oJQly?ZOk4 z&_w**Zj`Cy5{lZ<5(hM%z|+izC%T)wpx$Wg`!5q@ZnH?+#_`~0z>;q(t(k#hgfMoZ zWZH}svxMrQSN8=oZu`D^#6?j<-EvArphT`}NrD9X zug;Chk-8hi^WW3NJ8kIijP$(Xj_8!E>u8_te7pv%U@TiOsDxX5f~wOFP3ZS>_e{BQ zlpgXya;jE((L1E9=7d=|9?+IJ>+k4>Ew*dSk~%X)rm9;zSfR;u9x-5<5ypDnPaaQe(lBo%N) zATgup==?kHFJnlcnBux7iJC6;1}lZl+2Owy+ogo{ATcJ+rrFoe*%r=V0z1ZJ|nBp z=}+ShFLT8n=Ay_ffM}8HS5~1Brq3zJMI3lw`7lzk6T!TmPc|VJ0DP^AP}s?BgjrlG zXWku~isJD8+8{xWw;QUqB*BOT@gb&-SX`9eIL?c_`RIxnuKL7cTM%T)eGWEtw-R29 zNiROrRffMZkQ#xs*^MGUD0@4PB zx8W(HC8c>ava=c+aBEFC;DO(37{?$B0JvKU!n=4M1($Z3LMDsR=i31&h28BynH$RqNn&vGwSJP)c4C3ik53>yJ4L?ojp9HIA8`UH!(XjI$L5DnopmTRr zvead-3+UV>qyiE~%~z_Ru>2f7dG>@u9$Ej2iyE(87o*%28$i3C!>84uKVmBTC|zt{ zb|#Kbg)PFr>H-me^h{u+-wf|<0c7rL-D#m*KjW;XS|ZT?P0pgQFI(=I{x!U?xj8rL zGkc20KA0EQ3)d>cM3Xwd%t@MrS-tJTk?O%r^3`wW9>B^8P+V;01*k-{p$_Tex0=U$ zdxG3{Xo$b8U>Hi>r9t%UjHzSjjkds3#?jmfzp7Pi|D#Z2VVO)_P-VoMjYaMndkb2Y zrd)S&jWn7hI7G}>mLLi<@pDU?X-~yBz^X;SN|D1FE0m`=|M&v1w0Cv8KNtaF!j0Vf z!7#8OwV91y zgF}cE?5Y@DxSS5*T?ERQKIW0yIOz#y{~~wy4+1^^40=@J*MdYB7q&%|`mWzV|1P1% z1R55#GxgYDb3H#L$GYhxn%o$mn(f-Z5Ylw*E72+r!U)6Y+YZ3%j&L%iY@p(IB`mk+ z%)%7o(WwS^TtZs`OLgXtS%pN|SO_JRARH3|E-_x^?RqUm8xvh@RoB0@2*V*#4MWDReu_QD~#%%EvjF#oPLx)*Pclvr_r> z{N|*rM5l|jdNPBLQ3O-Bm-!79C^9l_wgSS;!ih5+&sVnpk``vjh^r}A*o`0Ay?sNS zHT^e)kIB0gwdk7&kZ^?fjb}@1TdajVW1+q+KIRVL-&)7Xng7mGb?f7~*>HOT3irW9 z>0WmkP$)`!qBM4G%EOndsQY{eY+1r%hP-o9^J36oQNJ4=ZeQrie_)LGg1SXe*C(%0 zN8>$bpF!Y82$>d)pwGzRwzDr;Y~2^mHOz5)*clLMG|GHo#L>XeqH3JWA~bvH7vZ7+ z$oCJTG?1sgE;t7Q>!5-1{X$Pdpoh4K638%}5Ml2$FNsYE4+=Gybj(X%peQ$^7QjE8 zA-@1A)G-J@9J8%&=&s-N;)0p+e&pY`E*VckC?q{0Bg>eEYaNZ}hDH_Uycr`~)5DEq zO`>;LAU-qm?!hB77<;_oU`i`h8u>$rU#?^wa9j%FTDBdPx$>fuU`@DP>o{o#Qus$` z@%9aNr{DOV8l?UHss&qpC6IPCvfKa}1V}}8=jzJyVUS==_GVOI*je81f|&E|4R)rV z`<^DJ<4sK++-U8{qseO(SLXUnj|cdfe{>XO%88DHJ}`8j!~k(Bc`s?%Fh%|P~ zpf_pOfDTVJtdzB3`~2_#q6%jl=+<^_l_mCmvA)puu)kD+-@19_KQ}B590rZd^VC*C z0C_Ys0+oKP!##hnr7)+Lp2418oe@OUHub%14li{Udv#^D$Z^i~BeFn?XymyLxC1O= zqh-R0jt<{@ch9()v6{ZXi}tuQE=A~;IZcdtV6i;cUBx{)ZtyR4K(mM)-S>m9sXIoC zX@}(>El*_m{EfHTvThdSvD`!~-9GOcrsJwMxg-n#IN4?pbmn&8MJK?LTI4|WDEYKH z{zj7K)>5y+v)pZ1(}@}H>(QEyQgaQLzlv*NrKXORT&D9iVLrx?mcDVUM3GVcNvS%G z$=BCq`{P~6kx=N0r2RpN8dS^EBlEKU`gYZNur^@wCBJd*gzTpLHcg~|S$ZfwHITWC z6B==_yZmXcHU#)kYgtTKKp9-h?qD-l?^|Y*y(nL$s>DHuF2Y*qEz@Bbd4DARVLnYL<`=WYZFIoEo>S=Z>-VQ*+^1Mr?&E~A{eZjAyytpvn3xfd z%dvtj301RmonJb6n@|Y4xo+1`S45j==U6IpJfrVDv87D5R`Ol#-dCigRs6!TKF3tP zwQzji`|`mSB$jQ#3bDL@YuB6Issy0M*AX;K!8^cAWf5^}s2S@%eg4M^zf1J>MByA&0q22cWB0!u5x<7Zp{UQ~d z!ovekd&K`FSp#*iD-J|r-0L1!5V5fH*s9Gh2!9=Co?m>gCMnKKpHkGtB;&D0iR~$^ z4{NKap>x&3pI7$%W?}w}W=5BxWGF=o(&nGC$$Q`F}^Nu#ieXR@)8g`Z=$kS>sm`QDn6@?6C>q$m2#I4_xm zsS+kUBGa}NI#Cqb=ZTjJy+Yjee)Y)021f~#yl0A+p23m2FA z@0PMg2?&d=nMoG6p|ETUk15l_hQ6qwGqM*dp-sW&tUP|jm_-`@i|Y*(LQ$|QM?gjx zVJ+Q1D5>`aTQl<3edM%nokw;Pjt6*&r#%Cj#Dk3;Tsr`tQq-tQEuw<@cf{}2GzQ#g1G$uxo&S3)AWs?eH zsoVAqw8Jm+QIyQ*VmzsbS4p7C3^#Kp?W_p8#lH?43nx_Mhl_@caa7DQlX>ly4BS=) z&9(sYH5=8c%SaY16+u}p(`&Z;_t28+bVuL;>Yc!q6Oiyv7ksf?V(AWE5b-9WvhYzc zR0R}8TDMsA6}#-;0`$3CNE=9{0)>zAq)GJmSDI%R5GBRi?NIcULbYzBSL$D?vL33y z?GjwM*s>jrbJQx)Vskr#im_eNsji9aN#hp>mA4A4T)Z=`Fj@^@>iZCR3uX1Fj*eaV zoeQV)JLlN?2416FgZ1c}GWI z8feZLlK-2im5K+z51l*-!R)~Tb{7HHVdGMT721WBcVJ>3b54$2JB|@La;}n*9t>(Z zbsaj0&Kn<(QbIes=W@_R0LHEKwxg2|3BPtYeyuZZqsF2K0d_>?if5H`3=Vo*yb=}4 z6Q(InE=k+8kNA2+KF71GTOtRHWm`IiS-#pFo8_?UfBllcwh$6Ao?5WHo-BWjL76gq z&<1RLivXw*A5zZ%daQd2EeP%z>3uCuwc0S#Ud?phpl5rm9|Ja@Kt{xO;HCChV_<%y zBuNzW=juB8Y{K{CKyhcHWQ`LnVpj0QwczCUN-dV?V0@s|h!!GMyL6UX<;zGj+oJ^% z^m|LF_j#z+SDuC{545Sf@1!c+R4~L3Oavx9l?i`sA8Tqt2{WvK@r>l^zDl!yLHq+N zy;#=;Wv*$vd^}YkZAST|g0JJY?h>oE3-s$SXfD)E(!c^k0+%N+RO|Bxhf}=k!QP zcaO&G%DFxRd%a0bVcSQav9|pbls#4vv7%~PS<@ynpRJkk50&3nG$Ed`8X*&j9Gk^% zXAhmvIvjz0@)Q3Sbf%k^i1}wGe|=w2(X~#Mz3*sWswX8zX2;!F4W^p!bHpUuQjew1 z+fghwxR9ZJAe5r}9y?lhK3Wr9VirCX^onC8@Npat_J=ToRc=Xi@A(e)+cm_}(VJ-9 z(=i@ID@-xClE{lXi?=4=R0aF3S~JqZWWDmE-_GHmz9E<>}UON z(8GBVxiJl~RO-6sb4zdeRwkYy3Y)b#=LaW1^L$MoBl3;CF+C(042s^U<+Skclkq0-7@?uJu+FFL^d%e(&H;>(wJeY>`y~EN9SbT z4_B`(LTON0y&G{sZZu`;0vEN8vCdhzgpy_D9$=L&%3BIv{hfukMAF`!nr|c!mXabK zEWsrxb7Wyk_+_$W=bur$NE7UfgDsX@E;cC{Ib>;-rME!R5W(#$C0L8?Brx4$LMw+{ z+P4iUe>YUjRl*msqqTHXZfvSt7caquHmq{`2OB-m%0ZuO&UAqAWF)d5`a;dGtp0WQ zon;A5&2=7`c$5V%u{K4;17IwkD5WLmZPYV7*?G7DiO>M0M`?W>N_`=IvYJJ&ICYob zH*hPD^%QVi`DOe`2|j@{sPLo&X5Hf~U-NG^y<;UQl)#{>Gv)D@5LdJh&1h4<;!?Mf zIM;bGf*XGYSDG)5GstgmDMY5e%Bt&j+&Hw(R zq}u{@0$jD!t%8NoVYBHpgxlg#RlpNj;*?Era=Ojf#JvQnMO95&w)y8Ml>Ln#M_Rzw z#qP-AQVI!I05}{pJwOupEDzJI2EGPt9z2-Ts?Z$pxVtwuquF_{}DTUBn zX{0)jBNKBWtdfqff%V5%R+0_J^ zqSA@?Xj6F%XqmFYQL+1_I6=*S%8lLO0W+OIA*LWDb4rAz<@+UyP$O7KM7oL+Hw@M4 z3E!u44nqmKt1&aL!xdnJ0jYdwfkYH7;6uOf&(Z0my(sepoDj8~`8ml={(lPT2= zb57wc*55ko2;lOJ^{+k}ArW_mQx*7P`%E-UGAe}F-7@V3n*+(`JKti92mAwh!wB0> zu>>mXer1aTXW!H-S8x#Se$yD^M(~}XCEG$HvJN_S@ZUnKs|1l-w73W5_a{d)95Ok4 z^S$SOFW|8BkzPYunA)LtMVrl0-)6$ z@WeDZ5zlpV>puZEXVyge@HF;d9G$3r3D(`h!E&M_{0{RR5E4FPi)Q$;u?N;`5GVrk z0k&2dfXd}T>f0iT7n?=l-->&B8w5?*N8@CLMtSaf?Q#}_2_-Z9*u6tsrpD^P5|P@K zCLxq4%-IxStkznm0gt%WSTvIAq&I`9O`s-gv&_5H=&!_yN4(rRh{y3 zRX}LU|8*8zf&irvYrY>lMJIQ!s}$oMu0rqu9O%~C{?iA69i!;{0NC`Z?G;V_5`MN8 zhAatutR53N0Y+pL_bL@{*qAZfDDf7=-~^YcO30x|cyeCJzreBC(ov0OjQ1xAn`Q#6 z&@k>VHF3NW=Y`M-jbChji;P04BTHXQf$cU3Gfhe%uG!H@+h6;SI?l5Z3#g|+1qSiB zB@|vWpAKn*jac;ajWlAFa;y0ckuMVS^?mnP^!K;64Uv3 z%OE-QTWaq97o>s|`@zQiq`*OYt!wpgOUmhSD+-SDWsd|!261e8hag(FL^tohd&uHb z=%)0JO#*k}a4ch@%)LC@YxpR?jI8L8Tx*0)atPmH62z+GQ8wTXA_O~=Q$lK-tUB}R zno&w{i(3TU_Oa(UPTHIG^wIWRf-Vj!qSyK8^m<45cLFe-%PXM^eJaD9Ud9{(eOX05){03&eZ!;u+YdVS~yd7@E^$^H@wfUP`|njZBq$M*sTR zdoImCZt2N(+l$1ghOK6D>NnWz_+a4{0|wi1tqtB6VI;Hneo*eUaK%|k_r9AeeQ%W$ zP4goJ31D>nG5q#rd8yO;T>2H#N7c~j4|eHqazbAG%r!9kSG(Z!deV1~pYHiBA{Ro= z!1`zXz(>heCjGBsd30ZhAhFLNUXkSw)`SvVi~BD2#_q=G&LA~5hT zs~LZCMU-gq3ccm}U9JKa;a&4OV%t1B$`;2{15-O{z-aFdogik{NRlB%7(TR#e_|PXMsx&-Tbv5Ib@7)wjS7d#5o9ekUD$O%c=O;L=yjl{{YYTSd6Lsy2W-R zGV;m(F?K9d$s<4R%XG8Y&=k^olC255-y-PuRZROuj6YT&Uc`;XCC9vG1LlN}DkGe4jg^?x*7V{~S} z*PYt7rnc>=ZQJ(L?$owz+qP{?`_#7GPWwK;|61>t`yn~WO>$4}O3u#S@#Cnq^W$I4 zbA}}%mBzJg?pk^q7WQ$k9lG;JL15V_j_kZH|- z!ZM2qF4>V>mKPlvQVe@%EGEtG^>b*v15xR~4VM2JJIFa^kR#7FeMK(%AgfUEuXo~Z zcCDxY4o;BikZIe@DjP@mHBNMp{?&n7f!sti{Q3`II zoyo({K7Nr1hn&@sbeaR?+9$C9IJVxi?gDYk?(X~|ErN&hB|4(3q%Q@Vgsiq_c=Fnm z$npf#cJ;iX1WnfEgmr}T*I_}Gor?}(5I-goOk~dspTSf@&gV-UY2AygJA{tI6ocS* z%pzQsw!ce|Iwk(9%po*!w`|1k1L2y2hiwl@I*yz54Hi^))f@`FY5<;*Wlh0@>}!WZ z3K?amwV1HG6=MdvFdtyN@QXUQ?hnQjDama-T@X1$&Rd6@gDait&n zwq!&!Zsq4&8V#SmGwbhuYYnDf+p~skaY{ouk$Fbp0w?00@9;Twq>=jRlG}Ivk|`;2 znF02MO!!=y#T{Gxh#|I|3>~lodv_lwMh<^ResQlS(>7q*f zXsfwCmbr_Gz=?g@Cw3V4L-Prz6eU|sg1M9Jefem>R_9A9(+YOkQ|mCY?u^Bwi)*b+ zWuZ=VOMJ!Oo7sNhcaXce7%Rn<_Qm<)D8GDcPiTG*5pHS@4aEb4e3~gw7#XC_W|Th! z1Bk3yqNZ1df{VG%Z-A2XrHZX0-CVa4`{k-%my0S77Lgq$nqf0$ELA`I2g2F{mM@sg z>|QdH8bd*X2EAq=V~sV>`#?GkvvZlpMIXL%ciuXCgX{u7e~cgHIY%|*j$qh|{vvlc z8I_g4RyZB;QDa|vf(|Of5u7ooNn}Hcv3z;+92BlEW645ho_O9wi#lpS_v8vwpvODU z!{%VWEeT`(Sr3-KZxs}8lcnU2|1Wgb~LV+`joxcI$x-tnb$WJ&?^nsI7I z``BiowTkcboJd;h8i$pwEW_6)F|#K#8%sG4w0Ld$3rfyM0U)Sb-3k?F6Ji&0*_pWm zgd?JrJD5IF<^gxOaa}?C#oNfO82#s+KKmbzCy%QRDqA}GVLMd?y>JOk{$SzCp{Rbj#CaviS@f3ANylXJH1iWCeEk~*joAOPGfO{1o3 zoHp=!LH-!veSwx&vjx|Sg^BB43I+)qOctM|LTi-tntHQ7+xl`yI_4A<{#Vd0D!@#f zL-cqNApP6yO{Upl5Z++t4n3Iyxpi>?9fnQNux)GtKy6pPF2iLGHU-Unu^K;eES%@j=shOL*!a~v zR|c_kBf1s3QlCz>TV3c(8XMqelXnvyA+4O)ZK-)V+B~9bErVaF&OD&jW5DZVQ2gd% z`JOWlsMp5CyE|nLpZ|t19!#v2y0Fx)<{fE5ZFny*$=_K&S?W2{D6}uK)|&n|zeAXV z_Z$9EatiDDEjGP5zn)$?OJJLZ8ugqQ~)5Af}flFd~JQ&NKyoP-D`)lXB3^)(+ z)ysC03AaUD^!?l2k8V$J5W6plqdx(R*4aS?ql zt{pbngb`*jYzz@&V4_pa3|r_*AF|)c3-A(rQRVt&4dNSjD0UX~rKg41mMpo7L)BnX z#68D&c*=9U_^Js9y|e^440OTL@#`k&FG&`%i38O3%+S2|sS@5n3~iI^u@GpK0R z5F28HQsI&AvFQ#`*qUQkDidi^GQozfIaun_W*&@+|0LZ>FONy*mCE#?2jFSI6`}Kh z$SQwx#!JUEz0u{Rsa8B*rI*!rxEGJ|Lph@@!kL+FvBzMwvIl#;GyGEqx8Jm9Vpb4n z-Q1^{OI0nO9%HRDVZ9a>^063;Bx99$#vPGNU}>OD z!?8W%XgLdV*o-7MEzFM8A_X*!M#9}wCgHR(-A6X-b4sG+Tw~Uii71ySFEAsSS6z5b zL_Vr6GHUfra6*2#IKStd0_t(I&`q}wF1NQxa%30_8+(0qhVj-rNGW)?j6)R}s~Z*5 ziq^AyY@d4#zO0%RM9K^zdj~L3NxW@wd@(U;87LOaX@UsfrjR`-TUkJ&CWsQ-3Pm}2hf@}R)=+_BDSLohK3M7Aa@&Jef%n zPz8K>oaMaDhtktG7nS$_jC+PJO~d#p4z@a1v52e(HUKSjAwH%$$5hi37`-BMc!wIQ;Y#^z341jxzV zAD@xa%%!FF!i}Qh&u;Ril-X-~9VPH|By$eQbP08KKTXIY7;5dWc2P@nb!?tErHaRLKE7jAPCB;TfBXS|QhQifW;{)-} zq;KZ8IeWBZOAAfo=h6%RZzG>-Hj$YNipIXg7Zj1!_4*8UCA-(V{5q>pyE;EVd$W6E z-Y4HyKo}h#QxdbLh(2BsbJUvXjT2jExPMsN{!ftA`yum(3IYUY)`NAIUv8?Hz<;1n zPj!*vZWUsp1=F45%dB61N`-7%X6|Kf!#{q)aoLcl7(0!}0*+K^ttS2a`rMc{m;tQx zb`RsU1aS71SnU34<1cd?^$9^c=kKqu)42i)26alLR35Fi+J0+2)Hp+1)$FUzk&c+T z4FDg?&iPUhF(QvlnKqC^NoyS|4cu}GW2SCL4Lre!t)oy6cN>Sz@G3~Gei#tJ0N-Co{7Rmi;$sB6^e-&yhTuzCuoV{8|l zlVl${YNM~QtB*wNqQo#h#o}V35*r6pC$|%1#MHraBVMCbvO0wzt1ia>IQ?2-rmPq? zTysTi*r{3ET%-fvc4Xw-Lha{CURVBghD1sio8_#99-h0rxsBkew8;c|LEq|}-L-F; z5FSh*N*R+}Tc3=qiBgj%w=@e>9pSYbBeQ>v3J^H{bqT{Dx+V8Mujx*d#Yyg~P7z2; z7QKqD2xba5GB18puq)`k?OJq1GwGc7Q|Q7Z;1Ri|14={kVR?NLhB@2tnkSgxh#w_C zuWVsXSc530Mw17rHommR8Iq!0)sjGFNv}(nneR7ww%#{nio}g3sMQUl<@O$d?b(++ z5k@V{8v33!>p~==;=y?+8d zO!L|nb~%wrRQpQwqjgtdeBL6d>8vb83p8nz+@GP40@FaE^y;$G7ScKTdE{FB>C+Jo z*vFV1()&<_&;X_xpeUA^Q1tpvR_)P_N(Nq~crMhPcGj*RxwU^jfTp6cdve zg?AuxG|Fs*z{HW#vQx*LCx(T(%(2A|_x=4P0`mr9d!2=)dyDIL zaHrOLHE!NSwM)%hYI(8}xSaX3$Y+?dHa=UV_6Hxwb_?fM7e7P+YuGV_z)<&`&^w`05=*37#{Vy)4&Vyb?x z^+{z0;ED%XmwG3n!2PFWqxWWVldxXC98@W1V?0bQ8`(Ci?_{X*ZuC6Yr=b<4QIAd z5PR<{W^s*4hGxf`cp5E(GU|ehOs&x+$0Y7YC|Zgg76P` zE-kIbnW#j&+Bmkh+2Ryy%f1{^1dZF_lIRiBg|E!Gh-uc0ch_kX!?mfPIj>v#Lf*xu zQi)v(;-_Tf?|b@nysor=x_iN|q$SF2MbhMtrN!w(NY$l|aA>@@L`^*BmQ(sJG@FGJ zNE8Vns|m(2Qg%rf*n+TQ+G(;%9SIlOefk~kZP|hxlk%pFpsEQfFfw+~WdAdEe*$yx zah^HUzZtFktS8lDs|budIm*+^3 z%h^})Ss$eAatlmHBP%D_hu=VE#`9{5>7Qc9gN=LjontXR$kUcYT)))i)5R77(+Q=q9n%`>-)$xh*$chz+QYG zwqpFyeQq&=?;x)=kX|p!U;i=!>`3Y-n2OV1A$tCv3j{j@?`Q-M6B)4?07E8Xgw@J9WU-1NzV*uCc{2v~b$nobbxVPR6A zsSp4T@KBK*STJ?@hY!V*GXnM-opb9f4p9(x+UU+3z-m}t+1*mL15BBnbAnQG6%$SO zz8WRrvrhEAi(O_Vy;8F;NHUZLmC>?O8F_IV80n@yUYIlf;=al;QEFPD_LLAa%0kIy z*6;1JG`6e`M=v8PU0GNzHPF?3@9nrvU;Rx1bc!7JUKYNorX?GvJ}dpk@SV^(d9)(x zaTeC8yX8EQ*5QPtsLb4B^wSR48o{}a42)0qYXRZXvWQU(33Z14f4_8Hy*OEQwZnyUl}=2Ir#S(xL#y5uwY#9_iq*j6Ok zok3lNSp^@wWX|8Zd~&w=mQ0QiTZM1JBOhEuRZd)vUNFz4|2nQxvI(tL)PHku=JbkFFs{`}z67FuK0oEpxDfKc8C-k&p3PJgCZ(fVgR>Suo8go#YrThn39IGSLR zf&k;W+N8Wlrd597A;44dwCgTIUISzLuwpKDT>&6XNCyn>;5boNcFu;@Okfw)u~ zmq$xoj}7df5?lEml0%Wm&Aq%#Xk4?UdMZ8fsmyW=O)VmRlGW)cIGW`5jcy8kfB8)! ztpJ8wWHFkSyW09Pr)J6y4Ry`MrvlZyMMd)K*U4ao5SPGsLw;vYjStG*oi}4BZtzlk zwZ`JQZAwhI!uoFrc{GHEV5>g0?Xlkv78QzqiSwpvOpY6}DLQOmTy?`Q-pp!+OE^|Y z3*gojstkbTP+hx-Iz}V}7ivUTS#3IBicG<)pvkOk>Nq6T3~k1q%uo!ud^et>GkLWm zu%pVK@=Ik8Vrb___OMQGv+ zRTpI5iXz%Zufu^;)}!R3To?-ZE^;`^tK@bFxIYxyaS|m+X>sXoROwtc+{NJlrO(~H zGv(vP<8D|Ac^v{c8n(RpT5mwh4o@~uJNJCYqA|=8$7mqIPU&gfM^#r2Z=MNbDigg@ zHqkVzh3-k;l-L?PaL`_i1`33Y^6DV<#X8Sj&QN61J(%jAx`dMeVk1#XrLEDMR{FU1f2;bJ+}2FldWQWhEKkU?>h)Nii*b@Qu-w;dqD2z{{%$lpg;hz zAh_-Lo7${z;Sg=NKH+n4&s$MCwy@NT&ZGaZATFB&lVBneVALdO+!U=$R0xRFL|eT% zxzGGTp#t6>N64ZoTtro7QHRltf0Oz@IA}2X>mQpRgph*JyRxn z?fs+!r}BeC)H5-OaxGDKUUYOopsP#tS$}ly7!c5a_4g~+hL3GcMym88S)^!^f&=Pp z%PfnP?V+q= z;6lPkIvB?y$ESy3bBt>f4jNXECnUD3CEqj3qC2D7BmvG4zBm(nvQeqItygO`E1)N& zxb^8fM#X1U;Ge2V31#JlW0Qw#wpFFonG+V+{X;e^KZP@O9zn?^W;XuOU<3^hd1@U) z;&Cf5@2Xw>41r4^CBL^`94k@MDiFm1&^OTt2fO7=ydc?Kt^xM`gQ)Q1U;bRzCOn{n z*{}E*eUV5I(B>se5+PMy8ToHBq81Rq*0QS43y4fEH2AQvKt?)ql!7cQJYb9FUj4g2 zDBH%e#@DXi7antNHPzW&r|vcWqHbx#<(A^6SshioAQD9_o^+?<5Rl#z7+`{{cyn5g zIrN}$iX3suNc}UAHJqKZd_o^qXm)Nftt~jI)NuTh+$6ufBI~LDhxnWcviwqaruHC& zeer@L{fyl7LpRc04u`71dckj^&)?Tw;z>}j;xo_ikiBMu5Xi9xLRyJ!N~yg2R{Xvf zeK}u>0#==K=sCY<#hyO?wcC3eq*Sn)@9+CLhkJ;|95Dk%+;N7D$pjEM&^EQ(5|4Pd zioaNQ4nj%UANhkyAq>>?==ErXK~*7us0u%neGeEI1MChMsv5XGE= z>%;PC=cV`t^R?FY1une67PzD$%2?RVZ#wp=)LFfMMK`D8UV73vs&(fDju(8oU1--d zA9hUxaXSadnj}+fTgbU`;qf1zM>#31+&wvd$neuQKOA3<8L0e=HLt$l#l8+Z?H9^g zs(lC(?PP05F>#oq>IEXE*Y@|Cv`(WwZj!Qk zSg{Tb*Kk~i#-@A9&$^AFYDFx$prcgWgQ*5hM*K17$n|*ot87O44OBVk zk*5axtON)LiR{Ve&K=Sjq=@(yg#6xz(|pus0xm26IeJn3GZdvGA|Z@9Iw1u*HF?b> zG2X zKfXBuv6a*pYFyT)44Z7jr`cUHHAb0+XowYIiW>^Y^5 zEjawLGt+xPK3;I9Ai7e_(f8GufF6=sqG36Y_f}Gdwy5yj1vO!PnwnanQnJqsp99z) z^W(A5Qyi5^@+F3+n11nvEkjvUFxPx^w{4rJ7&z`(ylHBI5*2W=bR4YM2}xU2(uTCJbf!C^Yxm#R#T zjD(dnj`3#AZ2XSRG{%#RYJ9f2qzMTTF2RIVD^JixSa>%_J=WCj>NGsKD+qooT+!7K zxd)-aH55B8AiQ&5n_?SSS#bnfS1^t!OQ%ESZveFd^nRt#U=!N?8A9v$}4!q}>;;+g!9b%}wpS9gi;6D7Rk7D6aoyg15(IU{J{!lH-nVIDHt`NOsCP7 zd%#BF7{)y^%+)!3b{{R718)R$DpCZa$!#UZguK&g2=j1OuUw~X553xrNnSD>?r8*J;i%u(t$D9t^y{CR zwb~D}H0&|n(nu&lh?3s!RA$O48OvVeV-?;?bqJ-@*p4e&74E?DVpUlWQ%{&@tU;gm zs^v;K@6}AmD#!=)n6FCW8;57Hkh+)sMq*r z@G|6;`vNkB8&nk%PJQqeI-_-Qcx>Qk4U3Xzt2>V+kNLJY}a zQ3#iFNQ=;l?yJNDRzxI8o$^0ro;1$Hv!rH zi#~J}>%*$eJithV@2afxNJy_aD3u-0X$tSQ@f|`4anDgvuSd<mmNiZPRq+;~;#Zz9XtaU8 zsO%OKT^KOR+MS`KZ(}cl82n#8OXD2|aI?G)#q2|hDzZ3!h!RIr!{-|96c8 zjBdlaPy>T1CFFp%Ni4>I?Uxt9`yuQO) zC4=TZY=#|*drWpmuvgE!K*_rw3d>VP?KLJQ67^Uy|0QoHklh}MH~ z%VpHN@@6*&hKhcJO4y(rC^o$?nRot|)tVKDASD8TDa1i$!rRXzczV{3*|vo(=bq8j z#5cO5VX6=n(1DDmy1zhv!ye@)WB&GQ%PYYV!Ba3KMuCV4zv6#*UJae z5|+S^(c|Br9dllnwf+#x5zWeGOKiXpX+85xcBRXoGPHZO;-vD5k(X=8?e2)V!YszQ zaw$6Bb|Q>*=^mk1xgda2XR z!vi3yw72PL^5wfJV{8x1ak4dim#%Aip`2okjs*QUy}%-FWGLvOQwg*Y|zab+F-49!8!yiAtdb>cYrj@`JH*59#) zG{QFKO$e;ahYLCe#EY6*Oh7FPRW0IM{s)|Wp?Fkk=Fd(+oN1i-Pf2LxZc$!hEIFb) zI&`R=ax`W0+S3UPvTF=nVHK(VaN{ zB{=M2BKu}{6ATQaFvBSkEGJYu_+V(bo;n@*z)-~2XV8frMRxh@G3})uJs)v}Ij0M#YEai&6lX#QM^`Xnq+3gYoj48N?2eeI|5$f`{pPLpnsvB1< zWYqxHWr;uBwzmy}C4>JR&02s)jd**O14Yf550)z>GNgv;078yu{=`4}VWl2?UgF$;CFh1h-=1WILX&ii*-W`99U22B?i>&D-EUhv5Tp3$?h^$S@A z-uzeyn=Wn!Ci{4+%PgObv$5xI<5E_Xv@{vQ*GveZenk_=Yv9%pomg9Q3`NyzOaNn|@W%)uOsay zx&s4yROgoQx@Tl_Qw_Xy!7o!Dos!c~ZMI_qa>w5)IXtp5_@j8rtaeQm5pb3 zdFN?c1zI3)Sdz-1BHxJiCsto+10&1ov6Ft_bbn;^oD?dU-(QjzQwnwGL#pzbjr@Qa z-`89GWMK8|OxWZE$&KSdswu~=w&P$P-vG#@u5I1UO&?lO8{a|s_eASQ{WPeG!R>*6 zB>8RXX>}(695KdlUrNwP2Ikma1Ml!mI)q1_0R>?1wncPO!y8?uYq0*V=8Ibd^=#jb z-vbZtno=mFA(l*&nCtM2*hZCE68*d!2_>Ckr1@l+wkXLli0C{;*G3&-DLbz7PR!^& zzzJsbVFQ7Im`lz)=o8hC`=n;|{9{^lizZ1!RdAT0<{X{;wXh2~$5^aR&9nV-kMbl)@pj_t4&`j^tVY@2$r$ znhUCR+4QcR`TcQJ@)kX)I?X^Ao_t35;C1u{<}uKrvielL+Fq@=5$hZ|zyqi*$(H3a z1_0BCGi9`WIz%mpQJg$p7^3KI_f`tPKKC`DI}ood3U6PZKB6gaPL%o1%5L)=uymIg z%V>Dck=8Nfm)l&8oJ=2X`7(~^w68GF?ZQ@cr^|u)^j)Hy{X71y=4jtyp1i~Kbj4ImbydOqb91Q097cM#H~G!L?YR=egf**CK{HII1WS!JX_v|np!?1nHU zxIn0lU&nH|Wi>k#GQan$pqtY9C;T4R?>ST$@c5;haYz0)YLw9$akgj8b9!s9?OLhv zK^op_vFUy*Y%C%7Yga5cg@yPKS}`iCFZPcDKAd3}c72G^DwcE(wMM*kfMT6x}z zht#N6TRf7nBVAlS$lI>@i8Bb-NvDQ9J3w;Co#zNo4crL2#sw&`S=BNE&CP|479ib~ zu9k(Twq27JL4py|u0aF%_-SURfL2PH5*2EvAb7QaF+hj!&$kR9TC>V`iFX?4I4U&# z?&?er0lS?O1Xy`Cv$a6)-KXD+cS>atK$$Pxx|-j!(ecoB_yd31rU#A(;5sqn|IJdF zd6)@2N5 z>&%kZ{e;>Eu_%L}g;oIfHx~~@fQisHmxx^1`1MJh_DFR`nmenWsyln);pOpD?*CT| z`7Iby<9oeO#t}5*26PzI80A;A{FQv?b=%9xv; zHL;ayLrX}_m^PR-K5}jO*~xHX{*S^{=emw9r5pcpSk+DAG0jYv(}XVqkXu=tQLT$< zAIP5+;=PNP+?F$K$<624$+ihzfcxUA=2h+PuBNo*lY-ioR6$=tC6m^T+xM|5-OZZB z8CGF?Wg119ah3*1p~6e^_1*wxlGLV ze9uF}+TGc5YNfQ~-3cf6#{=jEoKIFpcgLEUok}LZv{lYeMulec{{MR$5XrS^vX1icVFWaAyi#jmKH_6ZLAeox!kd1hdK-OxS&?S4ldLidHtfsOA zNf%HP5~`lzh|$WGVeX2o;Tf(P1M=f-ZH4yS9LPVsU>bCV~AHy4Cd% ztWXx1Up(7r-G6Pquk>QL@6Bf%PhJGz zH3a-&9S%P$AQkR{Z$lCX(mV)B&-?$R*y&KcLyOd^d5BYfl9Nj{QQ72C_2nR@y*n01 z*0@24*Tx?F!o~;+CMIuJ9*a2?lv22b5y@3^S%fZzdadP)%1oe8JdSDBam{JeiT(Z; z$K0bt>-!%=1&?@vMX5z1YgHV6qxRxaj!{&0F(3Xrg6!$Nxwy z0v`?tMx-R(rqz@Kmy%>mGAz0CBnNw`@8QPwNGh!fj|w{S zi(TCQ+g_0M{_`U+cGV0jKdri!{o&1l53%BWqg1|VjYeD9ZCtte(m3-M4gpw5t=Od< ze{}vBkvxNpi`PsD&jCgXDECsyMTQE0RMzs&??6yfD&IV~|Gu&CTA>?T2+AY2Xs_JN zBz?JTZ+0yL1tk{R>DS}Lj`3=`!{2&pRtPM5Cujv$#m^8fl%1R3RX2aY3u~Xq%TN_1 zHaM)#Iu=_xAoWpO=ls#~^9+9;7K*Kg#0CT!j#a^Y?kvce=@35h8XM_Mj&a4|Mi)2ZOz{M<~%5BAhCBL3dQph(71Mle5lhJLpU@ z?~&g;_l3^fuxScBm!k{3gZ~an?Rt0OUdfGr1@w0zI=dyu!}+{142iMas$f0XL#C~F z_%a+rMkySInj(Q|AEr{1I{jt_beq!_A4q>)O{&Qs zSz})%B{aluswchYId?!#{Rw^>*dq}}+HNNz8)qOQlZSIiWQptRp~!xw7`Ji;fPfugQ7oaiMX_3`{l*u zy-bD&$d>f61D1;ug~S$*%zrQe4dxf5AQbD*YcTYu8Zc1D(R^{~U2VSxvZJiTQ6ukx zlKsE>tTfl&8`NSej5{#p%mn9?c@#ghOO?9Roa|e4o=yE1juGXPQjX^pN?SGn$FARxY z{wf@9h{Y5gawR7f9J{4v9__;jPS}!DjYBVLO?3Lyk(hYrf}6PVc(~wno6_p`~UYhC(R43N5CtX~4WWq!jg40fQryH^*NBs`Db*ON!3y*^ z@gTZo0o`LV5jPyPM`&A+>T0rN9n6CA&vU+JF4w*iZF=3Q9 zKXhD*VkY949vx`qEOn4Oeq8(C);fn*<3Nt`|Jg*lgX_lc(Crz)QZeVAqN_^O%WU&( zLIlyN2e-JRg*aGY<#Hlrq2p*eW>7dbGN46cW-)EL4zJC%?d&9-AydWO6CdN2s)>vm zxhv;LE*cw&fj@Au3(G~wRfA;2)#Io3#7iA_$jov7SpbKE6mNnpdU?Gr#sybxfc!*5 zQ)vl@&JEx1ktIKpxWP4~cdkDuWE(?dva8>gs*ccOwLDT^XFPCzU0e~N0~8%APJ`Sr zLuO`W^&K`CVS<#MgDcz?$H24eCJ_Kd+`MpMuFwnj8DZ+*AfH;kfRMz17%hgql`G5* z+aiNgr{{ooBErj zdhqodq1_0`*Z9i++|H7p_E_o>FU1j~rQr<14W`zpR^NNwNu6hM3OC+{R-JGi9 zK)Ie4HiNd4d(<7MHNV{EyDuj8%(h3SVQ>Z)vj&K?E^ts>%m*QsU%I;?<*h-YKPo^Pa7TRoiE!KsO>1~py3 zsG7%E&#u=MM*m4E2yQ#P%hWT7(G<2t?a|eihT*AaU8w`jx~i6|jSfj!MfeSH8{=9V z6sf|~&G2ARMo~x^gQewkoAB9QFdC|q_hzkzsWNw%Aum*&Tu6R7bn1gY&r7xUzT!be zJ+Rl{zcmP@9%RXV-cY8I_ngp^D(}rHQ$@NcH9m>tLQh77znXc*Coz!wb zPK!c=Qg>{dPI)FqT?gHB#4N(NWKd6Mrq-9dj24oe=QLb?;bL|Trg@?VsEpD=OyDYu zY_zL6k9%ry$ocL52+vhf3;7j^k`XgWgJBCzPogf3yeTnDy5zBXV+FHal+@hx))9t+ zQH6iyN`Aa5BRcvdmkm8051w2|Q43kZI&#|gJT@)hmH{>e6Y7IrGX{1LES)inbly%h zG$ND7-`xe`1EMx%DjNcJKQ_Jne*$@tG7ULWd=!?t*mdNyrvUn`CeOdeLs8-*BU%A) zz~0L)snkVN5wp2jFH=P`@oYH2kp=;l8{LNwOVTzkMuEzx(FU8|9hh>g+&(N0O_*M- zkSAL0zt?l8qDBwJrdaB=Q$Z#5AXbn0hkOpz8ATJ_j=4lcuU;FG$mmOjDQKk-TE!s1 z68Lxz_3J{l->1+3sQNc6l20os8)+oJ53Kb}?JdA$&c7j93ZyQI|I{-Gbn-Qf`Y zk|5q?MmsKTuOtmYa&+Ua+EM%{-#Mx=A#wHzJ-BlxQE`pum!gvuWSafpICQw$b$bLU zIIV9mi5~KQz*za2z1f{$^ths>)D;#o&|Liucg1 ze}k}!xlk4W2QaO;OOlTj@{-&p(4V}t{|vtc}} zpV*#aHxs*7Ig0VLZZ`Jj;oXhmZlhoj$hgcn>et7Xu>nD^ zFZDZzy?gpkZp=)OMpz=F6IUHkU)7GbTCqdFJ3EJX3Yo1;*Z^qcV(F4blg079Qum~u z@XtYWgBldy|N6Ze+SV^X7K2dt+`zj2(ePcr?k)&1HY-tkwm==xi|cHQ+=btSa{A94 z^$9D>w@@3U@<8PW-pLv1arPMWV0_GOc;J42Rc=w@SdseZ3(da`W zq^ug}fB1$^=bENGCH}YIA8Wy73T_AbH+n3ByT`XL$YE?k1EqC2Dun}h$ezw)HWJaj z8sm{J+ockE&UNS8cdS7=H0M68ebUT4FwE{^$fxTYaNjD2loy?hU{2mvY6qiQL%I3f zyP5eOID`d+1;%0wGXn^;^4KodpRR+pp2IcT+7QFz#HYlY#Q8O-_}MD{S_qPT=CHB1 z8lmF~H>;90Q28?{VY`1h5Vimm;OzB%-G7bpZREp%i#aKrdqSF0=Topqhj7g6%2k~7??5@`0 zdWV;sZACPH>*=(~+~5-&a*N9NCZTaPOMhN`K6m95b85}9#>%V#*~W5`C%)iT%+8_w zb={8csTM~|sr6w$*OD@hCB)K-=Yf@8gSf@Ox|mes8;oXf^7ADqE8yepxE93hquiq9 z79~~qMFY+Gf5V9s=H6>B1gW}8`w@<&abox)qQ~!^hxop4oxNaB*%s41@9e_ zV0i_t6#DXGFsN#&_dhK+6*YzMG3VS2CWj?5cl@_?o_-h%oTJ}36Tx!%wpE|xs%={r z_j8V0Z>Gg`Oec;!>7JlG$WPc3exvqR^O;_qmW2rvR5~1v9EsoN6Sdb9|H;qE(DS2o z7MxK>Z`zI=!-`cF!6D(L2Qe7(nF@a+n2MEgGvULX@8KiZy%Zz0G%U|Q@bx@idH4i2 zcrS)-6LhKxU_Efg!st!q725f%TH)XMXBOpL<^IQ(*?5br6JAuo=3bxNz&Kau%vzwo zhSLk3m4jJ-0G~73?u%_l~K=FrK z_zo1QsYyjDCC~Lm=5?TZ#|N*hZuSxYsiiSvYY}#yd^+pjIY*#fi3wH-uqxHbhg$D) zm6+R;%x54?r`_L6V0psaeQHQ>t@OC6=I*&o?{IkZ{1C)O+i@ah`?U>la>K=;q&)^J z`k$f4l%CK!zEff|ttN6zLS+?NF_QSis5N9$a=L0zX&I0qq;%@%QbSLQyLx=U%*HsI zbBKSk{w0-X9mKAs9b@|wH4~Hc&nPjv1W(#Uc2mbD|8$WKU-@q(?d~N)bE_BE*d50j zX%f@fo`2S7M;d6HCOs+sq3X!gKRlOd!2SI^LV9o`1<6K_CguC#sS6a_PjoV>h68%8 zuY%oANYq?zv?U~vW3*vN1T@Of!oiCr%V5pP5QJErh)5VgE(vOPJK2h&r;u0zT*9pA zkg@K|x!Hck=a>lWdf629D8ginaNNJIMS9@863csyfU1W+T7QK|lJIk=`~U_yT3mN5 z8L<&BF>+bVLo}!5vYH>(Q-_t=4-zy^Hg=*xQ5!`rxs-G;TficGKzk3IRC8v@!Y0N# zNbLz|%|=DLYioIkA_}SK@}FiGrqnONUyi+f*+v)`ijmYsm2w2_7b^->Vec}FwiiE!N5{{`X<$T@Zl`>H zD6=)#szol_R4up4~3`X)i|W7MPLr)5Xf;n9&>|!^H%OANys@F`;+T0 zwWoz?Kf;Xn&h46R`G&<=n7=Z@nS1A>foACG()R?(C)%Eh=;_lYLmx6o&NBixhh!)k z6o=Lopo)$aTm4FYwF;2pjunR{qpwvsih(SJ3%_1(Cx;VZgOC(-(D@Oy!AFLTg6ut^ z#Iz=|EOWp4-#q^8v?Y(6*%kW!9{}V)8^1_EX>%T;i^8~W@5+K zIX?}|X-}ejA-Q%u}zDjba&`@T{O6JkHzLfXw`Rh^;ff@Ge;mz-nQ$dK~>WVut_z7$$)_{d5d zj(s^@KYl0jfGzAQTYE#bgLK*H5Z79#ltZE96nfgH^p(2)HA7QvRUy+Ya9x=7SU zxqQ20%y^lW*@&2AIs4o@N)J2yz_%l;h-$;4r)$Tn{bok6){CL8V3WwkQB>gly_6ny z3WD4ts(>o&QUDbelw*aZ6g^)wUVmxR3^pZ5vi4E2@LF6Qe~T)hMx}UjV@v)!)^3BV zgAo)!Q3cfS72~ZmV`R^1?o0L@ueLpk3Ked$SNExvZE6TX#nU$HA}Z-C!%Qy2_aHW_ z?XT<+ek>}waXm|W)rsnuGgX+V0_r~$6tB8vzt~Y;zVIz6c){kHZ^{dyNw211#RN{D zTsKMJrChnH!!(QYPR$l3T8=rowf(Qkg(g5u;dH^uCCpfo(ndIIJ89wz-pXrL6x_5w z44!eyObIJuZlYr1dV&AeLbVmv!9QA3VMWZ9RZeF9fa3eNZJpbQR)W4>GB%oba;&I^ zHyfX|7gj{&q_p0QK2esrXqRfN{D`HUm-Fcos=J}rImi#mBN0|a1*P!b%s`Q`naS0A z@s(4zdC@o}LdO@;f5}zKX%baH1*HJ(>?3eX7uD)*s!{a*f{`!p20iRUU;dIlR{mU` zov#4t*Z=9Db zu8@jLq2w8was+z4dGFS*5`Fw*o$4I;TzO%&1nF&6&YGX%3nnGpa|=%o=oF@VAbQ(3 zCtlCLOGeiXVMSDE3c$}KmHmRRgfMS@ALOd;JU0z*C*6d)6A3G#LQ@iDW~$_bu?Ve1 zc(1+=+866`u0!6Tx~_F`6IaNrOUbz9g)PC}7py-e``p>Q=XIs*aw)8cSr?_I`rYG- zyuA6BWb3(CdKc~1o23?Zj5LT!O;yE5u$N5oUVfMCbN59hOwMs@A1_1R|Ma?fQ8RMz z%4PnR$~=v=D67d8ZoTL|t*D2I2)8_d^Df+~Om6j$9-SoL*4N%4y*2A&3;A7~6rd|M zseYTLkh^Dfe0Qp<%L??as6 zTmf?I;UvPA;nl7=1R+;i#EB|0Ez0cg95nuZUESauwPgFJ>8s@tXmBmF&Vv^5n|L5N zmuGT5Ni>e{udUxID@;;R3K>O>(o9s2i zv%Nd-&=$1Tj%-cQ#<83qZZZtXf5t89fUdZPUSp}5?RU!3M##tcEMWRBdIruFc*RYf zl*$q|-A#v>=xKseY}=QF|1sq|b=Hu0GYrQi_pmhDsa(j?13JPERVivE%LOd8 zIY(5qb#%!Re}}vjtrBvv;+Oe(uiXczAo8fWrI{QxQ;-UvHeJ3;thU2m&PdusFF8(%=?X2xXQ@M;WUCY`y9;i^1 zm|LY05?p;Ct+)Ttv<+8qUP$J9jkRxct>~MpGXlk*W+K!T!e1<~WB4E)<~HGLoP7Bb zT4^UJ6?hU;q_+uQkPdf~`7Fl0{2W~fhdLE+5;LSLbiU;Thu(xHNQb}44i}!@E|?0y z{+=c{_(H05iS@mqgsp_ElySpu^rIhl>brzf}!j zcGZ}Yko&kt;(iyn(`KdF3TRul299=V>d9v6?IpV30Tn$8s8ugf)GCo&)k$Xah@T&= zpivktd+ChYca;}C*<;??$FnX}Bm^uVm^jXQDpY;){aimLvYeLu>g~fRF=K2goJcKc z@zt&T`jyFfwchg4;YheQ0ZCMZ6KSoS67#u~AW;cz;wv0T&E6{_Jw*tm$v#RhQl277 zr3fcd+k#}JsU3NyP0&0kx73_)BDFL~?w(Q&5Bal(LmQ@V)4alo)EXnXvY`jhlrH)? z3y>`kO`!HF$>X!po22V!Gl0d&CS{#O6R3?-`IO5gd0?2ZVOh!SrDy`RFe-O<`y`)D zB~~@FodFk3pf*_Li7%(*%gon{?Z(RIN90imCQfU@x+EN@}L5SpS@B1)*RzpWWmJoPu-Mf3HO@sRF(FV_cd8r@~O)rcn0T1F-0;|mRUpDtG!Bhds(Wp_fC zJMv|L&FzL&)2}*grn`aSgh2O4t(m6z53X`t;!hT5+3Mr3)%0sYF8RLB$vY zAkP?-RJKvg@=P7R@G)i(?~`*ONl!(D9Y2zCoDH|2>KqIbudE{};8joWBMc{ybs%z# z!Aw)AP$I|F$4gTW&0*7goRq;xDOI4~2JXxEPW3`EXNPucly>{UM%T6(0JGy4N6{<{W6 z#uoq0ECz$Q(sC}kd{R0F%7{mtQoz2(+eaYQQIi&roJen}#itv;=XD(lFhzxO-UgADZcZkrJfA(<;uWIm(xhO3A|FxJ$eg zgPM-mM<~{t!f6OW21TxsI3`zuGdt$t5p)Z(AqSy)$!;1hmztx0`Kal$g~ea8)`jTG z+do861Ism5Jv6~Y$DCg;*Oad(2Z}dgF`a>Y>PN`=I~;@mb|M&jQbHCKm|cL1UzP%Y z2I8@ch#kCrYm%)`Gmt`G=IoQu2(3l z_n1r|%Ia373I|_!a!KwHVtC*~Gvc zi>X}5N)8zEjyvF>+J-?>8#}h?^rHI7=vYXu2~zEOK2r1;hBH;QSit4Oc{J|rQ&FsE zDo#N^@HO^E&K+_t9qdOto92Oa+0`@C@#NK9(T7{(DzIxD&wYBE!hAnMdBWW*4Rm7eJL0QkGGeSD%9i1LdKN%SdNsS_$y;KtP7$!cIj_83FOOW(d zAu31JVURPt;BbDlT&mVjM#e&NW0}Wn@0$cYg>isx(o(AEsLY^YXa(W;an=S1o`r8`O+9XLjjE%)S0w|ciWq1D2T2I`b-1k*aWDN1zXiT zlRAGjx~%LB^Jd2}IPI8xCm3I_P!QAJVjs!d?L!cC?Udb^RJ0n!6tvTrsUFjvxPv%CS`l zMz-Gk3acJI3o4iHF%7xucz!U63RCPf!;3~WvMmh*E1%iH z09c46BTQm5lcZ5F{tr>SMr64A`!__DbEQGf9Dz`1G!M*JEfL$=%Tq&gl{P*!;m2M4 z#^ss|C4sd=p?carjs@yS$|0^7vlrr058TL`@cv$+O?j1q{tD>m-5*sNIl2WZB@p)g zpOjvc58ao|y)^<`?oH%z7i>}NIfr-@xr2D6Zo@jN(qcbq{GxLq(nS@CUvA)j1ys3L zy5y`H=#)eN39X5`*GE$UThz@Uk&_y)nljXDoO2Yt1A2Yv4eJEU*wAD@bnZ}7<-iN^ zhkephT}62rtnrGdz_<(21_%k2Mg=AV+PK~xlsH|jxov7bgVk`od(l@|!>>f$Ms={I z^@z+tj?N887^^vG0@81Gv7!?zenV7T9Omf02kDeV#U+1Z+CO0z+?lF~WJ}Jd2t$R( zIBkRw8Xh_Iwtgq_HY{ggRV4oqVx6ENIz3|}{!f#62a*5x8=~UkFh?f|ODHs25kxjX z#A^vDPg^M_(#RMo)W<;TP{3did5lG~ex2sHa7|oTGf6vIlrG0YMheA(5JIMBU|Uo3 z?}*L)b(*8g#idjt6`34b9K5Z)&}6-APg2djo*T!=cw&>=hdHynK~mA! zgC9q}5y4J$T)0jv)|Wt2M(T!~wd(`9#k}fHYt>#66PqL^+0o8eML;>Qh!X@vo>}5j zcFI5h_|>q}HD%4>OLq&Mqf~I5>bP*VGg&PQFQ9Zo(#hK(eD@$YtZ%&?274Iyc!f-I z)IE;qgH)+ha=KEIH#Fbmvm%U3r8y3CIMnV8l(CF{+E4vb1TI{ssJj{!v><2H1(4Q- zHCur44lu9rTS%jd{EnFDsKXs}2yGB)C<+-9G11A?;1TcwiH8$B+%QGQnL-N$i*!QB6VYq)n1rine97f!sE-H*RIL&=1;y&;7L<@ zm^7VCNg=06bJ5jzLu4`;KTWKDD-t)bMkg=8I4Hz!Ov22(l!eKY)U7rx9@amvv2 zr$Xe|#|5nY@q$jje#9uHk(T8f<$blcwckQz44kNJa-+w z6nP6*H_7cDparS(mb35h-p%T6oV?hQ+C$m$4w?9<*t<~J4bSLTsqC?5)#5hhOCrCr z=BGW{FGb+S)dc0Q77CdO$O*YJwIK16FP%x;$D;1$=q`bD2C^4X@1T+DwNa)l_*R!# zBDloS=fKI_-9B!2b!Ab-{5 zoJij?l`kX6cqZIkS4#5qTKUmv*=Ww0@SZd*QqNzr^*;kS2BhxBq;_~MJs@|?Cv7Xl$|na`fG&Vw!NZ|zgFF#QAj39 zt(yPSG3O_vWrO)wue+m<>MVVPW8PM0U>gZ}$RyZk$`X`%S48_9-aql!)2!|XqF`hA zblpAE-F5YT`*k_EUd%D2s(#Z|V@_r`v5!ITX)tn3@r)x@*zu31o4ULpH_Bm})63~+BWJ_OjKvOe6lM(ZL!|gP z>(dWi4nxP|#_aLK#%-+CU!p~0@(R(Oc2z$cIU7zA4Kgi6P7JixWv$u8ioYT>@d^U16oG+j-Q2yy8l;3XHz9Zpyi`1o|A9%XXr5o=V>O^Wo zGQ5$JbsI00Ej&i=?$XwNHgYzc>{Zw>-+nT=50T>WZZmVGk*0m~fVz;@|2n71ez-R{ zny!G9pN*UiC$JH{?nOTPbEJ4YC!rr`YHkiZn0Gd)yPl5z5ie>T6Gn29@27p-k4DW# z^VA9fd!K}^=Rk6J?X`1JK~ob#lOp&M+J*gK~od&kfI)K7bq+%^t&}XLje3}#B4PGsw+|W!t3t`Uhy&Cw~AtiM6|CseH zvI1>epAZ~wF@xvzbJiaC)-I3Rk4DT!^GS_t7WILw=RmSx&A}6iLw{2;Cq)8H?QsjQ z@hn>rDqq9dlN>q4$9^W>x7Q6%CwQYTXr4CY(9pH%j@=o5wNi& z%4lRkSV(ya69*R!?}r+?OQjYXx|Y+zocmHTsaWH;L(Zk2{bZDEFpt={V_|D(dWzH7 z-br)xL+xD5K%)p{+Jf?OYK*+31q<<=PO{GR;*AeM50JL*-4kh3CXoL>lM*RN)rK6(++WC zyt*{{*jLtgf~Id{rcHjIo3-DGybWuR&#*2rs0iKfhT;x6wwN}oc%^vBZAjxC(MSqM z1bIWKG{X6|SW4}>{ZGJjhd};_mo}1r(`X>2GJ=6Mz*lx4St@CKPlSA(?|cC?jKT@= z$=Nu*8a2r(S=z)d^LZf2e(bO?H(|Bo9Z-=e8q^ih;eUkvr7^%O zaF2)D5X$1Cxa!wT7cO53%`q?Kjh*4Pa1H8}<;~qBb})fF@}u7+JMW0)jSCQUw|1Z) z;VFsq(I;>GAlXT6!*!75jqMU!xEh+S40-93Hx80?@y?$z)v}x4WG1a0wp`*sDmR6V zib^=7klu2s40lprR)lah+ZvM2;XTdGFv+}~V`<78JFjoyYH7;qFH$$;_sPx|L?x%_ zQsEru9;&Yl)e1X#ug}R&_bzOnZ0oG81PfPF(<#Q7lQ%B(-vFYO3$f{K9VJ-^Q?f6R zO3n~Cq)Mfh!RUum^t>LLpuqTVhl_z6Yd^a?#0(x=-+ri6a-7Y$a5Xj+aiobRZ+uFW zmau=3?0msYczW5rcI{1$fPo_j-cRmmx7h@MXp*hC^4p~0@M)m)n4H$t+Ss{(H8}}R zcITctUKzisAlus4n9~bhiQ^HQ1W1ch;@E&2)D8;~U*~+6V3OuMOMG}1)%jUs>vtk< z!)kG=*vY?`wDBbM?JHcEOjA4wbJB;uVdPvY*6aGBWa$Mn0g}Y5nbR++ z1Od)aI23O?@hQ*grj9M=<&ACgUBKF&jH3Zph+UW;^PDf3Rr&eKb2yx-X^9+khN;J< z(VeQLkx;k4?b<5b7B%K+oAoQvw^21dRpl9}cJl3#Y&WJAS)8&ZhX$|07@Fl`&STI@ z8t1R&xjClOtwj*&)7M5@&1F?fOWA!x6}IFlAz`*o&l3ATtckNGKO>~!UY ztNE!0(?kfQF33-r&KJn)V^!+;{QO3M6d?0+(7RmpDO*}H`9-FaBHnYB75r&`23Px& z^K1GDQWvB*(ycm3wNt*a9vqJ9u5*X1K(2bYUxW3HB*y4@*o)_zj+D8nw&m6b5)vLP~*#-cH=%5U;gSIdWS3?&>J68q0+4Jf>e0k z<~rTxvIX0QU6Y#&%zC(*vwB+R{5{06XV<9S=0H!)_{6-3^26^_lrGNM1nCa=U>mJ{ zO9|Xi^&H4YDP=X1E4P^q9tNJltEiU=4s+-)(P0IqMx}}$BwW>CKLjd~ zlYquqN~!ta5&ZJOCpZj6FVSIw6o;a+RK`OGZEeX~N~wJCL!csB9Z#krE|M|RnB{|i zPglC?<~o_OiZRbpj_t-;8oVs{~d$87TDTh@yh~>*oH1G>KZ0!eL8om5R;q*=QxHMgT`H0 zn`@sT#mV^`xp6ukW`)O@nXGWN1LmYww$qLP#~e%3QR-!ddAbePPNQ6ykaCM2A{F$` zU(5Z~X)`N4j^Jd4YtrG?oa0ho3f}(EbXs}+Y~*aX_BF`>IjNHseuz|dq9f|&pu1~U zc--g73M*6eFHc>c5n~kQjGA!w(&neK!aUuEYZp~6=@9l`AeBq%h~`T3PrHQI)x)gt zb%!A!I-&H_%K5MXKIz|&KqYBAitZ(7WjkZ%R_m(B^|tN7-Tje-X4b)6O4(0F%LbDj zjZt;s_PL+p#K&FZx`CjR9X~a(07ssWM0}l$bkoIkLM5ft$%D4mVNIOE#h;IX;^Gb` zHH1#Kv3f!%PB>q}G(|eU)#$XlY2rnGG-5W|TJ$yH9mm5z28xF}o(X6{k(u8DPfj#n zqEwO2h}c!5(}t`~P|U2B9BLP(FGE|FC<-oW|;#Y(v*NjZ(Z$09;`0 zGAfQ4j&8*>ocxiZwFSP>#9nVE2<$NOdr{4A)j6%R+VsT0Ek|9U-_~GFc-lGcPjTem zDH1GKfEIRw;>67zJU#-&WRfP7jJcUc&~$*^aa$I z^DWQdjPZLZ&2Ke1t=HP*7NtH&nWTXSt zml%Eqvg=os$)(CM`+S)rHl#r4Mq9g71J}kmilc4o^|dnC;sOWi94D@E}D0l#WsKhhJ2H3TKq)r;b%b91UxBm)p+5f<^Rv%otlR_!!01bUn3} z5LX5;+q(2QB~GV-@yU#Ls6w3cp;~Qwc4zBqiFTf9VZmsIao2&2$M6WnIWr!Mld0MY zU?~g1D_N`*u4TN0eWQg*K2$uI?D1rdwsrWfby*=)2W$!9U!6AUM@c_hxIYMFrd zbtqBpO4L&DjIMX`C6{=HP2m0xC8wp=4@$*C;vY+1CH~WD`~<`4XYz|PsoFtcnHZFW zqKYL8#GVAp{!nU!%Z zdUfe>b|h74LV{Tis*jSRUfr&0#p3|+#>%juFoM1w|XO}-gQSYi&9MRc&2U`cwbiMP*;mCOe6UzI_ya-d3&8?_d zg5*9`i_ZrO(z;(IO_TF{gklxF`CZG4BuQ%IU}GY74`>Av>#5Zkv1Z=fP;*6t{iu{I zEFQ5;IsmCsP* z;>?kJ;}l7+B5<*1Jlj+?Z3LQ|I)Q<-ZfQ)x=|1(7+QbFLUy`QIr}doAK-9k;ic=)p z!;{_qX*Af|$+!;Aooze_t^-NKc}u6q)DKF=LISd?kKBh=Zal#--PrVYOKH0oX>luY z@ky5>xqYY8IODs4!&#QE~BSr%^Rqa=uggXRzZ+ZktLm=-ty_FIeOI-^qCga zT6P3PM{>>0|BM44=2keI$nX*0p1qpa=~Q2f1)gCMX8N2*96d*~8tn8W^1Fzls1f0& z-tIL%?jwp}+&n*rH4ThI>D*r>*qqM#-{q#ed?ad)W;JzJgvp~VGGk&jT{e4~o}s|A z>sHMdRb}Ps)E%YjW@3%A>eq{+_;@HeTGjMido~AX?bU0{n>OJoiX2=Vub6|BG=4)$ zzS~eu>B|Wmc-Lt`=OC?(d>}|zDY$nVs$XHedlmbL9%-qDS&)JTF8-Lp+FAWVQP;4` zX{Pj(k+G20GCvSx-x6)lV4S#Qh$~^%l`OXw>*dk%`+vGhQK!J}8LHIA)SQ;dX128! zbdc5_KoAsxDQA5GW9Q|BrW9qhOnEg4E3Nj`mZxEt(;Dd~BV!@09fCHyO3V1QdxODw zUw^{LxrOYq;nGs!3u-Md1fuiJBWP&UM;y7g@Ld#1O$lEA!}4nX zJm1AKNBi>82w6~T_aP8H)%P>-Tc5d)SpF?|=eyD+D6b}IlU8e5CR-n?e2{^05ym*4 zo=QI&Aq#5lO#~vGYgO6*&)K^s$&n;ykpEX?Z$eq&G|2&4aQ}O)s+vEt&{) zET0x3VzbCL1y%?S58u8@zZxM6YHfPV#7WYz{omr0oKi=4%ubAN!l^4@k7e3May2?^ z8+kh_8)RAuVD4z$qLLxcEW7joqjaK9h}iAd1&S5_zv~RcrG`npg&ic z9|C3i&v-&B2PNkj2BQQy+bO21*aA`-Vacos`Df}HtpBwqc5M=-oO#zbqB`(4py~t| z{0$cvpKD-MIr*-6l8siHEtg(RW~(CZqB+X`b6XOuh<-(sr>BsrLM5KGp`q@)m0B$g z|KFiwfCxvp?u;bBCv-vHsLl#BXx_j~kK~U5<@2ec8ZxC&w_E9jRsh?X z`EQ3zttGg0cATA=t?7ltqqqG{)NNR2wHo?v)+uxjB21xmTHBLJ+V7IVQu!YNRp4b% zTK47GR_Ed3W%h1rji>B`VIPg+idR%IQb1h|b}iR7-o@obu{4LTF6q)<5qc5Xjm`$5^60 zX~fM@m2%$ZOn(!38`g=h&9K!cg3v)^Y^~!gw=_D!d;aVy^WPDZ7c&KIt#kUT3p=1O zEu0x>T`j{b&KRMZKb8nm2$#ehgW!*%Z{s=&)yqQ%tt|9AI9r z$R8k+nFt(GrPAltXLA*Y84*1%;?o;Eb3gH+GQrV@A6zHO z4uKu$maT&(2;TucdJ~aPiEA>-^dHF-3_+U66k>XS=!BDvw&TSDypC^1UKXy~LNt)%#SQgaA-P|-^Ml9j7+j4_TFo4y+duT|9DGQN zqLe9_1jg2W7W&(rPW2n4qEoYE>qK3T=C&fJ^ucGEaJJOZR^9jA3(wA^ZMJ{VkBK$X?Bvr7um&d$WRB5A9GgsjTRmZPsyo-CJL#-<{(`CSRK(f(R0q;4%Sg0bG;@X@ ztfvO^nw|2HdOQQH56^=MC$G=Y;XlSyek$&4U#zPM9NGh&VIKKGqg4~906EicAE&94 z-uj8__@gM?xLTf!j>$^5N-Y6$I{HlOQHi`-a0iHe#Iz@MhLp4(w=urKGt6*8>(cCrcVv!3 zcqV+=r`waiKqf>HIHXEtp;DiGc5&vMItOy94iUzxi4Q_v*DkUO6mYm*VAdkbs;)hFTpj5kn?!JN0~# zdF=&1io%Vn1O;Yp0NK!(|@3YXk*w8(-j zM141GKq32x3s)P|Ey8doq%KIV|I@eb@zOdpoX%Vs=l%YMsPt5M z+SYRKbxtmY$Y87M)|X~;e7Zfay`sy-LiAH;FK&~nKZ?GMs|m7x!~vO7x**Y`F}i2K zJg7St@NeAJkATWfm8h*~cbTDsYN4?^UX#G}UAaZh`X4PXoP7%ZDT<2CudQ&jaY_D# ztNoc9WACP>ZruY4DQD9M2$bfW@pvY1dN(hSRlCf!Hd4Lv^w@GxvyEqhrc>0mv@?U^ zj4I`=#gy0jINZ2v_TajU2Ky|UeBN;5x!lT93zE!teq0ur%f71Z71CrBF6BDQZs0~p z7G#qT3^g)RV8#OAYvSTbr9ju@=w~|CX`$JC*Ho{0+*um*2*^CGvpzNldTs`-=T*$+ z^s}TGiuU5$(h2SQT=#7G&_~;75g04?VyjDe24uwquHY72`OR?gFmSu&4UWMOkgfJ7 z%4XG7fvvWfZi)~#A8n&qJy)b7;cA!rLm=Lw<5{-CQ%Vigj@-MjK_Y%K4soXYiOL;e zc22dQbyEa~`Dh!>IzYpRqmx>9{}71x?J%BgC*mVnGksao_VX>iZJyl}nW%N=>Ozx` zinOH5t&V#N6lZ5#`_L#9mdwnQx@`xz>oYy0Sy-)~(HUJ+pkPbPMzb8wfbW>V^0&`` z%(Xf~X?rHx(o$X7=V=(d^0i1B$%~|`_bu-A**2V|eg%8-9;Q+BAyT}ZeeXj*q=aj( z&9sN!mABHw?Tsc@i?F2W-ZYG-_;ef2GC`yC<9AI{=tHEqJ9FNL9$abUyuvj>_|wJN zZF*kJWP`0wx8W?uEaH^Uy5Cf ztJ3s#K0~q*$5CVZ3aj=ut~?jHoeVa2^=_rR8_4&&v(3n-+iz%T&erAVBaFi zpxa=lyBh;>)qVoJ)v9&=1rf7=S?!)-M6cagUY-Of=<(sw{|IIjE- znW(?b4NvRpFUrtzq?C?_@xtpuPjx(vf%@0q&g^>5~ zq$`mNm1`5IlbZE-+(z$9leyhgzR=X(#r=u}ks^K!6mJ)r>qG5rmUzNcgnLKCmWlh_ z!rc~3zZx+cP3;{}AvD~Sr$F{#I^J=|HPzmob7qKM@pVzWKGfYwNMWd1o_a0Q?-uU%VEWaF*=VZnUVpD{b~Qc&imwX=_MzrZw-w8& z2U8p?N~%B99b4nV_`wYhy-R*et zfokep_Aa%vN_AzB_wL7Q&u%BC-;9(E=CP*|^CV}R>LZ*StNO0{=r$bx_*^E;R_%i( zXc-PJ0;3jh7pC8glnthy&MM~p&kFQo%D%$+_b;Z6dX=u;%AEEOBPpmsSIc#Q@J`9p zzV7=*kQk_QE`U2+cAGH?d;wW;c|~BBT@hmy64C&ln=eme5&gdTGM(w>U?;Y9+bW44 z3mJh1qpSj?Z9qs~CE)AAkH(p){oeSAIn{4hy7w=~NdS2rUaq=88tABo-EzPmh7>5P z5pu^)c$$f48l$j=?c991|3~HVSAUSX0kX3+0BKF1C6PcP*nmUjO#o>mKFI*xE=3Yr zKvpPPO}Xu;WZ#5DEDg=C^c(|wPW+9yDTnP3F z>HW8hrZld-ewMuNE5ExW+;YBkEBqj2^hGH$_QT}`?9UZ4TknHYOgURkeQ=tgcYcoh zlAB{Z&*iG|Zwl!tR-$cHAs1jF(QSb5FfQXNh%L? z))-O~CMF{6l$-UIi7-y9cp+^5a`K3F)iJr{Ty}}A2q{ZeEp11<>1H669timGme(=t z1Ym)cmGrxfbi6$=m7MCQ?eTXzx#=@8Ps-*8%eHq+26ZqqP$x?=k@njSNB5qXkr=Vc zPfGv|V}qU(b;SI0DZdSEB(;R>AUjg!$I5f_dV;SS97 z8r%XpGvPueKu_|#w+-wE@mC-tFj5sDyFXYRCS(Fs7Ctdwuj-#tep|VI5G)1JQ*^0$ zX4t}A5S5?Ch6>27;*`F;k@4G)#pFc+ebeqG&(9#DDxkts@81>iPbK`eRgs1eP;SH} z6jeY)#{f3a0G5_Yz(1Go+Z|;D7DQzRB`vIo3XWkuu$Pe-@%~i0Z>%miVQoWPjj<6ys(gtBY z<&is5JSAV}wHt=s`pminCQ+RLnlCfHiGzd{(FZo{DI+YDso&2ykd|s)Td8S^yfh9k z%){Sf?U-Cx5q-^uu4UGx!90}lU&xs5%$b!srYK(6+r7435tKqf#q$6S6)R2a?Gjqu zxptZ$_9HV|Rr+4!50Onfq$dOw&*Rg1RNR+};Ie)U0rqz5qDNLF#ae*}Bju#^2tSGanjwSHEn-YC( z2iwkM%=2QnN;*5qOB*Y!h#q2^XOG$^&f`k+Ern2e22`#*_KSJNCg%X;3WzJDhiKSR zd%i3-bsIC*s`7<5lKtWZlyr8KkuFPRi6D85#tHR1{sV6XA18k*&q`o1Jx4>n`bWp9 zQn=Uae<$59UR7CVM-1r!3M{54X^d4jZo?$rn*rX)_lxs~%b0tbqbjhN%8%i4-OYUw zQNZUM-bwh2i(1mz0Y7@v!iuQ)7@gK9-Y+E)U$5(*GXCO6<9z4m=kW_GqS9lMLC1ZS zxh3KY@STjmc>5)tov!1(L|h>iAH(|IF8=&VQqtMsINqMb^+v7un4IwrG(tEczAsMy zl<}8)Q#ofxb9%)SR>Uk$iM~cbtHBfT?U%oi@q4@TO4#+Yi>SClW^$@xZCTY3@%8H8 z$oRd2dT;HHoS_v~#7vG+l4_hQm`cR=tA8Wo_o9q;nEc^ZM9R3~4PA5owA!3L3;y0# zUliA*{g#qU{}`0gAs2E5ZRv(}#P;tA&fBGnQk`tw(%-2@13A_+#v%~+Ga|rLFv(R0wOqLlQ!CZ zpVq->tv0%ShSnv&8mJdS(e+eyH(m9cB@~jBwo! zN#t{KDoYihpzu&K_nuGvOA{$uE6YCSYHn*Is$+5?TTOXDhL8pnn@h<=!xo$St?I$YzW|0j; ziMdrjp3(%hUX&$VdArAOEGLA#omko1WUav`F+=)1J9=Bc_|+g)u9NTD3KLD5NVmE9 zeV+9dsUTBG&P6M3)k3;%Q48sW-M@M|PNKu^*o70R4Mov3ORPT6w!fS>Zzl$b6@(M1 z)_7qN})&k|2p7z1-Ig^7)P!bv8L~5Z=Zu8FDJ&+a-CfQAj zg%hb&JUR6{PxeWT%ZmVWE@_kWif970)~p-H$4=OhI(M{9TP~&AClt)Fq~FqXqG>1F zM%Hzx=B7tVj#EkFrh7#bs3l_gnuSW>fbZ2VhmsA*8i*!PyT5XSzbONIF$5e+Rw?@= znn3Mal)Yyz#UsTnt&Vtc*g2D~AzesB6DVytQJcqC2o9x-QCB3<1WJJy zP&xxUzP;3NDA}~kk!WMs+NdSuHEi!{Y+kNe910mk&PdU+gWZX7dK~=WLof0>Lwoa3 zX5{RTbKs+Rl-#yCJ?D0{|9)Z9UVxl1MP%9x6(0(R{kPSjpi1YtC@dq$Khb1LZRoEX zfAsbv`&Gv=EvyO?1VF@S(R_~LP$v=uo{%I-O)Gk`{A2X-B`Edd>gJWZ=~FZ~3^`Zf zJIq(5Gho$RilBt8Nxsiu{3Qf9XpRrwx;5hM6#=L@J2)f^(Q4)zV}+?dr$>FLxuIq! z`Z|Gmpebon5k{Sbu0Z$L;&xDHQ(q@`sSm@uf)@=#<*y+b{V6hBxP<>)|ZIaf5l zDIE*SuqJ0)RXGGb2C>FRt}zeh7CaDIVd5jze9UkV?)r7}GWC-ohK?eOl#}cBi;}UB z8usbWkp&<2A%?X*zGRbp?&)rqJCyWPlTxBUo;jIKfTIWzK3W&o+geCnhqZy!ijyS@E0FF;MO9>qKBV z2zm@6=gKIiXx&jqVxl!tJ=YrFOYu6Hp_$)HgppN>OOQ@p-mgl?!t#oT^{s2mHef~2 z68P^>oZeeUzDZ~|1wzf*4<=m&cwO+q>+v>5#CP8osUl#m7GeN~1rU1Vd@QxNrU43pl(T-v@~ zq(`bo|DyhzUc|en<&ANdGvD0>C9CwpuS&?m>dGs?Q1l$dF?KObLZ$XKbz0RXbd6OZ z!2$zL_a)R&WHl3lm`QudaRQxF#sVuQBtjokMf?cH*|zp5yQ)#5v`+Dj4>#SqC||18 zS2rjbSRyfm1csiggB`o63p!xMOS6*^^#?FjTB;;c#d41M`O3%%*l1Xs7D$C-2}~zT zlW<(rTs7Q4-zu611u^vZva!Y34?(Jq&%8yDXVbPdIj7VO9b=*AKFOmy)8-oydQ+M$aRi z9a#LS+t6pVdLLlO$5`m=a#g2nK}=IyQ(RL!@_7k6l|z@Fc5gQ_Oh5*k_=5VFdXZ-^ zCN5h8F3ag)Rc4goT~mI4pNVE;))Mfmh|N}7;=Qok>LhVhYmr)7GBr?%rsG=P0_hL8 z41iy{U%VQ!tnZX5&6Zw*-uZj5u)}s2-&|E}TGGcFtlqhRb3Rk`^AHHm%@wvf$3^P= zT$$2CKPTjH}B(lg5oHho=Q#>=4ZRE3_An% z&1=8it$w#hlAacVSGA=ZO0Cr&z{t(&DTPTPuNEl1UL9c*dg!a#TO3%uzIf+0vHDFw z5^#}P5T$IUlr40524fDf#p0@~Tysywnh=Q6k)@xKEiG%UD1YYSIDC9tRsCjUETlYr zV|Zj;6K!nUwrx*r+qN@T0HCBlqRSoacpjPX0FcP$0uLc!zv7hWiQva+5;EBQy-q@7M!4jyn;03IQ)sWfr~0Pw@?914p?`Fpif2R#O^=#Mxaf+~NrVp}dI5S9Pt}R= zzD2=BS{JIu3D|cZP!#$AfK)sNwgyG!TMy&F{rJ~*c+JIyh;pu_a66_#iiM9q8vjVR zj;}-y?G|-V{TqB^Ae%h4lP5Z9d3z6|K{Vi`N_YQWPIJQr&)FaRr!DrTsb@pPu`?-G z=pn%1(fa#{BlJD^`wcuVLX9}SD>lx-?@HEyUS4I-rSt1o&T3Q8G79uQp4=Y@%;ePjOx=c?4`wCay#PCEMz4MY=A5&U_fBKGK_ISRYBqR; zs4L8p`58obzQCVo2SL^oSN&T()|_Lsoy&zoqgQ*ScJxU!g@8up3FyHxRyYdCV~i0a z=!;0vqHS`K|Ble9D`wZp3)s9`uAo#1u%@OGe^3heFm7ryw2+OO zo~wd!ouT1J{aK5im>t}0odqo8Pnlw12N48E9m#pWCI|2{$()gw-k!F-jHiur zP=u{fdmKdQNr1O&6}^WEF*ko-@Zh|1UeGSkS&cZ~svgOhJ==&77Cvtr`Ex`ydQsma zkQP^RD@9}~PYFJIX>hKgZdXkA`dYK(Iy!vUFRAkPOZ6Z4`uKH4D&^0;k>x;(3i}vl$ z8xWFCadADVH52mC%j%%vTXDS0yx;bE3<pt=EA&HpO9ve6j`S1cN+8b<`~vfOw0M!D);F7=O?QvDTEi!%Mt8Fz0s-oXv{JVXn_mXb4}B1b~tI9nwESi zNLBu;m(%_CLml-au`E(PpP2a|?jN^aYXvN$By1cL6Nc3tLVgp-?n)Fl!y4)(9YBi~ zHszOIuMHyorLp6>lF}gT+-_dj%5q9|R)uzCZpWIrc_)KxX~RNq87}qNVI=iYT?Yf! z*xOwqS>-t8HSNtnv%fXX5iHP3qMza)WtM`n&q_+r$q25gW{u;0*1yuHG1TU)!CY)1^f=Tf z>DJ_W)A%B-iPNsNKUzS!;bwvGF|Tosi4hZgkUd+d06NFfepKsVrU%H^uCE3nunumf z+G%@QvGQy;DNMNIj$qz*fLboG{qE4!C4K^nD4(PP)`EQDfIl9#Rt`V0Ycyyl?_%Ux z(Ne_8kd0{*%9tQ$rao+vIxQ#&D`J@%-h916aC}z-)t|@Avg&wewH|oRg3WnCGnf@O1`wNish~vlO?+DtWdleSv zamLytMu^{($15sJ2Gg7~GMJjO;AL@6v~)E|wJ$&NleL1?8awa>oqqwG`a;2t^c#Nh z_iiaSgP-r8+x#6Tt_R2~A0;5Fd0P?pnAEu%-|CY$Q-iq5t@YPt09~LhC2Xzf2a=TIicBhXIrMOhWKr=Kl z6iayz@DQ8&|S&?%h)P*UQTpEqY1G;`}kc%zNuXiC=;&D70%XtpSj_=+xB*w_%?j^n$A^l zh-kc5AlgbKhl+|3xt$`5MGzE{ejAKV|Ne$2@Ckroa(iz@<0fg?reoGt(_}=zvRcJ$ zV2?W>Ot-}*ECm13XGrGT(`Cu0q?0|Q%-X1rxS)|&NLs+6^uSC=tc;I>un;*3xEIV? zoOR)~LY8uxCkKUy>9^;%M~+@j#-wBCu3sh9Y8}BeBc4{1&53og{%1ZJmV_(XC z`^{s+BW@sq_wF z1_CLUR{)zMw}x-95SDBnmw%yAV;_qFA(aPbJ**(b>21C!GdjdcsxHN!T&sH`A>A9m`c#@taibYZE`$BZFl7+`A-45-qDT=Oi(4?OqEIF2?1UF)`H9b1B9%A%PPaQ(`NbYe0=6W3~pIxA?uf z=(Ysq2Q9#GKdj88$go#?uvRn`Gg$ENAIa3foA9((tSPb@M7USL+2HETs92XZ+-YBN}vA21uE43^76QO^w9I5Sff?DNu zT4T5Q@aqr~pf$`Z=rV&z>VMI3tL{APJTZtOF61x@B=A)9ThKG~EgVo{_Nuxdc&IADiuag4}vkq`24LR z^pY1q^VnnWm-yCoC9}vMfVCQk9|fAJy2l6{RDArOm&VBxJ7%&h z8dHVM#-H3cbG$gVeudT7On}*+ESbpkrkJy+s~H86p6C^N8u=(Yn>d$D+@6vZAJTYO zfH{H1vZlsJIxm-K-y?lyV?kCTCJiRGa0CcLWse!-D(A1{hrom9hIV=_xM{hdMQi{- zBhF+H?-rG-ro~7^`oFE8r0_Tq`&yR%?^)t=y6INo3b*G{pB2F_l96f;~CL3OT>X_S|Gq=7+qC;@XXB+T*Wsa$U0W$nCr-E4^4u4Y%@tQrtIAFw!U$_$v4bpchHCm%w(Np+^6eq&R z4^Q1#V-9T6XDKy0R3t#&3$#18fVU#pZJdykw0Kr|g&~Rj&)vRrUhkAokE6%iK}j*% z>Bzxc#Se`=9IIzxfQ^(Z%fF$YB>39_Ta904{%8`?s>pA{X+}QtK8?BppH;wU=WI!}?GNm|+>`k^N z2GLnM3t3pEzv&)4uNAfqI#}F2(KJTkV#h6|J#$S3X6S1t%vaVK+5l8@Ku6VT*Pmn$ zo;3wqp^aNwPDagW_{ICIViTnudw}!TPFIN=B~lt7;j)XAw!Lt6qR^`P{l)+N_)yU< zDt%W%{)0j7p>Uio@-(yucc_~_vk*|p^7LZ0hSs{`zTn04OyY~aW~kDCAGh?dUj*Dp zJ&Y=QaW)yrHFv8ZLSJRrCS*=1%@@`E(JI7!%`$XV`#bZ^v~>`iX<;l)j8ZI=Eaopwh z0(Sy*OjVeMT799M3b9pA;SYfTOcsUz8lZ-)j4-)K;7axPtHoSm>=l=icw zjq>EpyuJh`eCFp}0uJ|;k4y}CQVR5Qrp{ixbKi=T&OpY7$tOl$sn14jlo*LIce-YL z=Kb6PaNrY^u762M=tusS8GH&nNU5w1#m7&i#4hCJk=B5>iGK3@6UBZPrs3Tzo4>P6 zas_J{O-VDL=(c?B6pDr#%XrBzBds6$FBv%TC5X{I7fZ;*z2lkA8_-`5WJ*bEugX1! z2!}NwduxAd-Woe(d8{r@{KC3o3;imzlsBSs1vD52cTrnP?L3PUgE26bzk8igHU*@@&#ZbgQ))W zZhF_y?u}wHrvxSY+k36s;k0P^GWaYj(zcoY!x5-x35i$S1GiVICRE$vc;BBb{Wkr( zeGlpWe%qG1J)1GpvW%(iFwyVo zE49qqiad)kSNlk)=;hI!Fa9}X?>PT6n<{-2;mGk#=QfiO6LcJrK}h9L=t2H0AO}JZ z%8>gDILQV#kmR8l)4>!-(s7Qp-sOlKNeTgXHs!dHSjV+ zUabnTn*-y_3?e|sQ@PE?(F88PVIOE{v6rfBNiBown0(m!TtiA(Q|dN`#+3XK7Z(k_ z-PZ9xZ~K>r8RnK{@fdQMbmP-|!+ht?_&;pf6*3FXKlu}aO%}MJq~GC|OFHhMC!>tc z+sUjE%DAtUQ=CdGQh7h%&fTa$c+A(Ynw>*)ytsHy9LuKGPgr$K2nSweoRJ>&-ibk5 zf+KZc{b>&S@IZL7OGkaGGD3^v7-k-i%mz_pC=DL$L+hr7g@z|T{l_IPfBk8Ei5Rb zLhMjr1#I&$pI~6| zl#$xE%y+7$q4`%HG-AaGl<|}?_9J1?UaA|9oSd(QHb$BRdLSQPw>zSdHQ$7ycoNQU zyZeNO%T|iKdZ~z1>ufTEY8m14I&OFXuu|9TD1&WxL}HTdRtKZqyzdB+5n zgwQx+yxM#e{PMk_-^cml?sM>3R6pkfLeFSz&(;FKP8XFb`AiAOhijv}mOSP2?aLlO zG)twNv%1Tc?GdXbn%PwW`@NU*N^uRY@2p7k49{&;V0`H#f!Sv$OXaG0*@?~HK0Z|o zYNrYiVBk}+?F6@UECx*36RcRyv@sdGL3Q-kT!|W&yz&C2gJgJry{c~x86UObX0oQo zdN!I+C8B{|Bkfg?-?@6;K(R_M(udf%BVea$p+P;A^iaJ7@%gGidpw6HNfX=1#OOS( z4D0c-?hT^+zRgeiAc^>mRq~Gg+i_p>W*3Na%~+#S|1pjla%Y=8Tb+&&I=hD9=ddU; zocCwl9JCjH_4da*6NsnDV>@THojSLA3+Qu|!NufgYotZ<5AU(PzE}Rq5+ufQh+N1Y zJIa}6#k$Wx&~*|};BuwuoJS_5THhlu7u35ZPUTSld}MmrB9IOg$~qCjg>qpe*!ed) zrPvpo`SZ_}MokqHCXsXUL%8mo(ZvhF!E5+!L$gjlWd}^ugM^HH0*isAPXf5ug2}m| zUC`JBpc;d+gq+%7I(?vh=tBWl{o=}2zY`S|CmMhuIzHqFASDxL;ILXP_v*@O{KrBr zZIE(_$)FeHg!3=fo4NHb>r-H^0UA{{h_n>g0mz)Q&rnx zMr2z}ZEx1+CkbhVVPDn&mckbo?C9%b5V0Aj`5|Q#G35hcNH>hy&+iP33B1_VTJh09 zv15dw?PN}7eS}}ojo6_1e~`Ol^jVan2^Xxb3=q#E6}W|v)9W? zPeKpq$yP2WCiDJdinM4#O7(&$&U`3lmls<}!@vQ)g)_pd|C~36LnrTYJ%&wi2=v(8P+jv>`%i_;2Ev)sYu@cnW zVQ32wNH@J5T+dnVg9bO&?zIYD zEU-ABjQH$4cGKh*cJqsuPC8IL!4BDq<|Ux4Gm_3b^=P!&<+4s++FtDaTokr&Bl6}awL z87);>TBfVe-nm7^pdj1+9cN=c!ZAV}V%YgTwJnQ+ zJ#Wyj_I&1;^hd(DmZYobe_2lfS@c~kO87WS7taH9t0}lPoGz&pm2~?CEjEKDA5o%+Z#ppykf=cMY)ha(y{pHJ3QPorGUy+j_|W@C%-r!cp(v zN*`EdYRIYAJ<$vjPKAcz39OGsJ1>mLjYYstT;W3Kbn(4SjO=sc7U9QMGlpYI_#G)Y z$V9YtK4FVk!>xuBg_gMI1Ocucw6a>7s>`-rqKN_EnL(R0X@3l05B?Yf0(kXjMKb;3 z4`76{{*|Ye=a%VSF_HnVc#Tm}N{~IDqqw_nouJ{Z`3oHUUdXw8bZr=Izpabd`g8Nu0x!HGh z9~0^&CNjm4=#qM=KfK&WaR{m5%sm)0TvF3?c z_L`(7Kv&&IxQF?GF)l{R{e}>%VzYisvHbeGEtx^r7Z`@Y{3}faXkeX=Hf@Lhs}wii8C3)Jj7M`j!1hf z3tjiL>%|b4Avwx#s9Z^ibp_1XI=;0dx*f9gohJL4+O7_z7iKb++SSW^#27}!)3w@KPboBS-sqV$e9p>Ob_}fU=o=0L($zhn&f*= zf_#!^|C-sU@@N}Q+cMMZ5rL->f9NLVf z_TDM{^6TXOlsdFqY+0T-l2RzVLutQ!1sSCOnTqNKq2Q2~%{;$D3qWR~GLHX?Pw>jROb`K;X(*2K=L;IXJ;ATAH@xJ zDTIm7r#@sFKJ81N<39S$Pnd1N2Eqd0r1d6i3F+ds^CDD(jD>MgvF}RdKJzvIIu~Yg zu7D$Jvd}r%Kk6UiREO>G!)QnFBg%RFrz=x0{lATF_BC2++$uS9Y5Pm&jU~a2=11TW zIqSa_t!?AxTTBNV@6v)>hBm!-`6GHM>V5P~dMBw-p=x9M}AyKZXk&`E0CX8ON0^5i&TV*Irz_B zE>7$`1kjq5=rLgAFr?jPM)YH!_~Wz;3jHPu%%R5n2IGo-1r5qN})f=b3Qfd@CNO3TyP{28K< z9n_@9#jo1Js9!Nr{KJfMuC~LW?5ocwRq6B^2?KJ0!D9)0f)9C<{M8- zI<(Wdpq3^r#I_B>_8aI>*RDNxWFqpc4hH{e?fjvnp5ScWc%zQXnyPj*z;<+AW26-8 z`IZ9PX&#RxqY1*3%;o3`C9~<&@a*>tm7X|Wp2-T6kla)kJug{;!~|<(bUFFM6VG?^ z(zzxjYM=3Ge`w1EN=h@*jx_Z*I#klhBXv<=cFjLo>$wBMZOcz^i%&u1exA&`6VbcB zyt(_@BmHqLmvm@H@AgB;;m7Q|r;=eYyUn+Q=EA-bYA<@vD z7y-p6k(^$ycZY*|EwWkf30h=j7o_}A^@9o==s?j~r0WE&GM|1@K4R000fqsFVL(S* zjFGmjb^WGh2`gj%|HkvZ5JmfP8h$q+^A?t?5SAxAbr3)Mm6%Um)+y=Q&A+FiB@EqO8f_xcz2 zKOG_j(fS>M*_|r+c#?MK`Qa6g=+FF;5vNA1UBx5|Q|$LVbQYQfyjdfM1-uYdK}h8Q zLlO5~yss&7Tgs>U3&L`rkB!MUgnvHCrTtHE7k8GM&^noH^0+#S)Cte+ZA!-Pg*LEct`#eJG}Y?pvzCBEiPVr3TKW%Z9LA4w z^Uj&&ee_7`5TD%L#3+XIY}-*yww0Y38q@BDFF+Ca>znZ@K`E*btgv~*yrNJwQnRzr zioe~lS8^(Cj+yN)Y8LGePTO%h%lk1t>Fboqk4|__8gnDZmlDt!-n=4Bc9h=KM^ft9 zBOl7MbW%6k9(AdypXuCe@IvJO;P-wB6I;Xl{NDOp=^edKrenui2!NFv$LzCzN4%b+ z_1DH13O%BzBW62NcOxigO%g~pKgF-=X zh2%LrJ#LT>7y)6gNRXn?CVVZRNO&yWB2TQmBi|hufB-qEmrAR~;W&UKYtvrPsBlrP z+eBa>tCp5G2dzF(1IHbX-r(a)K<%kC9E+66_ccpi4MuWDy1XF%B$v zO+h$8O9)Y4k3C`VCO$KDMj^EH1<)Tz&iO*(Nt!HQ-KURM`)2rxlR)&GJQzTiX8YPmd{3u-#}G0mlf zVORlmOgX4~4gS+hyzsF*E>Di8UIa>4VyDtxIT*2`Q?h4g?dT)8Xn!ZJ;2vQ~m!{!$ zDd{Fc=ICrO-IPwA(K$Hzo-9&cV)PA+5uK7iFZN5bb)jqD#GzscYM6HbeSXT+vu>e} z4IP5(k~Tu>XWmBmZ>kdv?{wlu@p%=)EQ#73v(dkJ==KOs`25Z!^C7(Wyg={xwG!fI zetpTIk-5a8YQQK%rf*G&?~?avWfkWN4xfr48ov|C{RLjHBu&_Z;(F|1Rb)f+N%Ulo z<^Ifk?K-Mvu|^4IS{^FDGj72j8jsKmJU5Py2#x1#A4)wzm%qy5jIDrTmnC}g+8)f^ zM0hPZ#cBB1+BKs>HwmB-s=#$25nI4k(jqHy@ZQPW*Dgn@AJ_jD?sn4YTqG3|H!PwN zJO&N(gXOmSpvabTT3o+Jq4o`r>2QDLYr8+Vl|qTxgDL;~t>gGH!_j%{!^L!c9;7?v}FyO9@${xnz$Te;%MsnUG#;@!w&;1=a^TR7QPo@ zjU;Cdg)(ha4awO0u)(Co(KQMbzFw>zzpr9HBrEvoNO9UD+d$PL+L|~|>z*fS4Jj95 zViRM`wX;$Yz~^wYmZf5l!R=3f~KrtR#>7e?-qLN6m`10v<*y5*L4@#(d01 z!7vs~E(HXW1^q4mjdSV1<+TH_DzWvjZ>nBqR#tp;``Dzkr^}qKay_JPBC~}z#MQpcl;*>cdFB*BvXv3mOx$0f>Z}bC1B{0 z>cQUwn#2bGQdK98&hBWeWyZX*A5su$hgpz4Rt?ZT%jgK69=RCT;GhGxZnmm>b!cZ;7_aQ)qU#3eMzt$t*S|HKRgm^ z9r1I^qP^Wd8zMfxHL&K06xnu(c8TaEm)#opoAqea0NUjRhs6L zvgPINkE>Y%^7Bgj44;{}X`OJ;=uf(nC77K@!dkXRVJO(d*|zTIEkLsyvcrHr-P!y? zlBzpd`>VF5SWvRq0RWuEe4XwI=W}94L_tMLf-?DK?_aAj5`B+bHhR4J$Ci-AXyVs* zYaH#Y)-6OD@S1jd6d0wQUD8 z#EM#m=O#eJXRo2R-4sW=cf>ZebuLzZ0(YDDwcFE}46?pWJ#WEz)K>QV_LReNYPp z3sic59>g@UetOv>G^90B7jle@j-q&Jkv&-YX0`SCHQm;YZn87|*I956=BURV&~qCv z3TB*ziFQzsXwOxQa5i8)Ib!{pV;NQ{HmNJ+kJ*v$RMlDq4dQd zL6j>VhbEcu%gwGI7Il=-$+U|)L#VoY4Dbhuu)Y{CD~gOB(7G`$#VcEC`CJIVMBNpg zLsk%;pmdT@Oe!zpcte-VYaW*wEiI@_DwUY0`VX2>`#G)W`BcrKbW^l8?*y>u*Zb`2 zoHt>-QnL*TWYzB%;y;y8$S#$*0w5?~ifio3-}{>T zMu4PGv6}T5w)nl31%PR!n(%4({^kA?U}o38e}s#D<4g9*7Wn$dH|wJ`2c{j_{nzI_ zP95Cn>r%O6f~ zB1R9$8*DwZjzxeTkxaL=qn0C!3PC4l#TM*4DEx(VcN&}P6t)=_A1-I?d(ZT(}i%?7j$*^72 zvXUvvp+34@A%DNM7mPmEBJYKP7S|Z&IZbjwCGHfZjQ|KMUxmxzBveW{Jf}dAlL*?J zN3Kl4@gHqO2D9Kk97=`f~!hSa05f^u| zRAy3=-I^O_k%J;$5_~~sFfzfY&IZBt;BY>jJe)$nz1#LW*h9ea8rF{(-)B zjyaQ0c`ve|Lgw$o-`pTLi|lzLHWg&-!W=`yIq}X{jXIWUc%V-Ysm#QXFH$oma9!35 znjw_M63V)nCazOTwh({9vJ+Lr3`Afv#yf7?)3$03N?OXj2SA47QV;IQPPw7zY%`{B zE77E)=xkqSiLD`|wYZ}b)g(yuAi{a-S%xrNT$8Hu`#DBW_!9czYYAcV-T{0k4huu|EB;$9{8mL-nn_pn!x5NV>fWLVg_B$ z437M%7v~)MuJQ*DHL}SO5+yid$@E z>0b#{mpgn~=n=H{P(YdBA14w^mL(evbl&oESehUE^*}2KGM7Eb+yrGL%*EKHF5eEn z|GG>a|4pu@9r@TP$M@DncX%Asee6&r*>8SP_jLTaWH{Er6%Uk&* zKe;~^kvUbbkq5g>qID0;q89x5S1J;Tc_T~kX^#S5*)_xETTFWBiDvf*s{DUgs0|_W z!8{q@I=z8JT81Ct6tv+`I&C-oXS-kBmD3!YKHE^NN4j|9lTPujHRe z%UBj2BL3OeWM|c$Dl3NQ8OD=g<4pa-%ieg7mOv+yRqN$e6%gB8r<-KCyf980?uBr; ztnz`z79b`_PhaUVW;{tRj5buQY!dYZJ+^7D)Qd|ED}!(Iyy#3H{tlY=y6kbpt1?kw zbaB&g>3o4nvU6}rqg=N6)KfF;rd|gac(KjgXas1gVqf&uJMZUfiN@o?w26cuPD4tE zdKf~_({kzyNy5L$i<93$A8pH@H|(X=j6aFn%a7 z7=Ege5gQ4nqyfo$(wwj!T>i&R?S6b~b(14OWihcDa~gfO6DH9NYueji*mWb!gsW(3 zA39a4d9`fXMFY-#NxXxuf`M-!I7YTFoppqLVxVY){ro=yua+FuQTv|6MA!uQ>|_Kj z;pZ3p6-Zchr3V=5&eS3IIjkaSa>k}(hZTf(^!T*$hX18B>PEoX|?F5cf+;V&M2HJx(8PlGkD%2cLvn5%c9qFw-nQOii2aS zl-R32(^F=qiETvP`uP}o04)@7I11Buch~JrqV~0fOjD05 zCaa7!u~Y;w5n%s5Rj&#`S5(SDk;|!wLU^y&tP@?_?8atwZoVHaxY% z--qwx7s2uYP$!C*c}2Q(8md?j&?&>Thu z-Uy{sDduFHWKNzuraYYO`pw`~SM}!&-ih82m?fZx6pDtWjb1*2JW*RtJ%%(w(`BD~ z1!`f*@&-zQ++t}sgeO!pd4^^=XvfS4_PQYV>oAZsD?crc>;l7<9XB1g&Ud65Dj;dF z4SiFF&RVK4g2pr=F^NsKy4vI_$PpJdk!me=+*ie<4^cC&)}JA^*l<@`FKo%gUpWA# zE9TxDofG|9v$45^KDzSKf(G8_Bzhf?7i3oAh=F`H7W9I)a(gYa%u$kaYyNini&Dbt zQfOzQT43jI=V&ij4Nz1502`hnH{tn{uw)!bAEVCZld-X)IHWJAbf_ml&kcu2CVxd| z-XW3whvHk1cS%l|RnnS}!dK;)U{1^(krjF#2)+hl^c=cXSo%D$Xb%0OvEA2fv?9J` z=M0o25MHw(5zWd!>U{cND$LY%LTy?Wkbl1i4}8VwFJ(VF@Lqu0LFHS$^59n-N(Yh^ ze_Fm{nwC$$UXH`+>c9|U7_@>lRdCT0Gk=F6?c-wH3>fFkV$1f{_CT)Ju?-d8rmn?4 z$kMYWs)}LvlfnV`nsYtUm|XjwjT70zrq?OvD40a_HG~~NA&VH^zSG``Z2h`+ji9LN zfGF2pI;j}XQzsPA5VO~fp2-_KRGUA^Y^VOFD!jQKK;< zTmZHk8jDx}PIC}2*Hz=1nSx$j`jy^iBr%V=1&f&FM_su;n2z)UjhPi##81n*#DbvcndD+AyAmI^BBq z*qG?VKkLM2FKg8jxVOO5TXWcsr%V!69CVx;CHmjknLyQ?l zE4%H6&D_iN$r5%Fvvr3FM@XpmX0{SF2EfVKp~~Nm8~m=)1&qUVdK22i9WfHgzJseMpqUk$kPZ;2=9)hfbS5Tc8o#!K^-?g2p}G3T+OZ2aTu$cSh`&L`KK&4 zz2*w5(_1H~9Vr1*A zlwV<0M-w)u4SzlY+d(m+Zrl>jtBbLQou{M8(`aoriv;Uh)8=n)Fmr%R^-#Q8`lYj- zZ^=;c9a{#9651%fMD{d0cJuG{Xs-ZI4M{GEoWpMmu5Tv#EI%0r30!dZRv?>D%8Z#+ zBUqcF6Kj`Z6#xg-VKm1}l8t<}-N4S?Z-3bxbM$#L6HA|`@qf$VhicNS%nYYpWIx`y z=E9oKb2u4F`d+vO-`dl1u`zS1D+*8Xk!efOO*Ln5vx<(QxcBs*CMDMITb5(F9M*> zpj9?lt)V3*@uj(y#>h(L@)$-lG2O_eKRJO=4Dq1__D}X-dX@xhPX*G{f?x?j3*iTA z=P_={6a6;3^=FLfL=5+Em6@a&5Ai%+wAZBG5Bm3jlaiuf?yG$56vTcDI}g; zBfm>EX6 zPq;W;I$9B$fMZ*`;3_aG&pj_U>Z-QOW=nB0nB4W~C4f9kQCR4yIG`&(2{9d&dw(7`e z+k?hvU})2xA}{@TEJ`FK85(O(_brQ@5}7jd#~6s=L$=c$2<|WE)yb&ga3`$-u-vEL z5QR|+$QTilyw%_*@gf%l;v5H2D6&v*%eJ{*6~*bblj?gA1Ol$!f?M!gdEZk+u}W=+ zN;IrzAI%U7C$!wcSQnOaiE71JG$QTd!Z~nAuuW_TJzGRa*U_hoiym8mO;;}k) z08zX6bH%CQe9N&yBSL8aek@v)I93Xr1gJaCygGLWCLmPVo%E#2=+0O2Y* z3TpA|3+*q6*gyOGx*GzEV;E*~DMs_X=kQr|;=7Y79K@m#HSYEln6WK$86}9H z^fm&bwLr-RgF{;sDil0b`Mi(A`-l2>PmUVJmU1oKVcXt`V>Dz>yUE--JoM zdQco|U252Ur?xM-M?1}5ztx{x$>!FoV3F~;X6$bN{ydvfURJ%q&xeI)UpeXlg!tmj z_wgdQ`^Rq@GDeqM`NKvSUpVJl4Tb+o8pKp=jIrV}cej#IITYmA z#tmcR{*70$?u~8iBt{W%9uJP&p=5XBx>3ThY=Sb`!x>aLY3g2s&WBAfV}LM@s?~;X z4H7$K=tA}tVw*h$qZznVf{8y4)oI$Nwi4Al=!d$%R=d~XO1iioeE}ea?2`K6ZLt&z z7kbW@VAS~*3s%&^hQe}C5sLMP`{TFFoaSP} z8P0q#(YpCZ{trv%7#K;{b?r>diEZ1O*tTs=Y&)6QHYT>siEZ0P$Hv$9^L~F%?^D%v z3cY*pTI;HAcv|DE+vClFEq#``+?y;Yz`f5in$s8^EPdX}8o4&@UH@l9=Otz8I7gpj z4_erI-`jl5|2n*M^Lt2lfT&!;K3#+>-Cnq`HXTM0nAI40IdQKuo&^+t)(wfL1@yqh zZufzH(E!1QEfS^mzlxkWpq#}dIFGY#PHD|qib!Z`L{3AHDn71r^e;Fk8?BN!D!7dOSvt7^iV5!4be$#)@Ae?4K}{mqZ5k|$At1qO-(ER zC|>fVt7|5&0S(vy2!i{gh2U!3AA}HTH2>9RT#|yjlk=R1l7uLe;(&mUzz(D+ifDr@ z?^dO(hH?+xlj25QP#oAYg8QNZ<*YfD=*{PmFyRPh8{lTue2l=W>9w}PL%Km$y0w&* zS5gOc+#MAW-_C?@A5YpuX(!8lA6hH0TI-5Dc=mZro7$!3kgJ0uDjo?pyZ_XOe?__De3Zib+?$vmh-KGn%goEhWc-v{!;{3DDtllA zADZ@4l1($?CL~J9f&4(5q5K2QL&X#7j+^oe23FaEvv$lXH;KRw2ReS`L-Un5@V~?D z?naVV;RtpS^{(e0%JIB#r@7cPf4IVeu^(T=a@tsE`CC_Kcv5U` z3Btd~H8wxc%m-gJOo=#wrF)MjQp6U~b`mtWwgcpm|3s?WAwtbL#RdKwnPc`M zFCXR##RH(6*qOahkuB8rTs8f-a&~IY4e`v2kR~-=l<(SU#O`kAo_6lgzM`@&UJKpM z^l@AeVC0FNxwsPCl&;_lYT&d35&>$18|D}GB=!St2Qadb+%U!)^sXE%`>i#IS7}*a zu<4s*EHH8EBUSOla1mRV0~2#5QgqfDT4cu2yu%wl7xo1}M3OUnTgu4q*p;NFV_HMu z!t3(WFe2*3u|4w_BDXPO=_+@n$RzmyIbz=ftGkVa3k4FpLMw+mWjSp2Rck>%Zfw8L zjM&!C0%Y=omfCRgFkCRTKcNndnA%dwuF^jhK2zuiC#d@wxyOt~uh0NyrH6G%?NG~4 zg~H`m4|YF?$fPSJ-n#J4(Cgth0>sKjJdiZpR(XRx!_?m8s5b^50OwnDv0nqA3$n2q z+l?H?MICSUj+xpxa{z(0c(@6B4{(}El z=C_SWLHVb~q@5$*hcT{^Ig@ye(d;+lvB5X*HU35YW4GltGclv3K5tgeI$2Tg=&wGy zUTg?lI`e5zMEZBOhxnes2ydS7=w2a%i5088nj|j%W6RToG?GhN8Jp!TipB zvn#QelOKL|1myN=D`)Qosc}|%&#iMBg8ua#zRVysE7Ll#r)q5HHdf{<_k{`E7anQn zORpE39@pk-S3CCoK@;%nKJC}h`rT)zjOP!gM;`acHCGN*UrYZ=JWux7KRY;uyK)ag!vWXYy|@UtHGL&|ralV`b?->!ACh5n zW_t8C1@3lL3z0sR<`@f`cUc?t7w$lgB#bUl8}qR4<^Tk?h|**%A)}utqGo;JHv?He z%AabxHW91jzuaT03}P~4j?2+e=~3$6!t+2>;n`lfj0yWkKg%?u2s{a7)@>4dTZ7D*2kD2}KfC-mf%Hg!`hR*K z)``7{3FbuYhee@_^RES#h)KO8=SYouN55LDSL{UxA#agmI25{OlL4H)25bCZXUVbL z?X+UbUZ~xGh0NB%m0EF;_JM%t=Sbw)v3oy6wt<;Gs(rommJ8zoX1#8V^g7J~oze#L z6It8tYljV`ER-JLxq0|Gjv=e)_2xzRBjqi}>L1LYj8gsS$JiG6tCaEm)6@Tab*&qh zVUHEgpYP$%XlG^h)6#j(nw=7I^*@XJ?1`rU5L~Ujz`ak3TcK!|Im+j?)3e%8nkIT7EQakc?6DPE85wPsIVyT>D{^K0?5XPUF59p zIX>P(Bv-NImFZ=ackPvXR$M;sPn;Z4?K~j#QT$_M9;n-x)tGdBQKVX_^V+

anqZ>x@fj<+PS?ACQRBH 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⁣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 z z$0w-#E*MzX7_{x3BUYpLtbD_FuJe7wcg289BpNV3wEI@C9aO!GQ?6$Ub`Q9`f5p+} zP@MXV=Vto#hCBJf4vm(L<{qYQ>Fk86_kqkS$^`BWuKR)xDu(iD9;C(Ke*arE&1RKOmW7vVEG2>t|V{C)i z+9UBu54OU4O053aP};U!RjXX+EEK>+NvFW5toQ_C@7 z{M}>T!sMg<@}$20Fz3|PhZ+pS6;htjKnVCcJj2+_$8+QClLC#nMp#sD(28UlA_0SI$1!%s)y> zt!|?=$ut}SB-d!t0{n44qVP=wTCNXV9Baq_vaSzn`LGSCUqX5utx2Yp4Pr4Z<~U6!mx?$>lak z?<9WVu@N&8BUawADVGT!qKlc7DClI)kv_S{n2T4S2-cIrMU0G?tz>H||JaqQBnQyb z?f6`5M%%-MW&OV@iEFp~VIZHk2kGcSw%_f%{9{`#=@7iz%Z=tW@!~x4KbAcIiQQ4m z!$IY>THei;3Yn6?l!LT{fxa<^&zI!5u=&Z3`caB&@yT@|GuxUDEJDgbQ$xis#~)Q2 zMA@7)gxyV&q!u$j4I|(3*9&!Dw{>M#y>%hV&!btx+8`L)%V>FF@oPLDXCz0E&$Z*E z2n08$Pap0&YEWD^c!pp`E}721OiWrfdyKgC7I}g6zk^JjNBaTDQ>hVeQQ7r{*?oWb z4^o;R0Y}zM5qB>io-afKd$phl0VMOxTCU!^w%oEV^V%NDnmtZU;>!xje@toaX$PpI zB(9LM`0V%-{_~SV{ePK?z@hK!r4jFDx+z;%R)fHL_6R}}wJvdluqRR7#) zZ&h8d_-bCS{pk2${;|rD~h+wtb;3% z&pXjOru(d$O$Rex_pi7@x{%$Il~+*k64W~Z>nYXzzpc30 zT|O!g|8)4RXsDJTu8^*y?;`K|g#zdko5fc>-;JN*qk3R>XVsS!8Bqmv5q;OFkE~0K zi2)|u{<0>=Qj5^EYBzpFFp5t~R_d0xLb`~)OjMehiF?z);H7Dye4rx@BpjUw|3%Y6 zJxdQvBNSIi7g6)8s@=K@WAPn__?g3B)WIaOt{1gdVU@sgkJfXQ&ws42qU5Gdr&tRs zqP&yIy23D{Q%}fcI<+m(x5lam>Q$#!4Nv1w_ZL;bB)Sj$DG=kmZG7`!+uC}s;>2FQ zYW=gN zwD@>Smw5n(ZAr@}PCcrH{${`^S z6Gbf(sl{&Dy&g2?s#A;kAYrvsW@yV}>(;S6DW0f|0_9U~)xEeh#*dCVX4t)3;CMvY z#kFxKJriwKoE*aOpT}E^H|nT3Q-%<8E^d_~6=WJ%v6>I}DYhpl@D6Ph?K({z1*{0qyj|F{=U;vN^NICHtK3y~{N99Lx@uc3Fw%f?cOPc` zEl_6KfOL6TNka|Q-dY>z%}>iZ8;1To%V4ON+FMJYywqGj->-Ex*&uXPTEaqQv_@Sb zzPY#PG~ zCQi+$Qkk9{wS0lU;Z?Xgv5^1~Oq|uROT>3&2T~?6mOv9soSJo|XKpRzTUmzGORgqi z1rw*{VJX0m5;Fej-w0RaaFRZmFPcDgGfOr9Civ?`+;cOGf5clzG=XZb)}vvoAm3j= zV2&}#dr>rjYV+26=FvdDy%M=Xx}LkJMH8qNS)S=>x$w>%%@vZqkmev5I8{N*6g7Po z5{%y|4csBAFex*l2~_{5>^n#Mxceku^cZfD)T$IL;Y6wlRK};Re%#ZwO@MwFje8_j zFQrd7k?Q}{%l=V7j67EYwq zz)Q^c^Yvm550 z0347m#$HV>qGUm6UrckB~9 z@@8F*s;JW#g=&GM*R>|qG<_2SvkB*{I--?hwswUTc!XJHdMLt5KCRj~VFVcKwFFg7 z|L{3Ob(t)Xo?sdxevVs$I%#h}U>;#Rszh3WX&3vN=iq&!9r$Lh*k zD8BxyyI~cM_c1U%$$;uhgK#ei2`N0&I@?x{NROJ8Tc~Vb2#(cLxlpue zRO7;LeIJ7}%OO=zNRYI2X1NHgHUN&jA+Qim>>NvnLTEx^v^=(U$Lfe(C>m<2Ct-Do z_c1uNNLz!PBuH91wVXMq%3Agptx_o=HFYpeQD+C&x;)QW$LeQZC|aMY-e4_<_c1uR z{J2425(F&;lxR4x7?S0HRo?!$tUa<57QG2gJ!!qwO~MDbK(we;B*>CM??UKO<*qP9 zPI9EAlPgS3u3;bE5Wd@56y&~1!b8d9@~lP{x5WbSIaPrw>rA~3fuv;-G>=J+lyq*n z4WUUZGyYRgYT5@?uQ842wu_QS(mK>03=6~;VpX>w=Y0s21?8jqYhi=NoRlIaO};qn zo`>&eQjqD`V(Ag4GwM+LN-PlHyg&6aLeBdT=m-i(72tv@xzZ-xPnx_s{)W%@;9s$Ic4C8om; zMEe6F)h3LY*Q&e)Q@v^cYG#nf_;6`6uq}95F&R3d0q|Qf?!Rni-xw{ZbNKoS$2t} zj~OeoLqwvYrFwqWFp-p#Eb35DR1t!z_?=9xG4|&)=X?*xvujfhP1fCrGEu6W^?pxB zg$ydCT%YCe&}t3}U`pqCNPLMw$ak|nt+w&d>fR0Lc}sDdu+r$qwm15$3t@=~nuou|3T#tV&YEKGGppaOz9NIAWYIE#*(RdW zZWT%219fg^i*!FQ+jHw$k8PqQ!64N7v{*!@to=GdSD#(=<_AmhqRmBzgGBuUpiVBQ z*0;BBRq8qL54U~nHy#c@2Ln}kTD2z)hfwl9jwiRn5k*qtJrq>c06Zu5a^44}!b7tp zN7(9-tAWEnRqD16a$U;xd=tlWYk@}{#hT|Zq;#7|mb$6c(Tvl4IH5WP5OXp;9T^=9 zsj7DFY)7|5&-Y-`6kH6?ZPM0#^1NkCKV0*HpCabSUCaK~ZX+nubu5IrE~2tL-^9Vf z+xt)#Lp_}=zG9hlMb+Fz&$T#u)N?DIEKlYHqti?%iXpqxfvk(@4G@&l0kD{CeX6LX zA}yVoVy5Ku%f_wJOlX`$6rT-A&_nUiLZYHS zk)6DJ(0)EbDy$0JG1$*mnrbjo>8ZpR;)&*Eq?tj}6#t`YwIgn*(rMw1x?(H^$L!Di zY72I%Xb2YKI3Yk}d5h4hCEAIF=jp8N;sc^mWI};-)fyPh;!C3ph+$%_=$qQP89ZLQGy*qm0&6d?&5u|3G7 zRM>Xm7f3IFY7HCFYaF00Z6q_?DbvaV^2V8G>vUly>|jTB5`Z4&xenA6av&_=Ld;ZT z(wwLKaP8S#z%yW==F}hw}x~tDy?b1~c0!7$g}eWn|@+%7<9M$3+g$;{`nt z+*A{_R?^8bbyg&9;6gov>(6AFf=TA!q*VaPmsfUX)w4sH`3UK)QCVxlxb2Y)kUW$Q zXUIsL$oG!j%1(GlgI&3j7Ys!^g*;b?*J&Q2!7cjQ2vm$Jk-8NQwB6-(fa`HyKbd0I z-TVbI7E%z|N73%k*db)0gs*`l({`43@L5Y`@%r$;{#OvV?Mk*d@@mT?ws19mWtC0K z(+fM2mue}q>f}k<_3#2Kj#dx6tMXFTFLA@6YFPW36xqtB|OuSP+P#m>1 znPK%1X=-W?zy({7tG8C_mw`Ah?dUhlvrAiM`Hu&mqPA7)odVaJKV|5V4KAi=gVr!F zpi2VtqHDX)-IHfh=lz1Mz^HeRIj&H;5Mjqs1G~tHnmnIvG3^hCX1h+Hto9cOl|~sS zyU@5P{cLt~grh2!&gDzSWt!uX1a<{_fOTUUhr z_8?Gh(f$vq`+oJ#ZYyAK`xHF|=k%)!`CJN4ioT6ol~%twF+M)iRD4Y8!FXeHbv;SW zdLDm)j9(&fNR>+YMSltOE?tFp6wTe%hf~$!hzVXAiiwkx?4$_XxK(wAKoc@0bwmE! z9y<#XM&5#l5Z_$(uZVF>+uVk8%^1K9ksNTy-HIOzRLN>N{4ZXfPf8pf)(+%zDL5(m zHts5L3tEurXeszs?Oi7ltI4M;`xP>#kzb4_v3(>!GL7yykhT^*clOs;_Q{=gQUq?? z%6@iy+MOx4tbl-rE9a(3r4aF9ZE`_+guX%+^OCOHu6xm#a|H7V`8;#bTb49qF*oDD zpu7*w>)edvjHp|n69VJj_#A`I=ZS;-k*wIfx8G6$a05l+fwa&vBlbf2^d>iHLr#WW zy^o1?5K<$MxwB*VJlRGl1_0@C7&L&W{Ulj^>*^Tw7LYSFF0TW~qM4Ym_F<Z{o}4o>xqemo{}#ylWm@)mt+vVxh`>ILSC z>D3;IG?}Gu;aI^;`|G+OJVgfGBrJUmZDHw7{cFszC+E)rQLr&Q0qQv;z9+MH%qiFD z7CYvr_6?f!FTBP31Ui-_m9W$59%zu|Sz2E_$T%Y33derM2J=64m3GZR%iB28UpJzZ zj;_nXO1yxfEFIzA-QFj`vpafk{jLROaaxleM>Bw^w{bjY^&=WR4GjZh-qKm1Y|N>v zHSaR5BDBXUdy-Ne87UjgUGuwArXcEV98Yf@iAJ|YDdQemS{{@wi>g^MC0*y|n6{+Q z^E?e487UjgLpY?gNZT^|J&qIWNi^>P^jLZzrErQ){ ze%A(*JkMb|yGqrYIBj%&gys>2?r$Lbye6Pboc%xRHNk`5JYDH|^m9i>$_8`UJ37gn zs#v^-(|PXE*&ijc*(^Q5pzQfBw2a4jxQgA`rf%uZj*OHI=5b0&_&9{9w{bepJ=Oc8 zJT^h1XDgI-es(+WZfzLfmH;i#$%1!iv}`nS<8`0ZQ1w1gCprtlm=UC?hjd>y)wlOe zGuO_`opnXF-mBt&i95*l_Mx8k2TasQCv-o@3)9mcd)eoa0TaFVu|=%tcIQ zSW#icxRA6ru^T7r)UlDX;XICMIohNl>>nUGmE*sC1xn}qq#DejZmDs&0t|;(IvsHm zma34ZBcChyYnRFeCyD90n)5Bby*cw+q$>XQ@)$RZ5;`}wz6PkB#76{@SZ@!MOqHr+Pvl>>nU?n)6KcM=4$Cfo>Y86RB&A(8eh?qn8@n`C|Dar>pyG zIQfF}cv;9JClZAH1EkJ)KE3`ZsS6j;!3A~3tUS+XGyK`GlQ!ajXxJE{&2ysZ9PHmu z?=r8_%vD{Oe^JXOnM?bg;xkn>h1c9skI}OBq44~RPq9#Gk$(?8&`95nVTuY zb}+ewTh60%*E`l2`30;$DfOf?Gd}Hh2;S+M$|FLZfKyaUh3zAzri4_Lu0OjE|E1%& zG&(4Lp6$k~9B(J`;<3GI@dfk9{9MPT6%24yD|+0rm^viF_0^A%EyaQaJng8`bn z^d&RM$EL!!PSG>%oTT9GVpYV~V~)3x#iQ}nYu32cg{wy?lTq)CTDojI0 z9xtL6uUE)eC<2F6sMK{_&L;G3V-jvsZuPYa|H)=MkUAfP1*3Tw)qX*HeDfhv?yJ|{BIT~Tyfkmv#H{rOBJ&r_2Pt10fQy+GNsiP&|@hhf0l=_o`Z`>#iP9Zb(uC({9^5IYO0Dt1=K}e_ z@SA(`hrA-nJ;hw~{zm8Fw8%ZlxV*;MIEiZS1o=%If)C{{+|17tmLQ>-#tph`ldtdr=-X{>1TsXdITFaB4v=_wW9jHuh7 zRcQ0>=`EDYI8m9^bhG-!Z2Afr+r%;Pj#rN^W1a01E94Wfv~P(^#L_85;G_uLxZXUy z)_X(dG8S?ImKNkKV(Aq!wo&{{du=Zs?ZqV82$|t$2P{3;_~(eFQ{=!o(YIhhv?GFG zZh0Q#CtztI-XfM>5n~%gdGhJON9KC&?{&u3O%VinLQd!8wt)VZC&E z)n~3a9^=B5zKm9S1&nE;Zs>$WT|vf5OYA;BCa5esKH+JPM!+438m6=0VeC5W^3fZ% zGIw4$S$Ogn&xxF(xgK!=P>@( z)p-(Poe*ssv$B36dAf5KcVnZgRM*%Gn~VMN?&3vPIKCnl;ivF669FnEP=4ukJsGlD zEmngrf|JYy90dTsvn*Tt<%vObM#OEoZb)<$EOcoI>w@i|{-sKxHxci5uf5TFd8o{& zxW?O9XR-pMlKMPvFl;Q}X%TZzMB{(WV*d!4H6SV8Yq4_~l|jZhc{=CKnIDeoA7imO zZFwD;XLEspQz7~FwNp9dEu8FHN$gG_tM;Gy#5Q8vwZ3pqo6>uGxqFtlx(-58C3wHcp;U57@@M)ONM3&UJ1#uY*TEzt4=Zeb^vj&Sn) zk1zNbjeoTnpTu2V{X7Hq#>G?(RhL^v{1HkgYX8>kuBLQZ17ox zMpHw>uwCrvEKsI;s_P{K@AzaMOR-JQ*QMylNZDW+{L=Wu$rJn@PUp9!8TCPH!)x-kD0^Y-ql?pksZ-Sap}AdF;dXbbsjR_$q-1%~E+OjlKpU=53%n zzhjN*d9DP`O6p4$+SWc#Fb))bh{myn`KBn>uQr&4W)Z+7luu~LdLL-{`?gg>39Rq8 z=RLFyC!k^)CZ#ba_Tmzqy?UGq4vm<+hdt_Rp*5BV$a)_rFTmJC{G$Zc`aefPw(Y~xUuN2CjijElos(}ar0%^|6CtS}z5Y8h|4J#@Vf)HyDSD-onL*87`J z0ot}^%PLKuwTWV?->@Vd!JPM3`^Lakr@1Rnj|cvQe}L3k&TWz}N*S&9H-8M&iIfiy zD@4*hCmyzvQWZJiXPG+I3h9AUNM{VwTLfY6BTc{89uax*l+t>C^JPKZOC~;9z`mTM zMf~53HdUT?qv2lRK5v`J!!TSWXF6H zg3VLXR;tx~6DLhIEIwAn;AL z8rG!qMC!3El)%ETatT)@)%J!C6wX?a4IM}1x(xpUMhA>D`Kndt@vYg^{g8wfRJpG= zwh#+zy-EYR6ruj(ImO?hMP<=&M66j#{|bltA5I-g-k<;T?+9oyz5DdF7JOobS1)ol zfn4qhe8NOWjXfVMEyWS5jQ#PifW%{Nf984r9>9P8js)*=OQqHQvcMcGy8^>Q0zZhx z7)3paJT~f$iX%xG`SV}F`~?~_J)bM*_MPef`@5f4PFW(YHl;-=S=PA7b~5&_e+Bd(@R;k_Tz=8F04zA-bj6J2(P}AM)Rr||J(1K~<{}+eC}v-( z0n{m7I*#OIEI+?6oU6cGj?ec1{`@-<6y6qtsr_&9Y*ua^GLRMHhL4PjpGL-!o0jAF zS2+Izj;Wr|)nxUp`9J@bfXbFz1g0*{#ravTbv8vez?4O^uoNd|q}NG(b?E>8)rb5a za7^`pt^(t4%}0nzL1oz8pqgnH0BMERbw06Gj$-fmgjYt5KDn(9~|1)9wS2W zV-c8I)E6{sG1dea26ZdrZvpo275qk5&qtc;a757v32EN!7N(Hf_aK;;4D551rN&Ja zPHc+g7Uvo-mprFPlO3O2lOs!YDsnCNIsCKPL(cmU-tCnEtOB1eOG7%qm?)XQ|NSri z_x|jWoh6oL+pNf{5&7D=p_R?UY;AY8>f_@Vfqv<+>YQ_Mj3MMr3QWMKJL?$8*r|k|JkL zx0Yu|AHih}JO>Rg*V7y3zuKd^>6mz(<2h(J2h8Sa&T$P=7i>gu`5n(e8Lzx%n8VpI zVu#`Vxt%xcbk6Y{pnx-nGm4wk;r+Ss0=7oybZq|395WKIl{*|Uf&ubE8}?G>lzPob z=BQ8m=Hepp&uxFO`8vmQVEVg(7AmT&m_MUs;?ol7%AV2YlEMi!N&+9I1~fVA_6@dz zY%t%-hI?^#K8%j#F?gNghSxO%brxr^SDgB_EhqVZT&AB_)>e*7r~k_X+~dNZNS9RM zxXf|OM+5(lb5uQ5U14D7T#pG-Xlu)HSaZC<<4QG>%kRkequs_~s@W-p89Q~7UFOL6 zqlqSIyHM|biZ*ibBW!yF0zT=$13-_mkWFs$V5obDxmOcUYfb>pgE`bf`i zD~+w^a_96ur*p8L_+Gotamlj07#ni=oz6kJM!(~_&7-P zPKsI|brn^pNDb%DK0DT>_1HA=`aAz|j%-kDfo2{{aPkw$gZmtw%MRzyvg$C$J)LuX zJv#`rhF8#j|4wRu3vrbpa7e@XlO~A_F*X!-bFDR~d_Fr^K^xAW&Vh5%x8l<~&tc4M zxNQB*Ngwtcm}7MLoj;wEp4vH3!5#52Z<*_yAI|X{%uB904mbAu3mJkLx8eMm*PC-% zgZZ)R?|2Rvu4vnHbd~hjvj)TMdprjWw?tDdfb(?0J%<1t_mf0l`}XDEIp|6H{l?7NNTkBVo%(xvUMXj=Vza0q&7 zvn2Jt85kb`5Y%hJ{jbNKu_JXIU6a{tUpyLIL6+By=j;ryBB zgumn2OoKDL{{h zUHqBTBfP_XU2CLs!}*giK&jHp$MA%~b*;If8jci67&xci>hJ9UjUo;R)=<($~GV{kn> zcI6tQ2YSDf-Z|abDdqP$y%o9=ySOzHBz8JKcO67U(vTcO0gVJyD8$uvFnwHT)J$Ji z;KxDWfZn}Tp)!D`NV|Dp+qCrelT#UWUFuSGvifo|W!kw;`BtB~+2}0-TcVEUzQ;Y_ z*m*7tyxalv9B&?G(VXP4u&ysbcPZT<3HV9%Wfq0;lX2^_l(4jacH zJ8Q&9)IR{K^n%}&!DACNuXyC|iVFGDLcZG{PT{PzNsq(849jlaqSERtD;o_tIi8E& z`WB^h>Av-a7c?(}TcDOToCZ_KWl1=9`Kn`Kk;4o+534(_DnF1uVe!?c$E z&B-~X$sD^3Z()hkrI(t;7rzgbwN$6P|4#!}UC7<>>8Dj=N#dR+QIA|tGSWPe~2S+di5^nw$Yiurpi-S>hcUCZOv54Dr?bjoX9ouIORx#Z!4e$~54}dz)n#z4m_!Lp1`ijMXo}&_3 zOiPn#C#7&D;9-&T2xf;y$%4|yr@7jqqtf&~&a(ZdY4#A;6080ISvf4XB>uo49iB%l zJ2XPNQG?0kMz(4sy^qsbc3oT_pPd!WW{Dw7ucJLm3V_&085_VjaZh3y6|a*;byv^+NIJdkBnW4tsqS>p|Smen+&IP3NpIDLD30(~h3v9N|ilN0bV=IDo$unb~@H)VcAaC1MeA#fatOc;lJtl)|q@IvY zYZ-u?s)xaWcjHs(k=p@*3OPsm+I~yZ^#+zYHGQMNP*7JnL>eh@f;J|uQ!9PVk6F}% z(5w%bndW@uaP%a0nX=5b)728f`ybaBFg9e6V240 z++^Y~h{`9T+)3Ni*#4-8YI5#4L+XZvLr0UCWmu`Bb{pXGanD~dwIpOF?dh%4n7m6@ zQ%ubNv(Fac9x^!qR@1ft&J;?e6rSy7PmwWaZ8K`X>ZiW2b?Hd#!bAuenz{}Z|J(-& zd~eB*nDLNSAHG;(m)Y24S1A@#wvn>cjYd;@;XEbFQsCX@4XpQbP3OiK6LG*`j%-q~ zhuDQ_9jK{xFifh4a((-sRp|ME`IxskKjr6w#2%SSs-YWUC7E8kC5?@HX4|bKWe1vI3{UIFOV`f zPndZ@$o0I#`H)qLg6yKs`?)gmp^ROBL(UDBmRp{|KZVT2l1qYPBB{%bVUrc<1=1ce z1msTJERQ>TZp+cOoF|$2(Nq9`wmc8acr3!z2GDh%zFD<7nUYn-lD3#0L))puZl92k zi1}wclRUtsbopm&UZU3pMCk%z`uRdIy!Dh5p!NaxDTwE$Va_6NV6`}gG{sl1~pZtwWu}Dt;0GWqSVTlbwQkO@~RvXf*+6)8ID-UIQ zvAdPN_l-tWyoHmvIuDgO5Obb|>-Cc^AOH9gp6Wal-tWV^cwzPp$%}N(`3q$JMQ;f% zK}lV{Lc3V#0bG#OE9PlGh!z;#Y2o(9lo?N5H0Nxu;6|M1Pcl>Q)(~lv&xOd1{8VJu zrs{sbAm)?GpUK@Xq0;CH>J?H`vsaEjeEE^PPt7#vY;R|Pxn~q}# z$csnYlZ_XocAatrnKzAWW1q993lWte-Ro25%qiQ68>+WXvPbJ9bZ$WI)iT1B9IrRH zMWud0jBVoT7|}aN1CTupBzDOkYdL!(jDm1##*-M&6lgp*4s*71I#_RqW{36(}SCJnjliOtQ`%vfyxl+WT3E#P^E()jL5qWN!+o1wMwZTqM90E=M~|PNCrmaxoVgceH+)SMk}jATT1_bAT#>Q z(#51@Lh*G?hM=NFij*bD&U1fyBKPAXer0tdS=c#JuqzK%&-ZiO`J;5f4Lr4rW zb*zwWFr&{I*Y=?e_9J5cCS@ZFD5Vl9*XT>OgYwEWYbt_ZtBgDhed*Ku{bJC92 z3D>K}XNhtDQo13z3*327^ z17@f!y3DalF=@vkZOD8V){m6X4M~PoGDpclF~q9v)U6Dm=iaM38Pl7~LJCQ$#>ICC8AK8r>z*IqBMH7~MVM_wf0?@1M_hp6$eaU-xzH zbDeYY1=>N3qdYrebZL$e?;@Q<93HrSeL=bVdO}%Aiu$0+&$&~vQMs@{LQZREcssD} zpMquNg$dj$`jjRHPf*&c#?`rC0=4Mvp^U$v5=YMsed3D5jJBqKmJ6X5v70(_%uFeo zHRi0Cd&HC7p>pi2>=DJc72QNNzaIYTv{RAfBiilvUdj$0St|PXs%#CsS@Ok{R-@C1!oiC$4z z7Y$wLy&SkzSkFsW8n1VEEauP0ah4z*bB3hn2x{4I>@lJ+BP<;qrXpJqmLSkwnml9L z_ot*mQ2m*s@Nhx5T`EB!5-i4F$m-tI+Ik6W#Nzr-Gk_sH6Z=-kcn0LhL3$n%zP76M zFpKe+m(kR)U#_km)zQDi$6L>XFW`7<4Yw`$ zf@TyMZ=<5*#x1$T7hmIPlbpc3gV}J5+PxH%94)KbZvR(PD&^}PkK9@fvta!)sP55k zeYczUNJ5jMLjS`g=98xD@}n^tVxy6j>C^YvuJTTww4h#W@}b**YaN#geV3+srXBr? z_YT=^pPv%M2%|RI?J`uM7wo>e+Q0ohY^}m+t0kJog_q^_0*VGHSz$?|d6W(ei~Q2ctUL`|iWhJf3cF;|cQX!hOSzh{UiU7!rfcH4 z<5iunU*VJSz|%;^Ip8tDOa(3}M#9ln1JBi6E0Q=lrtCa*-PrqxXg}d4qj-qA;MnY< zI;?q%fBSt#w@%> z+$1N%@?E+0jY}M+_z8Z_aK#@HJ=)XLF7wdkH4oLo?2*A}fb*Bt7|g$UWvw*thTHF8 zM^UqAQDvS+BYrjvbNXs?cV7wRR|#O6kPmIhq-h_wq-`8O)(1|ESc^1&YLQBtRESsjhwz+>hq8@ z-aMry;)jVEWKr15&dw4qU6tE$pZ0vnk{-a;D8Hyt9K{t{yqzFO-|4KbLL&MdbJ^XlSCct z!MEBolUV-yR!B3=Hm>j7`Nh-ABn!E9xsYDxm&Ord-RphR`B!o5imn^spOwCfs(ZXW3t@=WDsJD##7on_V?U5=0 z8i&-&z~}2Q#5fgM6fvlrbhj`0E_@D>TLN%Jnp4m)7R@KgNBcGhA%R zb#9*IKG%PO+Lci>xF{!1(wi7#hO>n9{PeDo&@Gd0_1kd6q*6z;P0fvy^}hDM=-Xy* zbyza<%7hr7h{6DqfK{^3&O~It@_TBB^`PlDbJrzr%8|VOPCL9&$WYROoj#ErvOOB* zDvQZXQ(re+!%wLsPwpoMJUT+^IrueFY2?XaObx$Gvwy^Hm_d-1c+|f*(CMxDUMa`9 zY7?u^|#Y%c`vO?mIS_OkNb_y)aa-yR;a~rkgXgb<| z)F|wB&3Ca~fDL}!_Oztu7u!BVZ`9wc4p4F4@89-lyOqEO z%O=P!m~z(~^h}^?NXRU;QX|suH^S73=PNYK5ee_m>rIgTud=&Ikhj}EK3Cc;r ziWYC=2e-Ce!sO797mdE3r?q~5ku;<6TPc&!)9Z@AUS6G9h3i|tfBJ1>!|d^dCd%6{ zh_GYH0CFB~AF~V^fAgk`ibXg-bV{y;qH4deRpB(>017ipEfMq4r2gnb{~&C0{wdO8 z*KfG|P&EI39==D!On_O<%{=JMo%ujo$!WT!Ez&zIjy14MjS z%cwkuhx4{}9+{MRKc`ncSGQ+ghsE=f_LpcX0YVpm-0GEGWrhs}i4(Vlwf-knBaI}jvtOeKcOs6OZ|w7wxa6r=ge}tD=PTY)vmVSi5tpGqRVnid=m+lzl@thmDI}?QlaL z=Z0WeZL-BFa#d5?Eq|p^oKx|OLzE$-?t{ zt1a>+KiKv@Hh-HgiC9gEqzuOVoL3@Ee?!32=n(lAqjRgf#_~Lgt==oYz|d{I*Jr+& zP<8W#mtv*b7q5N6xdmD#*FhfQl-gQS#@nr50|F11;%c-UxWt!2U`>6Xx>17B=3^F% zxQeA2ho;g`0fEbz9AVY+%q1!~_Q7wTcV6^iE|*QcQu3&k7KJy8PVSw`5us(J8$6vP z7EH6o-}H2cz7=!DbB}$5=5D%OO266Hn>MRXtepB55N}Y5{xrA2*}O_S0Wv9u-LtX% znO(@ELuUPA9_6m|Nv5p*ZL$#mq!Pu6s6Pd2-wPj9UM@B83izx;Nl{%QzfZU+W|WAO zuV6I!NYvBW2jhMvB9ncg*2EYZewHBbDHQwK={V*Ilg|Tijamf*xa<#Y&Omltpbi6aU7F5J*pqON$pvi_ z$tcF6$)2ky6f2xyGBF);D8kN);@II9Qxl54Qr@XqV;%}REm=!yNRdplW`%x=`>i^C zY2JF&N^8dVP>4jtOqVYp&SiSbkM@P**s{i9!p)ffFt%KuXUm|HhrH2V>_6TdoKVYq zuJngDnwyw(CMiTBjkH*-6wz;Qx{P_HGHSf7Eg40E0{bdB!|<9;(VJ%A0EbhI1?ju# zbxoS)(|Z4NgUqA&-|HxW!g4#AXT!<3V{h&8T?4peuy^U#hE{+LubjJ#5zvj;jdB~p(^I+!M zlOKrrO_7s`kNdo8w6mVbwx#u|D3w$;Ts;n7_>kz}M=Q;UpwCqM?$+&+*rmUvRwEHX z{P$Vn=tp~D2NmSHO1$P{>u-gZzmGHzyNee$eQ=j#KWnkM5&M4cg{_c!#zj9lm(Ep< zhGw^8eSh@=lH<}c?M#8w)&Jt2@&fs{xev_G)V}MRi}#(||308niYxaC^3vOl_F2^w z$GMQjvbP*}c+^jP3!F-)#M!;4;?jId%6dwUdTcG)ZFjyxSV?2#&&4TrgwFx8C5?~y|ohG$&^(l^0xx6^Hme^W|`IseDV9s9L+3rE-!FO8g zry0Si0>~;qXxkCFxE#^=7_NhYP7KjB0; zNe}FsEvhh*ZR81`jxgb5q`(&EIF0KfM=btp{F39YlBjZ!kX0rBZG@l-VvDbey+YG?((?LBCo8o-V(jLl3(N= zaJJEm`c?Az>tf9NFS;evr#(NvU}%0Y$2{ggWMp`(QbQ}ko&)Qj@f^4j*t2!9m2jB zH>~!xgl5exlcp5Gy@?+yJGg}#OAnD$xims>#8S%f(hFITR==gGD57kxHUzjw{$2i<19&}{BY?typLB;(uR77{rGi~ zfXmZ>;Ld=JGDZlK)`?g`p~>mDAFmA@E7BmU~ck^M^!xNMr+@}%7xkD28W#wJ&C^Klu|@z-O7dNj%S!Ze7A9YfHe@ZIFj)vV5Y*LHVxZ0bpCi9Z zeLpB}wNE41)VjzoIWXwgqV-5kfO}L%H2tTkKk5dju2HVGFX1gk89gBQePJwr*tcTZ zwf${}Ivr*R*hUkFlY0$3IU`(yr{#WCK%JVzYx9o$hd)fGoYpU-+oyeef8d7;zQlWt zV1Jl!4ego-J{8=)E9np8%2Qrsbf49UC#u+F*0K8Snv`yPuHyJMPd8-2v6{MN4zfVq zVS5Wk+z&AeF8axZ)A^N*yPf2om@Nme!0cEzgC&=X{**||ixBzXZe4e`q-MT4zWm8xFNuby~ z%I42Q<&$#OTf+?VDDaI)cAg(87OM%rul3d+-h{_A_%!NGtm6(c$DN3TEkyYhmg#xK+4Rc}<28EYjnR3kp|f;o91 zNcF1c6JCt}t1+Xqa=nD5>&if-#D6RCLQpaPwYLNwZn_?;!uj5rdy7>2RyR@Z#BLN! z|Gi-!)F9T4Ntfa9-vy))R72kAl;!5A$adPs8=%&U36EwVSHw?Y$0m~?7*@!w(Jt}8 z;F*VQ6`9bTx@N(#FG&=#^icD+I?;8IzYiT^Ut+*y%Si^r_VK;HJ^ByR4yC<-ezf|Q z#Sm{wDA^2E2USR#>eOf|?)>7@;?eOPEIU|Wa2i?4tFJ0@A!nCOJJAmH{7pzDMGEY) z#z(%0NVJa&cQ@o0(+i_bsMK5kWRGhaU^rdP;2>C_=?_`HjB}aLrr<5-F1R)0UkfN?K4+_e;U1-2$4g5>z)K;@)yuZ`~VS{(P0M*b#Eq0Ze7Ylmn_XZ@mE( z1W=Ek3u@pOO4+u3w8Sb+y;vGj>E?RjgqF8M+pC9}M5V3SoYuBAC8o;ym3sDNNT zdvb%@7$R>?enKVm;&%ST{g^Xya5hjFP+l}mR{I&C*JUXiUC=X3<7H{+KgN_92+I^5 z6Omo8AbOYp?k-js2;sSKb>i=4DEWo%hPP%jS+bR9|FN_-@$j)$`4d?KO>JH#(uP+z zR0#0g0N$ZyjE6}6Q6W+Dj@?J8=_cyX&^G!B+oVqQ$Za}NDI@{MgkQnXOgQ4B$v#Gh zm7uF7-$z|*h$^w^GZHoN&XdcnZnr){saI-<|9_=9w_r9=+rb5&`={-q>Sg-j<6=pf zgZ%#@+B>$WR@=0HHK0?Mm8)d)nI~8|lO?LyKB6E)s#-&@msA^y1D;5lAci9<0E_hL z@1d*(^#;yGZi(hc5J_mDr(_{#Dz}3fujehU}kNfXiOcQ@v81|0Ro!l zml;g04uf+WbNxzpIupy|+jh%h3E#Aoi(uHgjNZKY?;m}`W2Ptic;ZrM5VBfa&%ofU zTPig;Tc_yE%c6HS+d#K^t@0VSYTn}Of!^6Z8&6%a=W{Lav=lC0R_Dutwr}(dX`m(dxP`x-9qUY)a$_FMNE1K@yS~-j0aJ?8na3(EV*Y~{gJ>_no z#k2SRcn;D0>!)IQ-UIu^d4~iW*F&-~V9z0+C<-_p2$oGBYx~c8u}{L>mJeDx%gc1J zwg=7AE=B)IhzP#TM4_IRTq(83<4n3%P8hUr)LspQ)~0zFU?JY?KSI$QiL}qcXZ7X* z!nnwD1dI29DDQdwOnHG9a+bafyTt!&=d$GLFNy;yIR04zqNz?88O=evq6X|O&uK4k ztF>PE{Mk<^Dr$ZjIRe7lqu!=G#^3c;YAqyaZ3h{eN(@I|N0QBh*yqM~mr6?)y}~j_ z=2g%3yj>Rk5;fN-_KVHy!sd$u0Optj*pMhr!A}-Hn)f!6h~6_(0$GW=Io$vE25+}J7wdY*mX3w8LW#yfHeo%4C*#~CKVu4K1{fqQ zWj^;X5In%ag>i1;Pm4A$xHEdQ?oKk5vDILu3|(aLt7}gu`U2b9YMcw{p@c7;F%|N< zHtPh6Z}#QS5Z&5(gwcMB2kGTHw z+T~w!q`!io)OSL8ks&2-lw(6vmq;RLa%XkC@hQb`2q*st(oOXI7ceMcSl^?~mC)}x z_xSRB^aOW8@w(^Msaj>kR6!dZvwN1xwsosGlhET1qkUGpw?e!~f+@&SkO!vW(OWfM zWRT9)=u4GML+fcXRN2j-qo65*!VR*d+0xd`i|iq6%zZQkx#pn#hvbo6o7m0wXNHtFRj}UqDL0kN3Psf1Z;{BaDD1DUjb*Y1e zhOxO&u0~SCZM0XG^9T@0uGT4(h!zSZjM-;)_IYfpT|{|gaMoZ zfL=XpB_&&7fXu5}mtGRkiT*P%4rlP|UYybJm7AaV12{c4DFSD$?h%6z+~${9>>9<8 zlgW!tjR4oE24_8O@r_sF#*_P3Z)S+>ND+>cmxX7A3OwD57xGn1Gi)$rtD#8$=b1xJ z=gzN1m{O7}JTjI+B^;GC4KC1H;tbTh(^KQ^c)+#FXkp}>T$Th zLS#2M>R80L11h%+>+}UgxA;lDr_h!6mut_tVGa3!=o9Zmr4lwn|&42C>xcp-=EZEtVW%7@FO8#pY~9N zV5DmYM(qHmawY)a5I2*m%6@P`XVUx~1Hk#=n|hwEQP_g^y0rv6TKJtgp4wSe((K@9p)zjc0j#2YJV_<-@nN1{X~yI` zz~e$CeAYfC4wul+0S3k+VNC~}r!WYBz`aE2#{hnS_Z@p*sJnza@oOj`9;6b25^5r# zrdj9(Yvro5wP#EN@e;v5(|*g?IZXb!_xDa^NeK`5cbGHagy)kzd9nUJW?y2+rQz?-o>VYi)UR0r`pZ*(zm`^0D1v1kwqQ zIKo;bNo*V@)GlL~8A2Qf-v#iNYUqBa5462YXCQdp3{76EI=G0i=+?4ZwsT!Z_($cZh5& z#O(^W_i;xBu4f|>MMLZV@dW6ylo-V&+z z?Cu!?5SsrEAXb_ip)(Hvwn{zpzMc6O1{mR|j?FDwJB+;T%#Mvf3ivDVZ{vQ3TwBlb zZMS)4uK!GBU5@(90kDl%%OEh{er;l47+gdP-YI)DGvv5gBMwOjW#)2EmjukPAhH0t zxIJY`rn=Cex1%Y3IpO#)vAQWn^G2%gYCLaqIgZ7*B<*GRTgDekX@L#SW}D)rz*tfM z#`cGZSC|T}G6rSp(Fa@w)!7vT0?h1>_;7E`WJTr zXQ!~rFF!f%`^NR4sgH3xv&JUXUeIxe@$_y(_(3Qhlg35LDAClBn?IH{Fkqe1Nli8X zDwmo=Yx)1drX1n19K@Ds=Ud%(tG}+nvZ-^yhSAsM>wX~B4R&|UY9y| z$F1{%&GjJ_Obw4noNlY~6WKBr*D`oy#5GGafOzoVJg3kU@F%h`-PRc*_A#+`<{zsW ze);_Ch--II9A0GP$A_jvKMEN2t&XV9=LG6d)BdA$*{WFC5Y^^Cge#W%7nzBqu?CmqYtoSE+F(KVGil^nD%}$~MaLWYn z^4JeAz&3G%n`Z14@lzH_j~LMRn;*YY_t+DA-=jl*-aaHA$D&exkSc!4z-uon;{_ASHJevggqc`g3`36SWt# zqLjI^;iHAA4(ooFPaFjio!ksvE!U3Psj$BT@tJ9<@uN1vg zvSF6X?o9grcQCsX%1Fr7y~D>;nzM%hLO6h-SN!Oi2|`;7;qCtnbcGlc06ZrYMhA#VPVQj*7{cg1$~fB5*PigHYk3vg}-!0M> zNV{SHm;lI7qQJOyp4ULSM|wMmtF({!$vIB@i=|Xh7wHlDMhqZSTS9{Uf9H+xB8=Sr zYXQFCRKG3$+A)}AZyEj{(Y)^v&uU!V+3PUY?5c}}2x!MMMglXzRYxR{jNy?Wb^KkD z*O#=auk#UeC<0iNJ=ZxbKG}Kc#Lk=){Y;R~uXhWG4)LX@&%ZO9y_W_;KVFw(no9r!O-lZ&8H$WWF`gaXh(H5_naZAh zHTw^DCci=qC7U@EeF+D9Q8O7Bm@_`5eO%0(>6(XVx0bI&Hqc-2cca<6P|58v_EK@D zY&-M1woB<%uI?@C&MWYq9T0W|K^;A>(dW$5%)2%B?w;RGTk4>R3GD{{UjOHZ@3p0g zMe?~&jB@~PDa?eQJ$OEFAeT&jyrq-2hjhe}j7YFhGK$w!uJ39{`^ejl_l{?_3zWN( z&=2|Pa94xu?OWATL6Jmu+0;BiWxBlpvY6G!60I+U-u`;xR;h|5fQ#Z^|3dHy-%FD4 z^&YKHhVtah>_Gc~j|}}HhZ9&+>QwE8CW-1rtdnU}MunVFMlmyp3)x=J_65Rd{Q@I| z81KA(b|yrpK1G!ox=T!pz6915k=ajoY=*!bGPM#{VoOAbebD3DJP3jAsPgIan+`lQ zxqCQwh|XTr@qyTP38!{Y8ggY|`oxk*A^{8d+Wr2jFIRUW#OEdLEse8bUAPE=0>q6P zJ%7;=@;9Sy5&wfeKV;1dgXHW2o;VCd!`D<)Z7xF{Vu0V$JlYpFin?BC^7VN=NqX>X zZ=;)P-VjkTal9-@I{d)mT!4)Ly`y;=*vaOzP7q7w?{l8-)^&*Qeq6lY6H-(8`ij-T zy3LK1z-6S~Hjno5!|Qg~_2tUS>~e0IT>Sjve%l=Dj}^7r3+B&K;j?ZJo5hE4h`+k5 z>T{^3I;c=)X;?tSg)5QRsAIPh$#JsYZ8;w_GiZlYg@*x;g2aeA#96rNofD~><(#V{v?gj6(4sQ2(TCa1!zqtfJs z^!&N4Tva_+2Jxy&Dea8&Ep@DKij9W^;b@|uGlV;LY}(|D+65)2bX;n&a$DLt_K(8) z2RN)WuVBj9jgDP6=Z?{2PA=5bxE01GY~SU5)|tvbem`7CJV|&V)5Jx^&6UxV(Lk){ zFrFW!KCj64>tD>x`92hqBIM;81;H8znnq*AY7L(m0{n|5BXV~uJu4;#-lkxSBCr*39)r=;6 z@q%u@*zHn|Gl45NyYFuWRgfUa~w+|fk-uI$8J-lMyu2vA$ z8Bc2x79{LzvQJX@@y0*z?g?U1(n5A^5Xo>dylOv!Afs=XSLZO9^|-1To9hxaul8H~ zk0ie{kEv*aBFsGd+)9?v=;mj0bQ|z;oUtO7qz9a*1!AThB-5&4yJqW<@T|XK#wgPr(AW`x~^El!+_uB>$ooijgxblcjwuj}b?|t`49pc?~U!ADo;QHv>5{`tDQ9 zmzv0aQ!cLx9SR#z{N}rE{A+2=Q{~1($vJBt`T8#~!u^@OsLB~g`LQr5Pm>MDqLJEF z4Np_J$$+S%g9lZD1S}ptBq+$P1lXL8UsAbd_2|ik8Cy;=PkNzi7&TnG;$Hf>&hSz9 z`-^4JM%&F=FmdgDTJV$MKIK7vSofwT+eJB9gJU1slknQkwK(P5f$P)1^Ej)~=p37^ z&i|?^M?P&+)IkPR^;M_aB7>;g;yA_Gb1H-OBcZn#+C62tVO~Lzjym6Sx-I|Wj)`vy zN+kcthGR^gx^`G}p7$K^Br9p1ph0Lg24r*5DKjbS$og6cT`d`{sgY}t#6xW5`0r%H zuY3F7h=kh<>Rxdj z;kBm+V=v;vsO$MoLH*QNTDlbIGl%JQ*Ta+TrR0aFJgE`sLBGJRcso5&d%4?P({82R zZ5!&%VxXiVr-M=LCUDQ?=l(}CX6&r1u6(jb6kvOwFL^z~*ZwkGO!^d?v(D zUpVg z#pe8WZKZ;}wCYbWLGX&z$KjSWjs`zc|FPiItWv6pLB*XmY_|CxzE`uLWjgrbYLUnB zsSR&i-<*u?fLq(e?2>I>_eCqo;OC8cwSSjvChPUwTRZ3w)YPW==T0sme63Oj9*E!w z!v_Hi%uqpDujve#+R0^M?TrlktP4TsKZwo541%*U_98=M!hMA+&Y(lxLgH1MyOm-Z zucB5nz6HlkzQ5F@LYk4mTZ1brOgW3pWE{Us6LM++RbtU7+JCGm<$BsL7?jNp-ML7Z zs}d^>oJKz!)q5n72UPDCRFsy^DQ1s?>jl3v6vk@RWjEU?%hY$Tp+ zN4ai{bmvYb&G>V^;Eqarncfwp9u!{cf1d~hL+m8D>1k@w9Bgb@wOm+L7Mjh>v&Am^ zAtMJ*eZ>EfVurQQ?QkuJ=hZ3iqz082wfQ}jJbMzw=G;OrtBl48tqJ72?taoOp3m6K zW_iotk5rs{Dm<#BmJY8%3Ds9OD|R$$uP!gw;7LDr-S9HqzIesc%<1}cl3TH*d&uaS z^4u3~Rws9bKw7V0QA#cLf}^$2uV-8KE|iTk{h!?gyKWvT#P74ulB$&C=k8&&o!oC5 zqA!)$o0r!t5AD*#dt820V~T$}*fvL4jEJ?teiSj)s1ydGt^H1Av5Ho8kk1qwc1Cd0 z^k(iKH*WcYsa3u1tBUvw<=xCap2_uhFHv(Pa!6`1TNq1zLPOobWX0fXP1!wbzZ%U!FTwZXi|F#;u+*%dZ`pLI-b+9C z(8!X>7dx=8DIe#p!KWYV~8qU^-uuD0au67=FO>F(> zIg!(2uhF{M*~`z(h*oT-{zy_Il-|veyX;(J8SOjUbKuNS>Cm`Qq5=UoM}&Y&!IR7# zO_T#GsgB*#pe$C!KLviMOE2z}Bga=dXE-zIGkLx-J4($CmDTPS9#52037@j~hl$Qs zDyvJ#D_b*3HgV>Y=_m^p*$er>MBEs<`yvOTcI;aojB=mwz)+ob;ozHnaK+UZtFK*WpYr2atSk+nz z+#%b?i=wOcCY!E&xKZS+APK$>|@oC`Ry)M+3n{hRLhJge{Hp zYEZ`I*LDa8b#(YYZpz&`D{oX|%8TjpQm-B0TN4F zTe^LfWHp)nsS2 zI_o!mmFoY>-YuR-?e2TiG}$@s`r@L@8$I{66ycQh=t7?$5t0V_grpI-yMKw_E4LY9 z*lCNsaqG9_7t+5P5Hwd^Ds~PwXYrVEjiK>2Z1o)Gr!yjFL6x}2AFPml;AHq>A=jkx zPWF*#_EKo3(+lx*g@96vQz zRtrT6UzHr?_3SZVrd3f%-F=WEGkq=>0!C^j*|5o$bI%tzfrhW3`D1sF0 z>CS_Aot#Y;>RTI{j~J-18%~D334ELm;tO(IaLe~Bwe*NV2R{PCF_05*QCE-9c63 z8qAy5#tA3WfOXt-7?eHlNFHi3`UOv-Hhqq{7I3q}?e=o@7nG=Fz5e`&k!8hALVmb( z#FZ@vLqr2i?Z|E1^;>pbtGkzCJkJY*s=Tgh&Uk`jpXI6oY7Jx8+bmqG>z z#?4NzS|Ux2er3?29Abo&PrrLvug%IRKlE-jRfc5HCJStZlgR|=p1ogPvm%&oX|brE zjNx-Y^yibdHlMhNki$#$9^?N_BP;b(75|OYKhyoOuD>FF_Mzz`{ja1380GEhgr-6I zt^t8_Mm>Qk4yx&OVbK7WMt87{_=`rGW&QVYIUH<@$M|Kn@XAa)0r>9nQac(PayTeY zFW*bRa<*Px9({D8yQ}-UclUvSlJWx)*6heHVXRF)Hwjyo07RIgaK!48;{^gzNWBBR z@o+nJh59$#3@yy`Ios)4T0}psrs)r;z}`d<{1g#0O1WRxUE7@K?~&8`QPPX4j%oHj zXO6q~GHgy<;!}F1Am@|qOIAFRS+~|zu45j;ku=Ftk@lxaXC4t`v|o_pS`Kh~Zoo1G znZLXv;X7&>%BCOM)nr?#E!o|~80MoGkWrigN(Sj&O4n&GA0Rn}>cIDy{|NZU+Lao= zYO_npzuy_wy?0?J(^!{PI;Vpww737{*zfG9NBYm}OUFo&_NK|J7Y~BjlMYedUXZws zNg1ZXwC=^Wd&iv5;CUs7UM3wqh&8#{7*>d|{#){9903_;(W{Q1>vHbA?~NHeW9p}( z&cq`P&Z=b&*;7s3>W%Z$g0m*Q!H{2_)5_pbj(36*a2(mL_ik+Uqdg3HHxKz_cL*Jo z@}pvI%0u{*z6&*q(bBfU8%*Z5KNV~UQh|48mQCj^1%nW@-t)$>_xPmo8Ie47h zLFnrItl+{(tg^@3TP8lnrz#gwyTX=9+>v_ z3N(&78&70fk_yHkAH*qW2PrrXBVHI3 zxq%EaW*o|=0_+I$iz09NMTV)_TmHr)m<%Lse`T_qbGv#Mm%-MdbecZh98d_MQ=X#r`uKsiOwOX3Vv)mvOgqvaBFrylGC`n z)i(At^q^*vSF7v%a(%_ue1PKXO;7-Zb-0ssN00KF7n5$v)SN;}1=P7Zb)rii%paHzW zh6er4(bliQ2{SLE=r4!7-lv-W&YE!Gpi(aX0DH%#mSBKEp6+q7zFi9 zZ*@L!s{%Gr%M8=+TB^3C7|!P;`Z8ma^3vC*S;E%e2>)(! zF=veJUiYKwn!rTsFtYiJro{3Gxa?$!OB1nSe{f38As$p}R%(>O zN%m+q;q{utsZPy@-KIoe8VsP#<|Sq#gPRb;Xg&i7p4j}!Xr=6Xnk+Z9Sg9F8dw~}5 zMm)e~??lIqhKhr4)S=Yuf0Ox-GfZ>!W!aP8GA1h!2808JqsU z3Gub#@vJ=7(n{UspCG1)CY~tR>or*qY^4Jg@VvRvFK@Bdf3~cr-$~^s{jMG)2HkJt z>a3zIB^cWsV}k5>CyUYhb5eUi zx~^~a&5Zg1}DeD(R2i^s$PehpFZc^wh?s7J} zp>7YBUP=HA;GTd0Ti+0pL@W7Y!&ybhf%|dZvwpVU<%dmM98}S*-pL%^1?RsGj_C3C z%(kAndSy)8q}N91it0t>nux`h3Y?^kmnA#b4&|vH9vtxyKA}rEJJzV2gpamE z$)W|TOoVSNLE=YC5kM-ZkAL#%-k4ug<~3FC;X;{_dK}4FxA3O{y1AD#(E)6TuX7ek z(Ae`j73$eNzR>W@q*yjw@|Pj6niQN17U%wnyGw}^Ek%Gs_XET3*DF^9`JH=89Gka% zlyr`!;0XqYn9md7_4?AhOKN<@i+P>%xUl7nKUR*ly*}6c#|*jW@G_7NqK}x^UUn&| z?1!H|C+ng0em~n-3EtRxQ6Ru?wU_K^U-2z4M*O!=-WOR}2ZD1>232}zO#j$0O}{yq zB)P7^Z?wBWSh8`ClYzdwR+3O?zm#W1@$ z&^2S-7xL@Cw3Y8CJm3!|nP+)5qIG2DRex;AA;Ra=-dg15_~EN)DqY90G+xYVzVq=!wZvAYdTiPX~y8lBa69Z8Ha>KYURW!@_ zO`FoUZFefuZW>WL%H<6Jx#Mb8Fny;>>Pmh3NZ;GT)`Z0A8V|j%v|0`Wa?`;C2r& z?BS{V60XNG@!3-kUeoMe+RV53L0)a7b1*7ju)^7~9vIo?+p$xINNK=FOhR3m^BWpT#oiclGt_=9JH}#nRU_s|O zC3Xk^+{cQO5xXuMwmY}r5(J7qqric-D@X2wCoo23w>03SjpOd(WsA94MA_I&jb%Ra z^}MQDi4@iWun*AV9Gc5MFYoe+#@~X>(q&A5^w|3Bm6FAFikjWq zP2=T~lfrN_y7Cj-KXUsndA5-_h@zcbGqSrqt}+J#k8^Q&TlWO@>Y|=_coB3DZ)vkAG%+oX z>Lx#e7A|}^tv1k#nhH#lI4j}+!`U$)-JR0whP|>FV-}wV(mi6jPO6K8lM~RT!l%1% z#W8u#eryCpnODWc)Y5s;ZnLg_CtyMYgN$s13*Ubhg?r8>B0;lfn*rT$D1WOd2GF~@ zFA)z8MD}bYU|k4eKCFMOTwJehpUoB_mS_Htt@jS3GJOBXRYVA7he#pwh^%Z9*?W&N zlfC!I%#Q3mva&+lr3-+CLnVw$>$oulIF@lx5n$TAhD1EsnJ%$Cx|>Xf)+mN!L$1)3_$o}XQQ z$TtTB#DYiX3H0f6iEN!1GKeX>_qL?(dG3knPMhO1(UWu2Zx->N-n(nx&^gJm!_8lJ z?4;pxpwd!G*?E$LT)k^QtOK9lB& zPW7O{nbX_@tq0Cnc_Yq~P3b$%EdGnkEpX1QKE-g|+RRB>>PY>r_76mC9!?ZBz3^kp z)%Jsd<~@EP!a-a;vub~wWO5Ot+<5K@C-u4xODUQ2WYP@Bp!-he?I922OfTJ6QYQ;d zis5W8PTIJh65!%oyJ*KeBa!)4{i6TyMUN=b0rr-YZI`ra;BVx>BgmGvw{LG8=aI-5 zAVua3%|phM&W`kJkZ`q~`MOFvp+kM4!$AnHSvK(E>Xh-@EfPQV8msCR@|xXg_0Xz( zW#{Yxi%N3klc^U?^TWL>PaU@Mlj7Kan>*4q%Mi4StdSO{UhZAf!HDK+YUj5KLR(LC zf7VNi-V90R5#FL7jpFT@&%#L!IB{ft*C`F%_u+IUfL#0qH)#qt_S|X zL$PigP;$RIhm|!^7g?h>y_0D9H@6qqjJG29wjeIc*-3@aKu1Ylj(^_enhx zPm=#2z3QZqMq_6{D?;aBD_3sz7+>EsVaVMlfqQwPR`+GCHgXhCgT4 zo(v(8@+aFohrZiMJBJpnI*(@QPedBKpCwty#PlTxte!maOr)(CSwS*5rK~ehslL|I z=rh^x984JZt&x&q%l*wvFZ}nHMp8}f+1a+2=@;_QXdKdyUSXCkQxwyryA3wwAM|xP zj-q*dLOOAEJ@uaL+4XI56z(dBdo~2|-tZu4wJ=>1vK{Hm*6(CN(V_D1H?bbfKm zzRHWTvVLYMECs@yE86_yh}R&0JaP^Dx>Df+59}AW@l2~kd`uiQah{tYSYY$UOqebo zSR8!>KCKW73fYx^R`;eTt+lmN!_~WZhk^X8?Z(hfvkNkvzWpK^wzAHL!Q z^i>jnebu+PAY?2YuBE4bdQK%}S$)*DV%lsnOYKq>sGxsu&hVunX>k=!^hjkK)oZXi zAwyv|bI-gltPxsWTm@;oq+|&i0k?>SpPVXhnLJt>CJX(DlVDLSLNKPsGTYpLVI*x& zd2gULr$$q1KmJV^7p(o0=KMD|IpkAQr(I-(qe6>Dc#_!KH}(%B7$e14%lUyAv9DeCVlulxT|gE6$pE)0{1Km? zf)GCMlSkGj_R{m}Xa{c1>HRC@_(!t3sLzg#9&`El=#tKE6<=NtA+6?WMtmU_cTHM8 z>tep>NfeSiicXWXsvixi9qYNFBfKHDQvH^Hzm)_8e)Dv*`Q+D;4;m-TNwceqt2#|f z*=LdUj-M?BG+#O*B}nN>f1eX&H)Kb_7NqP2BQ5R*Q>DtpQ~W6>&02CF~Q4X zmQVcIRJ#v`iQoKf41e^U_-W?2V9*}NcRIIT4dl!kQdR>MU0n9c%WV#;1`w<Ud1)uTBIbne0#+Z{REq}#qj#2m-w(pyLT{2-)RU9?UN(I|m(I#y z5;3&6Y2mS-)MEPh1)DDJjqF7|)=02b@6!8F}bO|6cFP0gmr=2Gja&Vt!Um4QD-iI?BJ@ zb2`T*x#u`v_oMnzLFhixO=i_T;49{S(v>}Q@9|(uZT!{oG55r+WQ5qP?oo9)S?vd^ zLn*lmyMt%vl&|#oJf^fLd^m5Jdtj$gD}Rw zvTuWT>}mwFL=t8Z1qwBOPsS1EDAIbQ#J3ZzseO#6-%HpBj}L}}YBxUWP@nx&Z;%<$ zYo0A-&3`e=R6O&ymhIt`iwDc$eE8Vk7GO3<9az!cM zn#Z4bVByV5ntXBw~Imz?Jc<=J%Q$cfmi?4sqwuDP2*BZ2)ijM3# zqj3>NY(&Kh4ex@hc~2*obsN-tUpO0#SZ|%ai5Og5ytqp}`aZ0vT7|%8Akw?C$4Ia)XOozsZEEx6&CcP`!oP2YdRN zhLCxkKm=M0Li#`?Q{2KKT5hH#z`8i&Ph!Nr2*djkYnm0riFah*mw&rHvGdC>!=;Kk zM7w#M;s1wKB|NE%u{0mMJe-iQ9%}DS`*X{3B8I*Ki$L-ro zs`%2g^BdHgv{PiOI|9Ts1|7d#h^;FwJj;oAW)!v@?i(0Tm4+G$CO+t$UB>%tM8V}l zz23XIViWBusKaweWyaA|2!}BGaC*GS5M>_-rX3B9kiWw|Y@DQr<+!ZeZu+CMgtZrNp?? zhOK4QKt;dcUCC#9F8o&bf(Y|v=eIt$A#acV*R_iq2LfJX)7g0w{=|M$>K=-9ccw5* zz03BN@`nm{KkUtEr}A+s2dpH5qtaUbhRWNcyJdF`5*SlUH#MHDlt<*LId3?Br|GcYU1yUh&3X z&0uvXq@?Wk&A2C?00)*&J9&it%4}YD=tx#sw&K%Xm>Sbd- zu$Qrv>o!)bf_AXVU|T#hF;o3zaq@AVemAF5_1upABRMOZd`q3;o#m#7zCR=X;{I0B z*l!y&o@DdQ4{e$K9ANDDp93n_4 z6v}eUvoKE2>zR+=-Yem0wU+i!LJDv`PwMVoGk*s)sIe*{tdUdGQ(>BCpT%f=(n=l# zTe)1LX9K-O+0Rj@^LYb9W%agHI!x$CqL>y}`(7SgmdO zlGN7oOMyJEsk1XG5?X$!A(7N`mcGWiLyrB_KpNX=yi8^HpiSOGS9nXznWddwGvzS; zg!Uds1Ks4}giq3^KHbz=p0D^tnaqS|uY&tbjj45IWx^cP5nD{_pj9#%vW4!lpl=-C zdEcPMVPlDD9otrD;=$L+Nz9~_3-1A;1BK6-EfO6h#6g!^Gp2V3R)=207q?G-d+B26 zE&NKM4*JxG^zY*$V_q{m|Ac+U|I~O=pGP=zq>^tgv60tfE6$UWRiXDF$rFWbEb*so z2mgM;uK$r8m9a9>{Uh~L%)lz0$;slj%? zGiURGa|lglqaF-bm%+(<1{&>38AtDe=W1qMYHMYiu>0rkNlIQ94zc$N?$k51;X53a z5tv5a=;e7npxpR&DvkR1v3Y*+mOq8dExAINad$elzvY(MG(4^gd0p;AglwDNaxd+6 zb-syi1qc4$Is5516MU;{_+VW7&S}pwT>UcKEQ2DGD5l~3NHv{{3|{{^+GI_Y6T!3} zrqgX5xLwnHVZzqaB|Y0q33s-jfTRH8M z;IvJhsWp}V^OV06zG^{D@x^B7!$zQCs@%{;V@+MiqWzSR%bw8iP&g$6PsJqNNrWC> z{MgC8`!O|NVyW&OOgRskk}qw`-XRR01QxO9* z+&8+vM{IG_w2LGr{65ig-I8W7cwuQKM`jt+@cg@VO7}bS@G@BcfSG+t^wRPR?xKii zeUJ3Lr}OP9n0Y-9InD1w5A4V$Gj1MCH-8b%IJF9jOrV%97H;f&S58zzdPgq3Mpfr2 z|IzP_Y71TP1@~Mc8I#s1)s{aL7sV^9d+$y$jglpWHpR^ban+ zCwrO}k+b7jQ{s}O1Tr+bo=#d`XOTwM@CiL?*r}`tEw@XFrcU6}+}TDt^w|guoRK6q ziMtL^*UZ&E)21GkbPaxwg=2UbQN-B%<#|9&O-6W)*?Ile8M45yCUlrb#+cXI+R-xq zyqI+uP6nf;{bu;rXDK`k)+tQ?4f!jIUW{6@wDdEg|CjZE^Qu2w^YsEv=YVvKusG3a zh~4zOO={eJU~WkHnUKrLv{_pbbD&^6xAV-*x~5}MrC8)HdTj!M+=uS|1soYd%2E(rB+U@WqV0^t072&hnmnl zh2zoc0G`8eYo9{?<-P`Mv&y#NEu{F@Jkp4C;!(jVfBmlUId7e!U2heeZgNNLi-Xon z^>;6*b5#$f3(H^bi`oZiP%g14;NG<`I#dA>M@~h;9AhWjZ@P`+Pq*_i_x!} z^V-z;9OA4k-@+zt8;!PXai8l5dtnb>_AnNIrHO4%yTn>~C~p1H`XWf(N5e>nX1`nIDUH(|XfWTkrt(2i^x}RenSXI){6WhhO8`393+r zEgk%B=Giz~z$_EGAy6vIRg9Ngwx+i$Hi=DS8eJvOPu1wst1#k7u9|pQ%+wb zl}_Ws>7A=7=FxErYcbi^?^SVM-BtX35iVEn{iki3xbMl3a53A*9jYHYjF?7+^A>+! z+u5f%zVwRP#fhxxx|OzwnKh3B75ktLr$%M<#v^dT&ONpHAAf zJ2yOo)Ie(OvY*@}?J_?;QfxzW`>D3P8`Z@B%T(}}yeVg^|5=mPH@fhFoNN@2<1Y&b zPPg0F1IrV~_p6$+ufH4*iZAfl)oJPGjVl+#HjPjcXn%Z0Z@nwX5&P!=Lsh-8Q)j4W zPcSOdRJY}nX2-c(6N}huvS@kCkIs3)V!&(LRM6d#(I+apy%r{I^^G2nwW6TV_4d+` zQ3NI%pYpH6@?WG;14g-g<2FEqy(eG9oXG^qm`QSEX4(=o^DhcOkFpJ>70T|-p)@>BovelYuX;vlNlKkQI_q% z5fN=$v6FI=cM^Gy1mKKh~npPeaaoIA%U=1yeW5 zCl|L|ysn}!GZcv0_CLr0Q~Y53DYWEWoAW}hsO8ph)LfP)C29&?Xo^2=TgB10_IaEV z4Ub>cU9G9T@aMAK-Q|L4!-E?CV=`()^!Y}}xs>uu?3N^TvHU&ryFMzS%-l8sYdy`d zYt*TeHnw?Q&MxbD;Xm&siTb3FrNwr7^-xVAX4m{xkkO5`T0r#oY1}%bS{F||mIS&_ zn%;TZTDNrat(3pSUWm~0Y_CgO5@?ReaX*wsM|p0fcYo)@Y2&y*q(-G?QBJyIdLLP?Na3V z!0^r?RtvkgV^B-y%fJACryTMkX$Gx5z3T&<@I!)@=T(F|8S?v*$;+mCEq`g8|5{?k zw~|*P_8lVkan>Z){!pYoxW&Lq%CUV$oT2_kQV^^22qiG~o={Iu0Ak0Zz7cX=o9R z-s|9#j;>;>s!3AwzxVDZb5Q6M*vT$PQYEP&^-@G$yZ972uRRQ|zh)(Gv~KSH^yut0 zCdKp0Vl{?WyG`Nm)%(&(Y$s zm;u_y$V4Gk zJ=28ZB%@~S&8EZQaL@D`2B!|r8|wF^WIG3%cND+_vmuc^OLN-mMtAMw=UD_KO=J50 z@Uh-@+M*IxfT=#Tx#86_pH$AI#{eF>7Ed?J#ukhOI4eD>+#c(4utBQuS%}=k-$mTpOs(9Dl#ZuoO9oVUfCcS}4E>Ow4 z<|-VL2wQm2z{!bmuUpl1hWf{JpqWcdciTb7=_l%6OGO`Mja2a`H@kNksPgnXKa%(5 z`58WY)$7Q=oqjLP0bs`>c7Bk_JA)nV)}rd;QTOZ?)}H@JkS%&W3KR1JW0pt48et z!!BZP&Wc+n{p~qg(uK(B*{+8hWo_UV?jE{lsP zqBL?%WTAhr>fDt{I6PD)*agvT6rw$;<) z4!l|^_;@?0E#BtLc;79D_;CI$&og^Sk%qtWs?0}HA>Z{p-J(~Mq6UB5Y}Z3_4St-I z#qV)QC@41tdnWl{L?F4IDq*m@G1`CMd0Awo;2}4XfZB6Q$hf+~5WnSUZSL~ySoqV* zAUrc43}IdJ|_2ZtN$wFV5%c`7r1P*-wTWs*di*(gv32p9?j&5dLN#6FMrB z-@1_RY5$W(NFP3Ts@VRgDe8Flax8@SXv-ii@BF;mAdT|;9MSUZ#^&64O-oGqg*EG| z?XPn0Hy=*>;OCs^e^>G05e}cyK1a6Dv5K}_j^a(t`TQLno0#*t7^SLZyEp7od z$h7h#SIghgpCizkPlo0qg3Dzz8^qGIy}F5-n}dA*#@$6A<}Rh5Ad%EQxt5(%mpf%d z1uZR?ad^i-WIEsT^DP6tQ6&H5t(^DYi`y@%$9Bw|ZuC`Bym+9#qjtU{(LFcy`9jjG z_-O99W(@oSx^?TE^6EKj``{dVbq+eC{LI`B(O@N)P3wa55?kLEHM;$pr->Kpo}^vN zPXh;DGIo`^Fjm`bZXFfQ3{ZX@oqvDSs}`#~1Ex@HyDsxR(%*iz{oa&?c;J@fU%_QNvK0z$k)f-dFT zNIDcczUBDj8{*{T8_~A6s8nE7409+AF65amMzsuc+O>2lpxu)n{#KXQeW`SZ`*NhK z`-M!-wb#7;wt}k&!6vb;lSFZD|m0i2O?QQGAaGpMfaWt*mfSpE8 z34g>)Gc$)!Sh&db!FKsfN|xsc%T!`C5NYAr!NGFbBz?+Hq_+Yg>C%ay8t(ddURWSr0KW2a~zJr?5a`Uli!(3l>5n9npZ(7tAnYIMtq}f0J9F3HObwJNe+=QANQibjN}` z>;`TSe>q7H*(>&$kS{;WuXO;zXF%caxtMPQVy#BE4ltQ5Aif!#f{-5QLG$nE=gQJC zYz1TQZY#iUq{0`*h%{XqX{*MUZWCC$7vh(wTVA`_k*3I4W?)>^X3N00keA@BDp+gzo3vJ$G5temdTziU8>)o$dLsM#d=K9AC$GIHX)g~ikK zb#im@POGDTO6#DE7gkjS78o0uhs_)*cRwrlyaqVCcNNZ1L-SgsBp*Wq^`m<==!qCL z61fTPGXW|3o0HknE+U8Pxz&tsRd5KgeW%@rW%|`)CGj9$6cVEIXbG&foSn1P?Im$R zWMjT?y(49QoKeji^=?BltaKwZx7XnkFfP}<38KNBF#Wf+nQSJlw&3@<^F|GE-`sCf zMQRCZHx{hemR3s_6<;n9ltm_P}WDkRjI{6-MPrNBi_0d!}>gq zty6Sw^)AkHDYm~NG>h4E=t$N^ae>)vrEkToo-Z^tYcW>eH)+3*A;`y2ebPa4-ifF4 z<=&x1xzl#3#C48ZlG?|bhEL*UOECf}>e^WcV<)Q=r?vF1yGBi7@OVhS`RXzz5$rLq z%ifUC+4Vo$GB`2 za;$xDN}X1w56KfOYX!6Gj&}BYa&7RX*t|TL`69b*4bsJ1b%lH}{j#(BNj}Ni6s1n1goCgX0?${62){*{$ENl)yxzkMt7G=;XT$I;Kbm!K zA3o}JtN-H@2kq$hlf$1mDgD83Zqdvz-R&!g4{!f`AxA5eqm3mkQfrd#0$8QE_Ef^* zRA@YW(Hb*=2Ym8T%lEt;cv>4?O;xP$X8gtUJwol?WAv{97TsnmV^n1r%z5`-+1BcP za~Qu734YF4!>*9{+T_KS+-z`JkDbUI|1{}`q?Y?D8zy5g;4#C!+jG809EYUrGe;FT z2G$s0WNyP`ya5fI6dQu=V!~4kor6I{6>#nL_DyKdG{mla_HA(b;e8YMqw_AdZ$s{5 zX(|xX9BfEObVf7Wd#?xcQ-YHXW&rZ(+*306QN`~i z;N$Wzi^SVxAf7BN>>epMwA%Zj-8M*?89P9X7Fe-vG2^oH&bVuhz9a>LIkEp>Lc>LD zI%xOCb$^X7k~0Tic0+T`R;M@aIe07ihE=1dUAq)3qe}OfhDn>YZ>kxC?!c>BonC1YkS`jliodbFswM52(pCpw>b)0;T@z1idHW43 z&hMK6$Zz2kjR+n81#8wr)qOe&T*Meh8S$5e-UsHahg#R}HE*YmabytF%=EgyW$jdS zx5nZfz`T~QRa;?ko={@q&GM>)^j>#S?fa+jZy0`6@ov><3;HZXQH!+6wM3-S-|}mX zW5+6#MSK_Z2VYuf5y3JSaBAPMGM^n#pZ@^D;k9Asq2c23XuQG@Ljx&mYZu>r(i@Yf zY54-_uYYiPE(+sAyUa`w@bwv#VQb|$0s+g4b;AUyiZ(MAqhHO?CI_1ix6f>c26Yrr zgKr-jd}e|aO4qdfx+f3+OZ-uc@PnD7n1@*`ydoVNbdq9>hS$K|_77vX(b>tM_;!4& z?;61e{U2GkAXm!Q*1Csw-vHt;vc$NH20|(a>up~T_-oYA+%mpue5*FuYb7S>m?CU% z+`o&b;9LiuUt-ey-gm6R^)^UUy^r`vd1hGOUfdFqw{ZWimXdOP&kSvbwQ?fNmlDKV zu0l#uUtMr={t3!zVHaQu%#}VgC|}fl)VKkyfn64U8%kGxOnwbFK$`hz1Xdf9%6#8? z_vw*xNr>33zapT8|WLZj9ZPt0CQ9#=Earp?T!*v^L*r zT1I?ly}rKnOU63`%l37(u& zMKw>jQ}s7rm3?>fZ37TSI|7po*9B~L7bv6OZm62Yd&Ao_lBd13butC~$tt-j0}q%q zit{L@L2_=fwEJdx^1Qi_{}WBF}%=9xw=?e8}e?_2-A zXT!I!S~gU{o!NNZy-*>yy8K#a*KqHY#?97}Dw?L^5M#8Nsm&poG{P!&RLt?udXWvK z<$Jf@?vX=!&&Y7*K!KV~a~EjfyH3uAajOeTsMV-z{W%F>GWH+$@qKk7Orfhr1|pP0 zG6R%nt4=+EDf(|!39a2XHpD%e(a60XHW5*S#BT)PkgCgyJ1}<1FMVqT8*V?LDlL$h4%F+>Yf4ZAF3Tqo7}c#?{Q{|)DE_M zuvFCY?qt3g-1Q}9zEMm|+B)BYsrm7U!}n*=ed^jrHmw!0*YbT_Y6?5AUk{jUEm6{O zC;uWs+)Df8hI$Jce5agMSn>Vc8IH_hnI^aE^YOvS`Zuw3e08v2xicD>_os}QX)+Yb zP7lvBLD?*KoSB6Rz-eJ+^J0-t2$K`M&yE$3b9i+iWp*W6EAtylqwAI_zNf|v;?IoM~mW^N(0dXG31o4ip& z^U;*n7D@Uy*I{TiRkBc7Fs%*H;aw=rfID2@#-o;}hzY_IAbWg_jUtl|jzg=QCoxFX zzq#Eh+=Q$8f(p)M77F_EWQ8-D%UYIMC(4L|ieSaBFEgDUrPO$Kk4 ze8OW2GtB%f2=h}++Afw?+56#roLif!KFhSu)EGzQq{fe2tMZgbi^`W^X zYH13keQnrn-X2P(J_#ZsVxjEJW-{)PDViNz^t6 zoqu0epNC#TT%wyfp3^EDwwTG5WELWsZHes-r{W~`(8dzyTX9j7BGDqZ2tUO;lC%is z-cicXemkN7>Ex1Uc!25-FD*8w&$MYK$Ij0?5uxjMCPhV8754%IzYl(A;SLUk@yf=_ z4w`0GjOMR2N{JR&9&eoPKdfTN1_K)cFHr-}43r6&biAg1rVs`EP|s*SWWdM*m-oAK zVsWVAN`%tZRKU`T6t>*rfGj1DEV)1y77U3%GseeEx-z0le9gJl#|5@*V8{gw&B%xr zXnMVq5LLRPMf8;%oR>=geT9ya>Jd2>40>7T(WuI2-eC%(wHG^lx?zkd76?D&!pJf_ zmLSKly2+$&kg7D8C5GTj^;0ZA6N~U883+J3TM`9e&#pOPi*;^>@nBEksunlD&&d=I zggXdA_hL|CB#9&3GN5}FBmKB<5EsD?9s?znpBYB^;Stvl+#-h9coP}p&8`Jwhhj^r z0t00Op@@lzh?@(5P%j_@<(%~>EkuIrKHxg&0#OLLK@ZTGsg@SCM=+n*|m6V zu@!Bv`hh2-%8)XVx+*AT3azO^%B&v{B!-j;cTmL0vWMuirDaikx&@ECx)Ro+|L9J(r=`oXlhN#j)Jy`IZ z8dz`{5Xb`v1TV@gpuAMuyi1H%oLR8<3K$2684D=Il~D@){;WZ2)?RLAzewjM&MW07 zxB)-3ydKE5tqz`JkYgKSa|FW=RUxf*K7lL}M)nE$S5dTph5ZAZx<%z}5ltfUN1q)7s>8Sm~vK0?Y546XAiF&}b{-k4irCLAviCK2da9OgMl zK1P(Gn*RVNq{nnL@C56AiO%F`5DrclEQ#V+c4<^eM5Pg(d>C0AZdpiL@a^YG%Y$Cg z@<4w5(j~MwiTGi!<|-Q1Sb9<%VlW^0-DA`g4)Ax1NneM~XFOvAAbFp!9l_Kc-!Z3DR85A61{ghq9}8Lcq0;Qa^4%h#L9 z3W1#h;bAe@&%ir&;EC(aB84;#>&>gb%{w1@Z7?$wiGfm}&P!!Na?Ki*d3RAWA&wjR2h~s#$0@%2iF~rK} zl*F*;k-ooT648(sAE{`8Z2Ee0V;GI<^M%kaDB<^jawgpTiv1L`kk94|WXQe(JvSPQ z7Nm;Us;=iN7G?HJ(1ieH!EWk)RU^2+agp8Hse`c)4Ts_BevA7FzIB`aj-yZ3yk9BA zVly;H41r;bk(J$8(^?eirMiCc))J=)8?33UuWG&sX!inJ4yR>v)Yakg+G5$x+fyFf zN{Lq(x6~C7{>iL2nWbvo>#2#NvcLG9g|>h3TU4Y}|M2RMV~dQG>T^SoL^hhGncLTt zUZ3K0VT;kt;{Q7mN^!&jpTF;c#xx|Z1xVk0CtXh+4vqln`Z@mE$qjFf2M)i^Gb6-J z$VE5234UyNLvg(4!cq7QfB0VUD{ztK-%+Zy`Uxpo0FIP**d;`{#31JKB09~X>Ak=3 zZFqn9cWCfJcc=ok{qM1B^b}S9>;NO#krKr%)%D80#~z1<;9$s&G~mY=$JJ_q3s$RN z&F=IP;g1*RC_ItsDBN>(w1njY<^*6OXydPuc0iL)oJ!dJ_vFpALr~QFAG(TBpgryz zaV6gM)Q(`?ZP5Dv9eRoVU=~Gi{38JTERToJGsS`SxEW^gIj)Xf4r_Uowy3|7D{18g zVwC}*e%P~qbH#`Vr74?VeSd)cHj=$8bM^hYQjtO}D$^ zd4LB-jYgjHVVC!I*$)SzX_d?4pBI|~+Zz3^Q2;1|e8J-z%o{J0-79UkApXO_N(?|6A|e2V~w8%Q+H z@SLTGvR>FAgQlEj=GXb@SwILB(sf9oF{$#*hu@)9mK%zK*nfKVJj~>6GFZeGA&dm* zYS8PB5u~eGQce<(x*>uHD9wWFJn`ffc(WO03d@?n^!62B6(`SzAc81pp@8MS(La_S zOlVV3w}=ClN=ao3L|TKU&rOZGO^J_JKtKRc zf_x$o`;X@nlYczpOs1}QYCy}>^olmQLKr&#S!Tk&Wg5g!x1z+yszhbGuqQYu=PKo3CZK`kg=H4D8q6HU1j z2ME%M6DrA->O8%~2K@T7kiZf`I3SCH3I3u?WsrgP6)XS%DM)$#B#zBw5FaA#4}1_G zyEh9wDC)bc5c=C32AV|A>FfrY1@Hk73j8CyV{QjBDj1N}hL#7yADBvJD*>2v9Cg?8 zynm9XjPbCeSU&qNmIcQpU|;1R#YX*NM(7Vuuj`}#JV|Y9+UA8S zn?c5_DzKZ>ao$GSR)O85VG)=7@D=N0Cfc#96mAN!FF(s3^E=TADEX(S+JAal*S^wI zo5huVn&Uk!Z!(!3V|@8X*#3`@K5Bjo)@c+KjH@K-#p z4T@vcKf*B-p@G6Hh%f^m_L%8#I>ZWRD!iailA)e;9qdg3dr_q%Qh8q;pnL;UBNWtv z)jUB#JJJ;r6m-krt$}w!>HEUIE3h8YX~ILc307#^8D!Yj{KuBPg!?F$bAx|tgoxZW zP=N8=ZS`9dMwTREEs5}y5M7j|CHOjq|Mg)#wWG&ujyvz0)cxyKnR@_U9*{C~;s;gUsc%)zJlopP| zLVasr-5PStz+`{SwD{XEn?oTpvo_O}h?sOFftZB!(LyqOfd4T&o74}k*)@je07&?N zG8Dr+!@zd;n^+FYF+2|ZUPy=oU^h-IPWuhW z_X>2OZ7GM*TO|&3FNp~3Md`kdkew9T9#Qf=x{x(5ctst6k$_y>02Dw89POjO36D;V&78P#34WhhxoKRw19b%2IK&c1$J#jYj zaOhU5P^}b9xX4n8pknddUX)NR+y(^I#_ir>i_M#xe<`jui7V_*VNcg$0 zZ)UasB-Dg7KK`8-i?|_Vq8^Ip>`f49`_?l#K)QGYv>3jDu`g!HyYbpuA{#hHtpzwIF-Ebs9)B4L_}7Bn@0|X=0pdRh z_*Wcc)2_4eGG&82OS{bmOa`6omHN{&(e8q?qtb_F4wvXwa8P0*@dy8YZ{MvKPfUYj zCV`_f2dgoY*g(W2ju<5IF=+yQDD(d37|e=+Z#~O$zQM%eljVv61Q00re;vU9We9d} zgEapCKQv?!{6Th!aLfhvS^W0b_0&(xs^$fnUY?cxpNal6A@o|q2Ji%gDNwiqO42X> z56pq!&hF<|&h=1|27&*pKEeH8=hk+Q^O2&{uhF+LQa%E~t`3)Dc97X2d;}p5HWZ)` zW0rvbH;_Ofnelu7gJMKFf5QA=Q203vTflh+R`I`Zku1Oz+B5GIC#CZsZ1h8&b#@nC z59*RM173sw21esg{)gpz5CXH$u0mkQ7LFJluF}F5PAIm40l-FQeu_#1V!8$&k{>x{ zl)*q=X8m>yWs6Yl_gi58bs-yIks=>4gc}@?4gyjr2AQ#8#f=JOAscN)3m&UHD1|{W zC`JHa=tzheh(Qn?c0Aw#WRGRJGfoPU+GFi(A9*McbRGkMY8_JB3?RQy3z$GU;fj)| zk>HBb<{wW_htPNL`tpzh4%mM0=0Tiu2=#lXE_pM~*)p*0B8QoG#<9grS5fu(^=vVO zN6${nFE6Ecp~3IKau#n8-@O54UTh}Do7#2vREb`KWq=(bJmmlV0n_Y5fXYE_bKf3S zK6xu7gBl)#QdRXSwAi|WuSS?zF_xKt>&Q0Xs^3PVI>L2lJYfe^Yr8KA144h%F9Pj> zB?SQ;1V6me0n>L-V|~v?euiGjbC81Opw>*9)1Xvh*Bl67Nl=TvEz}l z-~^i(b-`o?L~o5_DKG+(t~5oKpK7R*Tm{zV(veHJvhl=<2=`>9~jTC!2$SeU>u-uuJOB& zJ^wGEFckkI@V&3^`k=X`F;Fqu>&H!ygHa8MEfoO*sJYTCM28MA5_pwB_lG(bz)c|n z;lPshi$Y5Ygn|Tfy^p6?C>{g=ECv}$VPN_eTJUr##93wjk8e0als` zL$L%+2h^T|lm%G{rS>zhJe1^6%K@cz&`>}*Kk98T=nMgCqxe9*3$U{P#Rg;yLlei# z&+7E0un8cpyU7*5B26#=(qBt57_gt&Hppq`AtWN6`~W%%cpEi?=ftgd#}mT3!7cV0 zSGO?Rpfr?C3ugwwyBUP+s}tbcjiSIIZ-7QjivlS4J%AFr0kiZpP;^oNB*K6d_x~;z;^cxzw2@O34TMm*C2i1ZD2HT2< zA7TR^=qZgwC*}Y#s30X4L@Bb3=AKd-RVfg$GT};#X9t!b+9*iq)em@p79(wgvIwZ4 z03ARZpW&gXOw%VZ38KBP*B zlI!H#@d^$%Kgc}c$+=;R*q>pIJtdj-abe@wpVPPj-BlTVVf3%yMit(uGFrrBD+Z2v z6;d*87Uh69Af>HEqY72Y>9b=2{Tf%Tq^nS26^z0{s4Z^SB5_sE4y?Teb*%Bf162P| zs+>Gmhr-Zv6NC=%b&#y7E#>PoNXIF6=4Wl==x;(P6C`_RVkGNTZ9WIyMugTj1E{{$ z3!9+?_w|F&JOZ64T_uzc5~z)XT}L=h`k%7fEg34e`~DrMvil)Z!yGUIz{}g-%ut*L z7Xi_s?tdlg|IGeK3l%QKVt}sy(`{(B{lC?O+L)-i3$p4z$s3>w{(npUzc%-O)_A)0 zKWofFUabuvgfmAUly*Q~uL9>hx^`aoNc>Ty)2z*v>0Mfg$H(6_{vUmIo{!l877L+U zTM})Q^}9h7L~;L%_%%SO5afr~0EdA<9Ytwv^Y6zX@>tiRcFWb3tC%}?WhGRFHg{V? z*P!e^2)sNqs1EP{EDi+9T}Y20sPYxTN@2Bpi)ZeV=8-@Vz*L~B0w)Dm`MkIpoI@>H z5DfvCxY#@Z3pMEi3+3X6I=5G$>R039S-rN^3sv=0FemVmP91Ilwu#+4kB@&D;msnF zsfglKvJ>D2T<$scp+~>YRdN&H85~WHmm?dw$lnzJ+~%vpW`#T5H=4({X+R$x?7bGy z^3nx+t~3DEsYiuY(7#0mAcIpq;5nc;j+-V%VFCj?Frdf71NGQZl0m&|j~qBt6qFY{ zqVS*(3=mC%n5aNgX>bLSKLzhz`{u-gm~wx!gFjIgk=4p;juO zyFk`OQ9zY6pn&j5#yM?i88b+tQ0hUkNprg5cbsPiDgTn7f4uqM;$`wcA%7AERO#^l zarKr#aXnACaPS0zBv^0>5*&iN1%eYKxFxtQ?yyLJ;O_43u8Rc;?(WXw4$HE4^ZVCZ z_1;_i<=K%wGd**JbfRZ@;J>4f|E#RPoyh;U0)z{~ ze~bhR!?mBNE}X^x+zzh)B=rA$66S9I+k*f6*7eN&x3|4;#dD8N_Mf8n0{mN0kXg2_ zkFa85)SGE3%kt{#l5Gy(k!1tBTbKKU*7pTlOB#kDiu{b?Pl&d+F0C1GwkmTf!&M8k zQF`^bdibL839Q^QXGn2S`67U9cdNYN=``=ARtnr5g)S-KKFS# zH8sU=PW`u)vT)BG+=AF>qelIY6O|N3IB<8upWDiJ29s@;>GiI$|EhH=Q7Ye&GFrd2 zfLB?PHc9`W^zDT0!0tp}CSZ*rljk6q+Xlo?+y!Ay<^kaT0`)~1_6XwM1U}yb zA<9q}=nN{??o0a**a+-yS&WN1*3yIMIuZXjj{+6^HZ% z$@VnMpzqCT`ZG_;wU5wdfMv%@lKKolHsp00&m5o=Qd6&#-9rbgo-rpk?fmV??StDW zW1ju-mgdAuGk>cYP+53SE}OYQIh(4^?$w-J_bC3LBbG{^l^^x_Ho#LpffP}V_K!fBAW z&M14M*lK+mf5qXg);q58Omm9#-LvdT!i7uStfyNPWQk^!48)o>uhQYezj>s~5eL&D zaigtlJwI?f0q%O{t{&&{;Rz1EUh1;dxA%&EJ&uvJWBh&1q8z(p&)44NFbdL7v&Lsp zsw8apZfdo$VHAu9kA2Q^(UZ+QfAcjtCGE@Otq-bl24FBNQ4b->unQkBu*Q5{7ai+# zvX-pFHZVXia0$H!STR~^Ch~&Q<0!CdC>EgV&Lu!^^YP#pD2dy=9eeadBVBOsJKm-m z#QU_!?*e_HcV;Krm2)8v`O5Q;A!`Fxxt9h-^B=yo^bMeITSYG~>Xp_HZEOl#H(BBO zs5&?#^=e_(Yz+IpR(48=9Q*BdE-1tYTi?Rm8fdbK9BaVQZ?Cly7KE)I&KCNz=o)kC z{1LXb(Zt~>f{)u&mo@?fj4$-8olG@H@)f+PNQ)T^-q$tBvz_A$C2a<1@p-n?5!a@0 z)=Ih??-icHlY$|R*S#5O8z6ovXN@1tbCaAXtCSx6@q=*+p7xo#Z#_@AobKuh!nPrx z`v@&00)m%mlEB%6S)TBcL#f@2$RUz@FYx5g4@d-o>HtUZ`Y}^gN=XKZQ@*AjuJAr$l%+uRElEVv%qv$KW^Faf_iUjD5 zDw%WnojJrw6%A+zL<2n z@Jk`Kn;zpV7cdL0s97A|@I3-oYfM9DT>HE^?JzMHTk2rH zn$L~S`Me;g@=3`|k`~!jpvj{lC>yY{2kk^0JQ&car>QvYh<2Wj0AG`#nR`g}@gxi` zMivKw2WGO*l|mO+wdCg)PgWcz%?XrYXDb8y!8)~ko8;>P&r<@s_-XZ-Spo)oB>GvI>@W@dFS^oU^^X z1AG1|T3HE&5(tYq_ZYqhvK z>2I1>4J0d<*f!ddmC4$a_ro%P*JId%d6YZ37*fgV^H&4={6F_!uD{8f$r1*1=GJ`& zZf?p%7KG9;E2mFJM6$@qed^Wi_-d16v($|LRoRW2nd%sgysGx*gknwjvHZ@qU7}X^ z#lwTJFZ+`TKiwj_W50ymXmo+f{(xv3&)%!iV@;#oRgR5Nts(+fLc+A&JL%TWO8|7# zz(Z>jz*_aS-vsFFGrGNOZovypLL6heG&_06@kj+c?+35V(&nITHsP+!w%0DqX{)<6 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

nt~axAn@?WnH#<--9QioQLP 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