From 9b4ec92cfb160ecbaf04dab91446f57983fa95cf Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Tue, 18 Dec 2018 09:56:11 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=B0=86=20BDPos=20=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + lib/BDPost.jar | Bin 0 -> 14384 bytes 2 files changed, 1 insertion(+) create mode 100644 lib/BDPost.jar diff --git a/.gitignore b/.gitignore index 7e7fdfe..7f31ecd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /bin/ /out/ /.idea/ +/BDPost/ # Ignore Gradle GUI config gradle-app.setting diff --git a/lib/BDPost.jar b/lib/BDPost.jar new file mode 100644 index 0000000000000000000000000000000000000000..e29ecfbf51fda51f267b4717b3ecc936d3b84eb8 GIT binary patch literal 14384 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 Y^M9ON$p3q^{ Date: Wed, 19 Dec 2018 16:21:36 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E9=87=8D=E5=A4=8D=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/PDFLibrary.jar | Bin 119802 -> 119802 bytes lib/BDPost.jar | Bin 14384 -> 14384 bytes .../Processing/FuckChar.java | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/jar/PDFLibrary.jar b/jar/PDFLibrary.jar index babf3241c644f30ae5fff6c6667bd6fa95c517e9..1fd5de96afc93cf70e4280258cab92a7f2859fed 100644 GIT binary patch delta 668 zcmeyhoc-5wcHRJQW)=|!4h{~6B~6nj@=jp}QA-rT)CqM#AkUWp3CK-u)KcOB>fvHw z;9vmh*{sL-jUA+X`dvmw{mJ#*tec}bJ48Vuo1e*baWl^XO5KYFN;#NvPd~qskz;xR zkl4IeD}xCnw^>7XDp>#K114WMLE0wY`DHzA9V5%;Z+5FC!2(MnJiv4SxBg^-B$3TV zk@3P{fdeL1lLfA^Ot;&_$hP@L&U-r~W&D#b++p3!yXK4^NO1F=U;o%ZjO{>Y*6M;; zvHFa=1i?D){L-I3;Si(1_DDy@)v6$&>Fnu@-C)MlbVhkFV|zNI21bAgO%Kdx6qN=A zBRoh@Lky%qadIZ3)bxfqK+i|yGfHi*&0stQvBs;9Q4?hP_Od?4RYG8Ulov8OgBh6% z84baVxeFQ1!Hnw*89hOa?aGT76PUn4@w*tMw=Z16_!-RIK7Bc38zVT(6;?8)fEn#8 z8I!rq=SK-=1ZMtK_0{`%VOn;pSj($k=6rlvf+6I+Iovrj<8p0sND zV124ZG5mA;ZOb08d~9>ita z1f6e1=Ua)$#ZP0L4QJ83l*lv_wbFgm_I=P3maXFum2(5KO-`H3!j~mCepDf(1UA+W`P3%_E!u delta 111 zcmdl`u%UoAz?+#xgn@&DgQ47e(nQ`V%phusBA7a%E(qlLG9Urr$%c$#o5dJ)O+YFp iyP2wi>3maXFum2(5KO-`H3!j~mCepDf(1UA+W`QlyCD() diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java index 294b3cb..1131c5f 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java @@ -22,7 +22,7 @@ import static fybug.nulll.pdfunctionlibrary.Processing.sql.Sql.STR; *

提供各种条件下的字符过滤

* * @author fybug - * @version 0.0.4 + * @version 0.0.5 * @since PDF 1.3 */ @SuppressWarnings( "all" ) -- Gitee From 4cabc3e263480773aba535afc1de9adb15a8ed5e Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Wed, 19 Dec 2018 16:23:23 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E9=87=8D=E5=A4=8D=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/PDFLibrary.jar | Bin 119802 -> 119802 bytes lib/BDPost.jar | Bin 14384 -> 14384 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/jar/PDFLibrary.jar b/jar/PDFLibrary.jar index 1fd5de96afc93cf70e4280258cab92a7f2859fed..136f1f0c015dc393adeda2719a3a1db1eaec18b8 100644 GIT binary patch delta 454 zcmYk3O(;ZB9K{_oV@5A|%qSKklPJVADEXSnLWxEe%2%SZ3IGkDlPj>Ea0iPTeY}#1=dWaQcc+tK^^5x z1gT<5kBV+WQqe@LsAwf7kKtC{RWvZjhlg_Mjqk&)t84h6(3cY!G|j~=n)Y>kgJxa| zMHZT+n;0eTcUW86{Hrk-WKE~}Z1Q9eF|&uKewlhGjX6_a9RB9a=R|pimVu9W%Ak#? WI7WaO-YzImZk&NXqraR%wEh4-Q@Oza delta 454 zcmYk3PbfrD7{whk%uFwN48>w(5`~xsCI4o!P@<8A@-LCiv#_*cF=b^nOfT~mR&TtT zGSf^vdXh#NSt&}1L0M3;AxfEroX5uI{_Z*7`R;dbHy5+zVm4uT&|)piv)k=?T3Coc z3rB0XoYr%B>w>1Zqj2heJlVLv1-x=lD9|SzE9KDi$Eq6>>9$V?G&!5=i6mjwKYj5^ z%IMgDMO&8TVZkGdvt@eA__ULDx~*FludIr12Zj3e{HyO@s93(ZE6|G)XG737vpJ45 zI5OBoPI_=y@;k(!Q>l=!$h|DVP3%c%ARZ)m*eTATy^gX!ghtAR z5E7-7ZWVomq@tDBP|-omoWP~Lt7vAB51-AaH+2A)p=$V`FxF!jG0oL&nzk)`gJxj@ zB^H_$DNGReyR5CH{%Q;cSTkron>^h|#O&dzU#1>SW69K)N547qIboimXW%8CGUz0# VPvB>Uw+jfA$#d{$jF)qW)*q9Nt|0&b diff --git a/lib/BDPost.jar b/lib/BDPost.jar index 75d8828cd83d5ab0a4328c29d30e538475657278..61d1058ae66a284e864909a55516958ad5edb0be 100644 GIT binary patch delta 81 zcmdl`u%UoEz?+#xgn@&DgW<+R?rDrSCN5G262~+dZ%kG+6P|3sD7;yWQP+g==42OB g4WMAIsVk7&Y-$W7pPO1T-q@^Yc8(D!{lVM;07Ls6w*UYD delta 81 zcmdl`u%UoEz?+#xgn@&DgP~y}_cX?aiHnqh#4%0AhRKR%!jnxHg*S^a>Y4z#E~Xkl eGS}1 Date: Wed, 19 Dec 2018 18:47:25 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=B0=8F=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/PDFLibrary.jar | Bin 119802 -> 119968 bytes lib/BDPost.jar | Bin 14384 -> 14384 bytes .../Processing/sql/Mysql.java | 3 ++- .../pdfunctionlibrary/Processing/sql/Sql.java | 3 ++- .../Processing/sql/Util/InsertVal.java | 2 +- .../Processing/sql/mysql/Delete.java | 5 ++++- .../Processing/sql/mysql/Insert.java | 7 +++++-- .../Processing/sql/mysql/Updata.java | 7 +++++-- 8 files changed, 19 insertions(+), 8 deletions(-) diff --git a/jar/PDFLibrary.jar b/jar/PDFLibrary.jar index 136f1f0c015dc393adeda2719a3a1db1eaec18b8..33e75862bd8156f37daa63fc21f81130f2c7cb2d 100644 GIT binary patch delta 19904 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:U8BfBlC#D|@BS(Z)T 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 delta 19772 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�&!mnQ^NeeI?GlIQSqdV$I^5 z^MjVpMOKjbOB}?vEOrq02uhc-M{V92Jr-6v-dtq@ zr%a-)2Re5~cX}QSIGEAVc(kr#`Y(Qnb4I$3->h1(1GE0Ht+|Hv`m0yPhf~X)uIydE zC$M)vC?3$yNwQq3XWy4}%f|K+OMP%4wLuzcae>tJeBR>~`1&S?CZ;6uHA@Vn&EN%RAjz%7fa3y$ za4|Dbt$?!*O$b>O?vyRKqK^<*6bMrBc3BY6##^5tFb{8&f`AEXx!fRNVSod}>A(mF z)HA>pMI30$1@?F=p9dD=tz90l#9L+_Sc_V2TOOce_{RK;V3ruZv7!LD36ab~peEe7 zS_CLK3)U3_FI+^egy29Vq5)mYz$!9hUDk%_PyAqB8SsN6`9NI#$4j>)k_}1pR}6Ko zgHUWo5}SU(6koALTi8S6$CLS=d(e`}T!1u&W$65&A?gAS`C+E6YLpEajco0ZfMU{kj68glJ&3S8!A4(&CqS z08=IrE8pOGd1GO^kAjg%t;pu88QRDY+yJhG%^wv+BH7N6O1~yl99OIiD@#$xjW>WM zmR&0Z(|9V-kc$Rgs^J?g4^MD`8P;-FNEbaP!>?R4_U*mXbXX-=f+akjrvF4APGHsj zI1Sg|1X}n|qcPXO1fSWN6ANMOP4FwGK7qE)*yKrhSWpKja7h(V18bmj6$r)zQ=Ck& z?B}GQiqgQk0F0;u`p}^o7y$*SQwF)Lx;jL~$quk*yg7CH@@2i@KVB4Bdu%CCpzmXWwff~&yp(u_m z%|JutSRf#UM+TbyROP9NhZP3G!e*eZjpnHhqE)IWN|1U3VZ<$<3_mp!*3fjL0VLq= zTgVi@3&pbO7AhZG9N2_i3dV)CVR8s!e7uDM=?Wnbvv^eQ8(Y9?>~p9H@^TkaUC@A} zU$mf+$5>|w!uKo+QaC|p_Mi!R rM>Y<-WAf(-ORvwP`A_JF{XLYq+?;O?TmbU$_&q?8RL(^Yq)Gn*dpaXg diff --git a/lib/BDPost.jar b/lib/BDPost.jar index 61d1058ae66a284e864909a55516958ad5edb0be..cf2063e7e84999c02d504e5295e3c7da50d925ce 100644 GIT binary patch delta 82 zcmdl`u%Un_z?+#xgn@&DgW*`mM4qWkKytAXh&-+VBsYExG67PPT}{ delta 82 zcmdl`u%Un_z?+#xgn@&DgW*QgM4qWkKytAXh&-+VBsYExGGV&eG}+Zu9mt!UXX*l? YwwM}$s28RdKx(s+*;z)Anvdr800IOc`Tzg` diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java index 11b6420..7bee0ef 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java @@ -127,7 +127,8 @@ class Mysql extends Sql { @NotNull final CObject lock = new CObject(); try { // 获取插入语句 - exe(lock, sql.toString()); + String sq = sql.toString(); + exe(lock, sq); return true; } catch ( Exception e ) { e.printStackTrace(); diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java index df9662f..c5ceb19 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java @@ -152,7 +152,8 @@ class Sql implements AutoCloseable { s = statement.get(cObject); try { - s.execute(sql.toString()); + String sq = sql.toString(); + s.execute(sq); } catch ( SQLException e ) { e.printStackTrace(); return false; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java index 33975c9..45604f7 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java @@ -153,7 +153,7 @@ class InsertVal extends ArrayMap> { public String toString() { @NotNull final StringBuilder inst = new StringBuilder("("), val = new StringBuilder( - ") VALUE ("); + ") VALUES ("); /* tmp */ @Nullable DataMap> d; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java index 9dcb90f..a3953be 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java @@ -165,7 +165,10 @@ class Delete extends ConsistentField implements MysqlSql { @Override public void close() { - where.close(); + try { + where.close(); + } catch ( Throwable e ) { + } free(); tabname = null; } diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java index 7a09467..d0d4277 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java @@ -189,8 +189,11 @@ class Insert extends ConsistentField implements MysqlSql { @Override public void close() { - In.clean(); - up.clean(); + try { + In.clean(); + up.clean(); + } catch ( Throwable e ) { + } free(); } diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java index 71a1d6c..2274890 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java @@ -172,8 +172,11 @@ class Updata extends ConsistentField implements MysqlSql { @Override public void close() { - up.close(); - where.close(); + try { + up.close(); + where.close(); + } catch ( Throwable e ) { + } free(); } -- Gitee From 365482e2cdb0214ceb2d352d4cfcfbe2a4c53afa Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Mon, 24 Dec 2018 13:05:03 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=AD=E6=96=AD?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../Processing/Stop/Stop.java | 36 ++++++++++++++++++- .../Processing/Stop/StopFuck.java | 22 ++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java diff --git a/.gitignore b/.gitignore index 7f31ecd..6947fef 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /out/ /.idea/ /BDPost/ +/BDPosHttp/ # Ignore Gradle GUI config gradle-app.setting diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java index cfff1b4..2832683 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java @@ -1,5 +1,11 @@ package fybug.nulll.pdfunctionlibrary.Processing.Stop; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.io.Serializable; + +import fybug.nulll.pdfunctionlibrary.Annotations.CanSynchronized; +import fybug.nulll.pdfunctionlibrary.Util.DataGrid; /** *

中断.

*
@@ -11,15 +17,43 @@ import java.io.Serializable;
  * 
* * @author fybug - * @version 0.0.5 + * @version 0.0.6 * @see MaybeStop * @see CallStop * @since PDF 1.1 */ +@SuppressWarnings( "all" ) +@CanSynchronized public class Stop extends Error implements Serializable { private static final long serialVersionUID = -5863099734169161181L; Stop() { super("The error should be caught, indicating that the result is the same regardless of whether it is running or not. The interrupt function runs."); } + + /** + *

运行可能会进行停止的操作.

+ *

使用接口进行异常处理

+ * + * @param runnable 要运行的可能会中断的操作 + * @param fuck 中断处理 + * + * @return 如果没有发生异常将会返回 {@code null} ,如果发生了将会返回一个 {@link DataGrid} 里面 + * 放入处理接口返回的东西 + * + * @see StopFuck + * @since PDF 1.3 expander 2 + */ + @CanSynchronized + @Nullable + public static + DataGrid runMeberStop(@NotNull final Runnable runnable, @NotNull final StopFuck fuck) { + try { + runnable.run(); + } catch ( Stop e ) { + return DataGrid.getDataGrid(fuck.stop()); + } + + return null; + } } \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java new file mode 100644 index 0000000..c408cfa --- /dev/null +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java @@ -0,0 +1,22 @@ +package fybug.nulll.pdfunctionlibrary.Processing.Stop; +import org.jetbrains.annotations.NotNull; +/** + *

中断处理接口.

+ *

返回处理后的消息

+ * + * @author fybug + * @version 0.0.1 + * @see Stop#runMeberStop(Runnable, StopFuck) + * @since PDF 1.3 expander 2 + */ +@SuppressWarnings( "all" ) +public +interface StopFuck { + /** + *

处理中断异常.

+ * + * @return 处理后返回的对象 + */ + @NotNull + Object stop(); +} \ No newline at end of file -- Gitee From c3c7462ed7a243ec9b7f1fe1e0efedffde1f67b0 Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Mon, 7 Jan 2019 16:22:21 +0800 Subject: [PATCH 06/12] =?UTF-8?q?[test]=20=E5=A2=9E=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/TestBDPost.java | 89 ------------------- src/test/java/TestMysql.java | 60 ------------- src/test/java/test/lang/TestCloall.java | 34 +++++++ src/test/java/test/processing/selectsort.java | 45 ++++++++++ src/test/java/test/util/TestMapfile.java | 68 ++++++++++++++ 5 files changed, 147 insertions(+), 149 deletions(-) delete mode 100644 src/test/java/TestBDPost.java delete mode 100644 src/test/java/TestMysql.java create mode 100644 src/test/java/test/lang/TestCloall.java create mode 100644 src/test/java/test/processing/selectsort.java create mode 100644 src/test/java/test/util/TestMapfile.java diff --git a/src/test/java/TestBDPost.java b/src/test/java/TestBDPost.java deleted file mode 100644 index f6afa27..0000000 --- a/src/test/java/TestBDPost.java +++ /dev/null @@ -1,89 +0,0 @@ -import org.junit.Before; -import org.junit.Test; - -import fybug.nulll.bdpost.BDPos; - -public -class TestBDPost { - String da; - - @Before - public - void init() { - StringBuilder stringBuilder = new StringBuilder(" ### c1:"); - { - stringBuilder.append(" ## I1:"); - { - stringBuilder.append(" # f1:"); - { - stringBuilder.append("as"); - } - stringBuilder.append(" # f2:"); - { - stringBuilder.append("a1").append("&"); - stringBuilder.append("a2").append("&"); - stringBuilder.append("a3"); - } - } - stringBuilder.append(" ## I2:"); - { - stringBuilder.append(" # f1:"); - { - stringBuilder.append("sw"); - stringBuilder.append("ewq"); - } - { - stringBuilder.append("ewq").append("&"); - stringBuilder.append("tret"); - } - } - } - stringBuilder.append(" ### :"); - { - stringBuilder.append(" ## I1:"); - { - stringBuilder.append(" # f1:"); - { - stringBuilder.append("as"); - } - stringBuilder.append(" # f2:"); - { - stringBuilder.append("a1").append("&"); - stringBuilder.append("a2").append("&"); - stringBuilder.append("a3"); - } - } - stringBuilder.append(" ## I2:"); - { - stringBuilder.append(" # f1:"); - { - stringBuilder.append("sw"); - stringBuilder.append("ewq"); - } - { - stringBuilder.append("ewq").append("&"); - stringBuilder.append("tret"); - } - } - } - - stringBuilder.trimToSize(); - da = stringBuilder.toString(); - } - - @Test - public - void TestBDPos() { - BDPos pos = new BDPos(da); - System.out.println(pos.toString()); - } - - @Test - public - void TestDBPost() { - BDPos pos = new BDPos(da); - System.out.println(pos.getClass("").name); - System.out.println(pos.getClass("").getInstruct("I1").name); - System.out.println(pos.getClass("").getInstruct("I1").getPostField("f1").getField()); - } -} \ No newline at end of file diff --git a/src/test/java/TestMysql.java b/src/test/java/TestMysql.java deleted file mode 100644 index 32c5321..0000000 --- a/src/test/java/TestMysql.java +++ /dev/null @@ -1,60 +0,0 @@ -import org.junit.Before; -import org.junit.Test; - -import java.sql.SQLException; - -import fybug.nulll.pdfunctionlibrary.Processing.sql.Enum.Logical; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Mysql; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.InsertVal; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.UpDataVal; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.WhereSet; -public -class TestMysql { - Mysql mysql; - - @Before - public - void init() { - try { - mysql.close(); - } catch ( Throwable ignored ) { - } - try { - mysql = Mysql.getDatabase("127.0.0.1", 3306, "pageviews", "root", "2650693483"); - } catch ( SQLException e ) { - e.printStackTrace(); - } - } - - @Test - public - void TestWhere() { - WhereSet whereSet = new WhereSet(); - - whereSet.addRegexp(Logical.AND, "asd", "lakjad", false); - whereSet.addRegexp(Logical.AND, "asd", "lakjad", true); - whereSet = WhereSet.passingBDPos(whereSet.toBDPos()); - - System.out.println(whereSet.toString()); - } - - @Test - public - void TestInserModer() { - InsertVal insertVal = new InsertVal(); - - insertVal.addVal("asd", "kor").addNull("s"); - System.out.println(insertVal); - System.out.println(insertVal.toBDPos()); - } - - @Test - public - void TestUpdateModer() { - UpDataVal insertVal = new UpDataVal(); - - insertVal.addVal("asd", "kor").addNull("s"); - System.out.println(insertVal); - System.out.println(insertVal.toBDPos()); - } -} diff --git a/src/test/java/test/lang/TestCloall.java b/src/test/java/test/lang/TestCloall.java new file mode 100644 index 0000000..4aa046c --- /dev/null +++ b/src/test/java/test/lang/TestCloall.java @@ -0,0 +1,34 @@ +package test.lang; +import org.junit.Test; + +import java.io.Closeable; + +import fybug.nulll.pdfunctionlibrary.lang.CloseAll; +public final +class TestCloall { + @Test + public + void test() { + Closeable[] cs = {new cl(), new cl(), new cl(), new cl()}; + for ( int i = 0; i < cs.length; i++ ){ + System.out.println(((cl) cs[i]).s); + } + System.out.println("-------------"); + CloseAll ca = CloseAll.getCloseAll(cs); + ca.close(); + for ( int i = 0; i < cs.length; i++ ){ + System.out.println(((cl) cs[i]).s); + } + } + + private static final + class cl implements Closeable { + private String s = "not close"; + + @Override + public + void close() { + s = "is close!"; + } + } +} \ No newline at end of file diff --git a/src/test/java/test/processing/selectsort.java b/src/test/java/test/processing/selectsort.java new file mode 100644 index 0000000..cacf7e9 --- /dev/null +++ b/src/test/java/test/processing/selectsort.java @@ -0,0 +1,45 @@ +package test.processing; +import org.junit.Test; + +import fybug.nulll.pdfunctionlibrary.Processing.Sort.SelectionSort; +import fybug.nulll.pdfunctionlibrary.Processing.Sort.SortMode; +public final +class selectsort { + @Test + public + void testint() { + int[] is = {1, 2, 564, 1231, 5640, 0, 54, 54, 10, 540, 654868, 54, 0, 51}; + + is = SelectionSort.sortInt(is, SortMode.Mode.UP); + for ( int i = 0; i < is.length; i++ ){ + System.out.println(is[i]); + } + + System.out.println("\n------------------\n"); + + is = SelectionSort.sortInt(is, SortMode.Mode.DOWN); + for ( int i = 0; i < is.length; i++ ){ + System.out.println(is[i]); + } + } + + @Test + public + void testchar() { + String[] is = + {"a", "b", "564", "ab3a", "5640", "0", "54", "54", "a0", "540", "654868", "54", "0", + "5a"}; + + is = SelectionSort.sortString(is, SortMode.Mode.UP); + for ( int i = 0; i < is.length; i++ ){ + System.out.println(is[i]); + } + + System.out.println("\n------------------\n"); + + is = SelectionSort.sortString(is, SortMode.Mode.DOWN); + for ( int i = 0; i < is.length; i++ ){ + System.out.println(is[i]); + } + } +} diff --git a/src/test/java/test/util/TestMapfile.java b/src/test/java/test/util/TestMapfile.java new file mode 100644 index 0000000..7e502da --- /dev/null +++ b/src/test/java/test/util/TestMapfile.java @@ -0,0 +1,68 @@ +package test.util; +import org.junit.Test; + +import fybug.nulll.pdfunctionlibrary.Util.DataMap; +import fybug.nulll.pdfunctionlibrary.Util.Map.MapFile; +public final +class TestMapfile { + private static MapFile mf; + + @Test + public + void testLink() { + mf = (MapFile) MapFile.userLink(); + add(mf); + mf.clear(); + show(mf); + System.out.println("\n---------------------------\n"); + add(mf); + show(mf); + System.out.println("\n---------------------------\n"); + DataMap sa; + while( (sa = mf.poll()) != null ){ + System.out.println(sa.getKey() + " : " + sa.getValue()); + } + System.out.println("\n---------------------------\n"); + mf.restart(); + show(mf); + } + + @Test + public + void testArr() { + mf = (MapFile) MapFile.userArray(); + add(mf); + mf.clear(); + show(mf); + System.out.println("\n---------------------------\n"); + add(mf); + show(mf); + System.out.println("\n---------------------------\n"); + DataMap sa; + while( (sa = mf.poll()) != null ){ + System.out.println(sa.getKey() + " : " + sa.getValue()); + } + System.out.println("\n---------------------------\n"); + mf.restart(); + show(mf); + } + + private static + void add(MapFile s) { + s.add("1", "as"); + s.add("2", "asasd"); + s.add("3", "a2s"); + s.add("4", "a"); + s.add("5", "aghs"); + s.add("1", "as"); + } + + private + void show(MapFile s) { + DataMap sa; + while( (sa = s.get()) != null ){ + System.out.println(sa.getKey() + " : " + sa.getValue()); + s.next(); + } + } +} \ No newline at end of file -- Gitee From a909d1e00821b0bf73c1acaa28c22184128d2c5d Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Mon, 7 Jan 2019 16:23:16 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=EF=BC=8CMapFile=20=E7=B1=BB=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=87=8D=E7=BD=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pdfunctionlibrary/Util/Map/ArrayMap.java | 14 ++++-- .../pdfunctionlibrary/Util/Map/LinkMap.java | 14 ++++-- .../pdfunctionlibrary/Util/Map/MapFile.java | 16 +++++-- .../org/jetbrains/annotations/NotNull.java | 46 ------------------- .../org/jetbrains/annotations/Nullable.java | 44 ------------------ 5 files changed, 35 insertions(+), 99 deletions(-) delete mode 100644 src/main/java/org/jetbrains/annotations/NotNull.java delete mode 100644 src/main/java/org/jetbrains/annotations/Nullable.java diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/ArrayMap.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/ArrayMap.java index 46752bb..a4dc347 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/ArrayMap.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/ArrayMap.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Util.Map; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.util.ArrayList; @@ -10,7 +10,7 @@ import fybug.nulll.pdfunctionlibrary.Util.DataMap; *

使用了数组实现的映射集.

* * @author fybug - * @version 0.0.2 + * @version 0.0.3 * @see ArrayList * @see DataMap * @see MapFile @@ -74,6 +74,14 @@ class ArrayMap extends ArrayList> implements MapFile { return this; } + @NotNull + @Override + public + MapFile restart() { + mark = 0; + return this; + } + @Override public boolean isEmpty() { return size() == 0; } diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/LinkMap.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/LinkMap.java index 149e3b9..3e5ab4f 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/LinkMap.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/LinkMap.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Util.Map; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.util.LinkedList; @@ -10,7 +10,7 @@ import fybug.nulll.pdfunctionlibrary.Util.DataMap; *

使用了链表实现的映射集.

* * @author fybug - * @version 0.0.2 + * @version 0.0.3 * @see LinkedList * @see DataMap * @see MapFile @@ -75,6 +75,14 @@ class LinkMap extends LinkedList> implements MapFile { return this; } + @Override + @NotNull + public + MapFile restart() { + mark = 0; + return this; + } + @Override public boolean isEmpty() { return size() == 0; } diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/MapFile.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/MapFile.java index b4459b2..59dcb7f 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/MapFile.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Util/Map/MapFile.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Util.Map; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.util.Iterator; @@ -20,7 +20,7 @@ import fybug.nulll.pdfunctionlibrary.lang.CanEmpty; * @param 值类型 * * @author fybug - * @version 0.0.2 + * @version 0.0.3 * @see CanEmpty * @see Iterator * @see DataMap @@ -87,6 +87,16 @@ interface MapFile extends CanEmpty { @NotNull MapFile next(); + /** + *

重置指针.

+ * + * @return this + * + * @since PDF 1.3 expander 2 + */ + @NotNull + MapFile restart(); + /**

创建一个使用数组的映射集.

*/ @NotNull static diff --git a/src/main/java/org/jetbrains/annotations/NotNull.java b/src/main/java/org/jetbrains/annotations/NotNull.java deleted file mode 100644 index 81d5f86..0000000 --- a/src/main/java/org/jetbrains/annotations/NotNull.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.annotations; - -import java.lang.annotation.*; - -/** - * An element annotated with NotNull claims {@code null} value is forbidden - * to return (for methods), pass to (parameters) and hold (local variables and fields). - * Apart from documentation purposes this annotation is intended to be used by static analysis tools - * to validate against probable runtime errors and element contract violations. - * - * @author max - */ -@Documented -@Retention(RetentionPolicy.CLASS) -@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE}) -public @interface NotNull { - /** - * @return Custom exception message - */ - String value() default ""; - - /** - * @return Custom exception type that should be thrown when not-nullity contract is violated. - * The exception class should have a constructor with one String argument (message). - * - * By default, {@link IllegalArgumentException} is thrown on null method arguments and - * {@link IllegalStateException} — on null return value. - */ - Class exception() default Exception.class; -} diff --git a/src/main/java/org/jetbrains/annotations/Nullable.java b/src/main/java/org/jetbrains/annotations/Nullable.java deleted file mode 100644 index 39e3123..0000000 --- a/src/main/java/org/jetbrains/annotations/Nullable.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.annotations; - -import java.lang.annotation.*; - -/** - * An element annotated with {@link Nullable} claims {@code null} value is perfectly valid - * to return (for methods), pass to (parameters) or hold in (local variables and fields). - * Apart from documentation purposes this annotation is intended to be used by static analysis tools - * to validate against probable runtime errors or element contract violations. - *
- * By convention, this annotation applied only when the value should always be checked against {@code null} - * because the developer could do nothing to prevent null from happening. - * Otherwise, too eager {@link Nullable} usage could lead to too many false positives from static analysis tools. - *
- * For example, {@link java.util.Map#get(Object key)} should not be annotated {@link Nullable} because - * someone may have put not-null value in the map by this key and is expecting to find this value there ever since. - *
- * On the other hand, the {@link java.lang.ref.Reference#get()} should be annotated {@link Nullable} because - * it returns {@code null} if object got collected which can happen at any time completely unexpectedly. - * - * @author max - */ -@Documented -@Retention(RetentionPolicy.CLASS) -@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE}) -public @interface Nullable { - String value() default ""; -} -- Gitee From ab99196b6cd526ea06b0843459c8ab8396673295 Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Mon, 7 Jan 2019 16:23:57 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fybug/nulll/pdfunctionlibrary/Processing/CObject.java | 2 +- .../pdfunctionlibrary/Processing/Interface/NeedStop.java | 2 +- .../fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java | 5 +++-- .../nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java | 2 +- .../pdfunctionlibrary/Processing/sql/Enum/Comparison.java | 2 +- .../nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java | 3 +-- .../pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java | 2 +- .../fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java | 4 ++-- .../pdfunctionlibrary/Processing/sql/Util/InsertVal.java | 4 ++-- .../pdfunctionlibrary/Processing/sql/Util/UpDataVal.java | 4 ++-- .../nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java | 4 ++-- .../nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java | 4 ++-- .../pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java | 2 +- .../nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java | 4 ++-- 14 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/CObject.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/CObject.java index 4d5a5c4..ef7752e 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/CObject.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/CObject.java @@ -1,5 +1,5 @@ package fybug.nulll.pdfunctionlibrary.Processing; -import org.jetbrains.annotations.NotNull; +import com.sun.istack.internal.NotNull; /** *

可克隆对象.

*

暴露{@link Object} 的克隆方法

diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Interface/NeedStop.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Interface/NeedStop.java index 7d8a2d2..65fdb4d 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Interface/NeedStop.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Interface/NeedStop.java @@ -1,5 +1,5 @@ package fybug.nulll.pdfunctionlibrary.Processing.Interface; -import org.jetbrains.annotations.NotNull; +import com.sun.istack.internal.NotNull; import fybug.nulll.pdfunctionlibrary.Annotations.CanSynchronized; /** diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java index 2832683..36f1a5b 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/Stop.java @@ -1,6 +1,7 @@ package fybug.nulll.pdfunctionlibrary.Processing.Stop; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; + +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.io.Serializable; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java index c408cfa..8922ae5 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Stop/StopFuck.java @@ -1,5 +1,5 @@ package fybug.nulll.pdfunctionlibrary.Processing.Stop; -import org.jetbrains.annotations.NotNull; +import com.sun.istack.internal.NotNull; /** *

中断处理接口.

*

返回处理后的消息

diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Comparison.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Comparison.java index 980e9ab..e4857d7 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Comparison.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Comparison.java @@ -1,7 +1,7 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.Enum; import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; -import org.jetbrains.annotations.Nullable; /** *

比较运算符枚举.

* diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java index 9b10893..340ca65 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java @@ -1,7 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.Enum; import com.sun.istack.internal.NotNull; - -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.Nullable; /** *

逻辑运算符枚举.

* diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java index 4cb06c3..6ef6e78 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java @@ -1,5 +1,5 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.Enum; -import org.jetbrains.annotations.NotNull; +import com.sun.istack.internal.NotNull; /** *

更新模式.

*

指定了当前数据的更新方式和内容

diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java index c5ceb19..6450892 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.io.Serializable; import java.sql.Connection; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java index 45604f7..7609c42 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.Util; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.lang.ref.SoftReference; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java index 121469a..1554b86 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.Util; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.lang.ref.SoftReference; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java index a3953be..b22dfa7 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java index d0d4277..2107766 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import fybug.nulll.bdpost.Instruct; import fybug.nulll.bdpost.PostField; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java index 14b414b..99e028f 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java @@ -1,5 +1,5 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import org.jetbrains.annotations.NotNull; +import com.sun.istack.internal.NotNull; import java.io.Serializable; diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java index 2274890..8be9bd3 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java @@ -1,6 +1,6 @@ package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; +import com.sun.istack.internal.Nullable; import fybug.nulll.bdpost.Instruct; import fybug.nulll.bdpost.PostField; -- Gitee From 16f61d58900736a41037269dd2f0f68b3d2dbdd2 Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Mon, 7 Jan 2019 16:25:12 +0800 Subject: [PATCH 09/12] =?UTF-8?q?[fix=20bug=20&=20add]=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20TabMap=20=E5=85=B3=E9=94=AE=E5=AD=97=E8=BF=87?= =?UTF-8?q?=E6=BB=A4,=E4=BF=AE=E5=A4=8D=E5=A4=9A=E9=87=8D=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=97=A0=E6=B3=95=E9=80=86=E5=90=91=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Processing/FuckChar.java | 78 +++++++++++++++---- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java index 1131c5f..af93dfe 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/FuckChar.java @@ -1,6 +1,5 @@ package fybug.nulll.pdfunctionlibrary.Processing; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.sun.istack.internal.NotNull; import java.lang.ref.SoftReference; import java.util.HashMap; @@ -22,14 +21,14 @@ import static fybug.nulll.pdfunctionlibrary.Processing.sql.Sql.STR; *

提供各种条件下的字符过滤

* * @author fybug - * @version 0.0.5 + * @version 0.0.6 * @since PDF 1.3 */ @SuppressWarnings( "all" ) public final class FuckChar { /**

过滤表.

*/ - @NotNull private static SoftReference<@Nullable HashMap> map; + @NotNull private static volatile SoftReference> map; @NotNull private static synchronized @@ -51,6 +50,7 @@ class FuckChar { put(RN, "@010"); put(NAMEMARK, "@011"); put("@", "@012"); + put(TABMAPVAL, "@013"); }}); } @@ -70,6 +70,7 @@ class FuckChar { @NotNull String str = s.toString(); @NotNull final HashMap m = getMap(); + str = str.replaceAll("@", m.get("@")); str = str.replaceAll(ENDMARK, m.get(ENDMARK)); str = str.replaceAll(ANDPR, m.get(ANDPR)); str = str.replaceAll(GREATER, m.get(GREATER)); @@ -96,15 +97,60 @@ class FuckChar { @NotNull String str = s.toString(); @NotNull final HashMap m = getMap(); + str = str.replaceAll(m.get(PERCENTAGE), PERCENTAGE); + str = str.replaceAll(m.get(ROD), ROD); + str = str.replaceAll(m.get(ANNOTATION), ANNOTATION); + str = str.replaceAll(m.get(NAME), NAME); + str = str.replaceAll(m.get(STR), STR); + str = str.replaceAll(m.get(LESS), LESS); + str = str.replaceAll(m.get(GREATER), GREATER); + str = str.replaceAll(m.get(ANDPR), ANDPR); str = str.replaceAll(m.get(ENDMARK), ENDMARK); + str = str.replaceAll(m.get("@"), "@"); + + return str; + } + + /** + *

过滤 TabMap 关键字.

+ * + * @param s 要过滤的数据 + * + * @return 过滤后的数据 + * + * @since PDF 1.3 expander 2 + */ + @NotNull + public static + String fuckTabMap(@NotNull final CharSequence s) { + @NotNull String str = s.toString(); + @NotNull final HashMap m = getMap(); + + str = str.replaceAll("@", m.get("@")); + str = str.replaceAll(ANDPR, m.get(ANDPR)); + str = str.replaceAll(TABMAPVAL, m.get(TABMAPVAL)); + + return str; + } + + /** + *

恢复被过滤的 TabMap 关键字.

+ * + * @param s 要恢复的数据 + * + * @return 恢复后的数据 + * + * @since PDF 1.3 expander 2 + */ + @NotNull + public static + String refuckTabMap(@NotNull final CharSequence s) { + @NotNull String str = s.toString(); + @NotNull final HashMap m = getMap(); + + str = str.replaceAll(m.get(TABMAPVAL), TABMAPVAL); str = str.replaceAll(m.get(ANDPR), ANDPR); - str = str.replaceAll(m.get(GREATER), GREATER); - str = str.replaceAll(m.get(LESS), LESS); - str = str.replaceAll(m.get(STR), STR); - str = str.replaceAll(m.get(NAME), NAME); - str = str.replaceAll(m.get(ANNOTATION), ANNOTATION); - str = str.replaceAll(m.get(ROD), ROD); - str = str.replaceAll(m.get(PERCENTAGE), PERCENTAGE); + str = str.replaceAll(m.get("@"), "@"); return str; } @@ -122,11 +168,11 @@ class FuckChar { @NotNull String str = s.toString(); @NotNull final HashMap m = getMap(); + str = str.replaceAll("@", "@012"); str = str.replaceAll(ANDPR, m.get(ANDPR)); str = str.replaceAll(CLASS, m.get(CLASS)); str = str.replaceAll(RN, m.get(RN)); str = str.replaceAll(NAMEMARK, m.get(NAMEMARK)); - str = str.replaceAll("@", "@012"); return str; } @@ -144,12 +190,14 @@ class FuckChar { @NotNull String str = s.toString(); @NotNull final HashMap m = getMap(); - str = str.replaceAll(m.get(ANDPR), ANDPR); - str = str.replaceAll(m.get(CLASS), CLASS); - str = str.replaceAll(m.get(RN), RN); str = str.replaceAll(m.get(NAMEMARK), NAMEMARK); + str = str.replaceAll(m.get(RN), RN); + str = str.replaceAll(m.get(CLASS), CLASS); + str = str.replaceAll(m.get(ANDPR), ANDPR); str = str.replaceAll(m.get("@"), "@"); return str; } + + @NotNull public static final String TABMAPVAL = "="; } \ No newline at end of file -- Gitee From fb3e8bc126009d8349dfd6ed1b1188094bf1f8b8 Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Mon, 7 Jan 2019 16:26:02 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E6=9E=9A=E4=B8=BE=EF=BC=8C=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=A2=9E=E5=8A=A0=E5=9F=BA=E6=9C=AC=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Processing/Sort/SelectionSort.java | 505 ++++++++++++++---- .../Processing/Sort/SortMode.java | 42 ++ 2 files changed, 448 insertions(+), 99 deletions(-) create mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SortMode.java diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SelectionSort.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SelectionSort.java index 73e84ee..42ae3c7 100644 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SelectionSort.java +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SelectionSort.java @@ -3,42 +3,338 @@ import com.sun.istack.internal.NotNull; import com.sun.istack.internal.Nullable; import java.io.File; -import java.lang.annotation.Retention; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; -import fybug.nulll.pdfunctionlibrary.Annotations.IntDef; +import fybug.nulll.pdfunctionlibrary.Processing.Sort.SortMode.FileMode; +import fybug.nulll.pdfunctionlibrary.Processing.Sort.SortMode.Mode; import fybug.nulll.pdfunctionlibrary.Util.Processing.Lists; - -import static java.lang.annotation.RetentionPolicy.SOURCE; /** *

选择排序.

*

用于对各种数据进行排序,排序方式为选择排序

* * @author fybug - * @version 0.0.5 + * @version 0.0.6 + * @see SortMode * @since PDF 1.2 */ @SuppressWarnings( "all" ) public final class SelectionSort { - /**

文件排序模式:文件夹置顶.

*/ - public static final int MODE_DIR = 0; - /**

文件排序模式:文件置顶.

*/ - public static final int MODE_FILE = 1; - /**

文件排序模式:仅对比字符.

*/ - public static final int MODE_DEFAULT = 2; - /**

排序模式:char较小的在上.

*/ - public static final int DOWN = 0; - /**

排序模式:char较大的在上.

*/ - public static final int UP = 1; /** {@Hide} */ @Deprecated private SelectionSort() {} + /* + * Int + */ + /* + * Array + */ + + /** + *

排序整数数组.

+ *
+     * 会对数组中内容按指定的方式进行排序
+     * 不会影响传入的数组
+     * 
+ * + * @param is 要排序的整数数组 + * @param sort 排序方式 + * + * @return 必定不为空 + * + * @since PDF 1.3 expander 2 + */ + @NotNull + public static + int[] sortInt(@Nullable final int[] is, @NotNull final Mode sort) { + if (is == null || is.length == 0) + return new int[0]; + else if (is.length == 1) + return is.clone(); + + @NotNull int[] array = is.clone(); + int j, z, // 要交换的位置 + tmp; // 当前符合标准的变量 + + switch ( sort ) { + case DOWN: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] > tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + case UP: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] < tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + } + + return array; + } + + /* + * Long + */ + /* + * Array + */ + + /** + *

排序长整数数组.

+ *
+     * 会对数组中内容按指定的方式进行排序
+     * 不会影响传入的数组
+     * 
+ * + * @param is 要排序的长整数数组 + * @param sort 排序方式 + * + * @return 必定不为空 + * + * @since PDF 1.3 expander 2 + */ + @NotNull + public static + long[] sortLong(@Nullable final long[] is, @NotNull final Mode sort) { + if (is == null || is.length == 0) + return new long[0]; + else if (is.length == 1) + return is.clone(); + + @NotNull long[] array = is.clone(); + int j, z; // 要交换的位置 + long tmp; // 当前符合标准的变量 + + switch ( sort ) { + case DOWN: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] > tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + case UP: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] < tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + } + + return array; + } + + /* + * Float + */ + /* + * Array + */ + + /** + *

排序单浮点数组.

+ *
+     * 会对数组中内容按指定的方式进行排序
+     * 不会影响传入的数组
+     * 
+ * + * @param is 要排序的数组 + * @param sort 排序方式 + * + * @return 必定不为空 + * + * @since PDF 1.3 expander 2 + */ + @NotNull + public static + float[] sortFloat(@Nullable final float[] is, @NotNull final Mode sort) { + if (is == null || is.length == 0) + return new float[0]; + else if (is.length == 1) + return is.clone(); + + @NotNull float[] array = is.clone(); + int j, z; // 要交换的位置 + float tmp; // 当前符合标准的变量 + + switch ( sort ) { + case DOWN: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] > tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + case UP: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] < tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + } + + return array; + } + + /* + * Float + */ + /* + * Array + */ + + /** + *

排序双浮点数组.

+ *
+     * 会对数组中内容按指定的方式进行排序
+     * 不会影响传入的数组
+     * 
+ * + * @param is 要排序的数组 + * @param sort 排序方式 + * + * @return 必定不为空 + * + * @since PDF 1.3 expander 2 + */ + @NotNull + public static + double[] sortDouble(@Nullable final double[] is, @NotNull final Mode sort) { + if (is == null || is.length == 0) + return new double[0]; + else if (is.length == 1) + return is.clone(); + + @NotNull double[] array = is.clone(); + int j, z; // 要交换的位置 + double tmp; // 当前符合标准的变量 + + switch ( sort ) { + case DOWN: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] > tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + case UP: + for ( int i = 0, length = array.length - 1; i < length; i++ ){ + tmp = array[i]; + z = i; + + for ( j = i + 1; j < array.length; j++ ){ + if (array[j] < tmp) { + z = j; + tmp = array[j]; + } + } + + // 交换 + tmp = array[i]; + array[i] = array[z]; + array[z] = tmp; + } + break; + } + + return array; + } + + /* + * String + */ + /* + * List + */ + /** *

对字符集合进行排序.

*

排序不会影响传入的对象.

@@ -59,7 +355,7 @@ class SelectionSort { */ @NotNull public static - List sortString(@Nullable final List a, @SortMode final int sort) + List sortString(@Nullable final List a, @NotNull final Mode sort) { if (a == null || a.size() == 0) return new ArrayList<>(); @@ -156,6 +452,10 @@ class SelectionSort { return arrayList; } + /* + * Array + */ + /** *

对文本数组进行排序.

*

排序不会影响传入的对象.

@@ -173,7 +473,7 @@ class SelectionSort { */ @NotNull public static - String[] sortString(@Nullable final String[] a, @SortMode final int sort) { + String[] sortString(@Nullable final String[] a, @NotNull final Mode sort) { if (a == null || a.length == 0) return new String[0]; else if (a.length == 1) @@ -256,6 +556,79 @@ class SelectionSort { return arrayList; } + /* + * Help + */ + + /** + *

解析排序规则.

+ * + * @param sort 排序规则 + * + * @return 错误规则返回 {@code null} + */ + @Nullable + private static + char[] getSortMode(@NotNull final Mode sort) { + @NotNull char[] cs = new char[]{0, 0}; + switch ( sort ) { + case DOWN: + cs[0] = 1; + break; + case UP: + cs[1] = 1; + break; + default: + /* 规则错误 */ + return null; + } + return cs; + } + + /** + *

检查是否所有数据都相同.

+ *
+     * 检查是否以检查到最大可检查的长度
+     * 如果是,则根据排序方式 按照数据长度 进行额外排序
+     * 
+ * + * @param sort 排序方式 + * @param index 当前标记位置 + * @param nowLeight 当前解析的长度 + * @param i1 第一个字符串的长度 + * @param i2 第二个字符串的长度 + * @param stringLenght 最大对比的长度 + * @param s 当前检查位置 + * + * @return 检查后应使用的位置 + */ + private static + int checkIndex(@NotNull final Mode sort, int index, final int nowLeight, final int i1, + final int i2, final int stringLenght, final int s) + { + // 检查是否已对比完成 + if (nowLeight == stringLenght) { + // 按照排序方式进行额外排序 + switch ( sort ) { + case UP: + if (i1 <= i2) + break; + case DOWN: + if (i2 <= i1) + break; + index = s; + } + } + return index; + } + + /* + * File + */ + /* + * Array + */ + /** *

对文件列表进行排序.

* @@ -273,14 +646,14 @@ class SelectionSort { * * @param f 即将进行排序的文件表 * @param mode 文件排序方式 - * @param sort 文本排序方式 + * @param sort 排序方式 * * @return 返回被排序好的文件列表 */ @NotNull public static - File[] sortFile(@Nullable final File[] f, @FileSortMode final int mode, - @SortMode final int sort) + File[] sortFile(@Nullable final File[] f, @NotNull final FileMode mode, + @NotNull final Mode sort) { if (f == null || f.length == 0) { return new File[0]; @@ -324,6 +697,10 @@ class SelectionSort { return file[0].toArray(new File[file[0].size()]); } + /* + * List + */ + /** *

转化为数组后用{@link #sortFile(File[], int, int)}进行排序.

* @@ -338,8 +715,8 @@ class SelectionSort { */ @NotNull public static - List sortFile(@Nullable final List f, @FileSortMode final int mode, - @SortMode final int sort) + List sortFile(@Nullable final List f, @NotNull final FileMode mode, + @NotNull final Mode sort) { if (f == null || f.size() == 0) return new LinkedList<>(); @@ -386,11 +763,15 @@ class SelectionSort { return file[0]; } + /* + * Help + */ + /** * 排序文件 */ private static - void sortFile(@SortMode int sort, LinkedList[] file) + void sortFile(@NotNull Mode sort, LinkedList[] file) { LinkedList linkedList; LinkedList list; @@ -411,43 +792,6 @@ class SelectionSort { } } - /** - *

检查是否所有数据都相同.

- *
-     * 检查是否以检查到最大可检查的长度
-     * 如果是,则根据排序方式 按照数据长度 进行额外排序
-     * 
- * - * @param sort 排序方式 - * @param index 当前标记位置 - * @param nowLeight 当前解析的长度 - * @param i1 第一个字符串的长度 - * @param i2 第二个字符串的长度 - * @param stringLenght 最大对比的长度 - * @param s 当前检查位置 - * - * @return 检查后应使用的位置 - */ - private static - int checkIndex(@SortMode final int sort, int index, final int nowLeight, final int i1, - final int i2, final int stringLenght, final int s) - { - // 检查是否已对比完成 - if (nowLeight == stringLenght) { - // 按照排序方式进行额外排序 - switch ( sort ) { - case DOWN: - if (i1 <= i2) - break; - case UP: - if (i2 <= i1) - break; - index = s; - } - } - return index; - } - /** *

获取文件排序方式.

* @@ -458,7 +802,7 @@ class SelectionSort { */ @Nullable private static - LinkedList[] getFileSortMode(@FileSortMode int mode, LinkedList[] file) { + LinkedList[] getFileSortMode(@NotNull FileMode mode, LinkedList[] file) { @NotNull LinkedList ls[] = new LinkedList[]{file[0], file[0]}; switch ( mode ) { case MODE_DIR: @@ -498,41 +842,4 @@ class SelectionSort { // 虚路径,不处理 } } - - /** - *

解析排序规则.

- * - * @param sort 排序规则 - * - * @return 错误规则返回 {@code null} - */ - @Nullable - private static - char[] getSortMode(@SortMode final int sort) { - @NotNull char[] cs = new char[]{0, 0}; - switch ( sort ) { - case UP: - cs[0] = 1; - break; - case DOWN: - cs[1] = 1; - break; - default: - /* 规则错误 */ - return null; - } - return cs; - } - - /**

文件排序类型.

*/ - @Retention( SOURCE ) - @IntDef( value = {MODE_DIR, MODE_FILE, MODE_DEFAULT} ) - private - @interface FileSortMode {} - - /**

排序类型.

*/ - @Retention( SOURCE ) - @IntDef( value = {DOWN, UP} ) - private - @interface SortMode {} -} +} \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SortMode.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SortMode.java new file mode 100644 index 0000000..a97ca79 --- /dev/null +++ b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/Sort/SortMode.java @@ -0,0 +1,42 @@ +package fybug.nulll.pdfunctionlibrary.Processing.Sort; +/** + *

排序方式枚举存放.

+ * + * @author fybug + * @version 0.0.1 + * @since PDF 1.3 expander 2 + */ +public final +class SortMode { + /** + *

文件排序的方式.

+ * + * @author fybug + * @version 0.0.1 + * @since PDF 1.3 expander 2 + */ + public + enum FileMode { + /**

文件排序模式:文件夹置顶.

*/ + MODE_DIR, + /**

文件排序模式:文件置顶.

*/ + MODE_FILE, + /**

文件排序模式:仅对比字符.

*/ + MODE_DEFAULT + } + + /** + *

常规排序方式.

+ * + * @author fybug + * @version 0.0.1 + * @since PDF 1.3 expander 2 + */ + public + enum Mode { + /**

排序模式:较小的在上.

*/ + UP, + /**

排序模式:较大的在上.

*/ + DOWN + } +} -- Gitee From 477d77f4c33815858077c01c5f6956d18186ba46 Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Mon, 7 Jan 2019 21:33:50 +0800 Subject: [PATCH 11/12] =?UTF-8?q?[delete]=20=E5=8E=BB=E4=BD=A0=E7=9A=84=20?= =?UTF-8?q?MySql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/PDFLibrary.jar | Bin 119968 -> 115889 bytes lib/BDPost.jar | Bin 14384 -> 14384 bytes .../Processing/sql/Enum/Comparison.java | 68 -- .../Processing/sql/Enum/InserMode.java | 31 - .../Processing/sql/Enum/Logical.java | 50 - .../Processing/sql/Enum/UpdataMode.java | 73 -- .../Processing/sql/Enum/package-info.java | 9 - .../Processing/sql/Mysql.java | 196 ---- .../pdfunctionlibrary/Processing/sql/Sql.java | 246 ----- .../Processing/sql/Util/InsertVal.java | 275 ------ .../Processing/sql/Util/UpDataVal.java | 416 -------- .../Processing/sql/Util/WhereSet.java | 914 ------------------ .../Processing/sql/Util/package-info.java | 9 - .../Processing/sql/mysql/Delete.java | 252 ----- .../Processing/sql/mysql/Insert.java | 263 ----- .../Processing/sql/mysql/MysqlSql.java | 40 - .../Processing/sql/mysql/Updata.java | 245 ----- .../Processing/sql/mysql/package-info.java | 8 - .../Processing/sql/package-info.java | 9 - 19 files changed, 3104 deletions(-) delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Comparison.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/InserMode.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/package-info.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/WhereSet.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/package-info.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/package-info.java delete mode 100644 src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/package-info.java diff --git a/jar/PDFLibrary.jar b/jar/PDFLibrary.jar index 33e75862bd8156f37daa63fc21f81130f2c7cb2d..5434678b643fb9f001bea5caa0f2c5524998ce32 100644 GIT binary patch delta 43487 zcmZ5{V{~O}w{*w0ZQFJ_ww;b`bI10MZKGqSW82-aZKIQ~`<(ZV`+j%-Sa|k${;XM} zR?V8V@++X~BcTwLWWm7Ezd%Dne-R6yQby*;2!VmLqzHeu z!G8Gy{pFu+jZ7d9Q2%Ubq=xCl_~#0EL?{Mc(oU%W%p+g~3Uk1vt(SwKG=p7VZ}%y(sM zZo&e;y_gOVF0cs;5*`BT-0xN}^+O%fiCgFH$RTJ^13f`7&x-&t(Al0v?L_evaVaY7 z*m1^FHS9XlLZ&;}o1tOR)JfiQovk0@jy@9kqbYNvbCw=mFj*{>*oSE+w@YkTBK@d5 z-xc${h-~P}b|q#^$!{KHYhul;Kmt=orjjM6p9(@B#Tum{|$* z8nt^n8${z~;_<{4HJ?%?+JvPYk*PmiXaYZkRu)egn4p`Nng!xpYd_sO zwkPKvXR_hLSV)OI-^MWXSJ=40Ta{xfof6y2xyST0=vhY4%hKyGCP33*Ar7n%ZKBvF zQHHb+6L#_0Hq4bRrs;+O2O8*m&azQ@wf97d;`vne-I$>*MRvF%E^C%IZ}Z>#IlUX( zPeZ-z#R@S(K^wI>PO!6GTHUQPcKU~;E{&mif1HU$0D?Z(^#$V_ddTMDd`AHitV~Q3 zaf(s|M-*dpuvT8`BxHOTwPTE-_CJe=58OiW8Z-+OH`R{QTG8zR6MV292LhpQ&cZu^ zzSw(Y4tuD>&uvlmf^j5~^t_2;M7P+z-0_435uk@Gfw1gqFD-~Xx3ECV{18mQ$r1IQ zKRQKv^0VlsVAh%qKG z&~P;9YYNgt*HgN#42p&|P`&O5l10IWRe_y{HAhc}Wks2U9Sp-CafPxY%j3EOUD7sD z&SwyG(BpJnb2N8bnLLiv8_r^9E4AUZYSheUG@9ZK({z*%yhF-b)5NFuOs&adyLAB+ z4I3L;`uDpqShTcu9f1QtYk&|VjSYthE%tB&B}><M6%2YB}@$G**i)PCR z0;Xo$(H-DkV)*q>l}!2Og5R@+-uG{3?<7fIRG-Ak+;O#dBzF$OkkWlG*p(6!Jw584 z35Fn>)wN0-X)+*ABB>ipV#sd}H;dXrs_YmBvwYR5Q?CwKZRPS95=dKO^UM^Clg!IE@wqiK29d;IhlD zC*KP@04Gc+21gWhKfIG|xootA5lYI`o;(oP*rE;lJ!`xgsn0UmhiXah5-zz<5+0xO zJQ&*6scX+i)F%qh*}!tYjl2NxR#9;TU#@!;48xZa8(qILJ2TlkL3vwcgi&*IyOFS1 zBb)s_X#1=u6u&eUydluFF@$Nx*Aq12X}u}uQ_YY|6j=J`sE;|~eUL$Wm2%YC?py&& zZBR??_>fehvZZS^CgUTi?=r_Ze;6=jOJoPg4yyf5((%%>HGL(H5oQLEXTE%#BRn^& z4($~jp0bpL^5Oekzl>o5OC}q&!bqB<%v^iY6?%&IaSzsKnjbqLT+Iyv)y~sKZUeIP zF+gbjULSX*bO(j&)g8&>s7g$IVM~e3lM&h1HME?U(Wz@x#x*fT@7?<-z8ov! zGhp@Dzga{T&))b#zq&K>;pVq>Q7LCwePx9;w!`cqg3)?$g}hOhvMN`YQ)4M-_zk7} z2Kq2V<}cLYEDkpp=+C1`6!vTHFvI7@@)6`lu1Vk6d@LseNhc71iB>Q7W-s{Wkzqhp z`XGng3!*&}?9sa5Ftnhg&{@D0qwk@Qb|{*NXtcmgBbDu*^h+|e7ccT{Q^)#35-3hZ zL9vnq5ftL+@m?j1y;Uv$Eh=iF{Z&!#&s;CKyDaw0i z7AQ8}yT;|}+yh*5a~WqWjIw=lQftJ#Lk~tDYfKRvO>qz9>J+ zpuWHUh9msT(QnLm{caFnzE~ps%hCU(0Q=aNApccyB6U1KSq@m>1|JeYrB4Bm1=$bL z3eyse7$UQ>Oh%vy%Qp~C8Hu_Ob)J@3Wv+3>DX3y4uFHVM)zb$d$m%>+9hRMu1(H;`hXFY<->J1YsIR$(iSdG8`G!7C5|l3v5n|Z7A-Obo|Jh zzn%M)uG$NXwWOQXf3wa2l0O+)#iaP$RMOFQ+^Vnoyt$Vk23B0zr^Z=YOIX4b!;0p| zM=f0sL-TIQu8L`4<*lJOsfAEgZhBM(L>z&PU<>egGdjl4u6n=nUEIFSxD`l0NO>mG z8UJithCo>x?H^I=$i^x;=ztde*yn}SHuBsG6?`GBJPe)P>BCM1K-J!>_$}PfPW|w2 zDMSiGQgkC4bF)}~7Gb-B;Y-)?I?Y-7v6v9!YRJqOwgd>~ot#dFzeADGz0qerpZ0i# zl5Z3dLgLVYD_>ZsQhtC%_=Q&KP7D6+N0n)!aWHOx8@=*+*IR^H7i8r*LMFOyGF75S z38<#Uo!duVU05?MWy{Uu$1|@Z+~4ADaz}85{gHb-VE?yxX?-I9sy#GS2WMBN|Ivc~ zwgkZ5Y963~5FS8v&3-``Spbj937E-Qj1H}2DH|}D!Ymb$=BWO)1QshnrCG&r_Sa^q zE`v=|3*7<8bEymjIFj!dqR{kaT9Gl;3W}MF$(RufcfiN%2UssyHM`Ql5anqbd+fw9 z`&jqxZe_F$d^1>WM|J_mu5`esUG7rE!`S1bprVGEc#Et^rSg^RO ze#3}r4wQ@{y^<+A{U1P&AS-GoCIqHXd8CPVCek@9Z(WU4PM{vZt zBqI@)<#at{==z`>KX0jaq@gQ1XqvkzrTbcuu`B~@Tb#+ysHiKVK%T8_ zwQGo_3o%f-YpH1^+Uvk5q4|{85SM)~vra@KhIz#4w4Zj9iM6|bbeXJ1mNCbw1uWO> zz;5I8KMla9Hdx!_A4F9C2ND0<2mYt%Xh3rj6o9@CX1N}%=MOd82{RN7CO!Eg80lzA ziu7ya(zQUw+D>jh+4Cyp&tN3MH``r`=Wo7`@y|rQ$TQW%YQ7?zKiSxhZgcLYcz_SwV=&_|9xZ8jFZVS&Nz~-QA`TKuPH|FetxX znDpTXLunsOo5_P}a=K(tb}2QM)u9isU-O$x#wQAbf?Tu5G@Vz}zM~-^wKB<+iy0us zP$PbKbKHB4-%>%&uBH%O(ci}td-TBF!Uym)y?g6+e@QHx+wLp$EG6NT|ddA&$WQ6ASmsrDp*?Vb|*n(;y$+xBZm zC-a$Dd&9t)5K}sNf?b()Q7`^C7H_P0>X_+1 zl1k1SSb=zZpLovNqNz;+CNHX@>C1uGbEZ`$u5Y$DEeF0|;#FyVEZ`22aXShO4*^Qv z)mG2V5n+YEb9{1Xlv@nk!hPx7r=VG@bkL@fZC>YiW)b5lTydjV$=r~4x^#A^%Z3DEhOrw8>&%o zpmLk6l4%P?D^To=-VWj|j`A&#;t`FC`Y73z(a5d=Qz5nUs9v}wN>ytR-)kad@mnq= zWB))20v4SqlSA8&f4ahirxt^QKNKbMUvT*2QT+9!{)eLg?2IP1MlLQjYHx}QO6VV# z8pj%ZIM3TVaK)f^^|T7&UbZ22V~$9>o`c`m^)>T7?W9|cpQGQk<)B%@goHn-_Sy-) zBmai5nD?1}v7dRlTyb%@iZ|Sf11U~Wc7$s!ir7&|E;Is>G+oE|riLxwClC`Eazp(U z4Kyx-nq;pB5EBmXRr5M#pSeb1qPezS_oAD*=Q7>A@mhM7F2Cm1rhfr(Q0qi&m6)D3oo0~cwlGWj7`=^*-FsKGlQHfRm~z5-RG+~=U(0LS#Rz| zClR|KXE?`!&|~h|(n|%bw_actN=W*ms)?OkdFE3Jph(RxtQ@Kl25RxOo1Ehe=D5gR z!fI1gwO=fo@h25jc?L;ibVpQqMkPmCq#I+SQt)zRGjyM8__^>o=yv7a@vo@f=oQP8 zQS615=PJ*URa&r=856p|yNCep^MziCe$TD_o(tvwovp<%l#hu&a*NqMXQ_n{=BX=J z(jry?fM+A9CMKIo=ppViZ23;$eucA+CDVu&8EYIq$tJE}Y3g#-7`g%v_Zg_*-raG5 z&ChM)nzV%J$N1yBj-F8jB(ov)A>-!C-Dl*Ya|U9EBdPYd#`1(~0&g))4I`V}Z#+rg z^xD)3SFF%ou-yQ#eVRfTstz`@8;2)NG(k{P+E88>PUk0<8*2x9@VX($OLiztlslU=#KnNA^FJPy%;e6GWGCuS8JPxPj zD3PGS;>c0OLb{}g2lJ&pVG8@mmHGz)qQqExN14Ic(7=n`s#cp--n7>2Z`5&#Q08!z z22=^{LsNBh^*d`jH|$nU-8iNk=vqjhfDt#$kD zbiA+5X;$2fS!fMj2GasGS%8Eo57WD#K%hM!c`R0Or!(o)$NAM2vnL+Q><)|z_9iL& ztw8NS(%u(WakM?n>@F%0zg*@D`9_WpTO0LSq+5w4K}Ha$MUQQux`7!vT(t&T5I~xshyZ%o9*8g}94f1|}O^Pt27;fGD}^FFhG6!L_x&wO@z$GG_G+fd`w#*&22P;hn9-TA6o} zMt|$&$SCr)!w;DrkWzC8ZV}yM0P-Y?>SZ_?cU= zb{1O`>nihKehgFRu#)!nh~P_F(efy5#1!m@)en+upm?32JBTzDm{o~!nWT7e;2cd* z137_H_-_!m^IR@8RHIO}CrX65WZUQWBfstXYGN3Cpjwqcc&O=GY^6-Y>~4&2ZxD?( zMt|ZUz^Vj=AlNTr>Y+W3bQbCXZrg{49v&9Xh{KuhRU2ATEwCv#Yt zlM|ARScSl7Zq$fvnA0CGd7pTgOa5l@a}I%nYV)!oLJEQwn7zVotH2%pGb>gWKJa< zefL$&g-?IV0S;eLETzEo^9TC$_LAAa#9HHEJAEiV%bBA~coGwK8p%=xs4$`60THHp z1u>=k2NS5x2kvd@&#&Wo0NLK;c(DBTo31B?jyu~&UOEFy63P?J4;{QRI{#_M1T;9? zZx3W8>1D_k-d5%Wg0`G}O27CluFg#PT&v53QzRw+fB>(6^3l%0x$gjSd; z$D8*Zr~zSifH{PTOR#c7ocIZhB(r&;$Hq%2Pw6*Y#^85T5uhUyUg=#0F8%V)wTUOO z^8?`l_!dMC?T8Fp0ZI^aBhEKEbRZArl-?twUSyTL`!B!Qo&ELB1F9W*A#W!5H53nr z7iB-JhVi$2g7BKO?&%&gqH_#CN3{!*-_p%&iwc4^fUY@>qjLUAk7XQ#@Rj4?r4$26 z^_-2f@`Y~1-@`beDUzK#RrJ-jzlbC>jB=)pa{M~w@9#hR$<1_6mZ~tn-~7U|^|+q; zAk_1@^zEF&>O<)ibs4 zW{qLQlWWdyXa$7QGH(u*Ns*MF#Z%9T@;cWi0mxU(CIo|3z*_tvBY@q36t*QZC-?rI zs+6JcUkrSNg8NcMs}L+$QguW+V}3Wko7?zWYAUzN4YAB<&`xkK6BX%r`QFg(t*ZJX zhxK-k^1@rZ`L}sb!3?`9zrb*Nkk-9(XZtx4NovFw-!`#jHTbaom`r4H(WONsu5+8G z0j$#b&|!4)Zuk#w+BY&-t=P$)UbJ-BI<#o6@O2J}I&hLLXZazMv1g0Ygs0rbdJ9G* za?-2L^y53My!pH;dN)4cojG^$7t8p z&CRwCzkcaodm_kK-{%v%_29)3?t8hMuC})vu?{?{jk>1rc?)c2gJJ6*t>zBAIKfO% zv!vMJ2QNBHwWnzOEIgV~tQ22TFBFU)vu$OTZ($9w@8j06kA0?J*yS7^LM)xc0(_6E zSdC;N31I@>`coc(J@XR|YG%L+&_Cr4x298XtY0V>Y9Rq{STy`PwW9^5X>F0FuOTn~ z%m9N8c7_a`P#z;?ubavT8;w~JBfRm^HFpxUV#o@?B)>wB3^H(&2nJt8tX&7S1+()x z>hK3#MTcJ}9S=?Hf*YVP-R@q)0{p8{yOGGg;)uQTmKI6MnK?3TQ>XcS2-K$0$iQ5d zaMEQ6)a{11C6Zy4ypX>8o|VdZD9yZ#7K*a~;o|CjFSn_o^04HazNqH4gUoER4cYTsWs_l0DXtA73szBf(;1$I zSl>M)vGW-QZA~2{xo8py2e5#Z-9wD*0L$(}&!Kh}=Ne6t&5hKiXkw(dRpqlHY3xFP zYTUe{_beyQ^T*I^ldHHHqdXiBj6{hp)!_I){jk^Ro3=}lAYi_;gdc%%DCR&|A4)-> zVUv|mHZ{?xy$~Nf3yCWRrg32TPo2LYNZbfBZue;gJ!zr8g8(Do087tbR8QWu?~NNB zjY(X-WjGEnHGEI?>QvY_YQzrI9g;dU6zrjw*db(rG{nN%_TLd}ZA0!H(lV9-d5jj_ z9p>g|in=Mpj$aXn*+fRWj-wuWE0k*!5510{O{A*)+Cz;gs63Iu&+=7n?}s;wDtiQ7 zC`m2K0-9w%X|E_+7ob;9)iS7VPY_K$BFNCh-kpW3GctzDd7pH5!>SO*J2D?uKB5jK zdP1VGF_IFlqCJvw!4d~Jfv-axNXanyAWwU!OV3V2(o*xM%&gYtg=1=`4uxa%iFO5% z^y~&B&}q59sbbi-RizS`T*k|ihSNY`C`*43#(-lzHAYOx1B#4X*ghetUVmC9MH*yf z9$T!br!vIBvjW6}IuDSDG?YJ)FG%T*=~Nn;GY;In3fB+I_)B&fzYp)x*}f(bdeXZ7 z{Q1>kNLUSvj@rQr*3s7#3t(+F3w2C^QUZLs-%z!^iJXeuY=YJa0Z!Ap+%%2Y%s zcuZ|%2U*(h7l6SJK5@~MZpK*N>K5#=p*LH5yZK7=H!(q_Dm%7AEEE0xDbkql^uuYW z_4YL{?ua0Zcr5ln9bCz-xmx5@I%$haimnnY4}o=Rvn%cunc%rOPqL18<$cfh1a5uCm~U z1rt>iL9eGsQCIZfpVRx*ejC^$sMo{nW#|U~Dl`j@&jmw-TW19OaR1 z@Cndt8K8ox`R!&G6^TrezkmKl89ideiH0dV)|kjVx(o(nCSRIA8lqab4l5iw2nq#r zhJ-S%ew90rDe~wB;RZDD3Y`#bYY1((>2|@5U7xJ+-2s{x@wKwIBZqznVr*@UCDo;s zj*Vzfejo8*$Yi_`*TL9h$3@SEY}BrI3w6+S6X4HTKiIiIt2EAIa_NZml6mhzapFOK z;-Q7iPM{#FBt+TE%skzTrAE5N5FOrW<{qEykrL@2iucsarzA2G?%Be!>Kz2|AoaV}(tcu1^GpWgM7{BQkx9#Sk z2DHFSOi4m62;b9F6$^I-+TOT$4rO6eZ5l7WC*|MK5oTO948Ak)4qhQ6|2V3DA*8E9 za^wRZ+nisSP_)XTt=9a!E-o!nWOLMW*(p98wwfv;wd4RPOH7>Y12x=CLaRqV+W9s- z&uIXUT7QpfB8}0BPhosQL6@4kV@{XK2|y*A)Y6gc0jnQ0Uil?5oHTYpcRrQkL7{mm zRVydHgyEPqbh%}vVfl4l%%%yxMrwGr!%{p@op#g3p5!p~hp}!%)9S0bMM;f99k-4} znvjocQB8lq{AZ9EX%B!74Y?!IK9!n zp=>5z(=EC2%n)=cr9S?_9xf)mhssuc`hd-Bj@r=hnO|AIRWPmpK>taKbc|s|7gcgu zl$71=YT|yqs?l$m1DZQwn}AJ4b3j}O(WJ3(JJk{hBpd2gQFR`kHH^*#!4nNuTho5Q zcIs#1w?j@QG52PR=!_hU7F_dETiwTkFv-5f%8{kav1Jx&tC3sX{;NS5-B5#tKLII$ z(Tc?>mYMtHw<~Z^m?o>q!q?m3Hza7o6r|vX^Un z`YrPS{uyQcJ;*zlnvqLb*_!>m_>WbnYWLSF^k+O`=aGI4A zbwzq_af}g;qM9l5P-p=$peku$8$}Ugzb#iI;pjCZ<_LcLRHyl|M+YFAM^}4P4Y`IG ztnuVWrT19vzGlUyHklJ_-evP#f8;eha*?yzO2&09(2Aq86L>=jZ(FwE{#(BYB_t8K zYxY@th*eDIOU>dGZi)~@O^q7oq#LA{Z=~jBZz9C(FT??fx%I|JhJi-U0_tM#gLw?$GxKk{o23{X`1NpfFB%g& zJpkg0C$ANcB8adZIP4|atYiW|M=Q>gu+B4GWqg$q@kG94ueCEuE^lWW|Mkotu5@sN z@^;`(mVECqM%(n}fG9C5?AN(z-@pKbUH)(N%BF};y#7pZ@(UpWfQluObmmZ$5 z;tL2tr*SMl!Znpr}+NwJ} zB+TbFPw@G+IJ|GzBxi(HALRt!XO8(qcG0x|$RnDa1sZ>JfXT))&V8h+dKzU9u@`9M z$Wu=A4`~&?*nWm}O#e(8X#*o%7;g|SW9M`1ih&>VE&?a4b7ZG&Ovb|n+aP1Aq=+2- zdE;DCx*gfvVa_2<%xcouzx!vC`mv?_sOaVj2sV>=j~#3&_?i?Yzl8%{m%fgXz|Z=^ zg5O3cpz2?TGnhK*4|2?5ZNTskZ|{!&GjGEk2SKp^;|!|&f6m}Pi2dUX{vX8tFIr1f z?HuO+qLqQpH54R^_s} z-p(YWgd^(H3BPM|)cZ}z-FD5fmEMkyd%@6 z`m!U=9zMKuLvt6P_@my=)#o8XQn&+E1KrMB1*IK@fB7;iEre-dz`aOmU)_$iY2pbg^kR-)CSoXji z;xQfLr^`|fqh`NKuAz@&ePgi zD~O4pPIW}Mx1i~e%oVzYK4%j>LKajWbPPV%OPEml%{ssL$|~BY$wPtJL+p!~xDsA^ zsyRxFrQQ~~M675-K0%cXAfAPj3XNT2o6LD%$jz}#a|~A<*~m9XKq>6xq?{)wd8hFY zZp%vwVG~zCK>*c;4|=)whzdc;ne}rDd3mH+9W!*g2^i#MpplHgiDFb@9SnGT(}D({ z<&h-3@qXp{%bBv@Xn4f_An^LX#wq^^*?j@dy>SEn&j0_1H2>ww9OVs}0cLE0pB-+? z(^Ib_m)%NC^g$8KbA7_dr$}<{dG0?aBPz&izK`6>T=zp=7Yx?b_ykh!lW*~CdE7qT zy*(go<3kZ4V80Ji=>1p%TlfD__5SR6i@E4prVaq9)5;D%-T;aK-{dif?e;DpzT3 z@;t)Abm0;<>;bYa7VOVpe;=!U6RHW}pD7jkpGW)G^8epl46sB?^4~bLG8`ii*%mEON~0N9$>9jGm+Y^XS)ji_;h*@In! zK_PVY)K2PlqqOzKA!XtUk!BRNG>K^u(&+u!m=qo4GN?|G7?JjoT;$&5o5{y1ZH!J@ zyEVw0n9%Tfe0jK-Ql*ErGs%a01~gey!)X>rG6to`hh5ctz}CB!J+v3SVH$Kj2SJ0j z)L0}RKuO87lD*Z>>CVt>50zeQg1lk^G7ej9P?dVRV3RT)b-IHJ2U|U2OL_S?czKwJ zpnwdWCe3rt5s^fIqZ>r8sDuO4GKHyZ0fd_Xry0Vd5Rb?)^Brj#*;Avg-AOUx+u zL+ka2D22_&#+!OQrR6fU^s0}fTdsv&2!tag1x?$M+Q8$Fz3cNVYl&z z?E3ln7+_w5m#{>2cgzfoT#G;k@UiBVL$y67Cx=q=l2#C5#()$Yt@a2L2&$juNvPe( z-t_H=;YerfhIM-E(F&KEu}x0y_kt^UCB4UHV{{4sZ}#Tjc{N~o(Sk-tIE1pDwXY57 z06IxZrG@1l?I-Y~oZWJn+t9MNHEUi!h_HqYl?yIwrZd;D>p0=F1s`B-GA`GIIHm4b z+YfmHKV$jqaZO{J9f}h&+XI=G7?)vnx7v>@v$R|EK9&b*Uc$akPetN-3lk>+T+;bULV18U2C-_JiC->6A>Lbf zM~3aR3#a?a^JF2AhP7UDnL~Y<5naLFU4Mmdx2I$3GL_bU<4}Os@%x4JXBKA{pbut- z6zjZS^yRL<1$XCbJ`LZ5M9s$J{E(`^d%^L3y!uiFWQt?Js(PO%L?_*S z3NEN54-#q~RAFpoJ9}L}O!mHYP<2Xq?zMh|`ZHlaAWJU)M*~`fl2Bw|ls}QLH-{}Q zfe`66a@hP+&4N%#$#OsOp3>D%0MfM$+<HqSGNeC=xe$xN}o)0eu;F5 zeAb_gsWyJYa{N73$AZV^Vd*|boE4X`lo<;-Iz2pDZVo2WfX3odW-dU|pf$CEQ(uhs$rl&%lHkeA6hsyW4INe&4c_q*$}_^joRQXQbuJb3rLJZlr2&oVJ)YB_ zF|oEK=JXBnekty)%q2JPLVqba8dg+C>W|Kvflb>E0>N)2{uA@~H=p>KBLE~aMgyqn zYvQS+Zw!!|LW>0!d?l^`9YT#Tt5#`-q?WQOfeZpi*7-qs@?`;$&DFfW!RBQ<80k0M z2k6Q?mJG(bR>$i()Ah!da@yObsd|1Nl=N~o+tH@W%;u5FB@y8BmM=g#ISYB9nVga( zMHm2jMKKp@MN-RU0?9S_I7PlWQVl?E4S5!h=nAthIASkmFAiPnLWUs0WcN)kHds_z z{GQy~0P1G_(GjHQ|J$gd!N?n9#ck@M^9-X7pQq=Dx1<-AFcU7&uw`KOhI8^d&}P~* zg@NtLf!l0iipG+fo^`e|L8iQSbgR*wexdnTKL(VrP|>=6_v>`3z}W?NfhxfHf@bE9 zOg7+J%CP6$A;V~hEr+>b{7HT!`n0O$p$xm;?;r za&MkN&=Cu`-%BktkJhoOI&!k9Ian?t@Tq+FWnDcP<|L0yElh9avC+k31)0AR^1_ZJ zTldt$qw8$eslrLTUnfZdwLC{(r-V+Re@)4^-EtK7dH6LQ(K|awRT~2ECm=FX?_2te zEiys2;caNk=_Md=*p??ax?znbb{AZ}iPU;gi^H8{(oK1toQtBi-MN&o?Lp%jRU>Wv*>=o zvOBF7l7VG3HyEtrOJ)J|FsB`k8g6d31Y6PVTiGqZa#gj0j2NXFl7i_nLY?b%x3y9+ z-4R~ysuSg%V^Tnrt8(OE;)WeVpm+5@Nt_zw*GM)Q{E}}A0IBVfsmjxNPx4WEoV!Lp zWn?H--JbVW+w1ycp~&Lxhc_cCX9&_Y2tTfVz2Y~D^!Gx`{m!HE{k}!m~%J6Ke|m_qmiDnJ_;$bET9&# z^63xC>&#+P{jvcskbbAntx^`T8dh$DmN{d%cJomqBMVz&O7t!dRL%-_D0+~OvpthR21L;QF{d28BC0S1oZNsuiySR z;PD?dCkos$M**l^X#C|C;7k^CFEhics9k|^Ah8^sQje$!gEZfH37a$^q;VyD+D?cpOS>dIb+` zN*r4SI(VlreT6(`ITkgZ8WwVFe1$Xk1$duq|G@;)=kx`?F!TYcZ2xiQf$QXj8Eo@E zL!^5gvCJJfg&**H?IFUPd1F#irkqdF4-8Yax~U}>_O{CxNhTV$6Z9Ifr#&rtHOb@6 znN|)~fM%*xPKyi zbNtBrU0kk%dDI}b=&E)M7?OT9PCxPGb_zLiHZH{-?D~`;J~;7`OmL1yyK|gOvsnYz zG8x^%djdMQH5QNY=*L`bwrC9=vo(y7ZHiesfPRLGnPkqt`yKERsvAZ({k&HvBvM+wk_oW5VKQlNa;C*Y?4}IQtYm{XQ&no7 zE~$8J?%P>?TJC#I4nMQT zt+|T4n#n=45}T+bq{p-oXU5Pd1m(Db0Qk(vP#5|SDq@O>xlD_}y{JvX&wa?%icK$LQGIR=fDHo|@ib`c;RW zbgm_JP1-<0OA6rMIj#@DAW;d#_;4Q>^$%Df0SQa_vu_-i2iPT>uEWIo33f^P0T9Ag zM`V-);^0@rV#^dND=;rir=qVYJ(|}5MH$g$A7DI-D471^d-x98ayf3q?~rXe@U|aU zA)f;EuuRpng3m6z5KXtxVv7VqM&!$YuLuOB@3(3JFD4+QqtQXjAv1m`mN^DTfk`1C zm(qcVea2uy#Lm3SK@m$5oP;;j08EQ60e>cIkSo-%k|M#t9S{oCB^jo2-7bQkhRD?A z%AX{-h{SMn*vN&_5r_H6QOFD=Bx)p#AxqI}dmuWYwkD@Gq6Vn94X7$>p_j<7QK%Y* zSg)0{E9j-}up1QjZWM(*B(ANq4z$V-VY33FPqYZud9y49Zy4Hsvd16=0H_oRb+p&g z+16yr2fKpsm zW6FG&MX}j!QVHTtY+_4SCt&{AP=f!LlY<{rwvezjShEotO$$GuR*pm57OXCdfNT+@ zIjOW8IY+LBJw<%CL6@PjY#uuvyq|!i6+?EJJg(uV>z>~5&wotQo58K1*gxF$_#f{2 zuTHg(ohNO(0R;B{cBp^!Qd&AST{GCsjh%sR$Yu zyZP;35J6i0tUeAfFU^`VR}JwU+iZ6sI?BDvyUTO2xLS)BMBLVTrwgF8Rd!PSLTC%1 z5r*j@o?8Brl~wX${H1k!`3vSYr;vTx5kbSfEUSmb7Z2$@CvQWIo0Ko(`(CY4C_+8B zy(FupyM#iQ2-`}wz>>9+b_dAIk(FXE;h|vGr-TT9DR0B4JtMEn1WF1}$&yz6%$$Z7 z6rMNb3~bdK1TQbSOa^~`!d@p&(g0OJy)3%7%23Je`pJll_J=&iRuYDumpVwE;@I{A zYlCix1Imt1@k>jWV3BcM#4k#wE#(`1j2T)bhVHdRD0qm28oc|v2c`KaaWUCFC%-n1 zr0=H~=&s_gavL(k?WMdcnUEIDm05lTh;)Q3Z>MJ&=g7L5vcdq!%BlqF>Mu+Vi#kUYDdmdqj;xW`>SEgn>&}LhNJsx z?Ch%xS?mL(RJbQ`XE!^ur=Ik-C^c-s#gMu1VV;MuYG-P zTs9uZQ4m)udu8u*6ffty!|yDXBZ*N*)MHURN)`@sBPAY1ERz@A?~y9(l6~3IaA_1| zbA)6DGvZadK9glFqG9%cq?m4}0mpk;Y`Ij}CXtO{^Pjg%EW>j@(Yk+auwlz;6=1R% z4FPvfI%>|dvrVI~S48i^^~#jwdDQ#fgHQXr7ENSJ1-enleieNasYPg-&>^`4H?1Q- zPq#VS(Jo+n`4V5ES{K15oJzq8V*W6ild*{j<^+i>?)k{$;MfJaB#zmJ3H8@-PX zLDe079J4+MzQ|%5_O{2u<{UVuT33K@;VK#jTU>xc$6hU71xc`hJ3Y)p+f%m#mgO)*y+_p^dap0=Y(K*PwVC#a1P z{S8pOJxg;eN=xqmu(!Lkt<|bGSJw>sCL-q&{>rX@jv*HS8}B`n&McE;J@BS6Ud84Z&C z9jDH+4IHqOvQ4~Gxl^ZAwWHHjx#Qp|Kd|++3b5^l@HvPFfJNlP=3wulIc4H$=txC{_tg-FCq^~`|2mk&V3?K6^1_w-Q@r-E^JX9 zY?@r0)MC602toDj<;^W`XlTOAV(9$Ny!9scMj>RK?x*o1h;%^iTH|Li(&-Uq!QuUiMbb8vg2Wjfj{#-58=^VcgD&IvP6tQCXs*3{+m(&D~ruQc>uP?{v;| znIbLhTgLw*>l}kL>9%#-UAE2cvTfV8U2oauTefX<*;bcrciFb>+uz=2pV&7}#EOi} z$R8Pzzn(eQSYsM9znI_~wMW=d@0cP|)L;iIF+)uMR&;mkQ757B{xg}L7g;gq{D^1|33QWVM?il&mrRXr4ow@P9QRxDZL3Yy&$6DU^n zSP{eK1V&|GwLy653RdVEOIa#W6sAU8`kmtXPq*{hL=Za*hrE(nJV?)k`l^5MxJSsV z*5miCB}s=;>u?2OHHq#<@hb2VLrJg)?>>A^8cjSK5H#J`>G4-f#N!t*su;%2;*Qrc z?NgCh()igW*XuW`)gcpzT4Y{}oq5zb>9!3v0r@170hdCORtiaf$$4GXBxE$M@}x^4 zY+bww*Bc~bH|B8uC`+9O^8jCjARogXO<8#$q-T?p=0&j@-A zfiTTR@Z5Lk=Y0W*-gnJLuC&a!Nl#BX17I3 zL$Qrsy2Ni+=&F`(yA+ok8Qq9c!c9@%zUSsa(hpkeOieg}pS(*3IJ2HSQaWzq-0o>5 zTym{`Vh4EgR`-nDh&j+AUsj!^TZxQxU2W8t5y z_c75sqT2>MGzP)n6e@O&8#al~$aXyqxy*7wV(}G&5j0da+g71_wexq`LN+h3e`=&n z&0`h?M>ntppE~?R$iE!xRT8C}xjgh`XB*FcuJ}o*Oc1)qd*gK%)JLL%*%&@`hUx zr;_@KHh$H)O&)vY%To5FuKJlM1UMDC8t9_b8L*Onhvm^2`N$)=#5;)c$RfRBixy%IBHm?d7lH5$}JE(s@&F^MxZ-nm<7zJUIT#H_r{?#S>e2PMp$d zz3!)x2l#yb^Q%$FNith(C{{w>o>9p00-P54K-k-tg4x|;hR55sa-9j`9dJUMf}UT) z=Ql>KYkJ3s=z9hup7=nl*$$5(q@1(6E}nA-PzmNiSLj%grE$f8>&D|YTZ5+4@ex;Y z-!-$^rB5w)a*^xj@vM*n?p5bwM-6$f^6vm+4wvj}XEbS1?<)3S)4mP3dt3|JXP=`Z zOl{=ug|QnLdaxR%rOpu4XCU(8gk7y%$CS|TOeVd2Ont|vC9FR4+kY095jY=_{4#hV_4n{{IBzL^>}7 zpqDe6I`-EjAaR8T6dE>Ih!X6TVFg~dr`)E$;HN(h)K5}>sG>0wHwg^3hVe@pQVOco za@Dft2hobgE*!1MW-SbBnqWSGv$u`aRnM45ya&85b$RN~uJqAMlZGIn`>g$Tx30FQ z_UrAaXA9&B~9#4WdivT|IBQFw$r5Z~AdJk%Btm z^kp1aJwAfwt@?whpwCiBtgZS3KQ)~t0El7k3Ipn(&lyqrh}*bKzRCl_f^a*vc#ay) zco^+y>XBG|{Zs_V@WXcD33~Fua1B6f4;Y?Dbv+Tls*sDm>og7khyj zL_v1C%ESo3!G+~yF*~+9+)>A2Je-6{k#Q3*ri}SF=!dy^#Z3^|W0{`L? z^mps!!k(>!2<9l(3+Vad5%_zYblY%0FgEo0#LRmcp&Z?!ty6i108ICDU{9XJkq(zi zHkM%C_Sl?^%PIC@@(WgS{mYS@=2$}IthH$8GwPqco6GoJ4Sg~rc+|dXq=|hx|5`cu zc0uSzY_*+{lLz<%Do3ToT5ICwC9gB`losf=?XwM89v?j(>Qnle{WPhiWBq({`ng`C zS$PI=&fOE-;G66^dq-hV(^9-h?)YnbnyfutJ?A}5{YRO06~|f{Dj1s zoA_YEqnI#x?n{dqTz_36>&SAHvQ|sB-pXpak%b+0cFU$aS8@{xuwIRfJdHdFvl~m< z{-sqs?h4QI$HWCRF}6BG%Q{3~liIjf$Qz{v6y;K|2Wc6Bm%xvmsTB{j_4n@GFc+eB zSIIiCcBM9%35{$d&$NB8Z5&R~Uic%%i+o;3?WH{Iv+2T#0X^c)!hHNpmPVuG5Vr!^ zew@k$d+N=Ke8?+B;7wM@k%Lx0wzXAYFKgoFit85ehk zi?cx&-hDto`Vob_nyj|?QaSvFiw*w9*%`|_mIXY2uRQBJ96#m_EXE#N`g_7tp{N77NlhOA*O8EmvZ-@%qX{cQRM-SN>I8cFe*<%Hh5=DrHYb5P|p~jv1*hj?q z3USkrckCSrv?plyR;SCBGo>NEq+A=cdx=|UTb@es&2Fl&J^I5}IO}zHV47M-ZI;GZ zP-YGLql$O4#4&O`CZgzu8FMf8h9dA?9BTB|(Rss3 zX>h^-bHiYeKkbbPl6iL|2vm7vouU!XD364Stn)6~N{4u41o4Z1Mrnp!mmy~xP1c2H z)_t!vL(ofiK`uhv$dZ3lY>H1r9@UeetmWEnNR_7tt$;FxprXV~7SJ>ip2_;40~1}P z6b!%6UBB3K7v*rovn2Sg6&qB32elb0xdW983_-G=@{Ss(;t{7EB%vvoJxB}0Wh9(@ zRAk0;0=KK_0j#ajxX709?qj`6MYj3ECBf=iD9=S9QZ~g=kLoKcf$Bzv{4mgR$_;t_2_FyLn@wP7)?aL?EK@;0_$^ zpJ59nBkWHq2~}+1RPlmSUL)=h$uGC5CyKRLyG+j=T4)o#` zTtDJk8L1FU^VBN!Y-y_^MGw}Et&74T<7HHqOu{e>T|L&0?Hs`7rfm=#R9R{Qygvkg zl!*HfB`r`FH$~n+%gjW`CqRsoM)Y9XI{me71X*m^>8Pfo7|eiXy1^m8J{hailBI7C zN>X~1I}q>~wv8U+FiRzzcAnR{OH#cLAKeAgMFijzoEo8;aC}WQm;)!82id z9Y#Jxd<<$r8OcmOB)!8gU4M%VEb~JjFdI!Ko}NlOqo~-7UOV5XrXjH7q_|Z*KQwQW z{?l|sa)LzrO&;k>5krH3mE$nn!^S`F3Bwwr#*)B}8pm2#5Fd{ek2xD@ ziTk^aL2&cD&c1`!9@?Vea`d@14uo91Y)<|sXO~AxTCSOjyjM)dNf|skuq#v5`y1Rc zpZAPpJ5zW8+Ty1n&9XOK^u^9hA5XRBk~bQb@(Ut|t8;VLP`;i}<0v)NMB;O<}TqY+2x)6@Z;(k>2v2~|Lx`7u)P_AGj+9m zXDl|()!S91xaW&3#=bo5#KSQZ&s zM-z`K>Z+2{*r@D;*t+{AFw%VR@0kB=C=2WX!Uv$geKY<)0r0=vh~E-rYZ(9OmZAZR z6vw56|C$W{tZJWCtX}Fs(`g|!I4mVY1t?fOyn;H}%_n4V*Gbyu`)0uM_r#)*H}Ar( zON_udaWEg5+}^(4!+k56kuzZT2Y`4%pOep^C?K-I%gu`jw9jA2JH*WWkljbQfaYkW z{o9z)ozwBk#&!`i0fn#`h2=OuYK{YTk(BxLyz5!Qj3MK2)*33{^rPZ%;A|L*X;6G; z&)y>1_;im?MwOgkzcpl`ql~?ap2GVbjK`HpeU(o2F)?CM(a0e(Y-GKk zxg=&Oomv5FvpoDL{w3K+ocDwX3zCs*_j{_C3bA9#O+q`Js$}+9eBzhwS)zxkElnAz z=X=X*M0FfdCz*f%_~NsQVK#rW61qZQ&@7ia>lE&{C{}|+4}FH^-OMo6Ug@yO+B=AU zezo5KBMs|coa)E_;8g$ilKg9f?SHfONH_w}${EcJ+ZWIRY=1OkIf zYweqj1XM5?l7tXkQO4*ciRSWzt*aSm{z61^v%8f|6Z-0$rS?n&3_1v#R2im%r{bEW z_S-oB>1=^`Y&SLE)r5&#eVam9j&Rr8lkfDMo*Cy?E~Y%FhW`^t>0p;p(l+dzw_*m6 z9{k$Wo7B(LeI_=v@XOL~91-$5jAgtKdUd|$<@({5wT@J5xfx{dyqZ`Q)bxrf zU03Ld3A7r$IpaG?cfDotRAU?z5nf=5ovd94^~Y`fL`eBACwRXNsnQOBu4A&g-1ktj zb=C$BVLoA`3 zkXh~$F%+rT9%IyNCPR%Be@HS3zHEF*s>X(!xlF2Fqc3qGQvtVBYA~-Uvy;2tZk}yE ziy%X_VD8wI$SjjFDMvU0q8q{-%D;lqreZ7d#JdjPyQ}mr>}~usY7l(1N*g9sB*(*m zy*=lBga=MwHxN-Qzju!@$<8(3YZJ^Tj1&@i3d^8OuxLX{AE1M?>x(o}=QDh7g2Rd5 zROt)5m@QzXvK23g;QCXc5xS;QISfIlr{n-ZU-3-Ig(fgKjifpY4Adj^tu}&mrD{E? zzYuFp&BfM$Ek<&q^7YqSf*J(&QCQX1 z)$C#u9O3I+$`PuE-aSyGk~K^{*CEwXVXnD02D)~W5wRq?hi&1SuPEptXHR`mFD(@o z@qLAgI4Fny7ueWrHLmn3TMobgH+{i%25Mh{_5qRX%AUdaC=0gAmP5Fo zdl|#cDxP^y(I+x#G*mihuQz+!sUCL`VQkaZMKD@_TfbV>g5J)Zb8&HL$T&5gkwDi^ zG@B%hij4g!pzEjm>WO7BA>uysWUaGh4_zc)xGYVX#OUM)7T_Xx0@lmV5AtHcgF+kK zJ(DcXvnGfwAPn_B2_-S#HK-!a#9}35X=kII$%>XNBxzBYAwB9GJ6!~%$y@?gGu1WO zF@)*N=&{)eWxYT5lwTv#6lw(!!ql`-X)zpy}B0YzyUGA74MV9u)VRxeuH?_qa-$7)KI-$1k{?H7_JShK)7>&0MxRBl!~(a#4|uF zI)+;>d&Qasr9ciFI&lUy1W3@A!6+3Lbynz|=GvIXshgnfG#z|2)R+`wW84o7u8eMG|;FKRNT~HFt6rE?D z&LnM1_Tm2Wj$k&_$PZisSI3G7ZmT`z;1O>Ci>w^P!7LLxB5gTE8(l-_<;D*<$af+k z;X)Pq`+eP*xT+QxYrBGF_&*;PbW8`DOb0O+cuc2YCf0CkRV{a;X#0s4?G)H41>qy^ z_)MFOCPdZ+Xlt@eyr^*}jaiqV@v}3m2-tRf>7S8tHz?|VkpG;=r7N-q?am;9$oGr$ zZ3Yl)QZ>(f$9%`ud}hu|%!2Pm%9+zn_O{yvKBb}Zic`pwEHHb5>?$5@7Z_{z|CBkq zzrq;b$AAqR>TXxYI>hJ{R%lBTHlu!}Q`xnx>?^@Kb89J^OrR7Z7#%PauZ2lZ=SA7#J1TJFitz5i1vtkm_VGtb%M8|XR5^Oh*3Ag)ML$|xd%89Nk57HBu78qI! zg*YD+YXDAQD&!kw>*7a};}=d&o28Z{)WeVM>Iy^(vaob;x=qr+ls;E2n_-QcvG31=an)wYH8xV5fVZ zwRZQ?ikvGiXk+{?RjekaG*$?qBMVz!FZhkMSYsMRHa_P##IX#k;X zU^&46!P;K3MGWFOzL?~&B#mt)%x$NF@`Gk&!Q``@r2WZH9r8V9jWJ*eqLCy8J8i2W z)Xrmnt5S;IQ2hsmi)-qrn5umnkXR00H5UXCm}W)2ZbgXQC%&e;Q=jo00=W0`GGCO` ztuuz50(%Wpu~k9yP*bPTF|~dNf%=dslW522zEup_AuQby>2;kmF8;_Qx^5G^@B=j@ zNR?9FH>1RwkkbFj=a1ISZMx>cLE^$#=W``0>k(eG4fas6AN%Hd zNuDp7F`)%ls7jnZ%kiseCHiJXJBO5xDU?Z{3Ys<*1<_Q{PmygP*+}H>DehU~^Cvsj*Q|IWyZ2$rzke=~9}=KpDu{$u+_GD1wv zX#5V_K$Nlq`5zcl5x8cH%810fS-3)Cy`~`5hDPBZFy_dJ*pWw6s3cI17EC4m7SVyr z-paA*dQqkF84(H<4$0?dxAO=dc7rh>toKbbgVTv8hne}dgpiOA#N98`hQ+=t7+dG@ zFoK=>=kK4@!L3s>?yvg`Q+dO+Gi#XQ0ak`$JPyH31uh{6fNAnY5b8Y>!=S^D^}j0bG9e#w54ImIo$(}vj}q7i1k5}-nJI6$ zhl_Lzs}rFKhFv95=c#)t81&#xhvFm5`EH{5-tUo>?Mo4!HVDC}Wwiq$+Cw8o%CJ_X z8&DJekHb1Oq{N?xrBaK?pmG)D+&~s4K-BlmdA- zRySm%ojlTj8(Ha~8+mCrF<*~Gy>ubGcku+h$`y6zR|xZS47kx=;u9MEcXTdw3s2`9 z1%-UrAj=?nHP%#z6z|M>fPJ#9_P^E6B%19w>woh++5hJm{3p-c(F>eqdFb*R z+F5UHmZxMR`b$h)#4tc^)CUtnk|7zwn0qZ8;?54!M6a93U6?t-sCy$C?6t1LyVvfv z@vjxyJ%>7*ts4>SoB?H1cbw_4L(RI!tf(VXZ~Y-e5-=}S=?lgA46vd}1{UT7g?XR_ zEp2|C&zik_F};ZiO1Ox5o}2bin6~Gb#4&HNB|<3Iq>7GoiAw=}5`j#RQDAs^WwjVI zY&%m(5qT4vv4s2?FEp(+7Ns;gOsSWo7f&)=5wn`8z+QsTDOSy%?w4Co zNyJ%U3y=GBCo;XhTv=cRUv39}FIa7i!hF_fKG`qzg+%nM2sYm2i*8)@gnpJG^Y@W1 z)MqtbH4tOo4Wgcop`*=~)L@jw`Z0{(CLKVU(6A-#gL0^UtOQMv_+x_3w*@Vgq2%~2 zjU<7bxeW)kCS$rEfwBS1DLsgq{{8eMibHZ%03cv5E;M`~(iDwl&fNqYuY3T2q!N$_ zsqoZ%3x~hpgkfVk8+TV6qEG8jufZ=5cW!@W)=+8)Z`+vK6d$?MpfVn6!gane57_^5 zH0&)QzXaJ0B`Qb8W!wD#jQyzc!bM*Xn?#{1-sc1#M^>tpVqq;+o(WD1LQj1aLAUM$ zfLqMs4NAl44OxN@i#P%CDomp&Is6l0h8(1NWjQ866oTAk@RZZbw^N^0cjRK?!1Q~m z-Bo+B-?e(J+;w|#-4iS6aG1c&f<5eZ8UtFuaT;!KuE>~m+0 zhP(Q_tSb@X=;m#o&C$9SG~l?#Rl4U~{dF3TRQ>{yWr!AlP|H#uoTe0Jc+C2O0#D2D zooUG#uqK>W0wKU0J>`K_qDRaMLg`3Ot@G{s*0T7fx_5SQQx|P*ZP^a=3v5Ui^CIJYm z=F~B?`Nnj#gf>xg(2;MjIpU$*`%az3jyX}Y_g(>h$8fZSIYFG&f;OSe*`06Dm7*sl zb7gbAYX#I<8Qbjlb+~|*Xe!xRaRk}iyFLj0T>ZTVh1XQHRF^I3>_^oc$(UVAyWN^i z?S#*JEPz%ker5y5&G}fT?+1@JngAO~Vi{^B(#QHMLu|wh$-1V3H{_dL)i`bv;p<)piJQ3k7y@k3b-s989A89}+1jFPxv1U{dDtk{4J~ zcboDBWxKICv1t(DWvvnp2<@1r3-r5JWY#-rR7D;g6g}CxN-CDuv%LBnSYtT?$-HQn z1cAHG2XgEeB*n3YLx3miLF|b}@Q;{n5HF3BitEpUzBl)3QXP9&j65(v}rcsc!?JfV*6a_vw&kw&G)?U6g#9a@L0{$JD~ z2m$c^Qb1D!ykr7vg5W+2131{uP@hl>BNVqiz16Ec+(DXVukikldpG`BUI}NyLT(^r z_+`JyHS#a7uwy={0R-gy;nE#RlWVjG9&uTDW5k^N`-bJvBbz_%&(6#grj=@_LA*gf z1+kICLE9woMnrc7=uqAq>P2Br8`wedWbPKV~mvWjX?)m;^n3?i~%3%Cf0LNtN0@=9`-b7T;Jil3jQ#H zsxy$%8ii~1|7tK-B5?P=h~#ky;=H4n?wt5YJzjC>8fBEqDx9E{ie_fcX-2MWiWE>r zs3OCp4K4v^B9P*;+q5E9M%)T&Wr++WGZ--dx!W19YCAS5^e$RH{IvrBSnvbAkV`@> zTN=B`kg)p`9CSuwc|mT#p<|7qAyrYjZ_LEbY=Ta8gTnfc2lVmND=bMB_rjLZUV=4W zIA=k?#K}JovzkdiTxw!}HTvroeW}*<+#VZa>-5fbLv?x^Nj~ze2W~XFuwOR33GsFJ zZm?6{V8nZ8Iv!EHAgnyo@go2?|DxZyqVJ%VuW`S9#cc?G25&LPzWc9i$F{-(`#_(W z^?UWt&1s4+sZ^FnyeL%N}OyEYBe~z4dqX(?Gd&8X=yMIQ%Jcb7+ z%E4h|9XE>mgP?e&pBWyNTVr(h1E8PBo_j~1)B+Q}K>q2v!q0`nnWFzq?_}uz=M?L| z53eF7R#hT`k&2PaHS|>afc)z&QLsh{r~&P+vVi`1b&jq711zk5A+IcCG!D7Y994u- z0G`YmG-xn5H9gg2WM4K7JW9F>y$QXYez7RBnT@UrJ;`6H=uh)%xri)n7V&ocFgTVb1c%9G@s zuEnGD9k0dZ!_J%DyMRgcqcH){mtxXKZ~baG_S%@ApeImI=jS+LI46JnZ2ue&(PY6K z&*9+SEk@Ow1@c>N_-3y3U62g_$sm2lb5VerU4~daU3H0)m{k7A#K4}5XW^tm+G4Hb z*00dr-zzv$IJEipzeqdh%o!6xuo*2Wabub?Jh>7J&mV|Kr>x9RETBEWyMHzxpVnpl+^$e&XxV8>@5RIb%(8WJuIjex@hw!C-Cti;uOh@!gVTIv5lcd zfK`bMPo74Wcs(iM(q3jDJz!|=4m~TGd6A;^v^BeLIV8=3X407jcT|;YfhviOgvir7 zIwxw>$#*WGn$Ugyeh<0j*o94nOW>R&6c`i@b=1h zW@iDTDg}acVd;8(sA;wRP3g5echv3aY$=$8p{S|92uF5d#%dr?)2;TpU8b{ttX41s zoeF~N*^yV$qS&EZ=4nQNN;wS9a7){+&MA_BJT_h&JqEjLq*OORBeTIylgvlq?KX|D z+NUT`)$>MWD(V{0w=W~9J>VGGD7{H>90IY-9;}#@6&KmCajcZaQprcA z#X??fKV7Qi%TNrwqG7(vQ*l4I2)^GqY8qHhmD`U}OcU6|`BkXO{I%F{ZVZS(-(f}7 z=Ds)KCO`AI+qRe~(|*h8viArm@^Llgm(DE64p-qCD7xQGLyjeItt!QmMb3t~!uBAi z#0@l}60EorqY9#CkK#fiUL#?k^5pY{8l+j(sL2Z;UStHG&btYac-$4RpNJ4#+4iv2ogSYLK3cf>P%UE(4&;cJ6pI>UY$J}U zGghVDg<*wUY1ppZU7%h!6}tYy_dDU_3}e6>R?b~}b>!_J5qqOELnk0C(%@MN&5Ktl(Oj5L1LQGBx(KEoknWiCSx8l z2o^weq6?tF{;a`sO0})I!5<1^^4GDk-h_f~cKBzgG>#yppIe%t=hwS3g`L&1X3d`3 z9F3Q1y+T#>SZr)&mGa|1V}&sxO&rK;05Gz4*_pwNXo~>wTHWT1@GH2Q?PX!_=_J_n zSkMqE;}P(>hIs~yk%^yIFa7%K80tYSLvz4*Hd{4AZ1um3aileZ@181+4!sW!osGGc zg8dKbga{K3^Fh#_I%Vz#a@pf|wG{(6yJUJ(FW1$$nywe;lR=TLbf+cEREwb!IvudP$JU~}R z#_79Y@)S#%kuMjdvxheHvu;@lwU5*JjKZlp&|<7=jWNgI0@{Gb`jnP^VTYbsnca#? z+)+(h%YheDiftN+Nav5RnE_N!7R283KpgI4f}oR9G5l{J)FteA9D(u(e~h8M5Rax! zYU+-@PrFj)3Y~jk_24hVH}#|FrvNb_$c#Nc!C?%*)#}|wIpIqlZi~DfYx!Nt@iaM} z`WF;j_{SdmI&H~$ED<}-a9sP{$njL&G-@JFl^z91ZL<6sp=M60tTOAf%HP?1W%?{D zcNS$mP#u}AIJJhc3ICj>T@Jo>#Nxibl%+4sZKwrVpGxK;?4+6}Ki*NZnOR>F4;Y!kMZ z#W-O7I8g`TA9AS9zGr!5+yIqB@8qKNP~X#@bhvw=7Ep2!b<+w^#ChKRG&X-%PL zkRHnCwVf7qS_Ib~xwa#3DnPzv@-Mk4XoRCl&ig~1!&y#u#Fpc`;`PUWR@UY~$PGX_ zmp!L%W!8P(R@~ggZV2H_mb`OC#*XVm_BL;G0Fjg}haD3)bRETMvy{P${-}9+;+F~k z&_XK*g(>4=YXwY*@DEM#LTmd@^$nO;YDSn|?Y;SmJtTUrVCftfmHLAdG`>Awg#Gv4 z_a9a-C{otMI;qH|Hc6cUbE(F#)dQim*?(>sWB4rmd2%IYcyaeHBpATPaQ;#^8pMXM zuh4vKoB?krJqp^B{y?b4!VuS>T-vtv(-SG-aN`81UU?AwhT?pt39 z;diunD6DlknGO{sYTB*n6ZpkrtQZ_nx1Hs-YCk8;7?(*G=5eY;+D=4O)Qu%0A=MKv z@M?qVvyfrQ@bc}64U$-z7`xL;4<3fuLH3FOO%=5py8>WPd; z?wRtNyDQ^RT_*x++GU~xamu=VF%V;eE98IS}3i3vh24P!Re4x9#r)Vu(zggk(^$Gr8i7kg+$M%V1S)fly)Cv{)Yn=nSmnp05a0%FQdDyOLi-BsZz{sY=^-0By?>6$N#u!T;H%FinXN#RJZAwYfnJk|r5K=^|_bgOlsDA*4v5c$74&5eKIa}F zHe-o#RTXi%*+88=oDzT zhX#W#4N$QE@mL8Ze)b{*p}mzK@V`D28ZG*)%4k)PVZdQiNRWC@$p)z!^MWyEl*V=h zGdi06S;9GIc1KM@W9q`E;7g{g&JNj<%l+X+vofd3&Rr8H@h=_wH@NIpuAYE3H7C%z zHw}VYSHO<1w~ZzKEuSmgw{I$Q7Pgf=AAdL3zOy^lj)&Wl6F3_Jxd6rdwD!}!5-~E%DvA_LIO$5d}*G6L=8vT&t-UTngn_y{eprI zPRK`?j=O_A?@B{Jedy;V)b99rQw~ge=;tcbZd6U*t0BT`aq`QgC3@I+{?YSk5Cmv< z(H?!Uch#OPuy@@aez14tp6)DnRr}4{&?Oz7Pwg~MUDwUHl}wOL$6Xup&7bBjv!ywu z;a~}pypr~!^YIe0KbEUerOw#F*udZ81sW%FXS6?}>lXh2Upy;vW(ov5Bc|Cx)_(b` zaP^wm;a;Ae-^t-@Wlk*m(#GNv{=ssmX%w6%BQ*ea%I4{9lOlR?wGWa{-O^P zGcNNp0F;#g7a@)DKTWt!5y_SPx5a=Q8FQ$!0t4MNDOy8W3?b_;JLVj!vbE|HI->S} z7&!ZuU+q=&Q!dSCQK>K}H|QX_UiG-XEDK_oNSK2~C-k+;6&Oj^|S zRt`KA{K--*cXPm^nlV-H@*o4FL)LdQ=!1_BSJ5BH$1^M3ZyeW+`S@wUs2>b;W=6@9$Ji9F^ii1u?KN%+vvi3?A-M39-&Q z%O-I%8g;gf{#&txiiCB41_OT_ZW||`geOsfHQPfrBt)cJQk|){LhkXAK} zKx|LGwu}wmOl~xL4d7KNGK62WG#`+HzuIBwb-J&2z2Klj71e>jfa8(pNeI;W zIe-koQXt#&AXqsE_(41W5<|5>@j6S#NuD$5d!J2{FQ5#li*g{Iz?)Oa80yrniDQk& z(nmEa8*=6$kS=sq{n`@}*yob`O}>ye>k04Xx1bP{IY?)1oLM8&@6xJQaKaJ@RA7yG z{&Q>+-xUCOgjJkBV7ZO^D>#V;%*w#G?A=w`XH@+RX$>J!!l4r`2^lwaEt;rCv2Xfb zJzJ{^ARH2hN(_kvAQ%^MXTPz)r-pU-a)}mjvZxm*TO^1jYe-+mGWfmtvceoBO`q(Q zg-CH+G)m5$YeQ9DuGdwTb>##ClcqKD9X@~XevQ24`?l2H1nQEgNg`s#o++vw7e-|G z7nQesq&fYG(9A-xt+YTS;oxq$Rbj2~vOc}7SL`OK@&&_clV|Jp z-)i~GdQ+rMcBtTV^5j&a06ge_iLWVLoT~eCP0e_+q{|(%`n&(YlDkn97tLNi$+{hq z?k_Xoo~KuTPoef5hrHI_w2E+ioOP6BIp_=z;nW>A$*L2fz)R-JKuwzHqameDnIgEK z<0Nv+bWwR))SKsw!WcmYF3|58a6TN{?tDZMNwGEv+j6WRCF&<@lvzcypF&biY5D9b z*xZ&FzuD9U^hpN)*5~+idm8s&f}$-He@39oul+&VtInR~suQpA!z6<3DeN3>?zMHf z^`SVojkHy52&XN~n2M?nM|Z}s5kcD`kXdJ#nm<-2FMe+Y zezhn@-+%x@ZXg(rb?+Np-yjcH;d);+UssAc8-e_32rcNFFUM)8e7*_2SIq^ zu`l~ALD1xz->ZrO<_(lePjotkUufGS6%#20Rbmt_>P*0oM1*u2EN-r8Ee~?UdxT=H zS-{xxrnp#Ul5XNCP)-l}Q0i*W{$k+1)4paUnlYH%EYE{^WGgTLZU~@I>dM4%`TdFj z4ZFRsN!LNQhxl5M!vW$>H+j&ZXtZvEjmYTM407_kUkQ?5Zq`LbGfcX4bPI(5Tt0r- z3hBW_A*;6)Fb$f*xqdo;f@WlaaX=L57_TBb#6{7&5b+}wXq9Myi7OD4J}W%)gtji! z2phbCb;ZoK;*Np(NYh^>%vUq!PGhDPl+Fa2IXD5Ah@D>K0Z@iX2VFCKg zGGHzaUHPrqzSwBv$MV7^jUybs?vuu}VKJt{ramAQU*x= zvxeqGLV$4qry7>Fm3HFzL&tHUerc!oxH)S>3%-GWuGPH1Sk(Wr6pmloYdRJy#Vbhw z?^u=%j{I1t6+U0$I|pTqvpw3yVeQITcKF#`NOeR+p|A3tV|lEEPhOcX*x`WBh5lK7 z2Z>ii=8uWGd|sfEL#rU%_z39&(HH?bkS_hvD69@ih0Nunt0b5UoN{yxcm-W?Wor{U#@E~ z?Vg@(LDL%is4~Blu+PDrR62MNlaVhXwrqYd0`ct|-_UB+3{z{}=*RSS$mKqe zG4%=InJKMEL`cYMnTdvRyI0cfuovZhvC@ro0NSV^X*D0pkVC3-i!p z(o&lw=s*#bt{%>dfJOpv-$l= zAq@HF6n8W@(*iE%2fX~v&! z@~c|LBJ$+;bD1ke?|>(~a!f|cnyl3+=DqBxE3IT`r!CPDiTH}_XA+C*`AG=if%3k0yVi9k*y4o4m zvQnldx1-<=FZMIG8X5>y--mm-fEC%l5%|{z4@!N@)c-xpxJm7|_xN%Z*oF)Ad5yM=C)wM@{dj6*WgX;PMX$RjY2~=VuV@cZ8x8 zg-tq-X^+%JM!X;%by zST?J%c9b`$HFcCTspH*7x}Pwox*BU*X6sH=)YadX9dJ&z)1caH^FcPEaQ+!kj|Q;K zTUM4dnU}aMOJEwI>ITVa#a5y9h*O5)qxF@Pp}Q&IUKTT47Qin9MUi=g@ZF<~+(ULb z1fcN>N%RU?^onIUMAWxkesfj$cKCC*atCH?nBqJlU8-U0z;PqIv|Sm%W3sq)y{aq3 z@rTH7^vebt_QFmEb=uHRndVkkJYmp!U`bEr*(nHK)j9pBsLf5iBf*dvIT=0SOJ?RA z$C%p2qkBuZBQ2=_Hl+u^ZgiNlHT3Bbwu_|`CkgsAER`_X2{(+P@u{^WMILCTGA9F0 zJYC;o3;de%gZTWz8}Ut@L3tVjLAS*!3o~aX_P}|nk3L*~V@tl$ROe~e2HOsbAG7Jm zw@_E9HdH3Re??OHyouXXO=D%BQLfg24DqOTc7XUGtL+(Dyftj` zid%;@FAAsK@hrt-o2>rh%cjd_C)L|+^YPztI7_p-R3e^NE{V_WN>c}k&#=V0KyZE4 zy`{?5j_JxM+nii-bJ)Aje;tGsJFb7|_&ff$lH|Xu!vC;5|EUZUWi%NREBD}2KU=;- zHB8J`{oB3Q;Ir8JKU0Ej#5q%ETEG8nNZeQk{}&6^V7G^a^)FZI|IVXL?07@`_q*x0 zTCjf;WB-6;0<5sf9p4dw*(z(cXyQn`on3Hx^l4aYLDGF#P?a{<_KZW@6evuX*j3PD zINeWE&2G3uycIbFzk=mQ^!I~X!g#)Wj6hz)zC?O|8#`$xo{$|`v@9>Nl3U(jOLoM)cB_spI+b7#((eW+rY zDO<@TSeI0r+-i88_Iu`>6IUa@$wir!SZO=s?)P(B66ehfs9^Z9{r5^XSo8Z{@_woo zS3^j?bZD^4+vK?5nqHhel#dWGTfnzB%CuLj%)ha`2OInx+X??#q<&dtP9RSx-Nv7> zXzTGO#A-_UIayChH8(YmEu;B->erq`Q}nk&q6TkUy-w}ptEjTjmwuR!_=FIh#^-xa zg7@rF$f$|axb%2L{@!DudW0-f>R~m}28@GeMC6ctb7pSMp$GJ7Nc>=;a`UMIRl3CR zTP|nY$I_N9X~mlGU|!4S#Y62k)A1x1@{&!Wi)8O>z*G4A(i3dQ?agQO=Eqz5Sz3g5 zTgG9pp8M&SmiD`vdhcF#?&PB=c)8&{A7PkUqp4ye`Qo#xa*lOL^kuIX{B32K3=NVa zHNrn+2gFw_8lx>-N-?__%i7frawAyFL^+*3m2tpTg5SOs*4s1;R%%c zf`cz=+HM{GS(JAf+hP4Uwqd2@JsUnl8b`li<-zoi`P4ZX91VvQzv;mb`vnF`HfqhV zM~98^O+$)LnxhW-_y;mf;`P_>-tr23!W1$b=egxqyPjb`H>+(;6LwU&V*2$;9Eo0i z+}HSuP#VVVn78n?D}A-SbNFS$8+CUhdNP1-gqt27S~kyWY6xGGsC&@AX3f8`)P8t$ zxz)$%2O;)3^QEDgIa&hTrnlQ_JD1-O3R@>|X87P;ubNyl$@WWZD--_M-%3iRySl|G zlYIY}vh)77FCE8|&$ik(jbgXWC>FhR*|zm?zUwT1&bzjC<#PYWOo2@TiyBufhp=O& z@Ph-KqYKEbT$NHcOCsoHJ7(>@%x$(DcJemPfCX3+PhCc+_ITFDwHQtnwZ{9~Z$;eKw?cT(JVwas`scx6Sb z$|p<{750aoO z1^*F4lbF!VNFm-&EseUv#cDQU?857W%Xk{EC$XwmYmyZWeqgj)ARSPE>o_(D4Mv#I zTZd;4WQITl4=xXwsSRKgLPs_K{kEvK0|uC5q6eAQQhp=@3k+-m2x}d%fzsaz-5h@t z$UrkZKwSE2`4Ik|T1to&b*8YoT)3L9mIK~0e%i9Q5W(P;MjZoZJGzfyKb{2-UfJ4h znyfq+Jdr&*fB(Tw3EdY(a2O9@fe&^+5D*vh#2MbsN^gR2!t*S?fui zxZd)7MUj4Sc*l%>k&Ifx8T&(DNBz%FU+3z1U`o?IeDJqIw1g#DD{QL8e6=;}fn~>` z)vQCWtRywmEC+>?MZMa2CG#6~n(FH8$3s;@jt!o=S(cmF`L(-EJ&F_EY=E0vV%K~W zJI7Eu*7V&v=M&|olI27hrK@;F(4=>?mqw>heH!-&+iZ0hSBTy{7x}BHJCAY14PTf! zm({m8{@nGQ}i@XxNqL{q*zE)C&h7H#J>cNSQG-tx|8J@C> zBEg{ryX4)%50c87Z4W*)D4zHIDN*S%niZ3L^~>C@Xi3?7Npt%(r?`(gE#h($_<@#O zZlSFqCd$3|wyk$RjER*+-CQZU%f7RHtnw&#ura24T!MJsGt5L{_x3@bi77m1o{+~7 zM|U@lb48?DJNVejPpODMie3HogxOEg7!( zROhrb{;1O4c{oYf=!x%jB{K^4d0Fjb6(Q$|9PZ)GxAorxhIIUu8jWIlTkIlkPbRRH zj=0b4^-uWEdQPbk?Gfn3kEu(+A2+`2p(C~nX<1@Yg^lN&`x3Wlz^t#hTbxeD!xmk@ z?$g99X#7;Jn!=HLkltq9Lo-oddRiEZ-7jHHI6t-Po46W&GxUMb#mifI_nC#K?Z~-` z%lu8E)eSn7X$-zUy%#%CBs-HV)tMWB`QVO%C1>|kYnX)N5`jHI5Q8#-Dg1FfLW0dB zs6fSOsibiI?szNoVqfPT;Sq*Ab>02w5HAV$rR=d|_66%Ef~MH$I7XU%l6x*o9Cv$L zwRVK*<;1t~k49Q4^lI~n)izUx=zffa3r|lK_Xo`HVmcR%O8cj6NNYA-3OuK38FW68 z^vO(-!3DOm-BGDqL&3A1F;CzH-;5pKSY}sD&ATn`mE78NnmuVO{rEJ0RKi_ArCK?l zDr|udo_e2kIXC6yNmu>4+|6Feq^%v2(Mq8E7EMY+!RH??wRFC6c}AA+5sHh(zIR)w zpW7DYwkc7TF1)*J<3*cvbs-=PcLn>aY%ap|v+?vQ#l}Rb!XUwLuMAfwytsD8+PVyJ zpDSvtNwS+ffS7ZSIJuLu3iBwu31mz;yu&y(VMn!e_hClG?YN9(i5pyj*o$9-8vB|< zSFSE&J`DXqaFS}^Oq<2FI0WAAWEJY~u@EuQVa(SL%xA{C-Wy!C_T5bc_YDN22g5O5Lt$ z+b>rvu{nw^mhn}3YtXa17P%U$Pv#Gq`v@WhyN%|)1d{~R`NlZAGGyq$?>vSJsrFC~ zQPyj15H5<$d^ddaHR|DNCabvS)9975J<0bYJ!5J@I$>#+1lA2?F+*%&Bt^d2u2@^= zBIZOi%+=4~vG~?_m69(~E5%c(|D)!Rt*1eCZuetA=qDXs+fRHo@@ z!taRnB&bshvqZh5yx#31-wpT9`lqpNhwWE*lWqzHNwO>}=g08o0$gX?I zlKs!m%8O;4xo_)<+9sLdguy(`=1#-JK5cngvpqNUZr{Jsx>(ZdKMySY&Z? zor+jp#k7VvE%&jmHm@uEOQ3SC+bKYe)1Cgg<-zYA+H)Icb*IM^V*c- zFE2aKu8XmAg=mVra|QR{g5|#WV$BT+#{K#B7&9hg8skH+Fx7*;_?z?WwnyJkd{RJ( z2Yb#YOuPQLn7X*WY_8YU(Vt_yLD&}~FkIuuO?+~qnoK%!BYP$ro`Z%WNqt&Y2L!_& zw0qzpTW=~#-<+G*&)1yY9#NTp`%1BM{Z*EfCVd@lecfT6xTlMHaPQG!7YP-km(SP= zG25o?!w-v}KNgvDzAxDJ+7IjANZf+y#;(dQlIuQ zxX~7x?0x>$rpKdQ)4vc?t8Ygz*?UoM{G0qsD|R1`2X75Zi_<3WQYqF^ZSJZQW(8on zWlCkHmb#?=bf~e*KBUwkB^+)fB^;4rey-;IlxmkZJ&}Ky)AdFbTqRP0s)#jVu6~#_ zMK8%Qnm1&?N8gonKG%daIpvKjrJtcX2~pWFf!6^s+nk*dj(3v=`S3{teiuVbDr1Sq zyIOOq4fg?>a|FlZ;wqV|?P@Clx-^cMJ=K&&b&LAs=1&FkI%gU;Gn!@clb=Ru1QE!o5h{sr^Vef+#WF3>Wfl(Es36YU70snM*&v-f5g^Bm3TIQ{`TIRWG7&h68i@n#sx|4^Bzsca_-soxy zP;4&es#%#a*c*_b4@o~)HP$RV_AZSnV>Q>gGGV(YSSRPhPMzt>4yKZCkA&C$!YT%y zoX)j-;X*oB_g5?6ot!KW{J2`g%pH8A6}r?C5D$CpSVt(r54o*{u?BNZ^EssNW_-H% zW)CkI53iljfu*{#L?YE&G~D|5a7bBh=aay`+Xf=##DY9fQP~`!cfmhCFopd+;`NV!{H24*dr;w5B!sNm7;HjBwUKpJuFv@%5aiWf5Dd+%Jvl z@Ok>(Xl_S?a(>38`^$Oqyw&?kFBEg8EWgCEE3PfxV=?@WFSeW)N&Pc|d6`O-MP{%J zOOMT1j}7)#k<0tNB+J0KNZ$cX_E5szVe(22;JqWh=a@3(zVJ#r-?-!?KfUX^srilc z(8g%JexI@CbHCsL)mbxpFQc4ZK#Q}k%Ll2;Vv-@BGZZi89xu>@2bNs<8SnRoKLP80 z3wGD7HJb;3Omyh><)8VBrHUe-%_M)pmku3vXan4)w05z2>Q<~bUy}~Qk;8G$NpzMv z6smxP`1G%}|8BI4fYUMnHz+F(t$P@G&FYcMPO6bhc_R2#ZuE|X*GRY-Cwr?DUB7XI z>RH`w6&*h;?pe=brN^oCelX!#Y^EPs82Lv7}ccbVQ8x4wxmPgy#Ac1(R% zl&x2#nhgZ1-JeFs@Q_A8 zMiJA#u|S07kHad-yLHFGk@~oI<7=L8ruu{G`Wc;Mp{YG3*;wP$U<6%?T1$OSj&oiy zLinzJ0yknwMECkR3(U{X7afJ1O?b@LK*i}g;8YM|y$QFuVDETJ)Di?0(l9V@s z%Ux`%tCCl#NBPg%f_<{Rqfs7fFyES<7F*$nT|;(KJ8RjC{TRh0`-@+nsd|0GB|F5R ze_k6cpX3v5yC-p(Gn7ay$(BC-D1Usl z%-`28w(;p$p?7-W6&$d-F(h#hUJ;X!c~hEcfaXYHCjLqi&R5qazMB}r*^ck9q7=5p z@uWLV5*C(4H%Pub@HjE+8=FxHh>x?Tb2m4H9R0#04DlyZS=yMsj7n`; z#0v+&-2J#Jd1cmbLKn=3?nvKY?=y*T>akF&n zb)|$xfU%ycCFS-vF-?szt+djNr)@>LPtLE2+@?OP@WNhsaMyaH`?k98s?iZ0VSobu zNUu$l1s8@pr`(8T=tqIV6E?+~jv5Dxb}3yE44Isvk?jG)RKK^Zy}RlC)_OXP+6A{( zgmgdd&?^mc^(_bDJ#uB=!R#P~`w2yU#gThQftB~I8#}MP)tU`2fyFy9a*d^wEh}Im zN1U17EJr+~_K^gWbapJXwza^vk+wI4nV4nZp@f0y(Vk?T3*z=!# zB&$VObOW2RUoHdBQQR#uopsmfM87cvi;OV)+jLfydWyF}f0s zR@e$HwpoYBCi9l5ASlW&&FTasx9vNO4i#42)_dA#=5jMUlCK1AcI$TO;|r>54tQ7@ zZ%gs8{Qs+%o<*1)x57WN{HZk=QC=x=hu>)idp8gdFJfJJ+9+(hOtd+AA1~{AWkd| zHiC>W)-IO6G|swkB)4|^LI6?998s``fMG^v6>pN_^bv)~3BBYui=}e@gvoE)nWdSZ zZ%8w^j|t4N9-vP9;Z^tIx&@8NUjMH#861=WuEF(OwaDa&(_Nk8CzuPDXj?F{%@vKX zvTS|`^QC12`}Dy zN3fM*O&{maqSx!7%XFdg+MQ2glZN_U%<|>%6njn_D*;jo6V z@TVwu>1P`xg5kBZpVrMKPGY<^-FP}YH2dFywzEMg1VT+(-LI^zCOAf~1X$LPhDB0} zk$1XrnM!>OoEpAy@b>*bOw36c(|1e^CsT?Onm+jPmeI)1;;Lhft;uNS3Sua{nUXbN zh7Zz(c9u~CHy0LZ_QbVz^fl`%KW?$B&s$xVW~sZ?^5vlCgFFQ;`N4Nne8U$cC(ASq z{CAtzWo|Qa8@w}eVG`0X+=98ZN}K1|c08jS0+lSq%rC=AaGjJcnNaGisZt)|7zODP z23g@>l%_~%2Swv6$xXvyGnXV|e~{iA<$^!!Te@`A`OT;Zk z@-hfLsISZ3f3VUe!Yq6zH)iuA$&(!8^H}_CD??>O*;*LC0OVAGCsSU`6*?7Z3mfCY ze-<`tU&{lZ*w8=R${YX|)IugW?f}@JF=ORS{hgNG1VW4XfaO)Cs`eUX5+%bhpD+mQFxbkOf z3H5&j7s4u&2P7&6=upfKhc zsEOi%?~4I$m>23ElqvzP!5TzfEbnC1tZM5K1fe7 zqzC!F<=;QjQb;C3R_-F`@*J{?EF4>8tfo8UwL!>hXW9NTzuBbV#B+cQ#ZK6(F<*sr z%l{AC=qid$q;L_`Ec>n7dB8Xw4(YChe0^4T`L#c~g+3F?o zy^*2#Tb2YYDF^Vtqb>jkRjsE3rYim|HFU*cfD|D)9j+1;;}?{F0Z^i3PlviZYYxX4 zDNA@p_OIOOSdP+XY&Mu8<#7JUfebGJN_4HgE{AIEnmJUb0w6)fpSq;0fY4YJ3I!a) z0$rdKRJ-^an+yZv+8Gn`f7yK%fFvy07O4{@E&T$ZMM<9yKO}cX+Q#8Gn-r{j@!Qtv zfFEaV{c`@J8wy!O401xzJ^nwPo z)5qwYrGr8L(xH=-36T8@ZQ=BBaA#|>EAo%XC6w~h=Z~CK?(*;t6C2SLMF7fGLA8X; zKB!d%)slV^Dj7PQgbJnT^obQ`6$Ly6hpPY$6btpm}3`!h(N1TnG;;9>lY zu>zu+L`*)?81yaWdG5bG1o>6vrkH>)G1R*{|EHhNp+)YM6M=Fy0Qn^(`}F(SXWe2} zgfeiioE+T_kYnjJej|)SNO$l5^xOy4D0XZMCGY7jixfJ&*?-o=ZryJoA~2yA8dZ_5 zZ0&HWL_j9Cp`qk#Q)B2vv46i1K#pR|cC=@xK>L$Zq!<`y`!-Y0zihX<-xVTNo$1^H zW&INLLb~c1SI-aq%U-Sn=+Ko4)I*g@Hi=9D)$0MqQ-dqV7SxL`gU$5-9-7;W=3~+o)P6Q;8V(8|2dhhY<0Ft@~F-2(p zZoU3b`+%O7G_bLK1OQw@?NIWZ8bgsTMg-9jZ9^_jgB+)DCKnVx{|KQsEy27-0Np7L z3;#jDp%xVkt@xfDv;B_#BSX~$FrrHPcZC=O<7~@zzyR;O0@#onqcX6u^XMCB;aDEF zhxhLdE~woMNW*-H{zY)W#%4eeWjaDB!uQ$v;r4TwXa?gbk46{1MtDFR;Y+n(1|!mmq7?SDEAsdhQ!cF z!fR++At3*6GCo)VZA*iAZGaFg==xch5Q_)lsI6VfS21wuyWO30Lq<;fQq04Cs zA=FAH0EWA#1B!oUjEh6^9ZkUEH_!v?zq2iw`LUmB%S~ zx(~|4)SXj^Nowv28)onMg|7oJ9=`^QrFgQX%U<9B;wmfc_#qS$&}m7?G}nlK)3Ct7VW^C5kw`=jM*a|dF$&OwqR9Xi_-F)DKM;*Zwm<*}oI@hj zF=&Ks6rcq^k3#xn;?Vjw(g6~*8HF(j9*X~MCKDi{)KQ$?My?S+h1XNx*6oP^@7&saTG&D5G?_{8C0s;{H-?sS2f7&r}?$%GB6}-q^;_**RHRR~}UmjaOK@wWd1hTV!B^#9WI- zDwaO{umz56MwJ0Aks#ru8#kSDYva@fZ33WJ9x3M4VlR$qi|YIL>YsK@`sPD5856iTqr~qVZ&~P#0b+=TJ_0fJ9H`gSO7)TXlSV z0Vaf>#}19*5(z_foXF(O=y_ICVhs(D0e(}k6F4dmB@tRs?BlxEqp0|6Ut_dJd)xZa zBhMYnEQld-uwJ9agZFF2T{!pYXUk=3?l(RL+WHXm(B#&L-vu+ccN&9%4ZZP9^Pdd< zh67P5%a@L_Fd@;p06^F2m6%s*F!J#l>B#5U4pZD_Gz$8SdVkwQ%-~XV7amic)960V zz|+^7DW!~-i3XOit26qsx>kmOq%SizJaMt-+nyBGk#uq59wghAMZN4IB|9|~XVqRy z4B8cgN^V>iw{J~cK}#d{GMjN}?%*2HLhK%w;yfc?gF}M`V44^pX{Ai#WSB2 zx=_BeZw+AZiPxamwwzrrfXXdMkP`DvQKOHE9$r18TEWbi{8hr|j<82P>SM&Fw29V!}$(D;~LsLGk|BD_>LwS(1389BP!y|!oCKZMktDAsgsuip&hJ= zZlm0lu*WpUL|ZxZxOy!?SQ6=;8FsoSb`PIyzvA`0i`JaWK=>gnEG!KGRgi{)PK_!O z6aNMRat;Op^52xt2>c(^PA!oKCHt4Fz&Kjy)ZBDXXh8OYw(^1k64cFCesWDSIw$NN zdXlzwKv9xY>kkNUIt9_&DMndg+-S+MA?$axo|9-qKM?+)+#$z>Lgwk40=JS=d-hFU zZ@C3~{vIC)hOhxNGo{&itN=Mm6te{^u?PlnO4K75xM0zK6vOm7Aq_GfQWa?HVAp<< ze#m^O6#%IXatllx40o_@KWhI1nibUr%tOsu4Za#UO8a|)K*Jd;T|iI9rPkYAXXs%s z0}g_@$rSVVuA+K14}_)E zvj9TET#S&G!b>bc@0k;5w6AtlehNC83k<}AyJlzJKV2xDB6Y%QO z=6A=+vwuzr1m98Kk8%U}#WlARPR#hw_(&AvB|Udhz4Xydq!Rl@)79EYnPD|OHS^{5 z6i-r>b}PC{7=A#Z*Gv$F;NF$=(|Ky|#sa!<_epBEf*5<$W=EFs5=Tj*zCqslm*(tE zvP7o!F|nw4Qn1GA8DZ2a3PpWQ;3qkTdPY0Did{mY>OgF1_pEpS%KqhB+O|MSGqsI# zl>_+!{tp>{MP@R}{Usv``2UxTfAy9f1OylgO8CDSi2&$U*H*?G!RDQ!pRCgYhliFH zYFR=Fk5bc$HxXqLfg~{|p(oZ73N{tTNm(_WyMmvbrcS}vN28E4IwqnzRvHu5yAx2Y zP)e3gE)q!|lvh;!6#W#ZK6sD;8@Te4R@0%Xcs{S~?3K>Fca^`N`FcOJ2bta#$Dz0O zAPX%_vjGe{d$2-&ueD5@cMu(Lf#)JWoSo#GG@>6yS9hHpxnb2=h>y)jhvVw0F;*O5 zchOm{FWPs-XLsq!-QDD zVqv;ihbB{sTk|?2xmjmoT7%@<)Tz%jTX%ysj1Hi-)r}>M*87jp8Eaz`mvv2C=u#;! zyZy0Pg*g4KeBPVZ>eHR5^>`2P=V2<`QkyMz&gmh3W;sEwW6v>J_Tu_TZZ$+DRGbLgLfpr0tU`0ZB6t4-v^XtrW>(cGz!Y zpR=&(W@~GdZ$pdL@^ zraVh%h%o}@fHs1lc4W`^3h~4Is|wwMZym?rnUyZ>%4HN*?N#X9M_T6)%*HX8(DNam z6y>WKpzGdVUMJ&@ADOY^NJJO8I2wTHLTGJ29K3)&MpsmFjjhUQse)FQj@Bf~6luM{ zbyE8zFlj~hv4~_!KJq z17@zTcx09svHsH=NAyEL7k*{>eP)NY`8eHv7D)8$taDWWTz%dp-ewYjBhLN`&CidJ zPa|&@WgKQHq6?&hH0V-*2t}B~uCf^R^dVab8C4z^=*2a0Q#50LF$Y|rrg?_HTu2s@ zSvGBqe9p{z5!y0S#5@(v5iG?N83sSb7R@0qaRbH7HTdIM5P~0TissOlawTzQf**q< z_YEXcq1mXxaecv21@GDff`2J}vg!>&vu_6I|IuJGP(j9t_DLo|*<{AsUx>q~bux?0 z)7?F@lrey`JmQdb@a-4&@Ta?^J+}AHo?)(`f}aVte$;h3^k@=JpL_4H{XxC1Ny-QZa=X^K5`l44s9>8XIcUEwy@2C>;q`1ZM7aW}JpDVkiZ39jM_=FmS$j);&o-E$KtM21{%ll}$^_q|mtSz(>)(LhPU51il$f3V6*x{;&A$Wn& zc8o!>%I?;-MpLJy$zrSYkCSCK5unG29ehAxF{uEf>Ac@}^c-W#q_U;2+Vv_Uzn2^P znO!z+SFL%q9EwgBGR4$Vt`J*-WYQwtHMJApcB=XNt|xiEYSGUPa`s>~)PnrC7G*O7 z@&OHbDfk7%Z>O2IiV5o_=ApCr;aI9#$(ZTbk&0QPZe+W3GQ%u>#g>k*UUk z{2Askon3U{Q~4(8#~Tlb63O$IzgPz=uv0Qu_q(v1Ow+hB?iDKT2vsfTq+$q?d2jTL%JJqB3U_Q2a?6NY0d@j^Bp=Ic4(DqXEwe^+U?I@3&7Rb0 zQpmJ6)++bR5oy{4>eyv1U!{K^@frx@V>mE|c+xUOKN;lvqfMOfu>*28_vKvvpt#u1 zird3Gc04fNy(avqjBmxM1_is<&mY{{pIoOj@&9bU`lf^hUZ9AB4J$v-fxHTAo0m-+ zjG**C9EG1_m&rxh3q`=Uw(ol3-;;eu-*TY7K*tI5s4Y_ydy;eGx`pw@t*@%EA8b5+ z7-L5s<>)|M$CtN%Fjq2vSjHmdmQEq1@*RBNFTKw5jo1@{g$uvTgBEM1q@--?5;o|) zFRP-xJRP8fS)wzAfBAQ}GnHqpRr|NV41)N-Ne=wvk^olTApysP1X8cEK%oG|O4`!6 zf@q)QnI^!tMT_5T-ChxiA`UbUvg=A!fiBu`$Pn9R?i7yw95jucLVhU*$xr$GdHhmd z^XHM+ycJbeKSj??nnG6w?<$>X(r#%6>KV?D|wm@!F_)kiiYXucFN z8ky6XJfO7T8Y?|AU{SWAJ`~dseX?na-=o@c&nbZsYD_E}(eJh75h58y=Va{>gFSfWJz@511?9hZ@yiE?UuYW|N!@Py2c*01b_xJ{`H^Ip69j5? zXZazlp{;N5VS zz4VdF;{y&7t5v9R#!+%c*~(odLsSb=^ix0zY#LB5 z%HJXX5ihyTho8luARv3GbMBz{|IVR)HYgNujTaVRqm5A}K(qDJz;?nE`MLl_n8k8K z4M>)D!?uaw;MC5z3*&}-~@Og@RA@o6-sZyzW5d%(VIrlJcw_mm9=JtZL zg>rM6I1h8Dg#MezKTTu4wy&Y1iNROgs@c4>EWx z!|?!Ia}B%hero6%k5&cS_Ayv_2UraM)Do(>OOa1uYj0jpP!Hj7Aoh$9$nJN$Pa!uYb6nA{~46>(KDxzqFJi@w@!;)6# zxl0Uu^*DA#R(T%y^(c(rNu)wygPX=~XxJx0AWSZ!Lqv}n)g~28K6TI$f!iiY_0bDM zZnw)e&`qK$)5w+f8;r_RJub?y2;iqOACO-Yd_bK9FD)J}OBZ$Glth|kcs4u!yD|*G zPOCc?mGt;&qEPXExi}Hc6N3FwsFTeJus96-oQg6$S8I2~a{)`L5 z;=}nNxlTwhPD=WLol)i)TGBpVDD*01Z4#<(jiSivy3Z}a%wqD2c;E(y3i*2_Akf&>V)lILk`KWW%+5%N#IbnqAWbQiELNm2DgAw1UM`#E5*QQ)ZpGq zC!NCE;4VI&EBX!PeFyPI9NVmNSb)D_>}rx{=3??<^7Hj$pTZwgqq-nC1ZTXBKR}el z%7oA1c6JCw_%x}~EH|G3?^gNhI9$AV2%{=1S@dbbfE&32P~{SAI7n-l|nA>j9( zupb_5-cSs0V)O~+rUDEuoGO!`nChW{lM!2gyC_z(I2Qz{M& zs*lM3ODecI$9;nITSb)v>|KjcaE;YX!Xz*D62eA20DFC+L&E42^f_J{eawimJmxDs z%Cf&}zNWm4;R)Ab8ErO+sD;VMZjTeD>MdP5FK9~u^GdcRe1dn~rx6y~F_D62Q z6IZ2qV(GZ2n|lp{K4sJW&?=X0&#S~bBXP!H=C=j}1564V-9VSxMe-Lop`2@W&~EUD zX3Rw}ICkbZMQaT76-}WuOtu*$)7W8`f7Hm$_jM;c!<$KBFot=`0L_5O2I_}6|IDM{ zn#_9HU#ZyrS1Lf|{xxm?@e&9CVwN_h%Jxn!vi2sX|1n#OG`3q1`CD)oP++_S%&6VgjIc@{!CTsgY2?Ql@*jzxV)O>u(b@{&3N# z@F;lXSTIE)aIT`uYw^F@eh8};X4C0xX4Ni=!QdVDvAsqRG%pwD1Ej5W3k!zfvbIEH zSjKCLUOVDBSxt=DkWXxrV0gISgt^?s)am$7FdM^sypne$cFa~&49RR6hDVQwm{#Pu z3MaG{tFxACh_6}WqJQ1teri6T0liyyzM%NWwXMr@a1MFv6Xr1N)M`A#e~s04X}^5~ z0%lG91;PrW+B#Nt$-09GUVRYSa~&>Fp5piXwW(6Sy`YlCJcl?!RcUpr6<#|BF_K!(X)6AEN#k z^L0u(&^mNmP1L2ZVHqDxIH6x)X3v>cpQ+JXsV6*Vh>IEg0sG?VfNDMHh3a(hFsEB& zF6^SvGw2G+NX50o;P^;(Zf*JXK&XQKW7hDTIEVge#eG&d_xcC&F=`8_At4n4XY!r$ z4oD&Ge|)SZ*Mk7CzhM3P7p%Wk^Ixz~0RKfPO++7+#pKVcF7|tJU@G`Gu;7~+3CFv* z0Dq$I$V1?+Rw(gE3`)&FlOH4l@RKq~DgtyZ%`IxxHG$gF#_MGkxE0@jU=?)k)u?W0 zRi3Zet#7VfwQO$YcD|i|S}k6;8<~{Z~p25}o1e~lQgGk@n z6VMKmggES;Ln3(P?ILsf4E*vB5a(sMkp>L6dUy=W2nYl^VLci^=A>Hx99`WW-L?PTWwDbKkP82v?cYg)A>T6O zCH&3o2hR7QOp-nk;v|NfXPtIhJeU~Nwsp1Es*WDAIyC`s@W>3~IT0o-*&0N#S7DrL zh=6aR&YF3y$vQ{}hP+K@4awQn=LZ?W0`{8S`MSU6+Qoh?qQ!;+X#n6X`iEY2tTc*b z)w>pD-2iKM${zX^{9P$a>naMYzm-kcVRv^K#alm2K$I5y<=NHtMck7(G4fZ-mh8t| zjtK`wOmOFZ-wXX$hDQ}el0a6 z?5hK@3=vJ?oCXtR1c1sy>->8kz94{9LT-OX0s+S9Ok$WyXvZg4bSW2J{JnZt#K|+y zX%F^0P~o6D|KzBLG=>PBDty?^=6gtW$e>XGHuks7x4_%j*{4s1CW)pcGm?;+rdjJFW1@yMa1eZ6ZtYwzz zlkU1w$?{S)3HLQPjI54s-(x|nNu9a0wnJutTD=q9en231e`aBy2_TD>Z?UPS{#FLI zCe1=5$~Bfu8D+w@6{3Lqj^nCpDQ86uP{4n7Ov01Sk0%?tH)k-oO(5NZ%67m2AP!^g z^Kh^ZchRh(224*z`V@5>sGhE;<)=Zw=kU%Hh`8kpQF%(F^PP~K3Sg)5NJ>d?9Hr7s zfLX$nqi1e8Jv_u{wnW*%Jg${Fh=%u@5GpoC)Ta&zZ&w5=Z5Iumb??4-&>k>3OEID7 z#Ov!Qv$>ykLJ-Ey3M7st#E!?*`hccHOeIsbIs0yj0KgB&IVooogL)%O+J)}R)UM#N z`p%fv+fm%cZ$##CSsX-klax)!%eXQ zsnd6)*}@W6(G70Xn>k5Z@Q{smE8+k}aWNTtA{MwLDxt;bh?sxwa(8VisY2&bw4Bb_ z8m6`k0PSdPZ2ZSr!XKO}>4|Wbr;aq-zR|`d#`5A-{9C9ENiBX9b7^52wa)zd8OI}tBqI5gu+XaU@L=??@UzOQW1DA zjgqdccQT)-7p>8Bsx0Kr zV*A6Qf8;lgUc~qs81XbaUE~BMUnag716WSg_Db3?i2J<*Aa*j&N8S1;GM8Iu zyqxQsqeeoLgG;$6p_(HL-8Y@k3D0h!o|zv83qFy{->`qrl5u~4Y`>A;ejLSAC<7QO zW5-f6z$keTs?VVxh^z(q!#!1JgxBLFRSRcBckx236_l`bc|yD?zsv$Q9-5K~MGd_# zr5%>w7b)EyJMM!Ur5Ct5U8)=B$`>&`qq;h_xPL5pM4jofZWS0a;CsOE$yp!7cJPN1 zf5-jZU3c{MP~TUtyhZ%M{5Z5_R14tq&t3M2LcgVq?8JdXi`wI#Di}VO;$1vhI*Va? zW=y)t%W3##t#tC}0Y?}za$e33W#|ESE?eC*sJ+JuRaY}vp4{F|Ho`C#FwIn|r^eu? zTuG-puBhMf@I$7y4~P?#mfX(wqndS0TW3bPuLp&Z!>w%N{0>K{VEF-qa0qbVwcKM= zGb5`hhOfLjoLrnDouh53N(#yERbdw1vxLs2_k%-F107jHPsozqcU#0nM^4AZkgi4; zs-qsETO$sd%>dKO0qXinBplrg6|x>%z7TN$T6s+^O9;)LD0JHZ*Kg+T9%}Fw^i>qp z4H`%`5tVI(;1(gjL#`O4JqRGaK#yrt)rnmnlzqrY++XADvKH(Ds0n3bXP4>&{yOqSmqjyNkvInIUJ zoX}RQ8ng)+%@1pEJvNE&Q-j!%AFE_cwW}w~c+E;1*h-k(7e_(cnvWH@R9O4pRW(?n zsS4A$1}jsStEyO>j-n6hn3XoA({jeeT=CT)PYv!yW%wx4tZ4xqdw5*r=)>mO@auaW z!+}iC3?*X^#6QiY>8&pgn4(Y1e;dhuB@W(gGLxp5l^akOjw&-JxRl}Di6;xQBn#&h z$N3Mi{CUQrkvFE!>7x}p@VQdiJV^T9nil9Tiv20C(g>y>{XE3vLrFg@ZiK!~Tua(>vC*fz)(-ZQ z39)QLa1~LzJ&3}?pCXnC1?mP}%si=sFZQQKdysj@)HptXM{)9~A-jF$uWNlH&h1WH zXi7^z)t^0$ZySA)Cgh!&&3(iSv^~fGOE&7s=1vJuce`p6L0fGXHuG0!Y!~?Xic}0) zQqh)6Y;0LkXGbyo0fEZixc}M3s4`YJRj^YRlY8-NT0Q~cqBuPuTYn3y6I*>+at3F1 zT~k^`AnFTH{4^QKk&ZpfJPg)hgT@?|HIv^Z%{{#fZRYB7TCVBsd8s&Q=aSrxb)YJ2 zN?%o-&Pq^9Tw;ZT+@z1V=g`E6f&v(_fV5&o|xt?pRD zX(}(QW66Z250W%FV%FM~Jo@A1vjX87%hiWdrmh^o5T+3u@DmR$s-0zmXR_e_C#gfG z2BmtWR-hTtxBj?ATKnb5;*)(=DFw1Y3eD)0`^EZ*kXs}8@MI4eok$ANsKDn^%MS8A z;s8?H&Xjzr{NsX2Y@f%Zn-ZdWFm`I@ToWv|GPc{Iz(O$0y(ro@$qYZ%s8`vxbaRCG zPmF0m)i<>vbm@M(yXF)3($nXn)901EZX~-vH+VP$tTd|IM)j1`ZWQ!lhtehZjq$j_ z--HalTUB@tXjYaE8aHiIR=W82HXd0yvmMl5ajiAzsGZ8PuBG>;?ynI~YrSX!YBbhC zWgCzQn>kYwhNr2T8cgAd{4hC=O*%oAA`^=MN)+9jNNa}FOA%lj0gVVdTR4MuEbc5x z3qu9*3UP~3=gRaF_4JY@Hvz^62c_NMz7b{)3cI1k#c2J=5gTJU>)d^I zTee;oeM~kfYIsPt_6lW5opVNy>J*|m)kRiIePcjbLtSGw)kOa^hLHgtw~e0-3<@^@ zqjl!ainpEn;~?h&NQK7QZ_LX7hR2rV)tJvBEA&_HrJTuU8gRq8rxB>)-v0!fFzq)f zcLo1`)ausbRl0sS(>n&?s_6F8)t*wM#S-=Oj(J#|ENm0l`i(F^LF5!IiTCE%lcfqH zl-D#@#u>x4WWfSCvb6;$MMakRLNbec@7$gUjVRN+8jj`L-!G9+>Q2{~*D zW-D2o)S72DuPx+hMo>;i;62ZC6=NuG>8@rsq+PCKDZ7C1f1(h=}8Afz4O6y1-9 zk$vg^b79!Mu>kh*+Z(YuXXKi2LySV>B5bb{c~n=4*?H38 zLDf{t29xT6?l=nl$^C{Mlxhb6>Ur(@KnCe-RaK3?eCaGr{9uLc9)@bpzLK15>cAbe z_juW2(Mxya2RULvn^^0S9Anb$Qj7m7!X68G)UpDJpG2`|V!DJCk$%`yM;^)HQ?TJ5)*3SHI0I zzssgKM_jX?P84jiP@Wl62qjCMy!Y&qQ3jJqh!iGO1#b%<#4JU6Dvk#wM9&BHUa5uK zi+L=;pY>|=KV4^$*2cqtOo7UN@|Dfl!p43vbI;}ycZB|`rNa=vN`mVobcR3vW3ao< z7G;hnH{3cJdkhNKH+g-A)V6fIIJO2E(ce}fw7k%SzCid|r0G*fox*}_EAV>7M#eKP zMDX>mQfY4(#4z*y0^R{Ge~wdj6x9bhKKcJKE>;ACmgNvZKwyx6{6C(*f}S|o-xMEE z0q$q2LlGzD0Hk zWT?Zt9WdUWFYR-;KR2K3b9dvQdfy@QpmJ6Ff6*Xk33Ejo8)n7j;bSJXwL#SGu|B>k z0l;eq6pgeZq6ede)Q!}PRoY`1O<7KAwvgxNZ{irghw4|9E$@rBY zocxwDr@8-BE_v{!I>JHBpH!Q{L1GJhTouj1XwrCFC^+1hHYy#b)f5+RxNet0{ zkIp$zsjiX(D>VK_y(iT5!JQw$%!0S&NHbDJs z1CXxWg=coY!_s)zz-}15Ov>RRvT>_|4x!2Vnfr?2K@H9(A9VRODi@j3WtV=tWguD$ea-G&nkBD7&q?UH?u z_S7l#mL4c^c;~zns9l6V^HXEGaF%W{Ln>k2y>`a+?reUIJT*e5#fQ2NLpA4i#7Xg% zlr2>#QBmYVhbq@m-m?O;f}s0CA*X<&f=_#-zyt9bj+AYmE|Qcld=Ekg4zTZqHsC=u z{`0_4O{V(~LnN-%A&JkVy^uay?vAotTDwHu{1{(kFoq87#V&2yiL@BSu#C%Apovy`Ft6~;*W z`+dV~63}#D(Z=NTJ%au-t?3@B`c9;qnnU1%vQTw+n#nD>zB4)utzSj_djLsRSojQB zJ>;TJhWZ|dS9`{fb!ip(1GYifZ_mhGlH{}MTQDN!xgr3~UMSFR8~|fXORj<=Vdy+! z)f|6*@lrp?zQXk?BD58put-o_cXjtEy^t*wKulvtd{p}!{&FeQs$I-9>vu%CW*nQN zlyz_Tg2>e}r&7brM1mI5nvCc=V*Gi~#UV}%rDJjvL5|NNz1GlS)D_VDG1TvPxBJs99i^qtR6Oug<= z+N1A)JuM=0ou$(tUUq1TdPMI9AYxs;L9^|E$PTtG7(H^&*r87B@0jy?fZ?TYBhsCKFweEDv;l^>+H`NL3Gn98jJhZPz`t4 zoJ*@Ao3&QuDIf>dxweFxWfPO>*;=dgw9)Y1zvMB4k75c#7MH~~CS;Or3fFj7za7Qo z@uI2kb@dchZB{N!Lzo-i4E?gn1pm?{S~}(lKU^E}dP8qhjZx(m;aZ3lw=u=@cRefa ziiWI)!2;y?6n{h`PU$DaKbjpM*KcL=_lOo0?yqF0{@!HC{%(4fiTtg#A3V&K3@Nl`E{GzBEyGx0-BM;U~V!V;-}cHI!y z?x1QEvjYH77U!E`-y8m%7Jp|4C0!>v}F^7+c;Uj5DZrGMP#>VJVSL_Ug*rpXw= z5|T5-|8hamZ5tbsLH&F9#s5hep$XX7-7}`Y)0w0?Ir7pItPNywr*WwNHADf60W6Aw zO+lljsO$eBJGE^xddU7HrKssnGUE7<{TMUKD!lHD-+6%hnbWi5U4jnYqP-LZ70b6T zw(hk>vtF`$fMpaS3fnYJ28Y%3o>Fgp5-YehG+Qctu+WLsp5JXd)zRr@kP5)F9(V1Y z-H|+z0&G3BJpOQU<%a%#-(%OAf7lsXIODy`6Hovh(U)BQekYS)c(Ikf!*+oqXQH?i zF*&y@7NqfWU5RCAnPbgM}02w#wQ+TFTR%{uRlp z!F>)fK;gkMSCLPX?;ahUPr|Gc$D*_fi=CpMePPq|9a_XW;of$71vy4$M>#O}`MsgX zGz4wX4Q!JGwAz{8Nxb9J%Qjisn|rZJZCIw136W|5m)X4n3Bl|F{slk*E!1!#+GDxd zzzOktd<=RfzaSUD2B}hI6tnyKHC?#JbX76Br}r(l+ynQztj&M9O!57|8D0M-`)B(L zY*GujvM9Tk%7asa7@}}j93PV}&uFGdQ%}DU;kGt>~R(4u58Kva-biTQkWp!%xjKDRCC(~#MU_G43f&ax)|R@1*t;v90`SD+#+ zPH!cqEnINTH>e79{ymikgj?hSyU4eptY}@hXlSx#sg81rv>=0f{)<0sx80dGhVS_(LDDH8_-ATRyd|5Y$^d?IX_1S$;{h zRm{7?>!qZSW6Toptm*8`L?<~P6;egC;l^ z&WX>0lbqqmbKxih?Ypo4kMQ7LP>aa@4Id-I{By|r1BhoM3{bUJM^#7L6c%zqg~Afc z@2OA>;-M8eM~w&o5iBSA0cO#(DA(^F1eDB@DQkK%-M(JpyWEfJ%^P0atC(0?{Ha?> z_=fr_+~IZQiYC|t8nx=3>utX6J;Q7M^47cU2ju|5AF?wNWq2|Q;m8#3lNPuDFP65) ztTTCsjfstL2M9+ZA25t{h8O41Gdel4V8k<}bg*K6U_j%fV;sb$cRpjlGp2MtVy@v_&L0|gcA}ZBVUxwA(coW!%96YToih&5&*_Ab0@RPi^VHpnqo!?arX5ZhN_1mSrGx5a=B8%z$Bf^k;vz!kopKG5-cc?OsvaBxkm@$8WmQk5t(zKa^d^C(W+r*CopV1nQW~schqFiAGumf zxy$rqwU%rz!GQ;~S!UV^3EflEAhs&Qylh611IT_9r8l-*so{BzEe}Jjsd*bGUoQME zS&S9EJsF?CTfkpSvF4btOB%XQX`QMciGGpXx0aR*oJU=XM5nNaPv@cgE*+%nLxw$b zYd<21ZNHBXbK6`+ZVZ1dB{WVr$)cHv$NP%aT31IJ0BEnx6YMjwOwlGym!o;#cxI_QE?aMh;9{qTNN{= zt%0|9ns-p&!^CNuVuKYsladpW*RG|wBmhB*SW$EF1`gGWf(a zbn%?w1e2NT`EH+*`kh$BvMkc}Ef)vw@OPh|`Et&W@5RX7q+U(-gopbeA2ik%>wrON z@E<%EyU2*0ygX-yabb>#ah_>6b;|>Mh(LlTZ;qYaAL1-`uOi=LQ4t0DVfqbUjpLVs zXiS-}5gBoWa7b7vgsmuuzF^deJ|Z*TZa!qB`pb?7ynl#nI*exm{Fip->dvm)g4W({ z?*Fi2VKNUvv#i0SaQ?o*D4=j(kq5NjA%}83*{Fg=L2qdpBK0S6%qR9C$whIR2P>w) zx6M&C+@ji@yu%4@2<_3dv=-^%CAp)luB>=D0;PP{KnqhqvBZzOgm zl9)m&AK-k2lhRYe&MA!vw~=61oZu~<)O~5RT4@b;Z6$(JJjN{03lG&ILIV)tfC-fe zRUua3QbM)Pk(w|o=b|_j#%Ct^cW9o_3E8U#o-GL3qk47r{|=w!4&Evc{;ew{9%851 ze`c4j9b%`vRDLPs4&5!DuxK89h1MZmu52uHjqa7JRLe*6;8(m$AnKz!s~0X6a1k*C#j%5q!;)~ z{bb!rwCSZ1@S$+hPT*?MZ}w_Cv<+;1**H#iu)4UzfZiL8o; zX~Hob^manN{!Q{>8gKfB|1A+4{^nHwxwrJ+aaAA#6KCp82`G3fQV}R5P{t7!eBtj+ zJ)omG?|;5zJHi8+HQ;=-7d^iSPuHHc+8yz@rw0&Xm9q9;0uqzVz$yA-foMUO!5ljr z0c;Jvwlt%O2{jTMwsgjIDMHekZ`R^1d}7kP1g8cxQe|+#)nqidHs{9YuUkuQ*6d>I z&4tBOt6$vDQYp5pJPn3doZFth$KId4g*^9n=D8pa5fuP9LyFkUmjR@29D1R}FC>_SSVItZA7}VUB zn^K~xUofk$bu4kT{kgj{#ebqB#7*gFsv3o|n;fKGM~ePbF=U~f8CvpDgb}88=EjFm z$Y!PVDbEA&T5m9kY=-qiXJcog1oRmkD<5(jXX(~+*&M~(9FD!mSH6;E{1nY{kdH<} z{^(2Jv-c>>WO&H6WykkzXS{Hu0%{F9<^n`qCKb!BxKO&OaK_r|J&JgfBjsF%=Ittl zH0^CjkzJXot~B*+X4LGN2xOy0yf#&68Rt8)kF5aDrYLqclczEpXwoB)dve~y2`+_p zwCNHwzun1{NfJn6x#J^;QBEaXycp+!5hH~>0_4_a%&Yv2d_cvqIYn`i^)*%=#(3-q zQV$LSY(kuAQb<#2o?%=i)P(NxgFK*|a)-q0u*U(8V!nLr6IX%h>5>NVk)1j;TUD=G z-w8khA>lN!Mx+09Ec!b~`3G@=kg2*815PhnM&#H^F3ZLomZ+t#EpfE0MCU>TcTJg> z>wpe-PMlnUSo{`x`Z0r=f;c+8&M1te`unf!$41{e_6(!JHaV+M5}~>L{Ev2nHD!_X z$7551AsUS5j=4VEj>7$(O<|JQ%w8u`VMBn68|l8Ic;oTvk!Q+LgbvMRo3EaVEK61@ z+_bc@HR;dcr_kk5D>siY$WxM|3ZO&!X~^^{vqSK(g)Sg|E)kD|iCODibesuCHqMK) z5B!vrgXtb}e+--=<*PI$mQ zYI|8ie+4J5yNS^)5yhgE0^6-AT|BBR1Adrt?EYA)TX+TRlZVQ>*~oOa|F`lh8W6>PspDEgC^xhClm&~&j?!=578B*j%_U@rtwikVRfA1zVH`L?W*U!Ze;09qe zIO5l^-=gE{5AmJJ+7OjRF*CA!OzpW6x=jPk<_L~d7SYs~<4kLMoVO+(!6K|S2<{?>Fcww|Et zwHI^6R--3R+^@j47{Jgo7V{L(i|@NY2B2|wXWQ1q0T@FF+vqOgeBXr10{n29RSdAh zy-q4dS;l>b{xaO>PiVU3`2B05!F#ch;OEUe_2er(GbN2PA7@XXeY1X`faIprI)(Yyrx} zc1UvB>{s@9x|`jE#?DdBqz#ZhPECcR(?oSo$6!-1o-|>E=m!mAB>=)Q3mm^m#25RD zv3UI8uS`5Z3b>AqXIRO-FlBjXP`YtA1s-uE~Pw0+)S&Nd zdi~D_;%l`p4A$~7Cd1H3ySpaT8%O*Z1N-fmPA>(nr&0Z5yElN2hoSTN-Flg|?~PU= zP+4^+#=Fa~F@KDCm@@D(y4eqJM%4Sa0nnQX%XzwQhIlyeKip@bOR#%5-q$ zR#`ip#?xj!+q!^KgX73}Eh_HHNC~3~oRExD%P)0_zSG5(@aH><-hTSeY1X1Tl5iT3 zST0AhH>Dcgp`NH*2vrDPrlMEpnRo6Kr<9-2E$YH%fkpmj!$5@?W$1@oksC#7dv7x{+VKDrJ0lvw=1uy-P~q<@q`27Wp97FPJ4*n1#s5Hapwv zO`_jY%54<_emS{81sqDba}3%$`qP@mTmP}xBbwXQ?IQm1^-j!{r0`UtT-QK(ZdCzq zT7SZk!r}*jge-1(BR7m77c=H>O>sIO@MKN#=DD-d32e1ueL8JM=`f=aT@O`ViFLIo zyt&l6VZvIn+J^-aOnBbsT~Cog)83=?H4&GLS2|!R>W3hJHw|G#6%l803bW1BM!~&n zRhZYzqr_h^js1e_4B#|kDC1$|7r>BX4 z4X5i$(y8G`^PXi%Q0G8XF7g_SG~Sqp5Te8#qC^m@W)08RkRykl&L2b-kh=yeC5;##e#mPtGiDv|S4h|?t8W7Q^Ox_c_5 zEf9%Sa5-V^35n-ly&&BCPLAWietuI)@`X9RLUqk~s`7)3Dy^&PZFnV3;kUHO?vMN& zPo}7^Sa+6;Szdf<;t5@ZeKsJBfJ2ijykaVRBB-(<=c%FM?263n4{OxG-QbGA;XMV& zrZcVT{0XI{zxZENy=6=v(H8Dq3Y6mR?(XizDg1GFcXwxScXxMpcXyW-cXy{ycze!C z?tO2vXJxWK%!kP&JI}1=`7NuOojlzm#wF$LgLWvfq$4HuQB=DFxA>N7_Q96ui*4Z@ z?g?#F>8)d}_HS-;1*ppP1id1eA0@FJyyi6aC0V`Zs(Y$eozc9$h%#;2-dlr1ZGp(1 zl<_A%4+}a6UYuLe+s7ABw_x7i36FAL%-E;y8d4PikjK+X=`x1G`8m>N~N)5Z+i-T{}>uY-lY z4{Bb>Tas8OB)O(KOa${#pdj;(9lmB&DLi{YH~ujnM15oelBI0@@wX-p66QZriO1N# zT6f%l?kuHTV@7{>w?g;MsI8mT!4NtQRog#kDKI`bnJ>UB z*_p`$+S!#*^DWoepTMmd&PT^-7{?OIw%=tOnmKKl$ujiIBNWt|tvHr<8~4%4sV^6k z*v@uW7MAgQSLDv-;&YdU=UbxHvCMt}-n<7uSs>_f9SiiWA4nE-W3{&Cs9qi>4X9k<~{BitM# z^N-%Coevmp-(*feX59t8szFa$6oqunYIcCB{*SoBoYeSriTvz z(;+Y>(}Y03t1OVNbEoT7H0g!Ce)d1|-0mgJ8Zhm6t`{E_nDMv3PPGUYgTK3uTWK#%NGFK%6W&3~C`#;`hk znvqo0&%eVt3f$&|2ZFDtx3SNLq@UIwB*v>3MtBFi{!Or1`f=UmiMPNRfoTco;Rsa= zI(SZlBJF2oBlm#tv?7?h4xZfo+d5Y2v^^7WeP`%=IGIRQshB1@XC`)7>d}nu9o)4R zF<+eMjh#5ZpOzJ?R%+)j0=X>@#-CF77N{ciC~Fvq1crhMjZCIM86;Go8HR$=f>hki zjoyO3(O$i?K5d8C3;w}1aUBN8Nt=9D`wkj)iF{8S!XT!jhYV-=cg3Xy43W@7LTgD2 z89H1y5l6m?>dvZRdcVP*oI5!KKa*)F3!8<*@MsTl7Nj58$+vv^l`1TSd}^s)TF?ti zl^^?Cvy~?)6$FY^VcH|CbA$9@S;gV?r)%d-FAN`jkZr7aU$PT1ixm<^74f&-@wwNO zn~%vDKV~J?Kep}E&7EH>x3JxldHJPv%LQG)Vtuf_q5*MGfnI)}|7{E?ZJ=YO!GHO3 zM)*I~_dh_(|0C~G%L~E&={q%OXXRz=k1gW_59|;!5YvwzSj6UIqJxI?IA5WmCE1|k z$%cXoKnbbF_AIPZT|#w_>XnDTau!vKa9bd)wDyIon^4NiVHkd`Ew8j_wzgPSwz%4D z7H@xUWs)Z{gB5VMKlfhuK7YJ99?!d7wB|US6dEncB;kMHm@R|eSRoS>4 zQpB@2#10AS6M{nE25x-NpU0vN&;{e9pC@+T@Y?hc?ibkGgF^ASNS<9M9{eu&sN4t= zU=g`*>cAz?xt#UX<~Z}H?K!QVY#vo0y!(41F!=WnpHyhl+8HpG{(@`z*jEakUBj5O z_v=eOpMJBqn%d%syfv{&K1O}z9HwN%`o)$i^Y^Q24s2SS1xzsgRCEgAXVVI z*Ew^)pUuTLP_T@B_*+MlWaTf(D8jQR z$dxw|-`AEnSD<@aZa<4?-T#s$)4N>0Mv%cjz{BX3wkUGay^w5EXS(M*spu*RsdtJB z4Gy;tKY#Ttl4fSVDJ%t9x3GAkmb2coNpw%035Hp238lI$y-pmpEu|RyCXwNZkJ#xD zA15)owT>3GoL&VVt(08cL7BRnLa*qroT7m7y4<{2Lm;WtE{Kn^RNs=I!gI`-0z4WD zZ3^q~D47|^lZaGqP-La*z)t!otATWZEG-(@U8|YaY}IYgOH2~h$&|q0u}XaZ<1_Ee z%8UK$k!}&Dp%XlRrwmJ4Tj8B=m}dq>_M@`J#maz`9nXEJt@2fU>7pB1hV`cydx~oY z%?0a&E}*fBXXxw}`A2NP?{o%v zZJ*`~H5^aE_#@(I0*n@GMAv5tVWCfSO}S#&XmhuG1fWv8Y!s3~JM0@KLw_-Yb`%1X@5w;y zO&P4huI!#kRm`DjsyqIRap2hpTCiL&~7hA_ck2?33L2GgJP0E=tn)2Qq} zB`GTBn*5J4)mHor?|53;FOURIyQwe9pjcKK&hfof5Z3G(g`AF-lZcOv%sI_$a3v3) z4KVG};JnLOAScMdbEAbhAWRO^@wt&0!|qxRjn2C z+YO#7bsD>>X8Vm-{59fBA?)g|2V~?Z2M|GQXj5=e&7t%>M90k%`0FikVpZyPzcP;; z10j^8VX;6i!t)?pNtnUlBu-d*QW4qMco%^{j_HZTjd8T{kE*$yoej&UQx~2N{I*Pd(ET~@(-e(Jx;~uunV4H zhl#l$t|ydA-+z}t2UO)#+D2&q=I1;#BFn^z1+2WLsw|b8tIU`0$)XFPt5vqC50le$ zs614LRkTSByU^gMFtIyPt@_Dn3Wb=j+w^OTwtk|_ z4m&!OF$Rp=NQDUZyR}y1i4l9s){YHKfn*57HF;d&ExtoV8#DbRo(AM-OC+$ar^j^$ z?0$HAGnCqc`NGsewmFlGdadV|MhtHOIf{272jThLS1j6jVP@6pkfv$v*${9@b-!}$ z={~#}f+-PfW?khxJY2ZnHWh<$Eniwl0yy#{nZK+!fm-6Lyobzs{JA1=Wa_Z#N==cp zM4Pb-I;L1t%1Bg^8{ma5(Wp`l4;89}eQEEaNL02YW8Z z2>l+U6v-a1?BACUHv1E~`8?DHq{Jw~gOXG77V8wXzoSo%wZSyj;gOe>=vcyK9t_mX zG}Suj+YS`lq)6WzWLmC$|B1_;6yzch5S@}pn}?NQmbwYQu48dDCd(`l-V#(EazlP)qwmhaw`>17{yBtCEZ~MdrWkDoo2+Ugw zN67t16qg}NhDXRCf{@BV{#T;AD?)MK(9RvA5;k`Ym<{gC17HXVh7;bPqSf!7nxbHg zKRWTJxo2mX7n)Mn6*k2JgQT4hd2DMUhv32v8w;&jbnXzSPh1 zr&c6h$&p<~irx0oB~n=f(#Lyd@vN1>;& zg&~*tbvg$-J~&S_-WyS>Lvt(sYgtcCW-)Hhhj7gi^!V ztU-vane#_@$Tmm&W|%c2l;2D3dq%=qP9IL1Uy2@IG-P8B_8hJR`?D#rP34%=b4Iw` zLx8_G8Ul$qMrPhQ>>rTYA(-hjjJF??Y$LSqzyDSk6bc_4^aNUxZlz=^s;d(sw*RjC zIR(I1Y zLm&wK()4-kIip_DCjSB>!a<3YYB3>^MICSyA+gg^9}_DiDN$TVFdYZ7-|UzYwhpe= zxzMkX0Jz99Uv#~F7b%R4Wa~joCH>A#a79q+APA4AV=qoP-b?vD-^=L=CWeyM*SL*p8-p5&(Xs zU2l(e`R@c#1Duo!wR44{xXfCaR3JNdpf_CNM0eXDO1L;^p`wKi?UGRzH z;Q#R!q-sQPxx#(CtrN>eK!CU+_M7SrTPZJTa~q z`AB&)DomA4d zp>!@+K4@aNW1M%zjiow#-#fFAGuQSmX-Iz#H5?gr{AS~YzUVi>OrrG=JhP<$J{;>J zVx#7~Dd(|{*&B-t^u(gtH0AvcVPLFYV9=xuw9c-1daA9Ggf;7G>a$d0%-!s}OWfex zpHPU9vp=$O0q?02$Sq^Zl5y{)x7ifLaMnV1ghL?~l* z{=94FQZ5FDN&;~3cvj|`8`%$zYqaUP%DbanMFh4 z2bcU8y*2w6)&IXd!~aJiCU%D*0MPDehuFT9oxii`z=Pl&VJibdtcl!-48MRwBQt?H zgJaDN7_cb3TUho8CEO$ ztO%W4b+@l(Yb?6eT&!)cUkp?{txXhr(o6mDNW|r=dS)>LH(|A9#{&cTTn5I2_q*xU;dSk-x=9Jlg3bP&P^(Ygmu= zGCuaQ-KaE-)jp4Z)kT*+0R9N1dv8a-9pKcSlV5mkw&_u66HkLT+~;L&GPXWeQyqm4vv>(E2k8h zmlW<_3Ni2Mwk(Xd4nNPAERdSDRi&2;9^_$+8%z2S&FC=nfkwBx1eo@c40J`b)TArA zX$B^DE7YyDXi$6-GAlsAwDx;|$jfP-80#RXe|po4OP; zYakW%sfY!I%rGb=0P3{Cc@PBM&CS#{Dd>lDQ`jkbl5Tx z%pOjbfJn{KJ{pU~(3|?=qAeNgT`WVc?pXa&P`tJgc6X&Wl`0_)hNYKy6y%|VWJT|D zvOIZYT|i`vcxe?Tf(*6VL`p%C4p{~3s2P5;XS@F{^g>5IAi5AnhK`qboTR}h}xoOGJ(PY5SL>Y-A7=@J`s=|P@@^F^E~qWE#=f`Gq-mcZkjt)2`Zhza{7qOY zY#~wlqrsmWjngn%MR0WJBv=)+NM)nnc*^5%PD8+UCX!$kq9Hkj#sD*e7xXY7kWMv+ z4(&Qr7(XW_Zq*#}jm@%5EIWi;y}|%{#$n$8UT`QDV8eshM8+ZT&(8-Z<|J6IgBEqV zQqYRsBk+mP*T53~V)?=>{NPt*Lq=U26+!~)O&`-Y)gyRJ-`XL47=;#%rN;6~>&vUG z($r|Jv#6I7`D(?^7ZVqfy8{g`w^zFG9yN0eOJ}?14}0qbF9*G+ReUO37|=ksOR;8B zsf-E_tQ%KyS;*v!u;TcF(cDP$P2!&4ZAy!Lk%5u=cT#?*+h`5@Sihx(Kd%=OpS4gA zg?$mg?rUd%$8mw7fJbA&$-%t!4cxYD!|PSDpXj4t39g(z==Y?hi=C?RDGXF$uXL?8 z7Fk*UL4y%Fk|=H!V<7j@2Rc*gmubfDP;ZR}L=u0R*eXw&_WjCYArUI<(D!h4oEw)K z5b@-iA7xW@Jc@@1tkWZwEQRgK)HWbp$hnYb8VDm(bSPAfJ?)ooh{T*s&47APp9(|j z{(0E^%3{p=92M|-a&tUOxZt!`7bIpJo40@lpB7<7SA#8Bun(8Palg>~_+EECS;sL2 z&DYg;+o zUkaM@k{^-Np8F2TiNHn;#iX8D_f9hPtlooXKp_Gx%I*4p} zEg?6Rm44w-3NMNs9$z(l2`Y>bq%Io+wD*%^%&k5f9Z1t7Brfg&g?g!BS#%p3232JF zdf8!5^h{+kWotEuc9^gG1zg!YBDS_*gj#Al_^MQcAK-T5h>HLXmq2GH8y?5nqrK)e zsKsG_o1iN?^TltBcS;Z8C+YD4z~`leR2g?I>-x0Wq z(+a;wzJhNJH+w#r-7DoM^=EMxFCaPw%=&@JxwlWGg0CND(eG;rpfPnAGA6;8AVw59 zNbYY;Kax}hb&*c7a$z3V>lr9IH1MZf8Yk()0Df=oA;D3!!q1Cc8bcq-pQQG@PrI?` zA3ju9{*id^x^9R|=S)=tvl;-Wa-0C8-uLeraNVztQImyXrrGh1j6Vgc13ZlgOLwK(!_0-6Y=or^1*7H3yDqHftZ zM`r}a>r(k^WnOPcE_TGt-kaHh=RF=@HpTb`Db}se1$4g-(1Xnfq5z0|oQvn3yUrV% za`(5`)1yj*u3An8MTS6Rc{MD8i)geV3%$Q1R_xLKcFbevPd(8ZqbjeVN^0oAS-dCx zU*B9Z(|9{i@|@3F-~&Wl=YNAoM`~Em>z~~@4!S1o@2AB^rZ2Z--l+~W3v-jvgat>S z6+8H0TihH+TyoW}?Xb(=?LsjX^fR(Z)6|ozb}(-wxF3Kev7`a-ElW?|iV0l4=z3=8 z@yRsvPp1dE1y=h@>F{t*lwjXDRP8BInW$#Q%rdC~D@&!{hC|c5BB<)W(Uq(C9Z_oh?h_rDk6r|u-NWCdJhNLO>DR?Z*USbk zg(upa*NXtkI(DsT7xiO{#AO-Mq*TkuKWs~EgZzb9|X7oA|y1yvbWT$j;bV8NZ-exkC zVA$8=gP2n52*u1gm*CbNln+o}iY^Ud&Erw{rhvZ^ZTD3BkIWP$qYga43F9EDcOBpO zp9eJ5i$xIE?A&Hf^7dNMBi`V<2WlZpo79#_^r_qOXi_r0%xKM}>j3Y$>p<@q%@>J3 zf7-G%Mrbgve_^PvMsh=ZM1AXZyCTT?9cejp#4e>xAX?tL05kW>udXkCC^TTjJ+AST zun6cDye*9-1RMVZBU?2=(f13#LWy7vfiaG+$^*a|?LWmTK2hBCj=*owYkEiAR?k6? zc1(5KWW%kXCGq}O0-B99k-08iLk>zz*4>0*5Enc~MKP?$p_8jvnu!{O8YHT`$|uX^ zL}VqjglVK=>^n&|eN&i#5b>v8G=E<*;3n0SwS zqK=Qe8)2h$HodX#p1|8yFu=?X=HeV=W?IS2x>)#aUETG*I~$R_Vg6372g3g{Jpr&q z%PuhN(cCqWPVwu?#-Ih;`je^O4X)pd>=$Qat-&R3Ave)MndZo|Tz<+AA z&`U|L827%(se@DfxLs5n-BXW60v*TC`_++Nn7ypX`3vEF-L7uezq(zE(a7EIY9XKG z?SJFuiX>=D^%t;bcviB|dNqAR55$Tkf94L4O1pSojCh5nsmI!K9E;@NDcCdq@l$T8 z*E02SJiU+Gc^9Vm()<0LP+l4r>O1xQmi@`UfJq6#|6eIIh9#!jql5h~57?NOZ~z7I zZ|lGA!NlPVG+@$Ji5ZDsR#-QPqUlg0FA0Nc*8sy>9$Ar^NF_oldEGVA8s_eb^%l6hU#3fvLwg8n+un2+ry6aW zYQG_*^w+~uIbB;f-mi<<`8@IqG@NllIJlhZ$Z6-M3;?^A=O%vIP>^aZ4`wk9d%QFR z2Co8NoJe*^Jqttp*@>d9=&86VJ@*lC{0k@6_mJ8KYPQ2Uvr_1XSZoyQsgZx^Bp~%C zbE+EOv0BWBe(nORl(V5*epD->*e6p#?l(R%j&t91z zdT(0X2=F2_`a4^XPbdJKPW+5pI4uORho*Rs&IxrLpr>lMr^^L72HCthL=94DXAmbz z@els6hPKjNT)iHtcm8d0a2aj8ya-M3(ynyj>Hu84VIURL93TEfjBBY|S)W5LUGiIo zQ{B^^(uk-U~GX};>=>$?)URa7+?ANn*z(>F>p{HLbI8Dgc@^vLf2!tPqq%E@t zA$xBePCq}}vMt-T!IVtH$XE zK{loM!F;fGWGn*<4NJ}>H)A~V64h9zA8VPZ{vX!UO z;wA8ZZY2TB^(GAZG6<5#vS*F+>gwj@t$#hnr#jW>Pdn2m$p#`S`ghYFqb;v(ug}l7 zt!Ep8&zl;rFL)7%f74>&S$eKQVR0#b^tS_hE;;Vmj6FI;Mup~_uiQ@gaUJGgEgkCJ zbx3qm|2SYXU=r3K)lReY5btMtlno`b)JzO6w^1N2x2W`4 zR%&&k`8Bszw1WWs5u$Hz;U(gAzmONeOTEzI93F7_URPCKT~GaM%N`CglxwsbuOM0>c*8If+uDCP@eZ=*jiWv{QUSEU&%}<8p2)42w50M^rB8ov>>*5{0Zh z(t)iS_S{DnBROWe(Ilh%@eCT+#7nl`vS%~3zoa%f)cD04G;ggvf?!*=j4To7Cn>c+JpyukYxU-tH<_X5h`37!k0b3l@faC9viw@_$tG@yPc!m7|+RjEG#A=bU~KntwJo zG!wo3B9Y-qcd_AF`-X^I*y3>`E9gdmjCDB7%9Ye~ZHU9yFHj+t#=)yfGBQ2G4bGaU>x_oP9fb-*#2 zH$UndXO}}FIlZ7ED9)PTaR_-bzs>7mFu>n(9yd}4S2fZp)D^O@C@+uPB#I$Lu%uR8 z(ca46Q+XeVb#b>@3TX*UyrtER!x8uv9(`cZp7BchPl&m-yg>kyWl!0K4|DM59y7qYk6i z#}eq6t7NW$K8ABHQhtZDd;5p?q1nxwS~VTmtQJ$MFQE;I>b(wmMsP@YAB=Uo zk=uG1)o5tonw;wW>#in=acHkJ;)P;rT#{|2lkx<-amC?f!$Y&n?;=B?0VwzrgsuWJ z_#;pD0x(4+>ZGavhQEw_t?adrO>ogjh1WjVF`sStOEP;%A_WhL+#%jRYvX`RL;CpOEw4#gbpx8PyL^f(a8NK}iG@g45r{_)`T>3RQ^~zB`SQi^M~g?j_%S zMz%}l8iwv6uVU9wchv@lg~uLaylpUx2o`k>H|zA%>5OunhX*4XEvn^)b(Hn z&KktFelg2%YjP`{^Mge9?aZX=BGY6Ff{>-GY+!x;5MsL+H>{8M>1Y3luTZSjh(?`$ zr`~Kz?%bcx_QPaKw*15>AfIoxhv2}HXE$lljMXhW(LU%22H&+}M;Bxk1UvNW%aCN- zZao(&>2AcTDHG&-729NpQ7P6HbxO~e*1Tl;!?YWBKsi}V{;aGa^@V+luKm$luKm-| zmOaN{Fuf6$R<5bFPe%Qt#mKjXsK-+5%(UTOyYB_^BXZ^5GqMtl*sR}wFk%Deq(&64 z5l#|h=Df1ytmX##dK$P`!ap7@1I9wrsnyz z|A1b&BW5~W21qoaJ;ZoBTYJ9^gFP7-^qo1pY=-_$22mK?wuRSFLPzO4J7vsITZnU( zVsECIK6J4a`qPOAQlS8QMF+rZ(r;05Mv_8I)SAe#lValsM;1>=>`lZCj+dM7!zA^D^leIlD(HQM|op-p7 zed{WPsNh7o+7|hb`9JpC#9tSF_IvOKwK*(gNpX-D58o*_)S2SAuqB3eB)*)sMN%*) z$I)-ImUtgiTm-+Fa!NpFMAdkY9GzC{3X=%IV2f$u1vlzfvUD2^RD%++f8V!CdihFx zdFaiZvC0-%m0&VkVhE3{kEx`OC4G#OKvKJ33n?Y7cm6^zm<`moTeKAJ{#;RUv;{TzV))j=xFgl|Fqlbjwcsjhgs(?-|z1c*2DYH9J#SlV=}; z7Tav_zbW;~Y+m0g|$@s?%T}}(-yf?K%pp9TRv1e;RhowELV_v!b*I27v4@<6Vbh2!eu z16DGUdf7eSy#G6a=xiZ1rTw2MRKWe8DEvRMvj5A7SuH{QpCs%S{%_6P5t$DQZa&++s;S(>U2JaemA+${EY@3zhR3XML5!9UQQJ2q)Y-}R062hR6kr&P zWbp=sLKr7*Fe!SBcgXv>2?k8PH9~5!UM#-@;k_`swYTixu@kqe!G*oZCw3+;A#ecY z;5P0Hlt;wIU!%BtLFi38%l4x^EyugrZ#_0UCXkh+na%fFEaAfa3{((}#UN8@5|3Z1 z>T@1ud*%h~iDOSKN0&J(?lqT!EcmnS&qR8Os7 z*OF$zWu*y<$Wv{O#H$&~JMikah*Qw{iYRkE>pVcbfqUOxq(fEYA-7utI&ZNquWcsP zs=McPqV_UE$L#F9Zb}@E&U`Ipx-L;{NxN#~ZIDjtXb z*2HwY3@9wC6G-VVOL7jtCXG8+sH*?sMghDy;!qXnT(*O%AKuD z61KLCWsAlL)pQW^T%BFIf^oSu1V}uBhID*0C>vR?(dh(SKa-rFRGDna6sZj)4dkTJ z#ku7nx(CMo_jVa61K(4$@Ma8W%BF)!cEew=-w!pUp`Ilg1!M zVx8Wu6mJ7sJ8`;~)^SG@m$JM^cgcJ)A9oHDO`Zaxx(<*X5QB%@5o#HW0aj{WL0y^T zKx)z41MF*LuO9|8K@TT#)KEIR>C_%i?uQ@NsNB+(1C@5wQou(M25#nX)?m~CsH7Ap zzOv)BJ9vJ2YGjV7q20(Q{2kfWwN7n5mr|YJ59*(%^VY32BfRY`mWb^uWuQjh`cT2a zYi*{8f!kR*0}fgyI5=?|AR{(Ll{s|IV{L&;RS9;VtXATfILHc@LO;w^2xJ21(h*m_ zDS9i>P8wBDt|l#}KGMz(9ZgErtdN8@tn2L>R#Yu}GHY>j4wo5^TDRkKVgJ~}?&vYBR0*i5+x_a+5_|T05B&GRt~Wy_;9Hu#X1*(aQ9tL8 zOXrPQOC`#ntK1Tk$ku}K0ZG_!!|$zk^`ZtYSa&1xo*7KItAo*D-xv&x0_yH6bstJ0 zp9#CY!QmnG7ay!SVYrXQIGvN=C4;(z8pm zYgo2)Xy>~`%#T4hK{s&LVjqHHhNg(S6J#YYVbyTiwrhN{vzu@nXkvVoCf%pXIhBmI z;7yl_XvW>9#bCR-llU4A?E|(fACQ(dRjV>8@J22>rT$bmnOZy`>tj4OXega{-Var^ zY>qS zTBE_b$`{jqgnY@qsFOj?%BIEw9(cEcK*O3USKO$$`_eGcEJ!^s5KbQUSqFQ9BtFgE8Ahn# zI~kIl0lT{1>&nzawfy!_5z}ei#kepxJ?=^4Hn3K zkik3LrR4JBl920Xg}CN^;VERyJEePvk|oZY>EoL7z&SG84JU913we&pc*d4dtuc2b zaH;*SkOJNooVszQdwsDXE?HyuFFFV7rj|#5oFnGYIr7jIGyKi_dPhxq?TbtH8yC00 z7`_Ch+tR`~NP<$T15T|>*HYo1Pa05wBh-iyoh9N5k~jXI3g3Sg5k}{$hGCaXC#|gk zVYt2PNU)b44&R1{%Rc&z?`Zm)YOIkN4j%%qjD4FFbc-W%(!&pi$lU#l!!BKQIOTdQ zuYLn3B=}N!OeYSD5SaB5s+K{7WSI4HofgP5@`LiSts)e&`Rad@vBq96aYg|%g!?6F z131tz6af@oiAIGhZC-6-%7)BMOhV^4duEv4ad{XZAA13&L!RZDTqmBSzoIOBf_7%4 zvX=?(k8@XBKGs`8@`*FC%_;Q}nDmK&^F)*~uVFcniyJQ}-_1+%IU}9Y+q(y0rv18J zK$6BB|FtAq)lWkN%my8@Nd-Wg3+WW+{t?H?>2M7*Ga1iFOT-lq4q?gLS4`7KYDXLM zb*a#JYiA3(+K&h_5*mr5PSI}?0!w(18??PcIyd&-)K8ebk2^3`qm;%zT8o$&!sN9~ zDS3?G1M6I%u~P#7x{cSf5z*ktld4f4KT@bk4Jp5J`ob`Rs~9lIsIyR&t?XYz%P-Qm0uc&DHp zckq^9cfpv-v*_`!jsd1)u)fpM=E*c85&Wzfh?iTJQgv+H{;45b(Jiq*6Vf`7$KoM= zw+3f7T(eB7=S&@;{>;UQgx;;!wAFUNR&%l>&zhedPg(EW&A8_SBkgnk_u`Fj@!x3lMw9;+*Xwfv%URPA5 zC-m;;5w1QS-+%|t@{0hDJab6`n<@9BL|HhI?!haj`yF{naH@G6<35geF#nP?TidAEq7uFA!j4rzzYf<{XT2jw-C@EvOS`cU^pO2F1w zW9*d z#|P#Uyd_!CSpPi?{Ys^Jng`-*tx>UmiM)+M4M#wysT6Go2t@VPr zv<+E#HE5JYA6o3I{T4;m*R6UAMZ3VcZ172QlxNCg88!UNcwpk2?OY+3)3%O9S=CE(sDM_PlYAMK%Ph z0;tL+?Q1Ir!7XtJRN>u4WmY3{z-B#y;H^z%J`lR(qIoXX*1|XYIa^SLWS!U2C#1gab#5PWWaUV8?phu-ENj9<#sxVq5kT1+Xp^ z2)R?{b-s}tZ5lmmj6{F25D3hYPKmz$uH*l#qc2cq1a^^}_2@SR)y1mJHDk@tXZUpz zQe9X-|BD(@8u<@aFloQy+XiENm1kHwj`rnjrK^qO8HvsI_wMcNZKpm?5qi?`b4UP5 zyaq$R{V425^WNWv?FRNq(iRV$7q{6GKO`P%8oXU{|U^2Lqfzh2dGVfxg$QZSUpoo0OS z|IH=;XJ1VeXvY9xy_1%cKXW~dd$1{pA->)hPDvV8unx?XYd z>AlUFn9j6ouve45;WX2|{rBo`uG1C&^TsvrwcuYmzhD#qJ`Ymvt^WHc_{|=!0N?&# zqp$K#`Y zxp6(JS7~yf_~1>-H}9Y}`CWcI*13bwiQ*6t!Q$De{I_VjO?N1Ltp~RM+<5wJZqL~Q zW-eMmy};^(;LDBDkQmckt_d9TVHFZnf%hurv^K-Lm-E=SPLY6MbJ z+bU**9bbb!&<7ONvXnJdl>iD#qShbaAYgK1;4Rt;h71_xGBkFP8Ep2yc z0XTezF40}aloRWm9(k!Tw{!NI(ngM@R3yev*POMKBKzl)NTZ%Xj(%PV{zkY`EnT#N z3_HpNoM2_TJ|Dy=)zRU^mZZRLBs+1!@;wHTVXdP@XP*D*Xw4j#A?~4|vXBZAssA@$ zQTbf9ka8LQ5Gyq&6O3-X`Kj!YBNWY~4p?mZ!Yf-37NzUED z!SM(bpqSR^W$K{YP=_Ne0=oIq8iPt1rvU|C^BFC)UwT+uyvIpy=|y(9(@uO*&Au2 zukN4*4T{acY@{HsQ=n`P7dH(DJaj}iwlkW-(iS!?7`^&M-BDoGW2~c}-o^Lt5u06# z;H%mnmRr_dM2?V{-htMRAwc{%zy|O1X2AGhj6|!%#Z`dWEHy@UrIEnHV5&y^PO}2@ zri47NOG&)cFLMY~n)}hi%P3zy`!*7v+o9;q`~z7I4wh1ruj8zpl*ZGY4F)0s3NLFD zctz`^{NY>5_=Lr(64UC&Ls}vQqJ>51466x&^j0A&5|G|h$b z&$k}mju?tAr;I0fh_vTzg@2Oc870GWSKgl@&BuJ?IHTSNY+aC#d8f;2W5jU(UcWbM zENjaIDAV3Veje#o0r zQ>XqGN+(6vu1@_{tat>I5*$<5IbE^lc}u-Gg_er^Q41rVT=r}X6Hh_aYy zw*QEg>HgR5c;DZlDjV&10l;aZmCE%f70hhTZe!LrQ`*>Cr#^{$wVPQTBv6K0vIs zq~R#^n)d(I^%Y=QG~M6abc2L+NQrbeNFxo>-QC^Xq96^DOA06P(%pz4At5Ot z;kUr^zK_2D>)Y$*V$W~RIWv2vcW374?$TYS+?!GtW~(y$ub81>iQ7$*e3u+Qdt3{VKU>r*sd&YZ zq|B5(AT00?9G0t5?5OBWpB=@0l<>xHx`v0_C80{$(oR3=@zB$=F6+K^d(+mYPD{lN zU*ADK41vA1n_*t19_h3Hi?38xsmx?kysbXbu zL6z#YyOhsB^q6{mX#ds=2uthaNQxvT$>qjrF%DGOw#5 z=34MA!eesQ?0GZUHHo|jL_fC$Ad+*9LQPhV5vdRxF=#M$Ih?D5^e}e0okN2JF?KmC zzO;$K#S+zLIc|PjdNl9mLQcKTUv>nam2ID72YWD3^YR!ei>Jrb(u#h%L%(k@qgkXO z@R_mVrCBu{OU?`Xi74pClg`|sMDFJ_l=+@-IcDcBG!v!@aS5_1m|@`0tTzyN%b=D+ zA)fY+SdA|=kL22Ew{Ib(!kCYqjbXdsv0^hu6-r}{ z+a8EbXzDADZR3VHL-9^4GLro6;=K@?EgI84v+R!7GxN2`5&A&nj9uq~+fF<4-DKcY zDwU{#z-Yg0W5)NrWO~}n)?hVAl07stl1lwhhuc$I*kFGZmO@CYN;~bL1dEs9?E8GMdot|#^`gmlfwLh2~NJt$tvO#fA(Z z8lviTl4$#H_hn9-8vCx(PxR+_tfrnsmcIxqDsl+cfFpeR0>wcCbqYY*9z>r^O;hDp zf%CUC#u)C@Ma#!xS+k{hm`T1mZ6Bt`9HwwX8aDE#_$CtXT^vH?h7>%W<V-`&SIVt!RFS(#e$#igO^FQkiJR&p2~_pd;us%lM|oTaz<1wacO> z)Gw7hmG(e*=mL*5L{R4NIgz_+4&(bzd-Rr{V(?@5HMLbrBQB289y!D3aq}ax9T6If z^}wKUAZm-kotP7~jZ7JS#^;M{eyL0fckYJnJdh1Rt=u$soUgz@w6Nw?S-&ARPw?g2ExDu7uC!fSfImo^Ps@~)#=b8zOP zBO}>a``KFG*Xq-+k$!rkxE)mG_0mrNAVgB8!|q!-bzbMPI+f|}sn+z55`14@)apd& z6+PlIbD|&e*x%TzMb4{*=egHjZwux|tl*EL8a8E`5@LM0>R0p4q+1Elqw^vjxEApD z@a!vYa=9%tEnD0Ads#~Bc8&o2)4Gxq|n_^ zH?N-o-M9zkd?pTHN6=p_v`pi2TZXZ8V4UT7akOnZz9KY~qE4TxSh$D0p>V3r$`M&q za$PlC*Pcd_e8ibil>)V>In5ZzDORT!M2#`3?wY{b$8oBe;(9S(8)#`y>mlIzG+A9x zN3TD`ezcG|sGr!zclj}UR!s?ey%CNLbU!uj~;v{wqOzS9RJSGS_TT? zpBx%`6^|);AJ1)6x@rqXj~gP<&yBqE&&Sl0@Jd<%{Li%fk1(OJ1z%QBo6(jv>VpVP z`u893o<^dbg%cp1$BA#*6+yM2qm$>i z?6X&wLnz8aJ)W!8-Y{vH)OlF?@{H#3nQjgf%rE%I>`x2|pm8$~&<$4p;`gqV z>Q2}M0lM)V42y6dDf^Nu?7+oHnA@CT-AR^zURJndqn7H>%7pE}`2^{j9|!xEzx10C z9cfycx1F&GvC#KHpG0{-c$)0sa9SIGV(R50CfzPAj2yi10=yq9T zTCB((Tzu)39C%yT7qa|?qm{?D?{iiDaFWB&f%CM`wF7mw(c8VtGNFF%yzOSSpSzE| zF|`^9NITbuqNKS~*@CkKT&$S}ER&Jt<1Ls6N}0~8z;)E`T7D<4(N9_TB%^jM=F%_i6nc)#-^7lBJ^DWAd9k^Q^0YISHjmZ0?CVE6R3R8t z;R~+o?#4rRD)eei%7dMO;KLV^2eRMWta1~^7$P2(Qg#(76uC7IHeFPqLZLEowL4>ZG6@=9!||&yj1Ed+ z0*0M=>=U>|ZNF-_iFc6aMlC~1iPQY3^~#FK7kLK49UehLOWm?z8B5M{*ze{DubdEadhctw`>|&|XT-HyWniVZZax_qA9Kk&N z{A!j4ij@<6MSSF7zaI~`m8AUDl0R7Zi0wzBjCZ4u?VO*G{{H*H(3&XQBXX=qSsqUV z8IFUjgYe&Y+kO63WCoq!w|BrruzayT)^6>T&8@2g^#MxKZzZEGFuAH}OB z+UX32x~1vL%{9+H-EMJZ)l-BjKY)RWWP^c8kU%4@=IcGa^Nmm~__+k})=5J3*(lxp z4f6~aJCW8o=_b^jmamy#Yp`bG_|jx*O=kpL z^tH8eFp=r3y<#(=fx0KUeG2s4=k>)BMBh96{NW(Tq_$4b)S7Hgj-v!UF|POU-J2ik zcxip}ZOP`0eHo{}jTt9DbCRO>Xh~&!qq8kNw&9M+M^`r}?m+QM%Hq?L+fPdU)@fXz z$Y-uiI=>}%p+j370)M%=nr?jVqASmmSsimZFKuure)POcmJGV=YQdlpA!;c!Nu}~; zQI^7Eop8F5@>Pww$IC;P2qb){5M{57tFf`!Ma`(6jI zbz0pP>f~p&bv=%3ZcAawPije;L+~RqWl%H^<2j-~syW8b_ zi4&a;u1r_{XP5JTm#HWw(4(*aQ@X%`eE{?!0I8i&FvE$Pkq3 z=Bt`}WGUkwNh*Oz3+toe(T614r39G}T3ZQRW3wmASI(d`$t448 z-tAO)vw7s$aAf=G@5>bm81n9)q(5W;76^nI%Gwvo%FE-5JUVCsH}h>*ir;Si0H>9% z&flPy*OjoH*Q2>)O;4b;bWKp8m5~i}ZaJ75>2^G^-r%MMA62!ZdlO~GL#!#$%b2LH z=jbqXrhiFmCz}oJbWcled%MYCxA9uXUBN5Q+r?$52q6LXvYczF&9LtCkJn2T1Y~ye zP>+^2bo&tpWFh@RpPg>$3Fi6ewh{y8c}L@mvhR4CX)$K5f*QHI2XO&cSel!Hh4v7SXHsRN9J3#Yd_q6qF0!>^a81@I8JmR_J;NziKzw^9R zDD`Tz^f|46!7Fb*iMPU}HSp^{8S;q4+&yx!oXeLWVhmbrAh6Rk==boC%_-)8D}S+k zrOmnPK7ir4HfZ&o(+TPl z?a5nW{77NwxP@m~Q93bke_!BNLz-EtqvZD3m4Pas4?*wzd1_LO{I6p(hH53p_q*}? zQzg=!`D;Z%TCBrqrBd?4<|gwPL>?L`?w6t(bloL7u|<+~B%9MaV)E-mdzS1hm&y3~ z1`^2?a-VFz@ak7c+tNm}Eur<7r%wk`X%>SgRyM<5}J^aR}02VK` zpXL2CRgWRT=jM$JBIET%GbeT*m41$uE%MV%k?=)P!%E2ZAd>fp!CA4HtyJ@wLRYH% zGrFDxtqCeVhclAa=*2>Bj-c2+j|-w$ zaYb5Aa*hyKxTb{|82yE?{^fQpo@t@*1dojB)5HV%CcPS+a=$=hW)A`S{lrY9$U5^_ zYm}&cN_|*0L65zhuFOE+Uew0&D`?7t<3vNWXhH>b0=>mdB;%fKhH3^LsHqwVYsZKA$}Gr9+8bt#@3YH0dDp1->PFxA z3vU>v&RiC8wTuWqq3nI9>05gM?OQ`N=M#Du)HmlMB%TspR%4b~gR6hZwHZKjK@`&% zHaKODm8)Hq8ls|5Z9ZXCAMPICY2%pn4(TZYCs$MVsD1EN%5zpcw^Mo%+GoNXJ``dn zdVT6WXiynj+&R6zvGYR`l)=a0XFl`lF>@`f9fQWm2^rmc%LF;0cD?n}(2YYBe5;G6 z?{n=T4sn-V%Lj_@4U{FBvLduGC=~JBewkMg*W@;taD|Z-ea^gK8+2BqmH{~wI26d!KVd)l6UdE|%?_!1buR>FK zf2k}*X!RbwKbV~}p5Bf<5jyxVQGr0Nfsxc`MY%7MlcD(n*+!Hq0N%ilM0eXjYSWDG zcMPgy@~6O)JzsI#j2%jU+M^jZ&VZFVHX4=fuDxs?QXXrN9qfdV7HAm1U>d(KRt{Q9J z9}gb<>c(K8D5@Y@@*}%MOP>u$I~K;WH{I8N#2vT#tu-7igoI3nET3h?%l}e1^$OB- zAhX+(bsl>?;*IR|;Hv|NpG+mA^9-`!M03%{&=f>8CL*1E8I8wq$`oxA=cZZ?12t9x zb|bD1nmVJv4J+ohH_K;e3F}Xml=%4pEFRq_r2$DCg&rRdoaj#IUbEuegv9NXT<8%t zga;6$AmPvVqJlj;{g{eY|;3g=!rrz9-1Wr}F~)U9|STv|EA z!d;6@pINCU1MCs6ny}4;q%V$`Mj?egQbK($yjEG?;#8UC3oM;Qu?KFz?R`kdUcxp* z7)UTM1$ARckZ|(5F%V!#2N6psKEj4@1FF&xI$)X(Jb%Sb4OfdWkcWT=C7go9k<37^DOGU`%~vQ(>0Z&M1HcDXj#uiGEaB7#*!7 zow@${rxd7i#059eO!qh8v1ZmZl6MVH()8Y`N^;UtGn?tYW@raAq6BerRZ$dQrIn>h z;4}wZKlzc-r>JJ^AU-iwY3eD*-IG*^uBD6H@G)NY$!ofe;ddh$6R0?+be0eEBdXb3 zQu@tJFTSU~d&^Uk@pdd9y<0oXfW1axw>dr*gXDD;v`tK3yjQL{_hFKiDL%RmtnIHJ`@mdy)&iPnNp9& zw_etnN~~xqXK7Mq$Tz*@i|0x@A&bdW=byzE4H@yj(5LGhWn=Z^k^b7YjrZAd7&S9k z+vxYt9(8itUCF%EM&H=LWuvV0A{>F`^Fp~-HPDV{JWedyXP>zZId#Qy!{MOLd zh6syn72Oa{cS7R0i>!>Una(rEOPCZ|mKj*#ehYd32qU4_FmvcLWI#n95Jo9A#w??Y zk~l>4(Ug3YIEWwpkwH^Oc)(xk<`(;uzcGEok&X$D43gnRAn6z2)p5waOZ#mM5Yd}`%l`9im2 z_aXxJCw_@l!ju3*u=J&!hFL<6rQ0#y&Q7r^w6unCmcd)1qw(!qa*3f$^qsM<=2%J3 zl^LS2jKhrR{R!XoX2=w#$M)zuHa68&G}Vn}GCv%2v^1;BIr=);6jBPogL{TlLH(i~ zCZ^2UYMhHJK(i+_S15tA3e~``e%x7)(r^H|PMwhA>l!xs3T|uS`qG$!bfyM}e}Y2I z2^8EPW~CwGDH@zfa_EDMb%=ob?zJV6kqP6{Cwmco&6oQsntwRGzNXB|?SXCBCtX#oYBr{7scc_bve{aVqlaVp8DI ziN^v*j0pR-#HYMUGSwKNhoM!IwegdpvbK-&K5v{>?01XBq*2mZ2!JCh@?Ggc!%om0 z4Rf#e!Xrzvj9s(GI%KEEk;o&F{jPp6P6<_P_C4XBUvHHkjQSm69mp%cH?0kBLxYD7 zOwYA0tQ>710=!703W8MMd`BZf@La4Z7{-=2M=?chLp!%KafS*Quu0Bd&;~ z0~2+8r>W>Wt8WzeZ9)yu9YW`>&d~*UyX)1)9ti%b+GqD)eym|n#lrIdNN3T8GF=^T zQQ(F>mM4Bqh7oA1eVn`9deHRdn&lhKLfrTik7nci!%9zlt@OR7;*U=8sb0~S1#+`V z>Uu>cJ2}3u_P(b%?`XpDPH_w_igdb7IhQJHL1s>iO7e={D?F|%s-1aXlo+V~@fE)v z(2KHJ2KdadzH8A<+I>ztlT&oF18tzC3Do5K`s=kPa+~B%^KX6@MPI#rI^G-j9jEFg z9o{s;NWgA0xBRE!5&QfsYlV{~G)wqPq4MvxPCH)UVBIL0PL)Vz#jn3tCVnOEP_$=; z)kZ#mv$2b1+wGb5^+kNYSsV1WODgFhfYn2Ufg#5EbHn-Fath!f2ZRv_XM$is_1thR z!0reM?2Z!0Uol%Veta%&!$&dyTyLNd8#Nw>=|hDgkHvyHE^oTH>S1t%q3^o)*APRt zH8#v)>w&H8MgFx|oGhp6AsfyV%FO;tveSjlfaSHi>r2q(EKCK35yEIV@6}dY2#je8 zinAyCi=SbUbF`0^@nkG5^dGK4@%{Yedlpu|3X1FFucl!~V7rOa1V2N~`TVRu1#mHV z`S?9yBu?%VlpSeq1I}KWdL+-T3v-Tibz1u{+eQI{zQMwtC=Osl$&M>sW!$BEv}=C( zBxR8IcXt{<0skbp(BkJu9xM7D*Kh9%^Qf(o^n*V{LP=$4+|@go zH>WAFc*D5`+$_!ML^z}sjN~SgK6*yd2d(kq+A1{zK+YH+ZE7MmMHmacyc|vG)^VJh z8=7qgsmqUD>t$jaRldHUE+qL$#n<9JPp;V=47CPdip8wKNo@~p7gu;6hrD#OCGwCn z8b2bw=FQpBQLEfdu3%2%hHg-!70Hq+j>se)b@sVWXXJ~Ro=lpC8LNLi5yl9mq;iJe zE=CY2CzO-s)_9LPBwU_`^BR$u<1)pRL5d*MG(R4DW5LI@;>iotEFaf7_p~@!Swj1m zjvFgA`t&)JPL*U@NkmV58>RJ}jpYwqYFbX?BYq@qY90buyw}h38lbv2-gH(hdSvSy zBvHu(vQ+Kq&x#|IET2edlv?nNR2rmc7r4(qdpGQfi+JcIUj6)-pCFLvykLy8Qz_d! zv!!xXQ_L8-ps@c#GOtV)ZM_+_B2HF*brAGRqfEreZ` z`nGrL`r{~h%;d2RwvwTh*pgY=891g7zEjpx;|9mrVH)dl>xaSqAoMF18Fi9VHebdkl)0{fp8M4eC~w(~;(De4Z*a_6(2v(S?29&(7-F zs)dS~4Sd{-cm8^@?%FW&aR!3lz0AUGB&F7%0r7V2Pv%VqNRIA`tIHc*3V5p&XDH00fk*|b;DfWa<;Kh z5|Ld0*&m&%6g|bwgq#?Pn_eSGyHbTEajIKm)Jdlgv7#n9JA4?zuntvW>JHhuubZvroW}dQRc<7wzh2VLHkBUrnRFijz<5qAm!Nqad{A$6f^stU? zBCCrBG0X4^QE&X`v)7FJPuOwVHeOYv)zmUaFqhEeTIGnP*_nn3N-` z16Lb684o5qevwt&pw1F_KZHNV9_-BwEE5v?$pB^I_hzQ`g8Im1*rDx{`Xle7P8*<( z+#t+dW6NWe@CLUouM+8HrR<5$j?cc%%xGZ3TvuC=D?pSl@H|wXTNH`8=Ifdhc*dT( zf#vc;9KI>iZ?@B=e4WsXq^syvWB@6R-O8B&HqKjuNNyh(B<5E^iDXG-2dvIxen)4s z*bk32&dED}i$WRnv`!3w&U6DzC(NU)AOrM?H{FXEg%kM!^^$&BiVH}E7(B()w3RVfSVxKqy|J{)T zHh@a)Qx>USUv9dS<9fKn!^VLx<8Kh`=V}qO96ouz4ncv&t{6!ju!~b!32E@FotPAK z7H8rc8d&Wql&y>DOZVj;r%_|U=29!|S0W#7RG_R&lJcFFAp8pDb~40W#_MYK2>Zzg z{yK!aowK9`hqd7?>gSb{IDdK|b-wG2xbohg+cW85SyN&ER<%hk^y8A-UL2F>QE2+G z9#gY(DFu`utXH0x&K|?i*86LqV#0yIn-)xSu|v=yu_Ewm4plz?B2e>WiD|ECu%xMD z^RfJGPh@LClH;3nq;60jJpv0@ry4sdAGYY$Pa}=M)P1+nk=MA2DSB@^@mp>EgBAm^ z)vy45jW9*JoR5;!!h@O}=kZoq^JN-F>v9cRL8y8^#s}Nxi#qr&naE6nFQb?cLWh>` z0l~8+O&s|UZV0g>ud7ftEqIy+UcDe0_IYuoFnfBL zRq32Tu+P>^;bcLpDt=8sNmuC0w>o+~F=X2{A4U8uM=ml47MGi^kDXw6D;-t`Xb2xF zYReMpvZU5Kt|Go_-|=`Y=eYUi>1J}LMW?U2Fdmfq6Pr-{7k+E4SFdT|dRj(e$W+g1)^Xd0~NNSA)t-Q_xYWBlEY&o7N>f z+Ka{0-6HDgJokXI7U9?Of@QYap&gH7n1v%h{kGm~ykY64?g@Dx)#7RQCgB=8l(Lz4 zI$0PM>N|+7IYb1r>xQ=MnbNyc?+N40rf0JBqa=z+fKxqhqotGCzB zgXO~8Kem)w4mgGW!W|FrGI*lYm^AP-I(Z}0n*7>F?(ikCn_05}5-=raUeMa679^uK z`NZ4DUuA3Ti9qYu>B4kQ!CJf~v1*3Nw}!arDA4Hqu`KGTJTd{}G%hWi$BM%e3$g8n zONK<`Q$E6gYIA1z(; z{Ar<51&5_Hbk6BtKkJ?;d>&0b94xhZ*xZf4I)N_qRAO&{UaU8NaBCLDKdJ3GECH@I zVPEwwqaKffKX_P%{?xa`j$KaVkira5y9t9~6$&CQFIZG5NDSn=Ft{#lAR zsqDBZUl5+`wMW`FnUlfJXA*YDxr3stSj=qlBkob?H8?l8+cX6mwX75}Qv7Fd*O4Mfd>85u``70#@ z&<;Og#Ow3`jN0F*mDf-cV(7~7{v+B23z(;?Vw=}-{3*xSeh?sZ4zY4Ajf|qb?5r|+ zZBG3wL0{Zv<-=;(7S656m>V=^L`9?YCc#4jy0hqpq@#u}9l`FgofJE*R;O!jAxGtW zVy;Ov9xLfHv;IdDjQ*F()&-o+h-+kdyhDVhbP;rN`__461wSpRVi|Lq=Lar{5ANP? z`{2<+)X%;;{v2*Lbu zfi7=hoLsF~|MsK^cc;dSTy*y!%1a3SJ;?nMLWK@_42(uWD4_02 z9`^PuX7(m-ZXwSVl@~;@1JF<&`QxJ|#)>~7RbkBiHM$(ZklKYz14w#C1oLG_r|Ob0 z+nJZEUf2nrAf3qM3_qt7tC{Q^9&8P8+OYA0e!0FvSixQ9I%o`vM&v=*=6w#(RGj<> z;CsV6J~5taXzyk*J_3u@%AT5}X#vew{9;j93Im^ZLY-q5ipnISR{N0&^&v~FaXWSD zp=HT)YKPS0!4_!JrC(AbYe_~#HHY$+icRuxhWTmk?Y8acnxUgx6) z?Zw3$eQ&d~lJ$}58K*r9)Ef%#<5(*{T>7ojn5x;&jJs1h8fz9bWGkk;@k9r@v8SGe zl$KGtyvNOMvuZagxc#wV=c^00tE1<2pA}me{6>e;02Zs#_15fDWVoRIWgXu7^M`H? znd^nTlnWzy9Nm2{I{fMdf-Z7`l%S$0pY}BK3cd#XKn=WRH(a|)=&^<6p7h~uZ#sm< zK%^Tp?+|`tj5-k$N@Q4lHbrX4?0nPr%V!v^r1XKI=>z#PA(_mIC@q$f`ikw2G_)Nk zcq}dwvWqcvB_8~M^eI6UjSSe1g^)vUbIrum-r}E}i<4LG5XF9B6{IUFrsD6+#(?yW zz;86Y0AG%#P<&p_ROn4!*-*TN-8?f2bm-O7Ht=L(ay(2$pTXTpm>Cy3|FE!C0=h<3I`mG?n=5?4>i2)R`_6UCTe=U93yJh(r(SO2{HV| zGs{54BS5;mK>{@Q15t0&* z4t5#RopO$S?rO)nHT)vMNz`-D@La%{7lf=%D+Y27dtaN>;vnMpcd2m@w)?xGI0(=E z9a22x+1*{8T0F$)UZk!z5rP4CAKnW<)Zk6z!3s{E0x`e8dz}I?1)QrO@Tfp!uCxsJ zt#AhpI8A|QQl`C3P;84xXIBC-9I*29|Irq}z*sUQ96R&NZs)wOWW96s5!a11C&|d zv%hG9Adq-`3xWgr+rU4$zhsPL?quNq<-g5h(pj-rGfG%6FesG&YpeNZw*tZ(_Z9or zHmETFelY%1H}jta44|D*Y0e55W<${LZS0s0+IaOAyAl{`4}5(OzU5y4VanUXzyEX`^>=);_pAw^S76{7=sN0-{ok|N|2KI{ zzW16zFH?kf&;RFv<6?h3Nn7YGtMZ+~KMx!HJASY5JB8q(LeBELw0$VVyML0~ zvLnu-19J)L9stYF-@3(H@3=)8FcVg4knftJ`_k~|;+Mb8UDp1O$R823b=y`afDs&k zmHF?oV?S}nZ8(DgsC)nuf14bU?#?V(a3(YhwsTT{naXMUzuavfAO!c#D_H-DVHubH z6OzC^h7D*YL9j^`pSiN+6TrZv3cY+f=%|{Pk7*3r@u=s3hF&CxMl?l zkSm2S!1+G7Lj><)0Xj+{#BiB-cMvmxUIr0@BO$z_n1EJH2qF+r2FjpNKmb*8@V#p> zJ_Pe#@VE>V?4$Yz7c7Se!_7awqu7Cx^8Yk3&E+81DJujpVS>;z|5<5o^X<>qyxf18 zM3C)X1em7-Bm8ehlKwdZ=lV+q!L2(N5QHV11c&Z zY(Q`&*a`o>BRpX1C2m1pz_1F!21}p>ys3g%!J4bw{^tQ$tHH*aTSD~YO48uu;@`4!Hx+652->mN z3Ibf|LRbLg8VEYi|EdG)?H?D5HRPXZ%HMq$AXft+7FPKu)W*@>!rtD-_AbKzUsnfK z@jos3B0cbE$3+u95zG1 zB3B2Ig3WfgCtlP+gkjqp?}=TIfGh$B&EOLYn?bMv>w3_nKb`MGHO;|ZZ~hjcbiGG7 z8zB6!yl(ddMk6?)%DY8O-2aQn!lrrL6PMNyJRr3Zly368M@VfU1VCvE7!6Sq*jRk= zx`##WAUHruCkO}M!oR$4VHRMx2_gbZ>3dHIHA4hp1^sRbe&B;6IF|7$0tKd;K>-K< zTi6peBjBF*#u*&7fYC6(wguiI%m895L9fuT*mV?$7K0%y~}*JKDG>3?SqAT#}6%;=eS%t-&t-~f|)FxRg- pLHm4sdmo!e4CKMR*)+O9SSI@x=D>Uf^9p8^0|urs2OMR>{68lojF12T diff --git a/lib/BDPost.jar b/lib/BDPost.jar index cf2063e7e84999c02d504e5295e3c7da50d925ce..db5652c663c815d0f06e2288cec888ac76804095 100644 GIT binary patch delta 150 zcmdl`u%UoAz?+#xgn@&DgP|c~#zfvJ%phusBA7a%E(qlLG9Urr$%c$#NSaRhPT8!? zn8?TsVze{uF#>6v>}IM4rt?jm!Sq&BLoof))ErDJo7sUhOinQi1Z&)3X3hwf_+)Me E0Fo&$IsgCw delta 140 zcmdl`u%UoAz?+#xgn@&DgW*`m比较运算符枚举. - * - * @author fybug - * @version 0.0.3 - * @since PDF 1.2 - */ -@SuppressWarnings( "All" ) -public -enum Comparison { - /**

等于.

*/ - EQULE(" = "), - /**

大于.

*/ - MORE(" > "), - /**

小于.

*/ - LESS(" < "), - /**

大于等于.

*/ - MORE_AND(" >= "), - /**

小于等于.

*/ - LESS_AND(" <= "), - /**

不等于.

*/ - NO(" <> "), - /**

严格检查.

*/ - STRICT(" <=> "); - @NotNull final private String s; - - Comparison(@NotNull final CharSequence s) {this.s = s.toString();} - - @Override - public - String toString() { return s; } - - /** - *

转化字符串为条件枚举.

- * - * @param ss 要转化的字符串 - * - * @return 转化成的枚举 - */ - @Nullable - public final static - Comparison getMde(@NotNull final CharSequence ss) { - @NotNull final String s = String.valueOf(ss).trim(); - switch ( s ) { - case "=": - return EQULE; - case ">": - return MORE; - case "<": - return LESS; - case ">=": - return MORE_AND; - case "<=": - return LESS_AND; - case "<>": - case "!=": - return NO; - case "<=>": - return STRICT; - default: - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/InserMode.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/InserMode.java deleted file mode 100644 index 01c4af5..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/InserMode.java +++ /dev/null @@ -1,31 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Enum; -/** - *

插入模式.

- *

指定了当前数据的插入方式和内容

- * 所有键都需要包装和过滤 - * - * @author fybug - * @version 0.0.1 - * @since PDF 1.3 - */ -@SuppressWarnings( "all" ) -public -enum InserMode { - /** - *

插入 Null 值.

- * 后面不需要值 - */ - NULL, - /**

插入一个值.

*/ - VAL, - /** - *

插入一个值.

- * 不提供包装 - */ - OUT, - /** - *

使用赋值 sql 语句.

- * 不过滤 - */ - SQL; -} diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java deleted file mode 100644 index 340ca65..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/Logical.java +++ /dev/null @@ -1,50 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Enum; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; -/** - *

逻辑运算符枚举.

- * - * @author fybug - * @version 0.0.3 - * @since PDF 1.2 - */ -@SuppressWarnings( "All" ) -public -enum Logical { - /**

并且.

*/ - AND(" AND "), - /**

或者.

*/ - OR(" OR "), - /**

异或.

*/ - XOR(" XOR "); - @NotNull final private String s; - - Logical(@NotNull final CharSequence s) { this.s = s.toString(); } - - @Override - @NotNull - public - String toString() { return s; } - - /** - *

转化字符串为条件关系枚举.

- * - * @param ss 要转化的字符串 - * - * @return default:{@link #AND} - */ - @Nullable - public static - Logical get(@Nullable final CharSequence ss) { - switch ( String.valueOf(ss).trim().toUpperCase() ) { - case "AND": - return AND; - case "OR": - return OR; - case "XOR": - return XOR; - default: - return AND; - } - } -} \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java deleted file mode 100644 index 6ef6e78..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/UpdataMode.java +++ /dev/null @@ -1,73 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Enum; -import com.sun.istack.internal.NotNull; -/** - *

更新模式.

- *

指定了当前数据的更新方式和内容

- * 所有键都需要包装和过滤 - * - * @author fybug - * @version 0.0.2 - * @since PDF 1.3 - */ -@SuppressWarnings( "all" ) -public -enum UpdataMode { - /** - *

更新为 Null 值.

- * 后面不需要值 - */ - NULL, - /**

更新为一个值.

*/ - VAL, - /** - *

插入一个值.

- * 不提供包装 - */ - OUT, - /** - *

使用赋值 sql 语句.

- * 不过滤 - */ - SQL, - /** - *

更新为自增.

- * 参数为自增的值 - */ - UP("+"), - /** - *

更新为自减.

- * 参数为自减的值 - */ - DOWN("-"), - /** - *

更新为自乘.

- * 参数为自乘的值 - */ - MUL("*"), - /** - *

更新为自除.

- * 参数为自除的值 - */ - EXCE("/"), - /** - *

更新为自取商.

- */ - DIV(" DIV "), - /**

更新为自取模.

*/ - MOD(" MOD "), - /**

按位取或.

*/ - BITOR("|"), - /**

按位取于.

*/ - BITAND("&"), - /**

按位异或.

*/ - BITXOR("^"), - /**

位左移.

*/ - BITLEFT("<<"), - /**

位右移.

*/ - BITRIGHT(">>"); - @NotNull public final String s; - - UpdataMode() { this(""); } - - UpdataMode(@NotNull final String s) { this.s = s; } -} diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/package-info.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/package-info.java deleted file mode 100644 index dc52388..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Enum/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - *

sql 标识枚举.

- *

用来代表 SQL 的相关状态标识

- * - * @author fybug - * @version 0.0.2 - * @since PDF 1.2 - */ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Enum; \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java deleted file mode 100644 index 7bee0ef..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Mysql.java +++ /dev/null @@ -1,196 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import java.sql.ResultSet; -import java.sql.SQLException; - -import fybug.nulll.bdpost.Instruct; -import fybug.nulll.pdfunctionlibrary.Annotations.CanSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.CObject; -import fybug.nulll.pdfunctionlibrary.Processing.sql.mysql.MysqlSql; -import fybug.nulll.pdfunctionlibrary.Processing.sql.mysql.Updata; -/** - *

mysql 数据库工具类.

- *
- * 使用该工具类进行 Sql 操作
- * 该工具会进行字段过滤和包装出 sql
- * 需使用 {@link #getDatabase(String, int, String, String, String)} 构造
- * 
- * - * @author fybug - * @version 0.0.4 - * @see Sql - * @since PDF 1.3 - */ -@SuppressWarnings( "all" ) -@CanSynchronized -public -class Mysql extends Sql { - // mysql 连接名 - @NotNull private static final String URL = "jdbc:mysql://"; - // JDBC 驱动名 - @NotNull private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; - - public - Mysql(@NotNull final Sql.database da) throws SQLException { - super(da); - } - - /** - *

输入要连接的数据库信息.

- *
-     * 需设置数据库所在地址和端口及数据库名
-     * 还有用户名和密码
-     * 
- * - * @param ip 数据库所在地址 - * @param port 端口 - * @param database 数据库名称 - * @param user 用户名 - * @param pass 密码 - * - * @return 获取赋值数据后的数据库对象 - */ - public static - Mysql getDatabase(@NotNull final String ip, final int port, @NotNull final String database, - @NotNull final String user, @NotNull final String pass) throws SQLException - { - try { - //加载驱动程序 - Class.forName(JDBC_DRIVER); - } catch ( Exception e ) { - //数据库驱动类异常处理 - throw new SQLException("Sorry,can`t find the Driver!"); - } - return new Mysql( - new Sql.database(URL + ip + ":" + Integer.toString(port) + "/" + database, user, - pass)); - } - - /** - *

输入要连接的数据库信息.

- *
-     * 需设置数据库所在地址和端口及数据库名
-     * 还有用户名和密码
-     * 
- * - * @param instruct 数据库信息指令

# ip 数据库所在地址
- * # port 端口
- * # base 数据库名称
- * # user 用户名
- * # pass 密码

- * - * @return 获取赋值数据后的数据库对象 - */ - public static - Mysql getDatabase(@NotNull final Instruct instruct) throws SQLException - { - final int port; - @NotNull final String ip, database, user, pass; - - try { - //加载驱动程序 - Class.forName(JDBC_DRIVER); - } catch ( Exception e ) { - //数据库驱动类异常处理 - throw new SQLException("Sorry,can`t find the Driver!"); - } - - port = Integer.parseInt(String.valueOf(instruct.getPostField("port").getField())); - ip = String.valueOf(instruct.getPostField("ip")); - database = String.valueOf(instruct.getPostField("base")); - user = String.valueOf("user"); - pass = String.valueOf("passer"); - - return new Mysql( - new Sql.database(URL + ip + ":" + Integer.toString(port) + "/" + database, user, - pass)); - } - - /** - *

执行 Mysql 语句.

- *
-     * 通过语句对象对查询方式进行包装
-     * 并保证安全和完整性
-     * 
- * - * @param sql 要执行的语句对象 - * - * @return 是否发生异常 - * - * @see MysqlSql - */ - @Nullable - public - boolean exe(@NotNull final MysqlSql sql) { - @NotNull final CObject lock = new CObject(); - try { - // 获取插入语句 - String sq = sql.toString(); - exe(lock, sq); - return true; - } catch ( Exception e ) { - e.printStackTrace(); - return false; - } finally { - close(lock); - } - } - - /** - *

更新数据库内容.

- *
-     * 通过传入的字段映射和查询条件对数据库中的数据进行更新
-     * 
- * - * @param updata 更新语句对象 - * - * @return 影响的行数 - * - * @see Updata - */ - public - int updata(@NotNull final Updata updata) - { - @NotNull final CObject lock = new CObject(); - try { - return updata(lock, updata.toString()); - } catch ( Exception e ) { - e.printStackTrace(); - throw new RuntimeException(e); - } finally { - close(lock); - } - } - - // 查 - - /** - *

查询数据库数据.

- *
-     * 查询功能使用直接 sql 进行
-     * 
- * - * @param sql 查询的 sql - * - * @return 查询的结果, 如果为 {@code Null} 则查询失败 - */ - @Nullable - public - ResultSet qurey(@NotNull final String sql) - { - @Nullable ResultSet set; - @NotNull final CObject lock = new CObject(); - - try { - // 获取查询数据 - set = get(lock, sql); - } catch ( Exception r ) { - throw new RuntimeException(r); - } finally { - } - - return set; - } -} diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java deleted file mode 100644 index 6450892..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Sql.java +++ /dev/null @@ -1,246 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import java.io.Serializable; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.HashMap; - -import fybug.nulll.pdfunctionlibrary.Annotations.CanSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.CObject; -/** - *

Sql 底层操作类.

- *
- * 用于执行查询语句
- * 不进行任何处理
- * 
- * - * @author fybug - * @version 0.0.3 - * @see database - * @since PDF 1.2 - */ -@SuppressWarnings( "All" ) -@CanSynchronized -public -class Sql implements AutoCloseable { - @NotNull protected Sql.database database; - @NotNull private HashMap con = new HashMap<>(); - @NotNull private HashMap statement = new HashMap<>(); - - public - Sql(@NotNull final database d) throws SQLException { database = d; } - - @NotNull - @Override - public - Object clone() throws CloneNotSupportedException { - Sql s = (Sql) super.clone(); - s.database = database; - s.con = new HashMap<>(); - s.statement = new HashMap<>(); - return s; - } - - @Override - protected - void finalize() throws Throwable { - super.finalize(); - close(); - } - - /** - *

使用语句查询数据.

- * - * @param cObject 事务标识 - * @param sql 查询语句 - * - * @return 返回的查询集合,如果执行失败则会返回{@code null} - */ - @Nullable - public - ResultSet get(@Nullable final CObject cObject, @NotNull final CharSequence sql) - throws SQLException - { - @Nullable ResultSet rs = null; - @NotNull Connection c = null; - @NotNull Statement s; - - if (!con.containsKey(cObject)) { - // getConnection()方法,连接数据库 - con.put(cObject, - DriverManager.getConnection(database.DB_URL, database.USER, database.PASS)); - } - c = con.get(cObject); - - if (!statement.containsKey(cObject)) { - statement.put(cObject, c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, - ResultSet.CONCUR_READ_ONLY, - ResultSet.HOLD_CURSORS_OVER_COMMIT)); - } - s = statement.get(cObject); - - //ResultSet类,用来存放获取的结果集!! - rs = s.executeQuery(sql.toString()); - return rs; - } - - /** - *

执行更新语句.

- * - * @param cObject 事务标识 - * @param sql 要执行的更新语句 - * - * @return 受影响的行数 - */ - public - int updata(@Nullable final CObject cObject, @NotNull final CharSequence sql) throws SQLException - { - @Nullable ResultSet rs = null; - @NotNull Connection c = null; - @NotNull Statement s; - - if (!con.containsKey(cObject)) { - // getConnection()方法,连接数据库 - con.put(cObject, - DriverManager.getConnection(database.DB_URL, database.USER, database.PASS)); - } - c = con.get(cObject); - - if (!statement.containsKey(cObject)) { - statement.put(cObject, - c.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, - ResultSet.HOLD_CURSORS_OVER_COMMIT)); - } - s = statement.get(cObject); - - return s.executeUpdate(sql.toString()); - } - - /** - *

执行语句.

- * - * @param cObject 事务标识 - * @param sql 查询语句 - * - * @return 执行是否成功 - */ - public - boolean exe(@Nullable final CObject cObject, @NotNull final CharSequence sql) - throws SQLException - { - @Nullable ResultSet rs = null; - @NotNull Connection c = null; - @NotNull Statement s; - - if (!con.containsKey(cObject)) { - // getConnection()方法,连接数据库 - con.put(cObject, - DriverManager.getConnection(database.DB_URL, database.USER, database.PASS)); - } - c = con.get(cObject); - - if (!statement.containsKey(cObject)) { - statement.put(cObject, - c.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, - ResultSet.HOLD_CURSORS_OVER_COMMIT)); - } - s = statement.get(cObject); - - try { - String sq = sql.toString(); - s.execute(sq); - } catch ( SQLException e ) { - e.printStackTrace(); - return false; - } - return true; - } - - /** - *

关闭对应的连接.

- * - * @param cObject 连接标识 - * - * @since PDF 1.3 - */ - public - void close(@Nullable final CObject cObject) { - @Nullable final Connection c = con.remove(cObject); - if (c != null) - try { - c.commit(); - c.close(); - } catch ( Throwable e ) { - } - - @Nullable final Statement s = statement.remove(cObject); - if (s != null) - try { - s.close(); - } catch ( Throwable e ) { - } - } - - /** - *

关闭所有连接.

- * 并释放事务映射表 - */ - @Override - public - void close() throws SQLException { - synchronized ( this ){ - for ( Connection c : con.values() ){ - try { - c.commit(); - c.close(); - } catch ( Throwable e ) { - } - } - con.clear(); - con = null; - - for ( Statement s : statement.values() ){ - try { - s.close(); - } catch ( Throwable e ) { - } - } - statement.clear(); - statement = null; - } - database = null; - } - - /** - *

数据库信息.

- *
-     * 用于存放数据库相关信息
-     * 
- * - * @author fybug - * @version 0.0.1 - * @since PDF 1.2 - */ - public static - class database implements Serializable { - // 数据库 URL - @NotNull final String DB_URL, // 数据库的用户名与密码,需要根据自己的设置 - USER, PASS; - - public - database(String db, String user, String pass) { - DB_URL = db; - USER = user; - PASS = pass; - } - } - - /* 过滤字段 */ - public final static String ENDMARK = ";", ANDPR = "&", GREATER = "<", LESS = ">", STR = "'", - NAME = "`", ANNOTATION = "--", ROD = "/", PERCENTAGE = "%"; -} diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java deleted file mode 100644 index 7609c42..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/InsertVal.java +++ /dev/null @@ -1,275 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Util; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import java.lang.ref.SoftReference; - -import fybug.nulll.bdpost.PostField; -import fybug.nulll.pdfunctionlibrary.Annotations.NoSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Enum.InserMode; -import fybug.nulll.pdfunctionlibrary.Util.DataMap; -import fybug.nulll.pdfunctionlibrary.Util.Map.ArrayMap; - -import static fybug.nulll.pdfunctionlibrary.Processing.FuckChar.fuckSql; -/** - *

插入操作段语句.

- *

用于保存插入的参数和类型,并生成 {@code (??, ??) VALUE (??, ??)} 语句

- * - * @author fybug - * @version 0.0.2 - * @see InserMode - * @since PDF 1.3 - */ -@NoSynchronized -@SuppressWarnings( "All" ) -public -class InsertVal extends ArrayMap> { - /**

插入空类型的指向缓存.

*/ - @NotNull private static SoftReference> nullCache = - new SoftReference<>(DataMap.getDataMap(InserMode.NULL, null)); - - /** - *

获取空类型指向的缓存.

- * 使用软引用 - * - * @return {@link InserMode#NULL} - */ - @NotNull - protected - DataMap getNullCache() { - @Nullable DataMap d = nullCache.get(); - if (d == null) - nullCache = new SoftReference<>(d = DataMap.getDataMap(InserMode.NULL, null)); - return d; - } - - /** - *

加入空插入.

- * - * @param name 要插入的属性名 - * - * @return this - * - * @see InserMode#NULL - */ - @NotNull - public - InsertVal addNull(@NotNull final String name) { - add(fuckSql(name).trim(), getNullCache()); - return this; - } - - /** - *

加入值插入.

- * - * @param name 要插入的属性名 - * @param val 要插入的属性,为空则转化为空插入 - * - * @return this - * - * @see InserMode#VAL - */ - @NotNull - public - InsertVal addVal(@NotNull final String name, @Nullable final String val) { - add(fuckSql(name).trim(), - val == null ? getNullCache() : DataMap.getDataMap(InserMode.VAL, fuckSql(val).trim())); - return this; - } - - /** - *

加入值插入.

- * 插入非字符串的值,不提供包装 - * - * @param name 要插入的属性名 - * @param val 要插入的属性,为空则转化为空插入 - * - * @return this - * - * @see InserMode#OUT - */ - @NotNull - public - InsertVal addOut(@NotNull final String name, @Nullable final Object val) { - add(fuckSql(name).trim(), - val == null ? getNullCache() : DataMap.getDataMap(InserMode.OUT, val)); - return this; - } - - /** - *

加入 sql 插入.

- * - * @param name 要插入的属性名 - * @param sql 要插入的 sql 语句,为空则转化为空插入 - * - * @return this - * - * @see InserMode#SQL - */ - @NotNull - public - InsertVal addSql(@NotNull final String name, @Nullable final String sql) { - add(fuckSql(name).trim(), - sql == null ? getNullCache() : DataMap.getDataMap(InserMode.SQL, sql)); - return this; - } - - // 检查数据并加入 - private - void checkData(@NotNull final StringBuilder key, @NotNull final StringBuilder val, - @NotNull final DataMap> d) - { - @NotNull final String name = d.getKey(); // 键名 - @NotNull DataMap dataMap = d.getValue(); - - // 加入键名 - key.append(name); - - /* 检查输入类型 */ - switch ( dataMap.getKey() ) { - case VAL: - try { - dataMap = ((DataMap) dataMap.clone()).setValue( - "'" + dataMap.getValue() + "'"); - } catch ( CloneNotSupportedException e ) { - } - case OUT: - case SQL: - val.append(dataMap.getValue()); - break; - case NULL: - val.append("null"); - break; - } - } - - /** - *

转化为插入属性的语句.

- * - * @return {@code (??) VALUE (??)} - */ - @NotNull - @Override - public - String toString() { - @NotNull final StringBuilder inst = new StringBuilder("("), val = new StringBuilder( - ") VALUES ("); - - /* tmp */ - @Nullable DataMap> d; - - final int nowmark = mark; // 记录当前标记 - mark = 0; - - /* 取出数据并包装为 Sql */ - for ( boolean b = true; (d = get()) != null; next() ){ - /* 检查是否是第一个 */ - if (!b) { - inst.append(", "); - val.append(", "); - } else { - b = false; - } - - checkData(inst, val, d); - } - - mark = nowmark; - - // 收尾 - inst.ensureCapacity(val.length() + inst.length() + 1); - inst.append(val); - - val.setLength(0); - val.trimToSize(); - - inst.append(")"); - return inst.toString(); - } - - /** - *

解析 BDPos 格式的数据.

- * - * @param post {@link InserMode}&field
- * {@link InserMode}&field - * - * @see #passing(String[], InsertVal) - * @since PDF 1.3 expander 1 - */ - @NotNull - public static - InsertVal passingBDPos(@NotNull final PostField post) { - @NotNull final InsertVal set = new InsertVal(); - @Nullable final Object o = post.getField(); - - /* 多记录 */ - if (post.isMore()) { - for ( int i = 0; i < ((Object[]) o).length; i++ ){ - if (((Object[]) o)[i].getClass().isArray()) { - passing((String[]) ((Object[]) o)[i], set); - } - } - } else - /* 多内容 */ - if (o.getClass().isArray()) { - passing((String[]) o, set); - } - - return set; - } - - // 分发插入消息 - private static - void passing(String[] s, InsertVal insertVal) { - if (s.length == 0) - return; - - InserMode im = InserMode.valueOf(s[0]); - switch ( im ) { - case NULL: - insertVal.addNull(s[1]); - break; - case VAL: - insertVal.addVal(s[1], s[2]); - break; - case OUT: - insertVal.addOut(s[1], s[2]); - break; - case SQL: - insertVal.addSql(s[1], s[2]); - break; - } - } - - /** - *

转化为 BDPos 属性对象.

- * - * @return {@link PostField} - * - * @since PDF 1.3 expander 1 - */ - public - PostField toBDPos() { - PostField postField = new PostField(); - postField.name = "Inserval"; - StringBuilder stringBuilder = new StringBuilder(); - final int nowmark = mark; // 记录当前标记 - mark = 0; - DataMap dos; - - for ( DataMap> d; (d = get()) != null; next() ){ - dos = d.getValue(); - stringBuilder.append(dos.getKey()).append('&').append(d.getKey()).append('&').append( - dos.getValue()).append('\n'); - } - stringBuilder.deleteCharAt(stringBuilder.length() - 1); - - postField.loadField(stringBuilder.toString()); - - mark = nowmark; - - stringBuilder.setLength(0); - stringBuilder.trimToSize(); - return postField; - } -} \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java deleted file mode 100644 index 1554b86..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/UpDataVal.java +++ /dev/null @@ -1,416 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Util; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import java.lang.ref.SoftReference; - -import fybug.nulll.bdpost.PostField; -import fybug.nulll.pdfunctionlibrary.Annotations.NoSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Enum.UpdataMode; -import fybug.nulll.pdfunctionlibrary.Util.DataMap; -import fybug.nulll.pdfunctionlibrary.Util.Map.ArrayMap; - -import static fybug.nulll.pdfunctionlibrary.Processing.FuckChar.fuckSql; -/** - *

更新操作段语句.

- *

用于保存更新的参数和类型,并生成 {@code ??=??, ??=??} 语句

- * - * @author fybug - * @version 0.0.2 - * @see UpdataMode - * @since PDF 1.3 - */ -@NoSynchronized -@SuppressWarnings( "All" ) -public -class UpDataVal extends ArrayMap> { - /**

插入空类型的指向缓存.

*/ - @NotNull private transient static SoftReference> nullCache = - new SoftReference<>(DataMap.getDataMap(UpdataMode.NULL, null)); - - /** - *

获取空类型指向的缓存.

- * 使用软引用 - * - * @return {@link UpdataMode#NULL} - */ - @NotNull - protected - DataMap getNullCache() { - @Nullable DataMap d = nullCache.get(); - if (d == null) - nullCache = new SoftReference<>(d = DataMap.getDataMap(UpdataMode.NULL, null)); - return d; - } - - /** - *

检查字段类型,并进行过滤.

- * - * @param o 要检查的字段 - * - * @return 检查并进行相应处理的字段 - */ - @NotNull - private - String checkFidle(@Nullable final Object o) { - if (o instanceof String) - return '\'' + fuckSql(o.toString()).trim() + '\''; - - return fuckSql(String.valueOf(o)).trim(); - } - - /** - *

更新为空值.

- * - * @param name 要更新的属性名 - * - * @return this - * - * @see UpdataMode#NULL - */ - @NotNull - public - UpDataVal addNull(@NotNull final String name) { - add(fuckSql(name).trim(), getNullCache()); - return this; - } - - /** - *

加入值更新.

- * - * @param name 要更新的属性名 - * @param val 要更新的属性,为空则转化为空更新 - * - * @return this - * - * @see UpdataMode#VAL - */ - @NotNull - public - UpDataVal addVal(@NotNull final String name, @Nullable final String val) { - add(fuckSql(name).trim(), - val == null ? getNullCache() : DataMap.getDataMap(UpdataMode.VAL, fuckSql(val).trim())); - return this; - } - - /** - *

加入值更新.

- * 插入非字符串的值,不提供包装 - * - * @param name 要更新的属性名 - * @param val 要更新的属性,为空则转化为空更新 - * - * @return this - * - * @see UpdataMode#OUT - */ - @NotNull - public - UpDataVal addOut(@NotNull final String name, @Nullable final Object val) { - add(fuckSql(name).trim(), - val == null ? getNullCache() : DataMap.getDataMap(UpdataMode.OUT, val)); - return this; - } - - /** - * /** - *

加入 sql 更新.

- * - * @param name 要更新的属性名 - * @param sql 要更新的 sql 语句,为空则转化为空更新 - * - * @return this - * - * @see UpdataMode#SQL - */ - @NotNull - public - UpDataVal addSql(@NotNull final String name, @Nullable final String sql) { - add(fuckSql(name).trim(), - sql == null ? getNullCache() : DataMap.getDataMap(UpdataMode.SQL, sql)); - return this; - } - - /** - *

加入自增.

- * - * @param name 要更新的属性名 - * @param val 自增的量 - * - * @return this - * - * @see UpdataMode#UP - */ - @NotNull - public - UpDataVal addUp(@NotNull final String name, final Object val) { - add(fuckSql(name).trim(), DataMap.getDataMap(UpdataMode.UP, val)); - return this; - } - - /** - *

加入自减.

- * - * @param name 要更新的属性名 - * @param val 自减的量 - * - * @return this - * - * @see UpdataMode#DOWN - */ - @NotNull - public - UpDataVal addDown(@NotNull final String name, final Object val) { - add(fuckSql(name).trim(), DataMap.getDataMap(UpdataMode.DOWN, val)); - return this; - } - - /** - *

加入自除.

- * - * @param name 要更新的属性名 - * @param val 自除的量 - * - * @return this - * - * @see UpdataMode#EXCE - */ - @NotNull - public - UpDataVal addExce(@NotNull final String name, final Object val) { - add(fuckSql(name).trim(), DataMap.getDataMap(UpdataMode.EXCE, val)); - return this; - } - - /** - *

加入取值.

- * - * @param name 要更新的属性名 - * @param val 对应的属性 - * @param div 求商还是求模 - * - * @return this - * - * @see UpdataMode#DIV - * @see UpdataMode#MOD - */ - @NotNull - public - UpDataVal addExce(@NotNull final String name, final Object val, final boolean div) { - add(fuckSql(name).trim(), DataMap.getDataMap(div ? UpdataMode.DIV : UpdataMode.MOD, val)); - return this; - } - - /** - *

加入自乘.

- * - * @param name 要更新的属性名 - * @param val 自乘的量 - * - * @return this - * - * @see UpdataMode#MUL - */ - @NotNull - public - UpDataVal addMul(@NotNull final String name, final Object val) { - add(fuckSql(name).trim(), DataMap.getDataMap(UpdataMode.MUL, val)); - return this; - } - - /** - *

加入位运算.

- * - * @param name 要更新的属性名 - * @param bit 运算方式 - * @param val 量 - * - * @return this - * - * @see UpdataMode - */ - @NotNull - public - UpDataVal addBit(@NotNull final String name, @NotNull final UpdataMode bit, final Object val) { - add(fuckSql(name).trim(), DataMap.getDataMap(bit, val)); - return this; - } - - // 检查数据并加入 - private - void checkData(@NotNull final StringBuilder key, - @NotNull final DataMap> d) - { - @NotNull final String name = d.getKey(); // 键名 - @NotNull DataMap dataMap = d.getValue(); - - // 加入键名 - key.ensureCapacity(key.length() + name.length() + 3); - key.append('`').append(name).append('`').append("="); - - /* 检查输入类型 */ - switch ( dataMap.getKey() ) { - case VAL: - case OUT: - try { - dataMap = ((DataMap) dataMap.clone()).setValue( - checkFidle(dataMap.getValue())); - } catch ( CloneNotSupportedException e ) { - } - case SQL: - key.append(dataMap.getValue()); - break; - case NULL: - key.append("null"); - break; - default: - key.append("`" + name + "`").append(dataMap.getKey().s).append( - checkFidle(dataMap.getValue())); - break; - } - } - - /** - *

转化为更新属性的语句.

- * - * @return {@code ??=??, ??=??} - */ - @NotNull - @Override - public - String toString() { - @NotNull final StringBuilder inst = new StringBuilder(); - - /* tmp */ - @Nullable DataMap> d; - - final int nowmark = mark; // 记录当前标记 - - /* 取出数据并包装为 Sql */ - for ( boolean b = true; (d = get()) != null; next() ){ - /* 检查是否是第一个 */ - if (!b) { - inst.append(", "); - } else { - b = false; - } - - checkData(inst, d); - } - - mark = nowmark; - - return inst.toString(); - } - - /** - *

解析 BDPos 格式的数据.

- * - * @param post {@link UpdataMode}&field
- * {@link UpdataMode}&field - * - * @see #passing(String[], WhereSet) - * @since PDF 1.3 expander 1 - */ - @NotNull - public static - UpDataVal passingBDPos(@NotNull final PostField post) { - @NotNull final UpDataVal set = new UpDataVal(); - @Nullable final Object o = post.getField(); - - /* 多记录 */ - if (post.isMore()) { - for ( int i = 0; i < ((Object[]) o).length; i++ ){ - if (((Object[]) o)[i].getClass().isArray()) { - passing((String[]) ((Object[]) o)[i], set); - } - } - } else - /* 多内容 */ - if (o.getClass().isArray()) { - passing((String[]) o, set); - } - - return set; - } - - // 分发指令 - private static - void passing(String[] s, UpDataVal insertVal) { - if (s.length == 0) - return; - - UpdataMode im = UpdataMode.valueOf(s[0]); - switch ( im ) { - case NULL: - insertVal.addNull(s[1]); - break; - case VAL: - insertVal.addVal(s[1], s[2]); - break; - case OUT: - insertVal.addOut(s[1], s[2]); - break; - case SQL: - insertVal.addSql(s[1], s[2]); - break; - case UP: - insertVal.addUp(s[1], s[2]); - break; - case DOWN: - insertVal.addDown(s[1], s[2]); - break; - case EXCE: - insertVal.addExce(s[1], s[2]); - break; - case DIV: - insertVal.addExce(s[1], s[2], true); - break; - case MOD: - insertVal.addExce(s[1], s[2], false); - break; - case MUL: - insertVal.addMul(s[1], s[2]); - break; - case BITOR: - case BITAND: - case BITXOR: - case BITLEFT: - case BITRIGHT: - insertVal.addBit(s[1], im, s[2]); - break; - } - } - - /** - *

转化为 BDPos 属性对象.

- * - * @return {@link PostField} - * - * @since PDF 1.3 expander 1 - */ - public - PostField toBDPos() { - PostField postField = new PostField(); - postField.name = "Updateval"; - StringBuilder stringBuilder = new StringBuilder(); - final int nowmark = mark; // 记录当前标记 - mark = 0; - DataMap dos; - - for ( DataMap> d; (d = get()) != null; next() ){ - dos = d.getValue(); - stringBuilder.append(dos.getKey()).append('&').append(d.getKey()).append('&').append( - dos.getValue()).append('\n'); - } - stringBuilder.deleteCharAt(stringBuilder.length() - 1); - - postField.loadField(stringBuilder.toString()); - - mark = nowmark; - - stringBuilder.setLength(0); - stringBuilder.trimToSize(); - return postField; - } -} \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/WhereSet.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/WhereSet.java deleted file mode 100644 index abe02e0..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/WhereSet.java +++ /dev/null @@ -1,914 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Util; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import java.io.Serializable; -import java.util.LinkedList; - -import fybug.nulll.bdpost.PostField; -import fybug.nulll.pdfunctionlibrary.Annotations.NoSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.FuckChar; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Enum.Comparison; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Enum.Logical; -import fybug.nulll.pdfunctionlibrary.Util.DataMap; -import fybug.nulll.pdfunctionlibrary.lang.Cleanable; -import fybug.nulll.pdfunctionlibrary.lang.ConsistentField; - -import static fybug.nulll.pdfunctionlibrary.Processing.FuckChar.fuckSql; -/** - *

数据库条件集.

- *
- * 存放 sql 查询条件的对象,使用字符串进行缓存
- * 可使用内部指定参数进行添加,将会过滤输入的值
- * 或直接添加 sql 语句,会接在当前语句后面,但不过滤
- * 
- *
插入的语句展示符号说明:
- * ( * ) 代表着使用一个枚举对象作为这里的参数,通常是固定的语句
- * [ * ] 代表着这个语句会根据你输入的参数决定是否出现,通常为取反语句
- * [ * | * ] 代表这这个语句会根据你输入的参数决定使用哪个参数
- * \(\) 代表这个不是上面的括号,和转义符一样
- * \[\] 同上
- * 大写代表 sql 语句
- * 小写代表 变量
- * 
- * - * @author fybug - * @version 0.0.5 - * @see Logical - * @see Comparison - * @since PDF 1.3 - */ -@NoSynchronized -@SuppressWarnings( "All" ) -public -class WhereSet extends ConsistentField implements Cleanable, Serializable, Cloneable { - @NotNull private LinkedList> dataMaps = new LinkedList<>(); - - @Override - protected - boolean consistent(@Nullable final Object obj) - { return obj.toString().equals(toString()); } - - @Override - @NotNull - public - String toString() { - @NotNull final StringBuilder sql = new StringBuilder(); - - getWhere(this, sql); - - sql.trimToSize(); - return sql.toString(); - } - - @Override - protected - void finalize() throws Throwable { - super.finalize(); - dataMaps.clear(); - } - - @NotNull - @Override - public - Object clone() throws CloneNotSupportedException { - @NotNull final WhereSet s = (WhereSet) super.clone(); - - s.dataMaps = (LinkedList>) dataMaps.clone(); - - return s; - } - - /* - * 释放 - */ - - @Override - public - void clean() { dataMaps.clear(); } - - @Override - public - void free() { clean(); } - - @Override - public - void close() { - free(); - dataMaps = null; - } - - /* - * check - */ - - /** - *

检查字段类型,并进行过滤.

- * - * @param o 要检查的字段 - * - * @return 检查并进行相应处理的字段 - */ - @NotNull - static - String checkFidle(@Nullable final Object o) { - if (o instanceof String) - return '\'' + fuckSql(o.toString()).trim() + '\''; - - return fuckSql(String.valueOf(o)).trim(); - } - - // 加入关系 - @NotNull - private - StringBuilder addRelation(@NotNull final Logical logical, @NotNull final StringBuilder set) { - if (set.length() > 0) - set.append(logical); - return set; - } - - /* - * Add - */ - - /** - *

添加等值条件.

- *
-     * 添加条件如下 {@code "( Logical ) key [ ! ]= val"}
-     * 即添加一个检查该键是否等于该值的条件
-     * 
- * - * @param logical 与前面条件的关系 - * @param key 键 - * @param val 要等于的值,如不是字符串类型则不会包装 - * @param negation 是否取反,即使用 != - * - * @return this - */ - @NotNull - public - WhereSet addEqual(@NotNull final Logical logical, @NotNull String key, - @Nullable final Object val, final boolean negation) - { - @NotNull String ss[] = new String[4]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.EQUAL, ss); - - ss[0] = logical.toString(); - ss[1] = '`' + fuckSql(key).trim() + '`'; - ss[2] = checkFidle(val); - ss[3] = Boolean.toString(negation); - - dataMaps.add(da); - - return this; - } - - /** - *

添加键值逻辑条件.

- *
-     * 添加条件如下 {@code "( Logical ) key ( Comparison ) val"}
-     * 与等值条件不同的是,你可以指定键和值的逻辑运算符
-     * 
- * - * @param logical 与前面条件的关系 - * @param key 键 - * @param how 逻辑运算符 - * @param val 要判断的值,如不是字符串则不会进行包装 - * - * @return this - */ - @NotNull - public - WhereSet addWhere(@NotNull final Logical logical, @NotNull String key, - @NotNull final Comparison how, @NotNull final Object val) - { - @NotNull String ss[] = new String[4]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.WHERE, ss); - - ss[0] = logical.toString(); - ss[1] = '`' + fuckSql(key).trim() + '`'; - ss[2] = how.toString(); - ss[3] = checkFidle(val); - - dataMaps.add(da); - - return this; - } - - /** - *

添加空检查.

- *
-     * 添加条件如下 {@code "( Logical ) key IS [ NOT ] NULL"}
-     * 
- * - * @param logical 与前面的条件的关系 - * @param key 要检查的键 - * @param negation 取反 - * - * @return this - */ - @NotNull - public - WhereSet addNullCheck(@NotNull final Logical logical, @NotNull String key, - final boolean negation) - { - @NotNull String ss[] = new String[3]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.NULLCHECK, ss); - - ss[0] = logical.toString(); - ss[1] = '`' + fuckSql(key).trim() + '`'; - ss[2] = Boolean.toString(negation); - - dataMaps.add(da); - - return this; - } - - /** - *

添加范围检查.

- *
-     * 添加条件如下 {@code "( Logical ) key [ NOT ] BETWEEN val AND val"}
-     * 
- * - * @param logical 与前面的条件的关系 - * @param key 要检查的键 - * @param num1 开始范围,如不是字符串则不会进行包装 - * @param num2 结束范围,如不是字符串则不会进行包装 - * @param negation 取反 - * - * @return this - */ - @NotNull - public - WhereSet addBetween(@NotNull final Logical logical, @NotNull String key, @NotNull Object num1, - @NotNull Object num2, final boolean negation) - { - @NotNull String ss[] = new String[5]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.BETWEEN, ss); - - ss[0] = logical.toString(); - ss[1] = '`' + fuckSql(key).trim() + '`'; - ss[2] = checkFidle(num1); - ss[3] = checkFidle(num2); - ss[4] = Boolean.toString(negation); - - dataMaps.add(da); - - return this; - } - - /** - *

加入列举检查.

- *
-     * 添加条件如下 {@code "( Logical ) key [ NOT ] IN (val, val)"}
-     * 
- * - * @param logical 与前面的条件的关系 - * @param key 要检查的键 - * @param negation 是否取反 - * @param val 列举的值,如不是字符串则不会进行包装 - * - * @return this - */ - @NotNull - public - WhereSet addIn(@NotNull final Logical logical, @NotNull String key, final boolean negation, - @NotNull final Object... val) - { - @NotNull final LinkedList ls = new LinkedList<>(); - ls.add(logical.toString()); - ls.add('`' + fuckSql(key).trim() + '`'); - ls.add(Boolean.toString(negation)); - - /* 加入列表组 */ - for ( int i = 0, lenght = val.length; i < lenght; i++ ){ - ls.add(checkFidle(val[i])); - } - - String[] ss = new String[ls.size()]; - ls.toArray(ss); - @NotNull final DataMap dataMap = DataMap.getDataMap(WhereEnum.IN, ss); - - dataMaps.add(dataMap); - - return this; - } - - /** - *

加入模糊查询.

- *
-     * 添加条件如下 {@code "( Logical ) key [ NOT ] LIKE val"}
-     * 
- * - * @param logical 与前面的条件的关系 - * @param key 要检查的键 - * @param val 条件,不支持除字符串以外的类型 - * @param negation 是否取反 - * - * @return this - */ - @NotNull - public - WhereSet addLike(@NotNull final Logical logical, @NotNull String key, @NotNull final String val, - final boolean negation) - { - @NotNull String ss[] = new String[4]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.LIKE, ss); - - ss[0] = logical.toString(); - ss[1] = '`' + fuckSql(key).trim() + '`'; - ss[2] = val; - ss[3] = Boolean.toString(negation); - - dataMaps.add(da); - - return this; - } - - /** - *

加入正则查询.

- *
-     * 添加条件如下 {@code "( Logical ) [ NOT ( ] key REGEXP val [ ) ]"}
-     * 
- * - * @param logical 与前面的条件的关系 - * @param key 要检查的键 - * @param val 正则,不支持除字符串以外的类型 - * @param negation 是否取反 - * - * @return this - */ - @NotNull - public - WhereSet addRegexp(@NotNull final Logical logical, @NotNull String key, - @NotNull final String val, final boolean negation) - { - @NotNull String ss[] = new String[4]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.REGEXP, ss); - - ss[0] = logical.toString(); - ss[1] = '`' + fuckSql(key).trim() + '`'; - ss[2] = val; - ss[3] = Boolean.toString(negation); - - dataMaps.add(da); - - return this; - } - - /** - *

添加 Sql 语句.

- *
-     * 添加的语句在 Where 后,请不要添加条件语句以外的语句
-     * 
- * - * @param logical 与前面语句的关系 - * @param sql 要添加的 Sql 语句,不支持除字符串以外的类型,并且不进行过滤和包装 - * - * @return this - */ - @NotNull - public - WhereSet addSql(@NotNull final Logical logical, @NotNull final String sql) { - @NotNull String ss[] = new String[2]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.SQL, ss); - - ss[0] = logical.toString(); - ss[1] = sql; - - dataMaps.add(da); - - return this; - } - - /** - *

添加整合条件语句.

- *
-     * 即使用 () 将语句包起来,可提高该串语句的优先度
-     * 添加条件如下 {@code "( Logical ) [ NOT ] \( ( WhereSet ) \)"}
-     * 
- * - * @param logical 与前面语句的关系 - * @param whereSet 要插入的语句,不会进行过滤和包装 - * @param negation 是否取反 - * - * @return this - */ - @NotNull - public - WhereSet addMoreSql(@NotNull final Logical logical, @NotNull final WhereSet whereSet, - final boolean negation) - { - @NotNull String ss[] = new String[3]; - @NotNull DataMap da = DataMap.getDataMap(WhereEnum.MORESQL, ss); - - ss[0] = logical.toString(); - - @Nullable final String s = whereSet.get().trim(); // 语句缓存 - if (s == null) - return this; - ss[1] = s; - - ss[2] = Boolean.toString(negation); - - dataMaps.add(da); - - return this; - } - - /** - *

泛添加.

- *
-     * 根据传入的枚举选择对应的方法
-     * 使用反射执行
-     * 
- * - * @param whereEnum 要添加的条件类型枚举 - * @param os 该方法的参数 - * - * @since PDF 1.3 expander 1 - */ - @NotNull - public - WhereSet exe(@NotNull final WhereEnum whereEnum, @NotNull final Object... os) { - @NotNull String name = ""; - - switch ( whereEnum ) { - case EQUAL: - name = "addEqual"; - // 反射执行 - addEqual((Logical) os[0], (String) os[1], os[2], (boolean) os[3]); - break; - case WHERE: - name = "addWhere"; - addWhere((Logical) os[0], (String) os[1], (Comparison) os[2], os[3]); - break; - case NULLCHECK: - name = "addNullCheck"; - addNullCheck((Logical) os[0], (String) os[1], (boolean) os[2]); - break; - case BETWEEN: - name = "addBetween"; - addBetween((Logical) os[0], (String) os[1], os[2], os[3], (boolean) os[4]); - break; - case IN: - name = "addIn"; - addIn((Logical) os[0], (String) os[1], (boolean) os[2], os[3]); - break; - case LIKE: - name = "addLike"; - addLike((Logical) os[0], (String) os[1], (String) os[2], (boolean) os[3]); - break; - case REGEXP: - name = "addRegexp"; - addRegexp((Logical) os[0], (String) os[1], (String) os[2], (boolean) os[3]); - break; - case SQL: - name = "addSql"; - addSql((Logical) os[0], (String) os[1]); - break; - case MORESQL: - name = "addMoreSql"; - addMoreSql((Logical) os[0], (WhereSet) os[1], (boolean) os[2]); - break; - } - - return this; - } - - /* - * toString - */ - - /** - *

获取语句.

- * - * @return 没参数为 {@code Null} - */ - @Nullable - private - String get() { - if (dataMaps.size() == 0) - return null; - @NotNull final StringBuilder stringBuilder = new StringBuilder(); - - for ( DataMap d : dataMaps ){ - swWhere(d, stringBuilder); - } - - stringBuilder.trimToSize(); - return stringBuilder.toString(); - } - - private - void swWhere(DataMap ds, StringBuilder sql) { - final - class pas { - private - void eq(String[] d, StringBuilder sql) { - boolean b = Boolean.parseBoolean(d[3]); - addRelation(Logical.get(d[0]), sql).ensureCapacity( - sql.length() + d[1].length() + d[2].length() + 2); - - sql.append(d[1]).append(b ? "!" : "").append("=").append(d[2]); - } - - private - void wh(String[] d, StringBuilder sql) { - addRelation(Logical.get(d[0]), sql).ensureCapacity( - sql.length() + d[1].length() + d[2].length() + d[3].length()); - - sql.append(d[1]).append(d[2]).append(d[3]); - } - - private - void nu(String[] d, StringBuilder sql) { - boolean b = Boolean.parseBoolean(d[2]); - addRelation(Logical.get(d[0]), sql).ensureCapacity( - sql.length() + d[1].length() + 12); - - sql.append(d[1]).append(" IS ").append(b ? "NOT " : "").append("NULL"); - } - - private - void bw(String[] d, StringBuilder sql) { - boolean b = Boolean.parseBoolean(d[4]); - addRelation(Logical.get(d[0]), sql).ensureCapacity( - sql.length() + d[1].length() + d[2].length() + d[3].length() + 20); - - sql.append('(').append(d[1]).append(b ? " NOT" : "").append(" BETWEEN ").append( - d[2]).append(" AND ").append(d[3]).append(')'); - } - - private - void in(String[] d, StringBuilder sql) { - boolean b = Boolean.parseBoolean(d[2]); - - addRelation(Logical.get(d[0]), sql).ensureCapacity(sql.length() + d[1].length()); - sql.append(d[1]).append(b ? " NOT" : "").append(" IN ("); - - for ( int i = 3; i < d.length; i++ ){ - if (i != 3) { - sql.ensureCapacity(sql.length() + d[i].length() + 2); - sql.append(", "); - } - sql.append(d[i]); - } - - sql.append(')'); - } - - private - void li(String[] d, StringBuilder sql) { - boolean b = Boolean.parseBoolean(d[3]); - addRelation(Logical.get(d[0]), sql).ensureCapacity( - sql.length() + d[1].length() + d[2].length() + 10); - - sql.append(d[1]).append(b ? " NOT" : "").append(" LIKE ").append(d[2]); - } - - private - void re(String[] d, StringBuilder sql) { - boolean b = Boolean.parseBoolean(d[3]); - addRelation(Logical.get(d[0]), sql).ensureCapacity( - sql.length() + d[1].length() + d[2].length() + 12); - - sql.append(d[1]).append(b ? " NOT" : "").append(" REGEXP ").append(d[2]); - } - - private - void sql(String[] d, StringBuilder sql) - { addRelation(Logical.get(d[0]), sql).append(d[1]); } - - private - void more(String[] d, StringBuilder sql) { - boolean b = Boolean.parseBoolean(d[2]); - addRelation(Logical.get(d[0]), sql).ensureCapacity( - sql.length() + d[1].length() + 6); - - sql.append(b ? "NOT " : "").append('(').append(d[1]).append(')'); - } - } - pas pa = new pas(); - /* 分发 */ - switch ( ds.getKey() ) { - case EQUAL: - pa.eq(ds.getValue(), sql); - break; - case WHERE: - pa.wh(ds.getValue(), sql); - break; - case NULLCHECK: - pa.nu(ds.getValue(), sql); - break; - case BETWEEN: - pa.bw(ds.getValue(), sql); - break; - case IN: - pa.in(ds.getValue(), sql); - break; - case LIKE: - pa.li(ds.getValue(), sql); - break; - case REGEXP: - pa.re(ds.getValue(), sql); - break; - case SQL: - pa.sql(ds.getValue(), sql); - break; - case MORESQL: - pa.more(ds.getValue(), sql); - break; - } - } - - /** - *

获取查询条件.

- *
-     * 获取条件集里面的条件并添加到传入的字符缓存区
-     * 
- * - * @param whele 要提取的条件集 - * @param sql 要添加的字符缓冲区 - */ - public static - void getWhere(@NotNull final WhereSet whele, @NotNull final StringBuilder sql) - { - // 条件语句 - @Nullable final String s = whele.get(); - if (s == null) - return; - - sql.ensureCapacity(7 + s.length() + sql.length()); - sql.append(" WHERE ").append(s); - } - - /* - * BDPos - */ - - /** - *

转化为 BDPos 属性对象.

- * - * @return {@link PostField} - * - * @since PDF 1.3 expander 1 - */ - public - PostField toBDPos() { - if (dataMaps.size() == 0) - return null; - @NotNull final PostField postField = new PostField(); - postField.name = "where"; - StringBuilder s = new StringBuilder(); - String[] ss; - - for ( DataMap d : dataMaps ){ - if (d.getKey() == WhereEnum.MORESQL) { - continue; - } - - s.append(d.getKey()).append('&'); - ss = d.getValue(); - - for ( int i = 0, leng = ss.length; i < leng; i++ ){ - if (ss[i].startsWith("'")) { - ss[i] = ss[i].substring(1, ss[i].length() - 1); - } else if (ss[i].startsWith("`")) { - ss[i] = ss[i].substring(1, ss[i].length() - 1); - } - - s.append(ss[i]).append('&'); - } - - s.setCharAt(s.length() - 1, '\n'); - } - - s.deleteCharAt(s.length() - 1); - s.trimToSize(); - - postField.loadField(s.toString()); - - s.setLength(0); - s.trimToSize(); - - return postField; - } - - /** - *

解析 BDPos 格式的数据.

- * - * @param post {@link WhereEnum}&field&field
- * {@link WhereEnum}&field&field - * - * @see #passing(String[], WhereSet) - * @since PDF 1.3 expander 1 - */ - @NotNull - public static - WhereSet passingBDPos(@NotNull final PostField post) { - @NotNull final WhereSet set = new WhereSet(); - @Nullable final Object o = post.getField(); - - /* 多记录 */ - if (post.isMore()) { - for ( int i = 0; i < ((Object[]) o).length; i++ ){ - if (((Object[]) o)[i].getClass().isArray()) { - passing((String[]) ((Object[]) o)[i], set); - } - } - } else - /* 多内容 */ - if (o.getClass().isArray()) { - passing((String[]) o, set); - } - - return set; - } - - /** - *

解析内容.

- *
-     * 将运行解析好的 BDPos 的指令
-     * 添加条件语句段
-     * 
- * - * @see WhereEnum - */ - private static - void passing(String[] s, WhereSet set) { - if (s.length == 0) - return; - - WhereEnum whereEnum = WhereEnum.get(s[0]); - if (whereEnum == null) { - throw new RuntimeException("操作枚举不正确"); - } - - /* 根据类型进行转化 */ - @NotNull Object[] o; - switch ( whereEnum ) { - case EQUAL: { - // 获取属性名 - @NotNull final String key = fuckSql(s[2]); - // 获取内容 - @NotNull final String val = fuckSql(s[3]); - final boolean b = Boolean.parseBoolean(s[4].trim()); - - o = new Object[]{Logical.get(s[1]), key, val, b}; - } - break; - case WHERE: { - // 获取属性名 - @NotNull final String key = fuckSql(s[2]); - - /* 获取逻辑关系符 */ - @Nullable Comparison comparison = Comparison.getMde(s[3].trim()); - if (comparison == null) - comparison = Comparison.EQULE; - - // 获取内容 - @NotNull final String val = fuckSql(s[4]); - - o = new Object[]{Logical.get(s[1]), key, comparison, val}; - } - break; - case NULLCHECK: { - // 获取属性名 - @NotNull final String key = fuckSql(s[2]); - final Boolean b = Boolean.parseBoolean(s[3].trim()); - - o = new Object[]{Logical.get(s[1]), key, b}; - } - break; - case BETWEEN: { - // 获取属性名 - @NotNull final String key = fuckSql(s[2]); - - @NotNull final String ps1 = fuckSql(s[3]), ps2 = fuckSql(s[4]); - final Boolean b = Boolean.parseBoolean(s[5].trim()); - - o = new Object[]{Logical.get(s[1]), key, ps1, ps2, b}; - } - break; - case IN: { - @NotNull final String key = fuckSql(s[2]); // 属性名 - final Boolean b = Boolean.parseBoolean(s[3].trim()); // 是否取反 - - /* 取出变长参数 */ - @NotNull LinkedList stringLinkedList = new LinkedList<>(); - for ( int i = 4; i < s.length; i++ ){ - stringLinkedList.add(fuckSql(s[i])); - } - @NotNull final String[] sa = new String[stringLinkedList.size()]; - stringLinkedList.toArray(sa); - stringLinkedList.clear(); - - o = new Object[]{Logical.get(s[1]), key, b, sa}; - } - break; - case LIKE: { - @NotNull final String key = fuckSql(s[2]); - @NotNull final String like = fuckSql(s[3]); - final Boolean b = Boolean.parseBoolean(s[4].trim()); - - o = new Object[]{Logical.get(s[1]), key, like, b}; - } - break; - case REGEXP: { - @NotNull final String key = fuckSql(s[2]); - @NotNull final String rex = s[3]; - final Boolean b = Boolean.parseBoolean(s[4]); - - o = new Object[]{Logical.get(s[1]), key, rex, b}; - } - break; - case SQL: - o = new Object[]{Logical.get(s[1]), s[2]}; - break; - case MORESQL: - o = new Object[]{Logical.get(s[1]), WhereSet.passingBDPos( - new PostField(FuckChar.refuckBDPos(s[2]))), Boolean.parseBoolean( - s[3].trim())}; - break; - default: - o = null; - } - - set.exe(whereEnum, o); - } - - /** - *

条件添加枚举.

- * - * @author fybug - * @version 0.0.1 - * @since PDF 1.3 expander 1 - */ - public static - enum WhereEnum { - /** @see WhereSet#addEqual(Logical, String, Object, boolean) */ - EQUAL("equal"), - /** @see WhereSet#addWhere(Logical, String, Comparison, Object) */ - WHERE("where"), - /** @see WhereSet#addNullCheck(Logical, String, boolean) */ - NULLCHECK("nullcheck"), - /** @see WhereSet#addBetween(Logical, String, Object, Object, boolean) */ - BETWEEN("between"), - /** @see WhereSet#addIn(Logical, String, boolean, Object...) */ - IN("in"), - /** @see WhereSet#addLike(Logical, String, String, boolean) */ - LIKE("like"), - /** @see WhereSet#addRegexp(Logical, String, String, boolean) */ - REGEXP("regexp"), - /** @see WhereSet#addSql(Logical, String) */ - SQL("sql"), - /** @see WhereSet#addMoreSql(Logical, WhereSet, boolean) */ - MORESQL("moresql"); - @NotNull private final String string; - - private - WhereEnum(@NotNull final String s) { string = s; } - - /** - *

解析操作类型.

- * - * @param s 要解析的字符串 - * - * @return {@link WhereEnum} - */ - @Nullable - public static - WhereEnum get(@NotNull String s) { - s = s.trim().toLowerCase(); - - switch ( s ) { - case "equal": - return EQUAL; - case "where": - return WHERE; - case "nullcheck": - return NULLCHECK; - case "between": - return BETWEEN; - case "in": - return IN; - case "like": - return LIKE; - case "regexp": - return REGEXP; - case "sql": - return SQL; - case "moresql": - return MORESQL; - default: - return null; - } - } - - @Override - @NotNull - public - String toString() { return string; } - } -} diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/package-info.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/package-info.java deleted file mode 100644 index 53680b9..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/Util/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - *

数据库辅助对象包.

- *
提供 Sql 执行辅助对象
- * - * @author fybug - * @version 0.0.2 - * @since PDF 1.2 - */ -package fybug.nulll.pdfunctionlibrary.Processing.sql.Util; \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java deleted file mode 100644 index b22dfa7..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Delete.java +++ /dev/null @@ -1,252 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import java.util.ArrayList; -import java.util.Collection; - -import fybug.nulll.bdpost.Instruct; -import fybug.nulll.bdpost.PostField; -import fybug.nulll.pdfunctionlibrary.Annotations.NoSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.WhereSet; -import fybug.nulll.pdfunctionlibrary.lang.ConsistentField; - -import static fybug.nulll.pdfunctionlibrary.Processing.FuckChar.fuckSql; -/** - *

删除语句对象.

- *
- * 该对象包含一个完整的 {@code Mysql} 删除语句
- * 需传入所需要的 条件语句 对象
- * 
- * - * @author fybug - * @version 0.0.2 - * @see MysqlSql - * @since PDF 1.3 - */ -@NoSynchronized -@SuppressWarnings( "All" ) -public final -class Delete extends ConsistentField implements MysqlSql { - @Nullable protected ArrayList tabname = new ArrayList<>(); - @Nullable protected WhereSet where = null; - - /**

构造一个空的删除语句对象.

*/ - public - Delete() {} - - /** - *

构造一个删除语句并初始化.

- * - * @param tab 要删除的表 - * @param w 删除的条件 - */ - public - Delete(@NotNull final String tab, @NotNull final WhereSet w) { - setWhere(w); - addTabname(tab); - } - - /** - *

添加要操作的表名.

- * - * @param s 要操作的表 - * - * @return this - */ - @Override - public @NotNull - Delete addTabname(@NotNull String s) { - s = fuckSql(s).trim(); - if (!s.equals("")) - this.tabname.add(s); - else - tabname = null; - return this; - } - - /** - *

获取当前要操作的表的列表.

- * - * @return 要操作的表 - */ - @NotNull - public - Collection getTabname() { return tabname; } - - /** - *

设置操作条件.

- * - * @param where 如果是{@code null} 则会清空条件 - * - * @return this - */ - @NotNull - public - Delete setWhere(@Nullable final WhereSet where) { - if (where == null) - this.where = null; - else - this.where = where; - return this; - } - - /** - *

获取条件对象.

- * - * @return {@link WhereSet} - */ - @Nullable - public - WhereSet getWhere() { return where; } - - @Override - protected - boolean consistent(@NotNull final Object obj) - { return hashCode() == obj.hashCode(); } - - @Override - public - int hashCode() { - return ((super.hashCode() + (tabname == null ? -1 : tabname.hashCode())) << 5) + - ((where == null ? -1 : where.hashCode()) << 5); - } - - @Override - @NotNull - protected - Object clone() throws CloneNotSupportedException { - @NotNull final Delete d = (Delete) super.clone(); - d.tabname = tabname; - d.where = where == null ? null : (WhereSet) where.clone(); - return d; - } - - @NotNull - @Override - public - String toString() { - if (where == null || tabname == null) - throw new NullPointerException("No Field Sql!"); - - boolean f = true; - @NotNull final StringBuilder sql = new StringBuilder("DELETE FROM "); - tabname.trimToSize(); - - /* 获取插入表组 */ - for ( String key : tabname ){ - if (f) { - sql.ensureCapacity(sql.length() + 2 + key.length()); - f = false; - } else { - sql.ensureCapacity(sql.length() + key.length() + 4); - sql.append(", "); - } - sql.append('`').append(key).append('`'); - } - - WhereSet.getWhere(where, sql); - - sql.trimToSize(); - return sql.toString(); - } - - @Override - public - void clean() { - tabname.clear(); - where = null; - } - - @Override - public - void free() { clean(); } - - @Override - public - void close() { - try { - where.close(); - } catch ( Throwable e ) { - } - free(); - tabname = null; - } - - /** - *

解析 BDPos 为删除语句.

- * - * @param post {@code # where:}{@link WhereSet#passingBDPos(PostField)}
- * {@code # table:}table&table - * - * @return {@link Delete} - * - * @since PDF 1.3 expander 1 - */ - @NotNull - public static - Delete passingBDPos(@NotNull final Instruct post) { - @NotNull final Delete delete = new Delete(); - @Nullable PostField field; - - field = post.getPostField("table"); - if (field != null) { - /* 解析表名 */ - @NotNull final String f[]; - if (field.getField().getClass() == String[].class) { - f = (String[]) field.getField(); - } else if (field.getField() instanceof String) { - f = new String[]{field.getField().toString()}; - } else { - f = new String[]{}; - } - - /* 加入表名 */ - for ( int i = 0; i < f.length; i++ ){ - delete.addTabname(f[i]); - } - } - - field = post.getPostField("where"); - if (field != null) { - @NotNull final WhereSet whereSet = WhereSet.passingBDPos(field); - delete.setWhere(whereSet); - } - - return delete; - } - - /** - *

生成 BDPos 对象.

- * - * @return {@link Instruct} - * - * @since PDF 1.3 expander 1 - */ - @NotNull - public - Instruct toBDPos() { - @NotNull final Instruct instruct = new Instruct(); - instruct.name = "delete"; - - // 放入条件 - if (where != null) - instruct.putPostField(where.toBDPos()); - - /* 放入表名 */ - @NotNull final StringBuilder stringBuilder = new StringBuilder(); - @NotNull String ta; // 减少寻址 - for ( int i = 0; i < tabname.size(); i++ ){ - ta = tabname.get(i); - stringBuilder.ensureCapacity(stringBuilder.length() + ta.length() + 1); - stringBuilder.append(ta).append('&'); - } - stringBuilder.deleteCharAt(stringBuilder.length() - 1); - instruct.putPostField(new PostField(stringBuilder.toString())); - - stringBuilder.setLength(0); - stringBuilder.trimToSize(); - - return instruct; - } -} \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java deleted file mode 100644 index 2107766..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Insert.java +++ /dev/null @@ -1,263 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import fybug.nulll.bdpost.Instruct; -import fybug.nulll.bdpost.PostField; -import fybug.nulll.pdfunctionlibrary.Annotations.NoSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.InsertVal; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.UpDataVal; -import fybug.nulll.pdfunctionlibrary.lang.ConsistentField; - -import static fybug.nulll.pdfunctionlibrary.Processing.FuckChar.fuckSql; -/** - *

插入语句对象.

- *
- * 该对象包含一个完整的 {@code Mysql} 插入语句
- * 需传入所需要的 操作段语句 对象
- * 如果传入了 更新操作段 对象则会在 已有插入 的情况下进行更新
- * 
- * - * @author fybug - * @version 0.0.2 - * @see MysqlSql - * @since PDF 1.3 - */ -@NoSynchronized -@SuppressWarnings( "all" ) -public final -class Insert extends ConsistentField implements MysqlSql { - @Nullable protected String tabname = null; - @Nullable protected InsertVal In = null; - @Nullable protected UpDataVal up = null; - - /** - *

构造一个插入语句并初始化.

- * - * @param tabname 要插入的表 - * @param insertVal 插入值的语句 - */ - public - Insert(@NotNull final String tabname, @NotNull final InsertVal insertVal) { - setInserVal(insertVal); - addTabname(tabname); - } - - /**

构造一个空的插入语句对象.

*/ - public - Insert() {} - - /** - *

设置要操作的表名.

- * - * @param s 要操作的表 - * - * @return this - */ - @Override - public @NotNull - Insert addTabname(@NotNull String s) { - tabname = fuckSql(s).trim(); - if (!s.equals("")) - this.tabname = s; - else - tabname = null; - return this; - } - - /** - *

获取当前要操作的表名.

- * - * @return 要操作的表的名称 - */ - @Nullable - public - String getTabname() { return tabname; } - - /** - *

设置插入值语句.

- * - * @param bv 如果是{@code Null} 则会清空语句对象 - * - * @return this - * - * @see InsertVal - */ - @NotNull - public - Insert setInserVal(@Nullable final InsertVal bv) { - In = bv; - return this; - } - - /** - *

获取插入值语句.

- * - * @return {@link InsertVal} - */ - @Nullable - public - InsertVal getInserVal() { return In; } - - /** - *

设置更新语句.

- * - * @param u 如果是{@code Null} 则会清空语句对象 - * - * @return this - * - * @see UpDataVal - */ - @NotNull - public - Insert setUpDataVal(@Nullable final UpDataVal u) { - up = u; - return this; - } - - /** - *

获取更新语句.

- * - * @return {@link UpDataVal} - */ - @Nullable - public - UpDataVal getUpDataVal() { return up; } - - @NotNull - @Override - public - String toString() { - if (In == null || In.size() == 0 || tabname == null) - throw new NullPointerException("No Field Sql!"); - - @NotNull final StringBuilder sql = new StringBuilder("INSERT INTO "); - - /* 插入语句部分 */ - sql.ensureCapacity(sql.length() + 3 + tabname.length()); - sql.append('`').append(tabname).append("`").append(In); - - /* 更新语句部分 */ - if (up != null) { - sql.append(" ON DUPLICATE KEY UPDATE ").append(up); - } - - sql.append(';'); - sql.trimToSize(); - return sql.toString(); - } - - @Override - protected - boolean consistent(@NotNull final Object obj) - { return obj.hashCode() == this.hashCode(); } - - @Override - public - int hashCode() { - return ((super.hashCode() + (tabname == null ? -1 : tabname.hashCode())) << 5) + - ((In == null ? -1 : In.hashCode()) << 5) + ((up == null ? -1 : up.hashCode()) << 5); - } - - @Override - @NotNull - public - Object clone() throws CloneNotSupportedException { - @NotNull final Insert i = (Insert) super.clone(); - i.tabname = this.tabname; - i.In = In == null ? null : (InsertVal) this.In.clone(); - i.up = up == null ? null : (UpDataVal) up.clone(); - return i; - } - - /* - * 释放 - */ - - @Override - public - void clean() { - tabname = null; - In = null; - up = null; - } - - @Override - public - void free() { clean(); } - - @Override - public - void close() { - try { - In.clean(); - up.clean(); - } catch ( Throwable e ) { - } - free(); - } - - /** - *

解析 BDPos 为插入语句.

- * - * @param post {@code # table:}table&table
- * {@code # Inerval:}{@link InsertVal#passingBDPos(PostField)}
- * {@code # Updataval:}{@link UpDataVal#passingBDPos(PostField)} - * - * @return {@link Insert} - */ - @NotNull - public static - Insert passingBDPos(@NotNull final Instruct post) { - @NotNull final Insert insert = new Insert(); - @Nullable PostField field; - - // 加入表名 - field = post.getPostField("table"); - if (field != null) { - /* 解析表名 */ - if (field.getField().getClass() == String[].class) { - if (((String[]) field.getField()).length > 0) - insert.addTabname(((String[]) field.getField())[0]); - } else if (field.getField() instanceof String) { - insert.addTabname((String) field.getField()); - } - } - - field = post.getPostField("Inserval"); - if (field != null) { - insert.setInserVal(InsertVal.passingBDPos(field)); - } - - field = post.getPostField("Updataval"); - if (field != null) { - insert.setUpDataVal(UpDataVal.passingBDPos(field)); - } - - return insert; - } - - /** - *

生成 BDPos 对象.

- * - * @return {@link Instruct} - */ - @NotNull - public - Instruct toBDPos() { - @NotNull final Instruct instruct = new Instruct(); - instruct.name = "insert"; - @NotNull PostField field = new PostField(); - - if (tabname != null) - instruct.putPostField(field.loadField(tabname)); - - if (In != null) - instruct.putPostField(In.toBDPos()); - - if (up != null) - instruct.putPostField(up.toBDPos()); - - return instruct; - } -} \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java deleted file mode 100644 index 99e028f..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/MysqlSql.java +++ /dev/null @@ -1,40 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import com.sun.istack.internal.NotNull; - -import java.io.Serializable; - -import fybug.nulll.pdfunctionlibrary.Processing.sql.Mysql; -import fybug.nulll.pdfunctionlibrary.lang.Cleanable; -/** - *

Mysql 数据库操作对象.

- *
- * 此接口表示当前对象代表一个完整的 Mysql 操作语句
- * 可通过 {@link #toString()} 打印该语句
- * 
- * - * @author fybug - * @version 0.0.1 - * @see Mysql - * @since PDF 1.3 - */ -@SuppressWarnings( "all" ) -public -interface MysqlSql extends Serializable, Cloneable, Cleanable { - /** - *

打印当前操作的 sql 语句.

- * - * @return 当前操作的 SQL 语句 - */ - @NotNull - String toString(); - - /** - *

添加要操作的表名.

- * - * @param s 要操作的表 - * - * @return this - */ - @NotNull - MysqlSql addTabname(@NotNull final String s); -} diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java deleted file mode 100644 index 8be9bd3..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/Updata.java +++ /dev/null @@ -1,245 +0,0 @@ -package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; -import com.sun.istack.internal.NotNull; -import com.sun.istack.internal.Nullable; - -import fybug.nulll.bdpost.Instruct; -import fybug.nulll.bdpost.PostField; -import fybug.nulll.pdfunctionlibrary.Annotations.NoSynchronized; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.UpDataVal; -import fybug.nulll.pdfunctionlibrary.Processing.sql.Util.WhereSet; -import fybug.nulll.pdfunctionlibrary.lang.ConsistentField; - -import static fybug.nulll.pdfunctionlibrary.Processing.FuckChar.fuckSql; -/** - *

更新语句对象.

- *
- * 该对象包含一个完整的 {@code Mysql} 更新语句
- * 需传入所需要的 条件语句 对象
- * 以及需要的 更新语句段 对象
- * 
- * - * @author fybug - * @version 0.0.2 - * @see MysqlSql - * @since PDF 1.3 - */ -@SuppressWarnings( "all" ) -@NoSynchronized -public final -class Updata extends ConsistentField implements MysqlSql { - @Nullable protected String tabname = null; - @Nullable protected WhereSet where = null; - @Nullable protected UpDataVal up = null; - - /** - *

添加要操作的表名.

- * - * @param s 要操作的表 - * - * @return this - */ - @Override - public @NotNull - Updata addTabname(@NotNull final String s) { - tabname = fuckSql(s).trim(); - if (!s.equals("")) - this.tabname = s; - else - tabname = null; - return this; - } - - /** - *

获取当前要操作的表名.

- * - * @return 要操作的表 - */ - @Nullable - public - String getTabname() { return tabname; } - - /** - *

设置操作条件.

- * - * @param where 如果是{@code null} 则会清空条件 - * - * @return this - */ - @NotNull - public - Updata setWhere(@Nullable final WhereSet where) { - if (where == null) - this.where = null; - else - this.where = where; - return this; - } - - /** - *

获取条件对象.

- * - * @return {@link WhereSet} - */ - @Nullable - public - WhereSet getWhere() { return where; } - - /** - *

设置更新语句段.

- * - * @param updata 如果为{@code null} 则会清空对应的语句段 - * - * @return this - * - * @see UpDataVal - */ - @NotNull - public - Updata setUpdata(@Nullable final UpDataVal updata) { - if (updata == null) - up = null; - else - up = updata; - return this; - } - - /** - *

获取更新语句段.

- * - * @return {@link UpDataVal} - */ - @Nullable - public - UpDataVal getUpData() { return up; } - - @Override - protected - boolean consistent(@NotNull final Object obj) - { return hashCode() == obj.hashCode(); } - - @Override - public - int hashCode() { - return ((super.hashCode() + (tabname == null ? -1 : tabname.hashCode())) << 5) + - ((where == null ? -1 : where.hashCode()) << 5) + - ((up == null ? -1 : up.hashCode()) << 5); - } - - @Override - @NotNull - protected - Object clone() throws CloneNotSupportedException { - @NotNull final Updata d = (Updata) super.clone(); - d.tabname = tabname; - d.where = where == null ? null : (WhereSet) where.clone(); - d.up = up == null ? null : (UpDataVal) up.clone(); - return d; - } - - @NotNull - @Override - public - String toString() { - if (up == null || up.size() == 0 || tabname == null) - throw new NullPointerException("No Field Sql!"); - - @NotNull final StringBuilder sql = new StringBuilder("UPDATE "); - @NotNull final String fs = up.toString(); - - // 过滤表名 - sql.ensureCapacity(sql.length() + tabname.length() + 6 + fs.length()); - sql.append('`').append(tabname).append('`').append(" SET ").append(fs); - - // 获取条件 - WhereSet.getWhere(where, sql); - - sql.trimToSize(); - return sql.toString(); - } - - @Override - public - void clean() { - up = null; - tabname = null; - where = null; - } - - @Override - public - void free() { clean(); } - - @Override - public - void close() { - try { - up.close(); - where.close(); - } catch ( Throwable e ) { - } - free(); - } - - /** - *

解析 BDPos 为更新语句.

- * - * @param post {@code # table:}table&table
- * {@code # Updataval:}{@link UpDataVal#passingBDPos(PostField)}
- * {@code # where:}{@link WhereSet#passingBDPos(PostField)} - * - * @return {@link Insert} - */ - @NotNull - public static - Updata passingBDPos(@NotNull final Instruct post) { - @NotNull final Updata upDataVal = new Updata(); - @Nullable PostField field; - - // 加入表名 - field = post.getPostField("table"); - if (field != null) { - /* 解析表名 */ - if (field.getField().getClass() == String[].class) { - if (((String[]) field.getField()).length > 0) - upDataVal.addTabname(((String[]) field.getField())[0]); - } else if (field.getField() instanceof String) { - upDataVal.addTabname((String) field.getField()); - } - } - - field = post.getPostField("Updataval"); - if (field != null) { - upDataVal.setUpdata(UpDataVal.passingBDPos(field)); - } - - field = post.getPostField("where"); - if (field != null) - upDataVal.setWhere(WhereSet.passingBDPos(field)); - - return upDataVal; - } - - /** - *

生成 BDPos 对象.

- * - * @return {@link Instruct} - */ - @NotNull - public - Instruct toBDPos() { - @NotNull final Instruct instruct = new Instruct(); - instruct.name = "updata"; - @NotNull PostField field = new PostField(); - - if (tabname != null) - instruct.putPostField(field.loadField(tabname)); - - if (where != null) - instruct.putPostField(where.toBDPos()); - - if (up != null) - instruct.putPostField(up.toBDPos()); - - return instruct; - } -} diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/package-info.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/package-info.java deleted file mode 100644 index 2b7bc9b..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/mysql/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - *

MySQL 相关包.

- * - * @author fybug - * @version 0.0.1 - * @since PDF 1.3 - */ -package fybug.nulll.pdfunctionlibrary.Processing.sql.mysql; \ No newline at end of file diff --git a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/package-info.java b/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/package-info.java deleted file mode 100644 index aa05653..0000000 --- a/src/main/java/fybug/nulll/pdfunctionlibrary/Processing/sql/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/** - *

数据库工具包.

- *
提供基础 Sql 执行工具和其他数据库工具
- * - * @author fybug - * @version 0.0.1 - * @since PDF 1.2 - */ -package fybug.nulll.pdfunctionlibrary.Processing.sql; \ No newline at end of file -- Gitee From b1cdf0cf80967de25e701fd462183d4f0de884d0 Mon Sep 17 00:00:00 2001 From: fybug <1006291762@qq.com> Date: Tue, 8 Jan 2019 10:41:52 +0800 Subject: [PATCH 12/12] =?UTF-8?q?[test]=20=E5=A2=9E=E5=8A=A0=20BOPos=20?= =?UTF-8?q?=E7=9A=84=E6=B5=8B=E8=AF=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/PDFLibrary.jar | Bin 115889 -> 77140 bytes lib/BDPost.jar | Bin 14384 -> 12418 bytes src/test/java/bdpos/testField.java | 48 +++++++++++++++++++++++++++++ src/test/java/bdpos/testInst.java | 35 +++++++++++++++++++++ src/test/java/bdpos/testclass.java | 15 +++++++++ 5 files changed, 98 insertions(+) create mode 100644 src/test/java/bdpos/testField.java create mode 100644 src/test/java/bdpos/testInst.java create mode 100644 src/test/java/bdpos/testclass.java diff --git a/jar/PDFLibrary.jar b/jar/PDFLibrary.jar index 5434678b643fb9f001bea5caa0f2c5524998ce32..01918a70adf76355a12dfde91901c880aaf54a9c 100644 GIT binary patch delta 9587 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 Y0lB3)(O<&7gezu%gNuiUb*JI}56a%@rT_o{ delta 46148 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 diff --git a/lib/BDPost.jar b/lib/BDPost.jar index db5652c663c815d0f06e2288cec888ac76804095..c2b1dcadff3a6e7948cbcf547eb6c1b5bb532478 100644 GIT binary patch delta 11618 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
JSML4L1ggDeOGOmZ_wfk-uvySA6>eupP4cr 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