diff --git a/Mac/Lib/test/AEservertest.py b/Mac/Lib/test/AEservertest.py new file mode 100644 index 00000000000..a372bee709c --- /dev/null +++ b/Mac/Lib/test/AEservertest.py @@ -0,0 +1,219 @@ +"""AEservertest - Test AppleEvent server interface + +(adapted from Guido's 'echo' program). + +Build an applet from this source, and include the aete resource that you +want to test. Use the AEservertest script to try things. +""" + +import addpack +addpack.addpack('Tools') +addpack.addpack('bgen') +addpack.addpack('ae') +addpack.addpack('evt') +#addpack.addpack('menu') +addpack.addpack('win') + +import sys +sys.stdout = sys.stderr +import traceback +import MacOS +import AE +from AppleEvents import * +import Evt +from Events import * +import Menu +import Dlg +import Win +from Windows import * +import Qd +import macfs + +import aetools +import EasyDialogs + +kHighLevelEvent = 23 # Not defined anywhere for Python yet? + +Quit='Quit' + +def mymessage(str): + err = AE.AEInteractWithUser(kAEDefaultTimeout) + if err: + print str + EasyDialogs.Message(str) + +def myaskstring(str, default=''): + err = AE.AEInteractWithUser(kAEDefaultTimeout) + if err: + return default + return EasyDialogs.AskString(str, default) + +def main(): + echo = EchoServer() + yield = MacOS.EnableAppswitch(-1) # Disable Python's own "event handling" + try: + try: + echo.mainloop(everyEvent, 0) + except Quit: + pass + finally: + MacOS.EnableAppswitch(yield) # Let Python have a go at events + echo.close() + + +class EchoServer: + + suites = ['aevt', 'core', 'reqd'] + + def __init__(self): + self.active = 0 + # + # Install the handlers + # + for suite in self.suites: + AE.AEInstallEventHandler(suite, typeWildCard, self.aehandler) + print (suite, typeWildCard, self.aehandler) + self.active = 1 + # + # Setup the apple menu and file/quit + # + self.appleid = 1 + self.fileid = 2 + + Menu.ClearMenuBar() + self.applemenu = applemenu = Menu.NewMenu(self.appleid, "\024") + applemenu.AppendMenu("All about echo...;(-") + applemenu.AppendResMenu('DRVR') + applemenu.InsertMenu(0) + + self.filemenu = Menu.NewMenu(self.fileid, 'File') + self.filemenu.AppendMenu("Quit/Q") + self.filemenu.InsertMenu(0) + + Menu.DrawMenuBar() + # + # Set interaction allowed (for the return values) + # + AE.AESetInteractionAllowed(kAEInteractWithAll) + + def __del__(self): + self.close() + + def close(self): + if self.active: + self.active = 0 + for suite in self.suites: + AE.AERemoveEventHandler(suite, typeWildCard) + + def mainloop(self, mask = everyEvent, timeout = 60*60): + while 1: + self.dooneevent(mask, timeout) + + def dooneevent(self, mask = everyEvent, timeout = 60*60): + got, event = Evt.WaitNextEvent(mask, timeout) + if got: + self.lowlevelhandler(event) + + def lowlevelhandler(self, event): + what, message, when, where, modifiers = event + h, v = where + if what == kHighLevelEvent: + msg = "High Level Event: %s %s" % \ + (`code(message)`, `code(h | (v<<16))`) + self.handled_by_us = 0 + try: + AE.AEProcessAppleEvent(event) + except AE.Error, err: + mymessage(msg + "\015AEProcessAppleEvent error: %s" % str(err)) + traceback.print_exc() + else: + if self.handled_by_us == 0: + print msg, "Handled by AE, somehow" + else: + print msg, 'Handled by us.' + elif what == keyDown: + c = chr(message & charCodeMask) + if modifiers & cmdKey: + if c == '.': + raise KeyboardInterrupt, "Command-period" + else: + self.menuhit(Menu.MenuKey(message&charCodeMask)) + ##MacOS.HandleEvent(event) + elif what == mouseDown: + partcode, window = Win.FindWindow(where) + if partcode == inMenuBar: + result = Menu.MenuSelect(where) + self.menuhit(result) + elif what <> autoKey: + print "Event:", (eventname(what), message, when, (h, v), modifiers) +## MacOS.HandleEvent(event) + + def menuhit(self, result): + id = (result>>16) & 0xffff # Hi word + item = result & 0xffff # Lo word + if id == self.appleid: + if item == 1: + mymessage("Echo -- echo AppleEvents") + elif item > 1: + name = self.applemenu.GetItem(item) + Qd.OpenDeskAcc(name) + elif id == self.fileid: + if item == 1: + raise Quit + + def aehandler(self, request, reply): + print "Apple Event!" + self.handled_by_us = 1 + parameters, attributes = aetools.unpackevent(request) + print "class =", `attributes['evcl'].type`, + print "id =", `attributes['evid'].type` + print "Parameters:" + keys = parameters.keys() + keys.sort() + for key in keys: + print "%s: %.150s" % (`key`, `parameters[key]`) + print " :", str(parameters[key]) + print "Attributes:" + keys = attributes.keys() + keys.sort() + for key in keys: + print "%s: %.150s" % (`key`, `attributes[key]`) + parameters['----'] = self.askreplyvalue() + aetools.packevent(reply, parameters) + + def askreplyvalue(self): + while 1: + str = myaskstring('Reply value to send (python-style)', 'None') + try: + rv = eval(str) + break + except: + pass + return rv + +_eventnames = { + keyDown: 'keyDown', + autoKey: 'autoKey', + mouseDown: 'mouseDown', + mouseUp: 'mouseUp', + updateEvt: 'updateEvt', + diskEvt: 'diskEvt', + activateEvt: 'activateEvt', + osEvt: 'osEvt', +} + +def eventname(what): + if _eventnames.has_key(what): return _eventnames[what] + else: return `what` + +def code(x): + "Convert a long int to the 4-character code it really is" + s = '' + for i in range(4): + x, c = divmod(x, 256) + s = chr(c) + s + return s + + +if __name__ == '__main__': + main() diff --git a/Mac/Lib/test/AEservertest.rsrc.hqx b/Mac/Lib/test/AEservertest.rsrc.hqx new file mode 100644 index 00000000000..dd0685c478f --- /dev/null +++ b/Mac/Lib/test/AEservertest.rsrc.hqx @@ -0,0 +1,514 @@ +(This file must be converted with BinHex 4.0) + +:%8&&Ff9bGQ9bG'9cG#jbFh*M!(*cFQ058d9%!3#3"f2$GSF!N!3"!!!!BVS!!'' +k!!!"#6B8)&3JD!!8)&"p%E"S%3!k!@FQ%Lm-6VS#$!`k!&Tj%8&&Ff9bGQ9bG'9 +cG#jbFh*M!J!!!$q3#!#3"$q3#!#3'+a8lVX!N!CM`rm4`+KT!4e!%Irc%h!!%#l +rmlh5%@B386Dq9@X"!8*%[D'q9@X"!6"4-J&R(N39$!!!('85F!!3,N-9$!!!(f) +'F!&J!!%"!LaD9#dZ4,d"!"Xm!@B`*e8q'NU!)&-#+!#r!#iL!1d*!J%!3)-Sfc3 +6UGF[$%kk!3P+CfX"!+CA3cS!!!%!N")#!!!!!`!!!Irq!!($!J!#)J)!""!#!!J +J!L!33#FJ)-!R)((J!L"l-%q!4KK2N!"!$%q3!#!%(p!3""r!#!`I`!`B0@!H-$9 +J1@!ri$(!!J!6J!)!$`!#!!3!!J!%!3)!"!-#!!IrrJ!!!`!!!!%!N"-#!!!!!`! +!!Irq!!($!J!$iJ)!"r!#!!rJ!L!I`#FJ2m!R)(rJ!L"rm%q!IrK2N!"rr%q3!$r +m(p!Ir"r!$r`I`!ri2q!Im$rJ2q!ri$r!!J!IJ!)!$`!#!!3!!J!%!3)!"!-#!!I +rrJ!!!`!!!!%!N!8+81!!2S!!!"p!!*!%"d&38%`!N!BF8&P8C`!!!!&'8N9'!*! +&J%P$6L-!N!3",!!!!%!)J#P!!L!%%#i)0!3Z!Qi"2`)I"#U)2j!!!L!"3!#!!!! +)J#R!!q!(m#ri2r`rrRrr2riIr$ri2r!$i!(!!)!!N!3%!*#2r`#3(rrr!*!Arj! +3!*!3rrrr!*!%rrm!N!Er!*!2r`!!prm!!!$r!*!(r`#3$[m!!#SUprm!N!Vr!*! +0r`!!+LVhr`#3#rm!!!#`!*!)r`!!+LVhr`#3#,!!!,#`X!!!X!#3"rm!!#SUprr +r!*!)X!!!X,#`!!#`!*!'rrrr!#VhrrVkr`#3#l!!!!#`!*!'rrVkrbVrqLSUq[m +!N!@`!!#`N!8!N!MrprFUrrSUN!6kr`#3",!!!,#3"3!!X!#3"Irf!#U3"J!Uq[m +!!!#`!!#`N!8!!,!!N!Er!!!UN!3!+J!Ur`#3"E#3"`#`!*!(r`!!+LS!+J!U+[m +!N!@`N!F!N!Vr!!!!+J!U+[Vr!*!&X*!(!*!+rrm!!!!U+[Vr!*!&X,!&X!@`"E# +`!*!)rrVkr`!U+[Vr!*!'X,!&X!@`"E#`!*!(rrVk+LVr+[Vr!*!(X*!*!*!(rrS +U+J$rq[m!N!cr!*!-r`!!q[rr!*!0r`#3$Iq3"!#3$[m!N!lr!*!3r`#3$[m!N!R +r!*!'r`#3$[m!N!Mrr`#3"[m!N!lrN")!N"Irr`#3(rm!N")#!*")m!#3$rm!N!X +2rj!(m!#3"`rr!!$r!!!!m!#3"r!-m!$`!!!!m!#3"Jm!c-m!N!A`!*!'m!c-m!# +3"I!!8!!!!!m!c-m!N!43"98!8!!!!2!-c2m!N!43"98!8!!!$rm-cph`!*!&8!" +3!!!2hIcpc0m!!!8!9993!!!!$mc2h-c0m!!&!&998!8!!!r!c-c-$0m!"3"999! +&!!!!m!c-`-$2!!!&9999"3!!!!m!c!`-c`!!"99993#3"I!!`-cI!!!&9999!*! +&r`!-cI!!!&89&493!!!!$ph`c0m!!!"9&4898!!!!2hFcmh`!!!!9C!%8!!!!2h +-$pm!N!E`!*!&$`$Im!#3"[!!N!Err`#3"r!!N!B2!*!)m!#3"Jm!N!32!!!!m!# +3"Jm!N!6r!!!!m!#3"JrrN!M`!*!,r`#3$`m!N!S"!*!&r`!!!2m!N!Rr!2m!!2m +!r`#3$2m!+`$r!*!+r`!V+bX!r`#3"[m!X,#`+j!%!2m!N!Arr`#`qINVN!3!r`# +3"2m!X,#`+j!'!2m!!2rr+l#`X2NVN!Ir!!$rX*!&q5Z3"2Rr!*!%X*!&q5XV+rR +r!*!%X!@`"E!&X2NVqIm!N!@`N!IjqIm!N!VrqIRjr`#3$2rjr`#3$[m!N"U!!!$ +`!2!!N!6`m!m2!*!'m-$`!*!%$`c-$`!!!2"9A-c!m!!!r`AGc-`2!!$`99c-c-$ +`$ra9AFc-c-m!p999h-c0m!!&99AFc0m!!&&489h0m!!!9999AGm!N!AphI!!N!8 +2h`#3"r!!N!eBS!#3!!#3"3-18Q9aG@PbC@3J8h9TG'8V9'9bEA-JG'KKG#"PGQ9 +bH5"KF("XD@0KG'P[EL"cD'peE'3JFh9`F'pbG!"bCA&N!!%!!3!%"'p`C@iF6h" +PEL"dD'8JFh"PBfPQD@9N)'pLDQ9MG#Kc+@&PGR4[C'pMER9XE!!!J!"KE'Pc&fa +TFh3JEfBJEf*UC@0dFb"dEb"[F'9Z8!!!!!9`FQPZG"e3FQPZG#"dD'8JFh"PBfP +QD@9N)'pLDQ9MG#Kc+@&PGR4`C'pMER9XE!!!J!"KE'Pc''aTFh3JEfBJEf*UC@0 +dFb"dEb"`FQPZG!"!!!!""@PdC@ecCR0PE'aTFh4T4%mJ6Np8)&9646SJF(*[GQP +NC@3JCQpb)'*KBfYhBA*NFb"MEfe`BA4TBQPXDA4j)(GTG'JJEfaN)'9fC@jd)(0 +eDA4P,L!J9fPXE#"LC5"bC@e[GQ9N)'PZ)'CeG(9bC5"'D@jNCA*cJ!!%FA9TG#T +4G@Pd)(4SC5"'D@jNCA)J+'4TFQ9MG#"`BA*KE@9dCA)JD@GZEh*PC#PKCACdFA9 +TG'jeE'`!!)!!ER9XE"aZEb"NDA*PBh3JF'&bB@ePG'9b)(*PFA9TFQ9N!*!!!!! +!!h*eEM"6C@jd)(4[)'&Z)'&`F'aTBf&dD@pZ)(GSC@iJDA3JDA-JC'peBQaP,@0 +XD@0VC@3!B@9fG'pKF("ZG@aX!!#!!'jeE'`FEQmJC'PbC@0d)("KFQ&YCA4PFL" +bCA&eDA*PC!#3!!#3#3j6G'&ZC'&bC#"6G@PdC5*$EfeYEfiJG'9bEA-JCQpb)'e +[Fh3JBA"`E'PMBA4TEfjcBfpbC3!"!!%!%3TME'&cFb"TEQC[*8GPG#"TEQC[FQe +KG'P[EL"KBQpeG#"KEL"[BQTPBh3JBfaKFh-!BfpbCA&[BQTRBfaT1'%JFQ9MEh* +N)'0[ER4KD@jTEQFJG'KP)'pLDQ9MG09c)("bEh"PFR4TCA-JB@jN)'9XC@ePER4 +c!!!!G(P`C69dD'8JEf*UC@0d)'0XBA0c)'&LEh9d)(GSD@0S)'PZCQpbE@&dD@p +Z)'Pc)(*PFA9PFh4PC)!!!!%#D@i!Gh*MC'PZG'a$G'KP)'KeE@&Z)'aKEQGeB@G +P)'&ZC#"cBh*TF(3JFhPcG'9Y)'PZ)(GSD@0S)(4[)(*PG(9bEL"TEQC[FQeKG'P +[ES!!"@0XEh0P$d0XEh0P)'&Z)'pLDQ9MG'0[FQ9ME'pcER9XE!!!J!"[BQSJ%h4 +SC5"[BQTPBh3JG'mJBfa[Ff83!!!#"R0KGQPZC`"cBAC[Ff&fEcKcF'9MD@CTCA- +JGfKPG'KPFL"MD'&ZCf9c)(0SEh9XC#"LC5"cBACPC#"LC@C[FQ8JBfa[FfPZC`# +J!!PcBACTEQFJD@jVCQPXB@aTFb4dD'8JCQPXC5"TEL"hD'PMD#"dEb"cBACP)(4 +SC5"[BQTPBh3!J!!&BfpeER4%8Q9dGA*Z)(4SC5"ZG@eLCA)JEfBJC@aPE@9ZG(- +JEfBJB5"`BA*dD@0eE'&b)'0XBA0c)(GTG'KTEL"KEL"[BQTPBh3!BfpbC@0ZG'9 +XEfjR&R4SC5"ZG@eLCA)JEfBJC@aPE@9ZG(-!!!"[BQSJ+h4SC5"[BQTPBh3JGfK +[Ff8JC@aPE@9ZG(-JBA*P)(4[)'*P)'0[G@jdC@3!!!!""'9KBfJ!DfpME(4jF'8 +RG'KP)'0XBA0c)'pQ)(4SC5"PE'9YC@jdFb"dEb"LC5"MEh9ZG'9N!!!*C'&dB5" +cDATP*9*PG(9bEL"dD'8JFfPkC5"TEL"LHA4PFb"[CL"KEL"[BQTPBh4MEh*PC(0 +THQa[EQFIG'KP)(0THQ8JEfBJG'KP)'pLDQ9MG#"TEL"LHA4PF`!!Ef*U)#adD'8 +JEf*UC@0d)(GSEh0P)'4KG'%JFfPkC5"TFb"dEb"LC5"bCA4eFQjPC!#3"!%#BA- +!FR4jF(4jF'8ZG'KP)'4KG'%JG(P`C5"QEh)JGfKTBfJJG'KP)(0THQ8JDA-JBf& +XBh9XBA4PC!#!!!CNC@aPG'8J4'9XCA4P)'&Z)'9XC@ePER3JCR*[E5"KEL"[BQT +PBh4MEh*PC'9XEfjeE'`!!)!!Ef*U)"9dD'8JC@aPE@9ZG#"dEb"NC@aPG'83!!! +!#@4eF'aTBf&dC40%GA"XD@0KG'8JEf*UC@0d+(-TBfpbC@0XEfj[BQSJ'h4[)(4 +SC5"NGA"XD@0KG'9N)'pLDQ9MG#Kc+3!!Ef*U)"TdD'8JEf*UC@0d+(-T)(4[)'4 +eF'aTBf&dC3!3!!!%!R4[!'PZFfKTER0X)R4SC5"ZCAFJE'pMBA4TEfiJCQpb)(4 +SC5"[BQTPBh3SFbN!J!!*FQ9`E'&MD@jRB@abF'*[EfaZ8h"PBfPQD@9c)(GSCA4 +SCA)JEh)JEQpd)(4[)(*PF'aKBf8JDA4PEA-JD@iJG'KP)'4PFh4TEQ&dD@pZ)(4 +SBA3JD'&fC5"dD'8JFf&YC5"ZB@eP)'&c)'PdC@ec)'*PD@jR)'4eF'aTBf&dC@3 +!S!!0F'pcDA4TEfjPC#"KG'efF'aXDA0d88GTGQ9c)'%JE'PcG#!SD@iJE'pMB@` +JGfPZC'ph)'0[Eh*ND@jKG'9c+5"[CL"`Eh0TG'P[ER-JCQpb)(4SC5"NCA0dD@j +KG'P[EL"TG'9YFk!!"@PdC@ecCR0PE'aTFh4T4%mJ6Np8)&9646SJF(*[GQPNC@3 +JCQpb)'*KBfYhBA*NFb"MEfe`BA4TBQPXDA4j)(GTG'JJEfaN)'9fC@jd)(0eDA4 +P,L!J9fPXE#"LC5"bC@e[GQ9N)'PZ)'CeG(9bC5"'D@jNCA*cJ!!+CACPER3JD@j +QEc&(CA3JD@jQEh*YBA4TEfiJB@*[GA3JG'KP)%&`F'aP)'9fC@jdFb"TEL"K)(0 +eDA4P!'0[FQ9RG'9TCACTEM0K)(*PBfpbC#"MEfjdB@PZD@jR)(4SC5"PGQ9ZG(- +JB@jN)(4SC@Pb)("KFQ&YCA4PFR0!!(4jF'9$G'KP)'9fC@jd)'0XBA0c)'pQ)(4 +SC5""F("XC5"PGQ9ZG(-JCQpb)(GSD@0S)(4[)(*PG(9bEL"TEQC[FQeKG'P[EJ! +!!!%#D@i!Gh*MC'PZG'a$G'KP)'KeE@&Z)'aKEQGeB@GP)'&ZC#"cBh*TF(3JFhP +cG'9Y)'PZ)(GSD@0S)(4[)(*PG(9bEL"TEQC[FQeKG'P[ES!!"Q9iDA0dFaT@CA* +TCRNJD@BJB@iJEf*UC@0d)'9iDA0dFf0[FQ9NEf9iBQp[E"pdFR9P)'PQ)'Pd)'9 +iDA0dFb`JCQ&XFf8JD@BJEQpd!!"[BQSJ&R4SC5"[BQTPBh3JD@iJFA9PFh4TEfi +!N!8$Cf9d'NGPG#"dD'8JC'&dB5"QEh)JB@iJEf*UC@0d!'0[FQ9RCA4N+T!%'(4 +SC5"NBA4K)'CbEfdJG'KP)'pLDQ9MG!!!!'pLDL!RG'KP)'pLDQ9MG#"hD'pcC5" +NBA4K)'Pc)(4[)'*P)(*PG(9bEQ9N!!!!!3*KF`"bG(P`G(P`C6CdD'8JC'9cDA* +PC#"dHA"PFb"QEh)JG'KP)'4KG'%X)'PZ)'pbC'9b)'pQ)("bC@CPFQ9ZBf8!`!! +%E@&VC4*0B@YP)'%JEQ9h)'9XC@ePER4MEh*PBh*PE'pLDL!8G'mJG'KP)'jPGb" +[BQTPBh3SFbN!!!"ZG@aX!!#3!!!!"30ZCAGVEf0XG(P`C4adD'8JBfaKFh-JEfB +JG'KP)'jPGb"PE'9YC@jd!!!!!Q&d!'PZFfKTER0X+h4SC5"XEf0KG'P[EL"KG#" +hD'PMD#"dEb"TER0PFR3JG'KP)'9XC@ePER3!!!*dE`"dEb!JEf*U)%4hD'9Z)'0 +bC@&dD@jR)'&Z)'&XD@&c)'CTE'8X)(4SC5"[FQPRD@jKE#"TG'9Y)(4[)'0bC@& +dC5"KEL"KE'PKFb"dE`#!!!PhDA4S)'4KG'&NBA4K+T!%)(4SC5"TEQPdD@&X)'4 +KG'%JCQpb)(4SC5"PE'9YC@jd!)!!$hGTG'JJF(*[F'9bG'PPFh"bC(4bC@0[0(4 +SC5"TEQPdD@&X)(CKE(9PFb"QEh)JG'KP)("bEh"PFR4TCA-JEfBJG'KP)'9XC@e +PER3!J!!%E@pfC5"0EhCP)'pLDQ9MG#Kc+5"dEb"K)'jPGb"XEf0KG'P[EQ0[FQ9 +YEhCPEf*U)#YdEb"dD'8JEf*UC@0d+(-T)'&QG'9b)(4SCANJD'&fC5"LC@9Z)'e +[GQ9N!!"[BQSJ&A4SC5"[BQTPBh3SFbNJG'mJE@pfC4!!!!-#G'm!D@jcD'PZFf` +LG'KP)'jPGb"XEf0KG'P[EL"QEh)JG'KP)'pLDQ9MG#Kc+3!!!!PbCA"XB@0TEQG +KE(*`BQp[E'P6F'9MD@CTCA-JGfKPG'KPFL"[FL"ZEh3JG'mJFQ9`E'&MC5"TG'9 +YFb"TEL"dD'8JC'9cG'PZBA4TEfiJG'KKG#"SBACP)(4SC5"cB@eP)'jKE@8JBA- +JDA4PEA-JBQ9TEQFJE@pfC@5J!!e`Eh0TG'P[EQ9N)'&dEAC`E'aTFh444fPfCA- +JB5"XDA0d)#KTEL"XEf0KE#"hD@jNEhFJBfp[FQ4TEQ&dCA-T)'pQ)("[FfPdD@p +ZFb"QEh)JG'KP)'4PFh4TEQ&dD@pZ)'PdC@ecS!!%Eh"PEKa2F'9Z)(4SC5"cF'9 +MD@CTC@3JEf*UC@0d+(-TB@9fG'pNEf0ZG@aX!!#!!'pLDL!AE'PcG#"[CL"[BQT +PBh4c)(4[)'p`C@i3!!!#"A9cD@jRGA0TEQpLDL!XG'KP)'&`F'aTBf&dD@pZ)'C +TE'8JG'mJEh"PEL"dD'8JEf*UC@0d)(GTG'J!J!!&DA4PEA0QFf9XE'PcG'P%6b" +16e3J990&1L"`FQpfD@4PC#"QEh)JBQ&MDhGKFQ4c)'0[EA"KG'PLD@aTG(NJGfP +dD#"[E'3JCACPER3JFh9TG'8Z)#"AD@aX)'*P)(*PE@pfC@3JD@iJCR9dGA*P)%C +TEQ4PFR1!!!9`FQPZG"e3FQPZG#"dD'8JFh"PBfPQD@9N)'pLDQ9MG#Kc+@&PGR4 +`C'pMER9XE!!!J!"[BQSJ''aTFh3JEfBJEf*UC@0dFb"dEb"`FQPZG!#3"!%&DA4 +PEA0QFf9XE'PcG'P%6b"16e3J990&1L"`FQpfD@4PC#"QEh)JBQ&MDhGKFQ4c)'0 +[EA"KG'PLD@aTG(NJGfPdD#"[E'3JCACPER3JFh9TG'8Z)#"AD@aX)'*P)(*PE@p +fC@3JD@iJCR9dGA*P)%CTEQ4PFR1!!!4aG@Pd+P&eDA3JG'KP)%CTEQ4PFL!SC'P +bC@0d)("KFQ&YCA4PFL"TCfj[FQ9N+@&PGR4aG@PdER9XE!!!J!"ZG@aX!!#3!!! +!!3CcBACTEQF!Ff&fEh0KGQp-Fh"PBfPQD@9c)(GSCA4SCA)JG'mJFf&fC5"MGA* +bC@jdE(NJEh"PEL"NEf0eE@9ZG(-J+'j[G#"cGA"`Eh*dC@3JBRNJ4QPZC'9b+3# +J!!4cBACP+&0KGQ8JB@iJEf*UC@0d)#K1Eh3JFh9`F'pbG'9N)'*j)%CTEQ4PFLP +MEh*PFf&fC@jeE'`!!)!!Ef*U)"*dD'8JEf*UC@0d)(4[)(0KGQ8!%!!!!J*TEJ" +VCQPXB@aTFcjdD'8JCQPXC5"TEL"hD'PMD#"dEb"cBACP)(4SC5"[BQTPBh3J+'j +[G#"cGA"`Eh*dC@3JBRNJ4QPZC'9b+3#!!!*KF`"QE(4`G(P`C9&dD'8JCQPXC5" +dHA"P)'pQ)(4SC5"NEf0eE@9ZG#"TEL"hD'PMD#"dEb"cBACP)(4SC5"NBA4K)#K +ZEh3JFh9`F'pbG'9N)'*j)%CTEQ4PFLQ!!!0cCA388f9d)'&Z)'pLDQ9MG#Gc)'4 +KG'%!BfpbCA0PG'4ZG@aX!!#!!'pLDL!8G'KP)'pLDQ9MG#"dEb"MD'&ZCf8!%!! +!!3*dE`"NBA4K+T!%$A4SC5"ZCAFJGQ&XG@8!!!TcG@PdC5"TEQC[*%GPG#"TEQC +[FQeKG'P[EL"KBQpeG#"PGQ9ZG#"cG@PdC5Kc+@0[FQ9RG(0TFh9TEM&K)(*PBfp +bC#"MEfjdB@PZD@jR)(4SC5"cG@PdCA-JB@jN)(4SC@Pb)(CPFR0TEfjc3!"dHA" +P+A4SC5"cG@PdC5"QEh)JGfKTBfJJG'mJFQ9dGA*Z)'PZCQpbE@&dD@pZ!!!!!3* +TEJ"hFQ0ND@jdE%0dD'8JD(9YB@iJE'&ZCh9KCf8JB@jN)(0MFQP`G#"cHA0dC@d +JD@iJGfKTBfJJG'mJFQ9dGA*Z)'PZCQpbE@&dD@pZJ!#3"`a'D@jNCA)J8h9TG'8 +K6f*UC@0dFb"KEQ3J4ACPER4c)'C[FL"dD'8J4QPZC'9b!'CZC()!!3!"!!d)Bfa +PB@iJGA!H3A*bB@jRC5"TG'9YFb"TEL"hD@jNEhFJEQPMC@ajCQjNFQCME(9ZG@a +X!!#!!'pLDL!@G'KP)(GTEQ4[Gb"dEb"ME'9KEL"eF!#3"!%#BRN!BRNJ)(4jF'8 +UG'KP)'pbC'9b)'PZ)(GSD@0S)(4[)'0XC@&Z)(9`)(4SC5"[BQTPBh4c!)!!#'0 +[EA"eG'9b)&4PFh3JBA4dFQPLGA4PFb"[CL"dD'Pc)'0[EA"eG'9bCQjNFQGcG'a +XEfjR&h4SC5"bCA0eE(3JEfBJG'KP)(&eCA*jJ!"dHA"P&A4SC5"KG(4bD@*eG'8 +JG'mJG'9cG!!!!!%$D'&cD'&c)'a[EQFHG'9cG#"cF'9MD@CTBb"LDA4c)'pQ)(* +PFh"[ER0P!)!!"@9UC@0d889UC@0d)(4SC5"cF'9MD@CTC@3JC'PcDbKc+5`JEh) +JCACPFRNJC@TPBh4KBQaP)'4TFfXJD@BJEQmJF'&bB@ePG'9b)'Pc)(0`C@0TCQP +PC'CZC(*PDQ0dER9XE!!!J!"[BQSJ%R4SC5"TG'9YFb"dEb"PDQ9MG!#!!!!!"@9 +YF(4j$d9YF(4j)(4SC5"dFQ&cD'CZC(*PEA"dER9XE!!!J!"[BQSJ-0*PEA"dHG- +JB@jN)0*PEA"dH5"dFQ&cD0-JBQpdD#"NEb"dD'8JFf&YC5"dD'PZC`#3!!!!!!9 +PFQ&cC4Y&FQ&cC5"dD'8JFh"PBfPQD@9N)'4TFfXSFbPQEQ4bCQ9bB@jeE'`!!)! +!Ef*U)"*dD'8JDA4PEA-JG'mJCA*KFf8!N!8)F(9d)'&hBANJ8(9d)'&hBANJG'K +P)(0`C@0TCQPPC#"[BQTPBh3SFbPQEQ4bF(4hH@pLDL!XG'KP)'pLDQ9MG#"`GA3 +JBAGKH5"TEL"TG(-JF(9d,@&hBANJE'pMBA4TEfi!!!"[BQSJ&A4SC5"TG'9YFb" +dEb"`GA3JBAGKH3!!!!%&DA4PEA0QFf9XE'PcG'P%6b"16e3J990&1L"`FQpfD@4 +PC#"QEh)JBQ&MDhGKFQ4c)'0[EA"KG'PLD@aTG(NJGfPdD#"[E'3JCACPER3JFh9 +TG'8Z)#"AD@aX)'*P)(*PE@pfC@3JD@iJCR9dGA*P)%CTEQ4PFR1!!!GbCA0dBA* +d&9*PFh4KFR3JG'KP)%eKBfPZG'pcD'CZC(*bCA0dER9XE!!!J!"ZG@aX!!#3!!! +!!!CbCACPB@`R3R*TEQFJG'KP)(0`C@0TCQPPC#"[BQTPBh3SFbNJD@jdEb"fD@9 +h!'eTFf0YGQPcER9XE!!!J!"[BQSJ(A4SC5"[BQTPBh3JG'mJBQ8JE@&NC5"fDA0 +TBQaP%!!!!!CcC@aPBh3H8f9XC@0d)(4SC5"cF'9MD@CTC@3JEf*UC@0d+(-TE@P +cBh0XBh4ZG@aX!!#!!'pLDL!8G'KP)'pLDQ9MG#"dEb"cC@aPBh3!%!!!!!PcD(9 +d)'4[GfiA8fKeG#"%EhGZ)(4SC5"0B@0TER4[FfKQEQ4bFfKeG'jeE'`!!)!!ER9 +XE!!!N!!!!!!&FfaPCA!68faPCA!JG'KP)%eKBfPZG'pcD'CZC(*cEQpkER9XE!! +!J!"ZG@aX!!#3!!!!!!4cEh*d,e*PG(9bEL"dD'8JFh"PBfPQD@9N)'pLDQ9MG#K +c+5"TEL"K)(0[FR4PC#"XDA0d!%4"9%&66e*8Ef*U)#0dD'8JFfpbG'9N)'PdC@e +c)'PZ)(4SC@Pb)'jPGb"[FQ4PFS!!Ef*U)#"K)'aTFh3JEfBJCQPZC'9b)'pLDQ9 +MG(-JG'mJFfpbG!#3"!%#BRN!BRNJ)(4jF'8KG'KP)("bEh"PFR4j)(4[)(0[FR3 +JG'KP)'PdC@ec)'*j!!!'GA"NBA4P8e9`C'&dC5"dD'8JC'PcF'aKH5"[CL"dD'8 +JFh"PBfPQD@9N)'pLDQ9MG#Kc+5"dEb"YBA4MD#"dD'9TFL"[ELeNDA0V)(*PF(* +PFf9ZG'&dD@pZ!'CZC(*QGA"NER9XE!!!J!"[BQSJ%R4SC5"TG'9Y)(4[)(9`C'& +dC3#3"MS4B@0MCA0cEh*j)("bEf0PFh0`Bf4K,8%JF(*[Bf9cFb"XBA9ZBfKPC#" +QFQpY)'%JC'9cDb"KBf0PFh0[FRNJCQPXC3!"%f4PFfXJB@0MCA0cEh*j)'CTE'9 +NB@CTEf*U)$adD'8JC'9cDb"KBf0PFh0[FRNJCQPXC5"QFQpY)(GSD@0S)(4SDA- +JF(*[Bf9cFb"hBA-JE'&eEQ0SC@3!N!86B@0MCA0cEh*j)("bEf0PFh0PFh"MC'% +ACACPFRNJB@0MCA0cEh*j)("bEf0PFh-!!3!!Bd!M)A4jF'8!!!!"!!!5B@0MCA0 +cEh*j)(0eDA4MBA0P!'4cGA3C35"NCA0V)'&MBf9cFfpbH5"cG@PdBf&cC3!!!!& +MEf*U!!*TEQ4iEQ&YC40KBf0PFh0[FRNJFh9TG'0KFf9cC(0eG"KPGQ9bH5"KBf0 +PFh0[FRNJFh9TG'0KFf8!!!%!!'0!)b&dHA"P!!!!!3!!#Q&XD@&c)'CTE'8!B@a +TB5P"EL"KE'PKFb"QD@aP)#KMFQ9KG'9N)(GTG'JJdNeKDf8J3@aTBA26+3!"$@p +bD@GTEQ&X)'PdC@e[FQPREf*U)#PdD'8JEh*TCfPZB@`JDA4PE5"`EfPZG'9N)(4 +[)'*j)(4SC5"KE'PKF`#3"!YKE'PKFb"QD@aPFf&XD@%3CACPFRNJB@aTBA-JCQP +XC3!!!3!!Bd!M)A4jF'8!!!!"!!!,BA"`E'PMBA4TEfjMBA"`&N&Z)'&`F'aTBf& +dD@pZ)("bEfGbB@d!!"F8B@*[GA3JG'KTFb"YB@0TER4[FfJ!B@*LH'pLDL"8G'K +P)0*"BQpeG#"dD'Pc)%eKBfPZG'pcD0-JC'PKE'pR,#"KEQ3JG'KP)'aTFh3JEfB +JFR9ZEQPZCb"`FQpMCA0cCA-JC'PcF'aKH@9N)'PZ)'Pd!!!!&f&`F'aP)'ePER8 +JDA4PEA-JCQpXC'9bB@eZG@pLDL"9G'KP)(0`C@0TB@`JCQpXC'9b)0*"F("XC5" +0C@je)%PdC@ec,0-JG'KP)'0[ER4PER4c)'pQ)(GSD@0S)'&`F'9KFL"TEL"dD'8 +J3A"`E'8JE@9ZG3!!#@0XDA"LEf&bC("ME'P[BQSJ(A4SC5"'D@jNCA)RFb"ME'P +`BQpKFQ3JGfPZC'ph!!!9BfpZG(*[E#"`B@jPE(-JCQpXC'9bBh4bE'pLDL!MG'K +P)(0`C@0TB@`JCQpXC'9b)0*$EfjdFQpX)&"KEQ9XFp-!!!GNCA0VG'p`C'9cDfp +LDL!,G'KP)'4PFfYdEh!!!"&PH(4PER0TEfjc)'C[E'4PFQ9iG'j[BQSJ(h4SC5" +cF'9MD@&X)'C[E'4PFL$54AKdC@jcD@pZFp-!!!aQD@aP)(0SBA*TEQF!CR0SFQ* +[Ef`65A-JCQPXC5"cD'&bD@jR)'pZ2a!!$'C[ER4c)'C[E'4PFJ"QCQjdEf*U)"T +dD'8JFh"PBfPKE#"QEfaNCA)JdNC[ER4cd`!!!!PQFQpZG'e[Fh4`DA0QBQp[E#* +*Fb"dD'Pc)(4SC5"QFQpZG'e[Fh3JBA"`E'PMBA4TEfir!"!!%QPZFf9bG'P[EL" +XEf0KG'P[EJ"`D@jcEf*U)%adD'8JBfpZG'&TEQ9b)(4SBA3JB5"ZCAFJCQpXC'9 +b)(G[G@aN)'&`F'9KFL"TEL"TCL$56Q9h)%C[E'4PFY-JGf&c)(0PE'9MG'9N!!! +!%QaKFQGPFh3JCR*PC5"LE'pMD`"YCR*PE'pZCdYdD'8JE'&bCf9cG#"QFQ9P)'* +XEf0V)'pQ)("bEf0PFh-JE@9YEh*j)'&fB@PXB@*XC5"dEb"XBA9ZBfJJB@iJBA" +`E'PMBA4TEfi!!"*`FQ9QCA*PEQ0PFb"QEfaNCA)!F(*PCQpLDL!JG'KP)(0`C@0 +TB@`JCQpXC'9b)0*3FQ9QCA*PEQ0PFp-!!!!2F(*[C(9MG#"fCA*cD@pZGQ9b-QP +dH(3mG'KP)(CPFR0TEfiJEfBJG'KP)&0jFh4PE5"cEfCdGf&bC5"bG@jZD@jR)'p +Z)(4SDA-J6@&MD@jdEh0S!!!!#A0PE'9MG'P[ER0PE'9[BQSJ)A4SC5"cC@aPBh4 +TEfiJGQPcD@*XC5"dEb"dD'8JGA0PFK!!%h0SBA*TEQFJFh4KFR4TEQFJGA"QFh9 +`BQp[E%e*Fb"'D@aP)(0SBA*TEQFJD@iJG'KP)("bEf0PFh-JEfBJFh4KFR4TEQF +JGA!J+(0dD@aX)'pQCL`JBR9d)(0[EfiJG'mJBQ8JEfiT2`!!#A0SEh*dBh9dFh0 +MGA4[BQSJ0A4SC5$54QPZC'9b)&0SEh*dBh9dFp-JDA4PE5"TEL"dD'8J4QPZC'9 +b*h-JD'9XF#"YC@je!!!9FfKeG'4[GfiJDA4PEA-JCQpXC'9bFfKNCQpLDL!MG'K +P)(0`C@0TB@`JCQpXC'9b)0*6D(9dC'phEL"*G'9YFp-!!"4cG'&bG(9`)'PdC@e +c)'C[E'4PFJ"cG(*dEf*U)#*dD'8JFh"PBfPKE#"QEfaNCA)JdP0dBA*dGA!J5A4 +PEA26!!!!$A0jFh4PE5"QEfaNCA*YB@0cEf*U)"&dD'8J8hPcG'9Y)'C[E'4PFJ! +!&R4PEA"[FQ&bH5"TG'9YFb"QEfaNCA)!G'9YF'pLDL!`G'KP)(0`C@0TB@`JCQp +XC'9b)0*8C@e`Eh*KFRNJ5A4PEA26)#KTERCTFfPLE'8T!!!!"hCPFR0TEfjfCA* +cDA4iG#edD'8JGQ9bFfP[EL"[CL"dD'8J4QPZC'9b)&0MFQP`G'PZCb"&H(4PER0 +TEfi!!""fD@9h)("bC@CPFQ9ZBf9c!("fGh"[BQSJ)R4SC5"fD@9h)("bC@CPFQ9 +ZBf9c)'0[ER4bEf`JF'&ZC@`!!!!(GQPcD@*XCA"fDA0LEfpX(NPc)(4SC5"'D@j +NCA)RFb"XBAPPFL"fDA0TBQaP2`!3!!!AC(0eG!!#D@jNH'jKE@9KE'PK!!*TEQ4 +iEQ&YC@&`F'B!!fPZC(KZB@eP583J)'0dER)!!QPZC(KZB@ePBhGZC!!#D@jNH'j +KE@9NGfjN!!*TEQ4iEQ&YC@0MC(B!!QPZC(KZB@ePC'&QD3!#D@jNH'jKE@9MC(0 +V!!*TEQ4iEQ&YC@0NDA-!!fPZC(KZB@eP583J)'4[BfB!!QPZC(KZB@ePCQPXC3! +#D@jNH'jKE@9MCQpX!!0TEQ4iEQ&YC8P%)#"QER4Q!!*TEQ4iEQ&YC@CcGA3!!QP +ZC(KZB@ePDAGZC!!#D@jNH'jKE@9MEf*U!!*TEQ4iEQ&YCA0MG()!!QPZC(KZB@e +PFhGZC!!#D@jNH'jKE@9cEQ4Q!!*TEQ4iEQ&YCA0dBh-!!QPZC(KZB@ePBh4bF`! +#D@jNH'jKE@9MGfPZ!!*TEQ4iEQ&YC4"KF("XD@0KG'P[EL"QD@aP!'&`F'BG3@i +JBA"`E'PMBA4TEfiRFb"QD@aP)'pZ)'4TFfX!""CYD@jTEA9Y)("KFR4TG'P[EL" +cDATP!'e`FR4XEfjR5h4SC5"cE@&XE'9cG#"YC@e[FRNJFfPkC5"dD'&d)(4SC5" +KF("XD@0KG'P[EL"MB@iJF'pcFfPLE(NJBQ8JE'&eEQ0SC@3JGfPdD"!!$R"KFR4 +TG'P[EL"cDATP!'&`F(4XEfjR1R4SC5"YC@e[FRNJFfPkC5"dD'&d)(4SC5"KF(" +XD@0KG'P[EL"hD@aX)'*P)'aKG@jMD'9N)(GTG'J!%!!+Ff0bDA"dB@*XC3"TFf& +LBQp[E'p*Fb"dD'Pc)'&`F'aTBf&dD@pZ)'KTCfJYE'9fC@`JCACPER3JBAGKFQ8 +J+'&MBf9`G(-JEh"PEL"KF("XD@0KG'P[EL`JEh"PEL"NEf0eE@9ZG#`JF(*TER3 +JC'pMG@ePER3X)'&ZC#"aG@Pd+6m!!"KcG@GRCA0dC@3JF'&bG'PdD@pZ)(0THQ8 +!Fh"bG'a[EQGDG'KP)'ePE@pbH5"cDATP)(4SBA3JG'KP)'4PGQ9XEh"PFL"bC@0 +[E@ePEQ4c)(4SBA3JG'KP)'&`F'aTBf&dD@pZ)(0SEh9XC#"LC5"XBA9ZBfKPC#" +hDA4S!*!&%@&`F'aTBf&dD@pZ)'CTE'9cBA"`CKCPGQ9bH5"KF("XD@0KG'P[EL" +QD@aP!!!"!!"M3#-KG(P`C3!!!!%!!"0KF("XD@0KG'P[EL"`FQpMCA0cF'0KF#Y +")("bEf0PFh-JE'&eEQ0SC@3JCR*[E5"KEL"KF("XD@0KG'P[EL"QD@aP!!%3BA" +`E'PMBA4TEfiJCQPXC3"KF("QBA"`CMPdD'8JBA"`E'PMBA4TEfiJCQPXC5"QFQp +Y)(GSD@0S)(4SDA-JF(*[Bf9cFb"hBA-JE'&eEQ0SC@3!N!39BA"`E'PMBA4TEfi +JF(*[Bf9cFf9cF'0KF"PPGQ9bH5"KF("XD@0KG'P[EL"`FQpMCA0c!!%!!'0!)b& +dHA"P!!!!!3!!#@0[ER4KD@jPFQ0dER)K3@iJDA4PE5"dD'&d)'0[ER4KD@jc)'p +dD'9b)'PdC@ec!!J6BfpYF'aPG'9XH5"PH("KEQ4PC("PH'0LEfpX2NPc)(4SC5" +MEfjdB@PZCA)JB@jN)'&XE#"[CL"TG(-JBfKTE'4bC@iJEh"PEL"TEL"[GA4XD@j +P)(CTCAFr!"!!%'0[ER4KD@jPFL"hD@jNEhF!BhGZC'pLDL!KG'KP)'eKD@iJGfP +ZC'ph)'C[FL"dD'8JBfpZG'&TEQ9b!!!2C@jdDA*P)'0[ER4PER4cC@0dFfpLDL" +-G'KP)'9ZG'PbC5"MEfjdC@jdFb"[CL"dD'8JBfpZG'&TEQ9b,#"TEQ0XG@4TEQF +JG'KP)'0[ER4PER4c)'pQ)'PdFb"MD'PXC(*PEJ!!!!TPH("KEQ4KBQaP!("PH'& +LEfpX28Pc)(4SC5"MEfjdB@PZCA)JBf&`B@*XC5"[CL"LC@PZCb"PH("KEQ4PC#" +TER4[)'peG'aTEQ8JGQPPGcm!!!KPH("KEQ4PC!"`CAK`BQp[E#C*Fb"dD'8JBfp +ZG'&TEQ9b)'p`C@iJD@iJEh9dE'PZC5"fD@9h2`!3!"*`FQ9fD@peFb"XDA0d)(C +TCAF!FhCPGfa[EQGfG'KP)'aKFh3JEQpZ,@PMEfiJGQPPGb!SBRNJEQ&YC5`JBRN +JC'&dC5`JCA4M,LNJFf9XC@0dC@3JCQpb)(4SC5"MEfjdB@PZCA)J+'C[FQG[G(4 +PEL"KFb"cEfpZ)'&c)(4SC5"hD@jNEhFJDA-JBfa[Ff9N+3!!!!PcC@aPBh4TEfj +cC@aPEf*U)#&dD'8JFf9XC@0dD@pZ)(CTFfPLE'8JG'mJG'KP)(9cCA)3!!4fD@9 +h!("fCAGXEfjR4A4SC5"fD@9h)(0PE'9MG'9N)'C[FL"dD'8JBfpZG'&TEQ9b)#K +LH5"TBfpZ,#"LH5"ZB@eP,#"LH5"NBA4P,#"PG'-Z+4!!!!pNFh9d!!*TEQ4iEQ& +YC@&XD@%!!QPZC(KZB@ePBA"`CJ!#D@jNH'jKE@9MG'jb!!*TEQ4iEQ&YC@0MC(B +!!QPZC(KZB@ePC'&QD3!#D@jNH'jKE@9NEf0Q!!*TEQ4iEQ&YC@CTE'8!!QPZC(K +ZB@ePBfC[E!!#D@jNH'jKE@9QER4Q!!*TEQ4iEQ&YC@CcGA3!!QPZC(KZB@ePBfp +LDJ!#D@jNH'jKE@9cBh4b!!*TEQ4iEQ&YCA0ZC'B!!QPZC(KZB@ePFh4MF`!#D@j +NH'jKE@8+BfpZG'&TEQ9bF`"MG'jb$f9fCA*j)'0[ER4KD@jPFJ!"!!"M3#-KG(P +`C3!!!!%!!""MEfjdB@PZCA)JGfPZC'ph!'0hEQ3F35"hD@jNEhFJG'KKG#"MEfj +dB@PZFb"TG'9YF`!!"`PMEfjdB@PZCA*MG'jbEf*U)#KdD'8JBfpZG'&TEQ9b)(4 +SDA-JGfPZC'ph)'Pc)'p`C@jPC#"QFQpY!!!!"'4TFfX!Bf4TFfpLDL"!G'KP)'4 +TFfXJEfiJGfKTBfJJG'KP)'PdC@dJG'KTFb"hD@jNEhFJGf&c)'p`C@jPC#"QFQp +Y)'Pc)(0dEh*PC!!!!!CQEfaNCA)!BfC[E'pLDL!PG'KP)'C[E'4PFL"dD'Pc)(G +TEQ4[Gb"TFb"[F'9ZC@3JCR*[E3!!"'PdC@d!BfpLDQpLDL!MG'KP)'PdC@dJG'K +TFb"hD@jNEhFJDA-JEh"PEQ9N)'CbEfd!!"*`FQ9fD@peFb"XDA0d)(CTCAF!FhC +PGfa[EQGcG'KP)'aKFh3JEQpZ,@PMEfiJGQPPGb!SBRNJEQ&YC5`JBRNJC'&dC5` +JCA4M,LNJFf9XC@0dC@3JCQpb)(4SC5"hD@jNEhFJ+'C[FQG[G(4PEL"KFb"cEfp +Z)'&c)(4SC5"hD@jNEhFJDA-JBfa[Ff9N+3!!#A0PE'9MG'P[ER0PE'9[BQSJ)A4 +SC5"cC@aPBh4TEfiJGQPcD@*XC5"dEb"dD'8JGA0PFK!!"(CTCAF!F(CPGfa[EQG +#G'KP)(CTCAFJFf9XC@0dC@3JCQpb)(4SC5"hD@jNEhFJ+'*j)'PMEfiX)'*j)'j +KE@8X)'*j)'4KG'8X)'9dBbiT!"!!!!pNFh9d!!*TEQ4iEQ&YC@&XD@%!!QPZC(K +ZB@ePBA"`CJ!#D@jNH'jKE@9MG'jb!!*TEQ4iEQ&YC@0MC(B!!QPZC(KZB@ePC'& +QD3!#D@jNH'jKE@9NEf0Q!!*TEQ4iEQ&YC@CTE'8!!QPZC(KZB@ePBfC[E!!#D@j +NH'jKE@9QER4Q!!*TEQ4iEQ&YC@CcGA3!!QPZC(KZB@ePBfpLDJ!#D@jNH'jKE@9 +cBh4b!!*TEQ4iEQ&YCA0ZC'B!!QPZC(KZB@ePFh4MF`!#D@jNH'jKE@84BfpZG'& +TEQ9b)(GTEQ4[Gh0MGfjN&Q9fCA*j)'0[ER4KD@jPFL"hD@jNEhF!!!%!!'0!)b& +dHA"P!!!!!3!!$@0[ER4PER3JFh"KBf9NGfjN@%&XE#"hD@jNEhGc,#"TEQ0XG@4 +TEQFJG'KP)'4PFfYdEh!JGfPZC'ph)#M59fPZC'phdb"NEf9c)'j[G#"TEQ0XG@4 +P)(4SC5"NCA0VG'p`)(GTEQ4[GbN!N!81BfpZG'9ZG#"cF'&MCA-!C(GZC"0&GQ9 +bH5"MEfjdC@jd)(0`B@0P!!%!!'0!)b&dHA"P!!!!!3!!$@0[ER4bEf`JF'&ZC@a +MBf4f$d%JBfpZG(*[E#"`B@jPE!!0&Q0KE'0eE'&dC5"QEfaNCA)JFfPkCA-!FfC +cHQ*[Efa*+&CTCAGc+5""FQ8JCQpXC'9b)(0THQ9c)'0KE'0eE'&dC@3JB@jN)'4 +TFh"XBAPPC#"TEL"'D@jNCA)JE'PcG#"hD@jNEhGc2a!!$f0[E@ePER3JD'9KC'P +ZCh0MEfeLEfpX0LK@D@9hFbNJ3A*P)'0[E@ePER4c)'4TFh"XBAPPC#"TEL"'D@j +NCA)JE'PcG#"hD@jNEhGc2`!3!!aNBA4P)'KPB@4TEQF!Ff4KG'*[Efa!+&CTCAG +c+5""FQ8JE@pND@CTBf&dD@pZ)'4KG'9c)'4TFh"XBAPPC#"TEL"'D@jNCA)JE'P +cG#"hD@jNEhGc2`!3!"KNDA0V)'PZCQpbE@&dD@pZ)'KPB@4TEQF!Ff4TEQ*[Efa +*+&CTCAGc+5"*Fb"TEQC[FQeKG'P[EL"KBQpeG#"dD'8JGQpXG@eP)'4TFh"XBAP +PC#"TEL"'D@jNCA)JE'PcG#"hD@jNEhGc2a!!#@PMEfiJFfPkC@afDA0XEfjR1LK +@D@9hFbNJG'KP)(0THQ8JEfBJD@0[ER-JC'PcF'aKH@9N)'PZ)%CTEQ4PFL"XDA0 +d)(GTEQ4[Gh-!%!!-DfPZC#"SC@&ND@jR!(0VEQ4LEfpX2#K@D@9hFbNJ3A*P)'4 +[Bh9YC@jd)'YTEQ4c)'4TFh"XBAPPC#"TEL"'D@jNCA)JE'PcG#"hD@jNEhGc2`! +3!!eXB@*PE#"SC@&ND@jRFfaLE'*[Ef`d+&CTCAGc+5""FQ8JE'&LC@ac)'4TFh" +XBAPPC#"TEL"'D@jNCA)JE'PcG#"hD@jNEhGc2`!3!!acDATP)'KPB@4TEQF!Fh0 +THQ*[Ef`h+&CTCAGc+5""FQ8JCQPXC5"cDATPFb"NDA0`E'&jC@3JD@iJ4QPZC'9 +b)'aTFh3JGfPZC'phFa!!$(0ZBA!JG'mJCh*TC!"QCh*NBQp[E%mS9QPPGh-T)%& +bC5"TG'9YFb"KE(GKHA-JFfjKF("PC#"dEb"dD'8JEQ9KFQ9cG#"RFQPN)("[D@j +d)(GSC@iJG'KPH5"KFQ8JE@pfC@3r%!!1Fh4KCfGPFQ9N)'GbD@3!CR0dCf*[Ef` +K+&CTCAGc+5""FQ8JCh*TC#"XD@jPFb"cG'&RCf9bC@3r%!!2GQ9bFfP[EL"SC@& +ND@jRFhCbFf*[Ef`l+&CTCAGc+5""FQ8JCQPXC5"fCA*cD@pZFb"NDA0`E'&jC@3 +JD@iJ4QPZC'9b)'aTFh3JGfPZC'phFcm3!!PfD@9h)'C[ER4fCQjdE'pZCbmS9QP +PGh-T)(4SC5"TC#"[CL"dD'8JCQpZG#"eFf9N)'PZ)%CTEQ4PFL"fD@9hFa!!$RC +TCAFJCQpZG#"cDATP!(CQFhTXEfjR-5K@D@9hFbNJG'KP)(0THQ8JEfBJG'KP)'C +[ER3JGA0PC#"TEL"'D@jNCA)JGQPPGh-3!!!!$Q0[ER4bEf`JF'&ZC@ac!'0MC(B +6CACPFRNJBfpZG(*[E#"`B@jPE!!"!!"M3#-KG(P`C3!!!!%!!"0NCA0V)'&MBf9 +cFfpbH5"QD@aPC'&QD49")'4PFfXJB@0MCA0cEh*j)'CTE'8!N!38C'9cDb"KBf0 +PFh0[FRNJCQPXCA-!C'&QD4PPGQ9bH5"NCA0V)'&MBf9cFfpbH5"QD@aP!!%!!'0 +!)b&dHA"P!!!!!3!!$Q4PFfYdEh!YEf*UC@0d!'0NFfXc4'9cDh4[F#e[BQTPBh3 +JDA-JG'KP)'0XBA0c)'pQ)(4SC5$5C'9cDh4[F0-JEf*UC@0d!!)-Fh4KFR4eF#" +NDA0V!(0NFfY[BQSJ%(4SC5"cG'&bG(9`)'4TFfX!!!!&G(*KFfKdFR0SEf*U)!P +dD'8JG(*KFfJ!!!!2C(0eG!!#D@jNH'jKE@9KE'PK!!*TEQ4iEQ&YC@&`F'B!!QP +ZC(KZB@ePBh4ZFJ!#D@jNH'jKE@9MBf4f!!*TEQ4iEQ&YC@4KCQN!!QPZC(KZB@e +PC'pMCJ!#D@jNH'jKE@9QD@aP!!*TEQ4iEQ&YC@0QEf`!!QPZC(KZB@ePCQjdCJ! +#D@jNH'jKE@9QFh9d!!*TEQ4iEQ&YC@0[BQS!!QPZC(KZB@ePFf0dFJ!#D@jNH'j +KE@9cEQ4Q!!*TEQ4iEQ&YCA0dBh-!!QPZC(KZB@eP"'4TFfX!Bf4TF`C")'4TFfX +!!!8)Bf&`B@0TG(N!Bf&`B@a[EQFdG'KP)(4[G'&X)'jeE@*PFL"[CL"LHA4PFb! +SCR*PC5"[FL"eFf9N+5"[EL"dD'8JC'PcD`!!!!PPDQ9MG'&LE'9TFf9UBQp[E$G +$B@iJG'KP)'ePC'PK)'0KEL"LC5"PDQ9MG'9N)#KQE'p`F'PPFb`J3d3RFb`JFhP +aG@9cG#Nr!!!+CR*PC5"cF'&MC3"QFR0`E'pZCbPdD'8JER9YBQ9b)'pQ)'CbC@8 +JBRPdCA-JE'9QG#"[EL"dD'8JC'PcD`!!$'a[Bf&X)(C[E(9YC3"TFh*fBQp[E$Y +*Fb"dD'8JE@9ND@%JDA-JB5"XEf0KE#"fEfaeE@8J+(*KG'KPFL"dD'&Z)'%JCQP +XC5"cCA*fCA)T2`!!"h0dBA*dGA"TFh4NBQp[E"Y*Fb"dD'Pc)'4TFfXJG'KP)'* +[Eh3JC'PcDcm!!!!2C(0eG!!#D@jNH'jKE@9KE'PK!!*TEQ4iEQ&YC@&`F'B!!QP +ZC(KZB@ePBh4ZFJ!#D@jNH'jKE@9MBf4f!!*TEQ4iEQ&YC@4KCQN!!QPZC(KZB@e +PC'pMCJ!#D@jNH'jKE@9QD@aP!!*TEQ4iEQ&YC@0QEf`!!fPZC(K*4#!JEQ&YC@C +ZG'B!!QPZC(KZB@ePCR0eG!!#D@jNH'jKE@9MEf*U!!*TEQ4iEQ&YCA0MG()!!QP +ZC(KZB@ePFfjNCJ!#D@jNH'jKE@9cG'0c!!*TEQ4iEQ&YC39NDA0VFf0NDA-+CAC +PFRNJC'PcD`!!!3!!Bd!M)A4jF'8!!!!"!!!0C'pMG@ePER3JCQPXC@4[BfB235" +NEf0eE@9ZG#"QD@aP!*!%$Q4[Bh9YC@jd)'CTE'9c!'4[BfB6CACPFRNJC'pMG@e +PER3JCQPXC3!"!!"M3#-KG(P`C3!!!!%!!!4QD@aP!'CTE'8'35"QD@aP!!!'$'0 +bC@&dEh)JG(P`C3"QBh*dG(P`C6adD'8J6e08HA"P)'PNC@jdD@CjD@jR)(4SC5" +KF("XD@0KG'P[EL"dD'&d)'0bC@&dC@3JG'KP)'PdC@d!%!!*CQPXC5"dHA"PCQP +dF(4jF'8pG'KP)%p69(P`C5"TC'9ZG'PQH@PZCb"dD'8JG(P`C5"[CL"NBA4K)'0 +[ER4KD@jPC#"TEL"dD'8JDA4PE4!!"Qa[BfYPC!"TFfaVBQp[E"0*Fb"dD'8JCQP +XC5"XEf0VC@3r%!!2F(*[C(9MG#"fCA*cD@pZGQ9b-QPdH(4)G'KP)(CPFR0TEfi +JEfBJG'KP)("bEf4eBh3J+(CTFfPLE'8JBA3JG'KP)(4[F#"[CL"dD'8JdNGPG#" +*EQC[db"ND@&XEfFT!!!!#R0dBA4TEfjPFRN!F(0`C'*[Ef`G5A-JG'KP)'PdC@d +JB5"cG'&dD@pZCA*j)("KC$m3!!GfCA*cD@pZGQ9bFfPdH(4)G'KP)(CPFR0TEfi +JEfBJG'KP)'CTE'8J+(CTFfPLE'8JBA3JG'KP)'*[G(4[E5"[CL"dD'8JdNGPG#" +*EQC[db"ND@&XEfFT!*!&"@CTE'9cCQPXC3TPGQ9bH5"QD@aP!!!"!!"M3#-KG(P +`C3!!!!%!!!CQEfaNCA)!BfC[E!K")'C[E'4PFJ#3"!pNFh9d!!*TEQ4iEQ&YC@& +XD@%!!QPZC(KZB@ePBA"`CJ!#D@jNH'jKE@9MG'jb!!*TEQ4iEQ&YC@0MC(B!!QP +ZC(KZB@ePC'&QD3!#D@jNH'jKE@9NEf0Q!!*TEQ4iEQ&YC@CTE'8!!QPZC(KZB@e +PBfC[E!!#D@jNH'jKE@9QER4Q!!*TEQ4iEQ&YC@CcGA3!!QPZC(KZB@ePBfpLDJ! +#D@jNH'jKE@9cBh4b!!*TEQ4iEQ&YCA0ZC'B!!QPZC(KZB@ePFh4MF`!#D@jNH'j +KE@8(CQpXC'9bFf0QEf`-CACPFRNJCQpXC'9b!!!"!!"M3#-KG(P`C3!!!!%!!!P +QEfjd)'CTE'9QER4Q#d%JCQpZG#"QD@aP!*!%#QC[ER3JCQPXCA-!CQjdCJpPGQ9 +bH5"QEfjd)'CTE'8!!3!!Bd!M)A4jF'8!!!!"!!!0CQpZG#"cG@PdBf&cC@CcGA3 +235"QEfjd)(0eDA4MBA0P!!!!!@0[BQS!!QPZC(KZB@eP$QC[ER3JFh9TG'0KFf9 +c!'CcGA36CACPFRNJCQpZG#"cG@PdBf&cC3!"!!"M3#-KG(P`C3!!!!%!!!9RFQp +eF(0RFR!Y35"(FQpeF#"TEL"dD'8J9A0PFR-JB@jN)%GbEh9`Fb"MEfjdFQpX)(" +KEQ9X!!8'BQpeEQ4c!("LEQ4aC(*d)h4SC5"LEh9ZC'PZCb"bC@0dB@jRE'8JEfB +JG'KP)'GbEh9`%!!%D@0[EJ"TD@eRD@CKE4adD'8JD@0[EL"LDA4YBA!JEfBJG'K +P)'GbEh9`!"!!#faKBQ9X)'PZC'9iE'&LD@a[EQF@G'KP)'aKBQ9X)'pQ)(4SC5" +RFQpeF!!3!!4ZB@eP!("ZB@eTG(Kd&A4SC5"ZB@eP)'pQ)(4SC5"RFQpeF"!!#(" +[FfPdD@pZ!("[Ffj44("d-R4SC5"`Eh0TG'P[EL"[CL"dD'8JCh*[GA!JGfPdD'P +Z)'PdFb"`BA*PER3JGfPZC'ph!"!!!!!'Ch*[GA"c!(0RFR!,CACPFRNJCh*[GA! +!!3!!Bd!M)A4jF'8!!!!"!!!5D@jQEh*YBA4TEfiJGfPZC'ph!'PhEQ3Y3@iJD@j +QEh*YBA4TEfiJGfPZC'ph)#K[F'9ZC@3JBRNJdNGPG#"*EQC[bG-T!!m(BfpYE@9 +ZG'0[EA4TG(Kd#h4SC5"MEfeYC@jd%!!0Bh*PBA4TEfiJC'&dC@0bG'4XC(3J*R4 +SC5"NBA4P)'pZ)(GSD@0S)(4SC5"TG'9Y)(GKFb"MFQ9KG'9N!!!!"'PMEfi!D@P +YCfPQB@dEG'KP)'PMEfiJBQPdE@&`)'pQ)(4SC5"TG'9Y%!!%DA4PE3"MEf*UEf* +U)#4dD'8JDA4PE5"dD'Pc)(GTEQ4[Gb"hBA-JEh"PEQ9N)'CbEfd!!!!'E'pMDf9 +N!'PcE'YLEfpX%dPc)(4SC5"TG'9Y)'a[BfYPC$m3!"CYD@jTEA9Y)("KFR4TG'P +[EL"cDATP!'e`FR4XEfjR5h4SC5"cE@&XE'9cG#"YC@e[FRNJFfPkC5"dD'&d)(4 +SC5"KF("XD@0KG'P[EL"MB@iJF'pcFfPLE(NJBQ8JE'&eEQ0SC@3JGfPdD"!!%@e +[C'PQD@0KG'P[EL"NBA4PE@pNC'aNG#!XG'KP)'4KG'8JEfiJGfKTBfJJG'KP)'P +dC@dJGf&c)'aKFh3JE@pND@CTC@3!!!!1F'&bG'PdD@pZ)(0THQ8!BA"`G'a[EQF +kG'KP)'ePE@pbH5"cDATP)(4SBA3JG'KP)'&`F'aTBf&dD@pZ)(GTE'`JBQ8JE'& +eEQ0SC@3JGfPdD!!3!!e`D(PcD@0KE#"cDATPF'KjFfa[EQFTG'KP)'&MG(9KE#" +cF'&MC5"eFf9N)'*j)(4SC5"TG'9Y)'pZ)'4TFfX!!!p`FQpNG@0d)(CPFR0TEfj +fCA)bDA4iG%KdD'8JGQ9bFfP[EL"[CL"dD'8JF(*[C(9MG#!SGQPcD@*XC5"KG#" +dD'8JG'p`)'pQ)(4SC5$54f9d)%PZCQr6)'4TB@a[CbN!!!!%FfPkC3"`G(0kE'p +ZCaadD'8JE'pRD@0KE#"cDATP)'pQ)(4SC5"TG'9Y!!!!#R0dBA4TEfjPFRN!F(0 +`C'*[Ef`G5A-JG'KP)'PdC@dJB5"cG'&dD@pZCA*j)("KC$m3!"KcG@GRCA0dC@3 +JF'&bG'PdD@pZ)(0THQ8!Fh"bG'a[EQGDG'KP)'ePE@pbH5"cDATP)(4SBA3JG'K +P)'4PGQ9XEh"PFL"bC@0[E@ePEQ4c)(4SBA3JG'KP)'&`F'aTBf&dD@pZ)(0SEh9 +XC#"LC5"XBA9ZBfKPC#"hDA4S!!!!"hCPFR0TEfjfCA*cDA4iG%KdD'8JGQ9bFfP +[EL"[CL"dD'8JCQPXC5!SGQPcD@*XC5"KG#"dD'8JBQpdG'pY)'pQ)(4SC5$54f9 +d)%PZCQr6)'4TB@a[CbN!!!!8Gf&bEL"LC@C[FQ8JC@e`G(PTEQF!Gf&bEQ*[Ef` +f5A-JB5"ND@&XEfFJC'PcF'aKH@9N)(GSC@iJdN9YF(4j)(4bBA0SbG-JDA-JFf9 +XC@0dC@3r!"!!!!!6D@jQEh*YBA4TEfiJGfPZC'phFfPhEQ3BCACPFRNJD@jQEh* +YBA4TEfiJGfPZC'ph!!!"!!"M3#-KG(P`C3!!!!%!!!4TG'9Y!'0[BQS(3@iJDA4 +PE3!6"Q*[G@jNF`"`BQjNF@4bG#*dD'8JBQpeEQ4TEQFJFQ9MG'&ZCfaP)'pQ)(4 +SC5"TG'9Y!"!!"f0[E@ePER4MEfedDA4iG$TdD'8JBfpYE@9ZG#"NDA0`E'&jC@3 +JD@iJG'KP)0*(CA3J5@jQEp-JGfPZC'ph)'pQ)(4SC5"TG'9Y!"!!#@0[ER4KD@j +PFQ0dER*[BQSJ'R4SC5"MEfjdB@PZCA)JEfBJG'KTFb"TG'9Y!!!!$@0[ER4PER3 +JFh"KBf9NGfjNC(GZC$&dD'8JGfPZC'ph)(4SBA3JGfpeE'3JEh"PEL"TCL"dD'8 +JDA4PE5"hBA-JEh"PEQ9N!!!0Bh*PBA4TEfiJC'&dC@0bG'4XC(3J*R4SC5"NBA4 +P)'pZ)(GSD@0S)(4SC5"TG'9Y)(GKFb"MFQ9KG'9N!!!!"'4TFfX!Bf4TFfpLDL! +NG'KP)'4TFfXJEfiJGfKTBfJJG'KP)'PdC@dJDA-JFh4[FQ9N!!!!"QC[E'4PFJ" +MCQpXEf*U)#CdD'8JCQpXC'9b)'PZ)(GSD@0S)(4SC5"TG'9Y)'Pc)(0dEh*PC!! +!!!4TBfpZ!'PTE@GTCQ&Y'h4SC5"TBfpZ)'*TG'eKF#"[CL"dD'8JDA4PE4!!!QP +N!%P%)#"XEfjR(Q&Z)'PN)(4SBA3JD@4PER4TCQPPFb"dD'8JDA4PE3!!!"*TEQC +[FQeKG'P[EL"hD@jNEhF!DAGZC'pLDL!MG'KP)'PZCQpbE@&dD@pZ)(GTEQ4[Gb" +QEh)JG'KP)'PdC@d!!!4VD@jN!'YTEQ4TG(Kd&(4SC5"VD@jN)'pQ)(4SC5"TG'9 +Y!!!!#faKBQ9X)'PZC'9iE'&LD@a[EQF9G'KP)'aKBQ9X)'pQ)(4SC5"TG'9Y%!! +4E@pND@CTBf&dD@pZ)'4KG'9YEf4NE'4d)#adD'8JC'&dC5"[EL"hD'PMD#"dD'8 +JDA4PE5"hBA-JE'&cG#"YEf4TCQPPC!!!!!4ZB@eP!("ZB@eTG(Kd&(4SC5"ZB@e +P)'pQ)(4SC5"TG'9Y!"!!$A"SHA0TBf&X)(0THQ9`D(PcE'pZCbPdD'8JB@0dG@& +X)(0`B@0P)(9cC@3JBRNJG'KP)'PdC@dJEfiJC'PcD`!!#("[FfPdD@pZ!("[Ffj +44("d-A4SC5"`Eh0TG'P[EL"[CL"dD'8JDA4PE5"hDA4SD@iJDA4c)("KFQ9ZG#" +hD@jNEhF3!!KcC@aPBh4PC!"TFh0XBQp[E"9*Fb"dD'8JDA4PE5"cC@aPBh4PC$m +3!!4cDATP!("dFhTXEfjR((4SC5"XEfGTBf&X)(0THQ8JEfBJG'KP)'PdC@d!!!! +'GfPZC'ph!'0hD@jMGfPZ-A4SC5"hD@jNEhFJG'KKG#"hEh9XC#"[F'9Z)'PQ)(4 +SC5"TG'9Y)(GKFb"[F'9ZC@3!N!3&DA4PEA0MEf*U#Q9fCA*j)'PdC@d!!!%!!'0 +!)b&dHA"P!!!!!3!!"h"bEf0PFh0`FQ0c)d%JF(*[Bf9cFb"bG@jZD@jR)'pZ)(4 +SDA-J6@&MD@jdEh0S!!S-Bh*PBA4[FL"dHA"P!'CMFR4dHA"P)(4SC5"MFQ9KG'p +b)(4jF'8JEfBJG'KTFb"`FQpMCA0c!!!!"'CTE'8!CQPXC@pLDL!MG'KP)'CTE'8 +JG'KKG#"XBA9ZBfKPC#"dD'Pc)("bEf0PFh-!!!PQD@aP)(4jF'9QDA4`G(P`C64 +dD'8JCQPXC5"dHA"P)'pQ)(4SC5"QD@aP)(4SBA3JE'&eEQ0SC@3JG'KTFb"`FQp +MCA0c!!!!#@CbEfjdE@pcG("TFfCLEfpX)NPc)(4SDA-JG'KP)'CbEfjdE@pcG#" +KF("XD@0KG'P[EMm!%!!%EQ&YC3"`EQ&YDA4iG"GdD'8JEQ&YC5"[CL"dD'8JF(* +[Bf9cF`!!$R"KFR4TG'P[EL"cDATP!'&`F(4XEfjR3A4SC5"cDATP)'pQ)(4SC5" +`BA*dDA4TEfiJG'KKG#"dD'Pc)'&`F'aTBf&dD@pZ)(GKFb"XBA9ZBfKPC#"hDA4 +S!!!8F'&bG'PdD@pZ)(0`B@0P)(9cC@3!F(9cC'a[EQFdG'KP)'jeE@*PFL"[CL" +LHA4PFb"MGA*bC@jdE(NJGA0PC#"TEL"dD'Pc)("KFR4TG'P[EJ!!!!ebC@e[G'8 +JCACPER4cFQ9fG'*[Ef`S9fPXE#"dD'Pc)("bEf0PFh-JB@0MCA"dFb"bC@e[G'8 +JCACPER4c2`!!!!TcBh*TF(4KBQaP!'PcB@*LEfpXDdPc)(4SDA-JF(*[Bf9cFb" +SD@GS,@aPGQ9X)'9fC@jd)'&hBA*P)#KKBf0PF(4c)'p`C@iJBA"`E'PMBA4TEfi +X)'p`C@iJC'pMG@ePER3X)("bD@jd)'4[Bh9YC@jd,#"KEQ3JFA9TG#Nr!!!(GQP +cD@*XCA"fDA0LEfpX(dPc)(4SDA-JF(*[Bf9cFbFJE'&jCA)JGQPcD@*XC6m3!!! +!#A"bEf0PFh0PFh"bBh-0CACPFRNJF(*[Bf9cF`!"!!"M3#-KG(P`C3!!!!%!!"* +cD'&bB@*XC5"MEfjdB@PZCA)!Ff0dFM*")'0[ER4KD@jPFL"dD'&d)'eKH5"LC5" +cD'&bC@3J+'4TFfYc)'&ZC#"QEfaNCA*c+3!!#`KPH("[FR4PC!"cCAK`BQp[E$9 +*Fb"dD'Pc)'C[E'4PFL"K)(0SBA*P)("[D@jd)'pb)'PZFfPNC5"K)(0SBA*P)(" +[D@jd2`!!"@GbEh9`FfGbF'PdH(3hG'KP)(9cCA)JEh)JCh*[GA!JG'KKG#"SBA- +JFh"PBfPKE#"KBf0PFh-JG'mJG'KP)'C[E'4PFK!!%'GbEh9`)("bDACTE'9RCA- +!Ch"`FR"bDABrG'KP)(0PC5"QEfaNCA*c,h0PC5"QD@aPFbpYB@YP)'0SB@jRCA- +JF(*TGQPXC@GPFb"QEh)JG'KP)'GbEh9`%!!3Ch9PFh3JF(*TGQPXC@GPF`"RFh4 +`F(*TGMjdD'8JFf9P)'C[E'4PFR-[Ff9P)'CTE'9c,feKDf8JBfKKEQGPFb"`FQP +fD@aPCf9c)'C[FL"PGQ9bH@pZC3!3!"4TEQKPFQPdC@3JF(*TGQPXC@GPF`"TF(* +fBQp[E&&"FQ8JG'KP)("bDACTE'9RCA-JEfBJG'KTFb"TG'9Y)'&XGf&jFb"dD'8 +JFf&YC5"KFb"dD'8JBfpZG'&TEQ9b)'Pd)'Pc)(0dEh*PC#"TEMm3!!GYEh9ZG'9 +NFfe[G@*[Ef`d5A-JG'KTFb"QEfaNCA)JE@peER4PC#"[EL"KEQpdD'9b)'eKBfK +TEQ8RFb"NCA0VG'p`2`!!!!9[GfjPFR0[GfjTG(Kd(R4SC5"eFf9b)(4SBA3JEhG +ZFb"dD'Pc)'C[E'4PFJ!3!""[GfjPFL"`FQPfD@aPCf9c!'phER*`FQPf2h4SC5" +cC@8JCQpXC'9bFbpcC@8JCQPXCA-[E@&VC5"MD'&ZCf9c)("bDACTE'9RCA-JCQp +b)(4SC5"[GfjPFK!!#A"bEh4PBh4PC(0`FQpLEfpX2%Pc)'0[ER4KD@jPFL"`FQp +dC@0dC@3JCR*[E5"LC@PZCb"YEhCPC#`JFQ9ZB@ePC#"[FL"NC@aPG'9N2`!3!!C +cD'&bC@3!FfKKFQ*[Ef`E5A-JBfpZG'&TEQ9b)'%JFfKKFQ8JF'pTER3r%!!1FfK +KFQPZCb"hD@jNEhF!FhGZC'pLDL!NG'KP)(0SBA*TEQFJGfPZC'ph)'C[FL"dD'8 +JBfpZG'&TEQ9b!*!%$f4cGA3!!QPZC(KZB@ePB@aTB3!#D@jNH'jKE@9KF("Q!!* +TEQ4iEQ&YC@0dER)!!QPZC(KZB@ePBf0NGJ!#D@jNH'jKE@9NB@CT!!*TEQ4iEQ& +YC@4[BfB!!QPZC(KZB@ePCQPXC3!#D@jNH'jKE@9MCQpX!!*TEQ4iEQ&YC@CZG'B +!!QPZC(KZB@ePCR0eG!!#D@jNH'jKE@9MEf*U!!*TEQ4iEQ&YCA0MG()!!QPZC(K +ZB@ePFfjNCJ!#D@jNH'jKE@9cG'0c!!*TEQ4iEQ&YC40cD'&bB@*XC5"MEfjdB@P +ZCA*cFf0dFKKPGQ9bH5"cD'&bB@*XC5"MEfjdB@PZCA)!!!%!!'0!)b&dHA"P!!! +!!3!!%R0SBA*TEQFJF(*TGQPXC@GPF`"`FQPf'd%JFf9d)'pQ)(0SBA*TEQFJF(* +[F'9bG'PPF`!$$'eKDf8JBfKKEQGPF`"`FRChBQp[E"T`FQPfD@aPCf9c)(4[)'e +KDf8JBfKKEQGPF`!3!!PcC@8JCQPXCA0`FRCbBQp[E"G`FQPfD@aPCf9c)(4[)(0 +PC5"QD@aPFa!!#h0PC5"QEfaNCA*cF(*fFf*[Ef`CF(*TGQPXC@GPFb"dEb"cC@8 +JCQpXC'9bFa!!!!!1FfKKFQPZCb"hD@jNEhF!FhGZC#G")(0SBA*TEQFJGfPZC'p +h)#K[F'9ZC@3JBRNJdP0SBA*TEQI*dbN!$JPMEfjdB@PZCA*MG'jbEf*U)#jdD'8 +JBfpZG'&TEQ9b)(4SBA3JG'KTFb"hD@jNEhFJGf&c)'p`C@jPC#"QFQpY!!!!#'9 +iF'pbG'9N!(0PH("LEfpX1%Pc)(4SDA-JBfpZG'&TEQ9b)'%JFfKKFQ8JF'pTER3 +JEh)JD@jcD@4P)'%JFfKKFQ8JF'pTER3r!!!!"QC[E'4PFJ"MCQpXEf*U)#YdD'8 +JCQpXC'9b)(4SBA3JG'KTFb"hD@jNEhFJGf&c)'p`C@jPC#"QFQpY!!!&Ch*[GA" +cCh*`DA4iG$TdD'8JGA0PFL"[FL"RFQpeF#"dD'&d)'KKFb"cF'9MD@&X)'&MBf9 +cFb"dEb"dD'8JBfpZG'&TEQ9b!"!!%'GbEh9`)("bDACTE'9RCA-!Ch"`FR"bDAB +rG'KP)(0PC5"QEfaNCA*c,h0PC5"QD@aPFbpYB@YP)'0SB@jRCA-JF(*TGQPXC@G +PFb"QEh)JG'KP)'GbEh9`%!!3Ch9PFh3JF(*TGQPXC@GPF`"RFh4`F(*TGMjdD'8 +JFf9P)'C[E'4PFR-[Ff9P)'CTE'9c,feKDf8JBfKKEQGPFb"`FQPfD@aPCf9c)'C +[FL"PGQ9bH@pZC3!3!"4TEQKPFQPdC@3JF(*TGQPXC@GPF`"TF(*fBQp[E&&"FQ8 +JG'KP)("bDACTE'9RCA-JEfBJG'KTFb"TG'9Y)'&XGf&jFb"dD'8JFf&YC5"KFb" +dD'8JBfpZG'&TEQ9b)'Pd)'Pc)(0dEh*PC#"TEMm3!!4TG'9Y!'0[BQT[BQSJ+A4 +SC5"TG'9Y)(4SBA3JG'KTFb"hD@jNEhFJGf&c)'p`C@jPC#"QFQpY!!!(E@peER4 +PC(0YEh9LEfpX0dPc)(4SDA-JBfpZG'&TEQ9b)'e[G@jdC@3JEfiJB@j[G'KPFL" +YB@0SD@jP*h-JC'9cDh4[F$m!!!9[GfjPFR0[GfjTG(Kd)(4SC5"eFf9b)(4SBA3 +JEhGZFb"dD'8JBfpZG'&TEQ9b!"!!%'phEQ9b)("bDACTE'9RCA-!EhGZFR"bDAB +rG'KP)(0PC5"QEfaNCA*c,h0PC5"QD@aPFbpYB@YP)'0SB@jRCA-JF(*TGQPXC@G +PFb"QEh)JG'KP)'phEQ9b%!!*F(*[G'9MG'9NFh"bEf*[Ef`m5A-JBfpZG'&TEQ9 +b)("bEh4PBh4PC#"QFQpY)'*PD@jR)'e[GQ9N,#"bC@jKE@9N)'pb)'4PE'9dC@3 +r!"!!%R0SBA*KBQaP)'0[ER4KD@jPFJ"cBh4bEf*U)$GdD'8JFfKKFQ&LE'8JBfp +ZG'&TEQ9b)(4SBA3JG'KTFb"hD@jNEhFJGf&c)'p`C@jPC#"QFQpY!!!'FfKKFQ9 +N!(0SBA*LEfpX'dPc)'0[ER4KD@jPFL"K)(0SBA*P)("[D@jd2a!!!!!2FfKKFQP +ZCb"hD@jNEhGcFhGZC"4PGQ9bH5"cD'&bD@jR)(GTEQ4[G`!!!3!!Bd!M)A4jF'8 +!!!!"!!!+FfpeEQ3JCQPXC3"cEQ4Q)94SDA-JBfaKFh-JFQ9`FQ9cC@jdFb"cEh9 +ZC#"QD@aPF`#3"!YcEh9ZC#"QD@aPFh0ZC'B3CACPFRNJFfpeEQ3JCQPXC3!!!3! +!Bd!M)A4jF'8!!!!"!!!0Fh4KG(9c)(GTEQ4[Gh&hEQ4A9'KPFf8JGfPZC'phFb" +KFQ8JF(*[Ch*PFh-JC'PKE'pRFb!SBfp`H5"hD@jNEhFX)(*PBR9TE'3JC'9cDh4 +[F#"NBA4KBQ&cC5`JC@e`G(NJG(*KFfJT!*!%$R0dBA4eFb"hD@jNEhGc!(&hEQ3 +6CACPFRNJFh4KG(9c)(GTEQ4[G`!"!!"M3#-KG(P`C3!!!!%!!!KcG@PdBf&cC3" +cG'0c)8%JCQpZG#"[FL"NCA0V)'&MBf9cFfpbH5"cG@PdBf&cC3!!!!&MEf*U!!* +TEQ4iEQ&YC3PcG@PdBf&cCA0cG'0c$Q9fCA*j)(0eDA4MBA0P!!!"!!"M3#-KG(P +`C3!!!!%!!!adFQ&cD#e[BQTPBh3!Bh4bFbp8FQ&cD#e[BQTPBh3JDA-JG'KP)'0 +XBA0c)'pQ)(4SC5$5G(*KFfM6)'pLDQ9MG!!"&(GKFQiJBQ9QEh*P)'9YF(4jD@j +R!(GKFQjLEfpX0NPc)'%JC'PKE'pR)'4TFh"XBAPPC#"hD'9Z)0*&EA"dH5"dFQ& +cD-R6)'Pc)(0PE'9MG'9N2`!3!!!2C(0eG!!#D@jNH'jKE@9KE'PK!!*TEQ4iEQ& +YC@&`F'B!!QPZC(KZB@ePBh4ZFJ!#D@jNH'jKE@9MBf4f!!*TEQ4iEQ&YC@4KCQN +!!QPZC(KZB@ePC'pMCJ!#D@jNH'jKE@9QD@aP!!*TEQ4iEQ&YC@0QEf`!!QPZC(K +ZB@ePCQjdCJ!#D@jNH'jKE@9QFh9d!!*TEQ4iEQ&YC@0[BQS!!QPZC(KZB@ePFf0 +dFJ!#D@jNH'jKE@9cEQ4Q!!*TEQ4iEQ&YCA0dBh-!!QPZC(KZB@eP"(9cCA)!Bh9 +cC5a")&9cCA)JD@iJG'KP)&9cCA*c)'&ZC#"(FQpeF(-JBfpZG(*[E#"`B@jPE!! +!"3CLEh9ZC(-!F'*ZC(&NFR3LG'KP)'*[G@jND@jR)(*PBh4KEQGXC5"[CL"dD'8 +JGA0PFJ!3!!4TBfpZ!'PTE@GTCQ&Y'h4SC5"TBfpZ)'*TG'eKF#"[CL"dD'8JGA0 +PFK!!#faKBQ9X)'PZC'9iE'&LD@a[EQF9G'KP)'aKBQ9X)'pQ)(4SC5"eFf9b%!! +%EQ&YC3"`EQ&YDA4iG"4dD'8JEQ&YC5"[CL"dD'8JGA0PFJ!3!!K`Eh0TG'P[EJ" +`Eh0Z884`G$&dD'8JF'pcDA4TEfiJEfBJG'KP)(9cCA)JGfPdD'PZ)'PdFb"`BA* +PER3JGfPZC'ph%!!!!!9eFf9bFf0eFf8+CACPFRNJGA0PFJ!!!3!!Bd!M)A4jF'8 +!!!!"!!!'GfPZC'ph!'0hD@i)35"hD@jNEhF!N!8(GfPZC'phFf0hD@i-CACPFRN +JGfPZC'ph!!!"!!"M3#-KG(P`C3!!!!%!N!8#GRGLH3!%#@0[EQCXD@0dFf0QE'- +!!!jPH'PcG'PZCb"TG'9YF`"PH(0T!!!+FfeKE'`JD@0[EJ"cE@PM!!!$B@aXDhP +KE!!!Ch0PEJ!)!d039A"bEf-!!!0'8&9QF(8J!!!$68e9E@ee)!!!#'KKFQ4hBA* +P!'KNGh)!!""[F'9bBA4TEQFJFhPcG'9Y!'pc)#!!!!acEh9ZC#"cHA0dC@d!Ffj +N)!!!%'ePE@pbH5"KGQ&TE'&LE'8!E(*KE3!!%'ePE@pbH5"TER0dB@aXC@3!FQ& +Y)!#3"3%!!!!"!!!!BVS!!''k!!!"#3$%HY344!!!!"`!qJ!+3Nj%6!!!!&T*3di +M!!!!CP0*@N8!!!"b4P*&4J!!!(jTBh-M!!!!LQPME$J!!!#@D@0X0!!!!+*TBh- +i!!!!VQPMFc3!!!#kB@9dC3!!!-C3@94R!!!!dJ#!rrm!!!%G!-4jV!%Xrrm!N!A +%H'$rN!3!!!%%!-4hV!#!rrm!!!%5!-4iC!%Xrrm!!!%p!-4i&!%Xrrm!!!'"!-4 +i'!%Xrrm!!!@&!-4i)!%Xrrm!!!H*!-4i%!%Xrrm!!!L0!-4i(!!!rrm!!!N4!*! ++BE8!a'5-$NphEQ9b)(*PFfpeFQ0P6M`: diff --git a/Mac/Lib/test/tae.py b/Mac/Lib/test/tae.py new file mode 100644 index 00000000000..73c36b92418 --- /dev/null +++ b/Mac/Lib/test/tae.py @@ -0,0 +1,112 @@ +# The oldest AppleEvent test program. +# Its function has been overtaken by echo.py and tell.py. + +import AE +from AppleEvents import * +import Evt +from Events import * +import struct +import aetools +import macfs +import sys +import MacOS + +MacOS.EnableAppswitch(0) + +def aehandler(request, reply): + tosend = [] + print 'request:', aetools.unpackevent(request) + param = request.AEGetParamDesc(keyDirectObject, typeWildCard) + if param.type == typeAEList: + n = param.AECountItems() + print 'List has', n, 'items' + for i in range(1, 1+n): + type, item = param.AEGetNthDesc(i, typeFSS) + data = item.data + print 'item', i, ':', type, item.type, len(data), 'bytes' + vol, dir, fnlen = struct.unpack('hlb', data[:7]) + filename = data[7:7+fnlen] + print 'vol:', vol, '; dir:', dir, '; filename:', `filename` + print 'full path:', macfs.FSSpec((vol,dir,filename)).as_pathname() + tosend.append(item) + else: + pass + print 'param:', (param.type, param.data[:20]), param.data[20:] and '...' + if tosend: + passtothink(tosend) + + +def passtothink(list): + target = AE.AECreateDesc(typeApplSignature, 'KAHL') + event = AE.AECreateAppleEvent(kCoreEventClass, + kAEOpenDocuments, + target, + kAutoGenerateReturnID, + kAnyTransactionID) + aetools.packevent(event, {keyDirectObject: list}) + reply = event.AESend(kAENoReply | kAEAlwaysInteract | kAECanSwitchLayer, + kAENormalPriority, + kAEDefaultTimeout) + #print "Reply:", aetools.unpackevent(reply) + return + event = AE.AECreateAppleEvent(kCoreEventClass, + kAEOpenApplication, + target, + kAutoGenerateReturnID, + kAnyTransactionID) + reply = event.AESend(kAENoReply | kAEAlwaysInteract | kAECanSwitchLayer, + kAENormalPriority, + kAEDefaultTimeout) + +def unihandler(req, rep): + print 'unihandler' + aehandler(req, rep) + +quit = 0 +def quithandler(req, rep): + global quit + quit = 1 + +def corehandler(req, rep): + print 'core event!' + parameters, attributes = aetools.unpackevent(req) + print "event class =", attributes['evcl'] + print "event id =", attributes['evid'] + print 'parameters:', parameters + # echo the arguments, to see how Script Editor formats them + aetools.packevent(rep, parameters) + +def wildhandler(req, rep): + print 'wildcard event!' + parameters, attributes = aetools.unpackevent(req) + print "event class =", attributes['evcl'] + print "event id =", attributes['evid'] + print 'parameters:', parameters + +AE.AEInstallEventHandler(typeAppleEvent, kAEOpenApplication, aehandler) +AE.AEInstallEventHandler(typeAppleEvent, kAEOpenDocuments, aehandler) +AE.AEInstallEventHandler(typeAppleEvent, kAEPrintDocuments, aehandler) +AE.AEInstallEventHandler(typeAppleEvent, kAEQuitApplication, quithandler) +AE.AEInstallEventHandler(typeAppleEvent, typeWildCard, unihandler) +AE.AEInstallEventHandler('core', typeWildCard, corehandler) +#AE.AEInstallEventHandler(typeWildCard, typeWildCard, wildhandler) + + +def main(): + global quit + quit = 0 + while not quit: + ok, e = Evt.WaitNextEvent(-1, 60) + if ok: + print 'Event:', e + if e[0] == 23: # kHighLevelEvent + AE.AEProcessAppleEvent(e) + elif e[0] == keyDown and chr(e[1]&0xff) == '.' and e[4]&cmdKey: + raise KeyboardInterrupt, "Command-Period" + else: + MacOS.HandleEvent(e) + +if __name__ == '__main__': + main() + +print "This module is obsolete -- use echo.py or tell.py ..." diff --git a/Mac/Lib/test/tell.py b/Mac/Lib/test/tell.py new file mode 100644 index 00000000000..74e0ca0fb75 --- /dev/null +++ b/Mac/Lib/test/tell.py @@ -0,0 +1,63 @@ +# (Slightly less) primitive operations for sending Apple Events to applications. +# This could be the basis of a Script Editor like application. + +from AE import * +from AppleEvents import * +import aetools +import types + +class TalkTo: + def __init__(self, signature): + """Create a communication channel with a particular application. + + For now, the application must be given by its 4-character signature + (because I don't know yet how to do other target types). + """ + if type(signature) != types.StringType or len(signature) != 4: + raise TypeError, "signature should be 4-char string" + self.target = AECreateDesc(typeApplSignature, signature) + self.send_flags = kAEWaitReply + self.send_priority = kAENormalPriority + self.send_timeout = kAEDefaultTimeout + def newevent(self, code, subcode, parameters = {}, attributes = {}): + event = AECreateAppleEvent(code, subcode, self.target, + kAutoGenerateReturnID, kAnyTransactionID) + aetools.packevent(event, parameters, attributes) + return event + def sendevent(self, event): + reply = event.AESend(self.send_flags, self.send_priority, + self.send_timeout) + parameters, attributes = aetools.unpackevent(reply) + return reply, parameters, attributes + + def send(self, code, subcode, parameters = {}, attributes = {}): + return self.sendevent(self.newevent(code, subcode, parameters, attributes)) + + def activate(self): + # Send undocumented but easily reverse engineered 'activate' command + self.send('misc', 'actv') + + +# This object is equivalent to "selection" in AppleScript +# (in the core suite, if that makes a difference): +get_selection = aetools.Property('sele', None) + +# Test program. You can make it do what you want by passing parameters. +# The default gets the selection from Quill (Scriptable Text Editor). + +def test(app = 'quil', suite = 'core', id = 'getd', arg = get_selection): + t = TalkTo(app) + t.activate() + if arg: + dict = {'----': arg} + else: + dict = {} + reply, parameters, attributes = t.send(suite, id, dict) + print reply, parameters + if parameters.has_key('----'): print "returns:", str(parameters['----']) + + +test() +# So we can see it: +import sys +sys.exit(1)