From 2fe7beb7e4d5d90321ca23dcab549d07c38b5261 Mon Sep 17 00:00:00 2001 From: werner Date: Thu, 14 Nov 2019 15:34:10 -0300 Subject: [PATCH 1/9] Add a method to skip content type validation in case of a Heic or Heif file is attached. fixes: https://github.com/bitex-la/storyboard/issues/620 --- app/models/attachment.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 0bd1b736..e7e3f5ec 100755 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -38,7 +38,8 @@ def self.attachable_to 'application/pdf', 'application/zip', 'application/x-rar-compressed' - ]} + ]}, + unless: :skip_content_validation validates_attachment_file_name :document, matches: [ /bmp|BMP\z/, @@ -111,4 +112,8 @@ def classify_type def strip_accents self.document_file_name = ActiveSupport::Inflector.transliterate(self.document_file_name) unless self.document_file_name.nil? end + + def skip_content_validation + self.document_content_type.in?(['image/heic', 'image/heif']) + end end From 343ffac42006d86e370117864c9d92d4cb9ed1c0 Mon Sep 17 00:00:00 2001 From: werner Date: Thu, 14 Nov 2019 15:35:48 -0300 Subject: [PATCH 2/9] add heic file --- spec/fixtures/files/simple.heic | Bin 0 -> 81206 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 spec/fixtures/files/simple.heic diff --git a/spec/fixtures/files/simple.heic b/spec/fixtures/files/simple.heic new file mode 100644 index 0000000000000000000000000000000000000000..1e61cb3d6ce11f73fc1c835f9c3e9494191cd1e9 GIT binary patch literal 81206 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

iITQrrjd{dIe`c)}xo#z93K$zQUD{CQ z%wh_H@ddG>B;)!M`%@LC@k>4FA9(=Bes};Z*Nc04^gwj|}FC(ysw}u4?Ok}${xJ~o# z{@)SL0t8{JXeK>mehJ;{e`DxkN61=m@WGmPDixc>r|z_8AHDcMCZGKg?slrmM zJJ1B^4bb#W%(Ov;kDx1oX5QTluFFx+GSW?#{rpKI+>8wiWc-`pk!EJ^7$Bpm!4)?H9Yu|Bc2RZte>EvqTn@&P&sPreShxXaKKIu zSS*Z|N}yb0H^c<8ws5r56bOg?`sx;@75x2+_8oaDmV&h&(3eo_a3rl^C})WcGTj<+AoQFO%+*-TSY$rH7ffNo%8~Ij@lT*nT?bZY z8!W~BCEpo`c>3U%iNPggMCa^0D-k%59yfIwP`9a9v`M1Wzx^n3m>E;;MqVpJk`OqB zVa~pofAG^P?-|@_qpdq^Pa69{>^NNJbYzvt{53Y3VOjc@Fc?B}GiDzakfY#WWrkXz zaEZqwQ=CFBxgqNE!;7!-a7}G$@IAzHy2h90^s}cfQB|swidw+ZdDJU09LGBwo;6t{ z_Ie4=o6|dh_5M{{$3{-LSa0axPqQi>?N4JT1=S`mPExiE>)vW@E=o))TuB_{|LOj1 zP@H6g$J(Iy1=81aU!W0B$2A9l5b3?Vj63@Rtqhx@xTfQ!eyleGb$2uRwHgNV`yzb= zaSDyBYB7goAI*Z%RupNJU;2FrYjLeNGZDNtJj7`Ju3N@-axaSkyzU=9;8dL48 zZ6jc!Z}X>g_plkh^{_wjzgZnLq>giSoF11VjF~A^e|Q5x-Za=S#GAq|+l9`eheP7^ z{z`3)j{zNO z^(;ZOO!~MZj3|d-=rk>RAZDW|)My{-s5;6)-1jT5hDpsIQ4UN}U77u+@`&>eQ0Hbb8u-NZpu?yQ3g2 zB@tqBeKj_%%hFzX&y$`ilW-JiHj2CJ6G)~mFg3A*m+Kd0y~^|V_xf!(EOMjy8QQf4 z>C+UrY;k4A-(ajoF<3l671&QDEv&RoL^Mi{|FX}`(wzP~v zKU4+#5v%JNUQ7K>I|p1oS{X+R5EfvS6^;E$8z{50oso^}`I2P1jiNfYEN$$$Z;;em zm>I)mCQ68bQtOu0fdymvRa@@S$3+hNZ>qmvB`=c&HyeT(T&|4E)=E!%baQ5nf{4#l zgARHY)@WJC+xG>EY`6RG6;H{%aKG&jyD#UmIrP7N@-FN2fSQ_6r-A&sn%@wOfkp>& zc4>gbXWV&OxBUA++Zy z_=mMz_n5*Mz%X%LfJf$kiEjQ4fwTYC{Ah|Tdc$(fiLS~;hSl**T0P80t5)`I$Qd?f zt}Y_Zs8%&sSriTjhoZDo}r;S$|twr<1?{|tP(;cwQceqa%GRgqst)JPBoO*=g&e9JR#pIL$IV z{JX4uFTkG4T2Fb)Ds)SEa%h@tnP(0Jt%7B=F)_CxCtyba7U7ov0e%evuW{Y_BfA1H zk_F*qH3LD5Wi?YfOa{YJDxpP5b^Oq8bqOi?&I8i?x!dG!9UzEhzUk6I`priwajGil&b_Pzx3 z0T>Fa?O4JhTD04SahZQ!Ap96Nz#RDZa8DGTJy0419fIRbu6%cjqX5#_zk%W{{PSQy zr%Cw59IO%l%g*l80&ExB-Gt4_RZ>vj@gM8rFT~+;vXfN7pX2FE=$POiCXdMdfXKSQ zQmmg=k7E%ST~bF`vsu*k!tA4h0y8B{{U#ZhQ^0;qRk1Cb{DDby>t(G+r8=Ln#-6BN%E%Uaer%$ zU6~b3KcX#ei4vB_MHJ;M!IBNXcT!+>eki%&`@0J`@X#J8lG_%s^r<9%hKOQD{% zT6mJ@&(F;l2#c`Jhf`l6odD}2iUtyylrI_N$0@I<$FC3acK+$Elu5CPjwh=K(!3ZR zJ##kQ*w+=Q4#>oWV?=Zwq*6F1Ie>F;X3S(&97RY|k(sAx zL^V`Gy|dnOCsq_Hb~oz?KLlaM1sC{LD;9(a&Pk$u38|U6D)4?d>ZahbyxIxBayrBd z=TJ|TV%|k6J*rWUnlq;kWseXmTg?hrqxF$D)gq@KJv~pA5n+5P{Zjq4?@hj3NEhSw z0xTDogI`*snaKaw!B%n=32NW$zlu+z)S1a%V9%g9{!|07Fa@vz8>!y_KvWF=&<<82 z61UC}LS58@56WN7m|nVU;g5V?`$TlBb{tlWms8+YFMIH;O7TJw3vu@=OaDz< z&x?ZNqATFfmMY-6G0x7qpw|ZXpWO06-6ntY03~F(8(P8PWKwU8WfwJ|L45NR8x_tf z_D!kQWPyj`W2YOCW=P`}vyM?chUCLxEm$aVhl@d?i3fU=C!Zq@!N_MsK;_?*sEmiE|qJ=%FdRnQ%Ap@o57Y{oiZ`Tyf z7T+XRK1|9C1R<$@b;MIO+~Jg3OrhT8Iz4h$JDEMnNjNzvj6s0BR;!1&{l%f_7Itq# z7y#}t7n(ItV$qIgGwDW>jQa!)A%m^W@$c!}i*`|^Px5*q0d#bva+mCUucQ#As_WB*q;j4{Go&q`KNrB2>I^$is4IKl!VQkl>1nW zU5(37$9=cbdrCXSQQ05(btRy;AYF_<^-?*E&#JGSLR}-^Uu|;z$n3z8_U3h7#$*{oWEvS&6A-X`1MCf`^U0(v5wz zwuobHo|2o(ild?LX1b z;MQN14=KJu0Sd>(zgnw4fN(<1G?%%1XjVircH1i(_JGp`%vJXXa&QxL#G+{Td8)Dt zBFXy8XH?}GwbzUowkO13y^2x27-^jZ{!dfSkl%!#{G#^c#yDI$Y+HM@^fG5ZW_i!t zDg)6~y01W$BUty^$Y3lEfNP*WAc9RDr)$`EI4=g6*%T^ImAb+Pc z;iSERX*RZH?_a97VZn5Oh(_MlRuZPwX)eXs8wj%3p1(GOEd{zFs6%g@Zv*`j(|MN1 z_DmJ9M<*ZROmojxdEcm2xk#rlb7nghr3knxKOb;-_@5v|2JOjB7(m^fPb5@}{|%3A zydfEfPhH~q8l z?$Gkks1pGel56IuiwNZ&esr03m+ba8DlXGPoq4TkubNJj%)Hz@;CQ&C&tL$WAEOUn z5>>i+z|khrW3@CY^8;SwL0~!LU;RV<98b8KN|WAx?c_BB@5Is{5m}oW|9Wnw+!rYg z_?kZ=lf@yVwW02{M=C6H;ZFq{boU`f3ps=BMW<>j2Ar3>02;2_HRnq%0rqvjYD`?U z#j2~`IiMoQXP=k&rKEHwm?K<@c zl6AcG$}R@FfUZ*wrY%4_b;c>gTI`e+GNdbq36ADIZ|x@&lKbajiKoa$g3@U)yK+t;F=>M;Y zXWI-xG-+{deD(DzH%Rr$mD_$wBbk&q*;30f3x73q|Z5?3@MR%w|%HlIkS-RCv{nwjkUx`J@ zTE_>N3$*7#Gu!XSYrls#6)ZfjNyE%g3V5B6%%N|T6om{1nhdAml-LIU!PxZ1y9tF1 zr1=l^i_OFiGLCNvbF?o$Uf%}dh-DIIbbYjbi!7m%Qu@Ig!Dwsz#PlkXe`T%0_hW5a zxi9G&G7S+{$8710U_FAirm1L3XF$WC_8F#1Rmo#4lwlLT>D!Wr^P7ltd_nH`WWCD& z0C2oazgDNI!eW*3tW0O&2fQx`(@5Y_g~1rbSQU0ol#b(?3@f~xk?Dnp5abL>S#^NH z(v{}+K2OfWX6g_|I79dUCUr=RxU3l9rcg`HT#W8&2D%soa>m-(_Qjg10b8#HzJCl+PuST^N?jM|! zi92E5&)jVZeW)%d%qi|2(!qiNLCjK|${^^p@wY01fuJ>XiMhe|V_7&Zv=?l|7(D?s z2|M4x@oYCF&id--qs}I;IC7!~OsOOjZi@Cr=o2uXm`7NkJ}!ChC|{b9do>2qYJ(V7 z39HCRS?TSYW(yQ8C@0D;lv@3*2(a`BQNXkdenNt|nj$xo*lv^gd?>5Yn;AcFvkW+A zmnQ*;;4p#yPMN1%`Ct0aR3&%}0c=~>w?n-$TLWeCNUYwYkz`lowmLdkF>KYhf%d+H zNsro2-V4wAbUr zdD5%Ki6+Mx8TNk>OYkh7BKu~r6?G&w&x<}PONePs@S_}wqK~gkBW~SkZ0kBFStz;_ zSNB00P#lvV`XM(t9oHp{ZZ;+7`LTd+0p>0VHs8h2q)#zp+@|IvU*t$jm;z9v+x2ai z-Q|q;abtN}JY<@$5=ZK1K+g(vo;4BCoarWJP3ezY@DK8+GnD?5*z|Dcp#4!WH$u9m#p9IWmtF4g9cx z7i;)KR;X)Oh|hdrpsRo%TT6iudl*|}dKu{$hFrLxc`I91BG*XByPk`>&__1Xe@}*& zx%sM(PiADTQ7ef*|H_G{Qj?-{xl5sI6Tinz!>n~rJ{Wj=9kPX?z}E{l69>B@d+!#* zfwelhSQhq*|IYR6&BOer&rLj9%Ow_2NZp0=ezm0 z%LY*jcr^d=j2^O2KcD8Lp@4{SC~dNG!jvve>VryULs|Y60DLi-`Z0`KN0FG)(iS)S+xe|Po{mG0ST2!MD{a3&ardl z3w>7H?!Ff|7_uXkJ0`RhTR&y%x(pmj+P2-uZ08l1%>=^v%I-J)_49$~CGxJ0m!QCKfjS;QQ@vG+A15`{ zjgW&f`1fzN@69g0jrru_H_pIv@lC}VX=%LD2*{GSI0vdg|p8n#8)7|!O9(H^hTK_ySt;009akm$K;*qMX zSJkdVsEoY|#^wtj*T)H}vDm>x3FGL`A8Jp^wpR%a``^t=Y-r2~snM+)YX>KoZ9u6~ zWUfa=e3irW2{6A7m(#DLGX#5_IM|~AR@e*EBZbCJxcwX-e5K#=n=gmNVh`H>$A`}z z=f)}K31dpg{W&+)Y;?>UqvGiW)a-z%D*~DlFd1-Yb`p~V{{e2;QtE7Z?V|T@+<8^h zT1%X-V8fSz8|8%TY{Z+u+W`7oYP3*Gg&ZFg0df?POA1^3ECzKSe6_eQ%bv{dDF+!y zpe>tdYOxWU7Bz8W^!)i4Olp?dS-R>ohBkQRSuk@*R#IPxei_zw2(&i1t8M1BrTYj0 zhUf$*nldH-RnaJoneWI-PujupEv9e^;vvGI$sU#=@L|+RF?c%ZjuY)=vX=3pp&Y7f zDf?^xAoTW29Og81RMhh5eo0~ zjS1QdnqpfBCPxG)xfaunYk}e*Nr^K#b@I7+&&K1AE-WyKLg0ZaKhyLsOZyBA;Ct;f za}B4i6sCHwU;vNd!RWCW8h9sg(f2$L)d)Bcr?qZJ-B(S4Im?emJ1#hi?cdCVx>$P~ zK^;@Ft{K6WJrovJ5nMbdVQTd~8_TT$C+T#L3Cj3xV@_``#sgnY?v^cjfo&!RR9N=m z9=-eLh!#U*l>+GVk4HTi_PUGVe)<`;udVh8>YWl;H#HV3PZh!>0*D*C-3-z(&4s|j zo3lo)mt}=?r$6_ninZSQmm4VFBzL zs}>(4K?h)Uua=73WAG@7676X7(#+fjfXMWPCkvoyxc6KKPKTbU!+!z(!;K70R$AM+ zdybyNN;|S^N2<_GbmN!;<`MWkw15cH$B~a9{c@Fg6n<jwl?~8!oPi!MGhf}Dt9PA^1?%?D`cNy4S8|kz`(3)1xfe!z;21Fo` z^r>$F5VA2D!dQ+Q%<~ig*mxa#vkTv?5U9#hFTkrNp(u?S4;FexPJ#IY>Hu@@&egtv zmYSy%4pF!eJmP5M>aYRXqnbB-Y_nz@d%YyOT(Qr)mWga7jXDHhtR#20P6*P_eH$5v zyg0}}$6epA3j?FBQN-}%ma_d5t)!s31?vB7W0LRy?E-)$xs1CBDO6Ni(k_9-PATinFIQuLH1%ngYvQl6`%MH&rgg=rziCmSpALIL;Ow;xEa zS0l#;hFUf7(=d3Y?W|b^L@J(=FF&9nX`6ROxC_ev#iH{z9e``eqb!8Z!x*1`!=YR!O%Q3{pCjnY$X++u zw^O{?p+^reK2}H_N6(k|ZO8$WzoQU+ZE~5qAKMUj*eX9t#D}gpiz{;Yq7XJCKo_!N zJ*UhIpAIe;L&}*@n}+*p7+3h(b~_(dQ?uPH%AWlyP2o~hOfKcZ^f2o4BQI*rbxhAo zjHvl%blQ*(&5H-PhR4LX_Ch`fkN!fh-l7}Veak|^^-K1c=?mmyjrIbBua5SqxB`f9 z4+uakv4V*`$!(>dC9U||@ra>@FvIn8kX0hSou7pDIhNwKp$~N1J``Gcbzs@5f|T$T ze2eXIB}9Ik!v^U~=c;!vX`d#GltC1guA@TJo zUPIt}NhbP@xlLq3$DOO_X+31GIwX`!fG(TY1k5}?)U)L!flNy`UXv% zT*c$xJ)`##FEc=6Vq|!x+WuQ$Byu2s@_UTwtKROji?d}h;h1YHS4e^HZb9LI=;W;y z&SmEm*uOC8h6wnDOWrL@G5RuijF0BM+R(vJ0dA@cUHBK&WD#{Wo6x`6sxrHPXXQPZ;BaoJ=hIUcZmp(ai?y#iun=3unO%Emk1{#;XM+wjJcLeIM? z=u&7OhZ?cFEtpiPt9R`msY<++mcjwYQIEJ{Kq?+$55H1nY*Y_#?nm~});lA_t4fx$ zVM2;C^_)i}5!XGpJGN^aIK1nj3U|rM*GFHSz>7p^w(5>2)ImOH=$Ve+suL)y_o|0G zIxv0UwAWg*6U@g0`FB<`&9o+c%SpWrCkfY@W= zF@mpe&s3HpQ?-U6LfZS?aUpwuV^Rx4^f>A$Ex1y04oPHbhg}rI+c;>XJGmTNRcYv) zJsi>Db9ie04+hd+A85=^?7dI9-ME|MXEh$Jzl+>Kw4`fR#0(2rPm2O8=Qm0VUWx1G zo=EIdEIdMVAViT z#e)01`O3+D)wRmC`{qjoL)-cr@kM9A#dXLHC!-a0YnzG%OM~4%S<(&xV$sQ-wR8tZ zFOP_^J@#5*JKBlLy-R1rg6jEia|aD)7UI1OTmMT^Cgjff!nD z0Ac-hOY;krU-bS(VlL#U;1zr6Y;cfvp5EX|8O&M249bs1Z#YflBFy4e=8LBlxCRMk z=;#ITJ=P#M#@lSXDjG!R0I&q2&Wnor+K`730rCKX>($;?g@?9#J^8*N)&6Ud6k{ln zUO*}h+Bj2}iXAkMa<2N&$JU)r7k*?PIb>*ibH$% z&L9ZVpx2Ph<+gNo7?KHntdKYo+VH#KYxIDy2qLM8m#zICN;6+HDMyfv*#cia__tZE zY+x{-uP!&mj5J-L**~*-+-8ngb2sDvAn4BC#t2^V3+=jh@{(`g_uRWYZgEmH_Q+z? z>C&xG9a$tQJM$oZuq}?$lbyVahtp8-U10-Wg@Hi#xOHYz?rKS z`$D^#v@Xv4AJpGI5&CY!bIf=5yJTt@R|iDB(Xg*vNGgm2QhQ-{p-dCYO<-Gm7DvC@ z=%xxwUD`6UTQ}wYTt#N)NELEHnWU9X@Z0rC=Svs|$q5nrl+H3C?U4A+upupsK17^j zfmNU(H53srHj1I)wxb!3(U<)Ohm4M)b}Z(5@f9J1 zcLI({Y~_`rg&)R?Y9*i$q&G{5yIR87C5r1?+N>`O)vZ~yw3OTpl-w#=;M3E|+24*r zo7hU#&0bRSX$iI|!DMr}?SSNJ-N>b4UHEB1!O_$^yfg zGp60l@G9`w(i+j$`YUG3ZcR`v;-bl|n$KPGDlQRc0TgKKi*vGZ?lLHq8>caTBQ?`u ziI<`L@En`Rb@|s(1l&d=nh}O>s4}tIV4=@hRPnKkuhfH}8sa4^NJ9Tz?>dz$X1Tc* z3QQS39H5cHA@Gz>MR;1tLX3?IAPj#wX=@-v2J;+w+Qg#^Rs z*zOi0U_FD?q(R6S2u@~+Ks4)R)1dpNQdzSR*S43qmm2x&tbD<}E8}%xG38Y;y-*Cfhm=5?3n9nfnSRq)OtoKDmn~I6jPRHl$R-32S_MDN2#e6Z3Bj5D=Kq9LFq5RW%xGN zk|kE(!J53wl$Ww@9bKe7LHUC&ZHS`50IeBZs4}6F>v5r}_5ij8VNtUOfS_}mIZ7O^ zASnwEocLXpp}^4bFiJ6#RNw$} z_}&FyoHA{Rr#on&T_Y2-Tr2{B<>=t4 zAYf8Z2C^DscywTNw@$q5;(oTfeW*$(;uY)99nmhkXCjiI&=nmzZzbUmcle|?qkIe; zc7e|#8I&{wc%F7{bfpth?EGLJT%~H2EpH;^avIPlHN|*#vMPROofR6;O@r0Apvu># zuDi(t`Wmrx{&6cX`v#HKCoj*@EdtABg)+&`{MHpNqNtR2ICp#^7zoVO{RWFJ79?Rh~_0j*ac zhdJb`p%WLm?HxYwBr8Su5eb6D77eXfUKu2+!D;9&#z{|XX~4?JNRd<2L6BoHjL@^p zNCVI&#RbtFb*YW}yK~>WV;~p>|5ZShXBT;$Mz0h_-Yq>O1zJ%;sDZ~KCiU>`brj)6 z9__IQjZfs`nGoMH%#m zoQn8%X`sgd`<~j^Jo2N>JX-C&jgTZP>?X2qvjuh|D)8DbzS?;Nq@WUaenTRXv-A) zDD@m(0qPeTctXo8o0=_Vk*%-%;yQxiCI|C77&4^oZ%wf8#&G?F5Fu~!?HgYtwefEx z)QQWPkw>JZyjF?qQC)H4pQk3xWN_=D2n}QjeN_hM0sE;Y=DbA4G%DuruhuxMC=bOw zo?;qdz>NC`T8z6+FtPg0C8L5u;Q`rPV<|{D(ztwmzYK@x%HlBuqI4DhveUR`pH(aW zDv`M4@l==E{m!%pD=19W?maXAL{Z)tU^9+6?la2yg4m%3HATlQObuq&fc%`7&FXxm z*eOy`eo@8$UjDMaY?7TQ{hF?M66U#In9YN@6u)`|wsUfGV#s8a25JVrG)l7@%@d+F zE%yyrDvBv+(-!kT!K_nd{lp$D3Sy!7g~-Awkja8}61(WHlW~!eh3l_F40gHT{r6Ge zP~J;y!EFA~LRpm1+V^Z@|T- z+P^fQ_DEYZ#!Dq{%S*9+aBl!$$?7LH?i(6Ba2;ZLFL?WwVt1`Z4oGmjo!TiK2PRS9 zfDGFK5`Uc<;xE&@48ze7YbYT#1s%Lm;~(e!qk)ndXXab@llMkytP2UgyeMkbU1-9P zd8fl!px-S?L#JfJ0P`tUmv1LFB^HH~%BJSJzxNAjj+=oE@BcHWDA-S;MWtK>yVF@KqU579N^=b$L@iH8yQc>@O}+GFthA7 z^!Z;QWfcdeST`UPI>RI3282~XS_6Sdn(YKps$%j~^5b-NDYe%bgfw{K3G3-`W;ov<6La{L8ascgqdHSvZ|OCAib{-mH3t*zx1z-qQKg$1^}=z>%{o_@d;nkh|oxJE1hasH7SC^}Z^ zc$1)Iw<3^r{HAx)=l|BfPG1OtC~4?h94$-qRs~(oTZA@JMiAt4u@le(bopFqW74G`6N=~f`8))FJA&Nz;Ss(lJbw>f1Aelw6G4HWKwYmm zC#>7Pv3Prt0B@=0p{(_{0r$o}J6O?^!}zPo?op+*OQ`PN=*``>_*K-WMK(7K`8-!; zqehc+=gD|TP87{}8IoWaL(9dq*iRpe!nPNx7>Uh)z-lqgO|Y=@J6Pv9j6}`=I&;ah z3cAzOTF)4F=bdSZm&GDO>3X)mL{;TN*`UuK8%x(cGidNd3(NumapA0YFc73kL)mku z>l{Rjh#q?SnN%siiavois92JN;Bc^jR}(|c<+BVdSfRM|d~+~yDM@-~rV%etT-op5 zihH)WOK0(adD3jz))(;a#K1;Dx*6DV?i&Sdc{un0qkJIplbP>Gh5E%bP2VwX1u55a zz>?pPH5mu?FXLiZJqdY_C)M|anslI72j`0+!}klDR?dfGpmRPHSTc(U1r0m*lq`au zf;asz+~;gSsyfPkYC+C~%`S~nau3xzA6Z|Je)sBNb3^_}0`^u3$-OsDh_zCqs)k{Y z6E&3u@{Ps?%rJrf>YwVegKa0-;ZzB;_~`+DwPPDIYnCZ z04T?`NOp-+G+3@75zz5*B?&n7I#FR zqA(i}X81u2Wh~Lt46h7N*q0YL$I4i+nyfe}`iNM)g?SUMuE9l|fYlnXwO%Irh9B z&5WKg!b;mOfBUz5iL$O|@^)$lrs+0Yz|cLr_S#r{*BzB65wtDj!4HESB4sd2|HW@J zs>%6*mrKEDGC;z{rdEp7MLJzT*#`)G0dy?1c}*CR=CuL$#Qr!vXa11#Hf076aC~tL z2%fyd!8Q*mEKRP{-TXM=5E+wDklRqR=#5?Y?QG3h*jJ?ptz`NdbPqr0i00A*Hn^BX z4n|t}^u)uec=GoP@k7^wN+7e;9rbn2?DQp*rt**a+z@$|=%h49Yd5pr9!(%_moIT; z*PFTNUNGANK;oHb-y4i~XQnJ8Oj2GQobl7vQ3Rl{csR~F{orE-#j@mYWp}Re0-(8Z zG$!w6l7L`Y&g?{=EK+9*HXPvp_V1n=MNM72KV2|L6Y=*!!@fu{|}W5cXQ*8R#y2Pnvt2V?+qC(*!iQ z60s>oq>BQME1#zReW+fcmw+hWnc9zEg|#cY$kvFTCiEw~Hf_OQmtFuO<{iD`kk3t3 zZO6XnToAOy8=;2Y9TvxOHujtx&YWqTdh`Jnt=g0vI5bBKRO6~NcT6^fR|g}=hVw#H zY?yEg#N0)hQb?LflQ#l0s>2Bl8!skLw&u$xct7MhS^{m)^$&w$zidyWIAv7WHsLsw={tsE3_)t41eS)^Im5gKY-N|F`Fi8S~Vut>JnSP zeQoh^PDZs6;=YYt7Qe{y>C^p+3F`UPKg+1PP@GA-tJL*SD?sadfoe;PP1<#-#?-lI z+DSL_jQ9a5@IU%sZptI{XqM=N`fN;=G_)d^p2l}-0LMaU8W1nR;do|!^HZGh7*-V! zM^J18YlTx!3;f;h)(=Ad2M4db9uOK4S zt`-2kLKgV@zjF(AE_ZT9AYk#$Ld`Pt9smu*(bkE4o!TRy$%p}ZyL+dQeM{Q@<7vEL8CZ^8dDqIxCe8`_#Qh;wxH zc*fa%yTQPtj8ieRZpm?-*4;t$fxjY`(tfxk)Tz$cfwkWKUKWJHG@g)1RnS@zF^1T4 zXziAd)DNhQ^h-mGO9B=Im`<5&@BOXAG{6rt_$jE^7Jf(n+AJ^u;FeiVP1Vd%AWgk) zlqQhUbLvy-f51)h#~Ab=d*Q8fpAZiLDTFgVWE|o_m(l3B8K=*V>P3sPEk?`msaUa% z!l*c#e9akup8TOL*xnKYrC8n_Iv2Z!Q1bz2233?u*mr!GX1Mqb_VmO_^mvO%-%YC| z=Jp6{9?zU-2kbg97Mbw(5AUospM%!qj5Va+)ki7;RH_}m$Wtw`&tu8VJ>4-HK+YlE zYkpqHJV6+M2+sj7Y#>yTvU$`i!;*s6q@7vW?_%o zz`A*=m370bm=uHbn>TY%{7KwOKuyb;?+;_NgLtX5x<$SYOR{GA%kOl>PT~I6uz=i+ zFnMa_BM_%WrK_(ExnI5R7AIT)15+_j5Vz6^-Maf~%-l3DL=IiBzwa|E7dW_Sui-$mIr!Zcx|zea6DD?uogtaWMrMM$Z)ylYtFd-P+d48_C;ln3b2xYnlp zG#n$^QAhPEcBZIbtg>sL7d_y?KQ=W7OvZzvzgNP<#TJ=jYGlyFIp1b2t5mQ)o4_ZT zA*SOgT)Mg3RVJt;jVBKASnolrk_huBUAosjxG%%4!1+IDFpMWbj@#2*LGN$>{Q)nax1Z7-z&`K}2kjxDluZ-VC+ky5j! z8WJr2*Zc<^DXlcLZl%!bY+1n-T0JKW+j42KuxG0dzTUzFR>GHr>j`jQ&;+OmhV!m` z*Ev*`Rxb*L<@QpezJX)>IqFXd_VKqRq-3X1uidP3J!n9a-$B#vO+2tK-<6^rV~l!*1*)_G7Ni~38^<5}&m2_<)!+~7%!|Dw-mL6GFeBkc z6=NxJoGy(_@Q`IA+hp?hNtGbLW`73c^%Hxt{mGatx;3M3;C!R zf$vb9yrZHAcl1@E8%c6HNAWR_A{2>BwY^0_(X}s)0l+`P%L}vImd*)H#KR>SebLc#X2e0K=u0-f8oI|1Q}es&}ayr({FrryT{fG zv|1dyUUb>!$>+^V$ zDa)g&DF9DA+WI_C{J&$bz_{;X`KXF1{y+0VN+BS`qMGdP=u(2~d z{>$g-LoDnk0q{ zZ_7mW7z<&lR_#nphQwK4sd1hQjpK|v+iEz+2raUfbFC9p4Z!h9&Z+jbwRk61wWXA- zy8{7(yL^e^^ZKL^hj9J=+iRz0EzBm(JP=PCFY z=PlvCk8LQNYpJxG6$nfVIkv-0w>}o@8n?Mqzt|9Sgczi5MQHyC`#s<$X0EsL;2f@G z0IZ)s_gQOW8(c?Lct=mbF)awajPi;;mH0>A&&*d zxiT#q%Z!Hh=I@f!_KF|QPnR}5T@_kI55ya?;O^PkLs^_{V~QFi-H*q-}-p1Z)ObmoafWbb}2ViStde|$O;@_mnN4e*}t=A9G3}OIG72;T3mhC z;Z{n3T3=XWEuT0$et-o+Wf>ds-%j>r+PR6Cc>znPjnM7E3Ik#`26d&_)qTzFtUS_u$GC0B89|kI=IcnrkqDnGaZWfsM7H z$c}Mba4l5FxzLmZ=u>CdUo|_S-_v}{J`vW0PQbPBC?J6z$&ns-#CjFwQ&Qkbj87cJ>l`O{>qXC=4obB`={4`Aa-i2p{llHrpq#eoPB<704Svd0 zY73foZf8Hb1YbFhgT|U+>Bvhj!NiOpg&;om%`HK)!?(+^z=itVj=ae^ZT9*|BO zE()4&!`mcErTk?pDr7asia$@xQpC4;LcOo*2YQ0RO)92|=*s+r2hFKiQt9FasquIxj-q zo=1(2<6!4d*56{LyoVe+Sl#%j+91aMQHjwww;~eh>)%uyz*<`a{7n2){_>H^M^qde zn74r*hCe)QtbA9-TtJ|Sjbfvx&%#6kBC!!n=}~;+EB}F< z8dsuG9~(&+@Fp3lrALAf(V_TDyV1*tgcNF6B8UsmxGV%<{{de>?@i$){NM9TxtH$> zrU_3=E`*Rkz;(+68~!@f0%xChikIiwLc~=+qghGgNDh{89Iq3A(0Y_BpwctILH(Y^ zzJ^F`K|gQlOerBRa1r9Z!hafc9@5auhtBgVMiv|KF5Na0C|QHwtc1s zwW!qDwO@uTblZT|iJSk>$CxHPkaAH6a z7XdLt84y;Nq!iEaBM4V=4%{@;a?}@mBtJvd#%*&t7Xqed?fx98i$9a^1)^&GMSwHd zF0;Fc4}u5JQ}Pgq=@}l+B!{p?SoM(ZlN1Yv;kjgqTkDoDPxwh;z?IsMQY_U=e}F>1 z-2b}&Xu`H|(&^z*?s7*{EmkAqqfwE>Io0TUR|= zswv07Wd({x*vc3-QwR<(N0rRB2M|uk>j&WK-g>@UR|vaarKlh~zLIN<%z8jfGy7^& z<@??RiN=8~o7b%8+!kWdKAksi%HvxfAzoso>Ln|JY~$S+-$Vuu_V7;E#4G(Z_a5p! zP+-iS$QMG#Mnf*psy_<6lE+|I8TfO>(B2*ijZnES@82eV+3t&>8)D)cd}N6+9MKzC zIy9G3ltGoJ+>i13(Dv^Vo1HfrfSvzAWm(~FboNMa<3O5CK6J++cPs9ZLgh9GNzvF} zJew_W#8v*kxAW_Y_yw5c8?kPfd>M2hqh?O%jQE^mMQlZS?qdon=U=B|@H|1T3{g%^ zkxRsv;k>wVP%P!lI4U@0zXk82)GLO~wMtcjQJ;SQLeouaLrR|bgbep8!EWSChQ<5u zKI@w-S4D0@!W?#KKo>UqSZd%mY-EkJpqQF-Ru{*4iJsb1!*<)F{t>V{sZTi}zM!`= zzJ3=8*7)Qu$nd~!Zo3a=eD1fY)HuLmZ%pL|fhpvTx+GK)Cakh1Q7sY&T46?0o&fpI zeB^w;Nh$ri)~sFya>G(5>0TCqj}tT1OY1K+Im`S?db{pQaR+?0>QI#yh(8}*@(l2~ z{uiQT?AmAeYZ-EZCPXlh{pl04&>t9o6YL&m6kdE>O+`#BTey!fe81`*4Wp|f$k?aa z{C-ojAr9YQnC?(lNPW;z{{>f6`7ouupgnqD45SgZ6*{V%c5?-c=Nw=vp6;@4wW9y) zA1l6!6i_}t_)v`dgzxzafeNr+Y(SDZAcRT#9=Af*!$hPZ;|e7^Z^KrM^b~r*)n5uX zBM5i$Aq&17qKB}77205DZ~%PG08-7O%6myA=g{Ku1(?iGW%Hn@crF3FCUY$I(~iq! zG_=icC#Fbjj$Pp+3~mLUEcd4<2nIYs%OE}Ssf=r$rb0^jYZ0iwm7_E^Nus^Z8Rt-N zSYs{-{Y}WkCGB2MbQ<8Jq~o3nT%i_VL()C&^i+`=t&@+5QQ-*!sPj%cY^H8_YZzWy zC1>5E=-bvAVs6uep*)5B);S!lys4!Mr63Dj8_^<$4Z>u9sj!p7ctRCZ8uv{hDXs0Z z5&Qg(B=>efAHJMm@xm8|KgDx_;g2{UekO!ls0cVnJ1xR8hb+=8)zo@ zca@5v^+5$DMw^kPV0p`xA?nQ{%oGzKx~rV?Vz$g2>%NL?_Z9!;3jDbyMB(&(`$bP(v)Zi1Dva*c6h` z8mIod^?@q$AouN5wB{8ioU^9lA(;1<-alQRbO=67dyN3YRzdGYb08K$!g%H=-Hu5U z38b>-B~KYW@_bIn{SHH8sM)Y4-#ONHzzpIVYiMwY+3kKMEjcLfTzt# zEB|fX`p*M2{yux##tYu9p|v(q;SG*h&IK`R+(FY;L%_x&$+_t>BuRliVt?Ar|4-aklv)6Wg**7l<^O8Vaz;6VH~dZ( z_K?rZX8O#_F=Y7AjBQ#{!Ki&om`-p)#2RIz_%^6DiYskkxJH6hQ~1;7k@EFUftAOwY!)@EUC;4i18!|E|85We4m z2<_AmxhsqMEdek?d0@}Z$DN4Ip#5*v-6R{wtjb{EPLzMzWobN9Hvo{ccm1B{;vDR(Tc<59v2cJ z0V3p4;_z(4_8Xo)cg*&9)8W9dOW_L=xanJbzMx>PLM{Y%$-*`B4-kv7cuBsWPMj!< z96?3AylE4+CPN8eXcVPRtT&rxH1g`MCJdY*Tp^LDb*%dKB^Y_v(-XekYv*m>A|wCO z%(90IQ(^5k+D7tQ`fOXQ)8MRj6kxy1hjg>mSPewb0*p3uOE8$S6!+?HT|?zo8&M9n zobg|nlv#8f)cyOi$?a8|2#c1}Z9y+gwX;izae;UXdRR>_165#3PiaVTQQv1RBa0Ptu_2Nk?i>#!$cR==<0 zGl=R5Ue7RTa~pjZ8Qd^XvU7g*uZKt+p<)L0C#2H6XMU@d z*d>F4Z@JC0SnW*R+Tp02wV1m1al+(J??)Us;9QAoVrd16KR|N-PDot*{PYMiN@Vt~krmOt& zak5q@1>9U3f7q7v(TNWaH$@f!?RL)~;=fz|ijhcBtDSGO0E!)2Xa~bF1}o+lA!7UN zse{+tUAYU{+`}C=8*SVDz^VPEfi^dEj|iE6oN0yR^pN^)i!_J1C;EpFwlC4Xa0cwR zuP%EL83EP(doDHo&aoV=9}BSTb*SyR}<=98;C z@HhTJzJ?~2vc+p8Q1XNt2lWS^V{0*{JYFj=>;S^K_kPo+HWL+BK zs05oZSe>4FRV;!uDz z0!u@!ffZgy;gkW@kQw*_-wswcpw_yoO0DfhZ(EPtj#rv4T6d-nS6h zWI=b=mX47eAHe>_Z@j4*P;#U4pKUU#0zkn#%oKXn{|LUD%jEVoh2NApnWic^`IX~j zEi3IaFF;qw|G1HuEH8_DfQrP+JbB9o$MHK|z8mVi+5;Q4;W<InXD|gkDdji=Y}691HeNnXC=|G zQ$xtW;KYTiB3t67Rl40l`9rf1W0$0%WId*F$q|U|WD2!d)h6RNUP(?9mEkH;_ymOi zx-yQU&#-MhzAGBS*6rlu6YCl5QQ3wM>|VCzv0!G~k8aV0MtvoshGjvR$o7N=HbH^+ch6`0a1X-uMlK6=V+mos_ zRXL(_idt8LL85L!6!F1K5v>)G*`;7xBX%H9F1U~x@lONn9pf*JW274g-oTf}`28T-Tgb6wc-BgSfzZ^4{L%b}slT;`tZLLx9~m zA$8Czoj(>`80Z&HAq36pD<(;R$vA(-wuIsVBCD2QdPds%wutY8gc&&Cl;?Un};{w%Y&Z64c=n7eu9 zP5bT{+?npYBu%I8>8@x6q?Q50oEI!(;3u4@rdcm!lCYcUP75&~@;^I6R!I|^j<|~hv=%{~ zL%if;=5xZ3$U$dNNH*9 zqVt*c{$3cfff;)4j?uq+W5|Y^Q6ZKbxf1F2x`hZ}w3*%KSrkW*`a*AM3n&7B*gDLi zgkB8o>%xvsCIs5v__m-S?g|{l2EaNWu$Iz9pOODI2~Um#ha29_M2=(sGo`O&o)oNI z2TyC&8F=OASG6H8&=))Yl_ROAu|ESuLXps*UNCpeZb&zXJ$Wxx+zv~)jT@zh*Wacz^123 zneD>xJeeOm@^@uE5xzkrk5|>lxN_?1L2K@X`}%cm=g(LfqLP8I++CZ(RdhuLo<+Jz)TTNZ+-@6dj>w#U)d>7xB@)}U*}RN$^p+{T`8!wIbRj&YD&HM zMpx`xBsvK*S^@S>?u6-@=aH6z*TiaLX2j`^P(VkCG*`sN?#|?Pmi8#4D$hoYC)|Rba{&lHij_+0OAMu2oK}~^A7g7ITln27xTf2d}aQ zoO+BO?t$hZp8{hP3w5`1$-(c>lROa!Weg{N5lmvg5It%hj~+7CJ?ERWu*RwctirpV0L!<`B%H#q&QurvMw#SJ_X4W zIgdnD(o#v7`R!Y3?TEw9PF65Z;-wK2r1ael(B+clufBS+{-`Iae2aPozi`Oja2W*#t8T_#8utQ28I zT|{)zpCdQpsa1|4_hP_?`ur)ikv$9;zgOqOeX+SDs8`u0>9a zW7NM)M2N=jNmh@`+SQ3qL*KEZRQ2b+_(7_JrEF6u&YzO>)-$oTpNoo7M^DDo*2J;% zMi+q|kxy6_EUXHO0_w=Bn> ziC`;WbcRR7_QxYQeLxA~=d8o8kc1U5lGVn$;y{3Yq#s|CjaITR)^K6b`%G9L&+ z+J-x%=)x{KaGL*OT2LR~$F$8)Q%I=(4=t}#h_lsJvPET*9Yg!Sj{2js(1-QuA6 zch_0dMSbMv6`=Nf?m~CujfNMFAmB;(sGuxDXmampy6LC(yV4j-r&ew#ljijKrPY}N zN_b*f?W-P6*Akme3>|5aBx;*42PdV%sS8Aeb{qy zjZtE87;UK1F#7qKbn-9o10m(^P5ZEe>n?Imm;ah=pXrrDJCmd%-;P5w%R!?%`MCrE zP3YZ{XLaRmcR*sTEah5X4!x;(Ysd(NU2S5#$R`ijs^Oky?mF$>XO{J zH8RCMK}FRCOTi~(qowQcXPZm4bUY5fJGjt!!q5kwX94x!q5ucpmQwt1g9N5jEikr*}7UP{|(}e!dxy#xo{GB8)B6UT4LPA zksUUQH~mkM!lvYeX9ME%te9py0kC1J_ajA%ZS}MZ`AL#9(9;c2dQo0)9Mqe<*3*m2 z;Y)ZhPQaOlp`A^`AC6cf@NK{!Ios%EGu13i(!v=o_%;f6jpRwvaG-pDbT6m`9TS99 zPQpu|r{smEgc&_Lqws|M=jbT<^ku+w|6XE@Fz_#VIVNek zqD?6K?hE0{nwm1MTj%3kcH2p8QKqz^+}e z!9fO-)Kks;@Cow#K>!}_lx?8XW{~fVakgIfNb;ifR)}E^jK&D+d~P*pqR&E{mj80^ zZd+?1UmFeFjSbWNpNXsExl)&lx4mT0JwBBnOm-Oo${)eCSv|Bi<38*W|LxmTvsx+) z*%eQkZz`;zA-_=ZR&cmn9UuL*`ii?JZVJSV6!rT<7fs-|Bb&{WEoqW$kSF@dYWUCI zt2#6k;W+%@!*6G1Y;X2xV=&G9*BQWL_~^RqO%DqCWNa7&s}X!(aRTsY_R=t!HD4^1 zpN*w7Yv>5ooE{78n9`cnP8L3t*9k>+I_4OE3I|)~t;0%f+fD;8lnrR^-|yia$o!>i z`0ok<-|%B)5l{cjVS9n`7FS{Gsa>Z+_P3?~c3b{h!aCUaWo{lqQSa1eSFMj3=CFRS z_TqM|*frsicrH-!9SLmEGEFZwl|4{Wh;siD8DC;y5nd50SrU0Jm$NU~b5DFFM~T$abO2N!@Ibg#Flph9QeaLFtQaU%{9_Q*(vp>;oW<9y2PT z9r7+F)Cov}EL>*x`m zy&6@xDjj?bA|yjCz=-X@kjY~Nu-sdlQOX%bav5h>g|QT8Md!@4HDA}|*7icXsJo?l$c;zSlEc$R zp)J_-m7=5Na_FbSJv26Z!NIc>?heUWns18Ieg=MP=iQ7dJY2Ycr_y>!7l>j#`jtVt zkj*!@^#zX&v>tbsm6*<9T0pM&3Rl+R^(Q1B9(zfFZ2q%!y>}76k-Ys=wzL_?lIJM) zeC!JD*H2#A8cJuK!q(-33MU=O_ZyqVrt(Yd!Y;*fNn&Afm`33saKoRsk8l-fjk++8`Z1okK%@?9P+keN_~QNwmb(l z5K0D^gaYUBO$QgD5LzFG)fbvNcFL-YU2VLj-gW_h3f96Y%9h6FW#O<#lzD-lG= zfI>jdBlrrq)yaJB#!Kg3e^B#nz%~K*)s_|`fJEoM(H-l@-TeFxOjh}53N)bL2O3@t%k60#We)OAl72% z@|5Gc1?IQR@^H+db%^3W07DI$7VnLZ(C@MMdFz<)StzDPWGKRkLIh$j6HCe%D=m9F zH6~RftypgthCAnc6&*>*7aYY{;ubhSTT^(9xy_nNwt2Di+?-NnM&J?MV8Fh0AO{_pG^zCy@=ak zA=P6#O!3*~4GW5!`q0))FvGlVL1_5V21XV)J<{M`_*(w0>X;nZKbden&{*aWShp-iS23hY#ol9sVN^Z` z-FuIlww5~vw>Uabnrrxrt@}DKzm;vk_PE5RSJ~lYYY(+h3fZt*xX92_Div-g9Qzu7 z3Pa4vrO5V1O=wXpGK_HSNGNhr!aG)1l~}tdKr9ab^qT@T}T?%EYZu?E9!Ky{S=TvpdZ0{`B0d#nP5Q%6YXB^OKUS!8xb}}+< z+F2$rKeDL_z|K8Vut?svK3#Q4w~l7}c`QvZ9ZkkWf`)R#23*OlRSKz3L3psfaC)m?6%YtFXESdyw*Mg+{3#v)DNC2F})iCN21Sp+*wJ4rf9`4a7U@RZ^0m1Q-ot2;>UHDg9Etl zii4>F3YF~>2gbaD zX|#PJE!N;0_yPoQsdd2i59;HMonb;lFvH0Ork1mr4GEDTYb|HT(r?t*#Khv?-~On* z8*bZgU~LgLM$~mdZV_x`u51u07wKU6tnWuB!{d6L5S!uI_(&{!Ak6m16k&}=kkSfA z3M-IK`em&T9OH-Yc)XOu-GaELamZc|O}Gv|9%`I!>M^3N=``imR&Ue7Arv6AR=B5= zYN)#ij!ap3iF^OD2=7^eN{lV5OANQ^*g4y5lL4fhMUs(&M4kNlER@ zr^oOWdbOq_Cj9bKR{m~f)j`lD;3)n$z2lWQ(>%l4KbF;Ag%%rEY~wS;3xk6Z5Az9H z9INq7SqJaBJ$#y%C(*d5|KPA##K5hGmYs$7_0s6ajMFzGqjqVx znk0xCzK+1Ycmu8AQ|d&Z8u+UJ|Gi2nXVp3o8RYg1Z!04UUw=Q#FFX3O&zHqH_@qD& z;K+rsmm&idD<-oB2u+R7gnHM}D-W%7OXh<7Sad;k#L@j!Z8pwK{X^ZtibvenBX|cR zLL$?whV81!_U$AS?sT=i1o5C=$pCPEwwX;0Xm}YLl7nWQ*eRk$P;dYC)l3QN0#fcK zWse><15 znSeWTOKU0Tg22ip>lPe=0hRnF#@&b_$&6^1eY|6?mHv3MDEOGr7rrnEdpF@!35aK{ z86T%}uHGa@kybhRA%i;U-RfySbM3(Bq6v3rh|u>ZlXHy!%>!Pur7MWHL={T&b3U*K zR|-ooXQdBOGYWsd;eZGY`KXk)`DD1N&Nl9L1d*`$@>dr9j9v>G@b%+{)}^S6Rdm@O z%)nP>*YLn1FNyy$fE@OHgkogB5}Zzt;dfxN9cf4-(B+h-qruS#ePlCKU}|^eInO0( zr=;H$BQtJlClPHj2$E9icPU`%I6aB&CQfL{P@bwJA1c>;mKdwv2Bc&kxMk!S!(SFM zuLpKqn~=p|r6lxL>nBU(LbV{=US7Lg)GmoKfzV)F8czQz;)?r6QZf|DAuxkYU6o0V zXLop*(5wt4 zjZGwt5VK{P9rk`3chH%xG`{q3|`YiPX|#wbL&59*1|3pW{cF01?? zdo=@_W!SK1pi4GeB`+dtD;ogEZm!04B6_?`5vWT(py=vvpOF>uTO>^LjdbJnDBt6t z&^7Wga}MvC>peesVKK};s&FQM)U2kjJW_~365Fs#afO2oqkmjs0LVyq?C;C1PAOi16oF={W;%LUH5MUR{)#eSR0Vk%uSdq@){Cj#B!beH zs63Xc^COueDVmF}yuu||k7vo+Qe`miCV@yM!22>Lyba^Wsa}@A@N_(rCs7dvaIO#R z#?Hb4ytJXY(A`$u`pMEytXLkH^^&75j5iJul6Q46?jRuiX5BZjbH42CupwYn=%kJ5 zUyq0nUBlhdROf;A*ztSKLq9lQ4ou31V=J`mpB;cp@C}z=GV)k)6jda%dh8Xw$Y z!zHmiz5lC0O<*L*acawB0@A`^xP;q?~!3vBc5k}qO3YD?-mN_>+~R)ttv zjz1-(fN71oKSxz!_GK_5%wWwhD&;9lD@7SeyF!#6n23yZ-g;YL6V~@@_09p){;U3R zjz6+z26WZ&->7{U08qg8l>dfleae`#ttFP^UPTA}W7KiZn9WYDef4#76;wEX2v2G+ zJRHEIn@d(!`V0LMmxi7UrFohcR7_?~bQxj_!^KoOAN$3Pi@wAln&{lKr_Ep->h*lw z`i|;u$**0B-qne^Mi;inkwSVd?MunD8y>sxQEY(;kyu3f?t%-((m*Fu40RRi2i?O% zZUh5C_rTtJFy5`^iTpYgyy5ss4nhV*~#X|(HgZa%id%`xWg z!CEO)-m%Se9c<(Z1zQ@DU9Q$5quYu#0~*0IVBo-Wg-CR8E6UL&O!8MN@3u-VYUF`f zy7n0JP06Ejk`_{;J!MLr-Z{ofvsBJ`SLZrY35R1?qvVJmBrf3i0qQ^I9xf|f2@k>i zQr0USe>vveP=Jg!x`2d5kO6)8b=2R#F6qr8Si0|v&C%C^uA_#No@MNLY!zmEiMi>5 z)PzU28Q9XmJ+DFk`9xB#6;P3J$J$Rjq}2x0=hEs487fFqjbhk;(YRzz8Woi|q)gV2 zncf&GaUUuNar|J`3L$)^Grv-scL8HjXTw2-;HH@KKQrZVsku;7F=AX-K!W#@1A8;U zyxtiq^;C7^%*bCJ7C7sM8n2MZdHT{ZO0@TIjinV}X|3pt52rtj+uKuwMerZ2&G>u) zuP0DD#iQ$xA)m-M*b)^h4XMRF6*)vrdjJ}kV{6akvB(l@DOCFYWh2deIN+9=MYE+8 z7Zea7FL^j(_zl;5C@**neG8rYRNCLN6q}NWpakh?0h{3nOcUk!C7SapkjP1V)E``U zw>oj?2Na7S3kfMB))lSCBD-@nSr3E$|8-({m2VcA-Z;vt01!3ZQP~@fVsgpD(ebNz z2CC>CTHqxfA`#3rBTc5!EdE=vC6(e5dfQvr1__te2$2s)#CUymlMlBA1M(8*iq}gB z3rXrT(Q!{`*ANif3EV#b z0-0E!m?FEvcG0MHuKDH$P^_C+pT1au1dPlE49=SjlET~H&yGSk9>E_1edf!h^pi<2 zRzPP{u;K36WdgVq{os88&>(TiR2ECuJ0QdaXV){e8-e%Tj}LRAIm?=I?neQ??Vq4Z z)<1?o!KLshsM;8u>16SY%?>U-iZq5kxg**8@x-SRUC!B__GK`*+bEq--lU=Zb!X<3 zR;UUBG__Co^`0&VWaCOh6gMQ_Unfrc=s+bLp+ef7%Wt*75v?D-J-m$}QN4G_P+!yCSG< zmXkVC1TK={$)G=`=hxSrxGlNQyIBP1=9`QWlM8hn2eTU#7KY~ptq}cofXbc{k^XcA~!w3-^?WXsE>82Sw zrJ7kd!rZacLV|mjUZY7j$GSU^uQ1GT>i7ORC;PKGNW&MWkEJjhRJ!#$mO=weWEt8H z?kFYWF@n8D{q0KmV z02}~8VFh*eFfgH4lmtf`i0 zlD8lsvn{x?MVOxC37USPrwD>qjxvwl0HdK)^%tNY(J_J!2(`-0;PH)N z#g}T}q&j>Zdf{~4JTgTi{)ud$-17V8uzhA`ZIED8YQ?0W3xF);s6#vz?`YN+=x znakRY*n5w9Mn7j-qJz1Q+JKEFPde7${FzG_Ns_5*+!FM1t!&#C-M3d2x6$j{A&@{q z2~|9^W!8<38eQccysIsM7r^aXVxn7u3dhi)Z_dQ~U~-_{qx}B#enFopj+6Ukc4&1< zPIiADDrdW}V(3@s=Pshtklwq0!pN6j-aTfWXzXN_ z0Vt_SDm=~tJ62#$jGrSDL!;jv@s*e0Wo7Y41BcAJXXor|faqKm2JBvs&@Vmib&`?W z#zmt#<7u5x<}>Pr#w{T*yx24(pHs}7J$m!Y@fUcmBG@^W`K{`gnsvHE#d6V=y317% zg8UR}Lwrjs{9f58g~u->c3?cq@_m9Q5D{4z0KKn}Y2EfBol?3(1q}0Z!UvD^##D;( zTu&8qg<}?0c-o+=fn9DhvjIdcL$!clkb-ySCxf+sbsL3|rq9yjL z;m!aLF%aZdC*D6t?BITRdo+=*vXH#1!Qo>0cShz#KG(~xnW_{F&uzDGf*4)`Q59aU zT;uShG?{b*G!`yGtvy-YL$~SE*VylokLJ)_ z(2-qttDSz=kd%nB4M+6OU@$9)d@FCIVTFP>?CUt59}VVQ~LIolddI^@tP#upNWSQlV! zhi5(JO9YL8;cIR^0VS@R_`X=?Za4)#a~UUtjv1#i;WruK+c>=5)xIkNH`)otL(;z% zW{5sGQIWK?7H`3WWnf|%*Lj~KCAHIZ6Vs)$f~n%V2?ygwQrW&M@dS`2$nlGfS2X$}cx zMRIsQ%@DIb2i5C9i<7VP?|~7-dh)}z$v4v6N=ipu(OP@F4O?9=Id8!mW~$+6(jL*U z?n>@9M{R;)43{70U8te6y@`jP7$LS$1{(tsdevpV#>D0Ap`ESbE*%6w#d7&=Y|5pQ zQp`|!Tpy)^;7mmoT8G{GfKgg^D0jQ~{&HLKY;x(oEVP=Ms4tXYIs!yL6n%y;Ft*+7 z6Xau}tJdp6IT6-pOzNVFBQH0;+h?s>nJBEv_H|CGGeD%#DBMiPYl21bbq=#H&u>e8b7aU46-{$}kGl z$ni=OuPQJ1j4{C&U^D^3GbhZ_W7U1*yj7K{#kjyejnC(7@B5*BCX&o!KsoBG8)&r? z)N%-iK^gRryaUWFE$o46@26Z+*}!cuQgA3Ei_Y0>NNto!5mWeNA!S0k@)f&}h(Wol zTBhgj>GfE0jC?PpC=a^&wuWxWZwMsLb7J#n0?{{avpx33$*@+JL|*y>V_MEm+t_Iw zX-J%7bJ!b7ch0IOq$yjg#-A4Ze0jKizY|F4s2eY7cdusfzIlY!21t_$Q zCcw&VP|1u?!nK(OZHb>T|5^&1>Xw|Ka*m894q>=ib=w``VwCEZH4{syqGK=Z3^El2u8lVdRl-&V{aEi~P$|mQp6XjlPCoJ6 z#1E~<3%vzSf-CBgG@Kt(R$f&(pXxSRcnk&*ZhGpWw+D|4ar#-Ceq+-D5U(s_!MRS2 z?0>|8)cU=qZA<$*F=C(ENvapb!9kACE~#PDxd8$WH4tBD9nAPEJQe=HA~<=XE8E?Qg6|x_&#y0*H)kjo7@lh8~@lk z%b1|^!)oTy{5YPMyB3z#Vc|dsnh$yxY?Nzn%rPs>VTSFBU=n`Uo&PhYOQQW$6Dr_z zNS5?mSZpD#2pUHq3vP}S%-XW*H;gnV9;ohZriJFcE^xKifUut;(y0cy>9 zk=L^`VCLd{{CS*e{_5b_lO(pDctsdCWg>LhV4sZ-c+-JCvZ)+_#UFPWO&GV`y{rF~ zfKL?%8gBpjAu);I-Jku@W}X3xMGL0gjWgj*Eb-d8Y7!p(^IDfXe5$^=!x?Epk zK5$j5|JejioFy~p4yJ)JZsipb1qe{tq8Z%rmf4}c4|bUZ_ZWMeeS~nS6v17TQtVYqSaAZZm98Cg<5?xFWXU z-(C1K;+Nz&R(EP42wI_6;#p`tba}MdfloWMLp_o1aiv6D+_A5bQBv_B<5u7DTPB!w z94KS-s6W~TKR~xw4{onux@`fEjTOJ^pb^J#8*E7+!2$Usk`XIckvZ)hgudh{R+p*b zDueD?{kHJy=Y>Q%8O|#d*u|PZcbCKwNv(^RbFDN$6PPFlD3GbNvc^|Zd7U6I>_&D7 z;@s5N$-R-f-0yAQ`Q0ida(<&&xqk^=LWG`ut<3W~|JR@|AT~V&mj0!_M{CQEL7ySn z3^zgR&u&Sj*7Eh6YME$7PBz(tAjnUV@m4QE4lDZaq-v56Yx-nq2VT8m=wem&H%jKI z#fzpt4~4ET)&QEJqryQ>`r0*CsHK_Dd*`W^LcXYwtKTjdmlV021meW#EhLv2Wur&W zGk%e+SV=O8%q?K1MHof@&xfwJAQE9eU~o7;$;W=DN^+?8UL+5&@^6$>4laG-{yM4Ig`$F4CJr+dN<56^% z0OOU{F&zkuFdK~%^GmiD=MT`f!LXVGIhXJBcG@oG*r-ym#pQUi9)j1;e5W-nb;DFA zbT+ye0vNcGYt$*xg+GWUyXy!f_(XtL%a6^_V1cWU*tvoa5#EwlE+&l z1%rYn1VP2l%^$DD~ll%eJtViAw$5k2KXkP1z9M$RFV4aQ~&)obIvp7&`Lv zvy?;$#F6*JuigOH9kC{xsfKrMu{z(ZXU{VZSbzr461E!!xYG*%SQC?zq+1#rr1dc? zSt(W#C}ainXqcym+FO8lBmNGBOZKDIt}aANFpe^i8J|7EzxX6Fh%e*#vf%60FcpXT415|BsJ23v=IBDX@+b_l#n6Q zVFDo>2nPPyAgdVZENs#BnXeB#S)xbq6btY~BsrvOn` znAAbmozTLY&7Lm{8tp4_@zgS~Ww^kCnWQvurv(B&;)iWO?{OLPUHy@2Ne2Xjm0C0X z31NVCjD3U}A~C$EC}|^u*^1r!n1G{Gq>XyTX!*I(yZhY=AQ;Zsin@+*3D+hGZ7QY- zHQAogC)I{8&YrES5~9~Q7I}09*nyHN+=qz()2{ccO{}By>Z)`GvV|w*m!7m_ZWn|$ zqY8mNi@EK@5%!i=@kmb55iOx8qn36Y6|`( zrA}dOrmVIE*9AK@EhCGnBv4&pJ_&UG_Sk@1l%(4-T+L!4*@9HsUU|Uio+FRJvoja8 zpV%`w4{7~s<<6glC7C(9@STD_Ep_v_hM*IF*;>}WQw61^8gzg~IVLhqe605Q!-4W} zdl%;ML}kc4zWVURnr~9D;I+oaGQvoEozh`;ie>j=WSZDj`i0}&&;JeOOi{M&)Hw`w zMGOf-HW`IOZ&8wLO4r*>elzpuClr7!rHL`}6@fWf3cwpJnPqj3K;Q7lRM+-Mhi{X# zx^b$;ps(9sJKv`zRxc+Sa=oQu5Svp|ywr*wL*z-T)X+5*1Z^?;57&T`0Jk2*fl6hn zi|3Dj_D++ta4mCBz=v{_FT3QCbCiQf5pMjX#&d(Tp^Nt2iu8`?%$>tVrtS&QZgk4{ zg51LPFuPGB=!A9l%Q6H8RhSgP55%bpOkIlQl%^SRIoVdbuzQG6XUst=tXig9>NK;k zzRi=|e1#0qyQf~cWW7|{$PIZWKarmLTxOa1do=Ailt8h9ilYUb#Qj26hM^IQ=T-5* zG5H0)ZhBzeKO#6UTltw?;!`g|QOE&j@X+RVqg6)?Q%N{rr#85_Tv0t1&XafBGj*SFF6NK)Reb|`}i$^Y%3d#-FO#7yAa zk=5V|uXyt9w;QS`F!2zvA3mvP`>bH3nCw}0`!cqT6u<#92qd3z=erZ#js&J;p*t~+ zw~^xuH4E48@c%JjoiZItItwx%Ewq1pFA)L8kGD2WV~jo^cs}O4rgfUF0pW-6X-9}vZC8S zD$#vplsb$Ar6k z012Uc%ze|X7r*TK3-JObCMb(7(DFYeFJ^~+>qnvEeBYeA@YI0(?IF|xrpKc1ga&{m z9we5!G=9gvk5s9z|MQFXY{(kCDSdDiVq_*GZc z_n9LT2%!0$CdIU+Yp2q!G&h6c|aF+iXiY>+(u z*uZDWL>S%_?-6~q0_g6Y!fW4|h1-31h^H;*Rz+Vdk_=RcFU*Q1lX=uNaV!FM$;9yb zw6ndRh#*fP9d|SmU?u><9QEibtOcYZpgLu1Gye8Av$z7QB-l_-k|WovLkMW}B6sup z<*)z`04|Wk#{^P*`(Lz7K)$x*X@4iRyeIrmo}2%OS?U%GUj|XFHT2@~)JzOr1Tdl| zA>=_E@9*-iU!BSDuuGyyh`|^uNf$tGR7Y|*ygM8I_cS2Cl4F474mI9Ky^eyGE=iRe z*z?fdp+{Aw*0`#44P33+fi4lpLqR@I8`jE7EkD?JoNSeU zP3QwWTDVb+4?3=O` zQ`gXaZ&|<6^psii03h2f{Ztq+j&cX8)p}ezMWgvz_Dke58a?*$IFkA|%sd*s9#oLo z*9s?dNp8VNmLbaX49MiH+IqR2=Gt>h-`lFX#nC_2>tjGRJ}Igar|Ks*vnd-RJ>T9S z%22lx9P{@ys>sKgIwg_6=D$qU9GOtTPyjkLnb~BnEtuw43FQe4DZu~B$gPf8%Ugjq zt;slCb5$IW3p~epK%=4EUf{dyaD)hthfZY7qKgx=qBQ7`PC~6EThWWQ+6zr`KCGP; z7%iB+*-_)zr`Oz#9%Id>td-Ef`?8rv<+$MGk+U+|{&N#+RS$mg@WEAGe09*9stSy2Xr#-Xpp}kE?rrLl1b3&y+1J zG)N4b8+@h`MMlBne?6Z*--L}BKcr*&)-chRE#@=fV7%X=!^sz{8Yn(9<6%ztmCMKM ziVkV`tfiwW1rThx_Mn?Hh~9GANECWT=F9g2T5xGFOQWN?fSKI`K2}(`9>u!(oWP^! z+347QW_#&R1yu)pMKdAGXjDgAONL$h17R)u?EL${j5ci0OHIDNjygcbJYW|B#)`t& zScFQk9awL!6UhYH1H-%a zCq4by;vu-=tm0QW=ltZ13fm&UwrM>$hB*>4n-U7^gFu(}O-9a70Jxr8O@vat61L1Y z@Vc71OM1DPT{KhKg376sY>$heA$Wq2z2_WzwrITq=ZiqF$Zl&QT7Hu*J@)@rTnhQ1 zWMt}eCX3|tYh@se6K;=p|n+kGi+dO z?jsK1>awjp;bHkKUI%(Uh$4QL>#u3D`{8#ccFpTE@GZ1VsX|b#YrOlG1yMWEszRHH zZ@xXqU_GAk4|Qr`?9RmZ%W;Wz4{u=}fa7-Iy&yjfY||FjL}#%mn{#4=)J*M>U%%-u za#13iwl?F@rhTN0xUk%}1=!alie%t+GysQgag8KxH(Ov}d~2P=;BUV*C87M*J0t_$ zK3PH?BCk)$fPYYbxMQNHLEE0Is?`^Ldo41}A+nQHNWt*~I* zqU?0|+$8M+vPT^D3661We5#i>)hIa@jwZD}l4RDSA3{ySkR4eEEn`g3Rm(*O@W*pM zNNK)6e^f&+akOVrBs6gSu$e;n7@w?MM;aFlmAXfNNowE;^7J28Cuo-6oZd@_dB7jR zdEIlp4D84kPB3+YvL`@Z`xQ_rPeX4LId|M+6q44`R;EX5FEhf5imu1d4-$98e0 zl0Ze|VD&|f8lBFxv!dVwe_7}Nk?JpxSupdTZ@LX`ag%2KN zDaoSO)#s%W>WglohQs+)Na#}&4AElpsp@p`sqCnm)|C{$?ZqD|zM&h?*=BfcIY+*r zX73+KB|sY0v~wjj94#>Orw-GV7i>@3(2L@+FoX=YN`Z^R(ju4Bfo`f&2P3wOPp0Se$$;gkBW5aYh9WDvtc!^8sZf@}9q+8Y(62jd<`L^o0JO5nN^6aX^C73XouN`nEP$?o{JRT^qj zN2{gRY3htTgM_HsBuX8*E~+ND-N|r*bop6XllkV;hjw17kfFOMeSaseH%>TnGtQ^_ zJ#OW3WyW3LxK!R{f6IqIrWNe)Ryoy)CZ#&T>sCli;=J+~Zf(@H!=dy!derHtHrOf^kJ45nw|G{K3Eq!LN?0$q2a}?tF0_fwHvyL(vrhXj=C{~e4ixluW{iLJa`am z7I0TP4MJVPYW;%OW%3BHJw0u7c)=HLN%4A58du|YL}@zuQCfT0zegpbnY%++QTjI9 z$GN+}g66SY6PO+;ovPVok5c>PP(mo~)@|7f7N>LYw)Bsj6E?1BtOim~29}N?da)wV z+UC(i^wk+Y64VzL3DnTZWLTtG^Y8VJY>fPi#AWj|s@D>)?W;sQ_HHTVQ@za-n%5GBQBKDQf#=;&B-g`4`+ zuv9~Z{NSJ31%L9fmSG7F{fa|R_l#)`lSyt+T>hS#a$8%KPO2mah8f*0W72esK>Ae+ zDA=EW70f5ylnTpjF%7<+g8ij+JYC^3J4$xSZ2+bdd?)EVg_CDfay+q>?8Bo%I)tZJ z^`5o^Hr?y(X&RfVHtay=%AZfH#O3ZkI=97>*3D-H*!Zj6GH$;8W^T}U+x3k9ztsW<}@ zZ)A`MZ)K*(xDgFo3qA5@COM#8c*epSy#Q~!$?aK~amm^Ib6STPh5B z!nKm1C?J^Fduf^x(TzL z0SDber%j=oY~X#)D7+T>{tkBX_x0mkNC@;9 z`j`L*6Lm$xWu^=mhwk0bEqISn%3!xw@INRQ`L}>ITsV>L-j^c=?Abwim#f#%`F>?~ zuOgf#s+jMAF`XMHt@eGn_m0tb7&PE5Ak#Je1Q;HP5)3o!Y34ix+t>ZLX>CI+L)E(L z)#IB~I!ABd&r>gd$69XG2-fIFN46USBjVMDF6~hNZ#ZGn*%F@f8C3t+mdNTeP*Mzz zH4V$mgZD`G_+6GF|25aCj|o|PTj>#>+qeE^3Ysc~F$U)?b*>aI*uj^eQ9_1(02?WILU!kL69 zSM=MGWB?61zfy)$B%313ld%+u}dJCIc7%+%oW37WR&;2k>Gh zs+`Dj34z24* zQq)I$iCmwG;QNbpIUDQ?r?jdNhmaVCwvN4xC3GU9LfT0+he{bznhl({YB~~_v=vU} z8YUWC6y#x4r&J6$6iG71X(e`KFRI;8@k!@{@{o2lW@TIi0Al*O@m0MfFbR{RUcMuJjJ< zl7SK8xn+8b$%Z5ch>pu2KFfJlL*Nz6>Hv|%JALyn&mV7bXep2#+eb5zhlxn);IG)h zWmgd{jA*9dE)u3jy~NXia;CS22&s1bJ^pjeudPm`Vj4N*^R?)I^Yb{f`5B$J_=*2Ho)-uL=6PG z)9cxv4E6lPKupckqxUT`8LvU({K60u2%5h3360%LKv&$x{K##Ohr0j|l83zx9LfZtAAb z@d{aM`kW&E;M1@U?}>uOsFI=@ce>^qjT_KB84;ls91}?6Jghq!&{nf*D#pO|@(JCg zwQbd5?s~Z&m8$*WD0T<9hZ8Qi`)HjqSY<~aYl@{7_IGJ_5}2-=%xgZWbNeAjD#gG3 z3u?^qN16(tDFonR@QnW%;phwp-|OQl1Ra9J+1^bSCl5~$#bmfnu#DRi*ZF~jEM{7q ze?hQ5^X^|yKK&?jdorGIH~0m|iSRgqrWVyiIFir+IiW0UEod#m9Ka8L`KAwLVVr~t z?gbPG+nnZ2dGyma3f1Hve37JhskxLvIo>yhA^7TE_>%X*pfDQ}KVtY?1yKDryaT$) zCF2?xWl!1{jfXoQ_hB51zx%Vp)2g{+4}zhNx1PR(+H?dfAf;Mvz++lF5NlgVoY31y z7bZ$fz6jL(9Yi}-;19Dz*sK$1Sli+j-=0Q!CvrerMgFV^M6un!zC(gsPBA5G>jl#z z#Gf;-tn*lU6pG$SbqOD~Pq=NBPLsfPf>a^p@`@y(RL^i;XgD`2**X5MbEs$VPWMWp zctsiq?+o<^Aco(`=F5!gdU2a6ggwl@bH#;c^w#pMuXgS5qb3(>vk=&RDFcZy#L#bR zSh0?d>|m%q_6K9A@n|t2Dm!(H2Z5`fl2SdG<}C+z#oYB1XXJAeOIs4c3!!OOAlC~9 zAi9<>%sWR^F{l?*N>q(O$~%K?Mxr7hM7fbxh~4&=A?@Sif33dnH|!aoy-CHOMcmoT zB?{k@hjbbC_x8d@zl69xh`=1TIN4)a`&uYj)SC89-?~Kew6}EQk4R)mPWZt^GegJ@ z$24O7(k1aviq$NhkWRC8o+iUd6Zt$Bvvbt;Y$9p-hSOgmADgMSy&;M{gWNW>riA0T zYNMJ40)3Sd0wV|y^5$Q?E)*2=vyZ6Aa8iND6{zkU+u|N^$<#_3cBOC%COnf*I#$n_ zi}orm6(_@101I-9I1m#TAnSHr;6newHAigiKyrey8rso@X(Bl`94$EZA}e16ya@Hf zb|`aD2njUG=fnj0o|4;zyjn`o~2baF7Ll(YHmn zG5=k@z=C(2MPe#%+;>BzBnFZ>haqs?e1aME%VCx19CPazqisnaHr(dLIi$h-^XP3n ze#2{+Ea!WXDCVOQYRUxvaV4X!*|d{LvEz?p5kG-?D3O$LEe1$V3gSQF1ZG56rQ2px z<6qVa?i5yLKU&jEBeZkt51WNj^V<;lgOxhq=Lv0a^6YXUEz6lWimR zI^Pg;WUarTdQVK+T!lo-#C-v}Rk@RD>nRYUnUN(yo8_u}lxt=yMyrM6ai7i)d+bG|<>Ga}#Q zeq18=D-)PK28=?*`u^$I%4r*i{y2_EvxGk#p?oXv7OQ4afev+0w&IA@W9BE89_Z^T zgg%(dI=6$rk2>dz%{kf=5L3%nT6fdiqM0sEZi8mo_B&0}p(m5A;Ipv?7r zg6IAbxX~X11_CTU;cCJlo)XWHE>CELwnb3rr-fwW_RW6=#3=lfr1O?&Rzy*6ILT@rBuQi&FiM*=Q#q5B>Zx;3+dz$&w&Z!;# zA*w=wuU2{w`ymA6j8zyO+ePaBhvpPt%si~kIDo1V?pVp+HLV7 zfd{vvfe*sc^s1Ab^qU*K5KR8IKxsaPp ztgQ>>BRuui6XI0^`>?9U(@%nvrKUAc<GiG4qSCK$?0Oy0ux()_>J?j%U4LW~3cR3cy`X;RU~7zn$_Qs^9CN63 zf8Ar-#XZueiGrq;l|;3MDia_g`nAi5L^d%-0xb_eO>bKu3?v5EvTmuqrlgmE+^%B} z%6cYp$?UM<3#!+Hz0!%F3JSHwW`hiv%;B*39eL|!y=DLC1u`a*hd}&nq$UQod!FN1 zp+}5#<6evC(=Dcxsur|Md7GUCcGCS!@6K+A$|k+?fMn7?s4de*u0eCXQ`H0&6-Y78 zSTWI;U3EH`_fYq(Tg0p3&B!wL&Y*?FE>x*23O5ACk)nzsEHv=v3e%*!T)i6Pg``hn zjYdSc=8e2xOfYh)CI3B#JOMCl)ccxMDK?GIbZX-ShLVWBW?%_R)962$uIqc{rY}th zR_Y~<9^fuw{0gq85+Bh!kfZB^YY5HWw&awIcnzADA?ej~UyDkt)}#RdWgg}(=vAhN zaKO)@XUoRE*GvY}w(h(>Tkd2y#|mU6D$!dpVqD6Kq>jjC2r$9Njb;AP71!^~12(0S z8+0#@QIK1GU#t|UNX4;PCZ-@-&R=mu_t*ycgx&71iaE(m6ApNxo|1yfLAW5)p3yz7 zFGhG=#n~+QU`8`5K^;U{pYC)tIP@c>G7HgH3tiWI(`sTsW%0N1gaV6SCkVf0+e6S6 z6cv%Yb+R^GFC2_klobCS`pZcl{!$*V@jh6h*<*;JTd|-Gw&HquTp}CUmb~j$l#~y6 zxE*%oIB(K=os8Cla1maVGw+JGeV>DQ`=g!cU1cU*&#P>|`#A-M1;mz{1x0eDR)Zc) z694d|VA|ax@KlXib~eW&&u3Vq8`1S1>~5D)PyFEtnOmL7aBJiK@+i7oi=?YQnyTf; z57z#)+5enBbIDszpS(#3{yknsqc;i9Y9!oZr9~|EBHCRj?j@J1c2L5+pwRqYh^hi6 zDv2?%@wpUq3cfK6UE@7k*KO*j>^DwHt5Ok>3!h?{@suSFRC`Gdo|2SAF=?=k{Qho< z?q_~gnBY9*J_EmoVUMZFXoYmN=?bCl>JvPliE zFyX$(IDt3NTUQ>e|DQ1fC`T*CmeH?s2T*I_*Fw~DhpUthFx)ieeKJ`^hk%O12lgwn;r} z2f@H9p?U-edx5b$eH3 zKKRlLsjL|*`it*xVIHaeP&RHUkja_R2}uWbTiLMWjF7L4ro#WIzhih5zqX3$&%BSFZbUES&9hb6^QtyQ{m;~S zhFUNC79nzXgiuw%zE_b-M-mP>s00jz65Y}$U(T*Oc^22*h(8pAo-z_FQZ4hx2M*1Q g)uF3r>EhcD%3+u88mgkYU5F#h5LUy?20nKRP?{yJo&W#< literal 0 HcmV?d00001 From d83391c714c8435c975dfdb733f57ead1af046e3 Mon Sep 17 00:00:00 2001 From: werner Date: Fri, 15 Nov 2019 11:39:44 -0300 Subject: [PATCH 3/9] Add a config initializer setting to avoid spoofing from heic/heif files --- app/models/attachment.rb | 3 +-- config/initializers/paperclip.rb | 3 ++- spec/helpers/request_helpers.rb | 2 +- spec/requests/api/attachments_spec.rb | 23 +++++++++++++++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index e7e3f5ec..2d0f5a16 100755 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -50,8 +50,7 @@ def self.attachable_to /gif|GIF\z/, /zip|ZIP\z/, /rar|RAR\z/, - ] - + ], unless: :skip_content_validation def attached_to_something return unless attached_to.nil? diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index 5ae01f9d..5382322a 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -1 +1,2 @@ -Paperclip::DataUriAdapter.register \ No newline at end of file +Paperclip::DataUriAdapter.register +Paperclip.options[:content_type_mappings] = { heic: 'image/heic', heif: 'image/heif' } \ No newline at end of file diff --git a/spec/helpers/request_helpers.rb b/spec/helpers/request_helpers.rb index dc250d84..ab591e1c 100644 --- a/spec/helpers/request_helpers.rb +++ b/spec/helpers/request_helpers.rb @@ -38,7 +38,7 @@ def api_response def mime_for(ext) case ext - when :bmp, :png, :jpg, :jpeg, :JPEG, :gif, :BMP, :JPG, :PNG, :GIF then "image/#{ext.downcase}" + when :bmp, :png, :jpg, :jpeg, :JPEG, :gif, :BMP, :JPG, :PNG, :GIF, :heic, :heif, :HEIC, :HEIF then "image/#{ext.downcase}" when :pdf, :zip, :PDF, :ZIP then "application/#{ext.downcase}" when :rar, :RAR then "application/x-rar-compressed" else raise "No fixture for #{ext.downcase} files" diff --git a/spec/requests/api/attachments_spec.rb b/spec/requests/api/attachments_spec.rb index 3bd16bfd..8641f93c 100644 --- a/spec/requests/api/attachments_spec.rb +++ b/spec/requests/api/attachments_spec.rb @@ -47,6 +47,29 @@ end end + it 'handles heic images' do + issue = create(:basic_issue) + seed = create(:full_natural_docket_seed, + issue: issue, add_all_attachments: false) + + api_create "/attachments", + { + type: "attachments", + relationships: {attached_to_seed: {data: {id: seed.id, type: 'natural_docket_seeds'}}}, + attributes: { + document: "data:#{mime_for(:heic)};base64,#{bytes_for(:heic)}", + document_file_name: 'simple.heic', + document_content_type: mime_for(:heic) + } + } + file_attachment = api_response.data + + api_get "/attachments/#{file_attachment.id}" + expect(api_response.data.relationships.attached_to_seed.data.to_h).to( + eq(type: 'natural_docket_seeds', id: seed.id.to_s) + ) + end + describe "when re-arranging attachments" do it "can be re-attached to a fruit" do pending From ee1529182290d41c0455ae4ef057f46959623b09 Mon Sep 17 00:00:00 2001 From: werner Date: Fri, 15 Nov 2019 12:23:11 -0300 Subject: [PATCH 4/9] add content validation --- app/models/attachment.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 2d0f5a16..16eb5f35 100755 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -33,24 +33,27 @@ def self.attachable_to 'image/bmp', 'image/jpeg', 'image/jpg', + 'image/heic', + 'image/heif', 'image/gif', 'image/png', 'application/pdf', 'application/zip', 'application/x-rar-compressed' - ]}, - unless: :skip_content_validation + ]} validates_attachment_file_name :document, matches: [ /bmp|BMP\z/, /png|PNG\z/, /jpg|JPG\z/, /jpeg|JPEG\z/, + /heif|HEIF\z/, + /heic|HEIC\z/, /pdf|PDF\z/, /gif|GIF\z/, /zip|ZIP\z/, /rar|RAR\z/, - ], unless: :skip_content_validation + ] def attached_to_something return unless attached_to.nil? @@ -111,8 +114,4 @@ def classify_type def strip_accents self.document_file_name = ActiveSupport::Inflector.transliterate(self.document_file_name) unless self.document_file_name.nil? end - - def skip_content_validation - self.document_content_type.in?(['image/heic', 'image/heif']) - end end From 0358fb1bbf04456992a6811453568b0fa8b04d9c Mon Sep 17 00:00:00 2001 From: werner Date: Wed, 27 Nov 2019 11:00:26 -0300 Subject: [PATCH 5/9] install deps --- .circleci/config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 38adf238..d52dea5d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -24,6 +24,10 @@ jobs: - run: name: Which bundler? command: bundle -v + - run: + name: Install deps + command: | + sudo add-apt-repository ppa:strukturag/libheif -y && sudo apt-get -qq update && sudo apt install libheif-examples - restore_cache: keys: - rails-compliance-bundle-v2-{{ checksum "Gemfile.lock" }} From c666e830f85363407586f4b630f8f97c857211db Mon Sep 17 00:00:00 2001 From: werner Date: Wed, 27 Nov 2019 11:28:00 -0300 Subject: [PATCH 6/9] add software-properties-common --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d52dea5d..ebfc18f5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,7 +27,7 @@ jobs: - run: name: Install deps command: | - sudo add-apt-repository ppa:strukturag/libheif -y && sudo apt-get -qq update && sudo apt install libheif-examples + sudo apt-get install software-properties-common -y && sudo add-apt-repository ppa:strukturag/libheif -y && sudo apt-get -qq update && sudo apt install libheif-examples - restore_cache: keys: - rails-compliance-bundle-v2-{{ checksum "Gemfile.lock" }} From c5c4ea4436e1adf8e1f9138e49df614cafdc634f Mon Sep 17 00:00:00 2001 From: werner Date: Wed, 27 Nov 2019 12:13:52 -0300 Subject: [PATCH 7/9] install heif from sources --- .circleci/config.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ebfc18f5..374c7a17 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,9 +25,14 @@ jobs: name: Which bundler? command: bundle -v - run: - name: Install deps + name: Install heif command: | - sudo apt-get install software-properties-common -y && sudo add-apt-repository ppa:strukturag/libheif -y && sudo apt-get -qq update && sudo apt install libheif-examples + git clone git@github.com:strukturag/libheif.git + cd libheif + ./autogen.sh + ./configure + make + sudo make install - restore_cache: keys: - rails-compliance-bundle-v2-{{ checksum "Gemfile.lock" }} From 36f762df172702f81a3ff5e61b501951e75aa61f Mon Sep 17 00:00:00 2001 From: werner Date: Wed, 27 Nov 2019 14:54:42 -0300 Subject: [PATCH 8/9] Install dependent libraries in circleci --- .circleci/config.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 374c7a17..b11b3282 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,7 +27,13 @@ jobs: - run: name: Install heif command: | - git clone git@github.com:strukturag/libheif.git + sudo apt-get install software-properties-common -y + sudo add-apt-repository ppa:strukturag/libde265 -y + sudo apt-get update + sudo apt-get install libde265 -y + sudo apt-get install libtool -y + git clone https://github.com/strukturag/libheif + apt-get install automake -y cd libheif ./autogen.sh ./configure From 3a847fa3a249b805e5f68ed0787f536e19c07781 Mon Sep 17 00:00:00 2001 From: werner Date: Wed, 27 Nov 2019 16:14:45 -0300 Subject: [PATCH 9/9] Mock the problematic paperclip method --- .circleci/config.yml | 15 --------------- spec/requests/api/attachments_spec.rb | 3 +++ 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b11b3282..38adf238 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -24,21 +24,6 @@ jobs: - run: name: Which bundler? command: bundle -v - - run: - name: Install heif - command: | - sudo apt-get install software-properties-common -y - sudo add-apt-repository ppa:strukturag/libde265 -y - sudo apt-get update - sudo apt-get install libde265 -y - sudo apt-get install libtool -y - git clone https://github.com/strukturag/libheif - apt-get install automake -y - cd libheif - ./autogen.sh - ./configure - make - sudo make install - restore_cache: keys: - rails-compliance-bundle-v2-{{ checksum "Gemfile.lock" }} diff --git a/spec/requests/api/attachments_spec.rb b/spec/requests/api/attachments_spec.rb index 50158799..510b95d3 100644 --- a/spec/requests/api/attachments_spec.rb +++ b/spec/requests/api/attachments_spec.rb @@ -48,6 +48,9 @@ end it 'handles heic images' do + allow_any_instance_of(Paperclip::MediaTypeSpoofDetector).to( + receive(:type_from_file_command).and_return('image/heic') + ) issue = create(:basic_issue) seed = create(:full_natural_docket_seed, issue: issue, add_all_attachments: false)