From 22a4e768902c5243c9027308965677f1e05418a1 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 8 Jan 2022 22:11:44 +0100 Subject: [PATCH] Fixed #662 - new chart: Income/Expenditures per year per categories --- .../budgetmaster/charts/DefaultCharts.java | 7 +- ...comesAndExpendituresPerYearByCategories.js | 205 ++++++++++++++++++ .../resources/languages/base_de.properties | 2 + .../resources/languages/base_en.properties | 2 + ...omesAndExpendituresPerYearByCategories.png | Bin 0 -> 30843 bytes 5 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js create mode 100644 src/main/resources/static/images/charts/incomesAndExpendituresPerYearByCategories.png diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java index 96b5e1ec2..0312b0d15 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java +++ b/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java @@ -50,6 +50,10 @@ public class DefaultCharts getChartFromFile("charts/IncomesAndExpendituresPerYearBar.js"), ChartType.DEFAULT, 6, ChartDisplayType.BAR, ChartGroupType.YEAR, "incomesAndExpendituresPerYearBar.png"); + private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BY_CATEGORIES = new Chart("charts.default.incomesAndExpendituresPerYearByCategories", + getChartFromFile("charts/IncomesAndExpendituresPerYearByCategories.js"), + ChartType.DEFAULT, 2, ChartDisplayType.BAR, ChartGroupType.YEAR, "incomesAndExpendituresPerYearByCategories.png"); + private DefaultCharts() { } @@ -65,6 +69,7 @@ public class DefaultCharts charts.add(CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_BY_CATEGORIES); charts.add(CHART_REST_PER_MONTH); charts.add(CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BAR); + charts.add(CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BY_CATEGORIES); return charts; } @@ -83,7 +88,7 @@ public class DefaultCharts } catch(IOException e) { - e.printStackTrace(); + LOGGER.error("Error getting chart from file", e); } return ""; diff --git a/src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js b/src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js new file mode 100644 index 000000000..4a8b55dcc --- /dev/null +++ b/src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js @@ -0,0 +1,205 @@ +/* This list will be dynamically filled with all the transactions between + * the start and and date you select on the "Show Chart" page + * and filtered according to your specified filter. + * An example entry for this list and tutorial about how to create custom charts ca be found in the BudgetMaster wiki: + * https://github.com/deadlocker8/BudgetMaster/wiki/How-to-create-custom-charts + */ +var transactionData = []; + +// Note: All variables starting with "localized" are only available inside default charts. + +transactionData = transactionData.reverse(); + +moment.locale('de'); + +const NAME = 0; +const COLOR = 1; +const INCOME = 2; +const EXPENDITURE = 3; + +var categoryNames = []; +var categoryColors = []; + +for(var i = 0; i < transactionData.length; i++) +{ + var currentTransaction = transactionData[i]; + if(!categoryNames.includes(currentTransaction.category.name)) + { + categoryNames.push(currentTransaction.category.name); + categoryColors.push(currentTransaction.category.color); + } +} + +var dates = []; +var values = []; + +for(var i = 0; i < transactionData.length; i++) +{ + var transaction = transactionData[i]; + + var date = moment(transaction.date).startOf('year').format('YYYY'); + if(!dates.includes(date)) + { + dates.push(date); + values.push([ + categoryNames, // NAME + categoryColors, // COLOR + new Array(categoryNames.length).fill(0), // INCOME + new Array(categoryNames.length).fill(0) // EXPENDITURE + ]); + } + + // determine index of category name in list + var lastIndex = values.length - 1; + + var categoryName = transaction.category.name; + // create new category if not already in dict + if(!values[lastIndex][NAME].includes(categoryName)) + { + values[lastIndex][NAME].push(categoryName); + values[lastIndex][COLOR].push(transaction.category.color); + values[lastIndex][INCOME].push(0); + values[lastIndex][EXPENDITURE].push(0); + } + + // determine index of category in current last values + var index = values[lastIndex][NAME].indexOf(categoryName); + + // add to income or expenditure sum + var amount = transaction.amount; + if(amount > 0) + { + values[lastIndex][INCOME][index] = values[lastIndex][INCOME][index] + amount; + } + else + { + values[lastIndex][EXPENDITURE][index] = values[lastIndex][EXPENDITURE][index] + Math.abs(amount); + } +} + +var totalIncomeSums = []; +var totalExpenditureSums = []; + +// calculate total sums for all months +for(var i = 0; i < dates.length; i++) +{ + var totalIncomes = 0; + var totalExpenditures = 0; + + values[i][INCOME].forEach(function(value) + { + totalIncomes += value; + }); + + values[i][EXPENDITURE].forEach(function(value) + { + totalExpenditures += value; + }); + + totalIncomeSums.push(totalIncomes); + totalExpenditureSums.push(totalExpenditures); +} + +// Prepare your chart settings here (mandatory) +var plotlyData = []; +var plotlyLayout = { + title: { + text: localizedTitle + }, + barmode: "stack", + hovermode: 'closest', // show hover popup only for hovered item + yaxis: { + rangemode: 'tozero', + tickformat: '.0f', + ticksuffix: localizedCurrency, + showline: true + } +}; + +// create one stacked bar for incomes and one for expenditures for every month and group them by month +for(var i = 0; i < dates.length; i++) +{ + for(var j = 0; j < values[i][NAME].length; j++) + { + var currentValues = values[i]; + var currentName = currentValues[NAME][j]; + + var currentIncomeValue = currentValues[INCOME][j]; + var percentageIncome = (100 / totalIncomeSums[i]) * currentIncomeValue; + var textIncome = prepareHoverText(currentName, percentageIncome, currentIncomeValue); + + var currentExpenditureValue = currentValues[EXPENDITURE][j]; + var percentageExpenditure = (100 / totalExpenditureSums[i]) * currentExpenditureValue; + var textExpenditure = prepareHoverText(currentName, percentageExpenditure, currentExpenditureValue); + + // add border if category color is white + var borderWidth = 0; + if(currentValues[COLOR][j] === '#FFFFFF') + { + borderWidth = 1; + } + + plotlyData.push({ + x: [localizedData['label2'], localizedData['label1']], + y: [currentIncomeValue / 100.0, currentExpenditureValue / 100.0], + type: 'bar', + hoverinfo: 'text', + hovertext: [textIncome, textExpenditure], + name: currentName, + xaxis: 'x' + (i + 1), // for grouping incomes and expenditure bar by month + barmode: 'stack', + showlegend: i === 0, + legendgroup: currentName, + marker: { + color: currentValues[COLOR][j], // use the category's color + line: { + color: '#212121', + width: borderWidth + } + } + }); + } + + // axis number inside layout uses a different counting in comparison to xaxis definition in plotlyDate + var axisNumber = i + 1; + if(i === 0) + { + axisNumber = ''; + } + + // calculate subplot start and end position (relative between 0 and 1) + var width = 1 / dates.length; + var start = i * width; + var end = (i + 1) * width; + + plotlyLayout['xaxis' + axisNumber] = { + domain: [start, end], + anchor: 'x' + axisNumber, + title: dates[i], + } +} + +// Add your Plotly configuration settings here (optional) +var plotlyConfig = { + showSendToCloud: false, + displaylogo: false, + showLink: false, + responsive: true, + displayModeBar: true, + toImageButtonOptions: { + format: 'png', + filename: 'BudgetMaster_chart_export', + height: 1080, + width: 1920, + } +}; + +// Don't touch this line +Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig); + + +function prepareHoverText(categoryName, percentage, value) +{ + value = value / 100; + return categoryName + ' ' + percentage.toFixed(1) + '% (' + value.toFixed(1) + ' ' + localizedCurrency + ')'; +} \ No newline at end of file diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties index 2d2af29a2..7326352f8 100644 --- a/src/main/resources/languages/base_de.properties +++ b/src/main/resources/languages/base_de.properties @@ -533,6 +533,8 @@ charts.default.restPerMonth=Rest charts.default.restPerMonth.localization='{"label1": "Rest in "'} charts.default.incomesAndExpendituresPerYearBar=Eingaben/Ausgaben charts.default.incomesAndExpendituresPerYearBar.localization='{"axisY": "Summe in ", "traceName1": "Einnahmen", "traceName2": "Ausgaben"'} +charts.default.incomesAndExpendituresPerYearByCategories=Eingaben/Ausgaben nach Kategorien +charts.default.incomesAndExpendituresPerYearByCategories.localization='{"label1": "Ausgaben", "label2": "Einnahmen"'} chart.new.label.name=Name chart.new.label.script=Script diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties index da0b7609b..b0152ba93 100644 --- a/src/main/resources/languages/base_en.properties +++ b/src/main/resources/languages/base_en.properties @@ -533,6 +533,8 @@ charts.default.restPerMonth=Rest charts.default.restPerMonth.localization='{"label1": "Rest in "'} charts.default.incomesAndExpendituresPerYearBar=Incomes/Expenditures charts.default.incomesAndExpendituresPerYearBar.localization='{"axisY": "Sum in ", "traceName1": "Incomes", "traceName2": "Expenditures"'} +charts.default.incomesAndExpendituresPerYearByCategories=Incomes/Expenditures by categories +charts.default.incomesAndExpendituresPerYearByCategories.localization='{"label1": "Expenditures", "label2": "Incomes"'} chart.new.label.name=Name chart.new.label.script=Script diff --git a/src/main/resources/static/images/charts/incomesAndExpendituresPerYearByCategories.png b/src/main/resources/static/images/charts/incomesAndExpendituresPerYearByCategories.png new file mode 100644 index 0000000000000000000000000000000000000000..d66432ed5b449551296290a09ca3f1db5ee43d24 GIT binary patch literal 30843 zcmeAS@N?(olHy`uVBq!ia0y~yVEM_wz!bs3#K6EXUwer<0|NtNage(c!@6@aFBupZ zSkfJR9T^xl_H+M9WMyDr;4JWnEM{QfI}E~%$MaXDFfddIc)B=-RK&f#%U&V!^wzPD zcfZUNQ2278c?yG)0vCr@p8^w?SE$2;j;00;*MM2A%S<$z6kJ)BBs;zL66V;eK1IY! zK~ZJN_xFmQPd!((e4e0k^4*jFyNlMI|9sAR^X$8&o6L=OXP-H9#)JU`5|aLXU0=WQ z)qCaFAXhVdIp*|N93;W8R{<*0wuT!da6x*L9*B0x|B<5wVl;Gmom({P|EZ%#T|*;J z>;eff1W%bTq2S$}onO9`T>T&3D`grKDt0cB4J0>X(Q*D=Hz$@df;h`Gt~-WLfU-|q zycif-FCPiEH=%1)`1*OTcbrZS2CMwi_84OH-iJHD_8$;gx^!vmjsitHyST6aMekd( zfDANX?w2pw4E2Oh;JW5@Q0MzhT)K4Ws(*G6#~%>6x+c>2dg1i*%fQ~9vEqr&s-Np) zVq!w3wm#m)(9k3(AYf4a?ah@dAy=P!1q58s-~VUPESqUlrkK?J`tssM##Ql_j*gCv z$;a>QtBwB3!0=-3+O=z2ZX912_Cq*QoZ*AK=epNdS6@HUDLnoE%Ojn_M)%gm?yj$k zx-i$e{M=mY=@Ta|{1r3Psx)h&lIs>LMa6~Q)AeMn%ckgNEBl8<McsONdAa=O`O`jk zJbAm=y<bgDZI#{Z2@@u4%e_6%wmK|prcLUpDTR-Z{av2(=UR0B(W6IKKI5FIUHkoR zxwu};iYf*Mu8yZSHYSI1G91`H`Oc=?+uOdqy}kd}tJU`+y{2lZKAx%_t{1&+P0DHK zcD|)cmdvp%R<p3Uaq!^5ix&f<3*X<{YgF|3Sa0_AbyM|XZ(X|d>BK~3M@L7aiqFq{ zZ+5h{wr*)`Y}_QfbIM09QLT*Er&^Ma_nqvRI(6!|{4Kw~y`7v<`{{|Nq={5-US8fU zpUzXW&GY3<GA3-@x^>IzYiqRw7rEr*tXUGjv(>2R{k^^3)Agq6L<VJ@tPVQeJ26V> zbt|`cN_JUUnV+AZk&?OFZ{3txDN#GSy2bUqlBNhM&Yrq@!u^ud({#_<|KD?F%Kg)K z@7}$3E$rIVpGEdDd#ggzswyf@oY}C!;OEjOx6aSEumAh2)ZgEK=C|;o^DS*{r%F$r z?da&x2wv91bL!9GcK+<^8gCEB2b(GFU&-U8H&uF1;p1b==hyu@HC5Z_)Aipm!otGJ z-#h#J`|nILOg?rZ*0AJ7z)a=+-QToNhl*>5`Q$CJQQH6a+iaiRrLV(w7Cn8^H`THz zcG9%DbLXa>-ejs9b-MIq@0572ckFL{gKs_7-tHbYJ#3po|EzEQ;+vjInPy#C7km5a z)ljjMQ?tzDcCStqy}2MKZ1?t5m)%MX4D&4dUNbTLYu{b|-Yem9M*4@k|9`&=*`@wD zt-pWDkL!CXi#r_-xAAuO_fI!?{Q9-FVFa7%H=h{>j@BHSH{INhyx;$SU)I%CYj~wq z-Y!|T?9>9CslKTxDIULmy;$5ouj<vxWxliP{(ika$uD)5PSlQqg+7x#%<}G7oNT%E zYLY?q*H=qhmp*y&<Y>3JdET8J@%!suUtfP+&EsFpww#$^r$cojHaK)i8mGOvw>Ns5 z+SeBs7e8I*^<}P2<)>!p>w9*lRPW^7l=1)H-$~a}jvPDo?5z3yDLg+DwAl{Nu`Hff z`|W0zsP?xvH-oJ;tm^($cy2Qa&igMOU!$lj6nVT)cJ*COA@20^^X6`S^`D!AL&7kr z<xcF`S*Eu)CLh1GH9Ixn(V`UlNY|!ECnhQ{_4W6kZ&CQ@+uPgm6%Sk4c%?G7$18o` zn0!2CR%`3g4-XF)|1o0QnYez>r>>km_5c4}I>mdrE>&@BP7Is0S&qif;CF^QSEmMh zPt%!cRl3S&MfCP{HY`PtpLV7E{^W3a!5z{2wcqF3Oqo=1dt0uyWxSal|KBx{n^T(A z{pL)V`RU7qnNLqopMG2Odqd38HeTr`jx_~q&(1#0vNLqj%%^&je!I9`x^zjU*ZW;< zK{q2q#ibLw7#jW`JbU)+WB+sK&SjZ&FNyTD3%ar<GI&zYlKa}>>vrteu_f<r6x-5@ zA2&PKMs1zssOTAFeK;&+MZm+C%jZvfbeP|shl{JLxA*Rj!o^1(Pg3<h)ukJ?C1Oj) zM4hP~*VaaxYifnB(_!>Uy3ss!v(Vx*7qd>rF7=xF>D#wyB3duA@9(R<RZ%81wO`Iw ztM!O3=i6`Jz6r%|_0drA%XXb_SF1AZH1D(}x-)}~=9$^0oDhhPj`sKW|2b9F!@Ff) z@pHfH>ta(cdh74~@?qOl&0x1fOGH9fg<KT+t^7nh|H_Jq7c-`0UzxNpCm?8h%;Ven z`(-61H5JV)EFwPbX~{adsIRZ@@^b&_nUnTz{k<n_ZB)^GcUM>28+Z0k=F#{3^iVN) zr!hOP)R%w1-=99FI&;2txu5iZ?UVEE|NU4jB9xta`rp5QLj98`Po7`-Oj7d8r%$J5 zrCQYe+0l~d`MBt`b?K`uxwp+acNpnq{&_k*{@ODe73rDg`SZfeGcToleRVa+V_yB& ztKmy0ygiXz`2XMEHBT8BY!Xvq84mnc@bvsN^;u%sUw@S)qPkHbruA0!|NczT3|5iM zySL}(?EHNv|HZ{~`b|<-z3AyQc}Im|x5~Qj_p1HRo^WfLsS>@@Gw3v%>hy2#?nVbK zb<vlM-<mabNmA}J<zs!a+8;x=*=Jr_!f*G(Vbin=+dfZ7*<gOJVzJ*`tJ!9`Q9Fy4 zO8w>Dd2o`eYW=ch%T8^L-&Yg4`|RIeUw`{w|84Ktr5CiM<Bsbhw_YhDrG>F(d8w&O zeJg5&GM=BGZ=Zau=kM?D-qOOtpU+vp?~$<#+GbP!?vDGvgHFo*YwlFv%KvyPd%bD? zy_k0_JEOOJ-XcGV{l&vt)$*p8Q_Rb^-aN_t>%+XvTU#<uPt(21#K7=L4pft=R9059 zva!YOF7wSg=_k~?<bqvJWYe4{H`>(=xFc7oE`51<`SrEY*YDl?cT_w+W<!Ewr;zHr zs#ltwDU+sbnb|)<Vq59!Yhi1nG7G)e`Atfntmd1ddvR~|_uJd^+0*yV{rd2E$lIHn z-A~`B{rzpKgWhG8T32^>?|C_wm-XsgT_$T;<f4}vV6CTh+rH$*gl!(e($d<~Hx+VD z`2Xwr{#RF5t9OPoZ7aK4{{CLAikbbsB}-J^{ykaLYo32^%A%N^MNdypzrP`|`HtL9 zZ8m<nIi?@$H*em&I$&XwOO;|_Y+d2arf+Ny?(QzPx5<rI_bxGLZS3xE>-Ya#^;gWu z@!iAeaaEpmb1z&7h}2SyoE^40Y%QpwQ`WwHXJ74a<MTGb+j1gv1Iy0a|NnD1_f*Zz zSy2oO4)-2!Udh1le<I70BS&03C$;}qS$XyH<={{AT$CeM&3&vjGhnu6<<^vwlT5R( zO{r0xtm=Mpmu>a8DUQ+6(f0QHH>aQ9_w`z|n3$MQT~JU^%2Z)>zds+3%Wpbce!n*S z*y_;LYBxQZCatM^c!;%g@w#>ECV8j^Wyvd*{{L6I^VMW^e=oW0`}_8mS@X-;{CKnZ zyxkuT4bQ4clT))xUtO7aTg}pU+qYBN>raU7*}M1lw%pxiZ=)n9+WdUG{l3?Mb%BfB zA|h^_n`@oA!DpsX=&F#36R)j}&ff33)N5)=_ATBCYxHJ*KG4XlsHix}rdw27E&TeL z$j$fb|HrbWZc?%O`St0x%<HP&OQ&5;HF&*D^V4o`r)lwFSu+(hw^V(7wQ26($S!ex zJ<rf-r{3$CKYn#}b<ypnrlw;(l8f&?FG}9>J0`FHTRzLJwAMS%jlhMR_SD(eSA}Zt z%q?m^VY~9~>P_on=9Z;xifO$gIw>~w!_MdPCjYK{eQm9gd)@Bv_}b7q*2wI;yGlPX zgszSHdS_>GQL@)mt*cADr$0SCUEZ?D<=uzx_o~ldx)ii7Q0=tr(z|SxJ$v@-Nm+J> zCvwT%-cQk6vakE)&9iAuiOHLEr|#$7r-oHeE*LT}__qZ9cF$vAn8$I_Oxdkx!UL_Z zeX`ankN>`o|9?r$*75MBjKI(Hx%v3+ZO@<o#CGNLv$MZHogVLX;)<AP(c|O&`SZRW z4B7wZQ+LZH^ZPZyx(o~lo<Li{Rfm5=n!r`g*FgONh8Mh$M(_gjlvq%!w&5PMjXX3I zB=3s6e*V0^qN1ZI$n^|1W}pTP0|Ubsj6Ouq%$YM+nHbj9)!EtE@$vDkVh8EiJ3*n$ z^wF!mKQylXKY1u4aP^w)y;FN%O^n`oe%Hs3AJfmx@$~mEFD+dgx;o6w?byxD>B-5- zsS{bQET3OzrKsqrCeeHB*4FIXH*cQ&@$vC-VPWCbVQXJKe5klqXK(%geOHW>a=pAx zU0m$G^uw1gI^pYNz`@-R=h+~&E$c*I@$Jz6>e1S_eVez7lvhreQB?Bk%E}!(EY?ml zFikqrVVZp{<L%?wCYhHuBpy~-vofx~sGjfhRPFFRd-qD4=k3Y5x~iF-|CICA)YD>_ ztt_!K4QhXV30ms4bLURq*=D}CA~&bq-B%ku?c99(_*=2N%X07Ui@hbP9mc}O=H}{J z`{(0vP&;Dcgb4z=#>}AL_?LBeSLsyk@VW`RrOc-#ottB6Bq1p&DJxt1`kJn;=gHKX znwpA=9X;u3Y0H)`cXx5|(4HQ7yTTz#v3tq1C2HO8?(8i7|F2fE=0~f=Cg05Dq@*p^ z_B^qBeQjOr?TZ%!yJnl`XZ@E`aNS+@c31g(y{&g-FHO^l40^QMC35HEZ*Om_^S9|} zMQvHJWx3znOKGRHgl60Sda-zQ`1)_JufM;wHQRTVNnu&pG*^&Y8~(c(y=`D*UIHq4 z!q&&Vee}qv_E$;f^)->ok1w5@Z~y<()6+s{RrYyV7d|?2cX#>emWBp~lQGZF&;S4H z_4=i6FE8&ub8}nn?K?Y*A3u7OGK(kg-k!>*r>1VY=5POZ%Cu=}%Fmw8-xnYLZf>u% z`MxigyuZG_e%<ZdTx<363)AE4G|Rtl$-JEMyY~0Dxi*zW|Ns3J*Nf38U!n8%!otIs zmU>rzc@em$qL6d1dET8HyGpZzf`WRbOznO=V2+NCzS%c_{{7GA?ep{V*XN2=oX9Y_ z`+X)e1B3BVZk{I|^CT+2Y&#V*|FBKblM~Z)qj&Az?H#)%<Kn?)c5kJrXG}|8T+j+# z<?%_%Ea%1|*X})g_DH4AZHeAnRhplle=;fk+?<`&-}7#7%e5|hvtsVyny;@yJGV}1 zPj&G=8W<SJD`hgl#Ju#?6;SbX>(;Gf$K0;{`ti8`^|iID?=oyw{O|qTFCZYm$*D=C zXnpRD4T`3wUk|l%U&_0=DfQ2fk3l`s=6W_ZHYO$|XJ!~)I`v?obNiAX&t~U82@?9W zDfRS{AOC*8SC#X=^Y>A={ubpo2M-?X?CjkC?^kwB&7Liwm|I}{^5x6<Yb0WRf1cI< z$3!Cfz2BK!Q%&{7?*02pUr!5jcXuy;b;XnG<WivvOC|_tPoH%0+xz?atw$bQUhY5N zsx<3pm*}N)v(5c4trrn0RL$|;0gB5l`TKr8+gts;PtJB1s6DoO()`p9tJm+F6vlP3 zq{uaBhWP1?$;Ve+`E7pm$PteS+kyuUA0HjHE_tEweTvGxz181u-MqQ?|G(cx3)9Zd zDzZOitM`33k6G@mlHcFn?k;~{_jGEwjg8HoJ$ug0x7YtZSLD3y_c@z47yteBRa_@R zp)x`(d~MX%OG~|{YK3mvw(Z(FK9E;SoDbdTE55znEhg~q{53jj?p3|Zb-&G?FMjso z+1ci*CYh(E>1r!aTB5Sj>t9hxNl$O@+MuOgH8nLSC#l}OdskRUNTp_~UhJ<Uox;`M z-e`uciFkTy>e8#rmM&eobjgw{Yoo(I<?gNe`b5oBOgn1JiZ!9D!`6z&RXn`2vsl_Z zZ;HpA9fir<+{V8TMeQr*06FN>Y?h6O!~gH7d%x?||CG!vIZyv~?d5&{^v`nWfXZIO z&4(|5R5JYWC%H~I{2e@m<4`wQq3q|Ur@PDFulnaNCMH(;`r6iw8v|{Nx*<b5KXsLr zlb@WJXkGp;<nR2P++6dV8v%PN3a_RY|Nr-Qv3tMQ!$*%UEpTMc{a`3-U$>{|>8W+= z);&Jn|NqNnf7S5StW`%W&ww16Ab08VW%nM5z};nU#dM=$_EZFd`qXX(1qD7nJy(h( zrKPoVBO+!T$(&jL`I+xpUq8RNJry4}CLcd^`0(#<Z&$O%u1sC&;o&jCOi#}*JJmJw z{k^@~r5PD3PRc3$)rW*hf}F|%H8r(+`|IOhy}P^n^wUGF-2Z<(?k{?J%6Eo=<E^#P z+d=(GP{}&Swz}+ipX{X4rLo)d=B~*|P7Yq=!pYCy|Mc{9Zy~#i4-Y{7xR)m<tNYKj zDt&)%uVL~rkLu^==FT)uXJchOd2H#_9oiFr9K1SP6f%A^gMINui}Z6cohum`8UOzJ z%FWArcV}^Wx0tSuu5R}Ab!%l`%9><M*b)~PCzO|cZOzZi{`R#$9=4a2mF4B-Z3?-x zsmvwZ<H*$B6DheWR#v~Rt&KLSytv49QogFt@#Dw6f8WmE@40qul3T@oJqCsY|I3Um zf4%LtU%|F)?Yha&ubhevVV<$-&ffU%@9ypf^*$Gfh>M%2oS48VtafIe?e56UX}+_~ zWbNzzJUG~_>INEHaZ6EN>NRzeP3XE9%k=d0&NcIEKAqf@dOGFqv0mx(b1XO4|Nm#? z{^@~q{+^F#&F`CJURvVR%Ec|FBVn2~CFbJA#qP1Ov8v4BD}z#>o|^jf^mI@MuT1(3 zE2!#xP``VUNc7V)RaXye+4~}<=zFmKYBqz=o&R!HU0of1e`m3K*SWdYppg<T&kYwZ zUOaF6J!Ws!*FJgscaI(^F@F8>@^X+w@3CHK^HX!$c%{uUE;xiux#~S#@9n#H{|<5M zp9tzawaLWNa%br3Fw?9n99&$t_SNq00d<w1>BsGf$ny6;Z<c%OM9Rvu91!<#`}I{m zyW_vAapi>T8!h+z$a@u2=6v<rDn_5FEE|)L_ubu78T_?=)0Qnc7Z<h8ojdo{=Sxpd zPk(-9rt;Ct{`PD4{tovCr?UUi6<#g*A3Uxe*iv~rTsl6lBa1;Ktj0_fl*}FS!D<*7 z_9}ui7?$=84h27Tjg5^z-THe$Sg`+3%iJyxf8X%QANV1yJcawIQhq;UZ~pT=plolw zT+YAGJG8iHQ}*?BCr)^*y|=40J1ObW_WO0x;^NDDZB!nM>&J!oE_8u39XD^xy1Ht9 z-7n9s)YH>I-KwCxemUDWZ{Mc67;SiR`@n$%Jv}|E!`J`%`O|amlqpjtO)7eNN;GoH zgb5S2_Bu5}3WBu5SFdi3*q9_#-s_fpbya9;%HcNN&d$#C^Ydh_N?ru}+p21ozrVNl zXt%h2)Rq;~r%#_d_wM)m_4$d358u7h6E-q7-um_hsQ1Xgz;Nc|>-GEVUSC@~J-#mT zYvj54_VXuAy0kiceSF=|r=Oml&N4ZDZm#w5UTO21A0M>C*WKAu8Ql9y78H*R3}-r9 zTU%MKCmrotY3Kd%(b4Q{Yj$Q_T=etvbMx$LXD(ebQd4t_e)9IMZQ>!8$S*IK&)>Cs zcXsnGcW7XIeAKOf>&A_Y(z#ZpGBPr+uC3KpHoCW~^tF8bpTd`ymWG9e<>lr1+kU;` zZ~s?BQqnT%NXOpl@23`h_)ze6?%vkMiz)uszkUAv`Qyil?tWhx7#LX9ZB!4LS1id& zxV7i)>Rx?w7t@B7lN8E+2bIL6EPC}nWsAYI_3sl?lUG(f5jzfU)+_9n>^(NgUv%ZA zC0~^7r_R@Ry-=%!BVk;CkFFC?@MQZLpTkpkoN1_*?EfRPfBM8p6IZG|l!uIVJJe0K z*!?o>*OmkB_4~NJ`u&58i?*bnpZDWOh32~0-DMvix#oT-)QQ>g;oIBWtA2JLIB+0v zvD@4G`|I!SDh*nFalb{?myBgDpX(j+ik+OAvOaM`V*}KxPEJl<x})HslY>Kp$ijsS z)&1w$6hHI1R@BV$Ks$Wh36GSNC1yo0FD-3f>*MELEwC)rFD7PA%Z>Z>|L<PEe*O0C z>c_`=K@Hpht%(uOxMx;=es=ci>TqvaQBl>&%}q^9`Z_u$=*H}=GPSXZxmErB-N_Tp zqMO1dx^7Bc>+9(`QFOXqtXAXCUteEu(zp-FFb8rx9`yA0Pv0?n%9JI&F}usw=H1<u zn3x#6%xB`a)$8|7a*5iQboBkc-+s5IYKO~N6ga4fXovYkd7fzJm!Ec(oloY)lP6PV z&B`*7vbD99&(Y{^dAP6k_o*7r^V!$dXvXd;nW*IY>dMN;@80dpxTq8vwYTc4W%08m z%a`lN>?k-nN!7?$MP-Tqe7hhS>#{TV@5h@N<=!&MoI7_eJFnD}XV22|^Yyc*>PCm{ z?)u{hO__?3;X!#xNsEqz<Q_S7>ebrq_a-T<n!6|`JNxz9x4Fs5%Ep&3T~fKZ@7t~H zTRtEEd_I4Ej%D%lb90lA^-MG~Ft~8~w0HEEfa!X%Pd0f?)%yPa{&hE#)nRLA+1J;t zkK4<{#I!DMua>f`b=eiM()agb^;U<jUM5>?SM?=hd){5QUa8X8*VfLMF=LJ9&t6!b zKXhnO#>GW)a&qU+ox647+S=&pI*~>d9}?F7)$TkvZ{ED){qobJyq9kZTkbcvPsS3| z5XfBaGc#y&+FADC|HhnGg=Q~Z5xsp~%;`^0Pap4-joy^vnVZ>{b$y-g<s;Sa_db8| z;>Cjp6aK%yZklC&i{<CfpFe;6I5Bro6~hT`&)Xr4m(#BYi8?rP_;-Hbm0Kw_!z}-I z*5lK>fxHQ;jEs0U>n)e<t1{_}l;*wsDoS*t;VL_6&uyTtM^VwPnx92UNsG2`|Gv<< zUFEpfk|{E`7rA!#N}HQyUpsT|+`9vf%x7ntPY<1@8?81y_4Ks0@%#7r+}>TD9}^QZ z+bq{_o=xSWBb{-3tClWbembF|;>TrwdtJ?6-`?I9YFHn?zwY_Dxm90Zv9hql>?(P= z^ZC5h0SgcH$yzHZE2lor-}A9;P0(_`xk|2GC;qHhvEtR$)$MI<Ztm{h7p97)E{j>Y zd-rec^?QV5WOU4roj&c&edA~I8tw%JyZ^7$O86C{wu(uEBPG_@=~`>#1er2RyU%%_ z78jm5l(FJ<+Lnp`pY%?dGUesv<@^!`2kzagJ3UQT$mJ^2-G?%1pepD@zT4u3t0r#@ z4D5EVliC&iB=&-+nVH$)Hr~k#w72%br@t_J-WcV}dl{yH6<c|~go^si+kd?#l##XZ zy^N7^&2s^UgM}!=5DNEG)1>rTrTJnizdXMX>g+XZR&#v=BpLnGyPWXBK6l2Z#~0^I z?&c{xndRqqZGHTHo6~!%zhAj<UtCi1=cm*9tB)mkczH<~r}bogX@clXdkm^UuCBVu zt-r^h@R3XA;zf)8ohbVJ%s127**X9IK3!0!{p;)NTV1E?$4_(Z?CfM@WW1!NqGEF+ zU|LU4&*S6$^0rkbdU}4mFTu?c28J_kRaLv5+?F=a3t1WDdh6}&?dGS9l8^CZZqL2_ z?X3BI5ADXXhlg5&Zrr-HE^@P**x7luw=ZAb?9|G|%*HdJ*XG8wg9?q7y1Hu}o7w#Q z{BCvR!Acy7UN>p!*{`myo^Mn6>Cey4vAaqtpU*9~DtRFwC%4Y`#ogW8W4t8R1uyS2 zTXb`4cKH2$wZFf<7MGHe5)@Qa{`m1DJHOnT(ACq-9Md5&kzl5yqcdmDoHuXZu3fWc z(&WjiH~ZvltM2Y9eR^tYu<@oT8i9{aP1O#H*;V2xUHNQgx|mLcf-yUf#DiC_w3Pe$ z`b4!tCcKzEX;RVmcd@y%@*?_Vt;43OxyeoPnyM8U9lctP;nRVx-TziKoqQd(W$vnm zCV}bm9?0+YHZ{mqUDLg_pf=95;p8b3n;$2hZpfLhpPHFiarJgW{^DCXMn*<WO-(9# zTl4PTx_x`MV>6q3zuew}hfZ^?N>5GK&rePcUKOI*uH&}&<A;Zbg_3M-ZL_beP&EGj z_ICNVH<8xX)|q$j+*uXA{@<t5`llBhxm)%1mFK(A>kGM$o$=Y(U#x6q_U*((<(DsC zzI*rX>+9>&1$Q><#qD|V<jI#mpZUx53JVL1mY@Fn`_1O_w{G7)eWH<>{n6vc+1J)Y zF7uJhOntex`n%V3y|uC?{(gS{-fq9YWJS=@t|c+{_V)7f@|7(qEDWDKZac(>9(?k% z`fRvpfWV<(rJ82<Rcy=7-rjfXN0D;~^9&u%r0L2$fge}Zo;Z}TBKTTD^3q#(yu7@k z_SICTq%3J~KW_bg&tf<3$#>=-);alY=ks~hKc7xF&%IUh;laTxSFX&j{}*{{clrB& z9}e>yJ>30%-|DEXSvNPOF87_iY%3=xr%~d`NvfCL-Pq`SZPK;-_y1p7>itQg=GV*R zLRG0x&ds&{^;^IIl%aprgEDmc!<$|G|4deVIN!W(!{*Je@9zG-A@ML*`UTOQ=XaTA zU%SG$i;bN<IwIoEzS?MO$3Ly&aT5fzE59D=m6nr}Gm?;y(0IGA_P3O2mWuG5yLXq` z*8VElo_BXi?%iEqr)r1W{rPZsbNcyjZ*G2mb#=9oZ@oOzH~Xi*7_1kB|M6$EY5K3p zz)(@M)4n}Y*|GfWEK}cECYsUP-psSD-c|lyPFUDD<HCZIlhymB>+;$=vjJU+r(N z+xzSPw{nYHSzDi<YrWmMoe$J}zqr`_<D;YgbFEZY-nf6?-p+2HTd!0zJO8$=Tc_&& z{`nI$7h(NVlHrp_d-mTD*2&w~J(3A!WPMnc^@RPp`)amjYp2b<F22+*i1$PPM?t4F zt?!ZFFD><+H*ek~*ZLn1+k=*RZOyuxb*x9yxsB)M*6iy$i=VUc$^3XaJ^t6PUux>= z`f+<I&de|rDxY8fuhR2q5RbH3&gW-m1qB6dtG~@L%?|4p)9n(`{Pg$xeSQgp1rZyQ z!q>%U#_sykCu?1?U$0@$vEQX<Io@A)J^1MFuC$i#ubBjPo(HupqPOSy`upn#FY~#* zEjRVao12?|e}7+IUjF{d%E?;-0|WQ}`?dOFM$O}1^Eq?praqY-U)R~!SNHL#IB58O zt<K)k*V915kWNmA{O$j$v~J&C{`gq$&m1j=pABoW-A?S%hyYg!tP1~LTArzFU&E~+ zKcN)VyJ77H%QLvVv!4xGa>BrH8QS!RjT(Q7PD^|Cb3@DhbH{8xZGQjf?~^M$rkwv7 zAZ@r$(P_&PA75ONS!XW)bLP&EX*EH+W=)ywJKIcEP0ed#;^DU7<$k5_?nFx0YnYmr zzPPY()yYqv&)diEtqL`5WrG-U=GeKp)~c`H-P^m{W1^C%R!G2Nw!<$kFaQ4TuJ+7p zr%tU(KR@r*gO87ory7`;guGg@V#Vw0>%9w~pOejfa%rjerVtf%b#Lw2wgnFwwzTuf zPP%pnG8BFwCnY6iP5l12qRh={XRk~+xS`_XqX`oxJUcskee`xev9(cKz1Xg=i`9+{ zXS21nUAnjEDR>xnN5#iQDN&lodZpF9b#-*qd}pb=ouV1+HAN$Ex!+t+^D_G#teAcD z=uuEm(3TCqF0}DVKRYw?@~+a?veso8%e9v;Uq0WWa8d2=Z?{@xOfxPx=-JxXELyba z-TnRg+S9bd{i2sJLk3?Ar1kXl=31BMU0ro`Pvz$;6AoV3ka)O}nH@A(d1;9!sH-jL z?R~mSRQuiS?f$PmKR<tZX>V_D8Q<q`Z*M>SB)BQEy!^X$`8$snQ!UoIot+6@tC5+c z7rQHDWsquicJ@_f2f2vC>+zumm3O<g1&am<Jh~+OXL0#Twq<KuN;itFJHMLEAav%; zwr26<!%D#+|JA*@lV`KN`?hV`s`GA6nLj^0)ec`bXTpRD)22Op`c!r2%FN5l0s{lp z{pb03d98}vylnI4;+aONudc2x|M}_ZfddYnhn}9AsvW&;&6=WjcXmEIJKJ0P<h6?z zH@b8Rg@uKIij_+%0v9X0_qDXN+_-()d+oaOIg-Xt?aVxpM(-PJE|^^i4>hR#7xy`o zRix#^6ps53Ca!AC{Jd?w*}gjhR~eRhHQl&+`{egWmqPxlb1y!)dr$M$P{uipyUX9- zyS&{0_N`lGZ*Bxm+8|{bof6B?DiwLXXF_S<h7-HeTGntoe5gZdi7=2nAp*)AX&D(W zX6Ara;mn$~3c1s?ruxs1k7sY@+}&krX&LEz>g3zo+tbq{H>dS(d3}BTbiv$<_eDiS zO!DqnXv*bXzJEU+ks$arH8m&s?Jj+NZGU~excKxLGiLbCHp{)a>FJ4y%Hiwd_Evs= zwk`Meq)C&UoSc^2*qq+K?b^M))l2OP9vt}j`FX01l9H43|Hu9IHMO<h-`}@SKQ||C zZ`Db&*x1;|j~^>5E2qxdQSx$<Pj`3s?R~Yow-^OSU(|s%Mr>}}xZxpVTlpy^ARyrH zudhp|9l5<CaB&;2wAY=vX1P(Pr|G8Ny0p}Lsex4Q{JLM6Zf?i^{QR7KbyexZL#+)B z4F3M-JtwPWMtl4D=|yf@qH^P4GyCmZw@#UPPt{Uw^_hJ2=%H3_)n9s%o1TEC+rAy? z6c$>twbU27RO`&K7Ea-~nvbsK<=+{Z*;?A#R$bHq&1asD-kuk_E+(=o?d+`9_I7m@ z6%UoNl9DMA(cAN4-)3yku`Pb)bF@oz>4ps(JbZn(ZrL)W?B1TrjT<-W@BdS@+;8p^ zBMXa&MMd3Wx>jXxG}d03)RHQ?*#Xjn`mA7Cc5_o|kcY|EjT=9H_@EKA<b?A3>$;(< zu1wVqUvgu2`T8q-e0;ZlfM(sJ*T>m%?gC91yY)yY3Wn<%NZ9>+GI{;}e^tM~y#>v3 zhOG;!R^Hgr({tt747=pCv}IbpJ@e<!@9#ffUzNb{pff}I#cHh?HudX&u43YH!W<L| zo;q=&;zajq=Qr_@k&$2D-oAeFr03V0GL}Uyr<d|do0XK6?W_O)@8V+jyLaw%iRo%h zcM@xDYhz<&^_0lFwPoeDt|L*MM}*er<mUR%x6{3CU--!7`@6gHITsT;Iy*TzI3^sr ze0g)$)m7#1@7Y#<TCzoG$=<zt4<9<TE_SzC?%7$U-qUn`Ca@MeTw@JbF%h|@FyIzC zqNJqs=<(yw|LWY_-A1XWJRXJC-kVSnv%ju(@x>KYwvS+)iAlz`Ha1#m!TV}{?%~_D z$g!F27vC;u`<&>Z3G`txhq}{e&e)Xd*8T2$;a*oZuglNxY{29X{1Q*~!j^V^1dpy1 z78C^7GCXPA*0^s~)5*`@XRX&-pwP11<p*1T2(QoV?X_D!K5bjUW)LbVIrDzrj=~Q~ zYhL|NNlu;f+cC8~J^Si^YfsPV`tf1C2S1#%e!pY)?$v6u_4oe)4Vs0n3JI)LJPhf= z81TQnwN=_6!NJ4BV}0CSyMI3(zrMa6H1jmuEZ581d-782vNt~-_uHqa7#IZ1)}J(a z^7h=@(<V$1ke1$E`8h38N?2I=v32=7o0=aRwoKQHy_EKf2U;fv)ztjSUcdL*vuEJ0 z#qN@qmsYG;5w<o;H-2BtYz4>iOG`XOwZlpZ3T9ZB=N)e2onQa&r(-kQ(j`kyJh3i+ zw<YiHuj%o17u8<FO>}cR_Imw(yTn5+Cr)_eE^+IX5)%^(3k!>~E_rcbnr?JeWu@od z;^*h$_Evp;clY<ZySu-?yE}Pe)YdG?-ec{POQG|vX_<%Hc(udV$=FtHS-Nzo)UWd3 zWj;I0-rky~8@(j&#)gOe_WxeIe}8|ex462xdTvu6tTy&o16oliD=WM7--Bj;CMKpH zx8!~~+a<CV1q<5S+kGlNpEY0l_QuBKokdSoZcft-R<pCKJJKOIshVHLB4BNlX=Lqz z21cWshYmT-USnUwXWZb_dp^-jxrWb}OKkq(9Je1bX){<klM*Lt8gla61;1La)8n@O z(zk12ZdaAJTdV`GIQ@Ax!=y@V`&Yg9KTi1j`m;B^6NZkWz*;;c&yy?cPfbf}%fBse zlKxZKKD;hsrr7)iY7gZNPQ|YA5`O&r`SZt*A3u1opo-xHb1rjjDC^|s?@i-FaSTpe zHs;&=_2gI6+n^fF`gS<;_M6kc1=N~#i|OtH&7AH3^Xas(x?jxZwBBoWp!K8Sag|G> zwq~vRzkXZp?Xs`0t}gSPeQi~!H}6X($dKWI92R!=@9*wbr-<d}zkhdk_vr;st~Rst zuZ!9F>C4N@w@fC^nX{+v@2?p%BqXP}3Uxky{5ZAd_qVr!fq_9XmPIP2rlpsc`EJ{` z?cBL@o}QjTr_a2;zW(&3z182@SXex?FZ+BGcv%k(#LbE?LpHs>s3RySczU}2^n<0Z zueG+fm%qDn^Za@L+0!OXGD<$y^XlsA-Me;q-I?kd7Z-PVneSv*X|tRi)!)~NfYv>3 z-CBBeRj9OiUd+ClpEozBd;fj4dcEIFBUMAg!q3mnrk|fTRkZy5y}9$|&D$DU>;x&m zH!Hr}Qug*1?<Nat>(znHj%-ga9XsZhZU6tz=c=!-Y`<O!4!V8&cKO>|rFV7|PMkRL z)+L$T`}=C2oS3+`>g%q$zq`cRK&$qq_x1Hfo<0lBGGEdTwQv>|7T$`k6xWLZWn`~w zS0@#0Ogfr(f1mErR&H@QpTEJ6kM$n!ligkQ^;O>8T|0N|SP{7SXnHWC#+4sATE>Uc zgBK=zycv?#a(-D;<cY88!JZDj9s%-KVpax$YN}gXv*+8_?{jM9nlx`+?C!9QNk=D4 z5a8U>*VhLcnvC7`<?rwBhYufKyJpRsw{Q3E*%K5LbZ(BN^6K3?cY<bLOiZ?9TwG*i zX=)n!OkG_)yS<N@nK?C9U0r=<z`7XA#TQq^uH32cnn~jdxXshu<a*6iIVBd9O*S?j z)SUP|<o|@Ft<`&HiJ4tn<(gN>XAJ5$J~3Z>@kP+uq>abE%Kgm@nZDq+3#4^`r-}6B zU-687S?jV74;;C<ySc^ndStDyojsd-Wkq1>>1k74UAshHUR!(n+uPgc=h@DlI5BX4 z-Ct0<aBtn;s`B!3b@k=*Y^&q;*VSHI6Z!Pi)b6e>DT9QDy?ghX-9LJCY01k=>-YV7 zb!~0*Pnk4^N{oEZp!EHCDQNB9$rXQpe_tQG{M^ps=P52lnU|OO#@Bpw<=mB-nQ2}2 zro#U8t*zO?K|v}v_kF)tZDg;h=@}JyYq`ICX7rYf!jF%R+E#ySX>Ij9^7iiT^55Uy zZhdb7UTLl%{_o}Y*Yhlk)2^%tls3x=*n4n8)z??q*VlQj`TJ(``DMPd)o#DPz5V@@ zlap1i>Ba20aPwy6yE{8&tx6(xm1OqI*>;KR*S)&3QrbLEMO}TmR;X9f=DBm{ep5YK zS6Amd%VgvB?bpq?ZB)(+O#T~}A+q3(t)W#bZ-}VRy;Vi`SH9YqSs!pC`GMfh+p%{% zcmIC4ws2Kr=IYGo(w^fCS8dGV5)|A&9huOwNNUE^`Y-#xOw)~C7q|D<zu)hpqoP(R zHY@7r<h;4D@$>WZ@`g!AW*8=4x_lXwIaUTQ=aaDr2r4`|N%i^J+1Ho*&rdx)%{1%E ziPNXE|Nr}IW@cujtD&*Ncea^pm&nDqSsvGNFD_z@6u<d#Ifws+?CHN(ajCt(uJt*D z^^ft+-_}Lerl0msI3L1%`B`rK+to($tDkNB$i!?pNxd!L>}1vR+b`(0y>Pf{my(!T z@k+LN>*TD7(L4XgS6yD_+byQMDsXYzm9MX^X5Zbl)g>}II=WKJV~TG0x;u@`>?%B` zzun%RAHTou?}G;ko;$ByyJnhw?aiH?#VILIo}8Tg_RX7=sr`1pJRZG!c(~m>=f;Bv z4?bK8_Ah;NBk<bOzq=SdNxi>rs=Oy&oVEM=>sf;L)^mTJFf;GQy{iSOTeIXhZ86_d zd-Fj=)YkubN4rGD^<n~g4;myKXn1tAd-b#XUteF(KQqHn)oV(?-~H0|b$^!6uiI7e z@sV4vROU>-dY|v}*Z=wR=LE<Wls?Ai39Hv=2L%VW^GF(%y}6;}+U4Tzo_}+bs;cVJ z*xhB9PF+&<o)!@m<)t0Ct@87;&dyHX*=B1)R$h8{clX>mb5zvBR|Gt46_2whdg5`o zjaOVZN+oi8(bH4e*Va`2d^-JqaE@6pXi$}bfnml{`MMtur-sL6US4+gKqGT<Qj%5K zn;UB)H=mnp?e6M&^!V}cl|imze}6pgH~PH&ew}sctB~{aY*nACsi>S-T6V?Q);88G zXnmaRT-I1vajwEycA$Z=nVsKE3bY8ar?2nZmoHnkZCe+xuxat)<e5gPIXO9(E?wGk z^1R*eH8EC}mZ>Qz8Olj_b`&o4nz|}(@2*#+Ezlv^mowAn%{0rs<!}G@$`a4Xn^I3t z(+GTYX{ooTr)T>4d7;Mt#82*8w{BgxxPI8)K2YbZ6-$)e{{A{GC545Zy}GI@Dl*b@ z&EB%NQB_sDdV71PPoJ(cbxO90)asCxLSkZS#X7pWOIHLebjrxcxVXqwR#rCu?yjc~ z9~S=p_V&_J@6$^+Z{D1uce6vMw6O5vIw$!PyBN4kH?5OYe7z_E(&~NY*mUEscH5Hb zRkbHFOhne^ZrBp2Thv`V1GJ4q;lAgx(zQt%7av@d@BhVeSDh+tTOKYht2t*cE_M$N z3c8~52RcS@B7agTXei8l_Wk<*fA^=~-LhrN&CTijr#~H+uU`?E0$uC3`QzK|_dyF< zip1RAkN5QOc%JzD>}>R&ij8K82b);6!`Dsu_TXT%QQfaEnYlIB*Tr6XcV}mC(zm_U z-|K!nWX}v=AGcQbs{G<V^HA5(5$uUS**YQN@X_K`ZJotMW+ruxSJfPhR=Ldcp02m@ zpMO|bSncm`rA0+SfA@EHbV%4%eK|AJc&SDCyO@nhM_*l8S^V$M&snC~UXN@G9vn!Y zU;FLV>h<Sl7(TwWHM_B~F?LtUOrz9OKR!MNRf)HA?(f?xqQCFQqhDWN->-VDTV7s% za@YF3-)8mp_U>YmRYa@oe$Fbr{x4~Undeo5!l|pJrmYFu%6TI8T5oSJX!dza=H)kU z-!5LXXqn$!tGqiqK;7&+I}9~7SEihtG+Et0@A|sCkB)Zd-`i6OUSSnq`}OJ)&&j{O zzn7PnU!Qu5-~P{qix&ggo|=WMi}^X(-|k}SwWp8{kOBX>bLV=c&F}3hUHxjajCI+Y z-|zRozq)$*tKv_8KA*q7I{baRe4T_rg2O~5*K>2N&GYZ=`T6<z`}_OjKW(11L|^7Q zYru-anCm?SG2*P<k9VcDJl=I;re5D`F3$q<ygMFVUXynD%ryG;?OXY~J3H(D?^~0R zo2v^N9{Bp@i;u4_XnynUoqe^Su7gn|SLaqSF)>lCkR8)q*}SJ{DE|C;u&lIw4flco z<=3+WH|cSSfeWsQ#=@s}2^~>ckTvn^`X0CBi;G-!b#+7g?;yH$nX$34-YJhCK6Jc5 zm8s`5XPOI-hu^*X<;3}0E7o>OdS(gzW84JZm-S@3kMpzl-}`m;?tVCN{?qcm|EjOW zZb&$IcXxT{<g;I1UJea?0qb70w6-o?wrth0gd4j`U-w8Fi|Ix!scLqN5)>C#|N83c z>iT~_(=*q{?Omm-YXcp=o8~viLQ%2o!UD&oUQ?s?RBY^FVPo^Uy&>^%{=T1Xw{)Yo zdE8wYyu9-Bv(&YL9grr_0iC;hDnI{xK7aZm*KV=$cXuWpI(^z(@9v#DTORMy)6;Y9 z7TdaYD=6@{1wdAEG+282`c8eLrE+s!%+8>$%FoY2SA}@$x`{#jIHUL9-`~=`$E+h) zg{`$Jc@dy_?~IZ+XerqAsoLTHzFhWS3R?bn=gys&*jV>InV$(y4;`5?bLL9IeG9#k z^&)4dY=`uB)z+{5d(<Fz(yGKqTH&TTkxR3L6&&B>MU^<YftDJWNO<3_h>!wDHDps9 zs1+D-W>?4Z+?Vckr*2MDdSNFB8L=c{3Gs)y&J0|p`-)HWe3<L35mEDeg5=5b?`3w$ z?ERhcgzM^oEjw>b`8oZ0#MK1?=*`ogGfUI&?z2$%(vg*LE9>^|xvQ@FnQE|Dv`d28 zrk~=MDSq9eSed?U{@u1SDW<IOvFO-kDR+%;Hm&>fr+<xg%@5Gh?DvQH?e|oEUMBUc z`@H@Cn9x?(G7>j0uTw`lh249lOiN#d<fgp6wRN(ZFK8jq6>vr7#WPJ%v3p5xU*A02 z>TO#R6B94##qGIq|9<=}&;-%ya7aKHNPqnJ5wr>~<@UDR=*;x9v!1?tXIJy%!-NSF zPMkQgIsN>y<;%~{wZ4A+dN^CRnC`4;)6DYk?J>V!16m>#U-vULC+E#XWp^E2-PD%{ zo7uPKz7m2C0JJS$oIKkschaOuckbL-^7nDS{k8S+_9ZVa95~=`a-)%w<+kkW>x9*O zBy1`^tPEamWNgeYV_{JF=}F<^V>@^4Qd76LaNL!3byZPjZm#b1DpyE9$@uc-^z%PI zKlk33dv#Ul+gn@Rd!<wvZ=5{oDYkUkvU#@EVQwmS;&v1`9?E@uthf5>D^+Eo!ra{4 zt-3Gd?pv}f2zYGWeum?|WlPi1a=w{@`-(X%jds45Id#TBWu3v2xq)y0Z#J^vHICS^ zLT~nr84~H~>D=7iQ>IKga>PYkeEN+W5i3)V+`Su{<+%sculg7rnU$P8dEPv|?9`N$ zh^Qzr%^(#ktEguYk&!1;Zcf=2`4_rD^NIE1iwW1SJ+OFkQGR(p&oTD)^#8));o+TI zgFHH>-pVlXTA&-YW(G^F<dipB%0-&WPR~v(aEXc3TFVj(nlDs&ku~{g(0WL|pYXqj zpYL9jSoN3Vi)I}3@Tq3nAq=X}@$_yWc^`{{V`t9zgwB$HOb@cNvxA1(2@LOjx^d_B zb30Dk6;d;{MSXkMp1pUWRPcnEi95ERno!}km0xl#ud1C{#I6-$J6+KR;653@mU?%_ zsD(Gc)Mrj@u5)kjDl^uZFWa(XdB2CP{-(Hi@4{=T&Aype(?GLo)!*OUym6yP+I*eQ zOrxwX_CH>&UT^p3gR{B0`PKi)p#E<3ww%AezJ}%>(gAIc^Aaw8d1)!}GrX0$|2iK2 z6AL|jByzfe$bW~cYKoTy_FkJ%5?2cHgd8*Pv~#P@rv3i*R#?p^<KCX1+wa%i-jwPs z8M!g(=&sV&j~+kXyJt_{-Cd@ouddv$`>ktXVPR`q`}Nh;#>Pg;$h5PwR395@Sib)8 z@p1XPJDQQ3o^%SUD=8_xdGn_1{k^?4KZ`t%f|h!}Tt1&q&L(1Wns0UWZ&q%xmX?+^ zQCqbvEq5jz?ed<kXIu4UMa~|_X0}^z4I_8f@6U5^X!vuhTU`I$_4V`b_!iwiJKNm< z*82VbeqC9~{y%P0=H+FU#m~;nu?&{u$$WZmO1q1iPRx#gsGa*k1HNy?<7)&(MW;@g zqEdeU%gf8)^=w7<c02e$#nXZKBS(*VZkoE~>b~0Q%>BRL?KVn1)gx)_7PRh(k?sOd z?VVfv=2|^HHTCz8$Nm4muCG^BQ#-Zb#{T+xCnu+hiXAR7k$=Cvy}fDL6Mf0)OG{s0 z`}*O-ghkHne3N=p51pK>uF843gT>0*+ne*iT&vPat1AkEeWKrO&I4`g`tlOARqM*S z*x#3ydVl=*QRvsw+V6MEpZ=R_o&Ema-n~^{U)|lkeg6FUTPC%nPW18c^_^OFeO>IW zS9W%G;`(uSw&mXLl{N=$qwJHl-uLg<>uuY%-P)SM<PdkM%+!GUl_4`%SEFs4Wnh1l zT|hX8u>$|Jsw@B0w(dJwP*gNYA<IN+>-TCo%c3Lq@7G^h5vZuBD3qbv;q^<_FzLv_ zX7<aMFK-QPQCX9Cxb38g=T6IiL04CWUhaB*eSQ76o9XudekA+&^q2+hEK1$EW#h(+ zQN<tq@2}T>`0sZ9{@8srJMSo0e|z)t-rn7Jl$+UjXW3MK+EMrz*6m)u<?rwB@jD6@ zZr=R)&d%be8zYfB-I|^|H*Vah>NRD;jhH1Kf|WN?PEVSk`s>!so0;J(HYtgT6DLkw zDD}X9XLZt^TI>DyF0|Iac`kH+)vJvsH$OVqEfUxL=>F5Z@<MgnSC3D81a-U<gHux` zeh>Y8Lq}KlzZ8$$WZyG2zdIJLYRvTBzEbjerGsg|?>7md#E{P^Prv=$)y&R6?Sxim z_@>qC*T0`>oUY=tHT$|>*RImn@9ys2o_Tqhk?*HfM>ehuUcN2&_O;WeUw7;8dvR-P z_RC94m;1~#N;@;-@^XLgn(FU&%Tt4e`c*q}Z*E$eetzDjM+X|2?SDQIKA9nHmNP-- z`@?qmQyn>uVN*V?jou!&ry{T@{^BCn&3Sz<f4N77KU(2(=llKo_<4+;o}Qr2K()JD z+POKFiHBMyD!cc|*+!K~7JWY%tHT)K<~3EzH2<DWrN=bg=xZAi4`*Fn_4fAm^Y`w> zmFYD$Hhwbj_-pX`)6EcuPg3)JQ{8^#Xo=|9%|6xh;bzE*nQ?ZrwG<T(o;&BK6cH5_ zm6f&X%E^-_gH9`P9+-4`OVqKoYu0R;oV9lCTGfJ+N|Mu^tQSbg%j-`!Gc%jCf6L5U z6QgJ9Z{;}^>R~l`_2#WxuZB$*H8wIzaS@wY7j(Mz+Sl)(s7_q!HFe3fE4Nk#t9Pyk zty_+depGjIl4`$<<)*BwT9H}{_xsJYGS9y^<%o9p_dCVs_x^k~`{Kom@%4YV-U)W? z7L&E9*l_2!y8pbGEg2K<)Ee!K-kvwxJYVfK(}`^Ge7WmEC2-TYD6J^c{PF~`#1kF? zZ~q%h<(!h}30viy_YvI2L39{B_NCpu5ziZF9Lg)49(*$36?^Dn%+}4U(qKNRNq<6k zh0_BsJ@_(lRUijw><nB18Tdll6<8Wr^L<$t1U%ln@(jm(-`1w1>A^E6{`r%$>b3gc z=Cb<rQZvk!KN6KLnZH&_gb8h`QzhQM{pT5-!*=`PultCs&3%#Mb$@-g%`r>x^7;w) zjf{-z_f?lh+}P+|XSciVPhHijSzlUIR8^NQU%pz++e_@~3lT`8<WuyrgAdB}-^~6{ z-2caid%wW<`J3OZ3SE6|ef;{X+1J<I-C4Xm?0@;`X}Y^>es0RzbfRnj|9`u)O1jp7 z$KIbU%)PyBwt2qanN7*Z`;PTW%UhLXq=-pQ<kSvZGokAJy}iG`zn`9TWkuk@g9op! z4lge$nX(kL?(*Q_cK-C-GYVg47$#4eJb9^I`MWt=l=SrcK--^uXBZ^@{PYyG(XsGx zTaU+<X{Yb*F3-NMG26?xcEU;XygMt_?#R5Xmg&n5@x__uy?g(1>+cZ|5>op4`KWk2 zXz#(x%gc}V%m4rP`#oq4xEc!!i%0a<tgDvA&wAu+t8Q#a+_r7o!-o$)e*74{EoWuq z=4CotH*TCbv;NP=cC+BF88c?Y?k@AR&bY9k@bR&wOP0vkR()yaw|jAI?QPKU1F<vp zXGZFQdXY~~2+n-@?3r5k6SkQBb+Na~-rj0$Z9U0y88+f_aYtb?=ORZ(#~>FsH?IeO ze!X5lT`x9jS4n2%tCue|r>CBp^78KP?^85`)qH1(NJ-7wI!{qc>(uGf-d)S**G1_` zn`Ws@KiVbg?d$97=Vw>^tS2Y^U=!=rRiUTPoY4td((&XK`|8x-^>Ma4r>vPhZ(iN^ zcd?$QZ|ztK?X29K;G-QGuC(sRl}}GkpZ55!bL(Q%*{7$cA3k&_WrOc*Goiw*2XAf7 z{{8c(=a;$m|1YjLD<~+?2wc>%O;%f5o4fn}`A(r)RkqVn&(F^fcdl1l`0K(#=S?N| z_tn<No)*E<EqG|%KEYV{_ql~%&YW2nUKd}h@A9>NlX+C!y1V<foUK3Yc&lA2Ix6Z^ zs+*XmN*343r$IsY4)e!N%e*ADdCAhHnZ{dPZ~bX+4LfZT>6+&CV(Pbt%eH*nfA0LP zC4tjU%}G5yEp%nj(!$5bHeGQkhyfo5@@clp#+{;4cUOFVrfe@%;vMn4=F<n~NtUf) z-fyM^{Q8ivrc6^XL|P>1^n#dEJIs{Uy3PK-;li}6=xI)RM-TgEKCYju-yIYj?Cj(O znnQWitv@T|f+&BUDyRXVVDA}FvVD_o?&Ar6j~i)EpT(M;{n~4)R_N+5-|G1rJR!l1 zWp)1#nKXu0sriR<+&+CSo?*`3A23zZP>M(Gm-%jot?LXNLo0irvt31LN%If)>~VuO z4n6A9?wU@oOq$VazWT{!;b!oXo)eOh+b6)rLR9QGulxAIe^t}T(>WKMLo0g_N*?}& zo`eE%7kGM=XJ7q?lq09y>-^l;d7kwMnLKaBlP6DFT3D{yw4FF{V#^kjt1}cKo!2M( z&wOaPJUzKA?f1>O(<ZK2_5?ItbYnx}+f6yQxB2$kwOwBB|9|aI=XO3`e*W-YNhR>+ zhK8Fz9(C)3Hp=bSDSdV2<e4*j>i+Ipa{pj6`~BVJ{%SH-B_6L7o!jQv*T>!3S^V5< zckS<QYqs(Rald7F|Mc|qt!8R!Znq?j(`tUd-F|7FWwBcJJLZcQFHTnX_w)A;-}@7? zbiJXHgP(tY_4jqlmp@<XJw5I0EKvagg~;-wU810YoE?Ra?^QmR?OZRc?l&cD$IhLy zb~QKd-mSg0B@?u!{Ob96w%T90_4jP3{G68g_wV1OvbI%U7C1Hw2@9uYw)4rl^+;?i zd3k9~wsFkPqSS*;to!!un>KCQtqw^@U^Y}16c$b_m_1=az}l#-d3SgH{dipd(mb2W zPrKjmn{8iTw>j;s*AxxIk{1_t7C-l!XA}A918Bp*G+k}&Q#Ct5D>`GubfZj6O+&jb zFZcJKX_Wf#P;0N0>7=(eZr?urZSC5%^80+t|Ni>QD`lb)w4~$OEOAJ*%wT6{Z#T=m z<-x+s!?UOA>#E(mck|eNK4YvKy)EbVw%nwoN4?VKDhIuEl{aqOSo-RUWyOaDK5_eM zc5Z9k|LN1GNi&r!EiI2LZ+C9v*;)O4UCdmSMAH<zA9bKbH22qMyZxw(ebVv%x@%d@ ze!Zf!r2Fe<&zxEK<J+Itg~vnwt9vglUHvKkcJ$7bayySg=E_ghA4|8X+OpQ->BRZh zMAdFZ?pmSwgB{u*yWiuscx&t4wM&b?$uFKb;~PtXI`|}=FKypJqj?qk*GWG7yX%A? z$ikmL>+b%z|NL(J-_ERm)|D4?L!M6lc*Oiic;&8->hC`0tu1{Sb=2+8LX>)NqVgua zO{dSVkv6Hm+36U+nr+$HtG8D_?c`nMsCWQU4<hZmDW1V7k~IgM5oOX28yZ*5j#~KL z$8PVWhcao#hb+&W5PWVRZU(DmpJZR-U9*yFhTZz&RVR`m4TruHyIOf8#T^#9T{Bhw zIji)2{VJ{*cGEi%3Vd{5dkKI>zWx2f|Hj|Ac{4KN$)~%^w&&m13tZHa#T8XlwCRqV zzrX+0=lb{7gR4(g1yj?|O9^FJAL~DyRG)umce#I8-QQnt@9&S7uE}_IX6C9Y9#AE` zyL`P!`MWzmU#(uh<>3BbpHA!lfByETzLS%a-M=5nSD#oz(@1YmPtTb%XH>nX@yOfl z@tmw?1X{UR|KT7zXlFTS;mb5{d;9&dyUR{4XbJVaVpR0t0Ar>rXp5)R%_%W*wpE~0 zb2e>lX=z!%|6kOz9tlIIV}Jkt?U%Q=%eb)Me%){1TbY-aom}KQ+sroNa>5Lo%1v9C z+4-h8Xumyg|6k{A`uy5ux^vC*=Yf{(tqNH=X-m=4_?nNcJuECN8N#0!q1ClpQqm%o zOS4R~r|HMXMV*{;-sW@9kyy$7b$_cWDt7SP+gly3w1Nk;UO+?R#iysI#r5N+l-=1; zxH;|Yuh*TIK~2LyH#evIXJ=<~b90|uXSCL>SL*b1{rub8a_{acO+Pc^;+n|K=k5RB zIet9-+#JhITcfw<ot<wVzx&ejdDVKFnlG=c3>KQb6twC0%uHj|uG1!&pzTJh!`GkM zdZPEu)z#B;yqG`>d&{m?_ClIEX@@gRw&mTe`upqa_xJawfBW+Ca`m@2Gi|HOoSY8D z-+vmtHp+BoNm0?H6lrN`?a1(FYvT6q3R@esi8Z%x!{*JCH~jkje!utJS+leh!<Nmp zELKxhb)CJyvh2-`YipxbUwf%cyPAK0-`^|2{wq`24)3l0zA9v;Qfo`f&d^Dvwl+3f zT%|m(WM5k|u{V58#K-m5=PfV!aWf=cm?<<h%!qfUoAbioUEQ0^RPU~d31JptfwkKu z=lizi{K(OIa)QNvww9e;ob|yUg6r0;`~P(FN;ZBuo2)A<Uc7j5v|Ajss7ygY!Ng=s z;p1bDj*j|!zg)Vrv)H{yVq?ZdC4GH;$(XHKp<iEJRjsW1ez$zCb@{ZbsZqbbz1{lO z`-^Veo{G=U&VtU5a_g1ythu|Va<hm~cIwpfdzI;jS~zv1wyX$QdFkHX>ZjN2{(iYE z)O>qOrgFH}%k817!|eb6*}Q)JdX-o2_y7NQ*8KjRZMo5JZ*7g<mSb7@=}F?@w!6DZ zvkx>dPAZzN6B)F`V<MNRmW)Ngg6i+@jO<^BpNzITvujV0sj{=zx6Egs)?_s_9gsWR zGof^%@g}`Zim#R2)n=3m3kk_t)~x#ZKJvQAlBG*kRaHF|7w+<&t|v5OYvJTWkn&;z zsL*O|ZjSc*^j7D7%;YuF^FckbWs)V(?E+j4DYyQ+oHYn7D=Smov}4DNchW*9Q7T(3 zjQ~i2h*TCqk`rvX)RWykJcrk3^G@DZ^CkThi*wAHS(CLTB_+$>-3jzH%goGlbaY&G z(G-%wMOqr{dH%hY`+M`xYDG;?-xHqG^<w+v?e$tyK+R597Z;DcX=i6Kv-5p<ch_1) zMa9rC@Yb50mOJYI|C^xb9I`kY(it(3PCYf{=gZ~umq?i9M4X<cyY=8~^L)LC4GSth zJ_1#gW_o(-!lzxh5Rj?LU;pRh@k?>LN;I>p7D5--ZBES0ya}3N`unT&<)x$7u7$ak zy}uW`E$60dx7gl~$D~hB)15r=$&-}K<-W7c^6u<dvSi85;^%e$em)0Hc0D;c`TgD9 z)3-|gg`C9JV7W4E?W`krXPIVatvzym`MfGGE=kb*hlp#p*i>(G^X*^0eA%*Pi*fq7 zHF0~Rl0JMsZ?7Nt^Pp8LbkXveGsWj^)ARG!U;X;(YV@v>mlKuU_x*e}JAGcIo12od z^3u8H`S-l__da>@<jX1T^;7iY@7=y_t)+G9)~%>$@9!9=Ow{M(f>-sJFG-o7rgwf7 zn+C@l!!sSAZ7)xof6rgVwCsH9BCSsmsO$Xn=G#@NXMEcv+`KQ0*Jt+X?ct||r9+ar zjEs2V`_2CBbKlB;^On@KHAW)3%c9`B|L#lnwmn?T`_EebZ{+5i5B@#iN%`aa-{f`P zjSY&nwy|70=a^<++n@vLG)?^Q;lstn?)|dX-yZIsukJrj$D5gnY0J0Y@ApqHdwObW zl(e+;?5*E6#O^N3R0g$N7x+&q&CTH{`*ySLjhxOQ`)R+6XH1?nX<OdiUG@L}bqcFT zMMf@Ny43TCtX<8Hs2l^2Q*ZC@ug}U_m2yiTRAcDx%ecJEcW>3#Wxlh`Dn2}jum2mm z?$_7r@$s8dP8y%LdHm`XXh7Po_LqmCkWkR3l#{u)w-xejepkq6%q3IJ1Fl*npBpI8 z{$tZ#8SHT7&)e;x%$LLV?Rd*`-)ohl;s^ix>#d8Qo#6)^ca&FE^=nh=Y0w(!=jUWQ z*DUp({_oA^^D5U)ef$0Gt##$6l#_e8#q~<c%H~;@=e6_6PScCMwb;G?(b4YtR;90w z^-52gnaT}Xm2!9Y_V)JnoSWy*uaDfEw)4a;*>zuoMSbo)c(iwxm1zKPfWVF9852uI zpRdq*pZoh=Zs@@$TV;N1UiB%WA}eM8>%|~9o<8@wJ4k+|T7Rys+~>#ZIIbSpQYp51 z=B3lYruFU*e;TOItxSpx|H|eZ5pm<j#^mMx^X-bBoX`wjmXea<acb%s>x2Uh@Av<| zclB!Mro7{Qvi1LdJ_oHS)`|S|<KyFr6DNWu879Om_nX^q|1aYAB#o21&dxTk|8X;^ zzdw9kTFM6Z_sjaehBAw=e3M86HTS>PNQWMLvh>%o6<Ymw{ks1s^sLF2`(*lhUdPWu z^~mcsPxM|(^&Z>bCOc!I`nQ`Qnwpx{Wp5@VeSUUUf6s@e&6|sFZc5F+v!n3st*u#C zSAh<$YI=QdZ*^)@N>rxmHPFVCOY0&xFAG}g6<_yr>Egx7*Vo0WzL2vla`_#mQ5hEb zzjl+-nbxJPtyMP~m=?|JHei2ccv}3GRwCb(<Z0j6=u~dZHdC3iqFwiWWW<NS^=ZoG z{ya_VexCYU2%6fyaN$Bv56{ZeQ#6y))5V2^l$yVN`*!Knf+hDsOV5J6oYvcTr?{vs zS+)$+1lX~|L)+8B&@eEluv18N3ojcxyZ6Iq&%)M3815@xVesJZE{%dWhG#tX?Tatx zljlmZ`}OqlcJ)tnvBrmfmrhi^w?6vDlYjDy)~s2h6}l=!wfjl*$t|D_P*L2w4jnt@ zrWUd$B9MF6qMDzdj2yXlIi-26W{p*puGz3wD^%r07C7%PJYiA?FD56wOn1mfFZ7S0 z&+h#?ehsn^9<|o`QGGT%)NV#{2&+&0{+cRP;dw$2rEP*t4RY^&yLxQ8^rBfd-;QrA zmM)hG;Pr{_eDsd_UTv_c2Fr<E8XhUJA{O5y(puJZ&zV>{(YG$`Zu0TIw|901n;PUE z?G}H3clY+J0FDC4dN52ULf3-A>Ln}+-d}fheDu3C@WGAb8G`%b#VsHI2H8`$|J|~N z6+dt1gZAUp6yBEHH#MZ$sR4E#C#2(qB@jX5iz;@rxmf#b+aw=uUOB<oZZ_A=C(qM^ z-~N95?N;x?RX_Pt+Lio+-+tmWT7Nc+t8DX9?_2!8H%!Y4;FwSvIN<~&5pYC`TPnX+ zn*Ha@uC}x3yxiYbOR25fvpX?LJ#?|a1IWxhmeDt`Z(!-DZeM)))KK2ggHKAmtk<uy zfo<zKSFt}&5xO>*fEl1&Kz$YaL7kHCui57ADXz%}&34}Dy1Bh(Hx?%=y;j=&=gh9# zhc8cWNm;?R?Cj-x1`D@sr7Vh2+ZGP_B-LztL&Ho%SSMfCe7gr!5_+K>Z1CyE!pq<P ze7_gS>l1x4X&dwI&;VX8#!Y%$LXqO&I0Ut|Qeso4&yW0m=i3D5?$0khJL*r|y}a}A z5j7mWvcL%z?UG>4C(jqph?lQ-3^k~fb_)v+m3u6cW;|*AbAx<t%PlR%GtM%DdT27& zSs54@icYWi$9>=m&KW#NBL_=-LAoC#F9$|U68gT|{O<4X@9liDph@E`TTC*a7JYhh za=KpZEc5((%Y0|2JZYD&`|<bteb5Syf`?9-*Vo7IPdO<x(;)SfNM^sRwOQI3iA?ui zDN!*oF>!JAx1bU@<@7Y&j~_o8u`@6*Ff_!RsJ&KNSorhV?0hM+oE2LyUc3leconwx zmURA}jfIchJP$oTKY#jC(4le<54SJ9yCKmTw8^Y#^5n@|-1}rce*HRiTkP(#>H6{W zjMMva9{%|F_}#mApkpl;FJ8PY5@ZR(KRxg!hT_y`XJ*RRd}y3H_3GEx*T28Hd3kU3 z_Zc&0I5xBS&a<h!v!f8Sn)mJZx3|M@{rme{AMYy2m^~F2&z)Nrwl-=~Z)*0YRD1jV zYQD29EG#m@zx=Rj;|mb=xwl}E?QDx{;m|7h>OAAnso!_`>|LfcV^6%@x)rNz%B*!i z9iII-g!yvV<!!HS2r-9FKCbt6S6xZugsg;HcTQPt`{^XRqPoUy@x^P`!b}ac{dHb1 zTe3taYKuqG+nvSFudR!<uKMyKaIstMr<3ZLnVI)%KA&CUIoYj8;^OLXeSLjUlK^zs z%Ifg-dXbw_E-&+~|NHeim#CJ7rRCpmxAX7rDxG{pT3R|gKYxGa=QMfw`7tSXAsY{* zgEsjaPfv$d%17>J?_2fh-s{KuE4bA151)9o>QwSWO~HK!l|#XcC39<bDy}-2{Cr!x zOjJ#rsX^|$dFN!+%mR728t=?MEF&v>cWd_bx3{-%&%Yn{X>D(>?@XiATibH2)6dCp z?lM~FKi>}2BU<3ttn$&zI`L4;%HZXvT3%h1|Kt1W#zxRQ*%Ht~xw%%QTH)*NEOcg< zoH8-K?x(Bu7Vy}DgWjLZk9SobKYzae@vdFR3!$~c<6S2NkC#rAJzhFdx$m`@SxT&k z$|gN<V{Ov>$nqaYR96|Peqz79!t2j|&-vd%LggTfiHcmV>E?i{nV&OD*B|*aZBAXh zsX^}5J5iBQ5v$euHy$@o{yDQ$-FMa!tr>eB9&TT))el*4XQ>3SWyzm2yR4n|cX)CJ z^ZG>Z?lR8N`Ty<z@12Jsoi)&Kj`C|I_msPb)V|O6Wt|}{{5M?|lve#A$FDIUvh9bu zSdk@vYWKg}F=NW>RgIaCK_f}`En8$h&UHS~_x-h!`=0pi8=&h9uvBE|r6hW7jZqa6 zEJoG(OZV*1F)#$x)W7%KFW<N+)K@OKKhf>a-e;?|<V$9(=9;mu^!;k3{?_Gan^x5N z=iZhp%J^6bT0v87RX*c}3$#N2IkWWjys!3CEBs9jas&O#HIq^o&$2lN2`^)4=Qic; zp*G0kMMNn@_;^6ja*rwV?^~u=#9yCK;dRxZuyhemm}|(~<KVizn8Wh1b^8QfXqbWq zzF0NmH|O2qaXzLSdiaQCzoEq2P>AA9dPQ#6T+LEqpLDE=zJbxacqo%5vgD6V`_CT_ zcYfUXa8+Yw^}3q{+S%t4k1e)nm$ZB=la_KAF#spBq^5TNyHmT`cGs9qompXiD&cf` z@Wa5A*e5+}x^qtKIw2UjeFOAxg9gIK9)7Sqqv7%Mr{$U3ueSDE)_R&6<gR!Bm-zVE zB1k}fusm}@a{l3-oF6i2Pdd&g>g7N;mEdUx(IWM%{TaT0#pm!)=F8VU|B;FgSHJqi z@S8*$q=a#7-?^&cW%T!b7(LFsj;v2NcD_|?7n>i>>oa@z^5XVRUr^&~O?T6j`H|lj zvxYanS6R)r?CtaZy>s5^giZ#>FKU!Qno=hOBgHLGonQ0&+QX30gHLp;uSLOU6~JNs zcbA4v&#V2Q9Qmam5e8h`!nTp}3=9koa*z>vEG<3s{B>-`%*;jd{;!|I_R(OphCkhK z=U&Hl-!qKY=k|H|YRj9Es~}|zXy546@4s@o1E+dU+<&7cyuyq-YS$_)Qt}lzsdmde zO}`d<A-8)~!lz$4^{%L%g|!+%3pG2TMW%A!YbAG?>#k)#D`U!^x9zn*8?#bs#<rrV zr)q5f7lT*5EmD|R3L2O$a=GT(cVgEGJ$vwEs+#}2HBvLStqNVeE@Gn-B6o}HMwL82 zCwuk47G5cn6X(wPnO64Lwn;+UQSM+fTF*|d*`Jq{m33<VlCvjHTzJ)97&Uvsym|kw zo9XKMW~WA7`|^K2C{h?4^lUb+(VkfP>B-6RO`xG<w`b?(R)2bOQrW%l%xrUi(BU@g zqPBWX^P6ep8YTJv)#~+2WR25&JUl#da^5VTUsv_$2&d%DjmhpYF?X7K!Nc_*zT2LB zyzBe>`=EswDYt}Fy^b6|&d$bmZDsKDnd$Q^%icuz_?%hhJ3DH7UhKA<$nfxR(8h>g z_p0A}-riUHTRVK6&ulYaw(YsM({gj~t_sywS6AN}2zKwkW$ORy?t)GvUL$K)^CNwJ ztr}<8w)@-j@1LBk4zhC62FTJ6>yj56N?u-)v#k=*kNb0FWw3eP9gEsuTbA63+M2aB z<Km%Hr@Xd3e*XOW5>Mgk>gwFh{p*8oID{U2!dvqG;*pK}vgBr8oH6_P+Yd|4os@$^ znJ;f!Fn{^txA*@|-*Ly*5Hu1H`gC9L)#TH6H#_N6m#<%y@af*KjXPJ#MZcRTvHh|V z`<-7-rUtpDxvTp=N-UUleA;ex&_PGb{pYWfnz8NFRBh1wvT48XJc*y*43#Q2&AU-} zx2LD4qk}_JW$v=&%XjbGDXJS~VrOTkrnW3(WssblTwGjSVq&6^qN!=<EiO^5IhMt4 zw-zi|uqpL)*}FS8Po7+vd3l*o$>PO}Q~Pu#rBBUy`+kyWqFzo;&XvR8%AdUJOicW! zaz4pn-l@CJXXKo}Ur7duMk-zjJtVW@_?!19p86e|CcZn(`QMAx?Qh?oxGU@&cV<O) z>&eq!g`L;(7k@qy_t$%$ta)C{^>wl4`S;e;O3Yoq{`~|+XS@G@K7+<1Zh`i`9&BPY zT3Gh>)}?(Pk4gXj_I7fZ(59Y{H4z)Vr|Z4n_j_FrXe#^KwQKxl;FAUp+@F4W^6pQJ z_bo#to;)w-JIWtBT~KBzXd%PVyS;teR-H_KV+dYq2&t&w%Q*G@IJfXn+h(i42#aOQ zt(PzVm@H=R_H_Yh<-|_3V+#<~KjrOy31eg9(9EPifBw|e)X2!lg#5p8i|yAcF137* zlXhog=7svo-TwA@=Zh08R}XC2TK_*&+FBdAM84OQ7Y*turT^5%-sS@xwPaJdDJ$XD zs<5@Yl8$mgi-)J_*JKOTOsA~KR;#NxcIx7(6_9#p0=U@N1Z@COP@!*mclmGN!i}pM zGhf@?KYs0E6r@N2&B!b7E9STfY9R^Uw+y)foj4~cR0A_4uGTX$Fw7H~{P&+9LrScO z)E`wQ1_u9G7f<Y8#;gWi6hh6q6TRvnr)jqKcS(In#+s~zTf5GG-&ndO%vX*(Dk>(_ zpfYr~`wFf1x-Yi5h8k4XPTRj|m5mtYh|9LDtE)~<RtF7lWL;gQ9kvG1?*-SG_gdDj zYC8El(M3D-sV#WzkdpN#J$QpTCH9Gi{pNR<WnY0dRvp<jdDW?E$edysxF(9e0j+@p z>(cI8EzVlWrS|^H^z_iF-%o%JHRyf=YxQhi$-qz%lI6CE^WTyb>4)xhSCZKn4(xxt zLyt=c(wtXv|5+Kcz3%U?RZS<kIXD7B<sR=?C;4!PUeS@lyNB8!t%B{@*Vln26&f>d zZ%*&uym@ohCke<#0i-rKJP95y1huto*4<tkz5T!ehpPv+6vl{KKH8yIG$sFd>3h|? zvt%zgn;PVb#=PG5_HS?2CyC>wXE~0Sa!Z3o2A&%zyMsO1E%P+`n(2`kL!H%&vS#cs z(wB<6z4nz2XfhSK1q-rG1zOMcS*+`pd3w9>?(glwVZ8r*O$~CFX6@MjtI}@ofd^o3 z<t1Va%`84#JR{!jN@%D-rSht}A4waJtvZ<un)n5^H6MW*dBrm(%7UCV=Wxu87Y46C zox0lN^TJ|f>D%zo$;TlfE;F%o;^LaqyRI)j6gT%<S60F;sgRr<3%)yDePRfXUoo>e zhj~Di81AIL?7*fxFRxST^J^|`Og`>8S#9akrKu??Ep2UOFD^K`g{_H5+%$g%Xf%Vt zpq6!7>GgH7xA#_mzq&g7`s(oaUtV5zbaVtAeG<0k<1y(hA&_MZ_3;O5o==DYO<q=m z&nf;Gyxi~ZiAT?#g{=%)DrK4lT0<aXZ*Q-ytt~ArojdjT_mlbZp!Br%)!o;XHj8H+ zPs_}lId9&&S;x(ikM%@v&s)j1EceU|!&`L^@=x9sZnkZcoOvl{*DAT$tw)>dFM%2y zw~m{qygd#|;NN;zuByuU#H6gN>ucKoHt*5hkM8?IczvQpx37}F@^U?>X56pL&M!A5 zeC?{nOzp@`Pu%7IzTN-3tgOs;mPsJ*8L!6FyFWia-=1@GQ_as$?fmk7o}N2PUIt}k zyx`W~b74<q@lWn0zSi~sYV_h3IDCI{RNJ2?W%};x8W+rO#-50u!}QaeJ^0u=Cd)^i zjWUtZ(c!DZd`%6sStpksZRHl9rW^h3QMdlTf4|@V{q?oDtSoLvLE^_pM?uHXUkn$@ z*Xw&VqZ_n`StHP?F7>MYyvN7;!`H>!ym~eCtAn54e7m<VU%q_yY+2QeolBN1X=rGO z`BVJq=H~S5Yilx1q(b?hxO|iNWHa&l_f_pbt?U2o*`x7)cRy&2fA;ltZ=XC_Ql&8a z!-o$&Jw2C}dasr<U}v3H%02b!>hSfEo87p#uZ`Y5?Kfys_S4hTuTQgErs&-E<=x%g zZoN{g+WVF)UHbFaFHkj`duvOe^G?&OD=YlwT2)q8ua--DvAEx^tFQ0cxq_FMm-oN1 z-S_ufbneB+pgoHp9v(hvuuDW#)U@Km1Npii2d`ZV<9&K<N8w}8G;94nS&;>xF@*2; z>p?5;c4c2*w{YRYqRjO4<+`;#wpCw1Yj(6kRxGG`(Yoi^9P|8pTeGh}=|5!ur+Y*8 z^>tUSTnSqnwNlQ2z2<p<9cZs_la8!aiGftFrluxn-^$nP@zH6W-QANdjnmFt0G)5; zwL9r3*UH=5a;v|-y1FJ;Vq5NQHD%B>9=6vfsd_K-nW^*^bjtSES64TupTBV<V&>-B z-{070XWabs@9*zRezQzGFKyjY{_f7nTWmgo4h{`A&P`2CTgo0BXcQC_G&D4v6uQK= z=EsI_GyZ+K?0@Oqy}i-dzrWXi@LRGq`?{B|;?F-nKl6u~N&NZyH#G&6t~(<@5&rG# z^>}|DpPrtcKOc|F%dfe!>FM6;?^}KvnCj{2eOlylJNe3rK+sX<MivPN7=GT5l(VS3 zs`U1}{r@#@9jd;+n>%NY&dncp%kNM9ws!lyQ@4&WgLan)zWrZ&bMlEZeX`c4PA5rD zDcx!bT8X-4vbz7d6DKC5_wAW7F{~{3Q_e-T11u*O|9{l2uNS?|=hcG;37JbRs=mB9 zGt+qK471!>-xRXmf0eK*S+QmPo=>M1I=4T`Kg%v(qp<c(LCVAl?7M=O`xzB|dg7Ux zy8PoscX`j<d3UWcpPui1Q?^9bEGI(m-rcU6$FE<nerp)DB|}l);E8L~{Q39K&9#2I zvHEeZ`IEqDcTX&G?Or0fY4?QCXJ=+Am;V0t_VMG#TYEEv>wZ2JUzvJd;bQo$qut`C zjZ;ocP~0?sV&Pl;z6o0=O`5c&w`0YM6>D-2JUO8px+Y?ykg8WpON)ng|C^P;%a_cs zuiv+ahl88D`s>y3r-D=VD;R0)?pPPQ+w1mHZ}H52dHZ=^KWv*~FLQ~jQYlmUQ<2lH z_VxZ-)DJA5Uw3P<JAWo<=eVh?Mn%fqnoUJdy((K3pQtV?(}~qnJ?~K?Yg6%Inr?K8 z%cYfD?$><o-Lq)wx2MzNr<J|Cvoq?DAm}Xbo)cY8aYsz@?nHdr@W=M|yWQ_oK5fmu zt{1;gr~YtC-yhRiR;8=<m`uDoZBN})&c$xMm&}-iOP-#Z`t0m%&>1$(8gCDmD|-t{ zOIufed!y<-?ZjcN#xS|6pO=-su8G{dCG+eo)5)MS0JE>Hxp-}o?@5ohx3+?|Z6+V* z<LBqkR8;_-IW_IneY4Etz0&IS&q0Z5leUCy)s}6?Ik>nk{X6R<R|Ps}?oCos(w4Ae zOQ#;>7T2?|vO2ZTDeB~wTg-DOOi-wn=Cq$*`)%eHF)=aF$~EydN4v$RU*E*eCo|z7 zr?8rb+_bG);p=Mt{i(c}R#CBIOaA`9+gQ|RG6<J^e-~R>skPp{{QbSPf2~*A6x>?M z!NW6UKhtdU{AqLBY@DCuAIV<7SFL}g&GeL&Z&FnDdHsGiJ0EnC)U`?KZGS2!*$XSX z^<3Z+2hH<;Quq8Vz#Hirr*yhTUthm6&t^x}43(e43*H(&iB#;LWu~#wMQ(TA-Cddg ztxrGJ1|998D&+n9T6Dgr_DT0|%#oLQCuM@x=l)&2I>%+6<)=^1*QR<`GM)JR>cT?j zZ{NOcy7uboYE|abCO2h0wWB9I54~oVQ1pb=ZKhG`ldqs7!j?`A=euR>vU`gApWFHS zr?P+S*55b5^^?dfv)o&|N?$+eZ_-&Cv2l@(&?k1+-|9ly+1Z(!_nD?{U6OHf%cZ;< z8yw3NjMOzXJ?C+Di|Jna=PPEwnsT@1($3=N?>C>2=Qm9;IMMC5bIN|1sEmt#McX!R zy!h{D%<ZWsyn}9*duYeR#60=*P*cMwzRc>Am#f}W(VjQkgoK4vbwKNi{{Q>CDSomm zA0MCF;y}<;Wmfh<mXnW7laGOpOirucsnEY^kC<iUrzI|tmAP8=-f}++K&kPR_to0p z-%cv!x>PIOym|Aav3uN|mX?+i!H<q~3WFB^6~0}&=Tpl=joy=!{$GBY+P>}him0ut zr2c-MSi6J$LYcy?|Gz&u)PKKQ{>j1H?&7A8hyQ=y${w})X{6%gTgOdLCKMEWm}#7z zqT6{&)qC0$!M8!nGObl-DCnL6?|8Y;o?dLDGV{sT>+$zDCLf<;S*-HiOXA<_*{_q5 zlT%~l3UA)dI4@lJ??kclH?1N~f6>kz?tL;h_tpLeopoJn<8pD4>(iih-qq(0n0$SA zH~Mz+o-dcYvovo1KgVDG@0RoaoSR1W_WK(e8m3GU$!vYY{v=aDZkthLnFXk4K96Bi zPU>>S^YcMl&a<!iJhS<<i&f3zpUIm$JA>o=?QG^gU%#vLwOYMt%EcEK7r(!=Q~6`) zKerXBY|VREu6~pF{_gJOZw&9=y(`k}-@Rwm6!l3gnUTM4=kMS9_uK7F(<i9+*n~de zTx@%sA=u&CS@q@q^W)~L{`Q{y|H-jl=}ns_{P^`l-|F;KZT0m@siKPOi>_$++}>6C zI<ETdRz>GF&}!399r63?_Qvh4k~Yh^v7<1#qy%(CNBz&I;*}0h``c5btE;PjIxG3B zRO+t&>&V5;JvqI@r{agr#5>x;=jK|6FZY}Kd|vgtTU)a?g~WZzT7Kxz7gbf&laFU_ zJsh!quKG9olUld_|K|UH@^RspmzULTY+|lmI+xoVIYE5cru7qSkD1@EDgN}tQ(S!d zf&~hdt4^GbjI4Tis1>wsG+9gEP4%`(=B1QtYa%y=DD}RvnlyRx*1Ja!KR<bQclqDH zf1jV53o2^)`TIeea5{V@$aZ||E1bbvS+luJ;<ak^iiQ7O<uW{X)@S!C)(0yoDLr|q z_{4vzR4b=-;iH!2%b%|ZTx|FIjd5jW;fo83m7x!wKUen`y%~Oj<!7|AK7Y#gfJH8x z>gvna#qI`GUf(!xSt^_7-<$G7i~sxKdVz_&r*<j3_koT{-=m-zy=~36nh77<|9dgb z5V4!hWndh>K5nYL6KMUO__DLJ&BGTnOz3^1y~V#~f{M=iB=4zOOM96e%C_g-?ds_0 z=<f%u06g9&dsQRh9IWR@{9rHT;{q@flFytu6QY_R_3X?{VKK33)24+j^_u$b?(W;S zZ@<5{xBB(9wQh?y7Ck++x9aPrO`CQVJUsOB^75rGZfsn<26Uy!`+dLl6crs`S(Uyj zd3VP$+neFb`TO_(Z@*u+dE>^yl9E3Un)&bCz3c4cB&HiRWzL*84;~m4Ja7mPziwUr zj)k2)|JIh5pU>NG-?nYq)@y5{#RUW=%$xV_?OWa5g3-~@x!DX~a!*asEPsD*>R;!( zyGpG~U!`Pb?yUU$3{=W2s`~os<cVHs^CzOMZ-O2@dX)0~!j{a-KYsjB^`6$!)^;j8 zt+G+^@)lo41LjZvbrWW_@yS+wcyMsalqs2)mt`v3|NHUy=H~RRphf=LVQVhDnhU;> zGCXcu*F<IatY!u-QG5ISmc`FJ3~PQAybXQ1E_U}8!L#b~Ym|NqYv$eCV_EyFBsU;v z<D2v?QVtIl*Bk1^>`*xQ?O|Nfw>LK*K71IpR?@m`P0YIJ?Vv4gK`!p@*~$!OSf3jl zc8T3z_xH?9W7DiF6P9Nd6>Tz$*p?G1dHvP?tZQp#&YgRAcK*JbJBy#2<=$Em$k5vM zMuUlo>DIPfZP1~mTONZ}cyRFW_;`Dtp7rTJ=pL!!Em70lTwF3t8=M|}dU|@{!i7&y zP4)Kj+O%cM6}G!~?x?)Z+6vmJw=wDHk{y+w(=IM@T{=P5J0xU^%DpvD8O|_7iZAo{ z$8>g<Y4*V;)^+RFWodZF#LQ`KZqE9bba|PtQSsefrJy$7{{8hnK0Q$k3j`)ip9ea$ zgIj-3z_y%7(<!dsB*MbN#KijlEuDPO-~R8HifPr~-(~8jGl~c`Ha3EeWqY^#y^O5v z)qrU&EiCHl>TBaRr=306%wGNN&C0E_dU|@cY}w*|jVa;OiCqSk+F@&MY|Fj<;o;%a zQ#6&=?(yqAKWWO8k{=%)etLR3`|`h2w{BUfsJL{UnyP*JzT(@z6%1U>%<OzR5gQV2 zY)I6N+H%2dmU+IMh{%+A^Y)d$zc)RuO0)W!=u+?L>%!O1JHyG%y*hODG%3~v<)CyR zU;jt3ng`U*xqIghs7<9A-qO|vTEK2&Q*&oWp^;t5ivZnUr}jO%9$)Y4>pRsobXCYh zQ?>-q=CK)b+UFaoN}1(o=!dS4-My{osaIz7ww#||F8h1W0<9HX8@)YcNzTnpbFIs# z+1soRU%#*DY1hS!H&<2$AMFy|e2r~E{ijo3A9|iBD=Yi^>+9(gCw}~VK3`c`8MGvN zS82ASechiQ-`?KdYPq-St5)EmBgcBB&(E_3ZSpa{SK%zp9w6Z}-_BN3({pugP0g$8 z>+AphskFDZ&y25ryY<!8)$zMZJSVMv<F>_elXqcZ;mytI=N}$!mz9yZSNA)&yu3VD zkl`})rhpf`&kewLEq%clfP$4%ir{S!M9h9r--LLcw*Sl>F*DuPi}|>LMhZM#{an^L HB{Ts5W1=W2 literal 0 HcmV?d00001 -- GitLab