--- /dev/null
+#include <AEDataModel.h>
+
+#define DEBUG 0
+
+#define kComponentSignatureString "BBPy.LM"
+#include <Debugging.h>
+
+
+#include <BBLMInterface.h>
+#include <BBXTInterface.h>
+//#include <BBLMTextIterator.h>
+
+#include <ctype.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <Sound.h>
+
+#if DEBUG
+void debugf_(const char* func,const char* fileName,long line, const char*fmt,...)
+{
+ va_list arg;
+ char msg[256];
+ va_start(arg, fmt);
+ vsnprintf(msg,256 ,fmt, arg);
+ DebugAssert(COMPONENT_SIGNATURE, DEBUG_NO_OPTIONS, kComponentSignatureString ": " , msg, nil, fileName, line, 0 );
+
+ //debug_string(msg);
+}
+#define debugf(FMT,...) debugf_( __FUNCTION__,__FILE__, __LINE__,FMT,__VA_ARGS__);
+#else
+#define debugf(FMT,...)
+#endif
+
+typedef const char *Str;
+
+
+enum{
+ kPyBBLMStringSubst = kBBLMFirstUserRunKind
+};
+
+#define iswordchar(x) (isalnum(x)||x=='_')
+
+
+struct runloc{
+ bool past_gap;
+ long pos;
+ long last_start;
+ unsigned char*p;
+};
+
+char start(struct runloc& r,BBLMParamBlock &pb)
+{
+ r.past_gap = false;
+ r.last_start = pb.fCalcRunParams.fStartOffset;
+ r.pos = pb.fCalcRunParams.fStartOffset;
+ r.p = ((unsigned char*)pb.fText) + pb.fCalcRunParams.fStartOffset;
+ // Adjust for the gap if we¹re not already past it.
+ if ((!r.past_gap) && (r.pos >= pb.fTextGapLocation)){
+ r.p += pb.fTextGapLength;
+ r.past_gap = true;
+ }
+ return *r.p;
+
+}
+
+char nextchar(struct runloc&r,BBLMParamBlock &pb)
+{
+ if ( r.pos< pb.fTextLength){
+ ++r.pos;
+ ++r.p;
+ if ((!r.past_gap) && (r.pos >= pb.fTextGapLocation)){
+ r.p += pb.fTextGapLength;
+ r.past_gap = true;
+ }
+ return *r.p;
+ }
+ else{
+ return 0;
+ }
+}
+
+bool addRun(BBLMRunCode kind, int start,int len , const BBLMCallbackBlock& bblm_callbacks)
+{
+ if (len > 0){ // Tie off the code run we were in, unless the length is zero.
+ debugf("Run %d %d:%d", kind, start, start+len-1 );
+ return bblmAddRun( &bblm_callbacks, 'Pyth',
+ kind, start, len, false);
+
+ }
+ else{
+ return true;
+ }
+}
+
+bool addRunBefore (BBLMRunCode kind,struct runloc& r, const BBLMCallbackBlock& bblm_callbacks)
+{
+ bool more_runs = addRun(kind, r.last_start, r.pos - r.last_start, bblm_callbacks);
+ r.last_start = r.pos;
+ return more_runs;
+}
+
+bool addRunTo (BBLMRunCode kind, struct runloc& r, const BBLMCallbackBlock& bblm_callbacks)
+{
+ bool more_runs = addRun(kind, r.last_start, r.pos - r.last_start+1, bblm_callbacks);
+ r.last_start = r.pos+1;
+ return more_runs;
+}
+
+
+bool colorstr( char delim,
+ BBLMParamBlock &pb,
+ struct runloc &r,
+ const BBLMCallbackBlock &bblm_callbacks)
+{
+ bool tripple = false , pers = false, lookup = false, more_runs = true;
+ char c = nextchar(r,pb);
+
+ if (c == delim){
+ c = nextchar(r,pb);
+ if (c == delim){
+ tripple = true;
+ c = nextchar(r,pb);
+ }
+ else{
+ //double
+ return addRunBefore(kBBLMRunIsSingleString,r,bblm_callbacks);
+ }
+ }
+ while (c && more_runs){
+ if (pers ){
+ if (isalpha(c)){
+ more_runs = addRunTo(kPyBBLMStringSubst,r,bblm_callbacks);
+ }
+ else if (c == '('){
+ lookup = true;
+ }
+ }
+ pers = false;
+ if (c == delim){
+ if (tripple){
+ if ((c = nextchar(r,pb))== delim && (c = nextchar(r,pb)) == delim){
+ break; // end of tripple-quote.
+ }
+ }
+ else{
+ break; // end of single-quote.
+ }
+
+ }
+ else if (c== '\\'){
+ nextchar(r,pb);
+ }
+ else if (c=='\r'||c=='\n'){
+ if (!tripple){
+ break;
+ }
+ }
+ else if (c=='%'){
+ more_runs = addRunBefore(kBBLMRunIsSingleString,r,bblm_callbacks);
+ pers = true;
+ }
+ else if (c==')' && lookup){
+ more_runs = addRunTo(kPyBBLMStringSubst,r,bblm_callbacks);
+ lookup = false;
+ }
+ c = nextchar(r,pb);
+ }
+ return more_runs && addRunTo(lookup?kPyBBLMStringSubst:kBBLMRunIsSingleString,r,bblm_callbacks);
+}
+
+bool colorcomment(BBLMParamBlock &pb,
+ struct runloc &r,
+ const BBLMCallbackBlock &bblm_callbacks)
+{
+ while (char c = nextchar(r,pb)){
+ if (c=='\r'|| c=='\n'){
+ break;
+ }
+ }
+ return addRunTo(kBBLMRunIsLineComment,r,bblm_callbacks);
+}
+
+void CalculateRuns(BBLMParamBlock &pb,
+ const BBLMCallbackBlock &bblm_callbacks)
+
+{
+ const struct rundesc *state = NULL;
+ bool more_runs=true;
+
+ struct runloc r;
+
+ char c = start(r,pb);
+
+ while (c && more_runs){
+ loop:
+ // Process a char
+ if (state==NULL){
+ //If we're in the basic 'code' state, check for each interesting char (rundelims[i].start).
+ switch (c){
+ case '\'':
+ case '"':
+ more_runs = addRunBefore(kBBLMRunIsCode,r,bblm_callbacks);
+ if (more_runs){
+ more_runs = colorstr(c,pb,r,bblm_callbacks);
+ }
+ break;
+ case '#' :
+ more_runs = addRunBefore(kBBLMRunIsCode,r,bblm_callbacks);
+ if (more_runs){
+ more_runs = colorcomment(pb,r,bblm_callbacks);
+ }
+ break;
+ default:
+ break;
+ }
+
+ }
+ c = nextchar(r,pb);
+ }
+ if (more_runs){
+ addRunBefore(kBBLMRunIsCode,r,bblm_callbacks);
+ }
+
+
+}
+static void AdjustRange(BBLMParamBlock ¶ms,
+ const BBLMCallbackBlock &callbacks)
+{
+ DescType language;
+ BBLMRunCode kind;
+ SInt32 charPos;
+ SInt32 length;
+ UInt32 index = params.fAdjustRangeParams.fStartIndex;
+
+ while( index > 0 &&
+ bblmGetRun(&callbacks, index, language, kind, charPos, length) &&
+ (kind==kPyBBLMStringSubst||kind==kBBLMRunIsSingleString)){
+ index--;
+ };
+ params.fAdjustRangeParams.fStartIndex = index;
+}
+
+
+// The next couple funcs process the text of a file assumming it's in 1 piece in memory,
+// so they may not be called from CalculateRuns.
+
+bool matchword(BBLMParamBlock &pb, const char *pat ,unsigned long *pos)
+{
+ const char *asciText = (const char *) (pb.fTextIsUnicode?NULL:pb.fText);
+
+ int i;
+ for (i=0; pat[i]; i++){
+ if (*pos+i>=pb.fTextLength){
+ return false;
+ }
+ if (asciText[*pos+i] != pat[i]){
+ return false;
+ }
+ }
+ if ((*pos+i<pb.fTextLength)&&iswordchar(asciText[*pos+i])){
+ return false;
+ }
+ *pos+=i;
+ return true;
+}
+
+int matchindent(BBLMParamBlock &pb, UInt32 *pos)
+{
+ const char *asciText = (const char *) (pb.fTextIsUnicode?NULL:pb.fText);
+ int indent=0;
+
+ while(*pos<pb.fTextLength){
+ switch (/*(char)(pb.fTextIsUnicode?uniText[pos]:*/asciText[*pos]/*)*/){
+ case ' ':
+ ++*pos;
+ indent++;
+ break;
+ case '\t':
+ ++*pos;
+ indent+=8;
+ break;
+ case '#':
+ return -1;
+ break;
+ default:
+ return indent;
+ break;
+ }
+ }
+}
+
+
+void eat_line(BBLMParamBlock &pb, unsigned long* pos)
+{
+ const char *asciText = (const char *) (pb.fTextIsUnicode?NULL:pb.fText);
+ while (asciText[*pos]!='\r' && asciText[*pos]!='\n' && *pos<pb.fTextLength) {++*pos;}
+ while ((asciText[*pos]=='\r' || asciText[*pos]=='\n') && *pos<pb.fTextLength) {++*pos;}
+
+}
+
+void addItem(BBLMParamBlock &pb, UInt32 pos, int nest, BBLMFunctionKinds kind,
+ const BBLMCallbackBlock *bblm_callbacks)
+{
+ UInt32 funcstartpos = pos;
+ UInt32 funcnamelen=0;
+ UInt32 offset=0;
+ const char *asciText = (const char *) pb.fText;
+ UInt32 index;
+ OSErr err;
+
+ while (isspace(asciText[pos]) && pos<pb.fTextLength) {++pos;}
+ UInt32 fnamestart = pos;
+ while ((isalnum(asciText[pos])||asciText[pos]=='_') && pos<pb.fTextLength) {pos++; funcnamelen++;}
+
+ err = bblmAddTokenToBuffer( bblm_callbacks,
+ pb.fFcnParams.fTokenBuffer,
+ (void*)&asciText[fnamestart],
+ funcnamelen,
+ pb.fTextIsUnicode,
+ &offset);
+ BBLMProcInfo procInfo;
+ procInfo.fFunctionStart = fnamestart; // char offset in file of first character of function
+ procInfo.fFunctionEnd = pos; // char offset of last character of function
+
+ procInfo.fSelStart = fnamestart; // first character to select when choosing function
+ procInfo.fSelEnd = pos; // last character to select when choosing function
+
+ procInfo.fFirstChar = fnamestart; // first character to make visible when choosing function
+
+ procInfo.fKind = kind;
+
+ procInfo.fIndentLevel = nest; // indentation level of token
+ procInfo.fFlags = 0; // token flags (see BBLMFunctionFlags)
+ procInfo.fNameStart = offset; // char offset in token buffer of token name
+ procInfo.fNameLength = funcnamelen; // length of token name
+
+ err = bblmAddFunctionToList(bblm_callbacks,
+ pb.fFcnParams.fFcnList,
+ procInfo,
+ &index);
+}
+
+
+
+enum{
+ maxnest=5
+};
+
+void ScanForFunctions(BBLMParamBlock &pb,
+ const BBLMCallbackBlock &bblm_callbacks)
+{
+
+ const char *asciText = (const char *) (pb.fTextIsUnicode?NULL:pb.fText);
+ UniCharPtr uniText = (UniCharPtr) (pb.fTextIsUnicode?pb.fText:NULL);
+
+ int indents[maxnest]= {0};
+ int nest = 0;
+
+ UInt32 pos=0; // current character offset
+
+
+ while (pos<pb.fTextLength){
+
+ int indent = matchindent(pb, &pos);
+
+ if (indent >= 0){
+ for (int i=0; i <= nest; i++){
+ if (indent<=indents[i]){
+ nest = i;
+ indents[nest]=indent;
+ goto x;
+ }
+ }
+ indents[++nest]=indent;
+ x:
+
+ if (matchword(pb,"def",&pos)){
+ addItem( pb, pos, nest, kBBLMFunctionMark, &bblm_callbacks);
+ }
+ else if (matchword(pb, "class", &pos)){
+ addItem( pb, pos, nest, kBBLMTypedef, &bblm_callbacks);
+ }
+ }
+ eat_line(pb,&pos);
+ }
+
+}
+
+OSErr main( BBLMParamBlock ¶ms,
+ const BBLMCallbackBlock &bblm_callbacks,
+ const BBXTCallbackBlock &bbxt_callbacks)
+{
+ OSErr result;
+
+ if ((params.fSignature != kBBLMParamBlockSignature) ||
+ (params.fLength < sizeof(BBLMParamBlock)))
+ {
+ return paramErr;
+ }
+
+ switch (params.fMessage)
+ {
+ case kBBLMInitMessage:
+ case kBBLMDisposeMessage:
+ {
+ result = noErr; // nothing to do
+ break;
+ }
+
+ case kBBLMCalculateRunsMessage:
+ CalculateRuns(params, bblm_callbacks);
+ result = noErr;
+ break;
+
+ case kBBLMScanForFunctionsMessage:
+ ScanForFunctions(params, bblm_callbacks);
+ result = noErr;
+ break;
+
+ case kBBLMAdjustRangeMessage:
+ AdjustRange(params, bblm_callbacks);
+ result = noErr;
+ break;
+
+ case kBBLMMapRunKindToColorCodeMessage:
+ switch (params.fMapRunParams.fRunKind){
+ case kPyBBLMStringSubst:
+ params.fMapRunParams.fColorCode = kBBLMSGMLAttributeNameColor;
+ params.fMapRunParams.fMapped = true;
+ break;
+ default:
+ params.fMapRunParams.fMapped = false;
+ }
+ result = noErr;
+ break;
+
+ case kBBLMEscapeStringMessage:
+ case kBBLMAdjustEndMessage:
+ case kBBLMMapColorCodeToColorMessage:
+ case kBBLMSetCategoriesMessage:
+ case kBBLMMatchKeywordMessage:
+ {
+ result = userCanceledErr;
+ break;
+ }
+
+ default:
+ {
+ result = paramErr;
+ break;
+ }
+ }
+ return result;
+}
\ No newline at end of file
--- /dev/null
+(This file must be converted with BinHex 4.0)\r:!!"069"b3eG*43#3",#B!!!"(SU(Bfp[E!!!!!-!!!%S!!#Sb!!!UI!!!!DS!!!\r!4`%#!3#3#80[C'9ABA*bD@pb)&"bEfTPBh3!N1e#BA0TBb"8EfpXBQpi)&"33cT\r$GA0dEfdJ5f9jGfpbC(-!3Q&cD@-J9'p[E'*[H#"38%-k3@0MCA0c)&"KG'Kc!%*\rKFfPM)&4[EfaLEhJJ8&"$1P4KFQGPG#"6CA4dD@jRF`"#BA0TBb"8EfpXBQpi)&"\r33cT'D@aP)%eKF("TEQGc!%*KFfPM)&4[EfaLEhJJ8&"$1N*eD@aN)%9iG(*KF`"\r#BA0TBb"8EfpXBQpi)&"33cSf1%XJ3fpNC8GPEJ"#BA0TBb"8EfpXBQpi)&"33cS\rf1%XJ4'PcBA0cC@eLE'9b!%*KFfPM)&4[EfaLEhJJ8&"$1MBi5b"-D@jVCA)!3Q&\rcD@-J9'p[E'*[H#"38%-k0MK,)&"bEfTPBh3!3Q&cD@-J9'p[E'*[H#"38%-k3bp\r$+bXJ3fpYF'PXCA)!3Q&cD@-J9'p[E'*[H#"38%-k3bp$+bXJ9f&bEQPZCh-!3Q&\rcD@-J9'p[E'*[H#"38%-k3dC00MK,!%*KFfPM)&4[EfaLEhJJ8&"$1NP5)%p`G'P\rYDATPFJ"#BA0TBb"8EfpXBQpi)&"33cT+BACK)%peG("eG!"#BA0TBb"8EfpXBQp\ri)&"33cT+BACK)&"bEfTPBh3!3Q&cD@-J9'p[E'*[H#"38%-k5Q&fB5"@63"#BA0\rTBb"8EfpXBQpi)&"33cT0B@028b"0CA*RC5"3B@jPE!"#BA0TBb"8EfpXBQpi)&"\r33cT3BA0MB@`J3fpYF'PXCA)!3Q&cD@-J9'p[E'*[H#"38%-k8'&cBf&X)&GKFQj\rTEQGc!%*KFfPM)&4[EfaLEhJJ8&"$1P"33b"$Ef4P4f9Z!%*KFfPM)&4[EfaLEhJ\rJ8&"$1P"33b"%DA0KFh0PE@*XCA)!3Q&cD@-J9'p[E'*[H#"38%-k8&"$)%aTEQY\rPFJ"#BA0TBb"8EfpXBQpi)&"33cT38%-J8%9'!%*KFfPM)&4[EfaLEhJJ8&"$1P"\r33b"3FQpUC@0d!%*KFfPM)&4[EfaLEhJJ8&"$1P"33d&cE5"3B@jPE!"#BA0TBb"\r8EfpXBQpi)&"33cT5CASJ3fpYF'PXCA)!3Q&cD@-J9'p[E'*[H#"38%-k9fPZ8N-\rJ3fpYF'PXCA)!3Q&cD@-J9'p[E'*[H#"38%-kH$Jf)%0[C'9(C@i!3Q&cD@-J9'p\r[E'*[H#"38%-kH$Jf)%aTEQYPFJ"#BA0TBb"8EfpXBQpi)&"33cTi1$BJ8(*[DQ9\rMG!"3FQpUC@0d)%CTE'8J6'PcG!"6CA4PH(3k3h9cG'pY)%YPHAG[FQ4c!&0PG'9\riG$T"Bf0PFh-J8'&dD(-!8f9dCAKd1P4KFQGPG#"6CA4dD@jRF`"6CA4PH(3k4QP\rXC5"0BA"`D@jRF`"6CA4PH(3k3R9TE'3J4AKdFQ&c!&0PG'9iG$Sf1%XJ3fpNC8G\rPEJ"6CA4PH(3k0MK,)%4TFf&cFf9YBQaPFJ"6CA4PH(3k0MK,)%aTEQYPFJ"6CA4\rPH(3k0MK,)&"bEfTPBh3!8f9dCAKd1N-[3bXV)%0[EA"TE'9b!&0PG'9iG$T$,d-\rV+b"ABA*ZD@jRF`"6CA4PH(3k3dC00MK,!&0PG'9iG$T*8L"2F(4TE@PkCA)!8f9\rdCAKd1NTKGQ%J6h9dF(9d!&0PG'9iG$T+BACK)&"bEfTPBh3!8f9dCAKd1NTKGQ%\rJ9Nd!8f9dCAKd1NeKBdp6)%ePFQGP)&"KEQ9X!&0PG'9iG$T3BA0MB@`J3fpYF'P\rXCA)!8f9dCAKd1P"KFf0KE#"ABA*ZD@jRF`"6CA4PH(3k8&"$)%0[C'9(C@i!8f9\rdCAKd1P"33b"%DA0KFh0PE@*XCA)!8f9dCAKd1P"33b"-D@jVCA)!8f9dCAKd1P"\r33b"348B!8f9dCAKd1P"33b"3FQpUC@0d!&0PG'9iG$T38%0"FfdJ8'&ZC@`!8f9\rdCAKd1P*PHL"$Efe`D@aPFJ"6CA4PH(3k9fPZ8N-J3fpYF'PXCA)!8f9dCAKd1RJ\ri0L"$Ef4P4f9Z!&0PG'9iG$Ti1$BJ6'PZDf9b!&0PG'9iG$Ti1$BJ8(*[DQ9MG!"\r6CA4PH(3k8fpeFQ0P)&4bC@9c!&0PG'9iG$T%C@*eCfGPFL"5G@jdD@eP!&0PG'9\riG$T%C@*eCfGPFL"8BA*RCA3!8f9dCAKd1P*PE@pdC5"%C@*eC`"6CA4PH(3k3A9\rdEbedBA*RCA3!8f9dCAKd1MBi5b"(E'pLB@`J6h"dD@eTHQ9b!&0PG'9iG$T%H@a\rKEL"$Efe`D@aPFJ"6CA4PH(3k4P43)&"KEQ9X!&0PG'9iG$T+BACK)%0[E@eKEQ3\rJ6'PZC3"6CA4PH(3k5Q&fB5"-B@jRG@&RC3"6CA4PH(3k5Q&fB5"08NT"F("#G@P\rXC'9b!&0PG'9iG$T+BACK4'pM)&"bEfTPBh3!8f9dCAKd1NpeG("eG#"'E'&RF`"\r6CA4PH(3k8'&MDf&RCA)J8'&ZC@`!8f9dCAKd1P"33b"(E'pLB@`J6h"dD@eTHQ9\rb!&0PG'9iG$Ti1$BJ4'PcBA0cC@eLE'9b!&0PG'9iG$Ti1$BJ4AKMCA"dD@pZFb"\r3B@jPE!"6CA4PH(3kH$Jf)%GXEf*KE#"2F(4TE@PkCA)!3N*3H5j`F'-k8fpeFQ0\rP)&4bC@9c!%*#8(NZF("M1N&MBf9cFb"3BA4SF`"#3P"j,R"`BcT%C@*eCfGPFL"\r5G@jdD@eP!%*#8(NZF("M1P4KFQGPG#"6CA4dD@jRF`"#3P"j,R"`BcT'D@aP)%e\rKF("TEQGc!%*#8(NZF("M1N*eD@aN)%9iG(*KF`"#3P"j,R"`BcT%C@*eCfGPFL"\r8BA*RCA3!3N*3H5j`F'-k8Q9YEh4P)%4PBR9R!%*#8(NZF("M1N&eG'mYG'&bCf9\rd!%*#8(NZF("M1N0eFh4[E5",CAPhEh*NF`"#3P"j,R"`BcSf1%XJ3fpNC8GPEJ"\r#3P"j,R"`BcSf1%XJ4'PcBA0cC@eLE'9b!%*#8(NZF("M1MBi5b"(E'pLB@`J6h"\rdD@eTHQ9b!%*#8(NZF("M1MBi5b"-D@jVCA)!3N*3H5j`F'-k0MK,)&"bEfTPBh3\r!3N*3H5j`F'-k3bp$+bXJ3fpYF'PXCA)!3N*3H5j`F'-k3bp$+bXJ9f&bEQPZCh-\r!3N*3H5j`F'-k3dC00MK,!%*#8(NZF("M1NC88#"3B@jPE!"#3P"j,R"`BcT+BAC\rK)%0[E@eKEQ3J6'PZC3"#3P"j,R"`BcT+BACK)%aKEQGeB@GP!%*#8(NZF("M1NT\rKGQ%J69*+3A"`3R9TE'4PFJ"#3P"j,R"`BcT+BACK)%peG("eG!"#3P"j,R"`BcT\r+BACK)&"bEfTPBh3!3N*3H5j`F'-k5Q&fB84[Bb"3FQpUC@0d!%*#8(NZF("M1Ne\rKBdp6)%ePFQGP)&"KEQ9X!%*#8(NZF("M1NpeG("eG#"'E'&RF`"#3P"j,R"`BcT\r3B@0VB@GPFL"3B@jPE!"#3P"j,R"`BcT38%-J3fpNC8GPEJ"#3P"j,R"`BcT38%-\rJ4'PcBA0cC@eLE'9b!%*#8(NZF("M1P"33b"(E'pLB@`J6h"dD@eTHQ9b!%*#8(N\rZF("M1P"33b"-D@jVCA)!3N*3H5j`F'-k8&"$)&"&4J"#3P"j,R"`BcT38%-J8(*\r[DQ9MG!"#3P"j,R"`BcT38%0"FfdJ8'&ZC@`!3N*3H5j`F'-k8Q9k)%0[EA"TE'9\rb!%*#8(NZF("M1PGTEP*$)%0[EA"TE'9b!%*#8(NZF("M1RJi0L"$Ef4P4f9Z!%*\r#8(NZF("M1RJi0L"%DA0KFh0PE@*XCA)!3N*3H5j`F'-kH$Jf)%9iBf9`G'P[ER-\rJ8'&ZC@`!3N*3H5j`F'-kH$Jf)%GXEf*KE#"2F(4TE@PkCA)!3N*3H5j`F'-kH$J\rf)%aTEQYPFJ"#3P"j,R"`BcTi1$BJ8(*[DQ9MG!#3D!%MYh!B!!!!)J!!!!)!N!G\r"!!!!!h9PG@8!!!"M!!!!"!)Yl1!!!!#$!!!!"A3+4AB!!!#L!!!!"JK(CA3!!!$\r!!!!!"fPXE%3!!!$M!!!!#'pZ#93!!!%!N!3*"dGPG!!!!4i!!!!+G%e[G3!!!6m\r!!!!,G%4TB3!!!@!!!!!-C%4TB3!!!AN!!!!04'PKE!!!!CJ!!!!1D@&XE`!!!EB\r!!!!2Gd4TB3!!!G8!!!!3D@&XE`!!!Hm!!!!4H(3053!!!K-!!!!5GQ9ZG!!!!M8\r!!!!6C@aPB`!!!PF!!!!8B@a[C`!!!R8!!!!9B@a[C`!!!TJ!!!!@4'PKE!!!!V8\r!!!!A5A4PE3!!!Xm!!!!BG'p`33!!!Zd!!!!CC8&XC3!!!``!!!!DEfj"E!!!!bX\r!!!!EC%&XC3!!!d`!!!!FE'9bG!!!!fS!!!!GH(3+43!!!iF!!!!HC!K(C3!!!k8\r!!!!ICA4%53!!!lF!!!!J9'9iG!!!!mi!!!!K!*!'!q)!!!!L!*!'!rN!!!!M!*!\r'"!i!!!!N!*!'"#)!!!!P!*!'"$8!!!!Q!*!'"%d!!!!R!*!'"&m!!!!S!*!'"()\r!!!!T!*!'")J!!!!U!*!'"*i!!!!V!*!'"+`!!!!X!*!'"-!!!!!Y!*!'"0-!!!!\rZ!*!'"1F!!!![!*!'"2B!!!!`!*!'"3m!!!!a!*!'"5B!!!!b!*!'"6d!!!!c!*!\r'"9!!!!!d!*!'"@J!!!!e!*!'"AS!!!!f!*!'"BN!!!!h!*!'"C`!!!!i!*!'"E!\r!!!!j!*!'"F3!!!!k!*!'"GS!!!!l!*!'"Hd!!!!m!*!'"Im!!!!p!*!'"K)!!!!\rq!*!'"LB!!!!r!*!'"Mi!!!"!!*!'"P8!!!""!*!'"QN!!!"#!*!'"R`!!!"$!*!\r'"TJ!!!"%!*!'"Ui!!!"&!*!'"Vm!!!"'!*!'"YJ!!!"(!*!'"Zd!!!")!*!'"`F\r!!!"*!*!'"ai!!!"+!*!'"c)!!!",!*!'"dJ!!!"-!*!'"f3!!!"0!*!'"h`!!!"\r1!*!'"jJ!!!"2!*!'"l3!!!"3!*!'"mS!!!"4!*!'"q!!!!"5!*!'"rS!!!"6!*!\r'#"-!!!"8!*!'##S!!!"9!*!'#%!!!!"@!*!'#&N!!!"A!*!'#'m!!!"B!*!'#)3\r!!!"C!*!'#*d!!!"D!*!'#,)!!!"E!*!'#-`!!!"F!*!'#1S!!!"G!*!'#2i!!!"\rH!*!'#4-!!!"I!*!'#5X!!!"J!*!'#8-!!!"K!*!'#9-!!!"L!*!'#@B!!!"M!*!\r'#B%!!!"N!*!'#CJ!!!"P!*!'#E3!!!"Q!*!'#FN!!!"R!*!'#Gm!!!"S!*!'#IJ\r!!!"T!*!'#K-!!!"U!*!'#LN!!!"V!*!'#N%!!!"X!*!'#PB!!!"Y!*!'#R!!!!"\rZ!*!'#Si!!!"[!*!'#U)!!!"`!*!'#V-!!!"a!*!'#XJ!!!"b!*!'#Yi!!!"c!*!\r'#[3!!!"d!*!'#``!!!"e!*!'#b%!!!"f!*!'#cX!!!"h!*!'#eN!!!"i!*!'#hF\r!!!"j!*!'#iX!!!"k!*"2HJ!!!)!!!!ZJ!!!-!*!%HJ!"!*!%"YHUN!!'ekSB"YH\rSZ2rr!!!!4!!!!'!!!!4T!!!)!*!%4!!!!#8!!`#3"5B!#J#3"5F!!!!"!*!%2`!\r"!!!!"&*26e3!N!`$4e*98!#3"`3(8fpeFQ0PF`!!!!0'58a&!3!!%8C*6%8"!!!\r34NP-43%!!!p(8P93!*!(!Je0B@-J6'PLFQ&bD@9c!!!!!dC*6%8"!!!$4NP-43%\r!!!4'58a&!3!!"8G599!!N!F"$N&18dNJ6'PLFQ&bD@9c!!!!"%C*6%8"!!!'4NP\r-43%!!"*'58a&!3!!"dC*6%8"!!!)!*!&!J!!!3#3#J%!!!!#!!!!!`!!!!3!!!!\r&!!!!#!!!!!B!!!!(!!!!#3%KA!%#,IB3!LhlF!#3"J6`!Li&%!#3$!)YpK!!N#!\r#,IZ3!!#3"b!#,Ik`!!!!#J!!!#!"!!!!!3!!%J!"!!!!"J!!Irm!N!4rr`#3"(r\rr!*!%Irm!!!!"!3!!!3%!!3#3"K3!!!!M!!)!N!8N!!d!N!8P!!-!N!8Q!!S!N!8\rR!!)!N!8S!!8!N!8T!!B!N!8U!!B!N!8V!!d!N!8X!!8!N!8Z!!%!N!8[!!%!N!8\r`!!8!N!8a!!%!N!8b!!%!N!8c!!F!N!8d!!J!N!8e!!8!N!8f!!)!N!8h!!)!!!!\r&!3%!!3#3r`!!!!J!!!%!N!N"!3#3"3%!N!X)!3!"!3!"!3!!!!%!!!8"N!F!!C!\r%!!8#!3!!!3!"!*!%!3%!N!8"!*!+!3!!!#)!N!8#!!%!(!#3'3%"!3!!!3%!!3!\r""!#3#J%!N!N"!*!&"3!!!!B!!!!(!!!!#!!!!!%!!!!%!!!!#3!!!!S!!!!,!*!\r(!`!!!!`!!!!0!!!!$J!!!!m!!!!3!!!!%3!!!")!!!!6!!!!&!!!!"8!!!!@!!!\r!&`!!!"J!!!!C!!!!!J!!!"S!!!!E!!!!(!!!!"d!!!"C!!!!@J!!!&X!!!"F!!!\r!A3!!!&!!!!"A!!!!9!!!!&i!!!"I!!!!B!!!!&J!!!"4!!!!93!!!&-!!!"K!!!\r!BJ!!!'-!!!"N!!!!C3!!!'B!!!"R!!!!D!!!!'N!!!"U!!!!D`!!!'`!!!"Y!!!\r!EJ!!!'m!!!"`!!!!F3!!!&B!!!"b!!!!6`!!!&)!!!"c!!!!G!!!!(8!!!"f!!!\r!G`!!!(J!!!"j!!!!(J!!!#3!!!!P!!!!3J!!!#B!!!!R!!!!)!!!!%%!!!!M!!!\r!+!!!!#N!!!!U!!!!(`!!!$i!!!!r!!!!3`!!!#)!!!"%!!!!+`!!!%8!!!"'!!!\r!4`!!!#`!!!!Y!!!!,J!!!%J!!!![!!!!53!!!%S!!!!`!!!!-3!!!$)!!!!c!!!\r!5`!!!$3!!!!e!!!!0J!!!$F!!!"!!!!!1!!!!$d!!!!K!!!!13!!!$S!!!"-!!!\r!63!!!%i!!!!l!!!!2!#3'%*KFfPM)&4[EfaLEhJJ8&"$!%CTFR0d)&0PCfePER3\r!1Q%ZEh9d!%aTBL"*EA"[FR3J0MK,!%e39b"*EA"[FR3J0MK,!%*KE'a[EfiJ5'9\rXF!"09b"$,d-V+b!f1%X!69FJ8'&cBf&X)$Bi5`"5CAS!8%9')%PYF'pbG#!f1%X\r!1P4[EfaLEhK38%-ZEh9d!%aTBL"*EA"[FR3J8&"$!%eA)%-[3bXV)&"33`"09b"\r3BA0MB@`J8&"$!&"33d&cE3"B3dp'4L"*EA"[FR3J8&"$!&"&4L"*EA"[FR3J8&"\r$!&0TE'aj3Q&XE(-ZB`"6D@aXH8*KE'ac,R*cFQ-!5@jdCA*QB@0P6'PL!%eKG'K\r-D@)!690-)&*eER4TE@938%-Z6'PL!%e66#"$,P"33bj-D@)!690-)%-V+bj38%-\rZ6'PL!%e66#"658p9@#j38%-Z6'PL!$T8EfpXBQpi8&"$!(0PG'9iG#jMF!"cCA4\rPH(3ZFJ!k8f9dCAKd!&0PG'9iG!!k+%0A)%*eD@aNFbNk8f9dCAKd!$S!1MSSBR9\rTE'4c+6T6CA4PH(3!6@&M6e-J8&"$)%aTEQYPFJ"6Eh9bBf8J9(*PCA-!3@0MCA0\rc)&"KG'Kc!%4PBR9RCf9b)&*eER4TE@8!9'&bCf9d)&0PG(4TEQGc!%CTE'8J6@&\r`F'PZCh-!3R9TE'3J4AKdFQ&c!%4PBR9RCf9b)&4KFQGPG!"$GA0dEfdJ5f9jGfp\rbC(-!3bp$+bXJ3fpYF'PXCA)!3bp$+bXJ9f&bEQPZCh-!4(PXB@iJ3fpYF'PXCA)\r!6h9dF(9d)%CXB@Gc!&"KBfYKCf9b)&"KEQ9X!&"33b"$Ef4P4f9Z!&"33b"%DA0\rKFh0PE@*XCA)!8&"$)%GXEf*KE#"2F(4TE@PkCA)!8&"$)%aTEQYPFJ"38%-J8%9\r'!&"33b"3FQpUC@0d!&"33d&cE5"3B@jPE!"5CASJ3fpYF'PXCA)!BQ*`H6)ZB`!\r!4(*[Ffp`D'PXB6T#3N9NDA3J0Li`)%C[E'4PFMT#3N9NDA3J0Li`1N*#4@4TG#"\r6GA"`Eh*d1NaKEQGeB@GP)%e[C(9XCA-k3N*6EQ&PF3"3HA4SEfiJ5f9jGfpbC(-\rZFR0bB`"#3P"jG'K[ENa0,R)!8fjKF5jM!%*#8(NZB`"#3P"j,R"`B`"#3R"j,R)\r!4(*[Ffp`D'PXB6T#3N9NDA3J0Li`)%C[E'4PFMT#3N9NDA3J0Li`1N*#4@4TG#"\r6GA"`Eh*d1NaKEQGeB@GP)%e[C(9XCA-k3N*`H3"%C@*eCdaTBJ"%FQpcEh"SD@a\rK1N*#4@4TG#!f,M!J4QpXC'9b1N*#4@4TG#!f,M!k3N*&C'Pd)&0eF("[FR3k6'&\rZCh9KCf8J6@pNG@aPFcT3HA4SEfi!6@pPFcT69f4PGMT0CA4bEhGPFQYc)%0[C'9\rABA*bD@pb)$BZ-$T0CA4bEhGPFQYc)%0[C'9ABA*bD@pb1P"jG'K[EJ#3r`#3r`#\r3r`#3RMJ!!!!I!!!!(J!!!#!!!!!#!!!!(!!!!"N!!!!+!!!!)`!!!!8!N!Fp!!!\r!2J!!!$m!!!!h!!!!1`!!!#F!!!!U!!!!+`!!!#N!!!!N!!!!+!!!!%%!!!"!!!!\r!13!!!%)!!!!X!!!!*J!!!!%!!!!6!!!!!`!!!!X!!!!K!!!!&!!!!%-!!!!%!!!\r!&`!!!"B!!!!9!!!!'!!!!!B!!!!-!!!!"`!!!!d!!!!Y!!!!,J!!!!N!!!!3!!!\r!,`!!!$!!!!!a!!!!-J!!!$-!!!!d!!!!$J!!!$8!!!!k!!!!#!!!!$B!!!!G!!!\r!'J!!!"X!!!!4!!!!%J!!!$`!!!!L!!!!*3!!!!m!N(%*!!!&B5j[GA3!N$SrN!4\r"8&"-!!!"J&L!!*"#2j!%!*!H!B!!N%m%!!!25Q&fB80XBA0cCA-ZDQ&b!*!3@NP\r3)%eA@P!!N!8"!*!'!3!!!`!!!"3#!3#3"3%!!3-!N"8"!!!%!!!!&3)"!*!&!3!\r"!`#3&3%!!!8!!!!@!J%!N!8"!!%$!*!9!3!!"J!!!"F#!3#3"3%!!3-!N"8"!!!\r(!!!!'!)"!*!&!3!"!`#3&3%!!!J!!!!C!J%!N!8"!!%$!*!-!3#3#!%!!!m!!!!\rq!J%!N!8"!!%"!*!-!3#3#!%!!"!!!!"!!J%!N!8"!!%"!*!-!3#3#!%!!"%!!!!\rl!J%!N!8"!!%%!*!-!3#3#!%!!")!!!"#!J%!N!8"!!%$!*!-!3#3#&46C@8!!!,\r2!3%!'2q3"!!!!Zd!!!!CB@PZ4!!!!``!!!!DG%jPH!!!!bX!!!!E!3&cG2q3"!!\r!!"adFQPL!!!$DJ!!!"ePGQPM!!!$K`!!!"jdC3Y*!3&d4rq3"'0P#NjPGdG%CAC\rTBf814'N#,I[`k`!!"!!!!*!!!!CQh!%"!!ArN!3!!!!(!!!!#!!!!!%!!!!%!!!\r!#3!!!!S!!!!,!*!%!3%!!rq3"!!!!!d!!!!1!!!!$`!!!"!!!!!4!!!!%J!!!"-\r!!!!8!3%!&Iq3"!!!!"F!!!!B!!!!'3!!!!)!!!!D!!!!'`!!!"`!!!!G!3&$E2q\r3"!)YrB"V!3!%!!!!3!)Z"4!!!!!(!!!!)!!!!&N#,IZ3!!%"!!IrN!3!N"J#,Ii\r3k`!!"J%"!#$rN!3!N!J"!!%!N!8#,Ij3k`!!$!!!!%!!"QD-!3%!([q3"!!!!k8\r!!!3!N!3H!*!8!3%!!2q3"!)YrR"V!3!%!!!!3!)Z"4!!!!!H!!!!)!!!!k8#,Ii\r3!3%!([q3"!#3'!)YrV$V!!!%!3%"%2q3"!,5EDB#dCiZ!Y(+GJ,4cLTTFh"KG'0\rS!*!*!3%!!2q3"%e$4@jdFQPPF`P(CA403dPZCQm*8f9d680*EQC[#N4T!3&03rq\r3"!T(CA403d9ZG(*j$&0PG%e$4@jdFQPPF`T0C@je3fK[!3&P&2q3"'a%D@&XEfG\r0C@je8f9dGA!14'PKE'pR4'PcF'&dBfJ!!3%!!2q3"!#3(Ja*!3&d82q3"(4PF`T\r1CAG3B@aPG(4P$8GPG%jPGe"KE'9dG'814'Pc!3&cCIq3"(4dC3p"Bh4TGQ&dC9"\rKE'8#,Il`k`!!$!!!!#!!"QD)!3&S32q3"(4P#e!#,IZ3!!)Z!!$V!!!+!!!!)!!\r'Ce3!#J#3"J%"!&(rN!3#,J!JD`%!"!!!!-!#,J83!A8"GRrr!&m!-`!d!LhqX!%\r"!'$rN!3"F`&dIrm!B3!d!A)"F`&dIrm!BJ!c!$3!N!F")3+"!`!!!")!!!!#!*!\r()!!!!!-#cMX!N!3R!!!!"!)[NI!!!!!f!!!!"3!33'i!!!"&!!!!"SMX33S!!!"\r5!!!!"`#3"em!!!!)!!'!!*!%E3!!!!N!!!q3!!!!!(%!!!!+!KeVU!!!!)!!!!!\r,rj!%!!!!N!!!!!!-!!!!C!!!!*m!!!!0!Xim+!!!!+`!!!!1!!!%'3!!!,S!!!!\r2!*!(`3!!!"!!N!I5!!!!%@$3!Kd!!!$K!!!!%J!"!*!&lJ!!!"-!!!!3!!!!rJ!\r!!"3!!!%%!!!"#`!!!"8#'f#i!!!"%`!!!"B!!!!A!!!"*J!!!"F!N!B"0!!!!"J\r!!!,5!!!"4!!!!"N!N!B"9J!!!"S!N!B"BJ!!!"X!!!"3!!!"E!!!!"`#cMc)!!!\r"G3!!!"d!!!3+!!!"I3!!!"i!N!B"K!!!!"pV6!%!!!!"Q!!!!#$rN!3!!!'D!!!\r!)3#3"J'X!!!!)J#3"J'p!!!!)`#3"J(+!!!!*!#3"J(A!!!!*3#3"J(S!!!!*J#\r3"J(i!!!!*`#3"J)'!!!!+!#3"J)6!!!!+3#3"J)M!!!!+J#3"J)c!!!!+`#3"J*\r#!!!!,!#3"J*4!!!!,3#3"J*J!!!!,J#3"J*Y!!!!,`#3"J*m!!!!-!#3"J+)!!!\r!-3#3"J+C!!!!-J#3"J+Z!!!!-`#3"J+j!!!!0!#3"J,"!!!!03#3"J,0!!!!0J#\r3"J,D!!!!0`#3"J,R!!!!1!#3"J,[!!!!13#3"J,`!!!!1J#3"J0!!!!!1`#3"J0\r9!!!!2!#3"J0L!!!!23#3"J0T!!!!2J#3"J0`!!!!2`#3"J0j!!!!3!#3"J1!!!!\r!33#3"J20!!!!3J#3"J2@!!!!3`#3"J3P!!!!4!#3r`#3@!-!!!!0!!!!!`!!!!b\rfcqIS!!"hS!#3r`#3r`#3'3%!!!!r!3!!!3#3#`%!!!"%YXrRS`!!3f)!N2m!N2S\r0!3%!N!CKER0TAh"bC@CTH#jYB@-ZD!#3%!%!!!!"!!!!!3%!N!S#!!!!!J!#!*!\rV!3%"!*!*!`#3r`#3r`#3"`&%FQpcEh"SD@aK1N*#4@4TG#!f,M!J4QpXC'9b1N*\r#4@4TG#!f,M!k3N*&C'Pd)$BZ-!#3r`#3e`9C!2!3!*!&!3!'hS,3!*!-"9LRX!9\rC"4!3!!!!!B6YB!EHJY!!!`#3#J9C"4!!N-%%!*!*!3#3r`!"!*!%"`!$!*!'!3#\r3$`%!!!-"!!!%!3!!"3%!!!B"!!!(!3!!#!%!!!m"!!!3!3!!%3%!!")!!J#3)3%\r"!3!"!3!"!3#3"eN!N!933`!1!!%!N!3"!3#3*3%!N!8"!!%!!J#3$!d!!!!"!!3\r!!!!$3!!!%`!"!!%k!*$r!*$r!*!*!3!!!2q3"%!!N!3#!!%k690-1J"hCA*VFb"\r6G'&ZC'&bC#"-D@*bBA*j1Ne66#"$1J#3r`#3jJ%!!!$rN!4!!!!0!!)!!6T0B@0\r28b"6GA"`Eh*d1J#3r`#3qJ%!!!$rN!4!!!!&!!%!!6Sk3N*&C'Pd)%9iG'9ZFfP\r[EL"*ER4PFQCKBf9c1J#3r`#3k`%!!!$rN!4!!!!3!!%!!6Sk3N*-65"*ER4PFQC\rKBf9c1J"NDA3J6'&ZCh9KCf8J6@pNG@aP)&0%5cT#3Na0)%PZG'9bCQ&MCA-k!*$\rr!*$1!3#3"J&!!!!5!!S!!%eKBdp6)&"33b"-D@jVCA)!N2m!N2m!N2*#3P"j,R"\r`B`#3q`&%FQpcEh"SD@aK1N*#4@4TG#!f,M!J4QpXC'9b1N*#4@4TG#!f,M!k3N*\r&C'Pd)&0eF("[FR3k6'&ZCh9KCf8J6@pNG@aPFcS!N2m!N-B"!!!*6@9bCf8J6h9\rd!*!f2j!%39"36!!"!3!!"%4-4eKMDfPN8(*[DPG68%-!!3#3'3%!N"%"!*!,!3#\r3)`3"!!!$!3#3"!B!!!%!!3#3"!8!N2m!N2m!N")"!3!!E@&TEJ#3r3-!N!S&@+H\r`"9NaB!#3"J-!"Yk#d!!'!!!"!!%!N!3&"9LRX!#3r`#3r`#3$J%"!!"YB@PZ!*$\r$!3#3$E!&@A5!!*!(d!EHJY!%J'T)!*!%")"U!!9CEV!!!!52jb!%MqL3!!!"!!N\r!N!MrN!B!!!%!N$%%J'SJ")"U'!5!DM!%J'SS!*!'rj!'!*!*!3!!")rR)!!U!!8\r"I`*R!!!!QIrl!!!0QJZ`!!S!N!MiJ!52j6!%Q(,!U`!!$!!(!3%!N%"YB@PZ!'e\rKD@i!N(i%!!%!N%%#!!-!#J#343%!!!!"!!!&B5j[GA3!N"Y!!*!%"!#3"!3!!!3\r!N!3%!&8"N!!"#3*l!*!,!J!(6QpZC3#3(3&069"b!*"!3!!!!%TKGQ%J6'PZDf9\rb!*!@%8&38%`!N%"J!!!!3A"`E!#33'!!!!"$6iaV!*!J69FJ5Q&fB3#3(80XFh-\r!N#"09b"+BACK!*!G5QTbCLjUFQB!N$`3!!!!69G$4!#33'!!!!"58e*$!*"!B!!\r!!&4&@&3ZBQJ!N"e#B@aXEfpZ)%KPE(!!N"K849K8,QKdE@`!N$p849K8,QTKGQ%\r!N"Y09b"+BACK!*!G9%9B9#jb!*!H8Q9k!*!K@NP3)!#3)%eA)%TKGQ%!N"P!!!!\r!@QP`4J#3)%eA)%TKGQ%!N"eNEf0e!*"!B!!!!(*cFQ-!N%"J!*!(,Q0XBA0c!*!\rD69FJ5Q&fB3#3)5jkDA!!N"a09b"+BACK!*!G6@&M6e-J0MK,)%aTEQYPFJ#3%4Y\r"8&"-!*"!B!!!!%&`F'`!N%"J!!!!68e-3J#3)%aTBL"*EA"[FR3J0MK,!*!@69"\r-4J#3)%aTBL"*EA"[FR3J0MK,!*!@69G$4!#33'!!!!"23NSJ!*!J69"A)%PYF'p\rbG#!f1%X!N"C58e*$!*"!B!!!!&4&@&3ZBQJ!N"e#B@aXEfpZ)%KPE(!!N"K849K\r8,Q-!N"j09b"$,d-V+b!f1%X!N"K849K8,Q-V+`#3(%eA)%-[3bXV)$Bi5`#3'&4\r&@&3ZBf-!N"e09b"$,d-V+b!f1%X!N"K849K8,Q0`!*!G69FJ3bp$+bXJ0MK,!*!\rB9%9B9#jMF(!!N"a09b"$,d-V+b!f1%X!N"K849K8,Q9iF!#33&4&@&3ZD!#3(Ne\rA)%-[3bXV)$Bi5`#3&"!!!!"849K8,R!!N"j09b"3BA0MB@`J0MK,!*!A9%9B9#j\r`BA-!N"a09b"3BA0MB@`J0MK,!*!A9%9B9#j`BfJ!N"a09b"$,d-V+b!f1%X!N"5\r!!!!!9%9B9#j`BfJV+`#3'NeA)%-[3bXV)$Bi5`#3&)!!!!"849K8,R"`G3#3(%e\rA)&"KFf0KE#!f1%X!N"1!!!!!9%9B9#jb!*!H8Q9k!*!K9%9B9#jcC@F!N%"NEf0\re!*"!B!!!!(*cFQ-!N%"J!!!!FfKXBJ#3)&"&4L"*EA"[FR3J0MK,!*!@Fh4eBJ#\r3)&"&4L"*EA"[FR3J0MK,!*!D,Q4[B`#32&!!!!"0B@028b"0CA*RC3#3&JG"8&"\r-!*"!B!!!!%&`F'`!N%"J!!!!8P053`#33'!!!!"849K8,Q*S!*!G3Q&XE'p[EL"\r)C@a`!*!B9%9B9#jb!*!H8Q9k!*!KFR0bB`#33'!!!!"cD'aL!*"%6@&M6e-J8&"\r$)%aTEQYPFJ#3%4Y"8&"-!*"!B!!!!%&`F'`!N%"J!!!!68e-3J#3)%aTBL"*EA"\r[FR3J8&"$!*!@69"-4J#3)%aTBL"*EA"[FR3J8&"$!*!@69G$4!#33'!!!!"58e*\r$!*"!B!!!!&4&@&3ZBQJ!N"e#B@aXEfpZ)%KPE(!!N"K849K8,Q-!N"j09b"$,d-\rV+b"38%-!N"K849K8,Q-V+`#3(%eA)%-[3bXV)&"33`#3'&4&@&3ZBf-!N"e09b"\r$,d-V+b"38%-!N"K849K8,Q0`!*!G69FJ3bp$+bXJ8&"$!*!B9%9B9#jMF(!!N"a\r09b"$,d-V+b"38%-!N"K849K8,Q9iF!#33&4&@&3ZD!#3(NeA)%-[3bXV)&"33`#\r3&"!!!!"849K8,R!!N"j09b"3BA0MB@`J8&"$!*!A9%9B9#j`BA-!N"a09b"3BA0\rMB@`J8&"$!*!A9%9B9#j`BfJ!N"a09b"$,d-V+b"38%-!N"5!!!!!9%9B9#j`BfJ\rV+`#3'NeA)%-[3bXV)&"33`#3&)!!!!"849K8,R"`G3#3(%eA)&"KFf0KE#"38%-\r!N"1!!!!!9%9B9#jb!*!H8Q9k!*!K9%9B9#jc!*!H8&"$3A0Y!*!H@%024J#3)&K\r$6dC')%PYF'pbG#"38%-!N"4NEf0e!*"!B!!!!(*cFQ-!N%"J!!!!FfKXBJ#3)&"\r&4L"*EA"[FR3J8&"$!*!@Fh4eBJ#3)&"&4L"*EA"[FR3J8&"$!*!D,Q4[B`#32&!\r!!!"03b"-D@jVCA)!N"J53da98`#33%!!!!"068a#!*!J6'PL)%PYF'pbG#!f1%X\r!N"C08%a'!*!J6'PL)%PYF'pbG#!f1%X!N"C23NSJ!*!J69"A)%PYF'pbG#!f1%X\r!N"C849K8,Q-!N"j09b"$,d-V+b!f1%X!N"K849K8,Q-V+`#3(%eA)%-[3bXV)$B\ri5`#3'&4&@&3ZBf-!N"e09b"$,d-V+b!f1%X!N"K849K8,Q0XF`#3(%e$)%0XBA0\rc)%0[EA"TE'9b!*!2J!!!!&4&@&3ZBh!!N"e09b"$,d-V+b!f1%X!N"K849K8,Q0\r`F!#3(%eA)%-[3bXV)$Bi5`#3'&4&@&3ZC'9Q!*"!9%9B9#jNEf-!N$`3!!!!9%9\rB9#jS!*"#9%9B9#j`!*!H69FJ8'&cBf&X)$Bi5`#3&e4&@&3ZF'&c!*!F69FJ8'&\rcBf&X)$Bi5`#3&e4&@&3ZF'0S!*!F69FJ3bp$+bXJ0MK,!*!8J!!!!&4&@&3ZF'0\rS+bX!N"T09b"$,d-V+b!f1%X!N"5!!!!!9%9B9#jdF`#339GTEM-b)(Ji0L"-D@j\rVCA)!N"%39%9B9#jM!*!H69FJ3bp$+bXJH$Jf!*!B9%9B9#jM+bX!N"a09b"$,d-\rV+b"i1$B!N"K849K8,Q0M!*!G69FJ3bp$+bXJH$Jf!*!B9%9B9#jMF!#3(8eA)%-\r[3bXV)(Ji0J#3'&4&@&3ZBh"`!*!F69FJ3bp$+bXJH$Jf!*!B9%9B9#jS!*!H69F\rJ3bp$+bXJH$Jf!*!8%!!!!&4&@&3ZF!#3(NeA)&"KFf0KE#"i1$B!N"G849K8,R"\rKF`#3(%eA)&"KFf0KE#"i1$B!N"G849K8,R"MD!#3(%eA)%-[3bXV)(Ji0J#3&)!\r!!!"849K8,R"MD#XV!*!D69FJ3bp$+bXJH$Jf!*!8J!!!!&4&@&3ZF("e!*!F69F\rJ8'&cBf&X)(Ji0J#3%i!!!!"849K8,R*M!*!G69FJ9fPZ8N-!N"a849K8,R*PF`#\r3(>EP*PFb"*EA"[FR3!N"XZC'pM!*!m8!#3"bjXD@)!N"a-D@)J5@e`Eh*d)(J\ri0J#3'Lj[BQS!N"a2BQSJ5@e`Eh*d)(Ji0J#3&`3!N"!"!*$r!*"%AepcG'&bG!#\r3I!%!!`'3"3!"!*!(690*43#3r`#3r`!!D(4dF$S[,fTKGQ%ZFh9Z,Q0[E5p`FQp\rNG@0dFbpUC'X[-5ia,f4[Bh-[BA"T,`#3d`J!N"3'8(PdD'pZ!*$r!*!6!3#3#3%\r!!#!!!!$rN!3!!3%"!*$r!$S!N2m!N2m!#8GPEQ9bBA4PC!!$!*$r!*$r!*#$&3%\r"!*$r!*$r!*$r!*!-!3#3r`#3r`#3r`#3r`#3r`#3$!)169*+3A"`E'PMBA4TEfi\r!N")"!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$r!*$\rr!*$)$3#3r`#3r`#3"%e658845@jdCA*ZCA3J4AK`E'pbCA)!N#j*CAK`E'pbC5j\rPH'8!N2m!N2Eb,caSCR-J"9PQ)"!!N!8%-!EHK*!!!!!"!!!!(J`!!"d-"9P9!!8\rb+l3#mJ!!!"`"*J!)8QPN6!!!!%TKCA4P!!!!9QeMG')!!3"L689193!&!(T38'p\rL!!!!`P088L-!!!$16@0YC!!!!0TfCA*c!!%!jQ0QFQF!!!$q!)!!N!d+!!!!0J#\r3"!4d!")!!!,'!*!%"'Mrr`!!!ZS!N!3%D3!R!!!$$J#3"!4U!$%!!!0R!*!%"(3\r!03!!!kS!N!3I3!!q!!!'R3#3"!4S!%d!!!I3!*!%"'X!@J!!##m!N!@!!'J!!!K\rF!*!%!5i!FL!!'r%!N!3%D2rr!!!F,!#3"3(rr`!!($)!N!8#rrm!!"b#!*!'rrm\r!!"b`!*!%#@4TG'aI5Q&fB3G&EQGXDA0S&&CTFR4eB@`J6@&MD'PZC5"YC@je#@T\rKGQ%JG(P`C30@6A-)9Nec)(9ZDAJ13A"`E'9d)&CTCAGPFR--F(*[DQ9MG#"dHA"\rP$8TKGQ%J3f&bC#"@6A-*C'PdE&p+BACK$%eTFf-J8h4bD@jRFk-JEJ!)5'J!%+N\rS"9PUJ'X"!!3"K)C3"Yk#d2qZ!S!!!2rr-J-#J39C93#bJ'-!reB`"#BI+"p1ANj\reM84[8Q9MC@PfC84bEh!!!%j@!!")jaJJ*'i!#(B!6VVlm#J!+@i!'!!!-#i!(!a\r!!!eL!!$fd%!`1`!'6[X!!J$U!"`!B!"Z!(B!JJ#1!*B!RJ#U!,B!kJ$#!0K`%-#\rZ!""R%%+X!!3jI!"N!!SjI!!b!!K+V!!%C`CfJ'!!!+iJEJ!-+@J!"!!%,b`!"$m\rX!!Sr,!!)(c`!!DNGB!!!MN+X!!"#V!!%GJ"J!!#!6VVmc$B!B(B[%Nkkr+Bf!&K\r2B'SI%Nkkr(`f!&42B&j1Z[`b0J"J9Nkkqq)f!'"1(a*1Z[Zq0J"86f"#,`T1Z[Y\rd0J"B6f!f,`T1Z[XU0J"B6f!U,bS!"LmU!!)r%Nkkr)Jf!%r[!!TJ&#mU!!B[+J!\r#6VVq!MB!8%pJ!RD!)!6"M$p$!#T-h`3B6PiJAdr[!"C1d)4YB@PZ!!!!")JH1!5\r2j@!!-J"N!*"#CcPR1@FjCcN%P[!!U`!!&J!!!6!!%3D8!!B!'!!,!!N!"!!*!*!\r%)@-!N!BKB`GR31`!!!&0"fG"d!#3"!%!N"i",LN!!!%"")rTi!5!+JJ%J)rB")"\rU@!#3#!5!DK!%J'T3")"U5!#3"!5!DJ!%J'Ri!!!%MqFJ")rSN!!!!3!*!!!!!3!\r!2j!%39"36!9C!!%!@ANJ!*!'"K!'hS,3rki#J!!!rrmb!`+""9Pc-,+!B`$r9M!\r%*KmS(djH6R@04'p5C@0PDACP4(*[F!!!6PB!!%MR'#!NEJ!)GJ"1Z[[`+!!TEJ!\rB!!!`,J!F$%!!$@)!!2E33$!l!!C1q`!#!1S!(!"J!'i!GJ##!)i!PJ#H!+S!YJ$\rU!-)!f(!3`+i!%'F33U`!"$Pm!'3!#MPm!$)!#%UX!!4R"RD!B!!!VL"Z!!`TD!!\r%!!3[,!!%2b`!#MmX!!JI2!!"U4eJ!!#13U`!!%+X!!4f!'!!!)"1Z[c-0J"JGLm\r56VVmTMB!@%pJDKm56VVmI$B!9%pJANkk!$)f!'"@6VVliMB!B%iI%Nkkqlif!&4\r2B%)[#Nkkqh3f!&K2B$B[#NkkqbSf!&K2B#S[+J!',bS!!Mm56VVmL$B!6qm!#Q!\r8,bS!"LmU!!*1Z[i#0J"36f!#GS!J"-'-2d-!+NcI""K1AL"I6qm!&Nl3K'eKD@i\r!!!!%L"ii")rPB!!b!'3!N%*R1@FjCcPR135BFX#V!!!@!!!"-!!4"T3!"J!B!!X\r!#3!%!!N!N!3KB`#3"L&M"fG!l!!!!8d(Cd(3!*!%!3!!!"16!!!8F!#3&3'9X`!\r!!3%%MqRJ")!U#!5!MpJ%J'TB!*!)")"U%!5!DP!%J'T)!*!%")"U!!5!DIJ!!!5\r2jb!%MqL3!!!"!!N!N!MrN!B!!!%!N$%%J'SJ")"U'!5!DM!%J'SS!*!'rj!'!*!\r*!3!!")rR)!!U!!8"I`*R!!!!QIrl!!!0QJZ`!!S!N!MiJ!52j6!%Q!!"!!!!$!!\r!"E!!#N3JB!S!!%*#@&3!J!!!6[S%!N(krql4r!!!"8SJ#+"9`Ba1G8je6PB!!#"\rZ!!JaI!)!!!)`[!!Y-A`!C!!'-A`!33!%F!"1ANjePNKKEQ4XC8GPG%4PCQ&eE(4\r3Eh00FfF!!!"19J!!)'i!#$#m!"iaI!$)!!3aI!"3!!)aI!%X!!C`!%jH6R@@5'&\rZC'aP4f9d4h*[Gd*[G@jNFdecC`!!!%j@!!"`J%jH6R@05'&ZC'aP@Qp[E8ecC`!\r!6PErr%UX!!4R*NKZrrbSG#mX!!5SFb"X!!4)D!!3U+-JE!!%5'J!%+NS,blrr+K\rcF!"1ANjeMdKKEJ"XC9*PFfPkC8ecC`!!6PB!!%UX!!4R)$mm!!1SKcmm!!QSLLm\rm!"3!"DL65'`!$+L%,b`!"+N%F!"1ANjeM8KKEQ4XC84bBAG0FfF!!%j@!!"`!%j\rH6R@45'&ZC'aP3@0dDACKG'90FfF!!%j@!!"`!%jH6R@15'&ZC'aP4ACPER40FfF\r!!!"19J!!F!"1ANjeM8KKEQ4XC8PNE'90FfF!!%j@rq*)ja``*'i!$RS!5'lrq+K\rd,bi!#UKc-#i!#!a!!!9L!!&-d%!`1`!'6[X!!J&!!!`!JJ#+!43"3%)X!%a96bm\r+5'lrpR!1Uqd`(fB!!5"f!@!kH!"96bm+2`0)E[rbF!qVl6!I5-"Q(P92,`S[,[r\rb,caSCR-J5'lrjR!5Uqd`(dM!CJ*i!4P%!%a53dSX!%aQ!!$D-#lrpJ+!!!$rrc)\r$!S%!!2rrXS"MU'!!!-"#,!"0B!!!Z&92,`T)E[rZF"QVl6!I98m[#NKZrra)E[r\rLF"UVl6!I5'lrr+KaF!(!V[rZC`!!L&92,blrr#"Z!!T)D!!3U+d3(fF`@8qSf#"\rI*NJ[#b"Z!!T)D!!3U0p96bm+,`XI2!!"F"kVl6!I,`ZSf4Pm!!%!6@"#5L`!6@F\r+98m[#R!IUqd`(d)X!%eJ,%SX!%eR*P92,`T)E[rUF"QVl6!ICKC`!F#Z!!8!!3C\r3HA4SEfja!*!B8LTMD%*#6%d!N(%"2j!%!*!(!J"3!!%!!3!"!!%!N2m!&#G$6d4\r&*b!R4%&835FJ*e"*3e3R!*$X"!!"!*""!J!$!!S!N%8"!!!!"!!!#Nj26N&045j\r&@%8!N"C!!*!%"!#3"!3!!!3!N!3%!*!5#Qj[EQ&YC5jXD@)!N!BJ"9Q-!!!!!3!\r!!"3-!*!%!5J!!!`!EA0dFJ#3$JdS!!!'!'ecG'`!N!iA9!!!!J"YFh4Z!*!1%bJ\r!!!!SEA0dD3#3$KP8!!!)!'ecG()!!!2S!*!++4)!!!5!EA0dE!!!!qJ!N!SK9!!\r!!B"YFh4Z!!!$k!#3#L35!!!&!'edF'`!!!!"!*!+&%N!!!#!EA4`F`!!!!%!N!S\rA%!!!!#"YG(0X!!!!!3#3#K03!!!!+'ecG'N!!!2S!*!+,C)!!!)XEA"cD3!!!qJ\r!N!S[[J!!!KaYG'GX!!!$k!#3#K6*!!!!%'edF'N!!!!"!*!+1*!!!!!!+'edE'm\r!!!!"!*!+5Qi!!!!NF(*PCJ!#YqN!!!!E!*!'5T)!!!!+F(*PCJ!#cG8!!!!F!*!\r'8Q3!!!#5F(*PCJ!#%&%!!!!G!*!'8[B!!!"+F(*PCJ!#J`3!!!!H!*!'%i%!!!$\r!8%acG!!#)cX!!!!I!*!'-NS!!!!-F(*PCJ!#TTm!!!!X!*!'&e!!!!!%F(*PCJ!\r#KU%!!!![!*!'12-!!!!iF(*PCJ!#J3-!!!!a!*!'15X!!!!0F(*PCJ!#mrX!!!!\rb!*!'HL!!!!-DF(*PCJ!"-*3!!!"%!*!'&`B!!!!)E@&XE!#3$K8$!!!!T'eKF'`\r!N!i6H!!!!!PYEh4T!*!1&%%!!!!)F(*PCJ#Z!Nd!!!"3!*!'16J!!!U)F(*PCJ#\rZ)$`!!!"4!*!'-PB!!!83F(*PCJ#ZE5B!!!"5!*!'3m!!!!B8F(*PCJ#Yp)F!!!"\r6!*!'8d!!!##kF(*PCJ#Z'BX!!!"8!*!'&DF!!!%(F(*PCJ#Z"jJ!!!"9!*!'5T`\r!!!-JF(*PCJ#ZedF!!!"@!*!'6E`!!!-'F(*PCJ#ZT@%!!!"A!*!'&0N!!!!%F(*\rPCJ#ZQ2F!!!"B!*!'&0d!!!!DF(*PCJ#ZdbB!!!"C!*!'&Ui!!!!8F(*PCJ#ZRSi\r!!!"D!*!'&2F!!!!+F(*PCJ#ZV2B!!!"E!*!'&X)!!!!-F(*PCJ#ZBaX!!!"F!*!\r'&Xi!!!!1F(*PCJ#ZdPi!!!"G!*!')Y3!!!%'F(*PCJ#ZD"`!!!"H!*!'-GS!!!!\rqF(*PCJ#Z0d8!!!"I!*!'&Y`!!!!1F(*PCJ#YhJ#3"'!!N!CcqJ!!!GT`FQ9Q!+i\r4$3!!!'%!N!Cp1J!!"Bj`FQ9Q!+k$lJ!!!')!N!D#b!!!"3K`FQ9Q!+k5$!!!!'-\r!N!BhCJ!!!4"`FQ9Q!+j[,!!!!'3!N!D(d!!!$pa`FQ9Q!+l9"3!!!'8!N!BMfJ!\r!!$*`FQ9Q!+jkG!!!!'B!N!DAV!!!#)"`FQ9Q!+k(53!!!'F!N!Cee!!!!a4`FQ9\rQ!+h`B3!!!'J!N!C*e!!!!'*`FQ9Q!+kq6!!!!'N!N!C3`J!!!0K`FQ9Q!+kR@J!\r!!'S!N!DJ,!!!"K4`FQ9Q!+j#-J!!!'X!N!B@kJ!!!"4`FQ9Q!+i3+J!!!'`!N!B\rA-!!!!!T`FQ9Q!+jK5J!!!'d!N!BA1J!!!!a`FQ9Q!+k%CJ!!!'i!N!C4QJ!!!-4\r`FQ9Q!+jFF3!!!'m!N!Cik!!!!4K`FQ9Q!+iF33!!!(!!N!DQ3!!!!+K`FQ9Q!+i\rG%J!!!(%!N!Bb'!!!!#j`FQ9Q!+l+-!!!!()!N!DQk!!!!Ja`FQ9Q!+j4iJ!!!(-\r!N!BiZ!!!!#*`FQ9Q!+i%,3!!!(3!N!BiGJ!!!"4`FQ9Q!+j)Y`!!!(8!N!BifJ!\r!!"*`FQ9Q!+i-6J!!!(B!N!C+0J!!!"T`FQ9Q!+i#B!!!!(F!N!C+8!!!!!a`FQ9\rQ!+i"A`!!!(J!N!DSp!!!!**`FQ9Q!+ip*!!!!(N!N!DTKJ!!!'T`FQ9Q!+iT(!!\r!!(S!N!6AF`!!!3!!!!%!N!JH!*$b!3!!!!%!N!JH#Q'iY!0b!!!!(!!HrrrAhJ:\r
\ No newline at end of file