From 5f1f267fe8e7e9a6a023d6597b08ac692fada5b3 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Mon, 13 Dec 2021 13:59:55 +0100 Subject: [PATCH] =?UTF-8?q?Add=20blog=20post=20=E2=80=9Csustainable=20scal?= =?UTF-8?q?a=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blog/_posts/2021-12-14-sustainable-scala.md | 279 ++++++++++++++++++ .../blog/sustainable-scala/c-java-scala-1.png | Bin 0 -> 14136 bytes .../blog/sustainable-scala/c-java-scala-2.png | Bin 0 -> 14645 bytes .../c-java-scala-idiomatic-1.png | Bin 0 -> 15734 bytes .../c-java-scala-idiomatic-2.png | Bin 0 -> 17886 bytes .../c-java-scala-js-python-1.png | Bin 0 -> 15796 bytes .../c-java-scala-js-python-2.png | Bin 0 -> 17406 bytes 7 files changed, 279 insertions(+) create mode 100644 blog/_posts/2021-12-14-sustainable-scala.md create mode 100644 resources/img/blog/sustainable-scala/c-java-scala-1.png create mode 100644 resources/img/blog/sustainable-scala/c-java-scala-2.png create mode 100644 resources/img/blog/sustainable-scala/c-java-scala-idiomatic-1.png create mode 100644 resources/img/blog/sustainable-scala/c-java-scala-idiomatic-2.png create mode 100644 resources/img/blog/sustainable-scala/c-java-scala-js-python-1.png create mode 100644 resources/img/blog/sustainable-scala/c-java-scala-js-python-2.png diff --git a/blog/_posts/2021-12-14-sustainable-scala.md b/blog/_posts/2021-12-14-sustainable-scala.md new file mode 100644 index 000000000..24b856ad1 --- /dev/null +++ b/blog/_posts/2021-12-14-sustainable-scala.md @@ -0,0 +1,279 @@ +--- +layout: blog-detail +post-type: blog +by: Julien Richard-Foy, Wojciech Mazur +title: "Sustainable Scala" +--- + +To what extent do programming languages affect the energy consumption of +programs? How does Scala compare to the other programming languages? Does that +matter for building an environmentally sustainable digital world? + +We found out that the most important lever to reduce the energy +consumption of the IT sector is to **extend the lifetime of hardware**. +Nevertheless, the energy consumption due to **running software** is +important, and it **varies significantly between programming languages**. +Scala is well positioned for a high-level language, and **writing low-level +imperative code** can make a difference. + +## The world is warming, what about the digital world? + +According to [climate experts], it is urgent to assess the environmental +impact of our decisions (in all areas) to significantly reduce the +greenhouse-gas (GHG) emissions of human activities. + +In 2019, the sector of IT was responsible for 3.5% of the worldwide GHG +emissions [^1] [^2], which is similar to the aviation sector. More +importantly, this number is growing exponentially, and it is expected to +double between now and 2025 [^1]. This trajectory is obviously not +sustainable. The GHG emissions of the IT sector must decrease. + +In that regard, good news is that more and more IT companies are committing to +targeting carbon neutrality, including Scala companies such as [Netflix], +[Zalando], and [Stripe]. + +Where do we start? If we break down the GHG emissions within the IT sector, +we observe that most of them happen during the manufacturing process of +hardware rather than during the usage of hardware [^1] [^3]. Therefore, the +first action point is to **extend the lifetime of hardware**. + +Then, we can have a look at the emissions due to using hardware, namely +the emissions due to running software. + +## Do programming languages affect energy consumption? + +The GHG emissions due to running software are caused by the energy +consumption of computers. Obviously, the more computations are performed, the +more energy is consumed. Said otherwise, the nature of the program is more +important than the language in which it is written. + +That being said, if we implemented the exact same program in various +languages, would we observe significant differences in energy consumption, +solely due to intrinsic _language overhead_? This is the question [Rui +Pereira _et. al._ try to answer][energy-efficiency-languages]. + +They compared the execution time, energy consumption, and memory consumption +of running 10 different programs each implemented in 27 programming languages +[^4]. Caution needs to be taken when interpreting benchmark results, but +some general trends emerged. + +Notably, **the energy consumption does vary by factors up to 80 between +programming languages**. On average, C and Rust programs are the most energy +efficient. Java programs consume about 2 times more energy than C programs. +JavaScript/TypeScript programs consume between 4 to 20 times more energy +than C programs. Finally, Python programs are black sheeps, with an energy +consumption 75 times higher than C programs. + +Where does Scala stand in this picture? Unfortunately, Scala was not +included in this study. + +## Including Scala in the energy benchmarks + +The code used by the study is [open source][energy-language-repo]. It reuses +the benchmarks of the [Computer Language Benchmarks Game], and measures not +only the execution time and memory consumption, but also the energy +consumption (via [perf tools]). + +In order to include Scala, we had the following plan: + +- take [old Scala implementations] of the benchmarks (which were written at + a time where Scala was part of the Computer Language Benchmarks Game, and + which are now sitting in an archived Git repository), +- adapt the infrastructure created by the study to run Java benchmarks to + also run Scala benchmarks. + +However, things were not that simple in practice. First, we discovered that the +existing infrastructure was not properly warming-up the JVM before running the +benchmarks, leading to an over-estimation of about 30% of their energy +consumption. Second, and more importantly, we noticed that the different +implementations of the same benchmarks (one per programming language) were +sometimes using different algorithms, making things obviously less comparable. + +We managed to find a solution to the first issue by implementing a [JVM-based +runner] for the benchmarks. Our runner implements the classic scheme of +running several warming-up iterations before doing measurements. It measures +the energy consumption by using [jRAPL]. + +Dealing with the second issue was a bit less satisfactory. We don’t have the +capacity of checking and fixing the 50 benchmark implementations to use +comparable algorithms. Consequently, we only focused on the Java and Scala +benchmarks whose performance was too far behind their C counterpart. We +modified them, when necessary, to use the same algorithm as the C +implementation of the benchmark. + +After several days of work, we had 10 Scala implementations of the +benchmarks as well as an infrastructure properly warming-up the JVM before +measuring their execution time, memory consumption, and energy consumption. + +## What about day-to-day code? + +Heavily optimized code may be different from idiomatic code +that we write day-to-day, and the results we would get from running the +benchmarks may not be applicable to idiomatic Scala code. + +For this reason, we also created "more idiomatic" versions of the Scala +benchmarks. The usage of the double quotes is justified because 1) what is +qualified as idiomatic is fairly subjective, and 2) due to our limited +resources, we did not completely overhaul the implementations, but we +only changed some patterns that we believe are typically non-idiomatic. + +For instance, the "optimized" version of the `binary-trees` benchmark models +an empty tree as tree whose branches are `null`: + +~~~ scala +final case class Tree(left: Tree, right: Tree) { + def checkSum: Int = + left match { + case null => 1 + case tl => 1 + tl.checkSum + right.checkSum + } +} + +object Tree { + final val EmptyTree = Tree(null, null) +} +~~~ + +Whereas the idiomatic one uses a class hierarchy: + +~~~ scala +sealed trait Tree { + def checkSum: Int +} + +case class NonEmptyTree(left: Tree, right: Tree) extends Tree { + def checkSum: Int = 1 + left.checkSum + right.checkSum +} + +case object EmptyTree extends Tree { + def checkSum: Int = 1 +} +~~~ + +Does this change impact performance? Keep reading to know the answer. + +Another example of difference between idiomatic and optimized versions is the +usage of Scala collections instead of Java `Array`s, and the usage of `for` +loop instead of `while` loops. + +### Protocol + +We compared the energy consumption of 10 benchmarks, each written in C, Scala, +Java, JavaScript, and Python. To achieve this, we executed each benchmark 10 +times (after 5 warm-up iterations), on an Intel i9-7900X @ 3.30 GHz with 20 +CPUs and 128 GB of memory, with OpenJDK 17, Node 10.19.0, and Python 3.8.10. + +You can find the source code of the benchmarks in the following Git repository: +[https://github.com/WojciechMazur/Energy-Languages](https://github.com/WojciechMazur/Energy-Languages/tree/feature/scala-develop). + +### Results + +To visualize better how the languages compare (regardless of the nature of +the benchmarks), we normalized the measurements, using C as a baseline. + +The figure below shows the normalized average energy consumption for each +benchmark, for the languages C, Java, and Scala (lower is better): + +![](/resources/img/blog/sustainable-scala/c-java-scala-1.png) +![](/resources/img/blog/sustainable-scala/c-java-scala-2.png) + +We observe that the Scala benchmarks were sometimes consuming a similar +amount of energy as the C benchmark (this is the case for `binary-trees`, +`fannkuch-redux`, `fasta`, and `n-body`), and sometimes a significantly higher +amount of energy (up to 12 times more energy for `regex-redux`). + +The figure below shows the same information, but it now includes JavaScript +and Python: + +![](/resources/img/blog/sustainable-scala/c-java-scala-js-python-1.png) +![](/resources/img/blog/sustainable-scala/c-java-scala-js-python-2.png) + +Compared to C, the Python benchmarks consumed between 4 to 339 times more +energy, and the JavaScript benchmarks consumed between 2 to 12 times +more energy. + +Last, the figure below compares C, Java, Scala, and "idiomatic" Scala +benchmarks: + +![](/resources/img/blog/sustainable-scala/c-java-scala-idiomatic-1.png) +![](/resources/img/blog/sustainable-scala/c-java-scala-idiomatic-2.png) + +For some benchmarks, the idiomatic version performs as well as the optimized +one (for `binary-trees`, the idiomatic version performs even slightly better +than the -- supposedly -- optimized one). However, for some other benchmarks, +the idiomatic version consumes significantly more energy than the optimized +one (up to 7 times more energy for `k-nucleotide`). + +## Discussion + +Within a language, we observe a high variability between benchmarks (e.g., +Python consumed between 4 to 300 times more energy than C, depending on +which benchmark we look at). This makes it hard to draw general conclusions +like "language X consumes N times more energy than language Y". That being +said, we believe that computing, for every language, their average energy +consumption relative to C provides an order of magnitude of how the +language may perform. The table below shows the average energy consumption +relative to C, as well as the standard deviation: + +| Language | Average energy consumption (normalized) | Standard Deviation | +|---|---|---| +| C | 1.00 | 0.00 | +| Java | 2.04 | 1.45 | +| **Scala** | **3.71** | **3.67** | +| **Scala (idiomatic)** | **6.99** | **4.87** | +| JavaScript | 7.63 | 3.62 | +| Python | 89.33 | 113.79 | + +A similar table was shown by Rui Pereira _et. al_ [^4]. While we did not get +exactly the same numbers, the orders of magnitude remain the same. + +We now have an answer to our initial question, “where does Scala +stand in the picture?” According to these benchmarks, Scala is well positioned +within high-level programming languages. + +Also, we see that in Scala, two implementations of the same benchmark can +easily show different performances, depending on your code style. For +instance, the energy consumption of the `k-nucleotide` benchmark was between +2 to 13 times higher than the C implementation. The differences between both +versions are mainly the usage of immutable Scala collections and `for` loops in +the idiomatic version, as opposed to `Array`s and `while` loops in the +optimized version (this observation is consistent with the results of +another study ran by Rui Pereira _et. al._ [^5]). + +We believe that the fact that Scala embraces several programming paradigms +is a strength. It makes it easy to write high-level code that reads well, +and it also makes it easy to write low-level code that performs well. + +## Next steps + +This work measured the performance of Scala on the JVM platform only. What +about Scala.js and Scala Native? Including those platforms could be +achieved in a follow-up study. + +The Scala Center started this work to get a first rough idea of what it +entails to reduce the GHG emissions of running software written in Scala, +but also, and more importantly, to see if there is any interest from +companies that use Scala into consolidating the methodology and [tools] to +reach their [sustainable development goals]. Please get in touch with +[us](mailto:scala@epfl.ch?subject=Sustainable%20Scala) if you want to be +part of it! + +[^1]: The Shift Project. (2021, March). Impact environnemental du numérique. https://theshiftproject.org/article/impact-environnemental-du-numerique-5g-nouvelle-etude-du-shift/ +[^2]: Freitag, C., Berners-Lee, M., Widdicks, K., Knowles, B., Blair, G., & Friday, A. (2021). The climate impact of ICT: A review of estimates, trends and regulations. arXiv preprint arXiv:2102.02622. +[^3]: Gupta, U., Kim, Y. G., Lee, S., Tse, J., Lee, H. H. S., Wei, G. Y., ... & Wu, C. J. (2021, February). Chasing Carbon: The Elusive Environmental Footprint of Computing. In 2021 IEEE International Symposium on High-Performance Computer Architecture (HPCA) (pp. 854-867). IEEE. +[^4]: Rui Pereira, Marco Couto, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, and João Saraiva. 2017. Energy efficiency across programming languages: how do energy, time, and memory relate? In Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2017). Association for Computing Machinery, New York, NY, USA, 256–267. DOI:https://doi.org/10.1145/3136014.3136031 +[^5]: Pereira, R., Couto, M., Ribeiro, F., Rua, R., Cunha, J., Fernandes, J. P., & Saraiva, J. (2021). Ranking programming languages by energy efficiency. Science of Computer Programming, 205, 102609. + +[climate experts]: https://www.ipcc.ch/sr15/chapter/spm/ +[energy-efficiency-languages]: https://sites.google.com/view/energy-efficiency-languages +[energy-language-repo]: https://github.com/greensoftwarelab/Energy-Languages +[Computer Language Benchmarks Game]: https://benchmarksgame-team.pages.debian.net/benchmarksgame/ +[old Scala implementations]: https://salsa.debian.org/benchmarksgame-team/archive-alioth-benchmarksgame/-/tree/master/contributed-source-code/benchmarksgame +[perf tools]: https://en.wikipedia.org/wiki/Perf_(Linux) +[Netflix]: https://about.netflix.com/en/news/net-zero-nature-our-climate-commitment +[Zalando]: https://corporate.zalando.com/en/newsroom/news-stories/zalando-goes-carbon-neutral +[Stripe]: https://stripe.com/blog/first-negative-emissions-purchases +[JVM-based runner]: https://github.com/WojciechMazur/Energy-Languages/blob/cd9a9d6d8e40911af6f823b1ecc4f6173c51c36c/Scala/sRAPL/sRAPL.scala#L9-L26 +[jRAPL]: https://github.com/WojciechMazur/jRAPL +[tools]: https://github.com/WojciechMazur/Energy-Languages/blob/7cf02bffe6d3b9af39f23e1d0edc0cb24c1e450c/Scala/sRAPL/sRAPL.scala +[sustainable development goals]: https://www.un.org/sustainabledevelopment/ diff --git a/resources/img/blog/sustainable-scala/c-java-scala-1.png b/resources/img/blog/sustainable-scala/c-java-scala-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a12ced8e085be40ef7d709979a734523e21af24d GIT binary patch literal 14136 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 Fe*@j|C{q9c literal 0 HcmV?d00001 diff --git a/resources/img/blog/sustainable-scala/c-java-scala-2.png b/resources/img/blog/sustainable-scala/c-java-scala-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a71afe94a978560903ff40919e328d8495d0a8ea GIT binary patch literal 14645 zcmeHuc~q0<)^DsCAVdU-fPg?CR*!%hL4rz| z5iFnxC=nx5qJj(pK|nypAX8)>0)dd}+fT5zz3bfXuKV4)?poiv?H_HLyzlcq?|%0F z?cd(}$F;-O7E*s#{5uANk+R%x{!a{MnJNae3$4m1IE&P&#{Y%V_hS$ z?`D6V;0rTHR|HQ`@pVkc;JWyb7Q2yJdacoVslPwn{I8P+8{Y3Rm)-Nt>#x#|gzxVC z>Fvdh+J@ENYo}dnh_ilceuX9*bL-_QbMtHFX=(P$;tvLpm`kPCD&2E0zD}4*cg!m= zlR1+*(%OuDn9VwNTwDy>zVq;A&!0{*l402%&`x&HNE zKmBEm|8~Bi*i&b~s?{R#YBo;DkmmPNWeVLT-hJkh-$;vVHD%M@Zfd<*$LL-!MTxsB zrd}Ywr-uZ8tL2!;<#NgEjCT4C)>el}DJjl0B-%MI11HekT`fN);!ogff6*@Fj~7#Y z+00QE1KZWrrJ#5ASm<0aOK&oLmkvBAl~Pn(%;~uzlk8(0Fz(6S_{Cf20~Ha)6Le#P z?u&hy-J;$bT7$61N9?lA|A0u_>fT)v=Zu7v4%?hf{j#LbGpdwt^CxhclCOs`H=!=KWg4C%+}P?#8$uPs*&L2r5Z zkg7{L!%AFJ^8KuDW+ziir~=>ayF-?hF`3*w$V}otpkZg<9pyFWg&waDKk_g1oTe)I zBR+81-XlA4qa8G@SbHDKyIM}kSkY9J(Z$K1T5?XtYP(dN<_y+J39^{0(YxTtm>&Bd zcH-2kjVDTCUf+<*EG;!n$K8A*;Bh#^*?IaO(~YRelJeSLT=KOWl0V{#wnvs<@}h9` z-ySZy60^TNVu}Amchc2Wa&8r5g{9r}5I(my$=D#>B8oXP)WiY1>kqA5lG+YyZ;(|z zE4|L})=*O>o6aBSA0z*w?SfMdo&PX1H-|3^lTtA9IUN)f6o279=CA`i{#Jyn-U=Dz z+Q{|B`R+{_OSIEyGy|+~$i{c(V?%ofE=oCRy|KS;-}g&W8yD9%8z`6ePHS}{nXXYk zw4XpAQ2IYMq`SGf>6ahZ!>tRN{yD=b0RHdk5h>^Lzb(HZ3+__;?!i&&sj{&44(@oD zhnw3EyfGGoQ8hp;`AA4m{x*ynA|?`=uojPlh4daLr1>wY%=VRfK|K}n~?;d_^9+>o81^SyQ%8&lyu)Yq@YBr3s%nXW6moZ=nC zBCK@a3Py;NBy1wqByPvmreLu)SmA}3NVsY}n1Y?(sNI_$W%eeJofP}**|Y6V^pZU) z`xKnZ#RTEPtb(?)Ieqe~*8QBE9jZ9;ep_2x|M5;c{;UQqRJh=#vJ-PG5*_6uyD0LB z(x3uxqw`xO%ThPuh%*fqcF)hBg6-)9PWPKkSE*W3f+tE1w%O)B5+;=f&kep>rBy2u z@{y;w4c5jDjgHo$)9ql1o^7nuL!PkcVgCB%5qGxP4l1$caTJ$4lA&{X#AtiLw!BjA zkLp(O$N0t&y@f*=2^2L42ZzAvYK<7Rk(QjAr|wOPKK552FJI28L22srhGDsL(9beDm|t6%@64 z6V4$Bx`Z|=9^dlF&S;{9^XF~->Rg`dP&_@~7u6aXA{NfEbBo6hQ0)ENT!+TTbA^r; z78W~jp6yS!*xGyVYsqs;fk@M^L=mz|^ZAAj8o`EAGS?jpmOt+$+2Nh*vXxH6X#)n& z3cN2tLC38>mLYJZoCeTq%Xd9U>3@)!{04lO(|Ay8ljQ=RujAcY-g%+PDscEgCPl5| z*}0n6a!&Ta4=WxX&u(mKxw|)9x|wu!HA1;XBitdzS2WpRldi4N$bg{V_QRvB(!nyD z(CL^%zkI(DFt2v6jOp#;*+00BzJJ1NN)g@ef4|D!@%+m#5txjH>~JX3jZwFHGulSw zj5vvR**b;zYz6l6>HI80XFa7mpEy?;7kwCTQ}Jnvkj3oQ zUW{qX?mhpzAK3Zbt;uzO#YX+JUbE?@OE64B1XOMJEa;**I(?m}Eu_w@KjU`?`qia8 zUeBYktt}2gp?uqk0X%#b*(Ye;{?&LWZiIMA~xb?H=0ydfe&<+g`zgeL|yrtGw z8XPcKmkZD3m&Lp=viyXhM7A-jdVN5rcF(!ufC*-@X)r~N&mF6QgBu{PH`Z^; zw5f+oMp07|0t|T4vS~ z^ZWKUxs+$;(c{7Y2LUQ;JRpD`oS3{xAgV%89wL!QjwIpiQyPsu`Jv3N(8rZNb(5fG ziM*ODul-%I|JZ?Pw)_)_eefeyi^z4=AIidYTq?+dUO9%mXsz$pZ~}|y{%FPnClJjs z>Zb>4kZ+L{^|sdB-BHtB8XTk6R~c2WL?}7Jr@{*!q|D6D4pc>}7SL>xcIoAnOdp{9 zY|}K~?_opaB(Q2_LMN{jMb4W4zH}Vc$^~xZO~*14Aw{TLYCi9|Jla{vIZE>SH*u+d zuKjj@y|y!p9%A>*({8LDS(7Ce%_;dmx`r~J8V++_bDM%HM3z%<&}(l5D;1IJ6V&1i zy`A+5-S+%atl)!;kx&1A&EnDg3jqOe)(s6)59FtE2qD|xwX#iTT_CQ|7Ey*_=To$u zhZ=uH2(e>7N~Q;6HS25{3(acP*Vk^#_iW2Y?>xs4hd_FZDGQfDY(x^6F4$-nNJD`` zzs6DoM!4;E`D!wzGlwbtV>A}?zGaLLz(cEVGx0jwxay~kLw3ve8F+Ij(NKGAY%EUK z{hxGR9ihch$5|{A+Lc`NMo)nh(Ht6I@t;KKu^Y0;`T*FzZLYBc5S2j)Y>uSk2HNl` z=c;CJqi{n}#?E)6yO}rt7JYw;qmaV3@J`)Nr-e~NA8x^B|L~z4gB<+T)m6xKmJmpD zT>&~Ik-+{!!@f8pU$-&*<1a8NHzoI&*8zg=3|W}z3}A(%T$cs%QBx*^O{CN5B{Pi& z6|kYiNM+OZ`>J1F8b&Z-PR>H`;y?O6+A2X`Dnb@LDeFjjV@Joy;EsV*!D)=4EDP{voLgyXFjpzNg*X_9``Rz$NyS%TK-8mPZ`cQ}d$p22G~Q*H}^j zO5@__i4w+hBl{?xNvr4Pvds9=>0-9Ca&Q0iG zbfjf4TkD#1(QD4%UgKg;*?!{j2IR?2t*x<{$w6D!uU|hjGUCxF`^9d*Yj9TI;od!R zVwgehu9Aa9{8eWlp8F{!9Huc3F#H#YGFr98a!hkywB#X)E$B@{ z1@lV?#iE4~s#jN$`g&Q+u~hzQt6A7jDVeHJvNGHG`E54_ zig@g%=H@$Fj%J*0f9f7M`lK@c59azWWNt7rMy;*L&ttGYh4iM&uhpT>%$zB^XnxF{ zX7LA=rs9FuVWS3EhZrEXN4>fq<%T)@!0HgUjAlowFJc8I>rq+PobISnj$B5l*IRk- z*(`?pd)M{z?OAS4e!9_%u(jJ&4=N%-qc|F_8o$k_4Ux9s-hTD@S(3WR++&RdelS_v zwJ%E;i#hrKhtKj9-~p#0bt#wzT~I&t%Pox*Vt!lrvJJS;!7%+|smy68)`y0MsuKwG zI6JD_0Pu@Cv+b#`ugM-;v~u~aL-D#>fEim;WtRSg`D{bOoG7fw5CNEKlnLd*(aenO z>}~a?bM{o3RlCWll*Izg+JntZLcDtVii%)^P$&$XZMM}3n)!&T1WTWfZ#U{tGe%$Z zZA%bIwV!_`z8h`D7=IMVzu3Ui7p_~!lokn$;hWzOxamEO;MCsUo=*~s+B$8nyeX*-kVgjV8padB;Lae9CQZ-Emg z83(k4hKv=o20dK<_Cj*Tp7h!T11%1_9y_2|y$I&=6sT_8c+&$A;&lMaO>kRRaex8; z@uhDya8GmTP^kvI>JQ7w$vO8{Z#tjLnqN&|g-OLQ*(3KbiJ2?Xol;NT4Fq6!>Nuryn%${p*#yR{?=Pw#7D>``j* zqCe)fI=rR@^i9MouMI1X$`h;9VONAxNribsDFHe1plnEDf!N=Y*TDq8B<=7(-7if?;OtkV4g<8i#e_~jVgyYf>Cfpsf;JU9Nq z5@xFKiYNc@ivJa_ygYo?!$au;CI_PBb1;0l{(VgM4lRAp%p0;dOSWI4#{D5S-VB8Z zd11*1CBHpdXY_6~Tc+psA41}=b-GLWs-swgkL4>Zfs4V1ecsw%OCjg@zi+Fzo1ttu zc=BY&7Mgcog`3KE-vA2#>8$poAJfA@U5OV7c$xOlET+mt13-rT1gtR5IKT__BvF48 zdNR<4UJ@a@;}H4N0Ve*fvaGyKaf6xr>~QlH-0kMy|z(9F>Inrvo6M@K@6 zXeQGrXy(k=In;=S{%QQhV;E=iZEI9NxeoqST%@dN_MrZ#Ns;)5I0Pt_SWX;VrkTzD z*`vN{_GOzTd7g}#45?FmZ?ooq>c!iDUG$ddUyBY|L*6iYAG;V#fU&-s_w zD|_Hpy_VE9-z)iXYLvO;VP`Z*GIFat?DgG$w@$BK!7 z-W#rExZ2gn@ft4 zARYjc0FGO5P1Y4Yq04|4r(~vt7PW=%x$4>ZT${n~ny@xHv+Pfo1Fba?6pHT#i-z-j z>z#yt>Y_aH9WY<#G)d%CKr7{{h^W8`o_+(s4UOM8_zC(z&M%-Vz#84#w_X4JHfdTx zfgXR-&_V*EpL{AOCtACAK7FHg0nY5eKgg+nFJHNza)qzR$&7`OFo%|ICKnw} zlKc@s(^0_K?{Mc^+Mj#(r3UB%k86Eg^R?<32uWL+pzd79uIGd^5*)srB7cN|t3Xix zV}kqTKQyJZm30^`5k8$+J@iX?enMvB}46(pW)ZMTqzO zBtz`iL?DJ6Yo~?YB+H^-6P<*wNk#*TyaR2Y-xqcWO9{&(@?noRDk z&rfgou{`42#{kk&_z`A zS1vt1Z+7|j{h;RK-R*Xbx9Xrx1S7%fEe0MfkHGag2AXFVcl2)J?Y+GKvv8SDyRqWU zl1Fnm$9FTn=MCWq=SHdZC>spMdn`A_Ye9Da?!DqvS~$dJP1c{(PIF`}w9pj&H647a zH(g1lwc7hym1&OLw6oR!5RN*kFooZOMimX| z7WE%pucPGpJErL{k@HH>b`b?3%SAN3hxrcfrsAFM?(X&uO@?3^lJ6ARG53G&e1L<3 z@|6#FLq`re*1u+Fd%WoIDjc|LBAV~R&-lDX0Q|pjGxrj~bWNOTF!vG-+Kt;iT63)^ z2(Iv_VKgCu4Q^jeQG95hapIUDPh2o$Krid+3+VE%V3yVAPlQYaTVcgv#XCqGMnb5x zH2!3!n1Q~buIGp|hS(!hT~M@1z9`Ohc#GIhFu_`{Z^HLrp63EDhzMxpAz^53H!3AL zshd7YlB83*_(ec`DBTP;QwRe}327rO*pS))9Zs;vj*~iIHN)W98aadhMAZ9kx;Svh zcBf=4P|O=l;FPbiQM3FZ&+!}@pyxOgKO3t2$<3`L0&zEY7#(WJIbJ*kz;%|8u+#N` zW8lCYb>+37@_+`V_OeyqZm)tFixACPVBUEE#;6Mm3-KW*-~#AQm45{@BOOG|p>cu+ zxnMk9{w?@1HNSi%bL&Z(mlYn5@0!3*^}e>Fc{wbNTxoW$A#IMA)+Pr=K7#5{Mgx}#@| zL$U^#sah2i!wAov>bu+;ua~d9egeik%EZZ+Xowr9=kWt*V2F*aUGJesnsF$OLLl)w z&^QZyW{J2oM7-%l5WCdDklY8RO@rJHLS6`!27K7wule}U$B$JY&_MGwx2_^Tv|@7L zU|c(&1if4xP}S^I(Y?bhQxScSPMzVNP^Bedz*6|Gz zGz5_50^)Z0orPKKS?sCpmZ*Ny^JwX(9MrV5v9VDO`grdU40V!{lHzpm)`-)qWtth- zAWI{|&rkLFcATT3p{OMVX#6f6x7sRLJ3f#z=n5sFWn>roV$aVjrU$f0Mlcx&gvJaN zJlGxzt2ncepl9bg?y40+7v6WGbZ&5AB(Hw0t$nm>&D{ZLkXSCSh&Y;==$dN7PP!0aq6|&m6TPP zyKMPoHi9~Iw}@q}JIE(1m0J!_AeU&W+$4oPxZN9q5~z2Hn5FY(vwa>%vj+-`<8e z-K+9@WDnlmUJW{wgO?qIVLO144>BIqa{I8M@gAVMK<*zpb;C)`5@9B4?GflaH;N0p zwfFUn7_}&~g)_PIg<*h)LE#*${$GDvlTYMLBSe5P6mQ6e1P)#j=nFJ87E1JtygV%! zT?XoVzQ2VGXzSqDY`Js_ZxmUn9K0PVE?{^Xj~eWd>W181$`40fsZbbZ&w%5h7h)zE z$E>>{0ywUQ9O&EX5HRqp!|R}vlM_;vRL5xGVcc#>f$>#;ckqN2`X1(%H#CbjuaI81 z-)Gcg0magu`nomi8J*AvNBg<)?T$Afp_qmnT+yJLofJS(LmD$*Kz?;2|AgQ&DTDhA z2G-brvTRe*C#{en#Qcx*N6vo*x1MrnnVzYeM*+rA)2fGbIo}DF_1$2 zrPuGe4PrA_kanOM!V03P&2mw~{>Xi$eXRMslQc~@tb;o*k`0@MAK~%f*`_eYtM^c8 zf+=%8v|~*cKBg-e`+JJ!E3q&oE^vm>;DNFS5em@Cv}jJSL}M(3xcW0iVfVgL-HbfN zuGs(FSnCZrEwdrtjWn+=B++Q`dK|URhyuZg5*$UE}RM_ z!n@FkhuOJriu^|MA@kdVz^09{=v&pBV&92umoKLRB)6|;s(~gTGzQv88a!X}MVP@Y z7vzmYXj?0)LJ#$1abMiJV%41|$nT%JAFYT|Ns)6RPTjXz@u8CjA&b^6=y+ABLNWn2 za2T7Dfk5KaW3d)d%5^(vojZHDv-7H7qxSBS2~|s^2)ht$Q(RaVOBaT- zC6n`J5t}s8U0Q%875Q>vkmhj-jS77&B+d}=Qp83GB*w}N*N%cl9{J*&~yrFElbfl)#b&ZVL?Wj#dI^??1zh(uT`1kFIRnw zeoZOTy7}B7V6}7k6lqQM6aKSG77JqE2Qs6EQ3%hm-^RqdmKd^guSHI2i!)fjH19p8oLaYQc2Ey5K3sR9~frB@-(a zw2QmdDwVwg1gBXX5ncmZjVjC=vWdRJiQUtYpeA-%*@ zM8K(%Uid~uVQ+psrv04}cd`$q9f(z=o`GOucCM(g!vk0qbkNjznWTkG)LVp2Jsg`) z_W|iz(UQDql#W16Xp+Ye1u;P!x`f0A(PnNJ?@(lyJ3xWgSgS_2I;o{^{`6_l2N{y# zeR=QvzMfj%_LL@Mt5(P0b8zs_5w*3XAekF5@jM|9DsflH#+H#GeFZL+k?njI$l2%% z&3QYC6}8T*qE#k52c9QUyO}ivB_7woSOL!0<31XBmR@bV2A+HSsbincqE@AfAT)I>6Siyx0 z7gj$P?7Q*pz%`BJD&(DzHFCII3zd)yFBrdq!3VC&Ic7O%0S^+8Th*cNNR2q!6~Tp3 zA4E_s(2!q}larA*fZX=s+U~w6G8$R}#o3j*oACbeMuhtm8*x1clGoV)W(q_~=lL=z zr0PQS<7*X7_9YOqw2bdpuVm7|z0?%ut0HX7f_mY>hVEo}a5&V6Xiwoc#?mje%X@c1 ze}Veb%gchvaIEKiWmVfqIYGWP=cGZ8J^wz~wZ9T8@*Zmq=<>5gx?#}5VL^?QSwaRN z(MEMWFj|M;?wM<}>XZRPYvR8uOy@d}@(s=deQR;_MKfX0PG`T4h*`e^&&2Z*m5qGv zb8o%_oI^QY4LIYvNxiukYeB_G%)|(2xa)x#7=A1a>@}L#5>IO(#^b?Y5Lk4ih6L%P z@?^v{FpS~(o)`G*vMD7_k6}234iW{s^&Ek)IhJFW3srj}aydwt)=o~WE%jGlGMgFv zVusRW0S{$aP#-V9DNz!ADQAB;I3xyEpSZs$oJ9u#alN_v!Gy&GlAuMApASFGMzrRJ z?6J#0Q! zlpi!ZtX7>z5{|^s-O8ufHFI-w>}U(+>fz?>CKf9NC=gLN;w0DjW9>E8_n{!wMLBDX zHD0#b zd@23F#+aakjD|g~GY!%Oq7{JTC8v7~9FZ~))f(@Ty;{1u9QezH$Jm3{(EgBUF^ATD z0Je+J0D@1ifbeycQ%ie+heuQ{Z@YFc2(fDK?F|Ptz&!xebZ*tXK5gg6BlxUXop&Q6 zF^q0Vn*dcNVr9iFD8y_X16{|WuOo$Zdq;wXe7Tu?*Zt{ekep6{PI}adSaO zg^)kT23}GNvuEo053e5mSn!aW=82>osP01LK!Sb__dCzIPG6gGpu+8ZM>;WZ90aLF zk?CM~l&_(MzB8CR+6kpIZ=scutcEz=&U5WgQHcWr5-Y@TL7Xkc`^|-BM_Mz{xCKbg zSppJdplT0J2apye@B#}f;R;{YYQQ*5cr)yapc+M+ z1E@@L5-+qCf^Yf0UTeF08~lw$2Z51<_yRh*+Bh8#o6N6Ov%b*2eD{3i`haHIkYN#<1|I$&8)aFVfxl|+Ql(=XA zkn^Ve+8Pg;y;ts?Jx!jUER#Wr0?qiKU{jbpdMecs)X9Z?k;XgWb&=8sqI&L_J7z3|u0%ma#fbD0O9(ii=pdrfoJ2*X4TBgUw2=`51h9-ENKsI+ zf~YiUmOw<5rc$It0SPq`0)&!s)`Ml{+h5sxpFd}xeSQA$O~PBAvev!IeZLVqcUa7u ztvDNl!OYucN%{$cnTE$;raYTD1AckuC1Z)fEX8aiZQkvd*xwRz{K9Zi*VshWD<=W> zuCFB7S85PC)S zU(HChe4AEV+a|XFyZYwJQJK=+tIwq#*(jR%dtYE@Y)jvH%&f*`CUoLpz`fyp6@7gs zV}}I?x#dmV#xeaVFrqV8LTtOH!v~DKJYgyvEdRiv-_(toJN zA}v4Pzu_T`-?~LRei{Q=x#Rk6Yz9#>5bNFITW@~!=+Qso;@GhvqIQE{K0H|&q|00a zb{`t`EPS34<=t(&upM+d{c7Ayj^(y8hDTFQX+sv3DjpvmcxUfY`tkYc_TmX%RQY*L z3s+a}%3!-h?Jrjs`U_I8T{~FanC)i&?dtIGa6i!iyDCqdTO#%d9Qzc<6&zas5;@(v z*-Couj0;-!WiKyir9F7C;m03;Ouc@61?{p9{=+lN)nsMUfQ|55pmzH2;KrMJlqJ{J zUbGj-VyhO%iDOr;S{31tfg96P&A*;iEhlqr%TI*1>Z@CK{q)lhnl{PGpE5(|Y=%Wy z>TA|gV4NYAliE7#@CrDJgBzmXTS+uB`&*nPoY~^_n^rGhj1LG1puD<7aK5`?1sdB= z7R=Bg%RyayLPA2@Q&}~W_7ODD6vR$Ett?dtQ){V0UduqOmG(UPd^I!2t`+AolcT`m zF}2$#=gFEGdVJy6vzNAfod(8I|6iO|+s-O6QDR@@==ODw-Mm+Ar7;Bo;VnFQQ^4`c zLZkW8f)HY#VgA6WZ?<$T1~;Yq>~UtpqocM=1sx68AWC~#blQ;J`u8kGu#u4w<>|@k z1fR}VQ*!y75+W=hMKn6F%idnTDc4K8diE3yV*!5Y_SwFNSzs_MhPnn>^e&6aPR+M0ZEXe1vtX(i>pgz_c=jWRKdhOSu@nZDUntnIapOjkudnah zckfCsdlf5SvGvY$5BJ6gD})4x9QTOEhprYR*7$I5+Kn3;H@071BItY_we|G;=$DUQ z{D7DAj1IJWe|Yj+LlIpVimQ3^W?_}tgnOcq?`m2T{HguPZ!)L$YG5$S$eR)tZDrof z%#7uxgqW$T>v=Zgva_?X*sQ~^6OJ4`S{`I=Wo2bDz*<;SQ-i&J{d!Gnt11>-adBflarID*-yu83PHv|U@>?+-iw19uvqWW&mTuyg~jq% ztgM_W6U>6FaXtdhUa75Jl{Ce>jTOgVzTL zZE3M)kv%;#xWy~IM*he4S*57F0hUw?Xn~+71`kJPPC^O4lXRo-0 z%K}8265@Vfq_1({rB){L5yumahq6MX5(dNIcvp2OE-PTTCy!q|(Uwf-Mby>RF&KV; z7-_}DW-+R!idbyO=yNp|W0wXwvD2N<_Tg#RE+;3I0vdl^^=%BMtLl*A8P#p2jQ*xv z_S;*w?GLNWqJkzy5PG!(Fx1r5Em^3!gURFdU02lFbC+@M+_~mMxRk)bZOD}D?Cb(1 zV_YnD;H|Aq>9bRF@akk>qxCzT8_v}%n|vrmA{xs&`sT*edowYiZz8bpK<69Y zQn8Tz`>chjsj2G06HS~>Pp_j#BVN9Ii59O=GTuv|@tX5S-n;qmGr^8-+_=%)q@ptE z|2Oa5i&pZ?Th{8&O}b>_|7$ai6NGnGl8L~EWFM-yh~R-ABAq~>2Bx*k#YL^Zzdt{B z!bVDzPQ`3`fc#-g(cx*O-ypy;cA<38UD+YH{(d?)E$6Rpd&cvtZ)2`qo&;2g4c!`F z!DiEAln){A{s*U>QB8NI>+LY33-6~3wIz?Zr6}Ai^+iu_FFD4*M@xThcq6ErbIN(c ztnYw@FUNTgb=B<6ao@Ll_imEEzdtgh^EPINZT+xE+PClAu@DW+-SPca%c-m+TC2j^ zwQFnMy<3dMdU$vc{0BQ=|JaNiO|qlGcWhd&fbV=2zfik)v@NvheN&TaAO==Bt|Eu>TMzWT+%?s{-C*t=qS6r$XG>zkh#fdb%sit*GJK8g!pM$lP0S z!oxa#!;1Y54pgZ`>{?g?K;j%c_6e-AFN=*}4vR%QQbm*ol1T2&d4ywbZg|Q8X2XL+ zR<9BbbsiTKw0D%BM_{P)O!m3vpSZ4lARl&j@1rBT{6}A-m`)t(JExo(%VQN+uIIhA%EG&wv ztLqx4#~T%ul&IjMXyNx31q|Q3J4{*rec(S4Qt#Z+(sOS(V=TB@m7wcJ8E7l@{`}!7 zPT$j!Hy1%!LrF*ogh1AzIH!vRcah_{Mq^7xOSLK8wb%3OBlbQ%ehcTV`e&3~O+L6G z{^sr5k+N!m>xCyTqy&3t4u_3Bpv4HSdKR*v=FphY5L{Fcygyi7hV4Y|{pxr8q zT&xB8#_}ETZ7F%9zCQbXwi`HYdn_>qd@oNbnWz$e%s=wyo^~8koV+=ldTrZz%Cp~R z?Q(EXiZvTQ!gG(v$;rtZ@3}(-l&yLDb`iK47F$zW`@@9`7Z62QrT|xKbP#Pv(Cx3Z(eqdeXBk>`g~QZ zXL+%i_BDkFl+EB0;hx#{8cmz#zTjdH_h`3HFwiJv|EZ~Nv@ z)*ShD%s7`|!@3M7B?xH7y+N?BZ3tH(YQ~HTI^3Rz&&!vp8lP|v9BFh7YZYb`@FIPC z>zvN`qQvt{vT%@@C#W<|gVYY9xVn1ky?bjlAVD)e(TA%UAuHm8r4t+rA0HpEb6?-m znly{5fRf_Lkn9pP{Eks~DHaj|1dhD^n3xy{m0_(VV1+2AL!49|&i?D8F6p@LC>(8z zlJRu&@~SG0kRyuLD=I1iDr7Ja@M<^yquk-2U;>w^J2WyvhKN}R)`Z2%R5DRQVx3}U z3a;M%@wA#*Z#*{MT0_`g1wSQ3{6+9jbZ%UUANnH4F$Br5D#av~h`2 zfABkVTU%RRuX11SKIHy?{K0w^uY=qK-8|2my4%hU0m7Pn50(RdfIZh(s6_)>xv``g zVOaclcUKn!`~Y1g+Z+t8cZnDhY<+3{GMFU=QpD-|mtiniNG-OVBT)L^XA=&+`~&%p zctV&mAc1rYg;cn07F#t6`4fp06cl746$!9s#n%gSa`e<^luep5JRq&0z<5WpiGq%6 zr3oG|E)c4VUAuM>4s1v1jkU(Y#fujYu!#~#Xp{Xr)8YC?6llm z{UzGY%0f;^2#JKM4!{h^exaDywST{&?0jVggVCE=V&)vseSKL;a%S=P>L0DFeB64Y zu;78aoSjwS0KiE3`0P}El>jZ_lg349=FHJMRCbKHlarHZyuQQ?Pkwb-U%T#}gFI}8 zGrd3i=FOW7$h8(9xsJgwP?RnS{RDeJsYx|Q_=?8;`MDedRTMTRS2F2f)r%uuUc?C*vn>>siwZH=WWKV&0!VgL7vNEr z-JItwv!f)xGr^5gpW*apuG*7%6!6p!27nUZy1V-p0`NQU-m@opxcIWZR}44-N=r8C z>6Kj~P}Lz^b@lZzuUo~DsZ{E#WK(10n|JIp&8Q9ldlAO`LLK1=7iPml*D8e+>0pI6 z5l>#T_x@7J=hMUv9x5}N= zxDtB^`H`@d9#$N(oW*#PsER+qZ&eu{9+u%f^c!gN6^b>05efnx9kp?YVH(K5P{QopUiPUH*Tv(-fUQGzIhkJO zR~XG#F*;s{8;Eidsb5^@lt5n-2mjkM4aBb)?d;f;;a7}{7cWi;d5UT>@7KEZB-UpN zYo|*U}(yk>=mhhHoHl7dzasy@;|DIuCrcBv*2 zZxOR7a9-J>iNX@WyOV52Q(4HJ58ubWA>JB1yfjSC>=Jz$+lDCKh|sA!Jtc<0fO$2i zwX+m#sYRP!b#@8f6nJ zi(2IIJCckRpV!#_vgj}iLLn9ESyvY0^<{mFty{MOw3>spcXoFAeSRv7r}z;lH#50i zHED#yuP!yWzmdnA0S2tp(uyLAyKPV^Qs?0Hy67>oQ$Z zhH5dGQLVV6n*x^m$Cst21S`IN{hDyJ_S&WOKW}+kS62olLV~daviXeS@g6iAz`jqx zPd)!}YAnlQn9@g3LFefE&d!^yLSrF+1uI9z!rZ;ji-RU8kPt!cE7gs@=a5_W=;#}i zz3s_#R{-S+m#fBKs9A68pU#pKY51o!tk!DHzAXFO8VWs}TIw6%Eynj`wEz0ko)QP}0?)@1R)SUq2Co`X3qNK?1OPszz z;M_$E2^1W3qKKueh=o*?#X=}`$n|_(#0Pub2<1Q7*T~p-PVo$CWKe5UR`v%%Th0Jy z^<*1Brj*1qI1Qx(86Jju2I}f&V;$#F*@Oz}>COt6C#4mK6ww?Lk<&p@OL^j<-*Vg* zDx9oMT2OT|QB$c+IY!y=2Wb67L2xIkt3y*t8NeqJ60ZACv}7=OeqR^rIXIFcpgi&+ zlq0z&```HMN`7gJ{mc6Ef1P#x(@OiF%#^hrNsnOi|pVs`dEn8cVoqcKX~u}GNG!XASl5KcFSO{ggV}Ms{izRvs%j8 z{NXa0i3_Lm@--o7EHO1T9gs}$E%xn;f0Ky8%(i4+X*jNGwuqkV_0mnT*Ok0&Tlp11 zU%~}{k4$lz5PHB*?nhvsS3}c*I96_xdiU;{W53v>`YqzyQ|7+Oa4Mic0QDBO(4wGVovuOtx*3GIEiEmmyE7r=%R^H=G8Ff8 zEJ5GP87z3NQNfA+mu_^*v=g+!0+djclrKUNO zD2`1a@~y)pJNn;Wq5-?nXjJl<@a&Kx81z}qOob_!oqm*Q;s_`&yYb|XZP2+} zX+k(DVa+6*90DQ&5f%UJTj(5Ar(_*_cYCudDp;J=S80%|Q*g`3XUt$%e%XxDHeeHG zBmvX1Bp~A2CEVr^%I~<%5pD&E{Ga6DW@?m{*8@8Exp#SUjxI_t{}E z&(+DW6Envb;#o6mEnu$U=FBUX7=OJ{6mByCi|?{wF2Gx=0ndV4LO2Of_vf_MuL0~J zp(kx&E)4>lIIx#BGcw|Dh6_f&@b3pgdMqA{D`AcaxN=4lBmEU%Zr>MU@`_ZygCkPI zn6)KZnMWU|s!uLmf39d{X1{Ms2?>oz;m;8*isi+*L_C-BI9y$#w2nrpBnHx|8^>rN zDfJ^py_%7*rK=E7eVH_)jc^V}c#r?SVqYd2c^bCsiRI*md>sP=E@b}RA{3nmN|qw zlqZ$Ns3^hdC@g}W0NFw5R#@Z%P|Esrb$3U&rUdCh0d}Fl141-nmZoOR#+=hcCd6o4 z1`E0V2MQ^<6-b~;Z6!t)RT&!Qhu?)nWjJ9igDGcbn-y?nmk6Ii5Iq8|yVbN1% z`p4_=sLYJj+J4N24VjNVOmu|lzruZe)Lc}lL+2EDH`>*>shH`ua|tKgswc)Y{iUgT zv}W3AGo94Va}ZqlveLbuT||yI&VJf3FYYKZyXWgeBqGE-UX7cAnZANtZ2>zl>7Te+ zkdUI)f`%}ZNwTjX513uF5h*}6r<`RmYE=K++AsF01|B)-xUhp?+!BC>LPC%;1;31p zVV;Bz#ytPEL%>q58&yQfE|9!+R~|xL0I79xBOt@yT##6rb=_8AglXL4Q+|d(;pOo= zgLa-D6Bzs7%g3FZ$#JJl0{|eTA}9zw3oJ>cItN!1Jj^N0NwAucgrJ)rmarnu>0JF3 z%l;K1ItQ6J$TmI&?R-~S0s)tQeNoTfoB!*ft8oVE|KTB_ zsc!_lf|??aiTkeHG`Db3DPPw99XGp(=h4*OP<3OG=n9#+QZ>omMajh`Nw05gc=W+C zVYy4JHXs`Ovcy~DcU5f$;iU3k_v1=epp)I@`YA6eOC}~R3FJ5`$AcyJ_#HtzeTLZ7 zIl(*eB{#+XBZ z{jG8NvSQ1~Lvj2@XF197@-wczCZlgwjCuIH;m?sMuOcs!`?^iIv;Kn4Qqh<|R>eRK zF5cx{i^Bs0vc5ww1S#lXurfF-*e}8e}- zX{sy#1R>S(YkK*om0qhpl5*jfp`0c`@H3)4^97CWBuD&pit4I!sC-=}WV=WPQwI1eI120R4XJUam@CmLHiapO?E{VZK|e8Z@incQrD(sQVdV9Kdm60&Q?}{X zMVNgT`Z%aZTiEHiY$>Ndn{(XfX-FtwAW|jx_Y>tzhpNv^PyrxYCpzS9@60Z?iNuyJ z!~+~%te5!o-piezZ_^skdvA6NZP8@V{YN>YJVLG(axrr{lYB!yO28oi5*?p*?0{yJQ8yOj%FUo0jHAlJ= z3k*UbiaRt50;QaprvDA(XU?y z@jrE-6dYp71>CCGSqn8tsL9n@M1PyJ_RoDlTW}FA&-V?P{02WyJE~5e`y65;rRA|N zYHw!OJ4Z!EMjAkK;-q7q1#cosn zMk07R6#99a2%CNWdslyJXG>%{ zVk)FnC#9Ht!HsyVt(0Wz!!o@gH&nmh~cK@#*^ ziL?a%c;eMK5f081G^x+e!gA@T*PLRa*--UX0KSl5!D~3k1#(LOUjhZUrH-GuFM6c| zaE^@xh%TrR^8-c_Px8-ue1hyKXz*4y2i1-3tE53M#M2>{^PZ2W>3AL2`FZ`C#IbF6 zfuw>dWjKD3=se2FSpwt)j#}*hr4xu4H&g?5_4K@K(fiuwo&xeD45oVp>@etl762O* z17x3e;pZ)gozytLYUly{edz@j<7ep1#6o~H2MP^QN?<^!Ed`a}TEfXhknn)|qj4W6 z_m_{)5V`qGD-tA!o50SD2dXMg3DF`Wk}tDx@a0Xf0%*LLP4qn!wC(_wA2cJ(XOZE0 z`+HY7RSM|`fbmHyRIfb@6kdeXUA1TL&jz5{Ya8RHR27**hWyY>n#AXRY|DbkcQYfy zj4K`wuA48Ea0j9PI?*_fyN$Wj^`@E#wY#9E)+kJ6Kzd&agyav>LPx((pFRzgYo<7! z@rc4+dpZ^<2aI4DP<|Hv=GV3>QduB~!U3E6qNt^&#=FkSrF3Taot=a>3*z{$!U@lh zQjzYpc--b4Km|bu-(bm_y$kFez0F@G8S4w@{KSdJLJb#%((7QsWezJ^zZHqdAcqIq z2N-SddMBDWG-QFMBZHa@oPk6dnKkj7tSSR2$uiKk1eUq1oFx08H7Daq2USvPVWA1) z>X4KPO$6C55RJlPPhw35EkSBSf^J`Pkgz3RCLzrtwyY|6>NnhbFs z@D24vvJRG?GXRCzDf&*sJLXYKO0UN`E20sC{L_z{L`#J`gI*^MM0%~jhcOt-gt_Rn z+je)_E;@Kdl$DhsH4BeZBGnd_jJ@_kge|~A>Z3;+L8KGaY&2d{1Oy$@dBDHD4-Rfa zq823PxU9DpJZ|xu8{4CRL2c#|ouom5+{&adUKkb&A^`?aEEXUILK2z$VUV5{fNJA% zfeWVzq?OTHnS~o@5e>YS0xC>H#(8htaYHfv12n>!h}{N02|XYgx}FT2$j}Y(zo4Z; zwH;^y=Zy~pJ{*q4W)_X?M}2+^3-&&~euLoCfvPBw;CKUbTK2~(TSPOdhKL3jINYr8 zfMnR>C_|r464055=0@#pU=E|uNKlce-~7u~k_dDGph9IL#ptem`xJb*mC?|iblsbB zy6r9K0zl*B-QAQBLzK92sME}%v`;8Hg`;qR3Rs%Xu0 z-Rcm3gm_3OlggvmNKMowy5vXM*^>rgOydEm1qmYC zx84b4ib!V(P(!BCXwYlkfOMOP{3nq>jbi~a2c+i!`$d*&Hr|ysDf8Qj6i+moP{Hjn zY^9GY*<|>wEm9ke0uKVZ1W?dK01;~NYlkJ!AIPWxvw)h{4jHRJW&=MWLIv$M^7IA} zGc^OHUena11k>dK*B$rUB1`Fkoh~jZ#_Jmaba?WES4VOoQ$$J$yj$7u*X6*D zdRJC$9SG>Tl}>s2$EtklBV@fo{@6&97aL@~>Xa@j8?{mqSFBE-@mg3S6+?)KM9exs zy|P)L0WjG}q#}ryt@4_4(A4eiKgr;q!QSH!| zk7Y2xXpD5GRzhhCfY}==^LxEZh$(HxRw)js%!>t8h<5^~6P}P-8S;Q^a4hxo^o&8) zFDwRCEgPg?>gsI(*G!=9A7*q9;k@5$*Z62xAMGz%+8l#GWs_A zbACgy&AsKZ?hTt1)szs4KhG>oklLAP?xj>$cQsJVXvGV#?+m=DA!vl(y`~1Dj&#lPvY!j;ZeebDVTJofFq zLO_B%88Z$nQ018aN@p9>;oabj+*VKMcx}I|XHH^)5vhXip{mI1{^TA{sksGl7kVe{ zV7UsPb?5+Q`8dMcte>Sg0>ss3Zwv5mMBE_MDa+~vfs?9@$pDGhpJYrU1A>vDxuwXO z`Rn+OTfLKlkl{fwl_YiRnkZ>$Y*es{TNe%S;gTu+1nM{=!XDcwb5)XVS3F$jknhsd zS(Ty&;&8AF2n|T=>>(J!p@`J17YvGDGAKt;V1#gHon)k&0bvlB^}YucNN+1FUS)fO zWh!i5h{ayk^N2*nI`}db#D+V3wa-XO7#^*KhDe1DQka^C1{}4F8NtwTd3aUYl+L#m zbJhXSf{~~L<1@oCT&H2PkQ!@xqHd|)TP`uk#Wct?tUnA=DntAcN6>ygkHjJng!UI; zj(&LXFWXK@I5H@mX=F;CJ3J8Rvv&WZl@Ql}RC0f^56cY* z?vai_cp-{D%2kc4-x5<<2daF)Iz0i7=Z)sUZOTBjE*p)+3hkj)!qN8F6oFu8VKO-D z6rw%%^=0{{9FHgl1CUl7;Wc)vn(;*-mw%Iy{k5r!J^|t+h5P-8l>O$KJEVptu#xCx z4+VAtN@9{eE+l+z*vkwRXp+yoK{_@0b+3wwARR$McgDw329gV89q+Df&JKqCQ`tyH z4h$3o6&{XiWdtQ42m>wI0C+hIRDufFt!xIUTIY=tO~rQh_9=ozm6;_HBTo=PH2dCP zeusbMN?ICz9jp-2h>{L!Hz`EpvfS!30M^SxW$KXFg4PqjQJCctIAAW~(MqB~*l$QH z0jNXz@G~jWp`hWR;kh|-$-#$N(7%P~frNSaw&wT;oG_>vK=Rtx_;B+56wv>t3{U4+ z#z_c>Mp676wb#z>odV&ibkf}n0B5UG&7&xvUS7xw7LOx<7K=>l1-8;$S-P{Ru_{>a z1GgQzx=Vo7l%b$q0x6nnq5^t{rW9pz9r0Lk$PEs3bh#pvMVTMV7*}IdWTUWECIag< zu~ft^2HDNuMlwS#OONg-#;TU>mjVTWAg(12T=sJ1L9m6m~L88 zk*WFvn=Vj-(@1l*|6bYJ?CYDZHq-o|+{V>fTBifE`&`65_W2%(5*Z34hhXEE=%%6E zWcs>bVFBlpnJ4r(P;^Y+krau}MARr7RM-ky_8Cl2RwA{(F)t6Fd-&Wt+Ro}PD*0DV zx3egvk?18G=msa+GrNp`$$)SJT_JPQNN5hf1dwnH3I5unw2K)afi@9_EYXR#ZiXID zemxV{CrIIa*(!LYLSuWvAN1F!v)$^E=4?_x3U6Di0qebN?BELH%g0Ts?jbwhdm%iAEwT5=#vdgyuu# z>1uACfH{y=Ah9%rNd&;oY)GM>3f3fQLS4jG3o!vgax!y<1pE@vioCb4KmJPzRH809 z5TY?;uNyjiGY|+tI$a7YRy8^WJCK=q$r0X#K)x;JBq3=elo6;{gQB7tk~JhNfjMPC z9hNuvQVV5IlTt3BOw_?)srg+H=Yla&0V4+>xneix`?SAz%QWRf4r97LUe9Ac$aUAC zcTbRls7)M@>e}tuQ`YnD4i!?2fw&UU z3iSuFEuaMP7QEI+>PRd|)6q*WkjK0T+K!~z)(IQSQ)IU1OD4KYL=`10031})ApJ2a zbKspbHdL6hL6wi;WtB7tTdh#vY$g_am9$;H6~Y9R*onm9W}t=8;pxBqmdGPhMhY|t zAH#P;wo`9%^J9q;0~8e?ZKoQPkubYo_1pj_{75ID1|6lL(N{IzyS4;<~*4Z$0 O%r^5Kq>L>GPW~T%>w)k9 literal 0 HcmV?d00001 diff --git a/resources/img/blog/sustainable-scala/c-java-scala-idiomatic-2.png b/resources/img/blog/sustainable-scala/c-java-scala-idiomatic-2.png new file mode 100644 index 0000000000000000000000000000000000000000..34d0f53c38a300d2766bf8aa6705f2cda564a63d GIT binary patch literal 17886 zcmeIac{tQ-7&ks`I1=V)nJCIA$tfmEi={=QDQiM0OPs8s#jZgqrWz@flBFcFE3z|^ zI1xgYY*Qr5Sh9>|7~cCCZKrd7%OCH1z3+Qn$91mGnEB50eZJ3g-=F()-}mQnRa;YS z39m3O27_5bI-q(OgIS2jVCEI^aKSru4hs%oFl#U*)jdaC!}?miw2!#V3{Fl}>9?w6 z*f8`f+GrUWiAj?d1!+O2TUqsQ>RrZSoEdFBrm}mlU&1Zib8}6*z(Sqh{jIlFuN7Rq z)k5CgTz0+0Mnd)7n-h59_JD;!Hz$IySE(xQ+I-hcM-rx{o8)WmZd4Kge zT%lyjrUt6oOza-55_1}_2)91L> zUcv-Id+}8v*7Qgfw^Bt#MU25p{xuvAFT{xZW1XvHb`bMMDt8S}Uhs*?$=O+(z{f4f zF>X^#F{OLQYJ35!SGpo}>!GJlpB_AL;O%0Wya$IuHoteYGhHzU1AN{%tdgX8arGm$ zt z6=TFkdJ31-c~{I~jV#7Ybu{c6*3Qmu*i~_OioMNbfg<0}-+x7kiCOQaDC*?w+;m~d z7g;oCoJD+meEO;KJDz?t+`QeNDA?-r8;PT%qZ`(*_Z3K(zJeZH_RZ3zOaJN^8r}8$ z`STb9EXMOJx^7qwKRhz>+->CZRHclJOhbUm432%h#5!-BjEqAxX{dkt!9jQF#T0`^KlXdvor&AB*pcFpy+7P>f|IXFoQa zG*=xK^ITm$oU!>0fh>c;5ay?@MA1cIYEcPKt{-k*;SvhgJ0C4%)=I)9_4JI;NL54AT$hlUFKuimA9ad+X{(D@kRQnQ7G`QFm->>gPBOwU+< zbB<$Apk~xU(s+GgdXxq~4yMvuBbp82s{Y4_9ql;ZCf0G;`{0ZMF-oN6&Ww1v}2O z0zd6ZtEsKk)73Q(Z>X;?k>z_So1wWzaAMN2+^K_LR#EJwz?wf@vFKRIppfs$y8^TA za;&3Se~v!dSHK^$eKnq6RPo8(yEw4={?^=v7~6TdSo}b>33a>IOkPb*jpL`kZYg)U zI6H5FfvHKgb#=^?wanw`DNX#a+U_y1Kf0T3m8+{hNDo>qs7BeLC*$IqS6|5@GDETerS{W}M}NI~&0Lic(ax zceSGH+qc5=Fhu!p`x4dVi@Oybo$JmHdgJo-+rqX6j~zR9us-^U zjrM2KZN~cE2S$S_X12K>lCyZDZEPHY_WsC`Kg-=e@+081CsF~A&McZkIwvQmoz8uC zo!mdaxyKqVm#M3%i6WSnJbC(5C-5EoND@!C=IDuRJN-5xr69hn>>#OTg~^47eSN1H z#}6n^^~srC=3wU!7em;$YL~Nm(0YxUx ~6O)vu=B4p*aik?nmI$kO<~cnniP5+Z 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 literal 0 HcmV?d00001 diff --git a/resources/img/blog/sustainable-scala/c-java-scala-js-python-1.png b/resources/img/blog/sustainable-scala/c-java-scala-js-python-1.png new file mode 100644 index 0000000000000000000000000000000000000000..4038313b54de8078d137224606a747419399fa7c GIT binary patch literal 15796 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 literal 0 HcmV?d00001 diff --git a/resources/img/blog/sustainable-scala/c-java-scala-js-python-2.png b/resources/img/blog/sustainable-scala/c-java-scala-js-python-2.png new file mode 100644 index 0000000000000000000000000000000000000000..89b2210d9d3c32f1fb63fce3997b10805105feb6 GIT binary patch literal 17406 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 azALrLzf$>l@Ms*eIhbpTvKd$IJo-QICxM0l literal 0 HcmV?d00001