From a004e4037c1f83e8b84bccd75841ef5a744d86bd Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Jan 2017 23:18:04 -0500 Subject: [PATCH 1/4] fix bug where last contour fill sometimes covered everything this would only happen if its line rounded away to nothing, because it only crossed the boundary an infinitesimal amount --- src/traces/contour/find_all_paths.js | 14 ++++++++------ src/traces/contour/plot.js | 4 +++- src/traces/contour/style.js | 13 +++++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/traces/contour/find_all_paths.js b/src/traces/contour/find_all_paths.js index 5826932509e..fba5fe92956 100644 --- a/src/traces/contour/find_all_paths.js +++ b/src/traces/contour/find_all_paths.js @@ -84,13 +84,15 @@ function makePath(pi, loc, edgeflag) { if(equalPts(pts[pts.length - 1], pts[pts.length - 2])) pts.pop(); locStr = loc.join(','); + var atEdge = (marchStep[0] && (loc[0] < 0 || loc[0] > n - 2)) || + (marchStep[1] && (loc[1] < 0 || loc[1] > m - 2)), + closedLoop = (locStr === startLocStr) && (marchStep.join(',') === startStepStr); + + if(atEdge) pi.foundedge = true; + // have we completed a loop, or reached an edge? - if((locStr === startLocStr && marchStep.join(',') === startStepStr) || - (edgeflag && ( - (marchStep[0] && (loc[0] < 0 || loc[0] > n - 2)) || - (marchStep[1] && (loc[1] < 0 || loc[1] > m - 2))))) { - break; - } + if((closedLoop) || (edgeflag && atEdge)) break; + mi = pi.crossings[locStr]; } diff --git a/src/traces/contour/plot.js b/src/traces/contour/plot.js index 2c0830cefd1..83b3281f479 100644 --- a/src/traces/contour/plot.js +++ b/src/traces/contour/plot.js @@ -93,6 +93,8 @@ function emptyPathinfo(contours, plotinfo, cd0) { // all unclosed paths (may have less items than starts, // if a path is closed by rounding) edgepaths: [], + // we found some edges (even if they later got removed due to rounding) + foundedge: false, // all closed paths paths: [], // store axes so we can convert to px @@ -163,7 +165,7 @@ function makeFills(plotgroup, pathinfo, perimeter, contours) { } function joinAllPaths(pi, perimeter) { - var fullpath = (pi.edgepaths.length || pi.z[0][0] < pi.level) ? + var fullpath = (pi.foundedge || pi.z[0][0] < pi.level) ? '' : ('M' + perimeter.join('L') + 'Z'), i = 0, startsleft = pi.edgepaths.map(function(v, i) { return i; }), diff --git a/src/traces/contour/style.js b/src/traces/contour/style.js index db4042f1961..5d39ab786f9 100644 --- a/src/traces/contour/style.js +++ b/src/traces/contour/style.js @@ -42,13 +42,18 @@ module.exports = function style(gd) { line.dash); }); - c.selectAll('g.contourbg path') - .style('fill', colorMap(start - cs / 2)); + var firstFill; c.selectAll('g.contourfill path') - .style('fill', function(d, i) { - return colorMap(start + (i + 0.5) * cs); + .style('fill', function(d) { + if(firstFill === undefined) firstFill = d.level; + return colorMap(d.level + 0.5 * cs); }); + + if(firstFill === undefined) firstFill = start; + + c.selectAll('g.contourbg path') + .style('fill', colorMap(firstFill - 0.5 * cs)); }); heatmapStyle(gd); From 4f5de76791f7fdd53546c459e896b442d7fcbb83 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Jan 2017 23:21:31 -0500 Subject: [PATCH 2/4] standardize the extra we add to contours to avoid rounding errors this avoids an edge case where the colorbar and the colorscale got out of sync or did not end at the same place --- src/traces/contour/colorbar.js | 3 ++- src/traces/contour/end_plus.js | 18 ++++++++++++++++++ src/traces/contour/make_color_map.js | 5 +++-- src/traces/contour/plot.js | 6 ++++-- src/traces/contour/style.js | 4 ++-- 5 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 src/traces/contour/end_plus.js diff --git a/src/traces/contour/colorbar.js b/src/traces/contour/colorbar.js index 2c15610dbb5..68be46e0234 100644 --- a/src/traces/contour/colorbar.js +++ b/src/traces/contour/colorbar.js @@ -13,6 +13,7 @@ var Plots = require('../../plots/plots'); var drawColorbar = require('../../components/colorbar/draw'); var makeColorMap = require('./make_color_map'); +var endPlus = require('./end_plus'); module.exports = function colorbar(gd, cd) { @@ -52,7 +53,7 @@ module.exports = function colorbar(gd, cd) { }) .levels({ start: contours.start, - end: contours.end, + end: endPlus(contours), size: cs }) .options(trace.colorbar)(); diff --git a/src/traces/contour/end_plus.js b/src/traces/contour/end_plus.js new file mode 100644 index 00000000000..8b8e9dc3f65 --- /dev/null +++ b/src/traces/contour/end_plus.js @@ -0,0 +1,18 @@ +/** +* Copyright 2012-2017, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + + +'use strict'; + +/* + * tiny helper to move the end of the contours a little to prevent + * losing the last contour to rounding errors + */ +module.exports = function endPlus(contours) { + return contours.end + contours.size / 1e6; +}; diff --git a/src/traces/contour/make_color_map.js b/src/traces/contour/make_color_map.js index 9db97262636..fc54a155705 100644 --- a/src/traces/contour/make_color_map.js +++ b/src/traces/contour/make_color_map.js @@ -11,13 +11,14 @@ var d3 = require('d3'); var Colorscale = require('../../components/colorscale'); +var endPlus = require('./end_plus'); module.exports = function makeColorMap(trace) { var contours = trace.contours, start = contours.start, - end = contours.end, + end = endPlus(contours), cs = contours.size || 1, - nc = Math.floor((end + cs / 10 - start) / cs) + 1, + nc = Math.floor((end - start) / cs) + 1, extra = contours.coloring === 'lines' ? 0 : 1; var scl = trace.colorscale, diff --git a/src/traces/contour/plot.js b/src/traces/contour/plot.js index 83b3281f479..323e78a5ea7 100644 --- a/src/traces/contour/plot.js +++ b/src/traces/contour/plot.js @@ -17,6 +17,7 @@ var Drawing = require('../../components/drawing'); var heatmapPlot = require('../heatmap/plot'); var makeCrossings = require('./make_crossings'); var findAllPaths = require('./find_all_paths'); +var endPlus = require('./end_plus'); module.exports = function plot(gd, plotinfo, cdcontours) { @@ -81,9 +82,10 @@ function plotOne(gd, plotinfo, cd) { function emptyPathinfo(contours, plotinfo, cd0) { var cs = contours.size, - pathinfo = []; + pathinfo = [], + end = endPlus(contours); - for(var ci = contours.start; ci < contours.end + cs / 10; ci += cs) { + for(var ci = contours.start; ci < end; ci += cs) { pathinfo.push({ level: ci, // all the cells with nontrivial marching index diff --git a/src/traces/contour/style.js b/src/traces/contour/style.js index 5d39ab786f9..3ce4e56c64c 100644 --- a/src/traces/contour/style.js +++ b/src/traces/contour/style.js @@ -34,11 +34,11 @@ module.exports = function style(gd) { var colorMap = makeColorMap(trace); - c.selectAll('g.contourlevel').each(function(d, i) { + c.selectAll('g.contourlevel').each(function(d) { d3.select(this).selectAll('path') .call(Drawing.lineGroupStyle, line.width, - contours.coloring === 'lines' ? colorMap(start + i * cs) : line.color, + contours.coloring === 'lines' ? colorMap(d.level) : line.color, line.dash); }); From f140629c4f956fbea48c32c3c6847fd581352490 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Tue, 17 Jan 2017 23:23:12 -0500 Subject: [PATCH 3/4] test image for the two previous bug fixes --- test/image/baselines/contour_edge_cases.png | Bin 0 -> 25344 bytes test/image/mocks/contour_edge_cases.json | 31 ++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 test/image/baselines/contour_edge_cases.png create mode 100644 test/image/mocks/contour_edge_cases.json diff --git a/test/image/baselines/contour_edge_cases.png b/test/image/baselines/contour_edge_cases.png new file mode 100644 index 0000000000000000000000000000000000000000..4efdad1fd2250af63c695b0aff335d4b89f38703 GIT binary patch literal 25344 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 literal 0 HcmV?d00001 diff --git a/test/image/mocks/contour_edge_cases.json b/test/image/mocks/contour_edge_cases.json new file mode 100644 index 00000000000..5d2f42c315d --- /dev/null +++ b/test/image/mocks/contour_edge_cases.json @@ -0,0 +1,31 @@ +{ + "data": [ + { + "z": [[4, 3], [2, 1]], + "type": "contour", + "contours": { + "start": 1.1, + "end": 4.09, + "size": 1 + }, + "colorbar": {"x": 0.4} + }, + { + "z": [[4, 3], [2, 1]], + "type": "contour", + "contours": { + "start": 1, + "end": 4, + "size": 0.9999999 + }, + "colorbar": {"x": 1}, + "xaxis": "x2" + } + ], + "layout": { + "xaxis": {"domain": [0, 0.4]}, + "xaxis2": {"domain": [0.6, 1]}, + "width": 800, + "height": 400 + } +} \ No newline at end of file From ebaaca371a187c68cd3d1041e35f3a625c1aedd3 Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Wed, 18 Jan 2017 01:43:22 -0500 Subject: [PATCH 4/4] fix and test a bunch more contour edge cases these edge cases literally involve strange things at the edges --- src/traces/contour/find_all_paths.js | 2 - src/traces/contour/plot.js | 5 +- test/image/baselines/contour_edge_cases.png | Bin 25344 -> 63099 bytes test/image/mocks/contour_edge_cases.json | 111 +++++++++++++++++++- 4 files changed, 108 insertions(+), 10 deletions(-) diff --git a/src/traces/contour/find_all_paths.js b/src/traces/contour/find_all_paths.js index fba5fe92956..273368094e2 100644 --- a/src/traces/contour/find_all_paths.js +++ b/src/traces/contour/find_all_paths.js @@ -88,8 +88,6 @@ function makePath(pi, loc, edgeflag) { (marchStep[1] && (loc[1] < 0 || loc[1] > m - 2)), closedLoop = (locStr === startLocStr) && (marchStep.join(',') === startStepStr); - if(atEdge) pi.foundedge = true; - // have we completed a loop, or reached an edge? if((closedLoop) || (edgeflag && atEdge)) break; diff --git a/src/traces/contour/plot.js b/src/traces/contour/plot.js index 323e78a5ea7..e33beda01f1 100644 --- a/src/traces/contour/plot.js +++ b/src/traces/contour/plot.js @@ -95,8 +95,6 @@ function emptyPathinfo(contours, plotinfo, cd0) { // all unclosed paths (may have less items than starts, // if a path is closed by rounding) edgepaths: [], - // we found some edges (even if they later got removed due to rounding) - foundedge: false, // all closed paths paths: [], // store axes so we can convert to px @@ -167,7 +165,8 @@ function makeFills(plotgroup, pathinfo, perimeter, contours) { } function joinAllPaths(pi, perimeter) { - var fullpath = (pi.foundedge || pi.z[0][0] < pi.level) ? + var edgeVal2 = Math.min(pi.z[0][0], pi.z[0][1]), + fullpath = (pi.edgepaths.length || edgeVal2 <= pi.level) ? '' : ('M' + perimeter.join('L') + 'Z'), i = 0, startsleft = pi.edgepaths.map(function(v, i) { return i; }), diff --git a/test/image/baselines/contour_edge_cases.png b/test/image/baselines/contour_edge_cases.png index 4efdad1fd2250af63c695b0aff335d4b89f38703..eb13470cd1ce39c2855833a1b46e30f7d987b924 100644 GIT binary patch literal 63099 zcmeFZ^;^{4_wO$aBi+&=4GJjTf;5uC&_gKF(p>}6A*cf?C8^X5A|UP1ihv*~UD6=Z zefIcyd*7dPzUTY}-_LdN!+qV?y!LCq_Fj9f=X$KQjnliQMgn1gT)A?EL_=N0;K~(j z=#?utY=rpW|6IbD+OJ$;yP~0@WaMwPkrfbZG<7#5c*7e<8tnT5_1800P zHbo;~ocrz_(eBUQeAw}CnQ-U7&X|lm7q*YRU)3+K92zQ*je{fNHYphcJ6~YElq_AE z??{kCaS?0$jSabe*wke#GX5ufjBSEB(FBo_p zOJ3qI_4X^f-oLU|Vh0oE#vy#{IMPtt-!UdKcVpjX;eyDb>X#BO?vKYM(zxZ(Oi^k{ zN{V{dD^tUN5;h*@?cIvJ=?=oeK3j9}vFFzu1=hN{I{%+99qMsQYm-v5o%B(SS?@1o ztaR>TX_C6D4Mc3dEsaz1vXdq5R54ZLg}xWA8(Qg7IF`GZnZG6(@cTLhl7R9t;bWMf zv?1wM_1~kXPpZ&BX+>6v5Peh(hc96ZM(FTC?+K5Vo5!@a-kJ0nwMH5#ObBG{aLo zJ9TdSyG3!VnG_nI@IU~ggAuuCqCMfqvyo)Bmlx;4^u);uuCA_6KHIlW)_HjxPWk0L z$)lzJG4n&QHqTX9+of!*r;AuURQbZf@LUXnh z$k=T>UQJru`w~WElp`HJ*e0WAgktuo7CAa=n-F=RnRbc2^XbbH1hM~|KKzB3Ds)>lE5E{9J{^d)Q@4Qb&} zY{bFCF11(*E83W2g|Fm{ll}R1oY1~*>Gf*gZK0TsOd>mV{PpTH*<#u1U<=6K8K2U$HZr81blr|^FEK(% zFAv^FR#)MwX_*Z;b*rl5u2-vUy=dvmgS~r(MJ?}oQ5&gnqtkr zgoaXrXimS4Cb6~RdTu6=HBxQa6e>grFN@{C@-MH1KhVDqXhs~B?>59z3;NV#f_Vk$ zqCH9Pj}FDdsfNe=WeM+=D-STp5kxNBf+7pUB^v5=6_a86zUC39ob}U&?h>5-cTkz{ zd@_+fOy+)wHv_M5OXK##=) zscg(V%}xoO7IU@{Sk4rsk~nv4_WRedtAGh^!giR4;~liYr$J`)8q>X!QE5HnC%pzu z#t$5tM(m@=?&%A2`f^1~1Gm)f5M8Xm!Stw8OiWDDcSG`bUnX*R{v(-4)*(A7ZXelY zHoUN}$PieI2?w;VO?s{ROUcfCeR55+m^`jP(!BXw6ig$B!#t3p-ilClAcI4{57P=R z)4WJe_nV3tv)9-HWATH*;%9s| zWoN!I{+4Y`G-VF98KvOzu!hOr#<)rRRFKSCwKn@T!UQHhmMffV(O}oJ%JX1+vs*-H z&+KF)WOaD~$?N!Dlq_dNKFs2!2s3n-eQbb>Q!jagz&zb;>|km(RFMlMd+J} z6f=?~Rvo$xWViH$GFYjp@9<%%>b}5oox7?Vn`NW%4owI+Frf-+!5#AoAGD`cr4iC+ zZ$)Hr^XZl{@jCdbKw@lc&h|(fm0pTm@LgP(?`q(wOz=;C1rEHP)31dTeBkZQ z8Yt=XfpV+$JvM0GO+~`>YU+*m?%sv4xEVETN3csv-vg zv5&^BZi!aVvYxu?VefDG+gO|iC~C!_JebtY;!>-1e__pug5ByHKab5I2j=~lx%l;) z;Pt#TGHDv=19ORBPS>phlaUV)&11oH?ue&(U+ARP_m;tEnMR4mOc6P5)zAqUrf@9t92)5m%&bb?@3&&hC2TNl2R_*EZy ze=^!Vp%-<7MLy<}SRF z`gp)5!P)#O7}c(`7!oU=Q5r~579EY>cyY2mhO&vYqobsvs&p9_?FtJDavgt+f6>CWv|)@zM^$27KrTgUEq8`*&N*18S@trO4($+9z2u zejK-MQIX01y0X={dk=yLm!+U-t+UdSw(g;pO-8iFtgMHD=5A9PY%_&14P+n~o63u!ynzp6PR2t6EP@<$* z0duuF^-D}f1^L7itP^MW4yU=@tr*00a&~5JK_@dwQ6|s|t$E!$oDM=Rlun+-ek+~e zb{1Y;&AVJn!8OK{O5_S{`^KnbW z_=Pga>jdEIe%L)^7j)ymC%HG!KJ7tyPW4m(>N6q#>Hf=^Oxs*$vj4>sj1Y0$gTJzbYID+=ub)cJH&*P@%)wZKzrmKKa?e6t|OPaEEFa)8m2Bf zJmKuy!+p~&{UADRt@_~k$ijLaYzRL&Qs^i4h_j>n>&NG1v|nFco7nzZz%<%QRhIqC z;^SlX?2rS~_Ra(Ouxi}(&ex$auhYK{&AP2SYpSKNbZmtbChu04{S?e#T6RwQHp+2Z z-W+&wMium0WKjPJ8D!)W5&y8Ws{mrHIuWIo6ZA7!XvCRByKh%$j|1A#(LqQ;a#vfs z>-)DPMv3|3<(w{OWE1{sep|Kk=={Ni`!;?eeChaXr;`vw4X}fLFDk9Hgdb!0jA)xa zDlpu$@S@Ec#7y2=poXpw{IKTALW(iI@t}et#mFVeE}E?5IVLOZ2(p8=q}0w|jJv36 zYC_za_Kg$iMX($Ewtbo8KL+lvRk&Z%=pLdJ%#K{Di+ZtEP0A`C-^lzx(vmLOc*L0x zu7fs+>fh|6E|dTE`Q2qMj3m=9Yv0V87B9a{C}Q6XhjUl`Y7-$sjduG@F0~+8#3qF? zCeX71ADK5Up1E)41}lcuVd*H+K}N2SpO%6l>JSmhf#qp|E`pFdA$s^_Wuu-Xx$qGX zxPG0ifS}v&of`{&(8Sd}V~v#{^$ffPOJ?_wTJU8qu0%de3TqR2k-s~8%i#iO)+&7v zh0I($EWX<%NYNG1uga^8IM?ZZxXi|QN#NmMen}cLMOOPb@Wp@m5zstxWtJD}c}vSh z27;jKzgSZUY`cdx$WC;n6@YvxVa}^YN;4r=fJ`+=-Y+8rW9VVVsHYmxNBS(%|E@{T zE0M<*8Vre*wJv4Ugdk*I7B-UMX<;ct5ZL}r-sO(Zx0K6Tqw~l!A1N3jX%tA&AOMIw zf*@?89Pn~saSkQ7Z4U#>jmEG=ncpvMFFWg_ov!fX*VdpagpVdlH;0``z1E--aoVyZseslpAu7A)7y4GL#EW$Hx zUp<9L@p{Cprp$m^`sDRy{mpL%7lBHcVI|NVb;4abU9%rWZm7TvA&4U;%zW13Vtadg zNymTGmr~y?r2W89ML{`deaLQrl1(+m=_-Jce0|$bi`ksXm9@8{{N=5+9o!p8$hM@l zKqxl;UG4^o-j;eG;kG64v}6r+)ygU=ItTK*Djx*BG;A`i@1KcLNB{PIxX+RUw5kkP zD%mHNg@NVp_x#?O$QQ9A8B)mtfpF!fApOeL2ma;Y7qU(egn!X=BJZ&Crh-?qae_|C z=$AYGM)kTQV7VG!n$D!$1!5@+UU((@Qw7K{veQ(7F{vo)6)gmpudrVeei@0EoVTrq z5j$$Ypp24YL1+U3u5c_U7kd*NTIE~hw5cVX-m;?Hcs-m@0%A=x1G)YT36MUs0dGrz zlB;fq_ul0m%QHm|$GwDe$X$43$lOU(~&SDr}>$0x{ z1TnF4ByQ>U?kaI4>-9zouucZ@XoD;L36>3O)yV|;Wm5|4)nE=($rvLr<~%S% z(#YZCM{1NBZi(N-2uPK`YockHwO+jzDQdI(ED+elQB*$0?)GEB!5us{JB9H37$OVl z&`ysYeOgDhB$F_TOB%3?h*0z(guKp7Qovwv%Y0yo#Ss;lN5td~GIn9f`%}CBzCWA8 zcf{Fs$~1bOinfbJ?oH}oFV&CI(ZK}R{rmTAz8C3yJep6Spr(%Un+_ld2ng^$+v(bW z&S2?P2;&v!CFgub9f4AnyXP{TS?*_C7;pzSa8J%iZb^CP*$5RC3r6 z!;M%me;>x?vJZAgjf|E4JM&eYFGyoU_6F2;)=H6qKKJtQ!F<^?zKH0>K@ zNTqJ(zvG6m=Yd__R-~xeWkU|~1)lTQ<9a#kgujMyV$fazT$TgK57x3U(=OmqUC#2$ zHmS8)=uA@A(b=Rdd&Z+X-zT#jbscJ0q>aWQlMV0gR!8<}48g$Zx(;OT>}r`a@C{dC z$yp_(r{uu#{MTk9RX3!qolUOA--8Zdzq8V+CmWF2Hw&aJ>tlN4?CeF|(6ZCX=)d&B z1SYz=!1%gPN*itPE4c`>gWoI4H;t(g8i(v)zciMemz*x-RsNd98W{yRh;1<`9PVn@ zN*M5grrqB=HVdRK>$8CV697BcZpeXSQIm){Ze-r&ZZ1kTrefkuWJ+~h6hZ^Q6%N+M ze(+-j!aulGAJu+qzc#jS->m%LHt=z>1{h1@zi~tL(IZ}4TU(}gY$3r%XS@9i)uUFC z=-H|HAc{J5w1HwOX7m&vp>ik1P)AO27P31bkGVH0=_Kv71TfC1orekIUc!>bs;qi! zzeMwSXQEEY_c@?4z8jys`sJ42wurv&RoBo!m)B0mQ*f%Th>Brmo%CncescbK3=^8= zV@CF#($)f&!!(Ad_Jv|_EWX4l8X8g+*zRJYxkKNmfiY&nzpKx|i5}C(7;5OZ`z53N zPuHsBze?&+VF5-F)uE#ZwND#0(M40HWP;z{76UkBpdk z4}BH{gKS~^=UEx>EBE!xo*?7z=s(oB7np~K*ArLLVe64uxAU1N z=aW;lG^s+v<;5ul9o?uv5Cp+vFxXRUERRCaWG2$Q z#s&T5g}}~`p)R|SP;cpHW%O@;H`0--5moEep5(Mrv`TNLE_*Q$MV?xaXKR0d-~aOb z&|~<%iBvN`e~8%L%0ND}IamrLjAwhV^<~zpoB2fN6m_nb4S@76t_0&v>VC6WR6R^u zupL7nXea$0%{+>X`%odLdq;3UoO+rf*g%!!SVXU1{l}pYZ%5w#wwqva5hKg zKlg-=O|E=xQ>@{^GijMF{SbsAU=Nt+{NcLHma>r<(&vx#8^2TvF-T4iK4<;PBGO&z zGRo?zI9O+L7&u`}$S8>psKaFvD~xTtxE<}FrfM11F75g4; zL7>p8eEViY57WNc`i!|a8|&&h@=2*De&*X`1^`~i%YZT`8zeh=(1XxNc|RX&zJ33l zm9w7)l{hV4F5h*6nvC5^5L^VHr87V9&Gn*9C>YES=Zf&21=0vEAHuAk)q?>ly;lv8 zS4VW+Kho{E2HC_h!P_&vn7Huf=H{#(bfMLA6|jNJmY50N4bSC;;&6D@Vd0gM+0)R_ zB+n$~1pn3;fz@RiZ_E;5gRnV5$tX_87?E)m<~bR|i?q_(Qj6LS8;*WE^dvhYG)JT~ zr72FJk4#nzwb)2dnCnC|^4>h%&e1|%)A_ZY-c@G00=c=neKbS~;{d$7Oh_ z9K`XAGww}@X^UouXw>U9Tg#ouFs*LirZj`>8hVI2ZoH0e-W zz=Kyx&;;^R*}ZSd&<~F&iga_PZvqLPHe_c_f!mB6g>-1F2A5|5JQ0+QECk47N$#x} zdTsJMZ34{`8lSO=N1c2NY}X&?cK*^|1sQbeUgDf6ATd4NQQo;QDVyibzfXR(kuAJ( zu0Vf%d5Zv78%P8SM*mdB&#QqOe6F3Hd5X86*yl)D1BWa^2$HFb>Byy}C1`_h`NHS- zyIPwmgakk4*NVhrT$XC_tE`;apl3lT0I~<*u7@iDz#J=oG>ap9zW3c>_@27MMk2G! zfnY`&Y{{rh&BebvJa;@Cw^8GhN3(GpiFthCDS3aFtAurg*2BZFyD886okn5%hb%76 z&TS?4OHqOQPV~glH!{uW1eZgA3nDeDwY|As-FWQ#>$H*=x>f*K6_(#BYe9KR`KPBJ zpo`k-=!~dGQTUap`&b6PG}^g^Q}ZA5x{{Y@vTwGPXW#M{Dg*a6sGzRzCz~kRfcL;g^?4UQJEs7a>B~6M@%aSY4|j6C zC;LVA8!vRFK`KyVt_fJ!hrYn_Gu2!CI&koAS zf}F4I+vWh?cia;*mK;FxM)_0G91VEI(fFKfBG`4yiJvmsAAt;KwzpynR2S;{E0EdQ zP>yvr~ujejI^i_}>1S<$g;Rwb#-v}CQ;|Az!BTWYIL<^uP$QSQvD|NnQ zSC6*=AW+C=R35B!dvP=aIBfAHMaE2JE{dUA)u%PYe@x(7Sl1j!Cm`|dKIuHR3OzWm;9#sZ+Z(# zlfK`*Yi|Y}uGw2MffSfSc==}@ZjV$^zEzLCS2x1DdE_V#goh`%zX4G+Uplk|1&v_H zBLHwr{7`u;r;K3#xF!2WH8s~RpPKG?)9Y*DE<#2WW{}E?Lockd0)zG&K3>EV{%`Nl zy=q)rObU`dl+4B#9%yziRyiPJC53@PT_LeLKq*qFe|ecW=a^5y$hdAQoLC`+9Z2(_QkV+S^v&ZyxsXkGTZ3^;F{>ZV`~$6G-b;&=3vrj?VCNJ*#|C3 zrhk+{#1u(qkuT`uCcO+q5c_7f;zKd{ zV8`4mzz+lVK{m4-5*ul#%9*-vHvdf7jshs5bIXGYk%IR{Z9JglwLh&+0+@6hP#iAr z-`GM4qZ0w3g_rLg|6$2xCTLG?_F-qKzELM}c1(^vU!}tMpHbv}H=wScylp_%M+e(? zDFGn2zu2f`l)+vlAkmxEmgD^`D*t8#ylKB0GnmZURrs(5a0>Ig%37Eq%xt-BZve$Z zU40#z)$>^1x>Q6ScY%jkt@EuvaK*5kkT*cVoZUD{gGqf)1^A~Rup9v!%ah(x#z5q= zorgf8N;rlo&|-WR$Y6Fo>({EIpKwUBV=wfB(+#OHAH~qy+CTL6dA?O?QLl$*@Z#fa zB$s?bBULJViMdZs?G1)PW1zVi2>S1A*y$0p37JF~+Z46ycGjQT{1yWQB{yJ$Kj#+Oy$0;$DSkZ$RkY|_a6_|jL5B7U z=kX8fdYOx)$I-$A3@p2L(no#1?~C7IHe|#rmXJ)6sDHiiw&X@H;DWO5K-0N z@+x?IZ^r*@$pVI{zXw^P82!Op-0Su_fLR_H88QK7O#j9lix=ukFVUS1WA7-iPN}EZD0Rp$ofx4#1kGad2+gafRLS0<(Jv2jx zqakot0QBSM4l*SdWb&!&FeYVWWJJhRJrM?O&4$+!0=OC8C_=~_<+-FOyFX;8uBEk3 z^;Ut)A|8n6n!~K_9Z)n5)@gUF@ehWq~CvOLfK!R za6az#$u!_<1)2>{2&^T?43A4CB?56y^V;<-{SS|3+V$$&??vQ_JOnr0GJ^&_hVt+% z9i3WNv-A7BF`?5B+0e1@2xX(aX|*xz@q*NMTbC6*wG;Frdgt^4BUEOt08k=E!3Q)- zHWjttocaU20@!}U>U7X{2dMM&LEjI)%})gf-M7d}AYtF^#?#$kfOq^msRb*wfeX{9 zIS_m4@q;M>kTD`0Z8T-{V4)(QY4Bn5TVW+=Pp(qnGVgWb=1R#EOFc^iRZD>@a^H;I zSt-7hM?RnE!%;`45Xvc4a~2sPmw*o!qL0;7v^}uzN+kp6E=3BjN6t+%NFT)u)%1Eh za{=@x4X`Ir=;d9%fUj$y7Dtr6xGwXpPz&m&ZnBt^i~_YeX0K`l78Z(J67~Npx%5#{ z*V8iDfFWvxGZ#nW+Ks)1CiX8Kn|XeWd&Fsix@fAvexrPoN~B@>HyOO)=rQ(C83}Q^?M^nDaly)~cFxy)XEY*0q z`-U8X5xDsktUzIIRZO~&;+35#wHgcHY4g_&FNjaVd2Q1^I?v1XsvQhpN5=AYG z3~skS@?eOF$GTc877mO`0sW^deo-uA54_85t&`)E%2;d^Bw?~jMe2`MRR zV^dZ^k;7ho``l2c5##t^2T+y$W}n*d2Qw;ovD$(v6E3$lbA&gTKdvaA7GbBG(h)95 zA`3BT{kfQHvO9-r5`ARBtwZ*cQ;^qF3RXJ{y!e^x6$Vc3D@;m?zp`e5d?75|r;mJ* zjqxEGIls-!dNUQPLM7-eEIT*BYv9nFd=8bsk`joDC^{QZY z&Y~wtQRD1d4W<&Ri(ytzD!4$cwG&hi8M*?6=zdAPI)TGLE!J-HNA*XL2{Z`hh(RkJ zMut_pJ5}YP-cRocsf3kda-YC5^pK}GK$jb&m>gH4z6PXeE?u9;6hE|s;MtZcBFYjs z5IGt9)7mmv3FW&zopis{*k*ri81ztBG6K?wv@m}E<4dP8lk8NioKOTv>zUGZi;GUq zfF0p!rHEx{{ziWf0RoN?14s?Ws?D2>4REOF~-kw*~X;}Dd{J{wMB6a<#kaZd0c>%XyoDc(g{Fg*xDxn*1A7>(IVkU|Bl6#6H zvHd+AjwjC6i2py`rklc zA@KDGBc_}g24WQ+j@7Rrv2WhIF?&^1R;P!ux1pSl1%!bQv-&rEK?zz~OpuyA)a+l7 zR?Pqy=o)bLn9St&%Tw|s)qLaPNmr{tYC+3zW>^|{eFIR;S9A+2vX-5*m?#t5^*!jf zc`!XDJ4AnY>^cR=_7B9cW6Xin=C=Jvx(3kVn*E=64{Xz)VdcktBn?&U#!j>4zi-~B zt^`?>yVsQxkPLbCDV3;Vi0FTRYz>(6Fav9J=4ZZc`Z;q9UH=a_YEs42nf?e3dRt1S zjvY?b#Bk&P^R=7cd74*Dag%)S9|3aRRU;Wc?hK6 zV?c_+izEMhD+6WX;=oRKpU%kU@jqWXl+NKh>@0Rg?FV)PU=AQ!0b2X=AA;RiFFoqK zw8+irwIQ6yLRfNv4L$|lH zkW2Bfca_S4!IwRAD(E!jcPZkSL+$;en#7k{3iJoSfusrbgmkXvT4`0l-qi^u(A_ll z@=xz70`W1C`HDA~7C{?*dTe{yXBH&p{5iQjou0n*gzBRf^}un?U2L!n0^snFy@*G} z5vUa@_)>$+(#se6DA~5*oIKysQ3femjRjdlB$pcMEUuw;L=(WgSGwS6?N(OM_zGy^ zY)DGorq{@y7m=5^w#raXmipI-Pn=a=PbEjv?2q|@z{TfGnWmOPlSzj@(1e~lZ z{V@%+6F>A>Y*YiZ**rUWfHz5eib6H#+HS=PbEoDG;T

@S2Y{;iT<8*Ei-g*I&T`Im+YZ2gR-V@%s2gFX@=Wd4emw!A!BM4uBc~(%Y7$a$@pR{iP zy(+a<76ulp!h>e`6?{o$@L|*tAV1`yCcjGbC>gx8x}}Es6iB-7opTalC#=1_ z1FYOYe*akNSGb(qXzM?oY3*?fQ4#jT5j z+7_vcA*bqj0JA)TiRoEb?g1%Ow}$|ZAWF+Gi4RI$c9DjF7dF&>_(f!h%6zJMcN0*= zTcHP4IX)o?zb4#UI#@4{x~$N9a;{U|_(+N=M2p{T$B4X$syUc+GMCmJToY4+x^aF-z_}IRv4G66O7ST_9Wm zDEH&tEw9ag`u|zj715w`1)uA0kN+5unT^l=FY7JfJ*m&R{8)c8)+xF$s}7cX%?2=19#~~?FliWX6Ag$FWH)x7(Y^G zF1V;4Fjb~yeoX~NKB#z)HOddGLDh{25$-%!Cx$*w`>+Rr?kD04_fV ziZX4vN|B8+sAyFIK0c2#1Fo$6k6z25u_gMT^R?j{Se;VP=QOV5e5Qh#v4T+mD^yQQRqa5ojafH6)S*t6S^_SI>)fX z7s=OdsrDEiewj>WmWiGLHhMI3d2WqNEbdS$NWtH3xeVk0ZC?!q#%6{8VsbL|Ju7^pa{(^F%8J-X-oaOyI_Dq8NnR?c_I~6RRdHo zZwFZDp%{extUyZ#8@45>x~<4*ed^P#%mQ0V@!3ALd0)T3*lL*#S# zP}OH0iK(a;0wx^n?C2en*W#|NVV9@YEn)Eet%hxBCsLM>J^c)AZi(&_Rl3#1uvOL! zkP7x!vdN==CxyH)o?8nkY_9r!VZtF-otiycTv#}FvW`4Ve~?q%H$QKCwyGNjH)4T_ zzvhF6z9wS63ixR1m7esQT}$cK)BEN>%-x%weEFi;#c2~367u^q&(TIzKNDVsl9JLz zJi5}2Pols*-M9JGt5@Wdl=DX!u!D{9&|cN;1i$@egC?X&-x*h3S^)Va z{Ddn1QM%I&pxEq^1`Xv_?@cT&+Bbqyt$c&qjWW>DEhr(XT+;S5DsR_3YEU6_&|zzQ zeB4dtdl=m+0+y-f zAbUNvS?KUt&RM|(mHE4*JqH6JL`w@V^dbv%;a*OM0rvHun@68;0Q_YM|MK)7KXIW0 z{N>DP|M0WF_m%v^0fEKQyO#FPLoJ|ma29k~7x>QwC^8IdbYgTEC2ewbxeOeZR(BkXp{O5zH%d9+S|KGj%FO~lJ<@Lw3 zSb%g~FV@ZJ$ucGRT=8D#P@y-f3kJzU_0HQtc<3v^)-$QlwF4rL^+QW0A+`+n46GJdV~rQ+Bca zRzE+p-@evRlt5kVYv*Q@k$N6^pb=hQn4S_#8JhE~a-xTV$s&2>$f;mSy9+hMN0^|l zXY+fFSOX}tsTthT$_iq&-E8HB=~|Jxch|nVM$p^d&cQo)T28_mb7lCN!kw+cFiNs! zwf2)&92;l9Ntgr(;lt9T;d5mon+H^}iTqutIV}3DAPQS5PdWLULL`_*SqWa~y~+RM zlEAxX&(D+0^y^8EUn`*F7Q{c)6tu!(y*$!r$6RB`bD$A>M9;|6Gvd&dt2a8oS$lz6 zyxcAintyUf+Bd{sq2e~~yr(iD+=hvKWxePjlSWSDWT_Pcs=R?@tu%#m`+K^+w=f>Q z-Is8ijRS}Zv3&f8vg-x9AF1EWwc&3pTm=m*Ya5`EHtzJFhQpO3lDE~>G~CaKyq5bq zfT{}_A>AQD9Htqc@SY-f8_WshjjNO9t&+_q^XVSp8vt&u?Bu^gcvyA#+qGvRfAB zPw*{ZWS&=ZjYy6aBFa%;PlP(P&nnGDPS!pw^q4$tDI_v3ZP3j%C#MZ1Z0pJp4m{(E zjZc@i+UunQ$wo*a3?uX#u~e%~Cp_lIRGB7^x#G#X&`!*o0|7raU&JO0biU1GS7!;q z;>c4A^p*vg@sQSD~K^cfA-15Mb_phn|I5Q z@mS6vh4z}82X89n%{^qjKJi^Ie!=PcNK&+Trb05C76;U=$7w)nuyq!zht(KbKXRYB zW2E0C?;ZQ-&Jg5jGsR+7`nUzyX@;mLuT#CY##yfhInd4nz75*965#jsYj6nUFQh6S z@plF65AO1aAZ49zO>6eGuk5law#M$#;Fa@^M`u}wB@gCHHPL=(V3cLACSP4JOnv3? zq=EhRL<;DxAHm$kz@)OHYNKn=xFp z-)V7UO*IG&rVf3^{tWvkqL>|s#rzFj7exeq1r`o0mpZ=#Qt&zpD zCnYSQQCC5A_?`AAVWNWEa(bqB!mk3SmI#gAYiazwIs+T7p-pg0 z7iX6xPd8^(j&MALodq1$zc8B#{dFDUTL_MpZ)wZqJ?@2j_Wktm zom*kVkptIjUq77qOd;5O+2PI#azj9DvHkB^rfgcrWHHv}7Kt(n`~R$U;JPLDlGL_+ zj9WXin*Pn4@{1^ga-;>C-{RQe{?Cky(gz@bv7YbXu-bIJ;(|KSM_J?t%}{$k7~yfD zJ<~O!@2gvK&cLyhv9t(mZQ5zl)i+tlQof_pIYlpiM*h%pS3&rtTz@A`az)Jx0ch}L zgJ#X;0e}dy7=DzsTED-`^VlAVr;{{DL+g+ODG$aKq1dS5jEz4hrW5jqfD14kxcj!$ zCb-T{9))xc_%0gBps}R1n>mtss)4pxp_%NeS-AGi?)%FS>sw-W>%Xpg4EU5*QXrvcJb1mHASlm5IFM`tyP9Y@Q4q)`jk&k`St5}~96T{DS z{GyO3r>o2Ex9iMjQm&BWrCl-iH*ehPH{|meUTL3-xOuX9KD?lhP@2nY4HN?{l%*dV zFimBELU@v87dBlBY7W6Uel1{A9kA@t5_C(hA$=+o630nuJCA3wz9xSQ^j;Dl$tPRk zY1JPTJ!pei%-DCS-|V^1)0B>5uID$Pnb_B4HPX2law2>16Ymr3d9v%yMUOpy`^qYzRSlig=g%Z?MsP>E$dwgHTzh3GuHpF5saFO*qT0={o`LW$vN%Cw@ zHF9q6^E;fHeS4f|tK^;9kJS1S87Y{G&Ps0R_EkH${I|Lr1mXPa)tYYZ<7Eb>X{z`W zGoMf@AJ@+F4>c0D_CGxe9xQQ)xFS%fY*4$Q)HQa8SMT;H-xy|=iQAXc0IZinD)X>$6E{&%5?RM9}0XcFD_k9-o&ftatJ$mc;z-_MMJ zUtSO=+%sVxEl6^2cdZm(Sn8%fd%RjBFHxN5B2yFG$nb*aG+lV7VZyInDOD|1OpMZw z=kuxm_t#$Q&LA6=ZU6xtI3X_9={J^_trhNTde*NwTAtl7tFiGukhkyuX#D+<4%3GA z%nG-(ydqnB`)@BmHOs_B^%av$-ga-Y%x@J@8}1yD!fW-l6xY6=mXj35w0!D3JjgA4 zkeFr@b(looc-3(E-ayB9XU82-%i&`aV8hd*Et+No#0@QD`T@^;H0(({)!>v(^P%W# zU6{6;5Vy5=`a?3V0#Le;0XGS1$hK7bD*QaEm4dp68y~o#2X@1rB)(JF^obM?*`p@i zp#QlOdDpT(*;l1&X>L-WLV540_Gm*;9RXfX&!>K3z_!7MiU~Isop`zgZ#!m6$`c8% z>=d{yB^fxYKJ4m8?>2(6iSIzQcp!P%S#Ll4+B%O%P{RS~uNRMG;-}Q? z?FRGw`r$KBllXo2mc;MHACB)*HZ);>b|etqB{*ceF4$MSxZ~*zL8M0*qMqXv19tWJ zG&&u%{#u+qF(2QpY@OD(z1`jSOqG#F;hvWOh-WjDvzIm}ymO_-Wc}dMU(?7abo3vS@-2Kv~wZODCL032e7!S5hJ$bw?$|8KYiVv?e z%>OQ)HEg$D_O{r{dYOQqVXNECu3vi`+AVwHQN)AB>_E-ct(o=!>K327RmBIKnD%GqMpBBnN(vw`kHig-#(6`W?}L zr!DbGFyLw3cxUxPA9WHvs%IEQvMn3)<#*f_4r;v-6O&cX702`f+r1-JN2hs=&Axen z{&9?S7Fk;H`#4n5n}VO^XIEN|mvcQ?u}^2c;o@Uu4et7MFh%wKTOID11RT+7F0BD3 z7gu&Pp2?A02BpvI}Zsm%(Cw7+V?jzxV#TqDqucd%?ie3KF{@T)4Cu_6~f z?Dp~i?Pf7p0^77~!EWYdm2;8%`4Zs`Bs8mM!NDT^oXE;?Z8>{W3D2bDMgg4gnDYn>G$KFxdmAXNZhY{jc*E#4 zJO{KWKiBjl{*t+7+Iui=w)4=5yJ+&4JcCohPRA<~vC~cT#fT*DJUMr^0ySsVazjEZ z=lR}sXkfr)&p0mx!K6toIR4y;AM)#X!u?J20n>O$aOImlYUi^$aqY%gS{*^%3fSh+ zIlnzk&hNF%-De9Tb91MlZ`ro%qm18{%EO1;EdH}tlL5nVrkEwHAy=-3YW{F19#sEeyti>z%M=MYe=h-61XE6+qBpJsEn`k09nwW z+4W_$s7_pDXPaX;GvPLusV5$|d0DxNX$OC%i|UK6RoJ#3J9B)&y+vY(s=ia-$rT(q zzPmlxE&*ABjQp$)>sldfc)H(1;)&`DcQg@N1&zg_px5vw;)bOrIt}an;%xCFi%YGu z#*(|L&aUFe4tg@0H!UL84DXM%2&vcZzsABE?#?iZAgV$*;eYsZhjat#rf;d*nPs>Y*Eac9NP!l8~{SOYFq}L8)c<1e(t7xJaKiW^kG%3 zk-ku;V*^bJ8KhmKjpUKj(`3Ja?H)G)bivi|Os{GWqDCYH@oGCvYFq=o7Bg6B*Y#^9 zKV^Q{#QMqJhmzXS(Yq!+a~pK71t+EZ&LephoeHG1%#RE=5BTlxRkTWZZ8HIFd3o_; z*Gyy?o)OxW>S?jwf^Oa$)Jk@z^=+Fx47lc zn*Op4->Kxd<+8AnG{)>Fn%qC>=d$!S+``w)HyQ(pTJsGEoYr<)4r$PXgQwPgMZkgO z8iCv24%q?toNCGK0Ic#tMc>B(xJ-$sr8;=!@e*gN8cP7~rb1WO92? z7wFi+Xvz?snj8KB+@a(4ZLpP7BE)kcGSgDjj5t|Q_>8GaGhT z6@V8O9=2ra6oRbZ`}d+omqhw?^efQ^pscA4E|E38w}RVRJqCPGhc>&^(?f0O;*DiBy%}9p-~l4p@oBd4`A$mMbGos%@(*m#hM8tk zud6k%cnxy`^ZLl${}m1k7_avHuFKAI16JU_q5GY%Sc z_00a$Z{OwKD`!nzRyDWT6Li&FUar@U;mXQR2ENcRZ2thKW?2gA8QL9ClC%bYP&GH< zP*vGD0N10JtJX$#Ou4x#q0r$Hk=T{B`^(`2rw*^9Wxd1j6XW-#cnP0=nU6fDn4{j;=UmP#*0A7xU34=ngJvAA_X83jH+pol`Nepjn zeLPX#OlMKx0IerEVuQ5=&frUXUJaigX&AYM**dnX7z$4_Q^%4yg%Rc-W9z@UpTIe6 z^H95_eMoCajtWyOh3KI&KVljQK?x%>|3b55=iheyz!p>nSW#Uws~0#c`z1_53TT66 zHT#+Tl5^bkZxyxVm&eK<-waFiWuEE=$^FD5ZY{+sKl-rhNsm+U?FXVkgq3lgs`*nR z*IMY}D(E1_4<2p+39Sq0e)jWk+%RoPmor2yUMhl4L|@mltK2ToCq2E9i@IiQLZfDD zBBRvNK9Pw>L7Nuzy}P$%&5sQk5%2NntU@H6Kl5)HP#X5j7C}F5J>ULB+qF+ahp5h%iChz*Q9dTLIsIp97irJ_+(o5h3Gr z0O^aR!MLv!5Z?9D($62rzTeR3SlLk+9BRjOz$v?;e;np83J1+d$nTKcarB$6y$u8Z z(gH&DEXM{b@uyb1`zr_qC%$`I$Ec8s%APun>Nb5EypS{y0~|orXO4y@IHGs`_qU;0 zR-T55%_aJ5tEkoV>7ux+*;#%u@WR=oX*H8-Jm+l%WcyxQ!{Z1trU5qg3uGY{UB(@D znuZoPC}Dm;@{x`qyRE-H%R_4~p}hI75@B$+R&3=8D8jB7qVS_@&lBh>*C%}c5q|0> zc9}sPJ|#H;-x*bbMp-m4N0By%2=xgakuD#_!p`%XXsdK=j*1IOXJFFW5q_~Vw`qVB za%; zPZZdAgIic6(m60bWnFYy*S7rtt&8O)4gbBx?)BU%HzpX%f}p-CAJA)Q@H;*G=JLWw`Gc3`%Iper~=YILfd<4}I=(1-3F z#GETw9lR?X6wCfw5>h(t?(y4UU9(3#v2QwNY0JuUW%Us(JTg=!_xP<4m5jH3PKBdlaYtpYu7P$gya;a* zVoZZ_UoXhI=BmX_7XH7vmJ>mAAvbLD`D-ybKqrni_03T=<<@b#EdeZ5y*Bf7#dlOz zCn5(mwpgRbcJ4(QErwP=s>l`W@2ru6t<@!$eiVB&D+=!5+rud*G1rH9LC>DQ&OVRc zM=ui6ZKAs&<$(^ZAH~<@%_bN{M0X_z-+QKJ6rGzyNa@d<@TRskN zF~aw?&BcCZwEd!F@EDV3EDGnEm(Y0 zJU#%a^9X*aSlj*;vlSa;Cu;6Vx19Tp=mPEUt%>-VIC##ADmNs6S4iGCmcU1b5o*2q zV0yUB|INLuS6wt?$10a*eFD+?=&QF_6#j(y(^uIsSC=o1hwA__MECRj=`fg#bZ~U{ zRX4u)sR?yGk^W!oy;WG1Vb?WEcSv`abeFVriFCsP6p-%DMK{u@NOyO~A{7Z~L?o4v zZj{bTxoGvTlR%1d_{%Q1 zdzP4E#de5d7Y+N)w+K=)w`O; zD?IAi^0ojUL;J|bd^>o${71+uFc2#Ndy@$1)J(s#8cF$06p!yEzAi4dhs_Wnhj-b< zs-hz-}7x z81uYLhQo&D4MbImOR_Or9D{>jQxg0p(tYo0 z`2SmaujtErer8lU|6y!2tVA7B_3pz*9;KPq;6|zoRlB8nh=WE1vvSF4$o~L)kvb(7 ze-Gn?qU8CY4BjeaWkc)irX&Us8(-eqr{B{BPPvtLkN5Ya=T-Yt4;@~1& zAg@3I*&nn8JUt4tdmRN{(@X?7CAbCX3|6~iXOl9lWTeBdk^Mw1G53Ayn^A_=$wa0v zLoyYw#$4)U=QkUMlKNlaoQ}cq75?{L0&gYRp_jWH6}Z}+P$0`|>qyNR1ec9RpoMFx z<3+DveWzrN>j)~QV^(Q6(eysUCM^Q&d7b!wo7WXl`E^|gu%W1roLuI{tnxT3HVIqU zj&gx}$hk}6)Nm6l?{5hIdZ)j;M*5zF#!}`nC6OjN8LFr$en-1+|BI2X=`gP*R?dVn zrC2L+fS)?p9eC>NDMa0LJ?tskYhOJmv>8B(c>WNV@WU)|>KnGmRjk+$OKuzh?OX^1 zv%nh%j`4Al;5(M84n$lX7%;qpVp0ZN>x?9B1im=c%6XXZD*VEdIo-k3k?{ORpaX8c zayyy2BHh3Sx2JmK^my=v*YbX%8#&`Fnsy&Bw7+(nQ5)X62z|*U6=tHI;nof21XFv% z&H}_mIK`4nAT;Pp{nlJuk1vlZoCh(MWcxy3!GqDmv9uDOw-%i&Ec2;LO_~9-(E^d!V7+LitamN#d4r<2Wvu7VfoaF6Q*{~v4u1b!QACpo%9KQsn z-I!^)cnQL+W=yj}CEx#6uEW5>QKTcoD6bX+VoJA47a#!J=7FTRU=d z)SFaU(}4jLhdu|*3y&%d4)Y#RL&@^KYi`(SqGBB?n}$GM2R#OgEIkBm&mBbz z_Qu6Uv|zLHZ3aKpfL19j2R+P~UoQ|CYk)k^z+;ZS^Qeac6xa>}^+wpi_twq&5o+xm zi%E1_`MS$nPE@IKr(qtNCsnJYd-aufex&Lo_D;Q~ImtgdFwcn1L+DtwO%K?*y3LSO zH2?^B57g*U)9V9KCqT;r&)s#5P*keh-QC00VT5Co>*W4-ka|{^O2J(g*})4F3PoiQ ze@0X<+h~DvzK=dLtr(U5`UV(cVO|J2))~;hG=75!dG3;h9V)|#hHl^Yb-ge-ONe^v zgbWSsbpJzB+qZ>}3$dakgXdy`tRt#D_qf(c$6UD=iWJEnhjRv9KD;=TA|cx!{c$v; z?wYJ>ygI2ci8=ay&sE|P&$mif!fr>AlPr}c0`0JVIF3~Z=Y|=pB+`9DMY4~mr|$et z(rg>!TQ=MqjRDHj%HHe zai*h=vI3V4Y7r2+dLVdLmnEnDN%dv_TW zTy~@V_U8V`O#a}KBzZ+IEZdVfo)4uXEe0g0*qbcfeMq6hCJ7c+L3uHX+gzN_M-o8U z%ztUUxR$(^T~QC)x2fZ)Dmi%CY2}mS+sn{lOl4&pFeeT9hcw&qM04gv1NYF`o9%D@RC1S zG^BOLM^z=~+ zTY?ssf(`vxA*pEx%#pxQ?O%sVx^Ioa|M}AZtcL0_qk8?(!{X+x^wjy8-wm4SyZ2ke zO7p!4<%;QpPIDyPw^u`y3$+lz-qo26IvW?>w2`_oTxdlDBWHXIu(VE$$?AZee4WqN zvMsFvUOEYC0Z@Xpy9=Q59>}<-JyuPQv}TTN9iqOF1f?R~LE`J65I^Tb5BCvM6JgEJ z&|Im@Thl6o3$;;+7QFysk^}--YudnmdMxE^W)|mf!$9qa$MMDxa0adc{#Uc*+5m{U z2AGI=?7Sq=-~Y2^gjeOs9<_1RLL9nT@!|7HR#0|O%_s_82EZI`FI6$qGg;Pto*+WT*|o7=4%pyWnAtbER}UrOAh(`*$1H#G1|QM zsFSo$8C76h^_6m<4o4Cf1V}V1VXWWhEi*)QZV|dE>;G3U#+`JSy^bOu5at_qByD@m zGl@mZ&xWkZ{1i40U}wm0(>kxXF4F6Z&^(x}u|Z@Z37< zO}T*%XJh91f5(^?4|wZb#_W=HvsSsV_^pt+4Pmv2Xn1&M%i-7hmU3IVZ1MMZ$pEPz zKO*&oMo8fC!so0dlZf1=%9|ZO+S^a|`UdzY?nljOc9$cUzIw{XbhK>3M z@f}uI$i~AMgF?*`|5wC3@ukq;T4a}_>Yowww!bx8wkE3qpA5Q_0uV#%fa;}rqonSm zd&1q3R!II(qax2!>F?Eh`We;%`23`-nfJK(3KchDDzoppr~nZC*tP_nTQW&7| zO4wK^Q5fuQ(KFcZlR``ou?<8BX~D_xjEeaW81U}E+>`xRfl#K4r*oAs%&v@exF_il zRZ7 z`0)TpN~QPT$nE^$B(F(q)!_ZxS3H~D((LoCoDox5tU)tf)Kk#eb8!=qhgLJ1Z@$tX z-**iFRok9?-Dpx^+%0!-(w|?bEOD#4pC*d2@Jny}Zr5-L?H;5?GDD+8PtRUYsYkUSYtK3^lBj$xTE{hIq;; z-L1xP8k|g3^6ZaY6*yv5N!DN5%L(dKOo;zjm5(tc(vWr%2|r?%i`m`^M3-fj!sN%a z(Oj}2XM*9QN}v;?9xl-uumlC86MW&e8a%MXVMsTdqlkT0<$5BQdt%-{Rh@hO>}fsq zTgXZ7lX~R6{iovH|v1k{vL5?K7VkU6ARNcKR(Aj z0bL7ZNTEB)wO-09T888vmF4*$B6d0&KhIDoSKnnUSu%w}^jFOL_f7Rl16d=vq3z9L z53v9JLxy#y4H}zU_wqj7P2}?k)JtRVHl-C#4ZMTndB{6rI=2LSVuEm?Y~Yn}jT~UH zqSsu^W{dGIIe1kVa|WbSOU&;v+t<OK!-v* zUm>gJ_eJE6Sl*7Sh3|gKbT)p&7KUKYfwjhW;=jaDnbWQY9a?|xTv)LPO|K6mjw~8l z$D?W=4zA!HdWz`oP|ZC=_KlX5l>4XD8+y5>ro@pfmXCxN0vPxlc=)&>NO6eX6j7r4}3S?Md8oG|Dls~6AA@0QR(~Culdk6=s>~pVF#M{p{PbwIo&9(Um z3|M1*UFz3y4njX8H?K9`q2X0KZ1Da)VS&6>{4UTG*(-7*tVV4e?|ZftlT0-(r0iWM za-3cO8M+sz)^^vzv&_@*L!O1d9-M}A(w-j};{PD4=h?`HPW<3YWL#&7`+#UQ;oQ$7 z`=d>}yEGrciWJ6IHKNh1O(z_X_D~e_WNP|1C3QkTB5`{w>?4wDxNH~P?y6ee2FeyI2S9iQ`G1UZ`)`DH=anOZ3 z|D^?xTmJDfu^weBx*>V9bhDAEl3U^39WUZS8}2Y=5{mn<#&{+BIs@oNJLwPD z2AqxxwD_gK+J1?v59<+1$L9o*c$Ln|`!6+^RSGqcokvd(sL>|7!Dy2`g{wzq=Xa&} zfYTjQO76LdGkUoB9i?wNmDJO!bkrK;vi1Tf75wPAh>8xeYI3yyeQr?0eX;THK z_fZg8V+zjBkEP1_>DK;X%DazC?7t^IQDW9oq1}gE zLi2q(%mdEM!)->Ll*#_bxdNdKY(%@Hl5?n%G6cv@*+{B7YYz(|=z8pipnd`d{4S1x zK)S&H>dn#$Vt(e_9PmDG8SEUeeR6tj95w4I{w&S_HBkE z$cvo%NaN|mWAs>~{WDy}<9N=cDGPW%QF~j?VXRi?RwnDjBQZl%<0BTNovBrI+dcaw zZJS`UZOK~n(Tdkrg6UT-yCX24MiqDp(%2;uN%G*zdoC>=G8BdW2^q=1D}0d!>!kfO z*fP>PYU<(o?9AvHMr}UqYS1~9QBZq81S-myVH=JW=p@lddlvJI2Dg(^tZ2mi6-82J zGRMV%q|UYz546aM*Ckz8+0C1D{O_1tzT67i9C=XV&E!TFR|`MD=Hiv0#mqb(V^blZ zu4O(}`877N1bqOH*m?Bv`nL-9B(!uDCQz;e1#X*`3pJ+Vf!JPL@r2ZPd=fS*%w3Il z=v}7OKfLQO(i5%+`$_*al)luR>UCFstHfEn!Hj~HnLnBQCuQet4O&K8O|Vc56KonD zRv>?f%lwwOeXj%}C?HT~CRyLws_5a-q|z{Wt0Z4Xio)w})_*-aKw9;68n5=3c1Ohpr0}F%B(ZJjiTZ1_JWME4^IopHnNppHbX^wRS0U_RmXww^ zJ6({2_zq0|%oB$mF&}nq&uuvCc+Xd!#D*p&l+T|(KL%x07FUNqu5KP{Z1QVr4uj&S zr?tc%ZqF8594Vad9LSVZpq~7jJZy!lgQo@L2?_c$p{?&`H}wWlpK?8YuF}Q&%I$=v z+S7VWL174u)CKoWQOPD>(im2-*UL}l+=+vpk%&g@DDYRG{!QW3Jd410#c-OSE}Cz` zl-G9|yR`3G7l6Ft5J?X@6mI9>Fc?q9uT*E`a(D2BHr}~Rx+vpt|6V2&MI`*oZ=2SCn`YD`lt!Do0=@*5Pyj|vKlgVF}c8T&Hm5dqe?&1r{683bb?+?RS+(J z!d|~JE(xf+ZX~t>d;l|7KmWs-Zi~TBF zW157KO4NKkF7_l}<3Lva4Oim9Vst;0M`oLjCc)6)b-@D<$>#&uh+f^!-)$@6TdFW{ z`Dv7MxH*#}P+h7;Nwf;)d|QFx-vG7nFD2-lP_ey!OX2;`hk@w^1>00hM{PZN`=8&@ zu>6$;+crT_$G#4YH1i7lXNN7zGd>l090XbRufc<=JOU~6f0CEz4IHvmfBm(Y(Z}Zy zN?Ur$APBSUAiFv9Q5#pD>tt~M4Hsbf2CkKLZ+(Mog08Z|P?rYj(Ms--wqXkeB}KsO zs(qyjW+!Q1s}Ky=s`{Q+Bkpp@__Yyk(xgPI(0TfWero@dLm;Dm`;eEu{Jy#zc)@m`mGcb!#bLjsnay|Sz$YB}wZTIB%5{q` zr|H26_+1=}9jh%uMX{$J+2tXh>=8t@|KbjlTjkv8l1QG@%WE$I-u+TMtzopmIC|y2@YO1_4%<eq{(UW#nWwQqt(KX6f*Wcz=!hcNCVA_4PJSIw`S!)p9VMBv zDP8I}SBIFR-xqc6@k7aC zI(`5?#)kWj+jT2kI8=pd# z4T|ng_&&06JU2%qxVP}2r$2KWO`5;VY7preU-EV~l^e@{*f6^FvT%Q&8=K<~-sd*(JXw7?YgJfD zF^0e}Wxs~`TW{g}DYz3$&E6x$k=+#&RBHOXLDbU|>eqGpB=tm)A;_K;QK2?6^I_1- z-b|twxnA)LZR$H_dl{ZqMwR6bZ&*m(cwgXW}svkJsLR{BsIH5yW^*l!y zDM?)kQ@)=`zn7`|i$CPhZiystUV7Ex`cw75md+L!qF9HGb@4e?UasI4IYNg##4q}p zbxcj-{&>f&(-pibCvNTZ9tkPM_0Gy_DB$?8*i9Dk2T_cp@-qSoO7;$!Nt9&RcK@u& z;@PwI#5kllcG$!muw=P2nVVro~CtRqBpBjBmlBu_$L-01yk5OyGxaZLJ0 z!{;L9Fo@q_guz1;ptBhJLI^M6G`FM7_zCXut8{!x`W(YHSQ$!jp?>|nEbHa*RU5fI zQucDrgIq(jEhHJ|;a)ly_LgUt{vfd3hyn+lIF8Xi4-LT1vL$ANv6tD%wfa}$xV;p- zJ_Ryjmwr;;UM9$13LOWW+b``^q@JY%kNLHw@{(#WR57BBb^FIE;+ojk=p2SD6csMB zpV8^KhwERcxCZeRcst1YW*?70$ViK5At88wv9eLE2;Mj^EfK%O=a|<{Sb&1y*2S(6 zB8ct%&`Rf1RDw1+uX^)hK0i{$fwyerlMQbFN;7wq!>%_N?EACYap=(3wjfVo4BVc` zZ-UZ!CT&Nd<0x}&Yee8YbJk*KwYk3~+>LQc{`_ICVx+h(^p*{QhF39{&fUV6vD=Yr zF);xtj*~U$%j0C1gKxvSIbHX*$nC;Dt9Zqex@KME|5LE-=MrL1>OCTRrxPWgyzU$x z2d{1Sl^5LB_#vMh8^25-KysitO>y*9f;P(yz+RqYLfy_bG>GsqjYU~L*uNe&9iMQ4k z%CM%Z;8!KmzS+4F=1<)CoBuk?R4efb;y4$@qJ=@+Y#mdMr0@EE?!$AVg3@7OYQbcd zJnuGwzc|^b*(Mz$SoJyh4oGn|!7T#cGQqhs`8z+Q1ML4ifY|b$txNfIwlQpmgT*OM&_I*^l0?5=?N(-Y=$? z?3b5>&}A%Ej|OUPQVA09nC5mS&o=b8918}lRf@j(4Y2+s zx<-;1rX$d4W&lG#g{Sp!)xlBBPKCB!hJs*-ge=11<@R`X%3}hwJUY$KtYoc@vl68@9t}=ejaY$t+Pi(7eqk;vehZk|mP) zL8KZ$^+{6@zs8WecfHuSU*OfXj*n^J;(2|t=n^L**l;^c>$Bu{zy4r8c)CFmEpf}> z#wSjf>hHCfsO3wdC$umnQO17zHz6v!*gneBBOmT@;WEPPhE4Ndu4UVNgrzX4f}&-p zX{XmZXf1UOG_mJqb)<0Ep1PlumSZ=5I=Yl|Nv~F@oR`0ay_o;2hcUJp8kZob)X*xI zGL1%jKeImLkK#aeHfQ37QHLNA|4Rplr6zQs>UJQy+x@UBUMeTn z|Eolij{8Qy&izGyOFkhNwqRX#MQD{~sERhj&-d>(OQzuzOi^J|3|JrUH!bX}YpKF! zU}hZ@R3kU+%)4u!1}Ub)M^++kLee)p0sK-uEMX9Pjr%+00k!iTzDIRMm?y(mG$to6 zUg??$L zNMMSVETh53t1zTWvMbQ!sp8O}8@NYb1$O{>ItNH3^78WHzK#}M3iDM{qM^^jMrt~E zN?y)iY;XRXtl(Y{FVEimL%TF|F8=2J?&fWFcDbM2;<+KP@dc4I9%YqzYuZqD;w&2; zErMJK+7tL6wBWNGNmEl((FqAdqv^q`m*zm~3Z&&2!NEqtMHJc}6=aa2;T}IPeTD=E znRnvTr#@hKQ0H}EE*2v!BxJcYmR&Itl97?|ZW5(g`hPwgg0_PMk6&f|<`r=>w?Q2o zckk`#T`St;M~S$(O8q^#hBr_C@c{JT4?=jr7aO@ujE?r(Z28Z_*9h?=<-YSqI{p%(X^o;>{QsZ&|IA1@7S)%Pp#d2&B{0p4 ze>D64Kc{RgF}2s2wXbk z4%kZIrhgE2{y3qAM2`0FCD2C$78)@JCMMj7)9P;0LE!b`}>R4qhS9-HF~B;eWzRR|b# zL`CyvCont{y^hfi5j8Y4=7RrT=fCFKc$EXF$}6Diz~#3dlXh|8>G`wu{stgjzpPFp zu;tZE%A5R-ybypln}UoJ-Qkb=P_=oYWW$zk62%R0C8nnqR_16&AwkE-*kKU~TfOIi z?#|@}(F6Z$g8HH&Bvw{dC8;3%!>iG+g1?@1jAGN-7rHfT#eDZ7{&e9cU#+iyjzxnO z92`taPTuh51?9k=Hf`a6a9}|I1t+94775QhBKb+`X zAV}f?Q3GGgFt@Wf5kWYUNccD^j_e!1zGUL{{t7-;{UY-+3=4(wJ(r%)Mw25+RwPQ{ zL(}Ku)6)%7&80bz`uU8Dt|zvTc zDFD`&A-}G*bz87U2Yfyz6&;@g1WMK)iJRYf-x2cR<8CT+Pyx~oUXVt$Oi<@FZuFKJ*N;_u*!rMK!VmEXams(%!4(Muq;dRlKHNW+7d^Fz3tVx#Fy0fYxI?1mcW;W)%PwBh z3s&L2cn{ZTGdW*A63J))RWC#(rw5^L4q*AjWAr&WyCN&MTQ|H~IN3)1qUVimuI!Hw ztWb0Fc9SVcy*p??c1vNwS{@*>?2i)u#6%?cPslxS6y9}dFTYseC-hXxCJarUVp!ka z9(kaZk5+;*A$W9z4Pie+Cl(IUsy6jtLC>6Y7#XjkwzYM^?|x6Lmkqu@Jmf12#KCT^ z{2t^`F^oIY0li=~Dy}3NbSpwQGGVzkByf-5&4=HJc7IzJgqC$(W>-n=`0%(EWx%(G ziU9=cgJ11;Wi4)*wErA-0Qcz?PRed^sLZq58`dX;_lz9|W!!-dNR`bq7~x2Hjw}pd zR`|uTTAPy&ZV;_e6AOcbSfylqqqWL))=XBZkF$8m5K*w!=n8!37SV`JA8xm!zzAvM zbKo2^8VG_wgo{!F+J7r8J>M=S|Bf<4%N5%!$Q$q3mZ3pKyC|zMOvSueAyw9vzh(9N z7ilOHhMy({CpWj^c}BI1xF1en1%>>9s(k|gUc-d%v;NDIax@xA6Sq67?{qCt`2{KC zg8k9AkowJ8JJx^vq~68puBTFu3!>oMI$Y5W%3H0sm=v9|q`YUjb*`^^CFQ7qBdov1 z*Zn~skq{)+mp@Z%<3%&}zj&_ z|1#Yg=`VL z7h>SxLOygGKXjgJr*1K2pISzfPgS%WY$~s-d*bw+xMmXoL6ti93((+hL|qqfDv085 zD}`ot=_D+~YKGGb8sc-u#gS=J8W1kI^m%D5MV14W%xM7T3HDN|o3(kDkr9b0=FM=c zM*l&e%eU-rx0OCaa~z$MTCDV7QH)XJ8CYMP%crIw@rtPVI3IFVM%udJ@!?cTsxR{j z(vBFM!>J9ZC{0tRY+mw+-wro_6M0OV(!sQnc7f4Rve!?M{=^Sa3GsVxpud~Py?5

g}_#3C^U%G+k+Y4!tZRZaL@>{6{5Sir1njNE-ERLY7sw5c+^s7{i&4;a#jogE)GN8eyr3)|3j{Gz`gD3AT@e4*?8dyj zSUEr%l&6ska+1O`S_nv0P>9%}PK$$QAc1{aybVPGSKu~Sa*4aSH}@eo+?`Y16^W+E zoa{vWeKcM(!-eKjyFs;JYx9=_KEMTJY2h^1Dw^k*M1t2=KdD@VsabQo?DY%UK$7F@ z>OTSyF9R*M*avVFF)=Ag@pEmj6~xGCB%--V4m&Lx<6)W@aa{WyV0 zHGUVj)+XYH@xuz2@7*z$BG+xvaJu*bv2 zO2JG|wLBI)Z=B>KtC@7JJizO?9+&+2)pNlw9aMnTD)Zq4G%h^L<6c70Q*S>uHxYdw zS1}rj(86Y>Jw|QlWTwyKvfNnbdaUai4icyV$&lvprk);Z|K58XctxwVawduxw;Vdx zjNzSAOU8bB`nJf8Zb@|FBPBy*a9c-|Up#-DJ9M4qjsmz5uNno|xLL@udY;~pbEGI` z#{&-_rR7r~Z=O;y8aRd}B*e(f^)4_JnFueKHVd7iz(oa^;`Qtkfk@rXcHWbV16^;s z&9xdVj!@cvJhZNQ;vb?DmMq0E2_!qsXX6G&BeWa!(ejXQ{DdF%FKOT zrlN} z_h(&uaQ+tTHRS~1$9|DT*4;E_isA7K=#X>bHw8eKsaB-BJg~HRqbds3EsN#CBo#}!$59S_1iL^p>;T$Uj4cn?(Y9)D<|RwrOX5;R?V8mQh?qo0ntt^@<;G-C!GeFyB;>dgDXM|vm>DIs z3^VEt>i#|6Uou%`*r@Yh9xrGxIbj~^>t1|LmiNpYa+$1 z&v(HPjFekN7-_k144Ty-V>!dYBj{hPZBp#xlc0OWbyytbrLjv$}vST!q77^BA0x) zb?31!$YxO*Gqn@zj56=Ca0)W%_Pe+@v(heof!xTftwPfgHYX$W5qJ^?+#Ix4^u99= zQmQKwNT=DybeuUB#`SD@lRQm-HIG#JOVYq{LK?pcb$15H2+r~x$rsJD$ANC_zp1kV zzp4HIVa}*AuKO{$%kCHL_RtA#sBLQ)(e?OSK%4Z6W~$4}%Zl8O&pa_!gC8V>oL82A zCw4I!ynCNz!Z4#y7>uXmT?pcYOa3Gv-_UEC+A&va@+{P>7bbu4AFk_e^(qq|1meTM zNFUwC*NLemLT<5%uYO$H}Jxoa|Vgg z%LmdJ&C}ED2l{&-2CDSJVNFpjVh-M|m;R0^5DB%Y#8LRBKV=_4!Fk`@obFdu5PWJh z3*x({3``X&>UvkL_-rQJ1VV%;%s`(XzsvnU(!Jn8P!tsvb@cTChehoJ3_sU4Hh_Xj zW~Q`#7#!*&8A+eUEG89O92MlVgASvHC@+^8c7!4;To?J#iEpwMfx8>~vwcHXM`-QBwXuw~$}|C6N{uAU2E9s?gAJ`4uKMS4Z8?7cgUoRE;P z*zGS2x@E?LZ5E0YN9DDfNe>Lt5^IJXhK2~_Z5{UM?j}x`WmWe`<-~=EE^7i$W^L=9 z#U&%f1>yrX%Eohhf{OCNnrfKEY-FGorGC3IfhoIL|9@^L)ruPjkQ_Fy%TgR0+gbt5 zcDp8>!LF$gj<~z~E_JyN8s3gP+HZnZo{}EctBzjTq)}PGcR_S68Z|4%l6dk4Tk{CH1_#Wq+^y!qXN`aLo$vDBvhhJ>{<( z^mV?d7M)KK!$$wj#TgMvZXM2oMo79hFO7^^g7?X^6Adees){p4BL~6dQUgXG1S?hV z+}3;B+=NJU(-Dy!bh}E@M(NvpO<{emll{XmAa9Z_r-j*3I0ObtTn61yAtVm>X*(6= zV=1vad?@Da=pv1&i$;6ni51dy*>HHBJ++RG4R~?N+rw*8jdvJ)RIEgHv-UWuyOZ_Cqftx1F zD{qn@ydSd0!=!HZ`3VUL%MOwFk}$J}_A@;g+AZV!Rish)CXeLXMet%|&* zN#AHr%wVAPEjbG*ZeZ-c0z~h%)wYknQM31J9Ys7&to|J!p7b39KshOdt~a8#xw)x% zx_3mHmGRxxf|FAdk*VPM9q&fOA82pr2yu4HGR#u!Jc*^6m~YWqtm+ z&#uz;^PhmBvgL{Gvpd;}A0R88qJ{IAlY5i^iQ`qy>k!c~SfEbh6P7)749pC|>nydN z@pL&+lZDti`&=j3H*%q8yfZK)1UUova>KV^f6*R%at)^vt-bJWsL3X$^>ss{A5Ki) z@2K4R2EdVX&8hA?@ZHLft6Z*T>7{_Sh{);03u4B5!6$oxsFbH*ML++a?*EAT8DHv_>(Jg!AtGJa*aG=*GtGSL6lq zO3iP}*-Uzas91y?6%0%;mVYfV8OCfWJbfpQ&rqTs5fLH34Hx|qT+>K9aQ{Xs&vp5^ zk6=Ta%4HR=7{3@im$2_<{||(o;}vm`d{mW`>qjD~N|=qS^83G{GVR3+w5sV>R28D{ zhP;ViD!1Zw8@A%%o30tx22UfU-#*I-+mKFroP`+O?f^fk6z*kdbx#pE?U;+hqr;~} z?RE8H;duNH=oE^V?@Pczl&gi$;iQ(G)7BfXEg_zvjTGG8^icO7{9oNG*Pjr+WuFRp z^U>9w6YT6Y5ZS_m<7?}6?r=n*;>#==v`VhU3c)d*%0;a%F$D7Efl~{p(P_@}Db6+qlML_o$0%1lGM$IJ|4t!#LY zEy;sJ#mLHmZ~fW8UpmM}AsPn8?^lGoI*-Xol7B;*lZxVq1(%Ckz2%7(d3i(JDZjn_ zAncyN{WSssDz~tST5XU|mWp^};w1bpIoP-uX$5{$#>+jUeI~0Jm8Oh`MkawD6tuq} zda4oD8x1~Jufu|mp7E^7DD59d4rYa3#*hB?yQAkZp>65E&_0FxbAJDNjMITkIIvhm zm~SPyrUuX~e}5FhBfppy<8!e$h4v>U@py_|FI$Im8!zE0lcV&Zx`uA})gG_oV=5F1 z#ULRW@KjQ-AK%9@HY+zbX>d?(_G5QQNE>6Dt&jG!hZUI?%B4b5bpFowR&F)*;u~gH zo3d1hXC(O*2vR9YQ^4I(`dW9-PUUTC5ak<^O-+|C*nFa^iu5mv1t9I8>lB0HK zFFl_CfwgR$sUbK{KeVNFcpZ>)$y0@@FTY0G%Ir_scE@sNB~PYYL#~_}z`Io{o8KR+ z;R3vzXUvKANAOaLk7r3!(<3J1BPdArJ0Y~QQ;=bH-x9|!rl(2-t|z3#@VKk%JOaP_ zMXkR8vb2k#SpM*q!IA&}pq{^56W8aq93aemg`DRK8J1F`wnRoE#chV~zVZYV_!>Dm z`7vnryYV$&*4DuxytP%>Ecnh-9*i4|5X?%fNL9}J6pkOKBWL~TArk>&zABmu1 zaX831`)>!F?+_r_B*86q+8wr01L@CJR|oLarvwVlBN#w*+#L60K|0Hn4`e;Rjti@`6XyeOn?MY}pQkY(P(_{8yj zzg5c+ZieemT|IZWw{)=2HBNZMyZ4b^D6t@Zc%I+KKPestcz#+&Mx;)!gZ`m7l9MS# z8c*v*@@iRVv1XSe3O6gO4CstLos=7X)6M6h-kwf8?yWo3UD6@A7_AFj;&pKKBP8Aj}pUS9qRe)?+^+cH$O@pK-c zav72{43Rd!{zeRnRr$@N{L4K*F0({~&d!fWzp1yiGG*h)o7aZi zB=2SkJ5y_EYu7vdcoqPh%qx2MZWzWtN>BjbawtFpkgi36^Zi?*Ea59nA$iXhHQ;!k z#o#Ns?lva-tp6FoD=QFsmrqU{?-gSsX}NTOrxcwD>$#^Fv=!^mXL> zm@OgAWB_1+?vHxE%>?1YD+|CCJoX6nyZpJGpwfdiQx6}o0@c({M_12n10UB z&p+#QF{R35H2D2>qZUw96dXq@-El+CAy-oCx2P)Tha=m* zpR<6(<{|R)K>RB05 zahmVya)FwSJzr-9nsmi^ee;>e$t2|Wl*yTtmYAhl?{*X%Ix_6R%F14LHw)NIP=-fE zwW_{Mg{G%BVGeCehRIH;kJ<7>RGM^iH)T-Oh9IE+Y*rFz4fkB!JI3`b+59HM6@EYOuD8poau~U1Z81+G{iUA&+RLYOY`fzLs3i_HWUPMTOs|<&~039|uDVnt3 zcC_xXN2!puP}sU$G!Rs#O>3-~RJg@w;(Z*Y`svH@DNXGQPqxZpq$c^gEYF0;D*i9r zy#WuL&$j|PfM`KAv5O0nxKVd_C6EM<-O3 z*Ja%ZltXadLeSyb)0u&2Lgo*U{pdP#HwOe>f$wyAF~rmIPs-ed5q{MKYoSZoLrH2;r zX&-aKtB=g4&ncb3m}zB7(YVk4yk|Ihbffp2qrlpBjak_lWn2)Rvm5Pm-C~u;LZC4q z!pjkHMbK2Vb6MAV`jBU!&{Y2dmZ!+a`+AheV^6_Zym4^2f)t&YU9F1*8qr*6#EqIe`DIqu zn;HzSwqtv-BeQoU&W}iN>j1sY~(6F-3iGI?n(nQU^oFjhx_FVi&=_SRCn3tT@0`>nz+*=1!xqVy1 z(%mT_C>%l>qy*`dZZ^FIkp@W-lx`3N1f;t*wUO?Y7En4Rq`RAM?Q`z$+Y$|hk*scGjWD0efZZEdx2Y5 zQf4);%zRY?k=0_}yb?LVeM*@hhi#wRmqlwqtcX+lnF}hCz}0e!9L%cDzU8pF0KQLvE=r^bt{(R5 zhr>bo#Uq+VeDzx4_(VdG3EjnIee!o(`Hp8d<$=1sBK0KB_Uwa1OQ^{6uB9U8PdpBG zsE;aty(|R9Vbq=qDu9;w+MyK-i9g)LFp>2zp<3I`?bg2bIhx14$}gPTK9e6 z=Wo!bq}X;-bvQn>C(>>zdUqIHexZJMmKDFJ9e@z;i-cqDJQ{fF5r9zqylnm57)~Gb zN3{kCM%X?XvX^;|TcEg)BjsUPk;f_8(N%R+@1t+>fkoQcDgb@*X{&FUiA{RQ=1 z-@U1f#dCC2`IXbj{1ML*{Kp`g1}G8AdBWd<#;&0_?rjILtA4j@on-`XyMi}( zanSVD{!Ai@EQ}R!-`MY-D(S$#RaPGUNrvPan@2VTpLPb$ufCa z&Ib0;DyZNg9vt7a&v>FN>}zdMGpS=qMB@l#iw;N|)bHVyPYTl|5MK_1L$;ljlk@vK zTY}%K)6m}6oHqmp{zPdz<_AYo6oDb9anSwTQAWf(fS2?0a%t~x_(l@GQ425W_m!5} zEpF(`#jov5$U4uIotbtdD_D$> z0mr$|fhGz28fB_ZM!LNF9_1Yd+hM3;x7*-HUOM1f^w~qLdo#TZQ&(G?6qx-4HZ%z1 zKIBDJN?`Xh;`Dg{YWrP*SR_!Zi*wcuaG_%WFC_m?0Mhw3y@YdSTw;q+wD!c2(fC_C zjR%A)rqU9I`9+ugT-MldpG0VZ%g0c+uj$TypNoop?sGdXZI9yJ*z?3@Tiii2H5E>6 zVPrEVEJ+b`M0hTB0Y;-X7yk!fdImCy9)P3LQ91xz0$AP#1COYRoToX5i=YH4F^D-4 z^W|0Otp&X36>@1$<=K2?kKZpbloKO_xA^8GfnP2x2^ZL z1o83lU&Vb|U`D#SNnXQ|fn=lb$cXxmR*mbq}q3CG7v9SU2cS)^*QXVxJcDmKL!zi*KiVtUJ z_bj5(%8wlRmTp_q2!@rT^RzC8ZAS}}D;mdRe;1GhcjxL!28D|g=+>fs0f)2zgq-c- zVCmdvsCNSN40;?VTKDLsjt<%2;GnvOMpi?Lg}wbJJ(KrAs7jT;B8^YJex)oisK$=u zdAGlC=ENNd{djsNei*&X>h9;(G$!cI#7$FAwbyc0+pD`(gg`Q+HHk`!^~#s;Kc+_i zbbhp;{l)ESi;(yO=Kalu^#uP(RwjsXz3QP8COo!f-=pcuS-&fc0k9lVZsJ9+bdS(q zz5AsmUd;+Y5GE1Lb3A2Ox`N>5J@~02@9_Eg`4OGCgh@+`*%rEQc=HI2<33P>RL#kv z*S5+c0QDI-M13@K=^^N=Rtzo}DjSGqW<~e!PDtDDOUP=3d${>QLb9eR; z|FfR+w32|*a}xibPk-Fu#f3b4SBEY=qFQ0KGkwX%?O1jZ{m1)a*kot!7Y=XIqX?62 zZz6))V~_nb34@S4bN~2^jPi!f_Flqc@+HtW&EH|Z;Rz`7fDDF(g$3jzai3#ikf^Dt z0Z0OK_`)4ApVH6sx9`_-qN%rrs8rM2CFBLqZ4SG+IuHu=mIwcR$#xl){rE?7s7L3t!vbo3!&(PfRn@4i?+QRI+;Y7q0t#N80MDv^v%Oi6p}QN=4T8<)0Pt_?{u!4vw<7~^ zH~fOCREYD%x*!i)Jt1&RKrBjslY%QsPwE^Dn@lKsLH}BSXzrUugbmLQs78+kw7FOp zy`Z0~T&HZg_5(>}ULq~gRvFZ(Iq+e-*`987O%TfDROxtuJ=IKRzb@P==6dmgbxb1@ zr-rxLmjB=4=?P8lXpHQf9GzIkHF;Kl*@(H6VPu2Vg&F=Vws-J4ll@ZrUv2zvya4M- z2%8)fJ1Hb)@+IREpPoi&WdSf+u>RHH30OH#du?q-+a$kW=i0H3Z!}i7iDzR(Pzu-ay z5!P|g@$rO}WiArJBp+%dPxsfVF`9nky5BdR+p_JX1qhAg!jk{WBmgH>!%$Py(1)*j zHK5v5Mqvw2Ui)Mt-K{pvAfk7#s;SOe#&Fap@>TF%HWL>^=_eI%mu~%Ym$Ea-OvIjz;=rvz7{hjI{JOi!E80g+buh80641P8EZQI z9cd_W0t*-BBJY<)K-Yp$EBxPak&2K^g7^6Uij4HG9!(t6ZpA{Y6BI%5{!Iq^+7xb< zm?kOvn;qa|cj2tU{BlC#@)z9T(DHkZff&&xp@BX9@n@ zT@5jw4=j2XJ5suxz~2 zgT)M3jE^7$lXST%i@nG9w^h^K45{!`eE=?k2qC+P4<@V>i=2d0%#-Zqn|DuYV?0f^ zQmxIGG_34-dTx)S*1Xx5Thl0iXL^L7L>?sNhez$*lM&*X-H^|AACM@~C2?N~Ij|E% zMMqc66#Th|jFljCiO_>JbF^!+P`$OgMt)%ugC)wO=&$ ze3VODttc^xrW9GFqz|X0t#z31h)OGfi?bs8R#1lWO}u%xkE@)a8wKj_wk3GR*nkqD zDuAd|I4Z%vey*)lU0yAtsQ8vo-t6{TbmG5afBAdM5z7Nj{MAC(2x92WoNn!Aa!r3n z|C~LW$C07`XY`K@v>fy&64%Lpfl7rXB89AFhA20_UwP6$mktG%40Tr4sNMPi1T%1lW{#OFi3lbPX{|V!w_B2!_ zJje@jM46%z@SvpD*Hh(ZVrqGoRLSLf8{S%}G{GpSZQm^ZOlYr-CJ_ zAOLzOaQ#q|yYkZ`N>2<9GpLcD_@AldJK?PKPFJF8gkI^Q`X&79sO9U|(ElTww11Bk z$2{@stOR6}qq`h$`TW53LZU4a_0oTwCr3aDPR7n8VKHr=yYGc0S+B=!T=a-KMvh;5 zxvG-7iP;;Yrwm2tb2iM31f>7sC_pTWi?k+`hDRO!`-2h7Yv*@&Syqp;0v~S7^1D19$n;2olr%pnxB+{|^cs_X3wEHLQ$>k00m9uZRyS=33ucNGX7R(t+JG1^5*7BaV+B?{s0pfalEG`JnTkb#f z5amj}A0P1akH`nPSo|w{d9^Tp%QGvjzE^EyFu!Z}!`6wXNBUbus#LEw^8uqcjLoHK zq+Pn_VBH%57x|P#A>bl{sLmbzCmYjR{_iGoUp$%Jq^1TQ4OuT6X2Ev(*{K8nny_%dJ?5tv2BLy(0qu`;WsN{q!A7}b$> zh_fUR*_UV%igBZ872wK)QvfoNZDt2xfr_jypNC)xC|?3~`z7d>vGTJ*jc2HzQtMa| z^&`|{tdFKuFu619nk6vOGXn(=#%cl7Q8$+IfZm%``9DEB&m)48p-_Izy)=BK<71Fy z(9X@xq1qXWCj$yD^Dtu1A2ULfDOeSqb>3CJo;)`noBx0dz#4~%pzl;NBF{6Y?1en> zzv6gJw$LbmV));yS-JtN<|k`69aD8OG-5NMgC*&o`}nS7BZ{0@(Su(@=jtAx?9NgI z2UqRI-6vuHiz5ra8GC~zhE`le^k)71zj4}Q@2FQb*|hRQ7Ik~S2@*diF8vWtM?r$Y zI1uO9@E3&2G_R_PZ)e(zh=Nl%v#Nxm?f5Av=nUd{rtmi&E5uDHARutV97?~yjDXx; zBOo_p694hBw31w77P0e(G~o_rasf|`o^$&DpBQy;XKxX#1|ba=H*a8v;Ff;>E|)5v z;cMJT65~|LY_o+dBn^5#wD;`^1>?H4=VIM1?Ug-BNpq&H>-`&y1}Y|;y+Kol44=E_ z;o;#3)?Mv_Cl1JrO5e!GfkFHpKVHn)`ROy#*n%CE-Zv~2uQFc6%;VtcV~h?f1u@@Xfa|H_}5_D z|5q)fSRkQuQqoW9Q+3@k^pk7SQ+AX$9n4ltB|95KG)|n)4h<1W5XKcfL}hhvzA+@Q zOPfYC*>7;$Si@iqKWQ+}9^S9W5??zqbWMJBmhehO=E2SF?PeYIU4dB$(ccV-7_df% z;Q9IaX7deh7l1peEp8zoo+|1kfB*#mN4O^07qnI4kNsNXzo2kS0=hb63aq2jP_Zrj zRL9wd+4PbsYJa7AvN%Rl3q@r(&w6`?8}hCVm6FO3b4K1q*%Ni{Q`E{WSzPWU567Oy z>YN3H+b5hnI@86t90rqecNgI7GVS>@aLK}2BQ2YUrl=U1gb{IY@^_iZD3$E*GLtx$ zC+XDlv8HhVIpgISfa5ZGN!atGa4Tw@+Of&$z5vYRci_iDNJ5fxrGMNhxBepyhv!|Z z4%;tn$UYYLalF_K5NBqHCm@PP8#9yai#6GCP=1C=U@-K5)r%rp2P%ZL0u31dQE3A8 z;~2oI#v>uFu6$mlppBIuQa;`Ujx=9OtV))&gwa5k^Pni}Wu5&p@}_L`CbrHIvf&i6NN>O|JCDVa)E_x7k^RA5BgWW%Fx21C;$C$ zQ*bnHD&I(%!K$TX(Bl`E@S5iRDV#=$s@)u%~z>791~U0->VBuT&5bBT!X%|7zX*zU%sH4o13Geq86fV1Nh0iaJA|E z@riZW2;{%#CIRv1zO3x*U7!m%K&mc~sRisL)Ya8f{JXVJ4-TMV$>E#4eoaj;a`P-# zcBX0Oe%Q*WeBy9+Rzad{`<_pmKu!j)<_I<=5D5%<7XY{sh#XUT`S%n~b3iJZtr{Iw zax0W^O)lzJNS2~|BuFLd(ml}XoetqFtU)R|9LmQyS-!+Nv<@r+{DE_`C?-#Cmv$FP zR8>`DA4M>U$PF0ry{z4x0t)@9CLqxK%43f19}sW|V8JXN!1J)J1P6z*MR)3ru$_PyYHuQ4v+V%W>e~pFOC!*q^9w60dCgKFeM0ulfH#b zO-+S<`9k^^oiKLgn6k%01ID}hCy`HVt38V}{fsO`ojpA|Y^*4eX|enOw13V2>$78k%K&qvzXm7>;>=}uMMp$U;YyY`f0BstL?bHw}$}-(}zJ4{x zLV=3znF*@vHs7J9Am|lkt6>Dpzu4t+BO4o5V(&$ikb%tuwsOC;L5b4ef~2Pk@2W#K z>o89q@nV9?oz3{KA=;c^VR*GHfe$wc2eZ^JTsujG<)X1x-!3`1UE1f6H^mG3~I!?TyT|USQ`>0 z$seS&Tv2_*VI%TrBs{YT*BPjrBs*2u8ztNO#gy&iLD}HCNk0dbu?qVyO5Dtn>O1fW zzG&K2XJ;exRA61W_~6IJdPyMw-Vv5A+MqbgCey^MN^|#SAa?RE40oSJKs}6|GHgbvWy%vcYgt z_DkjS-Pw?bral2n@@iST6?T_++JqITtmIX;k-xp0xjnippTyuYIAvfuRc@8JIBHN(P3#1N9!@ktP0ZYY_bZ5((n=E36)!~7W&ixl1y z3)(MtB`A{dDYuzRpl~4gQ6WJ7!xDotLsSp zjaqApEf1@g@a%S-Pu}( z)9rntG*8rOd-q@0F0U|TghMXG(s*{-uZhUt+|BOvcZ`A__;+kdbtj(S*MM;___dO) zlZO>wMGG*e>-A6w<>w&Bn(?kxxY6AaTno`}hLSh;az*^dMQ-c%>UgmoaLWm>6L4b} zD9i_D+!XGw93%R$w^W2K-XzJ#;Nc?LfReo&UKVQo(?0JmDhb1#sF5_{a zW*km$Pi7`wZCs3qZp_tJhKV|rTVp49HNB3{hdzA#60vK#UwCsFUCk~XTiYGi=udk4UCO@&DQ4)BmDtXra_l!h z0^WS&Tl&++S>TjW1|I@A9HIYC($-0}KkL753XUw%5ON;8KGXaXrPBS`uXwcTCDLBq zN|a^#FTPd$gPCuTDA% zMg=z?2){`k)9b@gtbbrfIYTY)kK(lW@m#;5hm_qVIKfw8W|gY=N%wLgEB;?&G5%v4OL>`q_IHLNG&94K{}N5d$^ z>>i^PhgWF9S<#y;hiUCHt{8&53v`X9l$2hhUznLI6GS$g(*k_Y;E0n2vWANT#tD3x zkUVJ1sHm?+@>OwUURBgO+LTio6|WT^jFCLzy84pp2xnbebHKvZz3fuW5c@P0EiQkO z>=9_NdO`iJ2jY17$XjBm^PLTbjNu{TZeab-S9=fNy16_){Dn&qWl3-VEneeibbfsr zY7`I_jV}${Q>&xEH;cwVEB=r_V78t)QKi43%})Lkc3<73!962-PB~LsyTIiHCUuSO z-+{uCl&1gLd&lbI)0K%!Df>3r@Vc}RgDTZ$DpaK%tLq}R zJ(~x32{%qz(D)yGK=W3)=s|rOi=Q1fFE8eSBR{vtDzk7~3;fd!*~fv6`14N5|9m72 z80`xW!h26!hBG>vWxt7%$w1hfS6!d&J=QiWtO#eYjD-c+Yvats_Ptk74&Ztp&0n^& zro}<1aFfU*Ld|69dTn%VEFhROFGNN)m4d(wFg^Tt1`37Eze|01UX5jU_LiXP%@C8+ zwtd&?ddkX{pE(O8HYC*F?fD1_20nD)I>YQD-8|OXOHHUkyH4PWb?)fg^7r<(ZCDiI zxPbrT1w!TA~%XX?czC!tN9{=VzKJh6emKh0c+c~rKmX~Cx<&tb@ zXMzx?Pr6KGF4&;O>g4CIgy-d-{qwvwa>;X{58DuDL3wy_nNc;Z&GY=5^M@y!#&@FdWGS zalwVuC>@^@B)jTU(((xl18`>jYTNR61CF4fcypgM+VKn_(izC?A(rRw9zCZ$^a%)eM)9jzz9pLkQ?5@JSs< zG9`;LfqM1rmCvI5B=NbB?&Qx11Adu7Hm*z)(PI*7Fvm&200*Zof=&+juk-+V^wR!* zH1HMe>h4|w0eUW2hvIDGFom}lTicZ}@Rel6@p6ZFZGMzWpIyK0vR$3MQVsYV_4{J1 z1j46JBxh^sB$t2W^bVbN_sv0Hzn&1jjtJ%;6hM6-;PYU4yT!$^tSg26iIM69M)fDS zMXNWhwf3b_8j9+bZ+NAsQ9FTVEs^sRAr%#@FX6)U3AFY81+s2)2yjATs>A!2T0nx|bhTBCsM$ZcJ9@f{P0;ErsGjo7g3SSuP{f%UMRfMS z){_FrNa}I}J*mV$P)AjmV`#zWg7w^kuJ?RsSN3V2@?>9U0d8bKo>Jm+8xq;mqJkK= z7o^NC(yuBbYL$`pFvfIpP|X}o(|+5H6{iGH@kiy@r+D@*P>1-0pg-E0r>*a1~ zD$v}d<_SA#>b#ZHdEAmQSNc~W^3O?Xn{=N-NZHi}6`!H8iHbfltj&KlG=n1abpe%GEvWMi&S{r@ z;!H3hr&k~DoXsLG-8ed33Z7Yt*Owf*YB8pD_|}*VtMOCGk0~f__V_BCj~={v?w8h{ zGg4yxU~6JXI%R_YbBY%Y5D&^hAYbKs!u|hf%&k-BK#e<$Z~okXrp(sY@YEb*k;oypI%-zM3h9VZ2-)$!EQ2smQW39xk^&P7B-R1fWm-(4`YTy3!l z(Inmz<{$=lTGg+z=c92{qp}B@^?01mzpKWZS;jkB?Tga@An!o1@y$^sP>~;-wtu4H z$0m4j;G4erBrlQ~O=+jppxKj6!0}Xe`3HAfcKy6feS#VNT2}2!Ib%nfB9VJTxcaZP zHuVgN3)9E+n&=$?lHar`VvS^lP-Nrep6KQoYo+;pwe@)*;8m=72az3EYaC(W!!vi- zT#C`gU-%2MaCEbsb=0ZqiPc}xSuSZ@3DJg=bz?q@|+=dAkfO9tQBDdb@;Bg?7jGWwT{)z+A!1u_I zc&77>qwaXE1-CcRmhk#-o@-$l6F6QmChOXlRqG0o=QpE$oB}gm!|`Q8P6`~7!CPZj zoM%b#ZbQy!zbPW+Dst2=1q;)qJmQQu7D@>f1UAz z+d2Kd#2q977sEbx0YLoTGG@d>$}Xxkn98fn=b6wrMg456;gN@|W%lTWPjd*T;G56? z;R5{FOdm4;LP;C$z$F%OxYEP${P{x!fGY;*65`k8W^;8;UxnRRZ6-?IkG>}MVvse6 zS2`BjovFq#^}b{Tf{5nhKL9$BygAOe|I%Rj4Th$4!zBJujz+){PhR6?B2LTIv-PB( z^RVQQhB8@?wzD2t$8RzpD_pf^+_UNJm$G`F zi-9UZU4-M*54Dh&aZF1<%PKD;(A3t!*4ufG1 zdNv#VB{CpRh(iQ(7_jipbkoblPeQRyXmn>Zm3YH1a_-@lG0Csne357=(^``W9m5T) ztg^5sfT%qtAt9fGD7`V=YwtP2+$=P*Nk{{xprM{4hgWCBIhZbLsHAt$O=0R$3Jv>1 zR6!&3&ViTMJ@il8(X)Lo*UzleUtxdcRNCS*3E?L+m_F5iIw8=B(`RG))ObT^+C)p@I(bX(|fZ*4-s?ZuGQc9^t-s~7F49#llG1hIinwf&K;4THm!$gzz zgRpjuyLON&j&4vdYo)u0kFZ8Q8>bPqab>B@#J_!iV-jTZnLrM4-!= zk3ho_Fdu3V?j733ZEHMZi5J|~;V0oYF6O~Ktea=P&o1AUX?8KCVPci7`z46!*8g5> zHLO619qSGf8{yOb=NQS$vd7drauC#<|!y9}uatGK0F{RMi+ z!U;G}BEXjW($4|{?+3%uIxf!62Uo3cp70b2LLGOqbcY<7+8inN>Wd!$p4J)M){&?L zP!K*Gv}0WCR1Q~pN7QO9b5S0ajF%aMcgjwkDrP*>R88VV1N-^z(hnd}C1?A*#}j>1 z0gMYBVHQbsL!4dqVcd7XdWc?=J<4BRWm5rG_JI zzrcQ=<8*1{Oli~F`~apih%W>F4~er6VI1Q`0Qc^ z(@pOy6SgE%d!dZ&{ey$R=)L%GR+IUgn(n;m&o@JznzK4MnXu~-^)PAi+*g^R7)unn z!o4Jym0zU36tZU1AkliI#NV#RW-5@fu5SHYDOZ#B^DwVgz>oYEX5KN5_( z-vR%MJLh~11s-b!n)aR%(D%QN%Pk+XKs;GA;JE7F%KGakjN zutY*6*F5kR(_r@Y$9k`#PI$Gbx{AHn#)?*sqKjqN3*&(_%eSA@RI2JGIT=Bz_W<4beufY>X% z1%H{HFYLjmyOR9$&hlW)zsvv1N%}^Pvco(&nI7UPfWb?~j1N=Y(Fh-1*o!`kYDHB> zulT5l)z!i^nm}0phN9`ENZ}V~(NDrzqF`6AR&kPG-SO$Dt3A0~myMs+&uGDEli)j< zHjsikkao>lT2heiBYK+)-OK`KpG2RqPWRQ_mvVQgq1ovRRAKJNB%NlacEYqofr4w z+k-vKgx>Mf<6$N4X95I_{nbYzT0`{VE_hj~5*%*g9bs9K^39{c9mKb?Tur3fciq3Z(&^XFpiJg%P~^&@Z$s=cuG(q&g%m zGpkbf?gN{Qtn8)@aJa^aJCOpZwZbJ?7JzefI9ORb*vbJSvXb+5_3QciL*WPw*}-vu zi1a<212IfqY;!E?fR>h0IW+9n?3ZOp*Zu%?4jgiCh@mzgayqL~MS`V0NzT{(6t(bL zonZQ)HbV|2?*Yedi$4ShdWoP==+guhE!ff&tFM z8YUqQa3qQ92wYD8Do(J)+M1jX#X29C9{lZ1Cg8@1r5nWk0s^p>2LfQJz91<^Gzy8J zC~xy$r21_YTT~Z@FODKHF@;qqEIg_$lL!C4f`68!x)NuAVf7h!L&2TrLbv$F_ zD&_695JoToUGB#bjS1Oy7^z8TJUILa5tr1ndYF*Rd2Kfvp-AKZ0}PuPrTSw`TB69y zSzrK~3J6pVr(^``*mhSi&kb_=pi*iOT9G!OtT^;d{!HcrEnc))5Eupae=>CPLRROp zo3mN$8=+>@q#iGWO!=$E$Iiypwqzk;(Q;ceJBsZ;hjktMj!>0yV})Y0=#;$ozYpzr z`h7FX!;-1Gdz9l)67ob^QJg%|U&p#Cm=%oqH$bO-Ewf;)T-PXCt)gKiJG2jO*vBe= zHfFt)eTTmp*E%e9Qx@YniPUP$`MsJMioTMhW{<|b&2 z8(izz5#xoR=pgVla9p-kLdG)+ddz;z(Z60d!E2lQAowRs0|2XbVKkcgN8$2kN#+u%ySdM<9({4?-C%fsIG+S$3*j9XtW|^8!rC zNVCAm6%p5{zfP_FY;bvts-&U;R~z~3dRkaN?Mbw1yEFmrIB!a$3rKde^2&Ge{B?|s zBJc0s;jeMp+1B5@yxI%RYfAHl?R4(0;4ig!$!oybxxa$V5FmkgZnjQbT-@P5aQDC$ z2A=*7;@^pp+vU&wdCY^gw_fmKC){AYD}oNCH6ojOn@ekiC3^Ecp(A2QmUvuv_C`6G z(!UtvM0inn5t_tJ_yDYue^A-CI)~P`!{X(Va}%^IEV$2_3qDDa@HkIBo%2|Mj)5*l znzva{9c;t;cuvw1&?V%>5eg5;OzNj#Ov?Ls}{(gNORp~F{ zkL&Y6Q!Or-(Bjkwjf=vzpCzVIwNEh}ngkw3t2Chrq=j)IQ(YLAu0f5IYRqI5{~x1e0IK>C3-aW2l@@lKo%es;)u zRO8RXjMll7eSn*R;1T%=vZpbWIjCDYQwU-rc|sg4P{7dt(^b zcD`O*+uh&YQgTBjf-Ee^3D-MotVWSndZH5_P7qgs&k*c~h>{a^hK7fGfNXw| z$I(M8YrlNJ=sq}Ck#gPdtULU^*AN@h@Cyk$L8R&=9vEn?DHFZ-R`;yEZ?5HR7wK(eVIk_`EG{l!MF*u#7Fo#@uy&&gQ{vI|L1D{qDPwq&Y z)rz0rpp5ZPaj=ONYi0n@&AzIevBgtJ19!d7#@^xZ<5z}HG=C}%r|;@=lQa3TK7Nef z*Wz%YI+%W|5j6S~LPqc0_yBDi`L${R2_m5e{e*E72lAS0KAcTkj%G@3u7`pJk?uI2 zF9o_hk#kK4mmc0Jh|@1X>k<>O)w5WwttLIWg7NGFRns~~L02Ny73uca=(Czxy3US8 zDGkV+zV}(`D}?ps^;&@2no@OrDPl^GNJJScA!+#{1=)g`Zpf%I5?NYiuEEqHMQ5N88`u zAjj+cD0*Uv0Q5fmC>isr)1e1eJ;}`<;57xA=|t6@bpJwn=NMFabXoq-?EHD0BJz$i z@U`ge$*+H)p`bAj19+DnEe1Y~#MOj7=HL(6x9*(CysB+wb?Stg)bC$q^%yuS|mbx8?3!iMYOy!GDxinat$8bTS2V(%f*Ga=6iTlTrB*2&uF z@(OU?N_M~M4(m*teaujWPmhi-0o;v5ufBIRJsnC=VrXNOx;$RqA%5lfluo#J{}DrM zn?CZ=CqXl{ty!|=-(3H-1dB;u1Ee$ANE9T!2C+5YIMsIAXIegr)C?Q@=5Ic#4X zOzjs%gcAclEyi|?_|LxLlw>-3q>}#PA;M)EMAL?xBQR3-3ch-`HJS^?9hveu`mvhn zdD=M~Hd1L>Gdv9ZD#x(B+UWRn%RcpWNPR!>9A0H0x26(sVC}jKQ2zBegOj2EaVG3x z-A6mtmg}`o0htIVo967~dIF9KBr4U&k=zeh>}(1$fppUgi#CdMz&ZCj(tj6-9v4O$tW-Y@H2 z9I1eOg@rmkx49 zp#GEc0(Hs7g$E7fMC7VuKG*D>Hn-!e)=nsz{~b!{;=_ffIOV^f1+(RHb^l!r_|_~d#7>pnewoSE zg_bqyaNM`=9h3aza3{C%wyO_|2KFrAi_BOuc#mO(hlQX>a{oTN!|KWU|ro?0x1x@x39h{?8 zFVZ8AsBp>WK>+$+fbUad;hhN*LrdMiAI<=we|CMOU$FtV!kb~)OJlIgwACyQ56BV3 z4ejzZ?8($A*3~qB_SF(GD=wT$a2X{~!IkW&L4maJVq0QU_c_iH6Old8NgPdCoQa2U&fUovdJD9HNO6)DWck|Yj`JNltm=H?btqLNQz7C z$!{}OsKE)Mk>_!NpnUB0-rsGtm*~UsAH6!a70%6dEUJxfS+IJT|1?U&W6!R)uGg>8_>|n!uSRlhnu;O83!>N2z+Sbv%#KIo+c`=OjlZS4hwk1vS6gFY@p5)h3!fN~J zxAm$yVe=H9cJcY(&k0|33^GcCgr+vBr`Ksv1fYRnV>L0f{2zA8G$0-3>?K)*YYotnfITK z_@BaPHBzTMjtL{F1j!{OZx~{9cKu znqyqTbz4`(dLDIpvIjZ^uk7JI_$G!pfp~thL9#7kvMs)I4e;D1l9G}yK5cy_M-Q{i zWcAXJe<@MefHV1Aab&_9JxhR&1I;;BGf+m4XlCYiWO|9f6eTQ1wuHSq=mm?Fl*}4vLUlRds08=R)27US3*64na1VnWvvfY>KOeBDgMd#a( znXu74Q*Fq-l6b42x{Ebs)3*;nBkG=op_egk*ocHbIb*l4-`{D3RVL!FE*k}fx{yIr z9o6IS*h#X<3}d5f+)ZVkBdf2gwUf||cd^}lU9VcH8@3{yp6z^7yzQi`Yo%`Yru9%5 zZPL{A@Qpim0-4-SxfuB9kv)0-)t-AFgj$mP${5l8JvGMp@+d>(@Y+ua#5ZJ{TX-84 z!L7CzPsTnP2Lw4cFFt|`h1_&%JaMsJi2+tnZPAv{&nh!ZkQFUTr=obtsLnoV?@VT; z$r#w9HR+H?c~~Z8kM%8X{{BNHbJk;(3iEhPirG<=_h+2&>GIEWW;RR>#?{n<3+i;h zswOzt-w}?xRP1U27+#}G*^C_s5x_<3Fpr&2f?w!@p4-P;1FM5E>Cni?la?Q*lA?&q z#g4(B(X$fBo(5B^scZ#Zg@cP4#FZIk-l&k{v z*fGnj-yw@Lg&a=hIu^bWf-A?Vmy~N-TC>+~oAHHHJbKo_DmC74k*=iZ1vg>2_sU&* zsk^g#9d47MwYu|4qG$QM%Eb{-eFPeg{|~%wDNGW-aYw5}G*^R@Y$4=}_0g zY*6(%TKbpI}cEmveR9q0mmb zene^^ABtYd;4(JMf;QjZT_=a)0o#dUjsz^nmdiJT8RGZZ?LZn_dzP=nuHR_Hd9pWe z821hM_(1gGKjyoD;|HOL*RzQd(Ws7W4POrR$=6!rc6=^F9mZ!eCoJosZ6MW1`thOa z+og@O&cJdjWq9O)*B3JmeQV~B)&%kG4mN2gdflSv@tSS*)s3Qvcrxs;mEh!H#-*7U z{*hum3_e?3x0kx7*yI^L_0Ix8NKimna&fvn`e*ieUQ34nA#kB2m+bENN?W(m*R%B2 zV?Ara1Y`aa{x(_3<+DEo zp~)fnWf?quv_4`5V|ippI%qGK2Tb!&A1M)$4S(|ZV?b}_IOTR|C}N(eF1`|U^hApoZk>BC-Od`c{{0g*Fbs2) zxcNTU;5L2zBoJDfb|qT2Sf{jC=wV$oZfuw{z;NE!Jhq%yyR9>SM&8a!@c*@ULVX{Rg62^PY z^R4IoNez$KjZHsY+627xYf32NJKsgBi0B!aY&4 zD992RMkH8YEl)d^^|+OdRc7W?gO0d%J|QakoZzFxBO@h2a!*J9PozWR=zrdviE#DM z{)|wG4K&L_i8Stt|IFtd zY^|M0A2qS0I1QwUz#9#?$ht3e=a(Y_Mg_vww9CcGS6k-OcZ-4VjNkuA|RJNDO18 zuOG8xh)EXQg3V`mHK2iW3E^$shBj~}I4>{nbNGD}uAl$|Xas~G8)y5Z&2iUvF$z^r z`e+E?n-^74HTSn2jR59g8+Q0^GQxlM5btm>4OhE3qN!86<(> zTV8r+wNCTTcxF07Jlx6nId)Ew$cG?X+%@Nt)beb91e@RyOPRnr;a>#;NN|32HU4$z zPbPvC=0`g~xvu>neKIixc4<=0acWi|;{}t(WyqLz`72Pjgsjg3^Ov_Fi4?UK4BR`hF+aR8i!I5H2$5hmz^ z-jq3iTWDyz^SN36MM-G4fGDluhmvzr(UEmqYUK=uCa;%F_LwuBWDE`^B)fbp-OXd8 zvD-a(7u!W9CYYDHE^~s~gY(HL&tp?le|GlvYH69eeSYaDplTKTWa0Q&8#+N~u;|AT zAxy6}>UblPQvxOueop<1IMvXn@F3=E8A~~#)3>7(aOj=&)`4;djtd?WLpS*MZ*nz% z+`jb0LVszyv_OVaGBTnaNS3HSpAAsMyi~a(hID$Lo|d2WAGkfNd7>srVa+QfhBZA` zrf@Cf{)75)k5<{0;qDG}PMVl$NY24pyR}QX$7(1bN@LiAFJNx@% zr#Hg;9Ak0k%Er$)4>a+=b7N?l)qwD-(!#~WF2}>uiuF!Iifllz1Lj9LP)Ku1=DR2# zPj)#?y5za^6r@8OQM&=&*!GHN(1O|t)xeeyOpYmOm_p;+>3h6y>-UXa)Yz@Ga6)?p zm8>g_y3MIa2dho2%xPN9_Su6KRL`An;ujokxIy%{V-A({aq=Z^+xoq#W@kAvvJ^P- ztcPbK`P}z+uQ*Rul?3>W>D1?-3 zE!|U-2-^`cd5E*OyU8=PNfKUPQ?eNmrl3pG<{ZUfVYB{?*ABj|a~V`XH#<(zF4tdZW}gR69pV31fGo?m;y!I!TjN9t z;qTmOW)G0)_o&1_i{1Fru{iso3wj)j+S^no25dX8BTw5bg0Szoyv{FlKxq5xOBLUN z9ZcW_lNl#0-6{h1JXLAt0&ULUiNi_gxkcW8Fww3Rig6Cci>yj_n7WfQU4CYd%IFc2 z5ynHm+w`W49tizajaH%q6b!*={P4T&&mfm?voGCtek8GOpzy_7M>lXt;v1j~iDlEd zdGiVN-QpD&3Vzd8B8?;@nPgs!UX16;+46E5kXy(NX5>qHR(ftsR+d>Rrem|`j?x&= zu7-=0i-DtMFJNe+)BvPs{u?4nH#ARMY599T1gc^$Hc{>66@I$tg%%|quT^3Mx?y>z ze$?L7{X+Q=_1d(t&ykzg+kmKQ^_G%;LF`vOkRWks$o0E(3>d-6lo4EdxlEUskZ?ls zH7uSregvCHkR5n&AHgPJ?0yP@rmjw!FBn*2iOfn9N5*VEy)|wHTr6#bb!^lRxqckg zLeyT)?C$mX3`f6{;>qsFjfFy?f?={n_jLi1L}LWLs5J(K-Xv6ffysyJJ=QB4?D}He zsI_5s6*8;AF1PUYv*QgK-}W_t&+ozKu0{B7Y@{DvqCr-&*PDFqVYs0OZRd`3%ZRma z^6m9UShjH%cc;pmW55V}ZPR@5=moieyRZVKQhSoec_7Gzgu_3rb+eM^oa#jM4fE$rTHwn@n306*?;3|q`-fWKZ^!$@#ZgN1mrq7Q9<G0d;&$JRohbL~fupb8W^0~ni0B^_L38+;QBMagwt z{a#_Wi+y$KZih#qZDVL&M;r{#?rl)ki&{#=H}V<(H@q~n1XD`){KtjzE;K0wTp7}G4KlhgguBJQBD3CwBELBENDrBZGAy3&U;Hyd2}INf;% z*;s-C3`%Y4&+*48NEw1D5#|iQ0H*Vxh{)eEW{vH{VtMCKQdBS!rpq}#zFf(y_t-7g zrN@#?Ci8vO@%KyylY&T@6zPJ<>^-2S>&;N*Iy8ahw5D0}S<4!&4jkK(YK1_@VE{#; zcP_&{{bz(3`vY?}gO}>iMjv?ah^JP8^*+RY+i0d?I#f~k`_~v&8V2X_ab8w@r9_xM zQb`CbcIAL4pQGT$Ty5{|>^0iv6;=mBJ&xUagQ(*tBolP+&K5z2O1VH<&Ldz`$1Tu| zGZ&?7P1?iP%KD+~hA|mVc%8{>XyT3N=d?o_B+vSQ0?Mrb#?V`3^7m{IOPy<<9eC& z{HxT|2v8t~3uG%#ynpam)I=ZX$PIZjah%1zES|Fsypzk)nx9A~Dpj5=?li>7<06J$ zgkJU-J;Ces;Uth7FBIUHF1h7b0pJaDbQMzUJH*bxkpfZWN(|W0(zQvM%oa(F$**ED z7#I#2^w-n?uzfc_L|^hTWv}Ye0$Ct+*4ILPO?y@C+Sj}cRtkFcL>uBjohV-ZsRoO` z9+0)Q2-iaZ)1RwtPjNb=aDx+Jur9WaM4nh6PNWo>&TC;~V@p>TTcn$64AWpeqa02u znS?ycjGtS(P5al&aBH6|fn3FJE!rs@oN@WnbuRlwfM)I*-Q?pHbW^O77w5oe+$&O0 zUCyhoUEL^{%+{va%bG-$8|A{W;O&jM4Zn3Df{ zh4UQ)=`v#IgcVBqzB(v{v))*HTRMSTo}S>Q5A zc>c`qx1$2fl`_M>y>eOeJRlqX!k#er^B4Z~!k@7Krq-VsL0KLC^unKB_;-{0|JQ}N aBkI4Re$cp;D4wMPzbksix^J~n5&r|x7YS+r literal 25344 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 diff --git a/test/image/mocks/contour_edge_cases.json b/test/image/mocks/contour_edge_cases.json index 5d2f42c315d..9b56c3ba3f8 100644 --- a/test/image/mocks/contour_edge_cases.json +++ b/test/image/mocks/contour_edge_cases.json @@ -1,6 +1,8 @@ { "data": [ { + "x": [0, 5], + "y": [0, 4], "z": [[4, 3], [2, 1]], "type": "contour", "contours": { @@ -8,9 +10,11 @@ "end": 4.09, "size": 1 }, - "colorbar": {"x": 0.4} + "colorbar": {"x": 0.4, "y": 0.9, "len": 0.2} }, { + "x": [0, 5], + "y": [0, 4], "z": [[4, 3], [2, 1]], "type": "contour", "contours": { @@ -18,14 +22,111 @@ "end": 4, "size": 0.9999999 }, - "colorbar": {"x": 1}, + "colorbar": {"x": 1, "y": 0.9, "len": 0.2}, "xaxis": "x2" + }, + { + "z": [[0, 0, 0, 0, 0, 0], + [0, 0, 9, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, -9, 0, 0], + [0, 0, 0, 0, 0, 0]], + "type": "contour", + "contours": { + "start": -0.000001, + "end": 0.000001, + "size": 0.000001 + }, + "colorbar": {"x": 0.4, "y": 0.65, "len": 0.2}, + "yaxis": "y2" + }, + { + "z": [[0, 0, 0, 0, 0, 0], + [0, 0, 9, -9, 0, 0], + [0, 0, 9, -9, 0, 0], + [0, 0, 9, -9, 0, 0], + [0, 0, 0, 0, 0, 0]], + "type": "contour", + "contours": { + "start": -0.000001, + "end": 0.000001, + "size": 0.000001 + }, + "colorbar": {"x": 1, "y": 0.65, "len": 0.2}, + "xaxis": "x2", + "yaxis": "y2" + }, + { + "z": [[0, 0, 0, 0, 0, 0], + [0, 9, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, -9, 0], + [0, 0, 0, 0, 0, 0]], + "type": "contour", + "contours": { + "start": -0.000001, + "end": 0.000001, + "size": 0.000001 + }, + "colorbar": {"x": 0.4, "y": 0.4, "len": 0.2}, + "yaxis": "y3" + }, + { + "z": [[0, 0, 0, 0, 0, 0], + [0, 0, -9, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, 9, 0, 0], + [0, 0, 0, 0, 0, 0]], + "type": "contour", + "contours": { + "start": -0.0000005, + "end": 0.000001, + "size": 0.000001 + }, + "colorbar": {"x": 1, "y": 0.4, "len": 0.2}, + "xaxis": "x2", + "yaxis": "y3" + }, + { + "z": [[0, 0, 0, 0, 0, 0], + [0, 9, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, -9, 0], + [0, 0, 0, 0, 0, 0]], + "type": "contour", + "contours": { + "start": -0.0000005, + "end": 0.000001, + "size": 0.000001 + }, + "colorbar": {"x": 0.4, "y": 0.15, "len": 0.2}, + "yaxis": "y4" + }, + { + "z": [[0, 0, 0, 0, 0, 0], + [0, 0, 9, 0, 0, 0], + [0, -9, -9, -9, -9, 0], + [0, 0, 0, 9, 0, 0], + [0, 0, 0, 0, 0, 0]], + "type": "contour", + "contours": { + "start": -0.0000005, + "end": 0.000001, + "size": 0.000001 + }, + "colorbar": {"x": 1, "y": 0.15, "len": 0.2}, + "xaxis": "x2", + "yaxis": "y4" } ], "layout": { "xaxis": {"domain": [0, 0.4]}, "xaxis2": {"domain": [0.6, 1]}, - "width": 800, - "height": 400 + "yaxis": {"domain": [0.8, 1]}, + "yaxis2": {"domain": [0.55, 0.75]}, + "yaxis3": {"domain": [0.3, 0.5]}, + "yaxis4": {"domain": [0.05, 0.25]}, + "width": 600, + "height": 800 } -} \ No newline at end of file +}