s`=FF}(y@^pQl;rL3fHs8icmA+!6YJt&8
ztSF?%Un35qkv>drkks&BNTJv~xK?vD;aBkp7eIkDYqn+G0%;sT4FcwAoO+vke{8CO
z0d76sgg$CannW5T#q`z~L4id)9BCKRU0A!Z-{HpXr)QJrd9@iJB+l32Ql)Z}*v(St
zE)Vp=BB=DDB4Pr}B(UHNe31<@!6d{U?XDoxJ@S)9QM)2L%SA0x^~^fb=bdsBy!uh&
zU?M_^kvnt%FZzm+>~bEH{2o?v&Iogs`1t-b+Ml`J!ZPS(46YQJKxWE81O$HE5w;**
z|8zM%bp`M7J8)4;%DqH`wVTmM0V@D}xd%tRE3_6>ioMJxyi5Hkb>85muF81&EY!73ei
zA3e<#ug||EZJ=1GLXNJ)A
z791&ge#lF;GVX6IU?iw0jX^1bYaU?+x{zPlpyX6zijyn*nEdZ$fxxkl!a-~*P3bkf
zPd*pzu~3GBYkR_>ET`5UM^>>zTV>5m>)f=az{d0sg6a8VzUtXy$ZS?h#Gk-CA?7)c
zI%Vu9DN6XSDQn6;?n9`>l$q&>s?K)R8*OsmI+$L_m
z_~E`}w694Z*`Xk3Ne=497Si~=RWRqCM?6=88smrxle#s*W
znwhTRsMRmg?37GLJ-)%nDZA7r$YG849j8mJWir1bWBy&
zZPneYojSbooC8U@tkO`bWx4%E5*;p#Q^1^S3lsfy7(6A{jL0`A__0vm?>xC%1y8_m
z57FfWr^@YG2I1K7MGYuYd>JC}@sT2n^rkrY3w%~$J$Y~HSoOHn?zpR$
zjLj_bq@Yj8kd~DXHh30KVbz@K)0S;hPKm+S&-o%IG+@x@MEcrxW2KFh;z^4dJDZix
zGRGe&lQD$p)0JVF4NRgGYuh0bYLy)BCy~sbS3^b3
zHixT<%-Vwbht|25T{3^Hk;qZ^3s!OOgljHs+EIf~C%=_>R5%vQI4mQR9qOXThMXlU
zS|oSH>0PjnCakb*js2{ObN`}%HYsT6=%(xA|
znpUtG_TJ08kHgm5l@G|t?4E3tG2fq?wNtIp*Vqrb{9@bo^~Rx7+J&OnayrX`LDcF~
zd@0m0ZJ#Z@=T>4kTa5e2FjI&5c(F7S{gnRPoGpu9eIqrtSvnT_tk$8T)r%YwZw!gK
zj*k@cG)V&@t+mtDi37#>LhVGTfRA^p%x0d#_P|Mktz3*KOoLIqFm`~KGoDDD4OOxe
z?}ag_c08u%vu=5Vx=~uoS8Q;}+R2~?Uh|m-+`-2kDo$d6T!nD*hc#dB(*R{LXV=zo
z`PJP0V=O!@3l-bw+d`X6(=@fq=4O#ETa8M^fOvO4qja9o3e8ANc9$sI=A4$zUut~w
z4+JryRkI{9qWxU1CCMM$@Aj=6)P+z?vqa=UCv_4XyVNoBD{Xb~Oi4cjjhm8fRD!*U
z2)zaS;AI78^Wq+5mDInKiMz|z#K`2emQfNH*U;{9^{NqSMVoq?RSo43<8YpJM^+W$
zxy!A5>5Zl16Vi#?nAYywu3w_=KWnd3*QetocWt`3pK67>)ZVwnT3h
zbPdD&MZkD?q=-N`MpCCwpM74L+Tr1aa)zJ)8G;(Pg51@U&5W>aNu9rA`bh{vgfE={
zdJ>aKc|2Ayw_bop+dK?Y5$q--WM*+$9&3Q9BBiwU8L<-`T6E?ZC`mT0b}%HR*LPK}
z!MCd_Azd{36?Y_>yN{U1w5yrN8q`z(Vh^RnEF+;4b|2+~lfAvPT!`*{MPiDioiix8
zY*GdCwJ{S(5(HId*I%8XF=pHFz<9tAe;!D5$Z(iN#jzSql4sqX5!7Y?q4_%$lH
zz8ehZuyl0K=E&gYhlfFWabnSiGty$>md|PpU1VfaC5~kskDnZX&Yu}?-h;OSav=8u
z=e3Yq=mi$4A|sB-J00;1d{Sd1+!v0NtU((Nz2;PFFlC}V{@p&4wGcVhU&nI($RAS!
zwXn7)?8~1J3*4+VccRSg5JS<(bBhBM&{ELMD4C_NTpvzboH!{Zr*%HP;{UqxI#g&7
zOAqPSW5Qus$8-xtTvD%h{Tw<2!XR(lU54LZG{)Cah*LZbpJkA=PMawg!O>X@&%+5XiyeIf91n2E*hl$k-Y(3iW*E}Mz-h~H~7S9I1I
zR#-j`|Hk?$MqFhE4C@=n!hN*o5+M%NxRqP+aLxDdt=wS6rAu6ECK*;AB%Nyg0uyAv
zO^DnbVZZo*|Ef{nsYN>cjZC$OHzR_*g%T#oF
zCky9HJS;NCi=7(07tQXq?V8I&OA&kPlJ_dfSRdL2bRUt;tA3yKZRMHMXHW@$l%-{vQd7y@~i*^qnj^`Z{)V$6@l&!qP_y
zg2oOd!Wit#)2A~w-eqw3*Mbe)U?N|q6sXw~E~&$!!@QYX4b@%;3=>)@Z#K^`8~Aki
z+LYKJu~Y$;F5%_0aF9$MsbGS9Bz2~VUG@i@3Fi2q(hG^+Ia44LrfSfqtg$4{%qBDM
z_9-O#3V+2~W$dW0G)R7l_R_vw(KSkC--u&%Rs^Io&*?R=`)6BN64>6>)`TxyT_(Rd
zUn+aIl1mPa#Jse9B3`!T=|e!pIp$(8ZOe0ao?nS7o?oKlj
zypC-fMj1DHIDrh1unUI1vp=-Fln;I9e7Jvs3wj*^_1&W|X}
zZSL|S|Bb@CV*YC_-T&2!Ht3b6?)d`tHOP?rA;;t#zaXa0Sc;vGnV0BLIf8f-r{QHh
z*Zp`4_ItlOR7{u(K+!p_oLDmaAkNag*l4#29F2b_A*0oz0T|#-&f*;c#<`^)(W@gm
z#k9k=t%u8<+C1fNUA{Fh7~wgPrEZZ#(6aBI%6bR4RO(e1(ZocjoDek4#MTgZD>1NG
zy9~yoZfWYfwe&S-(zk4o6q6o?2*~DOrJ(%5wSnEJMVOKCzHd
z=Yhm+HLzoDl{P*Ybro7@sk1!Ez3`hE+&qr7Rw^2glw^M(b(NS2!F|Q!mi|l~lF94o
z!QiV)Q{Z>GO5;l1y!$O)=)got;^)%@v#B!ZEVQy1(BJApHr5%Zh&W|gweD+%Ky%CO
ztr45vR*y(@*Dg_Qw5v~PJtm^@Lyh*zRuT6~(K+^HWEF{;R#L$vL2!_ndBxCtUvZ(_
zauI7Qq}ERUWjr&XW9SwMbU>*@p)(cuWXCxRK&?ZoOy>2VESII53iPDP64S1pl{NsC
zD;@EGPxs&}$W1;P6BB9THF%xfoLX|4?S;cu@$)9OdFst-!A7T{(LXtdNQSx!*GUSIS_lyI`da8>!y_tpJb3Zuf0O*;2y?HCfH
z5QT6@nL|%l3&u4;F!~XG9E%1YwF*Fgs5V&uFsx52*iag(?6O|gYCBY3R{qhxT-Etb
zq(E%V=MgQnuDGEKOGsmBj9T0-nmI%zys8NSO>gfJT4bP>tI>|ol@
zDt(&SUKrg%cz>AmqtJKEMUM;f47FEOFc%Bbmh~|*#E
zDd!Tl(wa)ZZIFwe^*)4>{T+zuRykc3^-=P1aI%0Mh}*x7%SP6wD{_?
zisraq`Las#y-6{`y@CU3Ta$tOl|@>4qXcB;1bb)oH9kD6
zKym@d$
zv&PZSSAV1Gwwzqrc?^_1+-ZGY+3_7~a(L+`-WdcJMo>EWZN3%z4y6JyF4NR^urk`c
z?osO|J#V}k_6*9*n2?j+`F{B<%?9cdTQyVNm8D}H~T}?HOCXt%r7#2hz97Gx#X%62hyaLbU
z_ZepP0<`<;eABrHrJAc!_m?kmu#7j}{empH@iUIEk^jk}^EFwO)vd7NZB=&uk6JG^
zC>xad8X$h|eCAOX&MaX<$tA1~r|hW?-0{t4PkVygTc`yh39c;&efwY(-#;$W)+4Xb
z$XFsdG&;@^X`aynAMxsq)J#KZXX!sI@g~YiJdHI~r
z$4mj_?S29sIa4c$z)19JmJ;Uj?>Kq=0XuH#k#};I&-6zZ_&>)j>UR0XetRO!-sjF<
zd_6b1A2vfi++?>cf}s{@#BvTD|a%{9si7G}T+8ZnwuA
z1k8c%lgE<-7f~H`cqgF;qZ|$>R-xNPA$25N1WI3#n%gj}4Ix}vj|e=x)B^roGQpB)
zO+^#nO2
zjzJ9kHI6nI5ni&V_#5>
z!?<7Qd9{|xwIf4b0bRc;zb}V4>snRg6*wl$Xz`hRDN8laL5tg&+@Dv>U^IjGQ}*=XBnXWrwTy;2nX?<1rkvOs#u(#qJ=A
zBy>W`N!?%@Ay=upXFI}%LS9bjw?$h)7Dry0%d}=v0YcCSXf9nnp0tBKT1eqZ-4LU`
zyiXglKRX)gtT0VbX1}w0f2ce8{$WH?BQm@$`ua%YP8G@<$n13D#*(Yd5-bHfI8!on
zf5q4CPdgJLl;BqIo#>CIkX)G;rh|bzGuz1N%rr+5seP${mEg$;uQ3jC$;TsR&{IX<
z;}7j3LnV+xNn^$F1;QarDf6rNYj7He+VsjJk6R@0MAkcwrsq4?(~`GKy|mgkfkd1msc2>%B!HpZ~HOzj}kl|ZF(IqB=D6ZTVcKe=I7)LlAI=!XU?J*i#9VXeKeaG
zwx_l@Z(w`)5Cclw`6kQKlS<;_Knj)^Dh2pL`hQo!=GPOMR0iqEtx12ORLpN(KBOm5
zontAH5X5!9WHS_=tJfbACz@Dnkuw|^7t=l&x8yb2a~q|aqE_W&0M|tI7@ilGXqE)MONI8p67OiQGqKEQWw;LGga=ZM1;{pSw1jJK_y$vhY6
ztFrV7-xf>lbeKH1U)j3R=?w*>(Yh~NNEPVmeQ8n}0x01$-o
z2Jyjn+sXhgOz>AzcZ
zAbJZ@f}MBS0lLKR=IE{z;Fav%tcb+`Yi*!`HTDPqSCsFr>;yt^^&SI2mhKJ8f*%ji
zz%JkZGvOn{JFn;)5jf^21AvO-9nRzsg0&CPz;OEn07`CfT@gK4abFBT$Mu?8fCcscmRkK+
zbAVJZ~#_a
z{|(FFX}~8d3;DW8zuY9?r#Dt>!aD>}
zlYw>D7y#eDy+PLZ&XKIY&Df0hsLDDi(Yrq8O==d30RchrUw8a=Eex>Dd?)3+k=}Q>
z-b85lun-V$I}86Vg#l1S@1%=$2BQD5_waAZKQfJ${3{b2SZ#w1u+jMr{dJMvI|Og=
zpQ9D={XK|ggbe04zTUd}iF{`GO1dV%zWK~?sM9OM(=
zVK9&y4F^w1WFW{$qi|xQk0F`@HG8oLI5|5$j~ci9xTMT69v5KS-Yym--raU5kn2#C
z<~5q^Bf0rTXVhctG2%&MG(cUGaz(gC(rcG~>qgO$W6>!#NOVQJ;pIYe-lLy(S=HgI
zPh;lkL$l+FfMHItHnw_^bj8}CKM19t(C_2vSrhX2$K@-gFlH};#C?1;kk&U1L%4S~
zR^h%h+O1WE7DI$~dly?-_C7>(!E`~#REJ~Xa7lyrB$T!`&qYV5QreAa^aKr%toUJR
zPWh)J3iD`(P6BI5k$oE$us#%!4$>`iH2p-88?WV0M$-K)JDibvA4
zpef%_*txN$Ei3=Lt(BBxZ&mhl|mUz-z*OD1=r9nfN
zc5vOMFWpi>K=!$6f{eb?5Ru4M3o;t9xLpry|C%j~`@$f)OFB5+xo8XM8g&US@UU-sB|dAoc20y(F@=-2Ggp_`SWjEb#>IG^@j
zuQK}e^>So#W2%|-)~K!+)wdU#6l>w5wnZt2pRL5Dz#~N`*UyC9tYechBTc2`@(OI#
zNvcE*+zZZjU-H`QOITK^tZwOyLo)ZCLk>>Wm+flMsr5X{A<|m`Y281n?8H_2Fkz5}X?i%Rfm5s+n`J
zDB&->=U+LtOIJ|jdYXjQWSQZFEs>Rm{`knop4Sq)(}O_@gk{14y51)iOcGQ5J=b#e
z2Yx^6^*F^F7q_m-AGFFgx5uqyw6_4w?yKCJKDGGprWyekr;X(!4CnM5_5?KgN=3qCm03
z##6k%kIU5%g!cCL(+aK>`Wd;dZ4h$h_jb7n?nqx5&o9cUJfr%h#m4+Bh)>HodKcDcsXDXwzJ3jR(sSFqWV(OKHC*cV8;;&bH=ZI0YbW3PgIHwTjiWy
z?2MXWO2u0RAEEq(zv9e%Rsz|0(OKB?_3*kkXwHxEuazIZ7=JhaNV*P~hv57q55LoebmJpfHXA@yuS{Esg+
z*C}0V-`x^=0nOa@SPUJek>td~tJ{U1T&m)~`FLp*4DF77S^{|0g%|JIqd-=5)p6a`
zpJOsEkKT(FPS@t^80V!I-YJbLE@{5KmVXjEq{QbCnir%}3
zB)-J379=wrBNK6rbUL7Mh^tVmQYn-BJJP=n?P&m-7)P#OZjQoK0{5?}XqJScV6>QX
zPR>G{xvU_P;q!;S9Y7*07=Z!=wxIUorMQP(m?te~6&Z0PXQ@I=EYhD*XomZ^z;`Os
z4>Uh4)Cg2_##mUa>i1Dxi+R~g#!!i{?SMj%9rfaBPlWj_Yk)lCV--e^&3INB>I?lu
z9YXCY5(9U`3o?w2Xa5ErMbl5+pDVpu8v+KJzI9{KFk1H?(1`_W>Cu903Hg81vEX32l{nP2vROa1Fi!Wou0+ZX7Rp`g;B$*Ni3MC-vZ`f
zFTi7}c+D)!4hz6NH2e%%t_;tkA0nfkmhLtRW%){TpIqD_ev>}#mVc)<$-1GKO_oK8
zy$CF^aV#x7>F4-J;P@tqWKG0|D1+7h+{ZHU5OVjh>#aa8+V;6BQ)8L5k9t`>)>7zr
zfIlv77^`Fvm<)_+^z@ac%D&hnlUAFt8!x=jdaUo{)M9Ar;Tz5Dcd_|~Hl6CaRnK3R
zYn${wZe8_BZ0l0c%qbP}>($jsNDay>8+JG@F!uV4F;#zGsBP0f$f3HqEHDz_sCr^q
z1;1}7KJ9&`AX2Qdav1(nNzz+GPdEk5K3;hGXe{Hq13{)c
zZy%fFEEH#nlJoG{f*M^#8yXuW%!9svN8ry-Vi7AOFnN~r&D`%6d#lvMXBgZkX^vFj
z;tkent^62jUr$Cc^@y31Lka6hS>F?1tE8JW$iXO*n9CQMk}D*At3U(-W1E~z>tG?>
z5f`5R5LbrhRNR8kv&5d9SL7ke2a*Xr)Qp#75
z6?-p035n2<7hK;sb>t9GAwG4{9v~iEIG>}7B5zcCgZhu$M0-z8?eUO^E?g)md^XT_
z2^~-u$yak>LBy(=*GsTj6p<>b5PO&un@5hGCxpBQlOB3DpsItKZRC*oXq-r{u}Wb;
z&ko>#fbnl2Z;o@KqS-d6DTeCG?m1
z&E>p}SEc*)SD&QjZbs!Csjx~0+$@ekuzV_wAalnQvX3a^n~3ui)|rDO+9HW|JPEeBGP4
z)?zcZ<8qv47`EWA*_X~H^vr(lP|f%=%cWFM;u)OFHruKT<~?>5Y8l?56>&;=WdZU#
zZEK4-C8s-3zPMA^&y~e*9z)!ZJghr3N^pJa2A$??Xqx-BR*TytGYor&l8Q+^^r%Yq02xay^f#;;wO6K7G!v>wRd6531WnDI~h$PN(
z+4#08uX?r&zVKsQ;?5eBX=FxsXaGyH4Gth4a&L|{8LnNCHFr1M{KjJ!BfBS_aiy-E
zxtmNcXq3}WTwQ7Dq-9YS5o758sT(5b`Sg-NcH>M9OH1oW6&sZ@|GYk|cJI`vm
zO<$~q!3_$&GfWetudRc*mp8)M)q7DEY-#@8w=ItkApfq3sa)*GRqofuL7)dafznKf
zLuembr#8gm*lIqKH)KMxSDqbik*B(1bFt%3Vv|ypehXLCa&wc7#u!cJNlUfWs8iQ`
z$66(F=1fkxwg745-8_eqV>nWGY3DjB9gE23$R5g&w|C{|xvT@7j*@aZNB199scGchI7pINb5iyqYn)O=yJJX)Ca3&Ca+{n<=1w|(|f0)h<9gs$pVSV<<9Og-V
z8ki@nKwE)x)^wmHBMk?mpMT=g{S#^8W|>&rI#Ceh;9za}io0k@0JxiCqi-jHlxbt3
zjJA?RihhRvhk6%G5-D{ePh1jare*fQS<328P-DcVAxPTrw=n6k?C6EV75f}cnBRPT
zMYDqqKu(ND&aOtc!QRV`vzJSVxx8i~WB#5Ml{b#eQqNnSi7l-bS-`ITW<^zyYQA(b
zbj4SuRK>q9o`_v%+C=S?h>2e4!66Ij(P5{7Uz$3u6YJJC$W%EoBa{-(=tQ|y1vov%ZkXVOV
z##_UVg4V^4ne#4~<-1DkJqkKqgT+E_=&4Ue&eQ-JC+gi?7G@d6=
zximz{zE)WW{b@QCJ!7l&N5x=dXS?$5RBU-VvN4Uec-GHK&jPa&P2z+qDdLhIB+HU)
zu0CW&uLvE^4I5xtK-$+oe|58)7m6*PO%Xt<+-XEA%jG_BEachkF3e@pn?tl!`8lOF
zbi2QOuNXX)YT*MCYflILO{VZ*9GiC%R4FO20zMK?p+&aCMm2oeMK7(aW=UDzr=AO0
z$5mJ%=qRsR8rZ>_YsL+vi{3*J_9Kzq(;ZwRj+4_f0-*wbkSMPWahX#Fj_a8BnrhJ6
zo^ZZ?Vah1@&6#r=JkuaYDBdp;J3@ii+CHM&@9*erP}$@wI$bfrH)&c!*|nkvhf%^*Y6b%dKz%QBSIo@U
z{?V^qEs4`q<8@n+u8YiB^sc@6g>TncG<|GsmC3egwE6aO=EwLr~3-2
zNr`+)`i+-83?|1Xy0^8ps&pb}YT?w1eWVnC9Ps1=KM;Rw)bH6O!7Did1NwpnqVPZc
z*%Qo~qkDL>@^<^fmIBtx$WUWQiNtAB2x-LO^BB=|w~-zTnJNEdm1Ou(?8PF&U88X@
z#8rdaTd||)dG^uJw~N_-%!XNbuAyh4`>Shea=pSj0TqP+w4!`nxsmVSv02kb`DBr%
zyX=e>5IJ3JYPtdbCHvKMdhXUO_*E9jc_?se7%VJF#&ZaBD;7+eFN3x+hER7!u&`Wz
z7zMvBPR4y`*$a250KYjFhAKS%*XG&c;R-kS0wNY1=836wL6q02mqx;IPcH(6ThA@2
zXKQF|9H>6AW$KUF#^A%l6y5{fel77_+cR_zZ0(7=6bmNXABv}R!B-{(E^O6Y?ZS)n
zs1QEmh_Fm7p}oRyT3zxUNr4UV8NGs+2b8|4shO$OGFj3D&7_e?#yDi=TTe%$2QbG5
zk<;q7aQ;p!M-Osm{vFdmXZ@!z9uWh!;*%>(vTRggufuUGP9Hols@vhx
z73pn$3u2;vzRvnXuT&$Os7J@6y12*j!{ix%3B4YU1466ItmJs0NsU(4ZYRYh7wEA6q{b*Hs6@k~
zi7Yq@Ax!et0cUMTvk7P%ym){MHpcliHEI~e3HP0NV=}7;xFv#IC?a<=`>~j_sk{e>
z7vg-tK*p83HZ0=QK@
zRIHo^r{D8&Ms-^WZp+6US_Quqjh$Q66W^1}=Uz&XJ8AQE9&2}P
zY|FXZzZ|0IiaBd2qdt6dIjQr(ZMIOU%NG1F&fu6Po9m^?BvLhI6T0R!H2d8;U(&p2
zYA|MFscMqcO(ye~Jp?F;0>Ke+5hzVr?aBNe>GsGgr$XrpS9uajN2kNQ3o$V5rp0T(
z0$6TJC;3)26SNG#XcX7l^MKTn$ga?6r4Jzfb%ZgA(Zbwit0$kY=avSnI$@Gk%+^pu
zS5mHrcRS8LFPC*uVWH4DDD1pY$H8N>X?KIJZuZ2SvTqc5Nr0GHdD8TCJcd$zIhOdC
zZX0ErnsozQh;t^==4zTfrZO421AL?)O)l#GSxU#|LTTg4#&yeK=^w#;q63!Nv~1(@
zs^-RNRuF&qgcr+bIzc@7$h9L;_yjdifE*$j0Q&Np=1AuHL--zdkv@}`1
zo~LlDl_YAq*z?vmr4M`GjDkl9?p|-tl(DtX76oZv25_DtZutLS9Ez!5~p?th@4
zyc_uax4W#<(#)LMkvo)yp|5tKsC2=p#6PyhpH|449T<9Zdk|%CAb5cw?fhvQtBO&7
zpQ9$24yLqPHP;$N&fe2wm%8qdctwIna<3SwGtQA3{C77s%CW%LYxtK(SBGustL0<(
zu~U9r0UOkr(c{OJxZS0Ntu3+cJlF7R`7k-Bsa&q?9Ae5{{|o~?cM+T7{lB1^#vT8R
z?>c9fNWey`1dKDY%F3d2O*8^qYhjlB8*7HMKE<*=(A`{>=1%s1}Pm_t1xy!FkPk@%SMEka2@*=
zxDuM|vJJ5s+xgDls{>*o!7eOcs|xuVBPWX&+y5vEiADK%hi`#Dbd>;;Pbk2H4*-X&R?_-6ZEutSd8hC+sSjhIo
z;D(j4P;2EVpEj#UF7IjM6PC+X$C5T&=nL`*!*hm9U)#O?>wqOgC>jXKN3Slk_yaQX
zLf|4D8T4k|wHW`;#ZQVocNF|3izi0sOqXzi7@KlYC3CXBG`94wD;tMI1bj|8Vm
zY}9`VI9!plSfhAal$M_HlaYOVNU?9Z#0<$o?lXXbX3O(l_?f)i3_~r+GcO-x#+x^X
zfsZl0>Rj2iP1rsT;+b;Mr?
z4Vu&O)Q5ru4j;qaSP5gA{az@XTS1NpT0d9Xhl_FkkRpcEGA0(QQ~YMh#&zwDUkNzm
z6cgkdgl9W{iL6ArJ1TQHqnQ^SQ1WGu?FT|93$Ba}mPCH~!$3}0Y0g
zcoG%bdTd$bmBx9Y<`Jc+=Cp4}c@EUfjiz;Rcz101p
z=?#i$wo>gBE9|szaZMt-d4nUIhBnYRuBVyx+p?5#aZQgUe(!ah`J#l1$%bl5avL27
zU2~@V`3Ic&!?FhDX@Cw!R4%xtWark#p8DLT)HCZ?VJxf^yr@AD*!ERK3#L$E^*Yr?
zzN&uF9Roh4rP+r`Z#7U$tzl6>k!b~HgM$C<_crP=vC>6=q{j?(I}!9>g3rJU(&){o
z`R^E*9%+kEa8H_fkD9VT7(Fks&Y-RcHaUJYf-|B+eMXMaRM;{FKRiTB>1(=Iij4k1(X__|WqAd-~t#2@UQ}Z&<1Th0azdXfoll!dd)6>1miA
z!&=6sDJm=e$?L&06+Q3`D-HNSkK-3$3DdZMX-6Xjn;wd#9A{~ur!2NcX>(qY_oZL0~H7dnQ9sgLe!W>~2|RSW7|hWn<({Pg*xF$%B-!rKe^_R_vc
z(LO!0agxxP;FWPV({8#lEv$&&GVakGus=@!3YVG`y^AO1m{2%Np;>HNA1e{=?ra1C}H
zAwT0sbwG|!am;fl?*_t^^#yLDXZ*Nx)_FqueZi0c-G~omtpHW0Cu)mEJ`Z1X8brq$
z%vK##b~o*^b&Hz!hgrD=^6P8}aW40lhzMLB5T5*v`1QH?+L~-@CDi3+C@nRf2{7UE
zyDIe{@LKw`Eu=Z%6<<_=#V|yxJIKiq_N?ZJ_v0$c)N4l07ZV_mIXG}glfBSPivOhw
z-~+9GdckSpMBNR9eR`Y|9_)sXS+u_OiQ%!9rE(2AFjoxN8lk16Sb~^Sq6kRoEp3yD(mm`HsYIXcag_EAB8MHc}nahxVVUTts~U9P|f;7Ul$_`
zStR4v&P4q_$KXOEni$lkxy8=9w8G&47VY0oDb^+jT+>ARe3NHUg~St`$RDxY)?;_F
znqTujR&chZd2qHF7y8D$4&E3+e@J~!X3&BW4BF(Ebp#TEjrd+9SU!)j;qH+ZkL@AW
z?J6Mj}v0_+D
zH0qlbzCkHf|EZ`6c>5ig5NAFF%|La%M-}g(7&}Vx8K)qg30YD;H!S!??{;YivzrH0
z(M%2*b_S-)yh&Aiqai)GF^c!<1Xemj|13>dZ_M#)41SrP;OEMaRJ)bCeX*ZT7W`4Y
zQ|8L@NHpD@Tf(5>1U(s5iW~Zdf7$@pAL`a3X@YUv1J>q-uJ_(Dy5nYTCUHC}1(dlI
zt;5>DLcHh&jbysqt?G01MhXI3!8wgf){Hv}=0N|L$t8M#L7d6WscO8Om2|NBz2Ga^
zs86y%x$H18)~akOWD7@em7)ldlWgb?_sRN>-EcYQO_}aX@+b$dR{146>{kXWP4$nN{V0_+|3{Lt|8uX_fhKh~i{(x%cj*PU$i{PO(5$uA?
zQzO>a6oPj-TUk&{zq?JD2MNb6Mf~V3g$ra+PB;ujLJ2JM(a7N*b`y{MX--!fAd}5C
zF$D_b8S;+Np(!cW)(hnv5b@@|EMt*RLKF*wy>ykFhEhlPN~n_Bj>LT9B^_yj>z#fx
z3JuE4H&?Cc!;G@}E*3k`HK#8ag`yE3Z1)5JUlSua%qkF
zkTu|<9{w9OSi$qr)WD#7EzITnch=xnR63E*d~WGvi*Co9BBE?ETHud;!Z)7&wz+l6
zuKODYG1>I1U#a%&(GNJ`AqRfg=H!BtSl+_;CEeufF-#+*2EMMz-22@>18=8PH{PHd
z);mN=aR0MPF>eutLiS#-AOX>#2%+pTGEOj!j4L(m0~&xR=0+g#HNpno6@veLhJp}e
zyNVC$a>4;!9&iGvU_dj&xbKt@^t6r%f^)+}eV^suRTLP52+BVs0kOLwg6n`=NUv50E7My8XQUh?y%mW62OT1pMrKI3Q(r`7vU&@93=G~A?b(^pvC-8x=bSk
zZ60BQR96WB1Z@9Df(M1IQh+YrU8sEjB=Tc2;(zBn-pete*icZE|M&Uc+oHg`|1o`g
zH~m+k=D$o);{Rs)b<9Zo|9_Z6L6QHLNki(N>Dw^^i1LITprZeeqIaT#+)fw)PlllU
zldphHC)t!0Gf(i9zgVm>`*TbmITF
zH1FZ4{wrjRCx{t^26VK_2srZuWuY*EMAsMrJYFFCH35Ky7bq8<0K|ey2wHnrFMZyr
z&^yEgX{{3i@&iE5>xKZ{Ads36G3a!i50D!C4?^~cLB<<|fc1!XN(HJRM)H^21sEs%vv+Mu0h*HkLHaEffMwc0n6)JhNXY#M5w@iO@dfXY
z0c6dM2a4Hd1SA*#qYj@jK}uVgAZdaBj8t6uuhUNe>)ne9vfd#C6qLV9+@Q7{MnF#0
zJ7fd-ivG_~u3bVvOzpcw1u~ZSp8-kl(sunnX>L~*K-ByWDM2E8>;Si6kn^58AZQxI
xVa^It*?521mj4+UJO?7%w*+`EfEcU=@KhDx-s^WzP+ae~{CgHDE&XryzW}Nww%-5%
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 5c51a4a..012d6d9 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionSha256Sum=29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
+distributionSha256Sum=cb87f222c5585bd46838ad4db78463a5c5f3d336e5e2b98dc7c0c586527351c2
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 1b6c787..a69d9cb 100755
--- a/gradlew
+++ b/gradlew
@@ -205,6 +205,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \
"$@"
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/gradlew.bat b/gradlew.bat
index ac1b06f..53a6b23 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -14,7 +14,7 @@
@rem limitations under the License.
@rem
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,7 +25,7 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -75,13 +75,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
From 439f658d0e340d20a7491d31f3eedb592b457952 Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Wed, 20 Jul 2022 11:15:28 -0300
Subject: [PATCH 05/14] Use postBuild task in .gitmodule bisq-gradle
TODO Create new PR to change .gitmodules content
[submodule "bisq-gradle"]
path = bisq-gradle
url = https://github.com/ghubstan/bisq-gradle.git
branch = add-post-build-task
TO
[submodule "bisq-gradle"]
path = bisq-gradle
url = https://github.com/bisq-network/bisq-gradle.git
We need to wait until PR https://github.com/bisq-network/bisq-gradle/pull/1
to be approved & merged before making the above change to .gitmdoules
---
build.gradle | 44 ++------------------------------------------
settings.gradle | 1 +
2 files changed, 3 insertions(+), 42 deletions(-)
diff --git a/build.gradle b/build.gradle
index 812a6f0..f13a94b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,5 @@
plugins {
id 'application'
- alias(libs.plugins.osdetector)
alias(libs.plugins.springboot)
}
@@ -11,7 +10,6 @@ repositories {
group 'bisq'
-apply plugin: 'com.google.osdetector'
apply plugin: "org.springframework.boot"
apply plugin: 'io.spring.dependency-management'
@@ -67,49 +65,11 @@ dependencies {
testImplementation libs.mockito.core
}
-assemble {
- doLast {
- // Copy generated bisq-pricenode scripts to project's root dir.
- copy {
- from layout.buildDirectory.dir('scripts')
- into projectDir
- }
- // Copy zipped distribution libs to project's top-level lib dir.
- copy {
- def distFolderName = project.name + '-' + version
- def distZipName = buildDir.name + '/distributions/' + distFolderName + '.zip'
- from(zipTree(distZipName)) {
- include "$distFolderName/lib/**"
- eachFile { fcd ->
- fcd.relativePath = new RelativePath(true, fcd.relativePath.segments.drop(2))
- }
- includeEmptyDirs = false
- }
- into "${projectDir}/lib"
- }
- // Edit generated shell script so it expects to be executed in
- // the project's root dir as opposed to a 'bin' subdirectory.
- if (osdetector.os != 'windows') {
- // Delete the windows .bat script, not the *nix script alone.
- delete fileTree(dir: projectDir, include: 'bisq-*.bat')
- // Reset APP_HOME variable in *nix script.
- def nixScriptFile = file("${projectDir}/${project.name}")
- def oldAppHome = 'APP_HOME=$( cd "${APP_HOME:-./}.." && pwd -P ) || exit'
- def newAppHome = 'APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit'
- nixScriptFile.text = nixScriptFile.text.replace(oldAppHome, newAppHome)
- } else {
- // Delete the *nix script, not the windows .bat script.
- delete fileTree(dir: projectDir, include: 'bisq-*', exclude: '*.bat')
- // Reset APP_HOME variable in windows .bat script.
- def windowsScriptFile = file("${projectDir}/${project.name}.bat")
- windowsScriptFile.text = windowsScriptFile.text.replace('set APP_HOME=%DIRNAME%..', 'set APP_HOME=%DIRNAME%')
- }
- }
-}
+apply from: 'bisq-gradle/task/postBuild.gradle'
clean.doFirst {
// Remove the project root level 'bisq-*' scripts and 'lib' dir generated at the end of the assemble task.
- delete fileTree(dir: projectDir, include: 'bisq-*'), 'lib'
+ delete fileTree(dir: projectDir, include: ['bisq-pricenode', 'bisq-pricenode.bat']), 'lib'
}
test {
diff --git a/settings.gradle b/settings.gradle
index 0624d54..2d6cb33 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1,3 @@
rootProject.name = 'bisq-pricenode'
includeBuild('bisq')
+includeBuild('bisq-gradle')
From ff612318f6cd4a6a909beb928ea34dff0fa17a47 Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Wed, 20 Jul 2022 11:27:15 -0300
Subject: [PATCH 06/14] Adjust paths to new bisq-pricenode repo
TODO Test service installation again after PR merge.
TODO Test scripts with bisq-monitor service dependency
Wating for merge (new PR) for branch
https://github.com/ghubstan/bisq-monitor/tree/add-gradle-task-submodule
---
scripts/bisq-pricenode.service | 2 +-
scripts/install_hsversion_debian.sh | 4 ++--
scripts/install_networksize_debian.sh | 4 ++--
scripts/install_pricenode_debian.sh | 21 ++++++++++++---------
4 files changed, 17 insertions(+), 14 deletions(-)
diff --git a/scripts/bisq-pricenode.service b/scripts/bisq-pricenode.service
index 8123387..e1e7ea8 100644
--- a/scripts/bisq-pricenode.service
+++ b/scripts/bisq-pricenode.service
@@ -5,7 +5,7 @@ After=network.target
[Service]
SyslogIdentifier=bisq-pricenode
EnvironmentFile=/etc/default/bisq-pricenode.env
-ExecStart=/bisq/bisq/bisq-pricenode 2
+ExecStart=/bisq/bisq-pricenode/bisq-pricenode 2
ExecStop=/bin/kill -TERM ${MAINPID}
Restart=on-failure
diff --git a/scripts/install_hsversion_debian.sh b/scripts/install_hsversion_debian.sh
index 631a027..a39c635 100755
--- a/scripts/install_hsversion_debian.sh
+++ b/scripts/install_hsversion_debian.sh
@@ -25,11 +25,11 @@ if ! grep -q "journalreader" /etc/passwd; then
fi
echo "[*] Installing journal parser script"
-curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/journalscraper_hsversion.sh > /tmp/journalscraper_hsversion.sh
+curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/journalscraper_hsversion.sh > /tmp/journalscraper_hsversion.sh
sudo -H -i -u "${ROOT_USER}" install -c -o "${SCRAPER_USER}" -g "${SCRAPER_GROUP}" -m 744 /tmp/journalscraper_hsversion.sh "${SCRAPER_HOME}/scraperscript_hsversion.sh"
echo "[*] Installing collectd config"
-curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/collectd.conf.snippet > /tmp/collectd.conf.snippet
+curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/collectd.conf.snippet > /tmp/collectd.conf.snippet
sudo -H -i -u "${ROOT_USER}" sed -i -e "s/LoadPlugin exec//" /tmp/collectd.conf.snippet
sudo -H -i -u "${ROOT_USER}" /bin/sh -c "cat /tmp/collectd.conf.snippet >> /etc/collectd/collectd.conf"
sudo -H -i -u "${ROOT_USER}" sed -i -e "s/__USER_GROUP__/${SCRAPER_USER}:${SCRAPER_GROUP}/" /etc/collectd/collectd.conf
diff --git a/scripts/install_networksize_debian.sh b/scripts/install_networksize_debian.sh
index bc25b3c..c0e96e2 100755
--- a/scripts/install_networksize_debian.sh
+++ b/scripts/install_networksize_debian.sh
@@ -25,11 +25,11 @@ sudo -H -i -u "${ROOT_USER}" mkdir -p "${SCRAPER_HOME}"
sudo -H -i -u "${ROOT_USER}" chown "${SCRAPER_USER}":"${SCRAPER_GROUP}" ${SCRAPER_HOME}
echo "[*] Installing journal parser script"
-curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/journalscraper.sh > /tmp/journalscraper.sh
+curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/journalscraper.sh > /tmp/journalscraper.sh
sudo -H -i -u "${ROOT_USER}" install -c -o "${SCRAPER_USER}" -g "${SCRAPER_GROUP}" -m 744 /tmp/journalscraper.sh "${SCRAPER_HOME}/scraperscript.sh"
echo "[*] Installing collectd config"
-curl -s https://raw.githubusercontent.com/bisq-network/bisq/master/pricenode/collectd.conf.snippet > /tmp/collectd.conf.snippet
+curl -s https://raw.githubusercontent.com/bisq-network/bisq-pricenode/main/scripts/collectd.conf.snippet > /tmp/collectd.conf.snippet
sudo -H -i -u "${ROOT_USER}" /bin/sh -c "cat /tmp/collectd.conf.snippet >> /etc/collectd/collectd.conf"
sudo -H -i -u "${ROOT_USER}" sed -i -e "s/__USER_GROUP__/${SCRAPER_USER}:${SCRAPER_GROUP}/" /etc/collectd/collectd.conf
sudo -H -i -u "${ROOT_USER}" sed -i -e "s!__SCRAPERSCRIPT__!${SCRAPER_HOME}/scraperscript.sh!" /etc/collectd/collectd.conf
diff --git a/scripts/install_pricenode_debian.sh b/scripts/install_pricenode_debian.sh
index 6ee6424..8067cac 100755
--- a/scripts/install_pricenode_debian.sh
+++ b/scripts/install_pricenode_debian.sh
@@ -1,6 +1,8 @@
#!/usr/bin/env bash
set -e
+# Usage: `$ sudo ./install_pricenode_debian.sh`
+
echo "[*] Bisq bisq-pricenode installation script"
##### change as necessary for your system
@@ -16,11 +18,11 @@ BISQ_USER=bisq
BISQ_GROUP=bisq
BISQ_HOME=/bisq
-BISQ_REPO_URL=https://github.com/bisq-network/bisq
-BISQ_REPO_NAME=bisq
-BISQ_REPO_TAG=master
-BISQ_LATEST_RELEASE=master
-BISQ_TORHS=pricenode
+BISQ_REPO_URL=https://github.com/bisq-network/bisq-pricenode
+BISQ_REPO_NAME=bisq-pricenode
+BISQ_REPO_TAG=main
+BISQ_LATEST_RELEASE=main
+BISQ_TORHS=bisq-pricenode
TOR_PKG="tor"
#TOR_USER=debian-tor
@@ -58,7 +60,7 @@ sudo -H -i -u "${ROOT_USER}" chown "${BISQ_USER}":"${BISQ_GROUP}" ${BISQ_HOME}
echo "[*] Cloning Bisq repo"
sudo -H -i -u "${BISQ_USER}" git config --global advice.detachedHead false
-sudo -H -i -u "${BISQ_USER}" git clone --branch "${BISQ_REPO_TAG}" "${BISQ_REPO_URL}" "${BISQ_HOME}/${BISQ_REPO_NAME}"
+sudo -H -i -u "${BISQ_USER}" git clone --recursive --branch "${BISQ_REPO_TAG}" "${BISQ_REPO_URL}" "${BISQ_HOME}/${BISQ_REPO_NAME}"
echo "[*] Installing OpenJDK 11"
sudo -H -i -u "${ROOT_USER}" apt-get install -qq -y openjdk-11-jdk
@@ -70,11 +72,12 @@ echo "[*] Performing Git LFS pull"
sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && git lfs pull"
echo "[*] Building Bisq from source"
-sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && ./gradlew :pricenode:installDist -x test < /dev/null" # redirect from /dev/null is necessary to workaround gradlew non-interactive shell hanging issue
+# Redirect from /dev/null is necessary to workaround gradlew non-interactive shell hanging issue.
+sudo -H -i -u "${BISQ_USER}" sh -c "cd ${BISQ_HOME}/${BISQ_REPO_NAME} && ./gradlew build -x test < /dev/null"
echo "[*] Installing bisq-pricenode systemd service"
-sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/pricenode/bisq-pricenode.service" "${SYSTEMD_SERVICE_HOME}"
-sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/pricenode/bisq-pricenode.env" "${SYSTEMD_ENV_HOME}"
+sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/scripts/bisq-pricenode.service" "${SYSTEMD_SERVICE_HOME}"
+sudo -H -i -u "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${BISQ_HOME}/${BISQ_REPO_NAME}/scripts/bisq-pricenode.env" "${SYSTEMD_ENV_HOME}"
echo "[*] Reloading systemd daemon configuration"
sudo -H -i -u "${ROOT_USER}" systemctl daemon-reload
From 021ac409534d78d8e3d7cbc5076befd69e70104b Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Wed, 20 Jul 2022 11:32:09 -0300
Subject: [PATCH 07/14] Formatting & style adjustments
---
.../bisq/price/mining/FeeRateServiceTest.java | 12 ++---
.../price/spot/ExchangeRateServiceTest.java | 51 +++++++------------
.../price/spot/providers/BinanceTest.java | 5 +-
.../price/spot/providers/BitfinexTest.java | 5 +-
.../price/spot/providers/BitflyerTest.java | 5 +-
.../price/spot/providers/BitstampTest.java | 5 +-
.../price/spot/providers/CoinGeckoTest.java | 5 +-
.../price/spot/providers/CoinbaseProTest.java | 5 +-
.../price/spot/providers/CoinoneTest.java | 5 +-
.../providers/IndependentReserveTest.java | 5 +-
.../bisq/price/spot/providers/KrakenTest.java | 5 +-
.../bisq/price/spot/providers/LunoTest.java | 5 +-
.../spot/providers/MercadoBitcoinTest.java | 5 +-
.../bisq/price/spot/providers/ParibuTest.java | 5 +-
.../price/spot/providers/PoloniexTest.java | 5 +-
.../bisq/price/spot/providers/QuoineTest.java | 5 +-
16 files changed, 38 insertions(+), 95 deletions(-)
diff --git a/src/test/java/bisq/price/mining/FeeRateServiceTest.java b/src/test/java/bisq/price/mining/FeeRateServiceTest.java
index 8f47584..b64ab36 100644
--- a/src/test/java/bisq/price/mining/FeeRateServiceTest.java
+++ b/src/test/java/bisq/price/mining/FeeRateServiceTest.java
@@ -1,19 +1,16 @@
package bisq.price.mining;
-import bisq.price.mining.providers.MempoolFeeRateProviderTest;
-
import bisq.common.config.Config;
+import bisq.price.mining.providers.MempoolFeeRateProviderTest;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.junit.jupiter.api.Test;
-
import static bisq.price.mining.providers.MempoolFeeRateProviderTest.buildDummyReachableMempoolFeeRateProvider;
import static bisq.price.mining.providers.MempoolFeeRateProviderTest.buildDummyUnreachableMempoolFeeRateProvider;
import static java.util.Arrays.asList;
@@ -23,6 +20,7 @@
/**
* Tests the {@link bisq.price.mining.FeeRateService}, which can aggregate data from
* several {@link FeeRateProvider}s.
+ *
* @see MempoolFeeRateProviderTest
*/
public class FeeRateServiceTest {
diff --git a/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java b/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java
index 642f3fe..943e57f 100644
--- a/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java
+++ b/src/test/java/bisq/price/spot/ExchangeRateServiceTest.java
@@ -18,40 +18,25 @@
package bisq.price.spot;
import bisq.core.locale.CurrencyUtil;
-
-import org.springframework.core.env.Environment;
-import org.springframework.core.env.StandardEnvironment;
-
-import com.google.common.collect.Sets;
-
-import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.commons.lang3.RandomUtils;
-
-import java.time.Duration;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.OptionalDouble;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.slf4j.LoggerFactory;
-
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
-
+import com.google.common.collect.Sets;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.RandomUtils;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.StandardEnvironment;
+
+import java.time.Duration;
+import java.util.*;
+import java.util.stream.Collectors;
import static java.lang.Thread.sleep;
import static java.util.Arrays.asList;
-
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@@ -231,9 +216,9 @@ public Set doGet() {
/**
* Performs generic sanity checks on the response format and contents.
*
- * @param retrievedData Response data retrieved from the {@link ExchangeRateService}
- * @param provider {@link ExchangeRateProvider} available to the
- * {@link ExchangeRateService}
+ * @param retrievedData Response data retrieved from the {@link ExchangeRateService}
+ * @param provider {@link ExchangeRateProvider} available to the
+ * {@link ExchangeRateService}
* @param numberOfCurrencyPairsOnExchange Number of currency pairs this exchange was
* initiated with
*/
@@ -254,8 +239,8 @@ private void doSanityChecksForRetrievedDataSingleProvider(Map re
* Performs generic sanity checks on the response format and contents.
*
* @param retrievedData Response data retrieved from the {@link ExchangeRateService}
- * @param providers List of all {@link ExchangeRateProvider#getPrefix()} the
- * {@link ExchangeRateService} uses
+ * @param providers List of all {@link ExchangeRateProvider#getPrefix()} the
+ * {@link ExchangeRateService} uses
*/
private void doSanityChecksForRetrievedDataMultipleProviders(Map retrievedData,
List providers) {
@@ -363,7 +348,8 @@ protected Set doGet() {
dummyProvider.start();
try {
sleep(1000);
- } catch (InterruptedException e) { }
+ } catch (InterruptedException e) {
+ }
dummyProvider.stop();
return dummyProvider;
@@ -402,7 +388,8 @@ protected Set doGet() {
dummyProvider.start();
try {
sleep(1000);
- } catch (InterruptedException e) { }
+ } catch (InterruptedException e) {
+ }
dummyProvider.stop();
return dummyProvider;
diff --git a/src/test/java/bisq/price/spot/providers/BinanceTest.java b/src/test/java/bisq/price/spot/providers/BinanceTest.java
index e995202..9f94d69 100644
--- a/src/test/java/bisq/price/spot/providers/BinanceTest.java
+++ b/src/test/java/bisq/price/spot/providers/BinanceTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class BinanceTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/BitfinexTest.java b/src/test/java/bisq/price/spot/providers/BitfinexTest.java
index e2dfa70..cc0a232 100644
--- a/src/test/java/bisq/price/spot/providers/BitfinexTest.java
+++ b/src/test/java/bisq/price/spot/providers/BitfinexTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class BitfinexTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/BitflyerTest.java b/src/test/java/bisq/price/spot/providers/BitflyerTest.java
index a722c5d..4ffdd86 100644
--- a/src/test/java/bisq/price/spot/providers/BitflyerTest.java
+++ b/src/test/java/bisq/price/spot/providers/BitflyerTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class BitflyerTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/BitstampTest.java b/src/test/java/bisq/price/spot/providers/BitstampTest.java
index 3c41974..779fa52 100644
--- a/src/test/java/bisq/price/spot/providers/BitstampTest.java
+++ b/src/test/java/bisq/price/spot/providers/BitstampTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class BitstampTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java b/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java
index 86c765d..ca453c2 100644
--- a/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java
+++ b/src/test/java/bisq/price/spot/providers/CoinGeckoTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class CoinGeckoTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java b/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java
index a3e12c8..4aebf71 100644
--- a/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java
+++ b/src/test/java/bisq/price/spot/providers/CoinbaseProTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class CoinbaseProTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/CoinoneTest.java b/src/test/java/bisq/price/spot/providers/CoinoneTest.java
index 9832118..b00ceb2 100644
--- a/src/test/java/bisq/price/spot/providers/CoinoneTest.java
+++ b/src/test/java/bisq/price/spot/providers/CoinoneTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class CoinoneTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java b/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java
index 93a43a9..60c84c7 100644
--- a/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java
+++ b/src/test/java/bisq/price/spot/providers/IndependentReserveTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class IndependentReserveTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/KrakenTest.java b/src/test/java/bisq/price/spot/providers/KrakenTest.java
index 8226c88..e1f8119 100644
--- a/src/test/java/bisq/price/spot/providers/KrakenTest.java
+++ b/src/test/java/bisq/price/spot/providers/KrakenTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class KrakenTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/LunoTest.java b/src/test/java/bisq/price/spot/providers/LunoTest.java
index a04c9fb..13d90a4 100644
--- a/src/test/java/bisq/price/spot/providers/LunoTest.java
+++ b/src/test/java/bisq/price/spot/providers/LunoTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class LunoTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java b/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java
index 5671532..ae1c910 100644
--- a/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java
+++ b/src/test/java/bisq/price/spot/providers/MercadoBitcoinTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class MercadoBitcoinTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/ParibuTest.java b/src/test/java/bisq/price/spot/providers/ParibuTest.java
index 3aac4b9..986a272 100644
--- a/src/test/java/bisq/price/spot/providers/ParibuTest.java
+++ b/src/test/java/bisq/price/spot/providers/ParibuTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class ParibuTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/PoloniexTest.java b/src/test/java/bisq/price/spot/providers/PoloniexTest.java
index de7711e..a688e59 100644
--- a/src/test/java/bisq/price/spot/providers/PoloniexTest.java
+++ b/src/test/java/bisq/price/spot/providers/PoloniexTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class PoloniexTest extends AbstractExchangeRateProviderTest {
diff --git a/src/test/java/bisq/price/spot/providers/QuoineTest.java b/src/test/java/bisq/price/spot/providers/QuoineTest.java
index 6465334..625aae4 100644
--- a/src/test/java/bisq/price/spot/providers/QuoineTest.java
+++ b/src/test/java/bisq/price/spot/providers/QuoineTest.java
@@ -18,12 +18,9 @@
package bisq.price.spot.providers;
import bisq.price.AbstractExchangeRateProviderTest;
-
-import org.springframework.core.env.StandardEnvironment;
-
import lombok.extern.slf4j.Slf4j;
-
import org.junit.jupiter.api.Test;
+import org.springframework.core.env.StandardEnvironment;
@Slf4j
public class QuoineTest extends AbstractExchangeRateProviderTest {
From 42255f581ab6dd0a4ab5d19973d265d6ce1b9e8c Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Wed, 20 Jul 2022 11:32:44 -0300
Subject: [PATCH 08/14] Formatting & style adjustments
---
.../java/bisq/price/spot/ExchangeRate.java | 25 ++++++-----
.../price/spot/ExchangeRateController.java | 8 +---
.../bisq/price/spot/ExchangeRateProvider.java | 41 +++++++------------
.../bisq/price/spot/ExchangeRateService.java | 33 +++++----------
4 files changed, 38 insertions(+), 69 deletions(-)
diff --git a/src/main/java/bisq/price/spot/ExchangeRate.java b/src/main/java/bisq/price/spot/ExchangeRate.java
index 78bc5ff..f911005 100644
--- a/src/main/java/bisq/price/spot/ExchangeRate.java
+++ b/src/main/java/bisq/price/spot/ExchangeRate.java
@@ -20,7 +20,6 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import java.math.BigDecimal;
-
import java.util.Date;
import java.util.Objects;
@@ -37,10 +36,10 @@ public class ExchangeRate {
public ExchangeRate(String currency, BigDecimal price, Date timestamp, String provider) {
this(
- currency,
- price.doubleValue(),
- timestamp.getTime(),
- provider
+ currency,
+ price.doubleValue(),
+ timestamp.getTime(),
+ provider
);
}
@@ -77,9 +76,9 @@ public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
ExchangeRate exchangeRate = (ExchangeRate) o;
return Double.compare(exchangeRate.price, price) == 0 &&
- timestamp == exchangeRate.timestamp &&
- Objects.equals(currency, exchangeRate.currency) &&
- Objects.equals(provider, exchangeRate.provider);
+ timestamp == exchangeRate.timestamp &&
+ Objects.equals(currency, exchangeRate.currency) &&
+ Objects.equals(provider, exchangeRate.provider);
}
@Override
@@ -90,10 +89,10 @@ public int hashCode() {
@Override
public String toString() {
return "ExchangeRate{" +
- "currency='" + currency + '\'' +
- ", price=" + price +
- ", timestamp=" + timestamp +
- ", provider=" + provider +
- '}';
+ "currency='" + currency + '\'' +
+ ", price=" + price +
+ ", timestamp=" + timestamp +
+ ", provider=" + provider +
+ '}';
}
}
diff --git a/src/main/java/bisq/price/spot/ExchangeRateController.java b/src/main/java/bisq/price/spot/ExchangeRateController.java
index f4c0176..7e03778 100644
--- a/src/main/java/bisq/price/spot/ExchangeRateController.java
+++ b/src/main/java/bisq/price/spot/ExchangeRateController.java
@@ -17,11 +17,9 @@
package bisq.price.spot;
+import bisq.common.config.Config;
import bisq.price.PriceController;
import bisq.price.mining.FeeRateService;
-
-import bisq.common.config.Config;
-
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -43,9 +41,7 @@ public Map getAllMarketPrices() {
Map retVal = exchangeRateService.getAllMarketPrices();
// add the fee info to results
- feeRateService.getFees().forEach((key, value) -> {
- retVal.put(translateFieldName(key), value);
- });
+ feeRateService.getFees().forEach((key, value) -> retVal.put(translateFieldName(key), value));
return retVal;
}
diff --git a/src/main/java/bisq/price/spot/ExchangeRateProvider.java b/src/main/java/bisq/price/spot/ExchangeRateProvider.java
index dae93a2..b483f97 100644
--- a/src/main/java/bisq/price/spot/ExchangeRateProvider.java
+++ b/src/main/java/bisq/price/spot/ExchangeRateProvider.java
@@ -17,11 +17,9 @@
package bisq.price.spot;
-import bisq.price.PriceProvider;
-
import bisq.core.locale.CurrencyUtil;
import bisq.core.locale.TradeCurrency;
-
+import bisq.price.PriceProvider;
import org.knowm.xchange.Exchange;
import org.knowm.xchange.ExchangeFactory;
import org.knowm.xchange.currency.Currency;
@@ -32,21 +30,11 @@
import org.knowm.xchange.service.marketdata.MarketDataService;
import org.knowm.xchange.service.marketdata.params.CurrencyPairsParam;
import org.knowm.xchange.service.marketdata.params.Params;
-
import org.springframework.core.env.Environment;
-import java.time.Duration;
-
import java.io.IOException;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.time.Duration;
+import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -64,7 +52,7 @@ public abstract class ExchangeRateProvider extends PriceProvider SUPPORTED_CRYPTO_CURRENCIES = new HashSet<>();
private static Set SUPPORTED_FIAT_CURRENCIES = new HashSet<>();
- private Set providerExclusionList = new HashSet<>();
+ private final Set providerExclusionList = new HashSet<>();
private final String name;
private final String prefix;
private final Environment env;
@@ -74,17 +62,17 @@ public ExchangeRateProvider(Environment env, String name, String prefix, Duratio
this.name = name;
this.prefix = prefix;
this.env = env;
- List excludedByProvider =
- Arrays.asList(env.getProperty("bisq.price.fiatcurrency.excludedByProvider", "")
- .toUpperCase().trim().split("\\s*,\\s*"));
- for (String s: excludedByProvider) {
+ String[] excludedByProvider =
+ env.getProperty("bisq.price.fiatcurrency.excludedByProvider", "")
+ .toUpperCase().trim().split("\\s*,\\s*");
+ for (String s : excludedByProvider) {
String[] splits = s.split(":");
if (splits.length == 2 && splits[0].equalsIgnoreCase(name) && CurrencyUtil.isFiatCurrency(splits[1])) {
- providerExclusionList.add(splits[1]);
- }
+ providerExclusionList.add(splits[1]);
}
+ }
if (providerExclusionList.size() > 0) {
- log.info("{} specific exclusion list={}", name, providerExclusionList.toString());
+ log.info("{} specific exclusion list={}", name, providerExclusionList);
}
}
@@ -140,8 +128,8 @@ public String getPrefix() {
@Override
protected void onRefresh() {
get().stream()
- .filter(e -> "USD".equals(e.getCurrency()) || "LTC".equals(e.getCurrency()))
- .forEach(e -> log.info("BTC/{}: {}", e.getCurrency(), e.getPrice()));
+ .filter(e -> "USD".equals(e.getCurrency()) || "LTC".equals(e.getCurrency()))
+ .forEach(e -> log.info("BTC/{}: {}", e.getCurrency(), e.getPrice()));
}
/**
@@ -149,12 +137,11 @@ protected void onRefresh() {
* polled
* @return Exchange rates for Bisq-supported fiat currencies and altcoins in the
* specified {@link Exchange}
- *
* @see CurrencyUtil#getAllSortedFiatCurrencies()
* @see CurrencyUtil#getAllSortedCryptoCurrencies()
*/
protected Set doGet(Class extends Exchange> exchangeClass) {
- Set result = new HashSet();
+ Set result = new HashSet<>();
// Initialize XChange objects
Exchange exchange = ExchangeFactory.INSTANCE.createExchange(exchangeClass.getName());
diff --git a/src/main/java/bisq/price/spot/ExchangeRateService.java b/src/main/java/bisq/price/spot/ExchangeRateService.java
index e1300b6..d58f695 100644
--- a/src/main/java/bisq/price/spot/ExchangeRateService.java
+++ b/src/main/java/bisq/price/spot/ExchangeRateService.java
@@ -17,24 +17,12 @@
package bisq.price.spot;
-import org.springframework.stereotype.Service;
-
-import java.math.BigDecimal;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.OptionalDouble;
-import java.util.Set;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
-import static java.util.Arrays.asList;
+import java.math.BigDecimal;
+import java.util.*;
/**
* High-level {@link ExchangeRate} data operations.
@@ -72,9 +60,8 @@ public Map getAllMarketPrices() {
metadata.putAll(getMetadata(p, exchangeRates));
});
- LinkedHashMap result = new LinkedHashMap<>();
- result.putAll(metadata);
- // Use a sorted list by currency code to make comparision of json data between
+ LinkedHashMap result = new LinkedHashMap<>(metadata);
+ // Use a sorted list by currency code to make comparison of json data between
// different price nodes easier
List values = new ArrayList<>(aggregateExchangeRates.values());
values.sort(Comparator.comparing(ExchangeRate::getCurrency));
@@ -147,7 +134,7 @@ private Map> getCurrencyCodeToExchangeRates() {
l.add(exchangeRate);
currencyCodeToExchangeRates.put(currencyCode, l);
} else {
- currencyCodeToExchangeRates.put(currencyCode, asList(exchangeRate));
+ currencyCodeToExchangeRates.put(currencyCode, List.of(exchangeRate));
}
}
}
@@ -179,9 +166,9 @@ private Map getMetadata(ExchangeRateProvider provider, Set exchangeRates) {
return exchangeRates.stream()
- .filter(e -> provider.getName().equals(e.getProvider()))
- .findFirst()
- .orElseThrow(() -> new IllegalStateException("No exchange rate data found for " + provider.getName()))
- .getTimestamp();
+ .filter(e -> provider.getName().equals(e.getProvider()))
+ .findFirst()
+ .orElseThrow(() -> new IllegalStateException("No exchange rate data found for " + provider.getName()))
+ .getTimestamp();
}
}
From 970fc46a37dd4d20889ee2b9f186f3d6897724a7 Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Sun, 24 Jul 2022 14:42:25 -0300
Subject: [PATCH 09/14] Use plugin task
---
.gitmodules | 2 +-
build.gradle | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/.gitmodules b/.gitmodules
index 7190d1f..d5e5755 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,4 +4,4 @@
[submodule "bisq-gradle"]
path = bisq-gradle
url = https://github.com/ghubstan/bisq-gradle.git
- branch = add-post-build-task
+ branch = add-post-build-plugin
diff --git a/build.gradle b/build.gradle
index f13a94b..72f5471 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,7 @@
plugins {
id 'application'
alias(libs.plugins.springboot)
+ id 'bisq.post-build'
}
repositories {
@@ -65,8 +66,6 @@ dependencies {
testImplementation libs.mockito.core
}
-apply from: 'bisq-gradle/task/postBuild.gradle'
-
clean.doFirst {
// Remove the project root level 'bisq-*' scripts and 'lib' dir generated at the end of the assemble task.
delete fileTree(dir: projectDir, include: ['bisq-pricenode', 'bisq-pricenode.bat']), 'lib'
From 9d253af8d09e55656372185a4c565d7f5495c661 Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Sun, 24 Jul 2022 14:47:56 -0300
Subject: [PATCH 10/14] Remove submodule bisq-gradle
---
.gitmodules | 4 ----
bisq-gradle | 1 -
2 files changed, 5 deletions(-)
delete mode 160000 bisq-gradle
diff --git a/.gitmodules b/.gitmodules
index d5e5755..baa7d4d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
[submodule "bisq"]
path = bisq
url = https://github.com/bisq-network/bisq.git
-[submodule "bisq-gradle"]
- path = bisq-gradle
- url = https://github.com/ghubstan/bisq-gradle.git
- branch = add-post-build-plugin
diff --git a/bisq-gradle b/bisq-gradle
deleted file mode 160000
index 5cd0c51..0000000
--- a/bisq-gradle
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 5cd0c51c3524d336777ded51fed80293c4cd5211
From 87a1decee7905b496d1db02f0d2d4df27c25adc2 Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Sun, 24 Jul 2022 14:52:27 -0300
Subject: [PATCH 11/14] Re-add submodule bisq-gradle
---
.gitmodules | 4 ++++
bisq-gradle | 1 +
2 files changed, 5 insertions(+)
create mode 160000 bisq-gradle
diff --git a/.gitmodules b/.gitmodules
index baa7d4d..d5e5755 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,7 @@
[submodule "bisq"]
path = bisq
url = https://github.com/bisq-network/bisq.git
+[submodule "bisq-gradle"]
+ path = bisq-gradle
+ url = https://github.com/ghubstan/bisq-gradle.git
+ branch = add-post-build-plugin
diff --git a/bisq-gradle b/bisq-gradle
new file mode 160000
index 0000000..282db0e
--- /dev/null
+++ b/bisq-gradle
@@ -0,0 +1 @@
+Subproject commit 282db0e58e24ca3da770fa2546957442cde54e63
From 1d7b2a4b51c3fa250ee8ee065042479b0881f422 Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Mon, 25 Jul 2022 17:08:03 -0300
Subject: [PATCH 12/14] Remove my fork's submodule 'bisq-gradle'
Is being replaced by bisq-network's bisq-gradle plugin because PR
https://github.com/bisq-network/bisq-gradle/pull/2 has been merged.
---
.gitmodules | 4 ----
bisq-gradle | 1 -
2 files changed, 5 deletions(-)
delete mode 160000 bisq-gradle
diff --git a/.gitmodules b/.gitmodules
index d5e5755..baa7d4d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
[submodule "bisq"]
path = bisq
url = https://github.com/bisq-network/bisq.git
-[submodule "bisq-gradle"]
- path = bisq-gradle
- url = https://github.com/ghubstan/bisq-gradle.git
- branch = add-post-build-plugin
diff --git a/bisq-gradle b/bisq-gradle
deleted file mode 160000
index 282db0e..0000000
--- a/bisq-gradle
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 282db0e58e24ca3da770fa2546957442cde54e63
From e63f241c82b23cdab13dd39978850d653c4be1a7 Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Mon, 25 Jul 2022 17:11:18 -0300
Subject: [PATCH 13/14] Re add submodule bisq-network bisq-gradle
---
.gitmodules | 3 +++
bisq-gradle | 1 +
2 files changed, 4 insertions(+)
create mode 160000 bisq-gradle
diff --git a/.gitmodules b/.gitmodules
index baa7d4d..4abb360 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
[submodule "bisq"]
path = bisq
url = https://github.com/bisq-network/bisq.git
+[submodule "bisq-gradle"]
+ path = bisq-gradle
+ url = https://github.com/bisq-network/bisq-gradle.git
diff --git a/bisq-gradle b/bisq-gradle
new file mode 160000
index 0000000..2c34836
--- /dev/null
+++ b/bisq-gradle
@@ -0,0 +1 @@
+Subproject commit 2c348362a25231538b9724fc8c450330dd5b6574
From a583ae5a410f6cc294856861064e65b032cabace Mon Sep 17 00:00:00 2001
From: ghubstan <36207203+ghubstan@users.noreply.github.com>
Date: Mon, 25 Jul 2022 17:16:21 -0300
Subject: [PATCH 14/14] Re-enable BTCMarkets test
Seems to be blocked only for me, in my region
---
src/test/java/bisq/price/spot/providers/BTCMarketsTest.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java b/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java
index 354c25f..59b982f 100644
--- a/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java
+++ b/src/test/java/bisq/price/spot/providers/BTCMarketsTest.java
@@ -19,11 +19,9 @@
import bisq.price.AbstractExchangeRateProviderTest;
import lombok.extern.slf4j.Slf4j;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.core.env.StandardEnvironment;
-@Disabled
@Slf4j
public class BTCMarketsTest extends AbstractExchangeRateProviderTest {