From 1e57cfc8da030b45864811abdc93caf65dc811cc Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Thu, 18 Jul 2024 14:10:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E8=AE=A1?= =?UTF-8?q?=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HuzhouPlaninfofileController.java | 3 +- .../huzhou/controller/WorkflowController.java | 115 ++++++++++++++---- .../huzhou/entity/HuzhouPlaninfofile.java | 1 + .../listener/UserTaskCompleteListener.java | 4 +- .../service/IHuzhouPlaninfofileService.java | 2 +- .../impl/HuzhouPlaninfoServiceImpl.java | 7 +- .../impl/HuzhouPlaninfofileServiceImpl.java | 22 +++- .../service/impl/WorkflowServiceImpl.java | 29 +++-- .../excelTemplate/项目计划模板.xlsx | Bin 16137 -> 16482 bytes 9 files changed, 140 insertions(+), 43 deletions(-) diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java index 3e5cf4d..67e1a13 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java @@ -72,8 +72,9 @@ public class HuzhouPlaninfofileController { @RequestParam String flag, @RequestParam String planinfoid, @RequestParam String comment, + @RequestParam(value = "modifyNum",required = false) String modifyNum, @RequestParam(value = "adviceFile",required = false) MultipartFile[] adviceFiles) throws Exception { - planinfofileService.approvePlanFile(files,taskId,flag,planinfoid,comment,adviceFiles); + planinfofileService.approvePlanFile(files,taskId,flag,planinfoid,comment,modifyNum,adviceFiles); return Result.ok(); diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java index d6bd4f5..9996369 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java @@ -1,10 +1,12 @@ package com.easy.admin.modules.huzhou.controller; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.hutool.core.date.BetweenFormatter.Level; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.easy.admin.activiti.constant.ActivitiTaskStatusConst; @@ -355,9 +357,9 @@ public class WorkflowController { hashMap.put("operateDate", item.getEndTime()); String assignee = item.getAssignee(); hashMap.put("operator", assignee); - + String nickname=""; if(StringUtils.isNotBlank(assignee)){ - String nickname = sysUserService.getById(assignee).getNickname(); + nickname = sysUserService.getById(assignee).getNickname(); hashMap.put("operator", nickname); }else{ @@ -365,10 +367,28 @@ public class WorkflowController { } hashMap.put("taskName", item.getName()); hashMap.put("comment", approvalSuggestion); - if(StringUtils.isNotBlank(approvalSuggestion)&&approvalSuggestion.contains("撤回")){ - hashMap.put("taskName",list.get(i-1).getName()); + boolean isPut =true; + for (HashMap hash: approvalEntityList) { + String operator = hash.get("operator").toString(); + if(StringUtils.isNotBlank(approvalSuggestion)&&approvalSuggestion.contains("撤回")){ + if(operator.equals(nickname)&&hash.get("approvalStatue").equals("1")){ + hashMap.put("taskName",hash.get("taskName")); + } + } + //是否重复 + Date operateDate = (Date) hash.get("operateDate"); + Date endTime = item.getEndTime(); + if(endTime!=null&&operateDate!=null){ + long between = DateUtil.between(operateDate, endTime, DateUnit.SECOND); + if(operator.equals(nickname)&& between<5){ + isPut =false; + } + } + + } + if(isPut){ + approvalEntityList.add(hashMap); } - approvalEntityList.add(hashMap); } //获取未激活的审批人信息 @@ -387,23 +407,40 @@ public class WorkflowController { } } for(HashMap lastUser:approvalEntityList){ - if ("0".equals(lastUser.get("approvalStatue"))) { - continue; - } - for (int i =0;i lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个 - Object taskName = lastUser.get("taskName"); - boolean match = task.getName().equals(taskName); - if(match){ - userTaskList.remove(task); + if(processInstance.getProcessDefinitionKey().equals("createURT")){ + if (!"1".equals(lastUser.get("approvalStatue"))) { + continue; } + for (int i =0;i lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个 + Object taskName = lastUser.get("taskName"); + boolean match = task.getName().equals(taskName); + if(match){ + userTaskList.remove(task); + } // else{ // userTaskList.remove(task); // break; // } // i--; + } + }else{ + HistoricTaskInstance item = list.get(list.size()-1); + for (int i =0;i lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个 + Object taskName = item.getName(); + boolean match = task.getName().equals(taskName); + if(!match){ + userTaskList.remove(task); + } + else { + break; + } + } } + } for (UserTask userTask: userTaskList ) { @@ -461,19 +498,43 @@ public class WorkflowController { } hashMap.put("operator", name); } - approvalEntityList.add(hashMap); + Boolean isrecall = true; + for (HashMap hash: approvalEntityList) { + String operator = hash.get("operator").toString(); + String nickname = hashMap.get("operator").toString(); + if(operator.equals(nickname)&&hash.get("operateDate")==null){ + isrecall = false; + } + } + if(isrecall){ + approvalEntityList.add(hashMap); + } } } - List> distinctList = approvalEntityList.stream() - .collect(Collectors.collectingAndThen( - Collectors.toMap( - map -> map.get("operator"), - map -> map, - (existing, replacement) -> replacement // 如果重复,最后一个 - ), - map -> new ArrayList<>(map.values()) - )); - return Result.OK(distinctList); + + // 使用 Stream 对列表进行排序 + List> sortedList = approvalEntityList.stream() + .sorted((o1, o2) -> { + Date d1 = (Date) o1.get("operateDate"); + Date d2 = (Date) o2.get("operateDate"); + + // 如果 d1 是 null 或不存在,排在后面 + if (d1 == null && d2 != null) { + return 1; + } + // 如果 d2 是 null 或不存在,排在后面 + if (d1 != null && d2 == null) { + return -1; + } + // 如果两者都为 null 或两者都不为 null,按照日期排序 + if (d1 == null && d2 == null) { + return 0; + } + return d1.compareTo(d2); + }) + .collect(Collectors.toList()); + + return Result.OK(sortedList); } @GetMapping("/getProcessInstanceIdByProid") public Result getProcessInstanceIdByProid(String projectid,String stage){ diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfofile.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfofile.java index 217e892..5af2b59 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfofile.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfofile.java @@ -43,6 +43,7 @@ public class HuzhouPlaninfofile extends BaseEntity implements Serializable { */ private Long size; private String status; + private String modifyNum; } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/UserTaskCompleteListener.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/UserTaskCompleteListener.java index 63ed0e6..7eccd36 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/UserTaskCompleteListener.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/UserTaskCompleteListener.java @@ -20,9 +20,11 @@ public class UserTaskCompleteListener implements TaskListener { } if("1".equals(approved)){ approvedResult.put(userId,"1"); // 审批通过 - }else{ + }else if("0".equals(approved)){ approvedResult.put(userId,"0"); // 审批不通过 delegateTask.getExecution().setVariable("rejected",true); // 更新审批结果变量 + }else{ + return; } int size = approvedResult.size(); if(size==7&&!approvedResult.containsValue("0")){ diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java index 7dd5e17..f0c6a72 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java @@ -13,7 +13,7 @@ public interface IHuzhouPlaninfofileService extends IService void submitPlanUploadFile(MultipartFile[] files, String planinfoid) throws IOException; - void approvePlanFile(MultipartFile[] files, String taskId, String flag, String planinfoid, String comment, MultipartFile[] adviceFiles) throws IOException; + void approvePlanFile(MultipartFile[] files, String taskId, String flag, String planinfoid, String comment, String modifyNum,MultipartFile[] adviceFiles) throws IOException; String getProcessName(String pid); diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java index b317136..cda51b8 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java @@ -183,7 +183,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl getplanFilePageList(HuzhouPlaninfofile planinfofile,Integer pageNo, Integer pageSize) { Page page = new Page<>(pageNo,pageSize); @@ -61,6 +66,10 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl planinfofilePage = this.page(page, queryWrapper); + planinfofilePage.getRecords().forEach(item->{ + SysUser sysUser = userService.get(item.getCreateUser()); + item.setCreateUser(sysUser.getNickname()); + }); return planinfofilePage; } @@ -247,7 +256,7 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HuzhouProcessinfo::getProjectid,planinfoid); @@ -271,6 +280,13 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(HuzhouPlaninfofile::getPlaninfoid,planinfoid); + updateWrapper.eq(HuzhouPlaninfofile::getStatus,"1"); + updateWrapper.set(HuzhouPlaninfofile::getModifyNum,modifyNum); + planinfofileMapper.update(null,updateWrapper); + } ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(workFlow.getProcessInstanceId()).singleResult(); if(processInstance==null&&"1".equals(flag)){ huzhouPlaninfo.setIsfinish("2"); diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java index a4bb655..cc1a9a9 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java @@ -56,6 +56,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; +import java.util.stream.Collectors; + @Service public class WorkflowServiceImpl implements IWorkflowService { @Autowired @@ -166,7 +168,7 @@ public class WorkflowServiceImpl implements IWorkflowService { List list = historyService .createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId) - .orderByTaskCreateTime().finished() + .orderByHistoricTaskInstanceEndTime() .desc() .list(); HistoricTaskInstance taskInstance = null; @@ -193,17 +195,23 @@ public class WorkflowServiceImpl implements IWorkflowService { String name = userTask.getName(); //当前用户id是上一个处理,且上一个处理不是撤回操作,上一个节点不是发起人 if(currentLoginuserId.equals(userid)&&!"发起人".equals(name)&&!fullMessage.contains("撤回")){ - Select select = new Select(); - select.setLabel("撤回"); - select.setValue("2"); + List filteredList = list.stream() + .filter(taskl -> taskl.getAssignee() != null && !taskl.getAssignee().equals(currentLoginuserId)&&taskl.getDeleteReason()==null) + .collect(Collectors.toList()); + if(filteredList.size()==0){ + Select select = new Select(); + select.setLabel("撤回"); + select.setValue("2"); // HashMap hashMap = new HashMap<>(); // hashMap.put("label","撤回"); // hashMap.put("value","2"); - actionButtons.add(select); - workflowActionParamOV.setButtons(actionButtons); + actionButtons.add(select); + workflowActionParamOV.setButtons(actionButtons); // outRes.put("buttons",actionButtons); // outRes.put("showApprovalForm",true); - workflowActionParamOV.setShowApprovalForm(true); + workflowActionParamOV.setShowApprovalForm(true); + } + } } } @@ -385,6 +393,7 @@ public class WorkflowServiceImpl implements IWorkflowService { queryWrapper.isNull("art.assignee_") .eq("ari.type_", "candidate") .and(i -> i.eq("ari.user_id_", currentUser.getId()).or().in("ari.group_id_", ShiroUtil.getRoleIds(currentUser.getRoleList()).toArray())); + queryWrapper.and(qw -> qw.notExists("SELECT 1 FROM act_ru_task actr WHERE actr.proc_inst_id_ = art.proc_inst_id_ AND actr.name_=art.name_ and actr.assignee_='"+currentUser.getId()+"'")); } else if (ActivitiTaskStatusConst.CLAIMED.equals(activitiTask.getStatus())) { // 待办任务:签收人或委托人为当前用户 queryWrapper.and(i -> i.eq("art.assignee_", currentUser.getId()).or().eq("art.owner_", currentUser.getId())); @@ -395,7 +404,11 @@ public class WorkflowServiceImpl implements IWorkflowService { } // 待签、待办中只查询激活流程实例数据,已挂起的不查询 queryWrapper.eq("arp.suspension_state_", ActivitiSuspensionStatus.ACTIVATION.getCode()); - page.setDefaultDesc("art.id_"); + queryWrapper.and(qw -> + qw.notExists("SELECT 1 FROM act_ru_task actr WHERE actr.proc_inst_id_ = art.proc_inst_id_ AND actr.name_='发起人'") + .or().eq("art.name_", "发起人") + ); +// page.setDefaultDesc("MAX(art.id_)"); List select = activitiTaskMapper.select(page, queryWrapper); select.forEach(item->{ String processInstanceId = item.getProcessInstanceId(); diff --git a/huzhou/src/main/resources/excelTemplate/项目计划模板.xlsx b/huzhou/src/main/resources/excelTemplate/项目计划模板.xlsx index dc49864025c93cb7ba82f31069aad043f65de934..5e2f2dd43fbb12d60e0e6016b27d09032c99b7fc 100644 GIT binary patch literal 16482 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 V3Hsrxzsjhv0Mft8B;3Eg{XcOt8Z-a^ literal 16137 zcma)jWmq1|k}&S};_eXKo#5{7?(XjH?he5M!QI{62^uuG1%e0pAZPcUd$M=;`TEDq zJToOdRozw9U0w20pkOdS?=4JrhyVTl-wpch!Pw47-qFt9iC+E<4E5~=)NimQ_pkNp zz(7FRAV5G!{|;tgZ%^lLW1W*IAl1)+J9rVeng6}3*p`ZE6+vJys-^!Lf8MW|KP&jV z-AV`b&TP4^E7HfaGGgB>_=9E!8w1w@s14mK{J2dL=(a+d8%G9J3arGK&vGB*wFdddEQ<6%r21BH*T6R|>bYyVr+MWIpV&P#?hw@~$4LwVt9gd?Gn+Apo!K?!L7W}h*ToOL>J*a&Tor(5rzTFxdD?B0(zl?8JD z)Iv%4Y_HIp7Bt?p0Qh$;7}+_RysIH3Q9&+<0X1Y(<_WRrVkQ;70KVqXS&oh|L1b5J ze#1tXqNuX&*$dWsq#z=$`C$Db*K6L`p;Yn$wt>tcBmiOK!;k0@c zDZLdqC0C$8)afG?03M|=)J%u{lMV2Y6RAnMxne_elL019ZCGSh4`(t;b7NJDOYz2b zXcS@>C@wPcE(}fDy5lJ_+|6=eh~?B2b>WasP*x(;b#0_54xVM*j>K{BphNgt^= znN37L<3%BHfkPVYvkJCxGi+EcRfT+mQ@s4TtZ)-a~KLa5A1>k1qXys&XV&eR#Z6b`XR*HuN0=g#$0>bVez=cD z+3gWYlmXN^QmhW-RSv>Ni`MZIjkIHbIynZW_~_#9!sw#YCtYciURJdprpt63IrDN3 z9gPaWA`T+qJox6>CdqX9@Q|0l#Gp!`t8Mvth)=>95A0r@T;pM?Hc; zPbuVSie9{r?9*}GcDry_`kYP+<9a8AX7{Ekd3+y!QAskn@2)tBx)gX%{H)a~0omNhV+*lr zc!KEXR!@JHqgflF9#;H-z^^loA9cP!LSY-5Z{*Id>rr@ogv+VrYH^>E2|u~^_N2KQ zhmyo#<0)#_2{hBo-EA9gL1Z4uwds7(_FB|O8baRi@yg_t-LQ;Ggh~LCZ)0iYnwQ-X-~Y}28qx5R)%aRn1KA%3$3>~^;9Oj~u`3V^!t*1+C7O@` zLd2s@BZ2YGYu6-wf!Y!h_NFbu!7dT_63s{eodPisJcof|kyCAgA%WGh%?IbIwE{f(@QdMrc4bNE(xiDO?lxpUn% zG5}&%N5-=Z;RgxG8)-R5t{teP_ ziKQUS-n<0=9Cx5yuX`qQUJ^xGdOiB*?mn&QoXPd zbD?rorb=BY&{|=YGe7kPpz18!EcEtQ%xXN7r2>dyVF9cZN2(;_^1KlfqnyHX1GKN~ zpqK^*`(p%3BvbH0ti<0el{;a*z6^)Oa~crC3K=!L%l#dFA)F*gX16kXuw1iptZ8BF zAink3>ArQ_A=K*3EO>BA+l5_;nsoZLRIa0JQPMdWpYFti)2uU`S=)+_#M(>eM8s{9 zE0_1=-pIw5DYvDe2Oog#?zLaJydMGR&1CfjC;lzPZlkQP-)9W!| z<*?ls7y=YkO%~(XodyPN^z-63rPnNL=u*nQRvC!Tg~}_s_Kw0RM2V}i7 zkW%3=E!bcMJcyq}w2>~NOAaBGl?lV_6{29QPKVplrbNbc}_QlnWU9XNTpR%j#*Ao6K@4IXu_!di)&{{Jp{;sM0-(ee>d)l&FOx5x;8kIF5_y&P3&kX z(mL?c6AW7Uh4GAGdLEy`L4%1cWnM-8iab54q_gRGrB6SWl667clnOBOD) z^WSGWjdYr6N{&lsvpTaAQ zsWss1*Sy@Q+RUR<52u|?&b2fV6e zWaIUZUL?&f6qPYKYiIi#RVnS==JcMh-zz^`;B~6FIK(D#Ik-;CfbpiyfBQ)kq>`MU zmwe=K(%~*gtj^6aOXz2IRC)Z&_fSnS<#(Edd!>KIy}xJ2G}4M)5p_a;R2w^o3!&?u z7;#lh(IsicN6<7S?HRv+q#J6T*fZ}{W`X$QSnn+I^?HZ4h<<)50R??^S3{*RpT%9?+xjU9HH@lqHj^nP8 zZR8(rj#I`a97#@Bl^$J`KQ|`o2u8Rb=+YpBPqX&E`ns=XGlA8|5VbOm#do_d>0U6- zA!*kzf=#c=Gq?p6d-yjf-~%sVYGMjeyLB-jrem6zuT;%4sRt>Xp}`B8NkgbrI-wY5 zH=fp=>INbd%Z3iF4V=CEcIxp+M{7x}3`XND z=FSFC=xdHhM-GsIlAPc+gfZk2*@7YwinYaqGCcTR;N?Za@&;%wMq@)YZcT|8K z*WrfnNVT3CmMm86u|#?g5Spv(8VEClj{-@BRtQlE#Y$pzE{Z$=s0QW&kx31aDoii| zaE>3Mday*Ja2p%%DU<|5uHSCX0FjUH-%u}Qx-=XD8d5q3(!|KH3DO5M<%vUJYFYA6 z<0u4K;7J0BUvji}8%GpS39_wVY8$q+3!!G2qM;)1$;VW^*{rp{Q_LAUs+@Je99coj zbBUr7X@&v>5_(7*iwA>1xsr@0YbwbZR>~I4hZ2LB7!5HC%)m%6$r&hZs1xCnQ)5aV zsf1fkumeU_D#aO7iId|Jn&!<)i7g?S1M8XFF-TXWu_VfdH4~-BEF~h3+HpQLL}waZ zeLZ4c{^tHh$kg^~4I$CGGMaeN;aB9osZ2vb6Ll81c8$*H^)~VUYKmcBlTz2khgEWmYsH&N4 zUN&cz+loXz{~jtMoJ-EF#{|^SR3A+-9{32JY&32vk67-5&r*lRuz-w~14Co!Es z^h{`oNo)c}!UeGuHqHKQ+9LDCe<3WlNqcw=wO@Wo?Aq&%EsG&_vG?H$A}`R$QI#x+ z;s?(*ddrAA>d^dx!%<-7z}k8ioM>9fCN0emUB`W8vLI=s7&dcK4UEF8!g>s@Ecm@p zp&HnJ){J%YOoqy!wu9+-LTCECXVX#x!f--^^4#wtEMC#KW}Go5DAroL*lWUV845=i z(Yl^HrL)w!r3}K06=MiANHs056%pY2hzvg8i7ki_)|Gi)vhWrjCg&G~V)g2rYz+0} zfjqrX653Bj9zxBYcM{`(n3Sd)h?=WC!Zx=x6Y&%Hq7p5BUegpTCt%ZyT^7qiTfq$F z_L*4j?E~+xIJbeDi6e+mJZnQU>8l_SX@7{cMoR8Q7=B@R8!0B1Yh}eivfzlqqeq`p zCm`$4=qM)DJp!&+-Ug-h`&crW8&(}6zyVpDHds3DqE_ElxAe~IHDXK?-M21BtG2R+H47)(X75M4ZC+;IFR zA+%X$NK-H)GaJW^DaMxyq*C&Y=~~vZaCzob;-pc{*&hakrl;~Em3WCpTRVlvYMppZ zt5vFBi&RnPmuiU`1+h+zaNo3Vz(#&|HsUX&eKTUfy~I|^)W`oeVUlLKn3D4&-{m*{ zy{i&Rvmtu%X{zfJmph*-jxvz}fBVyrag(YjR+)7=V7*ZqetFE8-prM2afeo^-_`dB;6uu7!KZ6 zD1;lhhi(}T%mQo+bisqgqm)9w4aV`Xb;}J|$Y!M(UC(eq=^BQ7cZun_5;MhkYkRZl z9p689OX^iZ1(2YCfE51sl{oWXK71`U>%UgwH7$ty-{;LgD!}2LNv^0gtn{^JP7kQ}k9If*NL6==z_4sn~v)@_MMz79DvvrV@ zyLYOKBF+MyVEn+sg|6Ot$@|DX9U_-K4}bpYyE!c49wyG9Z=PL!(Q+4ly;5aN@(NMq zn-eGFQ&Y3rbSpeP8@mS4tbV!HmcEuXn~qEO8}`;hSE;T3X5)};xzsYY=xlQI(Kdr< zyC&A+;q2xK0WMEqed#HFi4VI~Ev#;JxmBC)d{4V|P3c7B!vATIrF?g(j4oC}vt(-C z2qj>8@A}9gt)J5H@PkQ{9yh@gB-#UlHOt7RhwB&5Zn@*@leE)#n-gou)*a~=>d4(R z8&CfZ^+_)Rzu`{=*M>UTd?vrRrVwg=5ZRNbbLd6w;Ap<0ow^??7@<9jH@m!~HZ~x- z-`JgK{`j=Te9v~4ee&w-a&44kpEo{Aw^mXe#zlwl`n~-Tyu%?#*uRT)*X+VZC3R$f&1?T zx!tolLJKn(GLDct)2e)pbDHl3B;IP&oHuHiAwM!R|?w zYemt02C@yE;3E9v^}n2iFjPN&h)d}~fl^zVQfxm}EV-%LV~OylA^fhKWFQRv?$jZ^ z5~T%{Qxv+jk@B%&*EYn1MSureVu>dEua6Mhi_Qd=H>LU;kBO4_&;mp2OaSuUzM+bN zB-yEI6WTbWg1Mgz?1Hu{qev9Rh|a-yAz~tg1jlZi|md z0%wxytP52ZzbGlIQ697QEJGm}cfy<322AM)B;XIf*};}dV%|EE#7stB_4xX|H-kvF z93dUK7HR(o6L~G)gqjfBarv+nD{lJMT{H*oWQ9b$Y0_X?Xh)^Q;BnXHpFHSf@Hh2q zck1b2;ZSl<2BH$tZq%|2AvaDrzOFX-hNLN;ns=ZFUNny0MZfSBkbZ#(ryGM6k`6I{ z8%4mo=aD3{XGy)j)Zeuli7b}GmZ1@lF4hlckgVI?l$6h27o0o_s3HiPP+Pn0EqR`3 z_!b)BGc_Y9Dauf0bV#B=xGBamuC8&9i%}C+;Mz_Qh6Nwg!>}aAAgOPv9}r7TE1tewNp-m%=CNmmhNDWXsVXjh2{P}H zc}{o7pLzYpKor{5l-<(-$mn4Th02zl7E_7ZStI91K5xl$8LI;y{yG9$6&SbEy#6Uy zK$HZaZ_jErj82NK^P8KqEZ8uxS!v-YlqmGX`n^$9FEnk@+6_9t*pPE{Q_y8A?+0mI z`_L#X(`0=!TkL3Bh|tqc=XP0d+A&NEkxKv%`?q47@$Buluwe0NbjTMZGfUMdDlo!Z zE*XD$X^0GWqxW%ZR8U+MfWUvGY|o4 z{!T}*2XFkzmNn8>n=C1Vq5b5NyMX;4&t9(UKY@pkhcCepX*Y5QTj?nf(?wGN){iW#!#LuL0~3 z`ipO(bV!EVEUg&^3PDgYczk(BS~#_ci7nss@k1*MR^^9;9($3$xLCZ05ZPY^qpy*| z=1&~0C8!Kht^~SSGS;bf;BMFer}CmMaN~>|*ItW=Yb;C^sx0$y6OoHBW~Ffw91|1) z8X4=&Bti2U;nDc3_LX!@)QVVH@rbu6qlauv+1u}v<~@oirU=9Vi&hB+^{4K)K`ux8 z68|>QYnd`CQ=s9L*a8(m>X}&esrxx;DcUy3t_?+~j6tg>W>)Hnv9Mv`)QZmdJ6$}s zy+{x5eGxj-FEX^3GOwwb9-kwe9P!kWa4hg;JWV)>F}#j+~CkZf_4 zVaZ6`FFKZK0Jl~`O71qa(OUk10*hIxfDKQIRS0o^-8sEoHjyll2Ut8uHEP8I%i$3s zT0=e3^Q`UNi68K-ZH_kvf}KVa;06}M)jDO5__Cnri7dzWZel@kbiZ=rDc}Jnl;`(O zG*9L21itp*XCs&&mO+0hpMHuZkjgkyrXuz?Af>B?EBRsF=N?Gvy{AC-{SfSlyrE8| zl8qXg_{&8x1#ojSISR7ApWAkmT(28d2sRW20ab}R9*(RP4AFjpRI6LG`EVGPpes`! zV)2CnDe1?q88Ce72JqWFS+fT1B?R|vVwnv;EEOZ|#mvC8q z2pXDT4x~_(g*0?5BcY}CK5I(NfDSO-H$i7p_&F|AZGE zeefVp_%(DPIv0v#)Off%muMLvRb8$3bpJTWd~p+1QWBS&$NRW~ z`gyzjqWk{Wnp|ghuFu`^sG4mD!)5pD^@?4$?-4{FuO^e{!_7QjE}zfC1S9HYON8pfu?h{k>emB;sh2t zBbLELmv2C@#oE?Ey*l9DoQ)t0$1XPm!^Dq2f)wXH$!1hns-NP#!TIT$9G*8|S-$sQcTvif zwLq38s$0R|dt1wP*^l)>MD1+^QNyU@JjyUu7Dv6aGB!}9%R$P1C>ECbn|xl2JQ>>i zvbb058Y`_u8tqswaX4~_Pi~01Q^2)&=waSrQMERnta+_W5vh*JqM7y@GbrK&?^?df zucSn2ew^d{wC@TkNzSh^oY!-P$4id25G(&dOPIv{0ZlyD?mmh_YAEEC2yg(rRFG6I zAV|88PbM*}Hcmg!uT)8tsbvETww*(^1fk)vG$Jr}M!Gu+2016)&R9U4;|Crx-Pre_ zoTZ0bL9+rk#}nO;Vkd3(gb;{q)nG~GPXzc8S&}NoO!`B$4zcL zJivnD@Bv*O_O`EMr4VC4!LL3;{&V3u8l(%?{gypmPz3^l|I1}KIeS=}IK8hn7qxBd zcGb~dVh8+cJ_aI&v(@f)xMU&BH>9d+&PXzgi~Eb(?lhoFXyclhV^p$?pUS(=66OO# zs8ZLST4M4tfTIt@hUR4OF-xq;J%LYkF5U95x5j=;9FV1M^ld$OZaui~TFzRE^VHdk zJ%h(>-jr{=DJWZhPF-_-`~`p0-aOHmSqA4_zS-1fyJ=fGe9Pb2b+cG)jqtQv<@2+r z$p>8h8WR4d=MIq_CPd(*=UgMmgb)iZTo z4J#~0ml{4PckkKUz2&Q;S6J%BDW}db-{%hH;-yu0r|t{Sueun@JXgm=W*pgu-<&ja zx$U`MxN4|ca$@J}N>~=Cz^A)*kuDY%D<@xS%x<3o<{ZO(y7RGT$wIz))Wc)2su+l} ze`70k(0T}UJj+_DLbIc`i{B-v*siaBbw7NxtElyB7;Ltswj@Fgc{on;#+voh<1vL) zpID%!aXBV$kC%*?D?$!fxY-Hzc?#@#e!N)`#ZG!ENiN=iZI$~5e;VD%CzK(G^sRC- zcI`mmt3>i>O66oP_ZVI|>^ET&fMu)Bl9D$+w{V8;krq!@BWBLa)lF1b!(zZ5{HG*_ zzC?klSvur~Q%)dt$J!p_nr^Qm6-x^D!gWF&a zOs8(_W!!_Uu2*2NGLOu1X;a~Ott=;WDpX3Ymsp{_yTxpqHIqoHc7kN-R`ltV6^gnY zCIT({Fy0voQlTLhiSotA+LTl{J}uZipat`1qPrjz;iqF?$)gp#*G{tRwV-3|@Cf=q zjR-=Ogd;%mrL8+JG=?)}rPR3s1J+ztg`=LyeWc-)u#C}7pLFf}kDAX&aE55n9?doR zVMG-43Oekv`P(#p??&yal*Tq& z^C(&1fG4sH4b^&h=EOXS^n@qrKIyyz^vx`4tT3$6Y0?RCUvh)bPRdb;POQ5OBo7(E zzu!9hT3s51f+tB^{R^$5NDN3_YmDVLhUnGnG{ZbFEnNPcb~QX~f@Dq0XEcNRu__xI z*RxneP>JakKEhX@yLdQioz1Y~_R7g7qqBCOa@eqtc;Y8H3IlKybZVS3KcJ|XZQN$o z>u>tsKJ#OPucNFf;+4Wg$Oufzj}J6Wq*JdVN1r#lTuF)AN1)3nkuI~!#2bHO5z)ly z1=1)IBDg(mVm=iKh#mr?c>+Tjwe2VfFP+9QUN%vVFC^&g_iA+wi&}o4Jjn(BUt8L$rHtC zWQruLtOWfM#u;VQ35riB<5R2W=!E)iivYS>yZEq@Wqfo_8M zW|%ObR*QhxK1@DRGPiMU0VV{ zl{Z`R4zV&=3BHZYf=pQ?C&gcNLqp@KoB8x?C0F9E^0G@%)&713nG0hMbH7(r+9(-` zDCaU5%0K@L)zGjYmll7YAa9673EEG}iM)#RAqKP>L+m6bqH%bj9gP+=$9_Wx*#4dM za&fBkiKuvwpF4vbXua)URJ3gYGvc-I9Wb%qInm1c;ZiW7MXzeGDZoALiwQeTOHj*x z1S)2D!UTuqf*jb(3207FDLJShG2OuxPnhhtx70y?;i9K1;DTJenwgR%UyCC6lz)Jy zjve;{@^N2D0uPOShP_0xU{#>ZLAFtN4`f449h_ERH~SG;OdE6h`_-R`@~ltv>BfEid`5 z;K}Q9|M91<__&vEmkJYKE5xDq%UoUZ=4ueJ?wH+KuV$aa3$-!j&sC+K@hj^D{L1P1 zGs85!JhfOZHQl#xj4A>Lh#0tTg{tR6PQPGMLuL(v-B8>1iKZn z8Z>{Kru0=Mpw64QOghaE%kluq5T>Yj^({}#JdJasH9|o%Tgac5+Ybfs0#h$xd@^JfI@k$nX36;QVEorO-@yh`|w%k1q2F=p@ z`d-f32{MJ_5E~IRL$Qy7J5Igc7+;@u#`}LqrVHyz<)Az`MWh!PxwlI|x(e>KIOKLs zVj(G7yNlw3D^37>C@HG8kx^v2L4wD6b-;c^m_eQFzR>&V&H1vpE02H`xwoP z(LS8xXB?56ojVf6H@>Gy6<)mLlO1wqLgkrcF=3`XVy$dOjZR%*Rdh-DmfwPT>$`73HYY`^so2nbrYn zL3S-7*kg>@h<){Ys11}POi2vONC%S#vP<=jiEH$0C}v5%QUh?fDtmIqd1+W9&eW^z z*--W*Bir8}?1Pz;yGZ4IpbG0H4 z#wHZGqF!OoMr;aCX=>Ejx5D32%k~#p;8*>(C&>;FB-jp+3I@=>zK5sNN-^S`piPMi z+iFCvzju__aU8YP+Z7i7%;ySR=@CNm+8XiRat+UF`NmF!9fykVh0TW&p@5*lbFFpv zF6K<@M`yh% zTjm-!w`pf7M%IO(@yLNLdo0VYWu7waS6G+Z6*c!u5oR_Bo%^ z}X+Y_B-Gm zRM(Qj5kvK@UU=0%bMn!^No-)65>n31EK{5(*xIqFIhH!sDflcW`{^=c z5VKSy19y-7BK4M`_1&Sro|szIot~nrTquLmIN>y#y34Vfn#gv!-j6##<`uv{qqGUP)>CxL-=FLq_|Tbs06z05bp~G)p#W0zUg;P0|kY1 zA9T1e*eFFVI>@@aA~^M~@%=dm@UH!Hh&?Y(%G`JiG6{*2z-{?MO$IzUQ?N}zSIWW( z==$xNEv+$9KlMc0S%5+`RBdT?v`9)ia$5JRU>kjLfdCmgd}43J_PD#I;V^X4fTEkSCsrs3voMcy7GtPzA9dN0%36j{^EEq6HD6!U7DMCD3bH?t?DdyXx<}y59h;5@-hWT z(IOaiU#zD}_-*(f(n(q$tVQ$b#4F8%;OA`^bCbxd)T1Zj8S4v3k27RV>o}P(Ss0U- zLGOQVcAd$QQoshD3lO^9t#KOQzu1Nd5+NUK8UXJETBbdp*;C+NhCLfx*4d4MSX(zn zTH5$@$Bxs_dSapF9ZkY^c85exczT-r=$0}Ew7lqj`S3_Wx8pOCCcsyyF!(?sui&?s zFBtf!ER}voq?bV_Mn(?NcRFK^rO(%pu-fBApObJMYFP?-D&4d}K8#e;Z&K~AZ3#fv z7miU5e|c>DTG@sgf&6oBS0C*vFvB)+qGkJvsRn$vd?&NrhMfIb12SfZc|CA3eMX<> zV;%lJL1KlMNZdem?WJg-9MW(jL+tf*9lqS|XYU*`hKUQSPNl-mf*U;cP_sH?>@OS7 z%yt7fy5TGu&0qu|z}$Q#EbF*@CV*K1VD`vIdYi(h@J8TZ*IE8SyfbUiFL+3Sq>YNq zu|PTXS#PIld)?K=tOltgO#Gu3T=z`UV;A@vp1gq{ z_EIN2gEws6S37GHMFWeWv*vA}m5mCmUv8S=RrbJy*qB}B+J}dTDEH;~;pV_{Gw&v$ zOgx=CtvNL{zD!?!^-skJOW4o~=s2sYiMrN|>W{+KM}upOfym0%pE2HHkBd$+Y0=>X zrujJwvvJ||rRa5b-pi{7J#=*|m~l1C^Ma8z?k6!e2fQwY`%kdyveNc#m;rZb0|y&j z`yn995+U^Jrl~jOXaF4tplI3&evBPsLH1Q+T+OOVDD}v!;|#LLO$*;MDOWEb*-&4E zXm3##h%3kSJ`q>9Jr3H`xvY%D-sA6^BkF*Kq?NE@GS;p*>TFihwtyyVG=6$y#_jO` zF8Kl39{EZYDH@DhAaDYVrKKA$-)7!P0a zfmUD;Z4ZiBt_#D8zF<>fR$*Drj);(n@X+#XqZBDg;uQI^dQ|Sz#xUkSjxyA?y4cWg zBlNj^C=9H8@+~a+TQRSQ-{B znt@64O);D$rwA+Lhq)t7wD?;;!s~jv(w^M@N^2iS?5^s5zW4t5bN})D7$v&!aEqv= zq1Q33H|S&Zso)R#I%u9I{B17o^|=YU<}HE!wQ2$a1EIU7j4TsMGQ6iSQh2!{1>EAn zSR2k9;=rowgt6jAPrr-mBj3K z$+)2bR-EaHPi2gK{L`ghXUI_!HO{&^1r%r&+92aH9`>^~y^Y&(z7gs&eva)3bWsT8 zw;OToQuyKRuKq1hyrOdv)I-_653K$8%J5fk(Ei8dRXWlH9dE@MrZ8^GB#YT2WqJNQ zZdQ>JPCg@&Ahu3hdE2oo(V;wid6|!c8&u(5?GO$eAsr8Pc4a41TRa(sLetFD-<1<` zT&&~KqJz8(m%EW}L?9qIryX5*$1mI@!zwCGY2ih*L(-KZ*Y~u$9cVI!wPgt+$v#a! z@Xya5^z|mpYBh|Da|M$XoV=1U4G(-z_26aI6L-9#EqD9hW%*y}tp6lV!uxZqUvFYu zc&mrOe!IT~c7K7r*S-Ar9R4lc&ZKe6eg-6wyO5WlbRXI^3nA!)ddd*%wQJB|9$zFa zrp%*$zs=sLme4I*X|})&fxFyUkzf6COJ($M3+`rw5r*=Ij(RLrOg|hvecT~LtaS{u zE@pcC!NN{oY+pkwOQOf!$wF`YN=*P*2G4lLe5AP#GKCeR1Y;cZvlJ>DFk3g87iH8g5 zg?VVAg@&o>Iu&4^ko_8FJ=0+78}*^NaVM98%VNdq^5Ia589^B?7D-H%W|Lw#iZPfY zOaDH^kd}UZN^jczPlIRY0Z#1nR-A?RHbmcxv$TZlY@JPPo%NJG>`k0>-i=;k^0;l^ zyR1?k5fhrx80Ei|QGrD9rqU`NLAKlm3lAWAz=d>Q4Dgd7fzQpzkPhd1oon+!6c$${ zg1ggHj;hn2)qzDfl(Ec5`$+3@-O=tY;Qq3GFA&-brfw{eZZ$O9^Lgc zm>f&Duc9i3`kqW5y;|tZ7Mx7Ai%laL#%>&R85Hcf@7DAAJf`5XIMA5J+Z`>_+TLVu zSt~3Xu6S4lVY$IWSCTNM^)r-Wsg~*|u2|CEFl6741SV1^`JCQa3Oe7?IfnIJoc4A5 znZ~lA^;B_Tw*@*O47@125*{0mH+q}f( zPvHb|Z}NOPzp7!i?7N!mStepJwKYsDxaw18v3XOK(AG_{J|p(p7x1(=eCGFS>(YV1 z7gSyf7zFkA+T^d&(Lc5HrYIm_Ai}q62giTZ*GyKHzuNmxzsC}9mgxUN_@|T%+5gRS z{n^n!ZQMJbzoZoL?`Z$S;{8eI&qeUxbZTh-^OE>a3V$Yy{-!WQ{1=6PrH}sq|2+x! zH|l>MR`}-#`SZBK-yGZi9qsSK3x9U`&+zVV0^`iT`To1u{;y8I*Hix0-Zh-|mxljQ zUHQ+R|5;!8j{BF^`u_*+-_@3XcK^@%j=!ly!2PTH|5e}l`^NNczyGB2=LyrlsmQ$T ihP;i`fBTQ$RDPc~m6rnlZ8%Wg+(gn_pY^%k@%|qjqyYZ_