From 42c4acd360da700f49bd557af1d913170b0ec95c Mon Sep 17 00:00:00 2001
From: Kovid Goyal
+ This file contains a demonstration of the capabilities of html2lrf, the HTML to LRF converter from libprs500. To obtain libprs500 visit https://libprs500.kovidgoyal.net
+ element
self.book = book #: The Book object representing a BBeB book
path = os.path.abspath(path)
os.chdir(os.path.dirname(path))
@@ -301,17 +321,18 @@ class HTMLConverter(object):
def merge_parent_css(prop, pcss):
temp = {}
for key in pcss.keys():
- if key.lower().startswith('font'):
+ chk = key.lower()
+ if chk.startswith('font') or chk == 'text-align':
temp[key] = pcss[key]
prop.update(temp)
- prop = dict()
+ prop = dict()
if tag.has_key("align"):
prop["text-align"] = tag["align"]
if self.css.has_key(tag.name):
prop.update(self.css[tag.name])
if tag.has_key("class"):
- cls = tag["class"].lower()
+ cls = tag["class"].lower()
for classname in ["."+cls, tag.name+"."+cls]:
if self.css.has_key(classname):
prop.update(self.css[classname])
@@ -330,11 +351,11 @@ class HTMLConverter(object):
self.top = self.current_block
self.process_children(self.soup, {})
- if self.current_para:
+ if self.current_para and get_text(self.current_para).strip():
self.current_block.append(self.current_para)
- if self.current_block:
+ if self.current_block and get_text(self.current_block).strip():
self.current_page.append(self.current_block)
- if self.current_page:
+ if self.current_page and get_text(self.current_page).strip():
self.book.append(self.current_page)
@@ -356,16 +377,17 @@ class HTMLConverter(object):
cwd = os.getcwd()
for link in self.links:
purl = urlparse(link.tag['href'])
- if purl[1]: # Not a local link
+ if purl[1]: # Not a link to a file on the local filesystem
continue
path, fragment = purl[2], purl[5]
para, tag = link.para, link.tag
if not path or os.path.basename(path) == self.file_name:
if fragment in self.targets.keys():
- tb = self.targets[fragment]
+ tb = self.targets[fragment]
jb = JumpButton(tb)
self.book.append(jb)
cb = CharButton(jb, text=self.get_text(tag))
+ para.contents = []
para.append(cb)
else:
if not os.access(path, os.R_OK):
@@ -373,12 +395,14 @@ class HTMLConverter(object):
print "Skipping", link
continue
path = os.path.abspath(path)
- if not path in HTMLConverter.processed_files.keys():
+ if not path in HTMLConverter.processed_files.keys():
try:
self.files[path] = HTMLConverter(self.book, path, \
font_delta=self.font_delta, verbose=self.verbose)
HTMLConverter.processed_files[path] = self.files[path]
- except:
+ except Exception, e:
+ print >>sys.stderr, 'Unable to process', path
+ traceback.print_exc()
continue
finally:
os.chdir(cwd)
@@ -389,10 +413,11 @@ class HTMLConverter(object):
tb = conv.targets[fragment]
else:
tb = conv.top
- jb = JumpButton(tb)
+ jb = JumpButton(tb)
self.book.append(jb)
cb = CharButton(jb, text=self.get_text(tag))
- para.append(cb)
+ para.contents = []
+ para.append(cb)
self.links_processed = True
@@ -411,13 +436,13 @@ class HTMLConverter(object):
End the current page, ensuring that any further content is displayed
on a new page.
"""
- if self.current_para.contents:
+ if get_text(self.current_para).strip():
self.current_block.append(self.current_para)
self.current_para = Paragraph()
- if self.current_block.contents:
+ if get_text(self.current_block).strip():
self.current_page.append(self.current_block)
self.current_block = TextBlock()
- if self.current_page.contents:
+ if get_text(self.current_page).strip():
self.book.append(self.current_page)
self.current_page = Page()
@@ -442,12 +467,37 @@ class HTMLConverter(object):
self.add_text(c, pcss)
def add_text(self, tag, css):
- try:
- self.current_para.append(Span(tag, self.sanctify_css(css), \
- font_delta=self.font_delta))
- except ConversionError, err:
- if self.verbose:
- print >>sys.stderr, err
+ '''
+ Add text to the current paragraph taking CSS into account.
+ @param tag: Either a BeautifulSoup tag or a string
+ @param css:
+ @type css:
+ '''
+ src = tag.string if hasattr(tag, 'string') else str(tag)
+ if not src.strip():
+ self.current_para.append(' ')
+ else:
+ align = 'head'
+ if css.has_key('text-align'):
+ val = css['text-align']
+ if val in ["right", "foot"]:
+ align = "foot"
+ elif val == "center":
+ align = "center"
+ css.pop('text-align')
+ if align != self.current_block.textStyle.attrs['align']:
+ if get_text(self.current_para).strip():
+ self.current_block.append(self.current_para)
+ if get_text(self.current_block).strip():
+ self.current_page.append(self.current_block)
+ self.current_block = TextBlock(TextStyle(align=align))
+ self.current_para = Paragraph()
+ try:
+ self.current_para.append(Span(src, self.sanctify_css(css), \
+ font_delta=self.font_delta))
+ except ConversionError, err:
+ if self.verbose:
+ print >>sys.stderr, err
def sanctify_css(self, css):
""" Make css safe for use in a SPAM Xylog tag """
@@ -461,22 +511,21 @@ class HTMLConverter(object):
css.pop(key)
return css
+ def end_current_para(self):
+ '''
+ End current paragraph with a paragraph break after it. If the current
+ paragraph has no non whitespace text in it do nothing.
+ '''
+ if not get_text(self.current_para).strip():
+ return
+ if self.current_para.contents:
+ self.current_block.append(self.current_para)
+ self.current_para = Paragraph()
+ if self.current_block.contents and \
+ not isinstance(self.current_block.contents[-1], CR):
+ self.current_block.append(CR())
def parse_tag(self, tag, parent_css):
-
- def process_text_tag(tag, tag_css):
- if 'page-break-before' in tag_css.keys():
- if tag_css['page-break-before'].lower() != 'avoid':
- self.end_page()
- tag_css.pop('page-break-before')
- end_page = False
- if 'page-break-after' in tag_css.keys():
- end_page = True
- tag_css.pop('page-break-after')
- self.process_children(tag, tag_css)
- if end_page:
- self.end_page()
-
try:
tagname = tag.name.lower()
except AttributeError:
@@ -488,17 +537,47 @@ class HTMLConverter(object):
return
except KeyError:
pass
+ if 'page-break-before' in tag_css.keys():
+ if tag_css['page-break-before'].lower() != 'avoid':
+ self.end_page()
+ tag_css.pop('page-break-before')
+ end_page = False
+ if 'page-break-after' in tag_css.keys() and \
+ tag_css['page-break-after'].lower() != 'avoid':
+ end_page = True
+ tag_css.pop('page-break-after')
+
if tagname in ["title", "script", "meta", 'del']:
pass
elif tagname == 'a':
if tag.has_key('name'):
- self.current_block.append(self.current_para)
- self.current_page.append(self.current_block)
+ if get_text(self.current_para).strip():
+ self.current_block.append(self.current_para)
+ if get_text(self.current_block).strip():
+ self.current_page.append(self.current_block)
+ previous = self.current_block
tb = TextBlock()
self.current_block = tb
self.current_para = Paragraph()
self.targets[tag['name']] = tb
self.process_children(tag, tag_css)
+ if tb.parent == None:
+ if self.current_block == tb:
+ if get_text(self.current_para):
+ self.current_block.append(self.current_para)
+ self.current_para = Paragraph()
+ self.current_page.append(self.current_block)
+ self.current_block = TextBlock()
+ else:
+ found, marked = False, False
+ for item in self.current_page.contents:
+ if item == previous:
+ found = True
+ if found and isinstance(item, TextBlock):
+ self.targets[tag['name']] = item
+ marked = True
+ if not marked:
+ self.current_page.append(tb)
elif tag.has_key('href'):
purl = urlparse(tag['href'])
path = purl[2]
@@ -506,19 +585,18 @@ class HTMLConverter(object):
['png', 'jpg', 'bmp', 'jpeg']:
self.add_image_page(path)
else:
- span = _Span()
- self.current_para.append(span)
- self.links.append(HTMLConverter.Link(span, tag))
+ self.add_text('Link: '+tag['href'], tag_css)
+ self.links.append(HTMLConverter.Link(self.current_para.contents[-1], tag))
elif tagname == 'img':
if tag.has_key('src') and os.access(tag['src'], os.R_OK):
- width, height = 600, 800
+ width, height = self.page_width, self.page_height
try:
try:
- from PIL import Image
+ from PIL import Image as PILImage
except:
pass
else:
- im = Image.open(tag['src'])
+ im = PILImage.open(tag['src'])
width, height = im.size
if tag.has_key('width'):
width = int(tag['width'])
@@ -526,16 +604,26 @@ class HTMLConverter(object):
height = int(tag['height'])
except:
pass
- self.current_block.append(self.current_para)
- self.current_page.append(self.current_block)
- self.current_para = Paragraph()
- self.current_block = TextBlock()
path = os.path.abspath(tag['src'])
if not self.images.has_key(path):
self.images[path] = ImageStream(path)
- im = ImageBlock(self.images[path], x1=width, y1=height,
- xsize=width, ysize=height)
- self.current_page.append(im)
+ if max(width, height) <= min(self.page_width, self.page_height)/5.:
+ im = Image(self.images[path], x0=0, y0=0, x1=width, y1=height,\
+ xsize=width, ysize=height)
+ self.current_para.append(Plot(im, xsize=width*10, ysize=width*10))
+ elif max(width, height) <= min(self.page_width, self.page_height)/2.:
+ self.end_current_para()
+ im = Image(self.images[path], x0=0, y0=0, x1=width, y1=height,\
+ xsize=width, ysize=height)
+ self.current_para.append(Plot(im, xsize=width*10, ysize=width*10))
+ else:
+ self.current_block.append(self.current_para)
+ self.current_page.append(self.current_block)
+ self.current_para = Paragraph()
+ self.current_block = TextBlock()
+ im = ImageBlock(self.images[path], x1=width, y1=height,
+ xsize=width, ysize=height)
+ self.current_page.append(im)
else:
print >>sys.stderr, "Failed to process", tag
@@ -557,30 +645,72 @@ class HTMLConverter(object):
f.close()
except IOError:
pass
- elif tagname in ['p', 'div', 'ul', 'ol', 'tr', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']:
+ elif tagname == 'pre':
+ self.end_current_para()
+ src = ''.join([str(i) for i in tag.contents])
+ lines = src.split('\n')
+ for line in lines:
+ try:
+ self.current_para.append(Span(line, tag_css))
+ except ConversionError:
+ pass
+ self.current_para.CR()
+ elif tagname in ['ul', 'ol']:
+ self.in_ol = 1 if tagname == 'ol' else 0
+ self.end_current_para()
+ self.process_children(tag, tag_css)
+ self.in_ol = 0
+ self.end_current_para()
+ elif tagname == 'li':
+ prepend = str(self.in_ol)+'. ' if self.in_ol else u'\u2022' + ' '
+ if get_text(self.current_para).strip():
+ self.current_para.append(CR())
+ self.current_block.append(self.current_para)
+ self.current_para = Paragraph()
+ self.current_para.append(Space(xsize=100))
+ self.current_para.append(prepend)
+ self.process_children(tag, tag_css)
+ if self.in_ol:
+ self.in_ol += 1
+ elif tagname in ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']:
+ self.end_current_para()
+ if self.current_block.contents:
+ self.current_block.append(CR())
+ self.process_children(tag, tag_css)
+ self.end_current_para()
+ self.current_block.append(CR())
+ elif tagname in ['p', 'div']:
# TODO: Implement ol
- indent = tag_css.pop('text-indent', '')
- if indent:
+ #indent = tag_css.pop('text-indent', '')
+ #if indent:
# TODO: If indent is different from current textblock's parindent
# start a new TextBlock
- pass
- self.current_para.CR() # Put a paragraph end
- self.current_block.append(self.current_para)
- self.current_para = Paragraph()
- process_text_tag(tag, tag_css)
+ #pass
+ self.end_current_para()
+ self.process_children(tag, tag_css)
+ self.end_current_para()
elif tagname in ['b', 'strong', 'i', 'em', 'span']:
- process_text_tag(tag, tag_css)
+ self.process_children(tag, tag_css)
elif tagname == 'font':
if tag.has_key('face'):
tag_css['font-family'] = tag['face']
- process_text_tag(tag, tag_css)
- elif tagname == 'br':
+ self.process_children(tag, tag_css)
+ elif tagname in ['br', 'tr']:
self.current_para.append(CR())
+ self.process_children(tag, tag_css)
elif tagname == 'hr':
- self.current_para.append(CR())
- # TODO: Horizontal line?
+ if self.current_para.contents:
+ self.current_block.append(self.current_para)
+ self.current_para = Paragraph()
+ self.current_block.append(CR())
+ self.current_page.append(self.current_block)
+ self.current_block = TextBlock()
+ self.current_page.RuledLine(linelength=self.page_width)
else:
- self.process_children(tag, tag_css)
+ self.process_children(tag, tag_css)
+
+ if end_page:
+ self.end_page()
def writeto(self, path, lrs=False):
self.book.renderLrs(path) if lrs else self.book.renderLrf(path)
@@ -632,6 +762,7 @@ def process_file(path, options):
suffix = '.lrs' if options.lrs else '.lrf'
name = os.path.splitext(os.path.basename(path))[0] + suffix
oname = os.path.join(cwd,name)
+ oname = os.path.abspath(os.path.expanduser(oname))
conv.writeto(oname, lrs=options.lrs)
print 'Output written to', oname
finally:
@@ -692,7 +823,7 @@ def console_query(dirpath, candidate, docs):
def get_path(path, query=console_query):
- path = os.path.abspath(path)
+ path = os.path.abspath(os.path.expanduser(path))
ext = os.path.splitext(path)[1][1:].lower()
if ext in ['htm', 'html', 'xhtml']:
return None, path
diff --git a/src/libprs500/lrf/html/demo/demo.html b/src/libprs500/lrf/html/demo/demo.html
new file mode 100644
index 0000000000..8cb52d943b
--- /dev/null
+++ b/src/libprs500/lrf/html/demo/demo.html
@@ -0,0 +1,73 @@
+
+
Demo of html2lrf
+ Table of Contents
+
+
+
+ Lists
+ Unordered lists
+
+
+
+ Note that nested lists are not supported. +
++
+ A simple paragraph of formatted + text with a ruled line following it. +
+A + similar + paragraph, but now using + CSS + to perform the text formatting.
++
+ Here I demonstrate the use of inline images in the midst of text. Here is a small image embedded in a sentence. Now we have a slightly larger image that is automatically put in its own block
and finally we have a large image which is automatically placed on a page by itself and prevented from being autoscaled when the user changes from S to M to L. Try changing sizes and see how the different embedding styles behave.
+
+
+
(x!;K_l8QvR8TX z7GZs0Tm-HcBTb~}K4tfG*=Cu>ub{E$&y}fMPR)blaTw-t$5gt02GXto*G-rDPO0ta zbG6*d0^Li^A~h@4TN-BZFdM5IEq}kYYl2+hh1gf$m2*3=R$$B@XF<^ipPQSB!yTO@ z-_Ly(Ue95M3edqpG2rY+EX481odz=V$UJe1`MloDQfy}_YqY;uAxTqW@ForI-vif5 z3k`{g0>19Te6E6iDc1{kRil0|Ct=K!^Ew2aQxY&_L2^~cuk3TV{?=X_CfE1 z?*xq+k~HSPoVTIo2<=?%>2o&fbY6)rj=qxN(RCQnt?pjJ2=IJlT~$OpbV6s_Ps?!N z$N{*#*FXAgRkTLUNO+!Yi23~u$JlDUTeqj$wODqK;pEPKjMexq`*wo*?yW9*$3H+f z?%8W616^BbpQOy}RG6Rh8Xx6SYV-uhEq{E{t*+em%TRGxmWwT!$h4LOj)RDwfl0dc z80>e-HoTiL2G4hrkW4s9M-jSiN0;y7%!r@bw-16oz9~Gck^W+^)F4PPU*U5j92+3I z+mSjFT2iSYV=F}Gb2DS85ol#Lq1EA**?(+)t7-K2WA*#7Rp{irFZax^#y>>MsecF= zBtx>B68-^LcXEHfs)QyE=Bc8vpz>|Zbm~4X+iB1X`dEOyw7fV~CJIlpwvk|xW3Al* z(a;_UoMARw{WfZA`y2`>B$XK>eM|EzgK|@{{Ru^MF#_|Ydd?1=8A@C9r|{x z5)dJS!NHQAovyVHPDd)&F)E*ffnA&{$)BGP%z~Q=Z&X?4*LflclbEdNQsn9PfCP%p zx)H)fjE2GdUJPCFJPU25MBH+om(;AE# Y5yzFAdsmJ^{{VW?$ psEEHD8u)^rtP7 zJq#J)apfTSQxc&Ez5z5~Dg36uweKw*aiSCO+T{`JqrX>v!y|tRx$!ed-$wGlSVy#N zEaFL{u1u@D9YxZiSB>BWg~L>P|JY-?3c?E*v}TnvSyZg0v&wo&baFZkN45uWD2K9@ zb*NZgAQ%|xD(%Z88hEFJEu-Ahh-DfoI4Pg_*LoJLsI#1N#wR$bvWgACm?k{8=%#cC zWdcVo$%LW XIQp%At$etBKBEcDPMc%X3S#gzU?Qgt9NaD@^g8)P@h6hyql8^o4$X5;9Uo< zZpsM5Ua2HYS7ERkcV6ApzyoivztK+^Cc}`I?WSOI)9S)NYTxFnf_R@RwbQ(aBF1z9 zrUe4Gy<6V0Cax1lC9ji$!zFdAIDKdAqMJ{g?jxXvt0@j;@$nJp1WT^wKO1p%6E z;G=s? F0mu0j5+m!rk9HVQ@kB^1Kps_;F=bzUR!$Hq>pxlN_aXUn&g;?Fje2*Z z=;9o*G+X nn>RdQ*2Yr UPoANE38o zKWTeBCfuIbB;ORdkLO;?ZQb3f3x^PI|9Dkbb>%v(libWX!Ai0wxRuOZn1XdnynYVP zI=5}v?fcHxzra1m)dB?RfF;Gm*miE9rm*Vhyio~v%Y^q=N+v}XE*^ML-kpBheOt*x z0$4WdN{_rz4RspGy`IctE7JzM-d2%-yBDpBp$+o#Vmm#J*9!SAJ&hwD?vPmO^^utk zI!xTrXq7tb^MLrI?#FMvkPK5Pc8_3FXUYw(_X@m#Yw9~|Ml|`SSW4Kx!HRzWg>;%q zL)C{mKMmf{1*P}*ustczx1rrR{^5Bskl64>Wr?4-uHyH~lQ#MOh?O@ttk?w7(CBEm zySV5z?#H-dhGOiqE+%T*26VG`Vp^rp!u?LQ7*5idC-nFy_*M&2^q9l9RJei|>1nH* z1 &nd7DDYw zEzcC|+(*6}9}G)}&d94BhTN=+3nFIZPwQoE6~Ch&@j$~F>ClU$gQGcQ9~jcG&-=PK zZ8?dY|A3D?MLiiB*3`^cm+!PfN@GD_bzjsGVg!h5-p;j47#!dyeE7gkU2FF!;cV&{ z+Dd6#ci@L2f5N*H#me6Os-axg%ej}{cwL41)4@6-N6u9zJ2`3=bXv>EpC@`!s%07w zRP64*+M9wk!NE s=($PTk1ZJu&L}wsEw^fbLmGkb4(!*8a`TF4X4Bn z@7l6S&61jcS)SID *g Y#D@105a$0jFJ7k=1(_aeSA|57C4u(#yw zF6IQGel;RDfWYY)5Grp(soq;6N+#FnC)^M%#%WpO-VQU+{RgnSVPlW_dc%6}eZ*Tc z;p%%k&1G!lrM{2fH1XpmLa>DM%Yq{w$BWlsX&;~}0EcHY-Fn&E0R{thz16HLU|Ypj zWZ<)W ZDIf|6x8jF!l2RDnTo*OHC9k&A-1WM1p%!6i0zB(0wa+A zb_V$Iw!AMxaoCvcT}s)5=%njanafL^3={>!%nv?s1{v!eAtP*Gy#=2e!nB)u;W~xM z#VhNxf^)GlqnftHn_sfJAp|h9lyaXZtp2Hvq&Y&@=7Q^*IzdLW8NqGU61l+ftC<9P zt~VST-#^?{CuM`&EP#9Q%U=oD@5UM>d?aFYAo>F(yf)4ywt{CzF@$S!kz7Q7@e=M4 z{{Rp#`mn!p&g;ve9%XoC-*AX4;)fW2eXIRr@vVUKB@#n^P8j m!7l}b-L z0`oE*xtx@^T$hO8O5v*xpu5QRY}X((OY@>R+LmwqIRkBVlW*QcPH}WgJwkt=o)rMA zVZvqA1){5GE>^dbQyGtQKQ;HT 3qY4y9GUajDp4lTv^Pc4qOL zwhsIoD7m&is0l}5^1GT9${#~?xKfjthP&BRTUK`#6j>z#VcqlCjuunvUYZW_<~_ze zpG=BMliMP4&N@Vazc^+4RLlB^7Srml`uk`z#V=^lJf2E{uGH{uc`(APW^+6AOOY7U z!H9Y6jZRrxE4|N1^G7L=_T_JwG-3EN=*-d4A3ThM93U9*07ehQmdT^AC~Cl-AS=ra zZDpl~H1+&PsA~P_9PnG$zTI723B?_M^1}6cqJ=^R uaC!;fbWg#f$ZJDVag<8IB>&X6)J1Nuv9FTjKKI zk!Q@0q-lOgK(DwqVv2cLk1`BYiQ$`WA)(%>IpUy>pt4Kj{Y>xtwuDA(rSuz4u&w)5 zPy1RyAikSJXk5DodX}+mUz~&{J89fc{MA1?tI@$n^tsJN7qB$=K$w7)`*i)pj9vo| zMPsf4!*3#Wseb?x1yLGHo;x`lD(PexjZ5ukD=40vN@YZbLJZ-rpr6%5*(tWHtxSc; zm}MZ^;jY$o`(+}~yR7zCWdo6VYpZ~-uWNbJw%wY 8=qF9iim$a %TZUf^N7<%ll#HS(e{io=#R>7tkVy>+1^MRai!ukH`TTF=1!)wn!#988 zufKKYKJ4Ob7Lwb5t_iB0sDAc|KKM>DzhMe7$OUuC=(K3i;{f%g+B?EE_6;4?w-zcl zij44B4i!Oe!;K4u16yH1w5|P+ev2PkN~SN)3ohF7BMbhz{}FgY{K2Z!Kj(79AoLPe zBi6RbEpx|xRW$8W#1@RL*rPo4158wSe2lt5Ecqa;gRjiuT^E?l9xx6@c_{um8@0i_ z$KqMP`tH|wgp!vM Gzp@2NjAWZ5dZ>3N|lBvB#~K9k&KYC-D#EG8;|vxCka@wAco^v7xA0 z<+60>XWdrvL)w6FX5mO8N0ono(E|EUP*#J=Q|54k-R_rR9J?uWUTY?D7nQ!Ij2i^v zChmWx0|siobYBnA`@i`hbmbaoBO9QNV;4hMf=n*pyfsV0#u1YFK{@KO_GaW}(&v>) z;-Fy6kU*N4QVqLj!L|O}=0b>e}k1)E2 zDx)sF)~v1=&o}Cw4~b7WYe>Z)=9ZMaCVWW)kV0XJC9+M*gLzqOg&8`PC{-fcU_`eT z !Nb zPMTad )Bv{%_{#Tz|vDS`6sVqwAlV zrJ+`)^8PqIMl|lrnhm W{uYs*|!a;Qmppw zrJR7?lZ)bQT&+(Wq3`gfM!AyW@g)e=e!d|w&qWsP+BwP*aqln^eLYQ=56O0u{u?`% z^tF2osEd$tKETFh{(S*oH8KbZ5qxcZsFlCOWbSaWuhLxq+Nt_g)ypC}F&r>9Z43>m z|JawWwo@N#Ir>_7_rERlm~G_%`BxF_o-4{fk!T1pzYo|WquM^%@Cvt-Htnv<>@11U zcUL8UTS{D;Hlinh^A*FEYJ1r4W!
edX*@)w$Lbt2{**Ee+j zBJ(4uZ;Flxb2{IOv1z3v(q$)*4UJ_R-J5uJK~s$hr{&99v0afLzM^mSJ*%QtROjR^ z)&L7F6j-;{KmEMv?D?h-al)wp*yp>(SZ2$N$$aGgMHthm=;qnO*+qmGY1J9qdkz`0 zgwrAM1RwAe)8BvpDmj&q#3`1rGuGcPqKM5RTD9V{o^6nNQBnP$KEUSHLmH89BNkCY zedmVT=6Sh5Xre|Tki>-D2dwj&I()HjXCCKQs3L_#@K@<6g4d*j`|K6u2?EVQm)p9` zO4ef31*8kUt|NqKFFBOd?2`TgXl(qu6Kju{%*NP&w1JySTb(tkQvt4RJ8>5G40v^X zs(FselW>H6H*-x-;7E3+l8!%K9`cuEgs=rvr^j1a;kbgfCVOO8RbZLLtwz}#B`%r{ zr!%CG$x(%#@iUCP9F%8=YNn*LkXv&RRTF6f(pmr>MNi+2jyW1Rc{(8vk_Hdu#kI?( zdZYWGwa8S|^z8JUG1Sfe6fz-qYRHlAv$Iz5BbOBlBJ2}sG{vO!w@E5#X#bNbIKBk& zu-z&(#rth?dGy@x!`M@^5mOX$)tlh2a t+}sua;zlVB<7aj=%;RyDeb2eJtH!Q z3AfMMUI8wS>7kqA%ej1`nIf*(ljqT^9&iAH>{&Rz5nU4%ejPC|Dt=cfOg!)N!GoK^ z&_S6JjD?pg`unVGYEMytL1<)o`@yb%QwV-ZyF;&D&ajq78wDA7%D}yM5YK z8!UmzvLI+% e z>M~T^1GP(pLZF(_#-K>9YxBPyIw|(!p2HIf&Sj@(Z}a46waOW~l6^%yrNbZLh$J1Q zs6u3#Mdhn=77kgV;Z8HM%gt@|ZV1R|lGH2nn0DNLRh-eO@1aYl7Fsa3Be vW-Y~^J%&i_@T_+PJ+_0IT{j`KN5gD-v0ivmj5%7e#q z&;2L4zIbw8v8f*RF9o^;C5=W#w$}4$>XZ|ZNgq5=4yLhOe{<7E@l#+Wr)}QX(job! zu}3*R_l2YTo{oiM5{=`}ApTj^sBbnaKD<#>wti9eY5>VaW3ED3l$i;Hfhi!oab5;) zgNJBrg1g!?5iPDWcV`>njxz}Uo&0}*KMPcvp93&?n+yH3FO42&*hZQS^C|!gNUHX` z8?CvV8<|{WHCh7~iBIEtOB!&%=VCKb_J{#9>{IQk$G!yr*pb#DFo(~iENelhSvf`h zJoP$7y`X@ATg|{=%?a AEy_M8ulMGi*$)dTCqZ3h-Sp>+b5c|@8PcoPe43hyLz*Ka=!CS zZq<)(K1gV<7j!71N%OfDaC!qEPDxi>o{+UNW!}|{G%&yd;ow@WEe)p6kjSI-EI5?4 zPM@>|_cxt!WkhR6yAh+Kgi_6fA|b~;!o!h(>3v0a2LttjZ9%Y`!nF#IQwAtf$*zYZ z9F@0GYPbKpMpB$qFprWE1I*RP;rIwu1#w!)#o^HC rp@BD1#}$dkrUEzb z#XeZ4pwOvMa-&e_ce(3YxZ7kC)^QcdjGyKL!sMeQL4V_x^cM~6!~xCxbqsbSIx=V@ zn_|~J?3aO`#Ib9cw6fW_jQkUq(hS#0wB~FqUj>?=4_w5G(CU%+zSCl-m>%zLW%7L| zt>uu0c|6V7nOs5S8Hm5Yw9{(xtVG*6dEaw;F*?pyTF%I(s?nB)3^lF5PrSHlBn5wV zXlzNs*=023BecA426C+q`3%pdR}FS>)U7}lGR+GyKGe+=a3 01c&QN2R?^CxhhoRZ4 z^|&4nK-Y`K)cX!>PX024)Frho<5a-NgIx8(-}prgt3T$~s5qbuy$gjcThZvNoC%`Q zFrxpGGBxE&mgMNdsu@d 08J*Z0y)iHg+z {PH%#Fzc(ML$Vh`PQvnIv3311B zbCxe8nyLhIfCSltqeJe&8JLk2ljG}#pp r|PyY=!=_d!{KR^@-x6L<8 zLs=m#lk!%D#N5Cl`uauY0XmIj?q|ruj<$8>-{hQ#A;I&I6?!BIZGQo^P&+5xGP$i@ z4JSKO{L65K4!4QsnX{7o0;F8xxOx=72%5qm#7W&ntR$9=Y$+*G$Q!%^%KBtSol8|f z^`eFOfv@{&)-@-oGx9d?F}1Yrsc*>4U2A#NswM&l=UW%}DSgyHSD7W?d!^ye9(h{( zviAKXRgAS?a~!wFj7{RC=gSiGhVkpR-BSgRHo{wmFx3wiKVK~4W1=-u26m4HCR~u@ zX_~GTHqYgLWW)rBv}v~j!EMAzXC!4^yn#78{qc!8aYXWkF2j0@N1+)R_Vq{8Q*T9@ z3z9}J3-J&vi=js}7EBV|>FG%(yD9>9#>*DtsG9N4rb6^UKN>&mkxdO% EI#AxkADEA*oemw35#Zkc76!`1 zBONUtlZ;p6g)!nA+ZOEObGu-I6$}X-9VH|7BuQ@+`+3&f1~+cb;YZsP8$_QP
m%C=v!)5mso_Hi80Vt*rxG<^BkA=U=ZC^*6YaH?iZZGuVE!;OFnFbLLJrjcE09 z9nH+0ErIKbgter#zE-A>{b_#buT;D`%WSeXpC?|aOMi*R=xcs+tGzh-m2PaF1g{kz zSNCJ%vd!*i&&W#!u>go*mwc|VTwy>(u7RM =tLn966;{uM#p0C7*>M#~*UrxjH51WTUiICem$ AISi=N46$+u2a{e;?JyFeZ$H6>cM@&UJ zy=PumZ9Zxg+1l#$#!%4Vx*P0ovk3oDB0#F*HLwIznX|OTy)XY0*`a3I_?aA)T3r-# z816+<`!&-7k=@L6OS5IH9yw6Fg!I1H+%yzS>5MV1D7>2g?sBbi>&PaHmg5ZovZ>kF z4Go#TWjI~qkiqpp7orhyo7pu^o+Q;*{ZQh a!EPU`*{Beft78;lt%w|b~n zqTDwN37(l<4M$kw eL829zI6k_?@Cb4WoQ$s z{=Xy6|KI;9Uc~wN+qSz-ks8x{iiC5GrYw3upD?xZAYQ*3BSQso;aL+#N-+%ehAu`- zjY=9fKSw@wv_-n$hEa$ZFK7)HRLi YGneEA+yrHB#Bl z$!Nujr^W8O`PvgEJjx$3C7kf{$}CZ?vPlH~j?yk7U>Zy7bN=%VlyPPJ$+}J8NOPHg zCj2duN?XZH+qR6EV?p`mOwX2|$ka%)wtLv;kPP!?Vy~x^J;mFGht`&%(+x{kxE~?s z?9c6I=*T9$+Tw7{@s{z!_ZJ$+N+-^4U4rbs>Ham?J{DKl!^;hDqMqXSSK~?OQ~jX> zUea7@Y^t?2!+KyEBYpX%qVNv2Y~g5T7SYaH5mj>+!7Zlm!SEcV=x}hscOTNJ=r{u{ zOHC&_D3#6MB^;_^0;gr2KZ%|NOb*F~oitY}c6D#)`%D*%r?nd=gBRjmN&UU7Acmpi z6F)dcB;0=I)$~LE0iJh)kFs^*%*$p?sZB+lTiDyei;3`E8mo#^1jdwaoeBLr?V_E< zN%NKJ6(NRVwf?fAY`M?cxjH{P^Vr9XqFZW*K&1QDOl3=9u2q9xZ6>q^`{j{1EJd61 z>;6cU6ku NMrFEF0-*PQD z<+CcyArP4qm^a=$JHkGGku}# uc5 zRQ@x=l@u&!TQ7vsTV0ie2{SbzWB{#!K;W%3@$$H*r?|LJQF-Nf9iBm1{ZF=XmY0}m zBIe9fIC~_Un*H&iFM)IqUGI!89*g`q-^yxzM<%o~ei!?QDl~UV^6v6aIpdBZKC_e^ zy>oEZTr=PA(AG1?^MazsJlH~cNxj|ByTit ^fY1 z@!hM6-HWm(Er8P$o+RTk`FMW0H&6M6QWW)b6=vg9<0(C)XIff|+FqUkN4^s{oTY2q zxbF`PVG1rqugYECQIDC>DCsi9C5ECsZPb^DrSeWqO*I$s;X EGoo)Yrrj zt||KzNLTmS l_W~XV>WeS=<=q(xG$o_!EOly$lE QzJUPN)M$7mF60dd5g4KDI zAIWjfohtvRyHuvVXY?A+5eoRM#e8U!+f}?XU4rCZk9S0o15aX1zW1X0fXS{S-fM8! z>~QHT?Y-R9=VJj9O; ^k)& cH#j~wJo4%iurpWI_LInLEf^coiMVKwm( z1lk#vpwP*~9>dhrs4(Z`Cs`dU@v}FzC`eN@v(B}=CF4Uvgrmmd$E?8z4264vKqjeA z)xJJ6+Wc7xsz~Pny 9C1j4KEGZc;p5#_lsD0jeZ1Y z-n2oz#$wt}zhBB}Vzr++rVfE;RFyz{3hE?5UjBx)si2mdbT@B(Ho4LT4cHXa%D_*# zTW1S7RCql+3|{R2@U`yloA8f{43inJonZmii#1C9qq=r%b#Y8FySAwgAJraPl`DfU zOkX?5j)}5S!N>RwDh{UD0b^(iK8irClmy73m>j|Te)!}XaXu4CvlvJHgpnMQZ*eU{ zWZ)k_pKS=HyjNz(V`eYLHFbWtJo5e~MgqBwMc*ShSv|Q}dQEQqJ?Wg!YQu(22ReQ~ z$X_U&J4Dt^FrFV6AMdAQV(ydt50I(V&{A4ef8c9^d2x-O?!nt=*7o74L##yE;9v(d zVQvaeIw>WXJ1GcY**y;!KZ e*H!g;H!ShT}3H``k=hM5rEl*x{&( ztYk;{XfwHNPu^u!dy*b4Ytf_SGlhT8Mxf*L_z=(!o1~Ul9h7u-?%`_1aKOvWE=tw$ zYG+c0%#P0CJW+QpC1M-K90&9bPNl2Z!zgqUBvB!=1TvX8pxMMerh0Yff|aw1k8*hk zw6RmRXVA F}7>wQ}dar}%buel$dP(#ay~SX3qW3O-+sFOxeH`zH=TCT!b+2_@ z=XvME>B8}xNZ<_sC0vZ;0Cr<#XmjVoQVH=dijiRq9hyps;)}yhoib6^nXTRKFa~z_ zwfss~@z$>a_87A!2J@nE+`Tyg9+4GCky =GGHw$;mA$N3*&IP9n*maL(5KY6F=25GmR^r7Ez=0)mFlC$J%+27 znnT{3WeHW1j_qQ#3VQpo5lo!#m|y)R%rDfnB+X9etaNsI0-ctV+B1wobe8a2Vp`0K zZN=tOndr1u0bQThQs<1#ZlRzrbv_6GDs`G(aJ(Q6H7tTRFr6u@V~!_XRQqkA79CVP zPu+-~(!$RRFUr-oT`w5b(_a)pZsv){#4d;hw!?p*jGRmwKlN5xW6R|T=lF^%S3vQ% zYQGK#?&O`7P>%un VfTGfy4Zh|x&~QShir)fGg!yzl zKrwKGR27K=S+_!4xHy@Z7$=hRYi=C=ZZ+2|gCg)|8Xrf2=DM)6<;#67p?V>_=^jZc z{uiHt-25}?+Z-Oi(;+EoWrUL?@%jSrW5JKaJgsQtm#nh?g|jCV-GQcO8x1&8L6kAb zro%#VTb=^kCx8#%iP7b!!hTsCi;j^Y>^@*_Gc>fBe_xj_#%%DeaENmxJ`%=ts@GmZ z?^w_uG0r0B?|}0**Dp=ttxRt%rz+wsxT~gtAUDwhu|w9a1KM!dA6%WOC~i<_(iCc) z+q64V(p&Lnur_1z)opmX-3kzNHnEy=s2Q{5EHcT_16Y1%yOpQ+)mX;`6roM3*oJ2G zdNF=954{I!M6%LIpO;^97BO!vWHyTHbyQ4e57g86dg&}5&OaAE7$9y;MSm`?YG4__ z+s#b;yq~3u=09D5mZ`TYl2u=^A^tQR71bg}n1|m++Y8^@P|Fa|#~X^Am2L&!+Wr)0 zEU>fp0`(toSk`a@OGWuYy7oD}!*YHjcLI+shHx `LBSg}GRW z8a1mlwoeUby8fx|#kNJ@h+LLM={sDOD0@^y*bj=M@P-5)rl@7>O$zTjW+BEj>d<36 zl*)OTY*EN>19d#JVv&MVswiLC)#Bx z$Y~1UTyEs^i>DpxClIOPjxVQ?UYsX&%9&Cfo#}5`MP_?wd*AFCu#_lSLmD^A lOB`7DUCCprQOE%170wfK>sN{)=u1M zYtp}(&B%Dq7IVOf3!;H^^XQNf^8fYGHaoUle~}bIrWe}AAMlk{wph9|yHeog5|s}# zL#H7HNH@NHPbtJLMv@A2IJJ;Y0Y=jTgOibWM5cJMG)nfVH1YTVobQ_A6>zKRzY15m z;=4L#MnCr7rMP>{{sL;dss9 A^yV$$ekh zcUoz;L)*c$24q~cv@YsbIV7#=oF*3PrY5WJY#Z~K5%od;rN`*{5aWh!qvdj?56)5Q z*{_q`sStRqlWa7ol kXx7S&DW4y#ER(QBXMU3dP!O7ql z);!$jJXgHQsnj8JrLVF3)SgvgDc9P^SVaLHkUY~25*3yMfPHB~f9`i|bTURG7&Tt* zx0|+twdxFFUaYSNaChd~J?2m{#xX#UxJv#W w(HB6I$Tva8i- z%lL?Qb=h)IMi!Mk?ju)?SwB*0l-MTi3G)gL_t7sGOU@5_-E)?o&Zj`T&Qfm-)Y)-Y znEhK5?1eJ@jKGsrG4mnpukb|tu%{7`a5RN*8 IB
8_XeYm8$uOKOG6HSat8=BNqaK$MmaRKdgD2?lsjnZCvYOBVX285_r# z?Q`Z?q&G7u?2hahZ%PNhvbUMFlXJWt0mdY5iyZEcJQc1J>K50+T4Ak >~+2^k_?57_#$cXDAW zD$l8lL(CN#{>9~hOO7agwF9DAO6_SiH;2wIYI1$UhoH4+TU7O%mALn>`bx7ru-RnB zITG;W-48Pqi`^};Tdr(%t8aTe%s2Vqs$m>`tUduHo1w*F?(b+ewD0r@-njf&gb1TR zV)FP*VYZCUQ{_Rm&wmYEAcV-fKl4)%Ff?Rii=f9OT(E(tJU#Uk7o8Z3?srhYA3_C7 zkv=Pvzm0*qGuQrH prAM6n}+diJ2&T4c` z+3T$`w`elwIFk33>JB4u8~4MZ%hAKV8h9^x02uSDuT9jEP08ua&CRh#MQBc4SKxeE zQp(@a?TPa;An&AC%Xx+@fWxtHceC+lAIUah>5T)KcYAa1O3hb1uK!91k|SRfx~Ujk z97Z$hl~he+##`C?#l!M3U3udziiVN}1M4%>ZCWH(D>nh%K%8&|6<=e;-Fi&?TPSVv zeJq0lfI?YJLHv_PuQjrt$dX5$%DM1dAMRNjHgisvO V9XzGrzbSFBa*2h1`mMjN~ zXQ <-eEE@@$D)3Z@j$2Q~9~aE|?U?wkFA6 z6T60tB@Xl{OV@^CUb;bN<=tgte}*C1@vulnVSfW~p?%H!Tk_31ZkhG!V}|Oc_zp)B z)E0}^hj)Y{$8T-NxZnR7Z*D? yMr=-LJn21w$^(c-l zA4zidu1C#?V_iS>pSW$M-Ol2D;pSw8MDBeGb=S6IkiJdH^ftID?WN&E2FA@c>6wAS z%yo}fb2u^y_(7tUxt?s`{;giyKl`EZydaAD5e~E$|F8^VK`?AO)f2(4L zv3e9N!#0dlAK4J1UW??WT|OnpjefdA$b3x05qtf4mK?QKRa9x1PzLl}mTRjq(~vSj ziME&pvWB|mm+w458um-zRB9RAzF#&%1MW!M0VW6TK?KVV5gDc2diOAaoNt3Qa4^ou z`!r%CKmnl1EFpbTZS5`=ZmmE ;jRBYRh z6itu1>5r#8ijDHd`Poj3Q`uh2 <#p+xJ>}{Xk%mykcZnw@KQw;VK8igC{!S zwWPZ_9fXg$aIwl#896>iZEX44w&$!*J$h-&IC3&2Og8~?C-o!0n#w+h+mk%--QKR= z{x>P>7uxVoK&(951VT~w-D9u `nGM-I{{*{^kvA& zi!CFFzuN{K9uV?0kXHZ0O?6cJRhC*Kex@IPZQ|Bv5GVgzteVbfp+T_8b#3pJMB(|{ zAMM5)YG3GcYUo+ zrX@3B9SV6IV0+3KoNT_Om-N8#=-De^lQXR$0;WAYq&`{Z{qL6wK(XM fiXflOO5f_R*!GHRB+-w-!Nf|lV_x>SQZicRWoj?_wvznAv6qR0pt#^Zx`u5?x zk|nbw7_30|h`Liad{zB!ZJfZ?UIDOURdc{lTvJqz^Gf-gdVl*<`nD-IG1DinhE&e2 zVUKxr;7lb#K95*M%7|c~oI^7As_-8vd~HFh5TAWHkqC9wejC8 9{0Ck}nEsB}tNYmA(nv!?P$TY+Zl4y(onuLm~Z zYN&X=aedcHXW%Dm?~r2W^juXQ2ZswSISV<*5#O_(-ko`~-a>ru9>=+rs6(YLGH>OY zM4FgRO`+uT+STBKHno9wqZbUCW%yo280DsmuD&bu;N 7a`4%df6)nZ~7BTM`f)`Ac%)Mk? zI0b_{>g{pDqmUM*uk)?h%L2&}=Gk$t1N UPW6TlR!&mqx;7 zH}7s{(hqS1tyN=6{xASzMz{WLS@suo&;(KjuG)OBlKiXk8ey49_`QnVNKM=OTD)|Y ze0V2HG1ouwapAM(0c{s<@@g0j>^Y{7KO^06W@}z#AqbgH3vW`0&LGCQ*8*+*lu0dC_BEQ=6YCN=h1+FXV6m^Tv2$09f`=+a zAM8u~$3Jv55jK@%PUS7de=(W_geuxBPz)${FXC_Dj0lEy;u>z}cR-PXkS}A-fCg*T zTOSK}FC3qx?h62dJOhGwFe=3aoR&a%?fVj^F|frL8ZkCEBNM%sA2tq_OFsm31pj+4 z?vCHyg2jyWn~*ZWgYKE&Wk;$0vl3^rr(QL(k|RO>ywAAudg>=igU7#O0;s~6Bmss6 z=6Aw5wxn9rOEH_W#-LZMYUdhz9UmEaT^p7;jT0Ql9d(EcW=J+}ruWtT6rkqnKyVMD z*u eQ3V>UE-( zEQKVXFYbq>D&zN(BXIHtXKIT7Ro&!3eBXM7b9xz6m0HGmS`)V2_xa!cV|#3tj4fhw zi$Hw-d7=Ax(ri9ca)*2Ac 58i z3?4 }H4Mip4Q5p%SyNn;tK!mjbIuIehs5=z_QhnX=QVf3V)-89q6zTR`w&Ry z1{V}_CXD`2OT$i?v20KcL-9Y18<|2lnn)=l>LtjjQfO478_(qOqP(gn@U5vw4386j zm2y*RYnaHwrgdGSk~#Iv(4pS|Cu!9M&V`g3RqTL5SH^q$Uk4 hx>|2hNS{a3rnSWN-;;m?KFg=uhPBdm^4J3DX96qlIF z!x`}W=pBRIk`!Lr)?n;Zqqyc-d#y M zio%^#Xy0dg#aKm_X?wMK{S=VFV8xW|OsxR-o6tr{#NJm^P>u+sWq29CQBPjC 1P57AOU=e2|L?~dL5YEzXzBsK@-lhI( z wM8s8qWB2(x7bkMrlrXsC${3>ajNmKrahn`(SDt&klX8U5=# zJW`ag7b_&M4uuFc>-46T4ptnJmM4xb`XuPovNXH6n9I%!VYz?u0}8e7<>|!TD?rf^ z)grevN~ut4Lmlu{fRv}km0v^M(|kD8VD>$Wu#fZEPr5kgHwJ0HV&Z-`zl22DEs;pt zlv}1z9VI7M9EG-a_I~zyL2I}aXxX2W$&TXNB?A@gk3ch1LL2wND8tJ#H3u`(F}X-! z$kvkF>&J>)I-`wX%8!3bDT8V1%;vn{pBR1d+Id_*PRouUniqe?1QXxQ``29+IQ=+_ z`PSdH4J+HJA3ViaFNtF*hos*q=h=41wES4>P7M3f|4(Eihg+DE-H{UpD_c_oQlQ1d zTuIsFEc8v-!iMKHC<6b(KzD24c2u~hRd_9V2*{LFvl+;#ajvhE{)a&}nb2LTER^Me z7M*qa-aC;J_VOr<=$usV(j5CjufU{<`tv~ZAX7nqTS5K4*6SX{)0j{pAseu9%2+?z z^#D8f&VPyeXO3}Lul2m;sL9D4lDU5PMl$?kI5qm0s=OsZqms$(j7DFOtt8!k2|De! z{GX$(cQ%fC-+-jouoe2BwDQqm-nNHsd}6yHz3f!hsvu+H@9HFpBE+i$QUn>N75s(X zS%n@W)}k7qUzumTDE{QsQb{VEXDnOl#utEQ aPc;De3%;fkix2&}izXm3M-j%k-89|Nw>i2_yl*W2Nx>IWCB7z} zO@ZaiWl%OX?~vru#_J?~$Rvy`U{&I)OnShPf^(mGX)IiHw^P>Zf>od%awisK~nw z(D;^_r*5~bQ*pV6+FamGY>>Nei&oy2Y*^;T(c`N#m3RiPY86sM9h_YEXjrA2yU?>X z7xKwa6lvRcuotD3I!_m(Gz&Udp`#-%v_81B9=aY)NUqu$Tv-P37z c|7D-3(&0| zpr^sq$VVdXs=Tk+S-no%K7T~UbuGd-wT5H=_J 7=Cm$2H9Sv)912V+E@%1m=7v{{ZS$V>PBpF0mX{nc7e^jai?pjr2d?gI2>7y= z`aIy0Mvw?Bm;BmL>%v2Wgskp75JM0V(w{zwH`+Mgorm*}c!0zWewFagjT6rdPT*4& zAUER!p-7i~RR G@z{$nWWka6*S*`SmMmzC{qW2y4LESfnDXBy68 zhMtiib3A)LI`Bf?1gEhd*t9~3o^vfxWD6rX=xTRtpFjatmi5X}NgBw1FTW!dW($=% z_28~O2#i+kYWCk;S}X%zd&=ciIa;vKzm{II$&tv^;gjAsxe*iEXxjmizdEQYD|aZ{ zF5Y6gnZ?t&RI{edi!@Uli!GO`U97ZvzgWCz&3H)iaYI7Fo<40AxyZbP_HH#$@y6uM z!w+;nSci U&3X($0Pqy+DnOT+Dvh&9Xm+7+~Wov}pJ`~NrFl~Fx z>S2Zo&AYys(WYtJ!zIU2=}iaLY4nW4KMX3X-oME%^JdzHT^tswU0qVn3?~E_YTb9* zl;$w@#JrAl_7u)y>>9wJ*MmE>>LI5bIBo^m?dQ+kOsN=_xeIEH5_yn{uHw43htX~u zTiUcS6MCG&ULrL7aK~q=(07aDBB!O vhJ=k-Li&ds0od&GFuS>=;b zh+U!Nl>ESXa`gg|?7IB#_X-rw@KWVQ8HMt}^v4z!s46r;V1D}chY?{{>hj>Amo)8= zyqeB{2h^0E&ZBli;KCc<(bLoC;r(js&_RU?Ij>Z|el234nBdm `2QdNE6N# zOk_rz5|X$U`s!C9H@?C!r1!__I7Htz=WmQP2(Q0W;TlrKnz=- 6F^-;2Y5$K@Q7wG8g2iKrjzZE{-p&eE|H}Q&IKS4_79M z@c3z11zd!-48#Wc7(SA^&h-FYqsJHDvw(1K;Xjv*4o$R&jKhej7K5jk*DlUV4tIdN zKF1uY(}({MOS;q$&0Fs7L~awKX`(DZ=zM#XcwP2&2RO-pgY l%OCx|yeO-4a zFV#_NZMMON`vt_|UXZr66DMvyv{48*@OjDMr*EU$ zG1gP)&D+n~fm>zA`mu$Ou7QwH>#Bk0H?GC-Vyx8CtHuX2!5WCO8R6U9AWO2VZFF6q z@Rw`JulK|b?72VIa)x3?XLp;}9rL_ob#{mB7{o|-#~F9^KJaQOlJLe$AC39wzWxuR z>)y4^*gO5hTb?D?S=UJ8v{RLySI(|UkME)St&3DkYwtgvbz~gVQ6~rGnDDDdvlf2E z`@g=og7W76b;_3R7s=TnxJN@v3CvcOr!~1`0?;QF)M#5<5x4KKm9hIJeZH9_R?63W zlP;;qnxYgr`_IUI>;7el%#;MI;ZCcQdBfjp&cxN+OBTaVc%Dm6R5I*XON<)u7wDE4 zgoj~N=O=Xf;$-C~XS1gVDb2cS#qu~p_(d+nPY}H5NJdb+&K~eXPoJ3Td4591fE3&i zp*0^geOSKY;a?~xUC`U^-@ZrO(!eEfy*~2vq&z(ATBjm>TGi?an;xQ21rCwkOWUC- zz;Q3TrY5;w93DdoK&D!MN=~YJDE1TCG_DMGx|)l|tj6yL%gz&ygsYyzNU@zWr}#R( zH>(3-2Ult{6I*r}p3L?CEKr5(pcSrZFYW!OUyI=~PU2(TRHMO1Ve0k$t>oEZ$5;H% ztA3sTavfDb)knU5wd7}EO~yQ`3CzHuj*z>o9%C{OwR1hz(u^P?`CJ@tSiWP^HZp6X z-MF;%k$62vgJFWny^@x^2QU^37Ys|-yzp1NoXiHu9HF?D!<^detqIPxRj>qG9Az@A zY8co7Cz1krrAPQc*&-ZFJP?0K>{RLJ$OVHgmj3o-s~NP~yAco-DgihE!;f@0Fnv16 z1V%axpB$($m1JhIJ}-t{r4e#0fe$$=e*GQEz2GWHqL;95%J1niGo4b2PsW9(!PO32 z #8V* zD-_-_GK_XeX;VaRlpJqzR$(n FJo^Yot0RFf7+msNbNr zGcpe6`b!{cuPV^Ews*yZ-f*HYULfSjBNfUmr=?+!`E*Ll1phGuC$l0ZPG!B;dQ!-E z?D?sc>{IYL0TlXXOPe3)g#`DLWK-o&1zU#o*r3}6IxF=bUeooy=B-#e4)e8E**!`g z8<5mFNI0hX3UTE5QWlV9`yKbJT%qjZ_1sjdX;m^-Tu2KB$5nT#05_$FQ<^~x=Rj${ zbIZbz7AO(t>oO>Z(_y#^N~^kMrbKM^x3*n*%?UP>G;u#U>zIr7!_`VT*+FR1__LAD zn$XUo6#YbFfTmpJN|yi1ZF*c9K8Qv{E6T9s<$N*{iWB8}=+&W!331Wv?iubTwwJbR zV3Q*@OwMqAo0b>fxh|m_4N5g~epN^ZnnK+XX#S&o@~XG}4YDU-+67NSP{^2G#m=Gr zW!w6U1pSxW0dA_<9#{EpT7QhDTL}dAS$%|a-pk;cLD9+p7V!svd$o1RZ_|{W^a^MU zzKE;Ck3x@v6pR0IF1neo>YeL~>r#*8Ws`Zt-##GrjwE6YUBqJHIC*#McvP;&BQGJl z$uo62KY&enqF&&5YICl!f}t|r45@_;F80mLW<66t3FI`(f-9-%7yfI6%a7pFAU}c1 z8D(Ck_YS=8`R>iJ;E6!Dk&(Fq_7-=AMJF6!mTTqNe;C2_f0`Yvo6fWFHg8YwDSc6u zUWR{c=83K;q*28C#u!-nh}s2>!$VW3I?FX>wejVdL^5mQ)-Wd`S%@2*iwEkI%h7ku zQE$siLMVobvlc5P*tKn_z7~QwiA7UILX7M8z wjx6@0GfYcQV+=AbeiUQ8l2~kcR@*ITU nL?$f0IRx zmqZ)j+&8GI-^xbGn AH4RD^;on8dj@{FoegySps zmg|zkL##0T%uGnq;y3K@1&n}<-A_jpM!7L8E5(>~O3dsTr9H!{TC_|Upxk3P5S8{_ zWV2|XdPlFdIM*Ul{Vu|!v$MOEa|;l}G3&K4R;+doD#zC)B76A &l+Lf z>N4-^_UGf%NoSC0X83+D3i)7sJemDJpb$n_1}-F!Li}6tNZirNOX7#b>wj96_MVqa zi@!E+0~G9^mckSyW{1pAWfEV8hS5JJK=KC;JVV&;@^a`$I?Y&EKOPhg%WN&MI~}X* z{54Y7!0{RR@gGK#3z8|%H|NJqsYC#PcB7nAQ|a$}o zWgjA|wS`kgLY9{mu!Aq8J3(E4#^3+0vULBBXZ*#nE)f3)PlJEEIF(B_`_%~xobQt5 zjlgoDdpNqe+_T>%r+wv~MqvkJY z1lCG?YT)s?`0MpS%Bn;78uT0f`j(e<%6a*&&payA*W~x?05IZ;9i=oF51UJO$>TJJ zt0msGFS%6Q%w-GfY|R<)??DF@9%;A2f1YY6FJ9LYy@K6a!BsUBh&Dcrq*FQ>zw-QJ zXU(>!`+G)FU0uzJ1d8;Y-Sg)|i#4RMm69~4dC>?#AZ15G(554Tf+o>WYKufupMlg2 z!uIRyc!$DC%nf&!{xG5e*f21CK|rt4mIh s^4q~CRKajMZ{L^31!u2~E&ULMdpbLB zyf23uUMZfikExAg#FrQ!a2L6diM%DakJ;6p)&Mv`l}N+nqnbFOktiVxp83fm>F z4Awah)l^!mIpal)l Gv$M&Rj2CBZup-PA7q zqh#FIT1$s`BmymDn}pSKzN;%0C+cgOr>~rTbQ=d{p5gc$n`;YKidt0c_yDIa@kE1) zFF7+9pw(wf5+ukzH#c&)XKZ4SZOwUETUb2_x}`B0rQ=qg7Y?Ak4a)IsGR{|a2gFz^ zG>V>6{~T`fcHH*pXz8=f>dnTV&k6e((dfQ7gkZ0E>w}jgq>wM)0%bx#XEab@?0GUE z$=tU0$FEu0o`I=P>_7Sohc;i0t FctW_}IBsz}HU3=Tra;B7 z#||@t{FUk}ZuwR@;`B*{-U|fOxr%TNcWEW(i(8aaZr3Zwlj d+mYQs8{hNv28!|BW{mO5yWKtiSCslM9vu%{s`W3DGt!_()T^$LN zywT z2sUD$L4|-awkPDWOJMabYZtOK(gQti)M~hT0_2&yu2uFVVgIH?QP{(xpo1s2aIGg+ zI2g2(?)Q#P+q5-Z`Oh&vf=l`n3;LaWnhqH(j~|&G0G?{rc}V#;s1c!P9@n!qzsU5h zFrW~*y!-vciBrt3x#g?w*AkiAT#paNA4(4JGIPj$MS~}lnF82g_GntP DG`;(KFcah=%}Y7g6{^;5h`|W>Vp%}*L*R Y7W61kd64wF!e1NhVYj9x}#BJ2XLVXv1m|;{EllCWDx&telS^ta^)bZl*!~K z@BP6N5gT?nCE8;>A4^q}p;~@(OFCXI4NzNAoxtmt-He=cDeJr9Abi_7>Qbo&=j0~> zK-pEcYw(FKO14UtTCNorzy@rZTH{|yS1OoF%nH)(ov%hyuStV>#9QWRTK(G`lh}x} zRP%|_Unmk9oj0(x%$^_B1vK`@9v)cYIS>z=seMv>Q&rgqQ3Dt&YKYHeok!VEN}NF# zO0nj?Q}S!>RrFn3ux73J#?a$E|%(#Su;c5{~Bw3j-TKJJm>tSNbI&2`$$rI zi1|x?-{G*?t9@>kWmY06PRyI&S3=?3o3GW&M-v=wEEIze`*CL+m(^8|{kBx;Q5)5y zAGHir4 e>53k|r2hBcr|N0p6r5n2>s?TeNN69u8R1K*2%j52rMQ<{Uf3o+Y0)ylH* zeW%rr5eJ^0S+2TsjL>?tBh4^fgs2_*W(W>B)2YxQH6boO9Ggl^*+KVxOvi^67Z 40Y5Gxxo6B_gVO z+0O?~_nf)TdfFJ{?h$nHIZ=vBw^TKBHobxfpu3@Cx%)eY!hO!jXlck*tt&m7?hVA` zKMXwE<(ob`NaxhJgX&nLibU(M%vnDhAv3#%9jMM oG)!3qFgB%>m+An} z+~cud7A4uORQwQNT;7mt%aM^ztmyd~&6L|v%LNDblx^mQF}|xx+qdrCU|e34_qc}U zl&Px&c1vz#dW|m|hV+&JoO8opRbxC}6Pl@Nj!Nlu!>rICikGTv&k-}lKKPpt6|{Zy zVXTR0-?LEz2=Bot0?v=EKhn^Mg)N6J3MCbX-K y(^+#J9biNVu2m z`6T2O RJ6I)6M>L_=PyEZ>GnzTS5}{19D%lW(TAK?;f=3EDGi|Vr z#E8Jr5yseHBan&;OD~4cHi9fX4&1!&=jiZ5x@jCnnFzytWd~}pBxP{o660IH$8+ga z$Wt4go7bCKoQEa2$WEj}Z0V18)_nqA8<8rFk7e)o9Y{dWX8T}k8smpt3_iBTuoYUWeUMqyU_tIvg?0^ zP3*42E&qJ=OxsM$jh0t52j2;P2dU7%fzIQ=T?p;|7eXSeqg2?CDso9803W&b I!==@CJ9(5a;iAv~Se*Y! zy?(}(7fEmFHBRF&0T7v(&K*>nMJ zsBQ2!PpUuXxYxj%@FP!3aG PIbzuG??0~&zN!z_Cw5kj|NOy!8VtoNr86lh59Z6yVoU4 zD{XCawI#DfhDe?F $Cz12sf8? zBmLXH5fciMP}eXBRN}HftByYTD)ZcmHh=nyKJZ0dIOn~pYIMEmO1j~`8jXTOqj}-G z`FrKGe4gN8my$ (aJ0sKC)K6S+ z(HTJV WF*bchjWPMOD7Nd*^(e+ci$o5i8j#&CT@g#a2Y%(+wwcNj^3JBp zDb|L1Q5>Q`Q(UYvMyx%Kd-||%Ryp}m%}BM$Zjkd?1l}90?-vpZPI3ure=De~|Fu01 ze6M;ri6}>@Sza-8a925c@hnOI7#XJ~%iiYS($arh1!%NKuqxvcG?!vvVP%{k#3IEp zTNg ZTg!W$BuV?Y}Y^%?gKu&lIPRS+%qV()Lib6^gB{MI2FWKT}6J z^y2C2iJ0i~zdDe~s(xi%1$C4Ucyx$THOl&`EC=VO#LgfJZ^XlAmO4~;@mbx72DJ4Y zmb44#_*ZH{Q^Qp~#*n4x1IobjfTTZ08(gyODcZF0YaWF&NafCt6_v5rj#fEU?9^QY zNeH|}%tcJrFfh0=S`jN!8u*jQw2Gznore44qy|TxQGfHgda--g=L@nW+Ejpj?#?R+ z-_)WDa^y?#A^0T*L?h|4>V7#;mYV56rRrY$T1g7nt;9OEk?wMFtEW1aGy1)(4^A2? zE$*LwOj#+EePxGG`ZKK2EIU_oG1|)Vc#4YaD3}P{xA_QX k8?T*%=a{I^EJRF2;2{k&egUi{N5IIVqDq)>D& zx3-bx#UdCyi2F>cyKq#=*Y%VMpmLOerC*_ut|on^$JTI6lsaOjGsuFX`4Ut>h4q|y zO5=A4(vHT#a@q(`ta4qtMV|J`k^Q;V4vQq|{2^r{S)1&eltmsg{jFd{sW5pqsOn+1 zBSgjQNM(#2IF)U0+)w=1JFjeCJ^fvU_PYb1w(yX !y7 zITDMFSt~yEL zgSz(EYslcw*lAadw~JT~ 5 zx0D6$4C>Trisw417FT}j*4^uj63$^5%+LICp;+`cmLj7j{fvFlQ;gkmfcW{n5VaRm zN%O6V7}O6H7Ewmmm8tB%voj;aRs+OLr=2aDz$-SdK$T7{K{Ku!YKJ^2G*pQxH`@1V zE_4wnYu**pY6Y~S44;iP=i6;122k*=KyiGi`$@G&^G4j2D%8RG2qB-)9q-j;nWRx$ zP(ha4*m9iY=t-ut-X?Jx42%P`MUDl=X*j}uV0P=FCxm=lcczd$BLFa!Aw+naCz029 z$z!XGX#_;lX$U}TY-DTIn8V`ZsB*Q8ta{{Bn1|Sa2}(3#R2t<89C)Ai *BoQSzKD)DN8M^&Y-go)OzvVGM(DmoFLrs 37eT)8OrF^@{WySH?!u8L%<~f_{?5!>kS6oC->4K$qogOp~AwHxZ(O+ zJ$C -a;t4TO5v7vKPXH}T^(wu@sp{A#zB%{4My)jSl-ob zYSV`rT+WpZagtMhecq)jX~jqW?y9Op6(<8Sb1ZX5tGly&=*thY_gXw~{tx3*V{3kn zP?Q(fi`-6B%}K}J2=tr8%cH7K;?%hMk;5tvVBMUY^_;e-<3mY78S)}6f}l?D$kxcG z&Z0#}3)!hDn9l>o2JQD!f}D+Uasf6v@|!A$S4K1#L-X(iZT19pJuKpdM zR<*pofd0c!;X}EKFtK|EwwHV5_#qb$Wp`bhmA>IWkz;^gQ%b)p-j# lEygBKvPjuw#~$tIuY}(9 zb5&2rGH-t@6Kar=BK+h%%d|F5=w!5~Sm0CGXjm`fX_Zba^n^9r2e^%&lzP>7Hl;eJ z+!5WkzHeOb{8eSJEl!wfhtgkpoAygRvvbT*A1 #f(mIat}a&*$h5-M6*af> zUtImu-q(~OY7S!m#6WJ>xBD@IU@qG|e!}&%pRI?QwG^ }{`vDI4;ydjuZ~+czqd4Y)Q(IILM9*n9z&_48ffxp5gDQE} zTkr!`@{FRIQ+sgd5Xa+n{V(Q3iVmM?-g%Tz g~p1>*W}J+WD^)>Ql=@R)!7mYLD^oKAfeWa-lLdZwCuO=@~6(6E6+ zHJnOI)tQbE&+K*cI*yelJa9f$ZZeCj1qCn-d6YgY#m@Za+9aHomXBmf(mU9$g 0MY7zcAcrTvby?o z^TsAyDo{Q9B2GKzn$PE|NO--tk|9*6y`sOuoV@wlW1=7v4NmFIyU?i6!GNv6+RrzZ zPtUVYXjhY(DN96Jq^cuwsxh&!Cfz7HAl?16WB+2ArRP&K4~p5ID->4IlOE@*`s&@{ zWa`1ZLhVj-!~N_~#GX+AuZ`}o-8Z6QIaT~dbk`7^n%3?y2 JG0IVoNct?JP3#_=$C> z@5{@(Aa!HNAMG#J$5$0y`nTHJF`~w*_98^uzO_BgHGyN3zd!|-DkQtJt%V~csL-t` z;Ku!4_d6vU;E*JE4^S&|DFuCHI81z&n)hkuc(V#&kuvr8T9Qg#w-ixXtT3OYR@dcb z+B$^$9iI>5S;6m}-tClm3gSE p??YJSF{7TDovWezP-oA=c$lX6CT+rhdaf4Y^z90PHF!HcHCk*8WxNQ1OEG3T zt;idaGs`qqxMnc3u~R8=Yb#JbEFH*{q#0ySM;ph(r7_a33AIhqWBN*Ft%;AuIrCQm z3{2i 723V@3B9Fl+%WiB?Q z-s+41#$^5vRc9I0RvWczN=qqF+=@ei; _;t?@j-rEseUzeSPwiZr0J z(J%l=3KJ;tyyOwmz-<%=OIa=!Ffz=U%Tz*HM6_69Zgm}zgpm3gFIPZqc<3tQ_PU0s zU(Q5hI#p{|Y!Ey#= 4PWg)% zML&nI!+wiEUri00RZpF*3En4lO_d_57=7DA+NW4QWcHT>O6uV*V~=U2>$`i|tO7xf zzK?sy)t2^}opn5H0Z`r*UEAF5TFHm6kastROu8a^AR9vC18T>lq&tM%(O>rtWcp{x zRb;?thHT`B6jxQ 9R(E zmpH7R$p4lo=(Ap=h8k}W_GCoKL!wK_fp=2arce#F$J_jtO|_PVyLR!yx{vgn`6t6q zt2&+Gufn^SUO|daw9K5eLWl7wccMH+%EczFV}jo}w~SIIdVX#%*Yq^Q0nyBeO2Pp zwfBpb@J}fe>>P@Tf9*Pls_|zsz;3lorOXj$+K11@o9YB#Y33g1+r}Pw5uVuk8WJkO z*EQ}n4JBP2YX6}fgOa`}s$FcQw4er%T6h%}NrY3StX{T-p)E-KtOk!}T+Nbg5t6_f zxh#Utpov?75LbBDSmIdlibXlC7CW7#<2D-j&Q*giuRre_nOUz&6`@}W*Y9K%{cW0} zt}-^XKz>W Avlz+m=0DcYINAe`sXI-B@21HD45EaC=D3Xqb&7IazW_NGg|T z);(=w8T4S;%HUI&mmXXFyH=aSoe#BF6zB2UeS3m#eQE5ze=;|ge47=*W{|hA;8qUN z;F2J!yLp@WwC-t7V+ta~9J&tktY< _l(x#|QDPBRnE^y>L#mBK&amP6~|C$1MS zLK3CtYEu%DN{_rqs)lM^1Vx9XhBi%1(~h^}^zX$SVZP}aJA#e$cAXTZr~K*7$JE6K5qBg?l&p(4|p3{gIO)((FD6TOI1Rt)_rVZ@H_2=5w&yJAgKHGqg2Zi zN3zZ&r!J3ki^3a}@^It#%kv7bVA%c;4In*@Y&MO#vAqD2FII6E1Np1k4y+@(e#e<^ zoQzDN$ESfX;rHu=t)Ifa;K5#bVXWK>P{{p>C>o=R`LT(OtvL8ODRe4Tr<&p5nMS3l zmDVbMqBTUC#vG%w%jkjfXNDng>oXp4K^WUwar&8dXkO=*XvH6m@?CsB=P4d9=^P5% zFmRXV^?Kykn3A*?Z&UA|wLQ20(1xq7kn5duq`Pv9EK6GyDk3jn3{Mb|2!ShcDBpG| z>Hh=KCwh2R!P`{Blo07H0%c<-kP*CBmU&vrv#3(@EU`)v?)!zga5488SnGSF{&@<5 z20%6-F~c$gDM_B2zS-yx8@EbJ50wz-YQsApWuMdGqp7_sEKr#2k19xylL_J>`$K_* zWpkrIb-*M4siMBz$#Pmcy0Vnid@@;Kmu#Yshv0dI$=q ttJZ4L_5J2o@Gk2F^1ibjnW6Hv#B_FdeF>pD?F zZeCsrJ!Pl|E1cwd-|LibbQ8Ougw~55pP%~XZio*~ Lq6mAX#Ixy0E=ibF$+1>Szx;bE=ofUaYpCU*`1J9 zL?ZV)l`X@&RhOyp6|}6`9DOF2 S^O02FsONOpKgZXgaS{l;z2AB! zwQu=V z5D>U(60 zhZG`FQii*jDR`|hmgBNK%Ph-neXzY{Usdw_o3JUD5in^SobAeQ&!@WYS~ZSjGB)6$ zv*cc_)>|k5@6MC%vChR=K?%VgoVaiH`!&=D+DT6&cYN_+aKGp* =jv@Y>&<~916uol8~e>6DJ z73*~?tGqoC)#M$! MqN^L{anpD$V`EVWV9Eh~LUBN3T5 x3tAx-HHs1-evIg2wbKk%qI>c+6pYH4)Ig(X>4wT(QQ=X8qS36ak)CN^jE5^E~L ze$41>QF9XPt4zy=#YIZ{G(x!ghmBicUml*TP-XtXVzRW!QyLM`ny9X6sMW#>nFk)W zpfKz_>-xpGzs&+k6UJhjlb4a9vk|i5)4Ke!gh#Qiwune=46%UBN}!{`i^IZ*d2Xj- zUWFBYbQcBys6MaN4n#V}B3OZQ)B)j$AZTXIHdUk$dyV1XLa9d0FDE{f*j6>snzn*t zWgWrQ^s{L@5SG@PjiRsqhX!#MeR$v4$}LDKBUz;^hDQ455Vvi^$Pi;z-~rnO;mS|u zr)8wyc!r}Zc=da%ncwp*eKwI-Xz zK>ykP$v_EaHq@Pj=|?Z zZyakDvDMJ{xxyncZHP2T$C>V|d-G4f?#2FxChuX?1;_WCD6J87gN`V$v&_}rEzd`9 z*Ni6U{NCSdK14_&d;?W4wuxU7Qb{S7UkE{3Joi9;K`niXCjXrD4}|8-l7@**iZ<>q z{@DxYurR-?vCx5!*E=6T Vt&zSrFzC%+;0*JVA*0HIQLyUZje<=3@`p5iJR!JW}9_1mS1IX z2sBpx!>0QCttf%0-*tB{)F!O-GL$2B&J{}eanXY!?V0=_DqAF}hMc-^eCYi;^@Q-# zFAtG6uP7cWY3-l$B-P@g*efr%@(P11Vgwey`wqCl8>(7h9aG=Jip|`I0L7UzH1P0$ zrm|ma58GS~0{X#gT&xWJ{`WN$S5-ECEq~nwxZ0wEn8x0{sl50Pl6hu1$A;cx`{mHmCjaX^s~h* z9|Bx9^N|X-Oo0L#LXCzVT%jzDT2Dz>=TjQx#}&ChMibilL T`Oe~}yqar( zhsqW+=4I831LUdzC)-lS!BCUd;r2aSG~%(!m5NOU6ub^ k8JReCp z4hrp)!mRf7=nOV0ksc Osgv>bMi#HiuD*-b+n3iFx{xGW^1;L0qye?{ zLGIp}v36FQ=-cWzLKq!KLvV_b*hwt)?>F?g8M`UbV{@(J>Dql&=>xFBWSnLKDj;U2 zuqB*M&m}9OP5gVOkoyzAvm?zfWfuCp#Og`PknBy;cG}5jn5pnJ9wfrZXISv27F|c zum`1i5U#WyxT4*nnLYF3)@fKx1_8Q*&(yYHG1A9E55^Yyh^b!xR&C}Qv6AXrw3bY} zg&2SFD9t-)yVV+Eh~}Fr3IrKTf-~{rFVH{uvUDItdOwRXr&y80C(y}lYFp>fg_3WT zc=*6b_@r _<}W^=NBg+oFpLwI-#*(i zqCcU9BDk=L3>$MX`PayuPLoOym}%7sm-nEDi;+Gxc&@>!--*4GZ!=_DoKP)2x1-@9 zHiy4=MT~-e?1NkAZ`#J&<|PNvPMDwN2MbYA?OgZXj&nN{{FBS`)H^_;!o>NrO3W0g zhv;sztjj0(R#M8{G?hqu9;$BNeMxf+$xD9sH!$qjwF9{}#L=bh#3R}3xn@l=(sFLC zE~gw |Xq1GZ1Uctt|$vVZ}AA ;KuL8AG8Hqc+EKsw`V+T_UcV{)tlPt}3D_8zOZd2z=rTlt?;a)0O~7e6k) zc5=>Z8h8BImof7z0OD@&hCxX@j2dNo(Jb_!&f%&;>8e*42D7ZpIW&Yc 5o8ZG #@O6?-eDkGohE(=m^M7I%Z=#%)%wV;Z)NIdmK zIhJ+1%LEf`rz`es-eBpvE4=X_#;*r`ZAJqO-fi%r*~;s!pnF|4CoXcPQ$aI=MLDHf z)wBSvR`w{ycpWl34t4{ba+`SM)#Vnq?By~a(7rw3uO)(?2)%>o15BlB^Fv$`^Ie6! zLC!cPOVlh+B46E1Y;Ou8kIez?^=Z%3&t^`T@H|epGQ$wx648t|b?P{>5nqJfot(ZR z2FKq0;MkKL=GhrY#aM{)z;8n3HOx2(=jXayTy|yD*8Y;O=(Mk{!k~&iQECl!IICaS z(6)BJ^IVlI&2EjcVj<7nZI2mGUw?K|Zx&h_2mOV4etJbxd>;a=fiTrSx^hjQ5T>?5 z+qHYu`xh8prJuCp|3fQP3$Qni*vC7h{2LJVNTjvMtj558Lh5=V=>N%Qb0) 19@`-4T#t$KskC`Z#v#>o58+_m5q^aF&RhEyi6VJ1r&}khGQhmefBo&K&uc z{zswiBfT4)aFU^HJ8jhq@0D?U{Fj$C6t-_% gOGFf|`*pzX9Hn)ByQwO5HE zvrYQ;`+G+r9ZiWSFI!$o&8?%@$EM~nLo7hBOUFMmZ^{eu<&V`lzhKsbEUIPND_+8a zvBf#|UP{u*zF429395#LyY_?dsWXEN!rXT(vZhpSk#}tZB qjbZok5_p6Z?{w{GUY@Ly$l4o#jMZW<&ivt`T#?(*-BWoqenu=^v=P@#8M z)omVYR226sB4)YzU)ga|t{$sF!aN(PxMf9$Z?4A+KeCpjuL#GKRidJnKq(xhe+c#< zEjvd+O$u81+LjBzjh BL%*e@v45V(8Hi#B zd4p8M6lZeXI|%3+xo+Iw ASqjG;U}lkk0dl8_ z7hJ`vm%SdR6~4pUoAVNKydEXU%olPJ)3B15t*}gl0#yBqSGeg?8>}-b%4>+D4-)f^ zaa<=NX32e%QDKg3c^^j_JaPB48+sQDpxspy5rNqd(`Lr$owo8|Oh#5^41V7A2OK7r z3~Z*PgnsRUBgu^-(`ya?Bc+gDK!VE6FLaorc}a*;(1VqUDx$-&<1_@$hOMb~o1>w$ zr>cu@e@w$P0JHywo|}VPJs9YdU(5 >!-QHhDI|^vY_l=7w(Pd) z I z+{9fAA0Kz9HtLeznL#e4#6x$yKmpeukYHVzxd3L*ikS)v&4(0w35&dio@9%ItzL7h z#egsmRt}7}Ionp^3Z=q%R;!L_x5g>1?Q-9+G5NXvY;>n;9J2)?gnhLUNbB*RmIW@u z7NT?N^!{D$r!z*R8(k1 QGi^Yr9_^-g3$1Mx| z_`A4FlN@(IQ!h^H`|81eKh^yv&h{{Rb6^{Y7Fnvs%iJ8qpV%ZF~|9+<89^Oc3+B z)$9PD`iPrSuY@S5m-1c?Pw7`bSoI3+d!TD@@c6$yz*|piu?K>Fj@?GJ2IM9gYRb({ zG=~t3%u>(eccXWE(5k0 ;shr)Z}Bvn4Vlt{hhs|aqN?8hqKwgP#inXyhya0-MeCA+HEKZF2D6+rVI105 zA4cX4T#BS^wJU|Z><%7${5oV-F%g$#DcX V-u_Rx)sBJS5rQqIZ8WNo+M;EMsVLfLS#PmaM vJ&deuGS&EGP;WA@-|SiR0H~6@ zz@fcK)9A+P>?j?XbX9DB($HX-#qN2E#S}R1((z1PUer}%_-71!#Kn3n_PhgX=Z_d| z9BGhp5Cy*ADms?fnDlvKGfJm^uC;)Mh%>X9lFH7<^OoRD#*moI4iLBQW+Bz9h2ZG- zHT ~+I>H@_!l zn-jS4RL3J-<@^^fud6a)UBj)O+NZY}Wrr8j_L&na*zee=gs&kOpBWt{Dh4^UeWDe; z{@$fRPoRc? HRAG(MeUxWeXyRn}7gtL*hpht7 z2w*2rr;C&Ab4dp3nPk{F>2C}p&9 %FZ7`g!xQ zZtzz($j+Ah&Az%1L2VDt1=GnkXhjj2oSaUQEE>spRYNlDA_MEK8~4_5wzM%Jw{heK zH`vb9>c4%<&oJ1VW6E8e+jw{Dd8Rehz(|v^mF-{l#<`6QMQxZQ5~j;>%*WN-gwcR` zM?ITjkJTsZwB=)7fKME;gs9Xw0!UsYe2d%HSJO`VVbA`*+@6if0VUEz8#mAaM}?2b zsw)kQZ#M_)_1Cmf^7YO2kQL6~7zK3?gG#5w7l+!-k;rOL{2b_53r}#|OXPU>h28 {>^;8s&!Kwn^?@xOF%2-eabOU-+Es)s}UE0fd?6sNrV(7`xK|R;$P_GMPOXi z8&{DZb5ESi6#{;<(D2HuD&!(E*@O=x3g-S$rdlf{rlalT7o0t7|GwdxcT#Ck{-aC5 z3ZRdlA(!}>_u@_`#;d_f(azV43-MHN@w#d4zIII5|KE+zJn@~|K$hbQkeHTZ?AEr& zqRl{)V)$~H`e5(8FMQe~MRCqRfA6N#int*a&w#YCV~PG$O+mv8&qJfL#GU9Woyg=X zCFzMS^UXxch|tB 902@1D@&rT~?GP;#pp8Ec;@m7zrT&0N zZvWb&I;_!7-hj*R(w4)~7+C4{%G<5vd*dxWazg>XWGP=@IcAx}^UtC#XT{hV6mQ6^ zd5Qarkn |7CCqnJG9L7E*vwkV3gyx)LvI=xTl3Z5?Df0b3KHh7oQj4LXF#YzJz z7%PqAs%eTp1pay9a@neMfmyn(lFQVVA2xM{|9 zJ0(h8xk>6wt2MGhv;L$JD=rGxxs83Gn2>P(@{@I<-k?5sBUJmNjk4&( e3=qNm$v4!;yQT z>tg-lA3lLkpk9qoe~q2~j247OU2JFuGVVQMTIo+Ye`~1(s2pv2vk!=_#wWqp$_qu? zEfw~TM_ZwQqx{VML(DgpCB%fiSw5y-f$Kl~&+LZSMP{57Ww3u65V1KP6T69J{%Lg5 ze76EWH1YIzy=eo6C iMtpSENe63w!z&tmb#(o{1DFZP}~!Zp?JFHs(?>u)8IsznVRQ zI)B Y`#JMG0^h #B- z5uc4%0=#292@by3&3K5I0d(_!PeC}_mrX{HYYU|vP!CSWy7EO;2mObpmG{(xDrSM> z`Yu*QjV_3!r;I5nrOYFyeYPxd0z-)qxJe+PU7>oLz$Ry5iJz3kgM!_T#6{3O{4q4} zXb79WMKdy;>4)O(T!zUsDE(b$gJ;ho8$Et+E;UsLu1rxtuXIoPcMVor5e2|4%)EM# z^)juRBT7kWlgV_To#SQ&rQ``sejs|lF91oTQVVSe6t7 h zN=hKN_)eb88sW3TrSJJjcMdf+)}s+?y>kWmeMm;isT%X2H%E)7#CtrN%khE-IEC6n z_ Cs0N$u~6{Qg4= zP^FcFb?`UUcXx%ha=n&9r$lCG!E6(L#N|q)+A9y+c6-^{I=JshmVr(Ou};|f4H*<{ zF_;*fN?m)-B!m-AeIw3&+&o6zYUrpl1MtX&N_MXPLu1DN_l*Sk2Nr~p(0LfZY>pGj z>*BgG#bSU-Pdpwds~uE!H-v<|X+UO4Cl~$IJUc7%KtPxrP1fxB`0gax05`3}W*!w+ zEyi#7Kh%#Sm%nWk8-YgRsdg&5OtM{cvBo5ko=v%u55N~DTW`OkFsa7V$K>x{J0^ot zFRdVXAv$28FA_g(=oWi1 zW$+iP3+}uCbH6iOQPFf<#~GQBW38r+b#P)lVBh*o9cmPgR}c`L#Z@85Ad};%>2iSH zmC(K7KCmBijbfW81Sj+2kLy(ap)C1Z%@uMLh4Gk={6O#JM@l&SVl$hr7mA9K)hD}! zMjK4)R-{JUO$;vVJMN&agRD0~34TqUNmkHpSo_t4?2m#hv09b{$;r6^>XY5=8yaFq zvVKZ%ba4XosL^IHFmuN5&fcD0VhH7&7leUjS>!TPNHk&V%p z#06%;xUZJs$|%05?eoS%oQXrQyz7&sxJMK95~LHD+pNY(`iVd*x75pE%g)aGcNB78 zf5fJ&Y%I(-de^6OJW|}uYvp}2_{E0HWHHj#Ky&7dL{sjS^#7ODWX;DXODqQGhJDSi zaR{W6o$KIr_1BB<_Gt_$3&&xk|0g9g1W}8}NE9HzThG4to~!?@@4@}5s`NFsdO{AG zf99XtdjlE0rSCkwiD@*-#V_+3FgxCy@0-e3k+)FRsP}anE^7U$e#^W?;8RS8T|_(M zFPPqE!ZOudyFiu|qP-341q3@PWMT~s;-8c9`{5lf;>#ozYy%`^B}?`3FGO^vUn0z& z`CTU~43$Ed@NIL@tAhIU@eQ*S_Hn+-9C?$z3I#vx@@olV_G5Z`4RBa()@pqU%{_HD zW1?ACz(l*Ezq;7n)jf}cDwq4n=Cihxq#%j|C&k>f^N_ca&5-L&-7!~!f%*%aC9R~z zk2QWTlTfVF;^c7+Iypjyk5I^`MkoZgr)Qkw4`_}TfGAG%BH;CB@A4x#Clha2FN4E% zm{vFo80_5>niW>1Ce?&qW_ysDQy661asaWhD3HDhGKc#4Ob2md=#Ql*WKpb&-|PX7 z{`D^;U =c&L$)YkxiSO$=bs2Zv4ltD4e~w6vS4$~Urpt8};8x7pgb$9{b! z*WI|P8%s`x=`9p4k&H~FX|=AY?kuS|*5Fr0t)D)oU5(lSm Xjm*@CSsSo2zu9g1_>{+U?yI#KEg%n* zkI(pH$vj+s%$S(nLW0SMUoBPDM(DAB`Tp#Y+E% YQ zJ>10Iy?a3$oU&8^ MzEYGIdLZy; z*WK6w$5psLroS7O`D{*~ofOjDTM-)1DqbuBuB78MH|8L^8L&-Gm)8r+wgLxW!cWp` zJ`vO_0%gj8>e{raAGz!dUfS&>=B8>rrFkG>5^Z`AfyY}z7phfuNok~L@@qAe{ota) zsJM#zh_z=4?(24E&A)D|c{Yh+O7VwW9awFDHbDgRKa(hi%uc?nU6lmj(;J>toLA+f zbRW$c;yZ-JkH9dzck(o?%n1>XN#7t1tzQH3DF6nijs{wP&ko9M>>S1HXPZVeAbqm& zix8GZx2&l1Q5^)Wj_}GlPK=H0@V1}SOAJPe`y>@E1xR(R#@3;Q<7 _#Kmv?#D)JtW&SYcHdC7r6m{UT51cJqI1P|cAy8Q!AHs%*%d@Mw=A0qE5xA# zZ_ oiVjgO9DPaqa%n(5Wqtvn3cqpB`uxYlrGDuL zIy#z|6!ii7jHpqAvBr{an$ByBNSZQ5T#k8(i_*Ty#wJa6&IpM7s5Yd&^2cYrnc8h7 z`-B5u126CiFH||OPa@7a$@5Q?t2Chaw@9Ma*h_>r!nh~vu_?!Wv|aYSXqbaH$ps@_ zs+w;I{=PT4%{d}Gs`AJjvs@>Evcjs_v0)k88MCm>P(x`KoJ}1_TGN*&5C;8{)){NU z-ugwOtjT!H`Udz_CAKNc^YdY^G(4p?L1M6&o3hRVwxEg5q*zCm0u~0NtzDja>}sUr zUFYOJ*(A_}w=6diQMr^llfXQdvuVHPx-bcyGP*&yn5ZEvoq5;=0GKj+6+lE{?N5a? zc~UHNtn{mcr^so&*!h%i!WxI%q=n0 cNEOj5`~X*#0eZnShKAN&e6{^vm$At#-s{Pt z_U|!7le51X<7cB9KsXTFz2xChMTymt1>hEob2PYCh?N=3ar`b9;r07!-y~z2BwNmB z*924iq|jL7>15jIOtd`vE+sqLVm1xxyjPqhxXt6-J#4h169{(N7qtCE&9g96VY_AT z@W$ac)z^*Xp=ic9sDzZ>@^^t4pomffJrAqvive2GA0^?BF>Qgv;j-a0hoSwh`Tzi` z$8RhWy*d#GWhd*ZRA4+uG+qkD_R?BE)lw;mzi(Y`9c*q)?dIkCgse{|Lyr>N*Z5Gh z5&rBpdPJl0K|3ize@`sXeWGQBWm&ULdpDP=0R})(ii{wAES&a!6fo~C#tgV>w^RS6 z-$q1w7?dYZ`lP~r>vDKyJ%QVU_5hFTfC9Ii`rXm*cprk|Q{4?aiTF)30vWT-B#^zS z4f(__wdRHBp>%3Ew*5@E1@~t3@|?ZDMbnVO5^PR7I=4l9LudR)J?6TRoH`>1RWj*t z_H~VNaDPF)KvT*iV~#NAe`tTm^lfzsgM7xH@?})RHsRg6e0%X p#?QO3`!9`KuEeUQZYEW&iqUX{GyGYy82H9YS($ zs3m-7)k)pQ!SYTLb(@1KfCr}QL$@sI>aFDizi&eeyhg@ZP8*TKL-VBc3yt!>8cF!S z$Bu^=ZSqoc43!O+jPf^iCBRPi_-wgaCpds@|L(QoG3HGGKbb!&?`L%8pWM{2vIf54 zH}Dh%*4siNR7W#u@SCwBDNHRFxXReLntu1zt>_)bu7ej>oG9A8}qp= z5xbck5Xp)@I`zy@Wwofcnhm}?E=gHtm?eS;93A$vp_P#Xa`eSpwlyGEPl)0i)vkUY z@XvYRPz>#VXhJ`MVh6&s49&?xoIW#CxE?|?^Py~Ww1GsUGJB4O+Ai5{51Gj{Ymino zHr2n(O)1kfiGmM1oeCKAueew=Cn?U}mSXNscH)W%H=ZY$ J(O8CNB%Z3HK}3c `uIN>+$5wbmUo{HLqG&_=3+<#t7Zc`t zZJgxF6z*ijz`gYrs<)#smvdgkw+}{07a*InTX%3h y_zD5 z-6S~MkMYyvxEG0!l|;k!3aHs$6AAve^Qceg>$)2~7kW<8ys$6zl;_bHPwOH+ EUH4_ABbx3vvF-P2^*w^oWOi6RfEK z{cP9n(EG_?O5DS$Guk85!xYn8re#d#Rv9oin&?}Q7&wKp38h-imX4*RgdN=LDPl?L zv2@_4+GA<-E@}WoH5AxaLrBmge@@_RCA-BN`$Nq%@a? MZ$wm65neoQzi49v>ku^kfC?SupsX?Sakt}BfDbGYdAZL;E1yi?!% zy-FvAduiTpbouFH^o5D4x7Zphj?R><;8tL=v1wqi-xJ80*0;HLv>c%4ksh5a)YM(a z@-{FHkEbCi)cy#$Ly6_> XlU# zssSFHn1JWKKT}dtTzdp6?bp!u>X5T?ZyLz5PjT}1Oe)1Q^L8Bo9E4WA{b -?ELS76$=S*AzL{hYRd)R|EV?6&u8~4+FZV38U_8;01 z(dmC^8FMvH){OtkIbwREph1o^*LZ^Giz)x09$nZ-5md Fvn2kX%fEx>svYIL9*u%+xqg_4X({h{8vwI7xGZQu&tFW|Nx#P U@aZH>j|R=6N&qKeWn(|IlbWkbIuMnyYMdatRd$)$RXk(3YaIa5(!& zC;t(Ji4|TvU^)oobLe 1erK+Giz8uRar8Ns*Gm?*heJcZC0h! zZ{TyKUfEksLV-GcLDRyn8>w=}xvyS{40rXS8HmdB=(3-UsEJgE6#(5=&CUcG)k!$L zNSX#_VUpmWMog>^8QDhD-Gv|6uQ8MYnIP$2MIF4={=@fkPxigavjyLb8y@}vU6UU5 zN(|?fmjzGsP16|&u}*mlJwq?Vb>g(bC&P7s_!I~2nY y& zrR1*C@!ov*wemElBfX8A0q|o)>E(E|e5)M}e`+|p$6_-IfQ%mWcGf%Sr*PfgzPWDX zO@e{LBzS8CW7ntbnm-GVP-2QRAP$i2$uUix5{^o{Hf0Q`8XT)BGFgg4)?RK$e>D~? zt@t3&w3wYym2%efgES$}z#=}Fm7VDh`vhj_#9RD&b163w!nEcfct00MOQ-g(-*r55 z{dNF YY$Qf*z<2!N;eA$00N|4B?S8vq4Aw0|4LwT=6ol=kC#X~Lfxe?8>nAd479JA7 z1A0Ae3qx9Ba=8#={Se~Il@Vt-G@dDLXE?d>v`DHz91-=U5FD&;zGAjn1JCQWS N3W6{Hs9lT6CYB_ebKn+{9blWu9`=L`eI_lC*M{bzE7CVEkiX|4j!t ze+zk4^#T#@&81HVxG_}YVF-MHK*ZnR#o|v!ARuoeXdJs2fwPG YJ!3b|3wgBKKxk)5++!p&`w4N=u1{BBMrPumw%#$k!u-d36&2W!&d_7fEw&FK7Q& zcxqBuV1u`4PkCAHj21Ki_IgF3R~;hE>HAlE31FCf=Mt7TnogOS`)YC)l5wJEJTm#^ z?ftjTvYoyGE-`KymlB9(F5Aw!I_JOrYf3GmcgF>aPSV=EiR78)2AW_KCQnT{62kwD zGUhR~HMGK>gwN;5b|IF9sb$uU+AaA?uZo#|ee$ACWn;`l4JaEGKZY{9z5+XP52_hb zi1v2T2jF3#`Tv6JD)~CyfA9L_35a9m5)|9%#s4IAIhBwaKs!SjFHkl!*Qrd=FBntA z#vO~-a&cB(ar~>-lP`!M3z4?dZ-}uU g$GC=>1flzy<1M@2hQ48 {)dF+J?}fQwMe%Fcv@Qou9AuFwi(BptcQcPuNBzcR?$TRl zV7E$FY@}J)@5+DfCN}+xIc6SDEZtyrmaFCG4=N>!E`2NJ1+!S!<*COh1#t;FlJg+% z6Zvn7QeeeV!{l6B(GE4NiZAXBxM^#qg5mE08Mn!>`kZokv@M^|JJ;&b*nsToqd*4d zjYU5Wn`Hwlo@%yNPRjXs)_>MAlhZB?LFC}jX_MFWk|T;rN@}0Pgmi3fHr7)pBjqbV zi;g|I?QYPIZ6RKQb7&8n>Fc0xE!CXz=@bi7_34ZHSU&aQ^e(6u&Vi#ldZ@F6F8keZ z(=xLszFeO<&Y*7aA0M~sT+Y3H%FF>?KS7yV>1?!14lIh__cI?G$?+j)DY3Sl#e`;A z^ds>lMEQgphT^SLn?Q{CC)#V9D8Y}GK8jlH>Ni$Gz2pg`7AO+t%`Bry9{YEXlULt= zKRNZT*Ql8G7$l8;wsfHXHzW++AYU+Rs;dLsCHriSU6gUe7zFA>Kd+WGgPX|K+`a r=pCFZYu41V!Y+s{op`uP*)xYbd=!OQpWYo;$2?xHO;1Beh5@;!K`