From 877eb048d3eeabde343e29256b688403fe3069ca Mon Sep 17 00:00:00 2001 From: zhang chengzhi <3144712872@qq.com> Date: Thu, 29 Aug 2024 20:01:39 +0800 Subject: [PATCH] 11111 --- cloud-rule-common/pom.xml | 7 + .../{DataDescribe.java => DataValue.java} | 4 +- .../rule/common/domain/RuleEngineVersion.java | 6 + .../rule/common/domain/req/VersionAddReq.java | 6 + .../com/muyu/rule/common/utils/OssUtil.java | 162 ++++++++++++++++++ .../java/com/muyu/rule/server/DataTest.java | 4 +- .../java/com/muyu/rule/server/EngineTest.java | 1 - .../main/java/com/muyu/rule/server/Main.java | 70 ++++++++ .../muyu/rule/server/basic/BasicEngine.java | 26 +++ .../abstracts/DataEngineRowActuator.java | 30 ++++ .../abstracts/DataEngineValueActuator.java | 35 ++++ .../basic/engine/ENGINE_VALUE_VFD1000_V1.java | 23 +++ .../basic/engine/ENGINE_VALUE_VFD1000_V2.java | 24 +++ .../basic/handler/DataEngineHandler.java | 35 ++++ .../basic/handler/DataEngineRowHandler.java | 22 +++ .../basic/handler/DataEngineValueHandler.java | 44 +++++ .../server/engine/Engine_2024_8_23_2347.class | Bin 2559 -> 0 bytes .../server/engine/Engine_2024_8_23_2347.java | 2 +- .../muyu/rule/server/util/FileLoadUtil.java | 81 +++++++++ 19 files changed, 577 insertions(+), 5 deletions(-) rename cloud-rule-common/src/main/java/com/muyu/rule/common/domain/{DataDescribe.java => DataValue.java} (90%) create mode 100644 cloud-rule-common/src/main/java/com/muyu/rule/common/utils/OssUtil.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/Main.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/BasicEngine.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineRowActuator.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineValueActuator.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V1.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V2.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineHandler.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineRowHandler.java create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineValueHandler.java delete mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/engine/Engine_2024_8_23_2347.class create mode 100644 cloud-rule-server/src/main/java/com/muyu/rule/server/util/FileLoadUtil.java diff --git a/cloud-rule-common/pom.xml b/cloud-rule-common/pom.xml index 8992d0f..db7349d 100644 --- a/cloud-rule-common/pom.xml +++ b/cloud-rule-common/pom.xml @@ -11,6 +11,7 @@ cloud-rule-common + 17 17 @@ -23,6 +24,12 @@ com.muyu cloud-common-core + + + com.aliyun.oss + aliyun-sdk-oss + 3.12.0 + diff --git a/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/DataDescribe.java b/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/DataValue.java similarity index 90% rename from cloud-rule-common/src/main/java/com/muyu/rule/common/domain/DataDescribe.java rename to cloud-rule-common/src/main/java/com/muyu/rule/common/domain/DataValue.java index 81ba87d..ab67ae9 100644 --- a/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/DataDescribe.java +++ b/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/DataValue.java @@ -1,6 +1,7 @@ package com.muyu.rule.common.domain; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -12,9 +13,10 @@ import lombok.NoArgsConstructor; * @Date:2024/8/27 9:18 */ @Data +@Builder @AllArgsConstructor @NoArgsConstructor -public class DataDescribe { +public class DataValue { /** * 键 diff --git a/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/RuleEngineVersion.java b/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/RuleEngineVersion.java index a51ee2d..04067b3 100644 --- a/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/RuleEngineVersion.java +++ b/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/RuleEngineVersion.java @@ -35,6 +35,11 @@ public class RuleEngineVersion extends BaseEntity { * 版本名称 */ private String versionName; + /** + * 版本类名 + */ + + private String className; /** * 版本编码 */ @@ -75,6 +80,7 @@ public class RuleEngineVersion extends BaseEntity { .versionName(versionAddReq.getVersionName()) .versionCode(versionAddReq.getVersionCode()) .versionClazz(versionAddReq.getVersionClazz()) + .className(versionAddReq.getClassName()) .build(); } diff --git a/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/req/VersionAddReq.java b/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/req/VersionAddReq.java index 3306f98..3870ca5 100644 --- a/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/req/VersionAddReq.java +++ b/cloud-rule-common/src/main/java/com/muyu/rule/common/domain/req/VersionAddReq.java @@ -26,6 +26,12 @@ public class VersionAddReq { * 版本名称 */ private String versionName; + /** + * 版本类名 + */ + + private String className; + /** * 版本编码 */ diff --git a/cloud-rule-common/src/main/java/com/muyu/rule/common/utils/OssUtil.java b/cloud-rule-common/src/main/java/com/muyu/rule/common/utils/OssUtil.java new file mode 100644 index 0000000..71dbea6 --- /dev/null +++ b/cloud-rule-common/src/main/java/com/muyu/rule/common/utils/OssUtil.java @@ -0,0 +1,162 @@ +package com.muyu.rule.common.utils; + +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.GetObjectRequest; +import com.aliyun.oss.model.PutObjectRequest; +import lombok.extern.log4j.Log4j2; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.time.LocalDateTime; +import java.util.UUID; + +/** + * Oss服务调用 + */ +@Log4j2 +public class OssUtil { + + /** + * Endpoint 存储对象概述 阿里云主账号AccessKey,accessKeySecret拥有所有API的访问权限 访问路径前缀 存储对象概述 + */ + private static String endPoint = "oss-cn-shanghai.aliyuncs.com"; + private static String accessKeyId = "LTAI5tDbRqXkC5i3SMrCSDcX"; + private static String accessKeySecret = "XUzMZoHPLsjNLafHsdQnMElBWZATsu"; + private static String accessPre = "https://mall-bw.oss-cn-shanghai.aliyuncs.com/"; + + /** + * bucket名称 + * + * @return + */ + private static String bucketName = "mall-bw"; + + private static OSS ossClient; + + static { + ossClient = new OSSClientBuilder().build( + endPoint, + accessKeyId, + accessKeySecret); + log.info("oss服务连接成功!"); + } + + /** + * 默认路径上传本地文件 + * + * @param filePath + */ + public static String uploadFile(String filePath) { + return uploadFileForBucket(bucketName, getOssFilePath(filePath), filePath); + } + + /** + * 默认路径上传multipartFile文件 + * + * @param multipartFile + */ + public static String uploadMultipartFile(MultipartFile multipartFile) { + return uploadMultipartFile(bucketName, getOssFilePath(multipartFile.getOriginalFilename()), multipartFile); + } + + /** + * 上传 multipartFile 类型文件 + * + * @param bucketName + * @param ossPath + * @param multipartFile + */ + public static String uploadMultipartFile(String bucketName, String ossPath, MultipartFile multipartFile) { + InputStream inputStream = null; + try { + inputStream = multipartFile.getInputStream(); + } catch (IOException e) { + e.printStackTrace(); + } + uploadFileInputStreamForBucket(bucketName, ossPath, inputStream); + return accessPre + ossPath; + } + + /** + * 使用File上传PutObject上传文件 ** 程序默认使用次方法上传 + * + * @param bucketName 实例名称 + * @param ossPath oss存储路径 + * @param filePath 本地文件路径 + */ + public static String uploadFileForBucket(String bucketName, String ossPath, String filePath) { + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, ossPath, new File(filePath)); + + // 上传 + ossClient.putObject(putObjectRequest); + return accessPre + ossPath; + } + + /** + * 使用文件流上传到指定的bucket实例 + * + * @param bucketName 实例名称 + * @param ossPath oss存储路径 + * @param filePath 本地文件路径 + */ + public static String uploadFileInputStreamForBucket(String bucketName, String ossPath, String filePath) { + + // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 + InputStream inputStream = null; + try { + inputStream = new FileInputStream(filePath); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。 + uploadFileInputStreamForBucket(bucketName, ossPath, inputStream); + return accessPre + ossPath; + } + + public static void uploadFileInputStreamForBucket(String bucketName, String ossPath, InputStream inputStream) { + ossClient.putObject(bucketName, ossPath, inputStream); + } + + /** + * 下载 + * + * @param ossFilePath + * @param filePath + */ + public static void downloadFile(String ossFilePath, String filePath) { + downloadFileForBucket(bucketName, ossFilePath, filePath); + } + + /** + * 下载 + * + * @param bucketName 实例名称 + * @param ossFilePath oss存储路径 + * @param filePath 本地文件路径 + */ + public static void downloadFileForBucket(String bucketName, String ossFilePath, String filePath) { + ossClient.getObject(new GetObjectRequest(bucketName, ossFilePath), new File(filePath)); + } + + /** + * @return + */ + public static String getOssDefaultPath() { + LocalDateTime now = LocalDateTime.now(); + String url = + now.getYear() + "/" + + now.getMonth() + "/" + + now.getDayOfMonth() + "/" + + now.getHour() + "/" + + now.getMinute() + "/"; + return url; + } + + public static String getOssFilePath(String filePath) { + String fileSuf = filePath.substring(filePath.indexOf(".") + 1); + return getOssDefaultPath() + UUID.randomUUID().toString() + "." + fileSuf; + } + +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/DataTest.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/DataTest.java index 898eb7e..aa20cfc 100644 --- a/cloud-rule-server/src/main/java/com/muyu/rule/server/DataTest.java +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/DataTest.java @@ -1,6 +1,6 @@ package com.muyu.rule.server; -import com.muyu.rule.common.domain.DataDescribe; +import com.muyu.rule.common.domain.DataValue; /** * @Author:张承志 @@ -12,7 +12,7 @@ import com.muyu.rule.common.domain.DataDescribe; public class DataTest { public static void main(String[] args) { - DataDescribe describe = new DataDescribe(); + DataValue describe = new DataValue(); describe.setKey("name"); diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/EngineTest.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/EngineTest.java index fef5b77..0284692 100644 --- a/cloud-rule-server/src/main/java/com/muyu/rule/server/EngineTest.java +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/EngineTest.java @@ -35,7 +35,6 @@ public class EngineTest { params.put("idcard","142021200212215977"); Object engineObject = EngineExecution.engineExe("Engine_2024_8_23_2347", params); - System.out.println("====>"+engineObject); diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/Main.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/Main.java new file mode 100644 index 0000000..4aa1bce --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/Main.java @@ -0,0 +1,70 @@ +package com.muyu.rule.server; + +import com.muyu.rule.common.domain.DataValue; +import com.muyu.rule.server.basic.BasicEngine; +import com.muyu.rule.server.basic.engine.ENGINE_VALUE_VFD1000_V1; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server + * @Project:cloud-etl-rule + * @name:Main + * @Date:2024/8/29 15:57 + */ +public class Main { + + static Map> engineMap = new ConcurrentHashMap<>(); + + + static { + try { + Class aClass = Class.forName("com.muyu.rule.server.basic.engine.ENGINE_VALUE_VFD1000_V1"); + + try { + engineMap.put("ENGINE_VALUE_VFD1000_V1", (BasicEngine) aClass.newInstance()); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + + } + + + public static void main(String[] args) { + DataValue dataValue = DataValue.builder() + .type("String") + .label("姓名") + .key("name") + .value(null) + .build(); + + BasicEngine engineValue = engineMap.get("ENGINE_VALUE_VFD1000_V1"); + + engineValue.set(dataValue); + + engineValue.execution(); + + + } + + + + + + + + + + + + +} + + diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/BasicEngine.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/BasicEngine.java new file mode 100644 index 0000000..1e1463a --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/BasicEngine.java @@ -0,0 +1,26 @@ +package com.muyu.rule.server.basic; + +import com.muyu.rule.common.domain.DataValue; +import com.muyu.rule.server.basic.handler.DataEngineHandler; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic + * @Project:cloud-etl-rule + * @name:BasicEngine + * @Date:2024/8/29 14:29 + */ +public interface BasicEngine { + + public void set(V dataValue); + + public V get(); + + public default void remove(){ + DataEngineHandler.remove(); + } + public void execution(); + + + +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineRowActuator.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineRowActuator.java new file mode 100644 index 0000000..a6c9b3a --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineRowActuator.java @@ -0,0 +1,30 @@ +package com.muyu.rule.server.basic.abstracts; + +import com.muyu.rule.common.domain.DataValue; +import com.muyu.rule.server.basic.BasicEngine; +import com.muyu.rule.server.basic.handler.DataEngineRowHandler; +import com.muyu.rule.server.basic.handler.DataEngineValueHandler; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic.abstracts + * @Project:cloud-etl-rule + * @name:DataEngineValueAu + * @Date:2024/8/29 15:11 + */ +public abstract class DataEngineRowActuator implements BasicEngine { + +public void set(DataValue[] dataValue){ + DataEngineRowHandler.set(dataValue); +} + +public DataValue[] get(){ + return DataEngineRowHandler.get(); +} + + + + + + +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineValueActuator.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineValueActuator.java new file mode 100644 index 0000000..101e789 --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/abstracts/DataEngineValueActuator.java @@ -0,0 +1,35 @@ +package com.muyu.rule.server.basic.abstracts; + +import com.muyu.rule.common.domain.DataValue; +import com.muyu.rule.server.basic.BasicEngine; +import com.muyu.rule.server.basic.handler.DataEngineValueHandler; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic.abstracts + * @Project:cloud-etl-rule + * @name:DataEngineValueAu + * @Date:2024/8/29 15:11 + */ +public abstract class DataEngineValueActuator implements BasicEngine { + +public void set(DataValue dataValue){ + DataEngineValueHandler.set(dataValue); +} + +public DataValue get(){ + return DataEngineValueHandler.get(); +} + + + + @Override + public void execution() { +this.run(); +this.remove(); + } + + public abstract void run(); + + +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V1.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V1.java new file mode 100644 index 0000000..17bc004 --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V1.java @@ -0,0 +1,23 @@ +package com.muyu.rule.server.basic.engine; + +import com.muyu.rule.common.domain.DataValue; +import com.muyu.rule.server.basic.abstracts.DataEngineValueActuator; + +import javax.xml.crypto.Data; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic.engine + * @Project:cloud-etl-rule + * @name:ENGINE_VALUE_VFD1000_V1 + * @Date:2024/8/29 15:51 + */ +public class ENGINE_VALUE_VFD1000_V1 extends DataEngineValueActuator { + @Override + public void run() { + DataValue dataValue = get(); + if (dataValue.getValue() == null){ + System.out.println("数据为空"); + } + } +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V2.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V2.java new file mode 100644 index 0000000..b5c067d --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/engine/ENGINE_VALUE_VFD1000_V2.java @@ -0,0 +1,24 @@ +package com.muyu.rule.server.basic.engine; + +import com.muyu.rule.common.domain.DataValue; +import com.muyu.rule.common.utils.Desensitization; +import com.muyu.rule.server.basic.abstracts.DataEngineValueActuator; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic.engine + * @Project:cloud-etl-rule + * @name:ENGINE_VALUE_VFD1000_V1 + * @Date:2024/8/29 15:51 + */ +public class ENGINE_VALUE_VFD1000_V2 extends DataEngineValueActuator { + @Override + public void run() { + DataValue dataValue = get(); + + String string = Desensitization.mobilePhoneDesensitization((String) dataValue.getValue()); + + System.out.println("手机号脱敏的结果是====>"+string); + + } +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineHandler.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineHandler.java new file mode 100644 index 0000000..47922ad --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineHandler.java @@ -0,0 +1,35 @@ +package com.muyu.rule.server.basic.handler; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic + * @Project:cloud-etl-rule + * @name:DataEngineHandler + * @Date:2024/8/29 14:21 + */ +public class DataEngineHandler { + + private static final ThreadLocal dataEngineHandler = new ThreadLocal<>(); + + public static void set(final Object handler){ + + dataEngineHandler.set(handler); + } + + public static T get(){ + + return (T) dataEngineHandler.get(); + } + + +public static void remove(){ + dataEngineHandler.remove(); +} + + + + + + + +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineRowHandler.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineRowHandler.java new file mode 100644 index 0000000..2654dc2 --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineRowHandler.java @@ -0,0 +1,22 @@ +package com.muyu.rule.server.basic.handler; + +import com.muyu.common.core.text.Convert; +import com.muyu.rule.common.domain.DataValue; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic.handler + * @Project:cloud-etl-rule + * @name:DataEngineValueHandler + * @Date:2024/8/29 14:35 + * @Description:数据值处理对象 + */ +public class DataEngineRowHandler { + + public static void set(DataValue[] dataDescribe){DataEngineHandler.set(dataDescribe);} + + public static DataValue[] get(){ + return DataEngineHandler.get(); + } + +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineValueHandler.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineValueHandler.java new file mode 100644 index 0000000..49e6785 --- /dev/null +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/basic/handler/DataEngineValueHandler.java @@ -0,0 +1,44 @@ +package com.muyu.rule.server.basic.handler; + +import com.muyu.common.core.text.Convert; +import com.muyu.rule.common.domain.DataValue; + +/** + * @Author:张承志 + * @Package:com.muyu.rule.server.basic.handler + * @Project:cloud-etl-rule + * @name:DataEngineValueHandler + * @Date:2024/8/29 14:35 + */ +public class DataEngineValueHandler { + + + public static void set(DataValue dataDescribe){ + + DataEngineHandler.set(dataDescribe); + } + + + + public static DataValue get(){ + return DataEngineHandler.get(); + } + + + public static void remove(){ + DataEngineHandler.remove(); + } + + + public static Object getValue(){ + return get().getValue(); + } + + public static Integer getInt(){ + return Convert.toInt(getValue(),null); + } + + + + +} diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/engine/Engine_2024_8_23_2347.class b/cloud-rule-server/src/main/java/com/muyu/rule/server/engine/Engine_2024_8_23_2347.class deleted file mode 100644 index e633024a2575eeda6586e362ba5c912a6c283363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2559 zcma)8`*Raj6#j10c9UhXA-qh>qde`to87p(DO5y7 zDnC&aUxq@-SM`R=*<_dg>~0K9~& zGK%1lP^_Q?r40UF-p@lC*W;nXUA-b^GnDRDb=BU(;Hj?Z@WRUgA7spvpeUG+7iMgV z4p_EGkgSoSt&1bBI@JiZo2qU{ZBy_>ScV@9Bm@*JbWAQRAj2RfogJDkV=vV7|SqIx@Hx>m;mKP>q^gh_;##p@*B7;0D zCn$2h%~8D_J0$E>unUbjOkJ6FVX8(q8SE1FX(4omJy|ejsmLHSYcfBOj3$a=J9aBX zG{@I$6jp$!_p*Xlu$RJ5@IKLG=rL{|Q|(jKvuv*0mXn5@`}wI1fT79RyPsiQp+wEi zU4SUwB;!>al+dE!HOH5&F(VO5qy|zUGo^`;CCq+dhLVP%g<^(ob5*C|0Xl-ht}f~a&csC0Rt?>Yw-~C&ei)qi z^1|fEPouy8IeGv5*tN$K-<==-W@zl%R}QqI|)AGLX`uazgW zE31#Bbmz2msFq5i?cC%EVGDDwt{XOY04B!QMGA6=Ps?O^11*@%` zB}S`bcOMbEz4-LM1SYOOb_G78gZ6w!gi$eR(W%I|G!vGDOT@o9Fc(5k!et8P|3!%u z8K|*}s#FoxTVjDzr>N(lKHc@yYBX9-PrA`jvf(kh6SImYosTaNNu%cx4$V$Z o8AXyJfg<$dG(F2HJ!fdshi?0^+kWD {}",fileName,e.getMessage(),e); + return ""; + } + + +} + + public static void main(String[] args) { + + + + + + + + } + + + + + + + + + + + + + + + + +}