diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java index d24d9d3c..e7575337 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java @@ -51,7 +51,7 @@ public class TaskDto { private TaskRemindByAdd taskRemind; @ApiModelProperty("上级任务详情id") private Long lastTaskDetailId; - @ApiModelProperty("上级提醒类型(0不提醒 1开始前,2开始时,3开始后,4结束前,5结束时,6结束后,7自定义时间)") + @ApiModelProperty("上级提醒类型(0开始前,1开始时,2开始后,3结束前,4结束时,5结束后,6自定义时间)") private Byte lastType; @ApiModelProperty("两个任务时间差") private Long timeDifference; @@ -237,7 +237,7 @@ public class TaskDto { private Long projectId; @ApiModelProperty("上级任务详情id") private Long lastTaskDetailId; - @ApiModelProperty("上级提醒类型(0不提醒 1开始前,2开始时,3开始后,4结束前,5结束时,6结束后,7自定义时间)") + @ApiModelProperty("上级提醒类型(0开始前,1开始时,2开始后,3结束前,4结束时,5结束后,6自定义时间)") private Byte lastType; @ApiModelProperty("两个任务时间差") private Long timeDifference; @@ -506,4 +506,15 @@ public class TaskDto { @ApiModelProperty("结束时间") private Long endTime; } + + @Data + @ApiModel + public static class AddSubTaskForDetailTask { + @ApiModelProperty("任务详情id") + private Long taskDetailId; + @ApiModelProperty("开始时间(时间戳毫秒)") + private Long startTime; + @ApiModelProperty("时长") + private Long durationTime; + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java index 1b9f6235..e6de5b6a 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java @@ -64,6 +64,13 @@ public interface IProTaskDetailService { */ List selectAboutWeekTask(TaskDto.AboutWeekTask param, Long userId); + /** + * 给任务详情添加分解任务 + * @param param 任务详情id/开始时间/持续时间 + * @param userId 当前用户id + */ + void addSubTaskForDetailTask(TaskDto.AddSubTaskForDetailTask param, Long userId); + // /** // * 新增和修改交付物的方法 // * @param jiaoFuWu diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index 8b00184a..145ee299 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -1960,50 +1960,105 @@ public class ProTaskDetailService implements IProTaskDetailService { } /** - * 新增和修改交付物 - * @param jiaoFuWu + * 给任务添加分解任务 + * @param param 任务详情id/开始时间/持续时间 + * @param userId 当前用户id */ - -// @Override -// public void addAndUpdateJiaoFuWu(TaskDto.JiaoFuWu jiaoFuWu) { -// ProTaskDeliverExample proTaskDeliverExample=new ProTaskDeliverExample(); -// ProTaskDeliver proTaskDeliver=new ProTaskDeliver(); -// if(jiaoFuWu.getId()!=null && StringUtils.isNotBlank(jiaoFuWu.getNames())){ -// //修改 -// proTaskDeliver.setId(jiaoFuWu.getId()); -// proTaskDeliver.setName(jiaoFuWu.getNames()); -// proTaskDeliverExample.createCriteria().andIdEqualTo(jiaoFuWu.getId()).andRecStatusEqualTo((byte) 0); -// proTaskDeliverMapper.updateByExampleSelective(proTaskDeliver,proTaskDeliverExample); -// }else if(jiaoFuWu.getId()==null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { -// //新增 -// proTaskDeliver.setId(snowflake.nextId()); -// proTaskDeliver.setName(jiaoFuWu.getNames()); -// proTaskDeliverMapper.insertSelective(proTaskDeliver); -// } -// -// } - + @Override + public void addSubTaskForDetailTask(TaskDto.AddSubTaskForDetailTask param, Long userId) { + ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(param.getTaskDetailId()); + if (ObjectUtil.isNull(taskDetail)){ + throw new BaseException(CodeEnum.NOT_TASK); + } + ProTaskSubTime taskSubTime = new ProTaskSubTime(); + taskSubTime.setId(snowflake.nextId()); + taskSubTime.setTaskDetailId(param.getTaskDetailId()); + taskSubTime.setBeginTime(param.getStartTime()); + taskSubTime.setEndTime(param.getStartTime()+param.getDurationTime()); + taskSubTimeDao.insertSelective(taskSubTime); + + //查找任务的下一道工序 + Long lastTaskDetailId = param.getTaskDetailId(); + findLastTask(lastTaskDetailId,taskSubTime); + } /** - * 新增和修改输入文档 - * @param jiaoFuWu + * 递归查找下一道工序,并修改时间 */ + public int findLastTask(Long taskDetailId,ProTaskSubTime taskSubTime){ + + ProTaskDetail taskDetail = taskDetailDao.selectByPrimaryKey(taskDetailId); + + Long subTimeDifference = taskSubTime.getEndTime() - taskSubTime.getBeginTime(); + + + ProTaskDetailExample taskDetailExample = new ProTaskDetailExample(); + taskDetailExample.createCriteria().andLastTaskDetailIdEqualTo(taskDetailId); + List taskDetails = taskDetailDao.selectByExample(taskDetailExample); + if (CollectionUtil.isNotEmpty(taskDetails)){ + for (ProTaskDetail detail : taskDetails) { + System.out.println(detail); + switch (detail.getLastType()){ + case 0: + ProTaskSubTime taskSubTime0 = new ProTaskSubTime(); + taskSubTime0.setId(snowflake.nextId()); + taskSubTime0.setTaskDetailId(detail.getId()); + taskSubTime0.setBeginTime(taskSubTime.getBeginTime()-taskDetail.getTimeDifference()); + taskSubTime0.setEndTime(taskSubTime.getBeginTime()-taskDetail.getTimeDifference()+subTimeDifference); + taskSubTimeDao.insertSelective(taskSubTime0); + findLastTask(detail.getId(),taskSubTime0); + break; + case 1: + ProTaskSubTime taskSubTime1 = new ProTaskSubTime(); + taskSubTime1.setId(snowflake.nextId()); + taskSubTime1.setTaskDetailId(detail.getId()); + taskSubTime1.setBeginTime(taskSubTime.getBeginTime()); + taskSubTime1.setEndTime(taskSubTime.getBeginTime()+subTimeDifference); + taskSubTimeDao.insertSelective(taskSubTime1); + findLastTask(detail.getId(),taskSubTime1); + break; + case 2: + ProTaskSubTime taskSubTime2 = new ProTaskSubTime(); + taskSubTime2.setId(snowflake.nextId()); + taskSubTime2.setTaskDetailId(detail.getId()); + taskSubTime2.setBeginTime(taskSubTime.getBeginTime()+taskDetail.getTimeDifference()); + taskSubTime2.setEndTime(taskSubTime.getBeginTime()+taskDetail.getTimeDifference()+subTimeDifference); + taskSubTimeDao.insertSelective(taskSubTime2); + findLastTask(detail.getId(),taskSubTime2); + break; + case 3: + ProTaskSubTime taskSubTime3 = new ProTaskSubTime(); + taskSubTime3.setId(snowflake.nextId()); + taskSubTime3.setTaskDetailId(detail.getId()); + taskSubTime3.setBeginTime(taskSubTime.getEndTime()-taskDetail.getTimeDifference()); + taskSubTime3.setEndTime(taskSubTime.getEndTime()-taskDetail.getTimeDifference()+subTimeDifference); + taskSubTimeDao.insertSelective(taskSubTime3); + findLastTask(detail.getId(),taskSubTime3); + break; + case 4: + ProTaskSubTime taskSubTime4 = new ProTaskSubTime(); + taskSubTime4.setId(snowflake.nextId()); + taskSubTime4.setTaskDetailId(detail.getId()); + taskSubTime4.setBeginTime(taskSubTime.getEndTime()); + taskSubTime4.setEndTime(taskSubTime.getEndTime()-taskDetail.getTimeDifference()+subTimeDifference); + taskSubTimeDao.insertSelective(taskSubTime4); + findLastTask(detail.getId(),taskSubTime4); + break; + case 5: + ProTaskSubTime taskSubTime5 = new ProTaskSubTime(); + taskSubTime5.setId(snowflake.nextId()); + taskSubTime5.setTaskDetailId(detail.getId()); + taskSubTime5.setBeginTime(taskSubTime.getEndTime()+taskDetail.getTimeDifference()); + taskSubTime5.setEndTime(taskSubTime.getEndTime()+taskDetail.getTimeDifference()+subTimeDifference); + taskSubTimeDao.insertSelective(taskSubTime5); + findLastTask(detail.getId(),taskSubTime5); + break; + default: + break; + } -// @Override -// public void addAndUpdateShuWuWenDang(TaskDto.JiaoFuWu jiaoFuWu) { -// ProTaskInputDocExample proTaskDeliverExample=new ProTaskInputDocExample(); -// ProTaskInputDoc proTaskDeliver=new ProTaskInputDoc(); -// if(jiaoFuWu.getId()!=null && StringUtils.isNotBlank(jiaoFuWu.getNames())){ -// //修改 -// proTaskDeliver.setId(jiaoFuWu.getId()); -// proTaskDeliver.setName(jiaoFuWu.getNames()); -// proTaskDeliverExample.createCriteria().andIdEqualTo(jiaoFuWu.getId()).andRecStatusEqualTo((byte) 0); -// proTaskInputDocDao.updateByExampleSelective(proTaskDeliver,proTaskDeliverExample); -// }else if(jiaoFuWu.getId()==null && StringUtils.isNotBlank(jiaoFuWu.getNames())) { -// //新增 -// proTaskDeliver.setId(snowflake.nextId()); -// proTaskDeliver.setName(jiaoFuWu.getNames()); -// proTaskInputDocDao.insertSelective(proTaskDeliver); -// } -// } + } + } + return 1; + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProjectService.java b/tall/src/main/java/com/ccsens/tall/service/ProjectService.java index 310aa29f..222706ca 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProjectService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProjectService.java @@ -28,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service @@ -647,9 +648,9 @@ public class ProjectService implements IProjectService { userAttention.setProjectId(newProject.getId()); attentionDao.insertSelective(userAttention); //添加角色 - copyRole(oldProject.getId(), newProject.getId()); + copyRole(oldProject.getId(), newProject.getId(),userId); //复制项目配置信息 - copyProjectConfig(oldProject.getId(), newProject.getId()); + copyProjectConfig(oldProject.getId(), newProject.getId(),userId); } else { throw new BaseException(CodeEnum.NOT_PROJECT); } @@ -672,7 +673,7 @@ public class ProjectService implements IProjectService { * @param oldId 被复制的项目的id * @param newId 新建的项目的id */ - private void copyProjectConfig(Long oldId, Long newId) { + private void copyProjectConfig(Long oldId, Long newId,Long userId) { ProShowExample showExample = new ProShowExample(); showExample.createCriteria().andProjectIdEqualTo(oldId); List shows = proShowDao.selectByExample(showExample); @@ -690,7 +691,7 @@ public class ProjectService implements IProjectService { /** * 复制角色 */ - private void copyRole(Long oldProjectId, Long newProjectId) { + private void copyRole(Long oldProjectId, Long newProjectId,Long userId) { //查找被复制的项目下的二级角色 Map oldRoleMap = new HashMap<>(); Map newRoleMap = new HashMap<>(); @@ -719,6 +720,33 @@ public class ProjectService implements IProjectService { } } } + //当前创建人默认为项目经理 + SysUser sysUser = sysUserDao.selectByPrimaryKey(userId); + //添加成员 + ProMember proMember = new ProMember(); + proMember.setId(snowflake.nextId()); + proMember.setUserId(userId); + proMember.setProjectId(newProjectId); + proMember.setNickname(sysUser.getNickname()); + proMember.setPhone(sysUser.getPhone()); + proMemberDao.insertSelective(proMember); + //查找项目经理的id + ProRoleExample proRoleExample=new ProRoleExample(); + proRoleExample.createCriteria().andRecStatusEqualTo((byte)0).andNameEqualTo(WebConstant.ROLE_NAME.PM.value).andParentIdEqualTo(0L).andProjectIdEqualTo(newProjectId); + List firstPmId = proRoleDao.selectByExample(proRoleExample).stream().map(ProRole::getId).collect(Collectors.toList()); + ProRoleExample secondPMExample=new ProRoleExample(); + secondPMExample.createCriteria().andRecStatusEqualTo((byte)0).andParentIdIn(firstPmId); + List proRoles = proRoleDao.selectByExample(secondPMExample); + List secondPM = proRoles.stream().map(action->action.getId()).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(secondPM)){ + ProMemberRole proMemberRole = new ProMemberRole(); + proMemberRole.setId(snowflake.nextId()); + proMemberRole.setMemberId(proMember.getId()); + proMemberRole.setRoleId(secondPM.get(0)); + memberRoleDao.insertSelective(proMemberRole); + } + + //添加对谁不可见 copyRoleExclude(oldRoleList, oldRoleMap, newRoleMap); //复制任务(包括分解任务) @@ -865,8 +893,6 @@ public class ProjectService implements IProjectService { newTaskSubTime.setTaskDetailId(newTaskDetailId); newTaskSubTime.setBeginTime(oldTaskSubTime.getBeginTime()+timeDifference); newTaskSubTime.setEndTime(oldTaskSubTime.getEndTime()+timeDifference); - newTaskSubTime.setRealBeginTime(oldTaskSubTime.getRealBeginTime()+timeDifference); - newTaskSubTime.setRealEndTime(oldTaskSubTime.getRealEndTime()+timeDifference); newTaskSubTime.setCreatedAt(null); newTaskSubTime.setUpdatedAt(null); taskSubTimeDao.insertSelective(newTaskSubTime); @@ -1479,6 +1505,7 @@ public class ProjectService implements IProjectService { } } + //该用户关注新项目 UserAttention userAttention = new UserAttention(); userAttention.setId(snowflake.nextId()); @@ -1486,9 +1513,9 @@ public class ProjectService implements IProjectService { userAttention.setProjectId(newProject.getId()); attentionDao.insertSelective(userAttention); //添加角色 - copyRole(oldProject.getId(), newProject.getId()); + copyRole(oldProject.getId(), newProject.getId(),userId); //复制项目配置信息 - copyProjectConfig(oldProject.getId(), newProject.getId()); + copyProjectConfig(oldProject.getId(), newProject.getId(),userId); //复制项目下的角色 return null; } diff --git a/tall/src/main/java/com/ccsens/tall/web/TaskController.java b/tall/src/main/java/com/ccsens/tall/web/TaskController.java index 6eab29e7..6bc9e0bc 100644 --- a/tall/src/main/java/com/ccsens/tall/web/TaskController.java +++ b/tall/src/main/java/com/ccsens/tall/web/TaskController.java @@ -326,8 +326,8 @@ public class TaskController { @MustLoginTall @ApiOperation(value = "给任务增加分解任务",notes = "") @RequestMapping(value = "/addSubTaskForDetailTask", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse> addSubTaskForDetailTask(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { - List aboutWeekTask = taskDetailService.selectAboutWeekTask(params.getParam(),params.getUserId()); - return JsonResponse.newInstance().ok(aboutWeekTask); + public JsonResponse addSubTaskForDetailTask(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + taskDetailService.addSubTaskForDetailTask(params.getParam(),params.getUserId()); + return JsonResponse.newInstance().ok(); } } diff --git a/tcm/src/main/resources/application-common.yml b/tcm/src/main/resources/application-common.yml index b870f11f..07ef51cb 100644 --- a/tcm/src/main/resources/application-common.yml +++ b/tcm/src/main/resources/application-common.yml @@ -22,7 +22,7 @@ spring: log-request-details: true servlet: multipart: - max-file-size: 10MB + max-file-size: 15MB max-request-size: 100MB snowflake: datacenterId: 2 diff --git a/tcm/src/main/resources/application.yml b/tcm/src/main/resources/application.yml index f59084b0..b9b264a7 100644 --- a/tcm/src/main/resources/application.yml +++ b/tcm/src/main/resources/application.yml @@ -1,5 +1,5 @@ spring: profiles: - active: test - include: common, util-test + active: prod + include: common, util-prod diff --git a/tcm/src/main/resources/mapper_dao/DoctorDao.xml b/tcm/src/main/resources/mapper_dao/DoctorDao.xml index 15010256..86be07ac 100644 --- a/tcm/src/main/resources/mapper_dao/DoctorDao.xml +++ b/tcm/src/main/resources/mapper_dao/DoctorDao.xml @@ -28,7 +28,7 @@ t_doctor WHERE 1=1 - + and role in #{item} diff --git a/util/src/main/java/com/ccsens/util/WebConstant.java b/util/src/main/java/com/ccsens/util/WebConstant.java index 8a0fde3f..19dd7b63 100644 --- a/util/src/main/java/com/ccsens/util/WebConstant.java +++ b/util/src/main/java/com/ccsens/util/WebConstant.java @@ -1074,4 +1074,6 @@ public class WebConstant { this.message = message; } } + + } diff --git a/util/src/test/java/com/ccsens/util/Base64Test.java b/util/src/test/java/com/ccsens/util/Base64Test.java index 8260070a..1a3ad02a 100644 --- a/util/src/test/java/com/ccsens/util/Base64Test.java +++ b/util/src/test/java/com/ccsens/util/Base64Test.java @@ -6,8 +6,12 @@ import cn.hutool.core.util.ObjectUtil; import com.ccsens.util.exception.BaseException; import lombok.extern.slf4j.Slf4j; import org.junit.Test; +import org.springframework.util.ResourceUtils; +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; /** @@ -21,7 +25,7 @@ public class Base64Test { @Test public void test01() throws Exception { - File file = new File("d:"+File.separator+"1.png"); + File file = new File("d:" + File.separator + "1.png"); //data:image/png;base64, String valueData = "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"; Base64.decodeToFile(valueData, file); @@ -36,7 +40,7 @@ public class Base64Test { @Test public void test02() throws Exception { - ZipUtil.zip("C:\\Users\\逗\\Desktop\\新建文件夹","C:\\Users\\逗\\Desktop\\ht.zip"); + ZipUtil.zip("C:\\Users\\逗\\Desktop\\新建文件夹", "C:\\Users\\逗\\Desktop\\ht.zip"); // String a = "abcdefg"; // byte[] bytes = a.getBytes(); @@ -56,12 +60,60 @@ public class Base64Test { try { String a = "ax15"; System.out.println(Long.parseLong(a)); - }catch (NumberFormatException e){ + } catch (NumberFormatException e) { throw new BaseException("ssss"); } } + /** + * 文件转base64 + * + * @param path + * @return + * @throws Exception + */ + public static String encodeBase64File(String path) throws Exception { + File file = new File(path); + ; + FileInputStream inputFile = new FileInputStream(file); + byte[] buffer = new byte[(int) file.length()]; + inputFile.read(buffer); + inputFile.close(); + return new BASE64Encoder().encode(buffer); + } + + + /** + * 将base64字符解码保存文件 + * + * @param base64Code + * @param targetPath + * @throws Exception + */ + + public static void decoderBase64File(String base64Code, String targetPath) + throws Exception { + File file = new File(targetPath); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + byte[] buffer = new BASE64Decoder().decodeBuffer(base64Code); + FileOutputStream out = new FileOutputStream(targetPath); + out.write(buffer); + out.close(); + } + + public static void main(String[] args) { + try { + String str = "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PC06RXIgRJbpJELEx0dGGABqQLLIGXrtmiRU0d1GMvBBa3SR//MoxCcMuMrYAFJScJUDrePU7///////0BqTEBQH/6QCkuWuAcCSOdyRKc5AlRLeArwoEA0Ka1guUQnZq0hR8kFNWFgWu/////MoxC8NMNbldEmMcP//2aNnovKg9JMw1oI8zc+UENfKktAwXRvad2tEMXWeyl6rapQsfsxLM13VjK6P/////+tdYx6K84K+//MoxDUMYPbMAGoYcMLpR6vyhblS3KAl6hWnbCee9+sT25CLT1y1ixF++gO5dI//////20qSyQcr1fOCnsIU91L9C3KkTHiY//MoxD4L+P7IAGnYcDZ79b/0dQwxM46MIoxI6lUyWDEW2FKKn//////X5klb//QqL//8wDw9YpuyIsQviOpfob1DDWQJjnoL//MoxEkMCPrEAGnScI7gCXgKLvqTQa2NGMkzijf/////9tWOf2f32Ppq6hdBzJvWEVKfDp+Ej7AMJilxEUxy6VsLVdTR8bip//MoxFMNERLZlGnKcL0wCIUFzwEPNMd//////09C1Nb39Naa8lQRguaQkQjd9xQQfCIfecFgyT42r5WnfKOpKkVId2B4Qs6F//MoxFkNIPK8AGlQcBrk///////27af63qYFGabrOAL4LeDSiRwbMK0s6zYbRzSCx9jPSJrJ2wZ357LTJY8IkcWgAZf///////MoxF8M8OK4AInQcP///x9QrVUU6Gfr+wSrMaXtWjecsegKiBy4fl+MpjrdGvxe/zlbvf/LLI0uqiWGM1NYVjUiXFYkVPh3//MoxGYMWOK0AIpGcP//////069TzoiDt2oGlQzCk7rLtrsB//iGuR+o9DWlo1BqCoGhnDYdK96qaM3dgJRAvQMGYwIrJJSj//MoxG8QkPKgysYGcDGOKAWwRk1dX/akkNob+n/eE9IUFly3/WGkA0GuIYNKETl1v4/4HqMzUQiATQLfB4U2FzU1AVAejXb6//MoxGcTAQLWXnoGclD3zzutiVk03dtpzAJH+nIxZMqJRhgMG36BKd4SFaz1H/8bqTedac6bP//0KgwKbsEA2nwVcagUwXjk//MoxFYRyPKhHprMcHxJWXstoMkZcjeH9GPbkZ0NZYsDVYTOhJqhh7u/1u5b+v9P////Tas41mO48S+jANIkR1M+AaFRVqEX//MoxEkNKFZ4XjZeJLZNHorcg6rZ37N/V93/u/crf6//9fJIoEkuRrhk3YFRSyRmn1B4uGR1/+32enp/Zu2W2e0706b5v/r///MoxE8KwDZQDAveBP6PWo/u/ekYeNzhDoyc4CCFGjYSJLC5PIQCTrzgxZA1nibf/9Y5v77F2oQBMH/QKzhUFYfkCh9IY4vc//MoxF8JqC5YXgoeAAcm5Y+OcX////+if/wN+aRyFtNoM+U/PwxJI3bT6No7DoJmRD37bw/ttf59PuWgwC2s58nMTpGm+vHQ//MoxHMQsT5UAHpQcMJubEIPK6RXTRuzx04R7a1hkb49YUFzdSah0CwvU6nAlY4lYz5svUTNrHgyBy9r8v8BzgCQrho/8bgy//MoxGsXeY50FEmelNjSPn+PafTIQddDZh0/HZLpYyHGg2Xcm69s+DORvAmhdBO4v6jhzeTrkuCzvv/9P/+tBVYCqA8WaGFn//MoxEgPsWqIVAmWlHVfFUWuegCe6SGc2mXzae4+x391TQxRxrDHCyKArEMeTFCMeFrRAJcaVMHZ6r//v+7LUHgByQAazBMO//MoxEQO+S6E9BDQcKnRpj1f2jCgY68Y/P71PpL5f/a1UcBoUYTWYgIaNkGAn+mQfM9ZLqcvlntcS9ev3HTxagEIcF7jkEBZ//MoxEMOoS6APijGcBOnZjZr/nJbWvnM+xnR5f/+XrUBZCl1AWM4YUYGioxZH/2luP//+3//6gAIAMAME0raVNSHANhoBFYE//MoxEMMgS5sHUYQAMwCQ6Ya4muFxSDvVzGVRoRQ1U/mg/F4PCAP6nmk2Z6PCU5hoJwnv8t+IoTuchh7///HGX5/////eYt8//MoxEwVuwJwFYk4Ac7////7VQgTeP2rOc6dz5jQth8bmCKLmKEjzq3Q7LHsSmlypZ8qc7OXJ3QwweiIEIFiA+YPFRqIw8cm//MoxDAXuxKYAYM4AXyglCSRVHEgRTTzyxv/ZTX+1l8/M/6dLebppXmfV90dV911NPd0bmIWPLD5w0ssL/PH6/kdYEctJ3+7//MoxAwP4Vaky8EYAOXO204TIeW7nM/yUlKMRdawrOmGLsNMi4q/mFHKA+lNSbNv6X1HErB95IiwOnRQN7gI8VoAbbbba3XW//MoxAcOmAcCXgBEAoHsFwEosBRj0ytQeU02OOsrQymscYICRo5bFQQYOehgk/4Puhy1kne3/pfbIVBgLWgRfTWZAYChIXDZ//MoxAcMKF68AAJSKMDCrRIQMhdEKAXEAqf4Rf9cpUvahb3ztC2aFfd/o//6ncktam01WDXqUv//lgU4t7PMoV1OtFKCnA/j//MoxBERQU7UAHvGcI4BiG3EYbP1fnOt4yDFsaK3XeN/76T/N0IvvmhF9dx0UTlwfBwx3NXrn1NPidbC//t69JdRmC4bMq6c//MoxAcLqG7cAANwKHigrk37OW8dzFN3W/X/t7ea1ENoHCQdlBl9/8U1s/uft1A8QwJIVUX6kxNAKCi+iiVAYaop/b////////MoxBMMIqrUAGiEuf/////Rv+nbOR/oRP53/T9VT9i+WdRqF1Bt/XWttf4tQPGWjZbWNgy4T5xPg2/////////////6W/GR//MoxB0Mqr7EAJiEuPdIom7am+qL/Kf9L66jFZkswoUxLJL61DPggxM0VrMAJURkEvY9/X///////////X+qfDFBa+h9FlEh//MoxCUMgh64AJNEmOT+WxQGjq0A0G7wVBbuvxt2HgIBzwbkL8xTe9V3ZeCitSxVn/////xYGoNLWd1hJ+Rh0FTvLbp12WOv//MoxC4MyFKYAVkQAIiJrDUNVQA0IQCIwAYzAQB4HpO1AVhmFkNosjds27w5XerGRwrdO9zbnO/59WHzD/7eOGmFS5/T9nzz//MoxDUXgyKEf484AO5k///8H7qOMOMQX/09rL7KTRTzWc0mpv+v//2V5hhIw0rOF54+GTxE/////X////ReiFq57x85kMto//MoxBIQex68AcA4Ad7fz3M0ZnV2zFrmefoqtU8cIGMY70GjDjHEzT3U8/Ub3U4fFYlg8GilS5UF4yPnzg/8T/6f9yuwME4J//MoxAsL+xLkFAAEuYY4I4gQRWQvtq6Lor6pRmTzU/z6/up1MYQQpJeRvyrLaVqCREkP/AA/8z9FFAThAJBmA4wA//////////MoxBYNKbbplDhKlP0f7df106PqpQ6Ci5z+p9Qken1V0PrWd2adbCLiz1o+S4folAWcAQuEMOkFQLxianCRAH9FH//0G/////MoxBwPkurIyqNEuG//////0/fMihWoZTPvM2ubjI+iv/6pf/yasZnY7zt8DqoqLt4n6ykQYD9Dsn2rdFEug3YtL+3+7f////MoxBgPqubIyowEuFN/r/6/9v+3+HbvyCdLaEf1a4Ae1Oqe2qvzunLqzJcBFI5Q9FUNVfrmZgBzl9D3SDwCUz/b/X////////MoxBQMqrrIAIqKuP//5f+3+FI/6LvbQRIb9hFm+hHOvRkVvpUSYkPuK0r7WH8CuCaNa1MgkTgJJv9v////////////VvbM//MoxBwM6gLAAJtEmB15eGGHogyEWIiI+96gppFgqaJKaCmw1f0yMIkGKgVR/WxiAzTP/X/////////////b6gwws06eYp/0//MoxCMNCiq0AJNEmAITjjTmOeYkXTNYAhJOk8j1Kv5SLxAQUunjN3VjkHQDm/3/////////////lI9ERFARjVyoyZaoLNaV//MoxCkMKeKkAKHEmBF5ZJrSC7C19A+Cty1pcQDZEPz1e7KLwOxe///////lip1MSu7TLA0HTwM0ohxstCYbMrCZ0qo16s8O//MoxDMMwFqMABYYJIQCmC+yk0Eh8Avi/tb//////aiP0M2Uvla1xg/m/9W/2sVgGkhSVWgbUm0DMpVGIAuMgCAC38s4Di6c//MoxDsLYpaAtGgKuGszOUUynRJeqhEpZ///+r/0dH1/U/w0xYaliolVBYTxFR0M06wSB2IcBNpNDikhIsy4m1Q9FP3+v6v3//MoxEgKUFZcLDPEJK96WM1f//2f/6uz0AIABAyLpUKQAO3jaTSEUOnfrj4rs1NE2qaks6pToN61vWgzsfQmBoPA6bk8QYNI//MoxFkKeD5cV0kYAMUFtDnHDhuS6JeTt58kjrpHXN4PhsPeAyev7/svYj6/r9+O+mr4meWyjs6IRRNUMndmfKIpou7ZXZ/8//MoxGoU0WKE94ZoAHu7t+0RncgAAAYESfEmxkEAQJtvQXQQqHBBP///qizqXtCJQU7mf0VR+eIAYKBpo9hA7G41qzcpZn7E//MoxFEPaRqIK8MwAC5h7LYYhO/Cc4UogQMKPDAJsCAnwTMHBU2W2Z6jpAiPVM6O6vP3qzLev//9v//etmt00vRGFYAXLbSe//MoxE4UGnaEKipKuL1CioDKtD/8HbMJVaWAJu8KUaUjPcdM2lcHKCiO7D772X9CNojPmaPOQDrMvPY6LfrfdHZpJlazW7////MoxDgTAnKVlBGEuP//p9qtQyXYm1gdIead/U9aKhNrgBKoPDw0ogEb2trXGsglHKPUV+K76OmGGNzWTwtmByHqkmUBZt3e//MoxCcN8SKNlBCQcMLOGtR913///7kFh6n/d/+mJsCQCADoy2edf93CEUGdCHflGKlvkHJVu5+85zSPIhKLmmJOdoaLWw6e//MoxCoMqQaEX0IwAFsBX0//////XQIQGHzISBXFByaJq2E416xXtrvsV3DelYabYoj1N6LqLEj4Ub/auWkOjTzODg1s7Wx2//MoxDIV0R5oC4l4AGePurKfcsWjn1qegKOc4FZVf5B7YiE3+iM5wJNQv9y751C1YdpV67OzuTA3/JwwHfI44B4L0egS49DM//MoxBURik6wAY1oAKTtRdBqjQ8ZmZLhe0kXfm6Zo0P4WsYMY5Lp/1fl9O6df//6ds0ZZp///+0wcGEf//WqpBXK6CIGp1xF//MoxAkO+SLkAYJIACVVi9uIJSk+x+T2Qp1pS/pSo90I145CUpdLCNg32Csh1JGb0nIwMiQXb+ytZY2n9HzT1/iL6hYt3D7d//MoxAgMoSLkAcUwAAV0QA32OFEd/5v/pr/bdze7T/jCnqCRIWVsHHDywNsoXfU1Ybhou4ihYaV39/KgHOsoDH4pJcUEaRQA//MoxBAMWTLYyDnGcNGzoVGxwZqQpvcMzc1L3n8NdtY3UNVUOIYGw9QStZ7p4ioSSSSSCSTwrjRrhQB06eI4BzxwBApahQ1O//MoxBkMYSsGWFHEcsuQKZ9n6P//ubRS3KcCFA8G3gh7nRA4Vrr/5FNVuO2ANyOrQmZzFJAnA4hktZL1/9FHV9f9S9LrlZ6G//MoxCIM4ZKsAHtElTjIVhxjPY6CjSIxXhnYaCbyahLJXLRbHKAB3DgLIQ8PYCDqJoaI1Hr46m11udqfPV/kqnzckgrUeYDZ//MoxCkM8FbmXjveJqJMQIFGAxUKf9mmBrB2AA1ewAH/pYG4HGiwAlpbECiJRcRDpWr//////+Wql01LVEd0lzGoY5WYxjGD//MoxDANQaK6XklElBoSqq2rAZkjA+4cEDSZuR1VBwFNf///50q5x8GhKDVQNHhrVGzr54sqJaCPySw1lftR/61D3g1BqiAw//MoxDYM4EKAH0gQAKNQAgWiUgA1JkVAgNRbZFR71+jZv9Oz29UounX+lG/T/MF4tjYCQCwHv8uXPv9G9//L/b6nKbRVH/////MoxD0OSXJ4d4dQAPuP44ziOiVJk8dI9FYxPigVC6gKodzeIOMcprbuvYbRsWsrF7p46thcPVmqEgjdhw7KZI2+UVCCeRgK//MoxD4UwXKwy4tAAJq+N6CXv+z/7lvoocPIBVrHLkBVaf/qkYBcMmI9bGsdhWo5WtznHII0Y1TW3g/p+DF+tc8OLWUeHeNS//MoxCYMsPK0Ac8QAGlgFn///////+pu6HH3QAo4iDZZgodQCmIRSlsOoC7IrbOEmn5a//+cyGeZcAgoYvKIigQqPypn//////MoxC4NKN60AGxScP//7kUe/0L6YTENxqGU3Q6HD/yjlA0GSJn4gpyJT9qTJ7+xIeAEO7UaHMWOf///////5jDFPfhn50FZ//MoxDQLaMrEAGvMcDdb7D2C+HuiMYELHO/ODmKDNsMDSdUCJRdthEQbX///////9NPFk1DiOx6l+syCIVk1u1AKmav4sQDQ//MoxEEMYNrYymtKcmjK1DuEzT/yQdBYn05QCQv/7Cp75h3/////9X8sGzUc8ye8RXm8uv2BxD3WbfeGIEi1czQfhTL6+9Uw//MoxEoNaObAAINQcBT8Oi/oHgcnVSjOv//////r1NU6Ihd8aJXCieu+Wk4X8Gfx+BSjZLzUK0YBJLmQxg9Eoq1FgpG6GQUT//MoxE8MsObAAGrKcMKWQIRBv///////65v9REOND9IqHjqa+swRAW8ZNb+O0ElKSKVaMdojJ9FSWoUBW/UoluawUYh5wXMI//MoxFcMoNrAymtEcP///////29CF+doYyvWwVYBI6Ax9xuJAYSFurB5zS2Nxv/1KRmY1DOkYMBCqAhI6///////+z15ZT+o//MoxF8LwN6kAJNEcArg1c5yWQG/0BypxQcpgtjatI3pE9wUSp5ImXM5jsz8kn55XyoUSaLHnu6qj2h3/////6nrhsUJOQTZ//MoxGsMqPZ8IklGcBJQrwLxhF5R5D670RMowp5IbjIXEwRjO0iKlEjdf9Gl6///q6f+xvqVtXioagWOwaD698PUAC0flAzJ//MoxHMMMNpIAMGGcOP6tGe/3L+d/rvykCjLQAyIqWEkXsWgOm0EXy78o5B2N+ceBMUeoPZdiuVCFCfflkz9///3W/598NdC//MoxH0L0IpEAHpGTHOCRJIGBMSRLkApChJ1mAIpzbd3//+j6f6qEGBgdm0iNo7s2A0Jso50R139/n0n///feRpsjxrCMKQy//MoxIgMORJYAGDScALQ8zXYedwFev//////JFjVapvkAySGDi8nwGZipPRHIB/mO+/K9L3bvmfltvsu9dyzJlUukxetLh4n//MoxJINYRpwCkjScBbwBymPQNVDLnZH6yT2K0IVCrbbo5zcVIEPJ6xN/3/6q3om4mNOYweOJi4oGAwMPEBAYGFM+uj/sT/9//MoxJcMaSp4NDCQcB1fdT6f9ZJeVYBq0EoD4ThwlRJ1CKc4dLPa/0hur/wuvvr1G8ZVosZSHQLsRGlVpImtWCv3hPJej/////MoxKAOkS5cAEmYcOv/sEi2qcGA+GF/Qg5LddtJttsBMzO3lPHy8zAuP5+0WC4DNWfjCCmxWJo4kDg0UiJYPAAAWAGEIPxW//MoxKAMsRZ0NhhKcg7EgICu557sjuPueee37mOZzDNnRrmNb/+r///9P//v7//dlPfstjOqmqaPLDFRwvX+fHMXTwxgSTGk//MoxKgPaRJ41hiScqXos3b+JswRMUm5Yg4AE4AF8j0E1KbLCXUIwpblM3Uw/kJy4MILYfxlmlk3nrLzdk0EF//fqp////b6//MoxKUX2ubSX0w4Av////W9Cg6alf+//tf866mTN3M3MBCy//xwj6JjLpdEn2YGQkdNgstWGQFCEBFxK6JUypEUJT3VhMJB//MoxIAW6xKkAZhoAf5Z9esM3E52JYHw6TnaDRKTzVjtu/RrigJoUXTX////bqJgAyJ1lyZcogHyhQUBAYYGhVxAHQIJBZAH//MoxF8YKO60AdhgAJhd8zBvjJvE0AbqEzfbgEiNGAzZB3FCy43EPObG4Z+7/pBIKqi0iIFAsH5dGvwSgoWBUXNUVf////j3//MoxDkTmM7AAGvYcBZaiiFCzIbZPuUtgcAI4CESyUQ8gYobbbSV7AC6gf6oDFpaIDRzfwhhJp80MASWL85T7Nv/PaooGtnG//MoxCUQQNseXlvKchnpfUSDoNQWPM2/////9Wk2SOsOvpwp1lTvh2l+EMeTA4VUTwPrZqcDX1qnDem4cCQWtlhYfTuD4fNJ//MoxB8MaNbEymsQcGDcIWbpmvgmoq7//////1173UXoh2HR0lA20bbyBWXm1sYkeJkoD9mxHJA/kgZT77fbDhhPXvVcWzxK//MoxCgNGLqoAGveTOJTe7//////3r+k9SrmgLh9kI8S32u9DO+ZakiQN7XGw/zuUsW64J+LlGy8G4m/4ECNtZGIfZ////////MoxC4MuLakAFYeTNoshApT/xkT1/SpRgOaq+A7ht/FwpYL7GCwwrVUrfenHSh8TJ7Sz4rIGWHbP///////31436ukBSCka//MoxDYMQKqgAHveTKxhQdiO9E8I16xUihU95EUq65w9R2JDSFuUObMyHVzqFd1/v///////S1SZ73uFVQqwTwA8OwGoStSi//MoxEANELKcAGveTJizHyteGME5HF62oa2aIEBPIeyGJIswoyC6W8Of//////+v4TUVd793JEOC7NAABsA/HUDpHbghyO3u//MoxEYNOKadlGvGTKpZt/UGL57mra4JO+Hgo6MTSo0Ku93///////Kld4UW7/0rISNXobZoWSPf4SHjfnYFOR0ns+ixrMzN//MoxEwNAK6dvoPMTIjuZdsSktelQRJokREameR4Tou/b////////r6qBGIhOWOghHIQk4gbQgJ0eZVnCElJXSOxrf/6cp/+//MoxFMNIKpYCsvSTPvrH9fWd/of///jKgiYGAcBnBmiBq6jrE6ZgmGBMpqklEhmWqUqsolSbZ/NN/7/6P//+v///rosgblV//MoxFkKUDZg/gpMBOrF0LAHSEegsiohaMqxlCwevalXvlnJ/9jFv9nb/ufv7/7K/f/qADVEsku3uAAlUBgAMefYpArLGO2q//MoxGoKoDZMDBPSBIpZ1qqKmt3+ldlPq2OZ+robRSugj//+MsD4XDXBShpEnGyQfFAaUoAAgLpVg+DxFgOXnzihosMcgAPU//MoxHoKgGZMDHpGKAhQIAQgALINkAcTcbods/0Vtaz/9/pf/2JqCVmiQsRRWlxT3lQkymlsYeo5504n7uaotmWcQEXUBFY7//MoxIsLMB5xvglMACss6eoqVnNTRa6lUrMYe69TWd0fZDJkxlJwppsV3f//0/x2L01lRpG5wWTL+7nfzFVfzGPPc92PJvzG//MoxJkPEFpIAnpMJJhhhKPSEYER38fj8nEQIgkH5ISGEAsCFEV/yeIsRYtgVBYMhkDwE4iR4FGFcSSD//PPcwyfx0bFjUWB//MoxJcRaYJIAU8oAM//j3gEUIAEUIGFn+MpJDCfnt/6f70/u19zn2a1ycxmnZyqSGHu8hG41BQPkFdqko9Ssuw8sSEBIeFc//MoxIwW4lKcAYJQABvESCGADBAQcCjf//2/AJiHKnCwIsVDUPJDP//vyAw15stcwL8fi2SjorjUjH5KRDz//////////+b4//MoxGsYQyK0AYFQAJjm5dC2rQRZEfYAQVGwho+WDxiE1QWMrNFwUhCER1rBZ1h2YccaOZrqYqUM0Wo4WZVbeuqqH7TW93kq//MoxEUVsvrQAcBAAe4RDHiqYcdExFbinLKhlnty8QCId4iIexxxsD8xkxAGJL3GJ2YkiK5MpIHUrciaNqKqwu7zE4K//1Tv//MoxCkWUYsbHgpQlvzUfOiVfFeN6sYYHITCENR3MtR72OkbYWPLCjw09uoYBny0RI/bJZFpZ6ksu88k6pUf///j+2X68eRi//MoxAoPefMuXgiEmkxkZyIEZnO1n0f//317tY6112eitVnXcxRiBXMZddf/Tyl6t3mAazr+oO/+FWStvrenvzbxMA3AI+vH//MoxAcNsFrIACveJCVTkVeCOJ0zko4mm3LAOLfYX5z83Ix4QD7BwsVMCciHSRwPFU/67HsWeb//0/TspvUCYDCZqIgEgFFS//MoxAsMGF7gADpYKFhWguPK55991v//+ndUcODju5IgNse3UXek5lN3o25Os/Ka3WU18qEn24rgOXfRIXAXJCt3Z3HUz/////MoxBUMwF7cADseKPq9R4cPGpQZeNGKNwkdhRgsaczdT6lkdUUCsROjaPKxIKWeA+lNlICTAcU1xVHf/////+/+vr6ent7P//MoxB0M6abMAGqElMM74U/XFTlsscYHPZ7a8dFXIPSzlilS8jQ4B5VCSRI3UdOgwVnSJf/////9P////+6PwS0dRSo6D8oh//MoxCQNOhbAAIQEmLVkqhrLEpRv/7YlPFnVnB/T//oHmSsUnoZIx40FhCaAwLDqaUb////////////70O5STqg5UU5VuzKr//MoxCoM+gLAAHqEmLiXaBP//RS6p1IOOSQAACSCAf/yE+UttYhJ4OdzflGBMHCA6b///////////+5ERIQrGkYGx42JnSWP//MoxDENOb8CXnlElv//5ZEJpWWgUWW2gfDA3hM2XWQgiWEhG1NCVQQdGO//v/V2/UdKlRMHVA09gKhrgVyWv///WGr6lflZ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//MoxFcLOD5QD08YAJFfxi6K279a+JPs0136FqdxNNfWk5/v19PbP/mn+9n9+77f3ogdG/hV2AfhR+Y9BmtjbaACoYSJNAZa//MoxGUWMRpMC48YASaDAWMxhOa0CNEpjKAxASVdyHrS2wOtNJsJh08aZU2fizEQgSGNfafF2vCLxku5oDJKHJoCDRQy61So//MoxEcTaFpgF4kQANWPsHwiUKoCBCCSC8LUJShVbi4qOARik1NnGyXi7xIQSqNsyXTfftOvZjIl9s7mU6/p32YiTn+u0h36//MoxDQU6wJgS48oAaoyu6xg/+3+96nVL6HkExAgb9P6yMm3/EICCIuNW1rV8uGPQQsl6MP4l4dIa9KHO/F8znvPePA//6////MoxBsTqwa4AY84Af/////////zLslJ6FXLf5hjHq558miMeeN1dSThoeAqNwlB4Lz//8nPQy3+KCA4hVCOtzo3Ayf/wRI2//MoxAcNOGrQy88QAuhXwzmQWv8rGk3ufakSf/////+r3AR4xQiExOY3PGJeoSx4Tlhz0kvLHgbFNlPrSDVJXZA6ITgTitTT//MoxA0QMbLMAINElRZgT6KzMvm//////////6N5F3utVex3Dix1g4V4bV5kTpfzHvPBW3MVONp+wj3l+L/vesX0wpo+6oHL//MoxAcJ8FrYAGsYJLs4JAjHzNS6MjxVlFT/+z/8jVi2QCYhIx6P30ZCv//rrfD0FU5FWTXWat2N5KATACh+5Ye+Ew0t9H6///MoxBoLEHrQAFPWSP/LQCxIVGFlIMyW+j//v7Pb+tXlABgbNC7CCurbhuOsQABhtaCtfItfWd/yW7p8TcWDSw6EgVOyNP////MoxCgL+HrEAFPQSO3+2mWlRrwkG4PnWAjji3A6iUkKSZrZQGnJJAama///////////mfUKMkrv/9Vblf691sGgaO0JG1Jn//MoxDMMAYq0ymqElHHahp0CLNybkBXPJRwyobNY1LotQzTzHsaf9X9n//tjJb////+hgNUyrv4rKswO3I+FCDt1DoKNqKh7//MoxD4LuGaMys4YKG0MRB21Szmd6tTZ4Vxg5NVT769n0UaadHPNGuix2lD8r///1aEdtktkiiksoqJw+A+eGgTuSBDC/bqj//MoxEoM8FpwFVkYAA3/nQUIP/+UwACCi//7nRmOQN/0tvxA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aw5//+FvC/j0GWZkuV///lMuJGJLk82Lhh///+am6zAlDI1T//MoxHoL6DZMA08YAEzhoXP////zpLmZw0JAmjzOmQ8CYUSX//9pG8gheFFd7qNK4n8Q57AfRq2chOxGVVDiPI+lYTAi4rz7//MoxIUYQyKUAY1oAKfZ/q3z+u7YQyBCi+B/pX2g71mlVe8AQDYU////yD9ZpTpB7diOjuEDjmTVA+7sP+g/wghzvVXcFGqo//MoxF8T0SLMAc94ALi2cd6LIyx62v6QgpXma1gRPglTnvPz8VVG/j/WJL69r4/CJB5WdaGdr+pP6H/v/l//6G/lZF60Mi+///MoxEoV0uLdlGvKubS0ROrkP0dSDjuE3LdVCMiyoByRED6sFEBoKJtSWyYVoBrKbesdwXBdlGeLCEB0WSXHUcCqJBnvbxaJ//MoxC0TsSLaPmtScDpZdZJZDUP/7VDpwtWN4iLv3O//+rbXXKeJ63KDg2dc5iUpRkf1iEwBZP3ayZqUA3z9c1QcYwlZT39Y//MoxBkRoPbEyotScKgSjYURfPbYEvryhKxkULps48FQ0bU9Dff////53WeUNA1KE8cfWGjY1IHqOJX+xTCGRMI+uZA4D38x//MoxA0NQs7EAJtEuRwN2SpOaV01WJw7iTZFupL//////////////1/7U/29eoImWpbvtqX+YD0CHAWhHqSoBdgVDauxWUPa//MoxBMMINa8AJNQcP967iXTFgVB2PgdlHf//////9uG9EuTaXStS2IxZf2NyJBDgyCbJ7p3GcDbTZf6ydf/byto4ElDWuco//MoxB0MmP64AIwEcLDH//////629anWSzl2A0G1tMw20goaHVff64AegdEJYJBQtFH16j1XxedvyiSX9aOv/X06AQECs6lT//MoxCUMAP8KXimEcvnv/////LHfI6waHdD5QINPsIMrGuhHZ4NSP9HBwyPwGLIdxr4IQmFVY8qGyIEPu2v/TYcp////yC3+//MoxDANMFKAKhYMJJ63rPxS+rOOAtFrtoigHjjdf7HwEoxuwcY/8teqLkaqufk77+n8g8jJ6E/8nv9/05NdTndd3/RTpyHT//MoxDYPAv6cADhEuSXUwGjDqv90IxhKagyDVH537PpEUKHxcJS+Hox8pl6Efxug6ICpmcm3lQ52lRr0JWiOrdCfZNdep53v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//MoxEALgF7plAPYKlaOXaR/tr/9jhKFQAaSn//qQv//2As2RBV9KuhRaMh0IaQPxW+MNVS7A8A2ixNUelY9fLf///JsLHXg//MoxE0LGFLEAAYeJJCwh//+z//kskIc75HZSAN8HeGi005KI2XIAJDUlhrJZ0zRn3f///s2WuU0+kUvp3/9f/2Z90VXF84H//MoxFsLQGK8ABYeKOXBsQNBAnX1C5AZE05jlN///+mhJnV2+qN/TfQ5Ppavsn99bdtFOdnkbVKSO7uWQQacPnMcXciAIKAA//MoxGkNGFq4AG4eJIX//////////5f02MsZ//6/9bbf///bU9nR6lzVcscPnqzM6mHU6nElJUAoTIBGLx8mAFoFAAtljLH///MoxG8NIxLMAFAKudH/yP//////7//+6vUiszVI9aFcwQAKasNPiMpU5oPt//yiED//9I8AAf/7aug//////6f9M9Lb3bap//MoxHUMOyLYAABOvJEfRFSqpZHEwgzDZsfvZPkjqFNep3/Q3IM//dcEqvhMDZQ6haBAUKydIKH8Sv/////9hcFYnAZ0gMhl//MoxH8MQb8WXghElittnRVcXvaqKA0IkONlTruIhFET1PEt/ysejz3FAZjpWtUCCgJkKhn////////////XqRzOokylKCPU//MoxIkMEas1/gBKlqQTBo7Q/rzVZ6TrPQGGlgUTXbYbbC7XAeGbY1DBkHFeuk012qDTvk2v3W0uiWXPXWf/+s6JHoFXtW4K//MoxJMM6FLQACpSJB4kHav/OzvszomIqv7hLzFFC+HdOGe6xa0dD4F5c6aA8hZmrOXU23628fy9Q8mIiz2OCsodK5239MWf//MoxJoNAdrUAFiElGxWvjVVB3PPuDoCKwGuy956VSAOm1+Rw0lUxzeUpfx/6ftNPc8nS4GguJQWCYSMkv//fZ+hA0AURCOC//MoxKENiGsSXlPWKgF5CmyUGNZN1AJ9IAkTA7AQgSbYn+xoSDowrYnIiEgIjxm0nPvocteqH/tPV0Zuvp9/6X/s6un//9GZ//MoxKUM2O6UAMNKcKx////9EMMVzR+Ti2UJBY/////Kk55AYIgseNBmTi2shWuR+81d////3////pPzHaQa54+85JQseRPP//MoxKwL8GqYyVgYAP5YwdZFGyoXGhIanCxnL/6T2MmKe5AHhxp6G0PPKoSF4FB0eW6av/IjI6LxoGx05Ryeh8FglDwjAtBa//MoxLcYOxqM1ZpQAXjY4oTLkHocDgf7aXj6/sH//////+/+Tm0dgQsOUYQijsQIYo8INCA56MWObf3H2O0bZV1qXULHoWlb//MoxJEXIyLQAYc4AJ3J6wALaABbHLJR//rdf/////03R1q10661ATFXlY0rwRiFR7h0763XJr94udtQGg0wQu6zpW4DnbWT//MoxG8NwYdB/8EQAqLD6httthtrLsLh59QztQUhTFZH//1+vXW3+bZa/rI9tB4FvCQNPSFSOVb5Hsr//+m0KUlv6fWoyAEg//MoxHMOkX8eXghElixFqU2tFT4VYQdEOWbaY1fPrf/pTLtqdf/0Z3Tq9rowcDOxQMDBK8X///////3aavzoEWShgXkcHsJM//MoxHMMwV8eXgiElj3HK5dZYhyE3plv5537t8gKv5g8Fo5tSgFoVlwZdmf//////HfrH/8n8FRynwaZETRa8zC2hsvzEt/k//MoxHsNER7AAGvEcB/f6F0+MgsNWeaAJLfF7sq7Idmr///yXdrF9ddqavrI4AtxEFFDcHkZB7uYhMxsf1m36t+TfmfoBKXU//MoxIEMQRbAAGtUcPZyIRRb5pL2ajv////+pFIlY5Ky5c4R6RZrtttZgBqB//mjeCZfv2ObH0EZPLupwU0gt6Jqh8sjdCu3//MoxIsMkS64ypQUcKCnrwI304d7P/////f9Cwng1f33dSA1OguoGnNxos5TQnBe9lGtITN5cvS2/Uon6lLwQMyiBbmaFMK///MoxJMNQTKoAJtUcP//////8q5e5SySgALkRA/1aRcpodQalLMFhbIEFstHyOXv/r+tqS6ghQaDv+7tf/v7v9H/u9P9FXbM//MoxJkNKPb6XntEcqtiBQQtCRFf61Iyb2HgSIJqsKjXtEtht8dKuIi77L7f7aBZP/////7P9fUqJEna4xijeA0lS/bFp9iA//MoxJ8M6QqAAMpEcPRg+kgIJQanVNZTPqv54t/PJ/Lf/s5X//9POt/xWsIKwjHYHQuDIAEcAqKxaKowBHhJyRyRuB0JHg6E//MoxKYLWOpkvniEcIKjBg8BFSDDv2f//////9RVP//0VUxBTUUzLjk5LjVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVV//MoxLMLSFJIAE4SJFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVV//MoxMALIFJAAnvMJFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OS41VVVVVVVVVVVV//MoxM4MSFoQCmMMJFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//MoxMQAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//MoxMQAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//MoxMQAAANIAAAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"; + String outUrl = "D://mp3/AVLT_1.mp3"; + decoderBase64File(str, outUrl); + } catch (Exception e) { + e.printStackTrace(); + + } + } } diff --git a/util/src/test/java/com/ccsens/util/TallTest.java b/util/src/test/java/com/ccsens/util/TallTest.java new file mode 100644 index 00000000..98bad869 --- /dev/null +++ b/util/src/test/java/com/ccsens/util/TallTest.java @@ -0,0 +1,17 @@ +package com.ccsens.util; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class TallTest { + + + +}