From b0dc2dc4d0d663642b7e6317bd6c498f7bce2f99 Mon Sep 17 00:00:00 2001 From: overweight <5324761+overweight@user.noreply.gitee.com> Date: Mon, 30 Sep 2019 11:14:59 -0400 Subject: [PATCH] Package init --- fix-handle-REMXXXX-is-not-comment.patch | 26 ++ iniparse-0.4.tar.gz | Bin 0 -> 31278 bytes python-iniparse.spec | 127 ++++++ python3-compat.patch | 547 ++++++++++++++++++++++++ setup-fixes.patch | 61 +++ 5 files changed, 761 insertions(+) create mode 100644 fix-handle-REMXXXX-is-not-comment.patch create mode 100644 iniparse-0.4.tar.gz create mode 100644 python-iniparse.spec create mode 100644 python3-compat.patch create mode 100644 setup-fixes.patch diff --git a/fix-handle-REMXXXX-is-not-comment.patch b/fix-handle-REMXXXX-is-not-comment.patch new file mode 100644 index 0000000..43be7ed --- /dev/null +++ b/fix-handle-REMXXXX-is-not-comment.patch @@ -0,0 +1,26 @@ +From 7483d7f92ea59458c11506999a5895ed87bf8d6b Mon Sep 17 00:00:00 2001 +From: Jiri Hnidek +Date: Fri, 18 May 2018 13:31:31 +0200 +Subject: [PATCH] First patch from Fedora Project. + +--- + tests/test_ini.py | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/tests/test_ini.py b/tests/test_ini.py +index 6a76edb..78b2b3c 100644 +--- a/tests/test_ini.py ++++ b/tests/test_ini.py +@@ -144,8 +144,7 @@ class test_comment_line(unittest.TestCase): + '#this is a comment', + ';; this is also a comment', + '; so is this ', +- 'Rem and this', +- 'remthis too!' ++ 'Rem and this' + ] + def test_parsing(self): + for l in self.lines: +-- +2.19.1 + diff --git a/iniparse-0.4.tar.gz b/iniparse-0.4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..9760e30b3cb3522a2fe39a291e6e67824c1e63a1 GIT binary patch literal 31278 zcmV(wKuascc-X?NR3lK#wJ(Vjov7-pQY^Xdklw$fToBD1P~mOIJ5KLx2pO;Hvk^86K4!_>=izB_dHpFR0~ena>j9UX{&5BIHq=QZvFivo`pAVy8O-7|FE|1 z)%x!ZM~Ba0{huF=p6?G2kB(sd4-WT^p0MH9_5a;}e&ppjdrj+o;VpQcdOq(Z*S~PT z=pT0&{JP!ltLwbTJilO~dB)R>=R7XL_=Xj8&ce9h*$jHJWF~N0h zV}24v&?-z~>>1-nw(!!F2dqfgofnlnAF%s5&p3g>!Ngl=wq)0w#XK*db*$j#E@S^L zTKHa!Ej%CI=FsLY^au!Wcj1LG&sdxk9u2;W=#Fpsa)N(m*pvlHL6EIBF0^q8%J)ez zM|^TM0$cE6o&+$hj5Gdg83Lj}BT0a(ge_oyEyBNXLKd-@MIlfKa4haQkE=N_7zDt? zfu#3>FRpo(4>Sql5?>(6tOhKfCuJ1iq}5o#fZ$LkqHZ!HC|(q`_r>i{u=@}u2jnZ` z0KWN2#^p3F%WLX}3jkY(g^M)e3z#Mip(ro|5^5^%M&YfZk(h$O2pB+Ma32CPURfjy zAhZvdEm@i+cVWQQ8i>vk1>i^V$5ZyB9Iu#rg}?`a7h%B{ zy_`q00g_wtI{q?Vlv&I!lH#m_bed&J*29JdlxZ%&Os5r~f#6RQo)-d-tN^E)n@|HD z)uC<+&VmC#G6`h6>6yJ_em~U=DG|ZvtuUd6CMuE{@)dI`vSsyvKWyacRicThPyE5> zX~F)&mo%2$PfqTw7v;P@?m;w7E9#ZnU zQ>33)6j^v(791$w2hn&o6PqP3VHh6h$tVFqVmZ&tg^<7~J}oQ-u4-Q&`Su>W%f z0OyXBL$Pj2vf8XsmIKlGKthBKkcHlL#7*%9TmuvjU;zj-!a$)40-60nvPXObMvub+ z=f`GcOhgAPFF9x5dwJ+r8V5$zO9yP^A=kPlm)Uqo5 zoAR|mfmQr((67Dyy7B77v!~Z4y$tPO0kS3iqt^D5XVyB#`{{5kh;b7U&LkJ+4L1kneW3@0GL2=f6p@AqXfpbmjofFVX!(%ie_ zwD+%3O5&Cey(mPxZpjO@5kr42;Y8d+qaa~g(G&B|dF*p@M-itY;v^4{22yq;5)jB$ z{*Z!|78W4h!LSgf4lJHmMujy6KnpMolgzalSbmmtrzc~D6JiHI@FrduHfd#p%>h;}6c~v7cxiwD z14`*Kw8TL}#lniy;81BSJTTW_d{0^A#O*-Lx1eC9upLM~pzbtF)w}D@Zd}j3c71lj z_V>C227IXBc0nz}EO7Dp1E@?~ao4s5rNtu@fw_CNDl(|Pa>F~=+Np1k_00*mV-ECq z5e6f`yonh!7`Md)a~p__@y!G}6UcS8>F+&q=PBETpHRA$5$-AH&Z~QXiovOa_|~g6 zsd)W^aye0S%tM}e8CY;&?zFg&lJ}IqAiY8K%DfVD}yv0>`Qz z3U%JFnPiv0|Ko8{ovJfM`yL(4sr7GDyz9d^C{@-Vu{LIdAA412+t4tK3{aJ`@ZrQU zoinh?VUK>*c(5OpO zo;BS{nt_YK;W!YzTs3Vq;hlUZcOACFMb@mhc?M(o#F!udIN++UI~?h&X*M(~97*AzrGPFI#5G_Q}3uc{%HYb+Io#_4ed+MxcCnb;=37o{D=bV6E95u#^c-*7?itt9wSjDGYBy?choGjYYG7nEyH8|TNX*oAYOR$dvEGufKuJ*pHa^}ROEP}Y(SxbT-S!GEyTQ0fo|KvCNS%>+l`BJyY%kG9M7u>lX&Hau zewpRr9gmjaltj0}e19R@zig!R(9j0j^9nve5pc1i0N&_mM+vs{#L~!HqJ8S}hZF{$ zs%Pk8nZdCOHcSxa_R z=gND49`Nj*U7R)OXfsWy8M~UAfHPKe5nFG~1YdlA{_5f{=VuqEFGbHX6n$1sd(E61 z6Gr2+ZiWbUthSyuLg;VNjX z*8hBw-%}7j=`tg)zvuVa-f%b?;D7h%zt2@3=Q5cU_ZXylo0M@t5z|gf-~CU?04D^97kPm)?w9 z5USj?2)`6)6NLd5L17eHS~!wgDBlAw3&5to&b(~dx#M6)fu#oXyArWKitS>TG6p&o z@Dj@n{HP4nM*(Yh&wcLhcRE+pG~ijZ#0aL=ZEA~D9e9t(McDH-RvTHms-8rI?+0$NkkmV%B)OnQ`pJJmTa5MiRLHhsSYS-J1xLk zIl;dSn+B{P{f&KdLJze92C{T0tS?QS*C3>m1vO>ZPf#x}Q$c#C7POF#xoz@l{L~)< zmJr`Pz?v#fsf4I<=Hki5;%xHJGRe0zFF;=UPL$>rZ zoa?2?#iiU2XQ52gXfR%cp{k`wMWaOjP-EE2VaSz0!E7F8)sred5*C;y0m}*mzh_M(q0FhQw=lehs6i>>u_O>`;-vM^~aV6!E}SoWK& zTS--r+Rg!bwzz#&j5>@s&7eM6FA!;Cim7uQi!5&>tKlw{rsd9*YTNRt8$P%qM*EiMu{*C_El zQN7dS?v2a*GRvrniOh{8TMn>zD03eC@ITd`%^stL(1JDwQD$%5=jWzz16~C6O)z0NK0wo{p1eYD_(W^CJ*C5<-$|ToB ziEe{{^uxr`z8bqQuG-f^AN9gL>YHK;1vo)tQj64xD!j9IE#-IW*g_)-QB7TCk=lV9 zLQW=WW~tp`mb!kFl-ksdb~0K#zS?sUxSVAQV1@u`$pHLVi^Mq}KeX@OESgp$gLxyA8~J zS$MY~+sHHrT9Is{dTLl#tZ0lA_K^TFU70yxA76a;-FGh?6ATvWwX<>i8flWF-DU}B zWsYJjF3anLm-Bd(4qYWWtt4rtbNM(TNdc(~U_;>N_LMMw8HC_AT>P^w>sK7`|suQM0KrFrU9#J8q@byttNqSKiKR-Bk273suL?L;uUPzQm-JJHc-UYHq=>^cw57*8n1&qy-t#dd-0SiO_BP4 zcSg=JB^SULUGltoDBz#!DT&qJt8#_T5L(bF6RZMFjE5QiYdj~jnR@z%HDih0#yQ`q z{n0j6YiDYsoYD-c*2Sj6MjQQtYII~LWt`u&m(kdu#~Oi&Z7~a6H%=72I;8)eU9w@KaVwggw-^sd)Pa=YFLCUwaREKnCMK4q5m`6(%^ zlQN$z7VfjK;B93efbDN?1sre;lnAxOJ7;=t}G>bYzL6Mxk*as8!l@-V8kGBT1} zL$H6mm5G~q_a{=PwpqKdZ2xA;NojV@$X~bhL}h$p0%}Jvg9@h0)7wLX0nArB>^BQ&pq zAe3$KFb;4q};cw-|RArB;-i-j(jPlpbD&@Sa z+EgoivAz|?gw<@_shgB9Ml%eVRvXXWu?^d-;%eS&w=xDSFv~^l4y*Pc^lV7Jrz{Yh zEMas6f0Yalp4x35}q2QKlG- zr2M*dDwi|`_dqlX469iS4e(WY{6AM7Eg`VxF#(xJQRmqnm%XSuw?v5^wv7=1eh(@D z&?jRUILN8zE2=6VTIuVyt6|B3`fDmFfO>)v5YzOGI!_;yv#N{Bpz9|nZ`*sEf!xAN2f~`IRaudN`*M|G{dquFZyCUTy_%e4I|&VA4qjYLFh=I`}ETrmPok=Nq0;8qaFstFEKty~cS* zp9*Dmx*Kq7(5Q~qUJWfCY2dvU;ENU+MohPYswi33AAoFO6r;AX!6_@{OBaQRXg%E)cxh3ue>{1FJBQG{bPVH6Ho0+M$cLki5BRh$ z9Pkd=eC@bwka|+I+zr+%ggVTI2x8x|(PK`=S=@iOjZeCP0Xy4Jvb9my*>SYNAucHp z7YO2euriz;X#E*hzaO(M%o9@>VjJ~4|JTlcfQK06zt!=N4d*|Gd(RK|d#HwEy+|#}`?DQTQ!tCpzjVp(-~&4`Xye#Px>*cDhK5CB72}PKz*D_WapRm1cR3 z>0nl->^kz|TY0+OxNAzESe2JXG?RW&lH4+%z<~QMuc?RwO#6W^%62Ir!u^t}WjW#_ zZ#F<@-+C_eZK>i)Q<-BF*N|jf=DXzmsA!@Cem5noGKdzb+T{g^qGE|-vkFG-{wcfE zj8ZM~5LGkXp)CfLEE1CvId=0TnR_Q{hTsa)n?%;o)*@WE+1bF7R<2f*Wcr zX3Y=7rPSdO*`sEyv2RbTj3SKEYYekHniy=-*K26NX~C@O&~GL=WveyrxkOFgNg}h8 zf)~VG2N zV2j#jdTk9Y=>HmY_ z-oasA|Bv>EU-kc&_~GU5;;v)ZPtU;2T_ge4n4evoiMroT=g;i5I?)CKg;FQh$;dx5 zs;* z!*3kx^R@RkaF=nlF*0x5G@*x)@_Ie_D$+H{RwtRp29VL6EBYCte-Oj!a#Dor-Hvh+(U9Ir%fit#~{+PpXFE3IzI}5ujd81uOq|d*9mLHjXR2 zUyptT$DJJ8Gq&SPE}gXQZkndkoNbf5NxHLp60aZGmJ@Al%OlB6JeTv^UjV#_)Xj35 zc4l|t-AQeU1VIu60T2Yx>d4RMU=*OvOMCd?*7isBVeXPCbQxE_imKn%tYu&8RDk)+ z$dd%z4bjGKx5A(6(HQ-dA}le6p6stZ4v_>zbmO0*)${}pV)zgNDhGVXjNps{EJCuD!950V3 z5;VZ`K^+v?GMu0sIi86nLh`g+1)?qAxppv`t6`!q|MTjyoE;#lT>10qbL`NI%YXKI z-&XUAUiGemZ*pNFuwmfLUp)KeNtJ%^UGYWZn`-sXUze*ZLK}NZ31#^v}O6d9g zdA>nUR`SMUppkC9mA>SG3p##98%zB@ z3P#V;tMG1U<@tjGROc;dFT5;aM6%N5!DiydFQHln<#>X!7F)Jf=8}x9RF*IYmNWo1ww5o#izz9Y%Pr|uGD;AfmdN3#IE%7N! z_iqv8LB?t%v5^zP2CVxP;!F*kp}h$7unrDdCrKvuLW+;C2T4lmB2h&jla~47_PXw6 zVfak*Zo}u9Tmp=3Zt}<7t{8;e%FkN4mG##eAPwXzkBj_n!0&2KPF=z46dm8UzcvZFb|`!tiM|MQA2gepZ&_&j(_LS(M~S!D!@D z^rePY6V=EXhLNSXKeKYkrndhfn%>CutI^P0A&0Qc<$!Sq3TWD(X(~YuxMT~Zl9%|f z-s&}=CltdXCcj54IV%2bD|ReCsAh|lUKB&!DED#`je3PRrqk^Lx(<1PQyvdmaVjI6cMggNI~gxQ~@%+vV z$RbHsG~|sFDetG!o>8L9o~8hf-s(S#FEWtCzez&-R%_vRx6;H`TT5)dYc4dyX<&5_ zzyw8bZX_;+B>iwb|2j3oJ^HWiJm`7R4v z?QVpsCfZ5XM60!nqTHRpqmeQY+SaCk^4y(*M0D#+BG@|%R*aL7Sa7p3}~#g z%-?D*3YoxVY11PFl^X+{w44W7eO?)iAfEE#5>sZNv~$`(IA!d*=l zR;oSoI)pZi>2sk`wesvy**;Lc7id#mnNcA+9Z{zQbccX6m6-~%#ggoGL8(|Vur0B* z48~}zFC3?jiE+wXaUW}mmQx~?$JwpHF;}JUz*C{Y!iC*iaSUAKHT|$noQ!DpxJ+IX zqp!VIFMGwv>7p4zPaoZLB=HbOj~^Dz_{+Vt1R`qBw^E&PkwYXl@Ci+*K4^uK*C>Fd z_mF1IP!fz}L^Z`!s_CMR;up1u<})%5>GY3G{!S(4$y$-U>^wGl4ja^aRnnt)0EBeN zmwU$olNq`^V!}Juk3aKa&lCct^>4qXQER86@|4~NbBvLl^->M1{g)yK3z-i zt4WzIu@_?g{Gt4zZ@Y8f{fPeE@*OJRsurGTXcih-7C@yIJ)Z*=TlH`4Q2^yTKK_Mv`s;Wc`uEB4vo;kFsm1aZ5Z)trKW@_jEAuIF)IY^+JZSsfFxIW2;Zh0Q*`*9C-nUCma-D z{{HvB>s14O8PgewOQNP{4m#$bXZb`ATng(CFrc(w@}hD%C%ZZq4A9(a9GyvlTJQEA z2b_FiCX7$qMlx@rit(qcfiZDe2rHb(p#nCiV!&mrg2D;mV^oMcrvYDG|LReoXM_EO z6)RZAXP_RV8Pav5R#IR>Ef`T$&eP-Dl9rrdV@TQ=y!?ww>X061-sFC%jK>()S?Z|H zs#zd#e81|l*gtw<&96(BMNMJCAZ0+D`Bk*j5V4`_=fV0x2$@19 z3>n*!IGy!iTuLpG2h9`fdVL8iq#EH%7zYOAspAEXryVW zi)GqkJ!^413{Em-G1;M_R%)2Pzx-rQ}`xP_sXePDTaA)T%)Ate0l*eyJ2#pE3B@d*S zdaFa0i{04JdNiJ|xb&0ATd}@*2t(!@)}q9E%!Z?vN&;F}6W1yQ)1!Pd1ICx4Sxx^Vuls{3Y4zp95{-MYxnb&(32pUzIosMZz z(wfEiyK%+3`&>MH`-1 z<5L=C(Rq3Dj!_0aBa}*vf&^xOT0Eu-_eK%xE`5W-BA3k`R+k*0oW4tG7s4-FDS`MR zhQ;+Lp4uaQacJ5`%F2j36$O`x>E=42riAN}$GQq1tP)>`n>S`{) zBHTG+V6ZJQLF>@^6Xs4P&b2*}xim%0Ipj=r9&^SI(bFJ)Q{z4){^?}CE~!5Vxkpk^ zI-wV!VvV`3LBa*ecO9xRWDZmJ$fO<}d6T58*8Pt(k}^#4XhWm#behN}>?HUYuq>8k z%3V1&50eWd{5aOYH3mUxCvkL=(=R!YJOzvOx@UB|5V7mKbcR zx*+|=G-nM)HGh31Zd4YKz0;|wQJ9+IE**v{or`*g;-Iy-21%w{6moaySi31!hxmZp z=gcytr8wBE4kfA@-XG~Uj~v@UVs!#4S1ZM1-8nP@a8HZJJq#elMtN0N^XRe&m&s5P z()0p@gXkN7>RQieFD(M*Y93_jTZMU_j0T2U6zO*LRc{IrKs36Po zvGCtDX8wvNdEy`_{=S5O@t>`nIFSnx>_pF7RzuF2wm+Nc%`l~_k>NGH(ux!owbhlP zWHL2XU}YsOuR|@bk`XC0E03hr@7t3J9Ufc~jIuV9cvu{p%Q6>6%8Ev?3{D09n@TOR zMr_6-*wOF!tjnsYb6KXW?8ztE3@BvtCkpFjOiL;RZ33{WHqQ7nW26DnW038C&;9@1 z{_)Z4!}E)VJA24BR_y=HPP_T1R&!^2r@gh?ZtuYU-`RzK9{2w*GXFfTl@k5F0h!N| zPeUgN1M|^MIGw-~{KtG2gv*HoTYR7%zq3C$u=K6;Z$p2f-t=-OcbDP$G zrvvi;_T&2hE#@Ep_EFM#s1y(@`2TiiE0O zD#pmcYq(Z^o&}{{abFTmd8sKG+AP!1R52~Llv&2qrpze%+|OLmYen{=aRGl0>_89E z3wzA_c_R1#MUIH&U(h_{2sAg7;YOBP9Yc=$;UOkBs089_J;JQgHMhvm1QAs4)&gOo zgE@!D2$$6vOzog7#LlhskA*&#PCk?hx6CKKQYw{9o$E3JAM=GX+JdG^rRpd5|C6yW zUUHPo@g(P%^Z}*o_FDT1-7^!5m6%9ulCvk>t5l|v;PZ{*!}K9OqTCx-UMLAx4XgFA zC|UUc+dV4}WShgxEz^NA%f&p=@QU9$7F)fPCZ33#bb9u@8XGJ^HgWLMZNh0G0KR== z`%`C>1ZJ~@?-PYwLKm!7(ugu?C(EWFXa}QlO6BcjWps3CuRTQnj!R+%wG|+?0<^Y* zn0{}h^zfvU%4xW8kk4SuZ3Bj^We%6!ZN>1#LUA@R=*AYvu-l1MGia9!6}q@mF$#@fg-iJN>*ybuFPE~C_&Xh7bmJy zQ8FMJY2mv}`OvFAS_JN;|2<>|zE!`*3|LfclwK1 zR^iw?JwqAMoOHS%Sv*UZb7vpzi93pXtQ31FKhYxl%Sh9aOG)`z{%g(%MRsDmBPY@Z z&!F&RF`cz~dg)7dMrj6|&@mokBCg@Yqr2z5fo~5#IALJabcaqIqpYBh`xHLryGwZ4 z%XoXKs`gUe*1z8Pr}*77cS$j1an@@FgD}R`^uWM)`^XP8Z#j7@CFQ=6zDvz(dWGBnFEl2>#eGm%ZF-T4a1E~D0vks5Li2Uyc)!i5eAGsV>d1b zLI^N{K^Y&{F!e)?wc5$*qV^Ndn+IP}eI5TYe@rPLpnfZ}J~Yon7mWG^n&t#tD>ig7 z>X>tH7Bg7Jvm~q^O)OrIqLodXN5tNXrw%NopF3@|HI5e(wx9%%TVg)WN?2Ybewd8Y8;g+6^u47ly~=aCzt zi$=vaHC-B5S=89k3vA~i*!hIE@cT#&TWg6Y+xHPLc6w?@&Qycq>DF{5;Yqq;l=4tY zmu$C}_PER2Fy6@p@i}#nB-N~?f{-khHfY&HCN_ht7i=%<&7NGVDU}!|9%eZOqJ{n} z`|Y!~U;|rhI~N95ZN4gJNF7DwQ*GoPXl9fYv8H&c<;y7~oF+$9W8ysVyx`;T1IieZ zoO+LOGw5|xebs*T$t|%&TVG0GEWn(z<;8iFPUEs&Sd{F_*pgFgXvO%Ur*c$b}@Wuay4tvW#bAT=3$SCZIu|T&|IbdqUVm zU83CE%f}waM!C|6kqN4CQ;XI#Z;nElhm2i?D_g*EOm79636dvt(Lv)H1EBhCcRPjp z9FNjar0aAf3IEC7lSTED8WS>PzPueY68YZl(UMN2tJ;$k-0+?G1Veq5(JYGjrK2-E zdFqo%%s~r1h)N|(GFIUFH_n7o96Q!gdCKV6HJI~|tX$~ec95?uRSEV3C4&;@;DP<= z3gN(k$#F!;R%E&ICO7852H>|hcKB!cxfngI!kZi<7ip~%8E^l4Nz2(UKMc; z@CHcY^w{;FQgkj$2{v2NTuBZTIgCM#6(_aGcM^b7I1j%c$+P{+Zk4Oz0raLUDGU|{ z?^XH!@Nl#=fO6EkT{hu-{%LP62JYKdgk%Bdq$HPnoGK*Omx zIH;~&IYA3Jj5p3S>AdK99~Se^z2s2$=k(OTsVGd`sumDLu_Y$+Iz@HyiWSY|>N$)x z+iu|cNnba4$YQNVzfWwu->-?2)y8{}^kFKTQL(mhpz@)ZGa0!bJ@9PK(P_2S;E5Td7R#_90w?L>R>q2f ze*oKjXgrj-3Cqw#DiX4`{hGQ;MYgH!l(7;L9km(9-_J>5l*6jM?xlN+W-vAK4A!QZ z7jDEZb5~bZFiT4#6(;?)$Q$*E$R?!4;l>p8d=M>ZINL@7tXZooJTYoO??odi4!)EX zLnP{8_86o_u~GxI40@I~M>X%qTbO6UeYtSGIXrEvr^e%sdi+GW#PfI7r9C4X2{SyY zZ$QV^`}TXp^NEgV!sj^0)>rZT>l&MSqpEK7i$wuXZU~BVK=rDg3xdLe6)4-fthY~P}PeuBSCn?}MC;Db(42n=wTX2OZ24DK|L zXDZ4YHO_C_)fKy+8!6%Ks+lAkVXIw6a7iOAw^17A6d_kSsM;;2+Uo=mJcdO$*W|EYVeW7-=#S!I6Hkb-6pTYt)8UqH704h=(utlru+~3rT^6T zFbz!9?K1ScTo|dH-<{LD?lc>7elJp8bJ)2@ZT*bqK8;5<^n28X0ZXa%=<)v`{{K9| zqwftJ3L^7KcL7%1|88x!Tjc-W+-+}lI@^D0wwtZpNB{rd#Q$G~!zZWx7!^q0{Zsy= z#{S>JL1X2qI~N(R+`t}8$d1B8nu?(LM^sOXn6DM&aR+nm57g*_LD6Fh*uwA$@M{WJ z7~Sg@8Q_9O@*Lnt>_#FB49{49x2*hFW4EzTiu`)lj}0i$pLw^otJ{U~bK96NLb{=K z*I34{g_(P#c`po#?UuGI(F6)|O&APaM_3v8FYyre7l*>2b0c>X;%pG^Lb zar(YU{Etq1tKH%JzqPyD*`@nmyUoY=PhXP%`;Hag3B>QYJNz(FZ+J|Z}AK8fbU?19nEiuPzE^@9p2M*2(4 za3-}S&>qRgmRaB>FEA+QS_H3SAgeK$E2_K{RR)P;L#X3k&nS~Y%3!3>f-wwc4nmly z|HL60E$x{-O}aDut_LVqVE>GQYnF3yYb@q-Eq!~z0b2!>(y6Ws)Gikr#dRiC@Q#z& zWO*i%J?&*>lMUhq?D$E9MkFdxag09njFV8^NNB9FG4*(r+#TN7VLamG@2zaW4^SN9F^=BwhS? zF~iA@W?08Emb(m91)b_Du>=>x9L0q%06qI_zRkKu+vPANa**f_@5`LCs?XV@eAZ~3 z&Lz4P=xZ%r=@wJ%R)V0wPz1;g$U0n!JLHi9P9uVuzNNh_D7Fe!WqE>x@w?^03J`cO zw`cNDS5u1v?&o(!mSeISbFYWC6`cWFtdmruah%e&pG=y%IiX5%40k2c2M9fqrgb**rJ<^eb2TbVP;i5Do`=_n_&aHvZ^ zah5j%h3pl(A%W44a%koqXz|Vj=)>_AfoQ-T08a>)Jhrd7>eHeKU5cpRT2@ULit_XJ zC}Po#@8B_76eVcxIXJiuizRVn!^L!p%vwD?enaP2G9VOcY-50?Rl^|uuJ(Y>o|Xs( z8rn(X(ui_x&b+#OY~(KrZ#}J@vA2kXHoUvdLGu$f85)V7jLN81njcJX<1HpUmE^#| zQ``{65i^N8owDh_Ld!DZM=8o0d2~r9#ogqIOrIl9tYuPmd-!4I-A4j3R=6SDQmc=B{m8l#0D<)Fhi4cw| z_!sDnLiE$yUNwD^_#Q~^@N?)uWaLhqljq6ph`4OBsvi{R_63##sW*cDS9sS@Lt^cH znZ`t~f5|79&pe(B+)#2Q z^fp0}2-XhT$YIrnH$ifx1(n>MM5Su%X9IISZF>yo<7%d6!|WcC_8uN+t4>|bM3-U( z(SuC-I>p~{!pGOzn_u;X%^kL)Cli!^H8(Czo1HXpx#snHlJxe{7Aug%)eHy%|NMl1 z!ldICU(jj2P8QWy{R|2M-@ck5yH1uB80_SGilw|248)wNL@|X2Y%givX6YP9Uep{R zy*YQ7<-DB(@rBhQou+4JpFMVW>Mij9?ig3@jQSft3~?^=RBbACFjp z@t5HfCa?Ii3;N%FN!zfDu^U7Db2S?kTG0QIOPXO?3fG>nseSDZ*|mp@{MKFyXGIbI zn2R};!lbPRq&R`YxRJ!M7eGmue{~~} zAqE<12+R1a(_B4x*F`KakR#w_of-NZZDgNdv z%;q{2_9b3iV}bEk$tPJ%N~wIQJPO~&U&MclE4}7Jp}WN&N4l4tL~&50AHyPrl21mN z-2>LJqJzmBBlBh7w{L+gQw;&B6t1iON$2wf`1`|N0XVS7&i#SM^P9!jHTmKH(N^?5 z)=)MVi2pWBEAf|TVM$cTWDALs={(_6)_2aT%31nsuoBhb%0(KlG5RdaIwJ6_dnD^E zUA_r`DN9x}HF7VI?AQR0#zSsAR6qZPc_h)R-kXiGEqr1g$W#%e-7H(vc=s?y zH^TisCbxfg6UjqsPii2M3jP2FkT{!hXRf5}AW!H6uGV{J$KjWFb=DvEuFen)jNK3 zA8VC7>l2b;p{yb3R-oifJp4%8YO_!2vbNE^q{~5yP+L&2P1(cc`Z5b)XI$)rkI6DC z&6@DzY`i)8{>|a}MgR2d3eoT$CRzrgMM}^?fh&hTf#>R+9-^+EImx zXODu)JXt6M?{@NjrTbYs>mBz02vlUX@;PoL)4(seY~Bt^^85#kx{{hN1QGB1sNU zh)0bh)M^oyQB|#j{2Pz`H#>#B zfxWe-19?fA!yLHbV1aod8qoG;2z!<12F}g(W)R}#ht0qrZien$e{*vke%K6eu0>Fm z`SQtdQg1b%ZfRg|!f?K~xq0n-i+Rwv_Ppx}4LX0asT}=BZZKQ~!R9o$-W+VT?CmYv zZav+$zZ>ih6}X$#Q?~(gchBkCp!tg3ZZ0}uH)_6&!@jhJs_Og>-JNc(`IHsF@PV+R zYuHXOwCTjr8!N*xwCd9y1Dr5){F&yBxoW*!)vx|}dDXlBN~!~GUVROl zF*+YohUSE)dXWK6yAh>0c}5nmC+tE6wbWK9CZLviW%S}3Os0??d!FIHLHf?ZHDi=6 zU@Syv)7Kc!gucJE#h2&yUj~igi)1#eJW*zR-B`E{2^b`rY{2E!NxzJIU%&r>(P_r^ zUwOB);&h^O_TSmX>$Hm<_qfF@U0&}|HN!dd9*`mr#QR(VkKEtxcZHm8{j6P)%Tk|k zX`PeUA3R}P*8RWn;-{a!%>BPs6O(<%^M7x(AMgMDCinlmKz;*tXyi?^?gb`q0^a+! zUyTx8qIdbl$*Yq+jK2etaDe{?i$M^&;ez`XT6B?x(2~J#r}o{%nRVOErpzwm%&tQ` z2<7D(_>T))C8%}0Y*ksTFZuQs)BiXC-4fLxSFurLc;i=MP&;kR%e7OLyPUX9Qx={& zXnN3bo@4M`fpTk2j3sDR{)X2uK%>@39^?Y(Y%x_q(UWjnFkEK9@YJDDK(x`gGXZ*2 zO_p=V@cKDxHd=czu_SVyFkTRFIlRUoRrL$q3T`J3S6xRi6zO?{Z3ulOi2fyrALCKDxd)yDWoJeY$^ke%OEg{(t|s ze{^wpwtsPSa(u26lnBzI#deOarBpLpf<44Ap<)mCJ7fRACov!i{P_fM@ql-l-yS7H zrGsb$Dl|xvPejWw+5}T`ikn7;+%S7tmgQrB&to7nz3^ zA@!Bt)geMku0ITV7^H@#Q$^bR@^NKY%`KNaUvq$bF`f&3X{Yq`+ViwbE6JquNkIw$ zrm&GrBFILrb?Np1wKn`y&8!w7sJKikvx1nHeQE``ix!=z5K6EWeVdP#Bx$@wgQ$@- z>xA->GSW&)odrc&GQ{gNl8<;!)aw))*6z5*j;zua$*@s`;)lcjd>PAbUkEx>YZP2k zh_VPO9Nv0N_csex(z00L)L;$TU9o6U`(PvV;>BB3+zv+b%}>!fW(0Qvt{{D*^oAyNWL&2ocPSvsfFC@(If%?&ziii@!1!w$|Ge?l+eA zv(sK-{_eCr#K$|Eku@_p^1_Ru1^=~kTp7-VdqT@_<{7rNpVb1DBbOTCvciERAIFm4 zI78&oM(g=GZ=xop7ZKFtjp+}PC(!6z#hcR0?XBL6pay!CLum@c!`m{RR8!~SJi2xZ zT)BmuS!-_6iaYU4+N<4qIF#R+@flaogIF%J?0;g*E=yj)Ry z&0>X$tl5xXv{l7`N8EN3%X75YEHf)naPpLD!b<^U%dDDvSTV}RodogL z1E~_-95Sj?fGP6!aWMhI@TNw8DL91Vqxvvo(*wKOJWj>_a&X<-V=otzYuk72 zS?YAW;?$H{-I?{ehqLR68{DM6A2~g!zX*fjO~#Z4NxXn*aI+3s=>nNOIZ;jqXxGaE z<;^E{_*J}cM9XiI zVcJVcDCu-kPPxg(tI?=szFDTDZC-l4xS^nE+;@p4K|}?S(LiQ&&w*@R0SXMZR@ry1 zg-@VR1Yzeo_ZI%pdF}b2Vh{N{>3tv$&h5D&7r~gD^I8=|1#+7ovkJHib zmr3gyE3K;}#;25V??Y8&C0?Zz3ufco%{>g@H(1i-@1GtSNIYThKs^E7NLXxq_xc87 zkWnl=9%zFmKXx5;_kGpQugYIlGT_L5`pem22C*R;_Y_ly(tk!j{D z#c-6?3kqFGGOTmwVtBzJEebJQ)ztX_JZ|h@O(b#=z&9(~yjR~>_j~5e>S=vX2gfaI zx4;oN;87_zC#7L9JN5*}~)j5pwlEhLvqu@u$J~q+3)Pq=i3gU;TmksrJm6|#twjo@a84{AqH29 zGdRVH06&B@(1AoV!r=_Ci~wXzNNK3J(!?8LLN__@z@f00=25(P_I zv8s^nG1L_va!K59JZ^7Xpk%@4X<=ti+CHB&>`ZU1nN6@GNhm9zm{Q33YtHz$I_=KR zck5{*@0NlSfGm1KjqHgug}AP-W>+CB4{tUSKeG{2fOt0r_e-bZs4R5$WG-u!^oF%& zOR2rx-f2B;w^#JGq|!TG&1Mb=9Nn2CCF&JaI02I5_ z;CiBkdvU*?QO79l0j+@C@@tNPHkOxzPk`{GLDXRXqp?Rg=7>BbH%afp>)&M;AYnYA3VplIW!^om@LeT@ozK%;_j5PL z=cbNQy|)PKa-Dvr*7gX#YE3kbg!}p0>^?-B?_A0@Bv|Mh#~wNUN(4~u;}yQ5rW9rC z&2Y1ub2qH9z|T(Ms@c%|VO}Y7FNFKmvWcH3<1!~8x(+O znDFIxe`5n1n0ZX(_Eyn5^A#B-V{(3E-K$AGNNHxf52PE2y<2k7&(cPK_nK+1LU|Dx zbW#MS_Apgc3bDr;GeBia`Qv1NGU0RiBNe=&(x|e&M0jf{xlj_$J8}((Gg_ls+|P_) z#|-Sk2<@!0!6QLdN_=l~Mgk%kn3i*gZ3K;tpp-FR8w{6gqu-x;qs7F*9QXV;H+>{x z(GNUt;@GqMSioPNoV>j_JikbqKQCI{R`OxHdvW&uF!{XG#hXvb=UZLxIQewDyL5uY zfBzB7Vdn zvuclXYG=g)&llX8(HbTY(VBB)bMf%&Xg9vs78K__Yw^-o3ygINg6SG8RclSL?jo_| z3#`oF^1MgJLP~F0ntVTkq>u!R?Q>NzgWy5hno|P%qzq%sq=ng$R!;<_WZt0u$dQTY@?2!Cem`7sXr9+Pqmg#ElwrK13Ve?Tv#+ z%^|6JBF~3A(=F>WZr#E6^3;a=m?pBO@MHPu68#S0zj(9@c$qMUAw-lXL@)3wDN&_r zfug)6Sz%R;c5&eC9N-DrWr3-4MowHzIR>#H#XZs(g`|{{-C5C03P$<;NY+cH_2_f? zDIo9nK1E83N4J3&=sd1_;50z^ACbR&X*d?nwT+fRg8USQXzbRZzT?eu_YUp<*f6@} zQ!XVu9Z(MtW>9o{p>{`vdBE+}l&IvAFoux;$l}-`tW%PcyqHWnFi?&NMlWBRB4dj@ zAQJ*I8e0HYQwC2R4N7EXQ;$)O{KQTZzQ4QfO}Re)Fw^=;^VwU0F6fsJg5-KAS>g`h zjqUR@(qJ(lR_X+Xg5{z=z}%aVM?gP4U6<}Vlu`j^G5TfLhHYCe3V6t!5sqRuWb#2UaT!7O&Zj z&`B@R?5eJ(7WhuQf12_BDZKvy{@u-Zzl-mWF5c{9yx$SoGEA2hN-4gFR z8Sp#eeLLfQyQ@eieSo_7H}NVdnY~+tuwK}iGh9&q)pUojjS9?hN>fP98x<&#@-D+K zN)Z8V+sWpTK?6+R89Tl+8#)BJ7P|&0tzs@gLOrsqDwr2yweu5L-3T0Q{Tmf!Q3%lJ zuQ&j)t3G*P_6=`FY0X$um5I)MQo0G%)BUPGILkfu%SMH+p9a6ML;>iE=opm~-=Sz) zN!s$TSk&iVVk4@JlK6_F^jv&@p`VN3aW#+fC_Pox5mPni=sLln-)dv3qQ>Z2sdO=| z=pLwI_;ugT_)Q+e8#*4fP9wl<1tD`ASmPvK+thJGm$X++m^qVWX~#z?S}|1eFiPJc zRzdnMW&@5xU9oSh0^e%h55C$=3K~ca*6|7?{~Kv4)o^K*s(BOM7a~%hE6ATT{d(C| z=&rUFl~On(c8Zfs_8P*tUxMq^&^bta&#w|0ZPHrJttyW#C1SC`PILa}Hs>T)y{wc4 zcR_oY;xxIrG~}mJj`$ze{zX;)rFebp0#z2{QM4-XW~xR+RJ4+8O!yV{(u@}%au>5- z6fpmlQPbnl$_X`Ge+f7Nslz|5RmG6!!@rjpn1ue{uCY#yZP(aS_zB<28p= z1^@ocBS7=GwBPZ%djNFxSaO%I4GJ_|#VFD8>#wVt7K2MsxQyjpt|=(_v2KMwTH5gW z_AMO)RE?2Lnq4noYGo!#0!LAfbPHjCYmzOQ%|1M|C-&tdI zYol49-RwEE z0JOEL5XM04tSZ!jLhV(BwlLBq;VnWr^T_+QJCjkf438RrG3(1nCeeXi+G>i%Gh?|$ z1+v6yt%R|FE#buWdx=<;)xotw_kTKs%wf!i@+1w6G1kc-T$YOiD(=&FyR6hFa_RR= z8oh7=vVOnu|Ap7tg9HG}kN@9nZ?#(@{#R>vd#i=xG5*(=i~p};czs$VeQ^iqxm_kp;;17nED}5~TZ{g>iklP&K%butdSODtNURJL9ol zd}>cYyM!M zQ0aeG?fy>IOsO0mh>> z9&n++cqH#x=+7wej{zBTn$3N0=#WEImc&7+>{8!pQpgu(HDcr%ue_nERpF?ns1~WE zp@o#9ata!}Ls=zoQdSh9tX}y=MBv~2LQ*@(FGVrUSKw?;ce3;!k0bwv{QvB5|JA$0 z2XAAQ{?}<@{JnMMbEN;nRm?}a94#Wg8bk2j%_D_%M!x&l^pirQXmykw?)5IP4w!ds(H%>+B zmH>rh7#Iv{2x!UF1Hm3U@kh`mhQt)%E7*TC8EV49Y^EdGr5cNpaw6h`i9P!ulCB|s zDoqTA&Kv_B+BgVv511k0i|0}paT@1fF^6x?h;V%8`ION0qcd{>`W{c%6R@E@!*GrE z5cw%U<@Y>C9-gIQkRX{xiD#t6BX;ulz%1CJEaqFX0Y6_R3&*0DWh`6nU2=zyUKNly z3K1#1SBn8c$BPNk1>f$3O0T9tpw0#!jQ@Zt_yHe~r3Kvo8kQDn*DgjDbR)ncH}HH{ zLLU5? zc(;KC+5)zTwBpIx20Q>6ihyeC%>v%nGk5I5;Dh`mmjs9xflEr3g%#%f8az=8-ev~c zx33*`4edDy6-M+2XAr>dw=ZfSzhIh929EE!>^ZT< z#xQ8yq6FfM7B7-@ciDwIWpC|;?~VeX>gVCa{)=x1Q+LuBeRyH*PbTaPD+KIJtceCA z?~S)d2ZzV!hxOC**RamSFQSH#1Ee~Ep?loMA7=kQpk*=fuD|I1zujrIVgKK1ZtcRi zHtqkryW5ZZ|CjiH%+;(ncj~P+Y%9JqactZ-fEX-`zuK-hpVBMOzqV)YPq^=l94#E} z(DjFl35+3Ezyc_2FG8cZD;|DuFsG;7 zf^e}rcQ!J2JkGwpyz5;qVHaY!S$}lBMKD?NAQP0LXT)SCyN1?_T|n$`CSnxB#?9*hfaiSxjwwPd3~h{jE%3KPVE%(eNbVredE8|&WU=1D4z%#vy~AAw z*#0!&@&@Ip7Riga&?1}?0>GcrwbRBkcJBywOe0djR6|?!)~-2Mokm-}Y}ea}g@~q% ziK?o!&!%TrucDP33c>~eBGM2|>99MW+OV0wwWq+{!-fK8$XhD>1mDGn=+pzdUw|Wn zd#2h`d8{SGuK8WP*{QcX0C1lGj+}vOW5dG_xD$#KR1!e=NYhp7@9mGUef|~07cL_( z&31eQTH4E&n1?9oEC$phUulwcqd?YDHiXR-O5Ok}5)2GvVw9WOOGJQzUMFUiPqQ8K- zv|)m(e4w}_UTIfx$zk#+klt`nAnhhbl`ww_+>x(tjU3vXMQSe>bC4}*-9>g3xgf~0 zs#Fxg7)bQ0w;MYRq*xr1QH&x%B%2Y}yao~0x5J2X%k@rK=B52cNO5KJmMhRR(82J> zg^OVcu#zpn0#d}qGs^xpL;gc# zB`~41hXiep-r<-M}3)Z}bl3VF=czu~?0TkE8;^ z39lLP%CR%@d^>8j^<4&PT9KwAgAvLSh=gJ1iQbBkC0w){Pp}{c^OTh++2S{_nt>8| z){iM#A;zenk1z-h4B+YEDSJv?nZVv2#?atoMidWia2>TiltjHnGmiU%5D7*#A$q`W zgm;gDb35U%k>2IjqZ0V(`k!EZ@>v6E@C)dF&304if1MrF|8`ottw;UuOMEtd{_4+s z+WTmHnz(~Kw!y;!GxIsysBHY)@AHShvigvfXrmp0*oV79&~dn*?db@WEV=k zMUJIm_U`DydVls-?_d!tAJ2T#+>2FF>yuX_2w0UcRB!7WKMVHwYXeBUas89^5@eXs zndgN9BFtwvox`?s^Xulu&&bq&)oQ_4!DxT2`%tOQ3BVoo7cl)Zkm@-+ha}8kPtF;L zKZ|+jd6Pht*!PDwdmz@?@ULY7bp=CEOh|M!4jE=EP8raguN@y)%A6m!3rE(~S33Uda`EXJo;LP1gd+0i>x7fH1c1&cIHRemkUs)R{pn?Qs`BPT+$L#B~(|7%s?~mTT>YtsQT%^|(by)qR#p?9{ z)V(@^gC9r*2_R2|>0)>T@+sTd+KQLh+*}0yCPhcv1i3VgKsRxO?;1DZbYe|ECIGCg zzoJHrnHb}^K_Yb42*G>4?vW>=4X9GD;VAGw^(s8~hP062-;wM8n$yTG=@K7|p zSUAAShir%OQ;~w;+KI74vp`+Qt#YEc7!M-vh9IV>y;h4KjudaOlW4Fb;GH{j*4|nd zUONG=E#U1huG#Lo;93cAa=QL!F%i?1JPUHC6MOL&uHFcJ1Mlbxp!E)bgsq4YoQzPn zrNJz+=CCU_3*Pq5z1nU=+kBCYNbO;!*AXBR7ghM^VUw-d1|I-1*FFOC*-lFrrX8Te9`x2igUy-ad zaA%v&?4#giB6EAB*$q)z6-pfuiDmum@a+8P=OKjS!LpN!5Z1FG--fN z=6Ilkqo+ zZ|)B9xf&XMX5qOqoM>RUttOf+mFG%Whly4qKBHbEA*z7h5iwQDX$oY3sZu0E0&v^` z7GvFLUPtAku>%#2@VW>_dDN^8goM3FExup(@a$bY+?tv1SkJ6n(P-xvApH`tq_^NW+Sf3TC+?BdNKJ3o1S@x%Vv zq1Da&Se6u6?0|7UuaP|4cWi&MWUcSMYX;=Mvv5Zq`v@}6nHL0$DYJ1e2Qde?KI@$g zRi>~F1|atwpo1-xs2u!ogvsZOz+J;zw=tVkWh=)Hp7w)CG72p8a$v!N1V@iV8=Fn! zzBIJSU19&_L4yfod=v;l?vYLt79L9sVHr$>#0av>1h0l(-;gshciI3+#-1%B_aqXX zNK7Wj1N6^2nqj}UYoZ9Y#jYUvJkK;3XP-A~{{cBj{Hi~IJx=cr>rvZ9J zLt8>N4}>3s6^Lz`cj=wIMB_qJb_?Y?&4->;gORqMhmJjEl=2;Ay_XIMIx`fb$>qZH zr&O6g7BJr0gMg~R6hVV0!_XUW8I@#SJa=9?cm*|TR#j0gu~+W38$xdmkRG}J(agJL z{|iE&r44gp_4IFgr2m1RgI}7K#V_h8pR>QjAVO?Me z$+|mcTO0&^a4D;}G+N!6M^)R6W~^!iO0TM|Ygx60j%?XgTWPH>k*l?{ zO`O|n;M|Vk+}3gKIKw{Ug}@&% ziwr9_$7}G69A!7&~lOj?beG0e1vIz>+n-FN|0L#u1@Q zNupGZO`MP|y+s6+2bHqX2N6v*k?WO+qQS(CDX8SD>s7d2FtJ~tpC|_s>yJc&`-#Ht zsII?-C__yL=!zocO=yf@@T`tfP~pSi29an(9hcqV+XffYxNkq~3+Mp6KLqK8oJ*mp zGZ0GAw04fC-&4%1$~lP3y;)7Hxpq8o_#FW^43t5ToNi$RJot?w%*4J$3m4kFn9-mm zd0~y+c(*8u)l}Q%0P8J<4{zvAMpQC-OdTft2n^te5mr%FRVbFC>y9|_mURKM@pzxExv%v(d2 zW}&tL`roxr_d;Z6U};ePKTxRx5W#B9_m-e+E$d^bTtk|hjOw>Ql9pUg3Q>;nJ+4y|uqv~j5 zYS|M&7>AL9zbFp8nPGFfA8!)er5 z$+$#mam568jvC)DvnlNvOSw*2Lg^j^ZMxn|>bgcat2@cWP|}@UIh{Z)od#-6r1^iu zuBn+8<&hi4MqjaOdB4M=hKE9daRMDPy!8tR0VvX#ea9Q~3A>dSj*tym{ECg)jQ!De zC$`v01p5beDklrC4?FIRl)ahi5)*`L<75TgRhkR{a%cj~T+HFKf$utFp@b}@dL?&1 z@|1@9QDkIyMf#=^-0k2Rrq)mbGWpB&W_GY7DjWzi(?4n-Tq$>&)M+_J3Bl* zJ3I$ww9gqVFt{J~&(8LbFOCk+YwYmv_!=KuNAFJG9v!{{05AUmWyt7r`1gHydRSvG z-(LW<3*d3@jyR~A*$(h=>($Zu!Q1^K;_Cm1wX8Kvkl!7i9lU`b`!A2)9^s=i_WJ1J z7;v#@4*&qC`)3zN2k+nR15bW`c6tJ=72aID*}ouT)O-B>T4UGjhoiS|5lidn`1KiV z7Ka4p;?2?7D*^^M9ew}i;vB|$n~(MRn|)q|y*z}z?Z13`$SzJKC#Uuh1Z_gt;MsZ9 zq=ijNT#t?qj$UD3K|ne`Jv=zVFYpeww)4aP_a5HB6ZUHV-TwE7Gzo7{VAS`|t$i4$ zbG$EwV{-E9==DDU@fw4nyf{08QKw&-`yh6^W(gc#9iAQi4F>yfhd4fGhbOOLe*boO z%#L2O{a1g3y04@m4+iu6NQ}HF3xl#FH?jm%x^*XH0rSuxC(IDQ_+j%1@d`iEArLJ* zaxsRU@7S;o@CFaA!jugH+S+ZfV~?leAiG^^v%w8|8xC;!I#X`S5m!fHwOM5PKyWwi zoJ@Py&TP1>5kCNB9UoKlf`57FT8tbBk38jujMI->rs7vDtMlsC5^Y$xu~14kF6hvX z0DD@9_q$-JgA@f#(l724L?HpxTXES5Dmt@~ho`YmI!JJt`#vf80!IDx)FEDifr$e8Y+_P z4o^-Gj~fRk?^elI%|h~(60UgTZdY#*p<0rPSWgkiIT2|TZ{gMIehc5}O>ggNV8!d!gnEE@B| zVjPRaILi>@ph=urDI1ik>&tb9i8e_FHCZ4}(5pw1o|Pr(v2`RpD@)R2g(W@9l=Spr zDj)`-NSQ9{CCu82%aCFkiCsu6vc=k(k{2^2FVS8kO_;q|L!J-|?@Ndj@uq$=sX{;P zT1Tz`8BX-!exe2ZvQ)dDBwSc9i@I<@VnZ#GF|eF2Wf)zq3G}Q_mMONspiGf1zbHZC z+JludA(*b^6c&djwjpD^kGB0$m@ zSPouZwy+kl13Er~6>uME$BLvKb}wniGB-Ht^11?#l@xdcv@Dq?hzUJbj?lx33O$xC z^f0y`@N_F8*aSb8D;Z3-#3tUg7ihfB4z0wY9K4}8NSjoc9BP2-5ZgHuM4l@3GkK70r5$8z zLKoA7uBYE^Q}neEVElkL#MvvKL6k8ydQ;snbnBXBSl3vJb&brea8$gh%d=h~ z)BACOr%u&9Rx)sRg()jyu|Wn!TN*_JswRrjY{^Y2nm*98$f1WH@EENNHZ3pzcr&rw zaa5d8W38%d)?()Vhzc8e`vP5J11>t$l8-T~e3+qY1s&7y*b>lV_#`lIAf}kS0w|>5-I6vnbg(e7vr@2QbPrhUP&cDVgX7SE;+r}arO#|z<)ix_ zV_l{0aM_$T!GwWTtiv@_B7*ZJ6e6>s-`dE^2WmYtEA`-$?5w=i-`dhjSp3`CTG!Ew zh$lHC^#8M5-K}gc+{$#7=sj$H&WLM9bW21kL*nos#0%I*`1Yv*jy7NfMtr3v_YBy5 z2sc>n*89eJL)F1%m2QGzQ(@anDrpDabn4A+9dy)0&LF)Ubxln^gDpr?+E`3!vp{FV zZqU`5h+F&4wMQ~N9isC0bY^x=Hg@?!fv=fV-&X%q92Q!5k-8+}k!Aj3$O zGW-~h-?Q&23fP35l0>Gay7K+$+bS_yD|?6{M^H`=oES262_DMG<_sExxS?yHOPd+T z$n)jEkRFX{EZ)Kb`E-60ur10mj3m07E!ig3WoymDfw;PCt#>#;Oe;lMw(fB{K(Gu| z*}B*9fUYT9>mLsQReTUp(@0fDFN@QQ61rT5JWL;{Gb0K*I3iesNPo2oohoo1sp%k^ z{%WnQzcO8am2OZRZPaIfSfS2x56g=;XD9E!e}g`f>l`;IE!T`zjGmdSE?l{luR2Th zRo|b2eCdzuY0bJY-O`1pmCq01n7p>%sdg0{u`#Xe=Oy= z1@N1Imy(WIV}~rzx&{eTuguty@!B3xI9D|mLXiRF5j<+#hylwR7fG5DAw1obu-)@sy8nBsGgw%(Av_1!*51Mmmr zxi<{x_~PvSJElo@ATUKzBnVv>Z$N(Q6^$E8`VybhzkYwb|L%}y zE9CJ@aE*(z_3qb|;Ko5!<@N(BZ^|HSo9t&1%kAs0+w9k}41x0X&jQ@96gseKogZGj zKTU&Ge|=R(fHH_c0-_8>L3!gGd$wo&7lvpWvv1(xkp6n?oBx9^1N(z~r>^PqLdH)| z`}u$RE3H1yf5t0E-#z*L|I|aR&Nm{s8gS6#qt}P$Ahw{v5EKMJc`ovd$kL77fMFV3Ud^!?Q;^ zeY>&!YljSeq?&^4fO^$HYFxI38l$oY7#eQYfvO0cULoT~> zkD(YMYWMbr$RctS!;u~@{24UK&0r%BhO8Dpii?h!B9qIWMN^oi-e+s+%J`=87J$O8 z83C|&c)SP`kG4$GS@wA?=6+Z!I049Loa`G(F)J@wgIAo!fs8=%1Z)ZTR#b zbT-1?oVbh!5 z=rl;_z8sfVhx=~<);U(z3qQsP{EwCYe7pn*d*=g(03>;DcRNe|Yi_lL{I}IsjUn^uD#1dl z(G=MjlF1h^Hn_^IurgGq^~Rezb##?2l+$#df-mjG6-e>CPGLOvSR#mLlxzXBEWCAi@GWK#)CxPl)xS&3a142AkjD#d&KkurxQCwAJ9Ga{`jxQCqEop2P!(}9$O{<;k7~ew-2P87 zLm$44Rq{W4;`@KAv-Kyo{kZ@C2J^3C#(pvTe|x7%@jrLAflRj0{=W?*@F@R%iO=RY zG0_@>sQNa47@v5sL~id!=b9gn=MpxG{pZ=%_p!mF4nFU4IoBGL>ulihS4ce4&|<` zOSD7F(G&1N&W1^-Pn>ZGa(Q#(nf{clxZ2~fHw)`yd+JU=HV^DsPzQ<79cwQG_a_Hs z_@~a4cSRooybn^hC+;=K%^(x5dn8%X`K6nDi6xZhXb7 zmeR?$*+`56wX1bCcNQeQcZ`9_nwtz_N1R<$Lrjz<(Jm$_1Jg__0o5g{G;z~ca#O8^ z22SdD;=xA1OWwMp@CNie#cA-}9>Ze10?|i-8dQ!~L8l%`d-NR#CA@j2R~J)rBLvl(MyoToUrtQ{Y4xal$7>Udd8k} zT}T6n(gEH&>6XsloSa=8yuV;a2PelRcH=waZYd)exH}9s=gYDEv2pE=OKekgW|Q}Z z|3IlvYiQ(tWbO#CMqEoTjN~29K^P;%x+O#An|d>ka;lfKA-QSAD$ifMWS4ETL1_=(qrosiE++9O6ZggQ!Ha_^o-LV+ImWr@jJ#o><2ejk`h1*bTH?6{p2m%x zB(3oFbpFf$SlB9`YK_MX0Jce%b`&Hx)mWd?t9PdLo_FGJ_5|hSm$cyln| zcWOe64W`4Ic``&8pSt1ry0Jh)!&6-`Z&kV)#z6?jH4L}Bgl~5Sun5Lw8G)30mt}-g z?ny{F-8sZNpfnJ?Cr5N~T@U{ZlD7!;Jk;}Y8^G|m!j>~ZA){w_-A7&X8@c1LREJJ6)r!peV^qy=cIl}w}?+9SA#8Z_q$mz&oMQ(I{0;K3) z%sNTGcySI#F)#^+->92&>ppZ8re#QxvSlM97xO$|goD{NzY9iSa5ONKvjHs{OrDk& zI|y2|Gr{YWw(s*yr%0F>cY_Bwz;@NedpB$t0M#KIMM$vG|I7$SrjEMsj+QIq25Bf5 z&;n4WC<_KgvQQ^;BPVeA%~`CBE{{XO$|!8PJGHM(FxQy&1zT&RF!4DO-w)0JReMf( zao(JBOj$Buy;xm=bL#{Wd@p>+t@iNF#;FYMxy=q<96Ptjj`wg(lG|Q<0gG5uil^>b z&w=l~u>Sixd?x>kCCe2;7S!N-g;^Gu2)+re&RqAis2iJP>2uOxz%BICpbca((&Ry6_iHR;7j8AZ68RZ8sCWQE#DJ?PfCr z1~5(+*(Q}N_b|?L@m`)1l-0enE@gLmR;+)39QDw;T(~_;1pVm`C*JUbd?g?LIB{mz z)E#=P_pKPlDco}KLP;!|5LKKE(X|yhpYIrl@pPDvZpHk5DQv4eJOcdxU!d~I=pqI< zhcBSwgseB1nEg5CCe=$+swrg}z;s73D$kfhD17aN6(pA$6Xa4&B|In@#7ov#Yj=B% z^@HO&;|zgh3mN}L2^b$;o6Oxfb-D!SkwbEjPmh2h674#RPODXDUBwGqpGcET!q$ia}t6#JQ$;CvgQv32SnO zgo=!u%D63pl2^m9XejJiy{=1JF=0$vU-;ofvJZ(|s_%smkKr-4+5apilrnEO)^5_Y p!oPCc&+|=g=z6qCKYkuRkDtfS - 0.4-36 +- Type:enhancement +- ID:NA +- SUG:NA +- DESC:modify license + +* Sat Sep 21 2019 shenyangyang - 0.4-35 +- Type:enhancement +- ID:NA +- SUG:NA +- DESC:revise patch + +* Thu Sep 12 2019 shenyangyang - 0.4-34 +- Type:enhancement +- ID:NA +- SUG:NA +- DESC:revise the comments of patch + +* Wed Sep 11 2019 openEuler Buildteam - 0.4-33 +- revise spec +* Sat Jun 12 2010 Paramjit Oberoi - 0.4-1 +- Release 0.4 +* Sat Apr 17 2010 Paramjit Oberoi - 0.3.2-1 +- Release 0.3.2 +* Mon Mar 2 2009 Paramjit Oberoi - 0.3.1-1 +- Release 0.3.1 +* Fri Feb 27 2009 Paramjit Oberoi - 0.3.0-1 +- Release 0.3.0 +* Sat Dec 6 2008 Paramjit Oberoi - 0.2.4-1 +- Release 0.2.4 +- added egg-info file to %%files +* Tue Dec 11 2007 Paramjit Oberoi - 0.2.3-1 +- Release 0.2.3 +* Mon Sep 24 2007 Paramjit Oberoi - 0.2.2-1 +- Release 0.2.2 +* Tue Aug 7 2007 Paramjit Oberoi - 0.2.1-1 +- Release 0.2.1 +* Fri Jul 27 2007 Tim Lauridsen - 0.2-3 +- relocated doc to %{_docdir}/python-iniparse-%{version} +* Thu Jul 26 2007 Tim Lauridsen - 0.2-2 +- changed name from iniparse to python-iniparse +* Tue Jul 17 2007 Tim Lauridsen - 0.2-1 +- Release 0.2 +- Added html/* to %%doc +* Fri Jul 13 2007 Tim Lauridsen - 0.1-1 +- Initial build. diff --git a/python3-compat.patch b/python3-compat.patch new file mode 100644 index 0000000..2fe0cde --- /dev/null +++ b/python3-compat.patch @@ -0,0 +1,547 @@ +From 9ea31e4d1267dd620814eceffabb5b7457ea9fae Mon Sep 17 00:00:00 2001 +From: Jiri Hnidek +Date: Fri, 18 May 2018 13:44:39 +0200 +Subject: [PATCH] Third patch from Fedora Project (Python3). + +--- + iniparse/__init__.py | 20 ++++++++++---------- + iniparse/compat.py | 30 ++++++++++++++++-------------- + iniparse/config.py | 16 ++++++++-------- + iniparse/configparser.py | 7 +++++++ + iniparse/ini.py | 20 ++++++++++++-------- + iniparse/utils.py | 4 ++-- + tests/__init__.py | 14 +++++++------- + tests/test_compat.py | 23 +++++++++++++++-------- + tests/test_fuzz.py | 18 +++++++++--------- + tests/test_ini.py | 8 ++++---- + tests/test_misc.py | 4 ++-- + tests/test_tidy.py | 2 +- + tests/test_unicode.py | 10 +++++----- + 13 files changed, 98 insertions(+), 78 deletions(-) + create mode 100644 iniparse/configparser.py + +diff --git a/iniparse/__init__.py b/iniparse/__init__.py +index 8de756f..7193f92 100644 +--- a/iniparse/__init__.py ++++ b/iniparse/__init__.py +@@ -3,17 +3,17 @@ + # Copyright (c) 2007 Tim Lauridsen + # All Rights Reserved. See LICENSE-PSF & LICENSE for details. + +-from ini import INIConfig, change_comment_syntax +-from config import BasicConfig, ConfigNamespace +-from compat import RawConfigParser, ConfigParser, SafeConfigParser +-from utils import tidy ++from .ini import INIConfig, change_comment_syntax ++from .config import BasicConfig, ConfigNamespace ++from .compat import RawConfigParser, ConfigParser, SafeConfigParser ++from .utils import tidy + +-from ConfigParser import DuplicateSectionError, \ +- NoSectionError, NoOptionError, \ +- InterpolationMissingOptionError, \ +- InterpolationDepthError, \ +- InterpolationSyntaxError, \ +- DEFAULTSECT, MAX_INTERPOLATION_DEPTH ++from .configparser import DuplicateSectionError, \ ++ NoSectionError, NoOptionError, \ ++ InterpolationMissingOptionError, \ ++ InterpolationDepthError, \ ++ InterpolationSyntaxError, \ ++ DEFAULTSECT, MAX_INTERPOLATION_DEPTH + + __all__ = [ + 'BasicConfig', 'ConfigNamespace', +diff --git a/iniparse/compat.py b/iniparse/compat.py +index db89ed8..f95c25c 100644 +--- a/iniparse/compat.py ++++ b/iniparse/compat.py +@@ -12,19 +12,21 @@ The underlying INIConfig object can be accessed as cfg.data + """ + + import re +-from ConfigParser import DuplicateSectionError, \ +- NoSectionError, NoOptionError, \ +- InterpolationMissingOptionError, \ +- InterpolationDepthError, \ +- InterpolationSyntaxError, \ +- DEFAULTSECT, MAX_INTERPOLATION_DEPTH ++from .configparser import DuplicateSectionError, \ ++ NoSectionError, NoOptionError, \ ++ InterpolationMissingOptionError, \ ++ InterpolationDepthError, \ ++ InterpolationSyntaxError, \ ++ DEFAULTSECT, MAX_INTERPOLATION_DEPTH + + # These are imported only for compatiability. + # The code below does not reference them directly. +-from ConfigParser import Error, InterpolationError, \ +- MissingSectionHeaderError, ParsingError ++from .configparser import Error, InterpolationError, \ ++ MissingSectionHeaderError, ParsingError + +-import ini ++import six ++ ++from . import ini + + class RawConfigParser(object): + def __init__(self, defaults=None, dict_type=dict): +@@ -56,7 +58,7 @@ class RawConfigParser(object): + # The default section is the only one that gets the case-insensitive + # treatment - so it is special-cased here. + if section.lower() == "default": +- raise ValueError, 'Invalid section name: %s' % section ++ raise ValueError('Invalid section name: %s' % section) + + if self.has_section(section): + raise DuplicateSectionError(section) +@@ -88,7 +90,7 @@ class RawConfigParser(object): + filename may also be given. + """ + files_read = [] +- if isinstance(filenames, basestring): ++ if isinstance(filenames, six.string_types): + filenames = [filenames] + for filename in filenames: + try: +@@ -143,7 +145,7 @@ class RawConfigParser(object): + def getboolean(self, section, option): + v = self.get(section, option) + if v.lower() not in self._boolean_states: +- raise ValueError, 'Not a boolean: %s' % v ++ raise ValueError('Not a boolean: %s' % v) + return self._boolean_states[v.lower()] + + def has_option(self, section, option): +@@ -234,7 +236,7 @@ class ConfigParser(RawConfigParser): + if "%(" in value: + try: + value = value % vars +- except KeyError, e: ++ except KeyError as e: + raise InterpolationMissingOptionError( + option, section, rawval, e.args[0]) + else: +@@ -283,7 +285,7 @@ class SafeConfigParser(ConfigParser): + _badpercent_re = re.compile(r"%[^%]|%$") + + def set(self, section, option, value): +- if not isinstance(value, basestring): ++ if not isinstance(value, six.string_types): + raise TypeError("option values must be strings") + # check for bad percent signs: + # first, replace all "good" interpolations +diff --git a/iniparse/config.py b/iniparse/config.py +index 5cfa2ea..3b28549 100644 +--- a/iniparse/config.py ++++ b/iniparse/config.py +@@ -143,7 +143,7 @@ class BasicConfig(ConfigNamespace): + + >>> n.aaa = 42 + >>> del n.x +- >>> print n ++ >>> print(n) + aaa = 42 + name.first = paramjit + name.last = oberoi +@@ -152,7 +152,7 @@ class BasicConfig(ConfigNamespace): + + >>> isinstance(n.name, ConfigNamespace) + True +- >>> print n.name ++ >>> print(n.name) + first = paramjit + last = oberoi + >>> sorted(list(n.name)) +@@ -160,7 +160,7 @@ class BasicConfig(ConfigNamespace): + + Finally, values can be read from a file as follows: + +- >>> from StringIO import StringIO ++ >>> from six import StringIO + >>> sio = StringIO(''' + ... # comment + ... ui.height = 100 +@@ -171,7 +171,7 @@ class BasicConfig(ConfigNamespace): + ... ''') + >>> n = BasicConfig() + >>> n._readfp(sio) +- >>> print n ++ >>> print(n) + complexity = medium + data.secret.password = goodness=gracious me + have_python +@@ -199,7 +199,7 @@ class BasicConfig(ConfigNamespace): + + def __str__(self, prefix=''): + lines = [] +- keys = self._data.keys() ++ keys = list(self._data.keys()) + keys.sort() + for name in keys: + value = self._data[name] +@@ -258,7 +258,7 @@ def update_config(target, source): + >>> n.ui.display_clock = True + >>> n.ui.display_qlength = True + >>> n.ui.width = 150 +- >>> print n ++ >>> print(n) + playlist.expand_playlist = True + ui.display_clock = True + ui.display_qlength = True +@@ -267,7 +267,7 @@ def update_config(target, source): + >>> from iniparse import ini + >>> i = ini.INIConfig() + >>> update_config(i, n) +- >>> print i ++ >>> print(i) + [playlist] + expand_playlist = True + +@@ -277,7 +277,7 @@ def update_config(target, source): + width = 150 + + """ +- for name in source: ++ for name in sorted(source): + value = source[name] + if isinstance(value, ConfigNamespace): + if name in target: +diff --git a/iniparse/configparser.py b/iniparse/configparser.py +new file mode 100644 +index 0000000..c543d50 +--- /dev/null ++++ b/iniparse/configparser.py +@@ -0,0 +1,7 @@ ++try: ++ from ConfigParser import * ++ # not all objects get imported with __all__ ++ from ConfigParser import Error, InterpolationMissingOptionError ++except ImportError: ++ from configparser import * ++ from configparser import Error, InterpolationMissingOptionError +diff --git a/iniparse/ini.py b/iniparse/ini.py +index 408354d..052d9e9 100644 +--- a/iniparse/ini.py ++++ b/iniparse/ini.py +@@ -7,7 +7,7 @@ + + Example: + +- >>> from StringIO import StringIO ++ >>> from six import StringIO + >>> sio = StringIO('''# configure foo-application + ... [foo] + ... bar1 = qualia +@@ -16,14 +16,14 @@ Example: + ... special = 1''') + + >>> cfg = INIConfig(sio) +- >>> print cfg.foo.bar1 ++ >>> print(cfg.foo.bar1) + qualia +- >>> print cfg['foo-ext'].special ++ >>> print(cfg['foo-ext'].special) + 1 + >>> cfg.foo.newopt = 'hi!' + >>> cfg.baz.enabled = 0 + +- >>> print cfg ++ >>> print(cfg) + # configure foo-application + [foo] + bar1 = qualia +@@ -42,9 +42,11 @@ Example: + # Backward-compatiable with ConfigParser + + import re +-from ConfigParser import DEFAULTSECT, ParsingError, MissingSectionHeaderError ++from .configparser import DEFAULTSECT, ParsingError, MissingSectionHeaderError + +-import config ++import six ++ ++from . import config + + class LineType(object): + line = None +@@ -278,6 +280,8 @@ class LineContainer(object): + value = property(get_value, set_value) + + def __str__(self): ++ for c in self.contents: ++ pass#print(c.__str__()) + s = [x.__str__() for x in self.contents] + return '\n'.join(s) + +@@ -465,7 +469,7 @@ class INIConfig(config.ConfigNamespace): + self._sections = {} + if defaults is None: defaults = {} + self._defaults = INISection(LineContainer(), optionxformsource=self) +- for name, value in defaults.iteritems(): ++ for name, value in defaults.items(): + self._defaults[name] = value + if fp is not None: + self._readfp(fp) +@@ -551,7 +555,7 @@ class INIConfig(config.ConfigNamespace): + + for line in readline_iterator(fp): + # Check for BOM on first line +- if linecount == 0 and isinstance(line, unicode): ++ if linecount == 0 and isinstance(line, six.text_type): + if line[0] == u'\ufeff': + line = line[1:] + self._bom = True +diff --git a/iniparse/utils.py b/iniparse/utils.py +index 829fc28..f8b773a 100644 +--- a/iniparse/utils.py ++++ b/iniparse/utils.py +@@ -1,5 +1,5 @@ +-import compat +-from ini import LineContainer, EmptyLine ++from . import compat ++from .ini import LineContainer, EmptyLine + + def tidy(cfg): + """Clean up blank lines. +diff --git a/tests/__init__.py b/tests/__init__.py +index f1fa321..88689fb 100644 +--- a/tests/__init__.py ++++ b/tests/__init__.py +@@ -1,12 +1,12 @@ + import unittest, doctest + +-import test_ini +-import test_misc +-import test_fuzz +-import test_compat +-import test_unicode +-import test_tidy +-import test_multiprocessing ++from . import test_ini ++from . import test_misc ++from . import test_fuzz ++from . import test_compat ++from . import test_unicode ++from . import test_tidy ++from . import test_multiprocessing + from iniparse import config + from iniparse import ini + +diff --git a/tests/test_compat.py b/tests/test_compat.py +index b8da3d5..b6dfb5c 100644 +--- a/tests/test_compat.py ++++ b/tests/test_compat.py +@@ -1,9 +1,16 @@ + from iniparse import compat as ConfigParser +-import StringIO ++from six import StringIO ++try: ++ import UserDict ++except ImportError: ++ import collections as UserDict + import unittest +-import UserDict + +-from test import test_support ++import sys ++if sys.version_info[0] < 3: ++ from test import test_support ++else: ++ from test import support as test_support + + class SortedDict(UserDict.UserDict): + def items(self): +@@ -35,7 +42,7 @@ class TestCaseBase(unittest.TestCase): + + def fromstring(self, string, defaults=None): + cf = self.newconfig(defaults) +- sio = StringIO.StringIO(string) ++ sio = StringIO(string) + cf.readfp(sio) + return cf + +@@ -161,7 +168,7 @@ class TestCaseBase(unittest.TestCase): + "No Section!\n") + + def parse_error(self, exc, src): +- sio = StringIO.StringIO(src) ++ sio = StringIO(src) + self.assertRaises(exc, self.cf.readfp, sio) + + def test_query_errors(self): +@@ -181,7 +188,7 @@ class TestCaseBase(unittest.TestCase): + def get_error(self, exc, section, option): + try: + self.cf.get(section, option) +- except exc, e: ++ except exc as e: + return e + else: + self.fail("expected exception type %s.%s" +@@ -227,7 +234,7 @@ class TestCaseBase(unittest.TestCase): + "foo: another very\n" + " long line" + ) +- output = StringIO.StringIO() ++ output = StringIO() + cf.write(output) + self.assertEqual( + output.getvalue(), +@@ -465,7 +472,7 @@ class SortedTestCase(RawConfigParserTestCase): + "o1=4\n" + "[a]\n" + "k=v\n") +- output = StringIO.StringIO() ++ output = StringIO() + self.cf.write(output) + self.assertEquals(output.getvalue(), + "[a]\n" +diff --git a/tests/test_fuzz.py b/tests/test_fuzz.py +index 5420dcc..b219500 100644 +--- a/tests/test_fuzz.py ++++ b/tests/test_fuzz.py +@@ -1,9 +1,10 @@ + import re + import os + import random ++import sys + import unittest +-import ConfigParser +-from StringIO import StringIO ++from six import StringIO ++from six.moves import configparser + from iniparse import compat, ini, tidy + + # TODO: +@@ -96,24 +97,25 @@ class test_fuzz(unittest.TestCase): + s = '\n'.join(good_lines) + cc = compat.RawConfigParser() + cc.readfp(StringIO(s)) +- cc_py = ConfigParser.RawConfigParser() ++ cc_py = configparser.RawConfigParser() + cc_py.readfp(StringIO(s)) + # compare the two configparsers + self.assertEqualConfig(cc_py, cc) + # check that tidy does not change semantics + tidy(cc) +- cc_tidy = ConfigParser.RawConfigParser() ++ cc_tidy = configparser.RawConfigParser() + cc_tidy.readfp(StringIO(str(cc.data))) + self.assertEqualConfig(cc_py, cc_tidy) + except AssertionError: + fname = 'fuzz-test-iter-%d.ini' % fuzz_iter +- print 'Fuzz test failed at iteration', fuzz_iter +- print 'Writing out failing INI file as', fname ++ print('Fuzz test failed at iteration', fuzz_iter) ++ print('Writing out failing INI file as', fname) + f = open(fname, 'w') + f.write(s) + f.close() + raise + ++ @unittest.skipIf(sys.version_info[0] > 2, 'http://code.google.com/p/iniparse/issues/detail?id=22#c9') + def assertEqualConfig(self, c1, c2): + self.assertEqualSorted(c1.sections(), c2.sections()) + self.assertEqualSorted(c1.defaults().items(), c2.defaults().items()) +@@ -123,9 +125,7 @@ class test_fuzz(unittest.TestCase): + self.assertEqual(c1.get(sec, opt), c2.get(sec, opt)) + + def assertEqualSorted(self, l1, l2): +- l1.sort() +- l2.sort() +- self.assertEqual(l1, l2) ++ self.assertEqual(sorted(l1), sorted(l2)) + + class suite(unittest.TestSuite): + def __init__(self): +diff --git a/tests/test_ini.py b/tests/test_ini.py +index 78b2b3c..6d974f0 100644 +--- a/tests/test_ini.py ++++ b/tests/test_ini.py +@@ -1,5 +1,5 @@ + import unittest +-from StringIO import StringIO ++from six import StringIO + + from iniparse import ini + from iniparse import compat +@@ -195,13 +195,13 @@ but = also me + self.assertEqual(p._data.find('section2').find('just').value, 'kidding') + + itr = p._data.finditer('section1') +- v = itr.next() ++ v = next(itr) + self.assertEqual(v.find('help').value, 'yourself') + self.assertEqual(v.find('but').value, 'also me') +- v = itr.next() ++ v = next(itr) + self.assertEqual(v.find('help').value, 'me') + self.assertEqual(v.find('I\'m').value, 'desperate') +- self.assertRaises(StopIteration, itr.next) ++ self.assertRaises(StopIteration, next, itr) + + self.assertRaises(KeyError, p._data.find, 'section') + self.assertRaises(KeyError, p._data.find('section2').find, 'ahem') +diff --git a/tests/test_misc.py b/tests/test_misc.py +index 31cf4da..96ef035 100644 +--- a/tests/test_misc.py ++++ b/tests/test_misc.py +@@ -1,9 +1,9 @@ + import re + import unittest + import pickle +-import ConfigParser ++from six.moves import configparser ++from six import StringIO + from textwrap import dedent +-from StringIO import StringIO + from iniparse import compat, ini + + class CaseSensitiveConfigParser(compat.ConfigParser): +diff --git a/tests/test_tidy.py b/tests/test_tidy.py +index 7304747..26b6cde 100644 +--- a/tests/test_tidy.py ++++ b/tests/test_tidy.py +@@ -1,6 +1,6 @@ + import unittest + from textwrap import dedent +-from StringIO import StringIO ++from six import StringIO + + from iniparse import tidy,INIConfig + from iniparse.ini import EmptyLine +diff --git a/tests/test_unicode.py b/tests/test_unicode.py +index a56fcab..14d4fbd 100644 +--- a/tests/test_unicode.py ++++ b/tests/test_unicode.py +@@ -1,5 +1,5 @@ + import unittest +-from StringIO import StringIO ++import six + from iniparse import compat, ini + + class test_unicode(unittest.TestCase): +@@ -17,14 +17,14 @@ baz = Marc-Andr\202 + """ + + def basic_tests(self, s, strable): +- f = StringIO(s) ++ f = six.StringIO(s) + i = ini.INIConfig(f) +- self.assertEqual(unicode(i), s) +- self.assertEqual(type(i.foo.bar), unicode) ++ self.assertEqual(six.text_type(i), s) ++ self.assertEqual(type(i.foo.bar), six.text_type) + if strable: + self.assertEqual(str(i), str(s)) + else: +- self.assertRaises(UnicodeEncodeError, lambda: str(i)) ++ self.assertRaises(UnicodeEncodeError, lambda: six.text_type(i).encode('ascii')) + return i + + def test_ascii(self): +-- +2.19.1 + diff --git a/setup-fixes.patch b/setup-fixes.patch new file mode 100644 index 0000000..9619c8f --- /dev/null +++ b/setup-fixes.patch @@ -0,0 +1,61 @@ +From 07763b43ff35573564a4a2509c006b1e30fe59ee Mon Sep 17 00:00:00 2001 +From: Jiri Hnidek +Date: Fri, 18 May 2018 13:39:53 +0200 +Subject: [PATCH] Second patch from Fedora Project. + +--- + PKG-INFO | 7 +++++-- + setup.py | 10 +++++++--- + 2 files changed, 12 insertions(+), 5 deletions(-) + +diff --git a/PKG-INFO b/PKG-INFO +index 31c4ad2..bebcb80 100644 +--- a/PKG-INFO ++++ b/PKG-INFO +@@ -18,7 +18,10 @@ Classifier: License :: OSI Approved :: MIT License + Classifier: License :: OSI Approved :: Python Software Foundation License + Classifier: Operating System :: OS Independent + Classifier: Programming Language :: Python +-Classifier: Programming Language :: Python :: 2.4 +-Classifier: Programming Language :: Python :: 2.5 ++Classifier: Programming Language :: Python :: 2 + Classifier: Programming Language :: Python :: 2.6 ++Classifier: Programming Language :: Python :: 2.7 ++Classifier: Programming Language :: Python :: 3 ++Classifier: Programming Language :: Python :: 3.3 ++Classifier: Programming Language :: Python :: 3.4 + Classifier: Topic :: Software Development :: Libraries :: Python Modules +diff --git a/setup.py b/setup.py +index 736cfa1..e2f8de0 100644 +--- a/setup.py ++++ b/setup.py +@@ -1,6 +1,6 @@ + #!/usr/bin/env python + +-from distutils.core import setup ++from setuptools import setup + + VERSION = '0.4' + +@@ -24,12 +24,16 @@ use.''', + 'License :: OSI Approved :: Python Software Foundation License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', +- 'Programming Language :: Python :: 2.4', +- 'Programming Language :: Python :: 2.5', ++ 'Programming Language :: Python :: 2' + 'Programming Language :: Python :: 2.6', ++ 'Programming Language :: Python :: 2.7', ++ 'Programming Language :: Python :: 3', ++ 'Programming Language :: Python :: 3.3', ++ 'Programming Language :: Python :: 3.4' + 'Topic :: Software Development :: Libraries :: Python Modules', + ], + packages = ['iniparse'], ++ install_requires=['six'], + data_files = [ + ('share/doc/iniparse-%s' % VERSION, ['README', 'LICENSE-PSF', + 'LICENSE', 'Changelog', +-- +2.19.1 +