From d6be9a9da145ffd3109ddb0bc0f9fc2c5c938ea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E9=A3=9E=E5=AE=87?= <2684146481@qq.com> Date: Mon, 29 May 2023 15:39:17 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workTicket/entity/WorkTicketInfoEntity.java | 4 +- .../service/impl/TicketProcessServiceImpl.java | 74 ++++++++++++++------- .../impl/WorkTicketPrincipalChangeServiceImpl.java | 2 +- .../ticket/src/main/resources/application.yml | 2 + .../template/电气第一种工作票模版.docx | Bin 42447 -> 42886 bytes 5 files changed, 56 insertions(+), 26 deletions(-) diff --git a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java index b0f4153..77e63a0 100644 --- a/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java +++ b/hzims-service-api/ticket-api/src/main/java/com/hnac/hzims/ticket/workTicket/entity/WorkTicketInfoEntity.java @@ -446,7 +446,9 @@ public class WorkTicketInfoEntity extends TenantEntity implements Serializable { * 工作接收人时间 */ @ApiModelProperty("工作接收人时间") - private String jobReceiverDateTime; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime jobReceiverTime; /** diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java index 7ef6964..12eda49 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/TicketProcessServiceImpl.java @@ -240,15 +240,19 @@ public class TicketProcessServiceImpl implements TicketProcessService { } return; } - //更新工作票 - workTicket.setId(workTicketInfo.getId()); - //保存流程描述 - workTicketInfo.setCreateDept(workTicketInfo.getCreateDept()); - workTicket.setTenantId(workTicketInfo.getTenantId()); - saveWorkTicket(workTicket, response); - //工作流ID - workTicket.setProcessInstanceId(response.getProcessInstanceId()); - workTicketInfoService.updateById(workTicket); + try { + //更新工作票 + workTicket.setId(workTicketInfo.getId()); + //保存流程描述 + workTicketInfo.setCreateDept(workTicketInfo.getCreateDept()); + workTicket.setTenantId(workTicketInfo.getTenantId()); + saveWorkTicket(workTicket, response); + //工作流ID + workTicket.setProcessInstanceId(response.getProcessInstanceId()); + workTicketInfoService.updateById(workTicket); + } catch (Exception e) { + e.printStackTrace(); + } //更新安全措施 List safetyMeasuresList = workTicketVo.getSafetyMeasuresList(); if (CollectionUtils.isNotEmpty(safetyMeasuresList)) { @@ -287,9 +291,11 @@ public class TicketProcessServiceImpl implements TicketProcessService { workTicketDelay.setCreateDept(workTicketInfo.getCreateDept()); workTicketDelay.setTicketId(workTicketInfo.getId()); workTicketDelay.setTenantId(workTicketInfo.getTenantId()); - if (ObjectUtils.isEmpty(workTicketDelay.getId()) || ObjectUtils.isEmpty(workTicketDelayEntity)) { + if (ObjectUtils.isEmpty(workTicketDelayEntity)) { + log.info("正在保存工作票延期"); workTicketDelayService.save(workTicketDelay); } else { + log.info("正在更新工作票延期"); workTicketDelayService.updateByTicketId(workTicketDelay); } } @@ -338,9 +344,11 @@ public class TicketProcessServiceImpl implements TicketProcessService { WorkTicketPrincipalChangeEntity workTicketPrincipalChangeEntity = workTicketPrincipalChangeService.selectByTicketId(workTicket.getId()); - if (workTicketPrincipalChange.getId() == null || ObjectUtils.isEmpty(workTicketPrincipalChangeEntity)) { + if (ObjectUtils.isEmpty(workTicketPrincipalChangeEntity)) { + log.info("工作票负责人保存变更"); workTicketPrincipalChangeService.save(workTicketPrincipalChange); } else { + log.info("工作票负责人更新变更"); workTicketPrincipalChangeService.updateByTicketId(workTicketPrincipalChange); } log.info("工作负责人变更 原来的负责人 {},变更为 {}", user.getName(), newUser.getName()); @@ -355,11 +363,15 @@ public class TicketProcessServiceImpl implements TicketProcessService { //工作票危险点分析及控制措施票 - if (workTicketInfo.getIsHazard()) { - List ticketInfoDangers = workTicketVo.getTicketInfoDangers(); - if (CollectionUtils.isNotEmpty(ticketInfoDangers)) { - ticketInfoDangerService.saveBatch(ticketInfoDangers); + try { + if (workTicketInfo.getIsHazard()) { + List ticketInfoDangers = workTicketVo.getTicketInfoDangers(); + if (CollectionUtils.isNotEmpty(ticketInfoDangers)) { + ticketInfoDangerService.saveBatch(ticketInfoDangers); + } } + } catch (Exception e) { + e.printStackTrace(); } } @@ -380,15 +392,21 @@ public class TicketProcessServiceImpl implements TicketProcessService { if ("0".equals(response.getHandleType())) { Long taskUser = NumberUtils.createLong(nextStepOperator.startsWith("taskUser_") ? nextStepOperator.substring(9) : null); - //下一个审批人 - User stepUser = UserCache.getUser(taskUser); - flowDescription = "审批中,当前环节是".concat(response.getTaskName()).concat(",待").concat(stepUser.getName()).concat("审批"); - workTicket.setNextStepOperator(stepUser.getName()); + if (taskUser != null) { + //下一个审批人 + User stepUser = UserCache.getUser(taskUser); + if (stepUser != null) { + flowDescription = "审批中,当前环节是".concat(response.getTaskName()).concat(",待").concat(stepUser.getName()).concat("审批"); + workTicket.setNextStepOperator(stepUser.getName()); + } + }else { + workTicket.setNextStepOperator(null); + } } if ("1".equals(response.getHandleType())) { - System.out.println("获取角色信息" + response.getNextStepOperator()); + log.info("获取角色信息" + response.getNextStepOperator()); //根据角色别名获取用户信息 try { R> roleAlias = userClient.relationUserListByRoleAlias(workTicket.getTenantId(), workTicket.getCreateDept(), response.getNextStepOperator()); @@ -399,6 +417,7 @@ public class TicketProcessServiceImpl implements TicketProcessService { e.printStackTrace(); log.error("R> roleAlias = userClient.userListByRoleAlias(workTicket.getTenantId(), response.getNextStepOperator())"); log.error("获取用户信息失败"); + workTicket.setNextStepOperator(null); } } @@ -418,6 +437,9 @@ public class TicketProcessServiceImpl implements TicketProcessService { if (StringUtils.isEmpty(nextStepOperator)) { workTicket.setNextStepOperator(null); } + + + System.out.println("workTicket = " + workTicket); } @@ -599,6 +621,10 @@ public class TicketProcessServiceImpl implements TicketProcessService { workTicket.setStepOperator(UserCache.getUser(AuthUtil.getUserId()).getName()); //唯一 workTicket.setCreateUser(AuthUtil.getUserId()); + workTicket.setIsSafety(false); + workTicket.setIsHazard(false); + workTicket.setIsRailway(false); + workTicket.setIsLimited(false); boolean isSave = firstWorkTicketService.save(workTicket); if (!isSave) { throw new IllegalArgumentException("保存工作对象错误"); @@ -738,13 +764,13 @@ public class TicketProcessServiceImpl implements TicketProcessService { //1. 工作对象 Map workTicketInfoMap = PdfUtils.objectToMapResult(workTicket, result); //安全隔离措施附页 (true,展示附件,false,不展示附件 - getDataConversion(workTicketInfoMap, "isSafety", workTicketInfoMap.get("isSafety")); + this.getDataConversion(workTicketInfoMap, "isSafety", workTicketInfoMap.get("isSafety")); //危险点分析与预控措施票 (true,展示附件,false,不展示附件) - getDataConversion(workTicketInfoMap, "isHazard", workTicketInfoMap.get("isHazard")); + this.getDataConversion(workTicketInfoMap, "isHazard", workTicketInfoMap.get("isHazard")); //危险点分析与预控措施票 (true,展示附件,false,不展示附件) - getDataConversion(workTicketInfoMap, "isRailway", workTicketInfoMap.get("isRailway")); + this.getDataConversion(workTicketInfoMap, "isRailway", workTicketInfoMap.get("isRailway")); //有限空间监测记录单(true,展示附件,false,不展示附件) - getDataConversion(workTicketInfoMap, "isLimited", workTicketInfoMap.get("isLimited")); + this.getDataConversion(workTicketInfoMap, "isLimited", workTicketInfoMap.get("isLimited")); result.putAll(workTicketInfoMap); //2. 安全措施 List safetyMeasuresList = workTicketVo.getSafetyMeasuresList(); diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketPrincipalChangeServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketPrincipalChangeServiceImpl.java index 893b07d..8e6059e 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketPrincipalChangeServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/service/impl/WorkTicketPrincipalChangeServiceImpl.java @@ -101,7 +101,7 @@ public class WorkTicketPrincipalChangeServiceImpl extends BaseServiceImpl&0F5gv z_7sRq#x)wp<#=}=QxFMBh)9A1K(|e$%9)AdOYCTp@!GMIOxBZ|XEv5I6DM&L$N86y zNJ&rrh3#$tBnXlqcojfFshDH~INj%dPM_|^i@(~cR&pD6;69j#W@DrQYTy|As@3%@$^&;Rt|W}$4B)~kBW$w3e`yRca=onBaV zoO&Ujw@a&fRkKf3jgn>B=CX6DWLER$^0HCV^P8qs&Qk=_nJwY;TQARWz`y=v53)}cBoG#jU9@AO)FnAAtM!wY6ZUo1Osa8H5mn#U4(IzYz(*}kI697c*7mMU;WP}Oo!TXL9x1L$8U zbm#+r)wggv;&l$$tA#T#LR&J++vu|nuhE6NW@%@kfU}|qNRby7a4Yn04r=ARKiFD; z(O~()=>>uSBt-_AWPMp%uQ=$6`-gj}pSRG5qb=FqC%k_{gRY{YFFWYrx(Vq)(=4%& zkGg{++&l7ZVA{H4zEanq6<7R!M?4_yE9b&j%CD{4&IMy-)j3-$hc4Ri5lCRzx}-x( z2gwQm8bHNBOb2iP-j56Gh~}sl_rcdnKBN+KCc5ReS}yLEYStVZ-k{kf0}5he_nrNp z{)9lSiZ#2Vp=7syg$9IylWyypZq>pg|1ZCRqWu;L^%-c(dn3xXxZ?hQGtMZ{Wupd} zu4}d<+J@$KzU2NZ*`dMFJqG8t`GbSpMS6lUha|3Bx~*Fq`ofu9;13Id`;05e<{ApD zUU6VV2EigjjagOGsu0Gjzpkv2fFWs;_xn#K;%5$SecSx{*1=a_?LWD6@a4@Anll=7 zq;$o@qw)Rc`#*hj@cDy(K8#YZ=DBQ|B|pYTt-owWFso*sw@h=n1CkfN!LRj#QA0K* zS2k?tB9>hAt=Rgu2o;~C0pb0;(Ef>Rc|og{R!s}rZjw@YfnmK1dfD)dcaatZT0!=> zUVs)IrR6AtCP|I~JhPB1ZJ%CXNWhT{CIP%@d08(xihC<2Rt_0|_Jte_)ERVJZV7e= z{M%u&f8NR=eo_lLSLqrbK0CN}CFfeKdZBb~<0VV0uNo!Qg4YoZw8BcDWzj6H*?tBy zLICWBoi$Th)oLrcXxHKRJ%gDa(Eqr-20+O$9?Gp--OXHt7 zha$@%5L&@@EZr%sqOZ&F)(a3k0v))3;kH4cUpDq(T48J1s-jOAH08FijBb0%tsz;D z67+og>AGb*FX?7AhrYnE!69J2Y8#8THyHmG)Lb*sKyV*_m0Cwb-fh7Hc87?+!vFEL zfSd$>yF%*P0c<5&=E1cm$Ymp|(HW}|3Xm0okUL{FN}vS-5XGoi?YxB=C6VDtWGyBT zz%e{MD1c**C4i&b0UV8OW*~smw=~FS{A4?V!-ICc(g+U8ff@=SR}C1MD;=(Ah*&NV zxp@{W9J%#>3VFyLArD1xu8}TSJ$XM-H2e7A2_TMK>(Tum4nEv%{PE_&mtQ}BdN1s6 z(}>{>gn)Rz2Hnv)sMxV60)y-R^hmo@yzxeVl<3P6#i?q#_&Ye;?XT`BHRXL! z9$?fIN=z1Khh*a1vGL5o)7y=m@1xizkfbW{DPvn9IgFaBg^6MuV1Yp4(0R&;PtZ5K z{(8wQ>s=nAd(z1RHyhV611HgeaK2}%$gvVk3T1VnBUJ>XO!FMm4wEqJvsCf8Q^gUJ z!qhu|6f#|gH#qcPF1_i_dLKUiC=)Zd zc*G^MVxmr5EM)W_x)akuLf1|&AWMMf4RGT{ObL}5!vyy+zQK743iapCQ@p&Wyt;Vy z+;6-dhfDG1gJgBfsFjSmR_T%8b-S)eLiNsn{CJXKsgW|jW1`5ka=ha~Cq`1NqH~LOq!o(Swexjoia6!)Z_UvR~=a9d(JojLJ$;x zfkhJu!5IgsDAAnSCITV>EpnvVc1qoo3*MFUs7d80RUK-+VYagg37tQHlrYdjdB6Du zkNrc61md+f)ai>cx^B2uUi1ZNZ-iDU(ke1=Xt!1U-a4{{I)Gk=R# z+gbLQ(dOL9NOa8U1tKZqcD&+qtQn`1VGpCQFS3kC%_!}dEutuN!@YKd=`<(NKxNUK zd>~9GWkIEBzMXC(()270df~X=7>M0HN_tna*nNU>GFr}!1i%~We2DkJb&%74Su&I~ zV?OZjq({Gz1PB?hL?(HC^*tEcG%o*rZt5QQ5S>2br;q)(Dc(Gh!Z97K zavr93W-S&?dM9@CM3Ly+Zm#tGWO%gwy}b@R^Sv_|MIso9LJNTc84RoP6iis!OIQ&R zroOb1=CX7pf~kmsUhl^yougNO4`RtI=%<Gpz+by2fzQJv2*=!_gUk!D~+8S zM^|nR+>nRRre&@em`!kL;WZ|n7E_4HW=4->dZ=__I&SotQmnOd8M4(@ez!hm5h11c z4=5STza|gy7bje!1sU*C=zuAflSzsP?J#U2;o6+XUQ-NZ(jBRJw?>D5HFRPkwGg5{ zcP795WBl5d# z5bsyhtK}d z`0QTu&UdJN=MlW2@zI0e4M%t1I=cVu{*&uH&iCpq>7+n2MG>F4H|X^`G)IzBd!u|n z(!DF0q>m)&K4YAJrHc3AiO&-BP1_aSe_CT)h_L-XVcRC^I_KN+_N#y3#TRk*lMbqku=<&bw)U0XMsleSl7<1M`J7cmf2^ z@w}pVt^H*Eq8r?`McOI3|9U8tJmT{-hYyZ(XC573be zKYx65_pjjt7+iyeWjaDXu$G4PqpuCDsF=8KrR2iViXr3b|bFxyT0Nu{^GnvbOWG+(X{`LQ^-ut)y77~59ceWf& zzX*i@0;7mT=v3@cBNQA}QX4-JP@ktC> z?wT~4Sm%ATFnT!u5*p3GDZH*5RxGXBYl?3Mv|QE;Rn37iwrDI_nzg-X*v`wfA*bbf zBGf&9X*YdzV%B-%PqNN{1J0>LNwZNa>s!OI|9A%+s(yC3wZ3i#XYDO?2Du$tBw3C@ z??TKbpyCU6+c~7lB08sRZCQ7=e+z|h-I|~!bR{z^TP#Tyfk20*@q5Y^r!s_uvd%4;F9Iq)LgOd#^;!h-o6pT=5feCMaM?PUhpd^*!6*5c&l8^{O?tC-pG>9;Z zpffIM2AS{S=4}8$0vV8@Q*|j;;H9A_FoQJAa%hbD7+FKw9D}1d>-MBQf+y_g!|kbs zREOLJeTD!ihT)MY%sd6B1ek-fLL5__rQkEK&`mb(1%g~uDK50_^u))#$z$tq{*Y#W zR8pqokUtz>g)@IRL0%8x4ro~dvdDy9Y2Vu&0Er?9_r+GztQnI)P!&Q9c?n7s6pB*X zuOG`S#|f<&Q*O=p@YBnOyU&{MevVGb+57pIOK%?CyVd;I`*QHpU)wd{`@4;+SKPyN z@WP=Rs1p3gtNTx`yN@@nUOKw-q;-FP=Q%qws0}NW1d1|BvND^R)#*kWGZN8ZYQs>l zia?@6GRKgrDl>F@Wqc-cnas_oHcYDw5Sc*xJhU%{{28M-#6vSd=$YlkX8pa8?|iZgKeHrWp%=rK~tS z2@W`?hOWo$Ff_NCV)f`RH$!?Ap}9>vN`{Gh@A$?GCn3pua$L6FQ3;| z^rEF}Yxt?GR66xi>8hoF&)H7eVOcaw7GxV~#~bi0N`btr$`n3|Fz5{hfs&hT}h4VI-b(&$Y`kl1%2~$b3SogA~EAv>GmV&nBTEDFA3f99J0)`D6xPK z1@@2y6j21&!nb(HQiM#lcc%n+*m(u>kRd2SqG!rOYR;6k#j!~o+MK|1nQ4K?_x5Ra zLG(U=nJNMfc+o_wwoEb-$Hv=C>phPF_qK$16fIf~ToJ=dB4DUc`GRBxqR56OY+FMQ zhM*##RD4czmuhu?Ucsv6H3d{_vZ9>q8uGyEDUAxo_`G|!cDn!b#|Qs?xAEkQgInJo z{o%p>PdA%aZ=(|HTRZ!E?;PF#p(8Yp=O>4g4pvZPff{t`2bPYIAPm~z6iYg4>s9xQ zQQ1H`7PL|D+S!&}^{LrW%PVx~ zEW=~T49F`Zk|KIZNt87kRy2<_u5)+WVMn(JuS=_%WkY3kpJ+9sW73KuV!jS~)#a#4~g{63wThXVuvj0EVA0?~{>Ns8Jzci3NnWR3=M zOWU&Pj$|o+L<}L%sGa)InO2RBX%?oZiA*XB z(_<8@+`-I1u}3QZ4(HHlLLdRdg^p+-1gZ#g?zj$(;0Q%*z26QyG_MJFm;i^CY}Yl> z5%!U^i7mt%EaO!}=qNbD9v#Kl$O00Tk|0pOhsH}`V zbQshjHWOkiMU%Y17UP^hHju5}m29?V(!BOe1p4Sz#wH|1WV*`>R z18g0CRATX7v>jwD%Myyvu|C1BY4wXHs#OkRP(;C__k1+fH6M*&Oo4app}IWrI*GMs zGxFW(K0mwsbAorC_6|r|@78X;NxKk^QH~GAKKvV!S+Rq$7NQ7EQDQ`(j)-Qw8IM7u z?#?*lhl>FeCdIx{v9OJmnr@xbs>23@Nn=NUDBeqjW(-z>T=UL%M|U1Se|j%U9XJvw zfoZX%AUwV)AI&<>Ie$nVMrat}(4!K_HQg2NP5mB25Z4wj>T z6+o!GEVVd=a4NElNVV7Ly3A8$M(Vxr(+iGqmlKSHv%q##Q|}FW=z~_cUoO3wYJc61 z&71Fj-n{i4ip|r9&=mZSr_rfGbKF?IrxgPd$ugsw>k;hB2xz}%E?v+|y0M{KvGDKh zmr}{`{^9DD>lAYs!7q^Lo_H$u#CPRsU8R`>1r^_5ohAOc_ZHDDl zN(|3KQyj|^YG^wZ&9GwEtAK|IwHe9xBAbWde)HN7jVo_^Ve^lFYJU8QYwr6`X(LoQk)r|vdg7;lwq`|+ z6M+1vhIvfKoe(TGHK(+C-ZE+>qpl%WI;PuA2wKr`z2^gGH=dZU63TQueaMfF=j@$W z^i0;Jrw2O^4_dH=asuLS`aaS_1s2C-^W_uH= z{|^8F|NrbgTW{M&x_`y+(=Kp|@O}x_1}KW$1SgvlB#WNM1KOf(Ze-Dapy)c;#R7I4 zCw4A&vTc$k@oCc5Zrv{GrhC%FYdg)4i7DAn`3r}`8R|kyluVKGP^J+?;&4dKcfZWc zH*;t0(LbD-J8O;pVeagVWttO;Wev@pwXe_UBg5qxy;xLAh2b;cHfXoXM&a_vFhNK( zP0Ql2-*m|Wjk3fFBsc7Tb-v`i(o)TmU3PnE<#EFp8Fser?7#gSJT@hj%Jl~C2g-ky zLDx^T;>a*X!nRqzp=^{Ui#lio!-a3RNB{nJaM=Jul7n;`#>@7UKJB7r+9;WpqLpo_ zY-n((S9Po8kCuoE(a^Q&;@R?yHtzn$jHQ=#>l1x=bg22S31;_y{~3>ZLvti^c1E+b z^M#RNjujMH=J{c-)z+`spp~IXj#T)34J7~}G)a+O#}-)f8}s^vHe0m89r)+pxdfVc zmd{H$52Z5*4sEQAK7DYD`h*RhnlZ~RGH3yzs9g_QpgQzm1YQX5!Ex{%09|N6+N^C} z0qD&u0b14XTnyfSDg0%&Y+p7er|k2kLXgDnBQ7D`)-ip;v|O?=9@>gV34Di`0vDHO zi*AE{O&hn7JoTUZd`1I2gMK}E;Q(EYlFK`K^Z|!RhVy1)|Lxkr*0!_y^Zw4xhrOp^ zDgm)7-cUzW5?H{UyejM?m{HBr-~JXDWNXuU#nvoe8DI#1MbQ}7OJ&o#s7>o#!PDAR zzyzB1u0lGMfHsD%GgwZ_B#k25^XmD*t8c??PiAN`4SakkW-OyLZp>)KOa)`Bwn99W zZi6+NVmL+M$>FA8jYoeqvH=uD3)Z}!>|bQY5}n?WMP>sOnT?Xf`}u{+xAXh&whp#_ zbJlMi{QU5L;NAV8IrN#|9xI{`^n$VCf4eWA8yO}Eg7fkSK6+<>S2(aeuUo0{A-Ve!A~~Bd0h& zGt$&dl04h0nP!+4%@pg4dGIA%NHZLsKPtP%#GQ3lWAchoIFjO2*m^`C!Z#xnSm$&^ zvZ+Qn_DLd=9&BJ({uATyfBy=x9!rYe&;tAbfOK_FO&(~(QsX((D(DterRI!(8<~kA zATc9Zop~lR_*1GM#0P`OOS*>w_%R%8LkUs8LuJ0TkA(i zzBQ`+!?k&+^_}H=ANKCT$f&xpxxcgSJp1Z@KPt=f&eCINYuQ=ctgQT4dGywK^RLRC zn}<)<-QGhWcelF%U+{kZ(^gKC#}FX`%m_S{32+Jon8}G8m#5fFfcq%GO|psv_5Mnu zpth7y_xs^z?yc_+zP<}Odt!Qc>t5y2OZcEGtnFphv%22T*RXOdKY(I$ipomu;v)Ee z=I;CehW0$7&VGRBI}IICBbmN9IfE~<3aJuOKlH_4#*Ypx(;{^(;w&y4Y;8mRQF;9O z@bRk%mfDL$hB6Ur_4vt%7%SyPQB{>p#4r%C=K1U>@&y9=p-jG7J$_OqET7AXf}F`0 zHuB}q*+q~qFEcij$yck#Pe#6|JSS0q`CMkdaF8$0MXW4*rY?klDEZ@n0Go+Xc z?2d{<)=>8ol(jB-GRqO-=K9e@j%Nv=DNZR*W_dO2^rR@Vq(b&(>NWF8y7Wn6a!Int zA1hH~gd8DBasqn*Qsa_jJc*l2B8#*j%3w%?&6D5*GNaW!P>mTJS!Gm?iDSWfmcdD{ zwym5kx|uK_#0kgOl+j7CgxbL|!IjunQ&2;AA|B z1yAynB;-^z0iHyVogh!9)+fm_ID;r^jFJ}wl|IdrN*Pb$=8`aKj$rZ$EGihV3=Sp9 zEKl;FMozC89G0zBLI}^`w5xUz+_H@7Eo5SJVq!$eqNplDUkdbOUKA34lhMlBk7%dz z%5&%0i`M02n&lsS!0IvqH<%VxmJx#qS}B)f7;oD^j07x~w3$DfpahB!8e)9F*hW)9 zBGzMaRFDXUPJJjygf~wdzxojQetw~eGw@~Uz?xEL^-JgWrpwrX!$X#v;ssCwRRalz z&r57Xc;Xp#uO$O1mCQANsFGgk6cviNN(SOU5sc~uhKqIeyIp5x*DH|mW#w7(R;PiN zT{X{B1e0pnMIgjQr>IaECBrtf;-#2G7ze_HAJ7neg#BS}%+$>O_D;Y{ct8Is^daCL z%d=s~rU_Q0xaekD-`S;{25;5Q?G331^2#7FsnQ=Ov2c) z);uyylc>69yn>v%^0nPWVAYMy>QBEps}C@%+8&?Q3{#pi&*gbBB0zX}YzTz72o)8I zvN2iGdp#fn2XbJ49cuM*Xcj(T)l@!&4C&IijzJna#z9B}s@8}+#i)^d!T98;N417P zh>K8Bp@`|^9~=lWpo*;ts531cU4qQ1k|ZRsM6xe)9?Ny<*%B&kvnAElpDIiDod;i{Ovh)7&dpyx>@C4dFpJ`U-unJ?=l(qxGS~Q@35II4S6*OU=62WN}l)5M-ASHtqCHnJmHRc;g zE7JIv7M<|yMMetDX1&0dz4)Nk^n2$;bnQcC3J!`?IJo3EVP zgRjU^Lz4Y}?VZ|@7B!O(=JRjAa27XO6fo_B*hc{*!u0)M=;Stkn5gRL6v9kSz3wdRkg=v>&G)`%$hzEgxS2s4D-Pe`1=dMz$tSwg_E`j{h z?(4&c@0_KVVYW!&c$o+qVbmBu?yg8cqjDMGhdn1$29CrZ~MFba60k;8i_eq94 zSQzzxE{xrPM*v|Of>QWA8xm~MRw;o@_rgyELR^H33dNjek59$5Q3nUI48Ha{s>05+^l>?b7C2s@hx@Q@3e+gL z0>+(Jd;pOTTEBBKc&9tR*iVcxo?G5+V$3Ul&fuaw8CN)U*{$Q}v6%Ps3zeT&D~~sv zy?NJDcK&g<^2KZSi@ykIY5(oJ>KB{)+w;!)57nnPYN@0B?R(C8i?h?EhWmbl*QI2h%V{MLzQe1J;g!$QjSL1d@Zc+`Oyj;|2(lY1ig19<&75E8 zCD5Bhb!?iOd75d}EYNi8-rnp69G*Xas)!|jNSRe-rtP8E@XZJX^^!jx30MIwqH85u zU~v9(Z3_PY%+)Aelhb3Dr6CxFS1GYC#r?3eRB#H1f*LPqw)%0l-JlyYPod}~S4HWC zOWLHKvvln$R7j)HwnabK73hc<1b}t5iohjNaW#dmTE_G7&E)lTsw%K_F)%lOtx7qO z&$13Nq&KsXod!9m`=%` zajj%unJF5!H~u53AQ6jH5JkFwVF%+y)iKNB(L&#uKNX8$cB!mmN|i8#lqX0j0Z$}j zkdtMQn9>c5K(R8-1?!?^43c^Vi78~~axzCLGT7pgF~~qMNKC;lC98Q=7Be4Y05wP~ z0VBo9N?zpUj6u@LAiV}%R8CYxm2780;F}@LsR+7gnx;5`%6#f9=xU>X@YKBfPX&0* z7$gh2jxq=%b1WxIU>kDAAX(6LltDO&;OLx^z#@Q*K?Wk|B4nCTs9ct|$%3vn8iZCP zTBN`l;EX}i8+3t>mM0skjKooV0!f#nldz@PY52t`egalxH$vs!J71$7g`lcEfc^9> z22`I*VZoE#rRwhI-Bs0pUUnD(v_Fa+K$^^*ZF@ij2T33~SQlZCkKB=R0csZZG z32frx8M2eP0cQMlwCgfd{`a}7cDwKzTqsy@u%)ExoYlwN-Ax?!s zPRib^3Zsx@L=f>P6@oyBi*!+;h^xjC4iv$tN=Ph%p^bT+I$PY-TH6rF!gdk_cux@t zo{CzbCSm0rdg26s8hA6gl7J?0WgW(aIFcx7?cS2I{nzd>9hH|l>UF50I#6PFMD)(I zj#XrZ7ld43GM`o?hRCsXKLntn=UAm4S{!dGgrmKF%_Yxi7)jJho`X)1MPnsXeaw(7 z=tp{|9w0~RVh)l6$JI5Y(VhDbV1YvC!I%3x>(0(YaL8SMb7WGh4uy?B(hE@=(ScPl z#-tcEM9m~<+B?MoUU8}#U{KXWH4Atd^}d5|yRgab*z}Tpa?U_M0mi9p_bVTY4E`T$F7{C9XV7lD~zV0?`Y#wIEOw_kyREDKwe7ptI3>Wf>|^_}YST`(Vi=jP#) zb#UO`_V&TnZ?F$&U--sZzxRIr)5^+*v-YyO^X_-f(){7$?cY0#zoaZF7um*yxrVYp z6L}!gNjOa2pfU0e(*^9LWzLog7iXt?@C4HZ@hO{s9Y`0jjfAT1-T=DR*So)~+*x+^ z=6`=G^l6wj?v647BU25sJW|VqUq$#3p_&jB*{Of_xopGz0%p9ILupOxvu#uIeN8Wc} zD63C@ZyZVOxNX(FN6zY-)4|$d`bl9}TFR#f#GdE>AiT|VP67!rf;?tvS3zJhrdvIj z)YMUW&?1!Mo}rvt9X$&2KEK?m+};SBhuPhZ3`U|zky3*@GV%;X<%l@;aiTkyKvTnB zBs2-)n$9x%^da=7Y21q$(_72r&*QY~!3ey6fKcMUESs)MR!ss!@K}Q6!<(iGYdl(3WxJVZjikOxS<3NzpxF;mF#=jj<{^_J`bsT_;VQ5N7->%s( zkYtXhh0x8;)t{E#*c3qEW4^Hsfmv_poZU)zjvNBi%#eym5uBO~l*iF_y>Cv(k6s;r zcAuwHWZHx|XIe%C1WOWv%mo&frEWE2wtg{!{Ru3(MO@bc3^(*LY{RTIe}uY*`{1PT zetrRGV;c=DXZ=>?|2Dgts>az!x z+v~W}=OeFJU<4>bwyY0Y20F~cq!?C>+rvx}%A)~JD{z`Asqh@lQSrhUBSe$4npH5g z(m;{vRL$?CSJ%VY8_ZPv$>npB&=iS^S+5i35Z-1=r$k*|D!R1o3i>uv=4qpU_3525 zPp^IjH5k@jRzLl>vwGWEeB=HooEHq%U^vqXn*I<;n)Ah zd?iCn^4H!z;p;!f2YTxL${109VY)wTowxPra%!E;7_ou36B-|&U6=N3>!-GM={QkP z2vq>iTcb3INAV3B7@MyfQ_J;Xc`a4GOWP%4SQF@#?pV>XcM}9y$35A^N5p^ualIRL@o63 zhvRH5gY$8oeo_5yx3cnM<8@8VL3$Y4sWo`NJ$^Gho4?BmCUx8&Yzur06 zdg;7<=-hkQ)n*1!t&B@>m@0_KFskE*yr4zkH4}$ZeMER$_DVK zbgiIUm-PwV(o5rdji(C`S;Iq?7b;rk3*Me=_mz`Zz*xWm=%h$^dD1EOJ15Y!4u8@- z*)V6oOgaNouJEK`Jd%KC0*;xsZBEy3!)ayzE*#UyumBI`m@rKnT#BMM-!VCBdzT1f z<7N@y0kIiFv9P&dj{ngz08Jr0U{1U2{gnIVl3|Zefz|TlT0)#f42q3b{r;lCXU-qZkzT26d@ZX=rEEn_S<)b zIW@Q*Amu{9iv9F!rCs#!cw(t@q)I1(uU&uYxenz-LBt-7Gu2oTJ0=66xS zVAK*>RUOcL6bMvxNQ-f#E0bG}Bh9*`yK$tTOInR1b+!}hZg3$fht9oF3>$b=2gI;? z&*TKa5}V{LNfUDhrnjsxIN|Rje-wdNO<+MZm~e-fh-ex_6-BJwO!2VvpVaJz(*`%aLIQErN;Aw^S&qu@GDWL+KDSQ>Q3736p;07sTq z-{sQpnQH$kZM(}dG{8Rc%e7N*NNcelqN(qA<+zdP_e>AP&`aO$J z1(g9XCa`|b8u(F63lL?45VN4tVQ<#G#nO?9 z;$gUIjga-l2FF;}Nn?q0*aR0f?#x>8mWR(J)ej{y+0c^D(O#PJn%k4k09Kit?Si2{ zC+0QA5~?mE;md&wh2K(8e*~%KK(;u=3fLAloxK&0^iEKY!jn`Exk>Su6YijkVsDmvx2nV)S$EdY=E}?^fSx z(~j{>U@$K(%2~to`sN@I5MsOqkfO{olWyCQIKl7K;RDQqZ-3 zqQ<}9eEo7)#8f0gT53E%2oo2Ito_tl6(eLwN;x(+oDnUJ+}Rr3Hj<~0U0@isyccz-nnK1~J_7KqD)X49mm$hDtq5m)|`#@|Vg&;He= z@t|41WnsA$qDPw=U^1;ChmQhq;931# zp~9Y}_OI5qJ*S}s_K{!Zj%R1(9}~l%M>ZXz@#rJr?=@>B98Pe%@TkyS1b;W|*?ek1 z)B(&1?fJ5(8Ow@+NL$^G!+Mrg%{gbqaabGJuxAf^FXjS}9ntun?;*}Y2BOE$+DR1eqw7Xn;u3!0^_6yA`VtZ0RFjQfU zt<*l4+*zN5<#P&rZ(}$248|yUTr9t>BEPi4`_DS-qWU>k_*zVUuKgegAHwbOdt=(t z9nLd*G2`gk4b9SMbB9VBjH(|yb~y#~RLawDlV5Wqe~TM86n-!CKZtp6Z14IKFY$(5Uy?SvNyu(e z@_0NW&nVW6j3n>IZzXvw6iU;QhXzVt`cT>i5@@06uh}#uO(B1wlE(H(w#<^ofu+QT z9bLY2^ywVwlg4}D;@y;@Bg_S1Su3cVD+dT?A&W>Bw}P98y^qcZNJz*cpe)0!e_(<| zaB=&?4=%u#OmK>kvd_d8w1Py+(N?J>Le&i792?Z`OA&`-G@v14Me(XgT)Vj|jrAEVYOPT)_3Oq z4S>pJT({A!ck6S11^{8GW}0)cv9;aiZl^ZITA;k>@!e^3HY*O^^1r!+->K=ZgEyeO zSY5*RdhH^H7AP;)JTYl(w5tx@fbwE}3EwF1bgB&pZ$Jqp*>DM6uGKf&f3w-nAp=G) zd*RJmwb$5~!V6T%T3xw)CReSs6z(wIQvj1(kR(HLGQtB06|N1G^f^I$Bu=Cr2DUI* z{drR;mYVd4NQ9h>WGnb&1Zraxkk`+Cdj0GPI=T1s@qq`v!=Z1(4@rsz zx{8m{4VJ2jc?Q6J{$>`32@u<2CyNDSplv+pu1p;C)d^7W;C8Va!CPDjfe(0Te8(Yt zknpi29^jQEb%6Vf(Ot&9bGo9(vZFB0V*lWLY~yYK9Qnp>FXXp7e;%n7O?)of33g~+ zrz+(T;|xor``8d;kJ)WPoVf0jkTbys65S?f7l=0`hotYUro!klNmX7ZK7uOWPHgsX zp^fE(!UKIT&hN$fe}6B|tM>EyCAm;xa}l3i zw~d>0<=uNgC_Ru9iuZ)kZ=t3a^;Dy&7^C@Bf0U@=bT|hWb1-GZnf#Q<-pIVQ-Y8z9=I%``Hm|!g z0^0UXNLYipe-HnO;+KT~DSR64r8aNm$D;fe0@)uQ}JvBBc&J9g1Zdjq~p!*IGmt zw1H-B4IQgJw^>teLKwAzfx7#tVmea(gw{=n~Ge^HhZ7qSB)$zi4|pMOdu z=7^G1t#vyMG%L7OHX3@4XOvvCeD)$|9(I!PV1PrpqNS*+zTAno_btJ?!p4g9K@uIK zJ{|KLpaNBERCE9%BIG=p5#iS2E~2;~SJSQN{OVO~QJ|v)rYDLm<~iJy=X9)j7^aJ} za_iH{fAnLWq_;kGPdCyXmT0axK=i5U*N=C1$Xl!m-FH~!(!Hp4&6(D%IwjuzK(MG4 zgE`bRV-K~W)upz^3xPGcys5($M}@ru6RBs^8Sb!^^g-KGK4UIy~{_1h5Z#j=kvl{k_;j zZ}a)>7w;gw1n*HoTYj zDR0@V{_x{7IiHU1#eBjzZztnZPxdKe+x_xp4w<4Znq|2llhtMRFc4;Mf3N1J->TJc zJG){Gs5fQtzRZf{U0+iQx^cIgh}-(IE2_!u^T70W{$WFV;^MZt9)2zdLhy-HtbX72 z!<(upUzXL)?eMC(9CK!t)0Z)SQ#`cWVfN^x@?zdYX>CohE@wwR?u!@gsvHA%+f`qV z0wcp5nQ|98aH5uijAE^ve-vB{4|O@F;iCFjx@Ps7R#B0}IgtLk27jhN*^D#)NHBEy zuqk6%kQJ%6_LVpdxKw-xnV(Zk%y;1U8AY-f9HwZkBBq$&6r`9Wce~v9oMJ2&2PkQRrKK_&k10xM ztaYli!q&+c_gDijf0V+~yiz%q=1nHBMMGj4wp(Diu$aPSJRnUN6(A)hRvJtZIo5zm z1i_)L8KbCz(wN{Zf!1L{SgbV@QV19aL`fC&DU&<|xKgI2F&U&7ic-wusQ$xRyTqq3 z4wz%X=8%$6&|_&{SdVSsWiEGM_8En|?O{~0ASj0sg^T0>e-D>J9pI5FTIf@*OqM_! zaLrYkVv12Y^c=TjAk1TVBA|bGnve>R;#5eX7kDPj0cja|0U{swEQtpw+GwnGU?RnK z%N4_z$a53+H${(>ombAc!} zfh!d}@f_kCe?@h!U4;IXa42=kBk`OyW-6TO$f_a4U z2I?lI;24pl)KNoQOQjv&x1|=*LWGr61K>CyiVk=lf5Vu^(hS!T`cxWJ0mXJFRL$Wx4#q?n#tT|jXH z@+hhYu@@9==pII|N=(q0hf&D`?WUOK36{p0#Pz5W%m_?TB4}tGMSF9OHBcrA&U=_Sfw+(QcJN2qt~Q73cQ|_ z5Dr_Eb{Smn7)Jnyr8!9(Dy9%3V6CZkIS@M;)h?Kasv6vZQ4O7I>}{gtFzZb&E$;YD zf0U`jJR>4u4Wf}5lxC?$!5Cth(iju1Pyu)RmNE|GwUt_8-K3QptsF;1bPXgjh!nCANXnxyRBnZUf9l>xK4srGYb? zB{s5+0EfRDPs}qmWsq(W;MCtHOncYJ=3QI&)?sMKZh%> zEJ}vYDYB?kfa~#zNCniuGnL}1f0H0S1gM**_8qUsD`ho|13zxT5JS9H9G^LOZ3K>9 zZv?l{I^O7DV2pZ8JqE-BZ+XBSi?<@d*z0M_z%_+;T;op9J7pQfcu#?yV%;*M4_L-7%8wtgJpS+DH&%ue_Uzs+~8Bg zkPC-#Cq(5fjKrKNXP~s46A|WIE)$VMM52aLI6RLw9%nr@fB~Oi5K!a>dLcJjXqb&u zJ{pYIxswK;{N$NT@fla{lYqazXCcx71kh18=yraGZtqswUZX-T-4IxF9MM| zTKq*V8sR18$+*I&y3tFHf4`E(z<7i)8iVqQPY#G|;SP+zp=wyyMwoHc%>`YvYf7=2=a&A&7Jo@@C zm`E5yw+zTMo|zQbP3T0Bvr!}nl|{%?3V47>BKK4!reHmirCJMg7ELuTr}7%C zN9yQgf{=nDiXs$6uT1mtNE5`4beZ4*Wux>ur)>+(laI%s0!UMgD-$B%ABx4r5M{x*1}}(SRTm`6{8ZrY%!Ku z)T51Y@MJtHvM+J6lp#A~$wN})$$96!-n;+ad+zz}J@@|cefOL@fWEgE&^ZCSZ|Z-@ zJkt?z*hb{gZ90ju!99y%K9m#apHfLrZhEN9b_KJs2sPTP5q8-sqY8wS<{XPGuAVL& zo^-GBiUhmjP-wqb*3MS#%O;%zq{abZXKg1neErMWx4+g2W~%4=XFUrKEO8) zd+?DEo8#}1*4l_qT&T2hT#6MJ4X=G3nN8SmE88fUQyrle{mJR|9Y@gYi8E^zn)B1( zb(}4eT4CQ>B6?ybeV6)t#^uP!nG3=r?%BRy32^2_wpoS3*+IbEowI#w{r%GbcxT9h&^4(q=5@p+0_nPjL> z=weV|F5Q_CIz^dlT7@MS#*HHsP2gzT(EDmiSr->{&Ow_5hcD`uZw&C~zWs5$>a!L^ zP<%Z`Ns46mz&#iWfz%2NGIgO$WZk^PVE$;e`5Vp?ezVawnDFdii{mX&IHBt%LASBss(u7j|zmzOr2+&jg$5EZ4E_tNiJ#t42@C z1pfxKKgQ%_XjEDPPK6)y8+H%DGDenU`p(vNTj}K|W(UgLB_ztp^BvAi`n`gowt!Ye zdpcoE|-rVsOXD)gi<<*vPDNcaaw$La>BU>*!F`F3q}APq*3h0!j6;EP=JZ zeXXg_p3u3+RCbV{Z%Hr6V|f)Dm2qqSe$frHp7T;hd%-UuO=C3&Bk5mK2{q>#y%XZE zubXMwW!%cHY#MQ48GlK+L9CILbZ9Ni2_gH4y6(N#Y`DHl)~Tf%Giy{5Zya>mTMczc z@xc-fHCoIqE10oB2339uL(!k#h>%O(9ITV=TDea#qA^3J%E28|IIc zoRNz4jaKe5t`?KIxp%HYw`9QTmU@jS!FUz{%Isz^WK3w<-O@ors3SFfCB%g59<;LK zvx9=&^4BVoyXJ0%kqi#d=V(Ca5#QezLSZY1->}o?`w81}o5Wy|lxXUJx+SP+`&n(# zJSuW~Qf)Zg)T8C}i~0}|ZxpYVSW;{EN~$w0qv^Vx&ZU#BbSfi(h8}b(O=xAgHwH3u zJ8-t>DEXEvb%`rWE@#IsOyDW$l2#E&Ghd;C)aq3tL$`^q+8cdhDuuxJPsZ=?GKTLX zvDCE3-`ysoTZc$dVhu>dLrCR zlVnw-2f3x;ZU(q*1}OaKhh!cFjvO+~+W=&6NHBpRAX7BJA_oU6 zFaiX_9YBwZgT*=lSw}Sx!Il48WlQ3!z(m2IfQv@{OZ5JqIXVJNamlctn*hV3z^Ylm zn`ZzcrGgxw3f8#tpqZx*Gt2<_Y0BU$PagTtc5lM`FGSIOfaYsUYz-i=;;X;vSoSLbwsa~tASFf3{ zIgq(2kOoXhn1Pyr_#he}AP(kaVn}R&mCL3?+HSk`FX*3ELicJ8X65yhs~1 zY>lMcZ!Yk}gpmxA4l=X#OPN&XwKV)qXB5gflT$}y%Df?WbBb_M-h040RLK)Hz~~c5 z8i`C82~0Wx1Qpg4bo*@e)_?o^gR`H%SAROEiDo%SkEdxsV2;kTMtOD?Q-%@{NB6Z_ zJ?ipLq)eOjk5{v0dJQS8Ma{)uhxnh%{x5SEYKK#fm0D%`;4CV&bdIS`QdpZ-Z7(aQ z#w?xYm6?mj%TV2sx{d1AQ z$EEh8i~< zK`XnfOYQo2WdSf(tG=y3yOz0VleXYOnG#zIF5IFYrpKlD#^WA_76llG6KXAvQP=$Y zthvGpGI+ZIo|PqE@KhK8O<)G1qYfe@2VGf`7;exM?5B~xQ%nk5O)b=g^JLMh`uqDx&w zK&(DRWIurfx7QzWb{Fc~Dxd5ea|xHG0V|mp+Gcz@w`YUB9sI|v*_c2SjDZTq5M5fI zs8p(d*|GA>U-2BJ3F48FP|FZ&z`3Ses#$#|));=bknkbx;U1=MX*#vaM|>`yC9#T1 zyP93M)3*3NK+zC@ff1aCg#9sW+|BG#Y~HWTk%+dMt+pkx;i3PqJJH{!RNJe|)u_&^ zKKW^{u7u7uP~kcvl7s+H3)BHR0wTd9gzpIG=?NUe>kn1;rC+tB4o`_xD=bBa@fm6O z(@Nt#P;&wkfs`A5d-eS!U~er)t;P%Eyu89_5H58{N6!ziQj__~`*mmz2%bSf?_X4D zJA1Kg3`PI2NYOvo3`G&?GE=vaX*K+pUO(S&y}Zi3R_xMJv(6o&H%$rV%r<-+rPfMQ zUK3i3Jr|AyTq{bwE)WS{tzkV*B06I%ET^c(vZ{m&@NV=>0_TI(s(k-31@Uij`tJVV zT*U=^ZtegMYe!c#d=2F*76X^i5fDzpeS8GB?YFvjA(eRc`J&3C4@_L=KNih_nq*$? zqwMP4TaGpy&TPCY75}o3Co`(r)T2y}>^9XpOhw#lL1Dd~PF?3~rZHxgZe{5aH)S8g zNuPkfhNUug{N;r;!@kfYNKa1?8?)zrDbP|s3LFM7nmSv=(cRG@Y30EIdt16KPcFND zP+`}=VO+stn^ru&HBQ5L<68>E<$NEe!i`e4Cltz_Zhdq*-HU|D)I2EPl&UbQPCsZ9 zTd2x zs*ME<%B8|~Zb*P5FFMS(mpWJLoNbQRrpn_p9x+Y7LE=OanX(fWqRW2yM`iDrY`$~7 zuiv+&8W-B4MTu{r{p3~BXDPnGujY;K>sFv<#RpwmWxc81STQZJ_wvdt!ZjpI%`?R!nfoZ zvdnG6p%l#omgN{%=hYt!t@`_iE)9bj%drOx65H`h6^?6-V~;2?lK^y<$Bu+AIm-?J z8|Rv3T?z$L8ODXy+M_R&*11y{71nUfmzGUC_?4!^m>hm>^xzmH75b!HN_k@f-W-n* z2kcm*jd=65*6}>w>0WyO%-JvSy;kpFf!s4w8fy;heifyzX;Vyihvh16W|o@oHXonI zj|(y`UlI@c&^Q$N^|6}J<^_F!O*{a&xU7c+uB^jlp@wbnRcQ=j66` zv59%ikK5U^RGEOt6oKxI9iM#uxUr)kmL z+raAEFZ*qKg^O1{cm3ObuhV_HyZZ(Hs{`+L|8s_Sf98SX;RfjlYAk+^z(3wO&CwkG z(4itjzx$LETorFSiQsh55xWX72IQnhj-(NL0)JO=E%xp{Epzq}r#|x2;(MQXUt?Xk zNRDL+Q)p9Wj1eJgby%PAAkzSt9a4FlDMAG4@f`S$A{j5Nw5=pu#*3}VBKv0UsZu7V z!iN)^!b9~@0m&PM??=HcXi%}kRxC!#nfEM3Tq<;Xni7%l)6|h}NBZb9)~R$cIB0gR z#BpIm`mX70^b}Araa10o5o`%Er{UPV1-e(~h@cW_ZdwEOb*qHx%`^bC*cYNb;((}e z9J|EL>yIvvxI+@rBRCT(2hXNHdy!rpHWct4xNfbloai57X^_K>>x;JuEJ2t zdd-6*+ifw>%3~hVN67cd*=|DORj=E7^wWpV4_?6KLlq+gG_yEpPsuFCS0F_atRiLF z81Qk17HgF{ikfrY(SL+(Jt0Y*!&x~QRc#evpISkw&Fgyo4af~UkmG< zEx&gbr#Ijhrw@R^P+HLTQ^STr3UmG)QheBUrh5}+2ziI8)LEwFM?hM=o`#V--i{I^o^%5VU+5Sok-f zEs?ozl+Letd`=A8PP6$g1V3Ct>8vblVy&FFGhpPBY3=}vIs1*&WSXEUnq_@}U%~X{ zD>N~zmtLA@>TBqJAk`VqbQ`2#YG`FROAYtjT(B$bWd|9=%9_~A&k*nIi;t@Hs)H}U z@o2w&T%G|2bsFwykv6htxKk#J)hE3dqel&p zIJ2b*q}6wWcWX2DRP>Aqk|WdQzWC|Z_s4SolHeEg?MeU7tGe;Vihsz*OSt`haDHyC z$Nf(zFTibf_v`uG%;EVvf7kiOKZcJ^x9<^(e-E(Lck8#ecd`lT(YNX2TPax;u#+-7 znJ`B~<~3FzyQyfZ)!JJuDix;HmBbGc$WOAhOWab!K4Z0`|$?RQ^G|0X@1_r(lUXhkl#B83w;-vSbj zzao!gmEtWk@H}LLkd2!=n2rs;ynknpk=hW4aQNoguYi55+Tp>X`b#e3a6-37mV*@}ZdjPwm z#JFJc>|)Xu-@yYcH2<}6$gUU@B#OdJRvX;qpAQ^^v!PmlH^Uv;R1^-mhN?&zcXYTGM;LD6#Vb!{+iyw045JpejyKsIf*lBn8< zlQOmPyhfx%zyt-~oB|eE9iw7i(uL0k3kPwNmQN+?kCnX$tJeHp;9o>%tkJ^^5H&P% z(J>wP@RWgI4jTDQ9XkRRajxD8CS5=nbwXQ1Vo;+TX5E2DfkDouCmkPp9=>;+>zBhY zT8_L~>&~_f&E>KjE=w}UXRhLY)i+`>#^ zS!;Kgl=LEtEO`h@1=IOP`nx z9f*vcI(=Bqmi|u{Dl6KFMLJ!TDq3Y7101`61@6>`bBwjACc)81;T;;C9>>4d)W<+Y-sp05iw-Vp5kokG0a=$A1!5K%F_=0Z-EK{CZ@W5pjJ zHT9IQcdir8H7Cn*POeN=GPx+fOUt68 z4Mohcni5pI&19_t&J8`ZG^4f&x8sk#GWvi^pCK*nxUBkJXu7uEt9ByH9$b<@Lv$<8 zEz*i}G+zxmBQ>SZsLh@(;_#wQo(lMDp5MQ>JwVyxTlMJkEy7M$|LbDve_hK{-a-J@7k9NXbA0zS_*Lq~_!lr{h z%Fr~ZYW6~h`tg(NGu!Dh=z7!RvF{N)`6`-8Zo~O{COvAMow5nGR!y z)TFPr#*=;&aB>L%4$uI8ntKIR3P{@MTn@<8C+(-JM@hDL=EYIkMa$Zie}km6x`mu130=Oj-=1C&ty z*F#oBl)_ma<-}=c+s&TrDI7;a(%c>Pext8CL|L z3l}@mdPf~j*HKWu=j)?LkMD`x$&_PvIeP9VOrlI#O;#mWPg`tiH)YjzXzmZ95UK6^AF(TwfT%Y-dxw?}C zvcs7lvA2l!zL$cN|2Th0U|kgq$*FHd(Gm%V$Du$jfsA~Q8wZ(_#+d*{O>MFY>Frd1i| z=gaQgSiUPvSk6E>V_cy;hH%moaVwppz15yyx z`gK}H9qww!$*O7m(U0s)F$E#w{qab&L4__^xMN${{4HbVS_@(GVbBW6n5RaAQpvlQQYy=gigKww_=z59-B4+ul}D23sv1$#B*asaq%NQFz+)_ z(PW%BQ6OK{LEo3FGOejv{CYH*PLXxGi&DN7=|PM_T0hFw8GqpQlrD3Ew=+iyTgHIq z=a$At!{5!hm;P^OfP;s}Je@GhI-vps_+y`qsa){o-sL@dpHR>AvAbz@ge zlvbUK-RRll2Mmx<>O@Bf8*|{2X^OwXT?`vIDk@3>YQs^RV84;?To$vJs)Re~HrbKA zhfmkB?>9m#ZZOwuY0WyYYrt7HwC8B!tdX+g9BRq}x=v#Ppjk!@#Rz)E@-aAlRsjos z;!juAhsU_c089--TRP2XF|oM*Qpyz*P72i}xf!U{1m_z&x z(Pd7ObyFch_$C*1#~33FCDcg;&m@J-2TF@M1IBO$?aeJ(TBX)O-4ZNvvXuB%iB~@! z!wJg}9P79u0N$to1OcXt?4Wa3c+;i`yW%J{xmh9`Id=&MUe3DNHkQB)n@{WQcx9(K z{6C@LexttzcpCg^w(%Fnq8ox5mVC}_3dt*YBcFTnH(cj4ao9`kds?yH zZ%K97R;@L@f2HukEfd{Pt`8emn)$XjG342hv8)pS$Xj{`3JnbM&G_#y< z1U&X`sjal?uGAgX!l0MBcY1BAp<+)nOJa;qhgV}l(YUxTP$;5S%4$1LFdJW^cdIwA z7Oy%0l6*=oJQaHn74>W)_jDInX!B&qdd(nE0m$3z&k*61B0{=i1rRjmAAS*50{HmwXL&0-5$9*`9Bul2WicI zL-!?ZLt~`9Ey&d8(#oEUyuayQx$IcGI}P{a(bA>?8D`W6IYY^S zPgVb?j77xq%1FW_X{{QK=ko@vddntTETexfC3GD27?(Li(SHrr3g=3`ma9KnR5Q|M zCX=!rG>qS>xpmM2`=w0jk{>kcFBbP1IfO$)u#Q z>6ycdD8`l5WwGhGqioScnUCv3?lJcOTG%if0WM6+KQbwW5sWSJuqlI359TLeHDpu; z2JUJbO`FxgM)E`)gHl5|&E`XsJk`;B8DN*?vNuhlzo|OUo0~_@hXlR8@r<)C@0Qja zu^tq3JJcfTvmfpu!-FZrl$Wayo;6=f+K>exNFI>F$cQ4wkLl9L4wD=^B^iSxx0BIc~g z3QtTKoWcKMBC}CDN2RdGFwX-@VAs*CoXzc$*n(K&Yara@lHeROC{vZQWV56}V(CCz zndxXUnxPQND|*JGxXflNkn!>y%tWB#_MWEP_jjAFPIRQ!Ev;>bE1PW3j)t$6qOwxZ z-CF!V8E@o|tMj?r1#WZY%aVWZOIP<-NfO`*l0@-)p;Vi+peEV^v5)~+2fl;mA|!c8 z@52hXvTSm2`F;^{OA`S@HPmkI0?rKEk|D9we1@G?O+YxJeLN6RS$`!%DD(6YxpJdf z*J>n{W1_+;a<9hA)1Q##{sFHC+OEG{M7lgfOFP~xeXH;CJwHzPgi$!d$+Fyb^5<~e zqRWJ857N2gktRI_;=2N-rI!fg!}w4sC|(F|KU$s`bsUuOZwO*A*wzB}&E#Waqdtc) z80~|SWkC~{$*h0mBVdEYLo4oRxFz_At+n-7|4@44&oxN(q}O4QP+lnh`(_q{0%xXe zS8&Kk$!A$(rA}zcAuB&->53nyRgI@>SZcIFC)5I}$@XT^r^yF&ZdDm=1&{WA#zG46 z^4?O=WxDy2kVgcoDb0&{537pIAh(A*?Gsy5R)?aJN0Tipd^l2UAYvV(WgP`9qpYK` zXkd)G)k&F0B#WP@(lO&e#!7|B`}(5MrEL+6hK5(yM5(%4?=l8mlcnquX zglQnsFn`4P@;jVv`yP)zKd$Ez6l-?-G=B|o$MW-h0e6F}7N6NfdL^($lW(aFI#`0& zvClmZhNU)8ibg`t30xOVt;_+aCZ{g7rPMB=$$J2F2bYmQL%x5h9Ei?q;eqG}8#tOJ9^MPa$D4H1qU8Ft0U+7y7atZUlc+WCWRKL)w~(K zLmy~TR{-0RpxV%0mvAHw#43W+B2$MmFtWssw^PdnAVwYku+`;FBWmgd+XqxswDJG( z+;lRu+pd%8c|v41U3}L^BPeCCG%m5N#QEDP2laqv;3YzOtW_cwb=Tysf3koyCEF=&Rdx@%vAxHY zzfo;px=0ecTmgoKPKw~TDxPN6xpqzSl-)(((XPbDgtltvm;eKYAKdfQPUXY=9H8I^ zmbnyK}59!vHkp9OHO037U8k@``S97|SU_=E*`5Ze1NUHB%D1%^OxzXeXJDT|huN zL{61*xjcG)V0ndwzwmr@)PW`P8k~VbYJ1>ngPWczAkw*Y_8`b;5FKY;eUB%4A|D3?#@aRQJJiu|qDy7~~?k zZf9l2W608>Om125@}W$uq1fDB5O)$EL;1cKahm@PC{ngz^B+(!1cZOO=B@IYx}d-! zEqhfj%e4hh%z~w5rkUye?9LP|)+31I$<)FDn?oH;{|%CbE@0$FVyG#lq!@oWG{!}P z*-xger+~(T)E_=A71FU2qqB(3r~h)^4TH5G=APj|vYBAE39Dv^p~X_=`jFT^{Nuh- zvSa1^0Cf(SMc;I7oHceZ5MCCSp8TK~3ak^Nm}-Xy=R+g?gt1%n@2CU=PB`UJu?MvV zOtdT8ABIcKcrGm6u!={2CM`6EFEG1s2-5By{^K*UJl*JK6V89Uk^G;c-A244w#m&C zrtSV0auxXt2?X@}d!?(RvMGV~LmQKy6b_d}x6Y!H0c@aMMr~Gbi*E$0*gzitpT8z+ zE*lo219Dyx7|3GBFrVZqlAH!+T<{HG)>8h9T7)MEtmD9Pua6jben72$^vEJgwhb*4 zI_5}rnRkO6F1`fuAwXzX;8XA?Q8olI8U+&<8^efDvmw98DPPiNp`T0wjGzF(fK5H= z)Jx#yLGAOUs?w65E*n$zYb zM9Hkl!VFt;qCkiAvJmmGu3vJqP!_@x&kFxbZq8+cO=B0iEhTLjlAQq->|3+s4bB_i zco+mlAEY9c$~87*gVML%fh|2!7|=T+7WgxRyWp$g#YAOcs$S~yBhnP366_;vmy~mwBtSFs;zgDPZ@Aq zBgioogKi9di4DSfNu-RKQu-JvZsF52M|??Xjql9VJAQ}38=idRcB3t3;7fY_RZk;0 zS!ov_=z9WV%##DY>1}ztZ5rY`;`&Q7IjRIouQjq z2@A*=Tt}=`V|e{QVH0f{DVYH^E(gvkNyQ|iz#$&c9VKu$&5;Ap+tAQyvK@F5V5*&s zh=Nr59B~~Bfrr%*dB#FXV6o!rg+u6%vM0sXoGa~h9P_tTow#%LxYn|EXfqE}-qo&g zQzNT5;2)^I|F(2pKUR zFs4fhlL*EfkUK)b64XlXQ*4G6>Bxv(5R`=-3va>oEIs<`6|#}W)gukVbn4-B8=NlGj5UC?Y=H+Dn5M>X=xPUhw^L;G7e0y@ccE z&sa+dg-%rIfVsDUL_Dt3r)fUGhq|<*_d(*%^28qB?ieuOi)q9cD_k;BWyCgiSu&N4UBQ3Q=D~gX=@S|;O5h^P zm0&TCGW+UuRu*5-)=oWpKM$Ls0h~UW<(Wc@jns?xYKEA3o5a@~xe)YL)%z~Cl3Xqy zNCCQ;1&iFTf)ljS55azK%Dr_EE~fv%{varGRW9|HQ21SH;Q*I1*p%pumzOXuX7BA_ zQvoUc&m|Alh<4yV!=MJQ-D`IavjVfJ=JrXvLyAoG>?c_JX%$ z>8^y80!js1A_oUN2FlO?4=-4oInF}y%@4r;b@)73=nyN#%&f&ECO%#ziFFmC0=VRh zsFRHxq_@!w7tmG9dQ~D5SCM0#t?0HLifP_+M^$rX5MXc~=H(gUsEg}?ZGO$&8lAhi z4WE3#HG9T-(7zc8hlxR1!T86MpD{7iYwMXvted+FXEsgIQfE|szsY&i1n&}#Y{I~z zu$WoIrd36&kwn-(SKBY4lktd{3NXkwMND&Hv`9S`bY)R$_t+BiNb{$Ow=TAyi1;rG zM@!v4CaXkpEb9ToCX=pjR%I3n`?|o548x>kc27s~?3dPCu;+5{t#g-qyi;BGGzT<7 z13tfj4wQhI3vv68m|yNh?RB9EHes5)$L_?~+|k(F1&=IY#M|F};FiQ?z@E`ZQ7&Dv z_@$mk+t(aVrHkO@aOBtStL0XJ+|K9Zrh;*?;TjuF^qxYKYz(^Onv=TeI~8m`NP9Ap zg)C=U`JbgU?E^#EPdSDwXJfQ;7I?WpNG7{{M-=@}ONafyTdXGzA~GfNjHPxwC2sT` z;}&;b3Lqk~*{tU#%RaSLt;$tVl`}<;xeg*AS6nDd+z(Xhf^8g(Xc#9`NRy02u+nG~ zktdr(QGw)C9nZah@u_Ey+6QJTSrf?EL4{}cfzkm4Uu zuw=txtY$M-ClGKcI;+ltbdG&?B%X!ohUc5(udeC?KRJaA;F=nW0%vMYWM4A zy}?bCC1c3`U&U*n;LC~x(?g2UaVTOrl*xuZBWfj)=-y7^AmYZ|@{l4CKm`_f-fgOf zGPFo*7&sx5pz*ajmott;G&;k;I>>1RnI^WkHTI9?ILLO98zGu3&>#Y6e>{w2aoTv* zMc_%YP(hWXwk)aM`j#^e^;xp|qLfj7OP<69KIMwwo`^C+vQHrv$DIZ~($EEcIxEm0 z+kdNUe`c^VcA7@_Qu^f-0bu&@fuZ-7e_@!B7wKYbqSiV(50s7tZN6%s&JGOpa1gWL zbuiMp#h*-B?5qvg$=oqtC54?OI;o4p&}N9@f-cEYk@tj zls`3We0oX>!4VP-j^oTQj|oxz9E3RNi|(;V_HWs3$l>H2yYEWo0j@!ph_(XkL}$Qh zAqc)&OEGRELM65KQ__%WYBQatBhLRg8h!={-t=W5kxq+|gf%Z4FfVtE&ew(~xO8(# zP5l}Np;zP!l~2y$^)`t;ePc0w}u_Xy>qix`&8bFdozMr@Cj`jJ?o$Y`%-RM2+W=6S1Xg8j+^J zQuwS{_`er`oqCy`<_%)q5S;uRd?xE??}J;`xT$^D(E2it3UV@BZRynJyT_g<-Z9|^0NIYzQ(7qW14iXG1E_#1>>Zio6;DV@_FAufBqR#p*gz^a`;vIRzoMeE_sx6 z`2D}=iUtG$1ohvV7^oGkq$V%9hKm4T=di(qG`6d-;Suqb$3u)}38t!}Ro_%O}OWT#BMLe+7fI0lyLMDt?v^m**` z-*aZ8*f3dgQ0+n_wrl_Uhnbp~?68QoIiC;|Dtc6%l5uSm69=17P6lqCGJPyyYaN${ zJFQz!2AiQI?tTgJ>p|X1I+M9!2NW67STVGC%)do586*eaG0aM&#cV7M87^$=fVbx= zsEkyoVaRG;JTzFzq<1|(rMzGEW)q*F%$q&{3$Zv{x(KxO*&iY2b}#4UvC!2v-$91HjGgPiI&Eqi)*s|EN23Wyxw{W3Wx>Zt+@M!fo+4O=&303`vq&HmRzN_pXsGL)LnH zzZeM5Q(aJ_qQIi^ySmkG&dM^-??|Kba9!(tYP| zISB8~k&nZ44Rn(7{MB56JrxybrL!HE{6bfq=l- z4#3AzM!%WJ*Nn*;SGPS+7t2YjyJ4t$tXbJZks)KGl9-PB{rleQ`J44}?2F->AO5TM z`5$qwihDV;1%aB4d84?&Pmc1bT$1lyNdY!^oM`@xPl9ldJ6CnRnDrApYd+H2o6-&V z>3n&)3$s+!*zid!vwf*Yjfzxqe+Y1>{LV$KaHR@D%lb#HWU@qlM961u;##UlO4b9Y z8wZQ0JmLg$N&WuCFdB4bBi({A$60MW(56rJh5ri(tLa3Foyayi>G%X-3#Ks~!Z}Lik6TQ>FTWPNE<+O%^GS@2P&sNmb7s}TYONvBZawi7v1SD=HRNA zwOjl6AM1g|=nlGK?R$0d-xq zGS%z--yZTM^SuCq?>EcA^?+?p`-9)F_s3I!?=b`n>f1r~7=YjJ>tG*~5#YNQ;J|v8 zeMg!@bfYI(z5^_GG>ivYAmGCqU5wRW)tD=Rr>w|<;Hoi<@$rEL#pTF59=FGwEV2ip zkH6grML23p)&SapONrr_uiPY>=_224O~(pT%;t1pbobrRrU6bmh4d~D%F%G?_i2);%A5B0)?Sv$8PvpaE9)RJ(WLZQeS-K31 za7mwm=V&{-kpXrp2l(a3pyEz|5p*T^2vtU2%^UHCk-0dJTG<*4o``me4R%Y1CWEzl zL{v@j33ah;k6~$@3jiE;lQz!viK;Ayb#*|Ld<5erfD+vGvsA9Y%1D2KEzirZC~Qubygo#;MlJjdrvvWp^1$fg_4~b+cQi9wm-ypC#^b*j?&v z68*PxQ54%803v^}rYRb4h!!$9@N|I zIl(~?=J-9aIyY8$GWrg+6&&k0%oN>b-+PjBLi3~r!vK)RlG2LFzOBgSSNg#!5y_+{ zBfLCsKNe$1B2YCORaGF-=@GjBe6P_1h9WLXjpSNOzh{~@ssy^QiAdupFND=&YIMBsc4>=fiFM2Z(BsS9yD5kojmovf+Z2(^5O$7*$aq(z_7I{Gi4z?a+c)ZN6@Wn^Ss z6>*PaUJ;)UBhNCh4cAM9|64qu{{QNsDuQ7m4GswCh^aZl`xh8cKY3}agP1yN31$XQO{IWv5sBIlIf#bKQMeQn{{T2-QK} z@V()5Ejn*^H=6&6BY#(a2Scxstkz@EC#%Tj@>_?L%{`@4&@TJ9As5K{q+8D|dec}X z%q#ah+F`TVA8!pn-y`S^Q1>SyO|P~lTG~;qb`!=PMP)ztiW1w(*GmS+WjXjSWd731<(Os5l$3e2{>FYy6 zZ{59F`To`FL)TYP%v?JuBcCj^X&!!Z=SQQtHYE0!Q+0p}iuO6s#m)C{_-lvg%?t0h zPCTesO6A56zfDAksxn_KbJ#UfUoClq(J#6CdHeA7;^fI_FTs*l_K~g}{P&JA zy%ySyhKSbcKE7hfFm9G(2G>0?dT{I!ZEorgEP@MX*-G)}M%S4O_SzznNEf1SH~1gf zz$R>qpF{xB@q>}dXcG~wa_-%$EXOGAv&-v9Zn=Xh{!=J)#YVE4e#(+Bw6e<Ks#R!hGV@I%gg#YhsaL5p-AuNuVRYCqi*5UWvk`OXl&4S@6OE9J zYz=@dgT%Q8*zPq*REJeU3A~hfPz$7XD5OEthN1+C2_Yhh=1hgc3(B!n_KyjR6f;_B z#+VX)c&mG)f)QRrj0o++AXEHtWPtvjl?Z@FC`yHRhL{}nB%mdx2k1W5Cv6xM&5mt_ zhbhsx`#8$z=&%#|v*?LchU{vnEsk#LP6m3LFNQO*B1M!DN`j0^j%gN77g339)N?SU z39^Jbdmt4i&l5o@rie#_Ng;GkV36-`3BqNWrt5r>h!TULm39fMMprXcPTF?;NmKr-DpMNa92 z6hnf-p1>|?YAy*fYPY5N6=kb%4~t6i79=C`>nARRh$7IuF{YD7wjs9=fz+@fG~@af z3MI`;r}RL9)HoTgGj8c;;b9DTWeEVE0#oLQ_URGNRi~~q#6sx9Dt5**%L7_5Id$1- z7=~g_0AEyP&aj%S5T=Fh0}5+7%PZM3KWjE5Km;}@IY&ZAW11a%RH zoFSc-$o=CCRw7nKZ?tk*0kZQ4u2>&&V?!~L(GU-boRg^?8il;BJ~m-%@EI$}ET%z1 zX=kW{WfCiHwYUN{^xoVx=>TAzONH!F7*+)oTWcbg^|yvoy`*D~Mg1JEeo2|`?-@IF zJV-qydB_k(sUE~C?;m-+zv5TEaDX<(MY>J*PF(cm`$MO1@A(B zeXBh1zoYj+neg-Olfu2PbFtO*t3COqqexNY7OrBUM+S@;pYCtYjtFpsh& ztLV=UHWh^1O|T+7QUd@^Me1M|c&1l`gVikln6`>Nu56*~fYd&g7w+sKR;ra^)*L;fIdn6gH!-022S1figl20 zX>LD?HacnFC5ny)eb3vML>ZX z6~jPG<6zWtEXxgAdYlu%)a;xYfp>t=8vA$OtL2`ny%I13`<4^5N5nb5(zzfqlv7Ny zV5mBq%l76=IcFNB(BzyC_7zM1y0zaNyJb_~0HL%2M30l%$fZze)xyRY=OO^hCT2J$$S!J)gKvBkG_+&dz@rC3>% zpb@!eAjsOZfU+F24*4a$Zca;IlORIx+_d{ikOGjrs=}5T@+XyQ!@3^GrqY*_;M7Q7 zoS6nC1d&9Mpo!PZKHl%449B@Kk<~$K+hz{hv$Mwsl?EtlI#&rK|OFBNN1Xy z|4?jGrqCtp7BPnK>}Sf(d$XzRXf83HQK`@r2LdWKns_ALQWGaD&~jC*hu`dk?=`-mQ8J+*#Lr_D?-M&Dm3Ydr;DRv&!59bQNN8nyj4 z-C!KHRz4K1*`91_XmDPAbr9TcCkKS70$STNW}0^DWMC51x~~k_qYKycVsjb1f0ncJ zyW20%M-M1(<67>IXUb7Vv(39dtIG446r}Gn84hPQ&BTFwJT(pYw@tpy^)>XKhl;k) z^q5-?L)#)>>LW*wJi)Kgj|uqY4!6Kck8ZlTRpL$AlYd3k(x!8y6pAADLnh^2FpQh& z^2BI_ywb|1k6!w_m$rXjLok1njd;&*7>_HBCY1bP8zDJ(nKPb0ppjv^a#l>xw>hEj?YCY8!N$f_L-}8u97(u8`{jxRwLwl ztvJ;GVl9X1@f)kFHI~Y|96DA|AGkB9?Z?Y$JEpyI)MGSua@*0Ou$4#1{Lq$ny&0>o ztO~!@zb=C{Dp6wri?q!$=C1M_hVWl|*>63Oj-0h&U84T2R@=XCeEHXftv;A_V^LvU zSAP2R@VBAC$+OpqC``;e+RVw?!SjAv;Zm6s0hS+s{`&Xv)3vs{VV5%%YiAt&CC*m= zLbRj-$?_PkPT@&+%7 z^uoFFhR?$Pd|{c_^jTuku^AIvdSCDHJQ;5!mfF0wBY2Un;Z*Lm9#`6C?Ob(9XuIFO ztr^0z#gBG9tXEtZx;v5Ch{-E`dle55)7Y(S#wiT z#_EP=Vu7>Z2d^0&2kIDZ?6}75U6r%KCfH7_=eFUcy4J8|yJ(N{Hl zK6Et6E?kk(eDE;C0o}jT6LxWDT)Vbn-}yhPyEwl8Wq!K(>XrrXjW_4_h{?zCVI7Ix z?6u$_6Y_Z(ri=ZVb{S4?TdXGoo>O3AU`Xd?U=RZK#1O#JWb%c@Dl*_vT%dwPpaMaJ zERe-%K3QOiEz>p2$^J`hm=x_MpSPEtylROSlZgG~YfBuNK1NKQA0?p^;LXUS%YYab z29LF|GB8+4GBAju80b?xId-YK45H_UZsVtl$qSa+GHq|2e1EAO6HDi0`DNBjO_L|b zEOTILoi=&iG8GwkIRJDrs&iFlPQJHHSq7Xefd$0{paKCD>o3oqEW6x>scqim=;f+x IuNHtL0pN+L#sB~S From babb1b81981367a1b2e8e454bebea8c294fcd539 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Tue, 30 May 2023 10:01:32 +0800 Subject: [PATCH 2/3] =?UTF-8?q?#bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hzims-service/operational/pom.xml | 4 ++-- .../operational/main/service/impl/AppHomeServiceImpl.java | 3 +++ .../main/service/impl/HydropowerServiceImpl.java | 15 ++++++++++++--- .../main/service/impl/SideHustleServiceImpl.java | 15 +++++++++------ 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/hzims-service/operational/pom.xml b/hzims-service/operational/pom.xml index 08f941d..e9dd242 100644 --- a/hzims-service/operational/pom.xml +++ b/hzims-service/operational/pom.xml @@ -100,8 +100,8 @@ org.apache.poi - ooxml-schemas - 1.4 + poi-ooxml-schemas + 3.15 org.jfree diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AppHomeServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AppHomeServiceImpl.java index fd93f5f..b7882fc 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AppHomeServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/AppHomeServiceImpl.java @@ -567,9 +567,12 @@ public class AppHomeServiceImpl implements IAppHomeService { item.setClassMember(classMember); } + + /** * 获取下一班组数据 * @param item + * * @param id */ private void getNextDuty(AppAreaDutyVo item, Long id) { diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java index 2717ab6..a6bed57 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java @@ -118,6 +118,8 @@ public class HydropowerServiceImpl implements HydropowerService { private final static String load_hydropower_unit_target_key = "hzims:operation:loadhydropowerunit:target:key"; private final static String loadwater_level_key = "hzims:operation:loadwater:level:key"; + private final static String loadwater_group_key = "hzims:operation:group:key"; + private final static int POOL_QUANTITY = 4; private final static int DUTY_POOL_QUANTITY = 5; @@ -1146,11 +1148,11 @@ public class HydropowerServiceImpl implements HydropowerService { if(Math.abs(generate_sum) > 0){ return scales.stream().peek(scale-> scale.setAreaMakeUp(BigDecimal.valueOf(scale.getPowerYear() / generate_sum * 100).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue())). filter(scale-> Math.abs(scale.getCapacityUse()) > 0 || Math.abs(scale.getAreaMakeUp()) > 0 - && Math.abs(scale.getDeviceUse()) > 0 || Math.abs(scale.getGenerationRate()) > 0) + || Math.abs(scale.getDeviceUse()) > 0 || Math.abs(scale.getGenerationRate()) > 0) .sorted(Comparator.comparing(AreaScaleVo::getPowerYear).reversed()).collect(Collectors.toList()); } return scales.stream().peek(scale-> scale.setAreaMakeUp(0.0)).filter(scale-> Math.abs(scale.getCapacityUse()) > 0 || Math.abs(scale.getAreaMakeUp()) > 0 - && Math.abs(scale.getDeviceUse()) > 0 || Math.abs(scale.getGenerationRate()) > 0) + || Math.abs(scale.getDeviceUse()) > 0 || Math.abs(scale.getGenerationRate()) > 0) .sorted(Comparator.comparing(AreaScaleVo::getPowerYear).reversed()).collect(Collectors.toList()); } @@ -1234,6 +1236,10 @@ public class HydropowerServiceImpl implements HydropowerService { */ @Override public List group(Long deptId) { + List gourps = (List) redisTemplate.opsForValue().get(loadwater_group_key + deptId); + if(CollectionUtil.isNotEmpty(gourps)){ + return gourps; + } Map> areas = areaService.areaOrStaion(deptId,Collections.singletonList(HomePageConstant.HYDROPOWER)); if(MapUtils.isEmpty(areas)) { return new ArrayList<>(); @@ -1252,7 +1258,7 @@ public class HydropowerServiceImpl implements HydropowerService { areas.forEach((key,value)-> codes.addAll(value.stream().map(StationEntity::getCode).collect(Collectors.toList()))); // 计划发电量 List plans = planGenertionClient.getPlanGenerationByParam(codes,null,String.valueOf(Calendar.getInstance().get(Calendar.YEAR))); - return areas.entrySet().stream().map(entry->{ + List hydropowerAreas = areas.entrySet().stream().map(entry->{ HydropowerAreaVo area = new HydropowerAreaVo(); area.setDeptId(entry.getKey().getId()); area.setDeptName(entry.getKey().getDeptName()); @@ -1275,6 +1281,9 @@ public class HydropowerServiceImpl implements HydropowerService { area.setStationTargets(this.stationTarget(entry.getValue(),reals,targets,plans)); return area; }).sorted(Comparator.comparing(HydropowerAreaVo::getReality)).collect(Collectors.toList()); + redisTemplate.opsForValue().set(loadwater_group_key,hydropowerAreas); + redisTemplate.expire(loadwater_group_key,5, TimeUnit.MINUTES); + return hydropowerAreas; } /** diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/SideHustleServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/SideHustleServiceImpl.java index 0f13bc3..7d58740 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/SideHustleServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/SideHustleServiceImpl.java @@ -344,20 +344,23 @@ public class SideHustleServiceImpl implements ISideHustleService { return runDeviceList.stream().map(o ->{ Map points = o.getPoint(); if(CollectionUtil.isEmpty(points)){ - return ""; + return "0"; } String realId = points.get(HomePageConstant.JOINT_RELAY); - if(StringUtil.isBlank(realId)){ - return ""; + if(StringUtil.isEmpty(realId)){ + return "0"; + } + if(MapUtils.isEmpty(realMap)){ + return "0"; } String value = realMap.get(realId); - if(StringUtil.isBlank(value)){ - return ""; + if(StringUtil.isEmpty(value)){ + return "0"; } if (value.contains("1") || "1.0".equals(value)) { return o.getEmCode(); } - return ""; + return "0"; }).distinct().collect(Collectors.toList()); } From 3172a4ec4048ba0fbd8792e96f79d67f70e03573 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Wed, 31 May 2023 08:52:29 +0800 Subject: [PATCH 3/3] =?UTF-8?q?#=E8=BF=9B=E8=A1=8C=E4=BA=91=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=9A=84=E7=AB=99=E7=82=B9=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/main/service/impl/HydropowerServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java index a6bed57..8a6cb12 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java @@ -133,7 +133,7 @@ public class HydropowerServiceImpl implements HydropowerService { public void loadHydropowerReal(String param) { // 水电站站点 List stations = stationService.list(Wrappers.lambdaQuery() - .eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE) + //.eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE) .eq(StationEntity::getType,HomePageConstant.HYDROPOWER) ); if(CollectionUtil.isEmpty(stations)){ @@ -191,7 +191,7 @@ public class HydropowerServiceImpl implements HydropowerService { public void loadHydropowerTarget(String param) { // 水电站站点 List stations = stationService.list(Wrappers.lambdaQuery() - .eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE) + //.eq(StationEntity::getServeType,HomePageConstant.HYDROPOWER_SERVETYPE) .eq(StationEntity::getType,HomePageConstant.HYDROPOWER) ); if(CollectionUtil.isEmpty(stations)){