From 31e8f48db8f936f2b0af8c229235012b3da59c5c Mon Sep 17 00:00:00 2001
From: Ed Morley <501702+edmorley@users.noreply.github.com>
Date: Tue, 28 Jul 2020 21:26:51 +0100
Subject: [PATCH] Install setuptools from PyPI rather than a vendored copy
(#1007)
Since:
* we'll be updating setuptools soon, and newer setuptools has dropped
support for Python versions this buildpack needs to support. As such
if we continued to vendor setuptools, we would need to vendor at
least three different versions.
* we want to try and update setuptools more frequently than we have
in the past, which will mean more repo bloat from binary churn.
* we're still pinning to a specific version, meaning vendoring doesn't
have determinism benefits.
* setuptools is only fetched from PyPI for new installs (or where
versions have changed), so this doesn't increase build time, load on
PyPI, or reliance on PyPI in the common case.
* setuptools is already being inadvertently installed from PyPI prior to
being installed from the vendored copy (see #1001), so we're in effect
already using/depending on PyPI here.
* switching to storing setuptools on S3 wouldn't help reliability as
much as it would appear at first glance, since the later `pip install`
of customer dependencies will fail if PyPI is down anyway.
---
CHANGELOG.md | 1 +
bin/steps/python | 2 +-
vendor/setuptools-39.0.1-py2.py3-none-any.whl | Bin 569436 -> 0 bytes
3 files changed, 2 insertions(+), 1 deletion(-)
delete mode 100644 vendor/setuptools-39.0.1-py2.py3-none-any.whl
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef490fa94..a359d8f32 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
# Master
- Output the installed version of pip and setuptools in the build log (#1007).
+- Install setuptools from PyPI rather than a vendored copy (#1007).
- Reduce the number of environment variables exposed to `bin/{pre,post}_compile` and other subprocesses (#1011)
# 173 (2020-07-21)
diff --git a/bin/steps/python b/bin/steps/python
index cab5f7907..381cc2188 100755
--- a/bin/steps/python
+++ b/bin/steps/python
@@ -170,7 +170,7 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *${PIP_VERSION}* ]]; then
rm -fr /app/.heroku/python/lib/python*/site-packages/setuptools-*
/app/.heroku/python/bin/python "$GETPIP_PY" pip=="${PIP_VERSION}" &> /dev/null
- /app/.heroku/python/bin/pip install "$ROOT_DIR/vendor/setuptools-${SETUPTOOLS_VERSION}-py2.py3-none-any.whl" &> /dev/null
+ /app/.heroku/python/bin/pip install "setuptools==${SETUPTOOLS_VERSION}" &> /dev/null
fi
set -e
diff --git a/vendor/setuptools-39.0.1-py2.py3-none-any.whl b/vendor/setuptools-39.0.1-py2.py3-none-any.whl
deleted file mode 100644
index edc3ca2d8ec3e0af7a305c5b9cf0fe574069ae90..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 569436
zcmV)0K+eBVO9KQH0000806BGXOk7X8MQH#40Db@f01p5F0A*owd0%O6b97;BY%Xwl
zEzB_vgFp;K(SA>1xq&nsAQEMYv|M0hkwsZ)Z6nqcxjhgu)im!j^RyeqH`7bn?`
a!fb%07SpnE1dw`{J|a_nok*EZaA$Y&1a?iF2q3%cMRU8jGf
z15ir?1QY-O00;m%b#hEYPEfvlZU6v(lmP%40001RYiD0_Wpi(Ja${w4FJE72ZfSI1
zUoLQY&Asb-8%L5L`kzlxO^z3U1eR{y+cWaeJ!(natsPt9O0qpYG#4lWMY5V;6^sH%
zp}l^z^PNXJuW;g;8JU#@Qg-itgRk2nP+5_;$jG?IK{jjVRekY1+pNzI|9NkJe}C_|
zm|YbYWwt8YX0w`=*^A>hdxwe7-rft}sA{t!TQnEdtXO2{)uIH*^}49)a-Q8*>&vQ!
z=Sv1X&YG2Pz1MEe=GCg4t((<0TVIx|vN_MQ?BivrF9c)B%1=vZ-1;Bu;<{}2)=hR<
z+>{8RTEUy^OZd+U+O;M8TdZXu*>w77Ivr;Z>Sp~QyS;=5H{}Z7f&t-h=uLSC##yy6
zmRC&%&9hBgW=)$@i)L9ugQ}_940^sU>T0=J05CVKJsMVaR>JziNZJ+#P}R^DyMlS-
zdwac8gw>pvZFPaG2XEXqt1BLS-K?%YqFhhr#kv@drqjLaa(&s%b3(4Y^A$jtOwKp!&8nPCvg(>%E6&vuVTWA%c3rq<
z=bIX^vRSx?%d3mcx>~p)5e_sf_ZSf19Ck>*&zi*oP!*BHH>uk7qB_&><#kal0HaoI
z>A;k$Rqdx(UI!Ccm!H|>oh%b&u;uHg_=XVs!wZ!HM;Co5Wpz$ZMwV>m{Os=lIz-@kwJ@%7}xx5vlt-ha%FvX84x
zxnsdIe;Gg=K$&s#q
zOJi>V&DPxw=6_%f^Xp;;B)J5FTeSY?iThb*P|RRIfC8-7tLhAnC$26aIMRDrNt(yJ
zTohX*Z?b^p>=Ni3IL)
zjhV^V=KCY+0Z;PrU!Ur^_;}d>ptB8}V7Po30q7zv;1oAC9FKW0`}@-w=a`+y()`q{e8A5
zi+Z#4`xd`20mSY67Q%p0OklTH1>HFlA`I~xL?KdekWG=F@lKflUahv1Wdk$sjs<6x
zf`c~|9_-G8@)Nw_;J{p3CMh^hSb1V3^dT`$fUe~P$jE$=ex!Vl+htfmr24>}{Pwqx
zzvo+hDA+1r1(A^v!GFI+mhAQts48)t#KQssXxmN63{R2CaX{pD=ag7MBshyLt{JgQ
zgq*+^LD#wKV{Z?zDx135~fz?@ukmTRFx2Ubq%5J+i^-Zy;=FY)lLc?(;5Jw~JZ~|Nkzc?965A>BsMIFMQu2a6kVS}y!7E%n`D`4_<
zt56)IldDsNa59**$Po>)huO{P@B)5jXtHe7){Uz5qoRLx@;k>uExV(ju3PEaj2A|5
zI)ry|C;*{G-o*ypOp+BzRF&4
zqoB*?>~CdXr{Ts0oy%)|-6s~85E6T=;c&weGaUJ{D6Y@uMfRXrU9`{j_+xMQf-qa<
ze4_05(4YJFJY0}RTgR;rTHq)@Ro9zq$Jc`RswZWSUPXF^j5Ode{5QvbJam!D;NDu5
z*mX-+#&uN_Oaa7mJ?nPi5=bITk
zJljU2$+ACg)+EJdw?MRtdd&oFc3IBwVhTBRq;LTLs%~y^hy=?~xX#c@x{n{MHZ{`D
z2Pl#^AU7`HQh>HfxZqyKRn1I-JgG-4Z0%gs(x6p9wID
zf7rCW)NP_onZr&1XWXn%b+Xucg0HZUBmjmWhhwpjp5tW=9BtDI@%=zu0#CM{T@JA=
zHv_Ke8n+AY8bolC!jVC9V?8>`_UFawwyO6%VF|7kGn@f+`RVYB7XCNLzQ~4ye31VQ
zF8AStAJGjp9GyIWdO89TE5BGZo8|D?Xym}j?ekr+*p!A**UtfsRW~*q1YFFPTHv7Y
zfKLFMCKDLmiExI0EZS=3RUs;Vz|<|n@Q7HGj93$VFase`M3#Zz++YlUZt6)pTUE<7
zexoD1YHliEHT1g$Iv6tm)M{AXN89pGAbN&BAfK$ScGxC;5V2V_xR8Sjeo`i?^SW?d
zL1SjDf}e=RgO_DdU)ML)s;N;>C>EraTQv)YtarO(s}PRiY4K|hKdXa7<}FxA8cTu`
z#h*J&u0o;RD9?+{Vm+CGyjS|+AFnD9ShgsbElAp-ab(2pm5f#cGezv?d!E4up1^zQ
z?3-o_7~<75)DF=gF%#A3h?mKfZbU;{9LU*AMT$egE>c`}*=PuV4QAyKg_bA6~uw
z?)BI2j^(@dynif|YCj{v^Bj&Q+)CjQ5H;_ryufkNPmdN&bG2Eb4q1lw=9_X|pepv*
z(7rc%B(dAnIGY%73bzrNygZ-4sF
zYIz(1;b{VaWoeNKp8V7i7=x#*r=FmY;fdBKph8_?Qfa&DNDVHOxc_KHcytDhZ;RDD
z;;m3|Awz|W=enrq{Jgj+szm{(;Z;Z?_fDO}8c~s5Z_Ce@sx@zF=8%|0kL}UTr@kC+52V;2A#zxIYK_E(Y^&Z~~U)
zN>t;x3kYS`4&V}>JU;Dv9pK;j_LI{+(;o46=a%bCbEMG4didZ0nZJMq9CR4cH`&GxoyNuY<)`|ujDz!%``r|a2<7r*x4MKqFdoHg*E^=+gYcB}H;lf==OsR0yfDZKFV|>e1<3?R
z4_YU$OQ29=!f#YRvUntHw!hW+eJ@`29+n+PAzpv~>|r(lq12xSUAdnJJ5X60-HFmq
zJ&{Z?QT?Rng`p#sHw6iqMXGarKRMUoK3Zi5{(KL1K*;t36l0u3qGM=6XMI+r`u%x-
z^lMK0PFlge+?!(TfPo{8;mAP?r<6Qv1H`ssi3$N?PX_T=@P=e5G=w(#$CI)NPG$Es
zC|&tOY`OD(WD9Pbc~iFaV9l-w1+b08&1UCifi}v0RbpIJH)TzZ3#=%1JktbNJ>W~L
zQkAgBf1P~u;(xq*k7UZ*XHK3!JKa;Z6COR=Gkhm}f4XNFPx$_1FW@}km&bdS^@JY|
zpNJAI#W)Sk-(<$LgWX#F8o!%O<2F-vlej9~+pMUW8pu=LuHYxqS;30o7gWRZ&cHGj
z&Jkfcy>8~4MG4%Cyg8XpnbX6wm>3Fqt2p%zQpmBoXcXB4hV~$1t>xHgF33PIop$)=
z>6GR|q*lffQ1!(2o|s9ZHaZ@p(P-+UA%lLm0tTj|(u9F^h9!ey51F})3>VQ{5IRIS
z)m2M314uZwr?KUix+lkI3vy)5gF%|UhDb^5vk}rT1Qh73WQ>gL{G~lHubqmLkyKIt
zUTz~rl(B-^zCIH?Zw+hl(Dp5`fLM791JZ?hxj;ovvdIL*qa_@HVPezA0(vA6otE6{
z;8+22baE<-E%cUu_ES{`>d2`t(W;LihHh!`1JW>D_9(OvI($>ij!{Q#$+-h{lnn;4
z{t(VHDi9xiAbI-H*VWmoSZyD@Y*yuma&=RIWGc^uO~~n;K>!9i5l@Aj6;?xPGzvSD
zmX}3KtFFE>B+M1_V*;Ca#f_6$)p|{9!tdtpP3bZDHgq~TCMEk?CNV($Z~!#jZ@d%c
zg_9VhT(^X$w3#{FjUdGhRn#G+2x?|WAzD#my7B{TDOR(~p?F7x=9r%b$IWfII(|8L
zo(-1E8Q!z>%LKL`ozU7#eeyFJGZYH?)-X6jequHDUB(pAHzBg=uZLnhodvv9%j@wU
z|M4H$OV;%-whT>Zev6i5;J2pJo%R=W=R=vSVhcoFmh+ZP{g;6Ce9e4a)tgUr9jJyn
zq|gBoa=uPa^WP&0`|9Xf{?t7s-w~i6D7{t}*0sv{e_^ve#})@7oKq6c9;3FiC`7gd
zbgk$y3D8uLY~aHjs5%^Zl;(zN39tvLV>R#?9a;y1MuIBP2#)p!uNWXazdc1ZYEi%)
zvY+jbv;E0__?BSkz8WOv`4{uUFWP;yNpy)pz1G74=sy|4L
zfJbP5L5`j+VQ9|+ffn(I7dvBBqgai|qXbEA1Z#b{YBm>_nRtMTwmZ`4g|s(qHtAZA
zU<+1dj_RmtQ4UwSw!TALioLt4)cUTUMco
zutHjc*E*6E>CBCh%%K3eSmd5?y(MB3Y68jl8j~G1MsDir(-z22*@ol?#-ek=L6F7I
z^G?BUuHDg*du~ZrS+p>OqAg=ijl2~_o#{-yM3~VmRH!ipVB*sqR!X-+I&^-;4+4jH
z2MnFXXwM9t$UgDr__ioz{}2nF0zE#fdT}UP#=AoIk(#T?`7Apt;m0z91B~ouNglP?
zD|M@C3I^AQ;I6(`oayyaE+Bre^BSGL&odc~yVC`+8s&YIbm
z1$FrSE|W6%v>b`2Zz>kvC!;P)MC0}E?SIkcLZNx5-K*m)_~B^+77TB0_{-nZVF)_-
z3VL|*IDfW}*!@E+b1#(N?x*=Qdj`UdLg)C3WOmsmbYvv=DA|hC^(7v<9!kLu
z$Xn01To-?9yw8J-mo7{c`2wsKjCRYK{pKi(Ryw^l;fv3@FFqS36*HaT3&Z8;4bTQ2
zKf40q>Jlwf+5@yGn1P~JfD74I^m~jV_Zd-wWFfVU$*H$6hJ;K#HZGbBJ^S{$9kHgv
zc?b-V8Ji%CamK%pA;jN7UpHv{2~~kp_tKOtaT{_e$)*OvRKO{ruUip5(OK#omAJ6E
z`T0a#$hZwVP}c3qK4)Xg4@r|zj{c6ub
zM!`Wa0)kx>>anYwaLzoz0beg?v9KkjSG2aRCYWDjhu
z9rh6^S-K);84MX-;<56$9q)F&fy=T04dS+tXDc{(&>m+`-9O1=?<^8v9wIJpwsXO)Wr><@wU
z8ArLJn~$B>jq?}sfu0H^L9#zd0`Ona+hiALQfoEmB*~pEiu#KF0=h@^hrqhq=y6?euB$bWhdfvVH-B>VO3eRFo7fsyPv`gYhb$W|sw)iEQ^g#^8cnC8bYJ3q
zmgwzkSxnavhdv5^_~1^{qXO%6*Lz2)vqsqU>rds30+ZZq`7P}ny@3~1Irr~p=m`xt
zT&%Widy%seE6<0W(_`$5?(QO$zg!EgIxK>SABT0e9UShs`wg$zL2c|_nsk@iU8p3&
z263Q(S43HYx2K+`nhN|WJKUa?kugL3Qz|z70v!lfr
zkk1;eC@+P+;h%^_qR}P0(?58`NQf2UaK{K^iku+9`gTZyL$}afT?9nK6U$#hG-8+4
zUEM162;;dwk9x=<_Ku%J#xd&>;G=QLe26ZsAw%Dy0*Mr=c$S95mA2J&wJ26}UxZVf
zOwbcaEXrfzGODt*{EGDa5>5b6C^3|guLj)`dIeE$@_IHDz2K3KV`P0?$V{zGkFt}~
z?vw2VBWrxDjC*)SPZAGiVjdERR;<&mMEw*>Zhjm(R{t&@ZRWc$!jBt@)Pc60Ok%BaQt^+U14?Z`0u@{w7a#+Y*8qtTgcBIMU|o1p^73tK#dr2_1Ye~1qcLIY)qTmHj5j)Sbl`HGH&uiqpBl+QbfFprOCE~
zBXCYdLYaNC?iB1!}~KJV`qIpc2GGHi&|tn&p;s
z8px1!2BbfnJU`{NlD_(I6H(E3>4|>i2KfS4g=sp5{bASBslrCH0{RHBG_md8J{YyH
zz^2n~Yz0qsOo}nM{E#qjT8Q1wuAS{z{baX9Fkq4(Z$SU_
z5c_a|ip6aKmkXP%x!Z7ZCAu}CYK46{ETQi15k&4IEA9nej(
z=hxocYW5ejwI@W6;T=1lzDh+QAq`2<892bnnzoK-F}gaL-A6HuiPA^Z!UX_>w9|L?nhc6@4;Ir0B$3~7r&c8Su(w`8oi?DODhafIn8jfZ^!;VvU
zpbzWrn?vYyF0)}%ZZx45u^Lqe4W3^5c3qYd?WubH_)@`$aTm8qry57eahqdY>HCgR
zMn;%k`5T=$2hL@LgK_rHsU67}@Hx7{nRbvyZ=NUDtZqJc%~XNqImlL)&h}w3MO3RX
zrT}b06w8Y8$%q0X=|{OO;H8+)LX!dBQbaXSO%}2(q|S`pv-u3ItkYPaXjPQ$1p5j8
z8bw?}7GS+pplu~NMQ%;iyE^=yMlvRBkZ5d$B_C%LScSB9Vd0Ye
zL8K(9sI~1;HIG+EQhL$u%B2xea=K-LP<{K^^6o9eQ7v3QJ)(|zl^>sA^V77>%LZAr
zDPxqZS;`CrM;6_*`+!k~RPN3x}Ik2Z%@Xna)gPI5Yx?y#MH9BIt35-y=
zS|1_Dg9na$){dBI>M-=e4oNCLMYY&~d0j(Nze`)xt~5E1)6
z%8hK|_(QrL`cRv(aUdxf91r7?MbJJ;#Dw<7krN?dQ$YY1eN!(`$3E39!wsAUEDZHX
zLmHEmo!6ehTz}xTlT%rYm}krlsp(QcnxKedPCmH{#M3T}r~N=UMv2gIQkS<@
zkD{7#)X)SMKWTOlM{Yc^qL956fA0`OS@wxW)WZ2=S~kuo04b%HCcQhdjp0R!?$dmj
z;ZnwYDj)(ZKxiZJVrmCyZ6Cq!-T(r#2QdLebRuU{Km@#%Y|90vA<>M(5FusJ4Uq5@#%{=E7~KQ|m{9i@!38CYIX_
zeg8HjvH@NZ!5y>sgf{v(VAUn`GyCa>9_hA8R^V7l@!ll{ik3jr`Lg~BAQJ-$Gw}Ls
z+=CU$;~GK%m!wKAv?uNL9TW&iU7m3;v;Y0jMfNxP2{5!o$6awkbr479bq
zG5H)y?3vnr=!&KXl(@8HZJypuZK%%omyfE?*bISLpHz{?;fBEqUl-d9^Fm~7KfB(d
z{`gCe;Pl2(whs^J?|s-@W@|Y+l@|pGbK&{~h5&gU^3YgrR^`GUmxgw}SlA)p;e;&!
zlpVV)RXkfdba*CPyd-(oY2H@v9pcJ*wehK?qWjn=fRXvwESYOq!`+_-ctjg9w7-o`
zo9$@NPOQN$+9Wts70UQ$}Vu)b9(59Ay)r
zpcIaZwkp%fH*ozRA!^P;O48`)Ly8y1gjee?4Jg2(^UZ=dHV%kIxRegGI74HHOWKgf
zYf9n%M>gwmE`*no&%sE{m;u8UA$rGrfvl)cb%7Gq8B)IWDP&}kT
zislRvDXlV-epPLjR)8F2q+P{RLMR#BaYWPRL??x_zb=*?5cgH#^^6JEb{MJgB&|*7
z=IPPO+$yV^d`fKeP5%H)%*@{c;TLJR^%?7$hTsa_YOc7H$HQ5telYg&<+~kjlT8<=}!c~knM*KbNp?>
zVG_Mv(K)+q4L99oqHQGQWkK-d3@NJ~D;sy5e4W(V$$S~~wn?%O
zziKWaE6=2fN}t*tKL^>nX4!IXl6~Bo{j6=W^P+=-g-K-8B`xv@UAle@7X!EdwDZDU
z8vQ)TXA^)Qh2#}(pG|w|0(b(Zq0u4^A!C6bXgi4*3=#-cyGdkGD1F3dn4Ra#i&ISw
zW00MJx|9pa!HP6@Ml4fDZx;c_{fztTZm!*isP!qCA#swT>S4uo3WVH*9SFS7vPj`v
z-HlDVule^4>mt&QGS{L?AW9kY=F-$)d}xiFEEkpc5fAVIiF#O@Qo-$-{ioE2q2A
z`=iKg>+G5!f5-rc7w#BlroJ;HZomFiVAv?fgd#3*x|s7<8a(DXm|+3cPq1r&;o-B1}{liAt$P)
zm=AQ~qfnP`*Ykd=1rf)^cJ2io%2VIvstYnTT9fUd&Gxxh@65PwwqhhEDOj5=p6wd+xAtX_TPI+rNu8M!k8>TcEzT)0@m2UbE<(x^`L
z7dfnAU`J=wDgj}&1u79m)I>>qy$2dyEa*|P+8QrV!+Zpe9jaPsQE`Hf_>sz{
zwX%4q5kRkBV6HIm$vtpNW0Z19C_me}{94?(YVN$!Sa(leoo45Y0%fN;8Jt>7%}jh4
z2*JFQUM;f5Bu2#43D~Sz%ze&e$#^4Z#BKwWRk>XU38rcPo#seD&2xJOV8XHwE~icQ
z^l-fadh$FQPJ=a@qG17#5e1n{N4Q(oq!qR9>Na8<9O`*us;0ms>-4Im1B{qD1{7|*
zvz%sh?m2aQ)ftJ}EhU$PvVt4w9R0+2;65+_3DnZEcbi(rl)0lE45A^PT{T~xc+5*O
zEr=tzSGrJv3K}{ktwvP_aQ+)YexF8wRH&iqPMNt_g_rQ}P~B)+MNAPlUns-2
z50A`E?uXV9(HO4l`=NcylgZ0s-rPzZkT9ucAkH9T$y)bjv-1AcwE^JT(thAo>7VgU
zNfvLjoadYtz%g8$yC&Fz=Ut<%I$HSYoLC^I(JT02KAdeX6u02`w&Ccs+q~m$?BUSC
zWan`|IpeKL#t*|!jk?gqH95-5hV=R--7A)K0cyZ!uj3Bnz&hNdc_N>AlWd3xDU`ln
zm}6gIrq-X%>#8i5*+sKU=to7{RbtV5
zyX?hQx7ms80Qd=S>13S{3!-mpHxzp{M!z+@2}oy!^{voD8FhK~Cbg@Pgcr>|rb{%}
z9)2~PPE7fXFImi^6V6$~pyW*>nd3nq1BM}R>il1kMp%r*Ic5g@bY^=p7>%36&>CZ8ZQ;V_+0TMmDr;
zI`dpGB2H{|jhtjGys3+VGMSrZbZ6G==P0eoEfL*tVC5H!Uf&GI%BvrOa|lVrvG^-J
zXsQY^{h{Oepo7{8bGL(|!j63ejQ2p&aT}rDcapt**y=s$B&l6ph%#3v&rio4zY#7%
zG!9Gy@>>^>8!doxPs8-B;qU+lCs&iRi4FX5&NbNoIO9IYnGJB0m-bS#AXT!?r`y6s
z)|uIbtz3v*Fxwu4LQ9#Qw8k(R6W_d>ANreOnQ$0r0z)!g1m$%>AsSVjSr=lN@
zMwm-nb_8u)qz^P4P{+MoEQB(KjB6MT&4_(o2P@;majqXqOnpa^YFih}_OeOXe;W#Q
zrk3Pykq&H4s6P1}s*@oaPEEmc)K_~eJnTzKtazkZjYBN^pabsn&xyzF5$Q!In#wtq
zOwFLDKEla+NV>)JNE5ze)NYYOlTkpC|1WFP()zQoHEWfuQc9O>D$yX$l|tCBh?^oo
zPq?5U@g#mYEy3>Wn~uRVRnJh<68ciz<+Q4aeOwY+oC$5R%)@I;qxrxD9A{XzRv-N8VFm$5_JB5%~FQvmrkiQ=JS&b+hI}pfZope_jSZ;@~#+
zj6%}1Z8i=Zkef@+XT8iG01GxT_v|Ax!Erdp@b3J0nn%_`}V5W*m2@@^jHjD)ud
z#faf3x?$ZW6=MfIxB+)^Bxf>whzg&fIRxe^h9{HIvAUB+An+p)Utum`z?mQ#$)0D<
z-XB6eeHiYAD@npkfbDcKEQ6&oMAaC?ZVwCz=$N6<#131>
zp}tlqcL(QDcxYVlW30fU)pfYanvVzW6Rylu(`s4Upf6Q~4{LF4qwEX2V`K6Cgm+L%
z+;y@JzT;$xz+9cq48zuz!*z3rO1yR*nwf(*qp1aF%(ma6!z?B!M9*C;?n&X5VQW64
ztExrY7%+Pq+Q@>n6`tfc(_)OU|Mh-lcb}nD4NGyopHRT
zE8EPXjvahXz=jmgUDu0=#{u-aMT?`}NE8vTA+jVx;61DgnKO*2
zB4qBzWfIUB81?Mq7%)$d7IBVH4WGMk3pdR;Y{Jdbz8X2x5Try7SNyr(BgZ!(Z6kDa
zg!NpCb+gJbkv=Rq=1dvD6fS4i%K@cr#kp|sj9K?SFDfG<8nb=Z-Jv%OA>sNE-0Kn%s)@nL^3Yp~qQeT^;}nfn8%s<}3`gt-5X)Hjx1bMCY2o
z069wXIr5Z0Wrrg#bl{^EdgMp0W;NeWsI_$d1fGovrjn27+9=Y)H*5?=SrJ4@RUX-a
zjZHZb>|nGko^#@gCoT#;j_^QJuf)64#pZ^Xq$s!obj@-;haSKEF(>z6O+kw()Eh6Y
zASS3#Va7>uZtT&|^0~Jwc{GWG0d_Ne9ov>TCwA(g1fk^jNv9J=QrWYV@Wl$S&kQ5r
zArs;A$qYV$k9w@CbRL(T(Q2!tD_{z=7{!`w-rSO5{gLcP^5RJEnh|*gw)8HKtN?1sOb_=C^RBCT~y&Q_C+GK&o~JAWbsmt
zuAx6}&eljkB{DQ{GCWr5wy1PY%i^)94m*ZH4GwzzpqVXT_&y*5Oj4X3czx)y0Nb@osdcxb@t11k%g*
z8Bymrq)lA`n;-d02(|BV!-}&Y*sw{*Qjjfl)H#22I=d$mKO7(p&w?3X8YAU=X(M6_
z&Y=Wx&b6@mdAu={%_%9`g^863d~Y^n{5U3^N8(B4A_>VHj8RucaCd3V6HDiOP=ZBG
z)afCydcp8QzN>2o?__pHR{N;e^YI(d>$%mo>Mc^Eqerx=~aer&b+1ct~FQ9hG-^OL@l=)kHM+c)EUW=;!10
z;$ijd;rmU!uCB|tIHc6cb)Hw5Rw^g@qiHC43s4tz-XKMzr)wTV$+2kuER()NQPsN`
zIEOItrI8Gwfu_r)y_AO%oJE;=A}9=mQZ!5gpIU@N7l-$gWV?)j_NCYvM6;?cs=8QA
zXdwbH2_H6zMYp|}~9k5`_?(lMWZ(;NvA
z;$V&Dlv>yNkp-zqr4X4Y0J!%_vzi1f#C9U!^bT?I>cnaHF$ur+
zfa{Py?}!^ZPq$Hmv;K3%#dP`F24)(=UX(EFJvpy4mB
znlL&s5m^3SbxBa7D+oHIY7DH_^FT)?{+U3R+yetlkIc-hb{EPj|V6yQ2s
z;t($`cod
zc+Y5*YgHE=|MlZv-o2e*QRSB}UjF5E0M2sPH^r*b#08wgkNImJSjD29bQ0G20z??)
z3#t`il;p6X$j?T+E8Mnbe1TArXD?}?V{}>Yiu|4R)5RSrI@Yc#`>!mLJ8s+G0(QrCsI3hz9dZ1IZc|STk@Q8;a4t(0hnvd%;>&$I?_6t_lsqfMb9OpqMKA%Ua8**I
zkgF}`A*lmE^7>d(v*MR4W^XUb8m%E(1cWb+Mvf}xEUY)n3=7Dwc6g1=*1zOxP!Q{4
zMRzGf(BcVH`QAbgPg3?U8yo^17>u(AH1Zwk=_hAfbmp6ICisav7emu?M-Bbji>DS=
zJVCye%{|A;0+810$);|L^Kud`M=+`QMJt<~nBj$K{xm?>KbI8o=mc8L;vDh221A2L
zyEDEKFLEiyYEV!O+RY72pHq_|E^6il5|1%GmOuI)Y1<7PdO*WRuzBP()htUi&Mw)l
z3ti+kwbrD>n`4cUF#o
zd&wScP}x=8-1>1F0^IRM`%sz;0%dma?DxN;u~Hz#yj-I*X0Jy8U^iz9J<104df+P&
zBg&gf#0{ogr)%|OaEn2btHEic(mTMEhu_1q2Gcey%N6CC7jJwy*9%Gqgkxo68PFct
z&IlAI2`{ggHsF>c2Vr!`T+pq4reTJ-fS7@`iQ({3boPZq)9-VJzx8|1f#;{kxBU$!N{Ppa1;+I9#Ob_M+o>MBDNO<%qHqqa?YH
zXnGQWv0306Y8ocO!)(6`iu|S$zx#AmNs%|tUczP}^+#`BL>|Gt1Sp4&m?(&0q76Mh
z&05+m0U_q#l3d#;N9AiLB0Xf3Wn0@E{}{pokI{Ey^*#S=gcrC*){>S$SRq6(W`lGQ
zLec|#uK2EP6AqdNo}_b{D!|z2U9}vHOSN(@fqf}a;im;G91AdS>hjCDTqgcH@aKb5
zZr0oNrSmf_7JSbNpm`HGZFjDAX*Od&70({Ld;9fYrChEAXki?s$*yNLuc-N5X^JiG
zg5!a<>;d@p-AC>LDQfN782gfj0xLf!hI6m%vHrGhVKu3*x{nU=NwX?e+fl%)As8`D
z>)r;r&K+;(Gt0psS=`2Gq^*b{WQZ~~gvFv4U43m&+-^i+0b{C9gP3f7Q(S2|7^juQ
zLTQ2R9X~>xhC?M!x+;!Djk5opJ#K#YyWfp~3O#Oq51#-6yg0jrhC`3}^qO(s>z-n#
z)`)NB50b;4m~3X@3CZ1NyOs5~;<_OQn4_1>4!~b7LsF71&f(@La1H|xqlm#rl;2d4r!|608U(;!lfQ^|p;@4(l^3Qc>
zi3X>lTOnTPY**m9qvKdJ+qk;(?sj+Z^p+oW&%IPaH|vkaUVEv!5KCM#p5|t0eNk$b
zY_VqyQmyrHm~v@ab&nQL{kMtzLdbYq`E#%5)ysop%oE9;B8US-KL`V+Q{njCZPk+B
zm|?x<<)W05f+6eGvi~rWR3=QWQo_ZiSQQ|Wlwr_IUuQ13UoKvDdzIL>phttw!?(@4
ze9qGmfzoI*5WEWzQq-$&P0tdOgcjn0S3l=$@G~E6D
zig792Sx1y*u;dNrPLIYh@uj%1jx**W3f|f}(U?-zXd)a;hhlDBL9=<3NA!GC^8$w2
zHp-k02tt?Q46}d(`prbZX?%`Z2h6kMkv8B~{k0O}RpAe>KYwmkAg3-in1GnhdxkvG
zqSQQ4T`v^tIUS~_;gNh9(SmAi1477PD!H_{(o11;%@k|Qy$*-htrrJ{xL^<|!lnuZ
z@|oB*IpUpN44EX%Od=6k$Zf&x@OlX&1WoDTd*3PaBByBAYs5uCqZs6Mr%q&Daw*15Y}ztK|}UZF3xj=pE6-06$ZOm4WG4UesdE
zqzWLrTUeU;C3`~CBvxnDn(hq=Nn$M1WI%xr1(`1h2F3=gHk?QRD@srnlp5|*kU$^h
zzI-oVlOo5@HQ$}!@ZfNeT&Go;!(BQYocymBhyPg|{{8XczvQP62V;C8ESXL7Q;%f%
zH$sK`PgPw~`C$MgP&FOEjN#&5RDb7NryF*|Hnz2zi%>Y$FsARK!Sa5IE~?x7O$}UC
zHJ7*i7+eU9i;t2u9u6{GsC>|IsoA}%Iv%^QbS7Di^-EAk;zsX@HTT7t$$)jkTJ22y
zU&(QpT58A$Z+$T{)zYOEV?!0tIn&g-i2sZB^eSvRD(*7py~c2+Ez
z=w16&fjx*9z}u0+rGQ~3Cq}vkhXsc`A)P_Rcr@X_+96u!qI2>cKF6SDe8$$`|arXo9Q8oVPlF`63SB=A|0x*MJ)
zV2DGsOHye-JEcVD9mv&vi?gIJN-yecTJhT%EVr0j1NtAJ$hukV+9c`W$Pg+CfzQ8*
zx6LeV98umw^AwcOyl*7%J=p72Jn>=aL&DzzgQpUc+o6x_W$or~SbZcRu3S6a>5ib`
zK0bT=l(MkFn4I#VyttUen1;Ve8ZY-7zqi|8Yb*;M`)#>*fi*y9yCFBj^E}~a6Qoq3
z6C%CI4Py%n@Crn^65#OQ5U{~uGz#sTeO^a*RuT{5ozA7?iy2w`W>2?)ug`rut(yFg
z+jZH#c{kKt1oth4zGEET8t_!$!iI?f)CgDq{Bi)uZjt?W#&2g}TE#|z~Ff6i(dV10|`
z8AZKPJN6+yoo}1<8|7%rdE$hMhIlEKRuUsPAX+UQo7z+Y6rOXvU6%f6+VO-=_Wu<|
z6gvn1R~XZ|hG3$-r~e+S&cjE^izRT7Vt5aNw-l)#4Z1fAwm0KahN!bn6>)zg78uzB
zkeF1gKuibm!lS7UO~k
zk=OVEW`>~j8D&OxI?lDdS^2vejc8{W@!oQhPV`fO`R&78ugbO6zBj-%p;sxET!2fi
z{gR*!&>Vi`v8sfioj6S
z=Cyo`%~+-Il8O~BitDp^k@@|7uA1h%_g}VjF!)Slw_;^qgeZD%!a7lfH5cB5AsE4u
z`KA2NYWYo3SLe70shq5TuabFhCMx)W?yYO|fr2T%LHe#Gd4rr))-3Ej6><05a#>KG
zp^W^;%H>FM`^j~M2@4z~%2I5DyZMkWw@dUGP&ePS1)N$+ghUR5#RJCF3~9pO@#pAL
z#C&Q=c`02VF0>#$0@+t4lr9lRJtFrJi8)cKT0xrf#=vJ+@Hai|4Pl6X40zaU|TcrQ5u
z`v+M;*G&XCVb8ONa^6kPmBTRyp1sR!24JPf)O3^A$na&J?n;k9%0-PItu7n
zYd2>BlY5{U&s>4d1a&vzawyPnh)fm>8a!64Ttk24D~>x9vS#sCTP9Z~$!Wp0+KNV>z#*%;RUbsHv&GkebY?vpN+I-PUuiL**0a>UN89=%NQn?*Cbirfpw=t%_hTT~Vl3q=}O
z2SM@8>Gs|D)(x(6oRLJ|bM)RBAt&^c^$NBt2pkq`5V$>`KX>wwObWOe$@mx(kpS?#{qOQP`CexFaVmTzE81Y-`O~=udZ)=@WA5p~hxw
zx7YK_>-OR8yx5MjE&X?HT!X0(;Z+MkmftUW+RZCtW@?kQB;KaUwK}8$q)Z
z1(3+_1&og`*wz_elJ$4P4K!iehx%y7Z^iXYb+LjNgV3EjMZIIc7977#KoPEea2`V>
z)O&{NoVf)W?Zss7`}c1?zMg#e_W1bS`;RFy_vRgww!uD(jia6Ri66x8n|e{zSNkr=
z(i62oa&7rDaP`VW>NI*q^2v%;rdTM=lD)~JBn4?2p~PEBLPUfj8XHQN=g#Cm5nsij
z8%L6bi1yJn4&gSNHHHvU92M$OuCGwzxJ=v|`9BHT?04l(K#rprQCx?;mSyU{%_)Fz
z$OB1QIy{w*U&TxY{A&1ULllE&HO__xN!_0jFx^KRUa9ZQ94XAXBkGm_Td7c;`ISKtRj-zEHRNQj8rK(sMg4%<+l#ia}`{bGqWhnMt0G2@K+|M~B
zc|`|D4#YJXBgm=-cqU%EP_0r56c}1^B(aQOMH%)&J_nzlQ#Qd=DSzG*1qA#-59Z-9
zC@bGW0t9>;8k=7ismb3JeU`O@5L-!ZAf2XhyVeTr4wp69SBX2C&+FuI=_ua3mN*RT
zTEZfad%GNFUQ;0(t;l_*ou7p)9UFusm?`4
z`$10qjF%n_1Mk;;U-K=vx5QnNPxL!xJ~rpf`xZ{9?+yQ82d@@;Jj(RXILHmh=2g`Z
z*0YLe+Lx8>TNGABs@wqtDjxH2P8jSGm;@e2Oidz6Th4+o@q;oXb7q^VYBb7Kfs8d7
zdlrpa{WFn}`-U#(Hes^+tp~`M=%ozjg3_>LM;sqFRH1?2c(6R=?>|`%>H7QT=xw-7
z@KDTTio+Ir4V@#0YO*&u(&$rD9&5()jYJS)37?zyA9}EjZxm<~hnk`9yT&3M!+vLI
z6sr76dspDLqrmmW<2BVE25}do-`}6zUvmSnc}oYj
zw|!;LpP_Q*uU{VoaO<_$%Wm7Pg(1*no6=AIj?!PwY25xvj~aTh?L_m>HvC_gx4FWf
z%t!g>qiPr}w?(RFgJXW00+F*V#_5@boN-Sw!E>B-!t3{uP}$je;XSw}^<&u%i!>Co
z@G^zRd5<~Fps_qN`-NKoTk*C2dg{)0*|kivl_QEjicy_l%&G*3HJ@;!tz&rs!>@q$
zJXh^tov-5L@$$eJcbzlS^1e#xt#oUNmoxaO#QqP{RDRmU;Ch_#>AYI9gt-%cdAb1!
zeL6;d(=IWOr@Ng?QOrt~UHP%$#}?|&PtSI5WjXO|j8=kNx$9w?ofnP~KMX*VysjE6
z{k8h^*`24*w;YiW$aWvP!fI*6D%?c{+#M-EyRrP}xv8Iiq2l*ZJJnb^TOVRUGTDPr2??_ybN$l^v+!Y$Wgbx7NTjqCyL<6bj2LTYEXYz(Mfr0hj=T#8!RdSpN4`lv(kyS
z9JaDxFFNZMeFL;k(xJ~~8BXCjV74Cpk#O72vFy-f|B$1h149FSP(UywBsd@tarBZL
zmKgu@)U(H0i?<>8w}ga0MNiE5nm)vAO8Z#_dAqaO){bhqU6l*r7J;>^mSNb42oN!5n|wcp>Eh4Jpuo|ypQ~R!AG-lhc#y^
z=x-gFc^wBw1H?6q8$37ZYhFavcV-e0T3tY6on27OZ3YfWcTCMRb($Z|N9pq86gRQbbgb^f9II;eqgHGGH7SLXcoT7Wwfpej`9m>TOpWryu)I0CM!pJIY~EpoGh~m~
zKgF+{=VU}fB!Z-vm|{jsnuxxoc_cd`s+}(C@W(8Mq-M=bxlL1fVisCk-p%Ch3>GMr
z=k3RGk@(;^nGER*vASj_X}U|+==FWE<0lelGTC$O`@oAioj1UR-Oi5dq~{&BA3}(=
z<(BRH2laaOl#bVk=Kjt1PHv=d9>1J==_5drL^0U%s8YC&I8)fyHlmoSrQi=6V&L)x
zDzzb{Ne`K7@;i_(svakxV}_dvXd&mmwC!lbYAdxm?rEWfq|=@Qri9a33*3`zk4PPb
z=q>2qiJ>l4R44Q{?TNu0_tERZfi6tNJ+tlH3Ortg?BBT4V1bN(DLtEru(z#mxCo95
zpKz~v4*X&0N6O#%a6{V~rK8RCQ=fW%a+E?sH|>1WHCR>d_mI=u<6pAZ9X-^RH}_o|
zaTb-wmSdR>E?t-@t&8^W#R6-N?`Z|5AaiZY$=D;xeA8Dni>QM))W;z~w5x6pqS0zqi9xltzNDW<DPgz_0>t;!YdGZD2a^#Mv;1D{1wp+e^USXxbBLt-{~gD#_;pKe>lE`zuDY$uiy2H
z@s0j_XHrB(Nfkh}H7B)@De1VrX_U?;~b{Ck>2fX;p+3T>x&o=
z$DW?8H)yh!=$K;hGLIVVkR(LF7U59>(al0^lX{BribRYubLM#USA2g!4-u%gZ+fHJ
z3Uii{>Uq&v-{2K6xF^u8eU8g+W9hk_*?cHBsg7Tb1*0ROI}AeZ6y_3jcCuK#zR&yn
zx$E#h;`%sT(c#>x1=GZXvh}Al0`TcfqbO}XL91~sKgJU8-0EIrvCpv;U8#^DQ0zNC
zxVA_?z9RpJ_PV?q4^;2c_v1lxIYGP~%F4>hJsBN{aNiDW(;5V%X>24uN85uxJ*T86
zD&(BTy_N}Po6Qmv#KFXT@Ev)mrBl~2f(ih?(lSt~h*lH3
zewz>fqv-`Bs?
zZdtT
zt?4$BkB8_?A$V-}J}vx^=Xxwk(zO6fW&zQjdnnOR4EqzD46J~&QwGpA0b-E$wR^0$
zv{I1U=Ul_f2@9ojGV5fkm&96fzg&gVXv{y@wUGUh^qe)p==dTdp>&e)>FPCG4g0Io
zJHqNJ66nc%vE)EG
zEfCARz`S_$Rae?{FMx}~?J_}EG_EdT4}L-*00>rD;ztiw7
z
zLy2eIZODncz=ZfMdKdzs(QF3FVzJ(^9^`zaLR}B@90qfZj91A%Dk+3bC8dA4V2}ip
z=u(3)Y@O+fW{LXtI&)E_kys88#QV0rG$yhR@ArD7$t5po-w@!EwJE17oao?7TI#|E
zAQ1iRpz!yUjTw3+g_zh!wX5>Fs>n)ew*SIN)Kc|gsj2fQPy22j1pc100s^gG@T=Z
zV-Ey8j|<-$kS)&FBHHMNV|qCv6ZQe{vQgKc&;T3=i>k~+UZGJQaFEQ%R4F>DpNpve
ziLf%_CWpGVxPd8I63K$8UCqL59L>Q%?lfv}j(0G_;{4Xp^$}tw@jc?WcR#>`2MHf5
zms|DW7+EE~EwBE>Yy^k89NS~qf>_y4%`BS~jMeK|*GRBYsaEAU=@}c?p7{Y#suKE@
zj^Sj7x3TaYYlT&jAMFbXntkxaX<??QJ`_eN++73
z{nbt^XUsRQEy#7dFgV%>j*D_?KsETRe1@r!VK;(TL;XIq#g#xFO_)bdK6BUhZ~r0y_>A+xMpoWN_>I
zUAv8&KKqgs4LO`ywJp5UrW3^G_CZsP)F_rE47YEut0&IOqKdfkhAo?%b`KCaR@fQO
zc>frqGs3lh{-n@p-5vcVGhPaYbx`9qCrY2QSL*l!YOW!5zp+=PyfgW9!kr@7i^XPu
zFWwFC%rz`Z;ERe^H^0|BeUk1b{~si1HsXd)m