From d5197256512f8d886c0a9ff1a6ca1497ea9932ae Mon Sep 17 00:00:00 2001 From: Ivan Olexyn Date: Tue, 5 May 2020 22:48:28 +0200 Subject: [PATCH] + querying for supply implemented. --- .../java/com/olexyn/misp/embedded/RunAll.java | 4 +- overview.png | Bin 34047 -> 43177 bytes overview.uxf | 330 +++++++++++------- .../com/olexyn/misp/reverse/CheckSuppyR.java | 39 +++ .../olexyn/misp/reverse/JourneyGenerator.java | 36 ++ .../com/olexyn/misp/reverse/JourneyR.java | 53 +++ .../java/com/olexyn/misp/reverse/README.md | 19 +- .../java/com/olexyn/misp/reverse/Reverse.java | 110 +----- .../com/olexyn/misp/reverse/ReverseApp.java | 35 -- .../java/com/olexyn/misp/reverse/Tools.java | 46 +++ 10 files changed, 415 insertions(+), 257 deletions(-) create mode 100644 reverse/src/main/java/com/olexyn/misp/reverse/CheckSuppyR.java create mode 100644 reverse/src/main/java/com/olexyn/misp/reverse/JourneyGenerator.java create mode 100644 reverse/src/main/java/com/olexyn/misp/reverse/JourneyR.java delete mode 100644 reverse/src/main/java/com/olexyn/misp/reverse/ReverseApp.java create mode 100644 reverse/src/main/java/com/olexyn/misp/reverse/Tools.java diff --git a/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java b/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java index 7e0b081..0946d20 100644 --- a/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java +++ b/embedded/src/main/java/com/olexyn/misp/embedded/RunAll.java @@ -1,6 +1,6 @@ package com.olexyn.misp.embedded; -import com.olexyn.misp.reverse.ReverseApp; +import com.olexyn.misp.reverse.Reverse; public class RunAll { @@ -12,7 +12,7 @@ public class RunAll { Thread.sleep(2000); - Thread reverseT = new Thread(new ReverseApp()); + Thread reverseT = new Thread(new Reverse()); reverseT.start(); } diff --git a/overview.png b/overview.png index 56871eeeef73da3b459f9a8d5ddc92116f9b630e..b70d0b563c99edb17910bd407fb5694c34cca6b9 100644 GIT binary patch literal 43177 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%0D(1uC58rW$HJ){DEdqh<>tSdcr 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 aAK>YaJ!^^a3`;}bp3F@}M2^J0Xa5IsHL?Hz literal 34047 zcmeFZWmMH`_cn?F2uLWQNTW1JgLH#*cL^-Il$2bcAh1A@mhP7B78F=?cL~zn9q*00 z_kQ-X_y0ZP9pj8M-VbMeaKIY!TX)R3=5@`v0uLO{4xj(~8Z z^3F~0&L#SKBm#mLf~2UB%4@y#c;weOVppxfx0UX&rwLM%g?o883h1+EV&kZ9{)n@kc+g8$r)pe1}zMH6=S=PzD2U!{?E zSP}f%GvdwPd)5-k$Y@vkeG)kSk8w3kCVu@FYAkA&pFj0JVqsT}B>&^#gxPSGiC+gM z=q(s>`_~Si zePm?IR4X8cH9I#EZ~~+rBuUleJ;mXH!!|zke-Wg)U3-sk0^RrLao!)bsYO5#OX)|< z>bJ>7YsM%x(I1rEFK1m7jqSne- z$^p1d2MmpHz(dlb!Y3>Ls{zYW^&Bb#;%)$;}?Kv9XbodOdY!&?+6RcBEqzgq?5JY&oqBzt7k8_Vzyi zSoYM}rMzkmA95F`ketKyvD3zQ^J2iVG9FMc1pEXNtXX;1tb)}y_|HNwA?R^WG8oD}| zU1Hi(@3ObJF;USLOH;kA{4gW0ch14yUc1CZ*1}>nOEL9%C5=j<$Rc;4>w$&5d=EC2 zoB}6@?KH2`x`tk?$7TKyE3K{wzf8x;rhu1%`+I4X_6Oi(F%cq zYpU>b5$YYYud1kDyZ@&9B0cN#LzgOckfs_wm5XOHf?7sbXF+kW=MXKBHmp;exQ&SHn=A$MKr&Vo#0hy`yXu9c3yZgoa)>wIO4h8qi*(O9=+bya@ zcf0k`BJFZ3a9*><>m_CfL4U;_J8q}#??TSb&eeo1D4I~l=nPJOt_`31g&1&RoE*5Xob-yM%~X{s z#(#z}2e}Z~`qC1o$EicPwOmLnhxH>I9EXkZvdKxEa?iufDLQ(EEb_grg2Lvu%@>iI zf>KiLG3=J_Fo?90g?;%wPPbY9%W=7gYM@v3v9S|S4F))y z?8Lgm;(je~N&)0zZAWR!Ye&V#!5J*G90>}#n}AJ72oBVF9)7P{?`UfVy!4M9>mIRN zD3n$@Z9K}$I@wz)aTJdJ>W7(`nkg4=F_aULO&(iLUi7TX(QDVVCxM8FC_XOkeA;b` z-DdLBh`36wn)Uv2-#QAxm({;*-P^qm6(tmNe6?Cb~o zD+3NI6Q$S_5#)0~nQkl2=*b3V|ZMSmdX97q#oaJf-k6 zM>BYDv`8=M)Vo*d);Oh0M{)4FyQ1kPNd!HdU07I{o9nOlaO-=p)txAC1p;P&dg5jK z`CK65=#cx>wy}$B?u~X1f8kMi$gUw=}x&qUg_cQ5^!+-ej`2*_eIoVi__cb@6 z%LGIgy-D8N$+p9F|FNGwg1%};OA#ST*_d!DE{45M`CZ=JYsWRCo`3v*U1t72!5Z^6 z&cE~Xq~9n0WSXAiLZ!F&`Y?B%;r(wQNNA1jO)-;Cmul%oitD6wuh5WL7i zfGw4;0O?URT`B@xqnn#s&nM>8S3g=HMeD7wlHy|V4}>c}e*9Qn9ZweVQ_hszDLL+u z=}rFfMevdpTP3#fc@e)D20A+WojWg`oo)M45DVJ*M@>IUd;L!+%A;CVNjpa+dvB=+ zlYpbMt7~I*DEAi9-G|R!k`ke!pk%A%U4PVlY-~w?U{YPs?)WQ>9gqMUE)FN`7TPJO zsP?!69aF_#zkVIh?MVLk@xZ`qleVKUYu`?YLWr^ zEnkh4`Ohs&hSb&8ni-w!E}#=|q`e<2F>TmxLMs(ofcQ$N3AeIFK0_ z2gdxv!jwTyHgoPx5(<_pWIn{7zpwD}@+QqUBVwM`(=47RW=-~Fp6Yz=7a8 zNou>7FAEbBXF?uJz=J{d0x#QB$GY(F@SPv6QH=VR!+F}ZawuXLsHm&sWtQUNNIfWM zXnXtnLH_>FWo7w1PWQKGzj9iSKY8}G{O1RJnT1!63V}kQy^;TrG8z8l8-Rh^ySsL; zUYXC-Uj$%N9c!K^+d5={G<_~<4T6uS15ZMTWEka6iGN2Fqw)fXIT<38Ii|nDjVimv zpxJn-IXL4735M5pf`C9u5*-5zBtj5;{AGF_0SO-=3Ga^ziteUc$*qSF1TVRdjzw=l zeG`6by$j<7*tvyJM#h{WGD7d2LQWnpAtZz>#NYMO7uX+ ze!aVXaX zTnES8C(Uvg8{VWA21+Y&rO?@a7&VS=kL> zJ!8ejmV;T$mc#VPF=RSyNMC*7xSB)?bwFu=Vn-6`95q9%Xa=TUQbFgvaq# zoK(iYaFwns(S$4p=}n=*rnG)8^DCRM+DKZ})$^0RukX<9?d@w^4_3Wy+(N=2eC{VK zEDW%m({gX}w{PE^XFMtZs6KDa%6^$D{{E7^KTQ%lA3i%f>$o}?5ELXMFRx$c${t{+ zq7v@#Kdgc1x)zQUR99|w3cKYmh*idv?I1VaF!7{7PfxG32*58;EA+RlkCo`Zo<$rd z9gBbVikwb7a(#Wh_SFyZ@$Rm!gY9jNVh9RPsbMo}K3p|dO}ESfw}T2G=5H1s&6+Pq zp&uD;=T0=GjXEpXF1OpKg&8iTeYOz_$qU8d;VMObljSR!Zr^`7Md^~KSI2D)aDIkn ziAibEi^eyH8xy9+#v$0CDoKb+GfYlSF1?41Epoy8dYiOE!1Mf>^1P4F?eUi!bMx~m zIVv>cL~LdsMd@no+zhXT%CSD%poJOE2-PLi^@PZk$Am1VbuTuNAu>R%(c}%#lnn4EUfqd{TpI3r=%tns; zy25Ah{>Kw3=2c&(iYY0DZi@$kh|Hi{9ZqzA+H7`hjmLVNEs{|*1^3M8dWpH8H^0_g zZS-!sICDDZSno`hWgrs9mRmm)CYm@ndo>^uN%g1A;P6lxJEFm?BGN|NlKDR07d`k0 ztb1d|8pQ=21LJUSkH>EQ&dDnPNxBg~Y_T zp6;8|mYWYyuBfdCUvKMkakT&eH%H;Lk;I`63tyVgZL#6|*M0)2;i6GiwjN@LUba{r zwXs9Er-qW^`kXdC>~O2xr#2KT_#tysM@L6Fl zQ~E_mrI_D9dH8=f)YxqLN+PPFk(xr8xTU&E;nbSpU6LhRiKI9ps z8B)`BLllmg@^+eFIz=;A@5&|9E}d2-wm_ae@@fcS3S~rRG>6Vwg`NY>$olH}`v==nIVkzbKpG0&^{;u?m^EaQy z>$BtdOqspfe17ibERa7Z30f9QA~}6L$GFCS2r8x0yeq%nFuakTuxYdDFg%ioOppZEYJ734Cwbp$g!pQO$KN{a zP=T(~31b?*DzGlSl{3^4Nhfc!w{{8jG4fiAU_e&g)6&g6?(NO33GFrXDhOl*jYF zG&-I4#W}BR;IJ6oA0SH|J4_ZxjfXz0Qso{z9KIOge4l>YMc z)y5U7C249p3$jyO<_4p<`%%{eWsEDAo#p9{t-8H?nv4ZqrL>XL8?0G+@kl%z#OXL1 zTgfPw_BnZ}Fw(ihsbFx>;$QaMjW-00$oDJwAh@lG+$Fw@eVKdO^-M9EQCaJ9kA39yzBp?OjBS=A8;u>p4fHwhS~ZnZx${kp zWR9O0N%m*zFb$xpiiIeB`Woh7O>ymCe;v*PRAtENkFWyDVu&f#k_)TaZfb_~K}SzZ zh1qlr$K_VotNDRaX1?QAE%uu}j=SSoJ^K;`RXI-|UTwjr>ej=zmI|jxD7)X1TOtv- zeBcrz-W~ep^+h~mfkt&Fo7=M+wSFQ+wl%o^VNbba2%Y-Qv@^xmeR?{|i7v^XIh&%e zdGO?*V6UfsH?duhf89Iv+xdYT`FrBYi@Y1P8ecOQrb+l?tfdKy4U4Dd5ycvMs;U@&cN&-MRqYKr4%}$Nh{)5JOw=O(Qh{k zU@L$(tn)||pJ|jt0%KscUm!uwH!Ws~m0u8e*Z)wESnT7-ndg@eq2!#lQ`4omYn091 zlA2RWQRE|T>pKth-0Z*3b|BkAtOcS(WjpmNc#4@YH-V#;GyLg3kn8iX)^fyJWD;3m z?qp-P?l=6_YJ{dq4@>wG!^HX_Kf02i}$vb-2%p>Fl-galVY^o0W;=hHQg@R2q zJnG_L=b^q-%3a-obk{|N&$)qX)e$x4mPqcqed=K?T^2*dQ=Iy81`-5=w&zk&SL>HQ z27!TrsGh=K!c%~n2kXDwSjy@Iu3Mx_T^w2HyQJWnZz-P-hsODH@Tx$hc&;Q9*shkY zLvE_O?*sj366a3i=U-Fg9E--TZSmng8dB=#$$E8svn|17UfZJ zqoGu`Uowq4A_|^E&5M+u{N?Lr$p-7OjF~E*HMrbQVc2H{7ndEEp0?)_*FtU5ma>{bLslIlWEeQrEd$b==x9c~mH}p_&mV z175o6UYnb*TNQR**=p&rjH%l}C8n-cfiMg@loO;hv z-nIzn+01l?tQJl-JUq+&MO~}YrPE#gk%5Qh+k{eAoaRo=?W$^9++`<_PF6;TAF%VC zWl4|}&M!vGHcYW=5Dy9lzV~^wrBZh1D74wHrZ__ND(ftkXjsyFjT?$YEYu;<@YTp_ z92cQ)(_dP;baZrX-6ZH!!J@UR;5_4-T4`o6*0C6|e0bPkeU1|#q9y~2Cma{?#A1KY z(&EWqRSwmSp*mP)JKinXN!gk#1tBaZgW7VI#<$$=<7kDL)G{HG{xfb%sqGOty>k{P-v-Vn9O-eZRla&^NX3(7r*ABA*AM0x z^LUya%n1-%Za?!S)5_fE%%gzGK#!a@`oDG!B~>&KT`aWI*b#_31CG{d0f+4jlhCPyL^O z^uI3m->QfIKCVAdkAa3&%HukycZn*2&)0<1;Mu;`FFq7 z-3D(Ey}Ui=EH>jW(JJ+eIZYpoA!O*j`K6`yOvUFJ8bT6EVYPREZ^Y713Nla7f!)zd zSP%H>DNs@VxK=F7 zZ}trh-ax$}goBXxW(YkTiMQ1*36A(>@WvtXAMagPE$-gSX$GjG>dMH}w{I&Vl%lF}Dm>aI?C>UkfS`;#O7iD>;D&!Hlx2ST85jz8?xY}? z;eNJBVslvdrQ_0JfvPqM3rqAyFRjLup!pYjdSsXmf(+3M=%4R_Qt+o(I!s(0!!1Zg z>VGpy_5VK*pdSA}9>@?GVAotvS2CNc7EgWz3+U+THdkQ=z+fy7?*bYLkA%r!r9YjB z+W~9oW~}#r+rePMZA3);ppUOOtVXx}NIYMhaB*=ZLNBWTu>oX^k{*7y%}Fj#DJ`vW z(?kz7@KLC^w6(``fk1^x?M&cvD|QvtY4D6sH2VNJtdY-}_G`m=R-ANnfr)ZNuP+Wp zdJ+Znx9{fCu++)84mF(b1|B06qF-CVKW=;+TWKCpssrNU;w?blijR+9>W-JL`OzAD zw7);u0EN1{yC?E{0J6_xYnsogooB0d4`?fid~O`8$iXW^FwFcpTW%)5T2Y)t_ryXT_K3ZlqRty-|g-m~HZ*t{866iVe3@$B8k@J?` zI3Fm!C#K3QADnqF@L)*IE{HAIfYVkb8-3l`o{CRgyPr( z8>rO)f~COm_gm$4uXhal2eis80QhNL*4mTViQ!GXXvSJT(m2kEbKJ)l+3pA3`d zj}8fG#Kct(QC3pQVo=gcczj+>yfbOvLqS1-(hZkLgRdKHy+y_>o&p9(Kul{VEPT_N zhag!1K`Me)tfpxs6j`kN@jt@XM!>Q-8WMhCioLV10 zlkmBg0+9=wQs%YFxc~DIBO{}ga5(&VIiQ*+6J(RsvTmK%W4uuQ9qWE}xP0dO9sJ9v zd}&z}^R&u}j9QDW4;}gJ_50B7+_{5}zEDG<09h$m1030SSJ!);xCd}nMM(eTZ+2+| zW>dO-Z~)lnM~w7yz@3wuQcj1ur)r#=HQN#XHNLwU%7rwXZSt^8U7Q_JJ$V9{uhyBF zL;=EVU~FN&*=0?c^UOlbvAHRy+Lgekody2}o^&+NZ<^pD9+&HRJcGHPDF&n=&(jsE zS18E;YPQq}EVHmqYUKvro{A4K+#7p(KTwEWy&YgpUgZ+Jo zK%pTBb6@=b=Fy_0{*2b-4R>`6;)=#7)>M?Y|dFAg>2OwO?NOh$eaZ89gYHbZIge6bFP~tkoAbu zMrMoW${0`YivzA1`$B^TLTA!X+^6vzu@}HQaxBq^79gr;C#L9^{P6Mf8vzm<3kwS$ zp9iqdv@}IUMHg`~r=JZl=rk*!|Ha+IL-OEBJ1d+tJMZ%1EbMZ(Gg~>c8=T2vS8Rpt z4CtV^ot?KGHGz78qnQ$6@bw*#ftK|jrz8eF#VMXvN|$2LtNo;P1zfHpf-Wj9t`nmU z-~kfPW3q{icgwv%t0IZle7K0i_2fw!NC!Y0Nohca!>_eT{nRRvH2D1Tb!PtX9-p;k zU?A*WwP3oF-wE@DtT1%;suQKX6)Tk8sz%X%CYT?rHVbOD!qcYk5zQjtRPD zEJr>pgt4jT>qPS=Y;dDK>WpO24kZV1Ud6rhjv6Pz-Pa!$;9AcWAW0Nf4@9ptuCjA2 z%@s2WR>Aw@(o95(8?;Wh0z!pIgFpbfFlcRD^6tv(-UGO?@5?XJKmj%|f^zfer zIbq+wZ#MBaB@^7_;*rVAf(Ys!(zk3E#wIN5#C)zFV~cmc0de$LQCTd~jDnK#T{$K( zFI+10h=5*U9$fLBZgKy;$Kr(>K|w(vTz=NB_)xCzvVbdXqxn=N1ZdV-xoaZ@OI$$O z!bC@p;1`9_*Pi)KI&^+wb{`=NXVB(&@{noaIsOu$fXJJW6d9NQPx`Cj=B%`RxZ8{<%h z>?#KA-eq}yImVg^8c&3Tgg`e}M^~4za4i5(o`Z4Z55}detmuhgK|zoj3gvkqloydCF8a) zt({(D4NYihXk6E%85u9cHMKcd;1ceH3-Zc;8jFvRL-&5YJX@|9bGBsaD*aMZTY$>< z^MHWb&b=Ov)8htAVXe6`d=Y_lom5w2XXmI7J#5cBzY|0@Sngfn2Web#g;nM31_|v? zRg62iRpAfeY0NmUwe+Orrr692CuC#TsvK67 zUNz)Lg@&?to*#q0qCGzoCJ;~6Gi0IxDo0`MGLQ>-`}Xa{`S}MzF5&yvm>#??0j}}$ z(H}WGT`Qnd`}~}bULkuIqzA8G1@0e#&PQm!x%+*?v(+-hoSu4|;j^|4557Pn;rRWT@me}a;P`_;u!S`Kgk?1cxYZV*4L!+Y$S zTcD?*wzf7a0tlaI4Z&ucSTrp7_Mm@=x&cIG9;fy1nbdfh;m;1S3KTGOdwZ@a8E^<6D`3cXk%)%a)6J}lwT`J;wq(W0j0 zCFXoBFWI8s-pR+p8&^-s$*IRxXCUr$=HVN7F;~Gi#_=W#=^@a)vxg^cD9wW`A7~$e z{&z!ujip;<_EEn~ie6Ce;Yg~-#3}vN?$`@j`&r24Rg05LeOso8{`}6$+)S9OgRPL_ zMqessIkYVpkIr98MNFs^I^$Feso^*fzw0)Ltf-2jo=LEqnExGgJD|2?($&s{5Q$-_ z@+|cv7N}(R_Xu3k^S^LY$%6xEzV!FtL@YY9eu5LIcNZqOqb@v_tR|17pdtGqK{X?2 zuTel^&wr>?@_iDgmM#y8aPpCw%q3>#&Q*FBoe5S%Ry&*j2g2!Q9aVaNR2~|cJ1IFC zph&Z^u>pC`z{V#3_|t}B8M%?;t@u>Bo}aDg+TPbR%sqPl=?3-!VV9%#4R?R+v^1zi z_}ZVAY>-eQvfFB{Wmat|QZjywWRiH8?{vxBzDugrkgzowy``lQvD{$j;X&)u^SV_> z)un|hM=qA|N#`tz5Y93x2)qvg^Ab|_F$pdxT}WDOK1C%bmu}O{dzy0hEQV{M-qXMW z^t(I~SUiFz*3$<`vgfE1^Uu4WdS_yIbP!ir7+|5hrmBua#h5(t)mFm25|)>mT;G{F z&vfVFG!T%@MMc|K(;Ry|2NhBNu@uL@%cm+`@PSAe3$gkp0Dr$|B11A<&>Mj4|3b)N z+v`JD?C{(x|Na!0t(vNc(HN~o1MES4pN0wwB)<%gJYApOpm z^-5p+7fKpc039Lc;4da>ueyLjjJ7bRR4sIolhP_2ttMu^I9PFW?M%rf$9jA|>8xV0 z$oR#*iJHApYF|f0IfGOu#Kz*m2Ra5q^P(U);8qAg)+y^_!@Ux1-67|mi z9jpG+3MkN0G-=T8V(#qZZ=dGM#|ea75tQ?i`QQBh@;WX3^-*M0{!hai-g6 zwyqBER7IVCzmXpK1kh_%=xP@bM?PBj4AriNvF2Cs#ov0{Ailrc&<{2bQ{qjXSCbv-DhsF>TS_nwh=a@*3CM+!bm=Ax*D3SBR5Q+ zADO5%vJy(R*AcFcwvEatddk^Mm!QpYUf8RL+nQRewEZW-^HF`Xd`YC=zgfSbzkAd7 zQhmKJIKg(XcWY)KjE3D@B_6qN8-HsMW&6VV6a+ zmJ?~&Sdhl6{3n+3rlsh?tdCyv%Y@K`mD{F4lsLapme<7JN3C9AzWJ6jEDL@2K@>?0)>%{^7qDSOSt zIJOdvgx%n=9abLJ0DU``Ur5Z=#t)Y13zn%17w72=ylN1z3BVi`4>`-L;&NKEuBTIh z%=I3emAXkKrJ-SFmZ1fs#XZ_=@CD+HTL*N~>byyS}6AQsq0M@s>LdEi}12{r{) zrqb;V4A+LobWXGLqP7LQ^5t24hk@!9Ru4nMsueU$Uxg6?V!8cB?nL#u8>{|-lMelS z!VPU|yVTxKSMgFyfUe@Vd#oRVso!&?YdBU^dT9USL+fM@ymRU$$J_Nt8mr^R!OW#^ z@zU@h`L4|}^1l0G9O}5%obkkN9Q>?&tVcc4M;V({U)x!q@B`3RAL(dHygy0yU+6E6 zw0gbOyUH9bc=M_{$F>>ehwB}*Pe^^E(%=g1jvkiNp{DRw#$S%b<-ATw@t@|wj zgH|`}{j)Q;(2Pzr+nFG(H7_e?0)4bGab?WR6*=yhj;cLInv>qco;|VWbat&SI|eOM zgouEqhcG;$X6e1p@|Jo+w+>Pms~t_Zl(Bs?Lnyq-y2>tJ`T_qlv19$BdVbstS&aL5 zPuUcy9i5!o>r1}ufAnp`0QR(SZBK^}aZe1DE+ukgIB7f@SSfmt63H{C>2yL|R_kbK zxPCNt-IZK9aeagpmuP`3aYlgVUUZ`7WJA1QRki)yXv?Sc+^`>D8(MA$8m_f~=%Oh+ zDw!#J)1!1Z%!TtC*A+SF2CDx!=zAT83?fLSZWOx=XkAR(bbw=3l=|w&JCmk(AZ_|a zOn({WzY`4ZMCm5BlhpPxr-{59&*>ayTVKhvTc*d4R>)M9nI8y2cA!b`>AHBJhdQyj zW$;1(hte-nE#{IaYRpb;{c{8HbE-Y9#d_gooc_r?MPKS&=m>?qm>k<88tzyrEmFYQ z))mCPZiC~%difn>mJCI#o4p>-Gtgh;?>ft!+}ny$1jBdj?PwhrmyZAlGNOj3Z4tZk z_!&aB^ztUBbS;Lr(|XOYc=0TLrKsx4aGSwi+n-sAnAeAWc6FcZZQ@?8TDBqL(bFDI zE@$^zb5nZx6Gl9QsgDA)vT8yhl3#OqhTll!NebqSJms~i?F+!?P`zgHte?dyLM=Mq z`^|V;GSfLVCJXatq+|3jfW0fm+PrE_C(MVtEau)9P9el1WN?oY7dN?Vo%XF}KO1=C zJVXYvN#?TelN%ry1)NtJ-nS}^p+^BC45-(-aqhd_<5$jd; z-hNyq^nUT2atSc!ZwyW=MQp1*zTZBl?Z+KK+n}#m)gkt(z9cfbc5Dn!*<V@jPTq-fz8L<$I=xPX(P-V6`^S zvlzChji=n9;_Z5zPcrtJjuHKoqI3Ei60cqb^6gt6v`Juk)Wk-d^_|YY6Zq!v>A}_7 z%H3r0*jyOIwR3nvzUzY};iI$e9?A6tE3(+084nX1-U}in>FwT%xJlj|*kviT#_+Vp zLY_L>&yKX8!WQ7dehO?Cdu{ua$wilq%#%9J6yaS+xt9p+Zc^gON5Z2RyIY)u7d2!q z+i`OWaN%OYYw!N4lkpX7HsnuQJ|I@7O8Y`p!;R^Lp$PF!%B|4L$RL-&`-!)D?SbSs zv25>{DBtPop=nt6Q6iC0Bm`dp694@#p^tnY9|&x>kmB#TQJtmw&!1x2@;qe=XuY$1 ztM(xBF`bNXh<79tm~iZ+HuN22OV2%yMP&~441Fz(gS^wO2#}JhZs7}SwT zQ8JHmLl^bNM=wfunO))dC$2>!Hl{~fA;-u28p_Z)NnUY5y58Gx>U-mXf1HL6`~F=p zw3wH|DP~e|Ix>JCEZ+ldiOwc@JZk7`tcJ0l z+*9Zu5+~6l!GV;RQ#Sh%CI68t66~&*T3;SHtCN29h>4uelJAb=ZTSkUh#N6CV4c6= z*7uxb(WHo^-%-|@@M&3&dWsG@>{{sYWyH6x=I1Cka@!ui`H;#3%+ zrol&+UpnN&Ma4}vkK<{&Oup3@Q{RJqwoZZ%3lF~(1SjQ1PUjaF7YFK#$=23Z&~-m% zn#czj8sq6|$G~dP&iF`;l7b=~=oLMDM})d#XmL6ZL8EkmX2~KT8C~Sm)FNle27A{E z8ayx0T^jM#lp(GRpm+X!Axi%na*#i_8l->_%?%BMgrB}W%JaR{mn1halXIe|llBy! z{6K81b+(`zuyd@xj)U@Q^+igkmMm%m&Ib~K>45=z(A&AQvjdpOY~7l}I=3SqSX^Wz znE9#!I|amgp#0MyQvb1S}gQ&i5Vo5V}lvHLG4%h z_Y_;_kJ>W;-_F}Ml69Lf9jbPX=L>M|eDmf`m#bbqzGyDRoVv{d8M z$9sKt2wFG)ybHmQgS$AITq*^69)LTt;(7Y?gKLe=6n8${fd+awW(r8w*q9itZQhbv zFwh0`vLYr4>eO$bE;c^`gI%R{mLpH!-W!k)$re*OEH>^K&Qdf2qi{&xf9s+aK7Pgi z3W$=lE(fcs29zR$%mI4LsMZv$tb1QE1?ctbYYPgtK*RJ(_$_3NLJ>ZxFvvx2L4C?j=6JQ!h7=U3@Ep)zCCvAPx9;%7P@O!A@JfCL)8Y9NTlb~d zST~j}j~%+>mtjmVgQ@~)nW8@~GGP`B$@BR<>ji3skl(&Sp^s{0Xn6Mx0qq?Dfd(-C z#VV#(@9qMsb-;l}gocto%f3Ual2vHdM{e-pxi~Nt`5K^~{Xj&m>oXiJGyrVE>B#di zO4+-Z|CH#q=Iz>&Fcf-xxp?(QnOF3pEh&J40$OUp2vth*8ldPKZ~jC?ZmzBgKsjSz zum(hgQR@feC6=Fv=<0e?pJ2S_CHbYVXiU1pdz}G=vN6ijUHXYavIutfZ^nkB*)y+C zB%`8~E7=y+6hKTV`TEtUEtJB_xfzE0&hJl!FZ4eZJ^}OoCkAqQ21H?-5mjnHpp}m7 zWEqqAE(Yk@97_2F8R)HT_j~;?on=dvJMZp;-Xppq`<2Pwv8}$tGM^I?&&lSFn%Y3i zmCOmG&Cw%xY!}ge+TG9yk&Y;5{gaN&^UtYQ4JBrYs>}cl7G%f8Z5EwXTYz-d&mMA zlv`Ym8n?`y*PZL!J?L!4nHL=f_x0)~hCeSjvU?KqG*6P{!==^Gu}^m9Nls5k4lg~< z%q)yIgWpPqUvaa9>>}UYBpm&+^`%HM{1Ly}6!_YJ=5Jv7>3;FMTd=#OqL)LBq7-E@ z;qEj+A3kt=YUq2j0F1T)XxL3|2I(P{edL^+M}YqW5ip*~;LY`RS2Rhz z$u&lcd<}x3f{YjkZ<>|nNc8M24SxKMC?mH*YbArzvp3(=PqCEe({r0WW!hRZ4Ue0I z+$*flkW@tWyATKGg1ELyItx!o9wxz)K7oHQL5qwQ0Y)?kO)|fCL|=t7UHM8R&X^HQ zPqb{kF*XE)6I#jS15Q9OnE?}#H#4I%;eTkW8-U`i1$zrajHFYy0i6_9>aSCML4*Ol z>tI|K=<)(8N*Y`er)#b$*M3P#`l3CY#!A~EwHeH5R4yuI%+9{YTgODAE4pq-~^_I}Sp zIx5369z757%{V*qRS>yEK9R!|XzjToZLn>?XzjTWBxtZcgW*n;pAp=`!Nypo z8>UbfC$u$if67Wz3)@fM26W=QDxlEuND3cZ6V;$0@eqtrfypVpoui`%eEaW@H!5b# zj(~{&^tHw8M~6^}7`J8Z1Vv~pr|ooszJT5rm5>0y{c)Q2&-bTGrxdJ#mH-!5S8%^+ z85s%u9x*VKEhY>M44Z)r^ch_8)lUw<0H<3!*?&ooRsThcoV6hci)FXFnPv zyIa{=SO)RBc3HnOwp%M`lss3cCy#oihs|94qvXAIMK<)Y`3<@+IMKOG@>G{?>hm)d z!6r2d5QUp}6(DqEmd~y!wcp{cZ8DvSmDL{1B&WSYdOY{_ker9dZ7@r5dU|>=>;n-` z=bK%NZZTEO?sh`x8OVTQyfs}nH8qvZ zp(OeCd$KJURKI)ot^=6I`ZfGeDY`g6uTWn&AuLK1wv0Q$P>Oqc^cIt!T0K7wm{^nV z$-8g3(M{8!Lv#hSwt`u7aBYunV|vh)(w@dbz_%5EHV`m~zuupYcGibS1}JBs$bym5 z5~1y0&J~cy@3P=jt>rSbg&Ltw%f4Dn86#lu@jI@Aw|4ueWN94c7P#$N&_LsM!b}Wc z^;KWK{^-jis_eTNj&N-~zaSy@U)H0X9MzQQc?y_DsV9(5G&F`(J+%V8jgK=fl*}HB z(Wc+3ZhoF%4t@PL+KtRgBBY>iHe4ozvAI*TXb~GI7HtCi=~K)ShLJLeF#` zH#^oic-u<#W6d=QA{g>Vj~Q5HUkUlvWECqZX_8Ddi_Qo9CKf^5XQCky!65Z@E()~0 zdU314wxywMx6Kt9x}RbiVP~u(RpDBFdB``jt=vg;pYOr-VP!XU6wO*WpU?9A64~i#NX^B^&u=kL5o>AV$g!cOwK{D2!Q)* zRDz`&#D)M;_%egPUbRCu(3t`1Tf{Jcy$%9B07&t9Haly`u1$Ym1}Gi?R9OWrL2GMt zY({d8_ihU2J#?t5_T~p*hves1pp=7eEm^~#Lh1wKWy#e|Sn#4iZK-<1jrEv!y6nX^&)tbsm zfVEqw$5!hjnGy>S8Mk&B9X$+ZW>K1Mf)fzDJ^@fF=Arw^fY$tbrmWSBvN%gQFnxK` zeJz8qD1~CuoPL$%bS5BogKxwDQ)=J~C|+ohKE2_^O*6J?0^_yZ6ddPwV5#(IZM8st ztsl?@buIEmf!$rl#EJghCHcyqe5>|#R4MyQ3z@U3SF^~Er2r!;o|4N!!|t}_7xl#!D&sx|hcK#%85;(ZVM#=?8LxoWvO`Ee6_j2sk2 zc!0k3iO9A8qmEf9VPCbG`uHjFL)ug)yvmM_&S56LWamWbIc(BYHMFwStMFDfD1Tt~ z6q;__sn)OK`o8QLz+|FJJswlU#<-c-oO_roqkf4a$KE4XcB8MjL~aAz_HNknQ3Whk z>X12NKb;8-`#yQ%(|%oX1m8#!mMX6ngVh@BMU@ilv_7a6Oy<UcDv&>}=C6r0&RQ=>cr+PSAzZ4tD*`#*4yONn&9k5ET7OFQTxCeav zcO>GWV;M8^bJ@8%YGv5DF+pwDz|PrfQ`hC}3zH$N_Dpn=M+tYBoh@~medVoeq^B89 zdc4l%ydOCcEE{MJn3aV92kr%p{R`e7trPk-o(fzm{0oW9)%BvP`@5Oza^|>r5@iSa z_Iq}_Z+i-jHX&#Nq^1Eu(IZaGG=X+0%CO7twHiPx+fB@3&>k+69MIZ(05#KUX-X3m zGwH=ujza`yH@vzinFR;=cw0Cs<6u?2?vX(7118n^K3OJsMK(_@vp z`p^8MtS0IkuhGp$-^~7#T)g4ORGP)r-tWB0|KP=))aIeKi@DPu0(~c0U!aNE;5^!E zP!8tD!J*j=Avl4#AG_9X-S7C2UY1DU%)96bYT9=t_>c-2gRhtw{CrfKI>ILI7ET4Y z0g==IQJdAQ?2nf0M6X0wLG`LR9eaq>63BLF>=Jg$KJyqEd()|5QHT*=YO0S{;;@=Z zE!O~{$!VR)RI4*IO+ySxkQK+$aqkIep6ja@`O5kr6AcZB!_jOJ=hhSIR?ZWfwxhe} zXTsFh&vR}e2>Rq+AJRDF`s0c zFB9WI8o`keO&|{{2TYx=EocaU&^cVlN<54~ODE)MxK%%DkC}`p)V?Xik+$PT_eYFY zIoK?(9~lNQAAAk2dF>LF`Q^l6;tSCku}evnh_IMmv7On;?j{}dBs@`dxhwEKCy&;r zmo&GlQ#5j8sV-^k0NT`cdVjE!ecb%%3ed>3y8+N$+>@h?)Uo{MAywS58GGucUHa#< zXK%R&aJ|$j0Ev9PS#YnQ(Ruit2qm~zK5?=7PvKV~v;(qIGg~rkC5@Tz>?2flNP=sD zlvMZYm#iX6uJs8>x0f=<8~ZL>Zt7drN5scUaA`l~Js#yDV`%tPdQD$p=t^}1y~V1c z83j;iV;(EhB3w`}Eu0hJV2~o?_GerC$9x+fF7l%aY@20yTH-#$Oy@dJ#FW(@Lpx%4 zzTvvGOtHWFhkl)?o-@0L)Hl?G^3nAr)8VP2P0XYv% zMa*8Ac@+(=ulsb(+kvIPc$3aYj;w3yk*YuWm9s93`n;%7y~3~B;ObJoWn{uedFGwX zb3Ecug?XJHma`T98i9t0ik^(cjjwrFg8d<-=a<4t2B?lt>ihjZku&Nt9R7I7%E<^M zPBWMO>2xdv6j)ic3n(2K>RN(F+)L!OuOTcA`uW!0zTaBok1#Q4qugDW8YSc4W;*^4 z)x_m%1zTC80B)FO2H_vIfMic1z;iH}9xY^BVcDxN?9rw%#f=QJVt}9{<7kS0MwHjX z7XE*g)z!L=Gx8yf(|2MUjzs`?(&q?D@sgUWF*|9k)flpfXkhoWdGg91rz%L=JjWYH z)2w>YMvu+8r1C^5gfmd#d2WZY^o-q8mT6<>cYSI_3Ll=#&dct^z2UJK1BvujlY; z_B9?IED0N`DY^9)`Xeylq&`=Dn_=zV}7e5fwPM7q;2dKSlUhHd<5@w#!?B&Qmb{6W&N5SEuqjFwN;5o?PuS`{UAHB(;Upe9U>SlmlZeist zL0G{|_tne6{WaIHOZR;Pdp*!1bKwBrlt%RA7JXgQRGw8+_BK`0erz-4v3c6Mqlh6l zW03w!>WFOGi?b7wicygnwM6&*-ijK{Dv~^Tn`03fkm(u{y0NZ#kmnh#R&^JH>y<74 ztGzD|r}F#W)~8Pt5i-vmDYHUOR8)>Bb0jlm$Sh=@D&%DB7&C>;LliO{Ly>vTlvy&5 zWz76rr@8O%`|o?b?;mgfsH^AlJbUl8*IN5t>%Mp5tEHXTcZ&^Fd7C>!cP48)nVDY0 ziJ+;WB`I@S(f^^*i_5Pbrb}b675yRH!l|P}6nA)|%R8<*p-24P=H;Y){ERm5D4#X9 z(uF!#$8vJH>jXx)7+#xaQP2#HIUPGIznuf1!KSBrMs z?iqXle#m-v#k|mbaZNS4;r?ks6{JOQXTMtJ&9c0%T{@6njT1rszHVO2nT}AspRbv)ynK z7K&YcGp7rZxKaR$-47ei4Tod`6&&92A8b5B)1cjfh6fsDseX>8c z#~|v48}`@{C41EaK}7OncK2O=GIMtEBqqOQs8SdjLw(M7(sZ(^ZzZ!D5=wB>3IN1q zBo2l6238N8sE-o)14Ms4CNs#SbnGWzhI!m6sF>HC)%-kQJlT&R$Gs?eX&-YZ)#Ipy z+PU9Pxds`7K#L}Q5aLy1S4k8`z{0?Gh4z)aoTxID;33sVfe%d*#gw_^ey8EzaQrut zSz1xJiB_+%D|qmY+(Yu#PX$-avz&ZquS=sR_4yu=GHn6^a@9V?F8;Ezrpm6h$L_wT z4--Mz;O==gtszc%@OyQB&yws6iG5osqw4FM87l=+`T{=Oq++{@=~ifX$gVQ3VMp+O zJu&p{!Ua*a3vafsS?qQC^T>fLpoKhSyw`AH@Kw%KI^8#Ho1I)sF0S$uzn(@|JM1P3 zjqWh$xq%qHB_H3pI2mVPx*bWJbW~DKOadJ9x=WiH;3VBUoQj7%WYgP3p;>=OX^$Cnp8)`jZT^v{G<$08BqszaMiT zsdD-P(puM$lfzchIOi*k(hn9@Jgm!u!{9j<%bG;|ecEt7e`-dy7 znRl&MV@t$HPAN}v%3;GfT`fjdT59NTLE5m|sXTZUF&uwS$7~efp&0LS}tS>802UH}2DoPRn`=YfQzJtBBA~xzb|4HSn+ea4N zJV3hif)?HuN_lpMW^1Yk#~L=cK~5HCVV@<4+rKd`L8U*e<89Z0Np=lVN)Mf2laa)a zQU0Ai0Ln(mMPJ)1T;M9iT5cfmlMwsvC&GjPmSPtc4o8?20hE;eVXyjlrc=1}I%+{t z%3f=2E)5w%b$E{3s>%(&^!d*zq!|_dY1Y6~v4cf}aFt}u`ytOfJ6N%XuXaaD9fGXl zPAHJ7t(jY(C%?J7PcW`h#C&h;*a&l1iJS8VfUx{L`p$p-;x~5Lu<3Bvx^f;1XDPKa zK$bc>O$;Km&A3#vp}^O7uKDwUZ#Z0$qmRw;hu%I!@+TWxTNQebPsK3how+4?P)9kh z`^9^l2OkywUQ%Kw2f|rU$RTA6B6Ls4qiiz9y?^QO|hm?~sCjMGo@p_`
MIy4|#ojE&TIRkp-(?qRj9)&Kb46TZgU#SSUiB?lF#eND zaz?5F=Y=_VG=#evGP>dkD$G0bf)ZKu+=oKLPaIqvP705S@z=9gB-g_sL!VA>WT^BO zfhT)|?*UnrPN3^&^h70}cg24X!J-E*-D2;URWrqgo@6d1iAj;t zfB7i7ry>9{gzm{XL+-zuarO#VDDNpFW#h*3Sk2HR&;8S0;WFis+x;Q$hO~)#h`t-o zL;Td%=E_Au=)W1S-Gv5#MEa0{M|DGOt(2U$F2+{StWmCZ(%4XwrO??KTB?-Ts-Bk# zW!@SIcZFuEeM5u1QKye#mobl>F&VhxBkQklnsA^^`7o{mF;A-LQ{yvVQeAkwbNR(R zXa>+WTQZ)&e<8QkmiMk;n`-lHhjmNKD=ljxJ5;>PQn_2OL)+;|Pi=Pr)~PwmA}!yV zLkfY;b`oPzU)@dwm4vp4+Ebm%^p4Y==7{x|(NH}v!lw0f<`*kf%mn9mzTt8dkNeXU z+{`KhY@OMjMKe<8ZIgud+uz|I-V~mB&GtBBgL}>3xw1*~zCsGT8%Q0YT6eCkLRMFB zNsQmVp`$>{(Qa|DY12cB@G&1FRm@94(+#_sFr9tT%rk8$%;VF>wF-Lz5=tlI zV`w*PT19tMKg1%4$l|J|&-01SU(P&J_lrR5p@f}cC%{FVLa~#P$xpY5IG3qonAvS3 zvC8$QP~l;8Y3biwrcl165IXn>#Fgj!F+YouxK{zqa;-&_#>GRmwcPdk%Pzph9a z)rR+h0O*0tU5mnMAjxHBdEO7TpmJJaS&}GXzi+8X)3@e})&u`{59xW9zXnq2c*xO^ zV;JH>_R&OY^GeEo+%|+5^Z7UZoy8qhIWi|!Xz{l1cN4FA^Iuz7kxK6M3hrUG0{QIFe%bD4`@quXn(4;%)ERdw~@(TT!ar%XjxnqvPA$kx8S< zk5)O}RU%g^a~!MJ^?I>4yH=Kd?HO2HiifzMa>1K+dr2_n%XFf()kA6p4U6Z3wk8SX?*5r ze4pmcEa&bX)xx}0yBhasE@<;uFWC={^Iz74pGvYh<*lEsJery?=vSMsXopIE))`5-GHi=7C zqMjR3C0`D_J;bzi%I2Dam2TSRmny3Pl6AjX`M_tTQ$f=hx}!g++3m-GuWkPETaSqN zn=Xzp;-KvVv&i{1>@+$5+IJQBFOY4~6ucLg_7ywE}|_AB~QzNL&x5joMZQ1xk# z{389o-@9ChR}WtFWmQpmEyN)4Fe6C|sHvkB{!gCvMzZBGlc0WZ(|7UOKK@wGqx_`3 zhg5wsm{(Li%~qwz8d@nc{YGr%S(#Yy3j7cF9lhsuz|VpW(n&f>4Z1uwn~3}E?vBN( z9feR5@V?#1VI0kO?OdH6r%p{}f}|Pk$MypWmcQWfAKC|F>2a(-+D=R)cpL){)6Br^rrP>N5})wvUC}loK=eK`#BN11w${) zrE{@`yhFE>*t-2g(AzxpMNf!cai_d+wbv@hYf{spGCJpX(wiK^a&pr%RH`=ij%|<~ zKSm&GYQ^JHZiVr)mF9^6=hl^mnPys)VH7KCUajREDI)JdM(Ejal9ha>xX{huygS<+ zXZD2AZ%}R+&fQ-NyPtHWiuU{y>6E;>G@?~;vu$jBmjL>Ulm=? zLIS_B_NiGxbs`!3#)gl@5`E%wRn74c*B`MvdX1 zhLYiO3vy&!&k2vL1caD9 zo*?oaf6AI0il>ah0ltC#h-fj_;`V=p2sHJe$_#A{j+D! z9zTBENXHuh!qt(+8}ogv$n?)w{h?^<>+QXhD`#SouF8Y~ZB(rS6AU~ZA0HnPAz2d2 zCd=0E8x}@kpJH2=y%e7E;$3a6ka^EMP%vR}LBKGCn5^%8=HZrTxl|x%>sETWgT?@` zyR$3a%@)*u`g*{jm-c478YYR$9KK7>QFiBv4EjJ*2%PiA8s}DG1*U=^eEm z?`5A+B6Kya|C)#i)s_8vt0837$endtxzvbnjdm+Q@5%nWrCr9?BC}H*%ZqcNBcDwt zR~n*0U|Qp>*`x_!V}4<4VFfx+!kXD9@5zt zwEQ>A^UjvE491b(2}vVt5LVX38h6!XqKEp`tLcTLCpspt?4}e-QlWe47y=QQo^yv? z*-cMNTiXpN#89Th^{zGI&!U^(-*IsfiJ3s;F~o79v=ZH)v%b>1CKOtl7OlMlY>Ecy? zdU`6V)a+ZujQJI?YWzlxVIX_*6{K{* z*+8#g7zKwz$8(8$2|+-u{aED#O)$Eg!LSu?TrbQbqT)X9xp#3lscgO9+;X7MXiW|} z_D(6pI?eU)7#Tq<_;%2F(NW zBnA!+k5$XzGG`oT-^S+1kt0#C+WaUgO3Dt|)s6ewte+g38+Bjx5f)wDcb|Jvbn)Uv z;EG4`^2p2DqEb(M26F8S*y+IC4h;!8S+k3w%*jli_X~0ycE%BSak3wsX~(eYAf3Ov z1yK`BUe=GIcZh)*&ZmK+m(txSET^4*5o1Bs&JS*H5CJ*u@t-TRh{ftSZxdHXv)m!v#m(@|H zR!^fqE+m3aFUKk&C`6Ly;fB={QcRODKf-*lkmLlyUoKAo(UipBnWrP0nRa;)nKvS? zd#u|gr!!SN#*}_>FONRFA%mIVUxM@4^V^3uRc67@^Vf{LtkBUJ)TR@%q7j}s*Kl!( zB!;Fh+4;C8JgkGJh~pml*S{W5Uv(#q9*w$+%0Wbv z5Fq$z9-mZ4O^%3tFooE4!^u2u0m#c$)zzDtucD^J1)#~|Uh&CQt8d#|!9ea@|HpRR z_NGC-b(kmU$2E!?_a#lDvDodTU{N}HdM>fs)goMN>G{cjBzXT|>3v%^x3;3?POUpp zA1SBzK5+sOX=jM)DYj(1ilXW}NQc@lb$XcZpI@rW3(+WIeqV+#u*Qkmr<+?CP>+?# zWdl+5_n^>k>EW>lj=}5ULs0&2j!ai)L-0TL_lF#TUXSaHFct2Lp@B>M(NVZ%0z;qf z`as#=dzeQE5=lQ35e9U<{>gB9R47SW{lWaShJ1siAOWGa>q3`NLMIn*b=abe^MPuc zps}t+81^2zA16SldlBF}sbia_jG&DY-o`-diszdmVOST$m{beBY#(QR*qASaj76d4 z0BAq6GZR1#bF5}k*>h*)QgeulO47~oB;XmPvAAa}i}K$R3@j)40~-n~OP zNBGx6gB|ENMKaUs@9|jZ2a!$b@fKy_DP&<+b8%5&!2j_wHrg zlM~aK)FX>a6Xv#AQ+rOqbsXw;a|Ky&+IcAgixo&R3NjNDbi9aAm`nMmXRbUm0+*HE z_tuMGBASpjFT{lmml7=}y?j8@aa{4@6|zmB+rx1q`P$kdo#wp(tiPXZ>aM`X7iWzZ z#)c&7_A^~61FBK3`Dn@E+#u?gLe5BkJ@qJoyK5=*MN7Ihh7up+#(4enDz_(6wX1t1 zQ`Q2SM|iL_m3&LByEp9|Gvf2UilJU4Y%F($5XA(KjOw)?_}er}&=-Z*45H&=mobA0 zRYW{nN8M}r>OI$m_Kv*IRrIJ%i)uSAnWv#xRjr1?8<{L*Wd zDh0=ktl}If-6+g3F)^|Pcfp0)28tly!WEQ+M8`Xj-_Z5gG>U$4BP&7`r%p2XP#Xnn z>4nZ#1!aih;`3ZZ(rP)5H!U;X?ek^6Lu8074y{yF_E;(O?AaCZPEZH-uWI#vo!4^o z3nvqLzXID1T^dD6N0hT^_mYwF?MF=WjgWflr`>d1_9 zL6O@FlD|E%TFDhvS`4)Z{k~HhiM*Deyhs=VsU$W2JE4kkhlI+R!eVqte>_0hwn<9F z=O``-WBNMGa;>{@&4iW2{d3_9jyAv*lz~POmyA#*yolbY_sNW13H&&4`Xcr*N;V z%1lqZb$#M`?ZViBEZ*|4Si9W_`OT+C^<0Hrwr>~_Z^W%G>RG*?e;oThH;a#&!oB#D z*_2P;i#vuD(b0CRS4~-3%N%^&=d!sA$P1l({Oc8TO63FFrZjh|o0b3C3;E`x;r`1G zm);lJ4R|j_vg2|LHdC`roBlKlhuJL}A;Q`vnS>*0{R*mP!riw=Sk_%$Bh7{Enk*DU z@A$V<@dY|LSA}e-1VNRua~R@Lm6`FbLwVc<$7@DKb2=cLb_%+2>t^9b3AU)Ip`9JK zh8^0D4IOU=F^^bI0e=3laD5*`#U)9U2PyA(_#uy~}6qKwCLE80+iW>!H(4YyrWk3kpfXXU-_?CRqzME2Ud@XLiFuu1|Jv zZ_l7MAaT?cX?dzDGVj9OiFCur5U@Xt}uZ5%abVz09s8uM48& zE1UN=Qz{p9B}hC>e9 zZBI|Oaz`kuto=vg78c0GO%WDnc7csq;YOvQ!P#M{TjvadNid!o0TPB|Al5`jM|b?V z-L}Kb{s0@OQdy2vl!Mljv~)e3HrQ?qgJHNUDJj8CL@CRVK~+eDj1R=K@ZL++?tR@@ z9*Oa{pL_*Px<)%I6%#KH?$&&k^avc6&3qKVOa~aXH**BHj9w2ik2ytaJtPH7a-Cj(%m4u;R<$<>chPHj1a3_jJ0kXFDqsTiK z#0VuND;JeV4CbqBn$}O(TKOdzd&;A4`yZvd@U(XH(7two)5v=!zO_~BjG0oyPwo_I zl?4TYQkU+R!i>1_s2kl}DuhJ8qj3XY=~}9oN*xbfu9YNT$7HG{`ju_(l}sP{W7&MS z4La^DwHCT09?D|g?hbDy%Ab&Zu+;R3i09fkxN2_f*VfvR)~SfScZbZ^bGIc7x%{7u zm6X?5sqa_vNG*TD{R*49X3=U%dqiyLP4@ ziccKUlQ~QHJ&_9)X|>;ZxZ^7+k-fta)m^tF&HQ;aM>R5NEPoQ{UO<@qLlbg)_$U*bzC9}?5Pp^k1OA9Wp{ENdmk$UP|;VYi4 zBgDlc@f3EsQ^FciM_hnViu+FXj zI7BH;4n2Mxs*WoB(^nqU z5*Z)pq`WAS+#S%I7OA7YDn7ihd{U-kCu)M)w6i=?_k%~CAew7svFA9lbbsNhes*7Q zg@#6QdU5j97*XR;j?g@DVXTcutz&Po-Ut0(P$|x!G&_l4<=Gw9tYpcY+dsV371dSg zQAlxP*t>pgDRp>x!R3@*C+wB$YC)TBF6~KIxDjcZ6>}`z%Yg)HRIgqg?#3d87Y}q* zI=0)1tD{oMNn>b5E||9{QeL!*J62hEb~q~OY%1NtT@!CKH$N7?BU(3LL;0}2k4||E zBF`|#2pgfQ_@LO@u+q1TDf5$dn!K-2r_kW8QBhZ3of-aLrPz1Umj@>t4S1*O(b+ZwBDi-oJiGGKavls5KYA-+sHRzKw655CtBnkW z%HjNeh&Y0;jF)tE3BOut%Alkm+Gekf-ZNBi6scDI+oQ@=u@LGjJzrbwbInm!W;zgk z<1{CyiQ1>=jJcBcW|GFW;n-l_>#pj_v7f%b{$y9iL52=|<-Og5G}JCgnnxnXn}Elt z;VIp+xt95w`QVk-S8=I9-sq!}53f+XNpHu#J=4|j^qTLcMsRDxjxTZW)^W}$lYoqA zX=85@`}az1}qZsa$gvuN0hPi|Ll#|8!x)g{{H^|!Uq?bcXF5^;;lp=8qk z{ES!vLG*0CKIx%E)f~tCx+Z~Vr`m$bFSLHRDBFieMw=PW5Tq4$sq&PR?7pICzn z@{C8wXakaMy-bLCXi!(!!{>&$5y5D8-_)ta*pWinbZdbTN`lZX9v(`RVY)3h^M-u0 zvxQYpm`=$dAIgjRZG?%oLA6i)f(#|oRS3?*k;UBPEeqk*4DBT~NkdNNR5w&U&cbG7 zxSpr*&st+57Zm6FbF=(ovKo2?-EJrIBc$YLdg@2&YFbj9rANI}nCtzM8Fbdh26oHc zjWT)=s_ij0HoodI%(z`~p@KlT&LLWa9L}RM6Zjo;nrF}tl{kB`;bhJqi@pSJ z%(oXvbS8^)*dDY;DF~M~b`Py7c1phNb4(2mW3@fFgwJ{>AVf>_J%`~N?7_a(HyilM znQA#wvR9Ubgyt$|9Q3YEFa(~ZWNZjfN+Y=o=dhl3Fd6UbCBrYubb<>O2895n!GV5q zGSQkIvFjW$aiyYQ(e2o&DNuI2qP=VD5X3gO@=Vd5VtS$6SO!#0PM z8b`0G^_3-jF7HO+A1AA;aUyRr23a)4iSU(4uT8iV?eN$(cHD@65!3$$`!;KdL`f)} z1>t#<4kM-^;L~DDrV-RSo42ahRM+fW)b>Plk!cYC>Kn+HF9Ljf=jK$&g{g1hxT-))r-rFMV|cH*3$FIk33jU*j&UQZ7)4!xp&3f4K$34Kvag ziHE${4<9P0zfbnRoIyMG0L|YYc?SIt4W$bb&+FG7{@08BzH*}D!83oE(9h>sRa`J%o4EHfTZ69`M97 z|AFv(r|!$I0zpm9()ai$(~b4WDy8| z;uLn-+0SSdi`&$&ew zHESxu%9;ds1A>5HLAYy^x{)jDl#PuI?o|8czpbWUb6Xpz)5=(gT(}Su)CO9_<7jOq zrO#a|iuQ2rEgxT-o3Q`Z`T{^}(nf*&h)__??VJZ0Mbj;y;b9u@jvzWG*>hnaKMHc% zD3HN+(AQ6ZDkz9uhUwi5{aKG==aP5?OT{wvK|w_dN;j-;Sva$so8_o{CZYkyR)A|? zCC1^#H@Hgl-fR~K5_$7gyStN%3tZdFX16*72t5^4Ko)Q#< z!})*K(XMPlDYwzcl)$7d{2W4j311&9iOzsiB!o6mfpJuyl(Gl(5l{q%AgXOE542@q zy7EwAVgyaE?oU*Z7cK%^TTl5VP|!Ba z2kp~F^dL~yK-jM-&~<%Y*nU>kIRaFU%|JG>kq+}?XGlpJ1`hO``1x|ccV_Opfgrdo zvBWq|zg1$qj>$D(%oOB}LDn}>y*?UlUDbSo$j!U%jAfeX&guoOV;FHUy18OtxX7A0 zW*6>aPFY5~eHoL8&e5p_ZQu1kV^iM=BUw^Riwsz=(Vu&avIkUA*_x;|Uv7ciGRO>O zmJ~g`p~hRl&dV!$cl0t&wt9PBz~~?^0xlI(-dC}dmi?3 z2aQSxrune_EFOUu`_y2Gom;rgIbf`dh(ych53Kd%>H(N6xB$1vI(^p9ui?f*S`K=V zpcDtyW7~skK2%IhOfoVu77^HXoU|n98Q2=M!WDlRuWTnC{#d6!LIhX{7GS-ED_$V9 zSY4^F9q+a*15%P8%__}x@fK3I>+0$>jEwSEg;fvOL?7KJ0<6zjn^& zFYVI+FC+Ee;31L7y+eogXbyDA?L=AL+u0^yKmC`tkE2;GFN%$Rb zg&nADmTp6vI}dUP4*@e_^*F`}RjBX=q^H>+5QsNzKSZc&_Km91q^b?H1F+C=`CX!fCH*z^ecG z=b!#U%ek>JXem)*yZ0V@!0>y76HmbTkoF_HN1tzQZoLh`QbrUJA>mg}yqCUKuE@i(e`TN|55DL3SFB+ezGw^lG!j*@AED9Z z`?ftNVfYD`&cwa>9z+w6|1mQ^AIC*@l%c?R`-H7q-(zz-{kL2@lLJ8?42jD0zdxdQ zIV23fZS20nk5JxDKh7|40ul2z<6!r(@5zDJ@b~yEPuAxICymRef20S~fqzBld;k1= z9Oj3Ftna7-W4Z?o>OcTtIsNMQOD5A)Fa9|1n}XFGVBrzJL$>W5jp>ldk`}ck5C&T^36M)@>`(yln>=&%;A4u54KgZA`T84X( NjD!Lz=c@k0{{acS$4meK diff --git a/overview.uxf b/overview.uxf index 878b565..480732a 100644 --- a/overview.uxf +++ b/overview.uxf @@ -4,46 +4,21 @@ UMLClass - 1210 - 480 + 1250 + 410 90 - 30 - - inet -lt=- - - - - UMLClass - - 810 - 480 - 120 70 -mobile -modem - - - - UMLClass - - 980 - 480 - 100 - 30 - - webhost -lt=- -layer=-1 +inet +lt=- UMLClass - 1210 - 520 + 1250 + 750 90 30 @@ -54,8 +29,8 @@ bg=#90CAF9 UMLClass - 980 - 520 + 1020 + 750 100 30 @@ -67,8 +42,8 @@ layer=-1 Relation - 730 - 570 + 770 + 820 280 50 @@ -80,8 +55,8 @@ Generated by Loop Relation - 1060 - 610 + 1100 + 860 200 40 @@ -93,8 +68,8 @@ fg=#1E88E5 UMLClass - 650 - 520 + 690 + 750 100 30 @@ -106,21 +81,21 @@ layer=-1 Relation - 730 - 720 + 770 + 970 280 50 lt=<<<- -GET (Ride)(Request) +POST (Ride)(Request) (Data) 260.0;20.0;10.0;20.0 Relation - 1060 - 740 + 1100 + 990 200 40 @@ -132,8 +107,8 @@ fg=#1E88E5 Relation - 730 - 780 + 770 + 1030 280 40 @@ -144,8 +119,8 @@ OK (Ride) UMLClass - 450 - 520 + 490 + 750 80 30 @@ -156,8 +131,8 @@ bg=#90CAF9 Relation - 490 - 650 + 530 + 900 190 40 @@ -169,8 +144,8 @@ fg=#1E88E5 Relation - 490 - 700 + 530 + 950 190 40 @@ -182,8 +157,8 @@ fg=#1E88E5 Relation - 730 - 630 + 770 + 880 280 40 @@ -194,22 +169,23 @@ OK (Ride)(Request) UMLClass - 450 - 480 + 490 + 410 300 - 30 + 70 - localhost + +localhost lt=- UMLClass - 420 - 450 + 460 + 810 910 - 400 + 280 lt=.. @@ -219,8 +195,8 @@ layer=-10 UMLClass - 990 - 590 + 1030 + 840 80 40 @@ -233,13 +209,13 @@ transparency=0 UMLClass - 660 - 590 + 700 + 840 80 - 60 + 210 - Available -Rides + +Ride bg=#FFF59D transparency=0 @@ -247,8 +223,8 @@ transparency=0 UMLClass - 990 - 630 + 1030 + 880 80 110 @@ -262,36 +238,8 @@ layer=1 UMLClass - 660 - 650 - 80 - 70 - - Booked -Rides -bg=#E6EE9C -transparency=0 - - - - UMLClass - - 660 - 720 - 80 - 80 - - Loaded -Rides -bg=#A5D6A7 -transparency=0 - - - - UMLClass - - 990 - 740 + 1030 + 990 80 60 @@ -304,32 +252,32 @@ transparency=0 Relation - 1240 - 540 + 1280 + 770 30 - 310 + 320 lt=- fg=#1E88E5 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;300.0 Relation - 480 - 540 + 520 + 770 30 - 310 + 320 lt=- fg=#1E88E5 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;300.0 UMLClass - 1240 - 630 + 1280 + 880 20 130 @@ -342,8 +290,8 @@ layer=4 UMLClass - 480 - 670 + 520 + 920 20 50 @@ -356,27 +304,171 @@ layer=4 Relation - 1020 - 540 + 1060 + 770 30 - 310 + 320 lt=- fg=#5E35B1 layer=-4 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;300.0 Relation + + 730 + 770 + 30 + 320 + + lt=- +fg=#5E35B1 +layer=-4 + 10.0;10.0;10.0;300.0 + + + UMLClass + + 700 + 590 + 80 + 50 + + Check +Supply +bg=#FFF59D +transparency=0 + + + + UMLClass + + 850 + 410 + 120 + 70 + + +mobile +modem + + + + UMLClass + + 1020 + 410 + 100 + 70 + + +webhost +lt=- +layer=-1 + + + + UMLClass + + 1020 + 510 + 100 + 30 + + forward +bg=#B39DDB +layer=-1 + + + + UMLClass 690 - 540 + 510 + 100 + 30 + + reverse +bg=#B39DDB +layer=-1 + + + + UMLClass + + 460 + 570 + 910 + 110 + + +lt=.. +layer=-10 + + + + UMLClass + + 1030 + 590 + 80 + 50 + + Available +Rides +bg=#FFF59D +transparency=0 + + + + Relation + + 1060 + 530 + 30 + 150 + + lt=- +fg=#5E35B1 +layer=-4 + 10.0;10.0;10.0;130.0 + + + Relation + + 730 + 530 30 - 310 + 150 lt=- fg=#5E35B1 layer=-4 - 10.0;10.0;10.0;290.0 + 10.0;10.0;10.0;130.0 + + + Relation + + 770 + 580 + 280 + 40 + + lt=<<<- +POST (Available) + 260.0;20.0;10.0;20.0 + + + Relation + + 770 + 610 + 280 + 40 + + lt=<<<. +OK (# Available) + 10.0;20.0;260.0;20.0 diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/CheckSuppyR.java b/reverse/src/main/java/com/olexyn/misp/reverse/CheckSuppyR.java new file mode 100644 index 0000000..38d29b9 --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/CheckSuppyR.java @@ -0,0 +1,39 @@ +package com.olexyn.misp.reverse; + +import org.json.JSONObject; + +public class CheckSuppyR implements Runnable { + + private int available; + public int CHECK_SUPPLY_INTERVAL = 100; + + private Reverse reverse; + + public CheckSuppyR(Reverse reverse) { + this.reverse = reverse; + } + + + @Override + public void run() { + while (true) { + JSONObject obj = new JSONObject().put("available", 0); + + try { + String result = Tools.send("POST", reverse.FORWARD_URL, obj.toString()); + + JSONObject resultObj = new JSONObject(result); + + available = resultObj.getInt("available"); + + Thread.sleep(CHECK_SUPPLY_INTERVAL); + + } catch (Exception ignored) { } + } + + + } + + + public int getAvailable() { return available; } +} diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/JourneyGenerator.java b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyGenerator.java new file mode 100644 index 0000000..a045a66 --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyGenerator.java @@ -0,0 +1,36 @@ +package com.olexyn.misp.reverse; + + +public class JourneyGenerator implements Runnable { + + public int OVERHEAD = 8; + public int CHECK_DEPLETION_INTERVAL = 500; + public int START_NEW_JOURNEY_INTERVAL = 100; + + private Reverse reverse; + private CheckSuppyR checkSuppyR; + + public JourneyGenerator(Reverse reverse , CheckSuppyR checkSuppyR) { + this.reverse = reverse; + this.checkSuppyR = checkSuppyR; + } + + + + @Override + public void run() { + + while (true) { + try { + Thread journeyT = new Thread(new JourneyR(reverse)); + journeyT.setName("journeyT"); + journeyT.start(); + + while (checkSuppyR.getAvailable() > OVERHEAD) { Thread.sleep(CHECK_DEPLETION_INTERVAL); } + + Thread.sleep(START_NEW_JOURNEY_INTERVAL); + + } catch (Exception ignored) { } + } + } +} diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/JourneyR.java b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyR.java new file mode 100644 index 0000000..d08caad --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/JourneyR.java @@ -0,0 +1,53 @@ +package com.olexyn.misp.reverse; + +import com.olexyn.misp.helper.Ride; + +import java.io.IOException; + +public class JourneyR implements Runnable { + + private Reverse reverse; + + public JourneyR(Reverse reverse) { + this.reverse = reverse; + } + + + @Override + public void run() { + try { + Ride _ride = sendPostRide(); + _ride = sendGetRequest(_ride); + sendPostRideRequestData(_ride); + } catch (Exception ignored) { } + } + + + Ride sendPostRide() throws IOException { + + final Ride ride = new Ride(); + + final String result = Tools.send("POST", reverse.FORWARD_URL, ride.json()); + + String _req = new Ride(result).getRequest(); + String request = (_req == null) ? "" : _req; + ride.setRequest(request); + + return ride; + } + + + Ride sendGetRequest(Ride ride) throws IOException { + + final String result = Tools.send("GET", reverse.APP_URL, ride.getRequest()); + ride.setData(result); + + return ride; + } + + + void sendPostRideRequestData(Ride ride) throws IOException { + + Tools.send("POST", reverse.FORWARD_URL, ride.json()); + } +} \ No newline at end of file diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/README.md b/reverse/src/main/java/com/olexyn/misp/reverse/README.md index 43d0100..b306e30 100644 --- a/reverse/src/main/java/com/olexyn/misp/reverse/README.md +++ b/reverse/src/main/java/com/olexyn/misp/reverse/README.md @@ -1,3 +1,16 @@ -* Run from `ReverseApp` : - * as `main()` - * or as `Runnable` from somewhere else. \ No newline at end of file +#### Overview +* `Reverse` + * Core + * Starts Threads + * Coordinates + * Launch from here + * as `main()` + * or as `Runnable` from somewhere else. +* `CheckSupply` + * Runnable + * Asks *forward* about supply. +* `Journey` + * Runnable + * Journey fo a `Ride` through the App. +* `Tools` + * Performs the actual request. \ No newline at end of file diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java b/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java index 4308045..9725eb0 100644 --- a/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java +++ b/reverse/src/main/java/com/olexyn/misp/reverse/Reverse.java @@ -1,117 +1,31 @@ package com.olexyn.misp.reverse; -import com.olexyn.misp.helper.Ride; -import org.json.JSONObject; +public class Reverse implements Runnable { -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; - - -public class Reverse { - - - private int available; public String FORWARD_URL = "http://localhost:8090/forward"; public String APP_URL = "http://localhost:8090/app"; - public void start() throws IOException { - - sendPostAvailable(); - sendPostRide(); - - - } - - - void sendPostRide() throws IOException { - - final Ride ride = new Ride(); - - final String result = send("POST", FORWARD_URL, ride.json()); - - - - - - - String _req = new Ride(result).getRequest(); - String request = (_req == null) ? "" : _req; - ride.setRequest(request); - - sendGetRequest(ride); - } - - - void sendGetRequest(Ride ride) throws IOException { + public void start() { - final String result = send("GET", APP_URL, ride.getRequest()); - ride.setData(result); + CheckSuppyR checkSuppyR = new CheckSuppyR(this); - sendPostRideRequestData(ride); - } - - - void sendPostRideRequestData(Ride ride) throws IOException { - - send("POST", FORWARD_URL, ride.json()); - - //sendPostRide(); + Thread checkSupplyT = new Thread(checkSuppyR); + checkSupplyT.setName("checkSupplyT"); + checkSupplyT.start(); + Thread journeyGeneratorT = new Thread(new JourneyGenerator(this, checkSuppyR)); + journeyGeneratorT.setName("journeyGeneratorT"); + journeyGeneratorT.start(); } - void sendPostAvailable() throws IOException { - JSONObject obj = new JSONObject(); - obj.put("available", 0); - String result = send("POST", FORWARD_URL, obj.toString()); - JSONObject resultObj = new JSONObject(result); - available = resultObj.getInt("available"); - - } - - - - - private String send(String method, String urlString, String body) throws IOException { + public static void main(String... args) { new Reverse().start(); } - URL url = new URL(urlString); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(method); - - - boolean getToForward = method.equals("GET") && urlString.contains("forward"); - - if (method.equals("POST") || getToForward) { - connection.setDoOutput(true); - - - DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); - - if (body != null) { - outputStream.writeBytes(body); - } - - outputStream.flush(); - outputStream.close(); - - } - - - int i = connection.getResponseCode(); - BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); - String out; - StringBuilder sb = new StringBuilder(); - while ((out = in.readLine()) != null) { sb.append(out); } - in.close(); - return sb.toString(); - } + @Override + public void run() { start(); } } diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/ReverseApp.java b/reverse/src/main/java/com/olexyn/misp/reverse/ReverseApp.java deleted file mode 100644 index 28d69e2..0000000 --- a/reverse/src/main/java/com/olexyn/misp/reverse/ReverseApp.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.olexyn.misp.reverse; - -import java.io.IOException; - -public class ReverseApp implements Runnable { - - - public static void main(String... args) throws IOException { - new ReverseApp().doRun(); - } - - - @Override - public void run() { - - try { - doRun(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - - - private void doRun() throws IOException { - Reverse reverse = new Reverse(); - - reverse.FORWARD_URL = "http://localhost:8090/forward"; - reverse.APP_URL = "http://localhost:8090/app"; - - - - reverse.start(); - } -} diff --git a/reverse/src/main/java/com/olexyn/misp/reverse/Tools.java b/reverse/src/main/java/com/olexyn/misp/reverse/Tools.java new file mode 100644 index 0000000..5fe3c03 --- /dev/null +++ b/reverse/src/main/java/com/olexyn/misp/reverse/Tools.java @@ -0,0 +1,46 @@ +package com.olexyn.misp.reverse; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class Tools { + + + static String send(String method, String urlString, String body) throws IOException { + + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod(method); + + + boolean getToForward = method.equals("GET") && urlString.contains("forward"); + + if (method.equals("POST") || getToForward) { + connection.setDoOutput(true); + + + DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream()); + + if (body != null) { + outputStream.writeBytes(body); + } + + outputStream.flush(); + outputStream.close(); + + } + + + int i = connection.getResponseCode(); + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String out; + StringBuilder sb = new StringBuilder(); + while ((out = in.readLine()) != null) { sb.append(out); } + in.close(); + return sb.toString(); + } +}