From 9efe703bca2d6475328a0576dc2ab2e1d09b89db Mon Sep 17 00:00:00 2001 From: Cheney Wong Date: Mon, 30 Jun 2025 16:01:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3=E5=92=8C?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/java 接口说明.docx | Bin 38164 -> 38066 bytes pom.xml | 2 +- .../com/sunyard/sge/database/ISM4Mac.java | 3 +- .../java/com/sunyard/sge/database/SydApi.java | 4 +- .../sge/database/SydApiBaseFunction.java | 18 +- .../sge/database/SydApiLongLinkWrap.java | 6 +- .../com/sunyard/sge/database/SydSM4Mac.java | 10 +- src/test/java/test/CalcRes.java | 68 + src/test/java/test/Choise.java | 25 + src/test/java/test/EncryptAndMac.java | 4 +- src/test/java/test/LongDataTest.java | 6 +- src/test/java/test/Test.java | 8 +- src/test/java/test/TestAll.java | 1284 +++++++++++++++++ sydapi-database.iml | 22 - test/start.sh | 1 + test/sydapi-database-1.15.jar | Bin 0 -> 60107 bytes 16 files changed, 1416 insertions(+), 45 deletions(-) create mode 100644 src/test/java/test/CalcRes.java create mode 100644 src/test/java/test/Choise.java create mode 100644 src/test/java/test/TestAll.java delete mode 100644 sydapi-database.iml create mode 100644 test/start.sh create mode 100644 test/sydapi-database-1.15.jar diff --git a/doc/java 接口说明.docx b/doc/java 接口说明.docx index 126cd066a8113592ae5eb54b6f31cbaf0b5b1872..350d0711d91bf0df70f2594d2ac40694950288cf 100644 GIT binary patch delta 27370 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

$dF&ZW%t~H{@I)xwFYEQ84OWyy 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 ae@zmFy$4q%3Bpo>50aP=G2;Ju-v0rGU|e

_%0e@|=UFc8J>h5Zi3cU!U?=TDiaWZm{uwt=|K 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 sOi%j1?S*9j|L com.sunyard sydapi4j - 1.12.20220915 + 1.15.20250627 org.apache.logging.log4j diff --git a/src/main/java/com/sunyard/sge/database/ISM4Mac.java b/src/main/java/com/sunyard/sge/database/ISM4Mac.java index 0f061e8..f227d0c 100644 --- a/src/main/java/com/sunyard/sge/database/ISM4Mac.java +++ b/src/main/java/com/sunyard/sge/database/ISM4Mac.java @@ -2,5 +2,6 @@ package com.sunyard.sge.database; public interface ISM4Mac { public void update(byte[] pcData); - public String disget(); + public String digest(); + public boolean checkDigest(String mac); } diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java index e7a65c5..1c026db 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi.java +++ b/src/main/java/com/sunyard/sge/database/SydApi.java @@ -296,12 +296,14 @@ public interface SydApi { * @param mac 输入。密文的 MAC。 * @return 明文 */ - byte[] SYD_SM4_CheckMacAndDecrypt_ShortData( + DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData( int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac ); + + List SYD_SM4_EncryptAndMac_BatchData( int[] iEncKeyIndex, int[] iMacKeyIndex, diff --git a/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java index 06f8ee9..0969e42 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java +++ b/src/main/java/com/sunyard/sge/database/SydApiBaseFunction.java @@ -798,14 +798,18 @@ public class SydApiBaseFunction implements SydApi { return new DataAndMac(enData, mac); } - @Override - public byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) { - boolean ret = SYD_SM4Mac_ShortData(iMacKeyIndex, pcData, mac); - if (!ret) { - throw new SydApiException("MAC 验证不通过", 90); - } - return SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_DEC); + + @Override + public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) { + boolean ret = SYD_SM4Mac_ShortData(iMacKeyIndex, pcData, mac); + byte[] data = null; + try { + data = SYD_SM4_ShortData(iEncKeyIndex, pcData, Consts.ECB_DEC); + }catch (Exception e){ + return new DataAndMacCheck(null, ret); + } + return new DataAndMacCheck(data, ret); } @Override diff --git a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java index 5d83f40..82f8abf 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java +++ b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java @@ -170,10 +170,10 @@ public class SydApiLongLinkWrap implements SydApi { } @Override - public byte[] SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) { - FutureTask task = builder.getLongLinkWorks().fTask(new Callable() { + public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) { + FutureTask task = builder.getLongLinkWorks().fTask(new Callable() { @Override - public byte[] call() throws Exception { + public DataAndMacCheck call() throws Exception { return builder.get().SYD_SM4_CheckMacAndDecrypt_ShortData(iEncKeyIndex, iMacKeyIndex, pcData, mac); } }); diff --git a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java index fa4333c..99eb0ea 100644 --- a/src/main/java/com/sunyard/sge/database/SydSM4Mac.java +++ b/src/main/java/com/sunyard/sge/database/SydSM4Mac.java @@ -20,6 +20,7 @@ public class SydSM4Mac implements ISM4Mac { this.pcProcData = null; } + @Override public void update(byte[] pcData) { if (null == pcData || 0 == pcData.length) { return; @@ -70,7 +71,14 @@ public class SydSM4Mac implements ISM4Mac { } } - public String disget() { + + @Override + public boolean checkDigest(String mac) { + return mac != null && this.pcMac.equals(mac); + } + + @Override + public String digest() { if (is_finished) { throw new SydApiException(0x8007); diff --git a/src/test/java/test/CalcRes.java b/src/test/java/test/CalcRes.java new file mode 100644 index 0000000..748872c --- /dev/null +++ b/src/test/java/test/CalcRes.java @@ -0,0 +1,68 @@ +package test; + +import com.sunyard.proto.Util; +import com.sunyard.sge.database.DataAndMac; + +import java.util.ArrayList; +import java.util.List; + +public class CalcRes { + public static final String SM3_SHORT_RESULT1 = "62EDD1C6C4542572F68A2A687AF44E5CD809A5A72CACAA00B07B38581F23E515"; + public static final String SM3_SHORT_RESULT2 = "1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B"; + public static final String SM3_LONG_RESULT1 = "418EE7D57FB9944DD2EC3B1BA9656BD63B8D374F8BE9CEE4DA5D7FE057200B47"; + public static final String SM3_LONG_RESULT2 = "1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B"; + public static final String SM4_SHORT_RESULT1 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"; + public static final String SM4_SHORT_RESULT2 = "4C72CDD5012CA05BC095A4A4F5B66F64"; +// public static final String SM4_LONG_RESULT1 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"; + public static final String SM4_LONG_RESULT2 = "9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"; + public static final String SM4MAC_SHORT_RESULT1 = "CD9A5C8CD83FE0D750CF853D17281D52"; + public static final String SM4MAC_SHORT_RESULT2 = "2A268D5A440F8E9E50AA6FDC453E8593"; + public static final String SM4MAC_LONG_RESULT1 = "96CE0C05DB2DB6496E78EEE49B4C82AE"; + public static final String SM4MAC_LONG_RESULT2 = "C699B51638B56C3E5D490B9026ED2DD7"; + + public static final List SM4_BATCH_RESULT = new ArrayList(){ + { + this.add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"); + add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"); + add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"); + add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"); + add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"); + add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"); + add("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"); + } + }; + + public static final String[] SM4MAC_BATCH_RESULT = new String[]{"8747BCB522816BFEE8753D6FD61AD320", + "8747BCB522816BFEE8753D6FD61AD320", + "8747BCB522816BFEE8753D6FD61AD320", + "8747BCB522816BFEE8753D6FD61AD320", + "8747BCB522816BFEE8753D6FD61AD320", + "8747BCB522816BFEE8753D6FD61AD320", + "8747BCB522816BFEE8753D6FD61AD320"}; + + public static final DataAndMac SM4ANDMAC_SHORT_RESULT1 = new DataAndMac(Util.hexString2Bytes("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"), + "C8DECD5C3BB3C0C282639A7535952588"); + + public static final DataAndMac SM4ANDMAC_SHORT_RESULT2 = new DataAndMac(Util.hexString2Bytes("4C72CDD5012CA05BC095A4A4F5B66F64"), + "287FD202E5692067FAD98E0FB73CC0B0"); + + public static final List SM4ANDMAC_BATCH_RESULT = new ArrayList(){ + { + this.add(new DataAndMac(Util.hexString2Bytes("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"), + "53E6C24F300F47206E0DF3FB4569FFC2")); + add(new DataAndMac(Util.hexString2Bytes("82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A2A268D5A440F8E9E50AA6FDC453E8593"), + "13573E2C145A51998F8E872E146E576A")); + add(new DataAndMac(Util.hexString2Bytes("9602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF79602336689EBE51437A3B12B0915CFF74C72CDD5012CA05BC095A4A4F5B66F64"), + "53E6C24F300F47206E0DF3FB4569FFC2")); + add(new DataAndMac(Util.hexString2Bytes("82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A2A268D5A440F8E9E50AA6FDC453E8593"), + "13573E2C145A51998F8E872E146E576A")); + add(new DataAndMac(Util.hexString2Bytes("82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A2A268D5A440F8E9E50AA6FDC453E8593"), + "13573E2C145A51998F8E872E146E576A")); + add(new DataAndMac(Util.hexString2Bytes("82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A2A268D5A440F8E9E50AA6FDC453E8593"), + "13573E2C145A51998F8E872E146E576A")); + add(new DataAndMac(Util.hexString2Bytes("82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A82F1B998DEBBB05E06369243FF44347A2A268D5A440F8E9E50AA6FDC453E8593"), + "13573E2C145A51998F8E872E146E576A")); + } + }; + +} diff --git a/src/test/java/test/Choise.java b/src/test/java/test/Choise.java new file mode 100644 index 0000000..1a47b9d --- /dev/null +++ b/src/test/java/test/Choise.java @@ -0,0 +1,25 @@ +package test; + +import java.util.Scanner; + +public class Choise { + private String[] args; + private int argIndex = 0; + private Scanner scanner = new Scanner(System.in); + + public Choise(String[] args) { + this.args = args; + } + + public String get(){ + if(argIndex < args.length){ + return args[argIndex++]; + }else{ + return scanner.nextLine(); + } + } + + public int getAsInt(){ + return Integer.parseInt(get()); + } +} diff --git a/src/test/java/test/EncryptAndMac.java b/src/test/java/test/EncryptAndMac.java index 022fe29..ee2df03 100644 --- a/src/test/java/test/EncryptAndMac.java +++ b/src/test/java/test/EncryptAndMac.java @@ -29,9 +29,9 @@ public class EncryptAndMac { // 短数据 DataAndMac ret = api.SYD_SM4_EncryptAndMac_ShortData(keyEncIdx, keyMacIdx, data); - byte[] deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac()); + DataAndMacCheck deData = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEncIdx, keyMacIdx, ret.getData(), ret.getMac()); - if (Arrays.equals( data, deData ) ) { + if (Arrays.equals( data, deData.getData() ) ) { System.out.println("短数据加密并计算 MAC - 测试通过"); } else { System.out.println("短数据加密并计算 MAC - 测试失败"); diff --git a/src/test/java/test/LongDataTest.java b/src/test/java/test/LongDataTest.java index cd616e2..bf28f62 100644 --- a/src/test/java/test/LongDataTest.java +++ b/src/test/java/test/LongDataTest.java @@ -78,14 +78,14 @@ public class LongDataTest { public void sm4mac_case1() { ISM4Mac sydApiMac = api.initSM4Mac(1); sydApiMac.update(null); - String mac = sydApiMac.disget(); + String mac = sydApiMac.digest(); Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac); } @Test public void sm4mac_case2() { ISM4Mac sydApiMac = api.initSM4Mac(1); - String mac = sydApiMac.disget(); + String mac = sydApiMac.digest(); Assert.assertEquals("FF49F76AD3A71651FE1A8A9F0D2A689E", mac); } @@ -99,7 +99,7 @@ public class LongDataTest { sydApiMac.update(data); } - String mac = (String) sydApiMac.disget(); + String mac = (String) sydApiMac.digest(); } diff --git a/src/test/java/test/Test.java b/src/test/java/test/Test.java index 8b833d0..180c3b8 100644 --- a/src/test/java/test/Test.java +++ b/src/test/java/test/Test.java @@ -32,7 +32,7 @@ package test; // * int i = random.nextInt(4065); // * SydSM4Mac sydApiMac = api.initSydSM4Mac(api, 1, 1,1); // * sydApiMac.update(new byte[i]); -// * System.out.println(sydApiMac.disget().getData()); +// * System.out.println(sydApiMac.digest().getData()); // * // * SM4 updata传0-4064随机长度 // * Random random = new Random(); @@ -67,10 +67,10 @@ package test; // String s = Util.bytes2HexString(finish); // System.out.print( s); // -// SM4Mac直接调用disget +// SM4Mac直接调用digest // SydSM4Mac sydSM4Mac = api.initSydSM4Mac(api, 1, 1,1); -// LongDataReturn disget = sydSM4Mac.disget(); -// System.out.println(disget.getData()); +// LongDataReturn digest = sydSM4Mac.digest(); +// System.out.println(digest.getData()); // **/ // //// SydApiSM4 sydApiSM4 = api.initSydApiSM4(api, 1,1, 1); diff --git a/src/test/java/test/TestAll.java b/src/test/java/test/TestAll.java new file mode 100644 index 0000000..e7e9882 --- /dev/null +++ b/src/test/java/test/TestAll.java @@ -0,0 +1,1284 @@ +package test; + +import com.sunyard.SydApiException; +import com.sunyard.proto.Util; +import com.sunyard.sge.database.*; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class TestAll { + private static final String[] ipListElec = new String[]{"127.0.0.1", "172.1.41.129"}; + private static final String[] ipListLight = new String[]{"192.168.110.240", "192.168.100.45"}; + + private static final String[] ipList = ipListElec; + private static final String[] ipListErr = new String[]{"172.2.41.216", "172.2.41.129"}; + + public static final int ECB_DEC = 0; + public static final int ECB_ENC = 1; + + public static void showmenu() { + System.out.println("请选择测试项:"); + System.out.println("1.SM4短数据加解密"); + System.out.println("2.SM4批量数据加解密"); + System.out.println("3.SM4-MAC短数据"); + System.out.println("4.SM4-MAC批量数据"); + System.out.println("5.SM3短数据"); + System.out.println("6.SM4短数据加密后生成MAC,解密验证MAC"); + System.out.println("7.SM4批量数据加密后生成MAC,解密验证MAC"); + System.out.println("8.SM4长数据加解密"); + System.out.println("9.SM4长数据MAC"); + System.out.println("10.SM3长数据"); + System.out.println("11.功能全量测试"); + System.out.println("12.性能全量测试"); + System.out.println("13. 短数据 SM4+MAC性能测试"); + System.out.println("14. 批量数据 SM4+MAC性能测试"); + System.out.println("-1.退出"); + } + + public void sm4ShortEndes() throws InterruptedException { + System.out.println("-------- SM4短数据加解密性能测试开始 --------"); + sm4ShortEnde(1, 10000, 1024); + sm4ShortEnde(40, 10000, 1024); + System.out.println("-------- SM4短数据加解密性能测试结束 --------\n"); + } + + public void sm4ShortEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException { + byte[] data = new byte[plainLen]; + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + ThreadLocal Api = new ThreadLocal() { + @Override + protected SydApi initialValue() { + return builder.build(); + } + }; + + ExecutorService poolEnc = Executors.newFixedThreadPool(numberOfThreads); + long start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolEnc.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM4_ShortData(0, data, ECB_ENC); + }); + } + poolEnc.shutdown(); + poolEnc.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + long end = System.currentTimeMillis(); + long duration = end - start; + double tps = totalRequest * 1000.0 / duration; + double throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + String.format("%.2f", tps)); + System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB\n"); + + SydApi apiTest = Api.get(); + byte[] res = apiTest.SYD_SM4_ShortData(0, data, ECB_ENC); + + ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads); + start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolDec.submit(() -> { + SydApi api = Api.get(); + byte[] plain = api.SYD_SM4_ShortData(0, res, ECB_DEC); + }); + } + poolDec.shutdown(); + poolDec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + end = System.currentTimeMillis(); + duration = end - start; + tps = totalRequest * 1000.0 / duration; + throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + tps); + System.out.println("吞吐量: " + throughput + " MB\n"); + } + + public void sm4BatchEndes() throws InterruptedException { + System.out.println("-------- SM4批量数据加解密性能测试开始 --------"); + sm4BatchEnde(1, 100000, 1024); + sm4BatchEnde(40, 100000, 1024); + System.out.println("-------- SM4批量数据加解密性能测试结束 --------\n"); + } + + public void sm4BatchEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException { + int[] keyIdx = new int[]{0, 0, 1, 1}; + List data = new ArrayList<>(); + data.add(new byte[1000]); + data.add(new byte[1000]); + data.add(new byte[1000]); + data.add(new byte[1000]); + + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + ThreadLocal Api = new ThreadLocal() { + @Override + protected SydApi initialValue() { + return builder.build(); + } + }; + + ExecutorService poolEnc = Executors.newFixedThreadPool(numberOfThreads); + long start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolEnc.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM4_BatchData(keyIdx, data, ECB_ENC); + }); + } + poolEnc.shutdown(); + poolEnc.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + long end = System.currentTimeMillis(); + long duration = end - start; + double tps = totalRequest * 1000.0 / duration; + double throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + String.format("%.2f", tps)); + System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB\n"); + + SydApi apiTest = Api.get(); + List res = apiTest.SYD_SM4_BatchData(keyIdx, data, ECB_ENC); + + ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads); + start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolDec.submit(() -> { + SydApi api = Api.get(); + List plain = api.SYD_SM4_BatchData(keyIdx, res, ECB_DEC); + }); + } + poolDec.shutdown(); + poolDec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + end = System.currentTimeMillis(); + duration = end - start; + tps = totalRequest * 1000.0 / duration; + throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + tps); + System.out.println("吞吐量: " + throughput + " MB\n"); + } + + public void sm4macShortEndes() throws InterruptedException { + System.out.println("-------- SM4MAC短数据性能测试开始 --------"); + sm4macShortEnde(1, 100000, 1024); + sm4macShortEnde(40, 100000, 1024); + System.out.println("-------- SM4MAC短数据性能测试结束 --------\n"); + } + + public void sm4macShortEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException { + byte[] data = new byte[plainLen]; + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + ThreadLocal Api = new ThreadLocal() { + @Override + protected SydApi initialValue() { + return builder.build(); + } + }; + + ExecutorService poolEnc = Executors.newFixedThreadPool(numberOfThreads); + long start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolEnc.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM4Mac_ShortData(0, data); + }); + } + poolEnc.shutdown(); + poolEnc.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + long end = System.currentTimeMillis(); + long duration = end - start; + double tps = totalRequest * 1000.0 / duration; + double throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + String.format("%.2f", tps)); + System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB\n"); + } + + public void sm4macBatchEndes() throws InterruptedException { + System.out.println("-------- SM4MAC批量数据性能测试开始 --------"); + sm4macBatchEnde(1, 100, 1024); +// sm4macBatchEnde(40, 100000, 1024); + System.out.println("-------- SM4MAC批量数据性能测试结束 --------\n"); + } + + public void sm4macBatchEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException { + int[] keyIdx = new int[]{0, 1, 0, 1}; + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + ThreadLocal Api = new ThreadLocal() { + @Override + protected SydApi initialValue() { + return builder.build(); + } + }; + List data = new ArrayList<>(); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + + ExecutorService poolEnc = Executors.newFixedThreadPool(numberOfThreads); + long start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolEnc.submit(() -> { + SydApi api = Api.get(); + String[] s = api.SYD_SM4Mac_BatchData(keyIdx, data); + System.out.println(s); + }); + } + poolEnc.shutdown(); + poolEnc.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + long end = System.currentTimeMillis(); + long duration = end - start; + double tps = totalRequest * 1000.0 / duration; + double throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + String.format("%.2f", tps)); + System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB\n"); + } + + public void sm3ShortEndes() throws InterruptedException { + System.out.println("-------- SM3短数据性能测试开始 --------"); + sm3ShortEnde(1, 100000, 1024); + sm3ShortEnde(40, 100000, 1024); + System.out.println("-------- SM3短数据性能测试结束 --------\n"); + } + + public void sm3ShortEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException { + byte[] data = new byte[plainLen]; + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + ThreadLocal Api = new ThreadLocal() { + @Override + protected SydApi initialValue() { + return builder.build(); + } + }; + + ExecutorService poolEnc = Executors.newFixedThreadPool(numberOfThreads); + long start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolEnc.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM3_Hash_ShortData(data); + }); + } + poolEnc.shutdown(); + poolEnc.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + long end = System.currentTimeMillis(); + long duration = end - start; + double tps = totalRequest * 1000.0 / duration; + double throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + String.format("%.2f", tps)); + System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB\n"); + } + + public void sm4ShortMacEndes() throws InterruptedException { + System.out.println("-------- SM4短数据加密生成MAC,解密验证MAC性能测试开始 --------"); + System.out.println("单线程"); + sm4ShortMacEnde(1, 10000, 1024); + + System.out.println("40 线程"); + sm4ShortMacEnde(40, 100000, 1024); + System.out.println("-------- SM4短数据加密生成MAC,解密验证MAC性能测试结束 --------\n"); + } + + public void sm4ShortMacEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException { + byte[] data = new byte[plainLen]; + int keyEnc = 0; + int keyMac = 0; + + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + ThreadLocal Api = new ThreadLocal() { + @Override + protected SydApi initialValue() { + return builder.build(); + } + }; + + SydApi apiTest = Api.get(); + DataAndMac ret = apiTest.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data); + + + ExecutorService poolEnc = Executors.newFixedThreadPool(numberOfThreads); + long start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolEnc.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data); + }); + } + poolEnc.shutdown(); + poolEnc.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + long end = System.currentTimeMillis(); + long duration = end - start; + double tps = totalRequest * 1000.0 / duration; + double throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + String.format("%.2f", tps)); + System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB\n"); + + + + ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads); + start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolDec.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, ret.getData(), ret.getMac()); + }); + } + poolDec.shutdown(); + poolDec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + end = System.currentTimeMillis(); + duration = end - start; + tps = totalRequest * 1000.0 / duration; + throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + tps); + System.out.println("吞吐量: " + throughput + " MB\n"); + } + + public void sm4BatchMacEndes() throws InterruptedException { + System.out.println("-------- SM4批量数据加密生成MAC,解密验证MAC性能测试开始 --------"); + System.out.println("单线程"); + sm4BatchMacEnde(1, 10000, 1024); + System.out.println("40 线程"); + sm4BatchMacEnde(40, 100000, 1024); + System.out.println("-------- SM4批量数据加密生成MAC,解密验证MAC性能测试结束 --------\n"); + } + + public void sm4BatchMacEnde(int numberOfThreads, int totalRequest, int plainLen) throws InterruptedException { + int[] keyEnc = new int[]{0, 0, 0, 0}; + int[] keyMac = new int[]{0, 0, 0, 0}; + List data = new ArrayList<>(); + data.add(new byte[plainLen]); + data.add(new byte[plainLen]); + data.add(new byte[plainLen]); + data.add(new byte[plainLen]); + + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + + ThreadLocal Api = new ThreadLocal() { + @Override + protected SydApi initialValue() { + return builder.build(); + } + }; + SydApi apiTest = Api.get(); + List ret = apiTest.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data); + + + ExecutorService poolEnc = Executors.newFixedThreadPool(numberOfThreads); + long start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolEnc.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data); + }); + } + poolEnc.shutdown(); + poolEnc.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + long end = System.currentTimeMillis(); + long duration = end - start; + double tps = totalRequest * 1000.0 / duration; + double throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + String.format("%.2f", tps)); + System.out.println("吞吐量: " + String.format("%.2f", throughput) + " MB\n"); + + ExecutorService poolDec = Executors.newFixedThreadPool(numberOfThreads); + start = System.currentTimeMillis(); + for (int i = 0; i < totalRequest; i++) { + poolDec.submit(() -> { + SydApi api = Api.get(); + api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, ret); + }); + } + poolDec.shutdown(); + poolDec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); + + end = System.currentTimeMillis(); + duration = end - start; + tps = totalRequest * 1000.0 / duration; + throughput = totalRequest * 1000.0 / duration * plainLen / 1024 / 1024; + + System.out.println("并发数: " + numberOfThreads); + System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("TPS: " + tps); + System.out.println("吞吐量: " + throughput + " MB\n"); + } + + public void sm4LongEnde() { + System.out.println("-------- SM4长数据加解密性能测试开始 --------"); + + byte[] data = new byte[1024]; + int key = 0; + ByteBuffer enDataBuff = ByteBuffer.allocate(100 * 1024 * 1024 + 16); + + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + long start = System.currentTimeMillis(); + SydApi api = builder.build(); + + ISM4 sm4 = api.initSM4(key, ECB_ENC); + for (int i = 0; i < 100 * 1024 * 1024 / data.length; i++) { + sm4.update(data); + } + byte[] res = sm4.finish(); + + long end = System.currentTimeMillis(); + long duration = end - start; + double throughput = 100.0 * 1000 / duration; + + System.out.println("加密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("吞吐量: " + throughput + " MB\n"); + + start = System.currentTimeMillis(); + + sm4 = api.initSM4(key, ECB_DEC); + for (int i = 0; i < 100 * 1024 * 1024 / data.length; i++) { + sm4.update(Arrays.copyOfRange(res, i * 1024, (i + 1) * 1024)); + } + sm4.update(Arrays.copyOfRange(res, 100 * 1024 * 1024, 100 * 1024 * 1024 + 16)); + sm4.finish(); + + end = System.currentTimeMillis(); + duration = end - start; + throughput = 100.0 * 1000 / duration; + + System.out.println("解密共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("吞吐量: " + throughput + " MB\n"); + + System.out.println("-------- SM4长数据加解密性能测试结束 --------\\n"); + + } + + public void sm4MacLongEnde() { + System.out.println("-------- SM4MAC长数据性能测试开始 --------"); + + byte[] data = new byte[1024]; + + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + long start = System.currentTimeMillis(); + SydApi api = builder.build(); + + ISM4Mac sm4mac = api.initSM4Mac(0); + for (int i = 0; i < 100 * 1024 * 1024 / data.length; i++) { + sm4mac.update(data); + } + sm4mac.digest(); + + long end = System.currentTimeMillis(); + long duration = end - start; + double throughput = 100.0 * 1000 / duration; + + System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("吞吐量: " + throughput + " MB\n"); + + System.out.println("-------- SM4MAC长数据性能测试结束 --------"); + } + + public void sm3LongEnde() { + System.out.println("-------- SM3长数据性能测试开始 --------"); + + byte[] data = new byte[1024]; + + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + + long start = System.currentTimeMillis(); + SydApi api = builder.build(); + + ISM3 sm3 = api.initSM3(); + for (int i = 0; i < 100 * 1024 * 1024 / data.length; i++) { + sm3.update(data); + } + sm3.digest(); + + long end = System.currentTimeMillis(); + long duration = end - start; + double throughput = 100.0 * 1000 / duration; + + System.out.println("共花费 " + String.format("%.2f", duration / 1000.0) + " 秒"); + System.out.println("吞吐量: " + throughput + " MB\n"); + + System.out.println("-------- SM3长数据性能测试结束 --------"); + } + + public void loggerFunc() { + System.out.println("-------- 设置日志配置功能测试开始 --------"); + SydApi.SYD_SetLogConfig("./logs", 3); + System.out.println("日志配置成功,存储路径./logs,级别3"); + System.out.println("-------- 设置日志配置功能测试结束 --------\n"); + } + + public void connectFunc() { + System.out.println("-------- 短连接建立与关闭功能测试开始 --------"); + + System.out.println("-------- 短连接建立与关闭功能测试结束 --------\n"); + } + + public void longConnectFunc() { + System.out.println("-------- 设置长连接参数与获取长连接功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + System.out.println("设置长连接参数与获取长连接成功"); + + try { + builder = new SydApiBuilder( + ipListErr, + new int[]{8889, 8889}, + 1000, + 2000 + ); + api = builder.build(); + System.out.println("设置长连接IP错误检测失败"); + } catch (SydApiException e) { + System.out.println("设置长连接IP错误检测成功"); + } + + System.out.println("-------- 设置长连接参数与获取长连接功能测试结束 --------\n"); + } + + public void sm3ShortFunc() { + System.out.println("-------- SM3短数据功能测试开始 --------"); + + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + String res1 = api.SYD_SM3_Hash_ShortData(new byte[1024]); + String res2 = api.SYD_SM3_Hash_ShortData(new byte[0]); + + if (res1.equals(CalcRes.SM3_SHORT_RESULT1) && res2.equals(CalcRes.SM3_SHORT_RESULT2)) { + System.out.println("SM3短数据测试成功"); + } else { + System.out.println("SM3短数据测试失败"); + System.out.println("计算结果:" + res1); + System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT1); + System.out.println("计算结果:" + res2); + System.out.println("预期结果:" + CalcRes.SM3_SHORT_RESULT2); + } + + try { + api.SYD_SM3_Hash_ShortData(new byte[1025]); + System.out.println("SM3短数据超出测试失败"); + } catch (SydApiException e) { + System.out.println("SM3短数据超出错误检测成功"); + } + + + System.out.println("-------- SM3短数据功能测试结束 --------\n"); + } + + public void sm3LongFunc() { + System.out.println("-------- SM3长数据功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + ISM3 sm3 = api.initSM3(); + byte[] data = new byte[4064]; + for (int i = 0; i < 10; i++) { + sm3.update(data); + } + String res1 = sm3.digest(); + + data = new byte[0]; + sm3 = api.initSM3(); + for (int i = 0; i < 10; i++) { + sm3.update(data); + } + + String res2 = sm3.digest(); + + if (res1.equals(CalcRes.SM3_LONG_RESULT1) && res2.equals(CalcRes.SM3_LONG_RESULT2)) { + System.out.println("SM3长数据测试成功"); + } else { + System.out.println("SM3长数据测试失败"); + System.out.println("计算结果:" + res1); + System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT1); + System.out.println("计算结果:" + res2); + System.out.println("预期结果:" + CalcRes.SM3_LONG_RESULT2); + } + + try { + sm3 = api.initSM3(); + data = new byte[0]; + for (int i = 0; i < 10; i++) { + sm3.update(data); + } + sm3.digest(); + System.out.println("SM3长数据长度超出测试失败"); + } catch (SydApiException e) { + System.out.println("SM3长数据长度超出测试成功"); + } + + System.out.println("-------- SM3长数据功能测试结束 --------\n"); + } + + public void sm4ShortFunc() { + System.out.println("-------- SM4短数据加解密功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + int key = 0; + + byte[] enc1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_ENC); + byte[] dec1 = api.SYD_SM4_ShortData(key, new byte[1024], ECB_DEC); + + byte[] enc2 = api.SYD_SM4_ShortData(key, new byte[0], ECB_ENC); + byte[] dec2 = api.SYD_SM4_ShortData(key, new byte[0], ECB_DEC); + + String res1 = Util.bytes2HexString(enc1); + String res2 = Util.bytes2HexString(enc2); + + if (res1.equals(CalcRes.SM4_SHORT_RESULT1) && res2.equals(CalcRes.SM4_SHORT_RESULT2) + && Arrays.equals(dec1, new byte[1024]) && Arrays.equals(dec2, new byte[0])) { + System.out.println("SM4短数据测试成功"); + } else { + System.out.println("SM4短数据测试失败"); + System.out.println("加密计算结果:" + res1); + System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT1); + System.out.println("解密计算结果:" + Util.bytes2HexString(dec1)); + System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[1024])); + System.out.println("加密计算结果:" + res2); + System.out.println("加密预期结果:" + CalcRes.SM4_SHORT_RESULT2); + System.out.println("解密计算结果:" + Util.bytes2HexString(dec2)); + System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[0])); + } + + try { + enc1 = api.SYD_SM4_ShortData(key, new byte[1025], ECB_ENC); + dec1 = api.SYD_SM4_ShortData(key, enc1, ECB_DEC); + System.out.println("SM4短数据长度超出测试失败"); + } catch (SydApiException e) { + System.out.println("SM4短数据长度超出测试成功"); + } + + System.out.println("-------- SM4短数据加解密功能测试结束 --------\n"); + } + + public void sm4LongFunc() { + System.out.println("-------- SM4长数据加解密功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + int key = 0; + byte[] data1 = new byte[4064]; + byte[] data2 = new byte[16]; + + ISM4 sm4 = api.initSM4(key, ECB_ENC); + for (int i = 0; i < 10; i++) { + sm4.update(data1); + } + byte[] enc1 = sm4.finish(); + String res1 = Util.bytes2HexString(enc1); + + sm4 = api.initSM4(key, ECB_ENC); + for (int i = 0; i < 10; i++) { + sm4.update(data2); + } + byte[] enc2 = sm4.finish(); + String res2 = Util.bytes2HexString(enc2); + + sm4 = api.initSM4(key, ECB_DEC); + for (int i = 0; i < 10; i++) { + sm4.update(Arrays.copyOfRange(enc1, i * 4064, (i + 1) * 4064)); + } + sm4.update(Arrays.copyOfRange(enc1, 10 * 4064, 10 * 4064 + 16)); + byte[] dec1 = sm4.finish(); + + sm4 = api.initSM4(key, ECB_DEC); + for (int i = 0; i < 10; i++) { + sm4.update(Arrays.copyOfRange(enc1, i * 16, (i + 1) * 16)); + } + sm4.update(Arrays.copyOfRange(enc1, 10 * 16, 10 * 16 + 16)); + byte[] dec2 = sm4.finish(); + + if (res2.equals(CalcRes.SM4_LONG_RESULT2) + && Arrays.equals(dec1, new byte[40640]) && Arrays.equals(dec2, new byte[160])) { + System.out.println("SM4长数据加解密测试成功"); + } else { + System.out.println("SM4长数据加解密测试失败"); + System.out.println("加密计算结果:" + res1); +// System.out.println("加密预期结果:" + CalcRes.SM4_LONG_RESULT1); + System.out.println("解密计算结果:" + Util.bytes2HexString(dec1)); + System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[40640])); + System.out.println("加密计算结果:" + res2); + System.out.println("加密预期结果:" + CalcRes.SM4_LONG_RESULT2); + System.out.println("解密计算结果:" + Util.bytes2HexString(dec2)); + System.out.println("解密预期结果:" + Util.bytes2HexString(new byte[160])); + } + + + try { + sm4 = api.initSM4(key, ECB_ENC); + data1 = new byte[4080]; + for (int i = 0; i < 10; i++) { + sm4.update(data1); + } + sm4.finish(); + System.out.println("SM4长数据超长度检测失败"); + } catch (SydApiException e) { + System.out.println("SM4长数据超长度检测成功"); + } + + try { + sm4 = api.initSM4(key, ECB_ENC); + data1 = new byte[17]; + for (int i = 0; i < 10; i++) { + sm4.update(data1); + } + sm4.finish(); + System.out.println("SM4长数据16字节未对齐检测失败"); + } catch (SydApiException e) { + System.out.println("'SM4长数据16字节未对齐检测成功'"); + } + + System.out.println("-------- SM4长数据加解密功能测试结束 --------\n"); + } + + public void sm4macShortFunc() { + System.out.println("-------- SM4MAC短数据功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + int key = 0; + byte[] data1 = new byte[1024]; + byte[] data2 = new byte[0]; + + String res1 = api.SYD_SM4Mac_ShortData(key, data1); + boolean check1 = api.SYD_SM4Mac_ShortData(key, data1, res1); + + String res2 = api.SYD_SM4Mac_ShortData(key, data2); + boolean check2 = api.SYD_SM4Mac_ShortData(key, data2, res2); + + if (res1.equals(CalcRes.SM4MAC_SHORT_RESULT1) && res2.equals(CalcRes.SM4MAC_SHORT_RESULT2) + && check1 && check2) { + System.out.println("SM4MAC短数据测试成功"); + } else { + System.out.println("SM4MAC短数据测试失败"); + System.out.println("计算结果:" + res1); + System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT1); + System.out.println("计算结果:" + res2); + System.out.println("预期结果:" + CalcRes.SM4MAC_SHORT_RESULT2); + } + + try { + res1 = api.SYD_SM4Mac_ShortData(key, new byte[1025]); + check1 = api.SYD_SM4Mac_ShortData(key, new byte[1025], res1); + System.out.println("SM4MAC短数据长度超出测试失败"); + } catch (SydApiException e) { + System.out.println("SM4MAC短数据长度超出测试成功"); + } + + System.out.println("-------- SM4MAC短数据功能测试结束 --------\n"); + } + + public void sm4macLongFunc() { + System.out.println("-------- SM4MAC长数据功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + byte[] data1 = new byte[4064]; + int key = 0; + ISM4Mac sm4mac = api.initSM4Mac(key); + for (int i = 0; i < 10; i++) { + sm4mac.update(data1); + } + String res1 = sm4mac.digest(); + + byte[] data2 = new byte[16]; + sm4mac = api.initSM4Mac(key); + for (int i = 0; i < 10; i++) { + sm4mac.update(data2); + } + String res2 = sm4mac.digest(); + +// c = opt.check(hexStringTobytes(SM4MAC_LONG_RESULT1)) +// s = opt.hexcheck(SM4MAC_LONG_RESULT1) +// +// c2 = opt2.check(hexStringTobytes(SM4MAC_LONG_RESULT2)) +// s2 = opt2.hexcheck(SM4MAC_LONG_RESULT2) + + if (res1.equals(CalcRes.SM4MAC_LONG_RESULT1) && res2.equals(CalcRes.SM4MAC_LONG_RESULT2)) { + System.out.println("SM4MAC长数据测试成功"); + } else { + System.out.println("SM4MAC长数据测试失败"); + System.out.println("计算结果:" + res1); + System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT1); + System.out.println("计算结果:" + res2); + System.out.println("预期结果:" + CalcRes.SM4MAC_LONG_RESULT2); + } + + +// try: +// input = bytes(4080) +// opt2 = conn.sm4_mac_init(0) +// for _ in range(10): +// opt2.update(input) +// res2 = opt2.digest() +// System.out.println('SM4MAC长数据长度超出测试失败') +// except SmxApiException as e: +// System.out.println('SM4MAC长数据长度超出测试成功') +// +// try: +// input = bytes(17) +// opt2 = conn.sm4_mac_init(0) +// for _ in range(10): +// opt2.update(input) +// res2 = opt2.digest() +// System.out.println('SM4MAC长数据16字节未对齐测试失败') +// except SmxApiException as e: +// System.out.println('SM4MAC长数据16字节未对齐测试成功') +// +// System.out.println('-------- SM4MAC长数据功能测试结束 --------\n') + } + + public void sm4BatchFunc() { + System.out.println("-------- SM4批量数据加解密功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + List data = new ArrayList<>(); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + int[] key = new int[]{0, 0, 0, 0, 0, 0, 0}; + + + List en_data = api.SYD_SM4_BatchData(key, data, ECB_ENC); + + List de_data = api.SYD_SM4_BatchData(key, en_data, ECB_DEC); + + if (en_data.equals(CalcRes.SM4_BATCH_RESULT) && data.equals(de_data)) { + System.out.println("SM4批量数据加解密测试成功"); + } else { + System.out.println("SM4批量数据加解密测试失败"); + System.out.println("加密计算结果:" + en_data); + System.out.println("加密预期结果:" + CalcRes.SM4_BATCH_RESULT); + System.out.println("解密计算结果:" + de_data); + System.out.println("解密预期结果:" + data); + } + + try { + data = new ArrayList<>(); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + key = new int[]{0, 0, 0, 0, 0, 0, 0, 0}; + en_data = api.SYD_SM4_BatchData(key, data, ECB_ENC); + System.out.println("SM4批量数据长度超出测试失败"); + } catch (SydApiException e) { + System.out.println("SM4批量数据长度超出测试成功"); + } + + + System.out.println("-------- SM4批量数据加解密功能测试结束 --------\n"); + } + + public void sm4macBatchFunc() { + System.out.println("-------- SM4MAC批量数据功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + List data = new ArrayList<>(); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + int[] keyIdx = new int[]{0, 0, 0, 0, 0, 0, 0}; + + String[] s = api.SYD_SM4Mac_BatchData(keyIdx, data); + + boolean[] check = api.SYD_SM4Mac_BatchData(keyIdx, data, s); + + boolean flag = true; + if (Arrays.equals(s, CalcRes.SM4MAC_BATCH_RESULT)) { + for (int i = 0; i < check.length; i++) { + if (!check[i]) { + flag = false; + break; + } + } + if (flag) { + System.out.println("SM4MAC批量数据测试成功"); + } else { + System.out.println("SM4MAC批量数据测试失败"); + System.out.println("计算结果:" + check); + System.out.println("预期结果:" + new boolean[]{true, true, true, true, true, true, true}); + } + } else { + System.out.println("SM4MAC批量数据测试失败"); + System.out.println("计算结果:" + s); + System.out.println("预期结果:" + CalcRes.SM4MAC_BATCH_RESULT); + } + + try { + data = new ArrayList<>(); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + keyIdx = new int[]{0, 0, 0, 0, 0, 0, 0, 0}; + + api.SYD_SM4Mac_BatchData(keyIdx, data); + System.out.println("SM4MAC批量数据长度超出测试失败"); + } catch (SydApiException e) { + System.out.println("SM4MAC批量数据长度超出测试成功"); + } + + System.out.println("-------- SM4MAC批量数据功能测试结束 --------\n"); + } + + public void sm4ShortMacFunc() { + System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + int keyEnc = 0; + int keyMac = 0; + byte[] data1 = new byte[1024]; + byte[] data2 = new byte[0]; + DataAndMac en_data1 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1); + DataAndMacCheck de_data1 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data1.getData(), en_data1.getMac()); + + DataAndMac en_data2 = api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data2); + DataAndMacCheck de_data2 = api.SYD_SM4_CheckMacAndDecrypt_ShortData(keyEnc, keyMac, en_data2.getData(), en_data2.getMac()); + + if (data1.equals(de_data1.getData()) && data2.equals(de_data2.getData()) && + de_data1.getMacCheck() && de_data2.getMacCheck() && en_data1.equals(CalcRes.SM4ANDMAC_SHORT_RESULT1) && en_data2.equals(CalcRes.SM4ANDMAC_SHORT_RESULT2)) { + System.out.println("短数据加密计算MAC,校验MAC解密测试成功"); + } else { + System.out.println("短数据加密计算MAC,校验MAC解密测试失败"); + System.out.println("加密计算结果:" + en_data1); + System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_SHORT_RESULT1); + System.out.println("解密计算结果:" + de_data1); + System.out.println("解密预期结果:" + data1); + System.out.println("加密计算结果:" + en_data2); + System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_SHORT_RESULT2); + System.out.println("解密计算结果:" + de_data2); + System.out.println("解密预期结果:" + data2); + } + + try { + data1 = new byte[1025]; + api.SYD_SM4_EncryptAndMac_ShortData(keyEnc, keyMac, data1); + System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试失败"); + } catch (SydApiException e) { + System.out.println("短数据加密计算MAC,校验MAC解密长度超出测试成功"); + } + + System.out.println("-------- 短数据加密计算MAC,校验MAC解密功能测试结束 --------\n"); + } + + public void sm4BatchMacFunc() { + System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试开始 --------"); + SydApiBuilder builder = new SydApiBuilder( + ipList, + new int[]{8889, 8889}, + 1000, + 2000 + ); + SydApi api = builder.build(); + + List data = new ArrayList<>(); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + int[] keyEnc = new int[]{0, 1, 0, 1, 1, 1, 1}; + int[] keyMac = new int[]{1, 0, 1, 0, 0, 0, 0}; + + List en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data); + List de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data); + + boolean flag = true; + if (en_data.equals(CalcRes.SM4ANDMAC_BATCH_RESULT)) { + for (int i = 0; i < de_data.size(); i++) { + if (!de_data.get(i).getMacCheck() || !de_data.get(i).getData().equals(new byte[1024])) { + flag = false; + break; + } + } + } else { + flag = false; + } + if (flag) { + System.out.println("批量数据加密计算MAC,校验MAC解密测试成功"); + } else { + System.out.println("批量数据加密计算MAC,校验MAC解密测试失败"); + System.out.println("加密计算结果:" + en_data); + System.out.println("加密预期结果:" + CalcRes.SM4ANDMAC_BATCH_RESULT); + } + + + try { + data = new ArrayList<>(); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + data.add(new byte[1024]); + keyEnc = new int[]{0, 1, 0, 1, 1, 1, 1, 0}; + keyMac = new int[]{1, 0, 1, 0, 0, 0, 0, 0}; + + en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data); + de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data); + System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试失败"); + } catch (SydApiException e) { + System.out.println("批量数据加密计算MAC,校验MAC解密长度超出测试成功"); + } + + System.out.println("-------- 批量数据加密计算MAC,校验MAC解密功能测试结束 --------\n"); + } + + public void funcAll() { + this.loggerFunc(); + this.connectFunc(); + this.longConnectFunc(); + this.sm3ShortFunc(); + this.sm3LongFunc(); + this.sm4ShortFunc(); + this.sm4LongFunc(); + this.sm4macShortFunc(); + this.sm4macLongFunc(); + this.sm4BatchFunc(); + this.sm4macBatchFunc(); + this.sm4ShortMacFunc(); + this.sm4BatchMacFunc(); + } + + public void perfAll() throws InterruptedException { + this.sm4ShortEndes(); + this.sm4BatchEndes(); + this.sm4macShortEndes(); + this.sm4macBatchEndes(); + this.sm3ShortEndes(); + this.sm4ShortMacEndes(); + this.sm4BatchMacEndes(); + this.sm4LongEnde(); + this.sm4MacLongEnde(); + this.sm3LongEnde(); + } + + public static void main(String[] args) throws InterruptedException { + System.setProperty("com.sunyard.sydapi4j.debug", "false"); + + TestAll test = new TestAll(); + Choise choise = new Choise(args); + boolean flag = true; + + while (flag) { + showmenu(); + switch (choise.getAsInt()) { + case 1: + test.sm4ShortEndes(); + break; + case 2: + test.sm4BatchEndes(); + break; + case 3: + test.sm4macShortEndes(); + break; + case 4: + test.sm4macBatchEndes(); + break; + case 5: + test.sm3ShortEndes(); + break; + case 6: + test.sm4ShortMacEndes(); + break; + case 7: + test.sm4BatchMacEndes(); + break; + case 8: + test.sm4LongEnde(); + break; + case 9: + test.sm4MacLongEnde(); + break; + case 10: + test.sm3LongEnde(); + break; + case 11: + test.funcAll(); + break; + case 12: + test.perfAll(); + break; + case 13: { + test.sm4ShortMacEndes(); + } + case 14: { + test.sm4BatchMacEndes(); + } + break; + case -1: + flag = false; + break; + } + } + } +} diff --git a/sydapi-database.iml b/sydapi-database.iml deleted file mode 100644 index 4b38be7..0000000 --- a/sydapi-database.iml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/start.sh b/test/start.sh new file mode 100644 index 0000000..7113c47 --- /dev/null +++ b/test/start.sh @@ -0,0 +1 @@ +java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sunyard.sydapi4j.debug=false -cp sydapi-database-1.15.jar:./lib/*:./ test.TestAll diff --git a/test/sydapi-database-1.15.jar b/test/sydapi-database-1.15.jar new file mode 100644 index 0000000000000000000000000000000000000000..f478ab636e65161650722bc78c4ea667e832c847 GIT binary patch literal 60107 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 literal 0 HcmV?d00001