summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstanton <stanton>1998-09-24 23:58:14 (GMT)
committerstanton <stanton>1998-09-24 23:58:14 (GMT)
commit9995355714bc90faf7c2e345b3d6a1d041447097 (patch)
tree2ad97c5b1994495118cef4df947cf16b55e326f2
parente13392595faf8e8d0d1c3c514ce160cfadc3d372 (diff)
downloadtcl-9995355714bc90faf7c2e345b3d6a1d041447097.zip
tcl-9995355714bc90faf7c2e345b3d6a1d041447097.tar.gz
tcl-9995355714bc90faf7c2e345b3d6a1d041447097.tar.bz2
merging changes from 8.0.3 into 8.1a2
-rw-r--r--README86
-rw-r--r--changes141
-rw-r--r--compat/README2
-rw-r--r--compat/dirent.h2
-rw-r--r--compat/dirent2.h2
-rw-r--r--compat/dlfcn.h2
-rw-r--r--compat/fixstrtod.c2
-rw-r--r--compat/float.h2
-rw-r--r--compat/gettod.c2
-rw-r--r--compat/limits.h2
-rw-r--r--compat/opendir.c2
-rw-r--r--compat/stdlib.h2
-rw-r--r--compat/strftime.c9
-rw-r--r--compat/string.h2
-rw-r--r--compat/strncasecmp.c2
-rw-r--r--compat/strstr.c2
-rw-r--r--compat/strtod.c2
-rw-r--r--compat/strtol.c2
-rw-r--r--compat/strtoul.c2
-rw-r--r--compat/tclErrno.h2
-rw-r--r--compat/tmpnam.c2
-rw-r--r--compat/unistd.h2
-rw-r--r--compat/waitpid.c2
-rw-r--r--doc/AddErrInfo.32
-rw-r--r--doc/Alloc.32
-rw-r--r--doc/AllowExc.32
-rw-r--r--doc/AppInit.32
-rw-r--r--doc/AssocData.32
-rw-r--r--doc/Async.32
-rw-r--r--doc/BackgdErr.32
-rw-r--r--doc/Backslash.32
-rw-r--r--doc/BoolObj.32
-rw-r--r--doc/CallDel.32
-rw-r--r--doc/CmdCmplt.32
-rw-r--r--doc/Concat.32
-rw-r--r--doc/CrtChannel.32
-rw-r--r--doc/CrtChnlHdlr.32
-rw-r--r--doc/CrtCloseHdlr.32
-rw-r--r--doc/CrtCommand.32
-rw-r--r--doc/CrtFileHdlr.32
-rw-r--r--doc/CrtInterp.32
-rw-r--r--doc/CrtMathFnc.32
-rw-r--r--doc/CrtObjCmd.32
-rw-r--r--doc/CrtSlave.32
-rw-r--r--doc/CrtTimerHdlr.32
-rw-r--r--doc/CrtTrace.32
-rw-r--r--doc/DString.32
-rw-r--r--doc/DetachPids.32
-rw-r--r--doc/DoOneEvent.32
-rw-r--r--doc/DoWhenIdle.32
-rw-r--r--doc/DoubleObj.32
-rw-r--r--doc/Eval.32
-rw-r--r--doc/Exit.32
-rw-r--r--doc/ExprLong.32
-rw-r--r--doc/ExprLongObj.32
-rw-r--r--doc/FindExec.320
-rw-r--r--doc/GetIndex.32
-rw-r--r--doc/GetInt.32
-rw-r--r--doc/GetOpnFl.32
-rw-r--r--doc/GetStdChan.32
-rw-r--r--doc/Hash.32
-rw-r--r--doc/IntObj.32
-rw-r--r--doc/Interp.32
-rw-r--r--doc/LinkVar.32
-rw-r--r--doc/ListObj.32
-rw-r--r--doc/Notifier.32
-rw-r--r--doc/Object.32
-rw-r--r--doc/ObjectType.32
-rw-r--r--doc/OpenFileChnl.32
-rw-r--r--doc/OpenTcp.32
-rw-r--r--doc/PkgRequire.32
-rw-r--r--doc/Preserve.32
-rw-r--r--doc/PrintDbl.32
-rw-r--r--doc/RecEvalObj.32
-rw-r--r--doc/RecordEval.32
-rw-r--r--doc/RegExp.32
-rw-r--r--doc/SetErrno.32
-rw-r--r--doc/SetRecLmt.32
-rw-r--r--doc/SetResult.32
-rw-r--r--doc/SetVar.32
-rw-r--r--doc/Sleep.32
-rw-r--r--doc/SplitList.32
-rw-r--r--doc/SplitPath.32
-rw-r--r--doc/StaticPkg.32
-rw-r--r--doc/StrMatch.32
-rw-r--r--doc/StringObj.32
-rw-r--r--doc/Tcl.n4
-rw-r--r--doc/Tcl_Main.32
-rw-r--r--doc/TraceVar.32
-rw-r--r--doc/Translate.32
-rw-r--r--doc/UpVar.32
-rw-r--r--doc/WrongNumArgs.32
-rw-r--r--doc/after.n2
-rw-r--r--doc/append.n2
-rw-r--r--doc/array.n2
-rw-r--r--doc/bgerror.n2
-rw-r--r--doc/binary.n2
-rw-r--r--doc/break.n2
-rw-r--r--doc/case.n2
-rw-r--r--doc/catch.n2
-rw-r--r--doc/cd.n2
-rw-r--r--doc/clock.n2
-rw-r--r--doc/close.n2
-rw-r--r--doc/concat.n2
-rw-r--r--doc/continue.n2
-rw-r--r--doc/eof.n2
-rw-r--r--doc/error.n2
-rw-r--r--doc/eval.n2
-rw-r--r--doc/exec.n2
-rw-r--r--doc/exit.n2
-rw-r--r--doc/expr.n2
-rw-r--r--doc/fblocked.n2
-rw-r--r--doc/fconfigure.n2
-rw-r--r--doc/fcopy.n2
-rw-r--r--doc/file.n2
-rw-r--r--doc/fileevent.n2
-rw-r--r--doc/filename.n2
-rw-r--r--doc/flush.n2
-rw-r--r--doc/for.n2
-rw-r--r--doc/foreach.n2
-rw-r--r--doc/format.n2
-rw-r--r--doc/gets.n2
-rw-r--r--doc/glob.n2
-rw-r--r--doc/global.n2
-rw-r--r--doc/history.n2
-rw-r--r--doc/http.n2
-rw-r--r--doc/if.n2
-rw-r--r--doc/incr.n2
-rw-r--r--doc/info.n2
-rw-r--r--doc/interp.n4
-rw-r--r--doc/join.n2
-rw-r--r--doc/lappend.n2
-rw-r--r--doc/library.n34
-rw-r--r--doc/lindex.n2
-rw-r--r--doc/linsert.n2
-rw-r--r--doc/list.n2
-rw-r--r--doc/llength.n2
-rw-r--r--doc/load.n2
-rw-r--r--doc/lrange.n2
-rw-r--r--doc/lreplace.n2
-rw-r--r--doc/lsearch.n2
-rw-r--r--doc/lsort.n2
-rw-r--r--doc/man.macros2
-rw-r--r--doc/namespace.n2
-rw-r--r--doc/open.n2
-rw-r--r--doc/package.n2
-rw-r--r--doc/pid.n2
-rw-r--r--doc/pkgMkIndex.n2
-rw-r--r--doc/proc.n2
-rw-r--r--doc/puts.n2
-rw-r--r--doc/pwd.n2
-rw-r--r--doc/read.n2
-rw-r--r--doc/regexp.n2
-rw-r--r--doc/registry.n2
-rw-r--r--doc/regsub.n2
-rw-r--r--doc/rename.n2
-rw-r--r--doc/resource.n2
-rw-r--r--doc/return.n2
-rw-r--r--doc/safe.n2
-rw-r--r--doc/scan.n2
-rw-r--r--doc/seek.n2
-rw-r--r--doc/set.n2
-rw-r--r--doc/socket.n2
-rw-r--r--doc/source.n2
-rw-r--r--doc/split.n2
-rw-r--r--doc/string.n2
-rw-r--r--doc/subst.n2
-rw-r--r--doc/switch.n2
-rw-r--r--doc/tclsh.12
-rw-r--r--doc/tclvars.n2
-rw-r--r--doc/tell.n2
-rw-r--r--doc/time.n2
-rw-r--r--doc/trace.n2
-rw-r--r--doc/unknown.n2
-rw-r--r--doc/unset.n2
-rw-r--r--doc/update.n2
-rw-r--r--doc/uplevel.n2
-rw-r--r--doc/upvar.n2
-rw-r--r--doc/variable.n2
-rw-r--r--doc/vwait.n2
-rw-r--r--doc/while.n2
-rw-r--r--generic/README2
-rw-r--r--generic/panic.c5
-rw-r--r--generic/tcl.h90
-rw-r--r--generic/tclAlloc.c2
-rw-r--r--generic/tclAsync.c2
-rw-r--r--generic/tclBasic.c140
-rw-r--r--generic/tclBinary.c4
-rw-r--r--generic/tclCkalloc.c2
-rw-r--r--generic/tclClock.c2
-rw-r--r--generic/tclCmdAH.c2
-rw-r--r--generic/tclCmdIL.c176
-rw-r--r--generic/tclCmdMZ.c2
-rw-r--r--generic/tclCompCmds.c34
-rw-r--r--generic/tclCompExpr.c2
-rw-r--r--generic/tclCompile.c355
-rw-r--r--generic/tclCompile.h73
-rw-r--r--generic/tclDate.c2
-rw-r--r--generic/tclEnv.c2
-rw-r--r--generic/tclEvent.c2
-rw-r--r--generic/tclExecute.c7
-rw-r--r--generic/tclFCmd.c13
-rw-r--r--generic/tclFileName.c2
-rw-r--r--generic/tclGet.c2
-rw-r--r--generic/tclGetDate.y2
-rw-r--r--generic/tclHash.c2
-rw-r--r--generic/tclHistory.c2
-rw-r--r--generic/tclIO.c56
-rw-r--r--generic/tclIOCmd.c2
-rw-r--r--generic/tclIOSock.c2
-rw-r--r--generic/tclIOUtil.c498
-rw-r--r--generic/tclIndexObj.c2
-rw-r--r--generic/tclInt.h251
-rw-r--r--generic/tclInterp.c3
-rw-r--r--generic/tclLink.c2
-rw-r--r--generic/tclListObj.c2
-rw-r--r--generic/tclLoad.c2
-rw-r--r--generic/tclLoadNone.c2
-rw-r--r--generic/tclMain.c5
-rw-r--r--generic/tclMath.h2
-rw-r--r--generic/tclNamesp.c178
-rw-r--r--generic/tclNotify.c2
-rw-r--r--generic/tclObj.c2
-rw-r--r--generic/tclParse.c52
-rw-r--r--generic/tclPipe.c2
-rw-r--r--generic/tclPkg.c2
-rw-r--r--generic/tclPort.h2
-rw-r--r--generic/tclPosixStr.c2
-rw-r--r--generic/tclPreserve.c2
-rw-r--r--generic/tclProc.c500
-rw-r--r--generic/tclRegexp.h7
-rw-r--r--generic/tclResolve.c423
-rw-r--r--generic/tclStringObj.c2
-rw-r--r--generic/tclTest.c374
-rw-r--r--generic/tclTestObj.c2
-rw-r--r--generic/tclTimer.c2
-rw-r--r--generic/tclUtil.c38
-rw-r--r--generic/tclVar.c141
-rw-r--r--library/auto.tcl527
-rw-r--r--library/history.tcl2
-rw-r--r--library/http/http.tcl2
-rw-r--r--library/http1.0/http.tcl2
-rw-r--r--library/http2.0/http.tcl2
-rw-r--r--library/http2.1/http.tcl2
-rw-r--r--library/http2.3/http.tcl2
-rw-r--r--library/init.tcl207
-rw-r--r--library/ldAout.tcl2
-rw-r--r--library/package.tcl418
-rw-r--r--library/parray.tcl2
-rw-r--r--library/safe.tcl2
-rw-r--r--library/word.tcl7
-rw-r--r--license.terms6
-rw-r--r--mac/Background.doc2
-rw-r--r--mac/MW_TclAppleScriptHeader.pch2
-rw-r--r--mac/MW_TclHeader.pch16
-rw-r--r--mac/README42
-rw-r--r--mac/bugs.doc2
-rw-r--r--mac/libmoto.doc2
-rw-r--r--mac/morefiles.doc2
-rw-r--r--mac/porting.notes2
-rw-r--r--mac/tclMac.h2
-rw-r--r--mac/tclMacAETE.r2
-rw-r--r--mac/tclMacAlloc.c11
-rw-r--r--mac/tclMacAppInit.c2
-rw-r--r--mac/tclMacApplication.r2
-rw-r--r--mac/tclMacBOAAppInit.c2
-rw-r--r--mac/tclMacBOAMain.c2
-rw-r--r--mac/tclMacChan.c6
-rw-r--r--mac/tclMacDNR.c2
-rw-r--r--mac/tclMacEnv.c2
-rw-r--r--mac/tclMacExit.c2
-rw-r--r--mac/tclMacFCmd.c2
-rw-r--r--mac/tclMacFile.c8
-rw-r--r--mac/tclMacInit.c2
-rw-r--r--mac/tclMacInt.h2
-rw-r--r--mac/tclMacInterupt.c2
-rw-r--r--mac/tclMacLibrary.c2
-rw-r--r--mac/tclMacLibrary.r2
-rw-r--r--mac/tclMacLoad.c2
-rw-r--r--mac/tclMacMSLPrefix.h2
-rw-r--r--mac/tclMacMath.h2
-rw-r--r--mac/tclMacNotify.c2
-rw-r--r--mac/tclMacOSA.c2
-rw-r--r--mac/tclMacOSA.r2
-rw-r--r--mac/tclMacPanic.c2
-rw-r--r--mac/tclMacPort.h43
-rw-r--r--mac/tclMacProjects.sit.hqx4081
-rw-r--r--mac/tclMacResource.c30
-rw-r--r--mac/tclMacResource.r2
-rw-r--r--mac/tclMacShLib.exp6
-rw-r--r--mac/tclMacSock.c2
-rw-r--r--mac/tclMacTest.c2
-rw-r--r--mac/tclMacTime.c2
-rw-r--r--mac/tclMacUnix.c2
-rw-r--r--mac/tclMacUtil.c2
-rw-r--r--tests/README2
-rw-r--r--tests/append.test2
-rw-r--r--tests/assocd.test2
-rw-r--r--tests/async.test2
-rw-r--r--tests/autoMkindex.test55
-rw-r--r--tests/basic.test22
-rw-r--r--tests/binary.test2
-rw-r--r--tests/case.test2
-rw-r--r--tests/clock.test2
-rw-r--r--tests/cmdAH.test31
-rw-r--r--tests/cmdIL.test41
-rw-r--r--tests/cmdInfo.test2
-rw-r--r--tests/compile.test64
-rw-r--r--tests/concat.test2
-rw-r--r--tests/dcall.test2
-rw-r--r--tests/defs3
-rw-r--r--tests/dstring.test2
-rw-r--r--tests/env.test2
-rw-r--r--tests/error.test2
-rw-r--r--tests/eval.test2
-rw-r--r--tests/event.test6
-rw-r--r--tests/exec.test2
-rw-r--r--tests/execute.test2
-rw-r--r--tests/expr-old.test13
-rw-r--r--tests/expr.test2
-rw-r--r--tests/fCmd.test2
-rw-r--r--tests/fileName.test2
-rw-r--r--tests/for-old.test2
-rw-r--r--tests/for.test2
-rw-r--r--tests/foreach.test2
-rw-r--r--tests/format.test2
-rw-r--r--tests/get.test2
-rw-r--r--tests/history.test2
-rw-r--r--tests/http.test2
-rw-r--r--tests/httpold.test2
-rw-r--r--tests/if-old.test2
-rw-r--r--tests/if.test2
-rw-r--r--tests/incr-old.test2
-rw-r--r--tests/incr.test2
-rw-r--r--tests/indexObj.test2
-rw-r--r--tests/info.test16
-rw-r--r--tests/init.test2
-rw-r--r--tests/interp.test10
-rw-r--r--tests/io.test47
-rw-r--r--tests/ioCmd.test2
-rw-r--r--tests/ioUtil.test300
-rw-r--r--tests/join.test2
-rw-r--r--tests/lindex.test2
-rw-r--r--tests/link.test2
-rw-r--r--tests/linsert.test2
-rw-r--r--tests/list.test2
-rw-r--r--tests/listObj.test2
-rw-r--r--tests/llength.test2
-rw-r--r--tests/load.test2
-rw-r--r--tests/lrange.test2
-rw-r--r--tests/lreplace.test2
-rw-r--r--tests/lsearch.test2
-rw-r--r--tests/macFCmd.test2
-rw-r--r--tests/misc.test2
-rw-r--r--tests/namespace-old.test2
-rw-r--r--tests/namespace.test19
-rw-r--r--tests/obj.test2
-rw-r--r--tests/opt.test6
-rw-r--r--tests/osa.test2
-rw-r--r--tests/parse.test2
-rw-r--r--tests/pid.test2
-rw-r--r--tests/pkg.test2
-rw-r--r--tests/proc-old.test2
-rw-r--r--tests/proc.test2
-rw-r--r--tests/pwd.test2
-rw-r--r--tests/regexp.test2
-rw-r--r--tests/registry.test2
-rw-r--r--tests/remote.tcl161
-rw-r--r--tests/rename.test2
-rw-r--r--tests/resource.test2
-rw-r--r--tests/safe.test2
-rw-r--r--tests/scan.test2
-rw-r--r--tests/set-old.test25
-rw-r--r--tests/set.test2
-rw-r--r--tests/socket.test30
-rw-r--r--tests/source.test2
-rw-r--r--tests/split.test2
-rw-r--r--tests/string.test2
-rw-r--r--tests/stringObj.test2
-rw-r--r--tests/subst.test2
-rw-r--r--tests/switch.test2
-rw-r--r--tests/timer.test2
-rw-r--r--tests/trace.test2
-rw-r--r--tests/unixFCmd.test23
-rw-r--r--tests/unixFile.test66
-rw-r--r--tests/unixNotfy.test3
-rw-r--r--tests/unknown.test2
-rw-r--r--tests/uplevel.test2
-rw-r--r--tests/upvar.test7
-rw-r--r--tests/util.test2
-rw-r--r--tests/var.test6
-rw-r--r--tests/while-old.test2
-rw-r--r--tests/while.test2
-rw-r--r--tests/winFCmd.test2
-rw-r--r--tests/winNotify.test2
-rw-r--r--tests/winPipe.test15
-rw-r--r--tools/Makefile.in49
-rw-r--r--tools/configure.in2
-rw-r--r--tools/index.tcl6
-rw-r--r--tools/man2help.tcl2
-rw-r--r--tools/man2help2.tcl16
-rw-r--r--tools/man2tcl.c2
-rw-r--r--tools/tcl.hpj12
-rw-r--r--unix/Makefile.in130
-rw-r--r--unix/README2
-rw-r--r--unix/configure.in85
-rw-r--r--unix/dltest/Makefile.in2
-rw-r--r--unix/dltest/README2
-rw-r--r--unix/dltest/configure.in2
-rw-r--r--unix/dltest/pkga.c2
-rw-r--r--unix/dltest/pkgb.c2
-rw-r--r--unix/dltest/pkgc.c2
-rw-r--r--unix/dltest/pkgd.c2
-rw-r--r--unix/dltest/pkge.c3
-rw-r--r--unix/dltest/pkgf.c2
-rwxr-xr-xunix/ldAix2
-rw-r--r--unix/porting.notes2
-rw-r--r--unix/porting.old2
-rw-r--r--unix/tclAppInit.c2
-rw-r--r--unix/tclConfig.sh.in19
-rw-r--r--unix/tclLoadAix.c2
-rw-r--r--unix/tclLoadAout.c2
-rw-r--r--unix/tclLoadDl.c2
-rw-r--r--unix/tclLoadDld.c2
-rw-r--r--unix/tclLoadNext.c2
-rw-r--r--unix/tclLoadOSF.c2
-rw-r--r--unix/tclLoadShl.c2
-rw-r--r--unix/tclMtherr.c2
-rw-r--r--unix/tclUnixChan.c28
-rw-r--r--unix/tclUnixEvent.c2
-rw-r--r--unix/tclUnixFCmd.c8
-rw-r--r--unix/tclUnixFile.c23
-rw-r--r--unix/tclUnixInit.c6
-rw-r--r--unix/tclUnixNotfy.c2
-rw-r--r--unix/tclUnixPipe.c2
-rw-r--r--unix/tclUnixPort.h17
-rw-r--r--unix/tclUnixSock.c2
-rw-r--r--unix/tclUnixTest.c177
-rw-r--r--unix/tclUnixTime.c2
-rw-r--r--unix/tclXtNotify.c656
-rw-r--r--unix/tclXtTest.c2
-rw-r--r--win/README111
-rw-r--r--win/cat.c2
-rw-r--r--win/makefile.bc3
-rw-r--r--win/makefile.vc178
-rw-r--r--win/mkd.bat20
-rw-r--r--win/pkgIndex.tcl2
-rw-r--r--win/rmd.bat20
-rw-r--r--win/stub16.c2
-rw-r--r--win/tcl.rc2
-rw-r--r--win/tcl16.rc2
-rw-r--r--win/tclAppInit.c2
-rw-r--r--win/tclWin16.c2
-rw-r--r--win/tclWin32Dll.c103
-rw-r--r--win/tclWinChan.c8
-rw-r--r--win/tclWinError.c2
-rw-r--r--win/tclWinFCmd.c2
-rw-r--r--win/tclWinFile.c3
-rw-r--r--win/tclWinInit.c22
-rw-r--r--win/tclWinInt.h11
-rw-r--r--win/tclWinLoad.c2
-rw-r--r--win/tclWinMtherr.c2
-rw-r--r--win/tclWinNotify.c2
-rw-r--r--win/tclWinPipe.c18
-rw-r--r--win/tclWinPort.h14
-rw-r--r--win/tclWinReg.c63
-rw-r--r--win/tclWinSock.c211
-rw-r--r--win/tclWinTest.c2
-rw-r--r--win/tclWinTime.c2
-rw-r--r--win/tclsh.rc2
-rw-r--r--win/winDumpExts.c2
471 files changed, 10433 insertions, 2435 deletions
diff --git a/README b/README
index d68615c..f801154 100644
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
Tcl
-SCCS: @(#) README 1.57 98/02/18 16:11:20
+RCS: @(#) $Id: README,v 1.1.2.2 1998/09/24 23:58:14 stanton Exp $
1. Introduction
---------------
@@ -39,6 +39,10 @@ books on Tcl:
Exploring Expect, by Don Libes,
O'Reilly and Associates, 1995, ISBN 1-56592-090-2
+Other books are listed at
+http://www.scriptics.com/resource/doc/books/
+http://www.tclconsortium.org/resources/books.html
+
The "doc" subdirectory in this release contains a complete set of reference
manual entries for Tcl. Files with extension ".1" are for programs (for
example, tclsh.1); files with extension ".3" are for C library procedures;
@@ -56,7 +60,7 @@ using the normal "man" mechanisms, such as
man Tcl
There is also an official home for Tcl and Tk on the Web:
- http://sunscript.sun.com
+ http://www.scriptics.com
These Web pages include information about the latest releases, products
related to Tcl and Tk, reports on bug fixes and porting issues, HTML
versions of the manual pages, and pointers to many other Tcl/Tk Web
@@ -72,12 +76,13 @@ or Win 3.1 with Win32s).
Before trying to compile Tcl you should do the following things:
(a) Check for a binary release. Pre-compiled binary releases are
- available now for PCs and Macintoshes. Binary releases are much
- easier to install than source releases. To find out whether a
- binary release is available for your platform, check the Tcl/Tk
- 8.1 Web page at http://sunscript.sun.com/TclTkCore/8.1.html.
- Also, check in the FTP directory from which you retrieved the
- base distribution.
+ available now for PCs, Macintoshes, and several flavors of UNIX.
+ Binary releases are much easier to install than source releases.
+ To find out whether a binary release is available for your
+ platform, check the Scriptics Tcl Resource Center
+ (http://www.scriptics.com/resource). Also, check in
+ the FTP directory from which you retrieved the base
+ distribution.
(b) Make sure you have the most recent patch release. Look in the
FTP directory from which you retrieved this distribution to see
@@ -85,7 +90,7 @@ Before trying to compile Tcl you should do the following things:
without changing any features, so you should normally use the
latest patch release for the version of Tcl that you want.
Patch releases are available in two forms. A file like
- tcl8.1p2.tar.Z is a complete release for patch level 2 of Tcl
+ tcl8.1.3.tar.Z is a complete release for patch level 3 of Tcl
version 8.1. If there is a file with a higher patch level than
this release, just fetch the file with the highest patch level
and use it.
@@ -101,7 +106,7 @@ Before trying to compile Tcl you should do the following things:
applied to Tcl8.1p1 to produce Tcl 8.1p2, and so on. To apply an
uncompressed patch file such as tcl8.1p1.patch, invoke a shell
command like the following from the directory containing this
- file:
+ file (some versions of patch require "-p0"):
patch -p < tcl8.1p1.patch
If the patch file has a .gz extension, invoke a command like the
following:
@@ -120,7 +125,14 @@ compiling under UNIX, "win" if you're compiling under Windows, or
in the README file in that directory for compiling Tcl, installing it,
and running the test suite.
-4. Tcl newsgroup
+4. Summary of changes in Tcl 8.1
+--------------------------------
+
+Here are the most significant changes in Tcl 8.1. In addition to these
+changes, there are several smaller changes and bug fixes. See the file
+"changes" for a complete list of all changes.
+
+5. Tcl newsgroup
-----------------
There is a network news group "comp.lang.tcl" intended for the exchange
@@ -136,7 +148,7 @@ general interest. A bad e-mail return address may prevent you from
getting answers to your questions. You may have to reconfigure your news
reading software to ensure that it is supplying valid e-mail addresses.
-5. Tcl contributed archive
+6. Tcl contributed archive
--------------------------
Many people have created exciting packages and applications based on Tcl
@@ -147,24 +159,24 @@ in the directory "/pub/tcl". The archive also contains several FAQ
("frequently asked questions") documents that provide solutions to problems
that are commonly encountered by TCL newcomers.
-6. Mailing lists
+7. Tcl Resource Center
+----------------------
+Visit http://www.scritics.com/resource/ to see an annotated index of
+many Tcl resources available on the World Wide Web. This includes
+papers, books, and FAQs, as well as extensions, applications, binary
+releases, and patches. You can contribute patches by sending them
+to <patches@scriptics.com>. You can also recommend more URLs for the
+resource center using the forms labeled "Add a Resource".
+
+8. Mailing lists
----------------
A couple of Mailing List have been set up to discuss Macintosh or
Windows related Tcl issues. In order to use these Mailing Lists you
-must have access to the internet. If you have access to the WWW the
-home pages for these mailing lists are located at the following URLs:
-
- http://www.sunlabs.com/people/raymond.johnson/mactcl-list.html
-
- -and-
-
- http://sunscript.sun.com/win/wintcl-list.html
-
-The home pages contain information about the lists and an HTML archive
-of all the past messages on the list. To subscribe send a message to:
+must have access to the internet. To subscribe send a message to:
- listserv@sunlabs.sun.com
+ wintcl-request@tclconsortium.org
+ mactcl-request@tclconsortium.org
In the body of the message (the subject will be ignored) put:
@@ -179,12 +191,12 @@ subscribing put the line:
in the body instead (or wintcl).
-7. Support and bug fixes
+9. Support and bug fixes
------------------------
We're very interested in receiving bug reports and suggestions for
improvements. We prefer that you send this information to the
-comp.lang.tcl newsgroup rather than to any of us at Sun. We'll see
+comp.lang.tcl newsgroup rather than to any of us at Scriptics. We'll see
anything on comp.lang.tcl, and in addition someone else who reads
comp.lang.tcl may be able to offer a solution. The normal turn-around
time for bugs is 3-6 weeks. Enhancements may take longer and may not
@@ -210,12 +222,18 @@ support for users. If you need help we suggest that you post questions
to comp.lang.tcl. We read the newsgroup and will attempt to answer
esoteric questions for which no-one else is likely to know the answer.
In addition, Tcl support and training are available commercially from
-NeoSoft (info@neosoft.com), Computerized Processes Unlimited
-(gwl@cpu.com), and Data Kinetics (education@dkl.com).
+Scriptics (info@scriptics.com), NeoSoft (info@neosoft.com),
+Computerized Processes Unlimited (gwl@cpu.com),
+and Data Kinetics (education@dkl.com).
-8. Tcl version numbers
+10. Tcl version numbers
----------------------
+You can test the current version of Tcl by examining the
+tcl_version and tcl_patchLevel variables. The tcl_patchLevel
+variable follows the naming rules outlined below (e.g., 8.0.3).
+The tcl_version just has the major.minor numbers in it (e.g., 8.0)
+
Each Tcl release is identified by two numbers separated by a dot, e.g.
6.7 or 7.0. If a new release contains changes that are likely to break
existing C code or Tcl scripts then the major release number increments
@@ -247,7 +265,15 @@ incompatibility. Once the official release is made then there won't
be any more incompatibilities until the next release with a new major
version number.
+(Note: This compatibility is true for Tcl scripts, but historically the Tcl
+C APIs have changed enough between releases that you may need to work a bit to
+upgrade extensions.)
+
Patch releases have a suffix such as p1 or p2. These releases contain
bug fixes only. A patch release (e.g Tcl 7.6p2) should be completely
compatible with the base release from which it is derived (e.g. Tcl
7.6), and you should normally use the highest available patch release.
+
+As of 8.0.3, the patch releases use a second . instead of 'p'. So, the
+8.0 release went to 8.0p1, 8.0p2, and 8.0.3. The alphas and betas will
+still use the 'a' and 'b' letters in their tcl_patchLevel.
diff --git a/changes b/changes
index f4acd31..479a509 100644
--- a/changes
+++ b/changes
@@ -1,6 +1,6 @@
Recent user-visible changes to Tcl:
-SCCS: @(#) changes 1.365 98/02/23 17:21:54
+RCS: @(#) $Id: changes,v 1.1.2.2 1998/09/24 23:58:15 stanton Exp $
1. No more [command1] [command2] construct for grouping multiple
commands on a single command line.
@@ -3470,8 +3470,142 @@ around to be really closed in this case. (JL)
12/8/97 (bug fix) Need to protect the channel in a fileevent so that it
is not deleted before the fileevent handler returns. (CS, JL)
+12/18/97 (bug fix) In the opt argument parsing package: if the description
+had only flags, the "too many arguments" case was not detected. The default
+value was not used for the special "args" ending argument. (DL)
+
+1/15/98 (improvement) Moved common part of initScript in common file.
+Moved windows specific initialization to init.tcl so you can initialize
+Tcl in windows without having to call Tcl_Init which is now only
+searching for init.tcl {back ported from 8.1}. (DL)
+
---- Shipped as part of the plugin as 8.0p2Plugin2, Jan 15th 98 ----
+5/27/98 (bug fix) Windows socket driver did not notice new data arriving
+on nonblocking sockets until the event loop was entered. (SS)
+
+5/27/98 (bug fix) Windows socket driver used FIONREAD, which is not
+supported correctly by WinSock. (SS)
+
+6/9/98 (bug fix) Generic channel code failed to report readable file
+events on buffered data that was left behind by a gets or read that
+did not consume all available data. (SS)
+
+6/18/98 (bug fix) Compilation of loop expressions was too aggressive
+and incorrectly inlined non-literal expressions. (SS)
+
+6/18/98 (bug fix) "info var" and "info locals" incorrectly reported
+the existence of compiler temporary variables. (SS)
+
+6/18/98 (bug fix) Dictionary sorting used signed character
+comparisons. (SS)
+
+6/18/98 (bug fix) Compile procs corrupted the exception stack in some
+cases. (SS)
+
+6/18/98 (bug fix) Array set had erratic behavior when initializing a
+variable from an empty value list. (SS)
+
+6/18/98 (bug fix) The Windows registry package had a bad bounds check
+that could lead to a crash. (SS)
+
+6/18/98 (bug fix) The foreach compile proc did not correctly handle
+non-local variable references. (SS)
+
+6/25/98 (new features) Added name resolution hooks to support [incr Tcl].
+There are new internal Tcl_*Resolver* APIs to add, query and remove the hooks.
+With this changes it should be possible to dynamically load [incr Tcl]
+as an extension. (MM)
+
+7/1/97 (bug fix) The commands "info args, body, default, procs" did
+not correctly handle imported procedures. (RJ)
+
+7/6/98 (improvement) pkg_mkIndex now implements the "package require"
+command. This makes it possible to create index files for packages
+that require another package and then execute code from that package in
+their file. Previously, this would throw an error because the required
+package had not been loaded. The -nopkgrequied flag is provided to
+revert back to the old functionality. (EMS)
+
+7/6/98 (improvement) back-ported the -direct flag from 8.1 into
+pkg_mkIndex. This results in pkgIndex.tcl files that contain direct
+source or load commands instead of tclPkgSetup commands. (EMS)
+
+7/6/98 (improvement) made changes to the AuxData items structures to support
+storage of compiled scripts on disk. Also some related minor changes in
+the compilation and execution engine. (EMS)
+
+6/4/98 (enhancement) Added new internal routines to support inserting
+and deleting from the stat, access, and open-file-channel mechanisms.
+TclAccessInsertProc, TclStatInsertProc, & TclOpenFileChannelInsertProc
+insert pointers to such routines; TclAccessDeleteProc, TclStatDeleteProc,
+& TclOpenFileChannelDeleteProc delete pointers to such routines. See
+the file generic/tclIOUtils.c for more details. (SKS)
+
+7/1/98 (enhancement) Added a new internal C variable
+tclPreInitScript. This is a pointer to a string that may hold an
+initialization script; If this pointer is non-NULL it is evaluated in
+Tcl_Init() prior to the built-in initialization script defined in the
+file generic/tclInitScript.h. (SKS)
+
+7/6/98 (bug fix) Removed dead code in PlatformInitExitHandler so that
+the TCL_LIBRARY value can be safely patched in binaries. (BW)
+
+7/24/98 (enhancement) Incorporated a new version of auto_mkindex that
+can support the [incr Tcl] class structures. This version will index
+all procedures in a source file, not just those where "proc" starts
+at the beginning of the line. If you want the old behavior, use the
+auto_mkindex_old procedure. (MM)
+
+7/24/98 (feature change) Changed the Windows registry key to be
+HKEY_LOCAL_MACHINE\Software\Scriptics\Tcl\8.0, and to store the path
+in the default value instead of "Root". Also, this key can be
+specified at compile time in case Tcl is being used in a different
+context where it needs an alternate library path from the standard Tcl
+installation. (SS)
+
+7/24/98 (feature change) Changed the search order for init.tcl. The
+tcl_library variable can now be set before calling Tcl_Init to avoid
+doing any searches. If it isn't set, then Tcl checks
+env(TCL_LIBRARY), the static value set at compile time, an install
+directory relative to the executable, a source directory relative to
+the executable, and a tcl directory relative to the source heirarchy
+containing the executable. See the comment at the top of
+generic/tclInitScript.h for more details. (SS)
+
+7/27/98 (config change) Changed the use of the DBGX flag in configure.in
+and the makefile to be TCL_DBGX. Users of tclConfig.sh may need to pass
+this through their configure files with AC_SUBST. (BW)
+
+729/98 (bug fix) Changed [info body] to return a copy of the body of a
+compiled procedure instead of the body itself, to avoid invalidation
+of the internal rep and loss of the byte-codes. (EMS)
+
+8/5/98 (bug fix) The platform init code could walk off the end of a
+buffer when reading the PkgPath registry value on Windows. (SS)
+
+8/5/98 (Windows makefile change) Introduced a set of macros to deal with
+exporting symbols when compiling DLLS on Windows. See win/README for
+details. (EMS)
+
+8/5/98 (addendum) Added a second Windows registry key under
+HKEY_LOCAL_MACHINE\Software\Scriptics\Tcl\8.0, named "pkgPath".
+This is a multi-string value used to initialize the tcl_pkgPath
+variable. This is required if extension DLLs are in architecture specific
+subdirectories. (SS)
+
+8/6/98 (new feature) Added tcl_findLibrary to init.tcl for use by
+extensions, including Tk. This searches in a canonical way for
+an extensions library directory and initialization file. (BW)
+
+8/10/98 (bug fix) Imported commands used to get lost if the target
+of the import was redefined. Tcl_CreateCommand and Tcl_CreateObjCommand
+were updated to restore import links. (Note that if you rename a command,
+the import links move to the new name, and if you delete a command then
+the import links get lost. These semantics have not changed.) (MC)
+
+-------- Released 8.0.3 to the Tcl Consortium CD-ROM project, 8/10/98 ------
+
6/18/97 (new feature) Tcl now supports international character sets:
- All C APIs now accept UTF-8 strings instead of iso8859-1 strings,
wherever you see "char *", unless explicitly noted otherwise.
@@ -3753,3 +3887,8 @@ version of the Unix notifier. The bug was showing up on a multiprocessor
as starvation of the notifier thread. (BW)
----------------- Released 8.1a2, Feb 23 1998 -----------------------
+
+9/22/98 (bug fix) Changed the value of TCL_TRACE_ARRAY so it no longer
+conflicts with the deprecated TCL_PARSE_PART1 flag. This should
+improve portability of C code. (stanton)
+
diff --git a/compat/README b/compat/README
index 4ed8e54..6c85806 100644
--- a/compat/README
+++ b/compat/README
@@ -5,4 +5,4 @@ Tcl when a system doesn't contain the corresponding files or when
they are known to be incorrect. When the whole world becomes POSIX-
compliant this directory should be unnecessary.
-sccsid = SCCS: @(#) README 1.3 96/02/16 08:56:51
+RCS: @(#) $Id: README,v 1.1.2.1 1998/09/24 23:58:16 stanton Exp $
diff --git a/compat/dirent.h b/compat/dirent.h
index 081376b..4b762f8 100644
--- a/compat/dirent.h
+++ b/compat/dirent.h
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) dirent.h 1.4 96/02/15 14:43:50
+ * RCS: @(#) $Id: dirent.h,v 1.1.2.1 1998/09/24 23:58:16 stanton Exp $
*/
#ifndef _DIRENT
diff --git a/compat/dirent2.h b/compat/dirent2.h
index 585a7e8..65c8be2 100644
--- a/compat/dirent2.h
+++ b/compat/dirent2.h
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) dirent2.h 1.4 96/02/15 14:43:51
+ * RCS: @(#) $Id: dirent2.h,v 1.1.2.1 1998/09/24 23:58:16 stanton Exp $
*/
#ifndef _DIRENT
diff --git a/compat/dlfcn.h b/compat/dlfcn.h
index cf02fb9..5c986d4 100644
--- a/compat/dlfcn.h
+++ b/compat/dlfcn.h
@@ -17,7 +17,7 @@
* for any results of using the software, alterations are clearly marked
* as such, and this notice is not modified.
*
- * SCCS: @(#) dlfcn.h 1.4 96/09/17 09:05:59
+ * RCS: @(#) $Id: dlfcn.h,v 1.1.2.1 1998/09/24 23:58:16 stanton Exp $
*/
/*
diff --git a/compat/fixstrtod.c b/compat/fixstrtod.c
index 2655767..be28210 100644
--- a/compat/fixstrtod.c
+++ b/compat/fixstrtod.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) fixstrtod.c 1.5 96/02/15 12:08:21
+ * RCS: @(#) $Id: fixstrtod.c,v 1.1.2.1 1998/09/24 23:58:17 stanton Exp $
*/
#include <stdio.h>
diff --git a/compat/float.h b/compat/float.h
index 06db4fd..801f7f7 100644
--- a/compat/float.h
+++ b/compat/float.h
@@ -12,5 +12,5 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) float.h 1.3 96/02/15 14:43:52
+ * RCS: @(#) $Id: float.h,v 1.1.2.1 1998/09/24 23:58:17 stanton Exp $
*/
diff --git a/compat/gettod.c b/compat/gettod.c
index 4110262..58e2e5e 100644
--- a/compat/gettod.c
+++ b/compat/gettod.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) gettod.c 1.2 96/02/15 12:08:26
+ * RCS: @(#) $Id: gettod.c,v 1.1.2.1 1998/09/24 23:58:17 stanton Exp $
*/
#include "tcl.h"
diff --git a/compat/limits.h b/compat/limits.h
index ec7a909..48af425 100644
--- a/compat/limits.h
+++ b/compat/limits.h
@@ -13,7 +13,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) limits.h 1.8 96/07/08 18:00:13
+ * RCS: @(#) $Id: limits.h,v 1.1.2.1 1998/09/24 23:58:17 stanton Exp $
*/
#define LONG_MIN 0x80000000
diff --git a/compat/opendir.c b/compat/opendir.c
index b1a47ff..8ecbd55 100644
--- a/compat/opendir.c
+++ b/compat/opendir.c
@@ -7,7 +7,7 @@
* originally from Larry Wall.
*
*
- * SCCS: @(#) opendir.c 1.3 96/02/15 12:08:21
+ * RCS: @(#) $Id: opendir.c,v 1.1.2.1 1998/09/24 23:58:17 stanton Exp $
*/
#include "tclInt.h"
diff --git a/compat/stdlib.h b/compat/stdlib.h
index 5ffda0e..67c33ab 100644
--- a/compat/stdlib.h
+++ b/compat/stdlib.h
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) stdlib.h 1.12 98/01/21 21:04:59
+ * RCS: @(#) $Id: stdlib.h,v 1.1.2.2 1998/09/24 23:58:17 stanton Exp $
*/
#ifndef _STDLIB
diff --git a/compat/strftime.c b/compat/strftime.c
index 29702ed..6b74628 100644
--- a/compat/strftime.c
+++ b/compat/strftime.c
@@ -8,7 +8,7 @@
* source. See the copyright notice below for details on redistribution
* restrictions. The "license.terms" file does not apply to this file.
*
- * SCCS: @(#) strftime.c 1.5 98/02/02 20:59:19
+ * RCS: @(#) $Id: strftime.c,v 1.1.2.2 1998/09/24 23:58:17 stanton Exp $
*/
/*
@@ -44,10 +44,9 @@
* SUCH DAMAGE.
*/
-#if defined(LIBC_SCCS) && !defined(lint)
-/*static char *sccsid = "from: @(#)strftime.c 5.11 (Berkeley) 2/24/91";*/
-static char *rcsid = "$Id: strftime.c,v 1.1.2.1 1998/09/21 23:39:53 stanton Exp $";
-#endif /* LIBC_SCCS and not lint */
+#if defined(LIBC_SCCS)
+static char *rcsid = "$Id: strftime.c,v 1.1.2.2 1998/09/24 23:58:17 stanton Exp $";
+#endif /* LIBC_SCCS */
#include <time.h>
#include <string.h>
diff --git a/compat/string.h b/compat/string.h
index bb4c6e7..2ffc284 100644
--- a/compat/string.h
+++ b/compat/string.h
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) string.h 1.14 98/01/08 14:24:44
+ * RCS: @(#) $Id: string.h,v 1.1.2.2 1998/09/24 23:58:17 stanton Exp $
*/
#ifndef _STRING
diff --git a/compat/strncasecmp.c b/compat/strncasecmp.c
index 749c1da..bc9d5a3 100644
--- a/compat/strncasecmp.c
+++ b/compat/strncasecmp.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) strncasecmp.c 1.7 96/10/24 15:23:36
+ * RCS: @(#) $Id: strncasecmp.c,v 1.1.2.1 1998/09/24 23:58:17 stanton Exp $
*/
#include "tclPort.h"
diff --git a/compat/strstr.c b/compat/strstr.c
index 59296db..701896e 100644
--- a/compat/strstr.c
+++ b/compat/strstr.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) strstr.c 1.4 96/02/15 12:08:22
+ * RCS: @(#) $Id: strstr.c,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
/*
diff --git a/compat/strtod.c b/compat/strtod.c
index 0a26163..e3f6478 100644
--- a/compat/strtod.c
+++ b/compat/strtod.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) strtod.c 1.9 96/12/13 15:02:46
+ * RCS: @(#) $Id: strtod.c,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
#include "tcl.h"
diff --git a/compat/strtol.c b/compat/strtol.c
index c781bd6..693f5e5 100644
--- a/compat/strtol.c
+++ b/compat/strtol.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) strtol.c 1.4 96/02/15 12:08:23
+ * RCS: @(#) $Id: strtol.c,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
#include <ctype.h>
diff --git a/compat/strtoul.c b/compat/strtoul.c
index 37fe490..9115f41 100644
--- a/compat/strtoul.c
+++ b/compat/strtoul.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) strtoul.c 1.5 96/02/15 12:08:24
+ * RCS: @(#) $Id: strtoul.c,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
#include <ctype.h>
diff --git a/compat/tclErrno.h b/compat/tclErrno.h
index bc45481..1a0ee30 100644
--- a/compat/tclErrno.h
+++ b/compat/tclErrno.h
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclErrno.h 1.1 96/04/29 15:25:31
+ * RCS: @(#) $Id: tclErrno.h,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
extern int errno; /* global error number */
diff --git a/compat/tmpnam.c b/compat/tmpnam.c
index c29a1e3..d560024 100644
--- a/compat/tmpnam.c
+++ b/compat/tmpnam.c
@@ -9,7 +9,7 @@
* software without specific written prior permission. This software
* is provided ``as is'' without express or implied warranty.
*
- * SCCS: @(#) tmpnam.c 1.3 96/02/15 12:08:25
+ * RCS: @(#) $Id: tmpnam.c,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
#include <sys/param.h>
diff --git a/compat/unistd.h b/compat/unistd.h
index 3af430c..781f8b5 100644
--- a/compat/unistd.h
+++ b/compat/unistd.h
@@ -12,7 +12,7 @@
* software for any purpose. It is provided "as is" without
* express or implied warranty.
*
- * SCCS: @(#) unistd.h 1.7 96/02/15 14:43:57
+ * RCS: @(#) $Id: unistd.h,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
#ifndef _UNISTD
diff --git a/compat/waitpid.c b/compat/waitpid.c
index 179d5de..845c74a 100644
--- a/compat/waitpid.c
+++ b/compat/waitpid.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) waitpid.c 1.9 96/02/15 12:08:26
+ * RCS: @(#) $Id: waitpid.c,v 1.1.2.1 1998/09/24 23:58:18 stanton Exp $
*/
#include "tclInt.h"
diff --git a/doc/AddErrInfo.3 b/doc/AddErrInfo.3
index 91708b8..1364908 100644
--- a/doc/AddErrInfo.3
+++ b/doc/AddErrInfo.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) AddErrInfo.3 1.28 97/06/12 13:39:53
+'\" RCS: @(#) $Id: AddErrInfo.3,v 1.1.2.1 1998/09/24 23:58:19 stanton Exp $
'\"
.so man.macros
.TH Tcl_AddErrorInfo 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/Alloc.3 b/doc/Alloc.3
index 2f1fd5a..744453d 100644
--- a/doc/Alloc.3
+++ b/doc/Alloc.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Alloc.3 1.2 96/06/05 18:00:19
+'\" RCS: @(#) $Id: Alloc.3,v 1.1.2.1 1998/09/24 23:58:19 stanton Exp $
'\"
.so man.macros
.TH Tcl_Alloc 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/AllowExc.3 b/doc/AllowExc.3
index b5b4b5c..15a12eb 100644
--- a/doc/AllowExc.3
+++ b/doc/AllowExc.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) AllowExc.3 1.5 96/03/25 19:55:47
+'\" RCS: @(#) $Id: AllowExc.3,v 1.1.2.1 1998/09/24 23:58:19 stanton Exp $
'\"
.so man.macros
.TH Tcl_AllowExceptions 3 7.4 Tcl "Tcl Library Procedures"
diff --git a/doc/AppInit.3 b/doc/AppInit.3
index ca78003..82098f1 100644
--- a/doc/AppInit.3
+++ b/doc/AppInit.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) AppInit.3 1.10 96/08/26 12:59:40
+'\" RCS: @(#) $Id: AppInit.3,v 1.1.2.1 1998/09/24 23:58:19 stanton Exp $
'\"
.so man.macros
.TH Tcl_AppInit 3 7.0 Tcl "Tcl Library Procedures"
diff --git a/doc/AssocData.3 b/doc/AssocData.3
index aef7a67..43fbf34 100644
--- a/doc/AssocData.3
+++ b/doc/AssocData.3
@@ -5,7 +5,7 @@
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
'\"
-'\" SCCS: @(#) AssocData.3 1.8 96/03/25 19:56:17
+'\" RCS: @(#) $Id: AssocData.3,v 1.1.2.1 1998/09/24 23:58:19 stanton Exp $
.so man.macros
.TH Tcl_SetAssocData 3 7.5 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/Async.3 b/doc/Async.3
index 9a58b09..f58fbcc 100644
--- a/doc/Async.3
+++ b/doc/Async.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Async.3 1.14 96/08/26 12:59:41
+'\" RCS: @(#) $Id: Async.3,v 1.1.2.1 1998/09/24 23:58:19 stanton Exp $
'\"
.so man.macros
.TH Tcl_AsyncCreate 3 7.0 Tcl "Tcl Library Procedures"
diff --git a/doc/BackgdErr.3 b/doc/BackgdErr.3
index 005f5b6..0c0ab51 100644
--- a/doc/BackgdErr.3
+++ b/doc/BackgdErr.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) BackgdErr.3 1.3 96/03/25 19:56:51
+'\" RCS: @(#) $Id: BackgdErr.3,v 1.1.2.1 1998/09/24 23:58:19 stanton Exp $
'\"
.so man.macros
.TH Tcl_BackgroundError 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/Backslash.3 b/doc/Backslash.3
index 8823e41..88e2e4d 100644
--- a/doc/Backslash.3
+++ b/doc/Backslash.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Backslash.3 1.17 97/10/15 10:16:29
+'\" RCS: @(#) $Id: Backslash.3,v 1.1.2.2 1998/09/24 23:58:20 stanton Exp $
'\"
.so man.macros
.TH Tcl_Backslash 3 "8.1" Tcl "Tcl Library Procedures"
diff --git a/doc/BoolObj.3 b/doc/BoolObj.3
index 691e5aa..e815eec 100644
--- a/doc/BoolObj.3
+++ b/doc/BoolObj.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) BoolObj.3 1.7 97/05/08 19:50:57
+'\" RCS: @(#) $Id: BoolObj.3,v 1.1.2.1 1998/09/24 23:58:20 stanton Exp $
'\"
.so man.macros
.TH Tcl_BooleanObj 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/CallDel.3 b/doc/CallDel.3
index 544afdf..a8b46c5 100644
--- a/doc/CallDel.3
+++ b/doc/CallDel.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CallDel.3 1.11 96/03/25 19:57:25
+'\" RCS: @(#) $Id: CallDel.3,v 1.1.2.1 1998/09/24 23:58:20 stanton Exp $
'\"
.so man.macros
.TH Tcl_CallWhenDeleted 3 7.0 Tcl "Tcl Library Procedures"
diff --git a/doc/CmdCmplt.3 b/doc/CmdCmplt.3
index b700343..3204789 100644
--- a/doc/CmdCmplt.3
+++ b/doc/CmdCmplt.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CmdCmplt.3 1.6 96/03/25 19:57:46
+'\" RCS: @(#) $Id: CmdCmplt.3,v 1.1.2.1 1998/09/24 23:58:20 stanton Exp $
'\"
.so man.macros
.TH Tcl_CommandComplete 3 "" Tcl "Tcl Library Procedures"
diff --git a/doc/Concat.3 b/doc/Concat.3
index be65732..bf706e7 100644
--- a/doc/Concat.3
+++ b/doc/Concat.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Concat.3 1.12 97/06/11 17:54:12
+'\" RCS: @(#) $Id: Concat.3,v 1.1.2.1 1998/09/24 23:58:20 stanton Exp $
'\"
.so man.macros
.TH Tcl_Concat 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/CrtChannel.3 b/doc/CrtChannel.3
index dbec17b..1d284ef 100644
--- a/doc/CrtChannel.3
+++ b/doc/CrtChannel.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtChannel.3 1.30 97/12/11 13:10:02
+'\" RCS: @(#) $Id: CrtChannel.3,v 1.1.2.2 1998/09/24 23:58:20 stanton Exp $
.so man.macros
.TH Tcl_CreateChannel 3 8.0 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/CrtChnlHdlr.3 b/doc/CrtChnlHdlr.3
index 388f01f..390d186 100644
--- a/doc/CrtChnlHdlr.3
+++ b/doc/CrtChnlHdlr.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtChnlHdlr.3 1.10 96/03/14 10:54:43
+'\" RCS: @(#) $Id: CrtChnlHdlr.3,v 1.1.2.1 1998/09/24 23:58:20 stanton Exp $
.so man.macros
.TH Tcl_CreateChannelHandler 3 7.5 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/CrtCloseHdlr.3 b/doc/CrtCloseHdlr.3
index 3ceff18..6e122b5 100644
--- a/doc/CrtCloseHdlr.3
+++ b/doc/CrtCloseHdlr.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtCloseHdlr.3 1.7 96/04/15 13:08:19
+'\" RCS: @(#) $Id: CrtCloseHdlr.3,v 1.1.2.1 1998/09/24 23:58:21 stanton Exp $
.so man.macros
.TH Tcl_CreateCloseHandler 3 7.5 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/CrtCommand.3 b/doc/CrtCommand.3
index 3da0a30..1606a0d 100644
--- a/doc/CrtCommand.3
+++ b/doc/CrtCommand.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtCommand.3 1.29 97/06/04 17:23:53
+'\" RCS: @(#) $Id: CrtCommand.3,v 1.1.2.1 1998/09/24 23:58:21 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateCommand 3 "" Tcl "Tcl Library Procedures"
diff --git a/doc/CrtFileHdlr.3 b/doc/CrtFileHdlr.3
index 9b26975..1f692c9 100644
--- a/doc/CrtFileHdlr.3
+++ b/doc/CrtFileHdlr.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtFileHdlr.3 1.7 97/04/23 16:11:17
+'\" RCS: @(#) $Id: CrtFileHdlr.3,v 1.1.2.1 1998/09/24 23:58:21 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateFileHandler 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/CrtInterp.3 b/doc/CrtInterp.3
index 7a3aeda..9fa3b4b 100644
--- a/doc/CrtInterp.3
+++ b/doc/CrtInterp.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtInterp.3 1.17 97/10/31 13:05:51
+'\" RCS: @(#) $Id: CrtInterp.3,v 1.1.2.1 1998/09/24 23:58:21 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateInterp 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/CrtMathFnc.3 b/doc/CrtMathFnc.3
index 907df03..da603f2 100644
--- a/doc/CrtMathFnc.3
+++ b/doc/CrtMathFnc.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtMathFnc.3 1.9 96/08/26 12:59:43
+'\" RCS: @(#) $Id: CrtMathFnc.3,v 1.1.2.1 1998/09/24 23:58:21 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateMathFunc 3 7.0 Tcl "Tcl Library Procedures"
diff --git a/doc/CrtObjCmd.3 b/doc/CrtObjCmd.3
index 0fe9611..a75dc22 100644
--- a/doc/CrtObjCmd.3
+++ b/doc/CrtObjCmd.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) CrtObjCmd.3 1.11 97/11/10 11:19:57
+'\" RCS: @(#) $Id: CrtObjCmd.3,v 1.1.2.2 1998/09/24 23:58:22 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateObjCommand 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/CrtSlave.3 b/doc/CrtSlave.3
index fe18a55..96c6b0b 100644
--- a/doc/CrtSlave.3
+++ b/doc/CrtSlave.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtSlave.3 1.26 97/07/31 18:00:14
+'\" RCS: @(#) $Id: CrtSlave.3,v 1.1.2.1 1998/09/24 23:58:22 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateSlave 3 7.6 Tcl "Tcl Library Procedures"
diff --git a/doc/CrtTimerHdlr.3 b/doc/CrtTimerHdlr.3
index 14f48a4..7461788 100644
--- a/doc/CrtTimerHdlr.3
+++ b/doc/CrtTimerHdlr.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtTimerHdlr.3 1.4 96/09/17 10:54:58
+'\" RCS: @(#) $Id: CrtTimerHdlr.3,v 1.1.2.1 1998/09/24 23:58:22 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateTimerHandler 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/CrtTrace.3 b/doc/CrtTrace.3
index e9f3bb3..8bf02d6 100644
--- a/doc/CrtTrace.3
+++ b/doc/CrtTrace.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) CrtTrace.3 1.14 96/03/25 20:01:10
+'\" RCS: @(#) $Id: CrtTrace.3,v 1.1.2.1 1998/09/24 23:58:22 stanton Exp $
'\"
.so man.macros
.TH Tcl_CreateTrace 3 "" Tcl "Tcl Library Procedures"
diff --git a/doc/DString.3 b/doc/DString.3
index e6ea142..239544b 100644
--- a/doc/DString.3
+++ b/doc/DString.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) DString.3 1.20 96/08/26 12:59:44
+'\" RCS: @(#) $Id: DString.3,v 1.1.2.1 1998/09/24 23:58:22 stanton Exp $
'\"
.so man.macros
.TH Tcl_DString 3 7.4 Tcl "Tcl Library Procedures"
diff --git a/doc/DetachPids.3 b/doc/DetachPids.3
index 153649b..b5273cc 100644
--- a/doc/DetachPids.3
+++ b/doc/DetachPids.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) DetachPids.3 1.15 96/08/26 12:59:44
+'\" RCS: @(#) $Id: DetachPids.3,v 1.1.2.1 1998/09/24 23:58:22 stanton Exp $
'\"
.so man.macros
.TH Tcl_DetachPids 3 "" Tcl "Tcl Library Procedures"
diff --git a/doc/DoOneEvent.3 b/doc/DoOneEvent.3
index fd092c8..ae8755d 100644
--- a/doc/DoOneEvent.3
+++ b/doc/DoOneEvent.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) DoOneEvent.3 1.6 97/05/09 18:12:05
+'\" RCS: @(#) $Id: DoOneEvent.3,v 1.1.2.1 1998/09/24 23:58:22 stanton Exp $
'\"
.so man.macros
.TH Tcl_DoOneEvent 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/DoWhenIdle.3 b/doc/DoWhenIdle.3
index c909026..93818b6 100644
--- a/doc/DoWhenIdle.3
+++ b/doc/DoWhenIdle.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) DoWhenIdle.3 1.6 97/05/09 18:18:33
+'\" RCS: @(#) $Id: DoWhenIdle.3,v 1.1.2.1 1998/09/24 23:58:23 stanton Exp $
'\"
.so man.macros
.TH Tcl_DoWhenIdle 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/DoubleObj.3 b/doc/DoubleObj.3
index b467851..ef55be2 100644
--- a/doc/DoubleObj.3
+++ b/doc/DoubleObj.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) DoubleObj.3 1.6 97/05/08 19:50:07
+'\" RCS: @(#) $Id: DoubleObj.3,v 1.1.2.1 1998/09/24 23:58:23 stanton Exp $
'\"
.so man.macros
.TH Tcl_DoubleObj 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/Eval.3 b/doc/Eval.3
index 3054a44..b343264 100644
--- a/doc/Eval.3
+++ b/doc/Eval.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Eval.3 1.24 97/10/21 11:04:19
+'\" RCS: @(#) $Id: Eval.3,v 1.1.2.2 1998/09/24 23:58:23 stanton Exp $
'\"
.so man.macros
.TH Tcl_Eval 3 8.1 Tcl "Tcl Library Procedures"
diff --git a/doc/Exit.3 b/doc/Exit.3
index 22976e0..3898791 100644
--- a/doc/Exit.3
+++ b/doc/Exit.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Exit.3 1.10 98/02/19 16:29:41
+'\" RCS: @(#) $Id: Exit.3,v 1.1.2.2 1998/09/24 23:58:23 stanton Exp $
'\"
.so man.macros
.TH Tcl_Exit 3 8.1 Tcl "Tcl Library Procedures"
diff --git a/doc/ExprLong.3 b/doc/ExprLong.3
index 634f3c0..54ca788 100644
--- a/doc/ExprLong.3
+++ b/doc/ExprLong.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) ExprLong.3 1.26 97/06/26 13:42:47
+'\" RCS: @(#) $Id: ExprLong.3,v 1.1.2.1 1998/09/24 23:58:23 stanton Exp $
'\"
.so man.macros
.TH Tcl_ExprLong 3 7.0 Tcl "Tcl Library Procedures"
diff --git a/doc/ExprLongObj.3 b/doc/ExprLongObj.3
index 569dc93..028af83 100644
--- a/doc/ExprLongObj.3
+++ b/doc/ExprLongObj.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) ExprLongObj.3 1.6 97/06/26 13:41:12
+'\" RCS: @(#) $Id: ExprLongObj.3,v 1.1.2.1 1998/09/24 23:58:23 stanton Exp $
'\"
.so man.macros
.TH Tcl_ExprLongObj 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/FindExec.3 b/doc/FindExec.3
index b48b225..260ee2c 100644
--- a/doc/FindExec.3
+++ b/doc/FindExec.3
@@ -4,19 +4,22 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) FindExec.3 1.4 96/10/09 08:29:29
+'\" RCS: @(#) $Id: FindExec.3,v 1.1.2.1 1998/09/24 23:58:23 stanton Exp $
'\"
.so man.macros
.TH Tcl_FindExecutable 3 7.5 Tcl "Tcl Library Procedures"
.BS
.SH NAME
-Tcl_FindExecutable \- identify the binary file containing the application
+Tcl_FindExecutable, Tcl_GetNameOfExecutable \- identify or return the name of the binary file containing the application
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
char *
\fBTcl_FindExecutable\fR(\fIargv0\fR)
+.sp
+CONST char *
+\fBTcl_GetNameOfExecutable\fR()
.SH ARGUMENTS
.AS char *argv0 in
.AP char *argv0 in
@@ -26,9 +29,9 @@ application's name.
.SH DESCRIPTION
.PP
-This procedure computes the full path name of the executable file
-from which the application was invoked and saves it for Tcl's
-internal use.
+The \fBTcl_FindExecutable\fR procedure computes the full path name of
+the executable file from which the application was invoked and saves
+it for Tcl's internal use.
The executable's path name is needed for several purposes in
Tcl. For example, it is needed on some platforms in the
implementation of the \fBload\fR command.
@@ -41,6 +44,13 @@ along with the \fBPATH\fR environment variable to find the
application's executable, if possible. If it fails to find
the binary, then future calls to \fBinfo nameofexecutable\fR
will return an empty string.
+.PP
+\fBTcl_GetNameOfExecutable\fR simply returns a pointer to the
+internal full path name of the executable file as computed by
+\fBTcl_FindExecutable\fR. This procedure call is the C API
+equivalent to the \fBinfo nameofexecutable\fR command. NULL
+is returned if the internal full path name has not been
+computed or unknown.
.SH KEYWORDS
binary, executable file
diff --git a/doc/GetIndex.3 b/doc/GetIndex.3
index 3879103..8f65075 100644
--- a/doc/GetIndex.3
+++ b/doc/GetIndex.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) GetIndex.3 1.4 97/10/16 17:43:40
+'\" RCS: @(#) $Id: GetIndex.3,v 1.1.2.2 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_GetIndexFromObj 3 8.1 Tcl "Tcl Library Procedures"
diff --git a/doc/GetInt.3 b/doc/GetInt.3
index 8f1da08..1cca35b 100644
--- a/doc/GetInt.3
+++ b/doc/GetInt.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) GetInt.3 1.12 96/03/25 20:03:44
+'\" RCS: @(#) $Id: GetInt.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_GetInt 3 "" Tcl "Tcl Library Procedures"
diff --git a/doc/GetOpnFl.3 b/doc/GetOpnFl.3
index decb9a4..b802d46 100644
--- a/doc/GetOpnFl.3
+++ b/doc/GetOpnFl.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) GetOpnFl.3 1.3 97/04/23 16:14:43
+'\" RCS: @(#) $Id: GetOpnFl.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
.so man.macros
.TH Tcl_GetOpenFile 3 8.0 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/GetStdChan.3 b/doc/GetStdChan.3
index bc81e4c..c42f814 100644
--- a/doc/GetStdChan.3
+++ b/doc/GetStdChan.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" @(#) GetStdChan.3 1.2 96/03/08 13:59:57
+'\" RCS: @(#) $Id: GetStdChan.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_GetStdChannel 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/Hash.3 b/doc/Hash.3
index 48835a3..299f752 100644
--- a/doc/Hash.3
+++ b/doc/Hash.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Hash.3 1.15 96/03/25 20:04:01
+'\" RCS: @(#) $Id: Hash.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_Hash 3 "" Tcl "Tcl Library Procedures"
diff --git a/doc/IntObj.3 b/doc/IntObj.3
index a87ac92..5add76c 100644
--- a/doc/IntObj.3
+++ b/doc/IntObj.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) IntObj.3 1.7 97/05/08 19:49:22
+'\" RCS: @(#) $Id: IntObj.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_IntObj 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/Interp.3 b/doc/Interp.3
index 5610246..7629095 100644
--- a/doc/Interp.3
+++ b/doc/Interp.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Interp.3 1.16 96/06/06 13:48:02
+'\" RCS: @(#) $Id: Interp.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_Interp 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/LinkVar.3 b/doc/LinkVar.3
index a7a5355..3151150 100644
--- a/doc/LinkVar.3
+++ b/doc/LinkVar.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) LinkVar.3 1.15 96/09/05 17:16:57
+'\" RCS: @(#) $Id: LinkVar.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_LinkVar 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/ListObj.3 b/doc/ListObj.3
index c19e234..40df835 100644
--- a/doc/ListObj.3
+++ b/doc/ListObj.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) ListObj.3 1.10 97/10/08 11:36:58
+'\" RCS: @(#) $Id: ListObj.3,v 1.1.2.1 1998/09/24 23:58:24 stanton Exp $
'\"
.so man.macros
.TH Tcl_ListObj 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/Notifier.3 b/doc/Notifier.3
index 5016200..0646f37 100644
--- a/doc/Notifier.3
+++ b/doc/Notifier.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Notifier.3 1.16 97/05/17 17:03:17
+'\" RCS: @(#) $Id: Notifier.3,v 1.1.2.1 1998/09/24 23:58:25 stanton Exp $
'\"
.so man.macros
.TH Notifier 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/Object.3 b/doc/Object.3
index df930dd..b537638 100644
--- a/doc/Object.3
+++ b/doc/Object.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) Object.3 1.11 97/12/19 11:07:43
+'\" RCS: @(#) $Id: Object.3,v 1.1.2.2 1998/09/24 23:58:25 stanton Exp $
'\"
.so man.macros
.TH Tcl_Obj 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/ObjectType.3 b/doc/ObjectType.3
index 515d85c..1893ecd 100644
--- a/doc/ObjectType.3
+++ b/doc/ObjectType.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) ObjectType.3 1.8 97/04/30 15:42:29
+'\" RCS: @(#) $Id: ObjectType.3,v 1.1.2.1 1998/09/24 23:58:25 stanton Exp $
'\"
.so man.macros
.TH Tcl_ObjType 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/OpenFileChnl.3 b/doc/OpenFileChnl.3
index a6052eb..9253fe3 100644
--- a/doc/OpenFileChnl.3
+++ b/doc/OpenFileChnl.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) OpenFileChnl.3 1.43 98/01/13 20:02:00
+'\" RCS: @(#) $Id: OpenFileChnl.3,v 1.1.2.2 1998/09/24 23:58:25 stanton Exp $
.so man.macros
.TH Tcl_OpenFileChannel 3 8.1 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/OpenTcp.3 b/doc/OpenTcp.3
index 8f7c7d0..bba3efe 100644
--- a/doc/OpenTcp.3
+++ b/doc/OpenTcp.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) OpenTcp.3 1.19 97/06/25 14:44:00
+'\" RCS: @(#) $Id: OpenTcp.3,v 1.1.2.1 1998/09/24 23:58:25 stanton Exp $
.so man.macros
.TH Tcl_OpenTcpClient 3 8.0 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/PkgRequire.3 b/doc/PkgRequire.3
index 62e2cd0..a000e82 100644
--- a/doc/PkgRequire.3
+++ b/doc/PkgRequire.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) PkgRequire.3 1.4 96/02/15 20:03:16
+'\" RCS: @(#) $Id: PkgRequire.3,v 1.1.2.1 1998/09/24 23:58:25 stanton Exp $
'\"
.so man.macros
.TH Tcl_PkgRequire 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/Preserve.3 b/doc/Preserve.3
index a2c7d28..7c35766 100644
--- a/doc/Preserve.3
+++ b/doc/Preserve.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Preserve.3 1.13 96/05/28 09:26:12
+'\" RCS: @(#) $Id: Preserve.3,v 1.1.2.1 1998/09/24 23:58:25 stanton Exp $
'\"
.so man.macros
.TH Tcl_Preserve 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/PrintDbl.3 b/doc/PrintDbl.3
index a77b1b9..a5369bf 100644
--- a/doc/PrintDbl.3
+++ b/doc/PrintDbl.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) PrintDbl.3 1.9 97/08/22 13:30:22
+'\" RCS: @(#) $Id: PrintDbl.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_PrintDouble 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/RecEvalObj.3 b/doc/RecEvalObj.3
index 7f3bdc9..4ff514c 100644
--- a/doc/RecEvalObj.3
+++ b/doc/RecEvalObj.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: SCCS: @(#) RecEvalObj.3 1.1 97/07/29 18:31:21
+'\" RCS: @(#) $Id: RecEvalObj.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_RecordAndEvalObj 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/RecordEval.3 b/doc/RecordEval.3
index 17d353d..b33bc9f 100644
--- a/doc/RecordEval.3
+++ b/doc/RecordEval.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) RecordEval.3 1.18 97/07/29 18:25:13
+'\" RCS: @(#) $Id: RecordEval.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_RecordAndEval 3 7.4 Tcl "Tcl Library Procedures"
diff --git a/doc/RegExp.3 b/doc/RegExp.3
index fef9245..bd0c9e9 100644
--- a/doc/RegExp.3
+++ b/doc/RegExp.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) RegExp.3 1.9 96/08/26 12:59:48
+'\" RCS: @(#) $Id: RegExp.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_RegExpMatch 3 7.4 Tcl "Tcl Library Procedures"
diff --git a/doc/SetErrno.3 b/doc/SetErrno.3
index b3c6277..aa2ece7 100644
--- a/doc/SetErrno.3
+++ b/doc/SetErrno.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) SetErrno.3 1.5 96/02/15 20:01:31
+'\" RCS: @(#) $Id: SetErrno.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
.so man.macros
.TH Tcl_SetErrno 3 7.5 Tcl "Tcl Library Procedures"
.BS
diff --git a/doc/SetRecLmt.3 b/doc/SetRecLmt.3
index 3a07481..a1f7ed0 100644
--- a/doc/SetRecLmt.3
+++ b/doc/SetRecLmt.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) SetRecLmt.3 1.6 96/03/25 20:06:36
+'\" RCS: @(#) $Id: SetRecLmt.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_SetRecursionLimit 3 7.0 Tcl "Tcl Library Procedures"
diff --git a/doc/SetResult.3 b/doc/SetResult.3
index 5616de8..7b4e0c9 100644
--- a/doc/SetResult.3
+++ b/doc/SetResult.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) SetResult.3 1.23 97/06/26 14:05:57
+'\" RCS: @(#) $Id: SetResult.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_SetResult 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/SetVar.3 b/doc/SetVar.3
index 5f4de76..462c866 100644
--- a/doc/SetVar.3
+++ b/doc/SetVar.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) SetVar.3 1.32 98/02/05 20:55:24
+'\" RCS: @(#) $Id: SetVar.3,v 1.1.2.2 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_SetVar 3 8.1 Tcl "Tcl Library Procedures"
diff --git a/doc/Sleep.3 b/doc/Sleep.3
index 0c7956a..a584356 100644
--- a/doc/Sleep.3
+++ b/doc/Sleep.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Sleep.3 1.3 96/03/25 20:07:21
+'\" RCS: @(#) $Id: Sleep.3,v 1.1.2.1 1998/09/24 23:58:26 stanton Exp $
'\"
.so man.macros
.TH Tcl_Sleep 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/SplitList.3 b/doc/SplitList.3
index a250c8f..f97560d 100644
--- a/doc/SplitList.3
+++ b/doc/SplitList.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) SplitList.3 1.21 97/04/29 14:07:10
+'\" RCS: @(#) $Id: SplitList.3,v 1.1.2.1 1998/09/24 23:58:27 stanton Exp $
'\"
.so man.macros
.TH Tcl_SplitList 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/SplitPath.3 b/doc/SplitPath.3
index f98a78b..478f7e2 100644
--- a/doc/SplitPath.3
+++ b/doc/SplitPath.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) SplitPath.3 1.4 96/08/19 14:59:35
+'\" RCS: @(#) $Id: SplitPath.3,v 1.1.2.1 1998/09/24 23:58:27 stanton Exp $
'\"
.so man.macros
.TH Tcl_SplitPath 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/StaticPkg.3 b/doc/StaticPkg.3
index ccb1a69..a3e1f1b 100644
--- a/doc/StaticPkg.3
+++ b/doc/StaticPkg.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) StaticPkg.3 1.4 96/09/04 11:21:26
+'\" RCS: @(#) $Id: StaticPkg.3,v 1.1.2.1 1998/09/24 23:58:27 stanton Exp $
'\"
.so man.macros
.TH Tcl_StaticPackage 3 7.5 Tcl "Tcl Library Procedures"
diff --git a/doc/StrMatch.3 b/doc/StrMatch.3
index 354193b..94a910b 100644
--- a/doc/StrMatch.3
+++ b/doc/StrMatch.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) StrMatch.3 1.11 96/03/25 20:08:06
+'\" RCS: @(#) $Id: StrMatch.3,v 1.1.2.1 1998/09/24 23:58:27 stanton Exp $
'\"
.so man.macros
.TH Tcl_StringMatch 3 "" Tcl "Tcl Library Procedures"
diff --git a/doc/StringObj.3 b/doc/StringObj.3
index 1f654c2..a1cea23 100644
--- a/doc/StringObj.3
+++ b/doc/StringObj.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) StringObj.3 1.16 98/01/26 19:39:49
+'\" RCS: @(#) $Id: StringObj.3,v 1.1.2.2 1998/09/24 23:58:27 stanton Exp $
'\"
.so man.macros
.TH Tcl_StringObj 3 8.1 Tcl "Tcl Library Procedures"
diff --git a/doc/Tcl.n b/doc/Tcl.n
index 18e5b10..811c6d9 100644
--- a/doc/Tcl.n
+++ b/doc/Tcl.n
@@ -5,8 +5,8 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Tcl.n 1.130 97/10/15 10:16:41
-'
+'\" RCS: @(#) $Id: Tcl.n,v 1.1.2.2 1998/09/24 23:58:27 stanton Exp $
+'\"
.so man.macros
.TH Tcl n "8.1" Tcl "Tcl Built-In Commands"
.BS
diff --git a/doc/Tcl_Main.3 b/doc/Tcl_Main.3
index 15c0f3e..e89f7f3 100644
--- a/doc/Tcl_Main.3
+++ b/doc/Tcl_Main.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Tcl_Main.3 1.8 96/03/25 20:08:33
+'\" RCS: @(#) $Id: Tcl_Main.3,v 1.1.2.1 1998/09/24 23:58:27 stanton Exp $
'\"
.so man.macros
.TH Tcl_Main 3 7.4 Tcl "Tcl Library Procedures"
diff --git a/doc/TraceVar.3 b/doc/TraceVar.3
index c0d7c3a..e11faf9 100644
--- a/doc/TraceVar.3
+++ b/doc/TraceVar.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) TraceVar.3 1.29 98/02/19 13:20:48
+'\" RCS: @(#) $Id: TraceVar.3,v 1.1.2.2 1998/09/24 23:58:27 stanton Exp $
'\"
.so man.macros
.TH Tcl_TraceVar 3 7.4 Tcl "Tcl Library Procedures"
diff --git a/doc/Translate.3 b/doc/Translate.3
index 0b7b918..3163cce 100644
--- a/doc/Translate.3
+++ b/doc/Translate.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) Translate.3 1.24 98/01/16 23:58:06
+'\" RCS: @(#) $Id: Translate.3,v 1.1.2.2 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH Tcl_TranslateFileName 3 8.1 Tcl "Tcl Library Procedures"
diff --git a/doc/UpVar.3 b/doc/UpVar.3
index ca0cc74..9da6cd1 100644
--- a/doc/UpVar.3
+++ b/doc/UpVar.3
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) UpVar.3 1.6 96/03/25 20:09:19
+'\" RCS: @(#) $Id: UpVar.3,v 1.1.2.1 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH Tcl_UpVar 3 7.4 Tcl "Tcl Library Procedures"
diff --git a/doc/WrongNumArgs.3 b/doc/WrongNumArgs.3
index 61b68ce..43e17fa 100644
--- a/doc/WrongNumArgs.3
+++ b/doc/WrongNumArgs.3
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) @(#) WrongNumArgs.3 1.5 97/07/30 16:20:07
+'\" RCS: @(#) $Id: WrongNumArgs.3,v 1.1.2.1 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH Tcl_WrongNumArgs 3 8.0 Tcl "Tcl Library Procedures"
diff --git a/doc/after.n b/doc/after.n
index cf4aaeb..ad1f681 100644
--- a/doc/after.n
+++ b/doc/after.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) after.n 1.4 96/03/25 20:09:33
+'\" RCS: @(#) $Id: after.n,v 1.1.2.1 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH after n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/append.n b/doc/append.n
index 9d2ba34..77df248 100644
--- a/doc/append.n
+++ b/doc/append.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) append.n 1.6 96/03/25 20:09:44
+'\" RCS: @(#) $Id: append.n,v 1.1.2.1 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH append n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/array.n b/doc/array.n
index 0de8aa7..f08c91c 100644
--- a/doc/array.n
+++ b/doc/array.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) array.n 1.9 97/10/29 14:10:13
+'\" RCS: @(#) $Id: array.n,v 1.1.2.1 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH array n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/bgerror.n b/doc/bgerror.n
index 9f3e0c1..ed1bcc9 100644
--- a/doc/bgerror.n
+++ b/doc/bgerror.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) bgerror.n 1.5 97/08/04 17:49:35
+'\" RCS: @(#) $Id: bgerror.n,v 1.1.2.1 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH bgerror n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/binary.n b/doc/binary.n
index 2833eed..15df55e 100644
--- a/doc/binary.n
+++ b/doc/binary.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) binary.n 1.8 97/11/20 12:35:30
+'\" RCS: @(#) $Id: binary.n,v 1.1.2.2 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH binary n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/break.n b/doc/break.n
index 391ba91..7f30841 100644
--- a/doc/break.n
+++ b/doc/break.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) break.n 1.7 96/10/09 08:29:26
+'\" RCS: @(#) $Id: break.n,v 1.1.2.1 1998/09/24 23:58:28 stanton Exp $
'\"
.so man.macros
.TH break n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/case.n b/doc/case.n
index d375288..865ed96 100644
--- a/doc/case.n
+++ b/doc/case.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) case.n 1.8 96/03/25 20:10:49
+'\" RCS: @(#) $Id: case.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH case n 7.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/catch.n b/doc/catch.n
index 8aff166..4afd314 100644
--- a/doc/catch.n
+++ b/doc/catch.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) catch.n 1.6 96/03/25 20:11:08
+'\" RCS: @(#) $Id: catch.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH catch n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/cd.n b/doc/cd.n
index 6925a87..8a44d03 100644
--- a/doc/cd.n
+++ b/doc/cd.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) cd.n 1.6 96/03/28 08:40:52
+'\" RCS: @(#) $Id: cd.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH cd n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/clock.n b/doc/clock.n
index 2f27861..fee7482 100644
--- a/doc/clock.n
+++ b/doc/clock.n
@@ -8,7 +8,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) clock.n 1.18 97/09/10 13:31:23
+'\" RCS: @(#) $Id: clock.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH clock n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/close.n b/doc/close.n
index 4ee53ea..522d3b8 100644
--- a/doc/close.n
+++ b/doc/close.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) close.n 1.11 97/08/22 18:50:48
+'\" RCS: @(#) $Id: close.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH close n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/concat.n b/doc/concat.n
index 3a1e7a4..7d805c9 100644
--- a/doc/concat.n
+++ b/doc/concat.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) concat.n 1.8 96/08/26 12:59:54
+'\" RCS: @(#) $Id: concat.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH concat n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/continue.n b/doc/continue.n
index 104b89d..33b2561 100644
--- a/doc/continue.n
+++ b/doc/continue.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) continue.n 1.7 96/10/09 08:29:27
+'\" RCS: @(#) $Id: continue.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH continue n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/eof.n b/doc/eof.n
index 71de06a..a603222 100644
--- a/doc/eof.n
+++ b/doc/eof.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) eof.n 1.8 96/02/15 20:01:59
+'\" RCS: @(#) $Id: eof.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH eof n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/error.n b/doc/error.n
index 6be285b..23f06cb 100644
--- a/doc/error.n
+++ b/doc/error.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) error.n 1.7 96/03/25 20:12:35
+'\" RCS: @(#) $Id: error.n,v 1.1.2.1 1998/09/24 23:58:29 stanton Exp $
'\"
.so man.macros
.TH error n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/eval.n b/doc/eval.n
index 8ea7ae3..fa7e027 100644
--- a/doc/eval.n
+++ b/doc/eval.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) eval.n 1.5 96/03/25 20:12:53
+'\" RCS: @(#) $Id: eval.n,v 1.1.2.1 1998/09/24 23:58:30 stanton Exp $
'\"
.so man.macros
.TH eval n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/exec.n b/doc/exec.n
index 4dede37..0dd955f 100644
--- a/doc/exec.n
+++ b/doc/exec.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) exec.n 1.18 96/11/25 14:18:47
+'\" RCS: @(#) $Id: exec.n,v 1.1.2.2 1998/09/24 23:58:30 stanton Exp $
'\"
.so man.macros
.TH exec n 7.6 Tcl "Tcl Built-In Commands"
diff --git a/doc/exit.n b/doc/exit.n
index 2dfffb4..a8161ea 100644
--- a/doc/exit.n
+++ b/doc/exit.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) exit.n 1.6 96/03/25 20:13:32
+'\" RCS: @(#) $Id: exit.n,v 1.1.2.1 1998/09/24 23:58:30 stanton Exp $
'\"
.so man.macros
.TH exit n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/expr.n b/doc/expr.n
index f0969ce..b2e78d2 100644
--- a/doc/expr.n
+++ b/doc/expr.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) expr.n 1.28 97/09/18 18:21:30
+'\" RCS: @(#) $Id: expr.n,v 1.1.2.1 1998/09/24 23:58:30 stanton Exp $
'\"
.so man.macros
.TH expr n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/fblocked.n b/doc/fblocked.n
index 3184e47..2c43e77 100644
--- a/doc/fblocked.n
+++ b/doc/fblocked.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) fblocked.n 1.6 96/02/23 13:46:30
+'\" RCS: @(#) $Id: fblocked.n,v 1.1.2.1 1998/09/24 23:58:30 stanton Exp $
.so man.macros
.TH fblocked n 7.5 Tcl "Tcl Built-In Commands"
.BS
diff --git a/doc/fconfigure.n b/doc/fconfigure.n
index 414efb1..c546e26 100644
--- a/doc/fconfigure.n
+++ b/doc/fconfigure.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) fconfigure.n 1.25 97/10/20 15:22:10
+'\" RCS: @(#) $Id: fconfigure.n,v 1.1.2.2 1998/09/24 23:58:30 stanton Exp $
'\"
.so man.macros
.TH fconfigure n 8.1 Tcl "Tcl Built-In Commands"
diff --git a/doc/fcopy.n b/doc/fcopy.n
index cea5066..66c791b 100644
--- a/doc/fcopy.n
+++ b/doc/fcopy.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) fcopy.n 1.4 97/06/19 11:10:07
+'\" RCS: @(#) $Id: fcopy.n,v 1.1.2.1 1998/09/24 23:58:30 stanton Exp $
'\"
.so man.macros
.TH fcopy n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/file.n b/doc/file.n
index 5b3a1f5..a0fbc8f 100644
--- a/doc/file.n
+++ b/doc/file.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) file.n 1.23 97/04/30 11:37:10
+'\" RCS: @(#) $Id: file.n,v 1.1.2.1 1998/09/24 23:58:30 stanton Exp $
'\"
.so man.macros
.TH file n 7.6 Tcl "Tcl Built-In Commands"
diff --git a/doc/fileevent.n b/doc/fileevent.n
index daff74e..3590bcd 100644
--- a/doc/fileevent.n
+++ b/doc/fileevent.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) fileevent.n 1.6 96/02/23 13:46:29
+'\" RCS: @(#) $Id: fileevent.n,v 1.1.2.1 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH fileevent n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/filename.n b/doc/filename.n
index e1f38ae..cf4f1f6 100644
--- a/doc/filename.n
+++ b/doc/filename.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) filename.n 1.7 96/04/11 17:03:14
+'\" RCS: @(#) $Id: filename.n,v 1.1.2.1 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH filename n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/flush.n b/doc/flush.n
index f69354a..c3a7c4d 100644
--- a/doc/flush.n
+++ b/doc/flush.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) flush.n 1.10 96/08/26 12:59:57
+'\" RCS: @(#) $Id: flush.n,v 1.1.2.1 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH flush n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/for.n b/doc/for.n
index 3680cf4..3df5cab 100644
--- a/doc/for.n
+++ b/doc/for.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) for.n 1.6 97/04/08 17:13:49
+'\" RCS: @(#) $Id: for.n,v 1.1.2.1 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH for n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/foreach.n b/doc/foreach.n
index 0dec2a5..48ad986 100644
--- a/doc/foreach.n
+++ b/doc/foreach.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) foreach.n 1.6 96/03/25 20:15:14
+'\" RCS: @(#) $Id: foreach.n,v 1.1.2.1 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH foreach n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/format.n b/doc/format.n
index 57c97d6..f7d40f2 100644
--- a/doc/format.n
+++ b/doc/format.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) format.n 1.11 96/08/26 12:59:57
+'\" RCS: @(#) $Id: format.n,v 1.1.2.1 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH format n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/gets.n b/doc/gets.n
index 025f76d..1097930 100644
--- a/doc/gets.n
+++ b/doc/gets.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) gets.n 1.13 96/08/26 12:59:58
+'\" RCS: @(#) $Id: gets.n,v 1.1.2.1 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH gets n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/glob.n b/doc/glob.n
index 5e7effd..811827c 100644
--- a/doc/glob.n
+++ b/doc/glob.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) glob.n 1.12 97/10/17 16:52:29
+'\" RCS: @(#) $Id: glob.n,v 1.1.2.2 1998/09/24 23:58:31 stanton Exp $
'\"
.so man.macros
.TH glob n 8.1 Tcl "Tcl Built-In Commands"
diff --git a/doc/global.n b/doc/global.n
index a89cbef..0bb4ddb 100644
--- a/doc/global.n
+++ b/doc/global.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) global.n 1.6 97/05/18 15:23:09
+'\" RCS: @(#) $Id: global.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH global n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/history.n b/doc/history.n
index e58ea3a..5feccce 100644
--- a/doc/history.n
+++ b/doc/history.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) history.n 1.11 97/08/07 16:44:49
+'\" RCS: @(#) $Id: history.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH history n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/http.n b/doc/http.n
index 36227ce..71065dc 100644
--- a/doc/http.n
+++ b/doc/http.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) http.n 1.11 97/08/07 16:45:02
+'\" RCS: @(#) $Id: http.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH "Http" n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/if.n b/doc/if.n
index 9e86214..b682f0e 100644
--- a/doc/if.n
+++ b/doc/if.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) if.n 1.7 96/08/26 13:00:00
+'\" RCS: @(#) $Id: if.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH if n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/incr.n b/doc/incr.n
index cfd76b8..f316f51 100644
--- a/doc/incr.n
+++ b/doc/incr.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) incr.n 1.5 96/03/25 20:16:58
+'\" RCS: @(#) $Id: incr.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH incr n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/info.n b/doc/info.n
index a0c2001..b643fa0 100644
--- a/doc/info.n
+++ b/doc/info.n
@@ -6,7 +6,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) info.n 1.17 97/05/19 14:48:52
+'\" RCS: @(#) $Id: info.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH info n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/interp.n b/doc/interp.n
index 6229623..84eed31 100644
--- a/doc/interp.n
+++ b/doc/interp.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) interp.n 1.37 97/10/31 12:51:11
+'\" RCS: @(#) $Id: interp.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH interp n 7.6 Tcl "Tcl Built-In Commands"
@@ -198,7 +198,7 @@ Hidden commands are explained in more detail in HIDDEN COMMANDS, below.
Returns a list of the names of all hidden commands in the interpreter
identified by \fIpath\fR.
.TP
-\fBinterp\fR \fBinvokehidden\fR \fIpath\fR ?\fB-global\fR \fIhiddenCmdName\fR ?\fIarg ...\fR?
+\fBinterp\fR \fBinvokehidden\fR \fIpath\fR ?\fB-global\fR? \fIhiddenCmdName\fR ?\fIarg ...\fR?
Invokes the hidden command \fIhiddenCmdName\fR with the arguments supplied
in the interpreter denoted by \fIpath\fR. No substitutions or evaluation
are applied to the arguments.
diff --git a/doc/join.n b/doc/join.n
index 7e662cf..03464c9 100644
--- a/doc/join.n
+++ b/doc/join.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) join.n 1.5 96/03/25 20:17:46
+'\" RCS: @(#) $Id: join.n,v 1.1.2.1 1998/09/24 23:58:32 stanton Exp $
'\"
.so man.macros
.TH join n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/lappend.n b/doc/lappend.n
index a0c3b54..3fdb09b 100644
--- a/doc/lappend.n
+++ b/doc/lappend.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) lappend.n 1.6 96/03/25 20:18:03
+'\" RCS: @(#) $Id: lappend.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH lappend n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/library.n b/doc/library.n
index 215a569..ef1c40d 100644
--- a/doc/library.n
+++ b/doc/library.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) library.n 1.23 96/11/20 14:07:04
+'\" RCS: @(#) $Id: library.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
.so man.macros
.TH library n "8.0" Tcl "Tcl Built-In Commands"
.BS
@@ -16,7 +16,9 @@ library \- standard library of Tcl procedures
\fBauto_execok \fIcmd\fR
\fBauto_load \fIcmd\fR
\fBauto_mkindex \fIdir pattern pattern ...\fR
+\fBauto_mkindex_old \fIdir pattern pattern ...\fR
\fBauto_reset\fR
+\fBtcl_findLibrary \fIbasename version patch initScript enVarName varName\fR
\fBparray \fIarrayName\fR
.VS
\fBtcl_endOfWord \fIstr start\fR
@@ -121,7 +123,15 @@ For example, the command
will read all the \fB.tcl\fR files in subdirectory \fBfoo\fR
and generate a new index file \fBfoo/tclIndex\fR.
.PP
-\fBAuto_mkindex\fR parses the Tcl scripts in a relatively
+\fBAuto_mkindex\fR parses the Tcl scripts by sourcing them
+into a slave interpreter and monitoring the proc and
+namespace commands that are executed.
+Extensions can use the (undocumented)
+auto_mkindex_parser package to register other commands that
+can contribute to the auto_load index.
+You will have to read through init.tcl to see how this works.
+.PP
+\fBAuto_mkindex_old\fR parses the Tcl scripts in a relatively
unsophisticated way: if any line contains the word \fBproc\fR
as its first characters then it is assumed to be a procedure
definition and the next word of the line is taken as the
@@ -139,6 +149,26 @@ needed.
index, so that fresh copies of them will be loaded the next time
that they're used.
.TP
+\fBtcl_findLibrary \fIbasename version patch initScript enVarName varName\fR
+This is a standard search procedure for use by extensions during
+their initialization. They call this procedure to look for their
+script library in several standard directories.
+The last component of the name of the library directory is
+normally \fIbasenameversion\fP
+(e.g., tk8.0), but it might be "library" when in the build hierarchies.
+The \fIinitScript\fR file will be sourced into the interpreter
+once it is found. The directory in which this file is found is
+stored into the global variable \fIvarName\fP.
+If this variable is already defined (e.g., by C code during
+application initialization) then no searching is done.
+Otherwise the search looks in these directories:
+the directory named by the environment variable \fIenVarName\fP;
+relative to the Tcl library directory;
+relative to the executable file in the standard installation
+bin or bin/\fIarch\fP directory;
+relative to the executable file in the current build tree;
+relative to the executable file in a parallel build tree.
+.TP
\fBparray \fIarrayName\fR
Prints on standard output the names and values of all the elements
in the array \fIarrayName\fR.
diff --git a/doc/lindex.n b/doc/lindex.n
index cf0979c..0dab5bd 100644
--- a/doc/lindex.n
+++ b/doc/lindex.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) lindex.n 1.8 96/08/26 13:00:02
+'\" RCS: @(#) $Id: lindex.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH lindex n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/linsert.n b/doc/linsert.n
index 7d62b5f..59f8b3a 100644
--- a/doc/linsert.n
+++ b/doc/linsert.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) linsert.n 1.8 96/08/26 13:00:03
+'\" RCS: @(#) $Id: linsert.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH linsert n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/list.n b/doc/list.n
index 5a688cb..e6e67fa 100644
--- a/doc/list.n
+++ b/doc/list.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) list.n 1.9 96/08/26 13:00:04
+'\" RCS: @(#) $Id: list.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH list n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/llength.n b/doc/llength.n
index 874a965..acdb831 100644
--- a/doc/llength.n
+++ b/doc/llength.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) llength.n 1.5 96/03/25 20:19:25
+'\" RCS: @(#) $Id: llength.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH llength n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/load.n b/doc/load.n
index 0d5e6e8..5ca2f75 100644
--- a/doc/load.n
+++ b/doc/load.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) load.n 1.9 97/08/22 18:51:18
+'\" RCS: @(#) $Id: load.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH load n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/lrange.n b/doc/lrange.n
index 8a5d98c..c45df17 100644
--- a/doc/lrange.n
+++ b/doc/lrange.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) lrange.n 1.9 96/08/26 13:00:05
+'\" RCS: @(#) $Id: lrange.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH lrange n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/lreplace.n b/doc/lreplace.n
index 0065da5..30925e0 100644
--- a/doc/lreplace.n
+++ b/doc/lreplace.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) lreplace.n 1.9 96/08/26 13:00:07
+'\" RCS: @(#) $Id: lreplace.n,v 1.1.2.1 1998/09/24 23:58:33 stanton Exp $
'\"
.so man.macros
.TH lreplace n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/lsearch.n b/doc/lsearch.n
index aca019d..e474876 100644
--- a/doc/lsearch.n
+++ b/doc/lsearch.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) lsearch.n 1.7 96/08/26 13:00:05
+'\" RCS: @(#) $Id: lsearch.n,v 1.1.2.1 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH lsearch n 7.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/lsort.n b/doc/lsort.n
index 828cad8..c778206 100644
--- a/doc/lsort.n
+++ b/doc/lsort.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) lsort.n 1.10 97/08/22 18:50:53
+'\" RCS: @(#) $Id: lsort.n,v 1.1.2.1 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH lsort n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/man.macros b/doc/man.macros
index a0db675..d695e08 100644
--- a/doc/man.macros
+++ b/doc/man.macros
@@ -59,7 +59,7 @@
'\" .UL arg1 arg2
'\" Print arg1 underlined, then print arg2 normally.
'\"
-'\" SCCS: @(#) man.macros 1.10 97/09/02 16:37:14
+'\" RCS: @(#) $Id: man.macros,v 1.1.2.2 1998/09/24 23:58:34 stanton Exp $
'\"
'\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
diff --git a/doc/namespace.n b/doc/namespace.n
index 5bf787d..6b6f01e 100644
--- a/doc/namespace.n
+++ b/doc/namespace.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) namespace.n 1.9 97/08/13 17:08:25
+'\" RCS: @(#) $Id: namespace.n,v 1.1.2.1 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH namespace n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/open.n b/doc/open.n
index feb7b61..53c1f4b 100644
--- a/doc/open.n
+++ b/doc/open.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) open.n 1.16 97/01/14 18:00:35
+'\" RCS: @(#) $Id: open.n,v 1.1.2.1 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH open n 7.6 Tcl "Tcl Built-In Commands"
diff --git a/doc/package.n b/doc/package.n
index b485caa..20c4534 100644
--- a/doc/package.n
+++ b/doc/package.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) package.n 1.5 96/03/18 14:17:31
+'\" RCS: @(#) $Id: package.n,v 1.1.2.1 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH package n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/pid.n b/doc/pid.n
index 2db8b32..87b4b6d 100644
--- a/doc/pid.n
+++ b/doc/pid.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) pid.n 1.5 96/03/25 20:20:57
+'\" RCS: @(#) $Id: pid.n,v 1.1.2.1 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH pid n 7.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/pkgMkIndex.n b/doc/pkgMkIndex.n
index 23cd063..7a454fb 100644
--- a/doc/pkgMkIndex.n
+++ b/doc/pkgMkIndex.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) pkgMkIndex.n 1.10 98/01/28 17:23:37
+'\" RCS: @(#) $Id: pkgMkIndex.n,v 1.1.2.2 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH pkg_mkIndex n 7.6 Tcl "Tcl Built-In Commands"
diff --git a/doc/proc.n b/doc/proc.n
index 6615a4b..4e519a8 100644
--- a/doc/proc.n
+++ b/doc/proc.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) proc.n 1.6 97/05/18 15:49:45
+'\" RCS: @(#) $Id: proc.n,v 1.1.2.1 1998/09/24 23:58:34 stanton Exp $
'\"
.so man.macros
.TH proc n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/puts.n b/doc/puts.n
index e455071..3ab21a7 100644
--- a/doc/puts.n
+++ b/doc/puts.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) puts.n 1.11 96/08/26 13:00:09
+'\" RCS: @(#) $Id: puts.n,v 1.1.2.1 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH puts n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/pwd.n b/doc/pwd.n
index adc8811..e3ae575 100644
--- a/doc/pwd.n
+++ b/doc/pwd.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) pwd.n 1.5 96/03/25 20:21:30
+'\" RCS: @(#) $Id: pwd.n,v 1.1.2.1 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH pwd n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/read.n b/doc/read.n
index 20206fe..c79b384 100644
--- a/doc/read.n
+++ b/doc/read.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) read.n 1.15 96/08/26 13:00:09
+'\" RCS: @(#) $Id: read.n,v 1.1.2.1 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH read n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/regexp.n b/doc/regexp.n
index ea2e0d5..23658e2 100644
--- a/doc/regexp.n
+++ b/doc/regexp.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) regexp.n 1.15 98/01/22 16:51:23
+'\" RCS: @(#) $Id: regexp.n,v 1.1.2.2 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH regexp n 8.1 Tcl "Tcl Built-In Commands"
diff --git a/doc/registry.n b/doc/registry.n
index 52c2e4e..268270e 100644
--- a/doc/registry.n
+++ b/doc/registry.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) registry.n 1.5 97/08/11 19:33:27
+'\" RCS: @(#) $Id: registry.n,v 1.1.2.1 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH registry n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/regsub.n b/doc/regsub.n
index 62720ac..d6c6206 100644
--- a/doc/regsub.n
+++ b/doc/regsub.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) regsub.n 1.9 96/08/26 13:00:11
+'\" RCS: @(#) $Id: regsub.n,v 1.1.2.1 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH regsub n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/rename.n b/doc/rename.n
index 8962bd0..b3e0f87 100644
--- a/doc/rename.n
+++ b/doc/rename.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) rename.n 1.6 97/07/30 17:37:26
+'\" RCS: @(#) $Id: rename.n,v 1.1.2.1 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH rename n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/resource.n b/doc/resource.n
index 05a69e1..172d305 100644
--- a/doc/resource.n
+++ b/doc/resource.n
@@ -3,7 +3,7 @@
'\"
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-'\" SCCS: @(#) resource.n 1.5 98/01/28 12:47:09
+'\" RCS: @(#) $Id: resource.n,v 1.1.2.2 1998/09/24 23:58:35 stanton Exp $
'\"
.so man.macros
.TH resource n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/return.n b/doc/return.n
index fdf783b..db3042c 100644
--- a/doc/return.n
+++ b/doc/return.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) return.n 1.13 96/08/26 13:00:12
+'\" RCS: @(#) $Id: return.n,v 1.1.2.1 1998/09/24 23:58:36 stanton Exp $
'\"
.so man.macros
.TH return n 7.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/safe.n b/doc/safe.n
index 57ee651..ef49cec 100644
--- a/doc/safe.n
+++ b/doc/safe.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) safe.n 1.12 98/01/28 12:46:57
+'\" RCS: @(#) $Id: safe.n,v 1.1.2.2 1998/09/24 23:58:36 stanton Exp $
'\"
.so man.macros
.TH "Safe Tcl" n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/scan.n b/doc/scan.n
index 96121f8..ae55fbe 100644
--- a/doc/scan.n
+++ b/doc/scan.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) scan.n 1.12 96/08/26 13:00:13
+'\" RCS: @(#) $Id: scan.n,v 1.1.2.1 1998/09/24 23:58:36 stanton Exp $
'\"
.so man.macros
.TH scan n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/seek.n b/doc/seek.n
index ac796e6..9c5fcd9 100644
--- a/doc/seek.n
+++ b/doc/seek.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) seek.n 1.10 96/08/26 13:00:14
+'\" RCS: @(#) $Id: seek.n,v 1.1.2.1 1998/09/24 23:58:36 stanton Exp $
'\"
.so man.macros
.TH seek n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/set.n b/doc/set.n
index caf6cc2..0a7e89d 100644
--- a/doc/set.n
+++ b/doc/set.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) set.n 1.6 97/05/18 15:56:26
+'\" RCS: @(#) $Id: set.n,v 1.1.2.1 1998/09/24 23:58:36 stanton Exp $
'\"
.so man.macros
.TH set n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/socket.n b/doc/socket.n
index f766660..ac5d501 100644
--- a/doc/socket.n
+++ b/doc/socket.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) socket.n 1.14 97/10/31 12:51:12
+'\" RCS: @(#) $Id: socket.n,v 1.1.2.1 1998/09/24 23:58:36 stanton Exp $
.so man.macros
.TH socket n 7.5 Tcl "Tcl Built-In Commands"
.BS
diff --git a/doc/source.n b/doc/source.n
index 122c793..5dbfa8c 100644
--- a/doc/source.n
+++ b/doc/source.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) source.n 1.8 97/10/31 12:51:10
+'\" RCS: @(#) $Id: source.n,v 1.1.2.1 1998/09/24 23:58:36 stanton Exp $
'\"
.so man.macros
.TH source n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/split.n b/doc/split.n
index eff0058..7195ef6 100644
--- a/doc/split.n
+++ b/doc/split.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) split.n 1.6 96/03/25 20:23:53
+'\" RCS: @(#) $Id: split.n,v 1.1.2.1 1998/09/24 23:58:36 stanton Exp $
'\"
.so man.macros
.TH split n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/string.n b/doc/string.n
index 0bccf30..c0a9cb5 100644
--- a/doc/string.n
+++ b/doc/string.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) string.n 1.9 96/08/26 13:00:14
+'\" RCS: @(#) $Id: string.n,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH string n 7.6 Tcl "Tcl Built-In Commands"
diff --git a/doc/subst.n b/doc/subst.n
index 7a19b91..111fc75 100644
--- a/doc/subst.n
+++ b/doc/subst.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) subst.n 1.9 96/03/25 20:24:17
+'\" RCS: @(#) $Id: subst.n,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH subst n 7.4 Tcl "Tcl Built-In Commands"
diff --git a/doc/switch.n b/doc/switch.n
index b2754ca..f02c831 100644
--- a/doc/switch.n
+++ b/doc/switch.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) switch.n 1.10 97/10/31 13:05:55
+'\" RCS: @(#) $Id: switch.n,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH switch n 7.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/tclsh.1 b/doc/tclsh.1
index 2922d81..27c4e18 100644
--- a/doc/tclsh.1
+++ b/doc/tclsh.1
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) tclsh.1 1.13 96/08/26 13:00:15
+'\" RCS: @(#) $Id: tclsh.1,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH tclsh 1 "" Tcl "Tcl Applications"
diff --git a/doc/tclvars.n b/doc/tclvars.n
index b689a4f..8acf8ea 100644
--- a/doc/tclvars.n
+++ b/doc/tclvars.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) tclvars.n 1.34 97/08/22 18:51:04
+'\" RCS: @(#) $Id: tclvars.n,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH tclvars n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/tell.n b/doc/tell.n
index b2c0ec1..e280c34 100644
--- a/doc/tell.n
+++ b/doc/tell.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) tell.n 1.9 96/08/26 13:00:17
+'\" RCS: @(#) $Id: tell.n,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH tell n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/time.n b/doc/time.n
index 19b99fb..643880b 100644
--- a/doc/time.n
+++ b/doc/time.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) time.n 1.6 96/03/25 20:25:30
+'\" RCS: @(#) $Id: time.n,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH time n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/trace.n b/doc/trace.n
index cabf495..a190422 100644
--- a/doc/trace.n
+++ b/doc/trace.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) trace.n 1.12 96/08/26 13:00:18
+'\" RCS: @(#) $Id: trace.n,v 1.1.2.1 1998/09/24 23:58:37 stanton Exp $
'\"
.so man.macros
.TH trace n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/unknown.n b/doc/unknown.n
index a7be942..6580918 100644
--- a/doc/unknown.n
+++ b/doc/unknown.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) unknown.n 1.8 96/10/09 08:29:28
+'\" RCS: @(#) $Id: unknown.n,v 1.1.2.1 1998/09/24 23:58:38 stanton Exp $
'\"
.so man.macros
.TH unknown n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/unset.n b/doc/unset.n
index 6073256..da5ac10 100644
--- a/doc/unset.n
+++ b/doc/unset.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) unset.n 1.5 96/03/25 20:26:21
+'\" RCS: @(#) $Id: unset.n,v 1.1.2.1 1998/09/24 23:58:38 stanton Exp $
'\"
.so man.macros
.TH unset n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/update.n b/doc/update.n
index 522b176..7717104 100644
--- a/doc/update.n
+++ b/doc/update.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) update.n 1.3 96/03/25 20:26:34
+'\" RCS: @(#) $Id: update.n,v 1.1.2.1 1998/09/24 23:58:38 stanton Exp $
'\"
.so man.macros
.TH update n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/uplevel.n b/doc/uplevel.n
index 0332ca1..ebf4946 100644
--- a/doc/uplevel.n
+++ b/doc/uplevel.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) uplevel.n 1.8 97/08/13 13:41:36
+'\" RCS: @(#) $Id: uplevel.n,v 1.1.2.1 1998/09/24 23:58:38 stanton Exp $
'\"
.so man.macros
.TH uplevel n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/upvar.n b/doc/upvar.n
index 1920d37..bcede07 100644
--- a/doc/upvar.n
+++ b/doc/upvar.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) upvar.n 1.16 97/08/13 13:43:34
+'\" RCS: @(#) $Id: upvar.n,v 1.1.2.1 1998/09/24 23:58:38 stanton Exp $
'\"
.so man.macros
.TH upvar n "" Tcl "Tcl Built-In Commands"
diff --git a/doc/variable.n b/doc/variable.n
index 186e40f..d823373 100644
--- a/doc/variable.n
+++ b/doc/variable.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) variable.n 1.4 97/08/13 16:57:57
+'\" RCS: @(#) $Id: variable.n,v 1.1.2.1 1998/09/24 23:58:38 stanton Exp $
'\"
.so man.macros
.TH variable n 8.0 Tcl "Tcl Built-In Commands"
diff --git a/doc/vwait.n b/doc/vwait.n
index 4780b72..2e88c31 100644
--- a/doc/vwait.n
+++ b/doc/vwait.n
@@ -4,7 +4,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) vwait.n 1.4 97/09/29 11:31:18
+'\" RCS: @(#) $Id: vwait.n,v 1.1.2.1 1998/09/24 23:58:38 stanton Exp $
'\"
.so man.macros
.TH vwait n 7.5 Tcl "Tcl Built-In Commands"
diff --git a/doc/while.n b/doc/while.n
index 326d18f..4b21f3c 100644
--- a/doc/while.n
+++ b/doc/while.n
@@ -5,7 +5,7 @@
'\" See the file "license.terms" for information on usage and redistribution
'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
'\"
-'\" SCCS: @(#) while.n 1.7 97/04/08 17:13:50
+'\" RCS: @(#) $Id: while.n,v 1.1.2.1 1998/09/24 23:58:39 stanton Exp $
'\"
.so man.macros
.TH while n "" Tcl "Tcl Built-In Commands"
diff --git a/generic/README b/generic/README
index 4b3aa4f..6d585a7 100644
--- a/generic/README
+++ b/generic/README
@@ -2,4 +2,4 @@ This directory contains Tcl source files that work on all the platforms
where Tcl runs (e.g. UNIX, PCs, and Macintoshes). Platform-specific
sources are in the directories ../unix, ../win, and ../mac.
-SCCS ID: @(#) README 1.1 95/09/11 14:02:13
+RCS: @(#) $Id: README,v 1.1.2.1 1998/09/24 23:58:39 stanton Exp $
diff --git a/generic/panic.c b/generic/panic.c
index 420a157..b863027 100644
--- a/generic/panic.c
+++ b/generic/panic.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) panic.c 1.15 96/09/12 14:55:25
+ * RCS: @(#) $Id: panic.c,v 1.1.2.1 1998/09/24 23:58:39 stanton Exp $
*/
#include <stdio.h>
@@ -25,6 +25,9 @@
#include "tcl.h"
#undef panic
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+
EXTERN void panic _ANSI_ARGS_((char *format, char *arg1,
char *arg2, char *arg3, char *arg4, char *arg5,
char *arg6, char *arg7, char *arg8));
diff --git a/generic/tcl.h b/generic/tcl.h
index 296d4f6..75923d8 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tcl.h 1.352 98/02/19 13:53:28
+ * RCS: @(#) $Id: tcl.h,v 1.1.2.2 1998/09/24 23:58:39 stanton Exp $
*/
#ifndef _TCL
@@ -21,7 +21,8 @@
* When version numbers change here, must also go into the following files
* and update the version numbers:
*
- * library/init.tcl
+ * README
+ * library/init.tcl (only if major.minor changes, not patchlevel)
* unix/configure.in
* unix/pkginfo
* win/makefile.bc
@@ -75,11 +76,6 @@
# ifndef USE_TCLALLOC
# define USE_TCLALLOC 1
# endif
-# ifndef STRINGIFY
-# define STRINGIFY(x) STRINGIFY1(x)
-# define STRINGIFY1(x) #x
-# endif
-# define INLINE
#endif /* __WIN32__ */
/*
@@ -100,6 +96,34 @@
# define INLINE
#endif
+/*
+ * Utility macros: STRINGIFY takes an argument and wraps it in "" (double
+ * quotation marks), JOIN joins two arguments.
+ */
+
+#define VERBATIM(x) x
+#ifdef _MSC_VER
+# define STRINGIFY(x) STRINGIFY1(x)
+# define STRINGIFY1(x) #x
+# define JOIN(a,b) JOIN1(a,b)
+# define JOIN1(a,b) a##b
+#else
+# ifdef RESOURCE_INCLUDED
+# define STRINGIFY(x) STRINGIFY1(x)
+# define STRINGIFY1(x) #x
+# define JOIN(a,b) JOIN1(a,b)
+# define JOIN1(a,b) a##b
+# else
+# ifdef __STDC__
+# define STRINGIFY(x) #x
+# define JOIN(a,b) a##b
+# else
+# define STRINGIFY(x) "x"
+# define JOIN(a,b) VERBATIM(a)VERBATIM(b)
+# endif
+# endif
+#endif
+
/*
* A special definition used to allow this header file to be included
* in resource files so that they can get obtain version information from
@@ -140,6 +164,45 @@
#endif
/*
+ * Macros used to declare a function to be exported by a DLL.
+ * Used by Windows, maps to no-op declarations on non-Windows systems.
+ * The default build on windows is for a DLL, which causes the DLLIMPORT
+ * and DLLEXPORT macros to be nonempty. To build a static library, the
+ * macro STATIC_BUILD should be defined.
+ * The support follows the convention that a macro called BUILD_xxxx, where
+ * xxxx is the name of a library we are building, is set on the compile line
+ * for sources that are to be placed in the library. See BUILD_tcl in this
+ * file for an example of how the macro is to be used.
+ */
+
+#ifdef __WIN32__
+# ifdef STATIC_BUILD
+# define DLLIMPORT
+# define DLLEXPORT
+# else
+# ifdef _MSC_VER
+# define DLLIMPORT __declspec(dllimport)
+# define DLLEXPORT __declspec(dllexport)
+# else
+# define DLLIMPORT
+# define DLLEXPORT
+# endif
+# endif
+#else
+# define DLLIMPORT
+# define DLLEXPORT
+#endif
+
+#ifdef TCL_STORAGE_CLASS
+# undef TCL_STORAGE_CLASS
+#endif
+#ifdef BUILD_tcl
+# define TCL_STORAGE_CLASS DLLEXPORT
+#else
+# define TCL_STORAGE_CLASS DLLIMPORT
+#endif
+
+/*
* Definitions that allow this header file to be used either with or
* without ANSI C features like function prototypes.
*/
@@ -160,9 +223,9 @@
#endif
#ifdef __cplusplus
-# define EXTERN extern "C"
+# define EXTERN extern "C" TCL_STORAGE_CLASS
#else
-# define EXTERN extern
+# define EXTERN extern TCL_STORAGE_CLASS
#endif
/*
@@ -687,7 +750,7 @@ typedef struct Tcl_DString {
#define TCL_TRACE_DESTROYED 0x80
#define TCL_INTERP_DESTROYED 0x100
#define TCL_LEAVE_ERR_MSG 0x200
-#define TCL_TRACE_ARRAY 0x400
+#define TCL_TRACE_ARRAY 0x800
/*
* The TCL_PARSE_PART1 flag is deprecated and has no effect.
@@ -1447,6 +1510,7 @@ EXTERN int Tcl_GetCommandInfo _ANSI_ARGS_((Tcl_Interp *interp,
EXTERN char * Tcl_GetCommandName _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Command command));
EXTERN Tcl_ThreadId Tcl_GetCurrentThread _ANSI_ARGS_((void));
+EXTERN char * Tcl_GetCwd _ANSI_ARGS_((char *buf, int len));
EXTERN int Tcl_GetDouble _ANSI_ARGS_((Tcl_Interp *interp,
char *string, double *doublePtr));
EXTERN int Tcl_GetDoubleFromObj _ANSI_ARGS_((
@@ -1477,6 +1541,7 @@ EXTERN int Tcl_GetIntFromObj _ANSI_ARGS_((Tcl_Interp *interp,
EXTERN int Tcl_GetLongFromObj _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Obj *objPtr, long *longPtr));
EXTERN Tcl_Interp * Tcl_GetMaster _ANSI_ARGS_((Tcl_Interp *interp));
+EXTERN CONST char * Tcl_GetNameOfExecutable _ANSI_ARGS_((void));
EXTERN Tcl_Obj * Tcl_GetObjResult _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN Tcl_Obj * Tcl_GetObjVar2 _ANSI_ARGS_((Tcl_Interp *interp,
char *part1, char *part2, int flags));
@@ -1513,6 +1578,7 @@ EXTERN int Tcl_HideCommand _ANSI_ARGS_((Tcl_Interp *interp,
EXTERN int Tcl_Init _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN void Tcl_InitHashTable _ANSI_ARGS_((Tcl_HashTable *tablePtr,
int keyType));
+EXTERN void Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN ClientData Tcl_InitNotifier _ANSI_ARGS_((void));
EXTERN int Tcl_InputBlocked _ANSI_ARGS_((Tcl_Channel chan));
EXTERN int Tcl_InputBuffered _ANSI_ARGS_((Tcl_Channel chan));
@@ -1796,4 +1862,8 @@ EXTERN void Tcl_WrongNumArgs _ANSI_ARGS_((Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[], char *message));
#endif /* RESOURCE_INCLUDED */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
+
#endif /* _TCL */
diff --git a/generic/tclAlloc.c b/generic/tclAlloc.c
index 262089a..070302f 100644
--- a/generic/tclAlloc.c
+++ b/generic/tclAlloc.c
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclAlloc.c 1.9 98/02/18 14:40:50
+ * RCS: @(#) $Id: tclAlloc.c,v 1.1.2.2 1998/09/24 23:58:40 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclAsync.c b/generic/tclAsync.c
index 3616218..8abe3c5 100644
--- a/generic/tclAsync.c
+++ b/generic/tclAsync.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclAsync.c 1.7 98/02/04 16:21:25
+ * RCS: @(#) $Id: tclAsync.c,v 1.1.2.2 1998/09/24 23:58:40 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index 8eac237..719203d 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -6,12 +6,13 @@
* and deletion, and command parsing and execution.
*
* Copyright (c) 1987-1994 The Regents of the University of California.
- * Copyright (c) 1994-1998 Sun Microsystems, Inc.
+ * Copyright (c) 1994-1997 Sun Microsystems, Inc.
+ * Copyright (c) 1998 by Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclBasic.c 1.331 98/02/18 15:32:09
+ * RCS: @(#) $Id: tclBasic.c,v 1.1.2.2 1998/09/24 23:58:40 stanton Exp $
*/
#include "tclInt.h"
@@ -329,6 +330,7 @@ Tcl_CreateInterp()
TclInitLiteralTable(&(iPtr->literalTable));
iPtr->compileEpoch = 0;
iPtr->compiledProcPtr = NULL;
+ iPtr->resolverPtr = NULL;
iPtr->evalFlags = 0;
iPtr->scriptFile = NULL;
iPtr->flags = 0;
@@ -901,6 +903,8 @@ DeleteInterpProc(interp)
Tcl_HashEntry *hPtr;
Tcl_HashSearch search;
Tcl_HashTable *hTablePtr;
+ AssocData *dPtr;
+ ResolverScheme *resPtr, *nextResPtr;
int i;
/*
@@ -1038,6 +1042,14 @@ DeleteInterpProc(interp)
Tcl_DecrRefCount(iPtr->emptyObjPtr);
iPtr->emptyObjPtr = NULL;
+ resPtr = iPtr->resolverPtr;
+ while (resPtr) {
+ nextResPtr = resPtr->nextPtr;
+ ckfree(resPtr->name);
+ ckfree((char *) resPtr);
+ resPtr = nextResPtr;
+ }
+
/*
* Free up literal objects created for scripts compiled by the
* interpreter.
@@ -1397,11 +1409,13 @@ Tcl_CreateCommand(interp, cmdName, proc, clientData, deleteProc)
* when this command is deleted. */
{
Interp *iPtr = (Interp *) interp;
+ ImportRef *oldRefPtr = NULL;
Namespace *nsPtr, *dummy1, *dummy2;
- Command *cmdPtr;
+ Command *cmdPtr, *refCmdPtr;
Tcl_HashEntry *hPtr;
char *tail;
int new, result;
+ ImportedCmdData *dataPtr;
if (iPtr->flags & DELETED) {
/*
@@ -1434,9 +1448,15 @@ Tcl_CreateCommand(interp, cmdName, proc, clientData, deleteProc)
if (!new) {
/*
* Command already exists. Delete the old one.
+ * Be careful to preserve any existing import links so we can
+ * restore them down below. That way, you can redefine a
+ * command and its import status will remain intact.
*/
cmdPtr = (Command *) Tcl_GetHashValue(hPtr);
+ oldRefPtr = cmdPtr->importRefPtr;
+ cmdPtr->importRefPtr = NULL;
+
Tcl_DeleteCommandFromToken(interp, (Tcl_Command) cmdPtr);
hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &new);
if (!new) {
@@ -1466,6 +1486,21 @@ Tcl_CreateCommand(interp, cmdName, proc, clientData, deleteProc)
cmdPtr->importRefPtr = NULL;
/*
+ * Plug in any existing import references found above. Be sure
+ * to update all of these references to point to the new command.
+ */
+
+ if (oldRefPtr != NULL) {
+ cmdPtr->importRefPtr = oldRefPtr;
+ while (oldRefPtr != NULL) {
+ refCmdPtr = oldRefPtr->importedCmdPtr;
+ dataPtr = (ImportedCmdData*)refCmdPtr->objClientData;
+ dataPtr->realCmdPtr = cmdPtr;
+ oldRefPtr = oldRefPtr->nextPtr;
+ }
+ }
+
+ /*
* We just created a command, so in its namespace and all of its parent
* namespaces, it may shadow global commands with the same name. If any
* shadowed commands are found, invalidate all cached command references
@@ -1521,11 +1556,13 @@ Tcl_CreateObjCommand(interp, cmdName, proc, clientData, deleteProc)
* when this command is deleted. */
{
Interp *iPtr = (Interp *) interp;
+ ImportRef *oldRefPtr = NULL;
Namespace *nsPtr, *dummy1, *dummy2;
- Command *cmdPtr;
+ Command *cmdPtr, *refCmdPtr;
Tcl_HashEntry *hPtr;
char *tail;
int new, result;
+ ImportedCmdData *dataPtr;
if (iPtr->flags & DELETED) {
/*
@@ -1572,6 +1609,16 @@ Tcl_CreateObjCommand(interp, cmdName, proc, clientData, deleteProc)
return (Tcl_Command) cmdPtr;
}
+ /*
+ * Otherwise, we delete the old command. Be careful to preserve
+ * any existing import links so we can restore them down below.
+ * That way, you can redefine a command and its import status
+ * will remain intact.
+ */
+
+ oldRefPtr = cmdPtr->importRefPtr;
+ cmdPtr->importRefPtr = NULL;
+
Tcl_DeleteCommandFromToken(interp, (Tcl_Command) cmdPtr);
hPtr = Tcl_CreateHashEntry(&nsPtr->cmdTable, tail, &new);
if (!new) {
@@ -1599,7 +1646,30 @@ Tcl_CreateObjCommand(interp, cmdName, proc, clientData, deleteProc)
cmdPtr->deleteData = clientData;
cmdPtr->deleted = 0;
cmdPtr->importRefPtr = NULL;
+
+ /*
+ * Plug in any existing import references found above. Be sure
+ * to update all of these references to point to the new command.
+ */
+
+ if (oldRefPtr != NULL) {
+ cmdPtr->importRefPtr = oldRefPtr;
+ while (oldRefPtr != NULL) {
+ refCmdPtr = oldRefPtr->importedCmdPtr;
+ dataPtr = (ImportedCmdData*)refCmdPtr->objClientData;
+ dataPtr->realCmdPtr = cmdPtr;
+ oldRefPtr = oldRefPtr->nextPtr;
+ }
+ }
+ /*
+ * We just created a command, so in its namespace and all of its parent
+ * namespaces, it may shadow global commands with the same name. If any
+ * shadowed commands are found, invalidate all cached command references
+ * in the affected namespaces.
+ */
+
+ TclResetShadowedCmdRefs(interp, cmdPtr);
return (Tcl_Command) cmdPtr;
}
@@ -2432,6 +2502,8 @@ Tcl_CreateMathFunc(interp, name, numArgs, argTypes, proc, clientData)
*----------------------------------------------------------------------
*/
+#undef Tcl_EvalObj
+
int
Tcl_EvalObj(interp, objPtr, flags)
Tcl_Interp *interp; /* Token for command interpreter
@@ -2455,6 +2527,7 @@ Tcl_EvalObj(interp, objPtr, flags)
int result;
CallFrame *savedVarFramePtr; /* Saves old copy of iPtr->varFramePtr
* in case TCL_EVAL_GLOBAL was set. */
+ Namespace *namespacePtr;
/*
* Prevent the object from being deleted as a side effect of evaling it.
@@ -2535,13 +2608,41 @@ Tcl_EvalObj(interp, objPtr, flags)
}
/*
- * Get the ByteCode from the object. Make sure it hasn't been
- * invalidated by, e.g., someone redefining a command with a compile
- * procedure (this can make the compiled code wrong). If necessary,
- * convert the object to be a ByteCode object and compile it. Also, if
- * the code was compiled in a different interpreter, we recompile it.
+ * Get the ByteCode from the object. If it exists, make sure it hasn't
+ * been invalidated by, e.g., someone redefining a command with a
+ * compile procedure (this might make the compiled code wrong). If
+ * necessary, convert the object to be a ByteCode object and compile it.
+ * Also, if the code was compiled in/for a different interpreter,
+ * or for a different namespace, or for the same namespace but
+ * with different name resolution rules, we recompile it.
+ *
+ * Precompiled objects, however, are immutable and therefore
+ * they are not recompiled, even if the epoch has changed.
*/
+ if (iPtr->varFramePtr != NULL) {
+ namespacePtr = iPtr->varFramePtr->nsPtr;
+ } else {
+ namespacePtr = iPtr->globalNsPtr;
+ }
+
+ if (objPtr->typePtr == &tclByteCodeType) {
+ codePtr = (ByteCode *) objPtr->internalRep.otherValuePtr;
+
+ if ((codePtr->iPtr != iPtr)
+ || (codePtr->compileEpoch != iPtr->compileEpoch)
+ || (codePtr->nsPtr != namespacePtr)
+ || (codePtr->nsEpoch != namespacePtr->resolverEpoch)) {
+ if (codePtr->flags & TCL_BYTECODE_PRECOMPILED) {
+ if (codePtr->iPtr != iPtr) {
+ panic("Tcl_EvalObj: compiled script jumped interps");
+ }
+ codePtr->compileEpoch = iPtr->compileEpoch;
+ } else {
+ tclByteCodeType.freeIntRepProc(objPtr);
+ }
+ }
+ }
if (objPtr->typePtr != &tclByteCodeType) {
iPtr->errorLine = 1;
result = tclByteCodeType.setFromAnyProc(interp, objPtr);
@@ -2577,7 +2678,7 @@ Tcl_EvalObj(interp, objPtr, flags)
*/
numSrcBytes = codePtr->numSrcBytes;
- if (numSrcBytes > 0) {
+ if ((numSrcBytes > 0) || (codePtr->flags & TCL_BYTECODE_PRECOMPILED)) {
/*
* Increment the code's ref count while it is being executed. If
* afterwards no references to it remain, free the code.
@@ -3526,14 +3627,25 @@ Tcl_ExprObj(interp, objPtr, resultPtrPtr)
* necessary, convert the object to be a ByteCode object and compile it.
* Also, if the code was compiled in/for a different interpreter, we
* recompile it.
+ *
+ * Precompiled expressions, however, are immutable and therefore
+ * they are not recompiled, even if the epoch has changed.
+ *
*/
if (objPtr->typePtr == &tclByteCodeType) {
codePtr = (ByteCode *) objPtr->internalRep.otherValuePtr;
if (((Interp *) *codePtr->interpHandle != iPtr)
|| (codePtr->compileEpoch != iPtr->compileEpoch)) {
- (*tclByteCodeType.freeIntRepProc)(objPtr);
- objPtr->typePtr = (Tcl_ObjType *) NULL;
+ if (codePtr->flags & TCL_BYTECODE_PRECOMPILED) {
+ if (codePtr->iPtr != iPtr) {
+ panic("Tcl_ExprObj: compiled expression jumped interps");
+ }
+ codePtr->compileEpoch = iPtr->compileEpoch;
+ } else {
+ (*tclByteCodeType.freeIntRepProc)(objPtr);
+ objPtr->typePtr = (Tcl_ObjType *) NULL;
+ }
}
}
if (objPtr->typePtr != &tclByteCodeType) {
@@ -3568,8 +3680,8 @@ Tcl_ExprObj(interp, objPtr, resultPtrPtr)
auxDataPtr = compEnv.auxDataArrayPtr;
for (i = 0; i < compEnv.auxDataArrayNext; i++) {
- if (auxDataPtr->freeProc != NULL) {
- auxDataPtr->freeProc(auxDataPtr->clientData);
+ if (auxDataPtr->type->freeProc != NULL) {
+ auxDataPtr->type->freeProc(auxDataPtr->clientData);
}
auxDataPtr++;
}
diff --git a/generic/tclBinary.c b/generic/tclBinary.c
index 6a34810..e8cd6a6 100644
--- a/generic/tclBinary.c
+++ b/generic/tclBinary.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclBinary.c 1.30 98/02/05 20:20:50
+ * RCS: @(#) $Id: tclBinary.c,v 1.1.2.2 1998/09/24 23:58:41 stanton Exp $
*/
#include <math.h>
@@ -1285,7 +1285,7 @@ GetFormatSpec(formatPtr, cmdPtr, countPtr)
if (**formatPtr == '*') {
(*formatPtr)++;
(*countPtr) = BINARY_ALL;
- } else if (isdigit(**formatPtr)) { /* INTL: digit */
+ } else if (isdigit(UCHAR(**formatPtr))) { /* INTL: digit */
(*countPtr) = strtoul(*formatPtr, formatPtr, 10);
} else {
(*countPtr) = BINARY_NOCOUNT;
diff --git a/generic/tclCkalloc.c b/generic/tclCkalloc.c
index 10440c8..e498b6a 100644
--- a/generic/tclCkalloc.c
+++ b/generic/tclCkalloc.c
@@ -12,7 +12,7 @@
*
* This code contributed by Karl Lehenbauer and Mark Diekhans
*
- * SCCS: @(#) tclCkalloc.c 1.35 98/02/18 16:14:29
+ * RCS: @(#) $Id: tclCkalloc.c,v 1.1.2.2 1998/09/24 23:58:41 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclClock.c b/generic/tclClock.c
index 04b0b62..93a4a7a 100644
--- a/generic/tclClock.c
+++ b/generic/tclClock.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclClock.c 1.41 98/02/17 17:18:15
+ * RCS: @(#) $Id: tclClock.c,v 1.1.2.2 1998/09/24 23:58:41 stanton Exp $
*/
#include "tcl.h"
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c
index 6cb154e..5ac1510 100644
--- a/generic/tclCmdAH.c
+++ b/generic/tclCmdAH.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclCmdAH.c 1.171 98/02/11 18:54:50
+ * RCS: @(#) $Id: tclCmdAH.c,v 1.1.2.2 1998/09/24 23:58:42 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index d6b7f0d..f47fb1e 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -13,20 +13,12 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclCmdIL.c 1.185 98/02/05 20:20:55
+ * RCS: @(#) $Id: tclCmdIL.c,v 1.1.2.2 1998/09/24 23:58:42 stanton Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
-
-/*
- * The following variable holds the full path name of the binary
- * from which this application was executed, or NULL if it isn't
- * know. The value of the variable is set by the procedure
- * Tcl_FindExecutable. The storage space is dynamically allocated.
- */
-
-char *tclExecutableName = NULL;
+#include "tclCompile.h"
/*
* During execution of the "lsort" command, structures of the following
@@ -81,6 +73,9 @@ typedef struct SortInfo {
* Forward declarations for procedures defined in this file:
*/
+static void AppendLocals _ANSI_ARGS_((Tcl_Interp *interp,
+ Tcl_Obj *listPtr, char *pattern,
+ int includeLinks));
static int DictionaryCompare _ANSI_ARGS_((char *left,
char *right));
static int InfoArgsCmd _ANSI_ARGS_((ClientData dummy,
@@ -510,7 +505,7 @@ InfoArgsCmd(dummy, interp, objc, objv)
listObjPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL);
for (localPtr = procPtr->firstLocalPtr; localPtr != NULL;
localPtr = localPtr->nextPtr) {
- if (localPtr->isArg) {
+ if (TclIsVarArgument(localPtr)) {
Tcl_ListObjAppendElement(interp, listObjPtr,
Tcl_NewStringObj(localPtr->name, -1));
}
@@ -549,7 +544,8 @@ InfoBodyCmd(dummy, interp, objc, objv)
register Interp *iPtr = (Interp *) interp;
char *name;
Proc *procPtr;
-
+ Tcl_Obj *bodyPtr, *resultPtr;
+
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "procname");
return TCL_ERROR;
@@ -562,7 +558,27 @@ InfoBodyCmd(dummy, interp, objc, objv)
"\"", name, "\" isn't a procedure", (char *) NULL);
return TCL_ERROR;
}
- Tcl_SetObjResult(interp, procPtr->bodyPtr);
+
+ /*
+ * we need to check if the body from this procedure had been generated
+ * from a precompiled body. If that is the case, then the bodyPtr's
+ * string representation is bogus, since sources are not available.
+ * In order to make sure that later manipulations of the object do not
+ * invalidate the internal representation, we make a copy of the string
+ * representation and return that one, instead.
+ */
+
+ bodyPtr = procPtr->bodyPtr;
+ resultPtr = bodyPtr;
+ if (bodyPtr->typePtr == &tclByteCodeType) {
+ ByteCode *codePtr = (ByteCode *) bodyPtr->internalRep.otherValuePtr;
+
+ if (codePtr->flags & TCL_BYTECODE_PRECOMPILED) {
+ resultPtr = Tcl_NewStringObj(bodyPtr->bytes, bodyPtr->length);
+ }
+ }
+
+ Tcl_SetObjResult(interp, resultPtr);
return TCL_OK;
}
@@ -832,7 +848,8 @@ InfoDefaultCmd(dummy, interp, objc, objv)
for (localPtr = procPtr->firstLocalPtr; localPtr != NULL;
localPtr = localPtr->nextPtr) {
- if ((localPtr->isArg) && (strcmp(argName, localPtr->name) == 0)) {
+ if (TclIsVarArgument(localPtr)
+ && (strcmp(argName, localPtr->name) == 0)) {
if (localPtr->defValuePtr != NULL) {
valueObjPtr = Tcl_SetObjVar2(interp,
Tcl_GetString(objv[4]), NULL,
@@ -1216,12 +1233,7 @@ InfoLocalsCmd(dummy, interp, objc, objv)
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
Interp *iPtr = (Interp *) interp;
- Var *varPtr;
- char *varName, *pattern;
- int i, localVarCt;
- Tcl_HashTable *localVarTablePtr;
- register Tcl_HashEntry *entryPtr;
- Tcl_HashSearch search;
+ char *pattern;
Tcl_Obj *listPtr;
if (objc == 2) {
@@ -1233,10 +1245,9 @@ InfoLocalsCmd(dummy, interp, objc, objv)
return TCL_ERROR;
}
- if (iPtr->varFramePtr == NULL) {
+ if (iPtr->varFramePtr == NULL || !iPtr->varFramePtr->isProcCallFrame) {
return TCL_OK;
}
- localVarTablePtr = iPtr->varFramePtr->varTablePtr;
/*
* Return a list containing names of first the compiled locals (i.e. the
@@ -1245,18 +1256,63 @@ InfoLocalsCmd(dummy, interp, objc, objv)
*/
listPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL);
-
+ AppendLocals(interp, listPtr, pattern, 0);
+ Tcl_SetObjResult(interp, listPtr);
+ return TCL_OK;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * AppendLocals --
+ *
+ * Append the local variables for the current frame to the
+ * specified list object.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+AppendLocals(interp, listPtr, pattern, includeLinks)
+ Tcl_Interp *interp; /* Current interpreter. */
+ Tcl_Obj *listPtr; /* List object to append names to. */
+ char *pattern; /* Pattern to match against. */
+ int includeLinks; /* 1 if upvars should be included, else 0. */
+{
+ Interp *iPtr = (Interp *) interp;
+ CompiledLocal *localPtr;
+ Var *varPtr;
+ int i, localVarCt;
+ char *varName;
+ Tcl_HashTable *localVarTablePtr;
+ register Tcl_HashEntry *entryPtr;
+ Tcl_HashSearch search;
+
+ localPtr = iPtr->varFramePtr->procPtr->firstLocalPtr;
localVarCt = iPtr->varFramePtr->numCompiledLocals;
- for (i = 0, varPtr = iPtr->varFramePtr->compiledLocals;
- i < localVarCt;
- i++, varPtr++) {
- if (!TclIsVarUndefined(varPtr)) {
+ varPtr = iPtr->varFramePtr->compiledLocals;
+ localVarTablePtr = iPtr->varFramePtr->varTablePtr;
+
+ for (i = 0; i < localVarCt; i++) {
+ /*
+ * Skip nameless (temporary) variables and undefined variables
+ */
+
+ if (!TclIsVarTemporary(localPtr) && !TclIsVarUndefined(varPtr)) {
varName = varPtr->name;
if ((pattern == NULL) || Tcl_StringMatch(varName, pattern)) {
Tcl_ListObjAppendElement(interp, listPtr,
Tcl_NewStringObj(varName, -1));
}
}
+ varPtr++;
+ localPtr = localPtr->nextPtr;
}
if (localVarTablePtr != NULL) {
@@ -1264,7 +1320,8 @@ InfoLocalsCmd(dummy, interp, objc, objv)
entryPtr != NULL;
entryPtr = Tcl_NextHashEntry(&search)) {
varPtr = (Var *) Tcl_GetHashValue(entryPtr);
- if (!TclIsVarUndefined(varPtr) && !TclIsVarLink(varPtr)) {
+ if (!TclIsVarUndefined(varPtr)
+ && (includeLinks || !TclIsVarLink(varPtr))) {
varName = Tcl_GetHashKey(localVarTablePtr, entryPtr);
if ((pattern == NULL)
|| Tcl_StringMatch(varName, pattern)) {
@@ -1274,9 +1331,6 @@ InfoLocalsCmd(dummy, interp, objc, objv)
}
}
}
-
- Tcl_SetObjResult(interp, listPtr);
- return TCL_OK;
}
/*
@@ -1307,13 +1361,17 @@ InfoNameOfExecutableCmd(dummy, interp, objc, objv)
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
+ CONST char *nameOfExecutable;
+
if (objc != 2) {
Tcl_WrongNumArgs(interp, 2, objv, NULL);
return TCL_ERROR;
}
+
+ nameOfExecutable = Tcl_GetNameOfExecutable();
- if (tclExecutableName != NULL) {
- Tcl_SetStringObj(Tcl_GetObjResult(interp), tclExecutableName, -1);
+ if (nameOfExecutable != NULL) {
+ Tcl_SetStringObj(Tcl_GetObjResult(interp), (char *)nameOfExecutable, -1);
}
return TCL_OK;
}
@@ -1595,13 +1653,13 @@ InfoVarsCmd(dummy, interp, objc, objv)
char *varName, *pattern, *simplePattern;
register Tcl_HashEntry *entryPtr;
Tcl_HashSearch search;
- Var *varPtr, *localVarPtr;
+ Var *varPtr;
Namespace *nsPtr;
Namespace *globalNsPtr = (Namespace *) Tcl_GetGlobalNamespace(interp);
Namespace *currNsPtr = (Namespace *) Tcl_GetCurrentNamespace(interp);
Tcl_Obj *listPtr, *elemObjPtr;
int specificNsInPattern = 0; /* Init. to avoid compiler warning. */
- int i, result;
+ int result;
/*
* Get the pattern and find the "effective namespace" in which to
@@ -1709,49 +1767,7 @@ InfoVarsCmd(dummy, interp, objc, objv)
}
}
} else {
- /*
- * We're in a local call frame and no specific namespace was
- * specific. Create a list that starts with the compiled locals
- * (i.e. the ones stored in the call frame).
- */
-
- CallFrame *varFramePtr = iPtr->varFramePtr;
- int localVarCt = varFramePtr->numCompiledLocals;
- Tcl_HashTable *varTablePtr = varFramePtr->varTablePtr;
-
- for (i = 0, localVarPtr = iPtr->varFramePtr->compiledLocals;
- i < localVarCt;
- i++, localVarPtr++) {
- if (!TclIsVarUndefined(localVarPtr)) {
- varName = localVarPtr->name;
- if ((simplePattern == NULL)
- || Tcl_StringMatch(varName, simplePattern)) {
- Tcl_ListObjAppendElement(interp, listPtr,
- Tcl_NewStringObj(varName, -1));
- }
- }
- }
-
- /*
- * Now add in the variables in the call frame's variable hash
- * table (if one exists).
- */
-
- if (varTablePtr != NULL) {
- for (entryPtr = Tcl_FirstHashEntry(varTablePtr, &search);
- entryPtr != NULL;
- entryPtr = Tcl_NextHashEntry(&search)) {
- varPtr = (Var *) Tcl_GetHashValue(entryPtr);
- if (!TclIsVarUndefined(varPtr)) {
- varName = Tcl_GetHashKey(varTablePtr, entryPtr);
- if ((simplePattern == NULL)
- || Tcl_StringMatch(varName, simplePattern)) {
- Tcl_ListObjAppendElement(interp, listPtr,
- Tcl_NewStringObj(varName, -1));
- }
- }
- }
- }
+ AppendLocals(interp, listPtr, simplePattern, 1);
}
Tcl_SetObjResult(interp, listPtr);
@@ -2895,7 +2911,7 @@ DictionaryCompare(left, right)
diff = 0;
while (1) {
if (diff == 0) {
- diff = *left - *right;
+ diff = UCHAR(*left) - UCHAR(*right);
}
right++;
left++;
@@ -2930,7 +2946,7 @@ DictionaryCompare(left, right)
left += Tcl_UtfToUniChar(left, &uniLeft);
right += Tcl_UtfToUniChar(right, &uniRight);
} else {
- diff = *left - *right;
+ diff = UCHAR(*left) - UCHAR(*right);
break;
}
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index bad8140..12bb1c6 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclCmdMZ.c 1.127 98/02/11 18:55:39
+ * RCS: @(#) $Id: tclCmdMZ.c,v 1.1.2.2 1998/09/24 23:58:43 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclCompCmds.c b/generic/tclCompCmds.c
index a7676f4..824818a 100644
--- a/generic/tclCompCmds.c
+++ b/generic/tclCompCmds.c
@@ -22,6 +22,16 @@
static ClientData DupForeachInfo _ANSI_ARGS_((ClientData clientData));
static void FreeForeachInfo _ANSI_ARGS_((
ClientData clientData));
+
+/*
+ * The structures below define the AuxData types defined in this file.
+ */
+
+AuxDataType tclForeachInfoType = {
+ "ForeachInfo", /* name */
+ DupForeachInfo, /* dupProc */
+ FreeForeachInfo /* freeProc */
+};
/*
*----------------------------------------------------------------------
@@ -140,14 +150,8 @@ TclCompileCatchCmd(interp, parsePtr, envPtr)
if (nameTokenPtr->type == TCL_TOKEN_SIMPLE_WORD) {
name = nameTokenPtr[1].start;
nameChars = nameTokenPtr[1].size;
- for (i = 0, p = name; i < nameChars; i++, p++) {
- if (*p == '(') {
- p = (name + nameChars-1);
- if (*p == ')') { /* last char is ')' => array elem */
- return TCL_OUT_LINE_COMPILE;
- }
- break;
- }
+ if (!TclIsLocalScalar(name, nameChars)) {
+ return TCL_OUT_LINE_COMPILE;
}
localIndex = TclFindCompiledLocal(nameTokenPtr[1].start,
nameTokenPtr[1].size, /*create*/ 1,
@@ -684,14 +688,9 @@ TclCompileForeachCmd(interp, parsePtr, envPtr)
numVars = varcList[loopIndex];
for (j = 0; j < numVars; j++) {
char *varName = varvList[loopIndex][j];
- char *p = varName;
- while (*p != '\0') {
- if ((*p == '\\') || (*p == '$') || (*p == '[')
- || (*p == '(') || (*p == '"') || (*p == '{')) {
- code = TCL_OUT_LINE_COMPILE;
- goto done;
- }
- p++;
+ if (!TclIsLocalScalar(varName, strlen(varName))) {
+ code = TCL_OUT_LINE_COMPILE;
+ goto done;
}
}
loopIndex++;
@@ -743,8 +742,7 @@ TclCompileForeachCmd(interp, parsePtr, envPtr)
}
infoPtr->varLists[loopIndex] = varListPtr;
}
- infoIndex = TclCreateAuxData((ClientData) infoPtr,
- DupForeachInfo, FreeForeachInfo, envPtr);
+ infoIndex = TclCreateAuxData((ClientData) infoPtr, &tclForeachInfoType, envPtr);
/*
* Evaluate then store each value list in the associated temporary.
diff --git a/generic/tclCompExpr.c b/generic/tclCompExpr.c
index 1f57c03..c872698 100644
--- a/generic/tclCompExpr.c
+++ b/generic/tclCompExpr.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclCompExpr.c 1.43 98/02/06 15:19:04
+ * RCS: @(#) $Id: tclCompExpr.c,v 1.1.2.2 1998/09/24 23:58:43 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index fb044cd..f29b1c4 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -10,13 +10,21 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclCompile.c 1.95 98/02/18 11:58:34
+ * RCS: @(#) $Id: tclCompile.c,v 1.1.2.2 1998/09/24 23:58:44 stanton Exp $
*/
#include "tclInt.h"
#include "tclCompile.h"
/*
+ * Table of all AuxData types.
+ */
+
+static Tcl_HashTable auxDataTypeTable;
+static int auxDataTypeTableInitialized; /* 0 means not yet initialized. */
+static Tcl_Mutex tableMutex;
+
+/*
* Variable that controls whether compilation tracing is enabled and, if so,
* what level of tracing is desired:
* 0: no compilation tracing
@@ -316,8 +324,8 @@ SetByteCodeFromAny(interp, objPtr)
auxDataPtr = compEnv.auxDataArrayPtr;
for (i = 0; i < compEnv.auxDataArrayNext; i++) {
- if (auxDataPtr->freeProc != NULL) {
- auxDataPtr->freeProc(auxDataPtr->clientData);
+ if (auxDataPtr->type->freeProc != NULL) {
+ auxDataPtr->type->freeProc(auxDataPtr->clientData);
}
auxDataPtr++;
}
@@ -520,8 +528,8 @@ TclCleanupByteCode(codePtr)
auxDataPtr = codePtr->auxDataArrayPtr;
for (i = 0; i < numAuxDataItems; i++) {
- if (auxDataPtr->freeProc != NULL) {
- (*auxDataPtr->freeProc)(auxDataPtr->clientData);
+ if (auxDataPtr->type->freeProc != NULL) {
+ (*auxDataPtr->type->freeProc)(auxDataPtr->clientData);
}
auxDataPtr++;
}
@@ -1502,6 +1510,7 @@ TclInitByteCodeObj(objPtr, envPtr)
register unsigned char *p;
unsigned char *nextPtr;
int numLitObjects = envPtr->literalArrayNext;
+ Namespace *namespacePtr;
int i;
Interp *iPtr;
@@ -1524,11 +1533,20 @@ TclInitByteCodeObj(objPtr, envPtr)
structureSize += auxDataArrayBytes;
structureSize += cmdLocBytes;
+ if (envPtr->iPtr->varFramePtr != NULL) {
+ namespacePtr = envPtr->iPtr->varFramePtr->nsPtr;
+ } else {
+ namespacePtr = envPtr->iPtr->globalNsPtr;
+ }
+
p = (unsigned char *) ckalloc((size_t) structureSize);
codePtr = (ByteCode *) p;
codePtr->interpHandle = TclHandlePreserve(iPtr->handle);
codePtr->compileEpoch = iPtr->compileEpoch;
+ codePtr->nsPtr = namespacePtr;
+ codePtr->nsEpoch = namespacePtr->resolverEpoch;
codePtr->refCount = 1;
+ codePtr->flags = 0;
codePtr->source = envPtr->source;
codePtr->procPtr = envPtr->procPtr;
@@ -1733,7 +1751,7 @@ TclFindCompiledLocal(name, nameBytes, create, flags, procPtr)
int localCt = procPtr->numCompiledLocals;
localPtr = procPtr->firstLocalPtr;
for (i = 0; i < localCt; i++) {
- if (!localPtr->isTemp) {
+ if (!TclIsVarTemporary(localPtr)) {
char *localName = localPtr->name;
if ((name[0] == localName[0])
&& (nameBytes == localPtr->nameLength)
@@ -1763,10 +1781,13 @@ TclFindCompiledLocal(name, nameBytes, create, flags, procPtr)
localPtr->nextPtr = NULL;
localPtr->nameLength = nameBytes;
localPtr->frameIndex = localVar;
- localPtr->isArg = 0;
- localPtr->isTemp = (name == NULL);
+ if (name == NULL) {
+ localPtr->flags |= VAR_TEMPORARY;
+ }
localPtr->flags = flags;
localPtr->defValuePtr = NULL;
+ localPtr->resolveInfo = NULL;
+
if (name != NULL) {
memcpy((VOID *) localPtr->name, (VOID *) name,
(size_t) nameBytes);
@@ -1780,6 +1801,119 @@ TclFindCompiledLocal(name, nameBytes, create, flags, procPtr)
/*
*----------------------------------------------------------------------
*
+ * TclInitCompiledLocals --
+ *
+ * This routine is invoked in order to initialize the compiled
+ * locals table for a new call frame.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * May invoke various name resolvers in order to determine which
+ * variables are being referenced at runtime.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+TclInitCompiledLocals(interp, framePtr, nsPtr)
+ Tcl_Interp *interp; /* Current interpreter. */
+ CallFrame *framePtr; /* Call frame to initialize. */
+ Namespace *nsPtr; /* Pointer to current namespace. */
+{
+ register CompiledLocal *localPtr;
+ Interp *iPtr = (Interp*) interp;
+ Tcl_ResolvedVarInfo *vinfo, *resVarInfo;
+ Var *varPtr = framePtr->compiledLocals;
+ Var *resolvedVarPtr;
+ ResolverScheme *resPtr;
+ int result;
+
+ /*
+ * Initialize the array of local variables stored in the call frame.
+ * Some variables may have special resolution rules. In that case,
+ * we call their "resolver" procs to get our hands on the variable,
+ * and we make the compiled local a link to the real variable.
+ */
+
+ for (localPtr = framePtr->procPtr->firstLocalPtr;
+ localPtr != NULL;
+ localPtr = localPtr->nextPtr) {
+
+ /*
+ * Check to see if this local is affected by namespace or
+ * interp resolvers. The resolver to use is cached for the
+ * next invocation of the procedure.
+ */
+
+ if (!(localPtr->flags & (VAR_ARGUMENT|VAR_TEMPORARY|VAR_RESOLVED))
+ && (nsPtr->compiledVarResProc || iPtr->resolverPtr)) {
+ resPtr = iPtr->resolverPtr;
+
+ if (nsPtr->compiledVarResProc) {
+ result = (*nsPtr->compiledVarResProc)(nsPtr->interp,
+ localPtr->name, localPtr->nameLength,
+ (Tcl_Namespace *) nsPtr, &vinfo);
+ } else {
+ result = TCL_CONTINUE;
+ }
+
+ while ((result == TCL_CONTINUE) && resPtr) {
+ if (resPtr->compiledVarResProc) {
+ result = (*resPtr->compiledVarResProc)(nsPtr->interp,
+ localPtr->name, localPtr->nameLength,
+ (Tcl_Namespace *) nsPtr, &vinfo);
+ }
+ resPtr = resPtr->nextPtr;
+ }
+ if (result == TCL_OK) {
+ localPtr->resolveInfo = vinfo;
+ localPtr->flags |= VAR_RESOLVED;
+ }
+ }
+
+ /*
+ * Now invoke the resolvers to determine the exact variables that
+ * should be used.
+ */
+
+ resVarInfo = localPtr->resolveInfo;
+ resolvedVarPtr = NULL;
+
+ if (resVarInfo && resVarInfo->fetchProc) {
+ resolvedVarPtr = (Var*) (*resVarInfo->fetchProc)(interp,
+ resVarInfo);
+ }
+
+ if (resolvedVarPtr) {
+ varPtr->name = localPtr->name; /* will be just '\0' if temp var */
+ varPtr->nsPtr = NULL;
+ varPtr->hPtr = NULL;
+ varPtr->refCount = 0;
+ varPtr->tracePtr = NULL;
+ varPtr->searchPtr = NULL;
+ varPtr->flags = 0;
+ TclSetVarLink(varPtr);
+ varPtr->value.linkPtr = resolvedVarPtr;
+ resolvedVarPtr->refCount++;
+ } else {
+ varPtr->value.objPtr = NULL;
+ varPtr->name = localPtr->name; /* will be just '\0' if temp var */
+ varPtr->nsPtr = NULL;
+ varPtr->hPtr = NULL;
+ varPtr->refCount = 0;
+ varPtr->tracePtr = NULL;
+ varPtr->searchPtr = NULL;
+ varPtr->flags = (localPtr->flags | VAR_UNDEFINED);
+ }
+ varPtr++;
+ }
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
* TclExpandCodeArray --
*
* Procedure that uses malloc to allocate more storage for a
@@ -2049,12 +2183,7 @@ int
TclCreateAuxData(clientData, dupProc, freeProc, envPtr)
ClientData clientData; /* The compilation auxiliary data to store
* in the new aux data record. */
- AuxDataDupProc *dupProc; /* Procedure to call to duplicate the
- * compilation aux data when the containing
- * ByteCode structure is duplicated. */
- AuxDataFreeProc *freeProc; /* Procedure to call to free the
- * compilation aux data when the containing
- * ByteCode structure is freed. */
+ AuxDataType *typePtr; /* Pointer to the type to attach to this AuxData */
register CompileEnv *envPtr;/* Points to the CompileEnv for which a new
* aux data structure is to be allocated. */
{
@@ -2093,8 +2222,7 @@ TclCreateAuxData(clientData, dupProc, freeProc, envPtr)
auxDataPtr = &(envPtr->auxDataArrayPtr[index]);
auxDataPtr->clientData = clientData;
- auxDataPtr->dupProc = dupProc;
- auxDataPtr->freeProc = freeProc;
+ auxDataPtr->type = typePtr;
return index;
}
@@ -2390,6 +2518,188 @@ TclFixupForwardJump(envPtr, jumpFixupPtr, jumpDist, distThreshold)
/*
*----------------------------------------------------------------------
*
+ * TclGetInstructionTable --
+ *
+ * Returns a pointer to the table describing Tcl bytecode instructions.
+ * This procedure is defined so that clients can access the pointer from
+ * outside the TCL DLLs.
+ *
+ * Results:
+ * Returns a pointer to the global instruction table, same as the
+ * expression (&instructionTable[0]).
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+InstructionDesc *
+TclGetInstructionTable()
+{
+ return &instructionTable[0];
+}
+
+/*
+ *--------------------------------------------------------------
+ *
+ * TclRegisterAuxDataType --
+ *
+ * This procedure is called to register a new AuxData type
+ * in the table of all AuxData types supported by Tcl.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * The type is registered in the AuxData type table. If there was already
+ * a type with the same name as in typePtr, it is replaced with the
+ * new type.
+ *
+ *--------------------------------------------------------------
+ */
+
+void
+TclRegisterAuxDataType(typePtr)
+ AuxDataType *typePtr; /* Information about object type;
+ * storage must be statically
+ * allocated (must live forever). */
+{
+ register Tcl_HashEntry *hPtr;
+ int new;
+
+ Tcl_MutexLock(&tableMutex);
+ if (!auxDataTypeTableInitialized) {
+ TclInitAuxDataTypeTable();
+ }
+
+ /*
+ * If there's already a type with the given name, remove it.
+ */
+
+ hPtr = Tcl_FindHashEntry(&tsdPtr->auxDataTypeTable, typePtr->name);
+ if (hPtr != (Tcl_HashEntry *) NULL) {
+ Tcl_DeleteHashEntry(hPtr);
+ }
+
+ /*
+ * Now insert the new object type.
+ */
+
+ hPtr = Tcl_CreateHashEntry(&tsdPtr->auxDataTypeTable, typePtr->name, &new);
+ if (new) {
+ Tcl_SetHashValue(hPtr, typePtr);
+ }
+ Tcl_MutexUnlock(&tableMutex);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclGetAuxDataType --
+ *
+ * This procedure looks up an Auxdata type by name.
+ *
+ * Results:
+ * If an AuxData type with name matching "typeName" is found, a pointer
+ * to its AuxDataType structure is returned; otherwise, NULL is returned.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+AuxDataType *
+TclGetAuxDataType(typeName)
+ char *typeName; /* Name of AuxData type to look up. */
+{
+ register Tcl_HashEntry *hPtr;
+ AuxDataType *typePtr = NULL;
+
+ Tcl_MutexLock(&tableMutex);
+ if (!auxDataTypeTableInitialized) {
+ TclInitAuxDataTypeTable();
+ }
+
+ hPtr = Tcl_FindHashEntry(&auxDataTypeTable, typeName);
+ if (hPtr != (Tcl_HashEntry *) NULL) {
+ typePtr = (AuxDataType *) Tcl_GetHashValue(hPtr);
+ }
+ Tcl_MutexUnlock(&tableMutex);
+
+ return typePtr;
+}
+
+/*
+ *--------------------------------------------------------------
+ *
+ * TclInitAuxDataTypeTable --
+ *
+ * This procedure is invoked to perform once-only initialization of
+ * the AuxData type table. It also registers the AuxData types defined in
+ * this file.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Initializes the table of defined AuxData types "auxDataTypeTable" with
+ * builtin AuxData types defined in this file.
+ *
+ *--------------------------------------------------------------
+ */
+
+void
+TclInitAuxDataTypeTable()
+{
+ /*
+ * The table mutex must already be held before this routine is invoked.
+ */
+
+ auxDataTypeTableInitialized = 1;
+ Tcl_InitHashTable(&auxDataTypeTable, TCL_STRING_KEYS);
+
+ /*
+ * There is only one AuxData type at this time, so register it here.
+ */
+
+ TclRegisterAuxDataType(&tclForeachInfoType);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclFinalizeAuxDataTypeTable --
+ *
+ * This procedure is called by Tcl_Finalize after all exit handlers
+ * have been run to free up storage associated with the table of AuxData
+ * types. This procedure is called by TclFinalizeExecution() which
+ * is called by Tcl_Finalize().
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Deletes all entries in the hash table of AuxData types.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+TclFinalizeAuxDataTypeTable()
+{
+ Tcl_MutexLock(&tableMutex);
+ if (auxDataTypeTableInitialized) {
+ Tcl_DeleteHashTable(&auxDataTypeTable);
+ auxDataTypeTableInitialized = 0;
+ }
+ Tcl_MutexUnlock(&tableMutex);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
* GetCmdLocEncodingSize --
*
* Computes the total number of bytes needed to encode the command
@@ -2671,13 +2981,14 @@ TclPrintByteCodeObj(interp, objPtr)
if (numCompiledLocals > 0) {
CompiledLocal *localPtr = procPtr->firstLocalPtr;
for (i = 0; i < numCompiledLocals; i++) {
- fprintf(stdout, " slot %d%s%s%s%s%s", i,
+ fprintf(stdout, " slot %d%s%s%s%s%s%s", i,
((localPtr->flags & VAR_SCALAR)? ", scalar" : ""),
((localPtr->flags & VAR_ARRAY)? ", array" : ""),
((localPtr->flags & VAR_LINK)? ", link" : ""),
- (localPtr->isArg? ", arg" : ""),
- (localPtr->isTemp? ", temp" : ""));
- if (localPtr->isTemp) {
+ ((localPtr->flags & VAR_ARGUMENT)? ", arg" : ""),
+ ((localPtr->flags & VAR_TEMPORARY)? ", temp" : ""),
+ ((localPtr->flags & VAR_RESOLVED)? ", resolved" : ""));
+ if (TclIsVarTemporary(localPtr)) {
fprintf(stdout, "\n");
} else {
fprintf(stdout, ", \"%s\"\n", localPtr->name);
@@ -2928,7 +3239,7 @@ TclPrintInstruction(codePtr, pc)
for (j = 0; j < opnd; j++) {
localPtr = localPtr->nextPtr;
}
- if (localPtr->isTemp) {
+ if (TclIsVarTemporary(localPtr)) {
fprintf(stdout, "%u # temp var %u",
(unsigned int) opnd, (unsigned int) opnd);
} else {
@@ -2958,7 +3269,7 @@ TclPrintInstruction(codePtr, pc)
for (j = 0; j < opnd; j++) {
localPtr = localPtr->nextPtr;
}
- if (localPtr->isTemp) {
+ if (TclIsVarTemporary(localPtr)) {
fprintf(stdout, "%u # temp var %u",
(unsigned int) opnd, (unsigned int) opnd);
} else {
diff --git a/generic/tclCompile.h b/generic/tclCompile.h
index d3f883f..0b1b3ec 100644
--- a/generic/tclCompile.h
+++ b/generic/tclCompile.h
@@ -6,7 +6,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclCompile.h 1.45 98/02/17 16:30:54
+ * RCS: @(#) $Id: tclCompile.h,v 1.1.2.2 1998/09/24 23:58:46 stanton Exp $
*/
#ifndef _TCLCOMPILATION
@@ -16,6 +16,11 @@
#include "tclInt.h"
#endif /* _TCLINT */
+#ifdef BUILD_tcl
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
/*
*------------------------------------------------------------------------
* Variables related to compilation. These are used in tclCompile.c,
@@ -138,22 +143,36 @@ typedef ClientData (AuxDataDupProc) _ANSI_ARGS_((ClientData clientData));
typedef void (AuxDataFreeProc) _ANSI_ARGS_((ClientData clientData));
/*
+ * We define a separate AuxDataType struct to hold type-related information
+ * for the AuxData structure. This separation makes it possible for clients
+ * outside of the TCL core to manipulate (in a limited fashion!) AuxData;
+ * for example, it makes it possible to pickle and unpickle AuxData structs.
+ */
+
+typedef struct AuxDataType {
+ char *name; /* the name of the type. Types can be
+ * registered and found by name */
+ AuxDataDupProc *dupProc; /* Callback procedure to invoke when the
+ * aux data is duplicated (e.g., when the
+ * ByteCode structure containing the aux
+ * data is duplicated). NULL means just
+ * copy the source clientData bits; no
+ * proc need be called. */
+ AuxDataFreeProc *freeProc; /* Callback procedure to invoke when the
+ * aux data is freed. NULL means no
+ * proc need be called. */
+} AuxDataType;
+
+/*
* The definition of the AuxData structure that holds information created
* during compilation by CompileProcs and used by instructions during
* execution.
*/
typedef struct AuxData {
+ AuxDataType *type; /* pointer to the AuxData type associated with
+ * this ClientData. */
ClientData clientData; /* The compilation data itself. */
- AuxDataDupProc *dupProc; /* Callback procedure to invoke when the
- * aux data is duplicated (e.g., when the
- * ByteCode structure containing the aux
- * data is duplicated). NULL means just
- * copy the source clientData bits; no
- * proc need be called. */
- AuxDataFreeProc *freeProc; /* Callback procedure to invoke when the
- * aux data is freed. NULL means no
- * proc need be called. */
} AuxData;
/*
@@ -268,6 +287,12 @@ typedef struct CompileEnv {
* the CmdLocation map, and the compilation AuxData array.
*/
+/*
+ * A PRECOMPILED bytecode struct is one that was generated from a compiled
+ * image rather than implicitly compiled from source
+ */
+#define TCL_BYTECODE_PRECOMPILED 0x0001
+
typedef struct ByteCode {
TclHandle interpHandle; /* Handle for interpreter containing the
* compiled code. Commands and their compile
@@ -278,10 +303,21 @@ typedef struct ByteCode {
* ByteCode was compiled. Used to invalidate
* code when, e.g., commands with compile
* procs are redefined. */
+ Namespace *nsPtr; /* Namespace context in which this code
+ * was compiled. If the code is executed
+ * if a different namespace, it must be
+ * recompiled. */
+ int nsEpoch; /* Value of nsPtr->resolverEpoch when this
+ * ByteCode was compiled. Used to invalidate
+ * code when new namespace resolution rules
+ * are put into effect. */
int refCount; /* Reference count: set 1 when created
* plus 1 for each execution of the code
* currently active. This structure can be
* freed when refCount becomes zero. */
+ unsigned int flags; /* flags describing state for the codebyte.
+ * this variable holds ORed values from the
+ * TCL_BYTECODE_ masks defined above */
char *source; /* The source string from which this
* ByteCode was compiled. Note that this
* pointer is not owned by the ByteCode and
@@ -692,9 +728,8 @@ EXTERN int TclCompileScript _ANSI_ARGS_((Tcl_Interp *interp,
EXTERN int TclCompileTokens _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Token *tokenPtr, int count,
CompileEnv *envPtr));
-EXTERN int TclCreateAuxData _ANSI_ARGS_((
- ClientData clientData, AuxDataDupProc *dupProc,
- AuxDataFreeProc *freeProc, CompileEnv *envPtr));
+EXTERN int TclCreateAuxData _ANSI_ARGS_((ClientData clientData,
+ AuxDataType *typePtr, CompileEnv *envPtr));
EXTERN int TclCreateExceptRange _ANSI_ARGS_((
ExceptionRangeType type, CompileEnv *envPtr));
EXTERN ExecEnv * TclCreateExecEnv _ANSI_ARGS_((Tcl_Interp *interp));
@@ -703,12 +738,18 @@ EXTERN void TclDeleteLiteralTable _ANSI_ARGS_((
Tcl_Interp *interp, LiteralTable *tablePtr));
EXTERN void TclEmitForwardJump _ANSI_ARGS_((CompileEnv *envPtr,
TclJumpType jumpType, JumpFixup *jumpFixupPtr));
+EXTERN AuxDataType *TclGetAuxDataType _ANSI_ARGS_((char *typeName));
+EXTERN ExceptionRange * TclGetExceptionRangeForPc _ANSI_ARGS_((
+ unsigned char *pc, int catchOnly,
+ ByteCode* codePtr));
+EXTERN InstructionDesc * TclGetInstructionTable _ANSI_ARGS_(());
EXTERN int TclExecuteByteCode _ANSI_ARGS_((Tcl_Interp *interp,
ByteCode *codePtr));
EXTERN void TclExpandCodeArray _ANSI_ARGS_((
CompileEnv *envPtr));
EXTERN void TclExpandJumpFixupArray _ANSI_ARGS_((
JumpFixupArray *fixupArrayPtr));
+EXTERN void TclFinalizeAuxDataTypeTable _ANSI_ARGS_((void));
EXTERN int TclFindCompiledLocal _ANSI_ARGS_((char *name,
int nameChars, int create, int flags,
Proc *procPtr));
@@ -720,6 +761,7 @@ EXTERN int TclFixupForwardJump _ANSI_ARGS_((
EXTERN void TclFreeCompileEnv _ANSI_ARGS_((CompileEnv *envPtr));
EXTERN void TclFreeJumpFixupArray _ANSI_ARGS_((
JumpFixupArray *fixupArrayPtr));
+EXTERN void TclInitAuxDataTypeTable _ANSI_ARGS_((void));
EXTERN void TclInitByteCodeObj _ANSI_ARGS_((Tcl_Obj *objPtr,
CompileEnv *envPtr));
EXTERN void TclInitCompilation _ANSI_ARGS_((void));
@@ -745,6 +787,7 @@ EXTERN void TclPrintObject _ANSI_ARGS_((FILE *outFile,
Tcl_Obj *objPtr, int maxChars));
EXTERN void TclPrintSource _ANSI_ARGS_((FILE *outFile,
char *string, int maxChars));
+EXTERN void TclRegisterAuxDataType _ANSI_ARGS_((AuxDataType *typePtr));
EXTERN int TclRegisterLiteral _ANSI_ARGS_((CompileEnv *envPtr,
char *bytes, int length, int onHeap));
EXTERN void TclReleaseLiteral _ANSI_ARGS_((Tcl_Interp *interp,
@@ -930,5 +973,7 @@ EXTERN void TclVerifyLocalLiteralTable _ANSI_ARGS_((
#define TclMin(i, j) ((((int) i) < ((int) j))? (i) : (j))
#define TclMax(i, j) ((((int) i) > ((int) j))? (i) : (j))
-#endif /* _TCLCOMPILATION */
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLIMPORT
+#endif /* _TCLCOMPILATION */
diff --git a/generic/tclDate.c b/generic/tclDate.c
index cfe2410..1fa8edf 100644
--- a/generic/tclDate.c
+++ b/generic/tclDate.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * @(#) tclDate.c 1.33 98/01/12 15:25:37
+ * RCS: @(#) $Id: tclDate.c,v 1.1.2.2 1998/09/24 23:58:46 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclEnv.c b/generic/tclEnv.c
index c11f863..0e471f0 100644
--- a/generic/tclEnv.c
+++ b/generic/tclEnv.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclEnv.c 1.66 98/02/18 16:12:04
+ * RCS: @(#) $Id: tclEnv.c,v 1.1.2.2 1998/09/24 23:58:47 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclEvent.c b/generic/tclEvent.c
index e7ed511..1fc6cb4 100644
--- a/generic/tclEvent.c
+++ b/generic/tclEvent.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclEvent.c 1.173 98/02/18 18:23:41
+ * RCS: @(#) $Id: tclEvent.c,v 1.1.2.2 1998/09/24 23:58:47 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 0784f90..22320f7 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclExecute.c 1.117 98/02/18 16:14:34
+ * RCS: @(#) $Id: tclExecute.c,v 1.1.2.2 1998/09/24 23:58:47 stanton Exp $
*/
#include "tclInt.h"
@@ -392,6 +392,7 @@ TclCreateExecEnv(interp)
Tcl_MutexLock(&execMutex);
if (!execInitialized) {
+ TclInitAuxDataTypeTable();
InitByteCodeExecution(interp);
execInitialized = 1;
}
@@ -450,6 +451,7 @@ TclFinalizeExecution()
Tcl_MutexLock(&execMutex);
execInitialized = 0;
Tcl_MutexUnlock(&execMutex);
+ TclFinalizeAuxDataTypeTable();
}
/*
@@ -2632,9 +2634,6 @@ TclExecuteByteCode(interp, codePtr)
if (oldValuePtr == NULL) {
iterVarPtr->value.objPtr = Tcl_NewLongObj(-1);
Tcl_IncrRefCount(iterVarPtr->value.objPtr);
- if (oldValuePtr != NULL) {
- Tcl_DecrRefCount(oldValuePtr);
- }
} else {
Tcl_SetLongObj(oldValuePtr, -1);
}
diff --git a/generic/tclFCmd.c b/generic/tclFCmd.c
index 0b291f0..8a7b0ff 100644
--- a/generic/tclFCmd.c
+++ b/generic/tclFCmd.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclFCmd.c 1.22 98/02/02 21:42:40
+ * RCS: @(#) $Id: tclFCmd.c,v 1.1.2.2 1998/09/24 23:58:49 stanton Exp $
*/
#include "tclInt.h"
@@ -141,9 +141,9 @@ FileCopyRename(interp, argc, argv, copyFlag)
result = TCL_OK;
/*
- * Call stat() so that if target is a symlink that points to a directory
- * we will put the sources in that directory instead of overwriting the
- * symlink.
+ * Call TclpStat() so that if target is a symlink that points to a
+ * directory we will put the sources in that directory instead of
+ * overwriting the symlink.
*/
if ((TclpStat(target, &statBuf) != 0) || !S_ISDIR(statBuf.st_mode)) {
@@ -253,8 +253,9 @@ TclFileMakeDirsCmd(interp, argc, argv)
char *target = Tcl_JoinPath(j + 1, pargv, &targetBuffer);
/*
- * Call stat() so that if target is a symlink that points to a
- * directory we will create subdirectories in that directory.
+ * Call TclpStat() so that if target is a symlink that points
+ * to a directory we will create subdirectories in that
+ * directory.
*/
if (TclpStat(target, &statBuf) == 0) {
diff --git a/generic/tclFileName.c b/generic/tclFileName.c
index 48c2341..13427fc 100644
--- a/generic/tclFileName.c
+++ b/generic/tclFileName.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclFileName.c 1.48 98/02/18 14:42:27
+ * RCS: @(#) $Id: tclFileName.c,v 1.1.2.2 1998/09/24 23:58:49 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclGet.c b/generic/tclGet.c
index 89bd1ce..4287107 100644
--- a/generic/tclGet.c
+++ b/generic/tclGet.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclGet.c 1.36 98/01/06 11:04:51
+ * RCS: @(#) $Id: tclGet.c,v 1.1.2.2 1998/09/24 23:58:50 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclGetDate.y b/generic/tclGetDate.y
index 938bb78..3586646 100644
--- a/generic/tclGetDate.y
+++ b/generic/tclGetDate.y
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclGetDate.y 1.35 98/01/12 15:25:45
+ * RCS: @(#) $Id: tclGetDate.y,v 1.1.2.2 1998/09/24 23:58:50 stanton Exp $
*/
%{
diff --git a/generic/tclHash.c b/generic/tclHash.c
index 5c0da87..f20588d 100644
--- a/generic/tclHash.c
+++ b/generic/tclHash.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclHash.c 1.18 98/01/19 17:25:57
+ * RCS: @(#) $Id: tclHash.c,v 1.1.2.2 1998/09/24 23:58:50 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclHistory.c b/generic/tclHistory.c
index 2210d62..a0c0822 100644
--- a/generic/tclHistory.c
+++ b/generic/tclHistory.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclHistory.c 1.51 97/12/22 15:45:29
+ * RCS: @(#) $Id: tclHistory.c,v 1.1.2.2 1998/09/24 23:58:51 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclIO.c b/generic/tclIO.c
index 4d2079f..0faffff 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -4,12 +4,13 @@
* This file provides the generic portions (those that are the same on
* all platforms and for all channel types) of Tcl's IO facilities.
*
+ * Copyright (c) 1998 Scriptics Corporation
* Copyright (c) 1995-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclIO.c 1.283 98/02/18 16:14:30
+ * RCS: @(#) $Id: tclIO.c,v 1.1.2.2 1998/09/24 23:58:51 stanton Exp $
*/
#include "tclInt.h"
@@ -2817,7 +2818,7 @@ Tcl_GetsObj(chan, objPtr)
{
GetsState gs;
Channel *chanPtr;
- int inEofChar, skip;
+ int inEofChar, skip, copiedTotal;
ChannelBuffer *bufPtr;
Tcl_Encoding encoding;
char *dst, *dstEnd, *eol, *eof;
@@ -2826,7 +2827,8 @@ Tcl_GetsObj(chan, objPtr)
chanPtr = (Channel *) chan;
if (CheckChannelErrors(chanPtr, TCL_READABLE) != 0) {
- return -1;
+ copiedTotal = -1;
+ goto done;
}
bufPtr = chanPtr->inQueueHead;
@@ -3033,7 +3035,8 @@ Tcl_GetsObj(chan, objPtr)
Tcl_SetObjLength(objPtr, 0);
CommonGetsCleanup(chanPtr, encoding);
- return -1;
+ copiedTotal = -1;
+ goto done;
}
goto goteol;
}
@@ -3064,7 +3067,8 @@ Tcl_GetsObj(chan, objPtr)
Tcl_SetObjLength(objPtr, eol - objPtr->bytes);
CommonGetsCleanup(chanPtr, encoding);
chanPtr->flags &= ~CHANNEL_BLOCKED;
- return gs.totalChars + gs.charsWrote - skip;
+ copiedTotal = gs.totalChars + gs.charsWrote - skip;
+ goto done;
/*
* Couldn't get a complete line. This only happens if we get a error
@@ -3097,7 +3101,16 @@ Tcl_GetsObj(chan, objPtr)
*/
chanPtr->flags |= CHANNEL_NEED_MORE_DATA;
- return -1;
+ copiedTotal = -1;
+
+ done:
+ /*
+ * Update the notifier state so we don't block while there is still
+ * data in the buffers.
+ */
+
+ UpdateInterest(chanPtr);
+ return copiedTotal;
}
/*
@@ -4102,7 +4115,8 @@ Tcl_Ungets(chan, str, len, atEnd)
flags = chanPtr->flags;
if (CheckChannelErrors(chanPtr, TCL_READABLE) != 0) {
- return -1;
+ len = -1;
+ goto done;
}
chanPtr->flags = flags;
@@ -4115,7 +4129,7 @@ Tcl_Ungets(chan, str, len, atEnd)
*/
if (chanPtr->flags & CHANNEL_STICKY_EOF) {
- return len;
+ goto done;
}
chanPtr->flags &= (~(CHANNEL_BLOCKED | CHANNEL_EOF));
@@ -4138,6 +4152,13 @@ Tcl_Ungets(chan, str, len, atEnd)
chanPtr->inQueueHead = bufPtr;
}
+ done:
+ /*
+ * Update the notifier state so we don't block while there is still
+ * data in the buffers.
+ */
+
+ UpdateInterest(chanPtr);
return len;
}
@@ -7016,24 +7037,33 @@ DoRead(chanPtr, bufPtr, toRead)
toRead - copied);
if (copiedNow == 0) {
if (chanPtr->flags & CHANNEL_EOF) {
- return copied;
+ goto done;
}
if (chanPtr->flags & CHANNEL_BLOCKED) {
if (chanPtr->flags & CHANNEL_NONBLOCKING) {
- return copied;
+ goto done;
}
chanPtr->flags &= (~(CHANNEL_BLOCKED));
}
result = GetInput(chanPtr);
if (result != 0) {
- if (result == EAGAIN) {
- return copied;
+ if (result != EAGAIN) {
+ copied = -1;
}
- return -1;
+ goto done;
}
}
}
+
chanPtr->flags &= (~(CHANNEL_BLOCKED));
+
+ done:
+ /*
+ * Update the notifier state so we don't block while there is still
+ * data in the buffers.
+ */
+
+ UpdateInterest(chanPtr);
return copied;
}
diff --git a/generic/tclIOCmd.c b/generic/tclIOCmd.c
index ad76eaa..92ca4cf 100644
--- a/generic/tclIOCmd.c
+++ b/generic/tclIOCmd.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclIOCmd.c 1.125 98/02/05 20:21:10
+ * RCS: @(#) $Id: tclIOCmd.c,v 1.1.2.2 1998/09/24 23:58:52 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclIOSock.c b/generic/tclIOSock.c
index b0a0c0e..94d8f6c 100644
--- a/generic/tclIOSock.c
+++ b/generic/tclIOSock.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclIOSock.c 1.22 97/12/08 15:00:32
+ * RCS: @(#) $Id: tclIOSock.c,v 1.1.2.2 1998/09/24 23:58:53 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c
index d5472f9..7bdb93f 100644
--- a/generic/tclIOUtil.c
+++ b/generic/tclIOUtil.c
@@ -13,12 +13,65 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclIOUtil.c 1.138 98/01/06 11:10:48
+ * RCS: @(#) $Id: tclIOUtil.c,v 1.1.2.2 1998/09/24 23:58:53 stanton Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
+
+/*
+ * The following typedef declarations allow for hooking into the chain
+ * of functions maintained for 'Tcl_Stat(...)', 'Tcl_Access(...)' &
+ * 'Tcl_OpenFileChannel(...)'. Basically for each hookable function
+ * a linked list is defined.
+ */
+
+typedef struct StatProc {
+ TclStatProc_ *proc; /* Function to process a 'stat()' call */
+ struct StatProc *nextPtr; /* The next 'stat()' function to call */
+} StatProc;
+typedef struct AccessProc {
+ TclAccessProc_ *proc; /* Function to process a 'access()' call */
+ struct AccessProc *nextPtr; /* The next 'access()' function to call */
+} AccessProc;
+
+typedef struct OpenFileChannelProc {
+ TclOpenFileChannelProc_ *proc; /* Function to process a
+ * 'Tcl_OpenFileChannel()' call */
+ struct OpenFileChannelProc *nextPtr;
+ /* The next 'Tcl_OpenFileChannel()'
+ * function to call */
+} OpenFileChannelProc;
+
+/*
+ * For each type of hookable function, a static node is declared to
+ * hold the function pointer for the "built-in" routine (e.g.
+ * 'TclpStat(...)') and the respective list is initialized as a pointer
+ * to that node.
+ *
+ * The "delete" functions (e.g. 'TclStatDeleteProc(...)') ensure that
+ * these statically declared list entry cannot be inadvertently removed.
+ *
+ * This method avoids the need to call any sort of "initialization"
+ * function
+ */
+
+static StatProc defaultStatProc = {
+ &TclpStat, NULL
+};
+static StatProc *statProcList = &defaultStatProc;
+
+static AccessProc defaultAccessProc = {
+ &TclpAccess, NULL
+};
+static AccessProc *accessProcList = &defaultAccessProc;
+
+static OpenFileChannelProc defaultOpenFileChannelProc = {
+ &TclpOpenFileChannel, NULL
+};
+static OpenFileChannelProc *openFileChannelProcList =
+ &defaultOpenFileChannelProc;
/*
*---------------------------------------------------------------------------
@@ -235,8 +288,20 @@ Tcl_EvalFile(interp, fileName)
result = TCL_ERROR;
objPtr = Tcl_NewObj();
- chan = Tcl_OpenFileChannel(NULL, name, "r", 0);
- if (chan == NULL) {
+ if (nativeName != Tcl_DStringValue(&buffer)) {
+ Tcl_DStringSetLength(&buffer, 0);
+ Tcl_DStringAppend(&buffer, nativeName, -1);
+ nativeName = Tcl_DStringValue(&buffer);
+ }
+ if (TclpStat(nativeName, &statBuf) == -1) {
+ Tcl_SetErrno(errno);
+ Tcl_AppendResult(interp, "couldn't read file \"", fileName,
+ "\": ", Tcl_PosixError(interp), (char *) NULL);
+ goto error;
+ }
+ chan = Tcl_OpenFileChannel(interp, nativeName, "r", 0644);
+ if (chan == (Tcl_Channel) NULL) {
+ Tcl_ResetResult(interp);
Tcl_AppendResult(interp, "couldn't read file \"", fileName,
"\": ", Tcl_PosixError(interp), (char *) NULL);
goto end;
@@ -358,3 +423,430 @@ Tcl_PosixError(interp)
Tcl_SetErrorCode(interp, "POSIX", id, msg, (char *) NULL);
return msg;
}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclStat --
+ *
+ * This procedure replaces the library version of stat and lsat.
+ * The chain of functions that have been "inserted" into the
+ * 'statProcList' will be called in succession until either
+ * a value of zero is returned, or the entire list is visited.
+ *
+ * Results:
+ * See stat documentation.
+ *
+ * Side effects:
+ * See stat documentation.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclStat(path, buf)
+ CONST char *path; /* Path of file to stat (in current CP). */
+ TclStat_ *buf; /* Filled with results of stat call. */
+{
+ StatProc *statProcPtr = statProcList;
+ int retVal = -1;
+
+ /*
+ * Call each of the "stat" function in succession. A non-return
+ * value of -1 indicates the particular function has succeeded.
+ */
+
+ while ((retVal == -1) && (statProcPtr != NULL)) {
+ retVal = (*statProcPtr->proc)(path, buf);
+ statProcPtr = statProcPtr->nextPtr;
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclAccess --
+ *
+ * This procedure replaces the library version of access.
+ * The chain of functions that have been "inserted" into the
+ * 'accessProcList' will be called in succession until either
+ * a value of zero is returned, or the entire list is visited.
+ *
+ * Results:
+ * See access documentation.
+ *
+ * Side effects:
+ * See access documentation.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclAccess(path, mode)
+ CONST char *path; /* Path of file to access (in current CP). */
+ int mode; /* Permission setting. */
+{
+ AccessProc *accessProcPtr = accessProcList;
+ int retVal = -1;
+
+ /*
+ * Call each of the "access" function in succession. A non-return
+ * value of -1 indicates the particular function has succeeded.
+ */
+
+ while ((retVal == -1) && (accessProcPtr != NULL)) {
+ retVal = (*accessProcPtr->proc)(path, mode);
+ accessProcPtr = accessProcPtr->nextPtr;
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_OpenFileChannel --
+ *
+ * The chain of functions that have been "inserted" into the
+ * 'openFileChannelProcList' will be called in succession until
+ * either a valid file channel is returned, or the entire list is
+ * visited.
+ *
+ * Results:
+ * The new channel or NULL, if the named file could not be opened.
+ *
+ * Side effects:
+ * May open the channel and may cause creation of a file on the
+ * file system.
+ *
+ *----------------------------------------------------------------------
+ */
+
+Tcl_Channel
+Tcl_OpenFileChannel(interp, fileName, modeString, permissions)
+ Tcl_Interp *interp; /* Interpreter for error reporting;
+ * can be NULL. */
+ char *fileName; /* Name of file to open. */
+ char *modeString; /* A list of POSIX open modes or
+ * a string such as "rw". */
+ int permissions; /* If the open involves creating a
+ * file, with what modes to create
+ * it? */
+{
+ OpenFileChannelProc *openFileChannelProcPtr = openFileChannelProcList;
+ Tcl_Channel retVal = NULL;
+
+ /*
+ * Call each of the "Tcl_OpenFileChannel" function in succession.
+ * A non-NULL return value indicates the particular function has
+ * succeeded.
+ */
+
+ while ((retVal == NULL) && (openFileChannelProcPtr != NULL)) {
+ retVal = (*openFileChannelProcPtr->proc)(interp, fileName,
+ modeString, permissions);
+ openFileChannelProcPtr = openFileChannelProcPtr->nextPtr;
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclStatInsertProc --
+ *
+ * Insert the passed procedure pointer at the head of the list of
+ * functions which are used during a call to 'TclStat(...)'. The
+ * passed function should be have exactly like 'TclStat' when called
+ * during that time (see 'TclStat(...)' for more informatin).
+ * The function will be added even if it already in the list.
+ *
+ * Results:
+ * Normally TCL_OK; TCL_ERROR if memory for a new node in the list
+ * could not be allocated.
+ *
+ * Side effects:
+ * Memory allocataed and modifies the link list for 'TclStat'
+ * functions.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclStatInsertProc (proc)
+ TclStatProc_ *proc;
+{
+ int retVal = TCL_ERROR;
+
+ if (proc != NULL) {
+ StatProc *newStatProcPtr;
+
+ newStatProcPtr = (StatProc *)Tcl_Alloc(sizeof(StatProc));;
+
+ if (newStatProcPtr != NULL) {
+ newStatProcPtr->proc = proc;
+ newStatProcPtr->nextPtr = statProcList;
+ statProcList = newStatProcPtr;
+
+ retVal = TCL_OK;
+ }
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclStatDeleteProc --
+ *
+ * Removed the passed function pointer from the list of 'TclStat'
+ * functions. Ensures that the built-in stat function is not
+ * removvable.
+ *
+ * Results:
+ * TCL_OK if the procedure pointer was successfully removed,
+ * TCL_ERROR otherwise.
+ *
+ * Side effects:
+ * Memory is deallocated and the respective list updated.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclStatDeleteProc (proc)
+ TclStatProc_ *proc;
+{
+ int retVal = TCL_ERROR;
+ StatProc *tmpStatProcPtr = statProcList;
+ StatProc *prevStatProcPtr = NULL;
+
+ /*
+ * Traverse the 'statProcList' looking for the particular node
+ * whose 'proc' member matches 'proc' and remove that one from
+ * the list. Ensure that the "default" node cannot be removed.
+ */
+
+ while ((retVal == TCL_ERROR) && (tmpStatProcPtr != &defaultStatProc)) {
+ if (tmpStatProcPtr->proc == proc) {
+ if (prevStatProcPtr == NULL) {
+ statProcList = tmpStatProcPtr->nextPtr;
+ } else {
+ prevStatProcPtr->nextPtr = tmpStatProcPtr->nextPtr;
+ }
+
+ Tcl_Free((char *)tmpStatProcPtr);
+
+ retVal = TCL_OK;
+ } else {
+ prevStatProcPtr = tmpStatProcPtr;
+ tmpStatProcPtr = tmpStatProcPtr->nextPtr;
+ }
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclAccessInsertProc --
+ *
+ * Insert the passed procedure pointer at the head of the list of
+ * functions which are used during a call to 'TclAccess(...)'. The
+ * passed function should be have exactly like 'TclAccess' when
+ * called during that time (see 'TclAccess(...)' for more informatin).
+ * The function will be added even if it already in the list.
+ *
+ * Results:
+ * Normally TCL_OK; TCL_ERROR if memory for a new node in the list
+ * could not be allocated.
+ *
+ * Side effects:
+ * Memory allocataed and modifies the link list for 'TclAccess'
+ * functions.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclAccessInsertProc(proc)
+ TclAccessProc_ *proc;
+{
+ int retVal = TCL_ERROR;
+
+ if (proc != NULL) {
+ AccessProc *newAccessProcPtr;
+
+ newAccessProcPtr = (AccessProc *)Tcl_Alloc(sizeof(AccessProc));;
+
+ if (newAccessProcPtr != NULL) {
+ newAccessProcPtr->proc = proc;
+ newAccessProcPtr->nextPtr = accessProcList;
+ accessProcList = newAccessProcPtr;
+
+ retVal = TCL_OK;
+ }
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclAccessDeleteProc --
+ *
+ * Removed the passed function pointer from the list of 'TclAccess'
+ * functions. Ensures that the built-in access function is not
+ * removvable.
+ *
+ * Results:
+ * TCL_OK if the procedure pointer was successfully removed,
+ * TCL_ERROR otherwise.
+ *
+ * Side effects:
+ * Memory is deallocated and the respective list updated.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclAccessDeleteProc(proc)
+ TclAccessProc_ *proc;
+{
+ int retVal = TCL_ERROR;
+ AccessProc *tmpAccessProcPtr = accessProcList;
+ AccessProc *prevAccessProcPtr = NULL;
+
+ /*
+ * Traverse the 'accessProcList' looking for the particular node
+ * whose 'proc' member matches 'proc' and remove that one from
+ * the list. Ensure that the "default" node cannot be removed.
+ */
+
+ while ((retVal == TCL_ERROR) && (tmpAccessProcPtr != &defaultAccessProc)) {
+ if (tmpAccessProcPtr->proc == proc) {
+ if (prevAccessProcPtr == NULL) {
+ accessProcList = tmpAccessProcPtr->nextPtr;
+ } else {
+ prevAccessProcPtr->nextPtr = tmpAccessProcPtr->nextPtr;
+ }
+
+ Tcl_Free((char *)tmpAccessProcPtr);
+
+ retVal = TCL_OK;
+ } else {
+ prevAccessProcPtr = tmpAccessProcPtr;
+ tmpAccessProcPtr = tmpAccessProcPtr->nextPtr;
+ }
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclOpenFileChannelInsertProc --
+ *
+ * Insert the passed procedure pointer at the head of the list of
+ * functions which are used during a call to
+ * 'Tcl_OpenFileChannel(...)'. The passed function should be have
+ * exactly like 'Tcl_OpenFileChannel' when called during that time
+ * (see 'Tcl_OpenFileChannel(...)' for more informatin). The
+ * function will be added even if it already in the list.
+ *
+ * Results:
+ * Normally TCL_OK; TCL_ERROR if memory for a new node in the list
+ * could not be allocated.
+ *
+ * Side effects:
+ * Memory allocataed and modifies the link list for
+ * 'Tcl_OpenFileChannel' functions.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclOpenFileChannelInsertProc(proc)
+ TclOpenFileChannelProc_ *proc;
+{
+ int retVal = TCL_ERROR;
+
+ if (proc != NULL) {
+ OpenFileChannelProc *newOpenFileChannelProcPtr;
+
+ newOpenFileChannelProcPtr =
+ (OpenFileChannelProc *)Tcl_Alloc(sizeof(OpenFileChannelProc));;
+
+ if (newOpenFileChannelProcPtr != NULL) {
+ newOpenFileChannelProcPtr->proc = proc;
+ newOpenFileChannelProcPtr->nextPtr = openFileChannelProcList;
+ openFileChannelProcList = newOpenFileChannelProcPtr;
+
+ retVal = TCL_OK;
+ }
+ }
+
+ return (retVal);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclOpenFileChannelDeleteProc --
+ *
+ * Removed the passed function pointer from the list of
+ * 'Tcl_OpenFileChannel' functions. Ensures that the built-in
+ * open file channel function is not removvable.
+ *
+ * Results:
+ * TCL_OK if the procedure pointer was successfully removed,
+ * TCL_ERROR otherwise.
+ *
+ * Side effects:
+ * Memory is deallocated and the respective list updated.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclOpenFileChannelDeleteProc(proc)
+ TclOpenFileChannelProc_ *proc;
+{
+ int retVal = TCL_ERROR;
+ OpenFileChannelProc *tmpOpenFileChannelProcPtr = openFileChannelProcList;
+ OpenFileChannelProc *prevOpenFileChannelProcPtr = NULL;
+
+ /*
+ * Traverse the 'openFileChannelProcList' looking for the particular
+ * node whose 'proc' member matches 'proc' and remove that one from
+ * the list. Ensure that the "default" node cannot be removed.
+ */
+
+ while ((retVal == TCL_ERROR) &&
+ (tmpOpenFileChannelProcPtr != &defaultOpenFileChannelProc)) {
+ if (tmpOpenFileChannelProcPtr->proc == proc) {
+ if (prevOpenFileChannelProcPtr == NULL) {
+ openFileChannelProcList = tmpOpenFileChannelProcPtr->nextPtr;
+ } else {
+ prevOpenFileChannelProcPtr->nextPtr =
+ tmpOpenFileChannelProcPtr->nextPtr;
+ }
+
+ Tcl_Free((char *)tmpOpenFileChannelProcPtr);
+
+ retVal = TCL_OK;
+ } else {
+ prevOpenFileChannelProcPtr = tmpOpenFileChannelProcPtr;
+ tmpOpenFileChannelProcPtr = tmpOpenFileChannelProcPtr->nextPtr;
+ }
+ }
+
+ return (retVal);
+}
diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c
index f1f0335..32f1955 100644
--- a/generic/tclIndexObj.c
+++ b/generic/tclIndexObj.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclIndexObj.c 1.15 97/12/24 13:41:51
+ * RCS: @(#) $Id: tclIndexObj.c,v 1.1.2.2 1998/09/24 23:58:53 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 87e6691..f975005 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclInt.h 1.337 98/02/20 10:03:46
+ * RCS: @(#) $Id: tclInt.h,v 1.1.2.2 1998/09/24 23:58:53 stanton Exp $
*/
#ifndef _TCLINT
@@ -54,6 +54,62 @@
# include <varargs.h>
#endif
+#ifdef BUILD_tcl
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
+/*
+ * The following procedures allow namespaces to be customized to
+ * support special name resolution rules for commands/variables.
+ *
+ */
+
+struct Tcl_ResolvedVarInfo;
+
+typedef Tcl_Var (Tcl_ResolveRuntimeVarProc) _ANSI_ARGS_((
+ Tcl_Interp* interp, struct Tcl_ResolvedVarInfo *vinfoPtr));
+
+typedef void (Tcl_ResolveVarDeleteProc) _ANSI_ARGS_((
+ struct Tcl_ResolvedVarInfo *vinfoPtr));
+
+/*
+ * The following structure encapsulates the routines needed to resolve a
+ * variable reference at runtime. Any variable specific state will typically
+ * be appended to this structure.
+ */
+
+
+typedef struct Tcl_ResolvedVarInfo {
+ Tcl_ResolveRuntimeVarProc *fetchProc;
+ Tcl_ResolveVarDeleteProc *deleteProc;
+} Tcl_ResolvedVarInfo;
+
+
+
+typedef int (Tcl_ResolveCompiledVarProc) _ANSI_ARGS_((
+ Tcl_Interp* interp, char* name, int length,
+ Tcl_Namespace *context, Tcl_ResolvedVarInfo **rPtr));
+
+typedef int (Tcl_ResolveVarProc) _ANSI_ARGS_((
+ Tcl_Interp* interp, char* name, Tcl_Namespace *context,
+ int flags, Tcl_Var *rPtr));
+
+typedef int (Tcl_ResolveCmdProc) _ANSI_ARGS_((Tcl_Interp* interp,
+ char* name, Tcl_Namespace *context, int flags,
+ Tcl_Command *rPtr));
+
+typedef struct Tcl_ResolverInfo {
+ Tcl_ResolveCmdProc *cmdResProc; /* Procedure handling command name
+ * resolution. */
+ Tcl_ResolveVarProc *varResProc; /* Procedure handling variable name
+ * resolution for variables that
+ * can only be handled at runtime. */
+ Tcl_ResolveCompiledVarProc *compiledVarResProc;
+ /* Procedure handling variable name
+ * resolution at compile time. */
+} Tcl_ResolverInfo;
+
/*
*----------------------------------------------------------------
* Data structures related to namespaces.
@@ -126,6 +182,31 @@ typedef struct Namespace {
* namespace has already cached a Command *
* pointer; this causes all its cached
* Command* pointers to be invalidated. */
+ int resolverEpoch; /* Incremented whenever the name resolution
+ * rules change for this namespace; this
+ * invalidates all byte codes compiled in
+ * the namespace, causing the code to be
+ * recompiled under the new rules. */
+ Tcl_ResolveCmdProc *cmdResProc;
+ /* If non-null, this procedure overrides
+ * the usual command resolution mechanism
+ * in Tcl. This procedure is invoked
+ * within Tcl_FindCommand to resolve all
+ * command references within the namespace. */
+ Tcl_ResolveVarProc *varResProc;
+ /* If non-null, this procedure overrides
+ * the usual variable resolution mechanism
+ * in Tcl. This procedure is invoked
+ * within Tcl_FindNamespaceVar to resolve all
+ * variable references within the namespace
+ * at runtime. */
+ Tcl_ResolveCompiledVarProc *compiledVarResProc;
+ /* If non-null, this procedure overrides
+ * the usual variable resolution mechanism
+ * in Tcl. This procedure is invoked
+ * within LookupCompiledLocal to resolve
+ * variable references within the namespace
+ * at compile time. */
} Namespace;
/*
@@ -336,6 +417,17 @@ typedef struct Var {
* initialized and is marked undefined.
* The variable's refCount is incremented to
* reflect the "reference" from its namespace.
+ *
+ * The following additional flags are used with the CompiledLocal type
+ * defined below:
+ *
+ * VAR_ARGUMENT - 1 means that this variable holds a procedure
+ * argument.
+ * VAR_TEMPORARY - 1 if the local variable is an anonymous
+ * temporary variable. Temporaries have a NULL
+ * name.
+ * VAR_RESOLVED - 1 if name resolution has been done for this
+ * variable.
*/
#define VAR_SCALAR 0x1
@@ -347,6 +439,10 @@ typedef struct Var {
#define VAR_ARRAY_ELEMENT 0x40
#define VAR_NAMESPACE_VAR 0x80
+#define VAR_ARGUMENT 0x100
+#define VAR_TEMPORARY 0x200
+#define VAR_RESOLVED 0x400
+
/*
* Macros to ensure that various flag bits are set properly for variables.
* The ANSI C "prototypes" for these macros are:
@@ -386,6 +482,9 @@ typedef struct Var {
* EXTERN int TclIsVarArray _ANSI_ARGS_((Var *varPtr));
* EXTERN int TclIsVarUndefined _ANSI_ARGS_((Var *varPtr));
* EXTERN int TclIsVarArrayElement _ANSI_ARGS_((Var *varPtr));
+ * EXTERN int TclIsVarTemporary _ANSI_ARGS_((Var *varPtr));
+ * EXTERN int TclIsVarArgument _ANSI_ARGS_((Var *varPtr));
+ * EXTERN int TclIsVarResolved _ANSI_ARGS_((Var *varPtr));
*/
#define TclIsVarScalar(varPtr) \
@@ -403,6 +502,15 @@ typedef struct Var {
#define TclIsVarArrayElement(varPtr) \
((varPtr)->flags & VAR_ARRAY_ELEMENT)
+#define TclIsVarTemporary(varPtr) \
+ ((varPtr)->flags & VAR_TEMPORARY)
+
+#define TclIsVarArgument(varPtr) \
+ ((varPtr)->flags & VAR_ARGUMENT)
+
+#define TclIsVarResolved(varPtr) \
+ ((varPtr)->flags & VAR_RESOLVED)
+
/*
*----------------------------------------------------------------
* Data structures related to procedures. These are used primarily
@@ -440,18 +548,21 @@ typedef struct CompiledLocal {
* variable lookups. */
int frameIndex; /* Index in the array of compiler-assigned
* variables in the procedure call frame. */
- int isArg; /* 1 if the local variable is a formal
- * argument. */
- int isTemp; /* 1 if the local variable is an anonymous
- * temporary variable. Temporaries have
- * a NULL name. */
int flags; /* Flag bits for the local variable. Same as
* the flags for the Var structure above,
- * although only VAR_SCALAR, VAR_ARRAY, and
- * VAR_LINK make sense. */
+ * although only VAR_SCALAR, VAR_ARRAY,
+ * VAR_LINK, VAR_ARGUMENT, VAR_TEMPORARY, and
+ * VAR_RESOLVED make sense. */
Tcl_Obj *defValuePtr; /* Pointer to the default value of an
* argument, if any. NULL if not an argument
* or, if an argument, no default value. */
+ Tcl_ResolvedVarInfo *resolveInfo;
+ /* Customized variable resolution info
+ * supplied by the Tcl_ResolveCompiledVarProc
+ * associated with a namespace. Each variable
+ * is marked by a unique ClientData tag
+ * during compilation, and that same tag
+ * is used to find the variable at runtime. */
char name[4]; /* Name of the local variable starts here.
* If the name is NULL, this will just be
* '\0'. The actual size of this field will
@@ -918,6 +1029,21 @@ typedef struct ImportRef {
} ImportRef;
/*
+ * Data structure used as the ClientData of imported commands: commands
+ * created in an namespace when it imports a "real" command from another
+ * namespace.
+ */
+
+typedef struct ImportedCmdData {
+ struct Command *realCmdPtr; /* "Real" command that this imported command
+ * refers to. */
+ struct Command *selfPtr; /* Pointer to this imported command. Needed
+ * only when deleting it in order to remove
+ * it from the real command's linked list of
+ * imported commands that refer to it. */
+} ImportedCmdData;
+
+/*
* A Command structure exists for each command in a namespace. The
* Tcl_Command opaque type actually refers to these structures.
*/
@@ -969,6 +1095,38 @@ typedef struct Command {
/*
*----------------------------------------------------------------
+ * Data structures related to name resolution procedures.
+ *----------------------------------------------------------------
+ */
+
+/*
+ * The interpreter keeps a linked list of name resolution schemes.
+ * The scheme for a namespace is consulted first, followed by the
+ * list of schemes in an interpreter, followed by the default
+ * name resolution in Tcl. Schemes are added/removed from the
+ * interpreter's list by calling Tcl_AddInterpResolver and
+ * Tcl_RemoveInterpResolver.
+ */
+
+typedef struct ResolverScheme {
+ char *name; /* Name identifying this scheme. */
+ Tcl_ResolveCmdProc *cmdResProc;
+ /* Procedure handling command name
+ * resolution. */
+ Tcl_ResolveVarProc *varResProc;
+ /* Procedure handling variable name
+ * resolution for variables that
+ * can only be handled at runtime. */
+ Tcl_ResolveCompiledVarProc *compiledVarResProc;
+ /* Procedure handling variable name
+ * resolution at compile time. */
+
+ struct ResolverScheme *nextPtr;
+ /* Pointer to next record in linked list. */
+} ResolverScheme;
+
+/*
+ *----------------------------------------------------------------
* This structure defines an interpreter, which is a collection of
* commands plus other state information related to interpreting
* commands, such as variable storage. Primary responsibility for
@@ -1135,6 +1293,12 @@ typedef struct Interp {
* this is NULL. Set by ObjInterpProc in
* tclProc.c and used by tclCompile.c to
* process local variables appropriately. */
+ ResolverScheme *resolverPtr;
+ /* Linked list of name resolution schemes
+ * added to this interpreter. Schemes
+ * are added/removed by calling
+ * Tcl_AddInterpResolver and
+ * Tcl_RemoveInterpResolver. */
char *scriptFile; /* NULL means there is no nested source
* command active; otherwise this points to
* the name of the file being sourced (it's
@@ -1551,6 +1715,25 @@ typedef struct TclFile_ *TclFile;
/*
*----------------------------------------------------------------
+ * Data structures related to hooking 'TclStat(...)' and
+ * 'TclAccess(...)'.
+ *----------------------------------------------------------------
+ */
+
+typedef struct stat TclStat_;
+typedef int (TclStatProc_) _ANSI_ARGS_((CONST char *path, TclStat_ *buf));
+typedef int (TclAccessProc_) _ANSI_ARGS_((CONST char *path, int mode));
+typedef Tcl_Channel (TclOpenFileChannelProc_) _ANSI_ARGS_((Tcl_Interp *interp,
+ char *fileName, char *modeString,
+ int permissions));
+
+typedef int (*TclCmdProcType) _ANSI_ARGS_((ClientData clientData,
+ Tcl_Interp *interp, int argc, char *argv[]));
+typedef int (*TclObjCmdProcType) _ANSI_ARGS_((ClientData clientData,
+ Tcl_Interp *interp, int objc, struct Tcl_Obj * CONST objv[]));
+
+/*
+ *----------------------------------------------------------------
* Variables shared among Tcl modules but not used by the outside world.
*----------------------------------------------------------------
*/
@@ -1603,6 +1786,10 @@ extern char * tclEmptyStringRep;
*/
EXTERN void panic _ANSI_ARGS_(TCL_VARARGS(char *,format));
+EXTERN int TclAccess _ANSI_ARGS_((CONST char *path,
+ int mode));
+EXTERN int TclAccessDeleteProc _ANSI_ARGS_((TclAccessProc_ *proc));
+EXTERN int TclAccessInsertProc _ANSI_ARGS_((TclAccessProc_ *proc));
EXTERN void TclAllocateFreeObjects _ANSI_ARGS_((void));
EXTERN int TclCleanupChildren _ANSI_ARGS_((Tcl_Interp *interp,
int numPids, Tcl_Pid *pidPtr,
@@ -1687,6 +1874,7 @@ EXTERN char * TclGetExtension _ANSI_ARGS_((char *name));
EXTERN int TclGetFrame _ANSI_ARGS_((Tcl_Interp *interp,
char *string, CallFrame **framePtrPtr));
EXTERN int TclGetIdleGeneration _ANSI_ARGS_((void));
+EXTERN TclCmdProcType TclGetInterpProc _ANSI_ARGS_((void));
EXTERN int TclGetIntForIndex _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Obj *objPtr, int endValue, int *indexPtr));
EXTERN Tcl_Obj * TclGetIndexedScalar _ANSI_ARGS_((Tcl_Interp *interp,
@@ -1702,6 +1890,7 @@ EXTERN int TclGetNamespaceForQualName _ANSI_ARGS_((
Namespace **nsPtrPtr, Namespace **altNsPtrPtr,
Namespace **actualCxtPtrPtr,
char **simpleNamePtr));
+EXTERN TclObjCmdProcType TclGetObjInterpProc _ANSI_ARGS_((void));
EXTERN int TclGetOpenMode _ANSI_ARGS_((Tcl_Interp *interp,
char *string, int *seekFlagPtr));
EXTERN Tcl_Command TclGetOriginalCommand _ANSI_ARGS_((
@@ -1727,6 +1916,9 @@ EXTERN Tcl_Obj * TclIncrVar2 _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr,
long incrAmount, int flags));
EXTERN void TclInitAlloc _ANSI_ARGS_((void));
+EXTERN void TclInitCompiledLocals _ANSI_ARGS_((
+ Tcl_Interp *interp, CallFrame *framePtr,
+ Namespace *nsPtr));
EXTERN void TclInitDbCkalloc _ANSI_ARGS_((void));
EXTERN void TclInitEncodingSubsystem _ANSI_ARGS_((void));
EXTERN void TclInitIOSubsystem _ANSI_ARGS_((void));
@@ -1763,6 +1955,10 @@ EXTERN int TclObjInvoke _ANSI_ARGS_((Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[], int flags));
EXTERN int TclObjInvokeGlobal _ANSI_ARGS_((Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[], int flags));
+EXTERN int TclOpenFileChannelDeleteProc _ANSI_ARGS_((
+ TclOpenFileChannelProc_ *proc));
+EXTERN int TclOpenFileChannelInsertProc _ANSI_ARGS_((
+ TclOpenFileChannelProc_ *proc));
EXTERN int TclpAccess _ANSI_ARGS_((CONST char *filename,
int mode));
EXTERN char * TclpAlloc _ANSI_ARGS_((unsigned int size));
@@ -1786,6 +1982,7 @@ EXTERN int TclpCreateProcess _ANSI_ARGS_((Tcl_Interp *interp,
EXTERN TclFile TclpCreateTempFile _ANSI_ARGS_((CONST char *contents));
EXTERN int TclpDeleteFile _ANSI_ARGS_((CONST char *path));
EXTERN void TclpExit _ANSI_ARGS_((int status));
+EXTERN void TclpFinalize _ANSI_ARGS_((void));
EXTERN void TclpFinalizeCondition _ANSI_ARGS_((
Tcl_Condition *condPtr));
EXTERN void TclpFinalizeMutex _ANSI_ARGS_((Tcl_Mutex *mutexPtr));
@@ -1825,6 +2022,9 @@ EXTERN int TclpMatchFiles _ANSI_ARGS_((Tcl_Interp *interp,
char *pattern, char *tail));
EXTERN TclFile TclpOpenFile _ANSI_ARGS_((CONST char *fname,
int mode));
+EXTERN Tcl_Channel TclpOpenFileChannel _ANSI_ARGS_((Tcl_Interp *interp,
+ char *fileName, char *modeString,
+ int permissions));
EXTERN char * TclpReadlink _ANSI_ARGS_((CONST char *fileName,
Tcl_DString *linkPtr));
EXTERN char * TclpRealloc _ANSI_ARGS_((char *ptr,
@@ -1856,6 +2056,13 @@ EXTERN char * TclPrecTraceProc _ANSI_ARGS_((ClientData clientData,
int flags));
EXTERN int TclPreventAliasLoop _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Interp *cmdInterp, Tcl_Command cmd));
+EXTERN void TclProcCleanupProc _ANSI_ARGS_((Proc *procPtr));
+EXTERN int TclProcCompileProc _ANSI_ARGS_((Tcl_Interp *interp,
+ Proc *procPtr, Tcl_Obj *bodyPtr, Namespace *nsPtr,
+ CONST char *description, CONST char *procName));
+EXTERN void TclProcDeleteProc _ANSI_ARGS_((ClientData clientData));
+EXTERN int TclProcInterpProc _ANSI_ARGS_((ClientData clientData,
+ Tcl_Interp *interp, int argc, char **argv));
EXTERN int TclpThreadCreate _ANSI_ARGS_((Tcl_ThreadId *idPtr,
Tcl_ThreadCreateProc proc, ClientData clientData));
EXTERN VOID * TclpThreadDataKeyGet _ANSI_ARGS_((
@@ -1881,11 +2088,16 @@ EXTERN void TclSetLibraryPath _ANSI_ARGS_((Tcl_Obj *pathPtr));
EXTERN Tcl_Obj * TclSetIndexedScalar _ANSI_ARGS_((Tcl_Interp *interp,
int localIndex, Tcl_Obj *objPtr,
int leaveErrorMsg));
+EXTERN char * TclSetPreInitScript _ANSI_ARGS_((char *string));
EXTERN void TclSetupEnv _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN int TclSockGetPort _ANSI_ARGS_((Tcl_Interp *interp,
char *string, char *proto, int *portPtr));
EXTERN int TclSockMinimumBuffers _ANSI_ARGS_((int sock,
int size));
+EXTERN int TclStat _ANSI_ARGS_((CONST char *path,
+ TclStat_ *buf));
+EXTERN int TclStatDeleteProc _ANSI_ARGS_((TclStatProc_ *proc));
+EXTERN int TclStatInsertProc _ANSI_ARGS_((TclStatProc_ *proc));
EXTERN void TclTeardownNamespace _ANSI_ARGS_((Namespace *nsPtr));
EXTERN int TclTestChannelCmd _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int argc, char **argv));
@@ -2282,6 +2494,10 @@ extern Tcl_Mutex tclObjMutex;
*----------------------------------------------------------------
*/
+EXTERN void Tcl_AddInterpResolvers _ANSI_ARGS_((Tcl_Interp *interp,
+ char *name, Tcl_ResolveCmdProc *cmdProc,
+ Tcl_ResolveVarProc *varProc,
+ Tcl_ResolveCompiledVarProc *compiledVarProc));
EXTERN int Tcl_AppendExportList _ANSI_ARGS_((
Tcl_Interp *interp, Tcl_Namespace *nsPtr,
Tcl_Obj *objPtr));
@@ -2299,6 +2515,14 @@ EXTERN Tcl_Command Tcl_FindCommand _ANSI_ARGS_((Tcl_Interp *interp,
EXTERN Tcl_Namespace * Tcl_FindNamespace _ANSI_ARGS_((Tcl_Interp *interp,
char *name, Tcl_Namespace *contextNsPtr,
int flags));
+EXTERN int Tcl_GetInterpResolvers _ANSI_ARGS_((Tcl_Interp *interp,
+ char *name, Tcl_ResolverInfo *resInfo));
+EXTERN int Tcl_GetNamespaceResolvers _ANSI_ARGS_((
+ Tcl_Namespace *namespacePtr,
+ Tcl_ResolverInfo *resInfo));
+EXTERN void Tcl_GetVariableFullName _ANSI_ARGS_((
+ Tcl_Interp *interp, Tcl_Var variable,
+ Tcl_Obj *objPtr));
EXTERN Tcl_Var Tcl_FindNamespaceVar _ANSI_ARGS_((
Tcl_Interp *interp, char *name,
Tcl_Namespace *contextNsPtr, int flags));
@@ -2323,5 +2547,16 @@ EXTERN void Tcl_PopCallFrame _ANSI_ARGS_((Tcl_Interp* interp));
EXTERN int Tcl_PushCallFrame _ANSI_ARGS_((Tcl_Interp* interp,
Tcl_CallFrame *framePtr, Tcl_Namespace *nsPtr,
int isProcCallFrame));
+EXTERN int Tcl_RemoveInterpResolvers _ANSI_ARGS_((
+ Tcl_Interp *interp, char *name));
+EXTERN void Tcl_SetNamespaceResolvers _ANSI_ARGS_((
+ Tcl_Namespace *namespacePtr,
+ Tcl_ResolveCmdProc *cmdProc,
+ Tcl_ResolveVarProc *varProc,
+ Tcl_ResolveCompiledVarProc *compiledVarProc));
+
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLIMPORT
+
#endif /* _TCLINT */
diff --git a/generic/tclInterp.c b/generic/tclInterp.c
index 36c5738..10a099b 100644
--- a/generic/tclInterp.c
+++ b/generic/tclInterp.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclInterp.c 1.135 98/02/18 15:32:12
+ * RCS: @(#) $Id: tclInterp.c,v 1.1.2.2 1998/09/24 23:58:54 stanton Exp $
*/
#include <stdio.h>
@@ -2315,6 +2315,7 @@ Tcl_MakeSafe(interp)
* (the only one remaining is [info nameofexecutable])
*/
+ Tcl_UnsetVar(interp, "tclDefaultLibrary", TCL_GLOBAL_ONLY);
Tcl_UnsetVar(interp, "tcl_library", TCL_GLOBAL_ONLY);
Tcl_UnsetVar(interp, "tcl_pkgPath", TCL_GLOBAL_ONLY);
diff --git a/generic/tclLink.c b/generic/tclLink.c
index 953638e..f66716c 100644
--- a/generic/tclLink.c
+++ b/generic/tclLink.c
@@ -13,7 +13,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLink.c 1.18 98/02/18 11:53:10
+ * RCS: @(#) $Id: tclLink.c,v 1.1.2.2 1998/09/24 23:58:55 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index 004fa24..931c821 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclListObj.c 1.53 98/01/06 11:08:29
+ * RCS: @(#) $Id: tclListObj.c,v 1.1.2.2 1998/09/24 23:58:55 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclLoad.c b/generic/tclLoad.c
index bcea456..5678976 100644
--- a/generic/tclLoad.c
+++ b/generic/tclLoad.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLoad.c 1.30 98/02/19 13:51:49
+ * RCS: @(#) $Id: tclLoad.c,v 1.1.2.2 1998/09/24 23:58:55 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclLoadNone.c b/generic/tclLoadNone.c
index 5bdd026..a4edaca 100644
--- a/generic/tclLoadNone.c
+++ b/generic/tclLoadNone.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLoadNone.c 1.7 97/11/06 15:08:30
+ * RCS: @(#) $Id: tclLoadNone.c,v 1.1.2.2 1998/09/24 23:58:56 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclMain.c b/generic/tclMain.c
index 951b0b4..6fd2aad 100644
--- a/generic/tclMain.c
+++ b/generic/tclMain.c
@@ -9,12 +9,15 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMain.c 1.68 98/01/20 22:39:24
+ * RCS: @(#) $Id: tclMain.c,v 1.1.2.2 1998/09/24 23:58:56 stanton Exp $
*/
#include "tcl.h"
#include "tclInt.h"
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+
/*
* The following code ensures that tclLink.c is linked whenever
* Tcl is linked. Without this code there's no reference to the
diff --git a/generic/tclMath.h b/generic/tclMath.h
index fdf2ac9..6a0dca4 100644
--- a/generic/tclMath.h
+++ b/generic/tclMath.h
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMath.h 1.2 97/07/23 17:39:14
+ * RCS: @(#) $Id: tclMath.h,v 1.1.2.1 1998/09/24 23:58:57 stanton Exp $
*/
#ifndef _TCLMATH
diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c
index e159f98..af1b8a9 100644
--- a/generic/tclNamesp.c
+++ b/generic/tclNamesp.c
@@ -9,6 +9,7 @@
*
* Copyright (c) 1993-1997 Lucent Technologies.
* Copyright (c) 1997 Sun Microsystems, Inc.
+ * Copyright (c) 1998 by Scriptics Corporation.
*
* Originally implemented by
* Michael J. McLennan
@@ -18,7 +19,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclNamesp.c 1.38 98/02/04 16:21:40
+ * RCS: @(#) $Id: tclNamesp.c,v 1.1.2.2 1998/09/24 23:58:57 stanton Exp $
*/
#include "tclInt.h"
@@ -33,27 +34,19 @@
#define FIND_ONLY_NS 0x1000
/*
- * Count of the number of namespaces created. This value is used as a
- * unique id for each namespace.
+ * Initial size of stack allocated space for tail list - used when resetting
+ * shadowed command references in the functin: TclResetShadowedCmdRefs.
*/
-static long numNsCreated = 0;
-static Tcl_Mutex nsMutex;
+#define NUM_TRAIL_ELEMS 5
/*
- * Data structure used as the ClientData of imported commands: commands
- * created in an namespace when it imports a "real" command from another
- * namespace.
+ * Count of the number of namespaces created. This value is used as a
+ * unique id for each namespace.
*/
-typedef struct ImportedCmdData {
- Command *realCmdPtr; /* "Real" command that this imported command
- * refers to. */
- Command *selfPtr; /* Pointer to this imported command. Needed
- * only when deleting it in order to remove
- * it from the real command's linked list of
- * imported commands that refer to it. */
-} ImportedCmdData;
+static long numNsCreated = 0;
+static Tcl_Mutex nsMutex;
/*
* This structure contains a cached pointer to a namespace that is the
@@ -538,7 +531,11 @@ Tcl_CreateNamespace(interp, name, clientData, deleteProc)
nsPtr->exportArrayPtr = NULL;
nsPtr->numExportPatterns = 0;
nsPtr->maxExportPatterns = 0;
- nsPtr->cmdRefEpoch = 0;
+ nsPtr->cmdRefEpoch = 0;
+ nsPtr->resolverEpoch = 0;
+ nsPtr->cmdResProc = NULL;
+ nsPtr->varResProc = NULL;
+ nsPtr->compiledVarResProc = NULL;
if (parentPtr != NULL) {
entryPtr = Tcl_CreateHashEntry(&parentPtr->childTable, simpleName,
@@ -876,6 +873,7 @@ NamespaceFree(nsPtr)
ckfree((char *) nsPtr);
}
+
/*
*----------------------------------------------------------------------
@@ -1072,6 +1070,10 @@ Tcl_AppendExportList(interp, namespacePtr, objPtr)
* is NULL). This is done by creating a new command (the "imported
* command") that points to the real command in its original namespace.
*
+ * If matching commands are on the autoload path but haven't been
+ * loaded yet, this command forces them to be loaded, then creates
+ * the links to them.
+ *
* Results:
* Returns TCL_OK if successful, or TCL_ERROR (along with an error
* message in the interpreter's result) if something goes wrong.
@@ -1107,7 +1109,7 @@ Tcl_Import(interp, namespacePtr, pattern, allowOverwrite)
Tcl_HashSearch search;
Command *cmdPtr, *realCmdPtr;
ImportRef *refPtr;
- Tcl_Command importedCmd;
+ Tcl_Command autoCmd, importedCmd;
ImportedCmdData *dataPtr;
int wasExported, i, result;
@@ -1120,6 +1122,38 @@ Tcl_Import(interp, namespacePtr, pattern, allowOverwrite)
} else {
nsPtr = (Namespace *) namespacePtr;
}
+
+ /*
+ * First, invoke the "auto_import" command with the pattern
+ * being imported. This command is part of the Tcl library.
+ * It looks for imported commands in autoloaded libraries and
+ * loads them in. That way, they will be found when we try
+ * to create links below.
+ */
+
+ autoCmd = Tcl_FindCommand(interp, "auto_import",
+ (Tcl_Namespace *) NULL, /*flags*/ TCL_GLOBAL_ONLY);
+
+ if (autoCmd != NULL) {
+ Tcl_Obj *objv[2];
+
+ objv[0] = Tcl_NewStringObj("auto_import", -1);
+ Tcl_IncrRefCount(objv[0]);
+ objv[1] = Tcl_NewStringObj(pattern, -1);
+ Tcl_IncrRefCount(objv[1]);
+
+ cmdPtr = (Command *) autoCmd;
+ result = (*cmdPtr->objProc)(cmdPtr->objClientData, interp,
+ 2, objv);
+
+ Tcl_DecrRefCount(objv[0]);
+ Tcl_DecrRefCount(objv[1]);
+
+ if (result != TCL_OK) {
+ return TCL_ERROR;
+ }
+ Tcl_ResetResult(interp);
+ }
/*
* From the pattern, find the namespace from which we are importing
@@ -1204,8 +1238,8 @@ Tcl_Import(interp, namespacePtr, pattern, allowOverwrite)
Tcl_DString ds;
Tcl_DStringInit(&ds);
- Tcl_DStringAppend(&ds, currNsPtr->fullName, -1);
- if (currNsPtr != iPtr->globalNsPtr) {
+ Tcl_DStringAppend(&ds, nsPtr->fullName, -1);
+ if (nsPtr != iPtr->globalNsPtr) {
Tcl_DStringAppend(&ds, "::", 2);
}
Tcl_DStringAppend(&ds, cmdName, -1);
@@ -1808,7 +1842,7 @@ TclGetNamespaceForQualName(interp, qualName, cxtNsPtr, flags,
&& (nsPtr != globalNsPtr)) {
nsPtr = NULL;
}
-
+
*nsPtrPtr = nsPtr;
*altNsPtrPtr = altNsPtr;
Tcl_DStringFree(&buffer);
@@ -1919,12 +1953,59 @@ Tcl_FindCommand(interp, name, contextNsPtr, flags)
* are given, TCL_GLOBAL_ONLY is
* ignored. */
{
+ Interp *iPtr = (Interp*)interp;
+
+ ResolverScheme *resPtr;
Namespace *nsPtr[2], *cxtNsPtr;
char *simpleName;
register Tcl_HashEntry *entryPtr;
register Command *cmdPtr;
register int search;
int result;
+ Tcl_Command cmd;
+
+ /*
+ * If this namespace has a command resolver, then give it first
+ * crack at the command resolution. If the interpreter has any
+ * command resolvers, consult them next. The command resolver
+ * procedures may return a Tcl_Command value, they may signal
+ * to continue onward, or they may signal an error.
+ */
+ if ((flags & TCL_GLOBAL_ONLY) != 0) {
+ cxtNsPtr = (Namespace *) Tcl_GetGlobalNamespace(interp);
+ }
+ else if (contextNsPtr != NULL) {
+ cxtNsPtr = (Namespace *) contextNsPtr;
+ }
+ else {
+ cxtNsPtr = (Namespace *) Tcl_GetCurrentNamespace(interp);
+ }
+
+ if (cxtNsPtr->cmdResProc != NULL || iPtr->resolverPtr != NULL) {
+ resPtr = iPtr->resolverPtr;
+
+ if (cxtNsPtr->cmdResProc) {
+ result = (*cxtNsPtr->cmdResProc)(interp, name,
+ (Tcl_Namespace *) cxtNsPtr, flags, &cmd);
+ } else {
+ result = TCL_CONTINUE;
+ }
+
+ while (result == TCL_CONTINUE && resPtr) {
+ if (resPtr->cmdResProc) {
+ result = (*resPtr->cmdResProc)(interp, name,
+ (Tcl_Namespace *) cxtNsPtr, flags, &cmd);
+ }
+ resPtr = resPtr->nextPtr;
+ }
+
+ if (result == TCL_OK) {
+ return cmd;
+ }
+ else if (result != TCL_CONTINUE) {
+ return (Tcl_Command) NULL;
+ }
+ }
/*
* Find the namespace(s) that contain the command.
@@ -1960,6 +2041,7 @@ Tcl_FindCommand(interp, name, contextNsPtr, flags)
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"unknown command \"", name, "\"", (char *) NULL);
}
+
return (Tcl_Command) NULL;
}
@@ -2007,12 +2089,57 @@ Tcl_FindNamespaceVar(interp, name, contextNsPtr, flags)
* are given, TCL_GLOBAL_ONLY is
* ignored. */
{
+ Interp *iPtr = (Interp*)interp;
+ ResolverScheme *resPtr;
Namespace *nsPtr[2], *cxtNsPtr;
char *simpleName;
Tcl_HashEntry *entryPtr;
Var *varPtr;
register int search;
int result;
+ Tcl_Var var;
+
+ /*
+ * If this namespace has a variable resolver, then give it first
+ * crack at the variable resolution. It may return a Tcl_Var
+ * value, it may signal to continue onward, or it may signal
+ * an error.
+ */
+ if ((flags & TCL_GLOBAL_ONLY) != 0) {
+ cxtNsPtr = (Namespace *) Tcl_GetGlobalNamespace(interp);
+ }
+ else if (contextNsPtr != NULL) {
+ cxtNsPtr = (Namespace *) contextNsPtr;
+ }
+ else {
+ cxtNsPtr = (Namespace *) Tcl_GetCurrentNamespace(interp);
+ }
+
+ if (cxtNsPtr->varResProc != NULL || iPtr->resolverPtr != NULL) {
+ resPtr = iPtr->resolverPtr;
+
+ if (cxtNsPtr->varResProc) {
+ result = (*cxtNsPtr->varResProc)(interp, name,
+ (Tcl_Namespace *) cxtNsPtr, flags, &var);
+ } else {
+ result = TCL_CONTINUE;
+ }
+
+ while (result == TCL_CONTINUE && resPtr) {
+ if (resPtr->varResProc) {
+ result = (*resPtr->varResProc)(interp, name,
+ (Tcl_Namespace *) cxtNsPtr, flags, &var);
+ }
+ resPtr = resPtr->nextPtr;
+ }
+
+ if (result == TCL_OK) {
+ return var;
+ }
+ else if (result != TCL_CONTINUE) {
+ return (Tcl_Var) NULL;
+ }
+ }
/*
* Find the namespace(s) that contain the variable.
@@ -2101,7 +2228,6 @@ TclResetShadowedCmdRefs(interp, newCmdPtr)
* storage if needed.
*/
-#define NUM_TRAIL_ELEMS 5
Namespace *(trailStorage[NUM_TRAIL_ELEMS]);
Namespace **trailPtr = trailStorage;
int trailFront = -1;
@@ -2195,7 +2321,6 @@ TclResetShadowedCmdRefs(interp, newCmdPtr)
if (trailPtr != trailStorage) {
ckfree((char *) trailPtr);
}
-#undef NUM_TRAIL_ELEMS
}
/*
@@ -2722,11 +2847,10 @@ NamespaceDeleteCmd(dummy, interp, objc, objv)
for (i = 2; i < objc; i++) {
name = Tcl_GetString(objv[i]);
namespacePtr = Tcl_FindNamespace(interp, name,
- (Tcl_Namespace *) NULL, TCL_LEAVE_ERR_MSG);
- if (namespacePtr == NULL) {
- return TCL_ERROR;
+ (Tcl_Namespace *) NULL, /* flags */ 0);
+ if (namespacePtr) {
+ Tcl_DeleteNamespace(namespacePtr);
}
- Tcl_DeleteNamespace(namespacePtr);
}
return TCL_OK;
}
diff --git a/generic/tclNotify.c b/generic/tclNotify.c
index bed8a10..4d85b66 100644
--- a/generic/tclNotify.c
+++ b/generic/tclNotify.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclNotify.c 1.23 98/02/19 13:53:03
+ * RCS: @(#) $Id: tclNotify.c,v 1.1.2.2 1998/09/24 23:58:59 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclObj.c b/generic/tclObj.c
index dc6285e..60893ce 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclObj.c 1.60 98/02/20 10:24:00
+ * RCS: @(#) $Id: tclObj.c,v 1.1.2.2 1998/09/24 23:58:59 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclParse.c b/generic/tclParse.c
index 9c9398d..36ace07 100644
--- a/generic/tclParse.c
+++ b/generic/tclParse.c
@@ -13,7 +13,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclParse.c 1.21 98/02/11 18:59:35
+ * RCS: @(#) $Id: tclParse.c,v 1.1.2.2 1998/09/24 23:59:00 stanton Exp $
*/
#include "tclInt.h"
@@ -2032,3 +2032,53 @@ TclObjCommandComplete(objPtr)
script = Tcl_GetStringFromObj(objPtr, &length);
return CommandComplete(script, length);
}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclIsLocalScalar --
+ *
+ * Check to see if a given string is a legal scalar variable
+ * name with no namespace qualifiers or substitutions.
+ *
+ * Results:
+ * Returns 1 if the variable is a local scalar.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TclIsLocalScalar(src, len)
+ CONST char *src;
+ int len;
+{
+ char *p;
+ char *lastChar = src + (len - 1);
+
+ for (p = src; p <= lastChar; p++) {
+ if ((CHAR_TYPE(p, lastChar) != TCL_NORMAL) &&
+ (CHAR_TYPE(p, lastChar) != TCL_COMMAND_END)) {
+ /*
+ * TCL_COMMAND_END is returned for the last character
+ * of the string. By this point we know it isn't
+ * an array or namespace reference.
+ */
+
+ return 0;
+ }
+ if (*p == '(') {
+ if (*lastChar == ')') { /* we have an array element */
+ return 0;
+ }
+ } else if (*p == ':') {
+ if ((p != lastChar) && *(p+1) == ':') { /* qualified name */
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+}
diff --git a/generic/tclPipe.c b/generic/tclPipe.c
index 417268c..2ad8a45 100644
--- a/generic/tclPipe.c
+++ b/generic/tclPipe.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclPipe.c 1.17 98/02/17 17:18:19
+ * RCS: @(#) $Id: tclPipe.c,v 1.1.2.2 1998/09/24 23:59:00 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclPkg.c b/generic/tclPkg.c
index 3b88299..075cdcc 100644
--- a/generic/tclPkg.c
+++ b/generic/tclPkg.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclPkg.c 1.13 98/01/06 11:07:58
+ * RCS: @(#) $Id: tclPkg.c,v 1.1.2.2 1998/09/24 23:59:01 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclPort.h b/generic/tclPort.h
index c711cca..78e279f 100644
--- a/generic/tclPort.h
+++ b/generic/tclPort.h
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclPort.h 1.16 98/01/28 17:36:25
+ * RCS: @(#) $Id: tclPort.h,v 1.1.2.2 1998/09/24 23:59:01 stanton Exp $
*/
#ifndef _TCLPORT
diff --git a/generic/tclPosixStr.c b/generic/tclPosixStr.c
index ff61bd3..5225b81 100644
--- a/generic/tclPosixStr.c
+++ b/generic/tclPosixStr.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclPosixStr.c 1.34 98/02/18 17:34:54
+ * RCS: @(#) $Id: tclPosixStr.c,v 1.1.2.2 1998/09/24 23:59:01 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclPreserve.c b/generic/tclPreserve.c
index d003798..b9ee5ee 100644
--- a/generic/tclPreserve.c
+++ b/generic/tclPreserve.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclPreserve.c 1.20 98/02/17 17:20:39
+ * RCS: @(#) $Id: tclPreserve.c,v 1.1.2.2 1998/09/24 23:59:02 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclProc.c b/generic/tclProc.c
index ab2accd..385ad93 100644
--- a/generic/tclProc.c
+++ b/generic/tclProc.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclProc.c 1.128 98/02/17 15:57:10
+ * RCS: @(#) $Id: tclProc.c,v 1.1.2.2 1998/09/24 23:59:02 stanton Exp $
*/
#include "tclInt.h"
@@ -20,12 +20,6 @@
* Forward references to procedures defined later in this file:
*/
-static void CleanupProc _ANSI_ARGS_((Proc *procPtr));
-static int CompileProcBody _ANSI_ARGS_((Tcl_Interp *interp,
- Proc *procPtr, char *procName, int nameLen));
-static int InterpProc _ANSI_ARGS_((ClientData clientData,
- Tcl_Interp *interp, int argc, char **argv));
-static void ProcDeleteProc _ANSI_ARGS_((ClientData clientData));
static int ProcessProcResultCode _ANSI_ARGS_((Tcl_Interp *interp,
char *procName, int nameLen, int returnCode));
@@ -56,14 +50,11 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
{
register Interp *iPtr = (Interp *) interp;
register Proc *procPtr;
- char *fullName, *procName, *args, *bytes, *p;
- char **argArray = NULL;
+ char *fullName, *procName;
Namespace *nsPtr, *altNsPtr, *cxtNsPtr;
- Tcl_Obj *defPtr, *bodyPtr;
Tcl_Command cmd;
Tcl_DString ds;
- int numArgs, length, result, i;
- register CompiledLocal *localPtr;
+ int result;
if (objc != 4) {
Tcl_WrongNumArgs(interp, 1, objv, "name args body");
@@ -105,6 +96,82 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
}
/*
+ * Create the data structure to represent the procedure.
+ */
+ if (TclCreateProc(interp, nsPtr, procName, objv[2], objv[3],
+ &procPtr) != TCL_OK) {
+ return TCL_ERROR;
+ }
+
+ /*
+ * Now create a command for the procedure. This will initially be in
+ * the current namespace unless the procedure's name included namespace
+ * qualifiers. To create the new command in the right namespace, we
+ * generate a fully qualified name for it.
+ */
+
+ Tcl_DStringInit(&ds);
+ if (nsPtr != iPtr->globalNsPtr) {
+ Tcl_DStringAppend(&ds, nsPtr->fullName, -1);
+ Tcl_DStringAppend(&ds, "::", 2);
+ }
+ Tcl_DStringAppend(&ds, procName, -1);
+
+ Tcl_CreateCommand(interp, Tcl_DStringValue(&ds), TclProcInterpProc,
+ (ClientData) procPtr, TclProcDeleteProc);
+ cmd = Tcl_CreateObjCommand(interp, Tcl_DStringValue(&ds),
+ TclObjInterpProc, (ClientData) procPtr, TclProcDeleteProc);
+
+ /*
+ * Now initialize the new procedure's cmdPtr field. This will be used
+ * later when the procedure is called to determine what namespace the
+ * procedure will run in. This will be different than the current
+ * namespace if the proc was renamed into a different namespace.
+ */
+
+ procPtr->cmdPtr = (Command *) cmd;
+
+ return TCL_OK;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclCreateProc --
+ *
+ * Creates the data associated with a Tcl procedure definition.
+ *
+ * Results:
+ * Returns TCL_OK on success, along with a pointer to a Tcl
+ * procedure definition in procPtrPtr. This definition should
+ * be freed by calling TclCleanupProc() when it is no longer
+ * needed. Returns TCL_ERROR if anything goes wrong.
+ *
+ * Side effects:
+ * If anything goes wrong, this procedure returns an error
+ * message in the interpreter.
+ *
+ *----------------------------------------------------------------------
+ */
+int
+TclCreateProc(interp, nsPtr, procName, argsPtr, bodyPtr, procPtrPtr)
+ Tcl_Interp *interp; /* interpreter containing proc */
+ Namespace *nsPtr; /* namespace containing this proc */
+ char *procName; /* unqualified name of this proc */
+ Tcl_Obj *argsPtr; /* description of arguments */
+ Tcl_Obj *bodyPtr; /* command body */
+ Proc **procPtrPtr; /* returns: pointer to proc data */
+{
+ Interp *iPtr = (Interp*)interp;
+ char **argArray = NULL;
+
+ register Proc *procPtr;
+ int i, length, result, numArgs;
+ char *args, *bytes, *p;
+ register CompiledLocal *localPtr;
+ Tcl_Obj *defPtr;
+
+ /*
* If the procedure's body object is shared because its string value is
* identical to, e.g., the body of another procedure, we must create a
* private copy for this procedure to use. Such sharing of procedure
@@ -118,10 +185,9 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
* we would not want any bytecode internal representation.
*/
- bodyPtr = objv[3];
if (Tcl_IsShared(bodyPtr)) {
- bytes = Tcl_GetStringFromObj(bodyPtr, &length);
- bodyPtr = Tcl_NewStringObj(bytes, length);
+ bytes = Tcl_GetStringFromObj(bodyPtr, &length);
+ bodyPtr = Tcl_NewStringObj(bytes, length);
}
/*
@@ -146,9 +212,10 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
/*
* Break up the argument list into argument specifiers, then process
* each argument specifier.
+ * THIS FAILS IF THE ARG LIST OBJECT'S STRING REP CONTAINS NULLS.
*/
- args = Tcl_GetStringFromObj(objv[2], &length);
+ args = Tcl_GetStringFromObj(argsPtr, &length);
result = Tcl_SplitList(interp, args, &numArgs, &argArray);
if (result != TCL_OK) {
goto procError;
@@ -179,7 +246,7 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
if ((fieldCount == 0) || (*fieldValues[0] == 0)) {
ckfree((char *) fieldValues);
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
- "procedure \"", fullName,
+ "procedure \"", procName,
"\" has argument with no name", (char *) NULL);
goto procError;
}
@@ -205,7 +272,7 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
q--;
if (*q == ')') { /* we have an array element */
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
- "procedure \"", fullName,
+ "procedure \"", procName,
"\" has formal parameter \"", fieldValues[0],
"\" that is an array element",
(char *) NULL);
@@ -233,9 +300,9 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
localPtr->nextPtr = NULL;
localPtr->nameLength = nameLength;
localPtr->frameIndex = i;
- localPtr->isArg = 1;
- localPtr->isTemp = 0;
- localPtr->flags = VAR_SCALAR;
+ localPtr->flags = VAR_SCALAR | VAR_ARGUMENT;
+ localPtr->resolveInfo = NULL;
+
if (fieldCount == 2) {
localPtr->defValuePtr =
Tcl_NewStringObj(fieldValues[1], valueLength);
@@ -249,37 +316,17 @@ Tcl_ProcObjCmd(dummy, interp, objc, objv)
}
/*
- * Now create a command for the procedure. This will initially be in
- * the current namespace unless the procedure's name included namespace
- * qualifiers. To create the new command in the right namespace, we
- * generate a fully qualified name for it.
- */
-
- Tcl_DStringInit(&ds);
- if (nsPtr != iPtr->globalNsPtr) {
- Tcl_DStringAppend(&ds, nsPtr->fullName, -1);
- Tcl_DStringAppend(&ds, "::", 2);
- }
- Tcl_DStringAppend(&ds, procName, -1);
-
- Tcl_CreateCommand(interp, Tcl_DStringValue(&ds), InterpProc,
- (ClientData) procPtr, ProcDeleteProc);
- cmd = Tcl_CreateObjCommand(interp, Tcl_DStringValue(&ds),
- TclObjInterpProc, (ClientData) procPtr, ProcDeleteProc);
-
- /*
* Now initialize the new procedure's cmdPtr field. This will be used
* later when the procedure is called to determine what namespace the
* procedure will run in. This will be different than the current
* namespace if the proc was renamed into a different namespace.
*/
- procPtr->cmdPtr = (Command *) cmd;
-
+ *procPtrPtr = procPtr;
ckfree((char *) argArray);
return TCL_OK;
- procError:
+procError:
Tcl_DecrRefCount(bodyPtr);
while (procPtr->firstLocalPtr != NULL) {
localPtr = procPtr->firstLocalPtr;
@@ -496,22 +543,25 @@ TclFindProc(iPtr, procName)
Interp *iPtr; /* Interpreter in which to look. */
char *procName; /* Name of desired procedure. */
{
- Command *cmdPtr, *realCmdPtr;
-
- cmdPtr = (Command *) Tcl_FindCommand((Tcl_Interp *) iPtr, procName,
+ Tcl_Command cmd;
+ Tcl_Command origCmd;
+ Command *cmdPtr;
+
+ cmd = Tcl_FindCommand((Tcl_Interp *) iPtr, procName,
(Tcl_Namespace *) NULL, /*flags*/ 0);
- if (cmdPtr == NULL) {
+ if (cmd == (Tcl_Command) NULL) {
return NULL;
}
-
- if (cmdPtr->proc == InterpProc) {
- return (Proc *) cmdPtr->clientData;
+ cmdPtr = (Command *) cmd;
+
+ origCmd = TclGetOriginalCommand(cmd);
+ if (origCmd != NULL) {
+ cmdPtr = (Command *) origCmd;
}
- realCmdPtr = (Command *) TclGetOriginalCommand((Tcl_Command) cmdPtr);
- if ((realCmdPtr != NULL) && (realCmdPtr->proc == InterpProc)) {
- return (Proc *) realCmdPtr->clientData;
+ if (cmdPtr->proc != TclProcInterpProc) {
+ return NULL;
}
- return NULL;
+ return (Proc *) cmdPtr->clientData;
}
/*
@@ -522,7 +572,7 @@ TclFindProc(iPtr, procName)
* Tells whether a command is a Tcl procedure or not.
*
* Results:
- * If the given command is actuall a Tcl procedure, the
+ * If the given command is actually a Tcl procedure, the
* return value is the address of the record describing
* the procedure. Otherwise the return value is 0.
*
@@ -536,7 +586,13 @@ Proc *
TclIsProc(cmdPtr)
Command *cmdPtr; /* Command to test. */
{
- if (cmdPtr->proc == InterpProc) {
+ Tcl_Command origCmd;
+
+ origCmd = TclGetOriginalCommand((Tcl_Command) cmdPtr);
+ if (origCmd != NULL) {
+ cmdPtr = (Command *) origCmd;
+ }
+ if (cmdPtr->proc == TclProcInterpProc) {
return (Proc *) cmdPtr->clientData;
}
return (Proc *) 0;
@@ -545,7 +601,7 @@ TclIsProc(cmdPtr)
/*
*----------------------------------------------------------------------
*
- * InterpProc --
+ * TclProcInterpProc --
*
* When a Tcl procedure gets invoked with an argc/argv array of
* strings, this routine gets invoked to interpret the procedure.
@@ -559,8 +615,8 @@ TclIsProc(cmdPtr)
*----------------------------------------------------------------------
*/
-static int
-InterpProc(clientData, interp, argc, argv)
+int
+TclProcInterpProc(clientData, interp, argc, argv)
ClientData clientData; /* Record describing procedure to be
* interpreted. */
Tcl_Interp *interp; /* Interpreter in which procedure was
@@ -664,7 +720,7 @@ TclObjInterpProc(clientData, interp, objc, objv)
{
Interp *iPtr = (Interp *) interp;
register Proc *procPtr = (Proc *) clientData;
- Tcl_Obj *bodyPtr = procPtr->bodyPtr;
+ Namespace *nsPtr = procPtr->cmdPtr->nsPtr;
CallFrame frame;
register CallFrame *framePtr = &frame;
register Var *varPtr;
@@ -691,28 +747,16 @@ TclObjInterpProc(clientData, interp, objc, objv)
/*
* If necessary, compile the procedure's body. The compiler will
* allocate frame slots for the procedure's non-argument local
- * variables. If the ByteCode already exists, make sure it hasn't been
- * invalidated by someone redefining a core command (this might make the
- * compiled code wrong). Also, if the code was compiled in/for a
- * different interpreter, we recompile it. Note that compiling the body
- * might increase procPtr->numCompiledLocals if new local variables are
- * found while compiling.
+ * variables. Note that compiling the body might increase
+ * procPtr->numCompiledLocals if new local variables are found
+ * while compiling.
*/
- if (bodyPtr->typePtr == &tclByteCodeType) {
- ByteCode *codePtr = (ByteCode *) bodyPtr->internalRep.otherValuePtr;
-
- if (((Interp *) *codePtr->interpHandle != iPtr)
- || (codePtr->compileEpoch != iPtr->compileEpoch)) {
- (*tclByteCodeType.freeIntRepProc)(bodyPtr);
- bodyPtr->typePtr = (Tcl_ObjType *) NULL;
- }
- }
- if (bodyPtr->typePtr != &tclByteCodeType) {
- result = CompileProcBody(interp, procPtr, procName, nameLen);
- if (result != TCL_OK) {
- return result;
- }
+ result = TclProcCompileProc(interp, procPtr, procPtr->bodyPtr, nsPtr,
+ "body of proc", procName);
+
+ if (result != TCL_OK) {
+ return result;
}
/*
@@ -735,34 +779,24 @@ TclObjInterpProc(clientData, interp, objc, objv)
*/
result = Tcl_PushCallFrame(interp, (Tcl_CallFrame *) framePtr,
- (Tcl_Namespace *) procPtr->cmdPtr->nsPtr,
- /*isProcCallFrame*/ 1);
+ (Tcl_Namespace *) nsPtr, /*isProcCallFrame*/ 1);
+
if (result != TCL_OK) {
return result;
}
+
framePtr->objc = objc;
framePtr->objv = objv; /* ref counts for args are incremented below */
- framePtr->procPtr = procPtr;
- framePtr->numCompiledLocals = localCt;
- framePtr->compiledLocals = compiledLocals;
/*
- * Initialize the array of local variables stored in the call frame.
+ * Initialize and resolve compiled variable references.
*/
- varPtr = framePtr->compiledLocals;
- for (localPtr = procPtr->firstLocalPtr; localPtr != NULL;
- localPtr = localPtr->nextPtr) {
- varPtr->value.objPtr = NULL;
- varPtr->name = localPtr->name; /* will be just '\0' if temp var */
- varPtr->nsPtr = NULL;
- varPtr->hPtr = NULL;
- varPtr->refCount = 0;
- varPtr->tracePtr = NULL;
- varPtr->searchPtr = NULL;
- varPtr->flags = (localPtr->flags | VAR_UNDEFINED);
- varPtr++;
- }
+ framePtr->procPtr = procPtr;
+ framePtr->numCompiledLocals = localCt;
+ framePtr->compiledLocals = compiledLocals;
+
+ TclInitCompiledLocals(interp, framePtr, nsPtr);
/*
* Match and assign the call's actual parameters to the procedure's
@@ -776,12 +810,12 @@ TclObjInterpProc(clientData, interp, objc, objv)
localPtr = procPtr->firstLocalPtr;
argCt = objc;
for (i = 1, argCt -= 1; i <= numArgs; i++, argCt--) {
- if (!localPtr->isArg) {
+ if (!TclIsVarArgument(localPtr)) {
panic("TclObjInterpProc: local variable %s is not argument but should be",
localPtr->name);
return TCL_ERROR;
}
- if (localPtr->isTemp) {
+ if (TclIsVarTemporary(localPtr)) {
panic("TclObjInterpProc: local variable %d is temporary but should be an argument", i);
return TCL_ERROR;
}
@@ -854,7 +888,7 @@ TclObjInterpProc(clientData, interp, objc, objv)
result = Tcl_EvalObj(interp, procPtr->bodyPtr, 0);
procPtr->refCount--;
if (procPtr->refCount <= 0) {
- CleanupProc(procPtr);
+ TclProcCleanupProc(procPtr);
}
if (result != TCL_OK) {
@@ -878,71 +912,155 @@ TclObjInterpProc(clientData, interp, objc, objv)
/*
*----------------------------------------------------------------------
*
- * CompileProcBody --
+ * TclProcCompileProc --
*
- * This procedure is called by TclObjInterpProc to compile the body
- * script of a Tcl procedure.
+ * Called just before a procedure is executed to compile the
+ * body to byte codes. If the type of the body is not
+ * "byte code" or if the compile conditions have changed
+ * (namespace context, epoch counters, etc.) then the body
+ * is recompiled. Otherwise, this procedure does nothing.
*
* Results:
- * If the compilation succeeds, TCL_OK is returned. Otherwise,
- * TCL_ERROR is returned and an error message is left in the
- * interpreter's result.
+ * None.
*
* Side effects:
- * Modifies the Tcl object that is the body of the procedure to
- * be a ByteCode object. Also arranges (by setting the interpreter's
- * compiledProcPtr field) to have the compiler set various fields in
- * the procedure's Proc structure such as the number of compiled local
- * variables.
+ * May change the internal representation of the body object
+ * to compiled code.
*
*----------------------------------------------------------------------
*/
-
-static int
-CompileProcBody(interp, procPtr, procName, nameLen)
- Tcl_Interp *interp; /* The interpreter in which to compile the
- * procedure's body. */
- Proc *procPtr; /* Points to structure describing the Tcl
- * procedure. */
- char *procName; /* Name of the procedure. Used for error
- * messages and trace information. */
- int nameLen; /* Number of bytes in procedure's name. */
+
+int
+TclProcCompileProc(interp, procPtr, bodyPtr, nsPtr, description, procName)
+ Tcl_Interp *interp; /* Interpreter containing procedure. */
+ Proc *procPtr; /* Data associated with procedure. */
+ Tcl_Obj *bodyPtr; /* Body of proc. (Usually procPtr->bodyPtr,
+ * but could be any code fragment compiled
+ * in the context of this procedure.) */
+ Namespace *nsPtr; /* Namespace containing procedure. */
+ CONST char *description; /* string describing this body of code. */
+ CONST char *procName; /* Name of this procedure. */
{
- register Interp *iPtr = (Interp *) interp;
- Tcl_Obj *bodyPtr = procPtr->bodyPtr;
+ Interp *iPtr = (Interp*)interp;
+ int result;
+ Tcl_CallFrame frame;
Proc *saveProcPtr;
- char buf[100 + TCL_INTEGER_SPACE];
- int numChars, result;
- char *ellipsis;
-
- if (tclTraceCompile >= 1) {
- numChars = nameLen;
- ellipsis = "";
- if (numChars > 50) {
- numChars = 50;
- ellipsis = "...";
- }
- fprintf(stdout, "Compiling body of proc \"%.*s%s\"\n",
- numChars, procName, ellipsis);
+ ByteCode *codePtr = (ByteCode *) bodyPtr->internalRep.otherValuePtr;
+
+ /*
+ * If necessary, compile the procedure's body. The compiler will
+ * allocate frame slots for the procedure's non-argument local
+ * variables. If the ByteCode already exists, make sure it hasn't been
+ * invalidated by someone redefining a core command (this might make the
+ * compiled code wrong). Also, if the code was compiled in/for a
+ * different interpreter, we recompile it. Note that compiling the body
+ * might increase procPtr->numCompiledLocals if new local variables are
+ * found while compiling.
+ *
+ * Precompiled procedure bodies, however, are immutable and therefore
+ * they are not recompiled, even if things have changed.
+ */
+
+ if (bodyPtr->typePtr == &tclByteCodeType) {
+ if (((Interp *) *codePtr->interpHandle != iPtr)
+ || (codePtr->compileEpoch != iPtr->compileEpoch)
+ || (codePtr->nsPtr != nsPtr)) {
+ if (codePtr->flags & TCL_BYTECODE_PRECOMPILED) {
+ if ((Interp *) *codePtr->interpHandle != iPtr) {
+ Tcl_AppendResult(interp,
+ "a precompiled script jumped interps", NULL);
+ return TCL_ERROR;
+ }
+ codePtr->compileEpoch = iPtr->compileEpoch;
+ codePtr->nsPtr = nsPtr;
+ } else {
+ (*tclByteCodeType.freeIntRepProc)(bodyPtr);
+ bodyPtr->typePtr = (Tcl_ObjType *) NULL;
+ }
+ }
}
-
- saveProcPtr = iPtr->compiledProcPtr;
- iPtr->compiledProcPtr = procPtr;
- result = tclByteCodeType.setFromAnyProc(interp, bodyPtr);
- iPtr->compiledProcPtr = saveProcPtr;
-
- if (result == TCL_ERROR) {
- numChars = nameLen;
- ellipsis = "";
- if (numChars > 50) {
- numChars = 50;
- ellipsis = "...";
+ if (bodyPtr->typePtr != &tclByteCodeType) {
+ char buf[100];
+ int numChars;
+ char *ellipsis;
+
+ if (tclTraceCompile >= 1) {
+ /*
+ * Display a line summarizing the top level command we
+ * are about to compile.
+ */
+
+ numChars = strlen(procName);
+ ellipsis = "";
+ if (numChars > 50) {
+ numChars = 50;
+ ellipsis = "...";
+ }
+ fprintf(stdout, "Compiling %s \"%.*s%s\"\n",
+ description, numChars, procName, ellipsis);
+ }
+
+ /*
+ * Plug the current procPtr into the interpreter and coerce
+ * the code body to byte codes. The interpreter needs to
+ * know which proc it's compiling so that it can access its
+ * list of compiled locals.
+ *
+ * TRICKY NOTE: Be careful to push a call frame with the
+ * proper namespace context, so that the byte codes are
+ * compiled in the appropriate class context.
+ */
+
+ saveProcPtr = iPtr->compiledProcPtr;
+ iPtr->compiledProcPtr = procPtr;
+
+ result = Tcl_PushCallFrame(interp, &frame,
+ (Tcl_Namespace*)nsPtr, /* isProcCallFrame */ 0);
+
+ if (result == TCL_OK) {
+ result = tclByteCodeType.setFromAnyProc(interp, bodyPtr);
+ Tcl_PopCallFrame(interp);
+ }
+
+ iPtr->compiledProcPtr = saveProcPtr;
+
+ if (result != TCL_OK) {
+ if (result == TCL_ERROR) {
+ numChars = strlen(procName);
+ ellipsis = "";
+ if (numChars > 50) {
+ numChars = 50;
+ ellipsis = "...";
+ }
+ sprintf(buf, "\n (compiling %s \"%.*s%s\", line %d)",
+ description, numChars, procName, ellipsis,
+ interp->errorLine);
+ Tcl_AddObjErrorInfo(interp, buf, -1);
+ }
+ return result;
+ }
+ } else if (codePtr->nsEpoch != nsPtr->resolverEpoch) {
+ register CompiledLocal *localPtr;
+
+ /*
+ * The resolver epoch has changed, but we only need to invalidate
+ * the resolver cache.
+ */
+
+ for (localPtr = procPtr->firstLocalPtr; localPtr != NULL;
+ localPtr = localPtr->nextPtr) {
+ localPtr->flags &= ~(VAR_RESOLVED);
+ if (localPtr->resolveInfo) {
+ if (localPtr->resolveInfo->deleteProc) {
+ localPtr->resolveInfo->deleteProc(localPtr->resolveInfo);
+ } else {
+ ckfree((char*)localPtr->resolveInfo);
+ }
+ localPtr->resolveInfo = NULL;
+ }
}
- sprintf(buf, "\n (compiling body of proc \"%.*s%s\", line %d)",
- numChars, procName, ellipsis, interp->errorLine);
- Tcl_AddObjErrorInfo(interp, buf, -1);
}
- return result;
+ return TCL_OK;
}
/*
@@ -1001,7 +1119,7 @@ ProcessProcResultCode(interp, procName, nameLen, returnCode)
/*
*----------------------------------------------------------------------
*
- * ProcDeleteProc --
+ * TclProcDeleteProc --
*
* This procedure is invoked just before a command procedure is
* removed from an interpreter. Its job is to release all the
@@ -1018,22 +1136,22 @@ ProcessProcResultCode(interp, procName, nameLen, returnCode)
*----------------------------------------------------------------------
*/
-static void
-ProcDeleteProc(clientData)
+void
+TclProcDeleteProc(clientData)
ClientData clientData; /* Procedure to be deleted. */
{
Proc *procPtr = (Proc *) clientData;
procPtr->refCount--;
if (procPtr->refCount <= 0) {
- CleanupProc(procPtr);
+ TclProcCleanupProc(procPtr);
}
}
/*
*----------------------------------------------------------------------
*
- * CleanupProc --
+ * TclProcCleanupProc --
*
* This procedure does all the real work of freeing up a Proc
* structure. It's called only when the structure's reference
@@ -1048,13 +1166,14 @@ ProcDeleteProc(clientData)
*----------------------------------------------------------------------
*/
-static void
-CleanupProc(procPtr)
+void
+TclProcCleanupProc(procPtr)
register Proc *procPtr; /* Procedure to be deleted. */
{
register CompiledLocal *localPtr;
Tcl_Obj *bodyPtr = procPtr->bodyPtr;
Tcl_Obj *defPtr;
+ Tcl_ResolvedVarInfo *resVarInfo;
if (bodyPtr != NULL) {
Tcl_DecrRefCount(bodyPtr);
@@ -1062,6 +1181,15 @@ CleanupProc(procPtr)
for (localPtr = procPtr->firstLocalPtr; localPtr != NULL; ) {
CompiledLocal *nextPtr = localPtr->nextPtr;
+ resVarInfo = localPtr->resolveInfo;
+ if (resVarInfo) {
+ if (resVarInfo->deleteProc) {
+ (*resVarInfo->deleteProc)(resVarInfo);
+ } else {
+ ckfree((char *) resVarInfo);
+ }
+ }
+
if (localPtr->defValuePtr != NULL) {
defPtr = localPtr->defValuePtr;
Tcl_DecrRefCount(defPtr);
@@ -1114,3 +1242,53 @@ TclUpdateReturnInfo(iPtr)
}
return code;
}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclGetInterpProc --
+ *
+ * Returns a pointer to the TclProcInterpProc procedure; this is different
+ * from the value obtained from the TclProcInterpProc reference on systems
+ * like Windows where import and export versions of a procedure exported
+ * by a DLL exist.
+ *
+ * Results:
+ * Returns the internal address of the TclProcInterpProc procedure.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+TclCmdProcType
+TclGetInterpProc()
+{
+ return TclProcInterpProc;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclGetObjInterpProc --
+ *
+ * Returns a pointer to the TclObjInterpProc procedure; this is different
+ * from the value obtained from the TclObjInterpProc reference on systems
+ * like Windows where import and export versions of a procedure exported
+ * by a DLL exist.
+ *
+ * Results:
+ * Returns the internal address of the TclProcInterpProc procedure.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+TclObjCmdProcType
+TclGetObjInterpProc()
+{
+ return TclObjInterpProc;
+}
diff --git a/generic/tclRegexp.h b/generic/tclRegexp.h
index c545590..be5cb77 100644
--- a/generic/tclRegexp.h
+++ b/generic/tclRegexp.h
@@ -31,7 +31,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclRegexp.h 1.22 98/01/28 20:44:28
+ * RCS: @(#) $Id: tclRegexp.h,v 1.1.2.2 1998/09/24 23:59:02 stanton Exp $
*/
#ifndef _TCLREGEXP
@@ -41,6 +41,11 @@
#include "tclInt.h"
#endif
+#ifdef BUILD_tcl
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
/*
* The following definitions were culled from wctype.h and wchar.h.
* Those two header files are now gone. Eventually we should replace all
diff --git a/generic/tclResolve.c b/generic/tclResolve.c
new file mode 100644
index 0000000..230e93f
--- /dev/null
+++ b/generic/tclResolve.c
@@ -0,0 +1,423 @@
+/*
+ * tclResolve.c --
+ *
+ * Contains hooks for customized command/variable name resolution
+ * schemes. These hooks allow extensions like [incr Tcl] to add
+ * their own name resolution rules to the Tcl language. Rules can
+ * be applied to a particular namespace, to the interpreter as a
+ * whole, or both.
+ *
+ * Copyright (c) 1998 Lucent Technologies, Inc.
+ *
+ * Originally implemented by
+ * Michael J. McLennan
+ * Bell Labs Innovations for Lucent Technologies
+ * mmclennan@lucent.com
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id: tclResolve.c,v 1.1.2.1 1998/09/24 23:59:02 stanton Exp $
+ */
+
+#include "tclInt.h"
+
+/*
+ * Declarations for procedures local to this file:
+ */
+
+static void BumpCmdRefEpochs _ANSI_ARGS_((Namespace *nsPtr));
+
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_AddInterpResolvers --
+ *
+ * Adds a set of command/variable resolution procedures to an
+ * interpreter. These procedures are consulted when commands
+ * are resolved in Tcl_FindCommand, and when variables are
+ * resolved in TclLookupVar and LookupCompiledLocal. Each
+ * namespace may also have its own set of resolution procedures
+ * which take precedence over those for the interpreter.
+ *
+ * When a name is resolved, it is handled as follows. First,
+ * the name is passed to the resolution procedures for the
+ * namespace. If not resolved, the name is passed to each of
+ * the resolution procedures added to the interpreter. Finally,
+ * if still not resolved, the name is handled using the default
+ * Tcl rules for name resolution.
+ *
+ * Results:
+ * Returns pointers to the current name resolution procedures
+ * in the cmdProcPtr, varProcPtr and compiledVarProcPtr
+ * arguments.
+ *
+ * Side effects:
+ * If a compiledVarProc is specified, this procedure bumps the
+ * compileEpoch for the interpreter, forcing all code to be
+ * recompiled. If a cmdProc is specified, this procedure bumps
+ * the cmdRefEpoch in all namespaces, forcing commands to be
+ * resolved again using the new rules.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+Tcl_AddInterpResolvers(interp, name, cmdProc, varProc, compiledVarProc)
+
+ Tcl_Interp *interp; /* Interpreter whose name resolution
+ * rules are being modified. */
+ char *name; /* Name of this resolution scheme. */
+ Tcl_ResolveCmdProc *cmdProc; /* New procedure for command
+ * resolution */
+ Tcl_ResolveVarProc *varProc; /* Procedure for variable resolution
+ * at runtime */
+ Tcl_ResolveCompiledVarProc *compiledVarProc;
+ /* Procedure for variable resolution
+ * at compile time. */
+{
+ Interp *iPtr = (Interp*)interp;
+ ResolverScheme *resPtr;
+
+ /*
+ * Since we're adding a new name resolution scheme, we must force
+ * all code to be recompiled to use the new scheme. If there
+ * are new compiled variable resolution rules, bump the compiler
+ * epoch to invalidate compiled code. If there are new command
+ * resolution rules, bump the cmdRefEpoch in all namespaces.
+ */
+ if (compiledVarProc) {
+ iPtr->compileEpoch++;
+ }
+ if (cmdProc) {
+ BumpCmdRefEpochs(iPtr->globalNsPtr);
+ }
+
+ /*
+ * Look for an existing scheme with the given name. If found,
+ * then replace its rules.
+ */
+ for (resPtr = iPtr->resolverPtr; resPtr != NULL; resPtr = resPtr->nextPtr) {
+ if (*name == *resPtr->name && strcmp(name, resPtr->name) == 0) {
+ resPtr->cmdResProc = cmdProc;
+ resPtr->varResProc = varProc;
+ resPtr->compiledVarResProc = compiledVarProc;
+ return;
+ }
+ }
+
+ /*
+ * Otherwise, this is a new scheme. Add it to the FRONT
+ * of the linked list, so that it overrides existing schemes.
+ */
+ resPtr = (ResolverScheme *) ckalloc(sizeof(ResolverScheme));
+ resPtr->name = (char*)ckalloc((unsigned)(strlen(name)+1));
+ strcpy(resPtr->name, name);
+ resPtr->cmdResProc = cmdProc;
+ resPtr->varResProc = varProc;
+ resPtr->compiledVarResProc = compiledVarProc;
+ resPtr->nextPtr = iPtr->resolverPtr;
+ iPtr->resolverPtr = resPtr;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_GetInterpResolvers --
+ *
+ * Looks for a set of command/variable resolution procedures with
+ * the given name in an interpreter. These procedures are
+ * registered by calling Tcl_AddInterpResolvers.
+ *
+ * Results:
+ * If the name is recognized, this procedure returns non-zero,
+ * along with pointers to the name resolution procedures in
+ * the Tcl_ResolverInfo structure. If the name is not recognized,
+ * this procedure returns zero.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tcl_GetInterpResolvers(interp, name, resInfoPtr)
+
+ Tcl_Interp *interp; /* Interpreter whose name resolution
+ * rules are being queried. */
+ char *name; /* Look for a scheme with this name. */
+ Tcl_ResolverInfo *resInfoPtr; /* Returns pointers to the procedures,
+ * if found */
+{
+ Interp *iPtr = (Interp*)interp;
+ ResolverScheme *resPtr;
+
+ /*
+ * Look for an existing scheme with the given name. If found,
+ * then return pointers to its procedures.
+ */
+ for (resPtr = iPtr->resolverPtr; resPtr != NULL; resPtr = resPtr->nextPtr) {
+ if (*name == *resPtr->name && strcmp(name, resPtr->name) == 0) {
+ resInfoPtr->cmdResProc = resPtr->cmdResProc;
+ resInfoPtr->varResProc = resPtr->varResProc;
+ resInfoPtr->compiledVarResProc = resPtr->compiledVarResProc;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_RemoveInterpResolvers --
+ *
+ * Removes a set of command/variable resolution procedures
+ * previously added by Tcl_AddInterpResolvers. The next time
+ * a command/variable name is resolved, these procedures
+ * won't be consulted.
+ *
+ * Results:
+ * Returns non-zero if the name was recognized and the
+ * resolution scheme was deleted. Returns zero otherwise.
+ *
+ * Side effects:
+ * If a scheme with a compiledVarProc was deleted, this procedure
+ * bumps the compileEpoch for the interpreter, forcing all code
+ * to be recompiled. If a scheme with a cmdProc was deleted,
+ * this procedure bumps the cmdRefEpoch in all namespaces,
+ * forcing commands to be resolved again using the new rules.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tcl_RemoveInterpResolvers(interp, name)
+
+ Tcl_Interp *interp; /* Interpreter whose name resolution
+ * rules are being modified. */
+ char *name; /* Name of the scheme to be removed. */
+{
+ Interp *iPtr = (Interp*)interp;
+ ResolverScheme **prevPtrPtr, *resPtr;
+
+ /*
+ * Look for an existing scheme with the given name.
+ */
+ prevPtrPtr = &iPtr->resolverPtr;
+ for (resPtr = iPtr->resolverPtr; resPtr != NULL; resPtr = resPtr->nextPtr) {
+ if (*name == *resPtr->name && strcmp(name, resPtr->name) == 0) {
+ break;
+ }
+ prevPtrPtr = &resPtr->nextPtr;
+ }
+
+ /*
+ * If we found the scheme, delete it.
+ */
+ if (resPtr) {
+ /*
+ * If we're deleting a scheme with compiled variable resolution
+ * rules, bump the compiler epoch to invalidate compiled code.
+ * If we're deleting a scheme with command resolution rules,
+ * bump the cmdRefEpoch in all namespaces.
+ */
+ if (resPtr->compiledVarResProc) {
+ iPtr->compileEpoch++;
+ }
+ if (resPtr->cmdResProc) {
+ BumpCmdRefEpochs(iPtr->globalNsPtr);
+ }
+
+ *prevPtrPtr = resPtr->nextPtr;
+ ckfree(resPtr->name);
+ ckfree((char *) resPtr);
+
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * BumpCmdRefEpochs --
+ *
+ * This procedure is used to bump the cmdRefEpoch counters in
+ * the specified namespace and all of its child namespaces.
+ * It is used whenever name resolution schemes are added/removed
+ * from an interpreter, to invalidate all command references.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Bumps the cmdRefEpoch in the specified namespace and its
+ * children, recursively.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+BumpCmdRefEpochs(nsPtr)
+ Namespace *nsPtr; /* Namespace being modified. */
+{
+ Tcl_HashEntry *entry;
+ Tcl_HashSearch search;
+ Namespace *childNsPtr;
+
+ nsPtr->cmdRefEpoch++;
+
+ for (entry = Tcl_FirstHashEntry(&nsPtr->childTable, &search);
+ entry != NULL;
+ entry = Tcl_NextHashEntry(&search)) {
+
+ childNsPtr = (Namespace *) Tcl_GetHashValue(entry);
+ BumpCmdRefEpochs(childNsPtr);
+ }
+}
+
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_SetNamespaceResolvers --
+ *
+ * Sets the command/variable resolution procedures for a namespace,
+ * thereby changing the way that command/variable names are
+ * interpreted. This allows extension writers to support different
+ * name resolution schemes, such as those for object-oriented
+ * packages.
+ *
+ * Command resolution is handled by a procedure of the following
+ * type:
+ *
+ * typedef int (Tcl_ResolveCmdProc) _ANSI_ARGS_((
+ * Tcl_Interp* interp, char* name, Tcl_Namespace *context,
+ * int flags, Tcl_Command *rPtr));
+ *
+ * Whenever a command is executed or Tcl_FindCommand is invoked
+ * within the namespace, this procedure is called to resolve the
+ * command name. If this procedure is able to resolve the name,
+ * it should return the status code TCL_OK, along with the
+ * corresponding Tcl_Command in the rPtr argument. Otherwise,
+ * the procedure can return TCL_CONTINUE, and the command will
+ * be treated under the usual name resolution rules. Or, it can
+ * return TCL_ERROR, and the command will be considered invalid.
+ *
+ * Variable resolution is handled by two procedures. The first
+ * is called whenever a variable needs to be resolved at compile
+ * time:
+ *
+ * typedef int (Tcl_ResolveCompiledVarProc) _ANSI_ARGS_((
+ * Tcl_Interp* interp, char* name, Tcl_Namespace *context,
+ * Tcl_ResolvedVarInfo *rPtr));
+ *
+ * If this procedure is able to resolve the name, it should return
+ * the status code TCL_OK, along with variable resolution info in
+ * the rPtr argument; this info will be used to set up compiled
+ * locals in the call frame at runtime. The procedure may also
+ * return TCL_CONTINUE, and the variable will be treated under
+ * the usual name resolution rules. Or, it can return TCL_ERROR,
+ * and the variable will be considered invalid.
+ *
+ * Another procedure is used whenever a variable needs to be
+ * resolved at runtime but it is not recognized as a compiled local.
+ * (For example, the variable may be requested via
+ * Tcl_FindNamespaceVar.) This procedure has the following type:
+ *
+ * typedef int (Tcl_ResolveVarProc) _ANSI_ARGS_((
+ * Tcl_Interp* interp, char* name, Tcl_Namespace *context,
+ * int flags, Tcl_Var *rPtr));
+ *
+ * This procedure is quite similar to the compile-time version.
+ * It returns the same status codes, but if variable resolution
+ * succeeds, this procedure returns a Tcl_Var directly via the
+ * rPtr argument.
+ *
+ * Results:
+ * Nothing.
+ *
+ * Side effects:
+ * Bumps the command epoch counter for the namespace, invalidating
+ * all command references in that namespace. Also bumps the
+ * resolver epoch counter for the namespace, forcing all code
+ * in the namespace to be recompiled.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+Tcl_SetNamespaceResolvers(namespacePtr, cmdProc, varProc, compiledVarProc)
+ Tcl_Namespace *namespacePtr; /* Namespace whose resolution rules
+ * are being modified. */
+ Tcl_ResolveCmdProc *cmdProc; /* Procedure for command resolution */
+ Tcl_ResolveVarProc *varProc; /* Procedure for variable resolution
+ * at runtime */
+ Tcl_ResolveCompiledVarProc *compiledVarProc;
+ /* Procedure for variable resolution
+ * at compile time. */
+{
+ Namespace *nsPtr = (Namespace*)namespacePtr;
+
+ /*
+ * Plug in the new command resolver, and bump the epoch counters
+ * so that all code will have to be recompiled and all commands
+ * will have to be resolved again using the new policy.
+ */
+ nsPtr->cmdResProc = cmdProc;
+ nsPtr->varResProc = varProc;
+ nsPtr->compiledVarResProc = compiledVarProc;
+
+ nsPtr->cmdRefEpoch++;
+ nsPtr->resolverEpoch++;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_GetNamespaceResolvers --
+ *
+ * Returns the current command/variable resolution procedures
+ * for a namespace. By default, these procedures are NULL.
+ * New procedures can be installed by calling
+ * Tcl_SetNamespaceResolvers, to provide new name resolution
+ * rules.
+ *
+ * Results:
+ * Returns non-zero if any name resolution procedures have been
+ * assigned to this namespace; also returns pointers to the
+ * procedures in the Tcl_ResolverInfo structure. Returns zero
+ * otherwise.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tcl_GetNamespaceResolvers(namespacePtr, resInfoPtr)
+
+ Tcl_Namespace *namespacePtr; /* Namespace whose resolution rules
+ * are being modified. */
+ Tcl_ResolverInfo *resInfoPtr; /* Returns: pointers for all
+ * name resolution procedures
+ * assigned to this namespace. */
+{
+ Namespace *nsPtr = (Namespace*)namespacePtr;
+
+ resInfoPtr->cmdResProc = nsPtr->cmdResProc;
+ resInfoPtr->varResProc = nsPtr->varResProc;
+ resInfoPtr->compiledVarResProc = nsPtr->compiledVarResProc;
+
+ if (nsPtr->cmdResProc != NULL ||
+ nsPtr->varResProc != NULL ||
+ nsPtr->compiledVarResProc != NULL) {
+ return 1;
+ }
+ return 0;
+}
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index f55fafc..2dc4a95 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclStringObj.c 1.35 97/11/13 13:40:07
+ * RCS: @(#) $Id: tclStringObj.c,v 1.1.2.2 1998/09/24 23:59:02 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 316dec3..8da6785 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclTest.c 1.145 98/02/17 11:19:22
+ * RCS: @(#) $Id: tclTest.c,v 1.1.2.2 1998/09/24 23:59:02 stanton Exp $
*/
#define TCL_TEST
@@ -158,6 +158,14 @@ static int RegGetCompFlags _ANSI_ARGS_((char *s));
static int RegGetExecFlags _ANSI_ARGS_((char *s));
static void SpecialFree _ANSI_ARGS_((char *blockPtr));
static int StaticInitProc _ANSI_ARGS_((Tcl_Interp *interp));
+static int TestaccessprocCmd _ANSI_ARGS_((ClientData dummy,
+ Tcl_Interp *interp, int argc, char **argv));
+static int TestAccessProc1 _ANSI_ARGS_((CONST char *path,
+ int mode));
+static int TestAccessProc2 _ANSI_ARGS_((CONST char *path,
+ int mode));
+static int TestAccessProc3 _ANSI_ARGS_((CONST char *path,
+ int mode));
static int TestasyncCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestcmdinfoCmd _ANSI_ARGS_((ClientData dummy,
@@ -220,6 +228,12 @@ static int TestMathFunc _ANSI_ARGS_((ClientData clientData,
static int TestMathFunc2 _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, Tcl_Value *args,
Tcl_Value *resultPtr));
+static Tcl_Channel TestOpenFileChannelProc1 _ANSI_ARGS_((Tcl_Interp *interp,
+ char *filename, char *modeString, int permissions));
+static Tcl_Channel TestOpenFileChannelProc2 _ANSI_ARGS_((Tcl_Interp *interp,
+ char *filename, char *modeString, int permissions));
+static Tcl_Channel TestOpenFileChannelProc3 _ANSI_ARGS_((Tcl_Interp *interp,
+ char *filename, char *modeString, int permissions));
static int TestpanicCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestparserObjCmd _ANSI_ARGS_((ClientData dummy,
@@ -245,6 +259,8 @@ static int TestsetnoerrCmd _ANSI_ARGS_((ClientData dummy,
static int TestsetobjerrorcodeCmd _ANSI_ARGS_((
ClientData dummy, Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[]));
+static int TestopenfilechannelprocCmd _ANSI_ARGS_((ClientData dummy,
+ Tcl_Interp *interp, int argc, char **argv));
static int TestsetplatformCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestsetrecursionlimitCmd _ANSI_ARGS_((
@@ -252,6 +268,14 @@ static int TestsetrecursionlimitCmd _ANSI_ARGS_((
int objc, Tcl_Obj *CONST objv[]));
static int TeststaticpkgCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
+static int TestStatProc1 _ANSI_ARGS_((CONST char *path,
+ TclStat_ *buf));
+static int TestStatProc2 _ANSI_ARGS_((CONST char *path,
+ TclStat_ *buf));
+static int TestStatProc3 _ANSI_ARGS_((CONST char *path,
+ TclStat_ *buf));
+static int TeststatprocCmd _ANSI_ARGS_((ClientData dummy,
+ Tcl_Interp *interp, int argc, char **argv));
static int TesttranslatefilenameCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestupvarCmd _ANSI_ARGS_((ClientData dummy,
@@ -305,6 +329,8 @@ Tcltest_Init(interp)
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateObjCommand(interp, "noop", NoopObjCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
+ Tcl_CreateCommand(interp, "testaccessproc", TestaccessprocCmd, (ClientData) 0,
+ (Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testasync", TestasyncCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testchannel", TclTestChannelCmd,
@@ -361,6 +387,9 @@ Tcltest_Init(interp)
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateObjCommand(interp, "testlocale", TestlocaleCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
+ Tcl_CreateCommand(interp, "testopenfilechannelproc",
+ TestopenfilechannelprocCmd, (ClientData) 0,
+ (Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testpanic", TestpanicCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateObjCommand(interp, "testparser", TestparserObjCmd,
@@ -396,6 +425,8 @@ Tcltest_Init(interp)
(ClientData) 123);
Tcl_CreateMathFunc(interp, "T2", 0, (Tcl_ValueType *) NULL, TestMathFunc,
(ClientData) 345);
+ Tcl_CreateCommand(interp, "teststatproc", TeststatprocCmd, (ClientData) 0,
+ (Tcl_CmdDeleteProc *) NULL);
t3ArgTypes[0] = TCL_EITHER;
t3ArgTypes[1] = TCL_EITHER;
Tcl_CreateMathFunc(interp, "T3", 2, t3ArgTypes, TestMathFunc2,
@@ -3866,3 +3897,344 @@ TestsaveresultFree(blockPtr)
{
freeCount++;
}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TeststatprocCmd --
+ *
+ * Implements the "testTclStatProc" cmd that is used to test the
+ * 'TclStatInsertProc' & 'TclStatDeleteProc' C Apis.
+ *
+ * Results:
+ * A standard Tcl result.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+TeststatprocCmd (dummy, interp, argc, argv)
+ ClientData dummy; /* Not used. */
+ register Tcl_Interp *interp; /* Current interpreter. */
+ int argc; /* Number of arguments. */
+ char **argv; /* Argument strings. */
+{
+ TclStatProc_ *proc;
+ int retVal;
+
+ if (argc != 3) {
+ Tcl_AppendResult(interp, "wrong # args: should be \"",
+ argv[0], " option arg\"", (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (strcmp(argv[2], "TclpStat") == 0) {
+ proc = TclpStat;
+ } else if (strcmp(argv[2], "TestStatProc1") == 0) {
+ proc = TestStatProc1;
+ } else if (strcmp(argv[2], "TestStatProc2") == 0) {
+ proc = TestStatProc2;
+ } else if (strcmp(argv[2], "TestStatProc3") == 0) {
+ proc = TestStatProc3;
+ } else {
+ Tcl_AppendResult(interp, "bad arg \"", argv[1], "\": ",
+ "must be TclpStat, ",
+ "TestStatProc1, TestStatProc2, or TestStatProc3",
+ (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (strcmp(argv[1], "insert") == 0) {
+ if (proc == TclpStat) {
+ Tcl_AppendResult(interp, "bad arg \"", argv[1], "\": ",
+ "must be ",
+ "TestStatProc1, TestStatProc2, or TestStatProc3",
+ (char *) NULL);
+ return TCL_ERROR;
+ }
+ retVal = TclStatInsertProc(proc);
+ } else if (strcmp(argv[1], "delete") == 0) {
+ retVal = TclStatDeleteProc(proc);
+ } else {
+ Tcl_AppendResult(interp, "bad option \"", argv[1], "\": ",
+ "must be insert or delete", (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (retVal == TCL_ERROR) {
+ Tcl_AppendResult(interp, "\"", argv[2], "\": ",
+ "could not be ", argv[1], "ed", (char *) NULL);
+ }
+
+ return retVal;
+}
+
+
+static int
+TestStatProc1(path, buf)
+ CONST char *path;
+ TclStat_ *buf;
+{
+ buf->st_size = 1234;
+ return (strcmp("testStat1%.fil", path) ? -1 : 0);
+}
+
+
+static int
+TestStatProc2(path, buf)
+ CONST char *path;
+ TclStat_ *buf;
+{
+ buf->st_size = 2345;
+ return (strcmp("testStat2%.fil", path) ? -1 : 0);
+}
+
+
+static int
+TestStatProc3(path, buf)
+ CONST char *path;
+ TclStat_ *buf;
+{
+ buf->st_size = 3456;
+ return (strcmp("testStat3%.fil", path) ? -1 : 0);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TestaccessprocCmd --
+ *
+ * Implements the "testTclAccessProc" cmd that is used to test the
+ * 'TclAccessInsertProc' & 'TclAccessDeleteProc' C Apis.
+ *
+ * Results:
+ * A standard Tcl result.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+TestaccessprocCmd (dummy, interp, argc, argv)
+ ClientData dummy; /* Not used. */
+ register Tcl_Interp *interp; /* Current interpreter. */
+ int argc; /* Number of arguments. */
+ char **argv; /* Argument strings. */
+{
+ TclAccessProc_ *proc;
+ int retVal;
+
+ if (argc != 3) {
+ Tcl_AppendResult(interp, "wrong # args: should be \"",
+ argv[0], " option arg\"", (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (strcmp(argv[2], "TclpAccess") == 0) {
+ proc = TclpAccess;
+ } else if (strcmp(argv[2], "TestAccessProc1") == 0) {
+ proc = TestAccessProc1;
+ } else if (strcmp(argv[2], "TestAccessProc2") == 0) {
+ proc = TestAccessProc2;
+ } else if (strcmp(argv[2], "TestAccessProc3") == 0) {
+ proc = TestAccessProc3;
+ } else {
+ Tcl_AppendResult(interp, "bad arg \"", argv[1], "\": ",
+ "must be TclpAccess, ",
+ "TestAccessProc1, TestAccessProc2, or TestAccessProc3",
+ (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (strcmp(argv[1], "insert") == 0) {
+ if (proc == TclpAccess) {
+ Tcl_AppendResult(interp, "bad arg \"", argv[1], "\": ",
+ "must be ",
+ "TestAccessProc1, TestAccessProc2, or TestAccessProc3",
+ (char *) NULL);
+ return TCL_ERROR;
+ }
+ retVal = TclAccessInsertProc(proc);
+ } else if (strcmp(argv[1], "delete") == 0) {
+ retVal = TclAccessDeleteProc(proc);
+ } else {
+ Tcl_AppendResult(interp, "bad option \"", argv[1], "\": ",
+ "must be insert or delete", (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (retVal == TCL_ERROR) {
+ Tcl_AppendResult(interp, "\"", argv[2], "\": ",
+ "could not be ", argv[1], "ed", (char *) NULL);
+ }
+
+ return retVal;
+}
+
+
+static int
+TestAccessProc1(path, mode)
+ CONST char *path;
+ int mode;
+{
+ return (strcmp("testAccess1%.fil", path) ? -1 : 0);
+}
+
+
+static int
+TestAccessProc2(path, mode)
+ CONST char *path;
+ int mode;
+{
+ return (strcmp("testAccess2%.fil", path) ? -1 : 0);
+}
+
+
+static int
+TestAccessProc3(path, mode)
+ CONST char *path;
+ int mode;
+{
+ return (strcmp("testAccess3%.fil", path) ? -1 : 0);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TestopenfilechannelprocCmd --
+ *
+ * Implements the "testTclOpenFileChannelProc" cmd that is used to test the
+ * 'TclOpenFileChannelInsertProc' & 'TclOpenFileChannelDeleteProc' C Apis.
+ *
+ * Results:
+ * A standard Tcl result.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+TestopenfilechannelprocCmd (dummy, interp, argc, argv)
+ ClientData dummy; /* Not used. */
+ register Tcl_Interp *interp; /* Current interpreter. */
+ int argc; /* Number of arguments. */
+ char **argv; /* Argument strings. */
+{
+ TclOpenFileChannelProc_ *proc;
+ int retVal;
+
+ if (argc != 3) {
+ Tcl_AppendResult(interp, "wrong # args: should be \"",
+ argv[0], " option arg\"", (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (strcmp(argv[2], "TclpOpenFileChannel") == 0) {
+ proc = TclpOpenFileChannel;
+ } else if (strcmp(argv[2], "TestOpenFileChannelProc1") == 0) {
+ proc = TestOpenFileChannelProc1;
+ } else if (strcmp(argv[2], "TestOpenFileChannelProc2") == 0) {
+ proc = TestOpenFileChannelProc2;
+ } else if (strcmp(argv[2], "TestOpenFileChannelProc3") == 0) {
+ proc = TestOpenFileChannelProc3;
+ } else {
+ Tcl_AppendResult(interp, "bad arg \"", argv[1], "\": ",
+ "must be TclpOpenFileChannel, ",
+ "TestOpenFileChannelProc1, TestOpenFileChannelProc2, or ",
+ "TestOpenFileChannelProc3",
+ (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (strcmp(argv[1], "insert") == 0) {
+ if (proc == TclpOpenFileChannel) {
+ Tcl_AppendResult(interp, "bad arg \"", argv[1], "\": ",
+ "must be ",
+ "TestOpenFileChannelProc1, TestOpenFileChannelProc2, or ",
+ "TestOpenFileChannelProc3",
+ (char *) NULL);
+ return TCL_ERROR;
+ }
+ retVal = TclOpenFileChannelInsertProc(proc);
+ } else if (strcmp(argv[1], "delete") == 0) {
+ retVal = TclOpenFileChannelDeleteProc(proc);
+ } else {
+ Tcl_AppendResult(interp, "bad option \"", argv[1], "\": ",
+ "must be insert or delete", (char *) NULL);
+ return TCL_ERROR;
+ }
+
+ if (retVal == TCL_ERROR) {
+ Tcl_AppendResult(interp, "\"", argv[2], "\": ",
+ "could not be ", argv[1], "ed", (char *) NULL);
+ }
+
+ return retVal;
+}
+
+
+static Tcl_Channel
+TestOpenFileChannelProc1(interp, fileName, modeString, permissions)
+ Tcl_Interp *interp; /* Interpreter for error reporting;
+ * can be NULL. */
+ char *fileName; /* Name of file to open. */
+ char *modeString; /* A list of POSIX open modes or
+ * a string such as "rw". */
+ int permissions; /* If the open involves creating a
+ * file, with what modes to create
+ * it? */
+{
+ if (!strcmp("testOpenFileChannel1%.fil", fileName)) {
+ return (TclpOpenFileChannel(interp, "__testOpenFileChannel1%__.fil",
+ modeString, permissions));
+ } else {
+ return (NULL);
+ }
+}
+
+
+static Tcl_Channel
+TestOpenFileChannelProc2(interp, fileName, modeString, permissions)
+ Tcl_Interp *interp; /* Interpreter for error reporting;
+ * can be NULL. */
+ char *fileName; /* Name of file to open. */
+ char *modeString; /* A list of POSIX open modes or
+ * a string such as "rw". */
+ int permissions; /* If the open involves creating a
+ * file, with what modes to create
+ * it? */
+{
+ if (!strcmp("testOpenFileChannel2%.fil", fileName)) {
+ return (TclpOpenFileChannel(interp, "__testOpenFileChannel2%__.fil",
+ modeString, permissions));
+ } else {
+ return (NULL);
+ }
+}
+
+
+static Tcl_Channel
+TestOpenFileChannelProc3(interp, fileName, modeString, permissions)
+ Tcl_Interp *interp; /* Interpreter for error reporting;
+ * can be NULL. */
+ char *fileName; /* Name of file to open. */
+ char *modeString; /* A list of POSIX open modes or
+ * a string such as "rw". */
+ int permissions; /* If the open involves creating a
+ * file, with what modes to create
+ * it? */
+{
+ if (!strcmp("testOpenFileChannel3%.fil", fileName)) {
+ return (TclpOpenFileChannel(interp, "__testOpenFileChannel3%__.fil",
+ modeString, permissions));
+ } else {
+ return (NULL);
+ }
+}
diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c
index a446ece..471fe63 100644
--- a/generic/tclTestObj.c
+++ b/generic/tclTestObj.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclTestObj.c 1.35 98/02/11 16:46:28
+ * RCS: @(#) $Id: tclTestObj.c,v 1.1.2.2 1998/09/24 23:59:03 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclTimer.c b/generic/tclTimer.c
index c6c07df..1d9d373 100644
--- a/generic/tclTimer.c
+++ b/generic/tclTimer.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclTimer.c 1.19 98/02/17 23:44:52
+ * RCS: @(#) $Id: tclTimer.c,v 1.1.2.2 1998/09/24 23:59:04 stanton Exp $
*/
#include "tclInt.h"
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index aa9b0d7..1c2338b 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -10,13 +10,22 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUtil.c 1.178 98/02/19 11:51:59
+ * RCS: @(#) $Id: tclUtil.c,v 1.1.2.2 1998/09/24 23:59:04 stanton Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
/*
+ * The following variable holds the full path name of the binary
+ * from which this application was executed, or NULL if it isn't
+ * know. The value of the variable is set by the procedure
+ * Tcl_FindExecutable. The storage space is dynamically allocated.
+ */
+
+char *tclExecutableName = NULL;
+
+/*
* The following values are used in the flags returned by Tcl_ScanElement
* and used by Tcl_ConvertElement. The value TCL_DONT_USE_BRACES is also
* defined in tcl.h; make sure its value doesn't overlap with any of the
@@ -2048,3 +2057,30 @@ TclGetIntForIndex(interp, objPtr, endValue, indexPtr)
*indexPtr = index;
return TCL_OK;
}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_GetNameOfExecutable --
+ *
+ * This procedure simply returns a pointer to the internal full
+ * path name of the executable file as computed by
+ * Tcl_FindExecutable. This procedure call is the C API
+ * equivalent to the "info nameofexecutable" command.
+ *
+ * Results:
+ * A pointer to the internal string or NULL if the internal full
+ * path name has not been computed or unknown.
+ *
+ * Side effects:
+ * The object referenced by "objPtr" might be converted to an
+ * integer object.
+ *
+ *----------------------------------------------------------------------
+ */
+
+CONST char *
+Tcl_GetNameOfExecutable()
+{
+ return (tclExecutableName);
+}
diff --git a/generic/tclVar.c b/generic/tclVar.c
index 2a7e365..c4cc847 100644
--- a/generic/tclVar.c
+++ b/generic/tclVar.c
@@ -13,7 +13,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclVar.c 1.142 98/02/17 23:44:47
+ * RCS: @(#) $Id: tclVar.c,v 1.1.2.2 1998/09/24 23:59:04 stanton Exp $
*/
#include "tclInt.h"
@@ -135,7 +135,8 @@ TclLookupVar(interp, part1, part2, flags, msg, createPart1, createPart2,
* parens around the index. Otherwise they
* are NULL. These are needed to restore
* the parens after parsing the name. */
- Namespace *varNsPtr, *dummy1Ptr, *dummy2Ptr;
+ Namespace *varNsPtr, *cxtNsPtr, *dummy1Ptr, *dummy2Ptr;
+ ResolverScheme *resPtr;
Tcl_HashEntry *hPtr;
register char *p;
int new, i, result;
@@ -145,9 +146,6 @@ TclLookupVar(interp, part1, part2, flags, msg, createPart1, createPart2,
openParen = closeParen = NULL;
varNsPtr = NULL; /* set non-NULL if a nonlocal variable */
-
- elName = part2;
-
/*
* Parse part1 into array name and index.
* Always check if part1 is an array element name and allow it only if
@@ -158,6 +156,7 @@ TclLookupVar(interp, part1, part2, flags, msg, createPart1, createPart2,
* the part2's test and error reporting or move that code in array set)
*/
+ elName = part2;
for (p = part1; *p ; p++) {
if (*p == '(') {
openParen = p;
@@ -184,6 +183,44 @@ TclLookupVar(interp, part1, part2, flags, msg, createPart1, createPart2,
}
/*
+ * If this namespace has a variable resolver, then give it first
+ * crack at the variable resolution. It may return a Tcl_Var
+ * value, it may signal to continue onward, or it may signal
+ * an error.
+ */
+ if ((flags & TCL_GLOBAL_ONLY) != 0 || iPtr->varFramePtr == NULL) {
+ cxtNsPtr = iPtr->globalNsPtr;
+ } else {
+ cxtNsPtr = iPtr->varFramePtr->nsPtr;
+ }
+
+ if (cxtNsPtr->varResProc != NULL || iPtr->resolverPtr != NULL) {
+ resPtr = iPtr->resolverPtr;
+
+ if (cxtNsPtr->varResProc) {
+ result = (*cxtNsPtr->varResProc)(interp, part1,
+ (Tcl_Namespace *) cxtNsPtr, flags, &var);
+ } else {
+ result = TCL_CONTINUE;
+ }
+
+ while (result == TCL_CONTINUE && resPtr) {
+ if (resPtr->varResProc) {
+ result = (*resPtr->varResProc)(interp, part1,
+ (Tcl_Namespace *) cxtNsPtr, flags, &var);
+ }
+ resPtr = resPtr->nextPtr;
+ }
+
+ if (result == TCL_OK) {
+ varPtr = (Var *) var;
+ goto lookupVarPart2;
+ } else if (result != TCL_CONTINUE) {
+ return (Var *) NULL;
+ }
+ }
+
+ /*
* Look up part1. Look it up as either a namespace variable or as a
* local variable in a procedure call frame (varFramePtr).
* Interpret part1 as a namespace variable if:
@@ -254,7 +291,7 @@ TclLookupVar(interp, part1, part2, flags, msg, createPart1, createPart2,
int part1Len = strlen(part1);
for (i = 0; i < localCt; i++) {
- if (!localPtr->isTemp) {
+ if (!TclIsVarTemporary(localPtr)) {
register char *localName = localVarPtr->name;
if ((part1[0] == localName[0])
&& (part1Len == localPtr->nameLength)
@@ -299,6 +336,8 @@ TclLookupVar(interp, part1, part2, flags, msg, createPart1, createPart2,
}
}
}
+
+lookupVarPart2:
if (openParen != NULL) {
*openParen = '(';
openParen = NULL;
@@ -2671,9 +2710,18 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
int objc; /* Number of arguments. */
Tcl_Obj *CONST objv[]; /* Argument objects. */
{
+ /*
+ * The list of constants below should match the arrayOptions string array
+ * below.
+ */
+
+ enum {ARRAY_ANYMORE, ARRAY_DONESEARCH, ARRAY_EXISTS, ARRAY_GET,
+ ARRAY_NAMES, ARRAY_NEXTELEMENT, ARRAY_SET, ARRAY_SIZE,
+ ARRAY_STARTSEARCH};
static char *arrayOptions[] = {"anymore", "donesearch", "exists",
"get", "names", "nextelement", "set", "size", "startsearch",
(char *) NULL};
+
Interp *iPtr = (Interp *) interp;
Var *varPtr, *arrayPtr;
Tcl_HashEntry *hPtr;
@@ -2723,7 +2771,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
}
switch (index) {
- case 0: { /* anymore */
+ case ARRAY_ANYMORE: {
ArraySearch *searchPtr;
char *searchId;
@@ -2758,7 +2806,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
Tcl_SetIntObj(resultPtr, 1);
break;
}
- case 1: { /* donesearch */
+ case ARRAY_DONESEARCH: {
ArraySearch *searchPtr, *prevPtr;
char *searchId;
@@ -2789,7 +2837,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
ckfree((char *) searchPtr);
break;
}
- case 2: { /* exists */
+ case ARRAY_EXISTS: {
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "arrayName");
return TCL_ERROR;
@@ -2797,7 +2845,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
Tcl_SetIntObj(resultPtr, !notArray);
break;
}
- case 3: { /*get*/
+ case ARRAY_GET: {
Tcl_HashSearch search;
Var *varPtr2;
char *pattern = NULL;
@@ -2849,7 +2897,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
}
break;
}
- case 4: { /* names */
+ case ARRAY_NAMES: {
Tcl_HashSearch search;
Var *varPtr2;
char *pattern = NULL;
@@ -2886,7 +2934,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
}
break;
}
- case 5: { /*nextelement*/
+ case ARRAY_NEXTELEMENT: {
ArraySearch *searchPtr;
char *searchId;
Tcl_HashEntry *hPtr;
@@ -2925,7 +2973,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
Tcl_GetHashKey(varPtr->value.tablePtr, hPtr), -1);
break;
}
- case 6: { /*set*/
+ case ARRAY_SET: {
Tcl_Obj **elemPtrs;
int listLen, i, result;
@@ -2953,31 +3001,49 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
break;
}
}
- } else if (varPtr == NULL) {
- /*
- * The list is empty and the array variable doesn't
- * exist yet: create the variable with an empty array
- * as the value.
- */
-
- Tcl_Obj *valuePtr;
+ return result;
+ }
- valuePtr = Tcl_NewObj();
- if (Tcl_SetObjVar2(interp, Tcl_GetString(objv[2]),
- "tempElem", valuePtr, /* flags*/ 0) == NULL) {
- Tcl_DecrRefCount(valuePtr);
+ /*
+ * The list is empty make sure we have an array, or create
+ * one if necessary.
+ */
+
+ if (varPtr != NULL) {
+ if (!TclIsVarUndefined(varPtr) && TclIsVarArray(varPtr)) {
+ /*
+ * Already an array, done.
+ */
+
+ return TCL_OK;
+ }
+ if (TclIsVarArrayElement(varPtr) ||
+ !TclIsVarUndefined(varPtr)) {
+ /*
+ * Either an array element, or a scalar: lose!
+ */
+
+ VarErrMsg(interp, varName, (char *)NULL, "array set",
+ needArray);
return TCL_ERROR;
- }
- result = Tcl_UnsetVar2(interp, varName, "tempElem",
- TCL_LEAVE_ERR_MSG);
- if (result != TCL_OK) {
- Tcl_DecrRefCount(valuePtr);
- return result;
- }
+ }
+ } else {
+ /*
+ * Create variable for new array.
+ */
+
+ varPtr = TclLookupVar(interp, varName, (char *) NULL, 0, 0,
+ /*createPart1*/ 1, /*createPart2*/ 0,
+ &arrayPtr);
}
- return result;
+ TclSetVarArray(varPtr);
+ TclClearVarUndefined(varPtr);
+ varPtr->value.tablePtr =
+ (Tcl_HashTable *) ckalloc(sizeof(Tcl_HashTable));
+ Tcl_InitHashTable(varPtr->value.tablePtr, TCL_STRING_KEYS);
+ return TCL_OK;
}
- case 7: { /*size*/
+ case ARRAY_SIZE: {
Tcl_HashSearch search;
Var *varPtr2;
int size;
@@ -3001,7 +3067,7 @@ Tcl_ArrayObjCmd(dummy, interp, objc, objv)
Tcl_SetIntObj(resultPtr, size);
break;
}
- case 8: { /*startsearch*/
+ case ARRAY_STARTSEARCH: {
ArraySearch *searchPtr;
if (objc != 3) {
@@ -3145,7 +3211,7 @@ MakeUpvar(iPtr, framePtr, otherP1, otherP2, otherFlags, myName, myFlags)
* leaving the namespace var's reference invalid.
*/
- if (otherPtr->nsPtr == NULL) {
+ if ((otherP2 ? arrayPtr->nsPtr : otherPtr->nsPtr) == NULL) {
Tcl_AppendResult((Tcl_Interp *) iPtr, "bad variable name \"",
myName, "\": upvar won't create namespace variable that refers to procedure variable",
(char *) NULL);
@@ -3171,7 +3237,7 @@ MakeUpvar(iPtr, framePtr, otherP1, otherP2, otherFlags, myName, myFlags)
varPtr = NULL;
for (i = 0; i < localCt; i++) {
- if (!localPtr->isTemp) {
+ if (!TclIsVarTemporary(localPtr)) {
char *localName = localVarPtr->name;
if ((myName[0] == localName[0])
&& (nameLen == localPtr->nameLength)
@@ -4129,6 +4195,7 @@ TclDeleteVars(iPtr, tablePtr)
if (TclIsVarArray(varPtr)) {
DeleteArray(iPtr, Tcl_GetHashKey(tablePtr, hPtr), varPtr,
flags);
+ varPtr->value.tablePtr = NULL;
}
if (TclIsVarScalar(varPtr) && (varPtr->value.objPtr != NULL)) {
objPtr = varPtr->value.objPtr;
diff --git a/library/auto.tcl b/library/auto.tcl
index c2050e5..dfb9b6c 100644
--- a/library/auto.tcl
+++ b/library/auto.tcl
@@ -12,107 +12,6 @@
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# auto_execok --
-#
-# Returns string that indicates name of program to execute if
-# name corresponds to a shell builtin or an executable in the
-# Windows search path, or "" otherwise. Builds an associative
-# array auto_execs that caches information about previous checks,
-# for speed.
-#
-# Arguments:
-# name - Name of a command.
-
-if {[string compare $tcl_platform(platform) windows] == 0} {
-# Windows version.
-#
-# Note that info executable doesn't work under Windows, so we have to
-# look for files with .exe, .com, or .bat extensions. Also, the path
-# may be in the Path or PATH environment variables, and path
-# components are separated with semicolons, not colons as under Unix.
-#
- proc auto_execok name {
- global auto_execs env tcl_platform
-
- if {[info exists auto_execs($name)]} {
- return $auto_execs($name)
- }
- set auto_execs($name) ""
-
- if {[lsearch -exact {cls copy date del erase dir echo mkdir md rename
- ren rmdir rd time type ver vol} $name] != -1} {
- return [set auto_execs($name) [list $env(COMSPEC) /c $name]]
- }
-
- if {[llength [file split $name]] != 1} {
- foreach ext {{} .com .exe .bat} {
- set file ${name}${ext}
- if {[file exists $file] && ![file isdirectory $file]} {
- return [set auto_execs($name) [list $file]]
- }
- }
- return ""
- }
-
- set path "[file dirname [info nameof]];.;"
- if {[info exists env(WINDIR)]} {
- set windir $env(WINDIR)
- }
- if {[info exists windir]} {
- if {$tcl_platform(os) == "Windows NT"} {
- append path "$windir/system32;"
- }
- append path "$windir/system;$windir;"
- }
-
- if {[info exists env(PATH)]} {
- append path $env(PATH)
- }
-
- foreach dir [split $path {;}] {
- if {$dir == ""} {
- set dir .
- }
- foreach ext {{} .com .exe .bat} {
- set file [file join $dir ${name}${ext}]
- if {[file exists $file] && ![file isdirectory $file]} {
- return [set auto_execs($name) [list $file]]
- }
- }
- }
- return ""
-}
-
-} else {
-# Unix version.
-#
-proc auto_execok name {
- global auto_execs env
-
- if {[info exists auto_execs($name)]} {
- return $auto_execs($name)
- }
- set auto_execs($name) ""
- if {[llength [file split $name]] != 1} {
- if {[file executable $name] && ![file isdirectory $name]} {
- set auto_execs($name) [list $name]
- }
- return $auto_execs($name)
- }
- foreach dir [split $env(PATH) :] {
- if {$dir == ""} {
- set dir .
- }
- set file [file join $dir $name]
- if {[file executable $file] && ![file isdirectory $file]} {
- set auto_execs($name) [list $file]
- return $auto_execs($name)
- }
- }
- return ""
-}
-
-}
# auto_reset --
# Destroy all cached information for auto-loading and auto-execution,
# so that the information gets recomputed the next time it's needed.
@@ -126,7 +25,7 @@ proc auto_reset {} {
global auto_execs auto_index auto_oldpath
foreach p [info procs] {
if {[info exists auto_index($p)] && ![string match auto_* $p]
- && ([lsearch -exact {unknown pkg_mkIndex tclPkgSetup
+ && ([lsearch -exact {unknown pkg_mkIndex tclPkgSetup tcl_findLibrary
tclMacPkgSearch tclPkgUnknown} $p] < 0)} {
rename $p {}
}
@@ -136,21 +35,169 @@ proc auto_reset {} {
catch {unset auto_oldpath}
}
+
+# tcl_findLibrary
+# This is a utility for extensions that searches for a library directory
+# using a canonical searching algorithm. A side effect is to source
+# the initialization script and set a global library variable.
+# Arguments:
+# basename Prefix of the directory name, (e.g., "tk")
+# version Version number of the package, (e.g., "8.0")
+# patch Patchlevel of the package, (e.g., "8.0.3")
+# initScript Initialization script to source (e.g., tk.tcl)
+# enVarName environment variable to honor (e.g., TK_LIBRARY)
+# varName Global variable to set when done (e.g., tk_library)
+
+proc tcl_findLibrary {basename version patch initScript enVarName varName} {
+ upvar #0 $varName the_library
+ global env
+
+ set dirs {}
+ set errors {}
+
+ # The C application may have hardwired a path, which we honor
+
+ if {[info exist the_library]} {
+ lappend dirs $the_library
+ } else {
+
+ # Do the canonical search
+
+ # 1. From an environment variable, if it exists
+
+ if {[info exists env($enVarName)]} {
+ lappend dirs $env($enVarName)
+ }
+
+ # 2. Relative to the Tcl library
+
+ lappend dirs [file join [file dirname [info library]] $basename$version]
+
+ # 3. Various locations relative to the executable
+ # ../lib/foo1.0 (From bin directory in install hierarchy)
+ # ../../lib/foo1.0 (From bin/arch directory in install hierarchy)
+ # ../library (From unix directory in build hierarchy)
+ # ../../library (From unix/arch directory in build hierarchy)
+ # ../../foo1.0b1/library (From unix directory in parallel build hierarchy)
+ # ../../../foo1.0b1/library (From unix/arch directory in parallel build hierarchy)
+
+ set parentDir [file dirname [file dirname [info nameofexecutable]]]
+ set grandParentDir [file dirname $parentDir]
+ lappend dirs [file join $parentDir lib $basename$version]
+ lappend dirs [file join $grandParentDir lib $basename$version]
+ lappend dirs [file join $parentDir library]
+ lappend dirs [file join $grandParentDir library]
+ if [string match {*[ab]*} $patch] {
+ set ver $patch
+ } else {
+ set ver $version
+ }
+ lappend dirs [file join $grandParentDir] $basename$ver library]
+ lappend dirs [file join [file dirname $grandParentDir] $basename$ver library]
+ }
+ foreach i $dirs {
+ set the_library $i
+ set file [file join $i $initScript]
+
+ # source everything when in a safe interpreter because
+ # we have a source command, but no file exists command
+
+ if {[interp issafe] || [file exists $file]} {
+ if {![catch {uplevel #0 [list source $file]} msg]} {
+ return
+ } else {
+ append errors "$file: $msg\n$errorInfo\n"
+ }
+ }
+ }
+ set msg "Can't find a usable $initScript in the following directories: \n"
+ append msg " $dirs\n\n"
+ append msg "$errors\n\n"
+ append msg "This probably means that $basename wasn't installed properly.\n"
+ error $msg
+}
+
+
+# OPTIONAL SUPPORT PROCEDURES
+# In Tcl 8.1 all the code below here has been moved to other files to
+# reduce the size of init.tcl
+
+# ----------------------------------------------------------------------
+# auto_mkindex
+# ----------------------------------------------------------------------
+# The following procedures are used to generate the tclIndex file
+# from Tcl source files. They use a special safe interpreter to
+# parse Tcl source files, writing out index entries as "proc"
+# commands are encountered. This implementation won't work in a
+# safe interpreter, since a safe interpreter can't create the
+# special parser and mess with its commands. If this is a safe
+# interpreter, we simply clip these procs out.
+
+if {[interp issafe]} {
+ proc auto_mkindex {dir args} {
+ error "can't generate index within safe interpreter"
+ }
+ proc tcl_nonsafe {args} {}
+} else {
+ proc tcl_nonsafe {args} {eval $args}
+}
+
# auto_mkindex --
# Regenerate a tclIndex file from Tcl source files. Takes as argument
# the name of the directory in which the tclIndex file is to be placed,
# followed by any number of glob patterns to use in that directory to
-# locate all of the relevant files. It does not parse or source the file
-# so the generated index will not contain the appropriate namespace qualifiers
-# if you don't explicitly specify it.
+# locate all of the relevant files.
#
# Arguments:
-# dir - Name of the directory in which to create an index.
-# args - Any number of additional arguments giving the
-# names of files within dir. If no additional
-# are given auto_mkindex will look for *.tcl.
+# dir - Name of the directory in which to create an index.
+# args - Any number of additional arguments giving the
+# names of files within dir. If no additional
+# are given auto_mkindex will look for *.tcl.
+
+tcl_nonsafe proc auto_mkindex {dir args} {
+ global errorCode errorInfo
+
+ if {[interp issafe]} {
+ error "can't generate index within safe interpreter"
+ }
+
+ set oldDir [pwd]
+ cd $dir
+ set dir [pwd]
+
+ append index "# Tcl autoload index file, version 2.0\n"
+ append index "# This file is generated by the \"auto_mkindex\" command\n"
+ append index "# and sourced to set up indexing information for one or\n"
+ append index "# more commands. Typically each line is a command that\n"
+ append index "# sets an element in the auto_index array, where the\n"
+ append index "# element name is the name of a command and the value is\n"
+ append index "# a script that loads the command.\n\n"
+ if {$args == ""} {
+ set args *.tcl
+ }
+ auto_mkindex_parser::init
+ foreach file [eval glob $args] {
+ if {[catch {auto_mkindex_parser::mkindex $file} msg] == 0} {
+ append index $msg
+ } else {
+ set code $errorCode
+ set info $errorInfo
+ cd $oldDir
+ error $msg $info $code
+ }
+ }
+ auto_mkindex_parser::cleanup
-proc auto_mkindex {dir args} {
+ set fid [open "tclIndex" w]
+ puts $fid $index nonewline
+ close $fid
+ cd $oldDir
+}
+
+# Original version of auto_mkindex that just searches the source
+# code for "proc" at the beginning of the line.
+
+proc auto_mkindex_old {dir args} {
global errorCode errorInfo
set oldDir [pwd]
cd $dir
@@ -201,3 +248,263 @@ proc auto_mkindex {dir args} {
error $msg $info $code
}
}
+
+# Create a safe interpreter that can be used to parse Tcl source files
+# generate a tclIndex file for autoloading. This interp contains
+# commands for things that need index entries. Each time a command
+# is executed, it writes an entry out to the index file.
+
+namespace eval auto_mkindex_parser {
+ variable parser "" ;# parser used to build index
+ variable index "" ;# maintains index as it is built
+ variable scriptFile "" ;# name of file being processed
+ variable contextStack "" ;# stack of namespace scopes
+ variable imports "" ;# keeps track of all imported cmds
+ variable initCommands "" ;# list of commands that create aliases
+ proc init {} {
+ variable parser
+ variable initCommands
+ if {![interp issafe]} {
+ set parser [interp create -safe]
+ $parser hide info
+ $parser hide rename
+ $parser hide proc
+ $parser hide namespace
+ $parser hide eval
+ $parser hide puts
+ $parser invokehidden namespace delete ::
+ $parser invokehidden proc unknown {args} {}
+
+ #
+ # We'll need access to the "namespace" command within the
+ # interp. Put it back, but move it out of the way.
+ #
+ $parser expose namespace
+ $parser invokehidden rename namespace _%@namespace
+ $parser expose eval
+ $parser invokehidden rename eval _%@eval
+
+ # Install all the registered psuedo-command implementations
+
+ foreach cmd $initCommands {
+ eval $cmd
+ }
+ }
+ }
+ proc cleanup {} {
+ variable parser
+ interp delete $parser
+ unset parser
+ }
+}
+
+# auto_mkindex_parser::mkindex --
+# Used by the "auto_mkindex" command to create a "tclIndex" file for
+# the given Tcl source file. Executes the commands in the file, and
+# handles things like the "proc" command by adding an entry for the
+# index file. Returns a string that represents the index file.
+#
+# Arguments:
+# file - Name of Tcl source file to be indexed.
+
+tcl_nonsafe proc auto_mkindex_parser::mkindex {file} {
+ variable parser
+ variable index
+ variable scriptFile
+ variable contextStack
+ variable imports
+
+ set scriptFile $file
+
+ set fid [open $file]
+ set contents [read $fid]
+ close $fid
+
+ # There is one problem with sourcing files into the safe
+ # interpreter: references like "$x" will fail since code is not
+ # really being executed and variables do not really exist.
+ # Be careful to escape all naked "$" before evaluating.
+
+ regsub -all {([^\$])\$([^\$])} $contents {\1\\$\2} contents
+
+ set index ""
+ set contextStack ""
+ set imports ""
+
+ $parser eval $contents
+
+ foreach name $imports {
+ catch {$parser eval [list _%@namespace forget $name]}
+ }
+ return $index
+}
+
+# auto_mkindex_parser::hook command
+# Registers a Tcl command to evaluate when initializing the
+# slave interpreter used by the mkindex parser.
+# The command is evaluated in the master interpreter, and can
+# use the variable auto_mkindex_parser::parser to get to the slave
+
+tcl_nonsafe proc auto_mkindex_parser::hook {cmd} {
+ variable initCommands
+
+ lappend initCommands $cmd
+}
+
+# auto_mkindex_parser::slavehook command
+# Registers a Tcl command to evaluate when initializing the
+# slave interpreter used by the mkindex parser.
+# The command is evaluated in the slave interpreter.
+
+tcl_nonsafe proc auto_mkindex_parser::slavehook {cmd} {
+ variable initCommands
+
+ lappend initCommands "\$parser eval [list $cmd]"
+}
+
+# auto_mkindex_parser::command --
+# Registers a new command with the "auto_mkindex_parser" interpreter
+# that parses Tcl files. These commands are fake versions of things
+# like the "proc" command. When you execute them, they simply write
+# out an entry to a "tclIndex" file for auto-loading.
+#
+# This procedure allows extensions to register their own commands
+# with the auto_mkindex facility. For example, a package like
+# [incr Tcl] might register a "class" command so that class definitions
+# could be added to a "tclIndex" file for auto-loading.
+#
+# Arguments:
+# name - Name of command recognized in Tcl files.
+# arglist - Argument list for command.
+# body - Implementation of command to handle indexing.
+
+tcl_nonsafe proc auto_mkindex_parser::command {name arglist body} {
+ hook [list auto_mkindex_parser::commandInit $name $arglist $body]
+}
+
+# auto_mkindex_parser::commandInit --
+# This does the actual work set up by auto_mkindex_parser::command
+# This is called when the interpreter used by the parser is created.
+
+tcl_nonsafe proc auto_mkindex_parser::commandInit {name arglist body} {
+ variable parser
+
+ set ns [namespace qualifiers $name]
+ set tail [namespace tail $name]
+ if {$ns == ""} {
+ set fakeName "[namespace current]::_%@fake_$tail"
+ } else {
+ set fakeName "_%@fake_$name"
+ regsub -all {::} $fakeName "_" fakeName
+ set fakeName "[namespace current]::$fakeName"
+ }
+ proc $fakeName $arglist $body
+
+ #
+ # YUK! Tcl won't let us alias fully qualified command names,
+ # so we can't handle names like "::itcl::class". Instead,
+ # we have to build procs with the fully qualified names, and
+ # have the procs point to the aliases.
+ #
+ if {[regexp {::} $name]} {
+ set exportCmd [list _%@namespace export [namespace tail $name]]
+ $parser eval [list _%@namespace eval $ns $exportCmd]
+ set alias [namespace tail $fakeName]
+ $parser invokehidden proc $name {args} "_%@eval $alias \$args"
+ $parser alias $alias $fakeName
+ } else {
+ $parser alias $name $fakeName
+ }
+ return
+}
+
+# auto_mkindex_parser::fullname --
+# Used by commands like "proc" within the auto_mkindex parser.
+# Returns the qualified namespace name for the "name" argument.
+# If the "name" does not start with "::", elements are added from
+# the current namespace stack to produce a qualified name. Then,
+# the name is examined to see whether or not it should really be
+# qualified. If the name has more than the leading "::", it is
+# returned as a fully qualified name. Otherwise, it is returned
+# as a simple name. That way, the Tcl autoloader will recognize
+# it properly.
+#
+# Arguments:
+# name - Name that is being added to index.
+
+tcl_nonsafe proc auto_mkindex_parser::fullname {name} {
+ variable contextStack
+
+ if {![string match ::* $name]} {
+ foreach ns $contextStack {
+ set name "${ns}::$name"
+ if {[string match ::* $name]} {
+ break
+ }
+ }
+ }
+
+ if {[namespace qualifiers $name] == ""} {
+ return [namespace tail $name]
+ } elseif {![string match ::* $name]} {
+ return "::$name"
+ }
+ return $name
+}
+
+# Register all of the procedures for the auto_mkindex parser that
+# will build the "tclIndex" file.
+
+# AUTO MKINDEX: proc name arglist body
+# Adds an entry to the auto index list for the given procedure name.
+
+tcl_nonsafe auto_mkindex_parser::command proc {name args} {
+ variable index
+ variable scriptFile
+ append index "set [list auto_index([fullname $name])]"
+ append index " \[list source \[file join \$dir [list $scriptFile]\]\]\n"
+}
+
+# AUTO MKINDEX: namespace eval name command ?arg arg...?
+# Adds the namespace name onto the context stack and evaluates the
+# associated body of commands.
+#
+# AUTO MKINDEX: namespace import ?-force? pattern ?pattern...?
+# Performs the "import" action in the parser interpreter. This is
+# important for any commands contained in a namespace that affect
+# the index. For example, a script may say "itcl::class ...",
+# or it may import "itcl::*" and then say "class ...". This
+# procedure does the import operation, but keeps track of imported
+# patterns so we can remove the imports later.
+
+tcl_nonsafe auto_mkindex_parser::command namespace {op args} {
+ switch -- $op {
+ eval {
+ variable parser
+ variable contextStack
+
+ set name [lindex $args 0]
+ set args [lrange $args 1 end]
+
+ set contextStack [linsert $contextStack 0 $name]
+ if {[llength $args] == 1} {
+ $parser eval [lindex $args 0]
+ } else {
+ eval $parser eval $args
+ }
+ set contextStack [lrange $contextStack 1 end]
+ }
+ import {
+ variable parser
+ variable imports
+ foreach pattern $args {
+ if {$pattern != "-force"} {
+ lappend imports $pattern
+ }
+ }
+ catch {$parser eval "_%@namespace import $args"}
+ }
+ }
+}
+
+rename tcl_nonsafe ""
diff --git a/library/history.tcl b/library/history.tcl
index c347ac0..79b3eb6 100644
--- a/library/history.tcl
+++ b/library/history.tcl
@@ -2,7 +2,7 @@
#
# Implementation of the history command.
#
-# SCCS: @(#) history.tcl 1.8 97/12/03 11:57:51
+# RCS: @(#) $Id: history.tcl,v 1.1.2.2 1998/09/24 23:59:05 stanton Exp $
#
# Copyright (c) 1997 Sun Microsystems, Inc.
#
diff --git a/library/http/http.tcl b/library/http/http.tcl
index 89f9600..e61c16a 100644
--- a/library/http/http.tcl
+++ b/library/http/http.tcl
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) http.tcl 1.11 98/02/18 18:06:40
+# RCS: @(#) $Id: http.tcl,v 1.1.2.2 1998/09/24 23:59:07 stanton Exp $
package provide http 2.0 ;# This uses Tcl namespaces
diff --git a/library/http1.0/http.tcl b/library/http1.0/http.tcl
index 2311a31..b3ade0b 100644
--- a/library/http1.0/http.tcl
+++ b/library/http1.0/http.tcl
@@ -5,7 +5,7 @@
# These procedures use a callback interface to avoid using vwait,
# which is not defined in the safe base.
#
-# SCCS: @(#) http.tcl 1.11 97/12/03 13:02:39
+# RCS: @(#) $Id: http.tcl,v 1.1.2.2 1998/09/24 23:59:07 stanton Exp $
#
# See the http.n man page for documentation
diff --git a/library/http2.0/http.tcl b/library/http2.0/http.tcl
index 89f9600..e61c16a 100644
--- a/library/http2.0/http.tcl
+++ b/library/http2.0/http.tcl
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) http.tcl 1.11 98/02/18 18:06:40
+# RCS: @(#) $Id: http.tcl,v 1.1.2.2 1998/09/24 23:59:07 stanton Exp $
package provide http 2.0 ;# This uses Tcl namespaces
diff --git a/library/http2.1/http.tcl b/library/http2.1/http.tcl
index 89f9600..e61c16a 100644
--- a/library/http2.1/http.tcl
+++ b/library/http2.1/http.tcl
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) http.tcl 1.11 98/02/18 18:06:40
+# RCS: @(#) $Id: http.tcl,v 1.1.2.2 1998/09/24 23:59:07 stanton Exp $
package provide http 2.0 ;# This uses Tcl namespaces
diff --git a/library/http2.3/http.tcl b/library/http2.3/http.tcl
index 89f9600..e61c16a 100644
--- a/library/http2.3/http.tcl
+++ b/library/http2.3/http.tcl
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and
# redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) http.tcl 1.11 98/02/18 18:06:40
+# RCS: @(#) $Id: http.tcl,v 1.1.2.2 1998/09/24 23:59:07 stanton Exp $
package provide http 2.0 ;# This uses Tcl namespaces
diff --git a/library/init.tcl b/library/init.tcl
index 8a89774..fd1d8ad 100644
--- a/library/init.tcl
+++ b/library/init.tcl
@@ -3,7 +3,7 @@
# Default system startup file for Tcl-based applications. Defines
# "unknown" procedure and auto-load facilities.
#
-# SCCS: @(#) init.tcl 1.104 98/01/09 17:52:21
+# RCS: @(#) $Id: init.tcl,v 1.1.2.2 1998/09/24 23:59:06 stanton Exp $
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994-1996 Sun Microsystems, Inc.
@@ -78,6 +78,12 @@ if {(![interp issafe]) && ($tcl_platform(platform) == "windows")} {
}
}
}
+ if {[info exists p]} {
+ unset p
+ }
+ if {[info exists u]} {
+ unset u
+ }
if {![info exists env(COMSPEC)]} {
if {$tcl_platform(os) == {Windows NT}} {
set env(COMSPEC) cmd.exe
@@ -113,19 +119,16 @@ if {[info commands tclLog] == ""} {
}
}
-# The procs defined in this file that have a leading space
-# are 'hidden' from auto_mkindex because they are not
-# auto-loadable.
-
-
# unknown --
# This procedure is called when a Tcl command is invoked that doesn't
# exist in the interpreter. It takes the following steps to make the
# command available:
#
-# 1. See if the autoload facility can locate the command in a
+# 1. See if the command has the form "namespace inscope ns cmd" and
+# if so, concatenate its arguments onto the end and evaluate it.
+# 2. See if the autoload facility can locate the command in a
# Tcl script file. If so, load it and execute it.
-# 2. If the command was invoked interactively at top-level:
+# 3. If the command was invoked interactively at top-level:
# (a) see if the command exists as an executable UNIX program.
# If so, "exec" the command.
# (b) see if the command requests csh-like history substitution
@@ -138,10 +141,24 @@ if {[info commands tclLog] == ""} {
# args - A list whose elements are the words of the original
# command, including the command name.
- proc unknown args {
+proc unknown args {
global auto_noexec auto_noload env unknown_pending tcl_interactive
global errorCode errorInfo
+ # If the command word has the form "namespace inscope ns cmd"
+ # then concatenate its arguments onto the end and evaluate it.
+
+ set cmd [lindex $args 0]
+ if {[regexp "^namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} {
+ set arglist [lrange $args 1 end]
+ set ret [catch {uplevel $cmd $arglist} result]
+ if {$ret == 0} {
+ return $result
+ } else {
+ return -code $ret -errorcode $errorCode $result
+ }
+ }
+
# Save the values of errorCode and errorInfo variables, since they
# may get modified if caught errors occur below. The variables will
# be restored just before re-executing the missing command.
@@ -251,8 +268,8 @@ if {[info commands tclLog] == ""} {
# a canonical namespace as returned [namespace current]
# for instance. If not given, namespace current is used.
- proc auto_load {cmd {namespace {}}} {
- global auto_index auto_oldpath auto_path env errorInfo errorCode
+proc auto_load {cmd {namespace {}}} {
+ global auto_index auto_oldpath auto_path
if {[string length $namespace] == 0} {
set namespace [uplevel {namespace current}]
@@ -270,6 +287,34 @@ if {[info commands tclLog] == ""} {
if {![info exists auto_path]} {
return 0
}
+
+ if {![auto_load_index]} {
+ return 0
+ }
+
+ foreach name $nameList {
+ if {[info exists auto_index($name)]} {
+ uplevel #0 $auto_index($name)
+ if {[info commands $name] != ""} {
+ return 1
+ }
+ }
+ }
+ return 0
+}
+
+# auto_load_index --
+# Loads the contents of tclIndex files on the auto_path directory
+# list. This is usually invoked within auto_load to load the index
+# of available commands. Returns 1 if the index is loaded, and 0 if
+# the index is already loaded and up to date.
+#
+# Arguments:
+# None.
+
+proc auto_load_index {} {
+ global auto_index auto_oldpath auto_path errorInfo errorCode
+
if {[info exists auto_oldpath]} {
if {$auto_oldpath == $auto_path} {
return 0
@@ -317,15 +362,7 @@ if {[info commands tclLog] == ""} {
}
}
}
- foreach name $nameList {
- if {[info exists auto_index($name)]} {
- uplevel #0 $auto_index($name)
- if {[info commands $name] != ""} {
- return 1
- }
- }
- }
- return 0
+ return 1
}
# auto_qualify --
@@ -342,7 +379,7 @@ if {[info commands tclLog] == ""} {
# a canonical namespace as returned by [namespace current]
# for instance.
- proc auto_qualify {cmd namespace} {
+proc auto_qualify {cmd namespace} {
# count separators and clean them up
# (making sure that foo:::::bar will be treated as foo::bar)
@@ -387,3 +424,131 @@ if {[info commands tclLog] == ""} {
}
}
+# auto_import --
+# invoked during "namespace import" to make see if the imported commands
+# reside in an autoloaded library. If so, the commands are loaded so
+# that they will be available for the import links. If not, then this
+# procedure does nothing.
+#
+# Arguments -
+# pattern The pattern of commands being imported (like "foo::*")
+# a canonical namespace as returned by [namespace current]
+
+proc auto_import {pattern} {
+ global auto_index
+
+ set ns [uplevel namespace current]
+ set patternList [auto_qualify $pattern $ns]
+
+ auto_load_index
+
+ foreach pattern $patternList {
+ foreach name [array names auto_index] {
+ if {[string match $pattern $name] && "" == [info commands $name]} {
+ uplevel #0 $auto_index($name)
+ }
+ }
+ }
+}
+
+# auto_execok --
+#
+# Returns string that indicates name of program to execute if
+# name corresponds to a shell builtin or an executable in the
+# Windows search path, or "" otherwise. Builds an associative
+# array auto_execs that caches information about previous checks,
+# for speed.
+#
+# Arguments:
+# name - Name of a command.
+
+if {[string compare $tcl_platform(platform) windows] == 0} {
+# Windows version.
+#
+# Note that info executable doesn't work under Windows, so we have to
+# look for files with .exe, .com, or .bat extensions. Also, the path
+# may be in the Path or PATH environment variables, and path
+# components are separated with semicolons, not colons as under Unix.
+#
+proc auto_execok name {
+ global auto_execs env tcl_platform
+
+ if {[info exists auto_execs($name)]} {
+ return $auto_execs($name)
+ }
+ set auto_execs($name) ""
+
+ if {[lsearch -exact {cls copy date del erase dir echo mkdir md rename
+ ren rmdir rd time type ver vol} $name] != -1} {
+ return [set auto_execs($name) [list $env(COMSPEC) /c $name]]
+ }
+
+ if {[llength [file split $name]] != 1} {
+ foreach ext {{} .com .exe .bat} {
+ set file ${name}${ext}
+ if {[file exists $file] && ![file isdirectory $file]} {
+ return [set auto_execs($name) [list $file]]
+ }
+ }
+ return ""
+ }
+
+ set path "[file dirname [info nameof]];.;"
+ if {[info exists env(WINDIR)]} {
+ set windir $env(WINDIR)
+ }
+ if {[info exists windir]} {
+ if {$tcl_platform(os) == "Windows NT"} {
+ append path "$windir/system32;"
+ }
+ append path "$windir/system;$windir;"
+ }
+
+ if {[info exists env(PATH)]} {
+ append path $env(PATH)
+ }
+
+ foreach dir [split $path {;}] {
+ if {$dir == ""} {
+ set dir .
+ }
+ foreach ext {{} .com .exe .bat} {
+ set file [file join $dir ${name}${ext}]
+ if {[file exists $file] && ![file isdirectory $file]} {
+ return [set auto_execs($name) [list $file]]
+ }
+ }
+ }
+ return ""
+}
+
+} else {
+# Unix version.
+#
+proc auto_execok name {
+ global auto_execs env
+
+ if {[info exists auto_execs($name)]} {
+ return $auto_execs($name)
+ }
+ set auto_execs($name) ""
+ if {[llength [file split $name]] != 1} {
+ if {[file executable $name] && ![file isdirectory $name]} {
+ set auto_execs($name) [list $name]
+ }
+ return $auto_execs($name)
+ }
+ foreach dir [split $env(PATH) :] {
+ if {$dir == ""} {
+ set dir .
+ }
+ set file [file join $dir $name]
+ if {[file executable $file] && ![file isdirectory $file]} {
+ set auto_execs($name) [list $file]
+ return $auto_execs($name)
+ }
+ }
+ return ""
+}
+
+}
diff --git a/library/ldAout.tcl b/library/ldAout.tcl
index 7914508..788f5cf 100644
--- a/library/ldAout.tcl
+++ b/library/ldAout.tcl
@@ -18,7 +18,7 @@
# its .o file placed before all others in the command; then
# "ld" is executed to bind the objects together.
#
-# SCCS: @(#) ldAout.tcl 1.12 96/11/30 17:11:02
+# RCS: @(#) $Id: ldAout.tcl,v 1.1.2.1 1998/09/24 23:59:06 stanton Exp $
#
# Copyright (c) 1995, by General Electric Company. All rights reserved.
#
diff --git a/library/package.tcl b/library/package.tcl
index 68c5053..9ab8231 100644
--- a/library/package.tcl
+++ b/library/package.tcl
@@ -20,6 +20,24 @@
# files given as arguments.
#
# Arguments:
+# -direct (optional) If this flag is present, the generated
+# code in pkgMkIndex.tcl will cause the package to be
+# loaded when "package require" is executed, rather
+# than lazily when the first reference to an exported
+# procedure in the package is made.
+# -nopkgrequire (optional) If this flag is present, "package require"
+# commands are ignored. This flag is useful in some
+# situations, for example when there is a circularity
+# in package requires (package a requires package b,
+# which in turns requires package a).
+# -verbose (optional) Verbose output; the name of each file that
+# was successfully rocessed is printed out. Additionally,
+# if processing of a file failed a message is printed
+# out; a file failure may not indicate that the indexing
+# has failed, since pkg_mkIndex stores the list of failed
+# files and tries again. The second time the processing
+# may succeed, for example if a required package has been
+# indexed by a previous pass.
# dir - Name of the directory in which to create the index.
# args - Any number of additional arguments, each giving
# a glob pattern that matches the names of one or
@@ -28,22 +46,57 @@
proc pkg_mkIndex {args} {
global errorCode errorInfo
- set first [lindex $args 0]
- set direct [string match "-d*" $first]
- set more ""
- if {$direct} {
- set args [lrange $args 1 end]
- set more " -direct"
+ set usage {"pkg_mkIndex ?-nopkgrequire? ?-direct? ?-verbose? dir ?pattern ...?"};
+
+ set argCount [llength $args]
+ if {$argCount < 1} {
+ return -code error "wrong # args: should be\n$usage"
}
- if {[llength $args] == 0} {
- return -code error "wrong # args: should be\
- \"pkg_mkIndex ?-direct? dir ?pattern ...?\"";
+
+ set more ""
+ set direct 0
+ set noPkgRequire 0
+ set doVerbose 0
+ for {set idx 0} {$idx < $argCount} {incr idx} {
+ set flag [lindex $args $idx]
+ switch -glob -- $flag {
+ -- {
+ # done with the flags
+ incr idx
+ break
+ }
+
+ -verbose {
+ set doVerbose 1
+ }
+
+ -direct {
+ set direct 1
+ append more " -direct"
+ }
+
+ -nopkgrequire {
+ set noPkgRequire 1
+ append more " -nopkgrequire"
+ }
+
+ -* {
+ return -code error "unknown flag $flag: should be\n$usage"
+ }
+
+ default {
+ # done with the flags
+ break
+ }
+ }
}
- set dir [lindex $args 0]
- set patternList [lrange $args 1 end]
+
+ set dir [lindex $args $idx]
+ set patternList [lrange $args [expr $idx + 1] end]
if {[llength $patternList] == 0} {
set patternList [list "*.tcl" "*[info sharedlibextension]"]
}
+
append index "# Tcl package index file, version 1.1\n"
append index "# This file is generated by the \"pkg_mkIndex$more\" command\n"
append index "# and sourced either when an application starts up or\n"
@@ -55,121 +108,312 @@ proc pkg_mkIndex {args} {
append index "# full path name of this file's directory.\n"
set oldDir [pwd]
cd $dir
+
+ # In order to support building of index files from scratch, we make
+ # repeated passes on the files to index, until either all have been
+ # indexed, or we can no longer make any headway.
+
foreach file [eval glob $patternList] {
- # For each file, figure out what commands and packages it provides.
- # To do this, create a child interpreter, load the file into the
- # interpreter, and get a list of the new commands and packages
- # that are defined. Define an empty "package unknown" script so
- # that there are no recursive package inclusions.
+ set toProcess($file) 1
+ }
- set c [interp create]
+ while {[array size toProcess] > 0} {
+ set processed 0
- # If Tk is loaded in the parent interpreter, load it into the
- # child also, in case the extension depends on it.
+ foreach file [array names toProcess] {
+ # For each file, figure out what commands and packages it provides.
+ # To do this, create a child interpreter, load the file into the
+ # interpreter, and get a list of the new commands and packages
+ # that are defined. The interpeter uses a special version of
+ # tclPkgSetup to force loading of required packages at require
+ # time rather than lazily, so that we can keep track of commands
+ # and packages that are defined indirectly rather than from the
+ # file itself.
- foreach pkg [info loaded] {
- if {[lindex $pkg 1] == "Tk"} {
- $c eval {set argv {-geometry +0+0}}
- load [lindex $pkg 0] Tk $c
- break
+ set c [interp create]
+
+ # Load into the child all packages currently loaded in the parent
+ # interpreter, in case the extension depends on some of them.
+
+ foreach pkg [info loaded] {
+ if {[lindex $pkg 1] == "Tk"} {
+ $c eval {set argv {-geometry +0+0}}
+ }
+ load [lindex $pkg 0] [lindex $pkg 1] $c
}
- }
- $c eval [list set __file $file]
- $c eval [list set __direct $direct]
- if {[catch {
- $c eval {
- proc __dummy args {}
- rename package __package_orig
- proc package {what args} {
- switch -- $what {
- require { return ; # ignore transitive requires }
- default { eval __package_orig [list $what] $args }
+
+ # We also call package ifneeded for all packages that have been
+ # identified so far. This way, each pass will have loaded the
+ # equivalent of the pkgIndex.tcl file that we are constructing,
+ # and packages whose processing failed in previous passes may
+ # be processed successfully now
+
+ foreach pkg [array names files] {
+ $c eval "package ifneeded $pkg\
+ \[list tclPkgSetup $dir \
+ [lrange $pkg 0 0] [lrange $pkg 1 1]\
+ [list $files($pkg)]\]"
+ }
+ if {$noPkgRequire == 1} {
+ $c eval {
+ rename package __package_orig
+ proc package {what args} {
+ switch -- $what {
+ require { return ; # ignore transitive requires }
+ default { eval __package_orig {$what} $args }
+ }
}
+ proc __dummy args {}
+ package unknown __dummy
}
- if {!$__direct} {
- proc __pkgGetAllNamespaces {{root {}}} {
- set list $root
- foreach ns [namespace children $root] {
- eval lappend list [__pkgGetAllNamespaces $ns]
+ } else {
+ $c eval {
+ rename package __package_orig
+ proc package {what args} {
+ switch -- $what {
+ require {
+ eval __package_orig require $args
+
+ # a package that was required needs to be
+ # placed in the list of packages to ignore.
+ # tclPkgSetup is unable to do it, so do it
+ # here.
+
+ set ::__ignorePkgs([lindex $args 0]) 1
+ }
+
+ provide {
+ # if package provide is called at level 1 and
+ # with two arguments, then this package is
+ # being provided by one of the files we are
+ # indexing, and therefore we need to add it
+ # to the list of packages to write out.
+ # We need to do this check because otherwise
+ # packages that are spread over multiple
+ # files are indexed only by their first file
+ # loaded.
+ # Note that packages that this cannot catch
+ # packages that are implemented by a
+ # combination of TCL files and DLLs
+
+ if {([info level] == 1) \
+ && ([llength $args] == 2)} {
+ lappend ::__providedPkgs [lindex $args 0]
+ }
+
+ eval __package_orig provide $args
+ }
+
+ default { eval __package_orig {$what} $args }
}
- return $list
}
- set __origCmds [info commands]
}
- package unknown __dummy
+ }
- set dir "" ;# in case file is pkgIndex.tcl
+ $c eval [list set __file $file]
+ $c eval [list set __direct $direct]
+ if {[catch {
+ $c eval {
+ set __doingWhat "loading or sourcing"
- # Try to load the file if it has the shared library extension,
- # otherwise source it. It's important not to try to load
- # files that aren't shared libraries, because on some systems
- # (like SunOS) the loader will abort the whole application
- # when it gets an error.
+ # override the tclPkgSetup procedure (which is called by
+ # package ifneeded statements from pkgIndex.tcl) to force
+ # loads of packages, and also keep track of
+ # packages/namespaces/commands that the load generated
- if {[string compare [file extension $__file] \
- [info sharedlibextension]] == 0} {
+ proc tclPkgSetup {dir pkg version files} {
+ # remember the current set of packages and commands,
+ # so that we can add any that were defined by the
+ # package files to the list of packages and commands
+ # to ignore
- # The "file join ." command below is necessary. Without
- # it, if the file name has no \'s and we're on UNIX, the
- # load command will invoke the LD_LIBRARY_PATH search
- # mechanism, which could cause the wrong file to be used.
+ foreach __p [package names] {
+ set __localIgnorePkgs($__p) 1
+ }
+ foreach __ns [__pkgGetAllNamespaces] {
+ set __localIgnoreNs($__ns) 1
+
+ # if the namespace is already in the __ignoreNs
+ # array, its commands have already been imported
+
+ if {[info exists ::__ignoreNs($__ns)] == 0} {
+ namespace import ${__ns}::*
+ }
+ }
+ foreach __cmd [info commands] {
+ set __localIgnoreCmds($__cmd) 1
+ }
+
+ # load the files that make up the package
- if {[catch {load [file join . $__file]} __msg]} {
- tclLog "warning: error while loading $__file: $__msg"
+ package provide $pkg $version
+ foreach __fileInfo $files {
+ set __f [lindex $__fileInfo 0]
+ set __type [lindex $__fileInfo 1]
+ if {$__type == "load"} {
+ load [file join $dir $__f] $pkg
+ } else {
+ source [file join $dir $__f]
+ }
+ }
+
+ # packages and commands that were defined by these
+ # files are to be ignored.
+
+ foreach __p [package names] {
+ if {[info exists __localIgnorePkgs($__p)] == 0} {
+ set ::__ignorePkgs($__p) 1
+ }
+ }
+ foreach __ns [__pkgGetAllNamespaces] {
+ if {([info exists __localIgnoreNs($__ns)] == 0) \
+ && ([info exists ::__ignoreNs($__ns)] == 0)} {
+ namespace import ${__ns}::*
+ set ::__ignoreNs($__ns) 1
+ }
+ }
+ foreach __cmd [info commands] {
+ if {[info exists __localIgnoreCmds($__cmd)] == 0} {
+ lappend ::__ignoreCmds $__cmd
+ }
+ }
}
- set __type load
- } else {
- if {[catch {source $__file} __msg]} {
- tclLog "warning: error while sourcing $__file: $__msg"
+
+ # we need to track command defined by each package even in
+ # the -direct case, because they are needed internally by
+ # the "partial pkgIndex.tcl" step above.
+
+ proc __pkgGetAllNamespaces {{root {}}} {
+ set __list $root
+ foreach __ns [namespace children $root] {
+ eval lappend __list [__pkgGetAllNamespaces $__ns]
+ }
+ return $__list
}
- set __type source
- }
- # Using __ variable names to avoid potential namespaces
- # clash, even here in post processing because the
- # loaded package could have set up traces,...
- if {!$__direct} {
+
+ # initialize the list of packages to ignore; these are
+ # packages that are present before the script/dll is loaded
+
+ set ::__ignorePkgs(Tcl) 1
+ set ::__ignorePkgs(Tk) 1
+ foreach __pkg [package names] {
+ set ::__ignorePkgs($__pkg) 1
+ }
+
+ # before marking the original commands, import all the
+ # namespaces that may have been loaded from the parent;
+ # these namespaces and their commands are to be ignored
+
foreach __ns [__pkgGetAllNamespaces] {
+ set ::__ignoreNs($__ns) 1
namespace import ${__ns}::*
}
+
+ set ::__ignoreCmds [info commands]
+
+ set dir "" ;# in case file is pkgIndex.tcl
+
+ # Try to load the file if it has the shared library
+ # extension, otherwise source it. It's important not to
+ # try to load files that aren't shared libraries, because
+ # on some systems (like SunOS) the loader will abort the
+ # whole application when it gets an error.
+
+ set __pkgs {}
+ set __providedPkgs {}
+ if {[string compare [file extension $__file] \
+ [info sharedlibextension]] == 0} {
+
+ # The "file join ." command below is necessary.
+ # Without it, if the file name has no \'s and we're
+ # on UNIX, the load command will invoke the
+ # LD_LIBRARY_PATH search mechanism, which could cause
+ # the wrong file to be used.
+
+ set __doingWhat loading
+ load [file join . $__file]
+ set __type load
+ } else {
+ set __doingWhat sourcing
+ source $__file
+ set __type source
+ }
+
+ # Using __ variable names to avoid potential namespaces
+ # clash, even here in post processing because the
+ # loaded package could have set up traces,...
+
+ foreach __ns [__pkgGetAllNamespaces] {
+ if {[info exists ::__ignoreNs($__ns)] == 0} {
+ namespace import ${__ns}::*
+ }
+ }
foreach __i [info commands] {
set __cmds($__i) 1
}
- foreach __i $__origCmds {
+ foreach __i $::__ignoreCmds {
catch {unset __cmds($__i)}
}
foreach __i [array names __cmds] {
# reverse engineer which namespace a command comes from
+
set __absolute [namespace origin $__i]
- if {[string compare ::$__i $__absolute] != 0} {
+
+ # special case so that global names have no leading
+ # ::, this is required by the unknown command
+
+ set __absolute [auto_qualify $__absolute ::]
+
+ if {[string compare $__i $__absolute] != 0} {
set __cmds($__absolute) 1
unset __cmds($__i)
}
}
- }
- set __pkgs {}
- foreach __i [package names] {
- if {([string compare [package provide $__i] ""] != 0)
- && ([string compare $__i Tcl] != 0)
- && ([string compare $__i Tk] != 0)} {
+
+ foreach __i $::__providedPkgs {
lappend __pkgs [list $__i [package provide $__i]]
+ set __ignorePkgs($__i) 1
+ }
+ foreach __i [package names] {
+ if {([string compare [package provide $__i] ""] != 0) \
+ && ([info exists ::__ignorePkgs($__i)] == 0)} {
+ lappend __pkgs [list $__i [package provide $__i]]
+ }
}
}
+ } msg] == 1} {
+ set what [$c eval set __doingWhat]
+ if {$doVerbose} {
+ tclLog "warning: error while $what $file: $msg\nthis file will be retried in the next pass"
+ }
+ } else {
+ set type [$c eval set __type]
+ set cmds [lsort [$c eval array names __cmds]]
+ set pkgs [$c eval set __pkgs]
+ if {[llength $pkgs] > 1} {
+ tclLog "warning: \"$file\" provides more than one package ($pkgs)"
+ }
+ foreach pkg $pkgs {
+ # cmds is empty/not used in the direct case
+ lappend files($pkg) [list $file $type $cmds]
+ }
+
+ incr processed
+ unset toProcess($file)
+
+ if {$doVerbose} {
+ tclLog "processed $file"
+ }
}
- } msg]} {
- tclLog "error while loading or sourcing $file: $msg"
- }
- set type [$c eval set __type]
- set cmds [lsort [$c eval array names __cmds]]
- set pkgs [$c eval set __pkgs]
- if {[llength $pkgs] > 1} {
- tclLog "warning: \"$file\" provides more than one package ($pkgs)"
+ interp delete $c
}
- foreach pkg $pkgs {
- # cmds is empty/not used in the direct case
- lappend files($pkg) [list $file $type $cmds]
+
+ if {$processed == 0} {
+ tclLog "this iteration could not process any files: giving up here"
+ break
}
- interp delete $c
}
+
foreach pkg [lsort [array names files]] {
append index "\npackage ifneeded $pkg "
if {$direct} {
diff --git a/library/parray.tcl b/library/parray.tcl
index 1a88b92..3b766d6 100644
--- a/library/parray.tcl
+++ b/library/parray.tcl
@@ -1,7 +1,7 @@
# parray:
# Print the contents of a global array on stdout.
#
-# SCCS: @(#) parray.tcl 1.10 97/12/03 11:50:31
+# RCS: @(#) $Id: parray.tcl,v 1.1.2.2 1998/09/24 23:59:06 stanton Exp $
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# Copyright (c) 1994 Sun Microsystems, Inc.
diff --git a/library/safe.tcl b/library/safe.tcl
index 5e84267..0ee3a92 100644
--- a/library/safe.tcl
+++ b/library/safe.tcl
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) safe.tcl 1.30 98/01/07 17:05:25
+# RCS: @(#) $Id: safe.tcl,v 1.1.2.2 1998/09/24 23:59:07 stanton Exp $
#
# The implementation is based on namespaces. These naming conventions
diff --git a/library/word.tcl b/library/word.tcl
index 0bf2dce..72b1714 100644
--- a/library/word.tcl
+++ b/library/word.tcl
@@ -5,15 +5,12 @@
# widgets behave properly for different platforms.
#
# Copyright (c) 1996 by Sun Microsystems, Inc.
+# Copyright (c) 1998 by Scritpics Corporation.
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) word.tcl 1.4 97/12/03 11:57:11
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-#
+# RCS: @(#) $Id: word.tcl,v 1.1.2.2 1998/09/24 23:59:07 stanton Exp $
# The following variables are used to determine which characters are
# interpreted as white space.
diff --git a/license.terms b/license.terms
index 96ad966..9df3e60 100644
--- a/license.terms
+++ b/license.terms
@@ -1,7 +1,7 @@
This software is copyrighted by the Regents of the University of
-California, Sun Microsystems, Inc., and other parties. The following
-terms apply to all files associated with the software unless explicitly
-disclaimed in individual files.
+California, Sun Microsystems, Inc., Scriptics Corporation,
+and other parties. The following terms apply to all files associated
+with the software unless explicitly disclaimed in individual files.
The authors hereby grant permission to use, copy, modify, distribute,
and license this software and its documentation for any purpose, provided
diff --git a/mac/Background.doc b/mac/Background.doc
index 8c4409d..9ac4898 100644
--- a/mac/Background.doc
+++ b/mac/Background.doc
@@ -1,7 +1,7 @@
Notes about the Background Only application template
====================================================
-SCCS: @(#) Background.doc 1.1 97/11/03 17:05:54
+RCS: @(#) $Id: Background.doc,v 1.1.2.1 1998/09/24 23:59:08 stanton Exp $
We have included sample code and project files for making a Background-Only
application (BOA) in Tcl. This could be used for server processes (like the
diff --git a/mac/MW_TclAppleScriptHeader.pch b/mac/MW_TclAppleScriptHeader.pch
index 9575a8d..f37bc1b 100644
--- a/mac/MW_TclAppleScriptHeader.pch
+++ b/mac/MW_TclAppleScriptHeader.pch
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) MW_TclAppleScriptHeader.pch 1.1 97/09/09 16:38:07
+ * RCS: @(#) $Id: MW_TclAppleScriptHeader.pch,v 1.1.2.1 1998/09/24 23:59:08 stanton Exp $
*/
/*
diff --git a/mac/MW_TclHeader.pch b/mac/MW_TclHeader.pch
index a57b309..01da559 100644
--- a/mac/MW_TclHeader.pch
+++ b/mac/MW_TclHeader.pch
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) MW_TclHeader.pch 1.28 98/02/18 11:43:47
+ * RCS: @(#) $Id: MW_TclHeader.pch,v 1.1.2.2 1998/09/24 23:59:08 stanton Exp $
*/
/*
@@ -42,5 +42,17 @@
#include "tcl.h"
#include "tclMac.h"
#include "tclInt.h"
-#pragma export off
+
+/*
+ * These three symbols are needed by Itcl, so we must export them
+ * here. They are all from tclCompile.h, but there is no need to
+ * export that whole file...
+ */
+
+EXTERN void TclPrintSource _ANSI_ARGS_((FILE *outFile,
+ char *string, int maxChars));
+extern int tclTraceExec;
+extern int tclTraceCompile;
+
+#pragma export reset
diff --git a/mac/README b/mac/README
index 76e864d..7d75cc0 100644
--- a/mac/README
+++ b/mac/README
@@ -1,6 +1,14 @@
Tcl 8.1a2 for Macintosh
-SCCS: @(#) README 1.33 98/02/18 15:10:27
+by Ray Johnson
+Scriptics Corporation
+rjohnson@scriptics.com
+with major help from
+Jim Ingham
+Cygnus Solutions
+jingham@cygnus.com
+
+RCS: @(#) $Id: README,v 1.1.2.2 1998/09/24 23:59:08 stanton Exp $
1. Introduction
---------------
@@ -96,13 +104,17 @@ mactcl-source-8.1a2.sea.hqx
The "html" subdirectory contains reference documentation in
in the HTML format. You may also find these pages at:
- http://sunscript.sun.com/man/tcl8.1/contents.html
+ http://www.scriptics.com/man/tcl8.1/contents.html
Other documentation and sample Tcl scripts can be found at
-the Tcl ftp site:
+the Tcl archive site:
ftp://ftp.neosoft.com/tcl/
+and the Tcl resource center:
+
+ http://www.scriptics.com/resource/
+
The internet news group comp.lang.tcl is also a valuable
source of information about Tcl. A mailing list is also
available (see below).
@@ -113,19 +125,25 @@ available (see below).
In order to compile Macintosh Tcl you must have the
following items:
- CodeWarrior Pro 2
+ CodeWarrior Pro 2 or 3
Mac Tcl 8.1 (source)
More Files 1.4.3
There are two sets of project files included with the package. The ones
-we use for the release are for CodeWarrior Pro 2, and are not compatible
-with CodeWarrior Gold release 11 and earlier. We no longer support CW
-11 or earlier.
+we use for the release are for CodeWarrior Pro 3, and are not compatible
+with CodeWarrior Gold release 11 and earlier. We have included the files
+for earlier versions of CodeWarrior in the folder tcl8.0:mac:CW11 Projects,
+but they are unsupported, and a little out of date.
+
+As of Tcl8.0p2, the code will also build under CW Pro 2. The only
+change that needs to be made is that float.mac.c should be replaced by
+float.c in the MacTcl MSL project file.
-However, there is a bug in the CFM68K Linker in CW Pro 2,
-which renders the CFM68K Version under CW Pro 2 very unstable. You
-need to upgrade your compilers to the latest version (2.0.1). This is
-available on the Metrowerks ftp site.
+However, there seems to be a bug in the CFM68K Linker in CW Pro 2,
+which renders the CFM68K Version under CW Pro 2 very unstable. I am
+working with MetroWerks to resolve this issue. The PPC version is
+fine, as is the Traditional 68K Shell. But if you need to use the
+CFM68K, then you must stay with CW Pro 1 for now.
The project files included with the Mac Tcl source should work
fine. The only thing you may need to update are the access paths.
@@ -154,5 +172,5 @@ Special notes:
If you have comments or Bug reports send them to:
Jim Ingham
-jingham@eng.sun.com
+jingham@cygnus.com
diff --git a/mac/bugs.doc b/mac/bugs.doc
index 5f4d45e..4c96c7e 100644
--- a/mac/bugs.doc
+++ b/mac/bugs.doc
@@ -4,7 +4,7 @@ by Ray Johnson
Sun Microsystems Laboratories
rjohnson@eng.sun.com
-SCCS: @(#) bugs.doc 1.6 97/08/13 18:09:12
+RCS: @(#) $Id: bugs.doc,v 1.1.2.1 1998/09/24 23:59:08 stanton Exp $
This was a new feature as of Tcl7.6b1 and as such I'll started with
a clean slate. I currently know of no reproducable bugs. I often
diff --git a/mac/libmoto.doc b/mac/libmoto.doc
index 50b98e1..2fc3abd 100644
--- a/mac/libmoto.doc
+++ b/mac/libmoto.doc
@@ -1,7 +1,7 @@
Notes about the use of libmoto
------------------------------
-@(#) libmoto.doc 1.1 96/07/17 14:29:48
+RCS: @(#) $Id: libmoto.doc,v 1.1.2.1 1998/09/24 23:59:08 stanton Exp $
First of all, libmoto is not required! If you don't have it, you
can simply remove the library reference from the project file and
diff --git a/mac/morefiles.doc b/mac/morefiles.doc
index b7c7118..e35821d 100644
--- a/mac/morefiles.doc
+++ b/mac/morefiles.doc
@@ -1,7 +1,7 @@
Notes about MoreFiles, dnr.c & other non-Tcl source files
---------------------------------------------------------
-@(#) morefiles.doc 1.4 97/08/13 12:57:08
+RCS: @(#) $Id: morefiles.doc,v 1.1.2.1 1998/09/24 23:59:09 stanton Exp $
The Macintosh distribution uses several source files that don't
actually ship with Tcl. This sometimes causes problems or confusion
diff --git a/mac/porting.notes b/mac/porting.notes
index f1f36e5..da901b7 100644
--- a/mac/porting.notes
+++ b/mac/porting.notes
@@ -1,7 +1,7 @@
Porting Notes
-------------
-@(#) porting.notes 1.5 96/07/31 14:59:28
+RCS: @(#) $Id: porting.notes,v 1.1.2.1 1998/09/24 23:59:09 stanton Exp $
Currently, the Macintosh version Tcl only compilies with the
CodeWarrior C compilier from MetroWerks. It should be straight
diff --git a/mac/tclMac.h b/mac/tclMac.h
index 5767832..8be6d7a 100644
--- a/mac/tclMac.h
+++ b/mac/tclMac.h
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMac.h 1.9 97/09/02 16:12:03
+ * RCS: @(#) $Id: tclMac.h,v 1.1.2.2 1998/09/24 23:59:09 stanton Exp $
*/
#ifndef _TCLMAC
diff --git a/mac/tclMacAETE.r b/mac/tclMacAETE.r
index 17fb6fe..acbed9f 100644
--- a/mac/tclMacAETE.r
+++ b/mac/tclMacAETE.r
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacAETE.r 1.1 97/11/03 17:06:22
+ * RCS: @(#) $Id: tclMacAETE.r,v 1.1.2.1 1998/09/24 23:59:09 stanton Exp $
*/
#define SystemSevenOrLater 1
diff --git a/mac/tclMacAlloc.c b/mac/tclMacAlloc.c
index f87b424..339d4c5 100644
--- a/mac/tclMacAlloc.c
+++ b/mac/tclMacAlloc.c
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacAlloc.c 1.16 97/12/23 10:47:20
+ * RCS: @(#) $Id: tclMacAlloc.c,v 1.1.2.2 1998/09/24 23:59:09 stanton Exp $
*/
#include "tclMacInt.h"
@@ -22,6 +22,7 @@
#include <Memory.h>
#include <stdlib.h>
#include <string.h>
+
/*
* Flags that are used by ConfigureMemory to define how the allocator
* should work. They can be or'd together.
@@ -306,16 +307,16 @@ FreeAllMemory()
memRecord = systemMemory;
systemMemory = memRecord->next;
if (*(memRecord->memoryHandle) != NULL) {
- DisposeHandle(memRecord->memoryHandle);
- }
+ DisposeHandle(memRecord->memoryHandle);
+ }
DisposePtr((void *) memRecord);
}
while (appMemory != NULL) {
memRecord = appMemory;
appMemory = memRecord->next;
if (*(memRecord->memoryHandle) != NULL) {
- DisposeHandle(memRecord->memoryHandle);
- }
+ DisposeHandle(memRecord->memoryHandle);
+ }
DisposePtr((void *) memRecord);
}
}
diff --git a/mac/tclMacAppInit.c b/mac/tclMacAppInit.c
index ebc7782..d39d392 100644
--- a/mac/tclMacAppInit.c
+++ b/mac/tclMacAppInit.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacAppInit.c 1.21 97/11/07 21:30:01
+ * RCS: @(#) $Id: tclMacAppInit.c,v 1.1.2.2 1998/09/24 23:59:09 stanton Exp $
*/
#include "tcl.h"
diff --git a/mac/tclMacApplication.r b/mac/tclMacApplication.r
index 90d3456..eb85462 100644
--- a/mac/tclMacApplication.r
+++ b/mac/tclMacApplication.r
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacApplication.r 1.2 97/06/20 11:27:07
+ * RCS: @(#) $Id: tclMacApplication.r,v 1.1.2.1 1998/09/24 23:59:10 stanton Exp $
*/
#include <Types.r>
diff --git a/mac/tclMacBOAAppInit.c b/mac/tclMacBOAAppInit.c
index 4bff09e..4fdb6a8 100644
--- a/mac/tclMacBOAAppInit.c
+++ b/mac/tclMacBOAAppInit.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacBOAAppInit.c 1.2 97/11/07 21:30:48
+ * RCS: @(#) $Id: tclMacBOAAppInit.c,v 1.1.2.2 1998/09/24 23:59:10 stanton Exp $
*/
#include "tcl.h"
diff --git a/mac/tclMacBOAMain.c b/mac/tclMacBOAMain.c
index 7d6c2ea..3c699b2 100644
--- a/mac/tclMacBOAMain.c
+++ b/mac/tclMacBOAMain.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacBOAMain.c 1.3 97/12/19 10:42:08
+ * RCS: @(#) $Id: tclMacBOAMain.c,v 1.1.2.2 1998/09/24 23:59:10 stanton Exp $
*/
#include "tcl.h"
diff --git a/mac/tclMacChan.c b/mac/tclMacChan.c
index 136b4bc..d08b121 100644
--- a/mac/tclMacChan.c
+++ b/mac/tclMacChan.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacChan.c 1.50 98/02/19 15:30:57
+ * RCS: @(#) $Id: tclMacChan.c,v 1.1.2.2 1998/09/24 23:59:10 stanton Exp $
*/
#include "tclInt.h"
@@ -734,7 +734,7 @@ TclpGetDefaultStdChannel(
/*
*----------------------------------------------------------------------
*
- * Tcl_OpenFileChannel --
+ * TclpOpenFileChannel --
*
* Open an File based channel on Unix systems.
*
@@ -750,7 +750,7 @@ TclpGetDefaultStdChannel(
*/
Tcl_Channel
-Tcl_OpenFileChannel(
+TclpOpenFileChannel(
Tcl_Interp *interp, /* Interpreter for error reporting;
* can be NULL. */
char *fileName, /* Name of file to open. */
diff --git a/mac/tclMacDNR.c b/mac/tclMacDNR.c
index b42b4dd..1cf4239 100644
--- a/mac/tclMacDNR.c
+++ b/mac/tclMacDNR.c
@@ -15,7 +15,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacDNR.c 1.2 97/01/28 10:37:21
+ * RCS: @(#) $Id: tclMacDNR.c,v 1.1.2.1 1998/09/24 23:59:10 stanton Exp $
*/
#pragma ANSI_strict off
diff --git a/mac/tclMacEnv.c b/mac/tclMacEnv.c
index afb6028..7c6cc2e 100644
--- a/mac/tclMacEnv.c
+++ b/mac/tclMacEnv.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacEnv.c 1.29 96/12/06 14:19:57
+ * RCS: @(#) $Id: tclMacEnv.c,v 1.1.2.1 1998/09/24 23:59:10 stanton Exp $
*/
#include <Gestalt.h>
diff --git a/mac/tclMacExit.c b/mac/tclMacExit.c
index a42c40d..4706e20 100644
--- a/mac/tclMacExit.c
+++ b/mac/tclMacExit.c
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacExit.c 1.7 97/11/26 11:06:00
+ * RCS: @(#) $Id: tclMacExit.c,v 1.1.2.2 1998/09/24 23:59:11 stanton Exp $
*/
#include "tclInt.h"
diff --git a/mac/tclMacFCmd.c b/mac/tclMacFCmd.c
index d4bfb22..a274cb7 100644
--- a/mac/tclMacFCmd.c
+++ b/mac/tclMacFCmd.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacFCmd.c 1.27 98/02/02 21:44:07
+ * RCS: @(#) $Id: tclMacFCmd.c,v 1.1.2.2 1998/09/24 23:59:11 stanton Exp $
*/
#include "tclInt.h"
diff --git a/mac/tclMacFile.c b/mac/tclMacFile.c
index 37bfec6..f67e1c4 100644
--- a/mac/tclMacFile.c
+++ b/mac/tclMacFile.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacFile.c 1.65 98/02/19 15:08:44
+ * RCS: @(#) $Id: tclMacFile.c,v 1.1.2.2 1998/09/24 23:59:12 stanton Exp $
*/
/*
@@ -32,7 +32,7 @@
#include <FSpCompat.h>
/*
- * Static variables used by the TclMacStat function.
+ * Static variables used by the TclpStat function.
*/
static int initialized = false;
static long gmt_offset;
@@ -750,8 +750,8 @@ Tcl_WaitPid(
#undef fopen
FILE *
TclMacFOpenHack(
- const char *path,
- const char *mode)
+ CONST char *path,
+ CONST char *mode)
{
OSErr err;
FSSpec fileSpec;
diff --git a/mac/tclMacInit.c b/mac/tclMacInit.c
index c9d0d36..64f6585 100644
--- a/mac/tclMacInit.c
+++ b/mac/tclMacInit.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacInit.c 1.47 98/01/22 10:06:08
+ * RCS: @(#) $Id: tclMacInit.c,v 1.1.2.2 1998/09/24 23:59:12 stanton Exp $
*/
#include <AppleEvents.h>
diff --git a/mac/tclMacInt.h b/mac/tclMacInt.h
index 577f152..8c6147b 100644
--- a/mac/tclMacInt.h
+++ b/mac/tclMacInt.h
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacInt.h 1.26 98/02/18 11:50:16
+ * RCS: @(#) $Id: tclMacInt.h,v 1.1.2.2 1998/09/24 23:59:12 stanton Exp $
*/
#ifndef _TCLMACINT
diff --git a/mac/tclMacInterupt.c b/mac/tclMacInterupt.c
index 97620f8..11740f5 100644
--- a/mac/tclMacInterupt.c
+++ b/mac/tclMacInterupt.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacInterupt.c 1.16 96/12/12 19:22:01
+ * RCS: @(#) $Id: tclMacInterupt.c,v 1.1.2.1 1998/09/24 23:59:13 stanton Exp $
*/
#include "tclInt.h"
diff --git a/mac/tclMacLibrary.c b/mac/tclMacLibrary.c
index c49aae6..138c55c 100644
--- a/mac/tclMacLibrary.c
+++ b/mac/tclMacLibrary.c
@@ -13,7 +13,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacLibrary.c 1.6 97/11/20 19:29:42
+ * RCS: @(#) $Id: tclMacLibrary.c,v 1.1.2.1 1998/09/24 23:59:13 stanton Exp $
*/
/*
diff --git a/mac/tclMacLibrary.r b/mac/tclMacLibrary.r
index a51fb22..2dc06d1 100644
--- a/mac/tclMacLibrary.r
+++ b/mac/tclMacLibrary.r
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacLibrary.r 1.6 98/01/21 22:20:26
+ * RCS: @(#) $Id: tclMacLibrary.r,v 1.1.2.2 1998/09/24 23:59:13 stanton Exp $
*/
#include <Types.r>
diff --git a/mac/tclMacLoad.c b/mac/tclMacLoad.c
index e59ae61..774db8c 100644
--- a/mac/tclMacLoad.c
+++ b/mac/tclMacLoad.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacLoad.c 1.24 98/01/12 15:27:27
+ * RCS: @(#) $Id: tclMacLoad.c,v 1.1.2.2 1998/09/24 23:59:13 stanton Exp $
*/
#include <CodeFragments.h>
diff --git a/mac/tclMacMSLPrefix.h b/mac/tclMacMSLPrefix.h
index 6da83b1..9668ebb 100644
--- a/mac/tclMacMSLPrefix.h
+++ b/mac/tclMacMSLPrefix.h
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacMSLPrefix.h 1.4 97/09/02 16:14:12
+ * RCS: @(#) $Id: tclMacMSLPrefix.h,v 1.1.2.2 1998/09/24 23:59:13 stanton Exp $
*/
#include <ansi_prefix.mac.h>
diff --git a/mac/tclMacMath.h b/mac/tclMacMath.h
index 7ec3257..9e2b02f 100644
--- a/mac/tclMacMath.h
+++ b/mac/tclMacMath.h
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacMath.h 1.2 97/07/28 11:04:02
+ * RCS: @(#) $Id: tclMacMath.h,v 1.1.2.1 1998/09/24 23:59:13 stanton Exp $
*/
#ifndef _TCLMACMATH
diff --git a/mac/tclMacNotify.c b/mac/tclMacNotify.c
index 22fdf26..2ab9632 100644
--- a/mac/tclMacNotify.c
+++ b/mac/tclMacNotify.c
@@ -14,7 +14,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacNotify.c 1.39 98/02/18 11:53:32
+ * RCS: @(#) $Id: tclMacNotify.c,v 1.1.2.2 1998/09/24 23:59:14 stanton Exp $
*/
#include "tclInt.h"
diff --git a/mac/tclMacOSA.c b/mac/tclMacOSA.c
index b768682..927c73e 100644
--- a/mac/tclMacOSA.c
+++ b/mac/tclMacOSA.c
@@ -12,7 +12,7 @@
* See the file "License Terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacOSA.c 1.8 97/11/07 21:30:43
+ * RCS: @(#) $Id: tclMacOSA.c,v 1.1.2.2 1998/09/24 23:59:14 stanton Exp $
*/
#define MAC_TCL
diff --git a/mac/tclMacOSA.r b/mac/tclMacOSA.r
index 7975a19..8cc5df6 100644
--- a/mac/tclMacOSA.r
+++ b/mac/tclMacOSA.r
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacOSA.r 1.6 97/11/20 18:40:02
+ * RCS: @(#) $Id: tclMacOSA.r,v 1.1.2.1 1998/09/24 23:59:14 stanton Exp $
*/
#include <Types.r>
diff --git a/mac/tclMacPanic.c b/mac/tclMacPanic.c
index 13219d8..afdf72f 100644
--- a/mac/tclMacPanic.c
+++ b/mac/tclMacPanic.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacPanic.c 1.14 97/11/20 18:41:06
+ * RCS: @(#) $Id: tclMacPanic.c,v 1.1.2.1 1998/09/24 23:59:14 stanton Exp $
*/
diff --git a/mac/tclMacPort.h b/mac/tclMacPort.h
index 248e2a5..b141016 100644
--- a/mac/tclMacPort.h
+++ b/mac/tclMacPort.h
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacPort.h 1.78 98/02/18 15:48:22
+ * RCS: @(#) $Id: tclMacPort.h,v 1.1.2.2 1998/09/24 23:59:14 stanton Exp $
*/
@@ -99,8 +99,9 @@
# define isatty(arg) 1
-/*
- * Define access mode constants.
+/*
+ * Defines used by access function. This function is provided
+ * by Mac Tcl as the function TclpAccess.
*/
# define F_OK 0 /* test for existence of file */
@@ -236,21 +237,17 @@ EXTERN struct tm * TclpGetDate _ANSI_ARGS_((const time_t *tp,
#define TclSetSystemEnv(a,b)
/*
- * The following macros and declaration wrap the C runtime library
- * functions.
+ * The following defines replace the Macintosh version of the POSIX
+ * functions "stat" and "access". The various compilier vendors
+ * don't implement this function well nor consistantly.
*/
+#define lstat(path, bufPtr) TclStat(path, bufPtr)
-#define fopen TclMacFOpenHack
-#define lstat stat
-
-#define TclpLstat TclpStat
-#define TclStrftime strftime
-
-EXTERN int TclpStat _ANSI_ARGS_((CONST char *path,
- struct stat *buf));
-EXTERN FILE * TclMacFOpenHack _ANSI_ARGS_((const char *path,
- const char *mode));
-
+EXTERN FILE * TclMacFOpenHack _ANSI_ARGS_((const char *path,
+ const char *mode));
+#define fopen(path, mode) TclMacFOpenHack(path, mode)
+EXTERN int TclMacReadlink _ANSI_ARGS_((char *path, char *buf, int size));
+#define readlink(fileName, buffer, size) TclMacReadlink(fileName, buffer, size)
#ifdef TCL_TEST
#define chmod(path, mode) TclMacChmod(path, mode)
EXTERN int TclMacChmod(char *path, int mode);
@@ -295,4 +292,18 @@ typedef int TclpMutex;
#define TclpMutexUnlock(a)
#endif /* TCL_THREADS */
+/*
+ * TclpFinalize is a noop on the Mac.
+ */
+
+#define TclpFinalize()
+
+/*
+ * The following define should really be in tclInt.h, but tclInt.h does
+ * not include tclPort.h, which includes the "struct stat" definition.
+ */
+
+EXTERN int TclpStat _ANSI_ARGS_ ((CONST char *path, struct stat *buf));
+EXTERN int TclpAccess _ANSI_ARGS_ ((CONST char *path, int mode));
+
#endif /* _MACPORT */
diff --git a/mac/tclMacProjects.sit.hqx b/mac/tclMacProjects.sit.hqx
index 6016e81..ef37a76 100644
--- a/mac/tclMacProjects.sit.hqx
+++ b/mac/tclMacProjects.sit.hqx
@@ -1,926 +1,3157 @@
(This file must be converted with BinHex 4.0)
-:#d&bBfKTGQ8ZFfPd!&0*9%46593K!*!%V4F!N!5bM&0*9#%!"!!!V4Gb6'&e!RX
-!N!-@EhX!$3j8Bfa-D@*bBA*TCA-ZZA!!20%U!*!$J!#3"!4J124&k!#3&$i$!*!
-%rj!%68e3FN0A588"!,$B!pLa%)QB!*!&!NpJ!*!'2Ad!!#&i!*!'b!F'q)j&0Z[
--K5qdKGr#LbbmbhAa**YGqC5lrB865[JY5YLe-VYS8CN5qZ9e#em)&mr@m-b6hIV
-'9im@[BSFGj(XFb'm11'%,Z5@-dii@ClIFTl&#9mi@Bj,ERFmb5h(&lD0,'6Kba(
-HaAD%%pCbr-JYK*00&Vl`@ra1#5rYA-JYal$#+r@kj)0&Mr,LALm")*Y`mTa`-YL
-4b8*Z)EG[*EG1-LrMAQFfc,1*HGQC64c)(83(I9lDbEA,b`CZ0LRYc0cXkh4Ir1d
-@ITfr1($KLhRCpGYEH&!2EVM6kr2JD@NQh!r*NQE#$@p$AlMVj(hIH4l8K%rJNiA
-FFJ"B!!'AAACeILF!mlUe0Z9HEZ'a@rKem*6Xmc`)`#$qJ(13!'F"A5@1Dd%3,!Q
-#h+SJrj&QN!#rq*BJk(Q3!*L2j[)jMX(A'Sp&@m*@UaUh#Z9@[$1UT1eB6mUAkr4
-#kUq`Ia3%*em9"+FirlYe[1r3NNGl$earb2P5F`N(UXTQLA)rb,Ilbp$($9d%EPc
-G4ehB'dmHDI5Vh08&"cN[cXhN6XKI0hr,36ADjR2"SDa$q2lQ8%iIVM2FNHrGG01
--3rT95$Sii9fPZ"&@iL0h93K@"FYb$q6hYXrE,M-Gr%RZUIcb*HF%jh!0c`6"ed[
-"5Ch`9,"XFhQJYpQ+GP5RAZq,0*d@I@TiFQ@kkC16ZZbS2Z[KVT99ThT1fZM),"k
-mfQf6k-DUe1(VQ#NPQ`2$5eZZ(Uh8,Sh#XDK9,KIIQNIHK`Q5c9Y$4Qh&*-JXc)2
-GPlJmIebqImPljiC31AN`+i-T)HACpUph9rab9bqr1NR$l,#a@`1#Fp25`)31l'V
-VpK[RCQ9`lDlp`a+rhrijhrj&$iMfI$2iQX[P3HVCZ[A&'[p[2D&c'r$LhV`!9CD
-r[1%9k6YM8dZcDZemQU-Z$UCMkNU1af![T2NC!"Im(r$U48M"j,$!4dD#5EXaGhr
-qp2`cRC'lS9QjBl#k[4@fTLqdEFDS8M@T"21"5kU0i@+K'0HEe9V81KakGpm&"+k
-10N50&q2Q94ZlrMZG@CV%F62(UQQmN!"U9YaBb0%4*T@`pXSe5+cDbkb[0XD6`l&
-c`phKbd@EqjijPEE#KCbYNdNDe`ZA4G2AaUfaKGMQ5L9+NN)j6#F@!PXQUl@ale8
-cXHqbPjZ%Z,CU%LC*90rq`T85[,f$#1Zqc0CcLQHHq8Tc"+%p[G'k[N4"59GdU0@
-hA4CaICG&m2E,)UbMIre,-GhGf&&FQp4TUr94lA$J`QM2+rHk+'b04fPK*%V6&bp
-f&YP'PF*Q-iZFf,IVP5NA"eDQA"`D6lPUR&al0FaFF4`R8bi1d91ZI$f9+EFp0Zc
-N1,BmjEV[@qC5(&UGFR&XHFV&JH8T&`I'8kiD9aiFeH$Y(442ZI+0*90Z@fK2EmL
-8+hG&01@UFAfA&8fjDKK6VLZQZa[M+4F(PUGF(&LGFZAT8Cjbc$qe5ZUF)(`EQ!X
-MYk1j-,B+jmU"dB![amA6h0Dr(De9JmZ3!#3-MV"J'"1#`6#L#p9ehA`%a-,BEP`
-A"RF"Zc#b#pQ&N99S9`lXJN[Pk1jfUU)lHh(Ei&dPYVHC)S"R'k5#m-U"lXiU'+m
-FCd"H%Y66R9@B&dCfiE``XK[SfG&3RS'QqAA8['UbJ$(R$"H'QQQeAYhc2*68df6
-"C0TNTG89GehTF%al@"ND+C3LlU6l'VYU6%C@9'35+&@'3G[+M#GrZFSZ(#K&GX@
-T'Z1BlK+[qCpK@3kZi--SFKYJLB+VZ$`+V3$,+$*"PTA!#PUV4)G`V4*RX9Pmi99
-df48E`FXieZ$,++E5S&&NdU(9`*k,XFdE"HhThQf,K'h"[GHCB10+S'Zh-MUZa!A
-`Z"V8IG89J"a&9K"b&0QeZBPLNp90*E$lZQ*%Ui)QpklZ65CU,dh$1,Bm$12!kLb
--Bj04'%H@*f%F'!r#DPbj-D["FY(9X*jl6SEJYY"`D*4$Ja%BKj3RB"`B$m#ZZ1i
-V-H-[MYNfrH,Sk[$E(YYcMI(SUmEe09Jdq+TKc,fZQ1dhA*jkF@"jk-@"PCNAKmB
-MVaUhrCiU!kmAqrAL[Ml-Y`2[p@+p(TcR-&ih[Z["GMYah8j-9m9c[9LZ"mIeBVJ
-Zr,B,ZrAKYMl-eS2A(&EVaQPG'+d(Rr9L-lHh+DmFjS@0mFP`2(SaXLfZ[,`K6E*
-@)q1X5AZ&+FYK5C995"f9@3Q0mflEeC3[Y5q[9q-cMi41FDq8p(HjHk'N2r9-+ha
-mY`TECckH@1A0plECTdrUH`qfB,jI`kS(BrVl2Daj3rPYE-R+jpaS[[2YL43qAYA
-+!kRd&4b'Qqqe()ie(h8ICljrb''%qAkG`r(Qqhd1qS'bm[dA$LFiAdChGk,jcZ"
-`N[QZj(#bq4CDAq#lKF1TjVZA`fRQHaH(dmfRhP@PhQZqch1J,Rar`Z&-mr&XEj6
-cC9A2@HDlP-2CjZ2Cf$RQ@m(KA2-a@-ichd-F4T[[53ld$MlZIScjrLf(XHEl5`i
-A1&p126E1I04`SIPi4RH4qCC`''mqkPE[aV6[TcK--0p6(#iahbFjF)IirS$$CHE
-lTXd64JGcj!VcFHm6c6HC`b6c-@r`ie[0BBVjlZ(3C,jhFU"2mAf%`e6cdA26c%I
-26AHq[1DD2"(-UfreLfhPiikDc8IG,HCEbd'HiqC[i0"Q[TrR-00m(q3`bhbIic$
-EI&rMF,Ajk(9kQI()(*PV2ZUqaRc8MF9h'iGfmch!BEljIS($![2p%`im$XAhVcP
-FDlirjF#m-Z1hdhc-S%AQSpm@QirkVc-II8Drif1f,6@IBN&)DIELqaJ(RM$Lqb+
-('mc(I5X1!1hl+`ih19p4mrGQmc'EPTZ2rRQeqBKK[Z(MeH0+mlh9X!BqqScl`IG
-C$Q[-piFFQ-RiQ'f[FEi'iB4EcFGFSjIadD[d&cjUZpemh$IX$rLilc[-pf%1kmh
-hZacNj@b$qQb$mfN)!al""`EBD$lQebEcdGX##%ZkVl[-Gaq(ejQ2Tm#[0pq(1-J
-,d0+A1'`ahjpaH)2c03TVb42A4Q'*Rc!ImiijLBrHjQlaFGI8Lqp"$[)FY[&h1Ga
-[[Rr+JCQ$lpp`q%RcIBX$1G9hM,!IZ!-IFiACL)qjr'Ec-AFH0KmpmiMj1$pU[Pr
-N!)l!p`N1Ec%I'*(HarHI1B$[e$G-@1hYjJ-h2'Bqj[j2Qirjq,Mjk2qI-4phr3l
-cd@FrDljIjJ#1`2IE(-"aq1K[jS$kKJX$Na-IZ)(jMirqCLEMSqkrCclQbYmh(re
-*Iq'MIR!a2ZTq`R``M)$Gm#NZMC6k!Yprj`#f8YqaQQI[04qi$Tb,Melr*I-aZpp
-R2QE@qme(hriMmh'2(c$I4cRmBr2"im'-aIG9$Y`2[[r+J9QN[Z1%cjmf(h-1R)X
-2[-HFa!Iq!B[K!`03)clZieI-a``!4q$MVMpZ2[B%i"TmB!YQ%6jQhUqDlkmj-#[
-80d)p38jmB10rCMlQ%2JA(aJ*6)U2ZImEjQ0QIFTmp1&[QSmD2QdqF08r0arip62
-1GlcQ,KJ%(h@$qr#",HNMhmjR0NDqQDq((B5Gp1!(Ie(#br'hc"`KPi!U*B20BZZ
-`H@`41aVEJ$d21a)l!MXQSc*)"FqibKXIXrAFGi,Dp2'A9@ZeFPbEAMDdBdF5TH9
-@10eEq0!j2e(J+a-81%)-9CB+CS1JEa(Spp1kJMV,$ZE6@%m[*ZZ#*5I504HaVaj
-IUpSq)IQJLbK64[J6[[4FeHSZKfYTh&V6QRj6lml3GJIf@cC3,T5fA1Pf2GRrcEL
-6T#,bl2jH+PPB@b`*K@($i'-E`hD4V5,E4+B'@dLfL@`43C0X+pPmXYd$BB'S3@j
-XJ*J"E(p!Efa5f)5b[@5EaSD4c5)E,MD*)(63-PX+0SJJ3cD`E%[B),"TCH[$YJH
-%bUD#V3'E%VBlE(@iE,C+S%Hf15"#0MPXF0MFJ!VCfV#YB8[$GJE8ccD',3cE&lB
-ZE#$B3V&TBF2#CJ9NcRBE*-ZiC)X0bQBcbaDEl4PEDeC-$$DfbQa"f,U"F0QiX9N
-(DB0bfE5"TeMpXH&QXme'QddfQdFfc@ElcLB$&'qSGGKbX*PP1`R-B'2&&T)Y*YY
-,YT!!E$PSFP!qQe'fJQa&fH#"L0RSXGPMQ`FUC[+b@@@MbSD5c55E)6D4E#$C6V'
-4Bi2$pS+0)jYEYKV-5$DdE"[C',%TBN2%CJMdcKD"c4!E)H!!'bNf6Qb#$"TJim+
-QK`d2Qadf1Z!,0MKXEYMBX+PK3m2QLZd-f`#f-@`Qf+#`1@&M`UD%$3`E&MBPE%M
-BM,#KB32$CS3Y!PX4YL&X3GJNX!&Kmm('Jdd('`if'f`df'5``@$V)"XGlm((C&M
-4ZkGUZdYrc3HJQE[fmV@b`dY4fSU[M9UlNN,fq+IcrF1&-h+VllNcYhV(QXe$KH&
-,*i,6#b-kYDamhbm'Z8hdpPN2pEa[Bc"Hf'`Eqrl[)Q'(BI@d+Aa3KQ66Q$#CRkf
-Rik#8l&2cN62B'QE1UMF6FLD4cHcXdN[+Jcapccce&3,NcBND`f`8ahc[6R0k*l(
-PeVh"p$HcV@Vkc%rhj1lE**cd1E%4TI*rm(["p0IdBLIirL9fXS[m(8hSm*Cc`K+
-0,[)aB4*jTD!!N!#D1HP(AH6YQZ6bCN(P"!10G*&E0"rP"B-#!%cJ"KHj@90@hM1
-S51EVCecN&i4lj(@$!PF+`D42GC&6K"$NVB1#A1#66lM)&CVKm[*"p3a)6[-ZTI+
-R#6h)1`J&d44QbYKprSk`JVb+8#!%e,R54Ikk8*UmN9#4#SHFr#iA19AcAej-++$
-"IGaG6a0MQV6IHm"ekFHC!9f4c8)G%qTT6HJdL@4$EqC'19+MAZQE,`Zpb6X0pB'
-[ch@4`i4ej0@'G)2FfZ0#jr+'3h)mCPd)$PIpG['bbBd$Sm&YCpSV*N8%q*lc`,L
--Vb["M%fAjQpEY6TrrIjE,K1#2$fh-6Lae,pT-eKcT4k,dLDGSm-I`2piZ4`,+Aj
-mZ$SQe2RT-%U&m,p!209pCAdY9,ir'5f*,Lce6(B6UH#rGNHYK-e#`lT@V0PbpR(
-fiN22P,8CLYE[6A)l-a3Fl0+hCXMhIf4hGU(Sdp)C)Nlh"UYB4ZQCP$jE@i5dHlq
-`95JdlAED@i@1pGX-2LD1*D56c`G!-qL$qI`1R(aK'aGYKkJHS1lF)GBqrm#1F5r
-&RCHJ$e)RZ&I+kU(cMfj0%rfa!mbY'pb`YE+V1UBhXNY'bN8MVI0,X(2+BY3E`2L
-DN!!"CV-eE%6D&pjHpifQCpp`pR`,MXCR30ldPM"SqPfqN5Z,3q[k9aC@VPXlZTC
-Mad"ae"l+qP)qmjTNa2aV%L%j'2M8@'V(ASpGKXeJ&I1VA[,8BAP5@imYB)[B"Q`
-*fiJp"MX-1aal,2Bil!MX51`*f"1a*f&2aTk#249l'[Cdl+Z`Cf$2a)l#RS8p'hX
-1pPcXHGM4f21aBl"MX4GJaf%[a&k%(Bqp'$X"H`Rf8ZaPf-Za9f!RBLGK*f1RB*Z
-`9f*RBZGLVm(1ahCJVm8Za#l#,XBZa8l&6X1bA@%RY%i)30P(DE9Pf"[BqJ3XZ3N
-(jhamE-ZZH@1kmpDM2cj(K[liH4Q4UrYqkShk1hPTd"rr&T!!MBYAVa9Uq#NQJ!d
-XL'UT[FVc'Rca#jb)@VVmB-8RJ2mXYU-bAQZBPaDmk1!eKhQa!AU0H"#m$4mhNFR
-ZK)IkMF+264H14ifS9DhBbh[rfXIJqKXqG95N`mb$1m,ZEE1J-JpbfP)*Qe(RC,-
-CYp),hATK8cHe!@(Q!3mPJRPJAaGeTQ&M,'b0`6JPR*1GJi9LGP*6SkNmZEe@V43
-''TADj&M80@aQQ(QJpJGeEmf$PQUMQaPHL1C"rG[i3((+h4&h*aX,d6`Sr'!HG,5
-LLL-BA&e`f`A2f&5)jN(4l4ITpK9TplB9Bc32'Y`mD#V&V8K8XTX+(qip[rHmEQZ
-6)CS(*Ee-#GE0%BfYGr@,Q*4p,3d!*[61c!42bhG!Dj+AjI0&-6fe-+*DX@eDB2J
-AE2HGqKRZ`E0KqAk3!2-(HApBlmYjAkc$-$epfrKqBAVkRl!9aNa2hpUI[qQ-c`b
-+*FGR`[58-'bTqaIU+kr2jiPJH[+$5%RceE!SHa$BUlj2MZY$Z"0,D9*QQpTEPmQ
-rVlI8D`aiEbdI-`kM#d-cX+S-Sc1#jQ*`h)T-FFSPMR4)kdijH1FUrE`ICYhG3k&
-c&jHD9i!mkb!,Yiq#%bhJ1S,AQ'F(G$LFZImHqaq`X19ra8B"I,QScS#I%M`22bF
-Fbh!M`hZ-US-rak)UiFYBZ(9M6PfiG'-HAIKciG'%3aGe#2dmZ[!L`cX+6b9F3R$
-``XX,Ec0FcI!8+hEbN!!('!jJZ)$Kr$9F`2"L`J@-%J)84X!"$"m`H`AB11(UKBd
-8,Q!B5Z%kK[NI*3HrK8Aj"JbT+%Vi!KC&'UKi3%%%bJC3)`)ckjH`F%I"5rV(@*!
-$`34`*U0!!FjPZ*2K1iC['DjPYK$`LE)"BHI"(J1f8MKJQ5h`+$'+QFe`)m-Y#qX
-S$+"`6m1m#ZXA[-Z`%-(A$*-4R-l`L,)[KJXEMQUiUq(!K[FD$QXB51("KYmCMPC
-iXTR)-)8bq3dRpRr#STJ!,P04Ck'jX1'6KX-E,QGiTTNUl'[JpfCl#XmS,+TJ+(L
-EB3i&0m(rc(5'SG6`2-2r$,pcc'd0RlEKYBBV'pj[f'p4e3$I0`XE1,rKJiCI('j
-a`am1)4am9R#2'djb`e816rQc@&K4$8mjLMIJ8Q92C9LFB(GLl`kIV@&cBMF&Sj2
-K[)D61qElKY%@VZqr`"UqElLlUhcQF&I$DIje,,cQF+-E6R-8-R`$#qFeA0V`p-+
-M$HHeiG*'(3IFfD+FirqJ#CmFSq""dBU'8mhZfK5F9kmijc5UD6@X)DYS9LXFVdG
-SI2[ZajV0L#RjrUG,$qTI&,AUe8DB[P2qpd@1*Y*'$4XMleL&+fRmh$jlepI('"V
-5f-92!d2@K,9YfS40URN8Pjp#+a+-EYSA2Ukq-00aY#)YI*!!Z!h"2&[Nq'CP)NL
-cVQQZeH*+Em@mV40KSqfFfGMGpV9Y'QllCKAVBafR+M9dcQQN8@ZbQFi&V1diCdl
-01HI(DAA(G0ZY9#LYl9c$`LL**eZ96Q'GF@9AflQS@Zp%,Qj8TcV1cG9DfcN[$R9
-0'k2aD+VTSTU6kBC9f4)QX`8VZKV9BB'[G9IBDBK@2&+fZ[,Q5pZZ1B0Y9rZ9jJS
-S,DacjP5cjEaYc+6!%hE8c0h-*h(G(98QCa2BeU+[jSHc&cdlXQaAKmQ%HC3FZMY
-RVfe1BbbD'YUqFpDVfP#ZI-l3l0NfajbKGTQmZ6DH6@Ql!ZNGh8KVE5*`'jZXUVK
-l`k3GB5ZaqqVB0@k1M9%5YAE2KQfFEDf11+P1MD6@)FUK4&#&KG$J%QN[lET3)AF
-`h@l4G"Xr&PH#G9@Q)Ph3'MGe'c50FA8fhIM$GaH50C6%,H8+Tk2ifU*N9aSh5q-
-U,J`1T'bTL%eTUe%*NkK5em9(mU@kjl(1VlAU9@H[G06mZ+&'L'9'T4J6LQBY%,H
-R)dC9%(qPmUV'd6035m-b"#STb+[[L01BD5iKDdNJ-j,XijPeC[i&+Hdm&,m@LK@
-UkC!!JR3l0@mD'5J8HaA+eA3b-jDf[AUSh"*@)MREk5DGJY2#b3CbZYCN@GUhQ"G
-RdhbKA1fFHREC+L4eLHEXR3eDCjf`b5LRhSY)j44aA(L9(Uf88kU9fPSF@Vpq[JD
-PF5Yfkh)0`hG8,X5ilH8YKpfQB(&+`ALMSR"6P"&APXU)M-+1`*[dL)e['ac-[0)
-0*U3c(5Zf8eGlCeAF5')Ja+CdFRXfRlB8RLriqLbJ8V-#4'T!9$,CS#4E,)h,h'f
-maSpEL&bf%"h#k)T#c&A'A4p8dhA$8U4FcS+4V"`C)d(XU&AR9krZ'cYMVUSJ-1i
-4Z6+ZdpbAC!qZ01l@@G9@)K9V`6+Jb6(!pPajTD*4)pRNY6-q'[(P'jX9cYrCjPf
-(Tfc8*lmkhj!!HP4e0j*0S3I2p[B,1aFX+cK93C4EX[B3K+RJJm*5"MhGBKKYhGJ
-X1QYD`2hL&Z![hJ#RLM1!rZ)8J'Um!H)9Ei6q``L0q%e9!IiAE`JKa@mf!1+19J!
-5)6X!mFS53,bb"6$H!$5+9l"X8hX43*cC"1!cU`$Y-lX!R(BCS,fb$G!q@3H)6qm
-$a+FA!YSAEJ5-9eB#Z'8RJ-XfQpN+D&qi&X!EY9fd'-!GE!E`b'T!Zm,G!0jS14#
-iC6ZJRD`(!NI80@C"J%mf")(,V!Ld9rV+,JP`K9X#lBalh'D14e'`+G!HZbS)h'(
-R4FX#h2'f!,pC&q#,,M&B'$3YE!bD&K#p(J@Qak0*'[4P1%U$bTLPqL+MBGUe961
-G)9MIc+!3LeF#0JBAcL0`b&FYD*!!XD&k%6LSqp)Z`ZC9DH-9YKc4pf%h6QTihPA
-6A&J9ef,&#)a4RMA-&A989liLmkrI%FlQ010afq-Ze@YUcb+8X"D'AG)'6H)2R$+
-JEfhC#NPj9(mSAq$BT!+mZ9r)Ma@TBr5ZI[(5hG2bqH2iXB`#5krEecibd,mLfpq
-Z4jqVf[HTlGlIEJ6QX18MVASTp+2A`hk[,fmF8%rqJel5Udpa3$hje8cZ3FJ"pH6
-"Tc-1+$JAr#8F8&E25rJ19cNb*KX&q5Ke@&i"UaHrUH1a4@`$YS4Ya"k$(BBGMMd
-@Haaf"(BNpJ6XLGL6X#GM6m'HLMd0HcVf9GJcX'GL4f(2`Tk023Gl,[Bml'MXqGJ
-af,(B#l$MX"GL,m+1aek-RB#p"(XTpM,XjGJVX"1aNl#6X91`6GJVX91adl$6X61
-`9f'EX5hB9Q`EGMEf'Z`mE$Yf!EB$Za$EL9f%[3klC&BKME*@ICCri+Y$9'cmY'[
-ljarJP$R`a3TN!TD2@!F-,"+a&KJQ@e8PAU`1EkI5ZfiQM&Mjh[pL`$"Ur@+9IMX
-9paP@#KJUB+1S+VScL[!-S`N-*,#4L(C@$5TJ1H'&Zp&*Be6S9GAT'89k1pAPK6V
-1[!bI$i(T+HJ6CSBqIlMR4PK#TQCS*aQ&RVK2G1Tf+6kXkK$bXq!2X-G1M''8,rS
-6[KkQb6b[iY4c1Br,m(UC-%Cr4mJCAbD-#GZik[F,U%bVc!bqB'D)6'FrbrG$PU+
-$6(e*Gi1B6'D3!)lT5e#083X)BM'J()4K&(3ErCjmF+HCpaXmBc)+ZZ%r-jaqm,b
-*JQl0@fH8Bm'R*`Uk05HHk31ik84"YqER%`AGQRY1&(5RT)lE+1MQ[Sb#EZ+0JQl
-3R#MS6JZPLB,ZY0#A+1K1#e@*JZkd%*3Sk0BU[N9"GeTFF++J1bhH19(3R4CAR#M
-SeRYC8G#G&VqCU*P-klk0pN6iq84"GeVFJ++J1bfq2e(3R4B2RbMS6SY$8"4dTmA
-M*JUkdq*J%aU[p(-F40pB4MdT#VSckKP4d*h42BU#lScbLS,ZM2TE&(4RK$C&3AG
-'k&)8G'HdSC,4R"(rRd#lM2Me4%&h4KaqSU!l)qiq8G#G%AqH+1M@bX0&3AG'1fp
-4d*d4Rk)Sk-k)+e%8G'HdRjI(B4ReK#MScSL68"4dDkALSU!lmfd1SU"EMc,C@fB
-eJd4"GeBc3K4dCp@(SU!lUcX9"GeCe5B+ZV0#fU+J1kZ0R@`QXYVIbaB`UhNJ#VU
-ciL)8"GeCm8Z+JZkXZ"Y&`9a@I*'LS$ZV15F+ZV2UG9(3R49(RL$jV$Mb4*YQ6[d
-YDM4cZN[4RjR6E",&Q6R0!Y'BQ90ILDV-R1j)G'6Qa18S'mHFCTYSaFcT,N8GCNi
-mLU)(-bFq2P&QQ4-AT@c$Fq+D&2@91I&HLS,ZR(TA&(6Ra#FT#VTciUN8"GdjF5r
-+4M[h,!G4d+e9PiZ#lMVK#RR*8bFm)"b0GCURSU#l6R0+APM8UAG&3AHGqNd8G0I
-T(N9"GjhbLS,Z1[&!LS,Z1R%bLS,Z1Z%98G"G*hj0d5C3*jj28G"G*pj1HCp8*hj
--8G"G*fj4`FPeQY1LS,Y1['ZLS$Z[f5`+Z[1Dl`,dmTThmK3dVhi@"GejpBqJk,c
-U&!AGHI@S+1M1LqG8&(6RaIXT#VVc`P@LS$Z['5-+Z[2LL43&hANT)4F&hI@D+k+
-JZekB4"4dDaASSU#lAV09&(6ADhk*JZjkc4e4d&f[AK8&hIAU!9(3ADql%!AGpF*
-*SU#lAPbUSU#lAVbSSU#lAYbNSU#lAVdP#VVVaFdU#VVVrj1$+1JZ#2q*JZk#F)m
-Sk#kScd4"Gd&i4K4d&i3C4%&h360G&(3A0$G&3EG@R#i+ZJ[UH9(3A9#2LB,ZJZj
-8&(3AP&F8G"I%ZbS+ZJ[LIa8&h39aX)U#lS)`VLMS,JM6L),ZJM#0k+dYD[D,JZk
-L-+dSk#kU4d9"Ge%i4K4d&p@MSU#lU"i9"Ge&cAe4d&h8c"8&h8A01hP$904m%3A
-G4I@`-1SAe6qLS,ZSZa-&h8AP&3AG4Gfa+1JZkSj&3AGaPJmA(eK@&(3AaEmU#VU
-,HK%J#VSEY'X3"Gd0kQP4d0fJf5m+ZKZ%Ed9"Gi0`TLMSEK#@%`AG$F*)SY@[3CK
-%&(3h#$1)JZi'c5G4d0fJq5J+ZK[8dk+JZd%p,3Uk'p56SU#l3Eh"2H2M,X"dq1$
-9aH+$AjJjKSqADI$XiS-2&Ab%$a`2cP9I54J)$Pjmc'1iH2(4kr$aiJ2hJ$[`J4[
-J0FB(GU9HI'!)H)[aJE@B-rM!1I3M2M!'Q"SIXaY1B(c-8qBY2RSG,Q*mp$Bi$Km
-p!qm`2QU'BaNIHaUiP[%TTG@DeeCpHZd$lX$(VSFjJ)mj$9mX2[B6i&pml!ZS"4p
-BRGQ)$e`0lc!q-)ISbQd84J9AiQ0Qderi`)(`11-$Jc&cm((IF$[MSlr"&2LBQf!
-hI-`TdC2EU,N!2bdqHT+lp@PmE2k'$3m0Y4ASmK8f$'qHPEill15AD-'!QqRe!i2
-pc+4ljR*PPXibG+V9Qm4IDZI,l(bjRC[XI)@G*pTjNTdRfhQ+RDqdme3l6l2cG*e
-jN!!RrKPf[XV1cACZd4NCQ0&pC8qFCa+eGr5JR4qbmpefRQRR@ADHEHHVl6c(cR2
-YI)fGjpRjAM[2Yh1lR4IBq3eflV$cYACHD1G11bqbmf)lAfIR*ACHDZIVlEc-cMI
-DfI6+6ADqfFjElEcFcUqfm`SlVl6c+M[IEqI9GPjMje[YI)ZG(lEc!hCqMChA@Zq
-DHlR0cVIEqBefAMIAXlPh[mViU[#5j,[$cZ[YI+HG0pMjYAEHD1G0GYjXjbef[QZ
-ZlX+TLh59DU4)1R21cU8YkKeR5'FTBa-GkP'1KUA%DjT,U8(&epNj2jHRY2``$DE
-#'j,N2#YmR*dIY6MG$qSm`Z)H-Ip)mlrHcU2Y2-(1Vl2ca61jLbr+pN6TVpjicj,
-"CG[LkcTrqZ,6CR,(IhGr!8B[EPGea5C4CRRQZ,Cp0#Th`VIG!AeFpa0Z2m6EE[6
-cUq0L%333'DQJehlp9LA)SdcUFTq(9d-,1hR+MllL2'cjP[TkH&9d`f)p`9ZD)!q
-[2@ldGI0bD11VHB`$q+51QhdHYX[h,ZD4ME[1``ZH*EiHJ-2E1hPk4k[+`fZ2Elh
-D&e%H0UAI@Fc6T3hlk#2KBmfRl0hB0f$IL,d(Hbpf+rCql!2B"l%2B4r'2S*p&(X
-(GMhf6Z`'l'Za'l'EX*ZaGf(eQPMCfGLVXA1`Fl(AB1GKfl(cX3Z`(GKVX3ZaRGK
-&f-ABkl",X%Zaef1AB@r!hSLp#AXcGMRfeGJ9f*AB9GM9f$AB@l#[`Gk+ABZp$AX
-l&VA2Pf)[`ek1[3)l%6X*1aNl"GZ%[4)l&6X01adl!hX9YKREJXeJXpL,X41`Vm1
-1aXUVd[$cdHb!I$3GSABjJf`#HljBNr95HphimVGACBr@IHdjQJZm-pL6`NHK05K
-3SFffNiI,SJVdU(T"KEC[6M@XIdjeY1$&!bV9I@6$)*N(kMfTCdje00YRG3aBGm-
-%`CCmqEkI["(1&"iXHGbqZ6`bUFk&@rHGG"9mBmFBEj+RlCY[,r6MZI!AX()VAXY
-QirhbY(fmMV8+6B1jm%hQJZ)8(@rmNPkfca1Ve#I5&ZGRqIab5Rem8'V0Ghf*a-6
-HEe(reY&-dG[Z1UaZaI,AIDFrU#2iS&A3pl%aL#Xrmq5DB-RB8m%T'lEP$alk8Jj
-rqP6H59UkULfI-LlpE#(BFee2X+6(V5DS6X@qY*SBRVfGkYK50#Q'AIQp4EK(P2S
-mGC*akbSa#dqp'rE,5+R28mX$+I9TPkS#IiP5(pQfqMedaUU1KFZNrNd@2a@PeEp
-m0`p[9SSq$fmB'R`H@!C,2JrGf1McJ)+2mAPJ,4cQmc""K[XmD+JieZH"D2XiRiF
-*0m,RJD[lH*m(M3BMI4ld$jcJmm$lIU,2!j[M56i2E)kRq$c`kjrUmk!Ric5I"r4
-`ZXq$$SeAq6aSe$M$ji&Ar8bI"d3cbZG"pmCC2JqD1-lfH8"fjrJmD1NieqF"lCh
-Rmk$pBV62Jck2mhdHH2R(q$cSqKMVmm!QHS(2!j[S1*p(DrliEKlB4#rbHG!B-Yl
-RJAAdBTm(&VN*2Jqk45laHG!dFUR2Jpk4bh`HY"CFl[1J+q)+R`HG$K0p([5962*
-jd'BafHG"PmN8R`FY$8dq$rS-V[4jd(SbeHG"VmJdR`H0+00p(PCh-h`HY+9FjI1
-J,k4j-8r)3UbLd+65iZY"HdDVc`-hAC[2Jmk9Q6i2'PKQq6aSETMYml$C[GVR3C[
-%(*m((4irqfUHb)('NhIk2'cphZAcS*2Mjh`HG[*jR`FfrfGp(M4UI0hRi3hQ0h`
-H0SYrl21J"qC2I4kYfrklHG$CmZFq$cSY[ZhcS$2Q,pr-B`G)b,-em(PBmf5#jCe
-A-MXHm*lUf&32ImM8D@if69h2i6VD5i1QcXKp&GhG2CpkmQ(dT"fZBdR49#%G[YH
-&)m1,&4kX3lqC@MN49**N05+J(N38LhfY8EJVmj@&L*YTmFjE-epkj'#QUNIA)GU
-,GRke0ebfMR%[m%(rA4fl,q4lGHaqT[K#(31&(+J$"HYI[(H[kpHR(jmip*de1IP
-()V5QFIVZ6"%kbKN,'c)&61N$RqmKrTRFJIZfj@iq1909TH[BSm+rGKmm[p"el(R
-&qEfhK#Y-rG,rUq1(Ea+$,ha,U1VSRd3[[%QXp3FG1r$T1MB&%dIQY)L!ei2DK&E
-R0!VKGeFDj#M,KYrq+5R@SNMU4ariBf25HJ-el+YM52Y'43apciHbH$p!(AaDVrD
-22pCqJVJGCBEr!h'VQqh0F3KaZcUm!BKl`58ElFf`qbSDqRXqc`Gbll[93mKpX)l
-pb(f`M[h)I@mGqj!!Hkf1'R,R%q5HrX3TflS!)2FGpr%5FRFAHa#jeqVBMpahP2%
-LFUr9i4&!lQ['IpchhJr%V84UpqBiK,MlkZ$c"#$Z*GA'HHF@T[SZ@%6FaAF3NkT
-MB$)mMjJ'kpL2G2E@X3rTe1TiIT,[U12&59kVBmr38h@S[Yq,c-HMA+Sr2YT)l1S
-39FHGfde9B1qhB2[1Bh885kmq`j!!Ve!U&8e6iZ([ZBRAkMTaEahVAXH+USjeBC*
-N5Vd8QAheFX11ATfaErJ!l[8)CJLap"j-IU#1fZ6FdfGKIf`qfQE2ID@-D'MAM"Q
-@E4pA01jRUp5hKHVql"EUDc2YlD-AS)l@@T)%M"Je32VU8,1HHddGfC2VVD%Ai$l
-dYXm,8)ICp[AAF@$EGfYDV`Al8&a'(@p#J9lkKY`Mq%qmCR9ZjS%Q+UJr1(hT[Vf
-jfc-PCiT0BRL$q+fjZaX2jfDHb&3%kMTZ8aHjqaMU-pQbV'fqeUqX@23JfP8(6&N
-T%BSGkAZpCI%#p+[HXRJ"kZ!,aTPL"IMa[HSk9(ZNIY3Imq2'kjVBdk95Z3X!VbF
-2d'[3)l@Lqm6,KpDKQelE63@IkE(q6f-B,d!GFhHfG[4LAljA8+QriXeLrpH0KDU
-Ia8+(qm0LSF2p1V4a(P`hUdpMS52cJ`QmV0SmpJ*Rk&lp%jYV2X&8VpbVVQ-2Kq9
-3(B1Xb+GeIh[MeImG3$TqT6GH4cl2dKZ[$FfMk,4fVmqr&4Y#lZ&EX51I"q5Yf)i
-"mZ*EXEj*l3Yi+aBJprDS0Eki&+h[2S(F24A)e!X`1Id+NfVSUa(PH%"f1KiATTc
-qcd1`Lr%$-H8Fq6a,6$N(GM'pKIJ)GM'lF`MMcX$Rhf,FU6hr6r9dUhMr[ar"q6G
-i"*j(AM[UH!PjZ3XjL,aUGAJRq"%1)+rH3[`#2!Y"(9UZGYp(%8VRAJ!+GZAa!b!
-#ABGAJ[G"hT5eaC9&L0,ipNY89BA,mF*,e)%kKRC`08cZrAMj1G!IASDARhhhFHM
-Pjm#p$ZdDK[UHErq,cB(ld(AXHl%j@)I(j'j4TC(00'cN%G$4f$e1XipSc3`d(2R
-NY-Q+PN5[[6ECEI-J8"fk0ZUL0K'LHC!!H8Z,DNZe1jNSfFSm82[&r!qekRC-EUp
-9+i@"4U8f1GBP$%6mRACKY1Vkb)C"-Jm+AHHdkMCdRG1kAC*`Q65ICfd!q%+rShN
-%j0+P"Yd2"'+@5i(R!*Z*"q&,mrl#UQ30[haDUIAe5QkJVq96`N595CAD'Z,%BEV
-'D-j65HJHUf(8j@'#@JfM,NqL6G6P3CZSe6VUmX$VB$@-ZMb`3&J0Sbj2SNh8j8'
-EU08kk[+J6G4U'(9jd#CU0Bbk2'J6Y4T'A4kdL9S0Sbi2fN5YKP'A"hSBUf(8j8'
-EU08`k[+J6G4U'(9j%QfLfHrR5E5*ZMb*0P'A*p%Qk[)NfN4GRN5EU-Z6D"0eH4*
-YSLj2SNh8j8QdLESmL6C4PbI4*ZVb*0T%ACj%QkM,NfJ6GAN5ED)Z6k*0e19*Y)Q
-k2)Nf8CFRd5EUmL6D4&fH4*ZSbi-f8DXje1@"SmeU'(9j%QfL,NqL6G6P5E5*ZMb
-*0P'A"ffL9R1Sbm1b`'SBGAN5ED)Z6k*0e19*Y)Qk2'J6Y9T#A4iif+b'8CF(ED*
-@`kM,NfJ6GAN5ED)Z6k*0e19*Y)Qk2)NfdG`VfN49(V5*@JfH5CkiRTNFV3E25Yh
-'SI,-i@JeH&EULI)SjFZ4"NpA$mc[9S1Rbi0@cjdD2-02jCR2d@V`61U*md!BD$9
-iZM`SI,BD2&dH0(eD$CiZ$eSpV3C2PfFa4k["dq9CbY&Um(4jVZHi8i0RR!G0RcX
-eH,VlpNlNX321@kX4e2Z3!-FV80(42-,E2-[I@ZJqapqUM[9GlrPEKBr[U)U$[e@
-p9"T8bqBpr6Bd+hH-9QSM%qa)2#d0i)elShK8Mr$U2J2cN`)[q[HqI#0A&SI@pDm
-XV&bhGR3Yaik"iUMSqE`Uh``XF`$@@*KHBB@&b4@@9[JCB'H!149@9"K2B61&U43
-@8KK'B3q&'46@cq298XV#f!NE*dbEX'M#N!!*qbA-PV"@`NJ*fb4-NV"%`J!*Zb2
--ME!b`VJ)Qb)-L,3M$)H`&m*-#1XJ6)'`#X)%#-XI$(k`lX'S"dXIM(Q`iF&d"iX
-G$(9QD31l(-aaX-*0ab)8UaQ,SP#8[k(N%bBi9+A0aU*+(mBhf0aJD[-!+#(Yre3
-$dSH,&pQp3VBkPBFq[FlRSBrZDHI*(kC-[RqZERVVKX8mBA%U$cehRmp$AfleHHK
-Abd*FZFFS$reY@BKG(QD!C4GfHCJ4PUhBj@'1@"CLPiGCBeQ)A4lQN@8AGRQB@CD
-Yf19KVPN@BTH(Z@GCL&dHCU0P)ACjQ*q@KGMPBFCD&Q+A"aaL@BKG(ZDeC5&fHCM
-TPSABj@(ZRq6cJ!NX@l(,!fk`E-8Z$pM#XK@l21!2beEXmS"4,&Zab`11X@c&,Jp
-Bal)9ZccJ)FY@l2,!AQRCLPdHf#XY@l(,Xi#MC5YfH@#jY'c&,JmXPjDYf1@"IG'
-b&EXmR4`Y@l(,!aZQC5YfH@$$Y'c&,Xpe(#eEXFZcK+0P+hCjB0HdE-8Z$qbDPUh
-BjB&Gdl)9Zc`hF,3Xa#l2M4`YUl(,Fa0(beEXmYc-dE)9Zcc,19UfBTF(iB5@VGM
-P3CLMC5&fHAKeBeQ0A4jd%eUfBTGR08I,9Zcb)"[DXK@l2'MiYbc%,Jr+X5d,XFZ
-$K%V,IZcbV19SfBTG(M4Y@VCLP`G9QTDYf19"Q+9P+hCjd&jVfBTh2"a4HGCcE2(
-eh-QaeHG"C@1Ecr0DMM0p(Pimc[*jd!JjfqG"4-692JqD6bf,Xm[c1Sj[pAZReh0
-mHcY2[GCZ2Iei0dI,#PhrrEUhF,5Xd#i2-LXY+l6,mdD1PKADjEQ(Sf@&6[,%phJ
-[4mX+lI)JMp@b3VXml!iY+l6,m`"(beEXmMc)dE*#Zc`2FE5Xd#l2`a`Y+l6,m`M
-(EhAbE*H8%H4jP10h&[0XdaMLVf8r2KTif)1pQH1I[9P2f+$qfMeB*PMHmbD9e+P
-Vbq8Z!+q0@EXd0j[r,ammV+1p0+MANJ0IT#kp6rpqHhR`Q'E[jqTB8Y4VE3r![3j
-T2KqU`fJqAj8NUi2FFam2PQrX513Uh*AjZM@ITcpeDqC,MabFdIPrUrE[kij$U[d
-(kpL[fRq`M[fUrII@X8qeIkf10920i-#pHefr2[hia+([V-R*2r*4hR0[Z6X64Ri
-'mlb`34[#91l!jhZ)IbChi,jYZCY2eQ[cS)lG8Ym(lb28k,kl25*eqqjLJcT@(09
-$rldk9KfpfGUp@YAqUbD16+)$GHaKh&0e$-U2eh9X#LD1c'Pe$Fe*2FJ'Y3QYcZQ
-PaD&M1)BFXpj!-NVi2eZp9cl`aj!!c[HK1MC0e)jaZhAd[hQVUSl0Ned#kZ!E6j1
-mI+mm!aI%2E([XUiPL&[GE'q13iMEeH%030`,,YNShTH"VlfmjGKpH$k3!([IV4j
-#lS0el%IZJhAX4qjlkpL(h'Yee*!!1jmJpr3R6YR@"3#jllL2Pj!!Zl[BJmLp9XG
-qj,kMM"H4Hkd1M`"bAc2qillhIL$ZLAekPEAp1i5iqqVJm`3JlLA9aRRR&UEk,PK
-%h-9h%*1UBf!b2)qB"Z[BMh6feV%2kG6UH(k5lkMMa8PHUf22d&0eU,lILmc(eel
-R%)if%VXk409ajhDpCZcl&QcIHDb1BZN04Zp#U938&j-(i(YZiV@k6YaEalVAXD+
-UBefB*0)cX3%+qqVPKKfp1Y*l94r![4l"$#'@hS2*$p44QjalqLcXMme(fqbjVl3
-ah"dHQ6($XZhMLXEpE*AkYP$GRpe#I@fQ[Ahd!Y64@NZ5J"'M"NKI(@V@FkqT)hY
-b[6Ad!Yb(h[Cj!HS`fllq1JjXqfj0kl9J(ibUe2'Q!d5r+IF)rK1[@CfEHD!C[$p
-h9r2"IAYcYeqNBD,B-)FhL0qDZf[XiGc-%q561Qj6&lRl'1ScfE+XEEl@VkaBp#$
-D9FHbJA)Kk0ecY)kKqp"E&Lp![qSYLaHJ$VjJR#PfbKrIUkj$Y8IU4rda2fk)6F"
-pk9+Th!9!B3+%L6ASN9V4IH,P3q[36DrYTS,2p&MrTc'-&k#1Z6YE1hUa,pmVU04
-Im@Darq['3YA2BU($r@'ad1&q(GSi$kkEeDHad*(j`34H9QdHHi%cG+rqLFdeRf#
-U9qj9e`'Q1Y)IY5GHUG1k[lhak[m1)"frdKZ[)jpRkBhAKZC4G&UleqIILJdKpr#
-Yf*(2!r*@E-F!HI'Y@0qNpJ@m&3Z3!(Yle"TIA)V@Gjp!lTi+C1S&Q*aqK8Nep!e
-U,[*rl(3m,N`jrCq(B"IM"f,+1I*jPTKb$ZaLHJ[a%HaLGZF3aTf"clr&Z&0lrTr
-Uk9EarRmrJ[0[m!JmMlafe2%5mR)AFK"jeHV`6[!M(%"H[BAi"AJ@JMV@(1dcLP$
-UpJ*3X#Z2(`!4k$Um%V`2mUDX,DiX3T6'YeqLULTFMKGHSJl8-E5$Uf&blmI,ci(
-qm$+mr1blMd-[2`IZG@MA-06hI2YIE!lFKkjMhi[0J6Vm@VhU`IMmFYV'e!4Sf$5
-dD@fT[lGrUq3lEImBqS&m%h@3!22Lh%cZK,ad"jM2ImE@rBaMF@R+'*le9fMqZii
-p,%!IZrrTl,cUPc,-k@&kJh6aRMAch)mCqAH`GD[B,f)hj-rjD#(hMB2CJ2G,XA@
-rm(B)YZkq1Gh$ePfCdjjbYQkI!R,h!c'jp#0h2X2Dr29(9RF"31jq+EEZ)her9-[
-!eVhK@j[B+[9YSESrZi9k6D'pII3#e"'aGII9dF0+A0Q+kDfK&q!qp,E2#e"(b0D
-pUii$fclp6RRH6)HY1l-d[a@rBZ[1V2MP!bJh[H+a9B2lmi@$Mj05XA8Iqmr%IbV
-r#erjA(l&VdM6E241fGh(8*p&E0epGI5`G9IUL0LkAlN2[@Aa![5VhV*i!HVJNlH
-[VpbVVL0JkhkPMU2&(VEZSm`f,Yc8mFqLXcG96p,RZrCdiKVf%PFC,H0iECp9h2U
-&Z25j(-B3YhBKEYeIDX)%p@@IkX5pSira6TbU,ijE3prR&+IULq2U2XfKSGQ#+bA
-cThqZJUAZC4c1GA(2,-@AXEKl1rR1qLDqV-8pc1&a&hHr4S6QT&*T6q8`em9GH)X
-+$Z,bqcK-F(%,rP%"%[GX*erfhr"41hAm0BI*,Zkq8p4J39a@'1JB&rIH+r!9VBZ
-r3DNG,Qk,1VA"q[*V(%DkZ'2q#&r*kJ"rR1VL2LaXe1MLCR![)fjhF@rqIG8Up`%
-l3Yl&GA`Ahc#VibB1*lZi1Aq0ElM&JCkPEckS(-!$iZj6lL$Z3fIM1ml&eB2CdeE
-IabA1H)5,bfNq0,QibEUrikf1YqV1JVK2#N(5)qUlr(cUq)U,HdT5Kdq`[Vq`d`G
-2U,i6VBjhGqkTT2F9*eQqAqE`'4HAHSrZ1)JlIcIeRHMLhKF6F)U,'rXh(0l[iVk
-UAQ)18!HcBA`@PhlfBrK1Fh'6[da2bIf0q&F0bL$ZfXr5CK,hcGX)H*@,qiq`M%b
-DcAF'!9MUH"Z(8I8ddAb0P$lrrJbYq%3pcGl#4(%2-cr5DqTT6AFAaH9rA6fUmM&
-hSlMXCcVpm3H2i$[6iZK&QCGMB8a*'Fl+rPdRhi-hi$[,iVlDQCHIZ`EIf5jZZRT
-&jYqUfr'GBhhrNFkm,'TQR'Yac$2*pqN2ic[2jYcV1r2b3Eeb'fhppj1GHIPC`9)
-4rVb8rM2cmSp8maM,4er)R,MMGp6BdKrFQFc,$fJQAH$L2RB6ifbVLrXjc6lC2GA
-4IfCHVY1XCrj`6pbCc-[EPBXC5+SR1hh6T,iIErRQG1EP(fl%Gl',QmMm0I2bd4[
-9+d(F'1l$c-YrS0P$[G6aG'GHrTC3)cK,I6Fc4f4HTVqY(VV-k[KFT`mqqaFDV&,
-(Vmh0JdrMZm,&,4FQN!"jqI0J[T6YDPlpCjejqC9K!LDjZ'PkkbAcmM'akLJFTqY
-@")!b,c0hbMI&aDeP[TKjqHqHd4d(F6r"2CPjZ8TikdS(cpl"($,cX[i1)UDkI&-
-e$lID["5-4ljQqM1FPcBZG4'i)RfkcFXSVV"PEPj'F@R0%B-A`BM6A0`&hqV-b`m
-Sah5VilFlqI3QIiD,Qk3PJ-c,0i-*!Rh@UNfLHINE'r!e'ci$`mZmr,cQQE`9bfL
-Q5VlMY"J8qGF2d"pQrMha,`6)IL2cY8lIekX'DU4ZjVh"'B+"qGj26qFIYlk*iXB
-+[df`[SRL#RV,DrSQL[X-peSBUkIMcq2iYi!$-QI9Q`RjiVJRQ"Hj0HA"*!8hdf-
-h@0fmfC2p3Cc[E@$Zp!ae-rXX[NPI#qi2ik)qRRijKfFX,Vkr,hIQk#m*'paSrFh
-Hie,$`9r("qDP*2SLjq,Z8ZrHE2d0APhTiRiA6*QkfZS!E`9eC*Ip'MjCTHA8Ie,
-([p)mN!$YkeMP$ZiM[r3jI-*L0%ii0UJMIe$h,3pbFhHekmKI)@`JE$JVK0Z#qmM
-rr*hij-hee'pSL%[Ibik$[VQE1A(XE0rEZ03RKBp0hd4a8cAI6Gp(F8q$3p*AfCb
-)iXB++`GiUq8,Q[A"NM0G!)H2[-I&[9hcA[C%RfIq#3jS164+3,"96KpJ%5miS19
-Hl5GN$jaAE`AiUH@cAmFRqkN,$VEa@H[Cpq+6edaMYAm*jR6,Nm,+XVHDV$N4i,1
-@hp*1K(Y8hbV0&DR[@He4C-I@*%`6i,2@di5"`*A83Gr+23%l8lC(H``-)ILXj3[
-D"FM'El,UNAc2DQl*dRqPF&V3pberr$!qHFA`TBqfjhhVFZ&8jJBip4IDmk$e)m*
-bB%$UB#i%mk$P#HfLlRCaY`[("MLlj6(YclEBIDMk"'HhI(N)Rb`aT`Vc"ALLYIH
-hmBQDp'PLf**qqY$("H5N2[SJ`*%YKe6(25lZm3k1E2f!GLhXjG6h#$KHF'4VVlJ
-Gf48`"PQ6"MLbGCAQ"!mbe2GHm,(Jb*ClK"[ZYhkP[`0me[+hkJRQ$cL!f4RF8qY
-2LjH@I3,eXAF*m&RVKi59Z80#k0X!ElAF,Uc`N!$e%cZrS,kfZc@c`'A-D4j8"2@
-eA5mm`4j!IErb(qhkfVkSh3ScK(N'VJlUDheB-jTp*[1*hKTI6el!9D[8VbBZQUr
-MY1pX!#Fa4k*mq6pXci2Kqjr%pe%AY`3FP[kT,+jMMHlqNqiq,Rq3!(5IF(([%UC
-K9`"d8[FKqDip86ZE6lPm8qJVNfqT--P[ZR`I"YqBq[lE*c8$JRcAXTm`q4DTPp3
-HQ'qG-(5!$dSr*h`3m(UQ0rpp'aq83[8Nqa-9GaYc92""+9"IXMZ&k%r0!m%(TGp
-8Ep%Ai$cU$1Chk3R01AB[e!fq$2""kD$`Nc!UV+32T)p,TjE`b9[fGDSR`!HPTi8
-9L9AI4qJ(`3HPpfJR0GrbJA-#I&!k5lX@CL$eJFrNRRj4ZkIJ)8lkB[BDJJp+SIV
-T@UZ$H5(jaQV1bE1"Mc+VT-p+9`J[-VY8b)EID2GCkBZDLIr#m$Ge"MLJp%&K5RN
-&m$1kM`!(P1ll($jj+lp11$A!!D9rdYb9Gbi2DpmAi)$5cDS0A%!qZdmUI8blL8i
-AphX2YA&!D8*h!+CMGDRfYS)$5ZZ&9aDlI1m6VJe`31PXc9&`QIVHS6eiJ!0+$fN
-R`Gj'PA!Ar5BiS25VfL8[9GMr"`#3"!d39'0XBA"`E'9cBh*TF(3ZZ6c4+J#3!i!
-!N!3%B$MdF@X!N"%@!!"9i!#3"2q3"%e08(*$9dP&!3#`eqX9X4#*PJ#3"3%(Z3#
-3"KGY!!"#QJ#3"Lf[$[J'I@F6[mY[YLlmPT0GX9qjPlFpSha%14d8,5UR,[3lffb
-IX9DfKQHfXPX(mIAMjl8F)`[[V#-,Df%4hX9[XE1"Jpjd)FYjjU*&&Vimlp+2,(`
-CH'56E@5ai`[C(Ep&`QrK#cmAhNX@RVdp!cU!%pqNbaBkk0EVXfLpC,[S&51hN!$
-I4cKK@`#f!"!!Cek$F#)4Y5c,BeQZKCEeh,FXklXrC9Q9[`'EDeaZ&d6pkK0GGQF
-SQB`NNVjJ-V(&$UFcYND9ja6%kIMGSVY!eipkkr&l4AFGrM,4hBUrA(3Ia9mKZXr
-KRb+kar&2P6!C6kAS8)r@00&G!Q'kk0C!Q#'kDb$-&0dZ#,0%GcZ%+Y&p#N+ek"k
-'8#1k24"QDjhl0!Kc4(FqK"0%pfB)Fd@AJM"2G$G"Q#qk$d%i8A5IKR#5k,i-i@5
-Yml"q6K(G'4"1&9d6"-C1h@DT,qTf3[#*lJmKX"DSBph32hAr#H&-VI1b(RjDG%X
-Kr)cSfL'm3A4a#!Y%G`X%i*l5h3(K,0&p(X)E4EFE`L+Y+f20,"EGZ4#@L)jelaI
-Gp4$1&Yhl)6!2e(d5`M,4236K(0&p'm*bV5YRRD`3hB83hL5k%!6'5pf0%-i6(HY
-lTHMq$J*VPMV@4+h@94!AL&(8-6E'49d(K)Y%e`[KBY'p&`*aKVTl)&`UZRq#8#H
-kjb"FTR96@-reSQ--$D*l#i4'dEd$!QZFZJp$@#@k[iG`ZHLBXfDYQdSm@LdkeXB
-9SJY#D"%G-5mJ1Z,VPD,l")4@dAd*!Re5p`d)2kYePF5X0Y'aISJ2e(9#B&e3ajS
-JaP*(2V4@G)b2IUKl%-)kdIdA"1)NiCUi58bJMVM!@U#1qAUVk,C#Z%Tda0'hLHl
-h)@`3h3-3VKEG%a#)!k3!j!!E48HF#SZ1mA@*EJX%@h6[K,"*G,m,S9Yda'RL,AA
-N""(423f"rNNab!HB+qTB+q5,e$'R-G(G!)'i5Yd()#5dcM$b@#INFq4aj'rNEH3
-cj([NEH4V`Y-8(f50NSm3ImR(b-2)[mJKL'qX+q)%H4Aj&$'*r)QmNMK1r#CZ1cb
-!Y8Hm*XB5RiRPj!(%CpBRXCQB6#aQM4+(LEr%AH)YFCEi5P`PRK*(L4IN&F3riKl
-aMMK(r#3q%ZH)Em3eiL[aNlM'ZQIp%mZ)BDapiKGaLhK&R#)q%CH)4m3KiJpaKhK
--INGH4cj((NIH3rj((NIq4Yj'rNKq50j'A#*R)eFM4b-f%II)bmM(b-1)Xq4Gj&[
-N@H4Aj!l#0`d!MjJ'R*YaVe"UkKXmGdhlTQI6KJFmQhCZpUa2[+NM(!hep%6Y9$J
-Ck8PE6C&N+ZeVYlYMGMaYeBEmLGkde4,Ck'Z1p555DGqj+kq`!X(1[2Ub8$5D5-4
-pPp[4(L[3kDXrZhl4)ZfSdaF-TF+KU0+ffGGE`FDQ[1[DJ*hXYRfYL,%[$qfE%A1
-r6Ae6i0b9@rZ0JX&k+af1"N*K1%b'NY[pBG'hYYF9G%QVMQlEP9Y'eaa2fmP0SE"
-0C5#89L%(fPYmEEhaG#4Q)c4r3dZ,-P(j%$YrcKq5k'X+,9`4fE#bkbaY#'q"6R%
-&!j8eP%*r%0T-HFa9&l1CU5"45J94LlmZ&E2@eEFfCFT)f@@VLQT8L#k'L*hbhfh
-ep)3r*-9KeF*f#4-E4H#STMj$'#K$HS4H&b%Y9rUAdQPUFj4HVaJ`PQ`UHffKG@+
-H9IC9lT!!A6i@U6*YdPpSqb22a)9-aK,Ta##+C"e1*Q63PkmpdCX-feElpP6DM[N
-bj8BhqFTBPJpA6!Ta3Tp,RZL-#mm09PMN('5,6KI4NFN1R@iL'Br66536FVU*C$*
-10j%XcqNQNUNjh85b-DHE5)BNh86&cU5ED1h)XG4I&TE+pp[#9[RZ&0E+GjrNKir
-G$ZNQ@[mUE*E[5@'eI1aQ56I4aEa)0p(&'+5Ek#,MNfkLL`a@ZSNZ-N2T*VV)&+@
-Ek',h5,U*VRF,@k6ZI9PfjrTMU4hU2LjXNVVlK@e5ara*0p(eEm)qUAY+@#Kel'a
-*0p(0r%NhdFdm5MI46Er56A56D8Shd8eQ,Ye%0jQbG"2GC-M56A5c,U@Ek'CHTC[
-SrKeKXG6G,@b@1REeT*[SCYG3ZSPZjNqkLHl[#0XPG,$fT*[SB5kNQqKKEU5Ek#&
-Q5$I43hB[h832Z`M56I6m(!6T*RU)%p*00!JmeKYVL,K(E',0XDjB-k`ReKTc`6`
-a2m`[kiCe40`K&K)rL6[%5f)&ki6j*lD`VSLGa"DRdd*X)@i55eMEa"&L*,'#Z-"
-D*ji33eNhV"qRXb#eS'U,Q-Nk*&kb"SQRa*KmTiHe*RJdp&K2k0aiEK1),p5Aecj
-GkVc!%m`-MrATB`,`HePT[m"jJAf5`dF'dNDrq$f@#a*q5"@3!05RV+H*SqRS,&a
-ZKlVXC-S[2FQ$cq&*+N`96MCRf9U56-$)MAmDrKRiCq+IMRm+rJVmPILp1JU9T#a
-2FlYTj2&3mM+-@DY$eiEUSk&8#Jf",D(NhV5XE`kLCl&Hpjf4GmXeHj!!!Vrmf)*
-32P81'PT@V3Y[MA4a$UHc(4f+Q6T6ZJ)Ue`5Er6e*He0Nfh!`6PQU8T3U)Z)TqFk
-URHrCXqH"JH'HI+NCh"ki8TPZBIlSAB*A&`bLpqbkB4fR"Rlb'%p'ZFEe,YG80jP
-VlVQ-!&'122*@(mN'qB5DS50l+,JJ0f*MAKJ)rJ)j+EdXA3,cd$TPTYK!MNc8e[H
-QdSQBl`Tlqh@*C*IUQHA0km*K1j9#hc1pHF#f)i4q-I[6kA3NhMeJhK5*fVi!,!D
-0,qZ04,YmMG[5bG#!,GZ,R"KFCFF(64XL+C+Rf-DSR4bdEiR%Y`jE1U1(HdY!GAM
-V%l%HC'c!XEE'p'*m-)r58HkhDQlcYIDJXabjIPmmT(pXX[F-p0Qek8L5P1hD`&i
-ce8rhkFjp-"5hShXG5-GkIhE&I(pkd4lGAiSd(5e&fJqA)Lh4*4mb'dkqlV82*aL
-6$2ZcUjUr"a&1qbM"R(B`MRADabMJD3mPe0-1LY#AY5m9AGE*819PcBIV61TP&!l
-c,NC!3e`-!U-f,D'MGP#%b*cpD!U(`9,E6L#QpM)1Q`8IBf93"0#XrD'#2J#P@I0
-pH*Uc,99+#9QeJa+mkKQJJrJU6NS!+al'%9DFM%+XZ#KKV(JSJQc13DNSFek'UM*
-R2eak6Z'-!Qh"a`M%1$i'S9CX5eJV(STJQhF`PXKKZ"AM#E`90q1!fqGN["b+N!#
-EFr"mH4m!hCcp2Y60'iq@6!Pha8-*H1(m)1V53`PbD6k1Yr3`#VDd,b%YcBX`keL
-ALY"a-95"M[&`KDRU')A@V)-4)&%1"N'9KL9%TAN46M2@aE30!bNY*e#82XBK01H
-KP2BLH$V@"i[f!'`ka[X`-f0jS#j+D%Rc!P4+&$k&ALf49+P$d"++GrH'ZZd$(KS
-5i8RQ-a*'cN8aMNc9M`6Kf1FM-2dp08f&b60Cci-CJF*d6QEH3FdVBA*Z`Nr'(rc
-X`6X8rr%JJKqeAk8`E)AC68M,lkbkGYZH26Gb'YcFpMMGQafbdlL`',L`IFqH@lP
-lcGcfCR*!XamA&QPFZ)[l`daY6fra8Z1j@-I!h5dZmm#U#r2@)aL`rk!@(`)4M(*
-ii1,HQ0`NMkA'C)bVEh#hS'(P'H&k"1SjZrNbcqb`U-XFmMCX5+9$5F2$M+3VXdA
-4k2B#lFf0e@UTE4a$pShEHU+*j!pl2FffGZZhYmNQEZ2D+cqlXRGeFiG9(A$fMPV
-HkM@B[#96[!!EZ@X[peD[AZTjG,P[d9d`1F@e'N[L'kpFJllc4ZjhJ-d[YAHdR3R
-pV`D$#6CDrV3YdXAGhIH'l$44jA1`Ch32089$p2GB4i$leDbRZ333m[HZa8C&$09
-90L362BMm$'pZZk)hSVCBURhchLeU@qE[+F-Ee(E-EkUF,HBXRNYYN!"eqDf&2XZ
-PpZLlPR$,TB[E3HQ2lG%r%4efM%pcCUfi9la#EbplM4mVAQKf))I1PPh6c--HeSQ
-GJ2QGIrSR9Ucl+`0#EPb&lB!1TqI'9`)4kjPcJT`PC5I(fHe[+RM&cDN+9`E`FFA
-B&QRZPh8lZiB(-jrGKUTf%djXTACM+lrH#'U!D@(0@9$IfY#i`,HJSDkM$Q+`ZEj
-$&M`E8Tj-ceCPYdB8)#'2+d60QS`IGf'l40i2%@lqT"mLp)Q6ISMJ[QaqKMGU`SU
--GFPN20cII&iC,&4XI9XbhTlc`lh2XbIM)D1H09)rqI`3PkXRr'3#0#G[PbLAhH6
-C$H8Dh+GDhK1,abqmm$*l[)d"lrRYaj*cFd$!cVCfPe86k0b!G1U&lES3$RT@fq2
-lXZ+cU[XUDTNr[rIHL2+3!(k-NcE()qP)+)U&G%h*N!#q&H6)qdP$9-IIB5GMNAJ
-SI64m9FC(Gq,rD'0pGLZfBZdq3JVqUZbkE'M*c,hibr"2`eq1[`,r&2cF!M&,HA4
-Ej9FQiZ0c'Dj!)'J!Q1rP(,RH%+HhkJfpDYdK2ICiHJ[2-M%$a&(IZNZZ[LNqh&2
-#a)ljU)qQH$'5!5#1e9Z5QrciAmXV$h-)G0E,K8,(kU1Y[8fZ(MS@4dIMZJlra['
-$&`Sh`B`m&FIQG1beiQGpU$LfM&IMiAT9F4c%6Yi`-r()(&l($b,`qNL2A+"d,+p
-GL6![3c)!e(dbPC5VMBl&`HF(L4j&fF0j9A&F(cQ!,dILd0X4FTYIplk6c40-*a"
-SN9ZQLUrrCTrKc!GE$L(-#h%B!aK+kf@VRdI1[Z1$KTkKJZNFa-l#i84MF5b5Dea
-HMf-m)Gq2B`b!rbH1#54r-3j-X,jHqjUC(U[A$$-pQ)fq'jP+qHM"aQY$3"cKXFa
-1j*A$F%iFSdMdr6KkaYMT4&icF4J"Q,Z+)fA,V@%rIZB*aRfiJpprQGA35k9l$3&
-am2P4*+rPPBhCr&kMS9GKRQ$ZKJTQDJ4!6V-#8Keq'KPbLq(h2[0(6`HT(FRm+cf
-GBKaQNklcN9l-JHTiY4Gc+)kAHM'(iRLT&r0m(#rfBLEL-#rdBNEbFE3A8dcX+lf
-BL6KHkX@-K2'r[CK$F4cTa3`(BL,SaBclN!"lk-BHMk@EL(AJS,VrIXD2RXi")(U
-eTe0#I'0!6dG2E2$iL'(U2[hP15p%8I6amTcA@"b('Hi%iKNrjUV'kX2)-&Ge)"q
-[cP@0jI8`NKqZHlkAjU('mU(LH(%HDMb1c-EBdNb8mI30ACjT9RRQZ)fa@&)`0AZ
-NkIqpc$Dei9X!#mZ3!!C2NM1$V1)lHNQGcMGA4A&jP&VFkp`HQcQVdcNq0Q2!'b6
-9hBm`82kj"q`ma$#YM)XSZ+l+VCajd3M"iLMMh1N)a)2DEMYZ*b0KBaX`1(J!d@1
-J1b@#H+!l`qfp24`(UCAc4deU+*($!md2!RBkQEM16Qj0qGV6SAKA+0NPja"[VqA
-4blJMM9)L&N[%Di1p'k14X+mj(SlfGYPQ-0M)i3&2M6f#"f!44M)`k-1$-Ye2UJh
-JRJ"H4TIb,I1[m#mhVA88FRJ`j6J%i8L*QK2dHPBH+9&ckXF+4dV8e&c0)b8@mpa
-ZJmQ4%SBDG$"R(2K`p$6a[M2%66((66[V[@IPehZ2EDP`A[j+k32(Q([3de4HFJk
-88RBk$aaT-ALJ"A'D1-m&d-ljqJB"4%'`2j`3K-XU04#)TbB%a3-R2)kAD&C-(ch
-!bS5`L&3#II'B22MT1bD[l`Ll["q1hQD2X#[kiD6`R%NrR#BqBG)2*j2R6[Tji6J
-pq1(dmY,*H(JNhU&MmZ"R&X4$aq5T`lH`d'%NlX`d1D`i@EdXFbaE-6rFc($1K*q
--JAReQ$bMh''9rIZL+irl(rC&Paph,qb,RTSp4+LdCF&iq[S1%ATKVkPTj*RM$K%
-kIU,C6+[Z+-Sr!m`D4#2!-cZFhTSTiq-3K1[MGRpH'r$kZ'H@pPdIpam2Uq[Mb%I
-0*GI(cC36KC98Z5EBl'Gb)YZ'UbDc[pZj@Xk&e5DB9'Q14p+48$4b[Gf8$(A(l2J
-,,*&md[SaRe5KkrJll'3X%JqPIa!qFPKB'kjIGGqbPQ9qB)*Kj@'$epb"K6Aq3V-
-@jLhQJ$QR(lcmjA@[A11FhiLG9TL"aPB$N!!ZMX-&$JjR'%HH!@BMpK(--+NmG3V
-Ib2%'alX)lrM9JXZ4XhMD@PXjBjCjRP9YDq6BCmY6eEipPECMFLG#a1EXq*5QjTC
-'AZ8NFTR)j5*AL+cmJ#iU2@4(AjN,d(d5aT3NZZdq(+AJDpmFaGUJqN3AKr08D(!
-j68*bj*NL9iNm04H5D`C#DQf[mk85[FP`*JTiFHGPj0iMqPQLppUq6FP%c0H$1k9
-F&jrmVLrd69Mjlhl3Rl46+GpQ1fR28$YRjYf&(&La9,TrXY@e%19!ZrlP#"@`Fp-
-ZhQFh&AE@3YK&qZf3!&5[a1Gj2'XhieVS*EkmA4AXA"*IhQi"mP4QaG*UKe51U9D
-r$m)0X'0GjqaQX*KmXA5Uher0D3`5rTLR["fRc+E%dY&%Ihc)Kj2AI$lQX23AahT
-5rAD,NDIbPPLkZcq[0Ai)*kQ*c,+TEiH1dj9ibr&lPbSll`jZD$P&fjf(HF$bkGT
-I*5pQ19AEYAdEB@c@GMXZK!(cbAacHV4Fffhr+R5R5pbB-EAQkrMZihhEXKQLCJZ
-%5Zh[UUp$ah13!'R(QFDCfYmcR!49*b,M1+c&+!Z*licG-1#eb26h$JLefQipVZV
-@&b6$lLmKk2ajGe`$(Bp*aVX)1A-pT2dYi6D3!$H)[`FbrXS@%[*N9'`fjb,2dA(
-FI!YV8GYG-KGi%"4rYm(J,2(h(4D8q2XJG'm81pEh4QhhPHp"*eZ!CYm2BD@fqmb
-G,'$*aaG985Ql@dk%ESQfQiI*9QZ1M[Y#jT9ec6KibCDZ*qmRr`LkXl9G!bG`lpI
-qZYm2RFaj0L)[VVRDhcZr"S0PfUk*LcGZerlQ9c2h%MFhZDLK@DYXjC-#((LAia)
-`Yp601Cq&`3TYYaUeRX(,A-HVLCMNi'A1EY9l)&`UH*QcQmH&qJjHjZaURQ#Y#el
-Qiq#3!+2Jh*Ped'&#Q+rh!X$+$6VIIdD$Fl9G$(ATi0`P!3+IYV[jULc19A#DHDA
-%r8J@jkiJCTb[l9U*EB*cYrdk-8RbppjXAGlk$(6)JmS6F8Y`lU[%!')Tif"G5Rc
-GV*',Y&f3!(@VFFllG"Yd&dYma%M*hqQ0"#Ea"haeF1kd"ePE%[FrC(&aplHJBid
-3elP$6R$ZZp`q)6[ZE[b,,-l&2`8$fD!cMj2H'ZI+h(p$S0&f+I)bMA0PGCcXCNi
-B(hQ-i0cZT`J%iSpck4VRbPD`9PD*hCHc1*Ii@`+0a-'TEZ%0DePlcH+2(%,MR2G
-MV(RL*0j1A))Q1&HfRRQ56CFhN@m)cQem'h5bBc$pL5c19A`!1Q)#hNF`S5iijpe
-&E,e5fpd1Z`c1jHDXGpfF`lQFhDV(FV``CpG'8(*`,Qrh"FAr0-lPl'jL,MA1H6r
-+Zm9EYGdG`'R"ZE+eR*JA8Rm2-&Y`c[XSBeF6p*Cehl0CR!Za4SNYj"2c-cMRr4,
-*CV[%rC8XcYe,l*(14aZa8("Z&fh@L,rR-MKAjL&R@k[YIJ@A[$Niem,P1Te50lb
-d6IMFeH3%km51G5iiYrVGd,eCfrd,kNp`c[YamVreiSraLlrc@A0[dABIrN`'jmT
-qRRAc9Qhh-,"%F-ll"iM*![iVR'0-JR06Z'b*@-%i8$F1RrX)H`$dLIIScLc1I4!
-Fd9NFY)[,QB62r60MNf90ZiLA'ZHmMj!!HmLdq5lb!m'j-Q+El!&kp00C2ZIk0HL
-kY0eM[jMPFjpP$,,[ippr+i0chNFHK8kZ((LF1+jac[ZEU%9,GZNq$NlTi0`Ab99
-ND2`jm"lATF'@90Vb2X[qK24CdZ5#`9KU,cqlQGM[f19`DcEjIaAk'H`Aj2SF6qb
-!ZNE&[I!HeMhl!hK2JR0lrecC,AL+Y5)EaEi'2($m,HF'#1N6I4eel[MlacY)m,6
-G0dl)qP[)'T!!rY'ci2RLEq&IXqD)XpEr!`!!$3d-6@&M9'0X)%e66#kj@'a`!$c
-4+J#3!i!!N!3%B$MdBTd!N"!q!`!!HU)!N!6rN!4069"b3eG*43%!X0IV&,%3LCN
-!!!%H!!&'k!#3!i8!!#20RVa(b`#3"UUM%3!)XY&i2U8!iY1-0Q5dTqCS5Pq!I(k
-5%NT*arjJ*prjQ5NCk55&CSV-#'Fi4$)(CRV!l`q)eMhD*b&!,HF8'hehh[eF88"
-YRRCDq`$UA6'RAdA,ZGVpFl5P$HGUGmh4PY@DUafGSjeGHDkQcp%Um9cYeQc0hTp
--CpIifMJ+eEF`#3#3!`B!Dqhc8V)*cb3Xpa&1pT&E#AqbDFA)d5eKQr!)ffERdGD
-ZY+LGQeTT46LK(%ra54r2$Ypj"2qaPj2Mj"MC(YR[J1b6l,-MaaZ3!2hNq%XffAE
-NYTP(ET00RYYeGQ6#Cf4,0Z&2YQ5`bHd")mplXXNqXSe`#R4iJGB"mlSq`Xr1+(m
-*RY`QJddi33([b1eeNp@ZkrhH+kIf0Xfh34IVSR`jfF$V@YJY6(jZp[Zml'-,qbK
-If,9`,lTTebfbCF#YLqF9cf@JC9jMiiZAPe2cXK%M[)lYJB-XdiAIiX6H@mKbC&r
-(&l)FAi`Xj"D"X3!#a[IfdVHcmh[M86bl,,+pK4qjK5cN&VEe!Z!,3+FM[mX0`m!
-BXmUB`MT61(q,+A`m-ZDN[I"T+I39F(92BeMcYMYal)GaX4+(1cdhEIYD8NkC+HM
-FB%iSQ-A&PZ2h&ZPN60-lrI,E0aQcibCqiZ1BNdiSK`h($9r0-'V@QG@&HrVfYHq
-CBc,KlV!@JIIfk54eiVHk-QV-fjf"X,Q53KN[Uj(m#&X,YbaHE8D@(AH,jp5m1"Q
-BIc%""j(M8FNjXQV0A@De[#Y2M"ahPc2R(Ffr5[leb8,pRrkMUJY*kY9,JC-NA[+
-mrl"0c8BYH$NpJi5F'RcIHre32jS8QhI2q"ZI"&,%EBjXG)&[+j100[0Y2I'LV6T
-NmUZaed1,)k-6dr+VHD1HpS*$V46-r0Tj+'!`31YFcKC0010$0X,N0FDm6rBXSS#
-)%C+9'2jPq*IM,b!G1C&!*Im+r#[aVb*'bAm8rU2aVmDr"[maq)r&Iacqir'IJ2p
-%r#IK2aRr+IK2aEm@rfRi!r3cm+r$IbEqXr#IMImFr1IL2`rrqIJ[`(mKrUIM[`M
-raIJ[`EmHrkAi,m0r1IiVm$m$T9b"Ih2@ikjp1HhdKrc2c#S,p,X-`+fdfd!1+%2
-2N4i`K-(05KS0DJ)dC'k*[$48(!`VRpc2[&0Ia&6`rfQ%q%H4JXhQcSFH`ZmHI$F
-rpY#G$crfm2d2(mZArN`bJELP5XBaU4Z!6M4A4bZa0q[[28SS%KNSG,XZ5B*N`$&
-1!,3CP,6&DceFc#VH*PfTZ(P+`b8b5"4KHGpCjVZVqM1DY0J8TPT*H&&1kpCLGVG
-HG,eT)6NE"))F@)S(KVrB+T'FAmII*9%4mahm+f5lREfD3%k[NacQ2&+fkH4)DPZ
-*bfMCQR'TPZhL$S&`+!5-NHheUL'fYq)b9VD2i#))E@chi$*H0N''b&Ue)$@G+"Y
-32NNf8'kbE1IK-N@fAEK-PHdJ,JEqaABM,Y0NH`FZe"-E0CJKfprJ8LIE2q-b8fe
-,,mf5$4pk%"Yp-%HfRm"PVQ`rKFXmfDl!aA5ff'l!4I%fGLXZ#f@M"UI,4Jd@bIB
-GA"CEQfRc*E*4dhVC`)#PXMAKXNbf(@)"f(j"@)(YcEM31pMHMmZCXYf"br0NHa!
-ADJZNN!$i@E+4ppQb%H[jXVd3P`EC)0IRb2BUA(j-YYr&jFGPq`!Z,j!!l8jF9XR
-f$9a@#fh"RM@bdCpVC51I4YPHK!Xea`CPAbIEkh"C,pXIiA+ZE,IL3TpLqi)`%pZ
-hFGPSEF1*L6mT'cfr56EU#pCKfiS,Q)10[-qAl6G`JGeJH`mZp!8fDVa&0V#0q%!
-aZ,a00R#"HQ+M[Lq@E6XZ&mKf&5iAb[ElZ,a%0[VT)YNqMmY,CD1Z,l1f#Z,lbf@
-MVQ!80[U((,'"hm,-M1dDA-!3E2636YNqL3XBLqh[F#%QYRm9li"+`!%ZN3h-qKR
-Ck$%PBj8q,[ba[3DA5f8Mejq9$9a%C-6fC9a8Z+Pm"TGpePC&6&*eV)Ui)b+NXG%
-EVj!!l8TFfQ3$re6HU@,IU'K9aEi"Ul%pM!XajB`NKrNjfF"VH!df-!9qJBdHq(R
-CASd,H)X0c)0rBIXB,VmNfeGaSCIP'%Te5$EiLHSGSiL*i#FfqTQmX&'[AjB0AN@
-IBRXh,[340V$m@YR!J1ZXE63ai,@b`8pq46E`jRVCk&[`%aXj`&Q``4Gr9EE2i2*
-VX[d$,["+1GA%6M!3'he2IE#"Tr![E26j'f3MYpq8l9fi[&'f)lMmPQarMmZEV+f
-'H%RrBS06'Ae!E(#$hj%0V+([X&(6hj2YREL!QGJqKmXIb!E2qd0V'd01#rjJSpI
-r@$Bi`jr)"Rkp46Ckk8pPHcXZ0mRfD9cJGpMJdh"H1DH44lj00VJL2B80RN0mE1!
-[r"3EH2%AXP&VDSJ0h+*IX2de,[3q0[JL[%21@2ELHf@M9piR'a`*hSF0A#%AE'$
-F"f@M9fq@M6`r*0ZRF,P&0MJLI%V11(,d$mX'(lj00M!-$-F'arLSE1!QH)J0[2L
-iE06p%l,p&5j`$@c``X2@KXJ@Z9FfX"rY!KYmPITJJhIpT@c`!A,""Yk!,GM)P6l
-&KJqBKZfEZ(a@0Y3QX%,1"(*3F"8E["G1K`hqGTGXF)blCD1ZF!TXB!(k"MEU#2I
-%"UHKIl(p"bjIY,D*j%rS!0MJm&q5$@jjVfa`RVq9$Cbl6cC`j(lCk!di'MCmb"I
-E)lKmaGSQ8CH"Mf"$8rLDE2$HVmX'TMiJ'jb%IX3'YY)[f-##EmP'MF!(E2q'5jI
-kDVNj9G)AIk"PkNPTPR("%AeEMa%I25ecMU3MUmZ"b%*J!@`)+f!+dB8%393KU""
-Pb!-%&@)+)B@)3XSJRK"1`"###E'%8%)N)C!!%%F)0D34XJK*K""!l#"d%#`)(-3
-38J+"JlK"f##1!$U%$A#&V%(5)'F!,-3-3JEi3X!JAK!ZL"B%#f)&SB*S3UBJ(j!
-!*iJ"a!L""0+#)),3!UP!B%!)33""L%&SJ4`LI%$F%$S31"!f)+J)'3JB#"H3!!1
-%#J3+K!N%'d3*K!4%#!Jc4!Z#"E'#8%(8)')3+SJ8"!SL"bQ$3%%f)%q3!#E)%S3
-$SJ4"JKK"0L"#%#")$S3(SJ2"JIK"EL!eN!!C5!a#'b)biM'LX3V04Q4'1)C8)X3
-J4S1D#,1!+NS0SJBL!83*B4D5MDL#B)i)(NbM)&JJS#1k)cK$)K'B%C%4i4#5)Fb
-)!3MKL$+3!(A%"dJJiK-%$F%FS4E4&D+,))[3Lj!!Lb!,)8@J"-d4HK(#%%S4A"&
-D)H))U`J0L#8)2JKrL!%)TBKCL"b3!%e%8B3k4"Y))')diL@L*@3AN4,a%j+05)N
-iL5L*1!T"4AK$M%4F3(a%G%4X4!"!h%"84%a%N!-i3c4%G%*%K@M#F"!'94#d(4`
-K9R@PJ8UPC!E(UL2&8R(8RiQGH-&XDrKlLp9Q&)@BM0XaJpYfEkqI$VM'#B,3jAe
-IiNr2qS'Ad0MQTr1mbr"B'k2X6$`RGZQbXcNlkmA6IJME,MHXeje'MDEG6X[TmNB
-5"Kk0HaeQYJ[*l('GB$VfjR`iHfi(&L)2pi[p'%18EZb@1'l`6KeF$mrLaM6@eT!
-!*ESN#*fdjBCYHpe*jkIRJUE("K![UHZ1J"RZR8R5f'r-dG45YlIYXmf'bccfqSP
-V8fe&r"@c#CeD-3fk[G8C5D1EELZ516!,`bX50*,Fff`2l(HG"Yhfqh-0*k$"5pX
-eZ'Q+l8!BC2'`A*%&1TKiMGd`(2$VV*LjDQeh0G*!0KPXp%Tq4F02dPV(q-U@+4R
-kLM4T1&Nq$@eJU!FL42#['kN6#qU)&@YCh-XEa5eH%*RbpQ,T3kAekc02-@jf80E
-,-ZX@l`U$qjUNEUC+ijXh(mTKmr#5ZD'm8&c1ZAP(ab(5PJ(8hJ$V0MFi%M,M&+Q
-1M'qE3MR0rG`JR(%#GUXa0hZ0CYZiQ4hD%VI-&rL0@VL(hXQ89QkmH##+GblPMXp
-PbjQ,Lpm[Q*XVfjI-AXHS86X'Dl)V-$G%NAY,*lHJb+B6*)iIJQVXpp+Gp@L!aI&
-`6dF@FXG64q"bRS!#2r3'VH"PhU!9R-XEY)*RHB0@m#G[d!SHj!eD`BHm35ZUi!e
-D`E@pN68iY3jD'GkXJeC'Ep""+k-Ak+#9d3&dd-V`Hafd-TaC"kd-CpC"+m0rGG!
-U`J%8(E5+r,A$IahQV)0@$Redd-SK9p9"+iIF9!HY(2D"$PSjj*NkD1@`$h63bL&
-Ae%%VKaa2"kdFePi(V4aU#cTSj9",d%%VKjU"$PSje'Gdd-UKlU+$9Jle&"fdFUL
-Mk+#93de%"kdFkKikD1@`2h63bU'HS)0@$M8#(E4b10#JJeB1qd-(VD,%"9A,SZa
-*(E5+XNpdd#V+r(A3+NUHVS0@8I*Y(E5+%KYdd#T+AUb$9P&bBKfdLT,rkU"9P0L
-JJeC4kP!kD"@PjU5$9P&U4cTS&@AYGG!U5Ne&"kfLV,%1@N8Tb1UJ9C4LX!jDaBK
-h1QJ9)ilSS*8CHY0"UaMVU)0@CZK0"keLe!&dd#V'AYG"+c-!Ti0@-@T$1QJ9Spk
-QJeBakQ8kD"@MeU@$9M(U96TSC3EMG0!U4Ne)"kdX))GDde[d,jK#Vp-ARTB%0r(
-e*2!&EZ&V6h!(m"YFJL2!$F!jAcqLGq!!B$mp#fD"mr3bI3jQd)0`!&mIdjifr3b
-HdFYJ!$J%rY22B*@RQi&R[YB&eS%Ip$(BRY@M`'&I#r0d-2!0(!Hr`@F`''`'Nm&
-LaFYR$MNa1Td3cQ9M!lh`RMmrm,R&aGq)XeMDcRU!3S!,j`%Ai'%k!'GP1r%*QVK
-(rb)&Pm["fFcp[DGFFp2LiP-DBNZFe151lHhdE$H"r`paIjrhHj`IVKp`HhrHT65
-IiR&bMiqM,m$EiH8q*dI$8$h-QR#N8kUh1VXGlHkThqPSf$Ya,KUT&-[E,l@D8Bc
-p99(fiMQ[12lDeU,m@B@cTP)CcHESbSC',jTbGrNeEVLkS!TCfP0YflFYpIDlZAR
-KRblTrbBX8")lp38*rEpEJ@-2k1G8,LmUh&!iU8m6pGNL@Jp1SP2FG6U2Xl5KmV#
-*ajh0Y"aNTlYjbV5A6EIk*(+*DBTACE$b2!l8C&JH"rSb2)m$a4Q4ai%'9H4aS%U
-9H4cS9&8H"mSe-Sm$,4Z9ai'kMFlM31qUmcK3`*Sm$MaK6"i(+RPD(JHk16D2!b8
-GPmH"XNl)id"V*qCaS,k6mMM3imPj(#MdP$`10(YU(JFUAT[(JDj2bq0!kDIRFD$
-p-r)i5!0eH4cNJjPj(#5'@ANFC)MCH4bNLMPj(15-ZANF*)pjH4aNNIPj(+56"AN
-Fj*@&H4`NQ02c1-JdLr)iCV6Lqh'3!(Z@j('3!)6UmcM)4N[c1%K,br)ib%qVASU
-6#1K+9+[c1-KBDr)i5&eVmcL-l66QF4LafIa'R(JmFIFA49V`id!RBK2MipSkjjl
-B442E@Y18cXQ(&b%)ie`r-MU-`)lZ8GeMZTITAUll-0f(kcj#p`VG+h@[dRfNlU0
-d(kelYHieZSr4r3cGaqSq6[IaZNr3ID,ZNh5IV2X8hDIUAU[l00fRkcj$pcVGCqS
-q5rICZXr4IDlZmh5IhffVk$ZA&NSNQQ5"lJYe2ehh4ES[eRe*0jRB1aVHRQa1Aia
-HepAV[P6hCES[eehijmXeUQ[G'5ra"[q6)+UckeDIB`&B1Qi$1%jlAF1cGE3l&0-
-+8%-Vb5R(F[LZ&5Q*BaqB@MTqR'l@`V4U8+Hkm5UAQEKV8Cj-*ck)*V[5,haZpIr
-6jp(T+fmRZcQXbl!!G)6pB"`[@G11LVTMh5G2&&cD@qaL#HL(GP5Seh*1ljMe(BD
-DbNA[(E@e#@3L2%-5N6aN@&$%SAfl[1FQ%ZfR*l2NbXCbC"j&Y`rChNi8bjF5lhQ
-`[*aarDAaSH(qB[r3i13JVTY(5T2D3QEp14B+@5BZ*$CXLV%F8I52K-HkQTq'Kac
-@KifdDfiHU95,I!V0Z9lML*XVTXJ@a(eHF-6AHc&0dUfYp+NSZUciJNYRIZST$l$
-CKhfDq`qjlTMch@,*LBVCMJN*[MI#XP#rKSN3U[GNAI-9#JUkBD)i(Q(EjTiVPP*
-Kc88fLmE5FaR)@XSY%,%k+[A+M4pjSITiY9F1TijXeD0ZH'mD1iIDT,'CT''pH,'
-hX#H-DiFmelLZKllCM#@S[Y[DTKr8RXm$eDc*6lM0Bqr-F['5JPVDUD0-lYV-cJC
-`(6[E[(&c1GZbQDLdZfbc-`Iel%c#5)IYlB9AVU5iYTF8*pR['AKdp+,CQ0VHr,*
--09ZeV@%cGVfU-qXKPCEC`bh88E9Y$R6Q!m@UPkD(Ul`HQG@9R5M+r$a%-&kEX$X
-fKAi)SDjL(C6*`*R)f+e3XM0H,bi[,AAY`"EI13d[[QGl"AhRG"&6VQPNmMe6R4)
-iTPXmm2Dk22#,Yh@Ui"Rik["0J%r+9d(-pdQc#GmceB(YMPf&k@V2cLlhhGZ"Y01
-jZj`T1!dFmqhQJfVJCh#eh5PEkM5kqTjTJ28p!plPqkDS9q#B,CG2`$*VMGX4-I"
-2J@,J(1"Li*q'aX!lKBk"X`q3!&RI900Q!fJMC&elHb%0PYhZFB"TGhFK-h",S@E
-Jl!0RPfp2U6ci$2`k%$5)%)"ScVqhc$k8CRhl'M-*U&PA-,A,,pF&+@30R&2J'MK
-Rm$9`pb%fkjZVB8VTb-c#GA$2)%#DI`EHl4`d#*!!iD'"HjU,"YiT2TTe6T1NE!5
-2H@4pmdf4iDIGrJP5eqk[2$A`5h29`$[&9lZFH`X@jkf"BbGh$8+dmpGFJ(bj8c`
-fkpcITMkIcISD6Y[Pf0-1D@iEH+IjEH!GF0c!2m9cXmipTFc"X'l6,`+a&k)(LMh
-r!KKl)AVKf![3!mLHI`k5IIHHE[GMG$5*leeXNejS6NI)SP8m3MXmHjip!1hjjb!
-kj9iSALG-Hkjp31d&+8"e*N5ar$QipYe,,G`0fEjh"V46V[N'k3&Zclm(ZMhr2(K
-l%A,`lE[R#jZ(m!(i,N,h!'ch3AB4VJY3AB,T2%3Ai,NIQ[YKZ4Z5Lh"FJ1)L$1F
-JH""q"k"h!(B,N!"EJYXme1CJYJ#a4AJY3QXrV"BJ03qR29!k)%N9"DN"1DT2M#T
-+838KUL4$j8@SJJ69,d$ebdrGiP04HLS)6dAC+5Fk$8T1!i,6J0a8%*Y+8P0HD-V
-*6!@4U5Ja&3@QIRQT)#lPTD@#X"4[d8e1Bkl*&c&f1MH&lJT6bXEfR2hBGY8M'p2
-#*GVkCSM"*GS5*&bL,A(#*GS5*ebL,A(#*GS5*ebL,A(#*GS5*ebL,A(#*GS5*eb
-L,A(#*GS5*ebL,A(#*GS5*ebL,A(#*GS5*ebL,A(#jGJ5*eb1,A(#jGJ5*eb1,A(
-#jGJ5*eb1,A(#jGJ5*eb1,A(#jGJ5*eb1,A(#jGJ5*eb1,A(#jGJ5*eb1,A(#jGJ
-5*eb1,A(#jGJ5*eb1,A(#jGJ5*eb1,A(#jGJ5*eb1,A(#jGJ5*eb1,A(#jGJ5*eb
-1,A(#jGJ5*eb1,A(#jGJ5*eb1,A(#jGMQ+D[IAiiYF9LLIAjl'Hjc$i3PfM`-f,&
-,Nd@B'pBEELdD$&-aSjb[!@SSHbQ@4,A%Zj*L0F9VjhE%YGC+GIGYFEBca%ML!Bp
-k%6``de'krle"6pdfSf"E)mreChfhaaNJH(KJ0ZcQm8!H#A!PlM)'jhPBcr"!GLp
-RqB(,&2Gi2Fck[`F2K"qSIT!!`S2%kqLYDB#3!13(-H""0CHik`lhlYhV8q`6!%i
-HRQHk*SVdj1U6H65A4r@5a2c*2+Zckc4A4P[2eMLCa`8P[@$aC&fh9#GHb[#*2,B
-06dd1c-`E0dQH0S9re-`T2p06ZZ@8VmeXUAH'HXK`hAMfmXMS`3HBKTY(rqXfddm
-8c4dhMrlA*cbH4hp"(XmMA[CRmqK,j(JH,AYY([%Ak+rHGk$eTSKBi8SmirqkVEr
-!qq9V,pcheG@&IAf2`-i$[%dm*hZ'YmPMi"A(TAS`,QVbk'q2c'Y8#h9YaHS,5d!
-HZeBU@kSVliV`mLJLdI%mfJclF1Ze2mRkm58Elbe-[UXpeq(Xi2YFRE(#f!q$3[R
-!1@a5mIm[a$PX*J[hRC%pkGcNXGr-[iV6qXCA!p6al$)ic30Jql[9MC&k&@cRZ6K
-dp8cercX8T#f*AfF04r2B2amFIbeFjUfcA@GrfZ`4N!!(Taj0mU1kmY!DCGcjedl
-B2aKhla-@RQ6Fq6bX!Bclr%eEMlqh*[2#h+jMq@$ZK3G(r*!!Z3rQFBbj$qCaM,N
-rQXG4jPl+`c$h4r#'ldH!f6'm'eHCZhN3Nm[FArLC,R2I#VXqQrprQ(ZZ(Nmcpha
-KRf$ZT6b1-IGF'Nmape)H'HDqkV4r-IG9Dii`pjBjF`bRHD+c@AM8aGc[ch$DqX'
-i9flN+milcj1-ZcF2ML@!FFZ1V$-f&,X,Vc*Re*Z-kF+0HPPa$[%HBdb$H4aM1Sr
-QFC6TP2*S0D%EI1X'dhIA1R2D$&m6[lf`"rEaTr0&mYGd')%dQMLXalZ!aIm6QIq
-PYr%Pb3PQB3R)iaLcb0Ae+@C4bQ-!K#82XkZY'-20Sb8akpHrc#a)SL84H)SG1!X
-8J$Kb&[,`+4cQG"lhApjk&&MTeCj*aFCYf"iN[haQjHAYjmrX2*j(PGdKPhmNd1K
--1pYbpXQ&cikp8[R1ieFqVTeC!I*S$*,%$,Km#8G[(Y+)e$AbUXTV0#mV3$f-9Q8
-&b-26USTj(0HUGUIe`,c##'3,dfXqX%8-B0b1QjFC`@hCqlT0(THbLr,e'1Sce3M
-f4-Ik&BdJcqhG2(K%Df6JLT8mKZTK0!)V3,mDMF!+N!#(3A)$Cj(reYAN)He4e&#
-'mUJS(aeFdh0DDA4E&@5SCIDYb[15+D1#3kS+H@69khBN4`@h!Z4Ke'YTaIh(mJM
-8kbaA91fM2iq-ZTE23jLd*5!2SDk@J$`Z5eEU)CY6diq85HF4jrDLaGJ#kL&DM"d
-J$i'cBKiP2%[N)4V"L6cLU[0ZNr`(Aq2eD$88BiVpN9+GHrX$MFN5N!#(D%`RqM@
-M-GN!mML3!*Mrp9P9pfe!A3%Va3Lq8cKil91QliiTFpVM9lHp*hckMU@+NBhBZ6J
-(Vm[QDD)IHbpjHi)4@!,b%%CJ#FK$N!$F&T!!4fZ2J,VZ0P(d9Kk*Z3p"UK0jC*!
-!kTNm12A1DrLalY"%SZD5b'2RJqdm,Zm&N!"(9AH$H"IL$Fp8`qEl[lrUfp-ACLT
-8lERF#1LHfLGHANFYm8bKbSDRdVCUD!A)`kKd9S!m2*@ZQ%G@T8[NXH(T0P+eQC9
-kS)VPkq(QB93S+d"GcD6+U6bi9dr-1e%5eKD1mU&*&KRZqN5[!'5`!H349k%+H@5
-h&J5G'&HKRXd$AGS+8&FAm@`!HAL)*b6Q11*4fLl%fi@*Pd)pXY2LhAN)Sl)%j#%
-Ff"+3!)G`B&Y!(Udp!ZV+$18T*)pck42e5((T%hPNZ,30))qf6"AVBekb*X!!G9q
-IlAmY$pdfd*H(f6BJSdl&2,,E"S)mc&`$MAm+l`fMY!,NB4LPfl$jrZMF%K$8eF`
-q@J(bi"KepN4GQH!k,fbmU(PiabQA+cd!(PaTjL0+MlLFf[YYVd(aC&@Si0LBpKU
-F2*DP[3DYdFSZJ9*GNeT$hmQU[&hp`Ak%8mF#XKmK"b"2l8FS2!R9$V!IS63HSI-
-49S!1XJF`GdX&-l8#)+GG!DQ'6QNjT!9%dl'iE)FX(JZ"&Q-2fJjjiPL@YN-Hef+
-k%l%4D$(p-A6ZSqrBYlC-PPCH48jjNm%90[[mN!$"$HCaM-%0jR'-`6fDae%'9mV
-M-HD9bq0TjT8[b"2-Uj6(-HD95q-TjM@Baf2-UcX45m%ZVm)*GRRe($X!)c"j@#9
-fHC9@H8AHhAY#@f`F[rlBTX)i-P$B[KKQ*jJ9))q01q2C!Iar9&HBKH9%Sc5la8l
-f4f+hf-PqY3GS1QDhf#RmB',c)MmkVZN-eG8qSHP`G%IC-h8eHE#Ml&4rD!bHYpI
-0GdEqQeP)&[NB2f!@IAN-)AN*UD`I50lA(eB'*1qYaj0)hPIA)33HkR[1-36ZUiI
-*ibJ#pqI"1r*f[*'*$HD!4aX(,aRN[lVldL5AiU`lB-c3!A2e)d9cjB0RVH'HJYU
-qhHBpml@!Xjk(Uj-6Cq*9)AH@KmHfk5866Q'B,`f*h[M(E!HCl'5kZqr'CjB`,rU
-PaCBmC6Nih6@ePab(,d9d60p,l`&LT-r5mckNTDZE@dFQcIj0h&,VYYKE,`De"1l
-1f@,-H9[kpPp`GpreCpmmpK@ie"DfB[dBH"Je-ha-U[KFQq&Ne(ba8JQTaYimiGH
-SFajf[*3$Z(I#(i5mEh2J-0k$NaK'P2Zr4(b'I-3mbjFF#E*@$X8Kq)acaYZk",[
--cpkDZ$fcACUpQr!YQH29f4X&[j[9E$(I$qA`,Bb4`S"C9c5&6fDf*HCFh&kVH!,
-FcZfbEF3@YAFTa@hiZbm9ir@3!1ACbj0iU9K$hHPepYDSrT0mQCDq4-U5pe)aL`m
-6YAIJ!E65L[G5-G[Ebl6NIEL$ZdHXTbIpZ'SV5`0Bi9krDFjcUFCAb['HVY6a(YT
-JpcRETj28@G'Y,!M(q6m%iIej0re0'#BYpQFF#%Lq2qqQ[jb6[6r[E,MB5pkI*qq
-$H[BBAQKh))G@J"TD58kj@A9U&,QhG*kr9)pjMe5)96S@KYSihDbM'&H4&bUCcrT
-ba[@AaSH'qi[p3i16JlKZ(LP0p[G@D3#iVQhQ1)"&14DD[V"KRqF@#ec1JR#%,$,
-S%X8rKRmCrZAi$m0r12iMm+r![a,r+[a(iMm+rp(i9q0IJrmBr-IK2alr#IK2a(m
-5rT2aRi,r92aVmCq'rh6mCq"IKrp-r'IK2a[r1IM2aAmHr[2aAi$r3[a2ahm4rS[
-aAi*r2Ij,m9q'rh,m9q![qhShr3NT4ZT*HRK@G2KP+"PqQB(@FIGa9&(mpLhlPAd
-0P`A`fl2X0kN96r+,rEEM9dZrUfeq[Yp-6)Nkp*2mI$pR(5iMXbQ8QRXi'D+Fe%%
-0)qGB[jGaiN3j[-2A4QbdIXZHK#dQ2bC*4PLrPIHcF1Th-blEV0rcKQ%V9jFcUE,
-5qKhm!@c$j-G3Dlhe1l5@$D0qp)AQGpXDfY6[bSlI*8r!9L'rUeJ$efr0''cNLpq
-V1hiIi'Z5Uq4h,5lA@lpe[f42Z(ia[N2jGGE[R&r$J8NFbM80PbR@lhVfZ-3arEf
-"cHck14b)(@rpa[k8X+Ep`833I8Flb2aGT&K2%q*"8JpBmMf8B%3pcICA*2h+lXA
-P5$d0`Q@rmZYB!iN(6L6pCK%2cUbRFiIaB2i(8I2&p5K"20r[q6r+aM!f*5QbSFE
-QM695ll-k116(@hJ*X8,bCYihQIGmpTYAek6qXaZi'+pVdZmFj"h2)qPA6[cckTV
-`Fmkr$EIEe3Gq[(pUpfA6qkq"cE`D+@,5[a2QM&rMlQe`q(2VeiKi`bcq09l!!BZ
-h@lpABF[*qYpE[cGc+[)GbZmf0S2VpjqFFD)1Z""MN[9li((BT(q0(hK8DIdHjKX
-QG1*U12&VY28l5(apYr9Ep(-8emf[DF-Ai+"[SKi,hK!jcmDlJAJ'CT)('+Reqb!
-Ra0cTVXMj[d-HpeQrZiJ0leHm@CeirmjDQVG8#+fj(TF9eZm3X9$kNA-%Nf(P&H[
-h4Vil%$bRVY6-aG'Q-iPP(e)H(m&PTr9Vq"9XYkLZdh%jfqCak`EBEP9Ghd4-GIh
-Hm%hB2L`rH8qCiQMMJB1`85[mb%Ilk@VZ,L&I15mJ,YjZmik4(hc8qUh#1mZFY6C
-HmqIKm$(VYrSEa!EAljdIKHhM`PejBC!!mTl'Vf0#,R+hpG[`$'"'qqDVh)!$EK0
-[*LjcV0qARiAYX2cJ1PURLkGJScjb0T%6h'Mp(Q,H`JX-$Yh8jP@0fDY02U8qSkF
-9ckDF$T[J1HF1p%IPjGC[e99`%0cJh![HTAM@p'(@qSMeq`ViLBGR9dh!iG2#-h"
-0mHc)@E"p4RNIE10Cdc!ajE1+"qkiG@dUFKVbFr,lHJI2EL%'hf(peU!2&-mD(f9
-XZ#(j[Ek0Cdd9mUUlj%HHfQIIj5D+ZbhHc`&q+jieA8T1pAR&qe)RhM@-Gir`"Va
-82(XIFIS,0SpjMhE`l"*18BVGj$'fM@H09j%II0(kVH8'AKI2'Mhf"pb3!2c!CX@
-c&R)3kN!HhqMJfG[BdrF+GmpSieR6"[Bmf#KR(ZVUpG2Ca2,lE*d@-eFAcaT$cS,
-#+I!6lU9ieR6*(q!"ja@A*F3HaE-EL9Y`FqME`adm1lL(31$'UlqeJfHIC"r6Jq$
-@S3kHA8YZrcAjd5YDTkhJF"(f1rd"MLLHYA%Ac!2#XjGfm1b@,m0'AdMHbi!PcUQ
-ChqEEbHfrDIf@SbI+IQcp+YL[hl*q+m(M[AKEL'F2@VqcEZM%Dq$bVSISp[m!$3Y
-8Bfa6D'9XE(-ZZ34BE(!!20%U!*!$J!#3"!4J125LXJ#3%&AJ!*!)rj!%68e3FN0
-A588"!,$B!p1a%)Q9!*!&!Sh%!*!'-J8!!%D1!*!'mIS'q)ZIADb2F'mV@CiF*rX
-BRV#1F(Vmr,AMjfff+@'j2,1ecpp8TRZpMY2fNGZRH1V*2$blpE`frZ04EZkNR'b
-@#pYjXB@5jIKLI1(N&R*XZj!!jIJYE1'rX#-mXR$,KI#&%EBPLahC,RbKI#&mSHd
-NQqhiFVl,mI*kAFjdiFZ!!KeHU9CqfF+-,&cjH@4GMQcbR'`b@mJQ#pPNNqA`C-&
-IS`Dpj@5I%k19PpCjELr@Q9'HCjjPkF*ZXp[Da@jlZE"0YprTGT3@+j[SG[(BGR(
-LCHGepMNa'aVE,RU,&epmXqq-,mG[BC[Xklai6q#fpdY,XRL%,fpN6i#a!!+Zr#C
-X[I,cZ'Y&qCRlM(8C@pM#Jr+,,3#-!(4kqAkIGpfLTQNADCVHU#9'9QQ*frXdE9N
-C2MIT#4hAi(5k"@[!p$cEpBb-jqk`mN(9ej&b-P%YH)Ia[eE6h[Cf9%TJ2drE1$V
-iU5-YSiRE@JjS,l6!fdY-2bm&GZN[dh$Zj1c0a%9dkG!5KGPlH#2$Zkr$KRA$UeN
-ck9E1&HkKB6,dS[HMp6&pFH+1fLZjUA!,B3HjNjY*56'PDH4*[2!fErmb6$lRPj0
-d0AlMeC9$S8bEj%FmTHSEbR6Q[ekjmk43XLda!FLKpHN-U,dm+mP8'N'P%e*`8F)
-0-J44K`9TI4kX[ZC,dUjMjYec'@l5'VA,p'1*dHUp@J+qpK(pcr@*LaUe*S$!5Nh
-lkh3X4CekfP,mpjEU'MH,251QAfVTch3Pbjkeh4ij&`p9ebSBd*BHZ,8[Aqbdc),
-PC6+Trm`Zri4*p'H`8-@mfGCYhQDQLUE[@hjbKqR02AG-9mC)$l`[%aV6rj2G*$X
-4"5Kc'VF$pUc3(p&2*&kZB8qFY8IAFPA%9rk&qZmMF6f-U&5jEIM[55b@rpL,F4Q
-0IaEr(2jjr0[`(iCr+riM6a+R!TE,#r+IZ!JAq6rf"qJ5X!G#Lp)@f3T-3Kk5qZU
-0SlFZJJL#QmZKr[-U`SI*aZ*ErF!-,fIqYr!KK6RA$#r(YirB3DIT&)V@+83H1-0
-Vi$%D9r"kSL))hV8ei%eBH"A53VlS#L#N8[[Eilm$rZhi6d"Ncc(kHerPHfH8mlq
-@Xd[PSS9#k"!9U6eYqhPYaR@Kl@464XSYP@d@5G(j"5hVi(U#YGPb6R[1XCfGrrk
-N&De+5HMbmfEaE+MU,EVADEBcj-pk(eD`!hIZb9QZ-aFM,+`RI+f"`dB#cjb,Vl2
-L"fl*H,GeqiGFVc$R26fIYhcIb*M"m*cVM)TG,*b*D8V,ZqH,"mqCYNqbH1VJ+k@
-!HlffF1a1EQG6DZA+Xk891+qTV-k10-)UemTm3N)YGALZ64hZpG6K1,qpie@[lQU
-GRfVe5bLjdkcLV1Z4eUkcQ6l+p)DX`-KC3A!keE2`BR[D,*G$hkA$C`%bm5cKBq)
-E`f2&8FZJiQIcABbrK)dejl#!%fG&aX6(!'2LNH"L2I-+BBP['486j`38%mm%%a2
-2'")VMJQX9,aVj46MB6&a46KFlGYG6!U'a3+*X,$Lf*Hc#!NVIJ"KeDPHR6%-*Ti
-*#LDHC4!X3N1#JH+aB0JUcZ*Ik&A#[Y![aVh%541Hq0Lm&Q)YB9hC-5c0d&%a,V3
-EI!ZY#EC9-US`&2U9-5ed62!Xp%U`,25+F5aa5[!Jm5bA4SaGKH38FD[N9bd-aDY
-#dL1X5Tbkma*K91)$2K8G+Y89ie,SP@"5k&A'Sd)C*eJdT@AR@8*@G#fK8Y%jKUD
-UTbDlkQJ6A%T##DRUhQ&9&Vd9XiT1"VL+,JPkGGH!SNr4ZBaM4Hm%c)UZ#D)9A@0
-BUhSQ'&*eVpG@M(+Pr"@KVZDmTV)8p%Ue%L&IeA0YkL)-V$S#K+ZpZUXeKX5LDi+
-,4GFb1*E`)N&)L`I'DilYcfNQ4f50hR*JPqaGTi34Jc,c+N%C)Z4UckHPCle%1Tf
-A-p)@NP-MRdQN9D&"!kdk5Tb*8cA-N!!F*#%@ZCk'9h55d%+(DPM&XNTL@`h('Z"
-U6iQbk&800B#RY8KGH5!"kiTh'5%U$a4"SZ+Hi(h&1iEmZR-#RI8A&$hV[KBUUd9
-4K2merL%$U2S(*+$LPj4fa6ZZlQlRhS6CmUmihS8!C4lCmd"IZQ0k8hHqXd`MNP2
-hKHGd1rD83m*f+Yi*iDPiP`Kma6rQm(ARRP6fp4kBkTeM1N-9FmJkl6[6cCm4i)S
-29ecMGiYm*(`cFB[I@dd[`NHV[[(,hH!82PjhMpphU4hEQ,3MrVBrEUVU*$,R52a
-0Yj'FNr'RdBhc#[acBVX-rlcB2SYrNpMq#IpQXId,rYSCkM1H9V&0`)811Qc6F+'
-[#YXaZ'J2T&r"K@BpE"IJ-P*X9q"#KbLf[m&PP0KZaS@H,'br`-@dK8YkbI&BXHf
-$5p"4kL@kFAQ8f*EJmQLaRBI,pQ*l-bilL1e+U4GX0q#bNpLqKiYdSA25V)haBYX
-9Peh%pL4FfX@f#"IbMqejZ2!1YMr&j6&LHcFZZiRY-lMX,VC[i2*BXIdE,RXS@iB
-eV,f"'HCP6l&4dim6fp'i2&jXY22Y*6ELhPYXa$e*E2625pqBXAd0&fS(fip`f9I
-CXUcE*iU0Q#H,l@"FpK2Edh$CAfa`M#PLH`dZ"iMYAB)rf2i5P`2&pK9F1X6f3e`
-18VBFFB5D`NBp%#mfI!i4Qma3m)JYf+K[ddSRYTIJ-PeX&q%b3f`I`N8E0R02iM*
-6E16J-,&p'jGCB[X*,SFV@jlBp'5a83G(L)hi`4PXe0mILHfjZ-`4fmYaQ5Xfm1B
-TB[X),[2%pJ9FJKjKlp)6Z$a9E2mU@!hmJJ%,a!B'N!"rE03YX@-Mlp3M0Zi,aFE
-m#A!*'rMhG,'p&4F`'4[iGkcB`,pRL1hlZ"bRE-h%q$m@'jLi@'c8q62&4Lkka,B
-8PfH*lAaFMKFEFCmJYUYa19&XAmEPf@)$KjkME#hN%LH*$8bNhV'4EfS0'r($CE#
-GJ`XjarB'A%i9Qr4)HSlBb,'f[ED`lTR(JHeRZ)$EFPV*"l5$Y*9i4cka8I2+TeZ
-C4lJ-YR0a@5DfYq"bYYJqJBXfHEF5EmJ2YPYaHD'b$50RdkE2BBcla@)$Lm%dE1$
-#5m9'VSNA'aLMAER$f#Am-V%40r@1l8CFrN4Xhm'&0l(GJ3Zm6mj`mV%9BS0A[&*
-XB#AeL`fmJ&0J)hH[%KXer@UaI4)Am"rE6ELm9QcrKF[VP'd%Z4Qm$aZeGD(B`+h
-ALihD!m1am4DeM1fMZ,a4E2q!bm9LZ`fA5j5YMCcf6@+$Ji'pf1!*TT0DE1!JGBU
-0HL1(f2i-PlH*lG1iB-IfG9cH,VDIir)1C4Y*2[P1XF'Ai$[B`(Fi&cB`#%k0M6T
-jMpMJ*CH,lBZi[&GXhmAPIFUf(E(Kr@)$GcmJ0[M5"m9'h4!,0R$U`f+M2Z%Df)J
-IISd0hNNGBB0cJ)hB`$qQVlJlcTL&2[U(*M#)iM(Bc,hZ6-1CRXQ!&rUM@dred'q
-**c4@TjL3!$JR3*6eXfPQ4M+F*LJR!HGfr22iCr&r$2kliEmlrM[M2alr&[c49q"
-pm$ei(T`(IJJ[K0q"UI!jq#1F%li&hi62J(P`'6JR2!EFJm2!@H'+F$mi(e`2RJ&
-Q8Yh`16J1R!iZ"bH'#m1"iEl`&lJ)I!@H!Vl#Eq!Tm"0i#I`)rJ-[!@2K*(!41!J
-i#rq!Gm!hi"R`#hJ&I!)H!Aq!0m!6`'bi!K`"EJ##`G23*0$*i-ES01KNk'2SBZJ
-RD(G`"A3lq#CF!Vk'GJG1`#IJ22!NG#dd0,3cH"PD'C`'EFa1IS'6SMX%XbS#,4%
-p!1K%Dd*M3PY#8i)lSN@K6F"Ii86S*ZKFF"Bd(6JY2!Bq#kH(bm*P`#ad-[3ap#D
-i)IS5ZK)k!cS5q)i1Kik%IJ41S,qKZm(ei1GS-@J`D#pS0fJfD#p`-V3@Y"hd)$J
-Jr"E1$(q#,k-(`CAK82"NG!Cd*2JhHJ`k$2S,@JHm#md)E3Up"Cd&[3UG#Ra@AHU
-4Br9FDYqL,M9Up9aUbqUje)R9FmQceA2"2+[RJU9@c`8cVCj,VQfpJfqUjaVF8Mh
-Ai*!!kVRH)j)6cM@#5jcV"Cmirb`iaEP&F)Vc(i*AT*FmUTlV%i08cr9CekVRqX3
-6eA0piS(UZ6jV6r9FRl@THUj2RU"kVY'D9Fre@GqUjrV%C09cIGDqkVRql`LHB#1
-AUZIkIbEiJZef`5PXrbji4AQ55p9c8mb&kVNTBTRUZ5RLLh,8&(&%pG`81BcUZ5R
-b'Y9c8m4TeA20p"A9Fe2N0DVR'LeEpG`8X9leh"4cUATZk[1#aGMJr+VRTViK1)[
-YTi+h`!XBSATZQR@SHQkDq98p0dfX8cdh6Fa926G0[U4kETUm6IAF0(&IpG`d-8E
-eh$4jM[,C0(1QZ*QQ[U0kETSkRHUjkEmAr!Ek`$A9Fc1X@p9c-mbAkVNCiVrUZ4R
-LYqUj'H+%kVNCmL29FieZVRTZK[a0pG`-m8reh-bRK90J3lY426GcA,!A'cLKHQl
-Q1m)IJ'M`@[AF,,&5pG`XX8Reh#ba32AF,1Y+pG`XmkKkETCF9IAF,(QakVPCmLR
-9Fl2NTkVRCTP,eA1ca!R9Fl2%Ep9cXq2#&l#"fDVR'LUKHQk11+jkESjj8MdhajT
-A26I(fP-peqMeUZIQ')2UZ6RbF09cFq4JUZIQL!fUjqD)$DVRjXJj9-r0XHC8cme
-4Ce3p0dGX8$dhck5TRTXRIe!p0mqFUCkECffTXT0REDQHQfHYUTlVE$JZK4PM2I1
-eh!#cVk*i`p&*rhrZQKfpY21#dQF!pcFc(rYQE"RHA*P`"E+dN!$ZQD&-14N!T61
-hl(r0K,'q@$9)Cm!X`hVedN*l9m89"PQj!kD%L5ia8[8RYL-ClBf!%D@qi6REpSH
-95NVA4"VG9b4`%EZ9A!I(VqQT8TefR&H-a!k&1B(a*,V8)XSM1b4ifhi'6GDR`8`
-*Hkrq@IeI%hp6Qm`AX&$8$YJPV"9Q"T1#L9(QX$$H36P!`C!!Y`hc4P@!YF*SBD!
-`8YJU6-SUUE!c@#8-%UB(Li-T`Z"JIE"$Q#'-%AD)DS4kJPS#RX2f8Cj3+P"-8+4
-3U&"HB0X`F9Jk+K4+"!S#GBQDJFS!0E&+)F`1CF!UF9DYJ+@LH!!r3$L+"i`3pS4
-U"&1%3D*3SB#JXLLM0d`G03C&#ED1-S*5!b0'68*CJ%@L$U'DS8M!bP'eJMPp!@0
-(9B,jSf5K@+"#`0*Ki6"Z@$T!MCU(`S@+"K0"+B2C`cp3D'#V-!99KHiqGdiE*$H
-T"Im-UUE2[iF,"@aDQ%%HZ'!%b'@D&D4Y*a88&f28`9ac"*E@R$%eB%#cEk['iM!
-95rEY2am'djAFC3[VGpFFH-EXePYDq@p,@i(RIXMbG[T'f%QqB%A@Z&j[2[5!hVa
-pBhq[NHdFeUieFVc0D&Lq3G1hS+pV`P0,PRHVqB-FVFV8mQH&lkA'%aXHr*+fEpq
-qUErreIZhD5G1R$Mj[a6X0lCrm1$"8frFrkrPY2j@1AEh`rqDaaq25BM6(RG%hX'
-((PmR!6lF%rX6,UYdGr9TGrqdk-mL9,hajp#6!p!G"'EAdCQiHdmQmC'MpfaqQ4c
-3lpBZ6lG[k3F[H4CRYSM2LPaIpKVB,mTNA2,IUl0fJCce1Y-+b(e[K$qFm+D1SXR
-hEZe,8qr`AU43*rGIh'Cj2VK65j[RJXri+bi@VG33Vb8Klc9+E@C(b&1$VX,P)@q
-PDpR69h%+V"pfF[K*VG(3p&#"pPH6jrUUNh-jqE$2VPpX`UGET623m&YA6,pE8IF
-VD6U&8a-kE6Y1)6QZ$qESL$Mr1ahB(A$mDK19DqB)[$@VD8JbD'P,##&K!%FcE6f
-EYqChfJ91VeQB3lq"#%'MTmAMTF1V-G%RdBr&Edi-K(Lm55J1q!8bSf%-TX03()B
-Y%M*K@`h$RMl89P0JiQ#H3))eJR,Jd+1p9ASB*%-lijr(2i[r@2c(icm1raEmfr!
-IJIm%r(I&rc&aD*6'efbcL"&U[mrM`mPF('#fea,($#@5rciTS"5k5J&)-9MFl!C
-53%qJYJUNCZ+lGYM5c'!%Pk`J(Td0TLI1aS,-BjVKH,T!@9`8fcHi*M)5420!Gic
-YD4SehG1NN`%(6M)!$V,B(SjSmp)ZCVDHAX3XY5@$RZRGVU8(a,6%#JIA@XGfl"6
-3RV9mYq*KGU-AK-X'6#qAZa`l51CT2mVba5+H"51@HB-lB$c&(L`Kh%N&YfVcZKa
-Jhl20[)8`[9aAErr@*$UM*Y%k&p-KcAeK+PYa-1(`a0"YqTCFPj'U[L)TfTXf#8K
-$YdQD0$1Sdm[N`rPl5kb#SHUQ-*Jh6V3A*6NZXNRPr$#IQCTX6[V$aDPJT3*1XI0
-QB,X1iK9VR+Uj!f,&10qcANQ!MEAp1[4pR"c1!25QLEl8pCicSr&-URK(RLaNLLU
-3!'G-&CMaM-B5e*2%%"E1,,0aVGh88VJq9AA6-K0cHpAE1(DFDPF6VrDZ8YRe!J0
-fEj0C,,UZJf5H8LCZ""-Xm45M$RM%+V-4268pdGZDkZhSQ)j"jM$'jL4QUh*d91'
-U(G9AI--85*3AJ("ZCZ#Nf@C'MCSCV&(daRP"$j!!*Db%a919%2L"-M0lHN*VXE)
-+rYCD3M,a+%1$Z+LpK(IGiHYEFF64mk5P2!24eSNTNm"jcpP-"&jK3$&F&HCX5mR
-T1`Ef+-B!-eH(9k[H)!5bC0k('iLla$[T-IU'C%2-"Gm!$#!YdAY"NB42N!!I4Ul
-'6i"k['UaR'b&p!!F64`YB[+L5DZ"[9,#L,$XA#k)N!!8'+3+-,Q-cd9D&B3M"TP
-LHiVPjcfl(+L#L"`+-FH[f%!M(j12NqGHLV08p$699A(4I*DT(3j+jp3hXKEBAFF
-d[G1()LV@-315aPa%54)5Sd%K%4($+KH$201$fP')&Z8N8c)0G%'P6-J[e21qVp6
-c[P%p"(BYSj-m-,HPI*VN'kY@Jb2N--U5AXke1T+iCUF8fR@#E!TpSm%133iBZA4
--3kUhVEh"D'KVl@[&GAjAUNp'SVK5cS0DPcfQq9YDK(9I+!'64)d2'jrN(GUSRea
-rKhDa1G%lh3d,mJiYcFI9hc'$9`V[&(*AHSHfjqReGfJ,Rdk-r591kCeiAaaDU!q
-Z[d124@Ym`$X8XpE3IA+c1P4TJYCC5@l@T`YbXmCIN!#Eel)+@ZCTLdDUT@KTP1B
-a1lJ,dCmfHaZPHq%31lQK4CiFf"b4&lYq&ENLMl3mfS&9ES563N)B0r")EBYa&rB
-@Q"@#YV351+$kfYXlC5kQpV9$#6Kb0hhYN6hmPqd0[hAqYC`1aPbcakFr$ieFpF6
-5m#[(G9mF$q4[Fh`pq4pkVaChccX2e-ep0GXEKrDeArbXc+N9BHTLMJ5)qYS[IZC
-3BZqh$R4a[SLlT+rGfG5m'aULd8E#EiI20,986R8B&-AY@ZMReFhIFT&LP5JZ[Xi
-"jX%l+"MjqMXS!8heGe!IQZ[[)"fde0p"A@QG9plLG`$*BI2[H,9h8'C'e10"iGP
-ZrTfAeGiaBfc[bL0$QJik'hGN3%&m8[dG"LXG8Rm(CA"3-49h#06ck[%`%1Vjmqq
-%UT`Z5EIXE&e8iVI+C32Lh2[[)%@R3fl)+RddBIXbkpIaGX!--bX,21JBXKc,Xr1
-aEF#!'+%FJN%6JJHRQ[&Y@&$#Jba(MZV@60Tlh#%$)&aU!'(aJ!k0eAJ30Vklda!
-K`J-QTJNH&0VF&J3BYY2P&DC'dJ3M$MSff8kF'6TB2'"Ge`eiB'kRPdUZXcj6'F5
-3!)cf,LGIV"4L`NK%K!Ij0r&!@+@6$!b+H0#Np%@QLA8&m@d5Bi3(c3S21Y+ZCh%
-e`UA'MFQeb69aDmJ3i8%,2ZIFk#ARc(('M2Kh35bZrAp(&p+Q3CaPCeKkKQhLKZ2
-2P#%@Zj(pY,h&q,IK2`*r0NSEJrpBr-H",6%P,)9r'Rql02QBF)2brZA*`r#6KE$
-X3PPdLY)cbT3!4RB`lmNZUa8[XH9N+*G`UC!!rMbj&SjN)@L'LCEfG+kHC&#eQq8
-iicVU(@H,0VKSG%J$Ede6%pArTd$$c6qkG`GaJkKmpF5k"$B&fqC''Hr#eR*L(Pc
-,30kKTdRfCaemabbMdPKl30jKH%(2!M0KF2)1!`i1VVr$'J#pDaP%ll!'31qk"G%
-ll+6DZdC"p!i,ajc&#4&QElCL2,T"[[VHYID!H,(B6HpD#p%l,0E5ZbC$p!llXrD
-Z[a#p`jjZJ`[U&!VH+Er1J10TXjj25B5k@3p(0jB*0qYjH(ZHf'l2d'BpjIFEF@r
-16jb2RRI[MA[VGN%$GH-1U,r0llJ2r[de@+[904ML6FTQ2CGm9%D65H[E*4prlZ4
-Q2CH-MS@Ep6$5b9fb@BpEEYKL1-c-,"ANaE-1-`XhK(5h((IF-,2bF9(X41Z%(Ee
-Ch)cAbA,FF@c9rG390'%0&k,%8YLhXEmVb!h3Q9+b$h3&$AAbP1qE1e0UpTkiYqE
-lprP`(m5pHGI&rTVXHDqaTf-jRYUTa+&G3@pk5GBDP+kJ0fYM*lZ#h[6YM@&Ad#U
-iZ%ZkJQ5SrXK6UdT[1[&5pfk!e3rA,jPJ&Ned#a`(fZEdcTNMNcND8iRMe6'#[iY
-KY8XA`YkEmS"CpY,H2lENBlmi1APSiR6"Z1#1khCG'4G2aEJ4f+djd(fj$XlLNNI
-ZRX8Pla4RFHA1c1+5GjKe0A2qR6!iHBGC9iAPa2[Hf3AA-cN6bbb!R6mc%dYmd9d
-(CfcT%YQ$Xl2N(@CG$Fl1NRHBG68i1d[Hf4hA`GPCZTLfLhpfPR[J(AP!pS*f!c9
-&Z*G25VYLbIRK%6ZS2TFr(0TLTjI,-3$0qF3a0pfckI`l-RDp[D[%[4h)E2FEdQi
-i+bBJMS@TYRL!["kCbmj(Z#Q1SpUhpL8(Kl@mlcGVqMrYdDl)&US20(AHcHX-XeK
-dAFISY)V9AR(r(ei-EIjpqm-YkddFalmHlp`")p@8@VRb2kV$a[(iPA%"FGbCN!"
-IaA&RLrb[iaJ)C'-F*ik8YDCG'e@pI[5jiFR[E%c32ZD,8*,2H9$,@VY8r4iHeR+
-A[p1!Ie#[2jJ)1c40(&'2l1CmX0'DL@2G"!'*BllTjmhLDiN0iZMbi`,L1(iKXif
-mdU"RiqK(SSeaV*ZaBmZerjJiPQV$jh"DdM$G,fNK8&[A-Ni[5[9Hi$'m-HX0*R1
-#QkpF50Uk!rmidrIHB!hha,&dZ-LqmB%c[rem9L@1XbSa!A&`*U&)(XlVI2b9F8X
-[ZE1%F8YQZpqiRh(haH%-B0cc0R@c%fEJc-d-A-L(ii1jpfEeIZBq'-F'jMiBa`E
-Q[Mk1HjKl)ii'FlFG5qi!jViQ(`mbpll%EQ,ZM6Jf-2FeBIb@Z6IL@-IF*Bj"mKi
-`pa1(rUrZR4q-HdV,cM0[h-qiHq2J1!)Bpd,E@A16-G+bETja0hq2-8NF!mK`,f-
-DM'-$deNIace-Ta(([8Lq*SlI)RNMMR@J*h&)hDpRjT1+pJ*D4BV%fJU41%iIh(%
-ZMRQ$1bl%dCaqBiCR8cUG`[`P&m#j'r%k95@ZMq18elQLa('+kI[FKHJ-V,p56Qj
-Bd5H%NjpF!(RGbKP#,Vf1Nfq-Si'FkqSXV)qc&XVXlY-D$VPELc%M3[9ajA923eA
-U9D&UTk"#[H9!9Aed!X64@I4p$4!M!0)EKf!pHIA1kH4'0A3#j-1SI8k!1+cDear
-(4VA[T+"8e(V'9"`V-*-YG@PL+qcM2YLF@2VqFHhVLA9h[G4c0'&-B,F$lmH!6EI
-#rpV%ZYel%N[[$+HmQ6LHbbVUbmG3RDR+XU6m@VdLX4JJ@KX(8aSp$V2F@[G'CA%
-#e+Y4@C`!FA!#120qQ&F6Kj5(plrem46Ai6bq[Z1RdjNBJ*R5E'(BS"lHd[L*cSI
-1hNqmTNd&apCBrc%FaJN3aq`Gh[BNrJrR&9EUVZKCl$me,P3q"5ldKrSSF+%re+X
-lS&I-F+'Yq!%#(f1A,h6J$1A92D&FFj462C*A%mHkqFP$F64D[,bVippk[2V24UE
-M9ZVafRSF5ceHCj3Af'NMVbk#,QrT&GYk(##pBQX!j,HpBVe)l3VS&BXh[kQII2`
-%FhG8-&-R!(+k&C!!DZJ-EPRLrY"d(#k6F[U2Jd#,F300bYPk(%Z6FMCU-Gf"1!N
-QlJ`FREJcF0aE%hFDlIrHNVL+r[m0$-kp-8IJAZDe*Si(Q9GI3MBaVdBFcSRj#"Z
-C9hFJES%j#d%F*bl8'8()CU`"+9MlMKZ!%CJiR"*c(l5RE+DERkFS`plX4*8SqYl
-iG5IU3"a$'Pb$NcXr1Mm(kX2*d2RCQirl1cm(mMUN03c92@G$aqC!2N`Fph4XhKR
-(YMc#&1pJ2aYfdfM#@,PKDYISjeL1jGRjf,Ded1bZdA,0+M`i&@ZRZpU`S)3(ZIL
-iEI&d&r&@YEZqD@jG8#P6TqlSY-`#YLpcUD'%j3FX`lBD$k39iNc6XkdB085)m##
-Pm+#`8H##`(3+TPG!T`USF-lkG+l(5+hIC$YaCZJ3lDkIqbiHQ0[TTC)E6`B,%4l
-Nhm3$BC@Z-Si3i8'6dTZ2akMRVL#q6@H-m+"Ci8&(f[@X$JcrAQVFQ&bEA"1hKJ`
-4(V6%c@dG&1j%mFdI1F5lJfVVS2(SLGBG0X4h&HXeeE6EL&rE1UL-dbliVB-HBHi
-ZT+f$C'[-J,RlAcRH(!2!h&eD@`F0e[df,F2@3Gprq-YJUlrCVUDJ3ZekU+Sq1J(
-LH'MVS,)UCP4$*d!qM0VR")M$URhpF@a8qpC[(A6!MDpZ(A4!iqQYJrVb-94R$fd
-G9)lMSDf$bR%BPF8*8+p'CA%#a-(C[(931DmQMYpY(951Bj[KD1XJEVRUeN%11&!
-)Y`CKj,YEEJZP61cF&NVCZ2bYJa)m%+YVM5*%H*!!MThE3ZQqVB0d#kAjPF'LR6H
-kR(ba8SJ*)jA*eN'EYP"bNB&"%3pdkb#(h"C+,E&c@bLeFPr1`AQTcY-M+h"FRV0
-,jD,9Pim"'2hQjMM1Z*j9GpT'BV1M!6p0"d0EEFD,rmPl3jZIQaMMhF%dCh(9Sk2
-6qqhiY+rHEmI8k+SM5q#r8KprE*ZqrkUee6LF84Z*r@U[SAJMX5T1ecB5+q1dfh`
-M-5F#FhF$EDZ`JERlGbhE&J2!h*e('iRpCXZ%VA@r6FZ`N9LAm`48T9i9URB++Y5
-hakVUSa-JMZT'BY8iDTYAP98aSaSk!I*Ke$iR3"a@lHZ2Bk2DCfBaIb`6E56Qlp@
-2`biELIPMamVD$IT$$5f(4r8$0a0-C#1a0JIqbr@(h['N2[Be["I2BZl,ae#G96F
-5UmC4fdLX(%Ge)l%Yq6!ULa1JASh+iJ5)Je2F5'a,ANdFb8CL@q,B9ZcC5%aQSc-
-Q2Cp31iQaRPMXlZZrAAdRK@YcrCddVNheGq6RA9*r*i[VVY9h8J`[2#qV[C2$G96
-d6Qmm-JRHZkEk6[TN2&lYR9CFTmkr%`CRGU(bY2AeGpT`R9Cr"cJqY2l1+&cR429
-$HGEVHc5Zci[H+HBlHQF-VXqIIiGDYBDaZ#kEVp[+`9eh!(+p[`00D-hfN!001q8
-fCrZRG#Pr-EB5D-m0@d9U'GQ1VTjfNN5pqh*2bhfXh&1e#&*,dQlJHQk4deE-&LJ
-imC!!"'m#NRXFF[S+814`l54a'#Q2j1AH,&'1P[XBZEI+ICLm-d,ZEA,I6[a02%+
-NfZ8qJAIKXc[c,S60[!FPeAYE,6QCYl)H4"Sm[H,P`qbB9%*dpI9mlEAmjAbYN!"
-fm`EN@GmD,j([)KNbQB0%DQE'ef*T@FCBk-CENMF$'`T8TeYJ@kK*J$bf[GahF1r
-Jjrr%e@2+d[G4EEC-&3hJp8B$)(hbClHiCSB28XJIAMdFra(RXFIKGHlR")B,b*Z
-'#mMG3V[K"(,2a!a`!B[P#4H3!,X6JJ0)G-2M!cL!C'6((h)!mpbK&peaElRLH9E
-KKUDh,XkEMRlX!q9bZqFYjMRB@2fZGki+6Ff,Qfl`!kYX$*[1pl#L@pjb[+$R0Mc
-#,TP1f&em1M[5!$qRbcSqlVKGI+bkEh5XP[j-9l,X@G[YN61[K9eRG!q-9ZMC6U9
-bSMqmZPc1Acrp'(l"E+,@)a"i[`FAD3PGG$3')DIq6q+8RGaaRCD&3R('GdDk"pk
-4A3K(9A@PpNDP0#A%H2$)`h1QQ,-EJ#mRI2KSI8aIR'"(B(3-1cHNbaR3d"*fV)G
-eiedB+1(!1BY[p30cB8U0!q()CM&bkcSrqm)&FjLJ-V[ePPEqffUEFTTY&"DXb"V
-Akmf((Y#EYfrXlc@bRF2DY8D1YaN0bcGSqTE(d+RipdZ@GfY$4Rq[9*ij+D2cN!"
-B9L8f22JPNK&MPV[reIZh6G[$IpRHm&[RAm[TB-`eHhckmp$)98mX$EpbA2I&m8$
-q0XIANrqKpfTaplcc30hF9l1pF6cKXNTh9jpfca2#F%A+I22R3")"ZS1`E8a(Cq+
-HamF6HlpeS$X*PjhdEZhbG2Z@IZLccqSc2FkfAT(Vbei$qd@CM-ZT@PGRl3*Ri9j
-R@J'lC@q%2l6cTSkLbIGZlF03@ERrQ#+hh(pa'pBE&NVIdZDji$2qLSYV)k%bGYM
-r[MLd29Il89`[#afADeIMpT-`ChXaQcjljMdpU68DQ[kHd,DhpNlFcTIh@,Rj5V(
-0"UZr3N+NmcU["'&IXmfL[H[eR6M@(--,(bD(L`1dJ#eac,"SIRIB$pG&Fe)BqND
-["*rcjBaT52@fY6FB$@fYIDficZp+p6A%V@#"5qM3V`,MSKq&RKPUbdia!@R4(Ne
-[M[bCD!+,FbHFc90@A!Y(-Y0'`FEXaR5LMkQ$PHjIY+Zj!qp6`bM5c'0cZ*T!Hfr
-Pqq)M#V44Y#'lQEDHc9[c1qe#aR0h$16#1Ec()-U*V`@3!%%&pIXILqVUmkIUdQ(
-pjF*q*fGFpk0Z1ajd`hB-@BlPfIRB0Q#`f`V,0D2`i&3XVZeU`i)5(Q42EmI[@PZ
-02m)$T2c9H"#1,R1R)8+%"kR[EN-r`hELc0!KfRBmpqCfr,+Ei+QZ%dZf)(q%"h4
-(hBX(`LUGC'"3a)-QT5mHMl8NZi,i0SNa`J1C'!%HG+4GcqV!STT,M4Z6Dj0ViYD
-3!#(#JjEiY!hCM`bh+MHRUI0ZAZZEGplaBQMclpYrJ(F(dpj26pLeFAVIiK6YGYp
-LZh5)EXMHjHmdi"r8k`mQ`LNiEUN0fAqpVe1d)AX9TqXEXTG`fQfq)EX6JEQlJED
-Rl'IZGU+@1i#j1imfC*Fi"XPlZ2ANeVVITQABN!"pjA923eAU9D&UTk"#[H9!9Ae
-d!X44hC!![4T(I42`NLTQ9%-R3$k-fZF%L#2FN!"pE4`Ee6kc'pbFX@K$pY5PLDf
-`biEXUDA[(pHqRPKhedXp4a2'a(0i8MCN(rNmr+p0V0Zp*l(dcZCU('BhZ,jm$09
-CG82fDKce$GP,F93hC0q5$k1b1!(UeDJX6S!i1-80fEINeF54E-Lq*BjYaCi0fEI
-T%IDXGDC0mCiGL@*0"d0EI6V3*IH'0Mmh-FDlJkNhDG@MSp-c)AhDibRHik%ak%a
-)Irc)%[L[e-FIfkE[[fTY03l(ea6[+NlAThLAF0TY2XAELF$Fh8!6A[UC1dHCZhr
-AXQda!-cG,6A&Hf[GEp-b62(ZFTk!UY5V3Y913BAkpPK9IA3#a&'GiPf0SckYZ+5
-+'GA3#C!!$k2f13(L#+GiVieMSpTRqTFrKQeHl44[Ikpq((DCiZf2(5YV"r@([RM
-Nm+Kqi'D#L8caER2J[eark*NfIHaVH#rZAql,ae#G9DGi9q1S6r%Za9'GiVdP(dC
-PF3,8Ue&CR!"aF)T6[,INeF5462(H%XFfBmm8EdpEK$pM[-f'PHCN`NdXpcKmjBI
-GbFNAQRi!,Hk[-cUKm#('KAd1ArRHa16NLAYMhA"Kl%@[i-,Ka!92'hP,V"XZY)0
-%#M3NZ2$%`eIZIJ'6GhiHkiB,-d!@mV1id!QqN!#HR2cQaq,FB+%&XZ8BVH3(XiV
-KH2JedkmNDqkjJI4#r%kEmI0[`Q8Lr*E-q"ha-aJ*TI'PrbVbf`Yaj#5qf'r+ch-
-jK##qf#qrJXNk`m1F[Y5aDaK`i*FkK-YZbZmDGNm*rc9q6irHflXI0Z9%U@GaZ8M
-j[HEAB920,Fh*4V19h`(r"TYbkq`UA+BU[f2C3jU6I"q$bh$PepE("!9q696Npe&
-qVk)BU9bmL9U0a[I4hi@Y@INGL+RkfBcbHrNI-'GDPiY`'D2mYPm'@k[%66rr$XV
-[Vjk"ECMbHrERm0a+jIF'aMaFh[X%FaEi2H-$X)f3!$TJ$ZbMPGr4e"IEa)mqBUf
-E[rJXE%M6e!Ge0N,jII)AB0Y1qHha*',8q$llXh!B*A8MHIA@+lqCc0pSL3mPG*M
-bqeY1Im0AcV4[)ikEP0m9[`Q(X4,hTk-kq"$M'bGqhiMb01ihB(Z8e0PhFIQmmQZ
-pNcN1r+Er%H)ETrbZ*!CXVrcfClfpArRGpN(@PZE[lEK-8RlqAm+fSr*l+V!K*IN
-ERiA$6XV[+Z`PQK1rRa"6GPET2Z!T6AZAq1hm83+VjQNhA0T,J8pmM6Bi@3aXb,q
-P&)4pf*(IFVB&(&S+LZk-AjEe2",[JEZaAi5AYl$@Ga%mq1X),rGIc4bShiVS[3Z
-q!YX%jCIC(H(PPjk'MEKilrX4RTe'A3&-"QUS*mA,-Da4mS`IrH#+PcIXKfehmB[
-`mS)(B(ZXq%9iZBSBX)Ib@`6HB2(bGMB+6C6hU([&L4Hm6++L[!(m9Vbmk[1`28l
-jJId@,bpMV@RI8rU2)l`mQeM&qm4"$i2LjE*pX&%l2$8[UT[$rS@BSHq"QiUAhlX
-I0YA`$rPdK*FA2mrFkh[A4AMjJ9q"E9raHeZ%PemKAX+cj-cmr3J[2H,CC(Q2('J
-GI)RBC1BpLaqeCI%!,0KIqFfk,m,,pqC)`!+rici4iH8Y[`@(!j4IjqB),prfikc
-e`'mLkdEamZ0mkd$Ppk,E)lbmMEA5SIc13reE[$`0f1rGV2bq#Xb`H)RdlD(H$Fq
-J4LeH+XIM[1X@a#'iD2!bmTYj$fY,m6,bDbBIXRJCqDA)"E8qp[S,f-JY1-HN3XA
-,UiMIKdJp`32e[@2*&DBT[m1*2BUAEb!Hd`*$h2mCiGReV,RTbZq*j0'+Pa0q#MD
-GQj!!HbR#ba8(@AL+6cq-m2)bjP$R'Q6)+c5qVhiBYX18hrXq'H(P6X4[lFA*X2&
-*FH,$M)fkKTF3Mq,P+1BeQ2RVAi@F@EbmRAch#-N('+CiGJjVBVENPAT5[1am%6D
-GRY)-h,*eXibiSR-VQXNj&#r2*pHFUraHqNX4AVl[8h"iLX3(*e#m[)&F('baX+r
-iF5(Id+Dlmi'R&Lp2"VCjlj%iU$1YJh-HK3e1"jc#Uc92Cc'AB+1FFiR0LTFhNNp
-6#h*H"AjZmI*!mKXd"rJF[&6aXSZcf3@[6(c`@-A,(D&jH!2+lm1S*iZA0c"@G!!
-j9k#',&jqLT`CI80#RSKm@EamdL2`S"D)McJYAKEdB1N1!p-8,b1r&Z+4i+,"bmK
-[mN30,b-rRla,kq-IL3A(bRX[Mr"b"(IeIBEJ'AR4pbiL4cT1q6fCYDKiH4Ce%@S
-+fJ,286cELIabXI!!hP1mI1I(BG1@VMcI9Ebm%&Uh*fed+ICR+9lZ3Mc3cX[pMNE
-a[B6BSaeDek"',9lZ`5j@h8pi#V&CFH*QBT`1kCP-AU9i1CAF)*L3!1NAS$Z-1kV
-m[N8HV(1BQXM*&-pq6!e&'a!R%dF9,bpPV+UM0C0ADGfmq*pKdil2bH5,LTIAr#0
-XfU0j,ILIaFZhBL%!6r5lrFMM&5q2T4DMN`BQ8qY5r2KcFPV9pDi$0l*iq6PU"Z!
-#Y2(+U!jHahf0YIpY2r*qcG11V%@d&$Q[*QG5[0b(Z9#GmA1S#BZA&a)RY"[[mq3
-+LTI2*hCU3qlqc)(LjHGB"pTKr%AJN!$&bapp!`l,92fpm!X4ASiRMTkYr*C$*l"
-iZBJDh!Y8(&1*`Fm8[#cdiIQ2rKhL1%R`XZ$RMC+,6"@mM2cbV%1,P`@rP)0mY1`
-Z"81cHZFA8+qT9D@bMrFL2rm*i(j+br6i!AJ`Z#)mQR-JkdaeeML1jAq+bmF40h8
-8k8!,L6([&,q)laj)AMe4r!UilKmPhhL2q%9jc8,(8Tc)TmRKYG%bLlak0i9q6@r
-r-Q`[NS46daRehJqS0i!rd0YEL-'"hqhN"("9F"'p41-lPe`@$#3dmK6%Prp$FY0
-cKAF5Ga"IdpA8RY##S!p`Dih[hG4%d!$"1Gl@q%iQ2TfRr)jJV"VIemPe`#X+3A3
-DQlqVLHR`'[!-A8cMZi&Df#X%RqkSaYHdL,'KTm%E6")$[peB6kq8q-"[MHpRd'i
-pDNVJ!EUAaRF(DcIScI#I*mCEI#VdIAP23DX)pBr)lfR%Ae[hN9qHq'ha+I,ENja
-5m-$J@H5h(rd#IT-fb@P&cbFIYi&IUKk3!0l,2-(&a1pkm#A&hI4UFP6iQ[Mp$0U
-!aGhA-NDdA1UH@P5qmK9bGEJcd!S2#2K3ZTQDh3@5MkZV2#1pKrLR%kQRI5EL3eq
-Me[Ck&IGA8@I+Kp+$j-6J2(92V!%I5QqM4SbQ6EfL4fLHINkY*GL4frp#T,HPKmJ
-Y,jDia8rI5jI*L89[i4a&R!lU2[8`1ClS'-4a%r"*q@9khcIKJ8j&#F!c!ca)r4i
-eh8ZP[Z%R!4kN,cN1@p$ckBq6G`8m10e*A(QVj!-Y-1$"kAG!mrDS(q*hFm6E,LF
-Q`SR)0caEHGYR@%0S2K,Irf2p"E`YA@*[`cZ8hlG3IjDhII0AL6'D$hL`mVDI%Mr
-J4h)krlE+fp**DLAJXlah-rL%mVEd[NPi%![jJ(m%qN&k!l(Q2B,Im!h0ddU+2*F
-V[kYB+i&qN!"q,c8lY"TJ"pe"qIdRLCeSX(*Q8THIAr,Rp2,$LI'[&Vq)*cheiGT
-l%4pDH,MfAS5A8mKA4S+I8Cq4AR,dRp6HLrbZKclV[bh-drb3!0G54h+q$'k4qBc
-bqa+e"RSFS%[#0qal0e,$44X8Pa(!3[[H*mLPk+'3!20hb+YpEaMV1pJ2a,m9Z'[
-IZj4Bq"(PphRJNAe[2ZZ*r)[,&a#RI@m8Z4cDRIKp"cc-[RF1ka,Y6LTS-[T!l(Y
-(8*ZMAVcr"`!!dF)!!!:
+:%R4ME%eKBe"bEfTPBh4c,R0TG!"6594%8dP8)3#3!`*39!#3"(@,8dP8)3!"!!*
+39(*-BA8#!*!%&J!!)#!1G'0X6@&M8(*[DQ9MG(-!N"'MU!#3!p%"J!*L!hF!N!-
+(!*!2KJ!!!J$rN!3$!+df8!b`K1qP!*!&$&1Y!*!&!Nr1rpIrq`#3"Tfh!!d23Np
+"Ae4ME&0SC@aXFbkj!*!3IPF!N"%@!!![#`#3!aErN!4069"b3eG*43%!VllJ3l#
+%lG3!N!8"UPS!N!BZ&3!!BV3!N!CrmJB!kh(#A3JIG)6GpKBPYieXKYrQ8hkaMLE
+2)i``3VPN(l19QGqQFLURPpb,r$jfDiCR+Y1h[AU8HjYe2GZ%fbAKC*maF[YXB%F
+fiB4h$Q+EeE(YNAeq4RKQ6ik6jdrB(K#fb6EGK'GQN[fkMr#1l)'%Aa6Sm!Hd!Uc
+(,MplhDIbmcBMqmKY`XNQ[mNQQp`QYmPqm6`+X(jR$I)kXr20JH`FYFpciANj@0J
+qHrCjA@cKTPY[DfFPffaV(5[GCPSA[r)k[Nc-M"I2kc+rXc-[-ehXq"@rHXqV-c1
+q[#i$hR@m%H6,HjhIQBfd33-6!![JV-[VE0LJAfZcVENK)pbHl$MCj"D6,3#Fi$X
+!,pp"&AbrC)a*ihr%T$kb!IprEXa,,d6mQK31`CGT409+r&q&#hr%Q*-8VhcFQ)j
+ZM3YTI2[ZD-qhqQ2K-hFm)5TG$R*qFQTGkT!!p,P2pDBMCFE(kfPI'8ra)p3E(rP
+Hmf&MhM$1RdjK8X*Cf0Zec*pZfI@Pc%(Qd!5!+Pc(I!*cG2rd+(2)P+aIb4Im[6h
+U""C06pf@AQ22j5BUmil8pe1E$cV"c%3EEM6Q*pPNLNQM8iUK%$-+Z1KhQ+!ATkj
+2E8NrXQf#JYi8F#iGYF@fa[I3Y6Bc$ImMD6CS5G3Ph`#L9A%PAlcq&QSkq%lKE%M
+Xl(TjqVXBrqf+DCE80N@a0q)rUpM[4"fhh`Ia2dfa[m1r)*!!BMdc&&Z%`dc&(Sr
+$BBTY`Q'@BXr$BECLeq"`Z'+rUVNKp[Xic&(XicJFUGKri6"A)%L2Me,X1"b19Q`
+0$[-8Z`L(qBVp)!i,&(Xe$Pf+rCVQKGJIip#Yf0rLd#0SB6Ck&9Z-3jpLMm8KTpL
+j10"rBXr&JAZ)r4J1rBUp!BF"aAiEKd(&rKm13iVp-`l$JQ(,H@f-[La4M*PqK'*
+2aZ'4LJ&Gd&eLe(fXBY5p9,&hik"a`m3qM!1c3qaIF(K8('[Rh"k['$@IS0LT1$a
+DXA0`1&%a-1dNaDl'i@6&IPli3qbG1(bRBTUrYl8VpSmi2#D1G4"(Q#PLc!2e%L2
+RFBTY`!&X)FCm'mc8X4IKX&bakh"BSGJ[il"5XIILF*TLp'#9BTr!BE9LAm,Kp$L
+@*6DGS4Kcm%6&U"qF)FEmICGLcm,K6-9q'!I"j5cajLc&IJ@(GBVp(JkMLYf&`j-
+8q`GK0I!,"UaA$!bJrm5B@fSR4YqC4f+F0bU'EJ)Z%32rcP2XTh%!NiQ"IqFV"[i
+p4E(2i2$GF@`D-IkTLS'*Qa9McTqQ',hBSYJ1(*kZf%Y`Z%!akYkUf+rMF+&LIiE
+$-a3$KjiCakD65fa6$%aNhSR4EfD0'2A$CBKGL3-p*rB+(*kYQ1C)E4A&k,&3[1Q
+FqdX9qdmF`'hpc5!IZ%`am)jq%Q2QKEr0B"rK-X5q(iIR+rCD(%4YQR%M$PFS"Yl
+3(f+I`Z%&F@`Q1CZ`ZjQXqi@+JF9J'M&`iIX8SpI85`b-%3Bk%ebflCf+86Ic6Za
+2F2JKaIiD"qiNGMF1m$lp(8BqKTj'$&laSiU"PF`[-I!#6N'-hVe8-@Ekaa9l"`l
+J2l'2i[!baIi0Kjq)Bl2)cH"pa*LYPbX'EPfV',-(KK2M,QDCf!di[&+a2mAK*aA
+l0!k[LQ1cb@Pr5M%i'0K,$*l!M"!$"jP6BX`E256f1Kaq4V(I`S%iXBrKm,1+I4Q
+(RiYMKj02[Piaq"*mKaMi$ZFL"JE"UBNa*lqJ',cN6BVp!3krU0MIi2$Q1(B%XH'
+A&!2lhk)BFh1pBY4+,F6!bVFU"Ll!0BJa$r"VBMIK`"`4qd-F`%CLIiA$fa6lGac
+J"IUE3ll0RF6JC$FV"KplZf*J2hK1M(lrKQ,d!#`LaLb"$m6)J3m5!rY[83c1F@X
+F1j+Fqef+dA[QN4MF&Hj-$-i'Rb8'2d'[)!B@[dFa-1*h&D1rF%"LGq!!rb)'hlS
+YMXfPaS(q3!bZcQ`5!`ZC&f,8qMl&`26E&@21rNJaCJ1Z3BamF*JB@!9fkHmSFM[
+k3!apiIf+`DXrS"Lib)`3Jfr!)iL"JhFUaMbMca#MYJmTKNi$apHIN8FqSKJm!h`
+Q"SF$hiM"-p%LL-&ji+6%`1Lr8!bmq%[&k#Qi3Hc[F8#VdGmmkNG`+f,S&r!1B["
+`m)dB(2+6LX&Yi%6%`!PQK"KBJ`j$M0QJRm5B9l"#Ir1T3e%l-I$qXiSaVpa$$+k
+'cN!-r[02LS(Gk#h%`!ki*c&Qi&m9JbGp,SiYS"j!R"MDbZF9JaGq36(`liZ+`Ar
+3%iJa0r!JB[35M#9'cIm4alTB(cb8'"J2eb#'&S$f43b1+VTQ&hL4NrbkJ$G1fH`
+#"LMTIehSYC,qYa!DR0(VL'Np5%Rr@`KG3dRr@`LHV+6r,33I8p,r&Q)@PI5rKF!
+M*Ie[)AUYT2pe3ip6d[qkS8mSkArGi#K+qPmhZ,H5rYF0EUHNrh8$`j6d[fjJU*,
+qeiej9Y,rHP#cN[lA!ce!5IrV!DiSkAmpQ(8PrDm(2&P*rqX"ae25rhV!2C6d[aj
+JST,qe`-X80,rHY%l*If[&pU2N[lA#mkKT2reJJFSkAqpi$T'rb5QF89*rqX&2e(
+5rhU"+dVkAbpQ@dRrkd12P25r2Xk0k(ppd*+8p,mqD"p+qPmIZ,U5rYF(VULNrr@
+"cbMTIhh!8bAp,iFj9p,rFZL&N[kA!bG@d[pbd'Z8p,mFm&K*rmYaEN6rbi'R+HP
+r1A!'*Id["ha8d[m@BBD9p,p&a"M4raDaPk,r,B,ZSk6r,B+qS+6r,3+r9G,r&S&
+I+HPrLm!(P25raF!JSbd6dr1MT2mY4Vk5rVFBHTD5rVFBr%a*reX-IUDNrbeQ,dA
+r@mbj&2f289A5rrSa`dVkAcma4[5rIZKC5[TI2rXRqPmrCe(d[hj`5#ApVapF48R
+r'b#ZL2ihJ0P@d[m'L-'Lr`e`eNAr'i$1SU6r$8!M80,r"SL4S[m0%,G%raX%2LV
+TIi1B95ApEa#DKj,q0`K0bQMba$5290,r"SRaS[m0JPXUkAq$i$C+qYm3F&P*raX
+#lLMTId1B'5ApE`KR*Ie[#&U4N[ih"%e(5ImE)Yk,rMF%lUfNr`f"CbVTId2J5dV
+khc$l+[VI-,&Ip,pKBTMSIm2SYC,q0`bHT+6r$82R8Y,rKU(&+1Pr`p!4P25rBH+
+Ck(r$a$24rdE!6j6d[a(@,IVI#$$,H"Q)kIP8d[p'8(r$EHBlq-!,qNhYm"2`!*`
+"JjJ*CSFHd60`(Vi"$f!'dI1B$l4+F"01!1D!4q!(H!,@J!(-1l-0AX,Mi$0`+AJ
++Fi8H!Jiccr"#H!4m"Vi)Ii3AJBAJ*"J+4i3(JHp`9VJ'(!$-KNI!(q!+i$Di$pl
+$#q!5m!Ei#,`)MJXIJ4I"0H&dm%#i)p`%rL0BDc4dH"*F$ii(Gi4$J5R-0p`6[JI
+f``8J"I"DZ"ki#Hq%4m1h`94i(c`@VJQRJ#H!Sq!NQ!L1JQ0J(eS[I-(jEm"'H#R
+B!aD"1q!0A"JH$Ym&Rq(RF('`8AKGr+&MDJkDK8CL+,[Sb-926`QZ*bdK'`dKIp*
+q+I[PAC3FXM49@@P"rq[5TPa-Zlr(ieZHbj%2AV9NPhrUSAU#B0NY4Gq5+UI*N68
+lZhMTSN+Tfmd2Zl9F6M4ar"-,QIRd2-jHQ$mRRbRPJm!0@PGlBK,KYkNRjbcX1)Y
+SU1qGPR9V)kl6pmrC#HD'*Q6QphBY+Bak`lQD[f,a!&VRr&jfc&2bp-9Z3`I"`,+
+$,b$)@Eq!8-S!2i!Hi"dS"GU!DC&f2!DIUjXHZGl`d40k3mrS&IfMPr5$[SMmj%(
+iQ)@4JpN@5!B!IH`80Q3K'M5-rb(m$q*r%IiAilmIrchicq)IVEFArdIMIcVqCq0
+r&[ke69$6P`GK1E4Y&J$kQp!@fbIc-"I$LQKiYJ26"h-pVG@DZpb6aD@%PR+5XNb
+h+-FB)lrfKIG55pi0jcj'8Im[`EmH6#0dCI(IMrm"r!rLIaMr2IM[aIpdr2GC"f5
+a8EkIEr25)-cArN8,I3#IqJ1-1P0`IZ!M8Z&)%13$%J)"J@"!,"cjJ3a"1"`'qK8
+qqN4rc2R'Y3p"Iqq6PbRm()[c[(hhU4)G)SlLM3p3-L5A2J6GiTZFdRK8,&%9!Ua
+MN!"arCr#re(iRiGrc0XCr-r(rdcm(iEr,[bhilm$reRm6m2r,2`IBDE)0[Brhrm
+a)FhDeqB,RDZmX$YI'5kj%U+rrL@E%&!3Ll`jT[J(ek!m)(aj"0BHq!-@0&Kec+'
+HrCaZ-QHEEV*b3AE@E*Nl'PmXC34kKA4qkP2QUY4A8SqPYfjIjB#P$LXG&MUXFpM
+4X0aKRF-bKe81bak@2+ab@15`aQ'*``U("3lV'jBhV'jBh,#CB@R$bSD&69[lX!4
+K"F)#K28(5a'@)D`r@(k`qQ!j`P+%e3H,$pBH,$eBHE$`B0h"XS09"iX1eK`X18`
+!&KaM68,kaRk![)lXM68!'4YE!TB&V!IB%*!!bV%[B#r!QS`P'ANF1c)fC14dl!F
+!!*L$C1lNF[!&H4ej(SX$9JGNFf4ij(HX#eMZX0TKXF0DKf825al@1K%*M+92@rE
+-)1[CaMU(C3kV("BjV(&BiV$#BB($qSEP$DZEXEKKKp1f!Da#@)5`"Q%j`P+%03K
+,%&BJ,%PBMV!#B3(#qS2P"kX2&KqX29KkX2*JiF'kJf8(U`i@(@0G`P+024Tl*YC
+T,0PB$V&1BjR')STP'dXf0PJXdPK8X83M(f#"a[U-j4RE*4CRV-hB)V%bBf('XSa
+p'GXbGQ9Xb[3C134T""A8kE$B*V"E3$L3!%kJD0JVN!"8X)9J-d&D!G@a*cMC"6X
+&&JcX'PJSX%0J+A&,EV"bB09)C"Xi)VCGl,VBG,(R`Yq`p@,2aAD,(4GV*lCIl,K
+B9V()BV[&KSR0&RXYYPVXY0KSXFpLQm8ZLde@fiHa(@)ha'D)[4$E)VC%l)AB#V%
+6BQ[%YSLG%"XKpN&XJpJ&X3PL$m3@L"d3'b$f2farf2f`q4Rl)lB8l"hB9E$RS$5
+$S9KbX1eJTm(ZSZmfpKGp[eN6J)9@ef&@!m"jG)h'QS1G"SX-eKKX--j5!b(%iS+
+0"RX0PL(X,9KCX1KJ)mFqMQdFHc%fG'cQf&La8@-2akD1$4el1&CG,-rB`,&rBr(
+'lSh0'hXhYQlXh0LiX@pMfmEZKqd31aff6@b"@#UaMfQ1J!d-qaFf0'aQf,q`I@(
+h`ZD&[3YE&hBZE&cBYl"YBGI#TS8p#eZ@XDYK0B,*B6Z#Bf(Y`DD$&3QE&0BJV$i
+)j9KkX"Za6S%e#Q!Y+a5`$X2XX%KKMF*bK8d+1a(f+#aAf++`,f'C`MU&93PVNl-
+ZlIN15Z3H")&'UM3R`j&eDd!+3p6G'!4H$6F233+$F4kZl$eBE0Y0KVdKj1,lqUe
+["Cm19"mPQ1TeX#pUKkp'-p@cGH5!9kk@A!G55'jHAmF*F*!!L2RBIYrM"FABa-@
+5Nc38#+-db6)'Vm'RQRD[De2hT9-(4Afj#GaQRT0)X9l00p%4ej8CrAep-K,EVlf
+VIl$ZMP5(F1VA&pd5"CVXJTlH6[TTj,a%jhkG"h8HdIN42'0XbPH8QTVe3lrQPr*
+1VcG8bpHS"U4i%8+XA(K8mm,diGR&ZZSLPr*1TkUEVXZ1eZ@cG$j#qEh+0hNkhU2
+il'CaQCH`[fHlJ6p@+d69TA9E6QIAmq(QVGR$H'[B[S`U-a9$++36-a9IR"MLPEb
+2MR,AD1cjmX(BUZDfC2VQGlBi,I-l&RAJ10U6@D69$Vk8Va1DQ5@5QN-#Rb1aSKj
+6b9fI[[A-1Y(d!p$,23J)QBdFBaJipE&,%#K@bq"6+@dqd[R'P"VHipBZ5N*i$`,
+UmMhh"-A"@[6ae!2h)+$11(!2)LZQdpBpL,Cc*[UG[`F"m6`U+dB5+Y3MZmJN9`Y
+[B6ee-U'c%"r0`V[GG5-!BDTYhB-)1Zh!2BLTPqqj*qS2BZZ1!rF!mYX1h)-)qm`
+$pi#AfrIGil(q[ZP`a)ZifDYiSCF[HDZe+qHqc`2JbYiFZV@b9mQ(rbMr`%II-@m
+P6N8NHX6q*!p1MX'VQ(GTYA"P,$PSj3$e3)6-NJ!C#iajD5m(df9H(,`mFQ-ZVeC
+l-)K,#ia[F!0&G'BB*,*ZD!@#flfK-XTG1ZcE@&Y2"C2dM(c"4CPY!cepJdYDSDN
+[CA4Y2La'jifCrV&+k*AG+'hj'3-p6XEHSPYd,'1k)#RG0@PTc36&CY0(#hkjkT8
+mGpL*EBbQ[hB-)JdcE(,NH9aD,44jc5QYEDe"X93[9Nr!GUq3!!mp[i*kG64UeGV
+&LK)FVEP20-$9QM[HQ69le-Ri`kjT@Ja')P&)CaCRPh[dP@'RQ!*pMCN#hC9e!e(
+%cT1Z)4LFeIN66[0QcKiq-@26C-ad1'Hc6H+bEBd`4JHGPHXT9reDk#$H0LpI+[P
+q"FhFAL9ZV*bCQ6%MbY6"dAa3b*HLk0RZDS2cmU"XPQ6k&LcB9X0SjrC`A211iXQ
+!V5@QhF*9$Y0AZ---5,i[1Yk@c5hH(RDGND"dKQLqHT1m[KI)%Nc#j[SNf$a3jV6
+HhLKDQ+``hd@,5+Bc%QM3+4)[iPfpI,NVUMKr2@fa%Q)H+'41BRfad!QE&438`C9
+0&F#6H`cX-B`@-b[P9DIAPN#Ac2e`!jfZkeek%h-$XU($BDi&!dK,rMil*-%9p'F
+C@jkr!Y6M9SIPG#ZJ"q"SR1J3NaY0@`hX&4Y'K8Pb-K!"+6")C6%j`HF#VE,Pk-!
+@%)J,Jd,0UiEa3136`TUM@ebKq4c6MiYhhK4eUC!!DDDVP&,N06#l&9hJEIUL&9h
+ac%IBZk)VCJ8Aq*A!,lQY36Jf&*!!mef-qmrSl6c(VB44R1[AjVd+BZlq&9f2Jd4
+!e&Cd%EUN"kX@GB*8*AF@1C'p85ia`4#2BNb-5JXDiX)aNb9MAFIZ&,Ndl*D4lm-
+1VH[B`9b5a+4hmIf*'D$3[8+TX3'0!9hA8AFQeEq1jldU2T@[!d2Krp#5[!*[kbL
+A*QYF[6kI,f)$e1'4+J5YeMcdNY'rE8r"jHFiaJ@PhIHlaE9qYip0)#bk#%hS1Q&
+QhH#qci3H*"6YeJ'TcRrN&Hc@-*ecNarXeKi!Y*fp3f(`e+'Y6q,c8k`AD$YU3T5
+6,h,3KUXD0L4(F!GX!2r0(Bjm8MD-krI!F3FmBPZHA&$RQrRFZMlqCfIGX1D[G'Z
+MJF-YIlQ"BrUG%e0Y'kp*Y5fI1pMRp(FAcE(1!%mV@UE2`6Bc[HCTd4e6Tbmd)mj
+Jr,)"B8QTkGr50SR8T[5F$IHBLbkkU2k[lVpkQGQbCF[frpGJHfX8[hlpqPeh(2b
+[pV4f9e+lrq(rPTY[6NLSdhhqL,k$$meF,`%qh&-l1f(dM%cYJ0$h&(C!G$bp!d,
+I`ik&drEF%a5Rlf((!RYQ@[H``'fe[5Ilp#i'I3p'KkRG$V*NDfTRJlk((3Y61a[
+d25bMQpVCS1pK&m28cJCp$cX@TRBLk([`"drYBY$hS%e-lAD3!0A[8lXLj*k,%Va
+h0[J+2NF#f!MK#"8,6aeCJi-iEaV,1TeIK"eNEP8K#h$GqmaBU1[HCmELA2Fq-aC
+91SfCjE$ZJ3`XIR@2H'#CUlc2aLc`G&XU@0BTll-a5e6PI6CQ'DUmcmBX)CEhfCJ
+PZZjpC[44hQGMhQ-Mll-alk@4ppQBKF$b2K[cIKKjRiejIiZmcmDmI8AHCf2HK5,
+[Xc([,C(hf5JZjT6hf5JZYCAhf5JZ+CAhf5JZ(49MRf)[jAdfLXZ8jAdfLJZ6jAd
+fLXYrjAdf+IC5hQH6BLrNI6BT,P59*9iT,JD9r4-T1Rj%FdpaNE'mcbE&jFEb2TX
+8Ppl+qfc-BQTjadH+#ilPI6EQE@Vb2TX8&kc+qfa5l+@mcbE&aEEb2TX8&4ajRdf
++LjrPI6BT,MU@ppQNL4(b2TXdje$HCj0QIq9p0ZRkQdU)X5K9a2-dPbI,qfc5A0i
+Xll0*FqQX[-mQ6Bb4ppQNZ5aB92mdHbC,6p0FZL[[XdPcXE@mcbE0KG6b1SN-F8h
+HCj2Kh-VlE$,XPlc2*X1PVI)qQ`bG9[)qQ`aa3YjRNq'LBAQIMAN(Qkc`cR!"XVc
+2*N2mNrICC,Lm9YjRNq%LBAQI6BD,J'ArAiBi)HqcbI"p4r)qQhELYEc2TTeB+@X
+9fiP0mMkEGQ+"[-qQRA-Pll0TCarPI6EYh(dLll0Tjh*XHCp01aIkb[YXfVRF@Gj
+RdmjHb[YXfSN6mMkEGZ+h[-qQR8Z1jAdflF4XHCq0S4,b2TX1iVLmckD$IC,hfCJ
+hYiP4Yi0pN[ICG,!AmMkE$Z+"[-qQJrjDHCp0"r&-hQI6`BA5mMkE$Li6&Sp'"rX
+Nll2TB*rNI6BGA(iZ'pilb#e%Zmq5fmMlE,,N$')AbE*RmMkE,2&)$+KCcVDmcbE
+,1C(hf@4jP[ICC,NB@pE`C,N!@pjRPL8Hb2[-XX3$m3kE0lV9hp@bji022!qNch%
+k5r5H[h(YMp$0Br4D+NrEp`+Tbb%UA!P8d$chU)Bklf2lAXKh5m5Sm,dEcpq!0H4
+RL8Ali$k0%+L)Bki+jcE4pm!qae`DqAX!QM(h4IiH@#c2f'RGBjlVdp`iQVm(rM1
+e19AIJ`S`YX%dI`mUja&ll[Q"jMhQf3TIl52Uk'2fE8ie,`M45YKAld%aRA,Ak(Y
+38*ZZP+JH&0@Qbb@k"q@Nk9k*lN(aE,TVSRY3CTXE6$haPKG2`QII4S6M*3X#1bX
+4c[P[elHVp[B4Yq,@[%*L'b!BB89[E9R@AXiRYf'!`3(lR$L0!m[#85`apEI"JD,
+!2E1*!eGJ,DkA$3J-$Kc@a!&[QdaJheIIPQk2Gj'Y(kYb4rSbEDhhUD'"+[(0BL8
+F#$DCqp13!%"aAB&qlFkbjXD`p5&H",'P0Par0m1bk"8%bqCjPAEcaa[mA6LJp3(
+$#kG``*bH8bllPIEFf"$H5*(VU44+Bm-*BD6"i%$f,cLJfD1A$!3F$ZMA,#eVjp0
+'YS6*E9B5G64`3$m98Z['DrfDZm$$Uc*bTl5HeRTUdKSL'$i`23&U[h#ZQmp4*',
+h#hpP2(iC[6kErF,jH2#Ia&YjZr1V2CfUZ4U2[XNqY(V9V+@9Pp4eS)llqrH0qTV
+phhYIYHlQ2II2cB'C(Dr$,rGU1V[0`$ab@l2-f5pk(lBCq14Fl&kiV4Ek-fj&lpX
+fJlX5ilBCJ!2hE$0`lQAlTVpPjXqhq,0`J-1d&l82@bfZ6icEDR&AY0A#[VLBEHV
+6AJ3[q)qeBK"SL2Q3!(QipFCmVHEjYEql6raC1)"qb'XVr(0EpAec2[4(RC+i"J5
+bPq*KqmC@IIefGAR6ZAl3qE*Fc9rK&N)Rk`8&mhMU4Ur5Rk&+F#N!il)Gb9I-RK@
+Cd%jh+lXcjF(Tj83TYjJjQJm+qG*%UC+Yl@kAH*@4B%IfUQ%[p(GHZGU[l+c4,-0
+[P#mcX'T9@-[[V'rP@"$kCHH0lPYAqVAKRGR,#`8h#*aF2LcZ6&dajT@'Rkk*0lR
+AKiI-dl`J(`4ZHHL*8FJrjVfF@'rZbTQC'6-Q4XXQ0bE,[[mpQC943N+eG@41Y)l
+d@ZY)(1eFm'4@I9T(-ae"'50hL9[DNAUfZhULda[bY4%hG!EF-0cGDLL4eN%ZV8D
+j1iS6!"PR&[%acShJXC3SBe$+FrdZe&r%aQTb--"aXL"MR'1!-Fk)FE(@HB'`1$G
+"a6Jj"X8i-mE%1$1#a&*L$#ZPl1Si4AKBD&`"$LZjp@%5-#`-5"i,5iRM2FXMB5N
+2)#`ReDBcJX%i-dE"1$-"`3)da"LS-pBAhG)1r!ZbLYJAj%@i&bG*`q-FepH`eL,
+@*BR"D!D*JR&"h1"E%)faVG44JD%J,m'd)$('Xb!VaV)J+m+a1#R'JcJc'Bd)Zm,
+Q&(#VQ&FH$-'VX1PjV)U6kRh*Be5F!ci9%NV6&H&5N!!9Be+3!*AJ86M'-4DG0(Y
+dJT!!&9+,U&4)MU#TR#R0,LHk"KHE8%5U@RB`PB9X`Da#NJ'Z3NU-A[8C%23T*#F
+i9XL1`Db3!"SM@L%eJV9bCS`KjI6DE%8S9qaI!HUUbBh*%Y!VcNSHqFUC%kh,Bf!
+j%5#XC0@R0B,%3QU-LiA8""b,H"%MT--$Nh@Q&qc86*lBlr493krXVGiPM"L8@6F
+@9XHH8Xc1bHl)XPl$Y5kD8b@IFD9PS8%+,5IU1Z1NFTN"1BK,,(!p+Dq3!+4,#a,
++C4A'+UkY!XG5B#969eR)+TGUi@N#U8XAa'"GbNi3SR4"!54+k6(HPl)Mb+mPap"
+CZd(3XjEVS,)m&!AiEq3($+#FEdP!+5mHl9*f00hej,''ZI%[*Ai9!4)HfEaJ[0d
+4[DNPlaV62-QTjF*ckSR0FBMC6LNl*MbPl#+",q9((,k@h'aP8@jDdI9lbFHP*U+
+2bkYS&LkeT+#ja%3UFRP&X5K+5f5C+$F8CU+XDRY,SP%K-j+0JXa!1()C#GpbH8A
+'&DG9QT(RBLkP4[*FFN8-,+C@feI8ZD+djNJ9Y+iS5p5Z1+AFf%6aFRPe(AC&ek4
+qEY2V#VV0(40aEAV$bQ#6krUlcDdTm'&UAFm1ma0&1m`XbGFb!JdP2XSZDr'5A96
+ME9CGHl#j0I8KRpTS8NQEX'N6)SLpB-be%DFhfeXc&S5TNk0B04H%QE'p)*p@Ehl
+GBQ"c'm*9(Gf5r)B'@FHh*,qT$9F3,NQZUjJ0M+YH8*)$bbKAQS@QQPR$Z9*kSQK
+@N!!Z5Di,94@XUbA(1PB6lC)EaZA`1Yk9mQXDE32aUKFd"V1Xe*C"Vj*E9@XVX"H
+V$(ANUe`aVZR9mDpbaB5Z9d("5[kBYYI!`XBG9E@PM)M9-CR3q'Ui@,fKS[09d,'
+52kEe96#bQCrSI8fNV&bb8r1VifAeLUEZed$0aKhM)ea6rmV`@8p[+)!9%!ejjEU
+1Cj84Qpq3!%CXmVJfB[1EiSM0EUJM0VNZMi5j$9)HAP"Lj@&UQAr,,$3PNLLp)L*
+)HL+5f,5'5Q+6kc**2VICUV*3B[-QP4*l`lK8%ZH2YENZPS5j1`Hc*TH%U3@p**r
+AQ)+'BQ+6Qj**(IG+&c4&NcVbP5iBNddUf&I+EJJR$I5Vh9"Qk'Am+`r&Q(K53m"
+bINNqU@"J+EXKS&43X*jGN!"3QMKBZQ*#4+NMBIQ#ZSc5`-,D$FdaV5JTC6LX*YH
+dP!SJ&RKL(41VGdc)+A9NV0ia+DK8m,&k`ELNdN$*jL8e4Pl'bYUm6-SU0F5XA9%
+99LUi@EeJA&UTS1IB"59aTBQKe9Yfb5Ye*+hG-5D`02#dHFR%30FePM+`0[+E+NX
+&AR@#6KYh2ERFNZh**9Cp6bkhE(abQ5ARNdY-V%p4AXQS%bARR6T4@Z6,#ITFYMm
+98Q-$8C!!'KUJA%V*!H85%`Y8R&GY5@5#FMPe&j6,VYUJLVQe0LC'U#K[E-#+9UJ
+ScAQKiTa+KdYZ+*FB`j(Iq8ZC`kE'R#-2pm@[Ub1AkhfKd+IKIhQe@NS'U'0YYRI
+H[R[dDXYF6jNlN!$TE2f1YERH"3N"G@c-c%m'k1[C!rel+Vb[MJfG5aDe$K90)3M
+D61UhDmhKrF2fJXlZpr1i)PmUqAl&kAC,pN@ekTF24c&ea5@AmfcUZ1$CHYFZGQ,
+q2$BGVSj(cNJ+U'0A3ljHakk(j2lr1RB@XVq1#eG9cFc9Fq0j[H(Hi[L[jkBCRhX
+hhRY`j3B$bQcRpr4SPVF%S`lblEaqGM1@q8NGfricViIAkpJe(Y3KLX0iBfdG@Zc
+a"04a`@4R@hfpUPR(*",YVf1hEZ('GI)cGH``aEdiE5@8YJLSA@U#dqGQq[Ec'1j
+Br4b6fHSAa[BhEIF(rlJXU$h('ZkTBdHa0,6[(Le&6I'c(H&B3N!GI%Xa*0rUkbM
+qKA(R&FcLjrpJh'LQYHmJiak[`a[!Z0I0@qMXZfGYE[(qIRJqQ2YB9`mbpkNkpM(
+hU6Vf-IFpGGc$h&YeY*LlHd1e2i#j0rVa)(-IEqapc,e9aclQhLMM!HEHUQ-hFpG
+e6*&hbp`[((PKlVdIM&Zlq1Th('6FBhA`H3)BYeiQGF,VR1C@U1)hlDq-5GHa%aR
+ZC8a6GHaM1R[UZ)ITY1Ui&mNEG6b!j+dkGS1HVX-X%@XKa&)mR@Bb2kp)6%b)VZ-
+j3b[feV&ZD-Aq1UCP*f`BmR9QXjRZjq&[l2XDiQRI'*1iTilYch*&AFGff-bDTUp
+JSVHkba-#qRU)-`4FHMFRhep(#cPhceN`(jG2MYRA[KQ4lh!#BfC&kZ10apm&9@P
+-KDTqS3VefXZYqZJ&U'0P+3J-)%B$b&JG'Z[TDpYHRGbSKPk!IKLec`Y3Ke2l*Z[
+BVrCY#mXPdlXZVZ2&Qf$YbUDA)(ld@pV5dpkdbI`i2HZ#hr6HQRBfhiXVj`1E2SA
+mGkGRREFf2HfGEED1Ch'+a[ZaGmj%CEQSqXbm)V%B)*USBe02cM'YUbIVf0X2Sl*
+i!HE9U#aHJ$Vi,*berEZ[TJip(QhrRBqcr)Sl54P80TY,!2$TkRITf)QIT,G(*%m
+i(eEf[IXCEFTqEXBQ2m0K[!"eV&P4@pk+rfre&9EUVr!X6Rj9,T4m)4IkpRb%A1M
+EmqS2m)SC,R3)2d$J69je[`0REerp%mSeRh#UrqfVU301G@Jq@KD[YU16hcaHNpp
+qTZ0AmRJGqMa,(Up,Uj2XY09A(i(,@h[&$RdH%+pB!d!Hm)U0)E8[`#Z@Am&8[b5
+E2-(F24A-e!Z!R(i&T0VlY4EPH%!d(Br,TTc*cd1JaIL"0Z8FqMa,Qh,fDc(e3V`
+%'hGfIV*aCqIRhpUidl,rYde0U[$rlf0`rSdp![FbVdBG$c+[mBEFalaDGAJRpL2
+XCele3[`#HaCX(4G1cKP&k0F)@P)`FBmIJ"'B1V`5HarmDCXiec5!VA0p&+Xjr&p
+e@446!j[AmHaKdKI[Z'(0YVe1L[&S%fF[hQ8ZHjh8TKZR)[r'e+DEPU8Z1H)d@iI
+RDa0R'DGVQcL,11dhhm6T4@$ZIL#ApL4cja2QVLiiFPN#!(2h5fhL2$6h$fXC0R&
+ZUG`#9@P-KDTqS3VeLA9@II3#e&(Ha&QZSlCaX+L+'GA3#p!2SrCj!HS)0R&1e,&
+Il62Ejpk@DfcL9"HQ[SfihX5TeYe@0HY6epjpifIAT#irR@#L0h(1VL$rUY5eAjq
+I@[G$h"GYRa[[apij+frL,0G4fm4CV+1mLI1KIKL9a3X`VdCPm3,8`9IBa2P3Add
+Gm5E1KqTiH+@cLI2KD-qE1!r@mA#)C"1Rf3F6IACjM1rRfl`d#216@1*"q*6j2jb
+fl2-8qQ!q(+jV1XlUi2rXV"[@r*9ZE65)V*DjJ@2kR406E4Z[5E8YRc[Bjr4h&mf
+acJ"2+eUQcc'T-fibjY9h6*fqd)`iJhfD221PR1k0LYb4RV2K(M-q2Kk&p9RGIr@
+bEI(J2iQhmRER9hXk9A-e(Rf6I@MeUPP,+bqTkd!GprI['r8eqlrh[QVGcA[ZRjX
+$-cYH4dIb#dHSI5N3HU@Ipq@Efj,TQprCiV6-leM8JH0S6fC45k*+rc0Ecm),&fr
+rZ6%RQA)30RAHc0BPf(R6IU`a,f0QhPf9fAVf*i`jrQH%9jejbDkLMXIr#$)[fRE
+RfDMJFDeBXb*eTKqdeGaXc*ZrUQVd,IP-,DM03`G5UY0P5Rih$Y1V0@c!5Yhf'X3
+#0&1[af%JcVb&cS58[I3,M6Z2(83XEHp%fESZcVck+TBAC0k0`jSimq6I)GCZ1i!
+fG9bFq9+D+6TY*[Y'j-iE[S6BY(TQ1mABZA(QJL-4Qe(26&-,PGjm%P2C0Yefl5@
+0ITji-Q+K2hp6imjVIS$BSRTLkSj'2ppr&f+,lCeX@T6HA2)BBXb1l3!#T[6cQQX
+3'l+C+!*bjafh)"D!C2U44Mq[B'a*K"hDY6Bi"p(jj6!JGXJ%kTR@[6`*GAE-,BH
+4Cbr)h)4SpmF4dTRErHe65ciGQ)8l3C8i8h&@C!D1Z3qa8fdUfheNEYjq2Q,JJUe
+Q9Z21mcq'f12VQFG44jDjH384K58JpXlE'M2`[LX3@fjRMETNEYl)rJ5H[4648Hl
+md0X3@f8cIl-a0fqP%RbklGT)ScGhpL"fIMeaN!#EGD5IXlL*k#Pf#N&ZZI-kS'c
+EQf`rhpASjq9%SUIDDXL8hR36"cEEL6)Afm`q6RZJqJj4Qj-lAd5m#A6PSHmfq[R
+aKBKT-l"Q&hT2ePCLqqTb1,)Gfmr&QqB!Up4*j@U!QFPRDPar&"3TjH9kJp#NMq"
+dA9Q[F`(iJ'-AHDC`0FbN60$VJ4"SjJ'UR!1d1r8"K-i3%JPkDlc4H([ZfLB5"CR
+RI4(9I,TC6B$iI0h[DL*4F1G'90*,4[*SS9Gmjp!0GR,6Fbj'6$-SQ8*d,CRF'i'
+GE9I@-dGjMjhFp0R%0&L*qFiJcj!!+A`('FfEkjR([SFA2cYi!L@ANQHic(!'G#@
+pC$S1Td8ad91SqF2&Vi"jZe26%@5H"hNi4pIZcCU1@'AT[V3j(F'GQfj&qipTBRY
+mTpkk&[DQ8!dBda9eZR2DKi!*X#Ich3"eZ(Y0R(N5J%40UfHZ[3bYhaTPCMrj+$,
+Re$1r#*jl`XAaRCRr4qD4&YY"Z8amjqI14LE-c(B!C*`IhrRNcb06hfZr(NEXj(D
+q%M1NAQicB@kciX`Rh)c-HIA-iiRkYm9eI[$6b03F@qk%ejd5hrR)Eb"cJFh%9Mm
+c[[2,$b066k@&kHXZ`H'MmChU8iJYY(FqYh(RYH$MLXKN[Rj1iG,icUGr"TNpp@T
+H#6c-a+L5hB)T9+qbdr'HaR6FfSr-J*RfRdGfB+[C#)44PTRfIkr4cp@()M0JTMh
+N3BI&QG213@E!6)I1Y"`Lqm#Gb!bBD3qCTFcD@8!Q44CJ[Y2*YGiECmi!qe2(eI[
+jkZXiNlDDflq-@-"QRm4TH'HFH42BRl*XpKLS'M)Gf8I"i4@jQ+RQ0EF$9Ha%GID
+FL`5`fRbjecB`UK2)ULclZ`bGl9S9Cji#VUBXqh[5jJC'I36SUZVZ5,8851)`UKH
+9+-X,-m3+QF+2JD)TZp@dRbU!aDMXJjJZ4GCS-d0Hf(NbBSV-c(`$4#["U&AX@V!
+PiX3[@)cU2!SST+a$IiK)*$0p-QGJV@8al%18k9Mf8@5HCEN+H'%a+[Y"SV(e'R$
+RKJC'h3NqVHSfSlEMhY[!U$QS@4%Ac(FeX&d`U[0dSTHZ6UB$eFNKZ'DrDX"b)K$
+1BP6fDq"8LR@Ell&J*DkI@iNh+%+fdkpVB03MhSI-Ff`eGeQ-kP`$VU-@fcZ[Emc
+DQ8"-YF6@q5@,8GRV`"i9')Ep9S1V#dCeRJN'V6M*PK1aGG*L9'F*h%CC&H#%YcH
+QihLS0-UU!#qr[i&4XmNl!K9J!@IBBP6f6XbhXLV!GH"%`U1b[`*l9&B&@!1Q)"M
+9H43QAGAAKUNCd,S%Sl+hI`i*`@S[44b3!#Rmm%05e@`(8-3%Sfkp(TQ"FT!!CLp
+NEVDKYmVZC&c!6JY'c5FV#aD-,!$IGaLe"Ja0fIeqA83%QHNP`&YPpmKNL2mb(DH
+#Mb[V2H`&mML-HJZkV+abf881,KMeQ@mL-r#YGAfJ`46H"!9+fDf('pSE21Vc[d"
+QS*fQbCEXG(3H6FBBZ+DlS*%i(RAq6j%CU+Spl)$YCrC5GKVfE,k&l+I&U1`Q6+5
+bIUQ&TcCie"Y3Xb)EY0A!j'6@MZ-8"SV[!,XN'28"U+,+1JqA!RNF4Qe$Pj@eKhd
+(ka)HGIGhN!!CZ#GlU$l+G,`-+Sd#ca2ddUcABG4dG&QY01Cr!*!$)#!03eFa-5"
+3FQpUC@0dF`#3%[IA!*!$i3'3!!*b!iF!N!-4!*!$KJ!"U18!N!-@!!![H`!!!J$
+rN!3$!,#$ZID`JlX)!*!&!r1h!*!&!APUrr$rq!#3"[bX$C!$0MKVT8aTBR*KFRN
+ZZ5kj!*!3G0B!N"![#`!!3hN!!#m,rj!%68e38N0A588"!+YZchk`'-Mj!!""!J!
+!)e`!!!ZT!!!(jCKeMGB!N!D&K3l!VCPCfU#Adq`k(mr0SZAPZP"1[iZfF[HTVFc
+M0$Q98cFG*-pc%hTikXNmfDe[I,AMjaA,h#c+Ml$ERN8jZAhQGA3IXb+FE!Ql1LP
+2XXNqNr"1`[B4(YYNRfQAq8Qf%8iii4hKQE&Y%Nliff3&[VUqHZXm0l0EQDeXRad
+l`Vrc#+IEc&mNr!$)"ZJ%!Y"[3J!B!(ciL`#cmCqKa'*6XUlr#6l"%iYCXqk`al%
+Tr*ilXh,*jI@qMV!FAQDreS3[A#jhSl0eIMA$',(B(r%GCf2`jK8!4b`%U$*9dS2
+$!6j*F3ia!Sb1a5SY$cr$X3c%XZkkJ'-fa+#pPQ1()'CGG4r(LLP'f`-F'dA[6LM
+M@!(&qfSAamBJaR)QF'`XaEMQ&a`EKhm6@2!f!X`$)NhQY[M,XB!*!f8JdS1h[mG
+-(41b'#%!B"%rGD4)TQaASj%p8HE3KBZ2&q2H`RTBYZN6fm-8c%Bf$()3BQ`T+J@
+CYI0QP*EZ*,AKSV1HR$Z2BT8rQZd0KAh"b#+ljfdG@IPMk`qr[U5jqZ4QPlY*-[,
++b1HMC'KK*-M!5TcaIc0U0)j,j'K528Z8L!-$1**DC--9F)@m+"63Sd-ac)+2343
+q#eqbZEYN6C(+T&28S2+L)Q-Dj@95RGS9e06Jcc6**AZ3!*5UkFN'6mSD131a$aM
+!b+1-RIkDll+#5X6EmBlVL-2Mkh-IZ@lBGm8[q#kZK3M&G@&PUH,jVqZfAIDpqRX
+&!Dk,Db(QF0drDJbVaN9rehDXr)Pefcjkb,$VaVlJZU3@BJlIVAM0GhQ'ePV%ke2
+rj6j@rQ6IjL-['2EGa&fq5fJKjR$ImYIFCc-8MhK#rmjmV2bTGG[UcaPfhrKGlM1
+d%+Ki,qTpahY2L`HmCfJK32&HEPc[L-rrP[PBq60p0lN1(IEHK%([k9S)85VYCCT
+IlIcr5MYf@GA8kD+!5MZKK3$&GpPB@(AkSmUlAG3+k,ZZV&F3d%90DL&#m9ddk&[
+UplhE4f89$20GK5$!GdNY4"bq+`8,cB3NAc%k"%h3Vh3Z[46Jq"Kpr!P0-'4EA'T
+3pUJTLPDB!L2B*Y2+a(f(#HP#ibS!-m'frG&"&q-ref#3!(J6J8`qB('Q,r4fFK#
+QR&2QZk@kUJ99p-ph+C'`HSB5AU**GI,TXY3dU9%kLTAfAm&+&meTDC!!'QZlB,,
+84,Hj*40al15NDh&+k-F&%qZJ8fTT3$U&D-FfNpP8R6'Hf&Rk!3)6%4K(ScL83J$
+1jSPQqbhc-"aX#G#)$GX+,0[4U359X-rMZ09,#96@PNKi2bcKlDh04@aVLaRrL6F
+!kbG"hZ1##SG4@E&+Rq8Cd+qhN!$dLfZSiqYUmEkD,35@k3M)(NIl3PEfK4#-(Vf
+3!!mIBD*MCEdp-'V93c"qkS0GXFIQi2Z9-,V!#N8rH!SHDUp%["p'AGR0bYC2jVc
++HLp1m#lVVHI[-3i8MD5D)K[a'iK2l,C2pm,$V)dldR69R8Cmc+'ShqEIqM(1rAV
+mhS*D-*QK+(FeXL"1"9b2S[aZeJ8MEPi1Rb,m&Rb*SIR-8ZbQMEq%"fjGE@K!4V$
+"eXG@`pC(!EBq83Zr(iYCBM+1RI(hI9K!hF#k`66'JH923j28&!f&e($%8D[)AL@
+X15"hA3AVRN"m'0[8A-V12`)p8V13!&eidKc%h@a6'fPRaEm*mAE)[E5(G8X5BRI
+L2k6M8apK&jli)1%82hEEQXq`YAqi"2&%JF)fY4b0H!m(4khGM2KXa2XS[Skh68D
+mAqG6I)N4r`ELJhH+4r%IdZ1[Z4raj4cRmFqrciLI`(8p@l#B36iKp()hX&%1KdX
+0+c8q[k**apJVl181dBS(-"GD(4ie%*)M$Q&,,X3jbK["8U!R`jQ9*dVe[Z!5*Eb
+Mc-Jd)VMGcMp(5*pa9@jhr3I96M[qUd)K[aL!KmY92cFG*`p(AUAj!DS352UABVM
+Fp6@#!"kY6QSp#3"dE@aUh%R`G4l8Z-U`Gh4j0+d8f,CZX08PadQY'cKQQb[lrDS
+DP'S9Il`9`Llq2)GBdqdmXa-2dliZQXh9+MRrccPYfU!lG"jQZfID0#%!M`blCkm
+JVr,Bf`&k9GG3LXJV2*5PS5hIA+RlpDTlH19#H1&G5',CPG#SR-REEYB6U2X"E-Z
+h#["p2pYbE6ZlF(4&dUq*TZ"EHK3NH!`eb(+4Ke[@2,*rYl#kVL&C%`A`m+586HY
++T5[aX"#22CRS)!q6IDL1XL!2XQcUk$bd[ARDJM*8D3'HTq02Gq6TNjd0qqZB!JT
+5-e6*H&920-dMIDMq#221Z!L!KpEPldM(bA0Ale-9H85LJJ!HG-afG-PlZVV*LqQ
+D2Ad%)"8j5[p5M$FUmN%H`S#+['&Z(I@BKr4`Z9[6HSJq+[YGUVj4f3raH+@bhmr
+M3'@rApF$PAfDall+RSj4fE0c#pY&!*Ap6Mf'+rY"B9q[l0-m$P6f1fQm@GN2m4!
+(92CQZkCd[Zplm8G&MVZ(ASVa4N@qL`FG38"&hZS,PTG*5bYR[Pf4CrqcSN+LHc2
+(`BTUL-FVPG"q23j83QNH"c2p6Kj[C[SK(KRfSDaS44kB'2DAlQBl6RLQ-YP!af+
+h3iL(fV%iaD1KBh'D4lEV2f-H#G&G6RePer[RjBaS4E@i8rIa`!cN6p@D)iQ(ApB
+dbBNc36J9pEckFFGMVD!X%J,SqN(0NDc&KfVkJcc5Q6AYXf4'M+4XpVH6`dG%hmY
+"HEbl+3HrJefV`5lALbICjEUh*p(G&!,`F2Se$6!$BAiCj*'&Y3)AINqIRRFPK3"
+km'kL%)"([*ZBiR'`QjKTliS%r&HlG4lREF(Ajl%l%#mkVC6eE!V"*,BKY2RUPDc
+[1%Sfa3$j3AbrNQh`hXCkISAaiM`@SiYfkr'bci`ZMLqdakmCf-**mk!CD+"4mIG
+pclXi3J#rmLk1%)!((BX3)*r4-3X"r%&ba%Il6DIrGFKrH+A"FiDJ(ej-c2&@K5)
+31@3%mBX(%UF)-VNIk%mhRSKi-X+jB[dP4r-J5`q4H(mM[XM)DIEiTf1MFPmcD2!
+FEaaaJ*c2FJQ`ZpRGTPX)ZJBE4f0f6E98iQ5a,QZqUl80&G@RkhG21!`F'be8*C2
+Sbd(BAFmZD)hR'`(3D@[6)R)iY4p@J($)aS@dZB1RaHIH8Uj-*X[[Jf@6%%4a9X4
+A$SYTcVFTbkGA&P-YSXmX-Zcqd*m@Rjb-1`c%"mBGU),qY#)Cl(a"N!$Tq69"Hil
+*KV'`bf9m`TG6@1*XQ&GG)TA-UfUZ`UYl[V1j4,4L!CZq!54qRP[1ETVLKU-Sfah
+'ESH-d!,H%Cm8#Z-3`J5`ec490f2%bjUD'ir!qpHfmc$hmqBqVcUFa8"EN`S*#ed
+#4q0e0Q'0,9L[!r#*fEDI!ifTi'JCCQ-[I"aR)[K!3+J+F&r!b&l#ZXcJ3ia[A6P
+V)bc$e5Y6HHbeX!Dai`JEQ3Qi$@Ad0B5&li(,%IX4BE11K'mJpKZ1M3)XkXCQ%hE
+5lq#(!-ImP,!9Tm,YL0e0@&5&H`!U@JNEf`%2)RBDB611JDF41j[crLl$6639&a'
+fH$P$I@HF5YLCKc2d`ic2%AEfPfP,bSb[%2DKm@`@`,(R%MDpL&8MKLj$99D`"BK
+Y*'cQVjQ-E3`qaA$FeaRU2@XYB92'-*bNFr!faV((Xe@)RF@0YTN@R-hQ-6jb$Z#
+Z+XEhjKqkNYk0j%[UmpeKGE(LL8MSAmfR"Qeah1A62(Pm3LJaGj*$-f41eDZFS!4
+(*1I*q$-MV,%,FhVBT`6NS+ADkiZSBA10'ScN'r15F6*a[&81"hh"6Xh'1kN'MEb
+i#Y9,)f&CbhG'YBJDN!"19*DGSBDpQUh+ie&`)-BY4lSd5l-FlP3LYVP4RppV"-a
+Hi-3P5NSN'XUK5A4$X`,#j[Ndl!dVJ3l8B%4b6*h(LE2A"kcL5KP`A#L,XmD&`A*
+Sk8bF''(2%NYZT-NL#-IpH$b$S%eII)$k"4@r$E[e#Dlr!`!!$3$VX9lc'QeDjQh
+fDGmCjE5hD#FrQqQeCJ2#k8$#2(j'f%@1%caI6rTiTQm%Rr6)bXL)(4R`)jb-'6P
+1MK01KS`FLa`R$"mCm#182#I(Rl!MM($##6pbP$$b,)m`bI(c#2H58-)*Hm+12#1
+-X#2(J!!DZ'D%%NkHPRLf!P$m@FF*NMJ!%`qm!JdkMm9908N)#H([1N)fh54Nmf,
+-B[Ml"2lqL+qA5*M8emBd1DkQ-NT5N40eRE+8N!!emMSK(hr3mJPj!dM1#`12N!$
+kK6e5['iJRL5K#kICEaIChpA6F$CH6BHFPMA&`R6HF[Yla5`Hp&MGSfTbAEZ5P,2
+EkL)34Y,VYJ!mXip8QBcX&`UEQY36X[i,U"`LBH0mD2JQeCHqUQRP(2f)UK2bQk*
+fN3@%e$D3!(EmS`kK(Q'8)%l2rJmKPQ@&aNamq'mUpR[CrVCB@1#8U-PRL4j2GUY
+5SPG0biha4a6`9JN@-&aV-UR'jeQm`PNXYPK%KUAd2!QbDBj&b'*4Bl&SkphRN5#
+YA!ZE463pjV1Sj9VBLVC(8JQ2aZk+,qLbm9KJJ`BXZY++lV&iKV0BlV$3C@dd8f+
+bTD*&0#HdD1!XPPSXHP9G'6c-H@bSl+kBP&DmhI9La4Ilj+`kUX9,2RfYiSYq06l
+LqH+&#SX"*HA[LfFV,0j0+cQ2KA-GcE23PD6(iRmc,($j&&P8DI+3!*c,q+[B4#k
+aU)B@VGR$DFrQ&'k1KEh664E"SB-A&9VXPE,qbX&cF1HdS&I+AL8YDI2V$fm[ei*
+k0$)LP69elQ&Ad3JSq*X,Kh$!)T9Sl43XD$SJ@(4e#aC29PMd("!XRJVFC5BArMC
+'Q['B"Ee5+)YS,U20dpM$@5`#LcC*piA!fmaC9)&&q6$'@bEF&4f6dri&5%LcF&F
+d*mG(KDK14Z6kSRbNildU2%U2p&l*2lc@#(Geb)%V#&NS&1f8XX-"$5H"FYh9U@4
+e94`B6V,QqU)VRC!!FhdI(CURdF*Cd&[(M"h%'EL5XeK)@I59c8Aq,hCA9epPBD`
+0&1dVRmEN1H(dEL8GR&dXpA5GhJfR#iZ50`-YN!!Q"PSm,9Md5)SI!Z)K9IAF9Bk
+'m&E2XCLqX1NqciUYdmDeS$XpF"CpEiQY%j1dE(#qe3JYBL0$C5hU1!Zkdf0U9XR
+ekpipqRc!3T1cXMEQLET4l)ZB9JjN#'d@Z#aSQJJaPI53!1r8YrQqS"kP`CYR#Vb
+)8,4b&m"!`ZR[5B%5N!"qKS@6V$J88fJk$0+L3f0#j94f2@4K1cfVDqQiP*AM+@q
+6ETeMBEYV@CZ#'JJp4b0UKZreE9b,DRUNq`6-YjfcU'R[ceM&$jp'SkI&D"*,A3m
+1p4fFaA,D4QQ6Xb1kQZNC+MRHDDBm9*5b-#XY[KK0rhM8r+b'd`Ie)(Zfd&fRVf"
+D4(1k*Me@C+H$Dk@f)LNfMRep+A4d)2Vq!*d!dd39b6#`,M28bpLc$*9RZ2R`cYm
+Y9$U"`Jb9*jc!QQ5SNdJSLkKZSTPI-2UYMBS*%XNLUTYJ'RrqX-I@&4-N5TD(r!6
++1(laTSf+#4)N%e8N6R$1GHDKkdL-6&54-)(K,FEe&M)-aT9R(Q$SS'+#HjLjJGr
+2B(LEFEf0Dj&ajGHPFHlF1cBU*VM)'#Uri)al8adf+LDi`*Mcq-8'EjpL,Mq&I*@
+KmMc@q2,XpcCA6*!!iM2RmG3IcVR#2(3&,3rcZK5Y%12Bq(i(GA`r@KdcU)m-N3m
+hMcNlVhN-R5S69A5``2!JihS3ZCqTUmJ*iEFmFeiH594KSj55+qcL+ED9Tp#'-e&
+&Hmii2KPb0XTN#-fUSK[F*KBmN!"JENJJRf+kmMc,Q1KU#"daZ@+#M*NTa$0Tk,,
+%4X8%UDH*+P*5E*pa#j91N!"bX[h+8e%ijbmE&41deBTZF0YYaVPIepS+BB,f51'
+b+E90M&pqEV94-8(6UFM9E8BC&cipDD0LJYkBL5TkCXC%kSEM[030j'CX+r1F$Aj
+EbTbh&!NAmbY2a)aMhfb`86&"%l+SUpZFa%DBB,YK!Zd1Y[0i'`3-9c'ZUj!!3KI
+fDbQe"YC'KVS4q9p"ee*H#+ae$(8GfS1QVU*YL,drk+#1$k)99h5$fk,$9Y@F2G5
+X)89QEZ#T-h4Cca4DMcDJb9@d"k(,!DE3!I3CL`Ujr8GJ(@+SKmM@&M-G%4NDX0B
+`e$9N@i[*9@4Q*mr@G&LSG%+f@kJL)jY&EE4345BfLlV$iHTPB,1S,eQS)[1D4@f
+b&I)cVPR8R4DU5+0Q8AICZm&26Sd6AqQfAc&"ciPG0V`ACC`iFYj"2A)Hl@lE$9i
+E2"rHIFICHE[[S)GGh&jZR4(l8@@E8N9,HHCLHh6T'5H1jKf&MZE4Q@,lPAHXN!#
+jh(2ZSB[hd*-YAJ"ZVpDiIqN2'a86G1J+f8DTFiIlmbkl41qL'mC3HCF-@0FBkM8
+dB4JUEmiB2ehrcPB)%c3mf(A)H`E)icTY9%c316"448F"ZYaR#Ye(&j!!h9km1`K
+GcM#&cU#&a9"jD`YA8"1lKjV3TLpQ0Qll(TG*MYdS1I45f8h*Hkcjm#lLk)UD3D5
+`+ARA![[a+YZ89p(3+H3ST8D2-IAC'cBU*QMa&K,L8N-@ZS5C3Q(56Lqfe1IrCZ%
+@+Tf%kf-*c0(+VQf)G@Ia[d#B[m%UApN*ljq1Y5HcdlLdl4q1pFY$$ak`(q%h)8*
+r3j[3r`%!!!d0$cBiDk96D@e`E'98Bf`ZZ3#3%!E$!*!3,hX!!&&h!!![#rq3"%e
+08&*$9dP&!3#VEXprX!1PB!!!-k-!!!I`!!!+Y3!!!YN"qhUm!*!'L-m0`+hAQEh
+-NjQYl19'`fq@C02M0&[CZQQhfDClhB`FmeUCPmQTR%US9alKCi5H'Cl6NpfDcr&
+Aj@qfbDCF3VH%pHPHb@h@a3CZBj&pNLhKX51FFX)PYpRAJ"&+'1'a66E,cCj`XMh
+###HFF,,2kpKQ(D'FENBifICNNld#Ar8eF,000VZYlmPAYXq,59MN0M[#pT-Y18k
+HK5FEH$f"!23kH`!'!*CQJ*RiVl9&)S9Thpq26c!L%AhD#qBB9XLrXqH8,R[-kHd
+)qN5AafIHUF%h$VF8FLjbI8,*G!Vp5r41U,)Sb+a[PY)RCVSRJYrMS`R'45+PZQ0
+riTJ@XE6$AqDB!6&SVZ,BH-6dDelPf%6+dA58BcRdEQ%*aib8EeXlabBJaM,c16D
+*FMcp%XIbm&m$1[c+J"5UK'K-ifAapp#""K0T%3RMecpc$SF'@@5S!,#)468TNZS
+f"cT$&l+8d8G+p#2kAFr#,&hcqC0jc+#2)U-k'iBb@8$(X*2%i%L%84#8Vha5E0`
+)-#p#2rk%0%cAf30qYbF`c&82KC!!`ISdAI([SH"XU&d"#d%UViY9hU#+3+fTP-4
+YLaa#GIRLF[V2YSXK+A#h+#f6K@VhFVIJR&SRh-`X[BmcbjePpE9#A98l6"1Fp$@
+rB-TFB,IZa1DqccLP'YU%qPUNNiY&Z%T6`3jUJl!+Y$GX`$H6m$q21LM92F!AHAF
+imD8[a(iNB)C8Z!-BXmkHaZTbYc,TU`13!2I,PhLra0*QdN0'',pT0daqjR[YNEI
+,Q,3HHIeL,BcIfS2jeL*Z!92RGLCYr"E[!G*$TRKRN!$@lk2hP!GbIdfUT#0H4R`
+LchqP"ika*Uk'jXNASrQaIf$rf[Zk$r1d4r1(Ud#6!VQ[l8!@a#R-pFMpeAE@$KR
+eqf!0i6rZBP+Xh8DHqml,V1JR[+YL[Yh8-CRjf#[-XVq4@CiVCM0cd#P0H6LUP`$
+Ta@@X(eLkY8hdLj,ABch8LNqeERQCJ0q6ihVfZdbX[ci&rq0[!"kG#PQr8kRS-K'
+-0BS01DlI*KIT&p03`4pjLrAhk0N5B+R@$VI(fV#DP@`1`VKa5q*pS+3R$$PV"Z$
+'SMGi(bMCh!AMM(S`rHL2-0$3L(J[j'cYCL@26Z1m5RTiI8@a'[iHmi"T,$R(G-4
+h%jr6I8$*2pJ(5MBI8I,h'(NI-)eCLbb)Nj(VBFVZTMl`dp9`2q%(mH@*2J"($f(
+Ai2QS%!c3rrCDr#q'rYm#[$QT&bhTNZMl,C!!$VYC0fJQ@1eZ6ke6F(B'J`%TC+d
+5hDfL*&YKc$GQXqjmiX0BRm[#(VJ*Dk4b#9YhDaRL$YEA40T4hp%JhJaM0SCCYb!
+JpL,q"a@mk#ffEY(MK&2qb22hV@F2rQB$iR&RaIVULa%2Fc$R`Ef)cd9m#q9Am+C
+TL2FUI#CZL1EI6Ac`Qr*4rJ%Prhe(%&r0FClrJ9HMqH1iSQFpF$l"jP+UJ8P$09$
+MEC(FNPH8V@SU0C!!0e3$L-CDJ9T+$D![e&XpJBkJ1f49Er'&hF"bV&Cl3")V[6j
+4&MjPRQfH&EF%+LPp!%H"ci,1U$6$1D@h#$9Hrc+4bZTNT%Bc1"bf[f9)4Pkj`e(
+cXH[&F5Z8"i-qG3!HGR[0r'5H,,4'`U)1FJJNrCNFGNG0T8S!M`EE!R8!AHZFG@F
+*AZ(KUQKdDFdYl4jCYJ$lI6FBUJFRS[SR1'DBlrEj!J'r8#AkBQ0"p[!Q$M(RchK
+A)aiDXfH%Vm(H)0KQfUC22eFG#Sm8XfIkG&8!(PUcCd53!!piM%a$2p!e1%cN-Jp
+a4I$!GlZ8HRhb&HlH#-mpM#4@EZ@*D'kXAdK6-'!(GKMaI5mlX,1CV4XhHl"HP4@
+!$r8`aRNNKX9MN!#(`belh,lc`LUk"Yfb@J!2cl#b59h*YK%2(I'id)P'H@M-#4q
+P3ajeiUU4(!S2HD42ke#'FVQ$pqRBdcrhk8CEl88IBk3NP3NRdaV`G#Cj*)2mKb4
+,#G0`LBIFlQY*jXPb9,bV+[))GDS%m+")-@19I+5VJfSakGQ6S3,Lb&(k-cQZ1[*
+c2&3$((RYr'VD08MSBAFd*293qh$flkKkeGNRH&afpKGjA(,f&h@pj1b62#ilHrD
+Ph'Be!'Gr9Spr1rYc`PjapNNHPjcp@4VAR(f#4p,CDj1f2UkV,,CGVh[e$dH1kl0
+RFPaej1r`S&!*F130A[qX%Q&&kCcr1I,dIcNU*$V518BG9B,(C5Gd8Bp,6LM*Bl6
+6Rq9aVG-RH'M0LDkS4alB'#jDpa5ccc[FcNj-,-jA#2%)Y#`GjP(EXM6*)phqiCT
+(A(5l6GNk[al[G83pUX8Vp9dHf)&m`ejc,2(`Z@9CX1&H&'i%$DNIUhMd#Z+GUJ#
+kIZ`j"Vei`Y12mNKfeQ5G$AE%d(#C[4qCI&hkSak8aDHEE[m2F'TeEXVeeaLFF[d
+m(*pZUJ,`X2PN'E!$BAmjab-0[3)ArX+FRNmP93(di00%93!HX@RL-)r4D@+UZ6h
+8iA[+SI#ip`#q[THpJ,MT,JX,p`@KL'dV+(fULfhj($@ELAKE`ir[ZpLfr$dXr"V
+QLr&BLP9dASrhkL`kaI%',p3V6A'521JH!0$CK1YeckFiUJ$ebUFiUJ!m+(5U!2f
+-)N89S$j)MYMY$-hbIpcEb+acVa5U!qeq1H$rMm0!KS`q0-ckAiHL)K*8#1S[04!
+2%k6bHU"rqZ+0L$FMh+e@AR)d#p)31Ci$RS8dp1,+R5!"$`8*K6KL[[N+IFUVl29
+NlQJmIFrP@Xc$L0Gj'1V`B-mA#(XD"dF6q&D,pXMTT+9iE8'40G[Hd)55+#[9jcF
+FMSF"Y,`SP-)!GPMClalU0bT!dG3NKr$SP,U$"&6'ZA6&KPIlUEI8+`HEj4l3pDQ
+#+-j-r'U@1NhXSLkI[,T&AN6a0JbG$Ih6!Ca'Z[@JHP#iaeh3f5YIG#0,`lrH$id
+"Fq'8+rT6IBRF!P[YJSS#S@""ZDXF2af,E+i#YC85-2#T36a1h4GNU`H#-mKP6fC
+pS!NZjK2a[+#%5`Mjm%QRUqiQc,MT"*f8AMl8jfjM@6IF5%9'Q2dJ&12RA-)qZ`9
+p1J$IP(@*31XTZ&+'bf4@`,YMM*mZ$1d([0E#EL0Xc'1!aq3BAbeCkS6PL$e#@1S
+m`'l)MK&feal!LbPDRX2iGIJDBQX)#ab&Eb1fKE#UJl!GTa2l#2-e`$0iTBPICCP
+q#2BLaR1BASG$!!9dD4#Nfq&Pa2JQ@r8Gm#CLI%YibJ$m!6%AB@0h-G5kN!$I+Ta
+Db[!UBL(A,(mZ`bXYK9b26rq3!1(L3K(I5PPi$rX-BRb-fANr`cG&I!4B8mHFU!4
+ILTQhLpd18%b,AC!!pJ4V!jL44CLY&QrK`3cPp0CHZX`hNqHiSBX`pJCKf3iTX&6
+dK!5X9GNEm"YLZ0dVHl,i0P"mab56pX9XJ9CaSHM2'0`GimqLDE1M'j!!XC3a[-%
+YqEhq0PPAdHS0"D58bS!rC1"cdQMLV"M[LK8Kb5eRfcVP8+"$Z%9FHAG!DT80j4k
+2L1XZ$RHSAGDjh&+E'$,-lr6k@U-*daIEm%55'1S-CY+HH93P)f%,[$*1IX@1&Y3
+MBh!*RHH*X9I@Tf+U4H'iD,C+1bE,T*-b-@+%R53fH'mQM5"FjZ2jSJ30bPN$e-m
+[qJ`iLipcr6m!#J!plGD6HZb-8-+HV13CH6alFSbXl!R&Xb1-8%)**60kC'9+EL9
+XPATNY50--Q2V5I'%VE,$8ra&9LpfK"%DBB3H18CSj"JC8h+-c0L6!C-F*EFQqC@
+`)d0fC-D1(#1h4ZD-M#Jj4LKj4SiG'6"bM"`ME!9Zd"&+D**RbXM+E'@2ChEN'8%
+1!b$i!`lV5J$0YNf%%!II)`L&EX2h2Xbbm1f$lcdNS,1)4h%aVjQ5@YC0m`-`f1(
+C[q$I3$a2H3Fa,f&2kp)*+DFlGUfUk3jBpVAJaq05"m+,+KHPY&'U&UZ'lV6'lR!
+29Pq-,5C[[@*RdrN[MfZ@%6VpNM(rm*Ef!qqjad-Ifp5Cmr,qG)1,FK`rq$DfN4i
+lcF*!bR*02fJCh$qIjF9R6mQ@d510`Fid#q'*DlVPIX&pT4jPe,4pAG&RrP'28@T
+r`VEFUQefEEHSabNeT1K@E5FJ5J@5%%B4P#40iM[`C#+kQTRA(9I@ZJlXp,2rMN@
+8@@4+9hk+L)'&8Y4fipMEXaLJ&Z195XSbHL+i3BQ&m"SFr0DM&K&Sb+'4dDZbDC4
+ql)A(T9PX@4bJ@AM0)eHl&RXfXr!EQqU)S*!!8AmR3Gm*faENhMieP5P-b51M&f5
+SfZm@(VGMFAKm8NdPLr&KimcSp-R%MNkSCa&6LQiCX%#AI*PYMh$(JU-@JiUDPR)
+ebc9QG,bUhf+0H&cFQV[l9&prr*kE9l,T**l!%T)e$"UK)FcHT93m33*e$EDZVKS
+*jJS6k#655N'(0IKKMC[26dcPm36DJe#$YPPTT9Dj18c&%fK43JeDGf9TITP4BB*
+#00HJ"qUUZ-$0d9c&"45Qe'$[kqY2+S`+%hJY%'V`ZPKjG1S35`JQm&+K@rlVCG2
+Jcke4+TkJ#%dSk*6kQiFePK#Hc-E@S01Jqi9`0ZfiT'4Z[VX%K6i*ph,CT1PX2"A
+1ijqXUPpZYre,m+lRirJ1EZrr!!d!#8*eD@aN)&4ME'98Bf`ZZ3#3%#8F!*!33hN
+!!)3!N!-[#rq3"%&38%aKF'ad)3#[M5YCVkGYX!!!BLm!N!Bb'3#3"0ZT!*!)9Z`
+1`)qRR'Ei#i"qD&MCjqARf6IbXh0NqINHGj!!Smj@jRGHCckRJ`C0[0lY`!BfY*R
+A'h,-CQPR#,#hJBeYCZm"(""!VPpfCCqRQh8,Ej!!4@BJHC!!c##CE!,a"-#"66`
+m%424JFZ)*Z2PKA2QAIc4R"j,DH"JH$Yl42f1T%L2!iN(NpGMrL&8Zhp98A&qG(4
+HX5"[EUbmFY53!0'Yi8TqIikTqDj[0,LEmdcT#S`(`K((fGKLYlKYM--X$mjR'ML
+D-RXG1Sqb1VJmdIQ`1b02[b1SrU1YU8FL*qcYVArH3er1kE'FKbIL$Xe[0QGqc0A
+8BNaLZY#@S@RIRdYP[cQKPEBPb1#$Z3[HlDdr@NST5bCEDfQ(*@e(9!dBA4SYVbU
+*9KB@983VmXU,bLUMXE+biU+m@'94D8RRk0c5UZM-USV+k05LFPK&*4@9XH,LD$r
+N+"J9jXXLNPNMUdSU!++mY'TDB63@V5JS,bUSL*C1MHBAaBT,Tb'f0&T3NKqY+S[
+1,UUd+DD%l9P@(#Z*6LdYYhfD&Bf1,L`SL4E-+FLVUN6kbX+#-%'@8L1bqQG&ak-
+@HE'5NY,+RfSfYEadCTM2e55DR9p8#95E5JPd0RpB5jZpD&25388Pq3APJ!RmdG)
+bQkiL'LX[k+@Lbk*M#f198E4*1%pk48F9&K3A9h51$LZD8Kjc95k2pLqY,,5jqTA
+R&4C9&Z499L&j0,GdGN&jlS$1dGekc+M*-US3f2*Ya+K+e#D[1KEIL0,+JQLAk1b
+#D(jTe*BkVkUm[+#NXRKZ['8'$"Uq@ippE'P4KBV5**S5C!MVE6ZR0!(HiKf%!J,
+LL0+5,R$9S"b3!-$@fI8"%XdU++p!r@h[SLHMD,&B!NZd`N'0T`M4frN`Zl4NKmV
+SY),+X#9$I$@IDkKS98Pa389&Q$#[X,5d!VdD`SNhCU`BD!TMX`TXm9bPE8PXU8Y
+3Z+NS6B9Y24Z1cV")-AQSBEJ@%+@66jQ`)mR4CmFq8@1m(H)4GMC'kC)q[BQ[@!I
+IahKja(jQI9G[&RAeZ[9HHXePJpUhkM,B4R6VIIQ&eK[0-ZY[@$iYfY@,pXiV+kR
+XpkRCd'E`dQ[D(0ZqeG#q8p1'AQXf6*0CR1Qecc*IM6KJ40@)rBLk4XB[kYTl4-l
+S)8!lrr*@(5C()e26bV`qG-@M"hES'VRLe1MSD0T6Pe2MeRfTFGcA(,lQBaCeV4q
+G[15![HD2cZP3BMC8)aTaTaNpP+CeXXKLCF@9AAYAj*99PV@q[*0&0kdZiL*GHpZ
+DPY(PRDliDP`1-PBQ-##ZZFeUi`H0c"i8GX6m)30'Y!dpCpSikkM9,cGh@"J#Yif
+3!2P%+GJmjN5*&Q355aU*T&"+LP"D'P0QICSIE80pqrDMk,Vjmc12SljT4e-dC3&
+&T5pPFT3b*C-b8p)S-bf&STP#ID0-mr[+%63rj8LQY)(!-6L&dXDP88Tq*RNVJ*2
+YTJ2F&Vm(ZpCbSRPVX-kX)cEVb6-EU*E4P)(PTT8amrXBXhbH-@Z`l+c$Zal["V`
+D-3Da'MNf)0Ik@SMhN!#(N3rfI2L"`H,BJ(FpeAT[(AN2!#F$Vm8I(b,i-RlFYYE
+C!9,pC@a1N!#"1Y'Q"1Y@[P'$))-L+fX5V+196m#C5'$$N5qC)"kH5"#'Kr%ZJ3h
+Iq&Sb34MqQJ0J%aL$m0A,N`MdkJd)Md35#6DZA)A`jFN%'eCQ2)&`LQad#6*Sq8U
+%NdXB@8AV)[L)(%,8%3PXH"L2F+5diF[$H&YQQ`$K6fb)KiG93IM+H(KB-S5[6)6
+6aR8fI(Nbr,80@m*AVkS*Ya@X#EF9I'0$G6KP,&qe,Q0P-YbfK%hbB`0AKbHk,[R
+ejIRTIHY%@fIf6eZEX[M)Nr[eE4eYNcQ`mE(Y-YY(@r5Pq6`rBhQV0Ah@c9Z2ZD1
+0Q@Ikk&BE@Uh[Xkl2QKE,`d&Lh`b(bD#RV$H5%B*FYhb9lFZ-5#5F#@EGUR"BE(a
+MBcJN0QDXYUA,X'f'(JhlliPeb*@"&N4US(TLJdfpF9ASTJfV3MH'8,+Qm9UDq(*
+XPrIi9Uc8Ie,Ch"p$#p5YRZKB,P)TYGjam2MMeT!!KlA$[N6eZB3fb#hH&D'pfV[
+#TGZ[cD"B4IkBIU1LhE1kGl0[1U*5l!l#319KU5"5m2'-1%"X5#Q)h)j5&3bC(JE
+9`Ej4+i$4Z"[jPE&bV-h&44@9#Gm`q"69)YiRc*C*DDRB@cfcN@U6(m$dZe&UFG%
+8R"3XfYV%-m05#J84#UJH+@c-bpaaBQl@(EEFU9L0lFB8)4A!c(3!bXVb3MXA0`+
+%KM!me#XpJPdD-"$r"aJ+-(l!h-N-B0E[4QN9KA%Jm#"A##A$38(4U8k%kP"p5VG
+3-#9'f4`*,&Mdc2GSahS"c'Jh5XGG#DH3!($&Yl@0qm0V#r`+U8*FYG!0p50!eB!
+bE+9(&Fh%*FV1S$L`HJ$f(D)E"M"r"'C,93-X,&J$"`cY4BdLe-J#X`Al#9K$!&Z
+2Hd+6!'B),$aIE!)@qUZ"0AE!!R4A8cbf%bS+riLV#A"p5mh-0`&-fe8iGB5J3Nm
+)4e%cKd@K0jY(U$RDa`ml#X&a(1BEZkfQiQe",48-+ADccRaY[Q,c0BD%qFUQD)Q
+h&889M(!NeD8'jNYU(F#`9FdV,-LE89CDK+Z3!"e,cTpVr@idY5BH'QDYEli3mi9
+&&-AEKYSU'#'LKY6BI%lE"c#DGk-)'UkmXUbmG$VZBR&[V[-U(#A$ZMDN4RBcahB
+[e"CSfP&l"81+%0X%jGk"1LJBhT!!H%Nr-jqD6hcc'6A1LKA-ULc&YP"5KBi*ekb
+6U4-q0TqL0ZB6fc3G%M-jPcS+G35)6V5MJL(PBCL2)fdA"3-pXeei+-Sb(b[+5J"
+1-ap49r1K$l0a9XAFLY,LdPLq"CPB*@,S&89G5HbK&B2II%$GI"JTrY5LiJ*&h9b
+CX593p`Ke4rG%HVRlp*M+SZ)+#e,-KlC&FC05e)@i0,kb[4qBpkPf0pUZ+Nb%6$[
+LhFQmTfJRNTa`[Z65cV5,JK&@1B0bD&HKAC&Q0pTG`8LC%)CeT4l8dlaVeLSiC%r
+8)J-cUKIYS@")-@iY'@M%hZBG4Ee*5X+F$@P2fN["i1jf-k+'jQhI[)fk&KH86&1
+dPbY8"SE"@i&jkem$K-dlYX*l92IpQjjjdiEdG0hB$!AZ3hd9$(5IpEFcDkLIH51
+!fDBEC4a899!q&iYRI0Z,"``U,Fpa!8,p82VqjR9&r9ejQP0VmeTJAYZfFSPjhEB
+J0Qp&IDZlEh9J9[qVU',HYEfleVERlRJ(d%!&)kaR0c460Je5--*kGU0HjPADfl`
+5`,6M-9bRA58UiYl4cLZd0m!-0LmV%!E#QR5RhFa,JARThc9jf9Ed&9[43G89I6%
+`,e,$EP3Efh0j!Hl8*D&VC1J5'JM!3m`,LSDiUE%RKXP3fXFmEjj6F-KHQ"*lSN1
+'dA!&)i5&#@'H$Fbc@f%T'ZlDI5rUBjlac$1f*[ZipKJ!a`M+86$#[@)!CCZRa6a
+Y8q48PqfT`$celk)rEa[a19[j&bb%A4`%l'"Q9@"@ECkNjMhEVqhajTSR&DCSFQ0
+k`UaNmi4&JL19Q#IYH4Q4'9KDb6H2dlidNNDChp0S'Q-H-iqD4aK"f-RfaDE`X(R
+)2'JH-#[-r@DjZ5m`$fmE1i&jk&p9$Fb$[be5[RPJfbS8Q"8eK3r-r9YEP3dZRfc
+ZXi[T5#bQpk*epJYJeT`G8QNrK0k$TKJE`2cM35'9aL,"hGMqa`8`rh)U5+9a5()
+APSVa!FarhJ"5D6`5hSN9I8)!mjqlI5T03-)lX(T2$'$qFfG2TBP)H$Xe0lF&-2q
+bM+HDfq`m'%@5BQieYhMQ9YXaYq"kJSR!k4J+Y6,0cG6"h'4ZT%Qd[lR"KrZA4I8
+Q1f4ZY!0NNMAfaa5jRVUEkmbejKTcYER+A1NM`1f5[VPZf`iDQ'YV1Ydhem4AYF"
+FrHrP+6"ArED8"1E+VG1MMVQ"pZfdjXfZdb-NfFrQ2&#AqNqa&l&h1Nr(4D*"*qZ
+N'6[5GYPj0JcpA*J6"M'#8V0Ic(PN1VFJ0Ae@GIbBM(3DBmpX9p!"'-+6'3i-pJ1
+Ucf`(#Kf)b"K086$#Qi%pCH94[S)4,PefU&p1"HDb!'E,EU5Ub[*MP3@*@DV'K1l
+i-"8U!*bTjP*&8kXhN!"PJ9N@6S6#dTN&CE(+3ZI*K8I-TED$,l0eb8r8TC!!TJP
+0!j!!3LT5-1+R"SqQ%kjCdpe#C#I(*CkjK&M4M'UX&`IQiV$*A)I0LK8RA2[&3'F
+V!UTLQUPJK"H!&"5XK%S9$'rIm(b46f9d%*8VQ')C(`%1,4@%HdZ&+ir#PD9+U!T
+!CY&X"51mG#LXiaI4(,28KaQI@2QPHG86+c0qkCMM,Kf+kTNP00H(NH+lb,RZKT+
+"%mI"jN*&"j2NK4H#ZR3)(DTJa#m'QHD#`&c`eij5G+KVN!"-h%[2pmhj`*GA13I
+A!a$Ka#beLpYX[)I4i3T'@,c'e-+FCmiejrMQ2"4[q2$FNF0M-`UbbmZ(ii52Srp
+mXS9NFkk&F)k&F$MHHHCX4I-FK*E8eL`fCjNcIE-i$Q&!F8@ZUlrP$53JR'8KJ$)
+MjQcE"CA*5jmjSjBj!`h*Ndp@k%"[C,bM6kIjjM3I*VS+Kqq#m[*SpHafHi"#Kb8
+R`+Q"169FV*!!D@E&Y0!HAM&0c'N@ElRViXlSmb1%MN$PMU5M&)b`LTeTQ$Q&&Y$
+[I*KZ9mM(*6p@-F10)(`1l`+5+5'-2HKS1NE"L2YldV&dR))4pqp1#qPi"52Zhj9
+1S"-9M,KrCcU*&LNBFAphP238"52ZldURdQN+4YJQZ,A4k4%kh9jDlGRHm3R!1!#
+0#&ZfSY0F(h6"&HlN`*bmG8DFi["da8hPM!LGB8qXED,PXD)+F03X13!p8eVHbei
+R!@T4iS+bNeRNQd8B+*LSZ)+Hk1*`36-R"HDN2c@GSZ0GMPeaI6R40bFQFarRiRD
+R(ZB%hjb3!)`laJl"fQLMAR5Q3H1Fk3TPr@G&k#`-ijDM#NZV828Ki-)P9[q`CQ%
+cp,%PBh1mAE9rKleb)5fQXhfB+Ik8bK*-fFAZ@0)EFqdFSA13!1jF1Nr"#((faNR
+Qr!LGMa*ii`[FGC(1`hZ"39GIi*,JDN-A4ZK#E!XbSM6-BF#&5+@c!IKB@Q+1m@'
+Qq2P6Ll%h,(&*"q#8Y$4#5cFK5cA(@(K(iEh)(+hS)RFi'SlCG$&GBRj(ba3FiEP
+a1$Eq5qNb"5-m0`l(VRbj@D$SFRGZY2iVk%S&)c`hjY*SFj4[MV*P"ke5dC@*[,P
+dP6P5d98Z$rcQ#0mFBIZ[SKK,`T'fHaEBVVr-e@dd$K*A4qMU6A96G)REb5CLPlb
+'VP8``P`6DC+Clf(8)m@ee40jAQ$Qr@dR3jf4ETP$&%2YVk2V&B`3%6C6FlKR$MG
+'dIA9L!i,c'(E%"eY%C8k"#PBU@l)S"ZNC9TL'5&q`fjNra(J'c"f5$Ci+H&U&`*
+EE[[$mJZkMTi4lC%9*d&[qUiE'JcU2p#HbP1[Ec#J0,pJE+bm[!LXR5%$Xm'1f6h
+,RF(rcjIkqE8I"DQ@GQJV%@FXerXa5F2K"CAPPSBkSb+k#6'Z"'"eTPk2&pX*pDm
+Z@UrUK*YF0EPlrD9bY6'1,Sp0,A2lZBHpXLF16eAB,bk)j"E'`&[G+6UKY+6Jck9
+-(eSdFiF+ajFG(V1,ljE[PkEbN6XkT'4DBF`KrhIVN!#I0@T!eb%j`l2hlQIl4QJ
+QhKX00ZdEL5f2FbTZ$cFTZXR0RDNdc4`5Q%1fcCe$,BSTH'qQ@a5-j&AdB$1AcF&
+fY-ke+@l"Hb[GTQ#%0jF8F(0ZTcX8M160CBkCE@B&CNji8l,ASj!!ij9I9"jk(H0
+VB&'jQ0PfrCKP*alB,2DQB8pXGp*G#NBi8e-3HMIGBih``*!!JQhlAP1Pk&kh%eM
+rI3Bl`ReZPl$qjA5rJK'Rp`5Q`MF9i5'K"*H4qa0jDp-+!rq+"+lDp)!j50%$ETQ
+'hj64JkE8KpNiUb"@AM&eDRjjpI)HT4MmLKkdc491DM(S0$B(@31PBi-,$"X3F"A
+G8chp5`*6XR@c[5Yj(U+(-ZJKI[dr%ScpiId'M0SmpZIE2UmeT+*`CUc!BIh$f+p
+Bm36'[XfeIkTMh[eIr(,q0Dfqk$YSa-#4YK,aX9rRab4Ue0b+bS+Cd8'Pa5&D4S-
+"25V92&kSATXcp)UAj6mE$2&I@Z6r(q*ZE0q'pf&k4-&)$YbC"UFQi'!$V%+2i(f
+8(P-``S'EKK(hHhTF`8J1h"QddN`2B2kG@E)5B*i`Z%`q86f5#J06q#Y("UM&J1'
+Pk2(U-qH63Nm#c#Tk5X%!ppap6`XpM@c6c06!62Z0[L!'Se2S+Ec2d,-+4[aD@TZ
+HSqF9M$JaUaDpB%#RHX%G&Dhr4AT*`BJh`(BQhq5C+B(*rmI'!3"LF*j5p&+5X@K
+L[SNP6idB$SUHVfk2!`0ci-mAB(S@YAZCAP%``YVjb2dUVEC'#-$(rM%CccmBFDZ
+V!4m3Q!0#`$J-jC9@P95'RJ(@)r3+!,p')$QpjJ#Rim$q"Ue4--)&+"h-U6IT,3A
+$fjdC&pGQCRpkQplaBD,%T91Q+lK$X29!!C`8Q%Rr+-ilVK%EiY5feNa8Y0BY8GE
+rVTQJk&f(hIVISrF9M2"!djLDQ['q'CrNMEh[F&ZL)"JLilB0(6Di*V'CD([a,CF
+e(G4Q%%r'rXUJA92G4Z#[l%G0Ze&33l'"XjSe4+qMQ6kJ$a8-EaabYX60jL-cKN!
+#r-K0ZLa`-ci4qJ5*2UA2&)b`kl*!T9Y(RbXBi3M+`SP`0(eK4J8`rdNdq!*`[M3
+M&AhT6U9G3HVlLVj@--,biE4TpJh-[PXAaDpGRQkJLq3'*MI"c(#G%,VFa"H$5l3
+B,(b+2UpZMCc!j'aMJhf'mRaM4LMkaKheHU)*[UAep"epVq!)MhSpF@lmJ6BS'1%
+XX%I1M3EXX)d1*[aQ@'#'ED-Fi6k[D)1E`U!MQRdm!rDc!Y#`pIU!1UH&0)TK''(
+'Y9iIkXr-SM$E3U!J$CUKJ4RkeiQT3#e0eRe)B)EmI5G",B8p-eLajbiTS+CaLQ)
+FppdTG+$Cfc0lflD#A)qJ+B5hie6&S(VEaKK-qh!Y6P---VI&24M%ZN'"'I3hQKb
+R1@K$D+M*pJa1BF)Jp(*Y-e!aQ0kf'8E3D2D&IB3&(&%FZ'BB3IZbiR3&(NN)!C3
+k-m!c!d!X!58T@IIqJHRrMlU$Zm-CTTpL8,PYh8F#FUCL5(pBC*EjeYFcI9%Fdmm
+@(`F"4Gql-SbP59b(kbUZ3i+4$Im%VXIe&GGc04K,idbI`26CfU2e(FKa00lXj4R
+35a@$q*dShjk"fI2RKFL-X-bf-9XRS),F5`LN0E8a[326qlH9i%0d330ZU,L"+qd
+8+Z"'h&Ka)eHL+C4Rp[!-L+b+`I41P+KAB(VpSm-D!PX6de0aNq50MTXUEZU3!0N
+EA3r2p!!Cf[5dNq8aT'['c48hUli0l'jfBl1lABefXh1U1Gi@h&+"24AH"L+8`Dd
+iUVK9p@eJ9fjYGJR-V[r,SZA@J06'l+bi6A9eG`V-6Z(D"3fSa'("qK*R"E1cR3L
+irLVS[VJ,JGc,EB9"kZEYZChLlDY,f0edBi2eN!!0MU(#S(YcHpj"-4LCa8k,aR6
+P$Q`J[KAK$U#V0iRfUjJ4M8dTVDU-cVED$JQP)0#A,B)Gm(EN6SSl*SMEbQ6aMYc
+C0eQr%'%BP'V,ed!TZ)[TSKMmkrMjME-LR!A'H0Y35b,H`"9@J#J82STCeNDm#((
+54KGFCENc1"5GZ5Z$"0ij3GTJd-1,F3F3UXAGcBi+Qh&)iV$qRB6"jZDGH4I&S((
+(ZH+mDi4h45ZR1XdT9q4Gm1l'Zb[H,DRC`$dLh!-,IZfN*T9,"5Sbpc5SEmmNLi"
+l4EJALT!!B[@Q`L`'Gd`f1pUUG8291[)HTS0[1LDB(aaRDUG4EHiGiGieZ9-0P*@
+%3D2R2AN[aAXQ,K(eZ!rh9Bb1X"YK1YAKIJD0$9kfZdc8iIim3$(SfIBkN!!"MPG
+lhl42d$`B@iZ0XhYq1pqd5p)kGV"cC4-l'`S$fiG6h!k$bY+`#jecG'R)VKIH#l8
+Cb0Q+3@bfFkFqQ1TY64Xf8$eLdmD@,a[[)0jEm5!hGfb+eMbB$B6K)P"fDdh00Xd
+Gbp'*E9,jFTd'RMB2iD'+KlM*8aq-mbM[`m0m%reemS!&E5F2j#aiZ'QP1%k8Y[i
+4%4k"Hd+(F2*JNFL$HKD)#RmH29D(*6jq@YP'(SC'EXNjR1ZEPXRaNq2'6d0Ua[Z
+D&SVhGH2(qNF+Md3&4r&SaD15c(`H%q%af1eUaH@rA+P(ipf2abVHcb9U4)ejA)6
+(@@U0*Hf'5FEL(@q`XBah5D#D`4-L2'(,j'PZ#pE#&L`A"@['%de6hc4,6Tk*,RG
+cDX'6)MaTbq4TDQ'#N!$1qr-"bKk%E@1eS4ei-KqSH,+E2'fS(FG-%m@JKGV*Bre
+61%ma++Gf`V5&YN"Mhc416Kk`6QdFa#a-)pmd5NkH*REb31F[-ANJ,Y+3!0+k8BS
+G"EB5S+Cb2KFScRGcTJ2i[`e-I6B0E)hVfa3B&6b9TbQHkZD-69'2#pQ!kK,K`Kr
+RM'-b@pNf4e&fI38q+4IaG-9&lL$6JBlM'9aXk[*-KA9,F)e!6%mZi9)&pCV`$Y'
+"ZR!C(k4`Q3hVei%kQMU"UE1TISS2FVh@N6TcHB6,IqakKF3KPQkd+eF`'J8mdX6
+G#@S`8+RCK#A1KZa1Zh"9K+YUqPCaX5YFEcU#Cr&XNm&c&-pbi(T62jl,"bZHkm#
+"aQE5!j2qkiKAI(##cpDA$iR`)6rY3BTRZe9d)-Ai81&$d81(mH'+ilc4J664+*l
+(mhh3XhkCeI2FV"j)Hr-4"UFAm#i6rL00S2K)9`MV2bV#4d&iSp[!2`rVDY'rZ(4
+IXPca'4jB!aTDUD"NH-ER"3`U*lSS2XK"fl5$I$#0iU00EF9(Zd&ZrFF)Jh[)ar*
+aLSpejE"RU)84AKMZN5&b0dU1`hXmRk!Bj%DE"c)-I'+%6h6lC[A)!FQ66c)iBjf
+8Z#cYbiXL['M,+!F*L`dfk&5fI-9DI,**p8fYj#Jr18R$ie-LI-U@8CjUBB++bkH
+Dl45IkNEj*$6VDAbkiY2F+*m%j[FC"ZHh-p`SYricq5c&i&EDNEdr66DHEl!0adI
+j@5l1%[$&0b$ba%Fjq#1+6kmHj4cJU'K[5[QPm8N,MfX!-H!FL)%iPq)jESD!F-Z
+,K4HM@QIc1BT"PV3c**m1J3V8ZAbH$c,(,c2NA$FcmQNDRkmaGXk[pPqJYH)i1G2
+k,ic`K6KUp[crCNLdI9bLdJd6VDf"UU6bHH6TMEb%PrTkBh+B,(($T*!!+[JL[8(
+a4@kB@2r&`L"ZmL@m6$%BkVBZK65$,ih`TAmB*L!qmQ9mZH)ihh)'PI!9%ElL$m-
+%4%qq8[qJq%UATi31iUXLI0AQBD*rX#@$A&`U,dA*[ZHVpAHqrMij6+jfZ5YT0Pm
+6i@Xf$a2pRB8*3LaIUpFV[YB0Nd24YGIapBU[Fm2N8*V(0qK[&GrJKSRehmJh+3C
+RcJk0`fLHrXEAZ(V(K`RBFcEZ8$T-IqhVVa2$4(pV4d-eT90r&HL[IKiQHVdG*R9
+Y4R$dE&N@B(ZlQ@p4I,1Vk!)kKQq0m+eEZN[a,G8![`cdPcm$j1NSqfemZf+3!)R
+X%VU3!"EU,r6RV+(5a2TcfaQhilf$le3-QTeG3Qf+GA`ADdM%4ILZ(ipX@i4$A3Z
+$MmGhmcf+lhDEh%*kMqrPqr4R[&`ab(K@@()KhFIhm`V&)0NjrfAm!$qSq!%hE4E
+5)Rj)IkVi)FFRXIk(p5H+3AkbQk$e2m+2+Rl%94lXFreaS$rH['BqkTVQH$U*(i[
+`Bc9MJ$9NReK$!%VaJ`lbUA3arejrT2Mh$V,e2kir92bifjUYIb8rS4M%+&Z#8qN
+XIT*A+Al5P3!%G[e"S$riE4N&!FS@j63kNjq+m&0EMRH+Rh$JcU%,q@Pq4[(6$Y`
+jG+jq2p$[r`EZ'3IZA,U!Rih`XeXUEY@Mp%F@C*c*H#AGaFrTpa5$2@8VE2h2m`Z
++RhG&Z*+ZiaIj*F8[ZL*F59ITG`2plPr(Lq)i6qSUZTCIM[$,@fDlBT!!XLbX'qN
+fIS9I9Ib+Jh8MhD6A"RVY9PJJ5&PB0p'Y[$V#UlG8&4)pLZpcZpF+HS0I%`EIL9r
+R0a5rlRD[&I5bISIAm*ZqIZIAh@Z0fl9@J%rjPRjE-HK%&VMe[ahKYlIZkjY8F80
+Ka&#XX'E&HYZZ+U"CkEIi(9lVklH5feA)Pr,"kAZDhp9[+RlAE9I@rjl`HkMNqrb
+"BY#KE#8HTXIi``KrD%pTbARl!Gk2q'2&)#,C*)r45[iN`TrB%mhQ`I`ahNre'X@
+IZN3VD49r&Z(2YZa@9Ya83fmVPGHLB'r`1[fkVpp)lPC3B,1jRk(RqI-)IljPYl)
+5@3ak'AqKAe--lT*YX&I3P9rb9iT"BE+le5[d'RqY9b[qfZe@e[m0BpIkaZe3Vp*
+VqP9I[jVFVEjeFDr3UrS9Alq5h+e@fpD2mk$Xk[0bS&qQG)MEj*G#LXHD+,hSefa
+92l1j3&Zh"AN,#mPkrNiak%1fPQr4@[iq`Yrrf$#+[k['pP+JArSM0Vi(YIk"X49
+EEK15[Nr[kaIe#kaIY&d%J5RK$AJh-MEhMG8TRYI2XEC#90S+86')5i`$K',M"YE
+lA+bI&4EapE1r$#``N!"#8YMl2&%m59(L*IcMC6Y*93+LNI12N9U5TU4@`Vq[e"C
+I5Hf%IlJ%%P%#VT!!m`m4*HP+9-+I,4Q5U53MiHmRGD5Z%T!!H*ar6kNRpCA85rK
+l5J0TU!6-'1II94T*Bb@0%[lZdN5D+QQ5m(H4CY*F#HJVcYp4@NK,*H#U12m1dNU
+L5L")k2aYTE@d83)'L[1hNVDb[4+3!%LF[jQdNrC+`"KarLDbJh43![k(mcH3!)k
+#rS(3Rr2AN4fPXa,32*aI54I*JT(`"p*9ZLN"3F2jDdPhf8P*pi6INjeP&b8lare
+NC&IC63NNpTcr"pPGHLJ"hm,j[j@HdNX*&1fFrd[C3hSVf52KrdcfP,d8eU9`3,e
+2(dQIL23"BE2"b)*BrYcUeD1USUKNQK-`NEM@hNIdUAl'emmNa%B%@RefarL-[T!
+![[TT"G(P-!rmqLPI2aA2`pT+UNN["rP,qNEk4D5I&IUd%Yd*BNY)T&%#kT%GbGr
+5phU9VeF"3Q9X#U##FQ,MIL#YRr6eNmNiU+cC1-1LRr$e%mQiRF)ipMK9Vr6ebQ3
+Fj""YA#hfpH0iNR&CBHNXX8hr2Y#rrqpe@%+j4KrdUdcTVap6iY6qV&mrkZY(Ni@
+(lUZ56Q(K38kV,`-L-J#-K,Ufm#!m9A-ViY@(@U5Y6J0ZV"rap52*kV4hq*T`8re
+`S"qZ18C)5'[b`G*U+32e3dS'ZPc`k`Gpr@#b&JrCC#"8f9UdiMD5(C(X4#f'&CA
+-X1dq%l)8aI&DJ%9PDp'@fqX(I2e!XKBY(EiGZ)0H%HJ92brA!PkBV8Y(lLb$p2d
++ejJ`,rakZDqA*qYb[`AVq'IFKE[*hK(F$0)T,Hb4@'@m'Z#jf@TdjehdIEkq,eN
+0L,$EZ&fjKllAerFQim$QXh%pZEHqapIh*10!kE0aHh*IIEH[F8L+ai&LD12km8"
+pPkr[5XD"`@MMXRQ`[Y2AGbEM)&YViiE`-(f(Vqp)a[NZEMMRkYYpIAXb$[a+'lF
+[MpDhqIUfC&bULa[$ir5Y[Vie'3IeAYXpihQ#$0Dh+(%UM0D[E`ldc6pYM+`K!jF
+US'lTQf5)$2Ae6BP6J'$cXeJQFElXSfp8XNpi#JMp`d5'390pZ)a3iJK!#*XX14%
+SBH$)-L"@NJHe!EZqb`LmZIS'*ENZcf5H)[Y'"-+$N!$0!*R),X-hf-d6FR+T-K5
+&Z&j'kZYmEIAM`K9I4VV-"9`SSb)bUMTcUVl13V6[D"QMC(4ii11CI,MX*f2eYIS
+D*IZ&4al%9-Si'DpNA,Md`emQ%r695LD%5hrSRbL6&%LJB@H9F*QqbYGA*CCqQH6
+LCR+*[Y,A9bDArU[YQ('N)C!!9LTNriMX[k8(P)`05C-mQ`q@!j4!#-lfd@bHUkm
+3$@didGID"VM'eR%-hXPbS"*,#-)D2SrRkF[eCD`[YbNJf#B#k6L*b43Pi!KCJBP
+jI*6N#8BRZ%!@f$`q3PmU'JT[5L$ZPVJB,![dXT!!DcTcES))#9H#"iNp6k4!TLS
+"k`Gh9P!i&ZK,C"VV5h"RP@R3YQd9(BA*#e9YHdk+#bdR&+bcXV,#T8m%A#%TP#)
+PKDiC&q"Z-&eQk)[e43TDZrD`"faR5,(-9,E#YMNAm(&5)U8+R4L1+p"(p0*!,re
+YRA*53r`l2PE+)P,f4ak0i'aYmCh!TmK"8Ui%T#',l`3q85m*p*,Im%'Vaq)lN8q
+@LSL!0lU*&L33[m1*MaIc4UN850D*9-NX*9@ZkS[j$TNYFr5&qJ)Pd(fc99r-9mK
+F19J*&1GX94EcqA+)(+V%+Fc"IlBq2p$REel6R+SFU"[Rb@%41H`20#H"@Th&XS5
+AbH%b6mRK$JXi%rUm3*qh'FXmKf8TAb,c)rK*JXheK%#H(5CAmbebK"bTm,-$G[@
+(rbBj5KBS1FS"ZjU[dHF'qYbYNd3*f$jfSPl$0mV[j'JP[h1CVq8Ep6Q"2ZI2FYi
+#4T!!cA%05""R"rVXEBaG*@!Y*@EDiN![rYY-dj!!hQ0pJCe+)'c*-A+XNQ0FIpl
+*VmTaXP#ITFp8!Q+4lFmlqA%jANj3FVcVU6[j2MP46P,L"0IJ[dZI%HJc0[H8iaL
+"Mh#[,)V)SNfF3L8J)PNF+rJ419P183*1NF@aJKr3T`Ikp-diR$)F1!F2bkN41A9
+,Ed)Sb[EQNrbLR#DR+`($b2EQNrbmR#%Si"N1'+lrqV4!RlDY0mpd[EQ+Rj1cC,%
+5F)jXjUG`Gcmed)"GSp8Z%'fcdD[i+Ae+S#(0YkdVU`P+qZ4!RlbY+b&&b0T+%3V
+NqZ4X[8M*fDiV9f1BRL2RkT2dL8T!LE&GZCSrNI2NI#@3!)1chE5Dhj3,j%)P)"l
+CiUcQer3*J6jKkd(K3YGCVr%D@4+4*6q5!!4m*J[V(Ij!PJT@P+81&XlLq[K!(lm
+9&QK(&YCDIPmZMXM&@aS@T#REX1[i1lP%PLQ"F*YYf(AmV9`UPbQje)&FajrVKB&
+HZ+eK,h-0qcPr)jI,&8SZGjQri'rdFB%qlQG4Hi%JRFhc15lIa`Ekf&pEGePekai
+6k'1fYHj*YR92Y"[V)QYFE0dAf8k'`+GF+9FTXB*hN!!"`+H2PUYC3a-Z)PH(,*e
+0ff0)4SM'LIYZEl`+lc9bV4))`')@!-!GFTeFVhqRXAb!"@9P+`4Ah4X%T`L`S0#
+dm0H5Qq4Q*8iV$(j2(aASShlEkaaj#4IU9,NP)VIm5(Q4'adi(bIQ@q8f*EFkF,i
+%qNJm[i'lcB%,*&eZMmMY@qB#L&FBV0*3EN&e"B`QZ92Z8S,lN!!YH8-FCHq@Hr3
+4HVi5U)ECNMI%SIKHZ8m*L%Uf+JeaQ&iZZ)Y"*Fa@TD%dd[-#2@rc-R'rUd%MD5S
+V)J)Tj8e,#G6',)k@1&!r)!mUHF$KD#QYp1'"2R`cMJFGMPE54Kk+b%0EDJQU!@D
+FG-+Pq@&j4!QB8*Kam(HA4`A(6E#G,,"1XU-q,0"10r![-`jU%CKaZ(KhNpr,idS
+J5Q`cGjCZqY"!(rSr2eXJN!"hXMPa0GH("2U3!&rRACbMCHIG`B%qH0Zm1m)11+L
+ALGb&Gk8mS34X+e`YT)Idd(2e(0C3PQ102jN4!99+RY5cPH$-E0Zj"lTmP6bPCqN
+U*DYF1rI!NHeTH8B*P+CX'rE!AIeCH8l*Xkjq2D5RVJ`dC%)fYH&cVJel5Qpj2L,
+2rh3$J2L8aG*AXZ8&H9(*#`j,AqQR+`*GX4N,U&-@5cmC+#p&j+8Y,If8'dr$-'4
+I&S%ZP,`LVbS"`mA@FjM-P0AbQLlA"bPClHSj62DAeq80*G!MXM8B*[[+'RP6L9-
+cJRqi,JYdfGBekNeAMq'5+fp&j+drE'IJlPKBSf@m[#h[+((b6r#2dD@",Yd+kad
+(D`aZIQXMXRC,QChqP"`S4I+Z[+F%'P"fFKdSdq4pq8#*dhU#2kC,!PfbEA+"kQ3
+R9dbQbSIbNC)2AHBT-PA2$26-rrRT"J&,bZE%48mA"lViemN&GDV%j*S4k"RE*TG
+G2c8%r84HaIZaI+,NBpI'*E*)2TA2p(50)ae%S@`EPmJm@5HI+eRRqUe%+Z3,q9,
+*&kii1-lT`N!AEZfh,efrP8UjI"@4VhlNJmVR$YBXh,ZqPQq81"%Sq'IVDB'HYK8
+@'&J@eQ`j@,k0b,GEfKKD6lD0Mm64CVemTf5pDq-MFGMjARj3mVd$HD3FTDF'HZU
+f0JCCbVEa8A+XE*!!M8UJl'3c,j!!Bh9"S![qjkFXa)P(!F-#R4rSr&rEH"12+br
+3HG[D'0*eV+f)R8$(5l6'e9Hl0MiC3aVNF4h61"C$B-UfmFQbe!2e4hRJBGPq1eR
+1m$`[4AR3Jl,&`49+6`ldj*pS!-Tc'P&bLTcZE4IaYYY%k&1H1$5,jA`[eDZP2*!
+!$bbDaEMG("$S!rk%"J*5&XhCFTkA&[(50[FYIM!Tl0Y,j"U[YZFVcj'qi,r+#lb
+)mJ)($iF6[AqJprpEhhV3IE*pZdbZp*5AVMa)5GR-PmU9HP+J*rhmEaUHdjG#hN[
+ea%"2r+9A26!c%Vdk)G!6Y[9Uc2BUrSP*Y#fRKMBSDfKSLVC5S4TbZkbKm#X#LVH
+Ai@8U$q`eZdVH+AIUmASFkr%f"F6Fa-[%@mHVUl`k)A-!+HlfkLR2D9,"HjFH'qL
+aIkZ&Klp'mHVVrC4Ahf'm"fH&-ASdkc%@ifKE%2bKMc"qVF0VS%FT$mbiZ-U4(UR
+hC3ha0GD3!'BA$3@f6*S-VN@Zep"Vj$AfQRK0@HFLbQY)+6T(Mp$$pE"!jra$25l
+3)hi613cdm,q,qHYKreD$5[FDiDm'p$k8ViIU)9icVlNH(-$ppaUPDdLdT1Lp[4D
+HhKXr4q#e!1GF$`VdS*q&&$A8UM+pCL#ZC1Z"HN#JXrqD+G!$YiVB"RV!Rh5m-lh
+Q8+Zj3IIArA4Ih8I[TII8[I8H%#)r3d1B@rH%B[D&ZJFYeE[VhI5ZHKHkZTEZlm6
+FIGd[,R([kljaK8KIppNQNZrV[EDTd2Ykcfd#mi(ZrDIk#@T&2NVP5&Xq#ZE)46k
++jYJpRYiG(VhE0PUTVhH0Xfem90MaFHVS`93d)rZ'R$9ekB$ke2,0NNj[,AQl[If
+0Jj5F6V#f#kh8dV(8Cjcp"CF2PV6lX0hMl5l#qhLlMpYpmZPRaE0LP"QM1M'U'k&
+k1C1TIS`DG)j"4kJ&T8h2[Q%mE9H8IF1BR+8C'HPHBcY-GUBlp%kkZpI5Dk@l"A$
+rTYLTGl,c%kbK6!rX0pded&hr1KSb2DLHd8-k5hIaY9AqqPQeepGGiRV!G65Q)+S
+IG%5GqDh1fGIM[a1m*VC1RHPa[D2Zj%@peVTM!2GrMp4d$CTTLZlJYI%dQ)6T(YK
+qT(F)p!kr5+YUe#86[jq6UY[VGRTlh9DhdDd$hAjEcN#hfcSDYrqV5PkJfriUHaI
+S0PX&p!,GHUYdBDEAQY*d9,I5,A8,h9`hddeeNd"(IqYTAlH+cp*!Yrcl,flS&R(
+C8PmhM`Z*qYUU4FdScF-mEBSqcbXY,mJVU5bSl[0-p`-FZXNr9T8kZL-9GCS1)E3
+hff-5VXLq-@I*a,FR6Cb`BY+%*HpdhLRlTTa'e2rLL@[I,XBNR&%)j*f@AY)1rbe
+4+rZ@R'AfrbD#Ll+IbCQH-CiD,LZblKP`&m&Gkk)C,E0[R*JchUc-X6%cl!aXDQG
+,BilU4VUKepEEAMF)G12rAFBdL0BTZVlAcY0J@+CllHb%U4ISHVp)mqQ'GX+daB5
+TUq[S6*fKdl8+G0eY130GjpIcI+"VK*m#MGq!qDr,8k$6IlTU"&TYAEJc[HdTPl-
+de1qi"rI5!ILM[UkYdh3Y(Q&CQM`""-PbVY+TI!JIa3Y"+P[%Tr#&I#PI`9H"ph3
+V2`B@cV2m-JJYEr1(r!Pr"[,'pp*(EiFcESS-`(&hEmR"HA886UjPZ-mG*[1eKe[
+HU9TNL9bX'HIQff@&2!6fr[2bNV`PDcFDq8UqhDLplEbdM4YpMH8S[Ri&bIA,UM6
+TfVqZArM0VIMkCI@4l2VPke6V+5h&')-#HAbl`bpfK6683(Yr)RN&8%5YS4F&fUN
+BrC'p%N!"k*mhrf#MqGGp0GLSrh@q#cCZr1ZaU)jZ)2HYHI1YYpqC1@[YZqp&+#h
+RX3mlBpaqp1E(Rhb+Q-q5-6IQA)50dZSQ`iC+1G9Yhi+',Sf"XYk#fX5SrTYB-,&
+IaUJ4mXDSF6,c6H1T9BbD),jTM*V&U(NBhk)Q[PD-@Q+J!eNVh1BD!9A8)SAG1N4
+UAm4G()-8(1*JYdh'KHLh"lTf-8,!$L'k$NPd0iIS1QEIR"1M6T0TahEfM9&Rf&e
+qHTI'Sl0#ld9aEpI3Hh(Ffqfr-[rj[D3GUY)p4MX9fj,XR#K*$(p"BjI`@9K&m,m
+Pq,Q5@h*3k9hM&GmYhP[6d3flarZY4c`QIGQ5'2AXh#llPM!e)UeiT-f`4df'hXN
+-k*3piafc9df'2SN-B4DJlKY(hbqHj4*JkKr(0U!Qmm!Dp0Ra$)-50321[H0i"pG
+N(9*6ND(a$2[8C"L@c("*$(m3J3b`4p4Nb+QT@CKT@8C1ESCR(J1KecaU&FmH`95
+hrr1""8aprrVVi"a[q8P"r&G'MdEi'`PU$PpQ49i&ITq!&YVIJS0pT[ep0pJAMFi
+H0aU*VkfSR'[23!pAP&9JRk*R"Z3-c%EFkre($,3UXGqihhGMFEr[aZRZjpfiD9&
+H-54AZ6dQX[A["0[kpbV%L32fd&&$*Z!((hLrXEQP82U(q''S14rrjK[)4N2`1Zk
+$j[SmcQrH2+8`c)(I*)%mq((@PaEqID#,`b%dU9h[fGq`#he4mYb22q"AZ1U6Pm[
+jM3Bk62Eri4,j8Zb2$XDaTMJ"rM0$Re11$hhEfEk)qfV036ekaheh`lI,"m[$1Je
+`L%)IMVh*qNfcV[m($3!,3R9TE'3J9A4TE(0ME#kj!*!3Uq8!N""4G`!!XKN!!#m
+,rj!%39"36'&`E(3K!+q0'8#[Thr$!!"AC!#3"LfT!*!%6+X!N!M[k3l!6ir6j+X
+"d'qBSj9pARkH@@rRCqI)FZ4cch,8fFVmcZ[-jr6lE1*P0[#b0j[Bc-[[c-j"0V1
+*fG6,%1"eCK1EfFcH!cJJJ&`rlXQcKr*cBCXYE1&3XT!!#5JjN!!m*#KB#-36!!G
+fGSBRBL)Dr#940PkH0'r(*%5-AA&H[fYKeeNalkHVB6GE-HrRJf!I[-,V2V'J-$F
+dZ,bJX%b3!$NVA&SqU%pfBlJLhpmM+Vq9YAZhFjiKZ3jY&1A&L!P3A0[T4&8q*4*
+E'9,P1B9Ca@8&T`iU,dh0q5HJ3%rI(,lL[,ir`CkpV-[bEi!QIpPYlei1ZcAmhm&
+1AGCPa81`TklB9@0mGE[q@5VlRHTELC9""Kr-)r!HE2fKBSUI2mTD#eV-EjSaX8G
+fFDKdBP'S2,qJ,&5@8eT38Ki+Pj38&Z5%b`Z+LeU(TK42$%fB@&BH'P03#UZJU+`
+mA&JBkSBFHB2mI+P%!j*kKFYb"hFE&'UAfLl0[NR!'Tm-l%a#F@b,S1$MmC'ka![
+&)r)!5P!`T-!2LU-UP+KJa2@*9%r6J@DR"l0K'UQ**ERKmVb5dZ*aH6RPT!EllLc
+R&MS3F!*QKd*MFR%Nr5qHqB9UT&&LI['%[**`HElcC-%MCJFDeqbdG8Q-eL@I2#%
+23)+N&!`TMG3PLC)9$*lJqpRm('Gq*PD8A)(e*mrm4,A5k-$5[2+*T8@6`S94e`R
+K3J&+S45UUQ")TQd!bU0U9&h"L$[HlpYFUN%eUCD#+H@)m0#aYDQ1JZ'A4e&61NM
+S)!#T5r88$,5*"9EEE+IkjXF!c$UTiEa*jF@ja6P&%`X,LDBKE`U&#`[+&08RX65
+JU,VjJ4S%B-3(A'3$NN*dB6*UdG"mVkJKLH8[kfp%)3A$Vh)bTCM[222G(afP+13
+D"'8fh`E-Ym#A8hjU1C[[EDIp#)2Ui@e-643-[hKeU)(jaRaYYJA-0bMHJ!&C!`H
+%aqHPPjB1)1S+pTT'YT!!E,kf%,CC#%h`0M9If@l`)65%pd[cKINmB,k-31K4@*E
+PkQm*-!VK#`[KFfYmCEZJMLZ@4d(c@4Ac'4U54me4k-#iJC'1rT310Tm%B++V3)e
+jTD@K9[KFp"bb2S8HM6(!9XpXTC3d5N#Q#@9MIAY!f9JaReLmY9`AYdDI0a0UKXS
+eTd-8$,q+VDQrqCKD8-X!c$UTC92+LR-,LmH'bmBl#X,Rm,BJ'Hh$1*TDdD%+4X6
+I%@mE"52L2iT5UDf#%I'hTc4UTf"%r)I6BA5iJK(aYm13!0"H`BMifp+4G*5#iEF
+*X&'()(9!Ib4RjqH&4[[$9I'B8-Mf)mTlP1Z$0T4U2[,-4hXiSVh$daD&k"K%dHT
+5M5DKdR""@9iZKT!![""kTVLd8mL"1Yb"DNH(Q3m$jN-3#KJ9K061a4e14jJ2222
+"2jT1!D'IScdGDGi2Q2GMZGZiZ+1SJpN5-&YLFBGD%M`3&HP%RFal#UCI+1Xr1SK
+Z1jJD$XS[RSLUp`RPj1IPM#mT,LJUpf[Q0d-A@c)fla%P8%Z+-jZT-ad6J"NI'&e
+H"*EY60`AJ$U$eii91KETZP"A"F2(L@68,8MG8)+iBAPP&S`JNe"hmkkLlLl*-8M
+E)dJp-#e)4V'I`laV!4m$`1p36l-T!$-qN!!lTV"F88qAY!IeS[3JTIq+,-&XX[!
+1`G[,E&4)%$mFQ3D!QikMhZCYkU2J%+"#c&$U5rd8$#R%R$Z!XN&9EbRU6e,Njmc
+'Qk&JX*f@XbME["N`EpUbjaHJ#KR4[&Q8DGj3P1Rb`'pH$jMAEIq9&@*)H-0fceZ
+fkrZjZQA6%-S+)Qe&h46eGM2C#$U*MUH"#SDID`500+r&QGGXLS%9M2bUCelppjN
+-G8BkX+p&&%EY"e'fJZ%M#Y0SmdUFHF8BK8V%%,hXQCIh)YVSceF136a'UX(*0&J
+D*ND(%H*hTpQ4-f&Pc4l&ZAP$`U@P"F@PS6ipdc%i(j9k"'CAM%qFrFM*rKJejq@
+j2$MTD,VKb8[p5DA$#a[KEmf$JpIe'0)RRDLU2pVj`0EBrJKNja5fc4iIkT!!Q[E
+lHQ"&AkpApjkSbEqMrrqqK+qAIqBPG-[+kQmV%GNb92mY5Dd"HH@PaC2c5XHAKAj
+&M$d!YK3*+r(1XJ4A8E41&3PrGHh+hHRI+RFJ,D%Pi6%PEMk2`h$ANBE44,U#EJK
+QjBI,mN+(KBBA&qApXj4*I3XQ(&)@bV*J"i6r[VMj9e-&N!!le+GSE(lB)Ir[eU&
+!kU!HEIYN$NJrVT[Y'd%I#jeJAP*d!R&rT"L$6F33"IlcH@F-M68[HZE&[EccNN@
+4J(FS$9-`--VBR4HC&m`'0LpBDYeJ8`c$1ja'+"MqcL8HbjD4G++#%GZj2'r@Qh@
+HHClUTe&`E&kjf`VP&T6kAVIck9P3+QDp(6r@@FBl-ET!D83R#DKCD"5GV'"`5D6
+SB3'MLRR121ZCjrcKF%aaD8kH4H8m2U*REBe1aMZDFK3-P0&IVCPR+*GKB#@6L`'
+L6kKA*'8)@kY`+$qF-cj89SaC,&`HQPL@9eTQ*e0rT99B-,SdA$SPP"-Z#[NirB%
+0X,%c+LkGiXDX(,aj0%E"L#&qQXBb$#!HLe'S@kLm1$3k$b!Rj!&AdGK3-A#8@X4
+fGiE!heGRS*3Bc048M1%@k4Lmq95JB2KE(m[bifLmH8V"p([)lX#`,V,p1i'+&!b
+fV"@(9Le@91`B!9lcT'HHr,14U!MT5m`6LNSFS4`!9+FS1X@PapE021kCarIdi41
+fUFGAE%)H-f[0S`(cf0j0#*ZePJiHY96cP#ee!Gj5XdC4U9Yi938jP"%'3NabGZ#
+ULFh04*UNB2METjTB8%dfMbLDl!C'kcr92+b`er3(6HZI3UFT'2ji94FlViF#jL&
+rbe48UZLdD0kkG,Tj80(T89aek3ccJ+)ch+B&IV1DcM6h"f$@5Fd,PjD0'C0E@P(
+2%)AK9h5QC9k,TjDBqfeC(l$'JpCif"U2f#E"IMBk'YlRQI[fV$h+AG'UBU9f9M+
+GaHp8cS5B![M%K&i&4EPjTFhiqe%c#)XHqr,J!qHEap1f1$qq+lG13mb$j[(MCN@
+S0C%cFckali"Z23EYRJQR@G+TdUFXId)icf(pfdaBYRBpCN+E+iVqr`b"[hebrE*
+'hh6YPG&cS+e%C#DXqPX50@K+@ARH"$"iSBq@3@a!MdV9Ma5Udqi-R5*PqCm0*Va
+rYFMrRI$mQFkXX53i!Zp8QUCJa%DbHmdpE1ke$(+26@'Ep'bDVQ$i)eNL"[ecD)D
+#%4[*lUCcc9dH6$Z5qGZQmR#T(FdLhQcR&6SAB-icGbSkVi+A9RPQ&G9*Si$,#A)
+SMrVk`bIQ6PZZZbbEcDKBK*m[G$l!A%!c&BcB($G,#$1lZF1Xp-`GIMQJ"bJYMbl
+PR6HkNcFBmB9QiVf3!'BV'*&pqS&d%9fXB2J%MIkM5m`+4CHiYE2eck&,&Ba)!aa
+JPTYPjRE2,2pV*PeQDhQlVH@PMR(YV(0E`0`@@dD[X-%A9l6(8XmXr9-M3,04ZlP
+dQB,Kebk!h*I6&GE`!36)-lILfGm*#M39!lc%-dYm`*JEFiSR&TAlRKl@)h3C!&p
+*9bNB2Z!N,1IRdG8+KMm&*@'&IJeGUf$%(F@-RA`pF`YG4pF(B+,%aD2(+EKpX0@
+TTVRC-cIr9CcVA52@`U4dJeQXk!Bh59RrM@D4SKXGGZZI6`X8$(q&9`H6e-+!@3M
+FKAP&@,NZF,KV84ecNfGZfNXkE"CC!PaXHa(b(CX9%JZc`$-,pQC9"2&0Y)hQHfB
+qe8dM,l+*pC2"Q@@G2V(49@LQQfLKJK%h&$NEBJHab0a)+2%Lah5T@(cF,(3c%Ye
+#5a3-[qY5XHLqPCBU'$i&T@+*I!2GCUlhB2j[+FTYJ(1lZ8l4l@kChKCEpQ@dA-(
+`biIPYlR@-pIZQ4DAZcaBf*YV2(10[rJ"4lK1m&f1mF9FCrRZHYY'5bYDifV2A"h
+0kCC%[QZJla)-8N)Vc$a&+pcDYb1DB#AG3DX)Jm0+YrEYL)AdAA5hJZ&cJ9f$hf2
+!5rFiQ2#E+cecj4kBE+kb9EREX6"fk1D+1(1&$ER$Y9iAE+6[&ESAaEL2lPF`r0E
+VJPhhDX+i[YS"aBlFA1kCbrpJ6%82906p-XpFpTmc#Gd2`!qDZBSHG+Z4(UM$3iS
+JZ(,,mTlQdML$IDZBZACk@BAhBF*DiQ(A',faRPj$MbSB2ZlHe-I-mFbF2BfJk&%
+(V3re0CI%Q8Z-%AS%U0BDc%"VA60NB-ImQ0"M#(ZFX,Cjh$9$"[EE6a+@3dmk#"P
+BS9m8CbkbdU1R+ZSqfc1crkVl%m$fY,P3dG1ZlJ-"q4P&ccKN!fQ3!*N9CfDK11C
+#@ha)h"6GkFS`"!6a,$fRB-J)hcqFeY&k"F1[`4!DDQCkCZDH(Ph[3')jD5k)-aJ
+R&6eA8Elc2A2qR`14QBI&0bMl6`C8Y0J"JDV)R1HCmrD2"![4"Fr6"JA$,qeSl2a
+HS"F9$,p%@$bDFq2-ZEC%,eD8D)CRC[c9B4Z!l59cMU+A+VDi,bYkf5'c@pcTF@B
+kXCKc,,0-arX+[DTJa(B$CjYTE-kfSa'8@d+[iRf0APF`r0e!%22H'r5QJK(E$8b
+PYmaC(X`QDC4mbX5mdLRBia@Af"9N@53!fp*-&b$d&L#pEFj8p(C&GFr`c"Rqf!9
+PAh5aB(h4YB,"+Nc-@CB4hSaX#14KfLLd%@!fd6X+4Ub%Tj[6f*aZ5hLD,H%lH0q
+Pc3T'E,FkKGjM'#MRHeJ+(K6U9MBq&"jG2,%m00PZF1fUe@ie1VQGk@Dm@qKp"F0
+Ii+%-jP6kJ+!)1R@I91S$TqLa1kD2c'4&(mAdHr4aN!!qKNURk4#,0p,!f0F@qh,
+(b@'VkiN8)5,VQ@chpKp#C61*YK*%BC0LXTkY&Q8!@DV3TfDLSNqGc-Ik2a2k$)l
+2k3X&``F2-54p'D3[8IZ%3IPjKB84TFmAH,qLE3U'RmIZHlm1dYGSq!2lqc[XJUJ
+SD"[HE`bB$pV4U-lNfb"pLb,%GmGDfXpLS#"N-p&@l408VBbq-k8"Q&&Y%(5Q0RF
+LqZ2l)(fr+hH#34m*[Brh"rT4`BKX)UV6G[T*`I!R`L5XpRif@#Vr(0e-9+9I#2V
+,Apaf)"NU`*+!+BN*JADi1$[R&`F-&+J4iFmTPPGqUQ#M)Xm8q5aZbD#mf1p#jm`
+ZpM@p3MqL0MY*+aJqlp5J'QD#JFB20@@$2Ck3!-CV'-L-iafEBM`c'p"A%)Z6aP6
+[9pka+ra`D3lU"#+B@!SGJ&2e#J[(+8EA@ZDT3Bh01)lR!`*Qh,qBKb&YYF`$25F
+RQ!,&#DlEV,p+N!#VB*r3`QFH$")jH@9PN!#br*0kV'!K3MmJr`3q!)fFciPmB-$
+N4qQ(S35cp&1,kR(!M&8-pDZP(q[hK+&Pj5!Va8&AJ9T8Qj1#R)5qU1+[3l0kZ&*
+$RXV*R+)BLPDE#-*6VKVNUPCmG@5(m5i*T+YFcBa4A-dPU8-(FI8J9kpN(Lc0fBb
+e"80ZNmFe6'l!j%@CKfZih2@T!GF-FXe+jXQe-12`eZ,DLQXjjQP#Kh!G2NKa(FF
+m6DJCec8jLZXkjV(qHPaIF6h(-%fTQ4NG-+1Mc-2eA9`6+%A$!411-3qfMBUK&Sm
+bcmQH1CN5dbMH8S'Y4'fm$ELKBPmK+pM"Yc#Mc%PX4YNDRf463#[,M6LNZ*(M'C[
+L4'l-jN6,-ieriaN-M18&15%dI&PqZ$3[er89e)lFK*XUEZ)@-LeS*Kr-cFa)EUl
+iB*,Mr*L1I!Lh8!c4RYe$Y+!fh*,"05eGr5!G05-m-q,AqLPZjAUY*EAQ3i0mk'p
+GVaKL8SXPMGTcDfkMZ(A&hQQiCiE[aJ,GT-8#Q5LR"MPe9pmUEZB+ejR1jVDFCSC
+a1m9Y(EM1e)d2im-9(qE!3HKSKRTQk$k+9`cTTe-mGZ8MJRc%lh13!1)d0iVfT$#
+h&fk2(MU5Me*mT12URM6#$1%1h$&JKZcMkJk1Uh[5FGc*R+!B8fI8Il3CV2KS9`M
+VlacNcK$%T[Am*eN2LVAf),qe3l&b46KmX$91X,cB%EbBcFI`X3'6(52bBab4pkC
+"h-8-8JaGU#9bkqmU$#8SGq2ZLVZjFQ!0a6f#h-1I)hhNMNUkiqh*kBSMiXpqP-'
+pJYc,cCX9P*11pcJc82&adFh5mG`lb,dVU4ck(cE3P#6`X5MCmGc(C!A-m6%Ula-
+6DR,I)+UeQmUc,-bMm2BcQBVl15SIL@EYc`-8pL-qPBqN8CaK-K4$*@UTh2Sc18Y
+a4#9k)Sdb!`*Q3)c+Xe`F0'ZQIm$dMe&jKQ8%5&#M90l2-rhmR9*ZFB4TiA%0)!C
+b*$($E%B)L5f(j)+hMKFq(Y8Db1LpJBj$FL%NkX[C2$KJqZlMN!"XaaQjd)bGB2S
+S2U(#2m6d9J`KRfd8kamDj+&BDREmrcNNe"`KGPd3)C2HeX!++)%(Sc12if%m2'#
+1Lj%*G(k@62+TM%HBAST(1$+arT(#)e(R%rNN"GQ0AjGm'XqMJMcUEf3#)4qIc'(
+&*lXmikQ)4`Gjp0r)"-SqcM%JR4bATiK1iG`JjeD5#I5UE(VCNJe(bATbRZN4-$e
+MC*,RFTI6C"i6j$'9C0,$`Kb%Gk`""ijeC()'ZMDI-9iML5@6-fJUMc2G&)pcC',
+pilP3SF9pdML6TTUZ!G-e4LDBefcF'9#$G3QB,M%bk@DTSD##6)lec,&lb+5lVHe
+)Ql'j+mX-6'm6Z%LKR(j&Cp$jA"`%Q0hGTELS!Z!aRMRQ6i$F&'8[i9-80$Mq%$U
+,CTR1jQJfR@e$(@dlia5mTBbqKpE1$U%f45G'*6[C)E6mYb9E,f`H3$%Ca89Yi()
+YM*Q+*r)Na42G*$H,2ZE*I+VTb&-83j'([NA-)h`DRkiB5M[R[iA2i$-9Rq(BCKC
+G`QHC$SV2FRS5kjpU-**"r'3R3HZIaQFVk0,mbXqL#mf4RMPbpjKjYQZD#qPLRKl
+NkEYSJ-e4eZKJdjcT)-qPKAb1DDri(!ICqQHB)a62F&1cpCr,jbQ'--U@B#jGaHI
+c"BV2Gb@!YXFFlTR$p`qMf&MESPa'9r,-)-qXA0iT2Xq"ZiCZj&PmSH*C$Kad1ZB
+`cabf(pb&$YbeG!22$[,XbST$P-fQ[38CN6-ZT3Ii)S2a'ZST@f(V[jJ[8Aba+m*
+5@X&cq&,&Fe`4PN+fNZDCY$rS4A&%*h8E,HHj3CjEbHf+)FUbX&E4[A`CAkli-JF
+,@K(6eM0Ypm##3-V#ZT2Zi5Z#I%9P9F'kLNpeXpGDHTH[&)EHLDrLHBU[FV2A@RV
+6T2,9I%h!T1kE[DjfXpCDHS+[0GKK3%jNJ9[rG8'qEXqmEPP`%U6#GLhZj-*jP50
+@'cZU3'CP@[2eI%2!Y)j09ljH+J"4aSYmScP8mBeZZV,qqF,c8FN&I*0Lb+&X*Ck
+NChKKN!!AfP9DM'p[`VZ)&bZ'%-NQHBE@mFe"[YQZD(B6mf+mYaM8q4DAD"eYi#9
+"AP)j@d'kbZC3@l!E8,#@I+YT%6!YBl29V5lh5r3U,`hbdXVC#X*5BFM,q$CcL'*
+SPfb$[B@Z[*fA+BD%bFj@Ep%QAQk`MPVZCL[VAm%V&Dp`-p6EY-Nd#aMXJ5+ce8S
+ApaE%"JF(c-'afDUjEIf)$XU12Ndpdj55dZL!h1)aU$P-P&l-)EDU(@dZD,4Y3EC
+J),Q$9bQ'I-M@FJYpb(F'qFlI'NEaUJTX66c6j1rBH"*UI4IIVGKUQj!!G#YY0Be
+0L!dZ3E%*fADi'qmpI+rLHbT50$)0f65b+4VD&"!ZmAem[q,l('&Yj8,6J&Ic!`(
+6B"pKVADLX+dmJKrNKa3r'282iiIj%F83'MRrB&l$MbTlfF(jMqHer*MLY9(r!(k
+FRe!-VC!!mrIK*rNTa8p'rHRm0$qMq1QS[aXrbmmTKSM(qBrKGEaHmEUS[b-rcaX
+83aRMr1hj"Aj4m3Y4IcYqL9p@r&,8hiCIi9F93llLr#hj0AjG-E3UcRm)[m&[+Ri
+MkQr+Er(ELU&!FIj'[*%h+BD)a2RVm6[mVQ)S4Tcr)0l-lbQ'rX2jDr)@IPraPUL
+r+Rr!(bU'c-2j&Ar%(m1)qMhHbTmSKN$$qD[`TrbCiNqMrMMqR,p3r(R%$lR!Prb
+9iLqMrPpi'hqY'(S,jrq4[q&[&Am6pAr,hr(hLVq,qVrL(rK(a6miJYT+Rr(f)'q
+(B,2Q`,a`lT5+d@0LQEdJi1MU4dGARp'ATRl!e)qHSq([hBca&Ah$2jPkLL-##IK
+0hB#T'mR$TTi&mDf$r#hp`$m(q@FS093)Ae6BiJYT&(rY+2P(b$B1#TL$!+%m2"T
+3)6QaFEq3!$Ce!UC1,1i,&fFJ@+SG-,9MFCrjF@LI"&-VB'V&iMjaF98J4+L**aE
+hX9mkY'23e2"-MIhMm)GqiG(-+Ib,UDiBFK+E(Aj6,@#Ua3U2Bb1+hrF,$bDS`6Z
+#[!1+K'Ufm"!m9@JV)Y9rce@R*YFa931QDU`klcTm"d&5N!$LQC6Gb`KIeK3!-6A
+NR5CCm8kA#hk6&$"*X9SNff3390PD0-)UA`GC4f[4[k"S['hh#6KF8KLT"948YKC
+0ZEP4!4bBLGELGBF2Hhi6p%a`ch!0ACLY5dYXlBha&12-QXd,[`N%$+Dl5&dm#pE
+Tcm$@DEKV"[K*P1Mh5,Jm8JhSh'`ef[%4"Y+5!f29f1$LfR-(NaJ`LE%iU2PXA%I
+ZE+S%6*9B(#4p0ZiBlQS5!LBK&JH*SBhVaMd0P$-(a1+JB,4akGcEa!G-I#cZ#4I
+AKrZEZ)#"%LS5pjL,'m"C4J)388EMS+qdFFGcYJ(ei+"!*1i4&cHBKaTFKS03+K,
+hN!$V(Ua-KE94d2Rih31reTl@[dq-5')Rk`FS6Zm8NEL!hKPG"BJi,#-j9q,e$L@
+i)SC9J1mr3!5Al54"ULKa!L#%MC,%S#6D*8Z2F&%16JlBm9fUi$e3rk,N3*GR&)q
+@3&!#pXj6*PERb+&r3Cc'cES%L8-KIKC2ra632dG(I2&FjMc1Pf"3JK@C%c4Z$3T
+$pLT+NT5!EE$J`iEb,%Q@&,eGrkJNf9rb)+CFUNSe*EK(Jk%IrK+TVRp38YdIqRe
+r$DQT""SHfeP&A++r$qM[Sd1re(4af(lUl`,kZqM3Vhm!cBJ6$@'9@5DeJP+VXJH
+8T2LL55`G6j2D5R$cc[E4C*kL[aApV@f!lEB"l"8j5F*E4`j5BJ9"U1e8RUUrd9q
+crXDQX+IL"&IbT+l88`+0N!#p-M'9cj(kdN!*Y%!@f&3q@fm6MBYb5KV%0JEk+dp
+rj@Y0*db*#L(KLZSJ"HIVT+%d8J,9$rDX2)0Rk#mPa"SA+B-5`P@h4U&"B0k**Ii
+kb@h[Ti3LDNaFJI'(2K&SKD5a0&(5f$AM$1M-QXV"qJ[pZ4,XHl(B!lBVT*Nd9i*
+6FEBjCr"-184D+$R%dG8-2PGrjZR2rQ1F%T`3X9eh,PmJ,B25mZmk'X(DfZ+EcCG
+++cP8#84$&YpX[NKrkZP2pq-le1'lL1G)kk#dhLd,%Kc(`iU2jr&1D525"P92PEC
++8Ph9jr(pNLEYp#GkUa,FTE09RmHhbQ&bZ",FTE09QFIAba(5AZ&dS9q9HAberYM
+6(qmDdm6GP-1bm$Sj-LK(rNhQ*)Fl,20jX4`P(C5i@hA`,p!IHIUMh9Jk1#`,H*&
+d$%V(bRUfFf4b1pmYRH4S*4LJ-2V$IkGdPQ18i-5E"BE&QIl3darZB4+&H[L-ZSa
+AbE(54FQa,[0bAU8rm,5lD)IE458P1EkGPG9$#44"0XFbAUlIpr6lHa@l5U"DLR,
+D&Np[qAG1dcK1b(UVC58)YU5VG&-#KB6YcpAmYR5A([Sp[9N*K%@f2eIcFp*6dTA
+dG$feQKq4AR+FJL$!,`lfArTG6lqlZkHFaSJIi)HPGe"krkST9!)KNX@aPTq52Y*
+A#64&&JFfAISG6lqc'dGIKq-aIP,k"D9IC@qLefe[2Xq[5hmCS!3+)pZEcr1VNL'
+C5M)F-+bip#C2EpVEQjQZ0cI`+j)PabZ"jXKQIS&Id4Xp[C%#VMGY#B%E&qKXp!C
+q3ErYkEIhG@@&3%QrjHQhpRBPcJLbhQblXK[HJIT0*30G9fi%Q3k5E2f'IPd**$'
+f+cIb&c*B6P!bf(A64Rj2KXK3*Hk#'2bEp'ZHIZh2KB)-GCfeL6I,X+!-qdd%)0!
+c@9JIm#FbA%BS'HjJBIfQArAdUhYJ3ACNBAh)@f9N8%C@0La%8lCKYr&2FU+FT!3
+hJ'c$EZ-ICC5FV!6A`ba)l1$d+jjqC@r$iQ+BEGL[q3F*bfJPBCIj'rj"[qcTPrh
+bP19(k"3H$%!qSBjfHElQEr4,RRjTAqZH90'k,hVDh@,lYpDeK`cekhCLIG-D1$[
++fTiG&9c+P"a"@d!!K1N4U`64,dJHDpaR#dUHVp,jGAVda3LKL($IcBeS4aNMBj@
+-mEN!!1kAI#R3'r6c5Y"@i!,%9*Ga-Pi*9&"S@[LV5+&-8"Bb+JKrR&l[kIAljcS
+RAT)il#q+JQL[5XQ,J,dYZ!"f#-95SX3G*S2Idq[`l!H(Uf3@R#G*FNT36URN"3L
+[3+a55qk@8J&&L*3*GJ[3VYZ5em))0e%QkHIdXdT`1Xb@["B'imPbUK))P@a9DNN
+pQ5+R+F'T-&Z9@P*E2q2TChB2%kHj'Y6'QZ$dS*bqHbM"b6',Sb''mM2N6#9R1"`
+BrIA6RRjk0iic(Bj'dN61#XTCPE@%e-#+k9[*i6*9TLQ"%JSF"hml19ZQ+i(Db3,
+$h+fIm[46HcN1eb,!FA)S*ZCcC)D5FecQeT+QRr6dNa4+Sb5R,LkcE@T,'I(lE3Z
+r%TahXMN2PGEk#8mrXBr[)KSYbhH2HrVa[AchR#8iHlN29iY&cTAcP%"YKEf-G*!
+!$[Sa[CEeBcD&[3mRN!"+bIRk85ARZhEZJ#kr3'EU0IS4*4HiGZk!5A#@A+J%PkC
+X'hD3!'0NYPbNC,DVA`ITU"rfp-1lfa!h8@`EGX3JIR&3,[jp"i$M8aC,9dQA5f5
+1NNXF&XblqL&22l3E#k46&NXh6,UA"ZA5bTDHkHLT[p`KFd9`&dSZNmZ9A1EUf9m
+Qb"9bTAj32k$N#PI2rTK[VT*j5R#2b0DJ[a`[9mXe5Y`e)cZZkY@HAVeRM,V'e@-
+!aY&VJh,YhkBcD(FXV'`C*YI*p8VFq5Ii"q[l2Ahr(PMA1eL$CDMF%*3E+X[XlNr
+*b9)J0mTm*EJ"CCRVC"NV#q3Q*Hl@%raKICqRlp[,A*!!1PRQ#Q0b@5L,P#adQ8I
+,'(f[Tqpec1@Aa'FZ1k0&r$jcqC-D9&)f*kBlIBqRlpR(A,K1&@@ZZceppelQXVI
+m0+lkL9b1Gl(FV'5aDq-LN!$%,E*%hkA[9)+M8,D0Ld$KYmT5*EHkIL[#A(+Eh+l
+N0PHF)LR@UcbpDNqrhHlkV4KMcE+J,2Y0$bT,(Da*FVSXPa9+h"%Sq#IV1capaaj
+B8'"C@*2P0&NCP*@9EBaE6lD0TmZ&i+Y95Zj`E6aGCXUGFTH51ah)kA+1AZRTPA[
+E'')TfmERJ+l[PRZ8i,+6c6a$,Y!V2,hLE`1)Dq1+!F4[BhFmbJi`HVQRPqpVi`S
+GPelQk@9lfaLRkeME)hD#1ejbVdC,hZ[DH!k+ITrFVfr6D&XFQ,*Y2!ImY9V!cY"
+KfAkE!ljq8"j5JRY3YMKcj&*pUkG[r9d'S-6GL**,jA*j1)J,1"@#2L821$6cj(T
+j40BSJIM!STNR9qXPRPlb$c3i)'A4A!h5IM3SMeEf,GEeYQmAb6*C+imTFD)[q'q
+6aq8**BmlH)YNXEl&dlIXl9[FIE*pZeL@bT2bP"+FNV+CEjDPqQC2hqaZJ)E,rDE
+e2Akl+R(hT5`VkX@HAVb[9k(-L2EU)Nm[fYZVYpPHA@Vh)MM5*aT(%PRMN!#QD"`
+1&BdEYDbIYjd-LEFm,FmSJAV0MT+VCE9HU'pL[G#QZ-QQH!E[Xr+FNQGpj3"52#M
+VP,LE9,E&p3*2,pLlcAm1!0CVc$EV(FD(j#&pSlk"pBd@i`ff)20Kd1Z)I9jMX))
+b,R,P5&qRVf@0ifZXm@F'SR'"$D)%(,e*J9Bf39mM'q3&H9&HNTGCAi-MVl+"i[A
+9HTkq5PrTkD[rZL(RkARl6aekqUVpeb!pIH9rhi4+NKHS5SUqJK,ejISbH89HeA-
+pZ2qc4NND8e1m[P4HLp-3%5I*De#HkcQHR[2R189pQ@f&9b"IZ84IV#rbp#9rC2,
+daAZ1(A[kSRrFHdq49h'cCV#HV5r8Xr4-IB%qAjqRcm8G[ijk"KfYcm&Pp4jk1UA
+VXr8d29@I49P9p'ahp$qJ,icm#N&!ciVFL3cSQAYrTL#J,pMlY`)"IIlH(a(`p(R
+rU*qJ9K4!UCad+i##1BP4!%9c'TmiI6BmHYTHF@P!6ieSEJ+SX&2P909cU@"mqKf
+CQk[456@SiAY&VEE-Ilpjfh&"LXpX"HX!hdSS(N*GKYSIF2KNIV02QchAl#DmccA
+l[0NAAhj91#P-+@'U'UCU3DUH1BTUK+PQkc#Z#6@Ja((TG`bM!`V5laLFZ5!j18P
+HY'4b*TfScp#Rbq[bKMl0Jh[rh8jpKQ94A!e,%@MJp"426rQ$'P,N$4$XUAUbRN4
+RkBND9(RU(hH-@H0UPb!2'Q[LhP1r!9dH15*F9Cp'S4Tdi*V-0FP$+"&EFC,mc2H
+VNGI5YXZ(VG0A$ND*Al)P,U-CZP5I)Qr+@lV%JrXrf$K*Bj-CVi[Pl6L0C@Q53#j
+)ZXM64IqkcDTa(#Y&hN6&*qK#29k2d`8Dl$KKEdj2&qjKeI&rR0Rcp,KpGr-mAE$
+R!TqRmrIF2Nb4Yc"9M09MG*l1e6PkY!lVNcdpGMmG"$6ffci0HcT[rpQpJ-k0h$d
+0k*c)*G+!YVHIaKIRJ)V$D2bFBYcK,LV2UfMm&*mZ2AhbAe0199e#"Dh'39[rAR1
+3!1MDp&@CmdHm2h,%m,8MKmrrS29KkAGQeUEZ#dGmq(iK5(4mIMf+El9J8E2aKe+
+9p,Xc&im$4AShTEq815jj'09DA'$Giq%ZJ,[+6H-ETUmDN6R-V-Zd-H-YIEjXZ@8
+8[DP2dLI+4YQN4hT`rrFFTh'[*9k2N!"hiM5%&dRbMQ@BiCiHrUrEIKThUP*N)aK
+QQ"kUKqJ6p'#GlHPKHh0kqMq10hNDh"PEThVkK$p@9jiHr2YDa02CHbEf&0Q%[d(
+i@!r#qEb[k9XpN!#qemIV,*fT-b!k6S)+Z$VN[BGbUKl!4h"RlX'pZ$IhjD&@6mQ
+j2)D,H6V2K,*Y,Pr"er&#[TQAm&+qNlIVr[bclXFl@%23Q3JC!`5+dK,Ep51aDqi
+V[D@IlS2ekNMG'fZq8l#K1dXI*aGM%h5Yh+"lB8Qc8UI,`r+SlKP!HD+6'a3lNFR
+0hNc5@IXQYmcBj*B4QG`#fVpl9&`-'[-[(IQ$BEq)MYA6IIqK%[0dRphk*%rhrN2
+qiZRMrNXdi1PHrl@JpA6kIqhr20hcMfe696e5(YRmhTEh2jJ`kF12F*`a-I1C6eZ
+$EMpllr-[[N6-9l'B9CNhB4LeKjGKipBj9@[HJ2SZ#%2chS#DK+R'HjK0-CU'U6E
+bJ[eMQHmF4Sh#G"$LkiDTATMUqr%0GX9A#90$%$U3!$A#FUmf8)8X8YL0ID6f4Gc
+#-'l*)3jfdeLFMrjJS'X@*J3FiU0V%80hPiqZCITGQ@&U0BS1E@EI-,@'hHEhGd%
+N1YAhhK6aY[@p#b2HY2q9qCr[SQDS5VX`(9CS5h*iY#4Kr1Z(RGmRB45*bmmF0`R
+c#LVG2P,a)b1p03lGF&5NhcT%BT)@c`p6apE0dZrf8b1b8b6$dEXbG)jP3+FF%qQ
+BBhGPk",0i'F"kUi4p0dL@4B"8rF)YKkl-[IFK6ipNU&AY'E!H9`%EqpG@I[XUSJ
+p@'Bcp0Z9SAmX`k)`IP)$'@"Rl-U3!,QVCRkQaFQC@FRfa`J`F!9rIZFG(#'R,IE
+(F`V+lHNZc'bqS#[b(a(Z[h6FX&ZQfV3*99bB$ah4p[#dYKf28UTEdC4)LYKI,C6
+YrNNErjpXF[2'&"6KFU8pGP#59eTZrh1KX""h`hC0b!l!j!+)bI!(#lB3*B9Kqb-
+-a5k01dU"%`@U`2h,3Q33aVmcP*@RKN+$lDqCf"VkIchLl`53!-cqdS+p*qPIG-A
+b-`"5YKGGSemGrbDKqq`rkB4S84I)Bfq&iKUh8,%ic6M"E'mE0iRDaU9eAV$XPPl
+0'lATE5251LqjdAT$U@El(@['KYV'K6VRP"59Gr[5l'M5Hm'b*KFdEp5hkjM%[X[
+0MV%bL92LQUHDlc*1bTLBJH0kEB2$,QRE15-cZ`r36P[5U-@S8("-BNPF&lVekC0
+EY!hH1MH8(8TmB3R9DGb9kN4mpH'V2rL5YM9#SqDIG1bdl-`@4@C("D+-e5Dl,ie
+YCC'&5`V,fhBZbbNT,fQmT*9&0lBDiS*YFBc,AXPIdZV@liCQ)Q0j&!2LkYZX0Vl
+A`(4l1!ZVa$ip-TVkRLYYR(98X6r6%6P2kdG!JNAaq11I8h'4CJE8m6JE),J[%)p
+IjdP-C%UT3G2`mbeGZhDMd,CTde*Q8YI%mbJ82i0#%2#Qi+KN#M6e+I'*P*)B6k%
+8r%e+L'PD9fM1TX92abpip!51h[(BFZ'b3blfeQZ"%hF'r6fRa4m(Z`S@p&-K3m@
+[ec"q,bF12me6"ArMBhrXTa%@QPf-@629Q-hieB0YH,IMhB&A)mBJ9L2($Z6DAJA
+aFFL$Da9VB%q$(aJXMKeiYe19MlG4h'2!L@-hEXrUEpRYKp-DZlpYPN!U[Z6G#C*
+4*pc(V8Lf$Rr(8T%JQB,VGLAB4Z[@`aP0B-14,jBJ%Kj0i)Ilm5k"$Gqj+CE!$pr
+N!0J%aL"mijSB!Vea"m+$`@L#RHXf)(a0,-'1GFRV%8j"r"q+6C!!6'[@)CaF`Z!
+'fKE%K`03[Kpe4!)ElXFM(#PYq"SrhTEC*N$iHYb-m-2pUL!FIqcKKrXP3rLkD$M
+Yh'E$em6#0qfS$0qiB9HiVH#ZF&["GhG8K&2bQJhENYI&`Yf2-Hb)K8H59)4(Zbl
+fGH9T59fVKKURG%rm-(lHp$RGZMB108RT@HH#CLR03`fkdM5HPVbQdHBZfkCZ"qp
+SBkDD,VV4MNEEZfcVXVR"'Tp)l*[X-"RdP28'Nhf3!0[@E,"pQ4`-qTaJYQh`b@,
+RZcYpNYLC[0'@,YQf'AV8llrefj!!+aNYL04!YAk(6EecJqqQ(4Ym0dJS9Y0),Aq
+)6(,fTjNLI`HLe2q3!$)I9UXJFX`8#C43I5BmJD'E+3l6KRhY9H3"Z$TI$U82cY(
++6XKbSP23VhplaAhlAe!I4bqT2Xjh*CIPP1'i1%fhFalXLqdm"[ZDl25Kq&FEZVQ
+XI)V9A$cF)l0R1[c2GXrSD8HV,C%jl-[)(2DcQm)iS5#Rd"lDUiEGPI8hK'hpVI+
+K$S"pj+!q`qhebZj$m(pAGR4e9!C2hb(A%IlH!lG1'm,hZIAC1X#A%Tp[I30Zjll
+$lUXqdrS'hBHiG5iZBbjmq!F'JhYM'FJa"1ScJpY)'8r$YphKb%5qBGLJqVih%2G
+#*'i6I,hT5Yqh&6PQ1er@jiMEl(`$Ym'ha2N'(3(I+jqXXElX9I"PZArcb,CBlh+
+BXPq$Vrcr!3!!$3!-3fKKEQGP)&"KG'KcE#kj!*!3p2J!N"#%!*!$lF)!!#m,rj!
+%39"36'&`E(3K!+qR+)f[TbcC!!"a+`#3"MXj!*!%*c`!N!JT"`i!Cj66$(m"d1p
+bNU19I9jq$Z`kFj!!RF2mI+p*CPjR+r0l1r1+ITp0[0lH$`8fmr1DfF"VC"1cUCd
+K`0l,lqaXB(2a(P"iekp"hhN,bmdk`MZb#IMN3$)!b81#JS@!H),A2,2c!)53!%+
+)i[P#&1%[jaJKDQ3*,eCB@"BV'CYI9KV'KVLB9XG(ZSq,&Bh0MqE%bXD94JQjFf)
+PCB2l$+Q282Mp%[rPZleklcBZFXbq@TdLk"!KU)LQUjRU0+eQ#MT)+-4,eHRU$+e
+1&l)i[&mFE2'$,D*+PNM,+biG&b[*cq2)i$#Le4P#6N5HBLT4Xb*UPSL)e-&PXE+
+#A!'-Y$V0P6@&MPHce4bYCVZbTM#!0E[m!49raiDRY"fA,$iFpmGrEij(LdA+[&&
+mQYpNAX-"NlX2+Bk@6#k+PSdV+)f@jTB86#U,aLC0+Lc)"56&4FfMdiSR4bG1,Lf
+,MLNS`DQJU,3-E4EYLKcjJm0m,G'0H`r+,md[LrGDLaDkEm(%D*qLXH0L%k-YSQe
+EYFPUeD'GeN1f&9PBPPp5LVVc89PKIR45Q,T*,,GX-ZUE&LdZ`U'!JFQ2PNiV,FZ
+I'%maTVJN@P3mY@QdH!b++!`6$-NYE$9N3R455I(ir0bbdTCk--$)$IXrcf&59Kb
+043X,J#$5PZ6R&TINP8CcLi[+BJ9&"89M`bU+#r2#'U1aSVc`3P(qe2"#bfLdcaL
+1FLe4B0LJ3I0S39PdDJ(U(jdIcFX[c#r,cd1DE+3YQ9T3QVrYHK`)p)QS&T+B%1R
+#%jNi4j+0b[d04X1r5I`'Gh*8,1cF5FJE0b2f#Ijb`'(fqeCULQLPXMV0AhapVmE
+e@[6Q'eQGEVL'Sp'@p[XlPSq0YP,46VQ6LXUkIQDh01JpIh'$@BhVpHdb*Uh[VAE
+,@*SL-eAMP[EV!8F0Q$cJ-#&D4BDIfkV6J1`KI9$YM"[U04N9MBa*Qk3kLaZI1VT
+*UmL0&d5(400HZ%(8U0p&e)M(DL0@HqLjVDT%4mdlkZ!C3l+E&0NYj480@'D(p"9
+MQh&PX8Q&CDdkPHC1+TY8riCQA0hBbVJADG@*-CdNEQKfipH(Cb0M@D)'h+[0@IP
+qVd%pHi8G-D02p`%0`mJPI)m$&EVQj23,Vb$-0fL'%#RJb@1M3Xc-&*,5"&'+5%N
+KNCBQ4@B9-52D3(6TdP9%0mqBN6PEG%NlA846CSSSG4'C-LSb+90NTU5*c,38%Fd
+Nd58UaB`ZG,+BNA++&'Np8%I[&*&fH*T)bFX8DJAUP-c,U*[V9cKA@#l%p$8Jhme
+#fZq&XPY%"@Y%"ULiRV8c1PZlI,UeDd$0Qr(r([mYq"[FXEKVN!"M#h*pA`(h&I*
+)j-0j"Z+SJH[BJ[rhSX+(Qi9k&(9+e-[eadN%AmE2Xm&Q*T!!mLpMHi)-i#5f*YL
+mmVeY&@5)b-TY#6D,PFmKQ%M!ej%[Q5"q2C%J["lHG`RiH["1-N&ir4eA!#H`&YG
+A,dp@B&C[`I9)**%J@,N+ejFR%faCQI%FVSY)i"*NL18VF9fiK*&9BR-%Ra#Z3Z#
+)"(`p[)rV5-RAPiIh'@C1J1[2EBPI$e("pCAakb&NZ,ibF9d%QrRkmZ6eGlEXZ,j
+keEEVM1#fkicJHe[+ViZ-jDXfCka-AZH@i#3r0h$jp86A*EmZFNCkPdV4qTRGdMD
+Nc$hP[+jGkNFEC2DS-DY4CZ0SR5jLKTb4XEcHQXkEThm2hM(@6VHG6EdYpEl[[,R
+cQMV,3b,KIiDVbD+R1"V*#)[F[(`9pf9'*"*bJYfm+L5,i,dJ*)NJBc9$Pm&YKKi
+0qqqjcFL9J4C%DP6eh"C1(D`+`f,,UM!-%NTL'XI5Z[%b($AMikM@rj[+R2Nd@U"
+b1D0MZ%J9UA[14X3lI)e3'$[i,d39X83XT5I8HH)NR!1F`fr-T&kadVbKA3G(@lG
+XRFArG0a+i4P%SLU&S3,V"X6NK(L"Q*!!8R"c$j'UFD$ai58ImdB&2Y60%VSX0lj
+VBB$$X&Zhp%0BL`T#pJecHL)03a*+U5JmM32[1d)!rBM`aCj#(p$qd%Ap#NDAa%U
+QYEb2)5EN*!c$@Z-3TQ1-dL1BNj&ZdU6FAp*Tr$0%TXBK6!G!4D@)U)4Z51GdD06
+"ij!!-j%[%rr+BNq03jK2!HSU%@5V+M)BMF%&%l(230C%`MhaVbUUD4c#K#PSLHS
+48Cd6FS'r*Ub'I`faPmBK6)Jf%M8MSLBM8MVZ(rRf`Vq@U+ea#21PSRrU4%3G31@
+&k18A*R29aVqZ$E5Skh*93(I9LiKkZ&L0`GLkM0Q'ZX9-4#L-X%DSVh%)HaUBB(j
+Xi1031dY%bLCXE@P%Yh9d!pI4%B$9N!"%3a5bYfLNF3K43,Z+aK(410&$3bEmh+5
+0m0p(00%iK!NefVPT4$40p0#[#C[JhdcXUh%)%kDM[CY(42-%#3bCX,fTpm@rK@L
+TF3M6J4#`Ga#YZ1@f0[@%4,k@q'H*eKU(-&mQq+*04,4*N!$',rPDilqIf&rM%1D
+V"2CS'a&Y'BlbPNkQfarr!qa2@KcJdP8'cZdLSKe[q)B9P)j,G192R+`qrZe&"ie
+$f*@e4%[lSqMSim"G'CmT`NNN'3dR$#dkZUkX"GJ2*(%J#ZPNIp!#Dk*$`f[lLS0
+5"AD)f"!F,$Vl1&E1%K8`G"6&*ZD(J3%)D&`1BDS,,,T%"2BkSR,(M[f,5r*lB8i
+UaGL`ImX$1M*NUD)cU[P1G,AIqMKb0CK4A$8)Z'UkZQVf4V0hLiKZ[e@cRk['IXY
+Gm!0h33ImZiXH'JFUG,11rFCq,HdhQ!$XejbL"rip45q0!aAJIL[dkb'LYmC"pBQ
+Rr-TqDEr`l&HL4XYBrT5bBL``LbBA&VSapMc4$*qdAh,9Ac!,p8l-2$(4K`3Ad9F
+FUR'JN[MmdNrdecJ!Nch#4G`!ZeQ,!BQ#dqcR)YYqjZ&BSb9QaZ,#iPJH&jNBe@)
+J8bfb"I(D&E1$r96NH$LNH$b#DT&62V3-M)L"B)T)afk6#c!@$LdV+#ae02%CY`"
+'B5hkKb[J%1P2I2Z*U*JPpTJF*N+Q3r%I*!CV(#LECbc-+%2%8)e$#'F'*T2$a$#
+0!q$MH"@lbAjX2r,YTT!!DRKG(Si1H38PBG30%Md+5XKqc%"ma"J-+mGJSfmhLX`
+XNCSlZB4cmKRCY"MUF[JLBMrdlBFlF"U-rq&LZ-C"(4jZ1Jm84pJ2a!JYMR$)0!G
+lEK!MlASI4elYPr#XlbM3a8)#*$%5T4aTefPaT+$450`#P(#8'+9a#$Zf"3MqD2Z
+q&NF,bJh[Ck(94fXF3S!`-pLe[Phl1iLMA@qf&+hX'XqZ3FrQPKeE*Zhlh!@MA!%
+B)Zal[Rd[T%)-m0c9BB#jMZ`klTVe2$Yrm(X',8Di1QU*U(hAYqrqClJQ-4bBjpT
+hY-KelG-*B1ECe3,&j,Rfb8(V[#h'f,Gm(2pXRc%SCDap8iZaVRd'SLA(L3+03ca
+qQ"J[*QJF`RBD##STY'pS!BEQGZ,i4&'NF3K4(#J'fGGpqrV[l96NfJN-C9rcl'[
+*GRU$ffQ#Z`bk%X848B`E&6U@6@MI-LXF&,3SF!@#[ZbV[ReeClZpbHhf&VIEkTh
+YPZrUk#akf&GmqmVIFbrCGjL`HZ%r54bMF8M1*LrEPk4pQBRj*8ja$2iP!P4IiQD
+6r6$kPBR*'SH`*6RPLf++IF((mFq@R)*#TYT9@N`YTpRRIIYm+#*K--0K+ic`Y%8
+@Uc+b,h#26'EDjqmK#%#QD4c#i5C&2#L1)h%F#MYHR+"a#)HA&($cFq*%Zp,$-6i
+Yj4ARPNp,QI(Kj83h['$4ECm9*hNiT%"H`cG2FK"KAf'ImHdcZb$#`T6%#IK2&c-
+d$Z%d`LZ-Nm8T'JFU#Z1eaDPLTXC"YNDmTUKYRrEXdkJfTf[@IPT!CF-FT((c02Z
+8&UFj("'h6pSRa1QHI4)ipZqI-qL3!*,m-Ea`Fb[6'B)aP8J"T%l(q2Ui1%2-mR"
+%CB2bFcA#i4L0H8M-*M%E4FfaMfNaa`'4)5VE4chlD"`)XSpa)E03b!TaTRh%`a%
+hJE3@CcS@`lC)R"84Cr%dec8h0lqde+dThFcl#*2'8`ci+H8Y[Ybhbm2q`8`q#I#
+9KT%FMK#kNF6CiKb03pJkpE"219HFTh%)DEJH&M,RL`Xd$L'3!29%IIX`fBHjaJX
+F*29&!rZ3!'FI!P4-FaUcF,,f"hhlB&Jl*[KilBM%Dcm(Y9pS(p$L3MGY0!DEA'6
+[&aGVFC(MP`2%[H)5JJk$a+9LVXBK6(3!-PjQPiR,YEK-T"b"'he4c"AL5RZIZ%S
+M3$h$1`2&eH)DM3-93M64&b2Z2(Z[&[-F+h"m[PLJF3LEm9$4hplMfAZ!ib63M"B
+,()iBfqhG[VdlT(e-()aM''!BTEfA@q%D4b$p-4pGDqr5iPTA)XFALN8DKl#8!5,
+(hZRE1hIZ5KDj,2fa#9MUfk@L@TDSL2(#,@E#N!"6QdPl&aGpTF0q#1MV1R'pA@,
+[d!M3`F"k#)Dr'm50'SF3Q#%BV@qbYfYaN`1'icH,@c31BFP$-IcFjY[EGUjGER&
+C-%,C@helkfjJEQGJER6%-!`cpq+)@!a+#d8M@Pc[f[SSd-kY*'l&TGX%3,R0FFp
+4'#[Z%%Xd$J#Y)Z*6a&+l@)ZPEZR%m6Y6aCfJae[%AH*Z$mG%VplPF"k&bISHHl-
+@pcLF1Ak[Z%rM%#*iY"KYEr,Y66Ya[XpP'BA"rNEIhVJEjjZCU1m'%MH)CH*q$mF
+8$i52U@bC3b)IJqd$pRSY(R$X`r%(lA8D("FL`r'(a--DKj!!IFD)mAD4CaFPkhM
+BBC'2BAZKEaIZC*rVQ2'[Cc$Z"aMALZ9fJBGMLTGG8M"@3f35JM%4Xq-MGVi@McJ
+`1,l#cY0LK31$iim+c#@21M#+4)QpaV2A*1Yic)'3!paHlGZVGi)aMm'!E$,9,Z$
+)BQlj*HA$`&@q[5V4H#jcI"BJF6ZSi(&lT4D21bUB"SCi3MbTF3Lh"G-`%$iPRYB
+iK19-%mIC+halaFlC3SZRhEKb(%E-CdJmJr+HY4JARRATMa2(fmYmHpRrS'%[Cq#
+H,!GZVQrRrM(&f#Yj5&l#H0r"NIXipe81a6-`PD`8cfNF3K62`0cf[-!!rVbV$E1
+L[G5hPqj#FC9$F4DQ[aG)[!!8Al5AD2'L5cp,c,BAqrELhlZ4,04V@MaAMZ*&[Ve
+SCk8qKUNrZ%k,bed0(F6"pN,IA[MhkTM%A1$dNRKCia#1d4GK*VV!RLpHmH`&m6'
+DUhEVJ'eMp2R-Bkq!ami6V`SXFXj,6Vq[ZSRL%XalVdI%klp2[q)eC$jA['(2mA"
+-$1"[Z0RKFSaSEkD+0j(LE2'@2F[$-6(p[q@kl!TaP6f6l*R-AfIai4bH@Pl'rff
+a@Z-3JVP3,,&cl'caMQIRr!8Q0$5TiKh81dZm+plcF%b!qDi$mcV-5@XLBXhrJ2N
+H-TmKePVX(Xj)JVR@JAN64UIh8mAl5('D@'GRHMJQ`&cRQKA$R6h9YkIZE2K81j-
+42Td4AShrHSYYbAU(m&*aVchCcV$62AYb(1&"qEebrS%`0MPNTr2K&0k,hIml$fP
+aX81NU@KQ6r,Y5AqX)Z`$c&I6bR8m'c,%"UUEPUKEb2GiGI5r!RcGKrA"IU"5Z)-
++#m18K(emA(D&aH#['@rVkrIUeS2Ap+Qh9qeHR*Fr,&C58J$T9TmH25%kD0I5VH$
+rRbreLeXhqDNX+@8NiYVT2Ap18UerIPP*mG6mNJQPdDd9SbqJf%h&Q*dk"kKe+`H
+YBhR#VD&YZ6[q$h)9X55i)6CQNZXlKCej"bb#*k0[VilNM)Y"CG`QHN4a8Ij[8+C
+$'VF2H)Z,l4rMKG'1lmqQmXTPGIp[k`L[jH$ZVITNpqpj5&IZ'a,-ParB%lAiS(b
+$HS)pAYS6H#BlRZRT4"Eji'B'P,4B64iR2K3Ea8ILBl%*FZG2a@GfQMh@6T@iL-h
+NKm+c8qaN@fC,EBNpaNkbaEE)6[6YP2mXd(dlqHqYVfr,rKkI2&Zk@f$Lfj,G+el
+I(V00$Z(E5IrFPNX,0TB@BlqdD,adY!+Pf%,aZF)K,9emcJ6Mial,h+TM)eT(e%Y
+(Yb$*"!'Pm!44)4hLb3UmVfX+139,CGU+GZPS*k3B,lj31-Kdm38,PEp-&9pL5LQ
+!m1FV(mIIpPkTiLZN'#HkfE%qMVpYCP,Y@%CUNkL3!'R(L0ifhqD*Vm8h0YG$q%m
+j$NL,N!!,EIdei"lYfp'r,qmca6IJKCJBD)qfSqa4pNJldSk`4pMKpR"4l1'Ldp4
+ipZMG@KcIMYV4I8IpVAcalC(rl%r2MN5j%iTc#cdl!T(FiY(M2AX%#SI--cqhU#b
+r[2$-%'E2$SmV(RcJp5pkU'4caHKQDpDf'Kr"K[6Pl%FVLiV0aZmV8RUq1M5lZQJ
+!8BS3)cliX$!LdLD-Ub9%XmFrDMb[dB4pK6FLHlMGM"alF`lj5ij0MFUcI*D4$P*
+&R`i6NqeKGUMi9RaRKrJ)r`ZBG(XBFmGJmEh#!Gca2DUdJh`lD0IHIbL$rbe'f)%
+fafEE!EDrlHIEJ6[cq6CRjpMTfqaG1j%"[`qd[ZfrDeILfhkrVj3baAFBUcEB3fe
+IfmIfYSH)Xf`[fp2fX0eY0p[9GS%Lrf#af"jN1pN$aHZfSeKM1hMfd,JF`V0pGmX
+S20XR[L$`E1ri(X"$L@lGS'`[4'c2hIS&crD)lqipfch*2Gf5h02e,qlT%Yr"qVE
+clr6Z!pRI10fc"m9hRClY&&md+U#IkJ(qIbe@20YKpe+LNKdL(Pj6@GcIE1fmN!$
+QXTZYDlDqqB3T'cli%)be[RR21l,(6rQSFFmP),0,jSriH"1),-*%TUU,N8aZY29
+1bV@I0Pri@I1d1U,Y`XqEaf$F8%IXmfNBUR3YrMKAaVNbcRZQpl`VHm'L#9-Dp9`
+bA+Ka`dA&"GH'85E&Zl1EEBL*+Z[@Mjp5Q!iJUSEaDZ[@,dL%J99ecR6X82!R0(`
+CYVhi!62VMa)"l%9q+&G3rd6L*pcF)L$9hH)N36bf'f%e$NP*8$Y3k!'qE4G1VC-
+RjFA+mZ1+FU'(KZ%F&bD`2NPTffS*ENpX#rIhlIiK-iiVRTM2M1dLc0GNfr*BG3$
+M!Tfh`f@F**+%3T4-d9)P9)j+lL&6YG`MZGDaqbN,TDZ@UH@eY[&YQj!!8d[bbbD
+A&%f*BI[[3SI&#NP#,biVb$3Y+cJ98SV)Pa@PTf9&S3D'bXNmkFZ)e&VkJYM-`aG
+lbh5CS6&+K2"Sd9"QNS3q@eD5PE@XP0$h9,HYjCifbl1Yrp3T5HLdHF1MaCkfPDc
+Lf9B*RC+XiKEX%2,)UVDPPP@GE)EMe@4e,@(&`LK$0'aEq,E&cSl5XRT5,'bEHlC
+j8X%'1aHbf*f3!)4+ApD3!(YT@F1"9d28XI[DCVDTCrH0-f,rf)6mRL8PrH(1X(9
+0"liQfj4,J"TFeV40Y+cT5UJV'YTpE'2Eb,2la%[SAPMkcdeIBbkK%4pJ'k0PA!l
+2%Xbp+pLpdC!!FY4j@ND%'K6[k)DbPQhJfBEF9CKqmdY+SZ@6Ja[1YB3Q2F%!pAe
+E2jb&N@PLkGM`h,pd,0N'A#m-",L,Qk22Dj1%6Ph@NA8eb$K%XERSCk1bRSak0KS
+Icr-+LmI'5LFi#X,RkUhRY[$0aB'b[QbJ*G64,Yj"0T4lD`RTZBZhNieNBbfK,(I
+aYR)ILDlC*a(I6cD9U+GT)YjDlLZED`QPZ)ZhNLdNZ#!Z''mZ@XK@%GQ+"HP$i--
+`1Y6J`VJ"$M'XLT%Yb`@MpAaEEaG(0(IeY"*C-LXLXeMehb"D%S-2N!!cH%$2B-N
+(!6iA"A%l&p9DY,&e29XAK!*'M@VCa0f$iYc@m5f-!(jY1LdEZaaY)C@YlGRDbGb
+3!16c[ADL[DhP@Fa(mA[!NI8k(84(fGV@e*!!N!#%3('m685fJ9bllZ"aaC1"HKr
+i@16R6TK8A&"8&Q)@0N0RKNcDQYM[`4T(fEhNIR*rcqk&!NHA&B&P-6$`KVi6A%I
+DNQ`,!MK!YY-b,S([*!k5l51b25"3`r1GX&Qf`lq$VD&P"jIN)('`l"L4(GNbBN"
+aQ-2#"bP9lSq#UmX$E6A29NI"H@-+bl3md#AY,RV*6K(CD@YPUEBDPeFAri0X95d
+aa,))Ucqik@$Cf9D4AE3m1(6A`Th$C9IC6FZZ6RA6A`b4hHfH@N+(lY4K3f32f92
+,(NjeNb1'f-UHVFb`MbX!#K#MZl`jXTHYT'8[P`GaQqRC61krdN)-#C@iHl"!eV*
+E3ZXk6"i5NBGXa8e,G"N6iJKaP1`YqfJ*J6VR'J&&EiDbF&[4XNmj)kIl0[eI-jQ
+Y`ZQkZ)UJ%CCpjD%D24T@""@deFTUDcAN#XQ+)Vk0l+kS+PINPIYJE##*9TApV+p
+P2i%IDk6'bIjDaTAUBk![pRcVlDl*j`9aJ#S'b'`Y"j3[L#[D0'NVFYYJf8N5)RU
+C)`GUQH2Qk44433k5Jl8F9$j29l#TGJrI9[L2R"eU0l+3!!TS#6@k8mfQbb&bU*C
+aXA`+VKiQKq(JKXF8iF[$,DEQ`efrFhbi99T#MXdm`I%Mj!JYMh$G84'l4I)XG,B
+B%SY+Y"b4b&Y4MV3BV5&GGh99P%GD&(YN3TCEd9KjP$'HX4L8mQ-PT@2'j*@8$fC
+4%80Fbk1iZF)Z*!-$2-Rk"'P4SE5+$bN-EVP@h`5q#AC0,G$VadGr15T$MT,[rUm
+%LSlqAEX2hUlSB&QVU0#RG0c%@,kVpHI[YY)9cd(4`EQ161e98*5ARa`@rmp(9bf
+Zpf@AAJ0k$')NiSS1X2,f6`pfaMqpX"MMDL8D$08$UGTaS$TZcp!a$X[rEU$2q,0
+&rSmq)e4Nb)(i(beM@X)C)8kiCS[j54UiA8R$aL3bK[pSQD[PD%HiDD#i2*Q[CGa
+QJ&2q+-HB(hcMV%V#16&K`HLLF40'NV!DN!"McIGDMLfRT1pmJj8V0XjEP4Ma@+L
+q0pm$"J0l%#fKfdqXX-D4K$f",*!!il@%,F!N9ibF3-K!jP[cM@qq$H'!2@&*@@+
+GjU+*ECU"U`K*Z"V)3MP45c5!BjD+XNJ@DeQ8m2ZS)#HCVc9U$"G'($p'JRZ2566
+!(ZBVmkAj`MGIrA[L-'`kBYKd4%)I&,F&-TXpXcQa4M)`1G(SM@4lI1kEcrrBlU%
+#NU85mbF'4mE13ql*FJS1VJ"2q1Bcr2lZ"#fRP"ImU@mq$3[QYARaj++b-0+G)b6
+,82"8HDb@8eh"kD+1R#D2dh+D'i$545ej[$a"5rJ,Y-15-N28-Tr)%q9*R[NN[UA
+@mN4Al*kLUYRN'qFkmLFi*lP'V#CUbZRQBbhK(F"$&-GRQ)mdMa"F1mG2PUGSHE)
+E[QZ)QQDMCcEbaMbr#-Z5Z0+qQUKK2[60KlY*4aUBR%J$Za-Y6h"Ci6eN2[$0"lZ
+cDRPFH4YYm-d'860,q2%G5TJ-`4`1KX3QMd8cR5TRDRQU%m[A&6&jQPN[6pIb0-G
+d,F9)H3E*-j!!D*DFVH8Xeh8Y4AXj4jkTj4a(35h&!@DG2-ZmljYeredLRi9bcMC
+VYB56!+r"S!Z5jmKcY6c(`BHeP9RMQc@l"X9cNlBRjMhI[*F3@EK1#%11mFQXCEj
+MUa3*9i4%DlcVQhF61Gd+)!`0#N-NBEdJcc2[D!P4+5pX1U!*cTFAb![P49UHlaB
+f(83RHE'm4-Z,(4I`!ZY5XeV,5a-+f)lQEGqm[DY-D9Bc+TFi&ZiS$M4[+326%#h
+KPF#YeeRdP(0*3L%V,j1ADhQCDlh1STZm3PkTj48*$j%ZjNhI[,Q6-E@mXKch0hc
+caVpR%RNj#Vl+[+lP9@k6dKdiA+hPeBNe9`rcQM+[F9ZpcY2,KIKI)qGT#9m$ESc
+HiP!jAbl3%PB*A(G[dFHmkTYAGc@#PM"2i0,kL,lQ&@9HXCBNI"INYHCP,Dpec6!
+!qkq&*"ILfL*jRCD,A$--%!2PpI)',H%@`#8-%0RQ*@9HBY(!$H@i[qLE&rq$1q`
+3j)hQ"5eK5F#i$d,*0fPj8p)[aUa5CKA!-E!j)326&5d[FM!-!d(F,'r4mQCS3X,
+i%A+a[&A,a3k$BH*`mla[R([+EcekUbX5GN6Q1@8Ja0BblU2!m+hdcFSr"L)$DaM
+IV0r&J&Sk'f#fhM$2qZEC[dF#f*[)fq6Y@XD0&NC$3('(A+,P(3kLd5,A2+2--`a
+4Z9lI21fETrr6B9$ZbkAQ+5eKdT!!f0(GUH@GVM,Xk-b6bN",6`Dq*#6K2bc[NRG
+V'4SfZ0h!%qCaD@#K)XhMR1*Zr1q4pfS*$`IH$84%KVa2,Y2b[[,G`'2bI[1SEai
+6$E*%aM'6mdZQ`8LaH"+l0jE',r3U,XPf&dMHMj)H-#ZdI+!Fh8GmmmKZEfFb+jJ
+4(Q9'@"EI%0"$mN'5-(#3!!r*Kl9mU"c#jHCKDH#2+JfF88JqM2pbqBKQCA'KXj!
+!03r*&G)m"$MP#VLSl"AY@MSK'KYG2"N1[Z0L@)BAZeeiD%T%%NB0mP(jQ*D2*[c
+!Y(P32LkIm-b$IiNFB+$!ZhKHYceT(Y!5VCGB[cd9N8p"XYP`'0FEEq$5D&jak,i
+m0FBEq6J)EL&[S-K1P8m)CHkA6mYR2(0rFL(r0&I*ESS9j,-'V3PI"9l3Fh`P5GJ
+Gb1INmeU#p1)@C(*94+i+ADMCFM#qShmHraINLeUqN!$d5j3[4H4,'2!V1Y1qJX3
+krdAmAcEhDIPbFN-XAiR)9`"#5VGL$*+FaF"m3CTPM0Sc31eHqDUjac2h*VIkF4H
+"01aLAS[)elEP6MAhF*Q2iIqkI%2,ea1EL$hPQr)Y,Gpd%b&8XI*Y!rTk1l'CU#4
+A5db9Ua1'2TA-ACkj+lR#ImIGicRr6XrFQ9MCQlZC9f!mN!"JSk@q@4Ub1*0"@A(
+BK5iiT$JdE52j"V"j9lkRjEZ1GkU)+QD*Z8-D0Tm`E$iKhm0rMF3-[XEa$UHiAEi
+[$I6L%INqjS9D@hQ(p4HaNPcJ"#+BA*,[1QdYrZ[NHLhA1HDT)ZUEfq3'qB&RE[Z
+,H6BijS(ETIc3B%lkd(8EacG'j%EX%jU%c)0"JXd1S%(rMAVB%6912lGb)hq!4Pi
+X2j)IHfCaNRkJ4QEkUBDpd#D$%@f6Saq1Id,b%b$iUIa-bdmG!Y9%GIPj4(l1cPr
+K*M3(!Jb'qM2m0mX[Y)5$-LHU,QV),b2b5jC0(0!H+cp1mJAqAjQEYIc+*B(pT[`
+k)VrH`6c`Jj(Q&JEXB`"fNrc'h1LCQj,-mih,A4Z,V@mMmYXGc(-MPlNHrqmNPTM
+I1HCT)2D42mJIYB3+N!#CTi&S*(mbQ)UKr@2QiIJ@'@Lja6&-3p()A1qCkj2-%lK
+l$84$FjeRVNXbc`h-2$q@-mmLhb`5D9NLKDQ!NIJHIb1Kh6#1CjU)*QDKZ9DDKBc
+aYCc#`ZdD4mh3-mp`LJA3raRi[N4`G3I2B'#%mA`8$4rhUHHd8"d5+8V4"0ERK8`
+6''6Y3DPQ2PA3"'GBf1$M6JG+SiUDlE9j$p&%Y##2I%h3L6"q6846-mmhmlELTmP
+h[3CY1N8La2kKflTH8d9A5jCS5jV508&GPYJlAH1EDlEA![dJep*Dl%mC%FVBeVH
+D8Ke`RF6*P%Q9c098@F291bbZNqK+He)96AZkiL"4-PIjjUUr+&j6PB4@U3Y9M4$
+dBMr23CSUZ9'dKiK405,B`9*eUU'TZZ2U(Q+%ZC,fSTUHZI*2VLBS!CQVHiK$U*D
+j3P1YmRKYFlQQfJi)MYH*8"diEQAeq)fXhCX#Z,AG``1L5EML(!iV(@QZ!-X40)I
+Q-UT,p6`$dbj(j!3C&40jEc'BSQDZTUJMFSlA*i*!MaT33df`L'8iX)DL[51dpil
+A$"""Z%H0U,'Q4Ll2S@)!l41KIGbm@8ijMI&[BLl9""'Ffb`0T+B4DVU$bLpPb1B
+bC28!f5A8c&cXQ8X59%jaeeK)V'MI#%(e[Sh+,qBbDq$Ih&bNUEQMmT&SeKE88P-
+,4q8Ma5KUC5l8e-T41FHcU,8Q1-BbC4mT4TN,2(0"JXS*HMUq0e)FDFlhc2P*+Vq
+3!"NKVKjN+Mr20qIYI"%#QBXBfkXj)pb*Q82b`&YYL0S!VIeSIdhl13l*%mHEFkN
+Y(H#CFrrL%-M`Q$2ba&KUCml4"-9G)YlHR+fT[@X8MRH)8!FX06[mIa`5EB`V[#k
+)NmRCI)!V6bSGJ-imLcV5JCij+dNQ@*d`QB`6TG6*R+N*AV9-*K`rL%$,4!G6Cde
+a4pTaBJ*eLF#1rfFb3Dh8PETTLR[06K"&e$e#hAmKNflipc"c0%'pahQ+a$(8-`,
+RZHeN-SFKBdXK1K#3!-fQAQD@CfBRb35+2XjG*UE5)4'-20[*C"DA#EpIkQh1d06
+ENFN*k0Sqe&F6HTA*j!3aR3ieTfZ#45Z6#FIl8Ap0d-`aDC`STT[62--'3Bj-S*l
+MHbH)%me-cma-NJQmJ$4"`CFJNe0pipb$IL16-aKE1(eTJLDEBCQ*k@d!C@XDi"#
+G+FkJR!MPl1JZcHDaL3*2mFdTIa5)Ya33$D4"QL!QiL&dMTKM6MBcT$QC'iUGK`K
+@Y$5BKQL#c)k(8%iaRBC+!dZL#!hpHFR@#jX(8-b!iU)@#,N@KKk2$U0KQJjcNp`
+Fm5%G6X205A5%*SMaq$d)Fm6$0)*'DZb!ir(Vk8Jk5K1%@m`fFm5j0-UFU'Q8dj0
+`r'KcJLD)RhJ5j(L-4QZ+fm,1%@HDihecr2Ba-fi(HkBiKh)Md!0YT3&Tf-I'`-*
+'8qJmkm&hm9V+-mGT!K0ab4c20p-dBB2$8c2(ap"B64"'-33AL%YT("9S'ZFJZ%"
+FD)lecE&r$k-33$%S&m+"FA`%pY(EPhHDi1[+aF&BLbC3S5EBV(*aPiXVc&6I62f
+l1$3X&hH&Z*SQ4QML$X5Rm3&Q2*VL5XDEa2e8C+CS-&b)--H,DC)Q#(NCK*[%EA3
+-P@JkaS&`NlMC62E0j$qHa`(+#XZr'6D%T4'#SQ`EYfZ#+)[,@L,ZS6+DV1%T%*B
+&#ha6jTZbA@9")-9P,49hdj3)6GQ"kK5ZE,LE[9D)pfJU%I41G#bKFipeXpF+mDB
+TTH2SH-q`#p#rCLmiV[+XY8)m6LFBi!ij%4I1m4-MG1+ZHCeCF!TH+X"VFCDJm`T
+`qiL&1P-*-LYc$*e%dcec6(+k#[95(JcjAU3C"Udh`deA($qCm(!*SP2S9%f3!%-
+a%Nq)TfPQK'Eb+Lh*YkILIaTK9S%3LC-m,9E5'4%kJeFdfiRjG2aRQ@*0XebLP@)
+9cBl3l"fc&IXB'@Md8QNk!#ZL1@DLCiU5Xa8m9MRh5q*91M0#CqkBVA#6#2)b1XZ
+!Zk"GiJCl#eej0Q'8KB5*CkZha$YdVTQJ#@DS2&Yar$`kAa-F6RQ'HPZmBmClCRa
+bYS**+Ypl5laY#Ma6N!#FVG$bQZ)k+"jpa[PQR%L(9e"Hm4KJML1J*`-C*TQ610F
+4$T!!pc'3!&a!f"6%V9EIKbVkSJKGp(2$D,U`[,Da[KRlMpTS',#qQ#l4a0SQ*0d
+S0TSa*PmD+(fPBCmNJXdUA8VB`PaDRL,2j%S$!b9TS&)NJR#*,L-XL#jcK,94&TV
+4G!9GkCR4Ia%@2&PC&,C4MU#Vk'T0F%KdmH&d$Fh6"+'4L`qPqE4!dra%I#"G5`X
+e`9$9aI[6)VT1%l4#,Yk(VUFE0&fIL2HN'qNQ66FQiPhTCVT&%d3m,Ri3,DCE05e
+1a$[3EA5l*LKMA,`Yh8&,0-'#e-9Ede+k8p254,`&h89hDi*maF@EdMedVbCS99a
+m(lU2PQQ##lq,0k6lk3&08+#iH$ekN!!HdJ34LB[ASSGTZ5BS4Pam,hU%9QL#rX2
+&Up+Mp*LQ4a2a5[3i2D%*-JmAer3N2B9$)Zl6dr5-*JJdA,`#28XV06fEL#YkMTl
+Ap&`m,LbYSKFdV8V%Ik)Ak590d&Ziq(Id-VfL#6D),[i9[8U[DASe%IqFAUFh0,h
+Z#'UMf%4[4ZK0Q)jA(C3IbjY@2RT-,Z@A56LkJLNMdp8QmCQ*HBEYY8)M#AV0c4L
+ILbrT,A1dTVK!!R%cbM1MiRQN1CU,H-@9r*AiPYk1d0[mAS)S[S5`aEPl%f4M6-R
+IL4r08Cij#L@8a8DM9%K1q0j2`TJM2A0NmKkX1IQHK@"TT'IBLX[G@aRHJlY0UKR
+K'6EQF[FJQZ*l&D4RMX![HFmCPE)[M4RZQq&rMm1`13A`N!"ICG*UFlJQb%Ni1q*
+QQ'H'*B'(S&-6c&J"2*aXUY!l%AU((d(!`%2`9+kYL+1r`U&69GB`KhN'Diii1XY
+GIA[*QQDSEiCZAdD%XLC2eT*ek9f$p3VX+MNAiQD`C`BRX4M#b5#SBLcUb3EdAS6
+H5f$4Vk"S!VIl4$J1&XDaJ)U+X@JS'jY"RKQ8a-*Cml,&LKRS'fIKpGY`$9dBip*
+80UFe*NI6'TFAFC2YQH`N,MPFV01I`BFPLpC'D#d%1'PKMm6+iQK!jmCSY*ElQ`'
+H'C!!410fGkqYE'rkHkCrmKl8I(b[JqaNqRQQAr)H*(emlb$Ca4cU'AEXF[FJ-H4
+lA@82dpFcIC2hS'$NHcePEp2(-qcFjHjGjqleNIe-Emq`MjHl"qGS[YGIjTK$2-1
+ZAZiHp*9mEk!FBRTjKMfqh,ejlYj3HEMTkCQHbAYXJShZ'5k2S2G0$dh[Zqj"h(6
+h6IGI*dCTi)k3!%TABV,Z4ZYS[@IB%-bY!YDj@NE+20TJZQVD%+i#`[J(42"KT!p
+TSbBR!-+e8I44K$lL*8[h@&%Zh!E#)4qqJr5akD,TBjGRP"a0Qb+dL4eDX[R"#4L
+'mH3CDESb%$!R0ChT%h1`CcSR4ra2A1Cm#2FrMG#RjCP6cF&F)Q5[p"PpVZQcF-%
+R*mU6D$0pB3ibR64Y$TFmZ&0'Ap*AQVi-Khl%*p(AjN"0AiG$IaMrKVl9"!d2GeB
+4G2XG2G-a1I4rkqj0P%@QJfFk*)Iq!jPQR'K)6T+Pp&f%[Y[4!jTJNJM4*-6[ap(
+hQQ"lahdd98iclFR!pi[-3G`!H,m1dHIird!rDQ*"%-3hdb&EEfF1N!#Q(DH!'4I
+4MrMr4&Xd352%"K26jDN8N!$4"#d3&cCGRQcDNS&lPbC6[M(BhcIlKeV6LG-53NL
+%%MT)JXFB`IG$%e3r@0[*QA+Qf8p*DIE$RP9*'-EALr),95C2#YG*mGGf410Uc*B
+Y@iC$(f3qq*05@X'*K*Ya*Vc#8Y3HTSeTV4Af[9MXSED,9DUUS"AH%m,019219QQ
+USPCTMUjQ3XUHj4Yi(rdj6LRh'K4jQTbP[)MbrU'M89KEFheRbI19Vb*D366%pCd
+&#AXVhl6kZclhI"4jYMa2kBM5ff9"#PjRf2I)Z6*3kD4J2+Sb9+C@'3leZI)q98P
+90Le0#kdU1G6RbK[9RUU+9[!CBe6QbUY89990+c`,K9'C+bmccAh6I0ZBTZ!XaKK
+F*Up8e50`VrYCjU6J6-Dec*1,9!fePeCi-3VA-Nr10r[kCYrYYHcPDTN[&kUD%99
+c"ji`(Q-bZ8AHT@UTfPT"+i64(r'PUSkUUe8G9pJYFV&TjTYQZjK%+kKpQ&%Abb@
+URSTU9FpP[P8Z-8epdc6dSLSX')eANS6RR*cZ'Uq2#A0!H@fDq+E*AkqaJQST`@R
+lq'DIIh'DiGG%Q4E-5""XUIUUJ9EeAAmZNfqVKQT[dpJddJV#)Zl2CI*Ce8JeeJU
+1B0a6bq6$DKr94#Xm1BA"@3BemYkqfAYl6cQ0NEaI2U5D4P66VCT#V5"%iMT@b#G
+9-i9AAcQc,X3I03epdh"l(IZk1Kk96kMQ%G9m4frZlAVcHIQkDU&DDJ@&%IIQmr*
+9KGFkDGA+&IDmA'8Dq+E"lYl-FVfj5VkL@UXf@N&ca*PIN!#[Q2UqU5mmejX-)HT
+Zifk[NLqBU'pJZlDl+lF+P1VjTYlZVS60R$4X-kIJ++Ef-b#Ar9aAVJDClUrDQMS
+'"!4*$(IPD[QT1N#edqS!edfVj9V9ARA3#X)M"JHkA&2,0l9f[C(,1B2*Gq3De6'
+L1[iX!P$3-h&Ckq9(kN$955YiJR&Ckq8'8p-h-&rE@4CN4ec@"VP4(444"qeS@)L
+QZ'%hbar8`DUc9V!+iiEG,,p6A94AVEUi)U&+0A[jCUrG$3Y6-@lB,q5hUTX#8F,
+kLc0r+Eme0Aa6)i5RG&bF6K("!"35DRHAj`[jTDRZ'dKHGlGZjr,@VHDEDVYEY`k
+hEQfH@1[b!5mDN`C6-HBpr(ZSRPVKL5fB(JQIUDTk531rViMU&DTdYNk2S4JK'KI
+ZZlN4,QMU%09E+b`r`!8Si$l94r8e9FbHQTI3i!,Ff9-GU[TTKHNI6BYi"G9I$G$
++HB8KVNaPhe6qHkjciL@-UDNU1k+bIjDm+,c9KB[c+%2PU)&DiB8YA"`8UDB5IRm
+A0p!9je1k'K5"8q*fAS$`#X3+6HGGDM!T+*V8%$98Ub%1mQV86KfQKTP-Nk%9A--
+BmQUdMcTF$GF`H3P4U8Dee"&UK&C`#@08UP&eNqiE,,kf$K0i%JTM8*eUUT%40A,
+l8!+h-DkM,M984kUMY$V5e3(&TY'qdG[V1-V98BmDU&%40@S(PT!!'S$MU"RYTij
+@-DfJK!,()GjDM9Dj@N(Ya)8eShe0a$I1%qjr1!kL-A!Fl8YC+NrPDjAR-MHR,12
+laKI4,$al+&5APA+E-T6aH0LfL'[PRQ@#'TSEccIHAh`AefJaheAd6FAGI)GRP8N
+$cca53r%ISmCU"E89pM,8(ZV(0&0"'MM,531EE&+3!%UTF5C9Uh'ZRGZMb`[8H,1
+(5G'U`,9cHqUM*UK#VG#0h)EYk5!e849TjGkrJRJ(ShbMYVHKHrF+GD"1UMLL`UH
+YE0m"!!qZT3[e9*28-9T0FV9dSDi'R)AR-ffY"G)TVU8Vp9!P%9@bSkAKk-hde)r
+Z8+@N3)HU6%h@UXcKfBmQULPUUS&LA129D#'HrHK)GDbDTKAmL"L$IM43(DH1emU
+j'5(H2l"qB(H08FFl22T6MMSKSNliC6U$GSI,'N,$eBRU*+fFr42L3`2M"fCA@AK
+B#TFeP!jAdb0UqJkBRIm8(8d&DSBk@H19C5&c(8eMe5RU9(kGA9MNd43,!Mm)GM-
+AT%l-A$%DNhM(ACKj0)eallB,Q5Z%*'3ZRY(LmC!!ZF**$5STcJReB2#6(rcd&h2
+"R5V1A-'2I[$MEZCL'cqBqU'&mDLAa+2b`MBZSR29,$8lq#(iAZ2*H-Q(k-e4CfU
+&e`BN(U*hPMTEUl2+(k,hR4pmYk[IcLjrL0ij%AA1,`r41l2m)AVRU[1dFLC3L%m
+0[[@$EhH9"38@Pc@9MP2R4p6j1pSBANrFaUI3QHS#GD&@&lJf2S9QUi[8a9VKG5P
+F*24U`6Gqm-hZ0SCBLY[i9*UP,P'ADJ9R*mimNfB&Ar["elm-)+k0b`H3!,#0RAN
+8DTJCI18(H$l5lMBZeh%&ArV"PrpUi`$@G6*J%cXmpBr8h1!,VHDk0Mi2*(fCZMc
+B((bZ&3bQZ)h2SrRU#R@P9Y"KFEqG4aHVUp69@X%2LX'"ULhic!mqqe8'S*AcL+,
+ck5*e684GXeA3Tp@9VTUjG*@DTqCV"I%"9c1A,JXqpB02reN0$+5iQX[S5V8JSKE
+Xk&ZXklP[&p*LGDeDU*86I5&qXeUNVY2+[Bm&m8A"*hl`bHkqKHm6pqdLZNPGVfl
+3#PC5R2NkZLRBj!HER%emV#aXfM!5YUY@cPm+HDm,2[D$MrrUeILEAVKA2r+$MhE
+h+YlA*)2289F!NcibF2q6"Yk2C0JUe-"+94UiYj+#a&[GU'l5#ZSe(L@AdE*JBr#
+K$$Cb!4pb#VcI4GfXEY%+$hH"FJ!T(P#,YA+H9)MH(hcJ"arm#`Ye#`Ui0GLJ&9l
+I`M8q5!m'ki0e-X"6NQ6!MdS+0Z!Jld@Hfi,hYB)b,Zjb&+`0eXJ!jQXb`(2`+)!
+$@kEi8D3'lkREe4eUL9UUlT3"(ZU@U@iA+F'l`6["kZ"Y2h![6rV62Fi2h[Rh@`Q
+#eArl32V"frqA'e5kZJ22%`MH%MCi-hK$hDAZ$Plh%Iih4ZN"2)"5JYI825Ti$Bm
+882G!FakmkJH[rQ'N'1$j5CRU,U'#9i+AJjImi*@GQIcJj9dQYRl`dMmpQM29hA#
+Vf4#m',`3V!UH$ji,9JE2"Xr)9M)VH&Uf#Ck5l@A(i%RC+AJLH$ai,(K8(P)KH0%
+CGA["#iPh"35ViJk4A[$mRbm-#2JC4hmiM(["bYhQiAl`l$raSq!Cq%J'r!)M&Qe
+j`90aFC%A2"PApkMJ#85#ahI,5VhJXEMDaJ[i$8@XakN8[#i+*X$Q(km!1+U+U,Z
+fU0RlmpBejXF!T)3fqhZ%Tp6LBD,ciIc'YBrQ0IUidE10&Z$rE+02'RhkfHH&8f$
+e$hYr12Y(a*lCSd59Q+J+MrpUH!T&f[LHG``AHa6d['0Sp[b-M(5eK-PNK4`F2")
+X9rHUqi+(r@$&[adl!cc8L!,iK@8UU0q#KrcJSCh8N!#Ti(SQ4`82"Jpi!6YrrH(
+Dk`82a2f!+`82L`bJlcF&c[,pjMe[ajX#e&,'kAkC(b`,lP2,e2h"[Aj`rpq8QKl
+J-6XT`6hU!4@!lG)9e(iLZ0X2l[l6@M@!#eHQ@SDji+lJcQ"TX#5i)lMG$qlDRG-
+2lYa&M8YhZZ6j`C+rE1rmi)jG"RTqF2XZkm*-GEp)#fi,EJd@"lF%0`Fh"6F'0rM
+"EArhY"IFQRL%4E$iEpFm,q#(#i@2D`KZMKZ*HJ'l4B92E`KZh2hJ"Mqii6qM5UA
+JAP(!,lX3DaZ$#9IJY3[c4U`E1H+)&512Q,HqHCZH5r(kK@lAMYL`$LpG5!eIZY"
+XrN*q`N8&['*KdAM`R,qJjd[Cic1'LfU,#MJm!H%#K#XXQ&$A[@PKC6EIQF!FH#G
+cbr9b@A"GX%JpU"i+&[V"pIrh-"CJ8Nm*VP82U`#ZN!$T#UmH%X%#2eM`Tc9IX)J
+CjN%`c2aJAR"0F(9`9A#P(mcIRG-2j[feR[H$EFC2IR$ecXf6(ecekeE$$klF0A"
+RUSIJh[j8F!@d-Lr*9i,,j@["CF(Fi0,J%VP4IJkjaYIb@i+e9(!a9D8kY$IY3df
+aV1k!*@ehkNQ(8!lPdRLD5+9BLTf)cG-C0*[1T)[ScH!LHMZiN!$HSIGS,Ae%QqK
+6qNjjd0G99c@$#e46e6`iAh98"`ARU@`e5)e8Si*c9E%U85HSkF%jkKaeIR#fZNB
+Y#-lbJLZ5ipIPbI',ACU#ZAq0AjFQabrf4q,ab`XZjNKa-@MXSZ4dGf&FKZS(&ra
+6j18(f0pYP4IjJA-aqSGka3r1rHr1h`r1qHpqe3r1rZrkcJr1fVNXUK3XT)IAV(e
+rhIU*mGGPC$rp-Em[Bp2D6clp$(Fq6pjCNVd!%bAl*Z--Ph*4ZA%GdAFqASd"DQf
+!Kf'XaB#*q6)QUL0[604)CPikA05,LEe`[fC-e)U*fZ(p1Y[Z9iL*ZL"d9&B2ZlR
+UU#V+PH*F2kb8rlL(GfSdi(Xi0dcH#k[I'p8eLJPFf#HXVNQbZM[$kTVf[$-l*TU
+0%[XfiRp-0-HjaDrrqI(E,F2SJRLd94Lp0Kl0qMhcErq&MB"+kjKS8mL3!1bAJ#5
+'p`rb%$i&SiJDKkGmB&i"dQhML"m3lkhak)CfmAjV(lq6[QKH6(4ShUMRA@&Uh1`
+Bch$JYJbGNKR3+5cHiSijH&Z'cSN-B4C8h59HIGGiPS@SU9ZmYZlE-[IB9MdE4A'
+'AJR-8#FE3('p[EGPlE-0NEla$)GZbp![Q@&K$+p$3!DF"fc,N!#p$E-`dk+-l"`
+m0H3c)DZSjHPUZB"+p*(J6,8LA6h#X8H$1HUaG!Ald4VUm@#fHL*G`A1L+PB4Xlb
+!hl*8QPFk`3[BbLTh6(&K4$d"C[0lj%r*,bbH0$%INcUrU5LBNlcr''[`%frDG*I
+26&jH`ES![+@(h`N8[J@#,B!XhTSVl93m+!%c0qE#b)r[[SXhCHeiS#qH-Y'q'Xa
+M4@h%-NYc5q%E*1E`)f0a[S3I!i[cJL%p$aq#a,H@PNhMlG36TC0+-HD*PlTRpqL
+*Hqpf'p#$c@ZrGBq"PH3H!b[6h90JCFf#h%)m!%3faU$!m6BiFrcJFGLmi0ahF*m
+Mm+3NHGL`R')m3!#ZpU%9I[bEBI(m'2K`af-`)'dKahHTR6)Zc!'(2,L@cqCB+Pj
+M#'[6m"jFBT1@qR!AMFHJKXA@&4mHeJQc3#2((cM%e35*Hc)I4-I*@U%TjZq5-1B
+`#'-TH&P()TED'(KdLXI')lEr4mXj9J(VkX6MIY1JC%VL"qfH%2mr$3d@F("MT8&
+`F'aP8f0bDA"d8fK-D@)ZZ3#3#4DG!*!3XKN!!2[B!!![#rq3"%e08&*$9dP&!3#
+Y,$I#X!1PI3!!-Tm!!!I`!!!+Y3!!![&bjHld!*!'*a%0`09PJeCQCLEhj1EKYlU
+P$G`VNe0ZENC@`XKQALXl1Ee1Q@jkPXI2+hCiDRK16hEV`)fr+Rr6IFb18,+2pB6
+YSi6(kYLPC'[NpKZjcFKa5TjYFPZ6E%)j*C[`Fa2Z&8[##0X5IK&11$QfcpKqYQQ
+hIA)mYXNqXJ*IA9Hff@D%RlIerGEfXD)4&VQYK'ebQffb*Fr#N`e-m!,KJHfm(S!
+"`,3P!!lm@Pc4+&LAlm9I!(j(f)T8JU+c1IC*J'a&mAfR@&%#FT92p5Z4UXCbIjh
+MU8B"XhJN0D+rUXUmRq!FhSQ1QdS,GD6`-E$L%c1YLq*lY2jARTfi"T!!#@,$1ED
+4X"E'X8l#MRXiGSJRG")@[)9MAq6BE*ilK@2e(%[Pf'UH)m5alEbZVq"$!"ZqdX"
++R@"%,Qq,[iF0"%aN3D30Arr-f4F#XNJc!@""3E@B6kmNb4&ZiYhdYbLL"c8L2Ba
+h0@YMUF)A6ZCa3-S*ETI#ILT6!GJBB2FC%Bdb#S,'kdq+,9X!CU2Jc)lbAkL'U6C
+h1#6j`ReF8f!5T,%ZS5AqIUFKX,m)L8!5liXeIX8NS0G-61+H-Smi[hK4-Ae(Z1@
+)'VjI9PGSiRaTT54@h9ST6QB&(GpM"IF999H)PD@0N!!V9Y&V6Yk%@F!@2SAL[LG
+M`RaS%+XVN!"1&MEK-qa0BBc&#@[!F[0Qr'FXIR0)3DR[!GCbGHKp*HHL(Uh#$&D
+i&aKc6XpP"3r[BZVAMd(1kcrRHSQYcG4(-Q$dSjd`lZPGMG'hLjLk#ANGfJ#MYlG
+M[Xf)&d"fd`kQE[Nfe`$eNHbi-ULEpY$rP!HbINe958@mL2K%$hbY(GjJ5hNeK#G
+I-[+MIU"qlIjY!2-d'[RE5N'`3YB[IiJXL&-EVdI@VhD`4NLVhJ2V#Ip*#e0MFK[
+GqreAfC6RZDTL2R)fGPD`YjN9l-0D[,#-6FXX!*M`$D0H)U6Q&l&ZB+R1"MNNUhk
+IFcqj'iZNV4$a25jHcfj[0ZZZYZ)hrJr!ilG#qKp-+P3QLQ(BN!!6p@[I4I@,e9$
+(f`rJGcGE!Lc*'C4mcYVYV(#V!U0',BRV3'&l'f5Z2`Dh6$R#GD"`D`Z-bNL"l1I
+q"%GV0b$H!CRE@eRKilQF9f%llbm$+qIrBal)(YR)GD"`DbIa1Dd$H[iH(5MFHPM
+2hjl"G5"lq!CN3C`bH$fb4l55$[bd'4iNr%AmXeF(i$Il-4[24ieJKqkh0m#aJp1
+KqhJq("hEJCB8r6RrIaZN3LGV"H%QTe[b995*98f+%PBMcP*CUTG9c3R$(j[1@XF
+6(mDk[!AXSBRB)b9,f&FA&L(ZB9e,UADN1`,Lbf$iPME@+SU)[B4I4FHR[-@8CIQ
+%8rlSJ3FfXBfrhiaih&QaVQVk[if$Q4Yh)ci,m@f8AmHAjL,HSI-CXpR)hdPmm%h
+j+2ma2Im$Ka&[jMM2rp![M2aaA+pR0A!qbV+Ce!0M6r8!6L085IA,QY-dT3G3#e1
+F[R"3N5*1-aFYC*P1TcZXbLAqJ+b*YcZQ1qj`QUcS!-#BCm'@SBZKaq-5brfK&6*
+CcC140*JK%6R&(Nrjaij['AjTL'J1`-2Y,Tq6b*11YN!X#j*$S0+IbH(fP*HB"2#
+SFFde"kKVC9AP@B)Im[$1Ur9D((@02NhV!(Dm&Ha12K2PND+m48rl(#N3#)G$BUN
+FL)h%f!pqa0@)q4E6G)(c%"bqIVjfGihSQZDD1[9FGqJmV!lIe+QQ!$`X$Ppr36l
+Jd6m*r+#Z5Kq4+ccN9FUd089k[clj'VNhJI#XPj(%kZe3+DrK-p18ZhJ[ilrlm+X
+)djT&GZ3JGe*k[j*aqemp-Z)m"JDP`j'(4p*m8Z"mBI@k+T*Q&X$$eeIC4&h*YK%
+2'r'iS%5AH3L1!4pPSAkp'$S2V9qRE9L'BLh)G6VfkepeZYC9-HKM-LK*bB#6U3r
+lQK)m%N(q3pA8!G-`a%0V$03PmU4ljPfX+[+)0*N%m+#`1V",2UUVKhT4Gq3cCLi
+`Eh(N@2Sc1DikmR-m6!-FHF@Fq9aKqq[KpY3NkQ(fiHcIUqT9Ccr!iiUc(q3aj1`
+(kcVNl"-m,MTl#X2CXd-r+c!$F2CRkr&[ChqZX"mkq`52)@GrPXBeCcr!)q(XEFJ
+MBHleZQTb`ifq0rp`j$0QVML6ikSMIim(K8Q!)kraKqiS&&I0R((GNDIqbe%KdAl
+PZ1bS"RKFF8+$p4Kb3JNHPjAq,)pV5Mr!`q)B8-88j)(#-'MGVBk![dr1HLF@jcZ
+%H)6VP[IaU+KERZ#4k[l[QNHmk'jAkIAFTcXqSBJT@#hHU4GjS!)&qVcQ51)4N!!
+d6A6KAK4Z"*fUIUcMd5[)pjN#e29Mcp(Ma3Fmr@8H#@90p&Q2)NEkfZcp'-CAK6r
+5S(3qh96HA)K6Uh06VRHMCmV9)-DRQkB!2&`"6308)05AFcb5d5[``PqBdr1TT#P
+!2IJdd45!4fbDf-IMmM3abG%B#3E+fh3HApk('bV*3LhLfCm[%%EHZ`pbK$YIQ96
+H+BJ(Am18Be#lAXIr1i8lAp`KM&b(@mma(XZaLmlAie+I'9-F[h+KAfNr)m'$GZ'
+"6JEFk(Xqa6%&k&Fqa6%&i%&K-`A3-`UV+8"r8$PLGb1%PCGZ694VXKU5J[*eLi)
+-'6d%jVc1`$3NU"(-AhSJ(YQ3!"56RKi*iJMZ9[01dG&d5%D%IicrRiANIeaGZ4L
+c-I5p(YC5HrU@bAria-&hVlXJcp0*Cq*fY9&@A&)bcJX-$5RXB1((AB`$,qaPIEr
+lP0kB!-A5T9U%RedbF`KUibb`#)BXRZaUdXSHXI`af,V!k`ZJQ*5&r"'r&2#[N8Y
+8U5%SKkk8m%E&GIjH@3hk3e,N'RfXCRD23qf0N4&Ii-4TV0XGI)jKXK)l8HAC+'`
+aLIT!ihf!1kf"1ScH$LbrY$YL3K$XK!XkHq'+lN-*r29q#(E-jH(M!m-1QVY%9Tk
+VBZkm2$&[EV'h'*qH-TFhcfbP"Hck&C4Br1@f(Q[ZpRcU-2ibMR@"S#cL%r%F4F8
+PK2&`@j@hFL*QI,3h[l@$$rAT2KeBR`#kFCG&@0+$N!#2ceQ%TI`CI6S!hj49fS$
+@8h#P$1",D`&[EV&*K$AA!&jVBIF39[KG`%0UM+q@&$d(+a(l&Q(H-N!eC'm3GTX
+#H$(&`R2-q!Tm%l(e2-IRi!R%Y[&ZI`&fS-(E6GLB)$`0-2&K`Zj1!raRBMYK#jk
+(rFL'ApT+fJQ[)XBpdH3S(%AX-i60fJ"r4)`@Vf$#@SDecXXKV(3R`iZ!HBYi@ae
+NH+8PMbpVI2Bi`m@&bAbM9eh(2SdB[`D6XirKTXTNAV19M&8"61&h"Y@lf@+!UAa
+$H[%cV!%JRerBbfc'1h#3!-pl#(E6"5S(ch&c#f(X#'%M2'TiZHb,L0LVQMmFXXG
+`YercTI0YS2L1b6$D&h1&kq@lj&"DcqiBrme)1m,BJ)bPM1%eNKVbKaSdflakIb5
+X@N[#SBLGcdQ0a1Nah[0@494*'q&UdL,KS,K!ARer@+hAl-8qRicV,KiTdUMC[*,
+D)%IXFjVmJASMBHSL&jj)NL00bM$D-cHUP%(BA,q'Nemj@)Ie51YC3ZGjBZcepDP
+Be3`iAM4AL4Z6$D16-M&LK*dNeR0[*TNJA1EMq3b#G[fX!GB[*!IX1)Z2Frdr#X"
+ep*@YdXjV3#LC82)VB8H1NT@4CbYCbB345KLK%EBH1HD4Sq6`-I&-I15BC,LH$-p
+12#0iHTSIS4HK&lQ9N@2NQ'6%*-q1M#QC8d*PC,D5#5-d-Q,Nf40'MT%"*30'MT&
+Mj#PKj"QC-A+-(*-F"6km9eeQK*'M(D%RSB6L'@%%4B``!!)F8%ib+a8(!"M1IS$
+%!ja,L1Ni1h"qJ8l)JJ4TGAM@VAK"5V2pB(0pU2q**&9a$q$L-`eNr%G2iRapaU4
+QPe0QjDD9'NKjPPqTHDEP!r49Xpri*-'R&Nd(aC@pNRIh(EjY4GqIi1XZh""dYZA
+rjHX+6'I-b#q#p2`&,P9$rlU%IiNG2iJc6CP!PMEIT6F!2HH)MLAC)jD8(*cc11m
+a&6%9-F9IjDVB)R`qY3"*1)0JRVh&$D@kb*5!VjpGb0*qVf&2ZBk9SLJJpr[cZeC
+H`CIAG3hCkha#$Q"#D2bR`@1NA'"CDC3Yb808')-R!5jm3!$c,#ZJ`NMB*,6+Xa3
+Lac&jKC+*iFYBXfjEC9,mZ3S+eVD+(Uj#0%6'h&I4'DQ3!0G44DYTZ!TUQF&-0Z0
+21Z9$airYU+!Qh&Ca)ZpL6!h6Xpd!$6P3%IA+RSVHXI)Gb`b-QN[&fYDKr&B4rVT
+(T`2,Ze8bV8-RH-2[Hj%SP!,Ukcp0%+AbPk0KjirATJ0lbXUdj85mHbU`fB@%)d1
+LE21qL(,240+h@ZHJ+qK4Trp8%IA&PJV[8)8DUFq&VX5TA,Rq1XIZqd'Y6!K)R$9
+1i5kV,,3Hj@APBl2*kY4iK%!(CifcLP`09LrSfJJKQ)X`TA%,0aihUkaH(*iS%S,
+C#PRM,$CH[I`U@"'""(FSEYRPZB&9lLXKS!KIMeTefEmFX5+#24mf@R`A2*8IVR&
+@3["5#Af0,aYdFk2Pk`Cfa)mdl(8+*QHQPD%C0RGk!GX)fdP@G-d2$dBfrfN0$je
+VZ$HZMcKi9,GDkbTpG-1k[ERC@X+lANV6$Yd!r`%!!!f3!h"`Bk9-D@*bBA*j,VP
+`G&0S6'PL,VN!N!QCLJ#3%1h#!!%0rJ!!,`[rN!4069"53eG*43%!V5`hTE!Bb43
+!!$#J!!!MA!!!#H%!!!I9lB`j4J#3"TI&$F$9*A0J!dk6dfkccm0[YHJJ@cIPY#-
+X5PCZK2NbMp02QA)kb-JqYSmHRKUHkAAQEr`92q@a66MG6lH%ZaPKYqNQq`L2AG&
+Y,2+mJG&0119N5flV2R+F8%)**fc66BiIf5`*)ca'H-r)*V`Ra`R[fAGNNp[(pNP
+Z"EjUX0PY@K(ZE@Qh*P[EANH2X-KY*E`4fB`m2ccC`1X*"+$Af3-`!&Me3B"Lr$I
+BJN%`GMq&6`"q49K2#N("p4aE!C!!l[Fl(kahGbL5dQmj)1"EZph4D'ZYV@)3a2J
+6IMDq8Ac6J`$,Y`+8l!FM2RJ[`-FSclADqh`cFI8%1*E1XGf%$6#1M4&fbX'aRr+
+%9X*kVq2B4cQfRZG1jPJRae)ieXpcH$Nf`RAp)Ai)B-+[9+j&12*i@I`P6#"J)J-
+L3rMeYjba%*!!4DS1!)Y`e*%L5C,&emHVkFp46KpFI2`)IEH`)CBLI14-RK)`88f
+(i@#3!&%3Y$3Ur,jp!1ZaAD`2mMHN3)V*l[0+6Pp-+5-83#SE&`BLhj2"f9#l!9J
+,jY12CS0bTBFB40i%))NAb*eZ[ij!dHQ8a2YV(@*GaHB+qXqdb`(&GiHXp+KLRA5
+l*$CGhbJ@XT,4Vl+5EH8Y$@*MM3[ba#EkUXaIYJlBTJ2BjCr-@PB(A@*,!p,*`A*
+8f10#R[!5X610![3Z3f!4Y9*U)3"hm8CcqLYT#EB*"l9)GKaBLV9,pXU+ffNp6#h
+H)+Np)Ri[LG6fmHCFGVc&L2q40`!2A!mC[p@TU,#cCNR6lri*dLqXSBEIrbMq2m'
+f!NZbpNT1DiZ(PAl"$r2REqAQ!4XG+adHJZb2Ri6VLRlT#[kQ(0m2`2bXC-MplXY
+`SU8'm9()(KPNT3rNF9kP`rG'H*F1er2hQ!GbVh(KNa6%aiK2m-LRKq%PeXBV8RM
+iD#JrpP$8Eq)AT-2c@[lKV"S3M*!!Qhi2XL"1@9b2h-a"jS,8lqq!6a(q0,l%e0a
+c"*rkqM&iiI!p)3h)P*MKj0'pF2a8!Ik2`BRhB*I)3p[)hqq(&"KMJb!XX0SPCd1
+6f06RprZ8J,9'PMTP4E9#qTI@X-'Pa)HamHB5YQXjeNMe9VCR8cRL$MEH4YSPilq
+!H$ZNlaYLJk+)f&(mpfYidDrCRSd[%dljJdGfISlYIR%[iK'$`XCELK%IiQ$flJR
+%eb'qRr*VH&XHiU-DRi9l3rR(L!pq8cl+Ie,,[r0ja(G`R1IIpE03rJLZkGQ#CJE
+jq0[,U!mN@jfqAVm8X1Ujp!'@EEADIBTFlIE)URLMCBePY99RT3m!,$`)TLbY'6S
+F0V(HlHf4PE-f)fNQ3b)@96JFpHqkRAEmVr$l2IS!21cfqXT%RJ`F@BQe[H3352T
+c1Hb1qQUG!"kYYJhk!,Sf0M@H*rJ@MqDU,Fd'5iI,UDSP`%i0JVNZ1Jj+ISKMjNV
+*ir(j['+0l!Q23YLpph')06h$ZaVa%#c1DEjQHkYSHjpYjFUTkY"i'#h1P5Ye!AJ
+B,-jT3GlN-6d"HP0AIic)C4lbG[qKE`eSpIV`6lKl)ccR@5642`+0mTeml*Cm+ap
+`XN12CH(l8AES3$[E-hp0Y&l*Z2e2Mk`)MrL!,"ej1#69+ANZ#+[TkTG8[3!HcTL
+b#9h*YK%2%r'if)RQH!L@Z)mb)3mUf9KS206T2Qe#'5V8AYkR`dr2pZNYYSBC(j0
+&5DVM6UE6jqa,m%J%q3p&9H+QBCD(k[*d*2*N1+SZUBSm!Rdk!6`SM"DXNUZk1UJ
+@08HqYQbMISXM4qR2jEMLb+Gik!BimSE+1TSaar@`1eS6HZKp12[A9,hLl1-m,M[
+l'4kccRj'eePRRq"abGP6K*`pqf41Zak!Xcq[acqFrC5`EcRl")pCChqHaY[12Xj
+$2m$C'bfUh291hHYr12+eC6hRFPaaj+raS0!*F15YEZrU8R&lfGVr12+8[cXU*$V
+G1HBF9Cc(C5FdSmHX%dV`Q1[djhQmhHRM2!b@H&G-4KlB''DXZp(LFFIDfHQ*aB8
++)4kqMZiBMiD1lJ52&2Yrec`LSYYYZ,QM"a"[G-4N9)YAkL8Hf)%m-Dpj$I(`5+S
+UfR![#MH#*Y829cak"AQE,S#ZlhU1U"H2HrSj(SR1QULcD%F-a-VXVj('9d5[pU!
+-2Yf8[)rMe'TUb[9U4+GFc`e&TTZk!$aX(P8&l%$BAkCic%1[`)@r1+IR8dPG!$h
+i0&%AJ%GiQKMM-6G06,+i!VfH4a`DMlX2iHZlf3m3cre`#4XDpi19MI6A2$,!pYp
+-c@BK3+BAh`q`%Hm40[4cc"IQdBe9G%'20qSX0-9aqbr@U`&(1!NHY!-0Y#Vq6Yh
+c+BiZ3,hb+BiZ!!m+Nbj!2k-`kJ,8"mN4AZdAERppb6qY8HSAkh`ZVqVcrY0K)%0
+'(`+crXZKk)J%&B,q5`e%)KH5`UdRfS)iJV[9[&)d0!2Q)F,r3Zm2`VcAcfjFL[8
+BfPi2'pMbbMQ-Ir1*J+qHpd#HVb3Y`qeU6GC-HfYEXp1MEGI(0U)LBDD$+,`ZH&'
+`CmmF@*QX+cfID'Y6!j*bYG(S!359F3iBK&"E2&29e#ZMcI)*-)hVJLM1F[R*)(f
+Dq$CfH8-D1S99D"*S%&k!hi@65FL,R2%M1JU&q`I@LP$1RM1X*ZLE1$aI3*Yp&Ri
+J5*Jm%h3a"$2Q`LPAk+Il%MRjYSB09IPLrSD+jJVmG06DQ[2e9NV!V&e"#FFIMkX
+*"EI9&*,,AX,'3I"[jK2a4Ai&Pa#@`Je0cBh,-H0pTr-E4rP3RlZ06C9!4mjb#0Y
+@"FAiZBi`ef2Sd`(iTUaT*j!!0FH9-Y`$E`5mYF3+#-Yq'MBMaUqQp0`&(d!-VkM
+Je5@%%AZ"X-`A!5F#l2H%hA`-m'++J8rr&hm#2SrB,X*@ZH%VL(f0X-+$m#J1pVj
+(f2)I`AI`aY0R#8Yq%LB3qb*Kk4)FaQXY#lKQAiCML0e)Q,X!6L$'Hr%Y4q&hL0h
+'H43ae(V&BX)bFKLHK&[45TMXCALPC88AB6A$$"FAmUZiPM[B6BKKGH%@fBmCEUV
+Nmp@`['GB%d!"lqkf$c(8Zp"1f!fIBFLK+)hA9LhHri+L@hLK6G$eT@+HBr%!BH`
+KAK-1aGFY1`-LeUVUpRR0BGcZ9TdCI"XSXQ154[YL0PqRI+[X6BhZM[&RSE5QUNj
+h`+FBUhhH3'CS'c+F2Sbh5SVAlHe5cAa1'NUF%HCGY6fJ5'UQV8m0q(V&MA,r(6k
+P8c9A1*dbVVXiT)",069,5TFF-&IfZ6fGSB3TQfei)NN1p2R6D-mmT&)@B4[F+Nj
+qjGi1e#!eZS61mi6CDqY6BD9#F&JSNkhDMXR5k+4-Q"KKCiK&lmh-)`LAqALq%%'
+cGYB!pI2+(M21iL0Fr`m0!&6@1I#bXlbm6%[lcLLR[CfGr1cYG@)$`ZQPl$aq4YL
+4jq,jHY,(-hdMq+G(9NB'R,!M!hk%Nc%MamNa-QEN@13BBIM)J"pKj$NjrS4&'1'
+%%hlN+1(N@8rBNHFHi9j('''%2@&(RK&'f*&M3!#GZE)e6[Q4ij36KQFV!&AAC`4
+*()!T-"jSd(NXUZYa3NJ&rYB5XZB')@[RBaE"hbI`pc[mfNa#T(j*a&#MHL+Pa68
+e9YHY+M(9-(H&$J,MVaF#(L(eFrU8D0eJ0'k1e!fNe+JfT%8*QFF`+Kr!-EbU,M@
+T'TU$b6pHbRi[Qm+$(X[kG%2Ye1+UZD'Z(ESS9YdkB+FqUQhjQ'c+iP@%(%h+H"p
+H*@6f83V(hba#&MH3!%lmS`kK(Z'8#+RTfr-qa(+Yd*L+M[aM"IDDf@qA"5FBF[K
+8@p%iV0)DMq[44PM%Ibp2XkK`@Fah@E52+-NC%Q50d+,+C4&1MKG)N!$&3J['SQ2
+RlS"&5eR4c[C%V%$MPFFXi2X##qbq4lkSF9Rd*#h9'%YCMjLX+f[4Np6b$(*EEeS
+,aL+FPLbf#"B,A"BlG8XE1LKiV#V[VSL5e!UlUd(iJVPVYfVUBdBdlp0AbqiDd+1
+M"9qm@(EAS*B)pXA+XKE[*,9dJF@Lab`X,9jJm95C4DqZ"([dT8N@Z(ab[TKVU-0
+U1K8XG!IjAaC-LdTS86Tdm-*##iH&H6"CC1%j`GHL66'$aBARi8kcS,G1QjC8M*N
+PLYFU&+8HE4p95XkSNBUfJd+`r`KjVXJL%@[YPLaS1L"Cp24+&Nq@@I6YP5aQ&ph
+P*"I"6Rp0X+#h$Q846UH-'4T[#4Ec`+*$X3)Km0B+&R2"SR5Nibf8lJU2UmRJMXb
+Q,p-XU,[#D68k*N9pAE#J[LLGqRME"![U8AVUle5#mffjG&HA@R3&)A1NdlX9Fk4
+)BklFAGfDDHRb`2#50GmA2FQBQZlri-!-M4f#"EeeR!K%RS&,")XjP%9rb9cN@H%
+,4i[qdQP-RTFEX+Hr[(C@5+IhDXRLfF966prT[A#kY#MCAY5LH1VM25eCp#PD%#A
+LeFYp36Ha+IG&Zh4k+DE#HdCS3AGkd9Rd[5'dS2XLSKKQmAbV%LbS&T(4iC)@GB)
+&hHQ)j%h9'#r)X9Sk2@+8!KP#1`%&,A465`pBKG[i"F'#CT)JS#@(!kHq+Ca128V
+MZi)3H'h5&qAV!Y*,TlqV&*@!p*-X['5&T@R9#63AKQKcS6'Q#bTETeN`AbcXd&$
+JS)GNZji5Zl4*X+LNjh9!`(Qddq'cU1SF5,NGM)$'q[pmi@Na&XFkYSSRpSBC,AJ
+[*+#a8E#SS5`k9(28dP0p`hR(G`J@LlJ@iE4P+)m8D43XUNh,5%B98idQ#THAej,
+jQiAcXa)XKUaL$ZkLZl[+!CC*XAhNm`X9K`I$l`h5#6!G9*RT!ZXL4lf)2FY44BD
+E#@hjc8@P%bM-88A##Dcc(28m%XSFUTpSCQD0IFP3-8%LQ82e%dclMfpf-&da3D,
+NHLK)S1aMjfi`9%b3!#!jU$*aJR1ZF3pG3f,NS-U%#3a[FUihN@&`VL,c!%-2&42
+F`p`0iRi'`eZFkbhFR*bVZ&(YXfIICULBi#,MU1+#XqpHk@+SQ1!#imi6&aZmICU
+lr$6b9BiUmPMlXjqqCP`a3BV2R5G5IcMR%[I3*A4&R1Y5GN[X)kIfH+LRpU!E-SR
+kd"#C821iYr1Dap([FP"P(``-ph'Zqj!!qcQkbT`3IXY`jf@3!%4P0dSqZF)Z[X+
+hmK9dT(+kqTdUU"RMZXD3!'6c2555Er[iS9mU$MN+BB*NLHXUNLKlSUH"S@+#M0P
+"PCQdIHam082&"+QRJbT68QbI8biUR5#Ij,U+2"21ZFT3-8(R,HFK[b0RRrej"9-
+)%c5IFUKq8mVqpC16$"86G%kbpe#qSf,rq%-V3m8%l61(UfbVf41*kjlc%YH4Qr'
+Y,()fq'd"Gpi#j'6FVb*AXipmXBUKBS)qCFi0I[m5'f'#liB*Y$[icK0Y%$"FbVN
+Z4CDGhDrjl"YBUcRUDQ4Z@9hc'4f`DMPU,CU-MUkbqBLp2q5KRKT#YblR"Vq,Kee
+XH(ZSf8#+c0dJ8QISXT)VY"*pY4aArh5!,[Zj3[[44(43CA-4@(XjkPkb[X9*4f4
+ZGI+RULiAP8l)"KG9jP46U"XCeb#AQN*YG&&PJM5&ZUR&G813!"M"!mZj'jD6cCk
+ZK5a`LQZ6LbTcb#R8,C-ZpeZ[d18!9qJ!NP"Aeb!jYBqIX,`lli5&RVDlmi*HGbD
+dlEDh[EEG4LmlYe(mHL-fRFjhRSl@mZ6YpI"QXimIcRJ+(FkJrF3hT@K,)6fjked
+fjqkL0j[EjAl2eVjhiAH'LJRDF0Q8)YqH`b9jKpq8Gp$biULL&3DX2cRURqLdF&6
+4JE'r[rB98`J6G$AiR5FD!dM@ZKNU*QJ21+LbE3"GlR'&lU(9akmSd3+%,QHi3QI
+3Tq+SSRq&HkD*AcC0k-ARdKHr4ip0PqBl,if'+Em145-e%pT+2&e4''M,hZ@L0B%
+Fj$*24#kMXC0042)0(r[+TpXC+LDN`ld!C&BqG3'%(b6%qBBXe!aaA81NNeifLD1
+28f`AP8j#pE[3D+T!2hCa3k6AY0Jhk!mXkFE'q$E5'6FIi0,r-b!8'9#(lprR(q'
+E#N+rSGf0r`%!!!d0$h"`Bk96D@e`E'98Bf`ZZ90S6'PL,VN!N!Qq+!#3%2[B!!%
+FA!!!,`[rN!4069"53eG*43%!V5`h`V!$TDd!!$+I!!!)k!!!#V%!!!-pe*!!&38
+!N!EC*!h!VCp0C(j[0XAc8klAbeIQTYc00Y[VCQ3cVlAR0&01*G3ZfmBfSBHRKZI
+dV$@IikmkZmdfiA3c3VH%j4&fHph'ZYK!`Xr)IX)M2"EK0,)CZFeZ+pQ%%NSfiHF
+QQh@a*)c`''&E`XNq"ahEccElMQabqpJHN!!9q1TkpTYZYNp[kjZYE5efK%9Z+q%
+0M'c*mm16$EbH3!"kR6d!!i$TL`#Xq'qdKm0JDRN+R`$mNV$&b35&jh$X*S$d3-$
+p9CHR0H#9UYeHkdi$[RD+FY!eVrS'RV82rA0dMb`V8*'#"m'%RjMTXf(m(U'qbV%
+39fq3!'0$1,D@X!l'X4l#MMXjpL*2D#1XG6c(2X1a16ah%XFD1CE-X@8mKipM@lQ
+Z2m32!jMa+`9-9!PDC21bq&ZB`B#*M)L%m1[[1I[$J#a5G!"B8*!!&ZAdP5"Dr@f
+mQ[iDKI4"K8JIfRF0#l&N`kG2jE&#dJPZPm25PbNIc!b`qV3)KaN&34286iU0'`(
+QB-1C%qC25-0NXm2[%phqIUj*N!!,+DcAd"(prNY"B(d4%S3%AKI,23'GJ&V6-BR
+EjcQ&mU)&4I5IlT!!JV*rU53[9S4bFBNSZ'kX%UD`r1k[XI`l#QXUKDUbCXJ@A23
+e0fILE'#hlF6Q[LGMBMNd#6@95#F6Lr!ZpQ2fV$%APS0al!Cm-aVrae!(TES(Z)Y
+hKj0ILGRBMpSaJ`Nq"BcCCQ5cr(Yh-IQ,af$-6jlMr4*,QmRhCF#)66d`l[&GcH&
+I&c*j2I*kF4@-f0U&q6BJRJpCEGZC[2%V[!I)pf9&1i1mIJqpTcb3!2Nc8L8Cm8,
+L%plrq5jiPG9a03b2(G$bBrr!rVAl&el-dkcP$j@"`35C,qp!&X3Ta2A)r1PfeJ`
+T0AYJ*H(Il@"bT0f'RrVkmfcUphKAaAcNE#`XrqPZPVmAYALkRNdIPJm`mAj0,`'
+5m`VC%@$*YLE**mNHYfdIZ4ZMU#`@m(YF9-mMe9RX5)d*rk0[!"kk%G*qSe24CF)
+BQJdjS9rA,Y)[SU'+Gqh(rpeX%E!%@k[SYMANXB,0!4JqI&'d$a4dK@$BbQ-`IZT
+KhJF+0RI!m)`Nb(Vbph#d)3RaEKLfYC-92*60H49dmIV5X!Vq([0!eY"QhJF+0[F
+3Rp0p3-dIk`-&Q`qTqEXbH"r)'V)+@4#R$+j(9RSRpB([Vi$9K$q$,drf!IMj[P@
+D"P3)&MKfB!-F1Ck,rce`G(3h@P,djrcp&NL'(YB*KT%fKqLZG!QZYN$!,`GYCC,
+B+-Q+$BBm1)0e6L!qM29@jl-eNl"'5KHaGEF9)ZjN[A@N(I8G!q,e-'4ML(8+!Q)
+(m$qJiP0raGE0$a&1qF2lleR2eVkb!I'SXf+p0AQ)KcJiE1eZa'FM[SAbUhKG0Z,
+G+Tp4'l6m2F3([bNIj6qQjVrR%1)V1-lcVhP*bar&96eVJ2-*e-qL'KMG9`-9RJC
+CP$f5BY00U3(XK8NfYlme)!CYHLkpN!!0XpNFIPNUpAJP4IL3!(@'p4DEcNSI!"M
+e"*Jce'ESG0U&#Sp[X84@me3N$'D)ajJLTl2L!mGAMrp&JB"A(i#(`e%a0jiR$@f
+"-+q9(!**IbD(`eP4UK2!SpCHV!qJDj@VkLc"YhP8PbbX0PSEQYf+NJrXH#GBbQ2
+6`+4(1'DC+hUpIVp2+*1mNC%BZhm6KjMV@Gl9L)I"kVl)eq+S&Hc6lG1QRDX1PBI
+*kTif64H!Kp(U[LM)@c`Z6J,IdMA36q3D$kNpX2HE(@Up2[BMlYi)ccb)**CYK5T
+T1CqC*Yh+jpYXlii-I0r0pZkXCqZ'ciM9+aQhrqQ4%H8a-#JGJMbFSZ)@[HH&9A8
+0L)TH!!ph[l*aAFQf%3mcmEM3LDlb-&J(I*54k[95U$b8LhhDM$)8+Dfm6dHHrUP
+2,l4A$[UB$%T51Z"N'[hZYML2H*!!rj!!&AR!0&cKS64l'q*jdT`PPe4&(X%fR3!
+H&#BV9XPlZMUT&P9(2R2@I2d@4il5RmPahC'Iik%Ei-JVjjE6R(e!$iHc0Uk(hSH
+cIeh9kmjqJ-FeCcr)iiUc(p6eLV12mlMNl#NdCmmqPeQ["q$XcqVa6fGr6YLhRAf
+Faa9RIjE'1mjqJ%IFfCZ44pcFUlSU8Y2lGDrriFKRcPTm*XGe4rik$`UG!%GHkr(
+G8L#dcjVjVL02rSHM3U)A1mG94cA!ijS6'Y6MLK1+mlMDkFrbH+I6$r!`@JHkBK,
+b`-B`D0e09UqR[jfGR&LFVa$Li@pSkHG4fG!5jj(Xq1qD4e4dKlhXhGbR+clH%C0
+3,9kTPhKJ"r,fHmfKa--V+STJaldSh!MU8cp5mHJ9T$Yd!A6p`(2%[2L!Tlr+)pj
+Cih8@kiM"rM*l-e,jU["l25L06cG&hlGaDR9Zb[9Da+CF,i5LddeG!"jfVk)!GL$
+X,qGi*+*Ai-*IQ02cUD3ZJ"jmQUJ,`#-b6HcRFA@DQ'"Y$VCkYcP9(RI[aGGhXam
+JRR9R2J[e"Z!4pZM"(GXkf*D28E-CKAFPI2LqJchk6$%,[Bcj)MaDX)V1kh'jcV3
+TMLG`S9jT2b21JhEKJ8i'[&rhI)UM#e#[I)UM#m#$`U`,d-mS6,S!p8&b41j''*D
+mF@XLY8TF*T6lQhf+hrF[Ki%-'AdBQ1hI$N9(*+J3p&pU)"TCN!!3D6fa&X34h+h
+QPD+LDC!!L!Mrdpir!BP[A&fj&(-`e,dHeV(`p#f6rr#*JUpGGd'HTj21`ZeU9GC
+d4fdGh[Y4,`cdEd4&``*'IYa&1r$#$UVlhAhp4JFSkZU8)"jFdRH3!)$+1"1-"V8
+,aJlj8&#[M$A,li#j9`G#F@aMZ(&AdZi*PSQqaY2$`FZ#Cr',8ISdm5hUmKRUI6!
+"+dh)4E-`T5r*8Sr5V(UEe"diHcQ%6p"l,15A[A31JTe`39pJ,aLBN8[c$4bHMk6
+02LZr$fAJAfq'`B+jF-UPrA4I)M2(APPFNL2N&"G9&q'RFjkp1NG[T33XXDN"a4p
+[kl%9Vp6I60eZ(1X&3f!"YajM!M)Z)8b!bDlUUNQBFG0*1UCZ2Y6REX2d-0#0Zdc
+#%PC$(Rl1*LcT$qM6!ILQE#!%C-eaT3cJ%`m!hYaLZB50V3HmeX*Z*qcQMB#(e"K
+I,5Pl#CBJpJ"K`Gm"6J6BUi5eZ`![TKKj$[N`I!QaPB40fJB2)lD&X,BeX"d0hQl
+#XTq%ar(e[B3PMJ0m-kQ,X')4pJ&-jTHf@Zk%ja($LeB!0lA#8F3q6YMXjq#hL0(
+L&8ci-N1YFmB3YR3e`iZ!13X)beh1m%T,$Pr@8-BcA&bB`MGkE82C4a$Mef$FfaP
+ZUNcKQJADQ!YJ+Vmcq1'2XNm#61-EdJ@6@40!(Vq`*pIK(6M)ic8%ZqN#PCAR'0Y
+"'$Y-@,T6pVG)lU#!YDTir$j,"(Gi&(FDh`D+lTLNdVkBhGmSh5Vj8Q+lBrbCPMC
+Gfi#-T)cJYD,XmrLD&(0*SbISPdfPIPr3`ZHN@Z+d#1q5pU!X+ZRf0LASEaAQ5mZ
+@qZ9'a9,NGNZilZ)8Jmf+Z9U8Qk5JC@kEapZS*8aHB-F659+`,C!!5R[QQNSCK"9
+l&*cm5Ud0U%G+E!QGjiQ`9pHR)UTTF&3dHkN$NkA55CN)-F*1%B[GQdNN#*IjH$k
+0S%8pDi$kq55["@Ia8Dlr"`#3!`[!hGUPNlU9(@%R18D1(EQ9-$+K(6PU4aKKj0Q
+4Ba*kNTAG5QiPYai66`mI)e3bA%q+CbHH(CjkR4iPc`KE'EReb$&bp-JcFNc###A
+2b$2b0$*K4ii4YMiC-FQ%%AEN'''%NQH%%RD%(AP''$P+D16B%AD%N@IN'"P3mZc
+)J!+AYaicb8TSK0Q!($e2*N%5)`b!!11"dRUmNXRS!%#`lJ0`jV"H4dh#fS4e$Vq
+kJ%+l+klSIRPBeIA2Pl'22bUq(G81S*6lq@)C-j20k%Pr9%YPNpN,V(QTkVKLb2f
+mX8(KT+R'`T!$QNr0Ebr,3k$jNqNKri"UC-DcLQUXqE(D$V$r"RcTQ3&DHJQ2Mce
+LVH6&a(HmUYqp((3rH3Idi4cYR["C[@0A2[f)K,M*9H+Q1YBFeN[%JjS(0DIa3$K
+-`G+Z5A$$EK5$j$Pf1-HQL02Nl3FQZeLr6pC'4RA9ck*&lpF(Dj`pq)+5&%Ah2+r
+3#j!!%)cr0(L%N3ZYLdE)M1-i@aK(G`*d[1(cljL'9JKEQi5emPQbP"fQSXH55R"
+d0*,@c)$bKh+Eq&kRF#&&A$8fr2RcVP-36Z(P@@b"Y'jN`5JB3PrUA*h#XdVaGIG
+C&"jG5ihJNJ`-CHUCZLX8M[II+(J@,B,Ll`bl9LQU'j[MH#0T8mfH55SUVY606I#
+,`ZTVP50pTa-"53S&kKM0'a3YXD3jh)M"HKAIGBVYXF(3`(MDe%E8HKL9HIT*%6`
+P4rbKV8LGUa6XFPUKm1"#lf!)1+ZEL9CmqEkS8IMilUVF1B(XEiU@bUcf@QRDXeh
+XRqmP"F-F6c%&+(HejkIiBIBD+F5ND*JTi1#ZpZc@@*[ip0Rc8AEN5Tb9+G$-@He
+Y8j5eIT%3+RKG@20NAb0PHN3KKIM*4*`T1%Z@UcelTDH4Cb62A*N#6M&$MHe4P$X
+A5CiRe,N),M&$MBeqpqCm'mNR3ReKTZ"eB#9NAa1PkGRc)L&8m$,KZk&abC4Z(GS
+MA&("fmTbY@qa-MhmPVXb"@mT+b(lpLVG,Y`4V%c*I5cMjX00k*L@SSCe+*1,EHa
+iH)9ppk@`[R,Tda2X3j,9Xm[,e5EmRd(E@3ql@[i$!*!$$3d1F("MT94ME&0S6'P
+L,VQj8fK-D@)ZZ3#3#@#V!*!2!3hq!!%UFJ!!,`[rN!4069"53eG*43%!V5`h`V!
+$TF%!!$+I!!!)E!!!#Ud!!!,jPjp3V!#3"L0r$F$9CB2@,M16HhCjH*CZCT1pXRA
+6,MIG+f&N-epfFYT&C8VS)#2m2-)16`h2k9RV`)fr+Xp0pdQjK**0@%pB5[Da1RB
+Tf4Ujr4kjcFKa5Qkc6EDA4cDKK1iMr0c25T-``Q1%2q'%Nf2l22HccAkEj2DaHV)
+#AeeA[pPQTEIerGEfXD)4&VQYK'ebQffb*Fr#N`e-m!,KJEh1(S!"`-aP!!lm@Yc
+4+&LERX9I!(j0f+T8JU,c12BaJ!a&mAfpfKHSDLchecQHD"6`EkqN4US@9NrN@8q
+LEdIA$@@cG+6J)E$L%c2G(FAh+2f[I$Ya$83iPXka$B5e-Bje%hE8bl(p2+',X1#
+0(2XFaqEah#NFUqGB+XI@mK`KMQhRZVk%$`&Xq%S$+e@#%AQm,2iH0K!`N3@4$Rc
+p-fGI#-JLc35!"39TXBKH5C)Mh-bVk@p44!mU4(SBlaV@`9+&cjl)ii#8Bp`ZK[e
+N*LIB''$e'4'0-JU#aZY2LLeE!1CK`jNAjEq3!)DT0Nmi*2R#I9a6B!UNX4kK,Il
+qDd&JI4%5J54H&beqa55JeNa-iVD&AR&4mC*LqJlhb"%eI+HXVY,%4G*U5DbkU9+
+FbTaGMc,R(88e&@*P@52NL9Ad+XQI-"IBiLH`ZHr+R,!)'X5D#U56M8Ai)q&E`N6
+,@p!#PV'EmCmaq-fP$NTe$h!Al`l(AmPjf)r@B!BV,!I'A,2cQ,1MPDPI1J+jVlh
+-qb@@0P-Ib)44$hE$Z#HIDScqVSLTQj!!erle-'Tl*qCELVJ6FTTh-(A,ehJ28"r
+)LAF'GG-ZqTrb32B[5*98a)Z)6h6[aNjiJkhJDJL2l62bBrr!rVAc9`(-dfMNlbJ
+$`3VC2hmF@4#R$Uj(pZXl@#1NeHb#GB6rX)fTXABEIIDEVl"T2qCG&I14Xl%cjdp
+@-ZGZe1+j+@aQPK0J`TF0[84)R9(%$J&,G6A))9Reqealb0eB*'f9L1paF6d29HH
+`3c9@r-Er!AMi*XMi[8P&PiPL'$ENQ(kG6j&q-3ee[(-[IRHbCF#5A%(*jkTkQ49
+X9@$Nb'Aa2P$3f3&Ckil!MG-1mMj3X,804QDQ3-icIi6$9BmMhJ9CfpYC`F0jR&G
+"*km[!b[Rrf-Hb"R4b2Y!`GCZiR1U$qMjHrY!`GB$H[l160i(FY,A)`[LP-Reb"R
+H6RhJZ9DiPr$RmFrMI3"qZ@HpS3%9JKf1l#[$lfBiG,3E$SrT3NZ+rTcr[`e5SCZ
+eJh#$bb2j+UV%UQC&#DX49jNXeFZUjS,dKfDcp[(%Kl'HDLHlEa,@51NbG[rL)X5
+pV'F&D8Gp4d"m*D4[k@$YSSMB2[`U1MlY6ACrf4(#+ApdlcfEf)EIE%BmlUaB6md
+-a$XiQ,9K*q*c%Gp'qA9m44lLA6UIdCZ0r0h%"pq8Mr)IdI2IF`$a9Slcr2Ipc-J
+Iah8pDi$c89B@8Jf-19N$1*93*G8[Dbl6P"V!ATMLmS@$LK4aQERd3TEPFRR#UPc
+U$mLDq!R(E-FXPmP+(`!Br66B-[9Qk2@kaA*rD*9-9[0%*!eQ5%4ZXGGErT(M@iR
+IBN8*Q!2`m(M+5a*j-Y!@L!Z$j"")qY-j20lb8T-!(VAZqHB!ZPC@9CiKq!'2kJ9
+,Ubf1ZNDITR8"1pS1GKHILI*)8GkNTle%#J6#iC!!@#B(BL-apZh[m@l%I,I6G)(
+c%"bqIVjf6khSRZQH2[eXGHJmV!lIp1QQ!$`X$Pqr)1rck*m%[UqVdNIN-JpjM6+
+cT8L[emGH*IFQ%*lp)T*BZadUj4Bq-dfjKGFbrVXE[iS`Xe9N"erJ6NU[9c*Zrp-
+M-mjMB&#DMMbmNZD6!ZH%eA99*-dXJ)H[6pQ%VQ6EL)H0H*c[4*Gi#)i"(f@KHVd
+31JqY[drE8)CL,FMlG1cA[r6TTHk+34q658P+"ja-IGMAR1#4#2)IUUB1Q)BK(PT
+MS#k4*m1li)+Ub#25E",!Jm,U`#Vj8&F[eD,Zb1F8hQVHiXK4qY-jVMMbXca-!aa
+j4FNLhQ(lpI"iDa0kQ(diqhG9[H,X"hKFG[D$2)DFrD#Z3miq`H1#XkF`R$hEre1
+R'B#c2k2([jhp@@%rF2B*(N21rJb0UmjqJ%I#fGZ3!%I#h1ZkDR,$pEShrh$NF`T
+ARFjaaC'rbi2#*-#4erT$X`V%0B9cVMRbe(mj+L6DhcNZ1DS"(THGd+!H3diS`H0
+5Tcr$ifUR(q"KF3ada46NJBeKd,TE(3&rAcXl2V%i9b(%)ecAe-HMSUiT`529mpm
+eMlMS(RICYGbR+Ml4%903,9kT&hKJ"`VdHFd4a#-JDCVSaVdSh!JkUAkXiY%Vb(H
+B!ZMkNHISpH)$R[i5Md4R6G4CEdH-p*ACHc'-V`Trf)-bq(46qHeLR&UGRA+p%le
+6VJBa2Ydd"H$K$QJDB!I#rR+@4c*k"5lmq6NpRdUD!ZM"TiQQ!$aLdm3q(THQL8Q
+1aNJ`80kKmrM#EYa354D@)Tlc'DF`B[PZb"9ZIQP+HEFJ[[!UTKb0[HXer,pEZ2R
+j(F+)Zh(V1FDM#D[SR"iAkmbBi[L9mr9+qaN*(V3,$h3bi(VGmbQ1+8#pmLQ1+3!
+2#TXT3$qMX*S#e!I*%EXE)DbqH'ZL4T29N!!8P+pC&'6)k#%`ec8'TL&"K@$q8J2
+ab)'N@1[TE8%F`GeUALNkQJ(*L2#2mIr6N!$mMkXV&f)HKVlA`pU@RVTPmKmqFI#
+Gkbl)me653YbZ0Q6&*5AM[-$3N!$#$KCqh-8im-*He2Hl6rBE%k"BX8+,i-%PF`F
+*U)bc`5)BEI&%991[l'f@2`"E$q$a+'`Q#d2qL&m+q&[N8P9U#-UKba*H9ecRAbf
+V3Ap)LPbPMfVQp$V8if',q!+&$Mkm-'q*lf+ACm1`a,!1F*Fe8$F&ebHR[Pf"j4G
+h4d`)JKec3@FZA0&p+)'rhJ["MVQmI(aJf%&cPmM1GeI-Aj!!,qE2,kiZaUGhSEX
+khfbP"1ck&C4Br2Qf(QXp[2RM"r#AFD`("'8*RiMR+LSZ)Bb(b9A9PC-`ii2(meZ
+lq&#IlY1"p4'J'hICK#AG#c2`1CH`P$qK6`IJQl*+"p"k#Uk8!Acq,X#E@f`+BDf
+eJ0GDf'f%&A`$m*!!'Z1V*8A2`'V%[NTBmdV!EXMHi$)k!5qQ@(L1U6[J+iLY)fc
+j1RJ%X@f%TEm11p$Jl56-p`Gi%Q$5&`QE'!EmCe)RB@)&l!'Bc#pYP86J&F5i24V
+lI6L-f+F*@hd6[)8B,9l"a$D'@ZIR%KBqc2!LB2i5`LCR-Ec5NXqA09SU'#iZ618
+E[FNEf5F4ipGJJX8-0e@QFXfD[X1U!+E494QBi'Hh!dcR'p+IfXJD!'E`#hXjMq)
+G1*M"D`KfdJ8U"mmaYSd`GT!!X1&H0G`Nqb)LeUVQ$iIX-GcMeh`CI"XS[Q-bM2E
+&h1&kq4BjP0Dl1mCr-p)10cBJBbPMH+fNK[bK"XffS0iI#D[@dR!SBZGc8L0a4Sc
+hJM849G+'ZjZe5$JShLU[[61XeQ[fBTp2aR8AVa4Te'c9NYSJ4q`PcIj![C%`GBN
+E6b6*N@CP'1fC'bTP%MEIVq(N9`l@S4jT[8[S2%q-[Eiq&920J11LZ8XpQ'`BRC5
+*%52X",(HHc2*"1%b(mpR%,6VC`e3[j!!(,$M,$l1pIm!N!-,`(Ad2ECHRFFPR+a
+N`XMM#502#Hh)8GP+RT&Rj#NjTS5Qj&Cbkh9i'Tj'f%S'M2ak8M`lmB6KkH%lRj+
+M%@ENeXJaFN`bSNHHNMNl-UGfC%E*M*%j)j3-'*Nb`Ti`mS``-QINf*%*"EkqSjR
+A5GK+ISh32$b6))N4"N!!!JlVJ-r`TZXk!-$`[J53!-62*(k$MRFAhPqJ'h+J`'"
+kE+(ZHS&@X[d!3(R2Q5V!cME81#NmLZ"PM*Q5AG0-GpV5"M62mYejcl4mJ%`M4p`
+)*hRT+G0"ZCTAp4kp`I20D2p)AJ*CXflJ![[k&0BK$p$h#P,8PBNe5"rbHXYhTCj
+Yq5GqG*raf-!U`2!+,kAB#NXT$Yk,H$pKDDbPXCEdAdVB+RbqZ)cpq4q,HIBDAb3
+EUbb*Sd6RmR+1h[FEpQcGX63D"@5rZh+JI"02AYG,5'q+'dB!+Y,aV`D(NEQXjC3
+LHki18f$Fq!pJk!-@F*l9FHL&!Nm&HXUT#Urd"DC6VTSm$l,@3VeMf5ZrK3A0iD'
+&6)LXfE%)ChrI!YS@AXH#NS4EU"p&cZeC8&B0kITSeV&V[qFQj!U,+#@&43,T2-(
+L3k'mfp(GV"@pN!!@f@RhD#ESR2[HLqlpAPc)MaY&E64,6FAK1,))lGX@jihLa*h
++Q86%r@%KBU!i&eMHrDTTR8K%1G2Z4D*F$5KarNaAQ""YLhkH@VIRj`*leMTZDZ,
+B!RF*UA$DN!#HX,-M2$RL5@K0ESq`*6qBVe%&&%'01hp!9F8%a*QfU5jZX+@bALT
+3"EU%Dj`E,H2D@pBN+P@J@e$MR'JCpQ4)Y5HK4dl$k45e2QeYXDBrip5S!JP"M5F
+B@4[5&5Z3!*3cG*V0kbqf-kaC'CdS8!@cPHGLR-8EDeX2@A0UV$*&&G`a1$AH5C!
+!9BqSGGa[IP&rqL+V%9%EZ&[Y86Zlf+EkE&03HHAH93dc$2F1G9`[dGk2dI3iFad
+$I!hI,HX&"aIk+1YZdBGZ@!pfGU*(q#p"'D3hP0Er!*!$$3d@8N9"4%e&,QpXC#"
+$9b"`FQpUC@0dF`#3#4-H!*!2!4aF!!%[f!!!,`[rN!4849K838a'33%!V6CC3V#
+$Z[`!!!'D!!!)h3!!!58!!!24cTJFa!#3"USQ%3!)(03FJKJ31)9R4#2T%CD+3bR
+TZ$mA@+C4l#FT[VLi0T(LAC-5%[e*2TiHaUeli+MJ!fL+c-cdk!)VHcSGN!$9G'U
+6J%!jMpQ56kaeF[e0@`(NIY"TIBYZaPSZ#Jh%Q6a,T&"-4%TDC"$eBGaHiK6#F$r
+UE,#$K6'4MH2L[2ePY((0QJiVbFa)MrLFX4C&XrV9P%k*E55PCMmU5Cp"9'4'1-Z
+-Lf[I(`peHXRTR!r8LlC+CmbYQ6M-8l)b+*0iU$1*`cN"2!)9[(l15!V2AXTrX0k
+2IkXDVJbafq3iprDLfarSC$QJ-RJmccPl4rQGfdfBlQaj86C'lbPj8raYH`fTHV#
+M8'J$b0qMPE-r&2B(JPdGlSZC1ZG+q#P'FmIFrq"C&J!!#diTH3##$'"#b9-bSBI
+R4`Nr`JJPP%cibZNASCa`)j6`p5+FF$)$k)'TbJ6)L`0mp2K+d-F*1MK"1P"Pe1[
+NbSmFIm+0m#2SiRLb(S#H2IR@*kE8kB3r6(I'FL6Mm'JLY5C`NhcBN!!1Z2@",Rc
+,hqX3$0kqmVDPdp0MHZa-dbRSe@cFQPSH)+X6Ya@YRMap8,m*RNkcVqb@YfD9Gdb
+@(pL5V[f$d)%h(&9dR3K2-3A[eRC$%24pcklPGN+im510NG9[4XAqhCK'q!eX@8H
+1&G%ekCkF*`Xr(+MAaLAm#N8JL8`U`c['UarA(D35p@268DFM0Cf'DJ[UkC(Cd9R
+e+9JlEBp*ZeDHKp0+UC8A*"NaZmEk#-NKq2H!(61`k%F%UCp)Fdr*Cl%"fA"*TFD
++XDGdJ0S2%(dd&['`dC0MSHr*ei)Z5lrcJGrQe*e@ReHIU8%hphS0Hji3Q-&B-r'
+!mp$N))LP#-B!)B`&f'`LHhLMDN4DcNc+m%'`YYc2QFGPLb"(dc,j1eJ"[*DXUB-
+1"Jl95M)mFbK1DmPq60TDD*8#LVTr#Rr-&km"3+6fj@33Ul%&lGaJhPVr+%cQN!#
+G+hA`jZcqjfmbM8hebm%*,9!L#+N1,H'dJ0VNPPJe9Kd-3r1AhXh0a4pkH&Kf%#f
+#S[15JjfFi&LDIV#-jfH$L,5dRc$"*5dlYXAG2h*LG5FAZeHe&i@T+a(C+6&bY`H
+P$M*,5%%qklpGV,EkjjR2$X!aJ9$a-0&D$,#rE))C8XN%c4LZINU-S[#S+LmCIC!
+!cK!11deUqPDTKG4E#6HFSVUI*E5mS8,K!P#'dQb6&3RCYY``3[+#19G%q2Pb0#J
+ISIRVG`)P&)Z1ppJB(MhdimJaJ93H!'Mi@T5Rd"MAQVaaB1MMKa)()M6L(,6@B,f
+BHK4EN!#q(9UB3)UXA%[2l9N8ah+I0m'm'dV4rqeSET!!ClSCr)6[ZI3NaM(h`Qa
+[Df2ZM6pYS!15DA,kLjYTqqaZXl1YS@d*(H%rQQ&[D0Y6m!1*dN[C42ALBTH99bc
+,bIS$"qQCTrb*Z50"rfpQi4b*Qd1"l6*AaQdb0RkSM+88"F*R6F)JpAKak0@bKl,
+Y2',&a88HM(5M8lHhF9*1#le06*L"L`EY&BZD,)Hj"+6$2Ri5Rb0DhFpTR[Dhf-I
+XGEF$AHi+SpLrp2"q'$L2d"SE9NEE)@cJ*[*N!9d'%SFBi[m"%%kr&p8R32,F9C9
+DmY6@hedY,YpG65D,AUqEhF!6qMhQ++lae#2F)Uqq0MeGZh@RHrAHp"8f(jkqB,H
+ZiZJUl!(e2`d0$R0ST90TEA"XC94ME#kjF(*[DQ9MG(-!N!N1MJ#3$`%UFJ!"2CB
+!!#m,rj!%68e38N0A588"!+dX0m+`!k9%!!!bR`!!"h3!!!Ua!!!#REUK4DF!N!B
+@d3h!e@86QCrCbJDCKprUCMD3!+rGTYfQR*+9-,+C,cXjlD*b+U'$[1dCSH'Ti6R
+ef+f6MEmU6qiQQh)*h4,@5GKYZSh9XB&NDj&pK%GZ-l+PQh$*E9C+RK*+0Z(R*T[
+PCTX44KMKK1fAF-+[-pDlf@p'1,R0,X)M+r$9GI@EEEC2EqZEVHhcBNGBj,B5(YR
+(pNZH(jjXB))A#!rXGIB!$!!+&J$Bm@Yb4U0JA[3XrJ,`'m)@Ta)8RF@a6`*NU0j
+[eIS#BEpFjr(ERj3&r0XY+C(DZA@Ii&P2SAq+RP'9dc@Nk"%`ia-ch4I&pdMYVc`
+VFI9(1$D-BkX*kf!FkbAXQ*YM,r'%$X)#0h,XmabEaA1RF+b&BkNF@mCc"$QfQH[
+k-h`)B-&A'TLT%[6)j@Aael#!J)P-L(6Kkqmj"d*!&QN'!#`S5)Yjp%U5l+%fANe
+rL9*k8#(53hrAXbk@+Yal-SmG8SjcHbHXTc)9JS8"9TmHd5LM)'LmpU4B[ajJ&MD
+F@9(q#fQBDR'&JT)R0-!e"5C$'ZX61Z,[2aF%eKFK%8MLGG(Z#aX%e*U"5G`aebh
+1+jYI4Yp-Paa43[I)bQ*9R#FYNF6DQfV%+Db`jpZXm1l5qQUaTY),Z@)Y[FVc*X`
+%G[Z6f0ahC%fB"keLI6A5bF%L[*mp`AiK[!(YB,TK(Iic"VpMUB05h30mJAH(%kr
+NA1a(5c'$'Hi#aK`cFPRK3pZBmTA$-2EPRr0qLDA0P)HcB15'AKMhe$C[p(HP6&Q
+,[&jD#5-hGf1qGBJAJUeY#e2@Ij2h!19K@l`c+'Yhd2q8"h*H)995%5mP2Y%pAqU
+')kb*Ub%mrTbH(rX(pUrYVrNaMeI2he8*JKPbIV89@4#R,Uj(cUqh-#qNeHq!&B6
+rU)-TXABEIIBlcl1T2qCG&I14Xl'b`Th,@H%Ze',R3PD3!&d)-1'VZPiLT1DAXS2
+!8KfYFP"@I"l(ER)h*NPG,1*lA&c2Jh8fGV$HM0ri2`#2hJ3C4`dUZN`83lFKarA
+VhNEka668m1ipq0h1&J",FJ3NMk0K!5[D')B4)aE%qd"4GaGNVcJ-0dip`2Y!dFB
+1'*'9!VCRhS4$$5@)pd$fjNj@p'JZjeA8cHY,akVirjJ(E-1p[!m8EH`P2UIlJ*D
+r[`m8EGb[jHr1iRh!0Q`PXL"1@9`2@fBRpB'I,)F(#ImTrRQL$m#VZeIU'P!K@1(
+JXA`i[(F'((`c"3k0k8&,L[kFrlm*8U'AGB)`bZ'520@eBQeE1"a5)Sj+@@U4&G8
+"`akC`6V(%ar'qZS+fDU*@#-9#pLDfdX4Gl1q*Y+1qSk!q%)BYVk,GBSLBXrK0kc
+K8epRDqE52f(+(phc`&UfqVIV%)ml+pCARipi&`Hc9fp(I#ELQbLrKMIP)YkMm4Q
+p6XrI5hc`6INSrf%Yr`2l%9r1FCjre5rer(&Fdl-H1*r``K+UJ6'RDU$+eka)LNp
+@(BBT0B#p--AK#3A#8X4Kj0),@EE$i3STFSA2,k[LTq`cl0-G"LYp!'$ddf$*dTU
+Kfqd8Uhc"a6*CcC140*3K%@2,h1kUMahI3[b@KF0qB`!H,PG9H5*2"YS#F@k!(!*
+*IbD(bee9B4$!Sm%jfaK!ejVDQV-%hqG40kHacQ4[pRT8Y4$BX8k`e[#C+)q85Kb
+6B)XYPrcq8#JS9XVqf%L-[Ak%3q`EDcE4QhJ)GXp&[PCAJqJXF%kEGUik0"jQZfI
+D0%-!(LDljk)Jlr'i1!Pm6pI`!*'V215PiB,f8UeH(hq"h*Y!H-iq*,&X-p6)l9V
+phXTVQ5C!q,p@V`IfFLHPe5XCYrrTN4AR-6JS(BBmh*,UNIcRKG9d$8ZU83!2ci#
+b#9h*YK%2#r'id)QZm"$XJcl+&+[A#k(a8#rfD3[+8+B'H*q1rIV(2YhSV"lb-9Q
+8T',3bE5%2'd*(SNJrk'SbU"TZ-a$pIUE%hNbh(-ZUBSm)Qd'!6`Sc(DXNJpeG9-
+YDSkmZ13fiaC(MY+IbA(0NCrMB4MJb+[,jp'FI9!2PlXKSBI4Kl0r@p9VcRk3!-G
+9Ccr%il+c(p,eXV02m,MNl'2E93B#c[kX([pdpZH%IGrC*hKFG[CRDAcJl!Gj**b
+p"ANNc,fQUbUhIP6haKq1[,KNmCNFeacjfc`S$!)FHB-[1,e)A&T5I0f4Trl$85(
+4LjhMLU-Dj((9#3hTFGN**AKFkI4RHAc3k3GjQ1b$A6%&H@"M',,ZCV[I0p$16N`
+XcPF)m3Je,aVJ8Gfm+-%MeI@I0Bqik#jRjIAFTbXqd4&68#eHUCGiB!Ib$hM0iF6
+$,kQUk-5p+0`)1U9qV1,4+mKh'`,SqV(Rk2ILJjlq#Sp%Cdh8@Ap(M!b8fEZ4cPH
+&2qa"'Abkf60T*dkYcNfjhSVq+GH'6I(TTL%!$kGI93%l%2DAFcb5d5Y`i5r-kIP
+8dK"!$cj00!6J%CXQ$[#i-Ne-XRXM!Ap9PmEMrPfiA*FX0#*ZqebK-2bZAI#U82c
+&Se@pJVMh"8`j'R[AbrKrVe#m[&-BIKpZ2FGi,-)U1Ur(1h@Q6h&mi3[e5[XC#4k
+d#`pd-Z#MZZG6(%1!HZ96(%-!(K3@3i"q4Q%f"+J2NL0f0d*BmXkYLAT99S*53,j
+Z8C!!)D1(`"cA'4L'""@#m8X0a--'5E(@dpq#1)+leEa50$3$NK(K(rhrTb(jEeG
+A,X8X$'f[Kh8dRVjPmQmqFI#Ykbl)mh65%YbZeQ60G$8diF%IlF,!`%C82+aJiXG
+Gp!-[E*qfhhfUhaJ!4916'X'$5mB1%P!Cji"*d0[LbDUQAYRI,(m)PMk8c"Id4Ab
+5hpIq,mGQ!+"i8d4@!VkJ&2Q[BE6aLe('02%$k[)MY!0K)KS'FE,U[6NFpN`jNB6
+qdla0qPDF[HcA@NJM[qaPF"$XZ![k-RY4B#DZba-i2"p&QhefIKp+i+ph3l"L,MF
+I(qKfd0JPF[+FeE2Rj)PjXm[Ub[$TRZZXbc0D+3'VGJ8P&RqiVFIZY4fp'EXGM'0
+p))6RmiRif,##5`MMB9*YAFe%c,MK4(jc$arUFlGKIJcSaPd1B8N23MiqCa+@mR[
+dk3"m8cEF"@60FD8-1DF$hYaLN`PVh!TiVBAG3GM)l`-H8Q0mYF6r'La"l1Z%YGm
+*1"&J4`JVAJ9i-FA%FpLq"ep$E!9K`@ai$$%qT`ZBB!XD[1f%M5k!T`!Q2N5BHJ6
+`RiRGK*9e`@k!5Ic59R-c2)mBRqf@[`L(%2X-BER$i3h%D2%+4MBae$T[,''Z()B
+A!I2Q%rET@aKHDFRMbaS6[XY`F@%+hqLGEQ+h)-D[`FamKZ'QbK5Z@F&X9JX`PDl
++32dVl%k!DAa$fJQX&5#IApMll$km!`Ij[)CJ1efJX[-F0h33aJi3PZP@3SYN6d6
+%@P9pSD!eKVYmULH$E`2&Gdc5D9r-'@U4Ej@$DIflBr`h2@fQ[J%C5aR$'b3Pk!Z
+fUTBj,Ej)5$&AK))4+jq6kSNcBVcR,)dSNTVTE&-MSB"iQlcXRT!!dU*Dbc`H'GG
+Gh&,%UeVU*+99MPM,fhcq&MeKkR`RRNL5)fhKG0SceeA+)Qbf6mA*VaaS4Mh5qTI
+3HCiBHfep+UDD$XG&FeDi-&NkRC5*%52X*,(qHc2*"1%b(mqR%l4UC`e3[k$XYq)
+X2Xler`#3!`V!hGVlRB5GMFL%NPm**i``3MYb$%p@`JNP6mNcFQ`p`RiPE#@h(Q&
+iTNH15BEiC(KfUicJUFr`(hP'+$P'eL2(b$(*-r+-c"Pj4Tk4BdH1ND-HQ9%bBi5
+5#5-64KJj4JD-$"Jj4SiG1IEN'"NbmSa-+2$ea9E#EL8$YK*'f"(k!K"'RK(N8-)
+!#("!!%#@!(DMi3%!`cN(%%rJ2)DDLA-#jc1mCB$$I+*LHq@DihRXbfem*`pApeM
+r"A!Zr@E3,eedUllPhhb0jk[$m#Lrj*)60&Uql36TiqQcM5X1KC*L`1jrq[$$,e@
+kV2"F*pMPSlNRJGr%3lc3l[ceBlPCJ!Xc3RU*-h(M(NZ%mZerDaRiI("YYZbZ0$d
+R6D[$%X'E%d1%-hKbTPP%plDFN!!&@(lk+mZp!`iMFU9PH)%pL*fQ`PJm!($UVGa
+r[JR6N!!A68*2j9S)*4RDAX8*3X-H8dBYmTf#5BU8SVKB[Ei,-UdT5TEp*iliL%)
+PZPp5j*V03YhG"U%'&45apmJ3YD@LS)CF0$*'821U1hZ4r*C&[fXPaD&q&TjV@k(
+EU"[qL!+EIC!!4C5-SYL(rNZYHZLZ1!Dff1mX*VFTX!-9a!i$`042#R&,&HUKieq
+eE%d4EH8SLhM*#QYMJ!%ddQ6&CQRkp8[2Xk`6K+dU+F#PUkBGZXEN&ZYQl2(rhl&
+1jIabK44-@'5XfkI(&qc)GF''5CQ3!0l`pBmEYeLlC"EcT-#8fSEa4U2A"QY6Jj'
+#V5N5dLhEIGaj`YU8%#RB6-*90eRh4H'9FN8&@e&XVQl4AZ`1ZY*V8["h)(-GrbD
+kMdiH8DbNV"l&MaV(rZ@ECM%3RcDfH[JZeL'f+Tmcmei`+*4cG$(,cV@YVIiMr&[
+cHAT$VI82!!!0$3T8Bfa6D'9XE#kjBf`ZZA"bEfTPBh4c!*!*k0X!N!m",pJ!!8X
+m!!![#rq3"%e08&*$9dP&!3#Y,$I#X!1P*J!!-Tm!!!I`!!!+F3!!!X8d$l-C!*!
+'Jc!0`08PmeZChjX0mK+rfFQeb9k6f4&fNT8``[9DQ8@lU*Zkk5$EaSVGQZ%jpGL
+Yq4Yre56h56[#pV20)SaXZNhhX8[*2PCNNq0(EM1bTH3f)lGCHH3TB@36(YYNXbk
+ffCD`,H'ac3M[f$jMQffff@mMccr#)a6imGI9*2ITEIfeDfdI+hD%4@iViC(EE*-
+YHAjiXS%*AL!mX0IC!`J!+&`!i-#[aGhC#GE&6q-[!,mRE%N'3Cdc',X0),2'(kS
+1++'3!12aJ)4rHReUV(T1cBFi)mGIrMJGlB2,*qY)dGI!LNr-Y,S6hi2d[`VXa$8
+8Bk`IBaX)Da'-G4$fUTHaJjc349M6#-BqaGJ-cTh1@!0M'BbYi"aKaVDaVMr$K`3
+fI'@#P5V"L(`ZLlq($54-C%'N&9rrc*N-#9PNQJ#`S#!YjY)VcHH)0(-er5e+k%'
+&5!rMA5YD4BCdlkNm$NJr`He+f-pNFS*0!&DI%CfGJS+J@r8RaHE0!$1`iFcSj&p
+)``bE*a,fq50*VZN`&M,&6UNPmIjV3@"p%4+$0+k,PF'S58#YQCM%AA1mmYc5HDA
+dcIBS-6@b6&'AD2*Fhe+IA$fU5KiRR1f2#ZFp*E@9FP9j!2,PDRV0,"Jj(F4((XI
+Q[MYRj&aSP'XVN8iZ&Z&piKGLRf8XSTCE0Z&V+(k(83HPZJHiMl[$b9HII1a(bc'
+$&Hi')9a6mSAcJIe#rG*a'2ELIZkA@0T#hCJ$JalUJ1&22"RSI,P%U!mLVi2VB0#
+f0Xbh!h%Rj$9[&qVQEh!28$IQ*6U$qZ"ZqTrb31j[5C8-a%Z)6qHcAfL$Pm4#9N0
+kl$NM2rB2l&qlIKI#2!%MIfXj5&E)rI81C%'F@PQ2h0pX&`()V0d0D`Mr3BY3iqf
+fmqP[(K$MImKG&I14Xl%,jc-9`VN(YAKQN5JFi!3Bq@9$,aNb*TD)Sb!bA)e+@&'
+$IYGHFMF@RlC%a[I`K*j(Dr,%d9SVIK2r!$`m#V*H-DRS-TdBKJdjS9rENk4IA%-
+GEhX@[l[%!K"TVLDIhe@p@a4YLF,!J3X5ID#SV48'V$N1)mBIi6j3Y+8&"ZDN3pl
+hAi0MeBmLhJi$YUd943rR-kqL0Ui[!k[Jrc%2j282F"mSfY*"I-lf!6er9amSfR*
+)cpq@`hdJVpmkC%'FFPL2[1bee!GqY!V@%rjMr20N(i$$HpFC'P!Kf1(SDqP`I0m
+812lF9MJfY"dY+ITcrRmVC%!(5Ld0GRPmrXTUZESj'SfS-9HjiQY39-f9V$@aXmC
+l"Pm%r6DhRNVb1RikAm*CLCfe%a(AF`hBX![akBK[jIb-,ma([*e`XAE)*V(K$jX
+3la$hMilLQr*4rZ0krXmI3R`9ijcrrPmCq4-i8FBFV)q),LUQ'KKkTJBUJ[@U6`d
+Ub5S`'DN"l)AT,RqN+HU,ZFaFHU%Bi(*j)USb1aK50(Q5BiTMXXYNT3m!$(N+E$P
+k-r4khA*&-,a%)DYj+Y*k-k4L@+RA@r'"ieZ%hp*S0'31`-2MUCLCbT1&YN#Hdd3
+1JD3rPm2MVCKY%X#McMh,(%$AUZUUm`6Ii9&60Vr'iUJ2q$A0#H,9Y@#[iTNS4hS
+jMNQ`aFldK8+45&JZ9d,aNCK8Z*)KmI-ml,Jk$mRKlqCVpp6*lN,hK!NAUN2RBAA
+i*d``"H"KFILl"AQE4rFNm'eGSdNLehNSbk1&+d[dHRhX"A*[@)mPN!$l2**BX3f
+UP*8m-dfrJfXCrpe$p5S9VT,&NAhXT24k*H2f2ceb%Mak"UApN!#(ekIjID',`ZU
+k4RfD@3!2Ie,CP+jNfiL(MAKFkN6AH%L1(KpPSAUp($S2VEY2fe#'8Uf*qh6mepI
+lp(ahCDq2bD%NXhZF6%2%hjcLN3Vb(kUQpTL'Ucbd3+JqP5I,@hCC9H34DcB*i%&
+KG@#9[+FVM4m-4ckeq%lc&NH1dTr,FF14Aq"K'Z$)+fI1T6PlMaiHEee+$l-2Crq
+QUMHFI3q2kmkqPmG9CpqVke9RRq*afGP6'-jH(2bTd`c!fCrAipr1rS+`lcMl&)q
+Vc[imMAHGI3q2P,1h)Bq8ZGGeeC6'pq[Hr-146beHFLl($8Iq*Jm+N`"(AKF-6bk
+5PaG2[HR)-rlPU*!!D(IRZ1DSHRKFGd+pHPae3LNHecVpH4l[G[SH(KC(6eG-4al
+B'(UYZp84#LEEfFQ*aF8+)4k4qX9*(TAeLe-m-McrAI0)L1jaPpr-IEEL8ada(GA
+L5Vh-!cY3+1Neqa12N!"2df3hlNAK4Y!CpH-9Mej"ZFF830F22%HA&qrap0GiT$T
+VUXkk1Q)X@@C[49pH&Ak["fAaG22`Y`kJ'li`jASMZUCFSpS6dde6!"lZN!#Q!AB
+Jl#mAH24"Vm$#AjV6me65&%!2RLDD![#)6a162+j0%p-FJ9K6U+*9jr(C2CLPMc3
+ImEa21UAqGqq"`p+d5Dp8G%Mb[KF`j4$XA5rLrah5Y,&VTIkVFHXjcQ-a9Y&&2Dl
+8Q6(&#8B[e5[YCk4id#imd-Q!pqZHTcLQ!2A+8aa6!"i80P1!INCK03@S$j)MIMG
+#@RVPeN5YTUKKAj0bdk)J3d%25A4[6TZK""@#q8X0*#)2dZ+YTkX&-B+le9`T1TS
+&I4$KMr(r8p$R(eGA,XF-$(f[4l6-2h[,j$pm%Z!Eeef3!1ICT-@iADh,QZfT@iL
+AIr3,!mQ0U%6B`F,(AB`$,q*jIErl6,ma!BU&#l8B(P`bGj!!J-Si&bb5d4C296A
+ebUjQq6f`l63&89cNmF8SFjVi,RAjIZJ8C$i5*KFlR2@6aTe*XLbS"A4[daF[j9J
+1k5eN2Prf-MXSh"-Zk)[LPj+`X$6IaZ(jB0VXFr"p+)PIEi9NaeaH(KmBGY$F*A)
+,h*@cbJVNJPQP0DAip-jaea5BVC5!AEq#%Sr6YrA%[B0AI4Ll(3`A1d'+cZ1*q,#
+SLNX)Ym+BkTUUdCMaSC2jVHdme'HhBAd%k-CG,Q&Tkf%L2UF6P[jRp1N![#NEE3@
+bjVK5K[qe!YlF%R4T#qSP`'XYiLl#bVi1H%K0m'V*lDYK+@*I*@ckB-#*J(L*-28
+@`!XX&XkamQ2`&F6@%&Eb'AJ%XDf%6IS*E%H$YiX`*2N%`1J('2X1i$qMf`JEXJ2
+f!ScK5eZC)q!!BMcE(I-b(-2AlDc(2[J6BRb**AZp3+d,KM(A-3)[!KE-)qbMIa4
+iBDD!Pc8qFC[!aB9a[0'lE+LBKKKIJaRDAq#QbMM@l0-E46A!H,SU!pTqmA'!#E`
+KAEKD0!*-j!Yldcq(Gq"J)YF3l+),9!l1F8X,BH))kq&9)iX9Idc'@Y@#NE!pMRZ
+#QMq,Yi%51bCpD9r-(@P3lP$#Q9flBrbEN6EEf)#-TicMG6ie(!`hDVDbKQ!XSPT
+R4m)a1mp*MF4CFGjPbf1U6mYf0fZa5*0mTl*L@84Yd1bPIVq#kbjHAbbJf@TmDU-
+5XmpX$SBDM)3Cmpai)NQ*08IldTkjS9)1BE1#'NjqPDCke#1cD`QGmm6CkqY6FG8
+-1#'DHlB(Nr@PNc*aBS5G)YCeEkB23EM-arN-JREpV!(U&eC#GTc&*lMq(`V!GFa
+@'a!fm$TbM$`M[a*'RT'9(6QfNT8`3JNP+hP'MUe(f+rN9X,@BiGRkj0MNZ&k-J"
+fUq`!U-p@,r+-d1[)HZ3B15BC-3ND+"Qa)mI)8Br-+*NamS`m)a0''$P'"S`-'$P
+'MKdj4KLC-I+-($XbSF#(ppDV@pR+b'!PM$"b9,C+f"%88F)!#("!1FQUe`8!-*a
+(!3,hFDiMCZ,FJr-jrK+J35aBXN5d@19#I%81p66ee`FES'Q5,dam1E[5,$I[[-'
+hc6"kLLq5[kVSE1lmijXVF+IHDPSmHMbkN!#m&6eA[mEK)$Q*rX`1q@MZFX$(3Z`
+K#fN#j`V1Zbb-@"Ja`hNU5GJDI*jGK4!F3M$0AZ''FAZ0'DjF2lDDS2d$4AZT)AL
+8SS2FEdq-V$q,,ffD1@4[b`NTJ%@PF9H$adLj`K*DPUhVCkJ`NTL(8qpNrR8$`T!
+!mCU%9Q8d2'5rDiPmf8Sh'YQDlFDYhbUTEqL093444BNl1r`rZQLX)L+pq#YNCUb
+#EDXJ#CFV0rqS#2G9k"p33lmYP4I8N!$*H#,Z9%9PiQKSU',3Y9*1*&YcHI0kfH,
+BRT--re,Kl3AbCEFk&6"Xr,'+ICMa3U[QfNXm2K%6f&'"Pi!5-6A%'+VSYiG5mEe
+,B`[*LcqlG2$f$T-q8M%hk#jK@fAAVYILcE'+B$pP+Fp02j8E9ekN@-Ga@a9#3*1
+XIJT(V,T-MYq-2HhdHpBTA9JX%B)1HallVGc6jUdqklb&IHLaq[hCIGaj`YV%5JK
+QbqX,2iXpIINCDp0P3`J%C"Vm0YRiZ(Q2YI0Q,N-)'#TjdrC!VNh@TXiP"(2VqHV
+R[2XbqeVjLJJfXZHVhq!pr3'bdMBKH!e)KkEA3rI4bF0++b(,4ljJ'f%lkBDCFlb
+$NDem`MYbjK,Z&Fb-F,l9mhRkQ%9qBfYVX)4h[4DM(ES"rJ-0!!j9F'4KG'8J0MK
+V)&4ME("bEfTPBh4c!*!*I`B!N!m"2CB!!9A4!!![#rq3"%&38%aKF'ad)3#Y,$L
+SVkM%6J!!%4!!N!B+*3#3"1iL!*!),Vm-`2MVQ#GEcq[CbjrbTd8"k(946[[dqF3
+S0mV91Tr62N*rUedQfB6rbMa,QABH@8pDjbDFE,CZRh$#R`ciN5hC%NifqDfh#Ip
+Sj&Q%4fi6hNYZNeZh(GR(HRUFmM2G6KaBEjHAH5XIC*6r@X#'[lj00b2l*-I*E3Q
+2(#Hc6G#cm34!"jdGRNJMSX#G4(kmfMhki1-2%c%6'3rTJdrm5M"&aL2!dU3aqcF
+RqX*@4+eU(&3p[E&'(HVGiD5eDAe2&D"rSepqMjr9FDQ$,!Jqm6!p)&iAV)5rdAF
+b0[DZ2[M,PaNId8)#laH8YM%rX2ZSiYE&dk(3E@3dhN683D5ZqmhdpcFb(lcr%D,
+'#(NfmX`"8!NF)kh4eXBUkVl9ihVdpK1FZrfh2(hl2[kN-dhU9Srqk2dR)(41k$q
+YNZm@Zr+F*MRG)HRM8X&9R0alEj4UAqhH*CdMkhVL+MNbV+b"D%UPHT24K+A#L83
+XfKZfS[(K#pAZq)JD'NPCUMqD4"8G6PRK@%be3#1bbGDVJqQ+pR#UEh2,*R94h88
+0m[VKe4f!GiedFQ%FL8aJfQ#q,fkGh'$1Sa)6KEl6*XhM8e6U3h&Q!mdIfQf&NcX
+L9NUJ(JFbUC5d$Bi"mZKSYNlcb@ZLd)CXQNBqJhbdL-a9M4XIZ5Dk24P1lUll0A6
+`H2%D2'15iFK*Ed`$M6Q$!L+h+6U%VL)XmS)m)kSPH2d8-&(S-H&KUR,mKFBj11!
+[4#+!0dJ,6"4f+d[)`jr63Kq+LJBb-$**+j'-licd@RQdfd&0")IGLK)UjFpFr"P
+T1Lf!Qd98CU+`hF`R(dr6'9)XE+$5@(4lIc3@XB&f!0)qf`-QJFidk%`Bm+dGLFE
+ke'BV'NXj[5r$HaD9QbM34BP5iVr6f4S+M-2Cp"hDU$B2pmD(KL,$&Z)JSQ*Kc,Y
+eFec&SX14P,,L$L[Z*)1+ppXiTNAeaf0pND5+pYYTFA0if()mPq-pKmie843pIdS
+9'JTiVU!VkE)j8E(iVbb+#K`TS*'qU"92eMRZcX@lQ-ic846GrBdU044`9dNYG+A
+#d#8L5@Xh@T6XME4'NfUeUPkI'KJ+4f+V@b1l)V&i3KUq1MqGUG8@9S@kKYA9MXI
+cm#UU-P%82Aj#e4S+H+bQ@UT@UBL&%E&(86TBG&T6B$P@U[!ZSD8QLQ+-I-`IDIb
+aa-K()V%8lrP8Bk,3Sq!E#*B,U0C%i9UIPrb3!,2mJCFrT2+kF'5A&8GB$ir%BN4
+TX1qMjIJdcNTiI5#4@eZ)h(TDTY-bQ&K1+d`8HY+QqHP#@QQL3%rQfCEVq(f6kJU
+'$IiVeI0lAT6PGDRGUAJX(Zi6Ni8&)ab,)TEV5AG@*3rrK4Um+0aH#5Q6'NL,JkF
+MhplemEYI*CM1lmN-[#m0@qRS5D[ImI%l0,q"jShB-3B2+r"H4"HE+23ZM'-!FhN
+*A@ULX2Zj#'0r'Ddb8D"rJLrQ2p2Pr,B2T56aGSR&`PlKS2R93UI,BDk4hc+Td@P
+"'Ch0*hemmZYY41HhC-lHPVDYQQhEQcjqNi)09*+-@,[#-E[H%SkC@-*XM3!&q3d
+I[h'kY4IM[B*I0qN+FQq$5K9QDM9Gb5GibJ5JVd(i9#%KQZJU%iAYT)UUqEL2Mhr
+PpLTR+DLQ*Ac-aFG)-j'hVQY"ZB"@m&&D`dHm+"%M#0G)-UPQTpU*%C2@1"D@)5k
+D$@V'PV$)f5Z3!2f5qqeK$'qIXbSGN3*,UXC6JV`Z2Dh"'k)@%d8amPlM9c9q6A4
+H&BN@['[j&C2@cNUmc#pTr,*)[#4@AT'8!M-3*"H9m*pS(EAb*0DF0JdJ9Ujej1E
+$r#)IiKGmI2MVFIAaLppZBciqp&8qHIQ&Eq,@6kfNZrPjDRHKd2h8,YhbNHP#Pc3
+rY9&TN!!RU*DIih'kQMTic![i[r(pR,4pA&TlY43Gk2Ucr!`rc3IjMp6Xj@IckHV
+PClj*C4mr24Fa2MliE36ki1l,*&R!Bp5`I'UlE-[e1l%jYahUHQSKqCF,J`CAN!#
+VlI$QVYm2DSYTrV+G*mqiRP`$!C*3!Grmr0La!h*lb"pMC*H6J``'5aCc&4lZXj-
+N04#4)F"3fcX@"Yk,aXXk8[MXD-"'59KTR%mZ(BSHENBBlXI#3pJK51[F`Y2eVPe
+8lfTSfRIJCqdeP5XlK0(302U3!+#UMUGrRYQKkPfUU6FaE,@mclRUMRd(UZqUUG`
+3k[GXH)ac1r4G@Y"98iIVb`fG)jeEX$`CeppEhp6CeE-HEY1MPE8h+U2INh!edrk
+$0pA@'rYrU(U8jrP4+Um+8ANHU`"@XIRHqM*eipiEeU4lZQU(16IVU20*lYP!1jD
+,Xh!LCY8hTAS69U*UG,Qifl%32+1q5AUDS0(PqcrCfJ9&Uq!"[!T4&AllY@hYpN5
+NekrVA')M$`K2J0+@lZjVmTF4Qk%MD0bi)pfLL1i)iYb!'iVZ*MF1-Kk24X%b5UY
+U#S9D5'A6kH$G&2,F5FTp"bNp4%&089!28Y$YSD$(65U)J&FDT82k$bMY[NdM6bY
+mG1!iXp9$lMiNpP2`UFRG#Vl&[`YeDBCS$pB%l+NDMKSZA&*+FI@4Fe%PFlUC1E1
+(H3URUbcHDE`j[+I!BA"235-(VHP5m&h3`A8TJcS0("l%4`l[0*@qR5AAlq"6Jem
+lB*d3XAH`dep@!Q6f#ra6)#$lp$m%XQ2(ja`%b"LE%mM5f$M!JS$3S9F8b0-,!ME
+GjMX#3Tmj@K5`k8FG!b,!$2U460("U5-jd!fM)$!c0J&kTLL3!"X,M)01"NjC)K#
+Jc"MSj!JD%j3em"%j$Y&(#!MGjS-15D&RE,kd@34!(mIabkEEA3&p,%qh@`Ek@)&
+1-eQKCiVdSlR6p#-6Fh6Ti"aG1RJm0dZR3'BL'aJVdTd6F+j)ci[-dJY69ra#@YS
+I@U#UJQXp*pd2hRCI5kK+93GEbqmk2eLM&SFSVD8$QFUTjZbHDH61+HBph(bU-PF
+jhCaYRPUFXB0%hS$ML6&6JKS"ff3f-b&c'6!-1a-i1f'(aFca'6XNCJ*(T(8"'62
+-U$eriePS"6##N!#'Ur'F5-p-f$$P*Q`B)96XDEkAMFlje6l&jXqeT[Qr23[RkZ)
+mD$JqPLbk'iKhka5jN!$AmXVpidI8U*r35qcDTIqN)$GhKGFQ@dFVCGZSd1kKB+S
+hp6eJpmLQ*&Z)E$5SIpV6YV8(`SqPV0hLrJqT4'S!pD&eADeYi"eEfpNU5mURcND
+MkFj'SrQGI8Bl*pSE`hP*UiRfTJ5r',AJD`Ekqh$fd6CX@VqY$I@@klVMf(5el8i
+S!*RFeL-hq@kLmi!e1[GjqV%fHFf$lJ("2%pUNqe0Lqi@c1q(4PQHplSf'FD8feJ
+12'bHmRr"I"hBGqArJM+D,jk8imNVfMMQfeJG2#Ab[%[JpARRh`(['Qfb,HGJ[VA
+3f1YJCMZ`MMb'LGUfe2Qr`,m"@+ec`III"1a#aj0r@*YFGrMr$3!49A"NBA4P)'&
+XE#"8Bf`i,M"UC@0dF`#3#3i-!*!2!8Xm!!')DJ!!,`[rN!4"8&"-BA"XG#%!V5`
+iU,!DCEd!!&q3!!#3"M)T!*!%Sb-!N!JD3Jl!MkIji5m!qJecY,,23BkX0`IC1E+
+F@3jbe0R+r-lVc1IdqfcLp6DaL8eciR9HFd1#fG61FQjqCcQe3Ckp"h"!!,Pq$FU
+qiqGQhF+lML`GQ8(bN!#-)"NY"1)*`*PfGKkHL)RSN!"8SS0amX*SV+#b)1Z)dT+
+#D$k1SPKakE4C"G4Up)+QZR!"FBdaCIQabS*SV,Ji1MU[Z&[(E#'K2L0'$)f9&9F
+ffaicq!"ZqpG[qBhYZehMBT-AE4NrqY#8rGX35HrM+,YEM,S0T-+Rj[HKf[-HqHV
+`)@E,V$BH8CrMU2CmTQj(HG5lpl'8[ZmkSRR[rR!ihScVeSa'(*AZAAAmHV2jq)I
+0TZ(c+AT8ZPbeL#Rph'CQaAb28VSY*J*'Kb128JC5D[9$%6qUS1(KZ0U6+(e(RH+
+efa[RlMBH,D@8aC2YE8QEa5f'cqShZM4D2UXN@PPB9"'Yb#X[+UZ-aXV+LS[bBT9
+&T5AYSh0,Cd9RcUUSM%iY+XHYU+5Ld[C-(q3S'"AQk`KB$AVrT8'fI8fh0P[T9'!
+YX$dA,5X[R9k3!&GCB3(8$IZA+)0mbX)pNN`ZiDdq6P[l4)QMY,4A6q*V0b,f#8i
+HIT!!fG6*QdfG[1bH5fkmHN#VTKd'fKIC2Dqjh%DM(FfQj5ZQ46YjdCjjC5@9I6i
+cQjX2A(*Mmj0E04hFHfVki*[-jQNbQl1m9Kh0em-2'6jVq%&%R5,Mcqc8FhMZk%&
+!1rqDTQdQ4b06dmZmAR6YNiHfk45jpZcSk'MkmpG3r@DpUAimeJLa4Q21l&3l1RR
+a)I[2(jhETX4XVN)dr&icHM"0DfZ4@B,Te,-LVkbbV0NeE5fkD6Aa,Y+TTkeT'9h
+6pYU[aq8LBf8#!pieXPRYq`%MF`D%(6&r8,rK,F,)qIDG$D4CrJUI)'aIb(bL&,6
+Ti9'L"9R%NNiL+C55)T5HcT49QqC(Qi1BqP"dircj@DG3lr36+CUbJ+,5Ql)i5PQ
+549NTkC59RN,4,+(H8DEj[H9BQTpb(&LU2h!-6+(dFHQ8NTp&hNVJC%X,`'haHlL
+RV3$MJIA-4Q+cL6bcQG+-TNa`9&0Mj[FbCX8mBpD"XcELh)4c-dk00`C[0A*X4Uj
+0DAM[)3mM(qlc%3F'Lf-ccNf8p[j'mKi"6JCHLcp1)[JbIk5QMCC!UVl-l3Nb85I
+DQQ$MUVAE%'45C0@f""YTeE-)*K,BjmLA6""rRNJ32JrIZ`6fqCBeb36Kmc81J%e
+J$*krY5+*3,qe'FmMN85#,DY@irQ+C),0Uc+IaA1+E(%*-QR&+M`RPc#bQMC'm"%
+jK+JM%YMRiAXm4dVlI%AihTEC*X$cCcI(RiG9`I09mHGKbI"m9H)jEGPSRkp)2Pq
+cHFIcYeC[HfiVZ1fjVH$Dc9A2+A2&kSfCUj,2E8[B*$mfF0Ac40FP[pim2k0hM@L
+cV,lTlk9FH0bL2VfE4CYRpDprFXZX9Y('[@NqcmpFdA4GVihc0S&hY$(c6#rGG(2
+66EdfpPVAH%9)*2E-G*J-HXT')jNKb)dV9YZqc)a%3Ni`'eH(C,&PlCD3!#5fC,j
+P5jGTf``p'[EIXaZ4+a-YL04!pHaQQhV,kM"-QeH(BC!!8,+Qm9VZjHDZF!D,cfP
++rHH)9E1+"8()UC4Dka4%r((Vb!09fj1S0Kh1IH4N,a,H@hYAZh3(A68J9T%rTXq
+SD1H1RE2YQB&A+CDh'DJm%$'43SaRa!&LUNM"bfU8UR#4kH%M(abG&Z"50jZUcja
+E'5ZI9P"CB81MA8K4'[(J-&Ge5XG!!3M9b9Him-aiiB))"95,e$lGKL`E@M5P2&B
+qYq-pYV5#d9%`1#U&La6ER)KRQ#d+8f@BhXBc)qJiT#mVbpZ4RJfB8P"&`3"D3q%
+5BN"eUDECV0!q)3BEVa8"JMU8D8X`UQJQ*Q(d@J)&q&'S"XlD9%IK%U,!p%jec3r
++cVN@KBhALe!pLm*@iLF82eJ8GA$@Tpd8,L'+&,45!r1pSJB1KBdhM&"$S-b`+*!
+!Ie3KLTS!mEd&X4[14Y4Bi4+#3%Y5%r1GSLB1K)dhM9"6&0`2!438*k[`R3A3''I
+8E&+BZ8-!U@M5CZCE4FdF!"Y[(U(QYJS9KAmYjEF!JD%-`95F,@KhK3Z3!)4XC,i
+aIfEcMFhcCjYLGj`YUCA#*550J*6jQPS(Z$6+TJL@$q@9F9+,4dHiU+,@VK`"4Fa
+AR[N+%bke!TSfY)I#*85639RQ5fSEi&)cQp++LkC-,5SZ#!-$%&$8eQ()!%HdLe!
+lp((3GeC4FAjd6'94FB9MQ6e`YUF1#KG8-4bfc4I8NA%"mA5N!fP)G%a*AZR-Q38
+PP5%6&mH`1DQF8aSY,LSTU)K@PVTATBklYr(ee0,Lr),bD0(8F1mb*eC5k6"h`0Q
+*XK8Z5F`EU62E!69#R@PIkV)YUBAiPke1N3dA*+)&q8@9TH8G(ETXR([5AJUA*,V
+2D@r'"HMfTMkdVjdNbJV++qHL419j"If,bU-pSXd(9461M"88pqKI-,ZJZ,6-&Va
+(BZ6S84QZeASdGaMh`YQ&pP'i*$&q4PdC&f$XLJjY(UdSU%5,K+eS+jK%fLVabN(
+C"fFhkUj`5G,)TqB60TpD'X%f5+JlcKkdVm*&L[#q"XLT*qfRF2%'a90qE$ib(rV
+QBkVI-9B`Zl)8Dkq5@FA&EXCE4'haXIR)NYH(GVMC,c(FG+,pKIB(L&l8@q%LjI(
+094rUUh""6DU&'kaqjJ0&r4+!)qCpkQrqj10D[f2&h)V5iY*B[J@CQ-PLa88BJ2U
+6f'8GYPcQ2FVaF8Ra,8NTbL%Z$3H3!$5c)6!ErSh"a2c*pX!(YQ"pA6jEkRF$mbj
+9ckCUXd)D!iEH1!I3!3SAb88lCS,G"p)JK8YBceSB#!E6%)8,kQIMMFdl005X$h#
+e6$c&dQ*LJR24q"!R0"6JKTPeLSDj%Y5QhFcD`+cG1IH*`E*'c(TEYL&9CAXl-'p
+69MDPPKG8cSi9KrH$BX@+"VNFQD$c0B&CXk1d"q!FEYj50*a5*L",-h4X,Sd`EjS
+h&!+b2mLR'3D0!fQN`L9%dSbDQpF$mrUrS4hTKS,Qe-+mjTRAL"@0)'mNRV5QGZC
+9'Q9HmA%&MB"F#mV,Se9Gl@K%d5J(B3m-'+-M0"T$@5dh9i$l,Hm2L+&jmd0k-kr
+BbjZfMGq`NEGX6II&1FDmV'K-&H@pC&jNmj,0mk,0ml+P),c-a1i0NrB,G"#00Ar
+%$$11aT[Rc@Vc(1-4TVb$3#h2QPAQ'I1dHFSmDCi`M`IQfCfp'CK9[ipHJARQhmM
+)0dr[iYE!2,@YE`2cj0qDMmd6YX#2fpU1*8NaMp%%$jHd$*U!X42$RKhQkf%%ENV
+02C5E-e$[Y#cc+1eR(M%VD5*0-Jrl#2p+mSrBrPPTHf1L[8bL9,2#2'3H0!qBqfQ
+dEeE%1GJh$qhLlX!mZ+1J$ra1P!(3rEAN0Fc$P0efh45lVHJd28+Fmd,ZbTU8dGD
+qS"RYb-YjD8cZSc1i-9AIBrTlGFD69jLC3H2Y1ZBq1KJ8F!JM!#BpZ'SG-ePS-Pi
+H5M'&5cJ5f5A%&-T6Z)3-EbRPAXShp`5i0XNQ05[F+#8k2VjJLVHmN!!PU`*cYk+
+#+Vkq+c"h8HeX5LmXR9P3&UXXG*%4L)LjfcEC2EBZHBQk&0*8SDN!-Sd+&5la5FU
+M)TUZF%RXI-bGRVR6dZld+Uah"1D1N!#cd$@cbNYX!m9$k#%"0+%C"2+HBHFEZbS
+TS*P8SR$a$J`e"2P85Q9dQ-*9l$Bp`%K36TM!bPejl*B#GEB$q#bDVA!*"cP&pFc
+Y0-IFjZ-D*jAmdV`U8XQ+$h*ch##RU*DjP3lhF8RahF[$hBLBLCA5A,0Fd9b5[(#
+DU8P(d*%+Pq4dFdYJE[QjSa3Gk4S%fbTcXfpZ"VkmbX-Vf5bhRADE(4YQicb+MPD
+iK-@VMbRZ*R1MZF%h0k&i`iD0'$NX0U-JTlam'0DM@+M1*eY)0MGD#$GB#%IM2-C
+FVqJB"k%*TU$Vc,AQ'YpF&iI3VlKLK+ZrhFNQ)&aV)8!K)qCkf`899GZCUp2-e@K
+)RVa)S32$3FTQ[SVQQ@8qVVm18[1U''"TB*D'r)P--bZQKIGK&G2%,,0i$h0Gh"j
+p2Pr3Q%,(dR%+Pl#+l6(+ANR(d`)I9dITq9!)a5TQ1!V#jr!H6c)PK,%[R8!R+Pc
+LmHjd%TfXF)R(Zp)TY&$K%SphS92T0)9,2,iAR8jR+&cLmFjd*U(qCbELRHJX1P[
+K%VB*pNYd6S61XI["dGMDK'1$(4BKdF#-TqKXe`FGU+1j)M"Al15)43i2GNGdES6
+1aHD`G[0SHDbSSL!rA!HKCdV,Hf#cCd'Gi8"eTMh0%YmX!D'!8D1+6R2[pU+pcH,
+!,2jEdbPDk(*Ja@-ZpmhPbG`RZhGGUCZjc$HA*GqGk*D*hE'K1FpFUZJm9bJE2cm
+#'F[Ze'48BHNX9(e30+q`)'p'@@P4I*d@0J2f,RBbZ06Z(aG!5A)*A8!AqVLQq&-
+U5m#b&lK0FNr`fN9#&b(G(qKLK8Z)%mXJZL4#PpMGl2L#q'E[BTbA'L5je#AC$fZ
+Hbb*dQGe$$mHBB-RXBJ[i3J$q!eeZ,[*a6I(cTaCMrhLj5pS2+jA&%9Um&9QUZFM
+#1`lR%R1K)R5@A8`-!cGG39HD#fLT3N$f`q3c$12V-VT+i5,&Q2H'B9P`Y6PIdG8
+N*@(1dA30ADY`iFk)Mk$4jMcIR'I,APL%+PbEb$Z#VM2R+VV1j8(FR11EFfcr944
+M5$MAGJr83SUZFR8EM3(lqJKG[l9ZLUjd-pP%1S4ZS"X9,Q%Z1e@IlCQcEBSEUaM
+jV-#FpBqC$(9'ZU8183be[iPZ9VL%L')da5cbc#*M&0eFKHM-`*bj#p'&&P&*e6,
+mPNbk4CUN*iB4iV9f)[XI!EjqB`IPf#fL(H"#B#YXIpKpHDI4-k*BFrk8mHE"`B#
+qrHdQ-2@@1[e+m`['aXV,LdV,Si2kjd"&dE@Mfr,plbreLjXq$P+YT-Y@)LlUUr9
+MNVV$#LV,5qF8P-qSL'j&M,8"&(1TYq"FL+VeV5TDMkU%@d2EF[IipmT9"reF%jY
+DjZCc$h0PGb`JCS(%,iZ-+)a9&%6hM%k!p[,[TF`BA$5cG89dK!8l,'B(hahIVdh
+P)hGd8-Qd`TK$rYqY3hl(8Idk$FSGPR0!(pXh3RD$YYaJ'PY1E$9b8l%ZZ&A4VBj
+hTY)dFhTJ6Yr&1fGB&$'FYp(Y#TIN6ZidFbUEdbbeRQT6h)lc$VT6i4,ZA&+`XlU
+,X$5jUfVRXY#FBNi1c-*`@@6A3Z'#2VqS2)`kU3q@i'+JeK&cXQ@mZa-,P+CdMj!
+!P9RF5rFTA+!BG0rp3[FMfdRQa-#F&!k(i6,GSR+4%0'*YNEhiAb!(P5i*"Ic*p"
+$M!Yff!pKBcSS1L#H-JSj35aD'-ZE%Df`)SCBCA4@48&jKC-`i$%fIeC4%mf,PEM
+eI6L`!6Cf4UAP@(4Ba!rLA%%2+eb5L"I35XB&L&GLJG[(V[qR3+b!14Di5UC&5i'
+Mh#,HVQ,BUP3&T54KGZ`B&cBmM2-4HP6K%Qjpl,,N-AVF(+p`$A[)3dFq)I3%%Me
+*6bPFf,+@eHFmVHKTa`L)QZ-#!pRY[cF52BAdcjKM&6hM#+8D8+e5Y-UPKm,'c!q
+`'2QP$iqe6Ieie5CNRMR'(1fEHEXf)@b1XA4`Y+@DiffT(mAjV$P+dE0Zi98$j2!
+FV9DiK!0A(@aZRUFr+Pc#l9-Gk)&H-0Jf[H!'4KYrd4bKk%8hD0Vi5i50mdYZ['T
+!MFaFhm`0Yd`PjBTH6Z4Y3+qB`a@pNX$9J&ieFa5pkMBYL*[Cp*UCjH0D[f0"V,a
+LkY6mmUTk4LQ'Z+,A,20D2(A&31A+CSkp306-jJKl1G)f#4DmLG%3DqI+R@Z2eDj
+S0E"5Hcf6AZHhrdH#QA"BRhkMYXq%GXP%DA&0c0mchPbamPR-K$EA`DN$LNSJpIP
+rm,R$i6HpYHq+!F2lMl59L-q%0Al-SNE0VDJXQ!N'Ym)LC!@a!6dUe5JKhYQHS8H
+m,2qc`B6hDi[mh`N[R1R-8CB%lm6j"VfTF%Q1C"@QR!dDP!h+,r3QcVGSMF)P(-R
+5XC*mQpBUA*)Mf@'dcT3&Z2j6k,)1B0DE8NAVUhLT*$!P9$qEI*F6j&#CL!e&6!`
+5LF'JTQKYe5,m(D&h!1CGfU"`5Fjal`QpKf`c6A&JC[iZ`a#$MK,DJ202p,l#*Ej
+2VdiId)F+PlJb+Bdq-M-8IH6@cMEq-AfLF)Nh3$8ch45C`X"-rpG-LJi58fKVq8P
+56@LQq@CDFKQ0!L[kX+SpTJCQkLmD!ASIYIZ82P1iK,AcNIYcfQJ[)3!IUSS#(2r
+5!N*IRJ#F(jMm%$$QaVc5@9$8f8Jr'a(k$)#rS#m9,L(J$+JG[k+[&5lK&*3"CFQ
+Ik4Z&LpH9V8bUSFQMEfQ6MbY+A$S&3S9[(9K)3Xf8`%cj9h%fZ8DXLdRT1`0"aRG
+ZNV,almfKLVjhf'hm"i,bp!Hh`UZ25@UbEbB$Gh&"#9DZQahZZP6I("+B3hD4$K[
+i4,#*f9lmaQ@&a0%F(*L$Gf99p(99'dd+c#4UN!"03A`6'bC$F)30KX4'Ak+CYT!
+!9VKiij!!X`P@*-C-C)#'6YJbA8HDa#cS)m(08e"SKPhANETa#PG6R1)SU#1@b"-
+ieB`2c)6rP+)`C+@FCXBT6R2,p%kd*kGcGFATVRaBITZaJ4Rlbl6)8!VE20R8f4`
+8Q)2#a3mi`R9#'(+-,`CP&6-HEF69UPTM6'$'*(+k*9%B'KQ'8'H8acHM&IYZlGX
+G64"`K"9R+!lFfVFlpH4-cP+FkEJ!Dh#ZB8BTVZ&J)Qj'"QEN6TKX-)XUKUq$C@&
+)(mf"RX(+3c%84,EeHP%1ea5'#*aVF@h&Y9cVpD+qA)IV+UlMJ%,6D%B%CX62M+N
+B!ZC%hA-$Nr[2QB3KJ1CkCVMLHQiedJpeU+qiIQ*ChYm-m`c8*f+'i`+0Mr"Zh%!
+aC-Zf-3E5%'l)M43hG,LK864$!c0dCb-SEZ5J$D,"CSKRKKJMh!#S'T["#TUTX"Q
+'dfKZ)Y`%cjTb9(&6e`c$k8"ZaXd9ajA0`bRA$2)-e)D+QeI9I@"J"[kVlT!!9(!
+,Fi$L&UlZ)`&jGm@l1f3M)4SFi*N"+)ij`"BI8JA`J5[$@""%5fkP'"TS#0)3Rm#
+YZBeL+*aY$FE51*-6Q*bG2GV'JE6#[rkHk@r,ekUUI2d#dqqAJFL-YX+eL6XC8&N
+cNB4JXQpJq[iq%QKd`4lF9M&%dlDd8kL!fh&laHeFL5"!-hdmdmH@U(e9LAS("KB
+U[hGB@f$VB(STlT!!h1*b4m8G(6+laGhI-rY$"QjkfEPi$G*eiQc&SB6Dl3Ef-ch
+Cl'G()rLY#%-(cCej6i9a+p`0`#U!pq+p&Hp9Y4[BPlZB(S(CPjTR8qCKX`V+jf+
+29eTQ9j!!&I%(f*EQZJI#8$[c2UDliRfUUYXY-0h#X3YQ$BR&JSdPaE$G,52dX)b
+`Gha$)!pb9q'Z!010!@DVm,QVfBG09e[#I@`*)AcQ(Vb[BJLI%l[9,S`UGd%jZ5H
+@JVY&qe6-L-DQP-kUM-ka'eblDV9E$@5d##!ejIeiIm@JAkGF9QC[lX@pIE2hVe)
+TKL,(+RT3#ZjMpP+-TSlVplK[K2Y#r0TLV-8EEf$XDdZh#pDhbAVf`YiHjM'HfC2
+lFArIl*Q3!29`2i[5'MfNFBlTV"LUD#[cXI%"`P!cm`%m82%"5EF'(K6K3@MPe0$
+C`#Pp'#TR(Xa$&()Rr"KiD!3dNNR9R5Y%89`8a%0`$M2J$BLCicS6(KlKi5K#5Pq
+XTF-X"PS&0TM58lNrUYD*Fde(hh4+D)-B%QZE1jfUmiJ)MpL@1pA!R%-BJR)qN!"
+(+Mi`XBQSaD-B8q-S0a&Q8!dHBcSSKJ,BE5CUm%%m9[&"EMZ3!!N9B([IY%m)JAL
+XHfIRr(DqDCF8rR5`[$+kLSdJa'dEXVJPJmV5X!YGF(4TU&%@(SRDM12aLXFjhUP
+0YFdHTJfE2@c9VHd9MmFjJ5FURZ"iakCScC2BY,Dm-`Rc3X1Y['0Aq,(b203*4$#
+Vh1RkH5,1JrN3KI9Nb$beB624LLIcSEjTp4[c30TUQ3H''a`c,4A(A,ICq*3)6m%
+qS8h)2"JNmJSU+L"Pq6[e@-&#R(jDfNBq&)fm1qGa[Qpf6p*2RU1IZY53!!Y-#`@
+a3%Jr0Mj9'&T@RXEB+%ac&DK,pEJS`NABJ+5&kp!4S#pEDR3q6qFCLU&SYBRU8Ad
+ZMV#YSVG20fK@E4*FHDE"1$V6*B%9#*G%Z'3(mc5h"B2j8bVRSf$0Z04%IG-Xb6b
+P,MFF3,JXJVhLGZD"ji[`)6J2ih,&KcRQD8kYZB+4'J4SQDFjYH4CTURL@BjjE(`
+fce%mfc&-#fTTQ[LQ5C*jjVKh9LrIf$H0Nmc6e$*2C4Ac0!T-)dV2TK4,"EB5j6J
+2jlQ+3i@XYHjSBaUD"Q`DfKShX#NJ)H%Mq%M&4cLHX5Pfik2Bl'CjjUJIH3B$Bf9
+4AK30Ae%B+im,l2P)R%Ic-BU2GJZC0R3+cq2jTMiIUhJH#3Cb[1R1ar(aLL(DXhZ
+)0Y5"&r!*LZ%GCqX(9a&6,c$eYYC2m3N*PApl2M(#*rlBpBSK*V9BXUN,Rm3R+ck
+TDZp80c"eYf1"EY*Lk3`EMP-LI-Uf[P93'S5&kdR(mN)qeG6Kda4$ffA"pD3qI$U
+ISIKd"`j#4e-l-,9rShM&N!"q1X9MEcic`QIq0!FT2Y@0S[dTaSZ%&k'(cZ+c&Cr
+PZ,Sr665eq"`qecHeIZ2UFaaApkF$q$a68r&j9I(c63h&jlY#f2J&%Ei!CKrCrIp
+1eU15V6dUE1eSXPaa$SF5JNe0bi[RJKHcq%+'@M-V5H3A1L)I5+2i$bC6-A5KPXK
+Yr'*K+%(j%Vj8m5@Z((B0G9Q%,`[Rb"#jSj*,F9l1LaA(aCp$D$J[LI!50fp@8Fj
+LR&FBl2ZZ5'b@$Z3V)hcP$LU(U4)EH%LPmN8SQH+P*Z*$$jQJmU9*S5B[Lr#b(93
+1VblKXh&HC3,&9cNURi4Q[CU[83ceU+Ab565CVc@qBUK%,CAEq(9m[H+i5[4JQQb
+Uq`C13h%U[pkpQd3(Qh6I`0NY6Z@qC34)8"08$PHRY(#RP&mDCeT%A!1)#@aYkpL
+-%"*E$XN(EpdJI!1UG52IT2K'ab(jG+4*jC[j&YqNrXBK0c[1b+GT[0aJEEbm+Rk
+V59%-)CpY&"Zr,F+hBDRCrIp`##aRh,SJ6LC@0'1XPT0[3@GkI$[Ii4XX$H*N!Tf
+I*C0#UZ!lM5L'@B%P%aZr5rJZe2PZ[NFaG(Zf,S8dJqq0m,er)4-)qIJq[PraI5l
+2$#VK"b,m`&r)"-SqIY"JBrDJbe0#Kr&$%AjS"jRB6Cfae-"hS'43V'VM3bQ6)*-
+9,RFPcH'()rc`GM,4b#0m%mk9@LYHkFMN+(6Y)rbSiNFFQ4a&mrJa[8AaBij-E2a
+aIN,aiiidMUCjHV1[0bI*j!Rh$SB%qJGIrj!!)"-0hbh&MbE*4(mIk1pr)41YE@h
+K"URi@&H@"CMHRZ5R&%1kCbZkJ%lLTb2mp)lZ8[a8&F$[![hG,`$j'*6p'9kPq"N
+hK#kNKAU6rTBe,+aB@c-VASAc@Aj1-E4fGJLe+ElKeDcKBaAKe6mZf3CJm`#+'9j
+DdJ%Kem)3jI(cr%I&clY*EL'pcbr`LrV2r**L+2+XVH0#L$"IjPF83fRRiPIcUrb
+DiPFGfbbN-rPerEALejfHa-EId&mTK[M*6S)frLDrTIK09rQ&G+Vq-Y"IEKmchh*
+0FbUG`@XL['BE$E$qbPkqYQPHFj!!ckBVq@hpKH+h(@3EAkXh+PlVTQBEAmIV&8-
+BC8Y`0Ph!lr#lLYpa*6LEcY'I"rVchiG4#+"X8FkKmhP$K$IX@0iTAZr!3B$2lr'
+I&,rR`%(HVcm,p'HrJrZ6!hFaAFE[4rMp(4@(R4CVq(JTMXXCVk2lq!2pU@+STfb
+&EIa$rNMaKki)ep(0r$&rS[KM9i6Vk(Vp5D!rqCPH&-Ge8YI66IaTK$rG`Hf+)FU
+bX'kPZrJcrPcaC`l@VA5ErMM3(qq%"B'8KA8EhFNE)laa4eAKLkAi46GlVD5er)8
+`p%lm*B-X[R5cedTkAAr%Ar1IIIh4El2Aefl@@NQ2m6Ik3m@3!"0Ci$EqEB5rh6Q
+[@aDF$DQ`ABXR(-qfM9JD*PZT$*Q9rS!hmAHqrL!jAB9k+4m#f6rbprTpaGqlkFV
+'Ia$q!CAFc"K$))HbPALFRQ)GB@eAD8QqhB)6`j!!BJa#0XP6Y%Si)PDDP,D0Q-0
+6p*m8)Q'L9E4D[)M!8@RVE+@YbCCqhaEX1a6X28R4'haYREV#f3UZUQ(Z&qKPU4D
+4DMYQU`ff(T!!PdQUIPF*Y%Zf`GkJYC)Qk8SJBE+ce4Zd4UVVGj6!J0$19MEZ5k$
+%Gc28Ql4'VrIeqX4X*B&l"r'MAZIVGFRCkKfd2TaHNk22fN#[T3bi&1@A6NA0F8A
+T4EpVU`S$2X8[ZB+m3qp,4*35b)GX,Gq"&$%M)KNr0S`5Z$iQX,dGk,IrLShrL&T
+R5TB5Ufe#dJrS!le'[m9kMHdLDfm&BeQ4'P*6#A`6%bRHe'q`YMCBfYTJ#B4,8NY
+U+kRP#1X$,YD[5afTkq[AIb8XJBQL&B9p`"1PRY4A8Lm4(bql53-P%"Ujq"KT+)f
+80%c%$j6'dN3*l!pGI*JdPDJ5D)9FI*!!0*2Q5Z!9lH)jdN*f9`*[3aI[)bfPP4+
+)H&am2fNYEC5d6X5lbak#qN!Ciq*GT*fd9p)Z%HmX(D5M%PMrZAJ(k56C5L"IFI%
+pT,2XU34D&4G[,A[*hNTJY1IL,D5,l+-%#K3AEbTGTCX5L%KF[+&dPaj+S"KamGe
+NAqQT"2S2&kmMqmRq#Z0)2&j$HNP[*D"V&eI54rVLNSJ(dNrk+m'ZdmA6*%F'+-P
+*a$dj3!BU6&%Z6NB'b@!PD'BArd''b&!Pd&Ziq,Fb6)BV'CD)Ib@j-N*"h"k2Ibi
+(bNJPF(#c"28"I5bM)M)+JXdk)`YLqA1V4SpC&GC"`0%9[0`XAAe-RqRAI2eD`Sj
+'4VJCih2k8NEV9jA%"4+)keGmr8Sm$qYA,BMK$[*Ap)f-LFJBDbFDaCF3YS4#'L9
+$(59r5prVPhhp-L"8aUB!+L3RpYd2T29,[RiTq@kJHfGBp)ZqIM(jEN$iMMe1e5r
+iqSAN1qLkl,Xdp[8IF56I1Gmr+c(8c`IkqImBKq(YE!Z2C9+@(+4A+i'Fa'C(A$r
+RkqH5KBF(V4+SU9"iVX'eC@a%aN+480-@(S+R+Qe&[2S`jlE9UF2epE1qIMCCR4i
+1(c4qHP@J9feE4NJSDr+KpfXLir3c5XDjA)MVThhpG,)@cpKN%&6C@M6PjM)q)Z-
+6Y4KD9$,$Y[Y-'*F8afX"&C@Y43YZTCrbp92*@ZcTm%&ETjm-p*1r$0F#ACLYbal
+FALES*j4-F(N4eirlq[&NAH"9Tm6TclJ$Cm[%#24l'C3HpNLX-Pi0k0aX06Vch[S
+aAcq@V!Dm4qfl,Ya02qVV4j2[S1DcllTc6rf)Vap*[S1NcllEMh[VPEjHQA`(LD&
+peiIlkiGprA$b(45-pPd1$p3VI'dplGblU(XhL)IUKhcp82)Gr'(YZf%m3MrSk`H
+6lk#[Y1m1j0(k!9mrN!"m"e0Dqfi-Mp2hqrVqj,[3[0ERm6a"*ZRlP%abhB1i[MI
+3prid-E+'HefUe-9NIBmF,)IiqTl%+N"JA'#a61*mQDc[9M)jA!@%m80&i'`R-CQ
+La!Q!m'bbj%@JFXH5T9qX*!q@!q'!2`9R[Vj,5El,-jQR5%&%#Uc28blQ$cX-hf8
+R6hM@TFSK+-5G-PAIiHXlNb2q9*HjJ!YP@N5Q9@91eAGBL*!![8UK&#NT$"Gm2*1
+2NHNb3pqZEe1`SV9,(VbTP'+CUHc)Lk%Im6)TdEFU62afk!rMT9+Q""SHfeNPA+D
+AqhTjFZJ[FqpQFSQqaGHh*)Iq@bh010%3Ph'&("D4`hEdJ*)CS@L5jr!48Ui`mSG
+p0)IRkTY&hf`Ei(EE!0C&$P*)N3S"ALX)`[*L(Xr60qNE@GpN8eLV1"MSLFb5f8U
+J%E)Z%r2iH*NMKbZ"&XJ#QmI(kKY%`e&1bH&9'i2V!hhp2da""ICe-PH18!,9$rD
+X%1!Xd0I*NDb[`jj9MS4(F02S+$$[V,*`R45hFil'eCK`J3Q(2K&SKH3S19V*8Di
+C&d"qISc-dpIUDj4Jhi[&(V#G*r2P@!@Er,!j&r!TFT`FVq3i4eF3rqLV!hhelq2
+8mDlV6Z#6C8&%&[a94`1rr"$IDAb@R#!R+S&Sb1)lM8rA9`AkUYraRHM`R3i0cNN
+41@Ql,%KJMSF9(j3Z@q4NNC04p90NSC*6A08[j([N9$P0,p0,PF#AcPEp3Vj@6TF
+cP-#AcPEP3Vj8cT4&5Xjd9B&S4PmCk#ZhMfR18ii[iN[NV)LFp4HCNjcKX#cQCA+
+fR+2%HG8K[N4I%HJVYQ-jaf&C`N[Ph)LFZk1HTcNbZB([N!$cj(`Pd!TKp%Im0VP
+!,P3#LcF,l!Dq85m*p**rf)S,e$k@8@rN@q8LqB15LecQQrK@[6M3cY%1hN8`d3l
+[)dEd8`*&N!$0!B@+[Mc3Pqp5l#U"DLR"DCF&qV*rF*U'15(VTCD9)0L5Lq85*4H
+lrVbAhj4,j6*pUFBE#)YXIpl,cmMPXPM*jDkRlZ@(C)PFS@5*+mkpI*qq10!AEqm
+TTc'#P14"Z6)L9fl9&#U"%-RL@-P2b&*CTJ5D)SYM*6qLra$S2fc(XFcKH)3IPkX
+LFY@1hVc-pHCcr+TF,D"4+)aXEcl(,mZeFTf5Daf`jhLe[LM3&qhUcHYFEklQPq4
+kZ8%*0%Ffmr2mNVi`d"H5lhV6PK#ii8"RAkrQjr8&JElJYkkX%LMTm`0prUkZK)d
+JkdYX9ek#mdCpRT)EA9Hq"6+p5@l@jfS`'53aYL[IiNrP&PQZj"EA6@raHVP9-0J
+j"c(%eqLc!hhfcSA#EDkce[!kZ6dLYrmS!K$SQ5bX$IbKh#&h+VR$`GV!lqQc!Rh
+@6PL3!"eC@1ra"h*A41lDdE!36GQ'hFMIbGebMj+lAF0Zj'rPAX&B$[F`#h)MIk%
+A"AV4VSD&BjKYf#ri'lPI(P"b[m[m*33"C`Ekc,!m&B9a1N8%!e")U!qi2&r`PrU
+-3*ra@q[H8p@kT`IDHE(pHqYD)d0pMTeBcl-Af)kbYVDM!ZG5H9!H8J+r-8b2f1Z
+,2Ne@X)Br@d4@K#UGVG0M+%D)aSAlEQjm#1I$XP)*PLMJ!J#i4ak44r@T'P-99&$
+@ZF&ZT4q6aj9!"B@Q46a0RT!!*j9!lB3+)ZlT8`*pbZpcR4-[L5HTmP4%R[T4mL+
+21h!q&ZP2#cCMcTJ-m8#IM10hF(!PXq!#bC!!94&CYB-A),`#X8TG8-fc)P!dbA1
+#25!fIlENGE%dIPlqU%r5'&9K(@C,AKH,l"IN4583+YQUe-ALr#9j@3QX`Qa9kNS
+pI8+J6pJq6,cXDP"2'XJV%APPqe!#bc',S`N@k+r+DdTHG6LD5&1p)0!,YZ1!rEE
+&d95DbqX4HAe(,5%eX#C2EE%*Id2H9!)P&$J1mFlbPUa4!V@6"GC@fZRM!hhm,Sk
+$@`3i$K[jE(PEeLTjff9Z,pRkZ%!I4p&Xr1a!U#kVX'eU5aQ2Kff,Z",B1pQFf1V
+VB`0pl'pm&pGS@EkE(qMjZrMZ*%Y`eVP29Z0F*qZ93'f&[BadNfjkRMk'p6bE`[V
+$#D45mSl'jZ-GemlGd1A[bJCpP$j5bEZZREYK$rqH32)#TbREKYf`phpI2P$b[UY
+I0qQZM`Md%G[Em!2AKYfPTh`BN3prfJ(!I-TLk3d0`%IbXC+2(*EHdNI2$I6Fl9J
+JRE*BqNKrq53LRqaSk3f1RSE+F[P8",j3mTPmVZ3c9mqK-P-fbKIkF$e(b8CAck&
+B'RiTAbQ"(j'Y`9$S",k@2bYaEND)$p1c!celjaMeCeH2B6*#[SR)0hqCcU$GXE"
+'bhMj9MBTFIC2L)r4X`)pDbHX63l@'"NRhdANZaePG[j6@')@bIIbJa*i3&RQ1P5
+Qb@ECSX4j25%Hdj@"VYc&A*!!1PRQLXP8d@+8D*Gj#MDB&B'ZF-`9PL4N,MZMaH-
+KFi@6'P450LGfUESmd1@r-4IFU4,-G9LJ$p[&A0E,6m296q4c6$SBF"9qLLCXia)
+jda22df@k9(N`KE*YA#,c["5[Q[,`(aQfhdUN`N[edT5AkST6)U@k*0!P[r5EKer
+*X2e@+Z9HHX4,re%2kZ'[0#bXfA+N9phcPHG-S"#ISfF'HZC1@&"J@9Kcj!J[L(M
+"pMEfi29NfrJi1G@,H%VK2cV#0Mj16[%b[%cPi8Fd,%JX&R9aS)[rdFBHa&+fMBr
+(chKNH6@8"fFRQhQ"R+aR"(V'A`B3emC9!iKYBmqC4`($!Mdpd00rE@0[UikV+0"
+&ZpSBhR5X,5i22PjH69fS[*UZM4I*FUq@9eY2de19"i-TfmD,C)PAakZV21L`E,m
+YN[1mHPjpjF%2bS*B*'ITJN!Ar#3$8*lcL*+cj&a[YiLhfeC"Rr,U1M3AbU9H!kq
+KmL!qX'JZP)YdIU$criB'"P)@c89bLGFSiMADdEGBepZqA5ShHSfp*XTcSLr%VrH
+DHP(P0AA`X$,6HB(1fp@h@$RE[PdQehR0[1E+Jj@8cAb9A+HR"(U+m`#09BC0'dE
+#GP@HmjG#hUYd,0#ahhS9bSa%VaiDk%0hpHSdfkZ`e44Y$6Bd6"*C`dK60)a$4F1
+MP[9#5mL3!(Kl,EcGPHIqc!-ESA[eC(d)kmNfa5'ffI&R(Pj,VjAb@SE+!D5ihfZ
+Y21G*KHKpqZ"!(rb2@RMi'3q[MCkN22b-KmAiJ$bJ*qS*V1&aaGVbKjk%#q-R0,`
+pp(MP34NAGcR5ir4BeM"IBch@jS%$@aBXU92e39jEVjhAhZ[JG@50[q[*mYT5LKk
+M4qY4HQ5Jarc,25l3Shmh13cdU(rqai%HqGpZ8"PH1rbDJMk3!2,d#*hViGq%p2!
+!iAr@+%0$RCDLKhQG23d6SJb[-c6RHQLJKrjLT+MK!*[PGB*`CBJHV!F&HXM2Q3)
+pH+I0FD!(rFhT2F[,KP[0,AUJ2N!2d$Qk[qkRqqSq%'ZIUh[6qESA208[dr[6BVf
+IlURhe6hSqM3pd0RpqrU!q%m3q(T!h#(5ecQlIU2!erehrDH!Vr[YqJ@"32Ip@rd
+%Y5)ITA+L,4m&Fq)L(d9ckKj2liH)lVP,9ZVVIH0U'am9GRUF'RSi&Fh)@CklVLB
+G8TZDV#pTqmlLGe[CIhK)b@f,@lA`PPSkPRVK(b8SrF2&,6pUq8c,+h!qdr+6PTp
+qpRRal"KPaDK'M'VL&f0b*e2Y'09T(i128'0+RjkcI$a9+mTC2LCh5@CQKYIHNNP
+hZPYhdefp2Efpp$i"`VmlGZTZPMrK&jEP3IfQZ`5kbmr8N!$Pl3@#h9[[TIH%0Vb
+ccJldhMml',1'AjFJ$aUVmbk6AepMka2D"pI3qe#d0P9INEXLFbcq'FRql%4KlVX
+e+GM$YXYllA0Z'B-5Gl!PlN4VG8IG`G[Ekk,E"`Mr"aYRD*JrTqKfhMkHKXYFKJH
+K)1QfJ@llUbZVKLe@PVFh+Vk(EU0EkeDkTGipd([XbKRS0MYCYIA2"RZ"E[@EBek
+J@qldhJ[dlMYG$l1m,T5Z@qMQZTQ1kUDkL@kX'`@kaHpdi1[QF4S1G,2I$IGm(Bd
+lR[UkDGb$e0I@p@P'D4kSZ$%D2km8$Y`PP399MCrPr[9$0rVAP&0$YkHLYY2E%De
+["4*GQA0VlZ+*ldkD1'(PT!Q,0l6I-qHfh(V8pmU*lleE$"+G8GL3!&,D,PRD%Mr
+%NCCc4qkbkD$)i!Vm+mIdc2&8GeQ4$Fp!Z!MKY#YQ0-QjG@,ZH,-UelkCBHQcSq@
+@KK"K0Y#lH9fpEVTqS"[qVcP1`dmb4GIcZRXD@i`-VlYPQ,U"KK2V2ecp0"bUXVb
+ZB*JkZVDZT@[U'MSVd(9fj3cdIpJf"EV@eN9US'[q[,3+G)fI&L+"cYSjUfGjh@J
+%pp@C9K6+`h8'*+"+4h5JICl#49aXTBKm)TqLUr1CI!&I"[h@PEb-Ei-Hk3&qL"r
+QTk&YfF$[mkG@Am)DHMY2UN&q-%URBdfD*Q1a2*dSH9+!rHCK@'UGC,Fm1P@Za2U
+MQY`ZGqN8H8T@b5[bZ[EN3rP%[T([Y(MTAU$CfmeVT$&UC#BRYicNj'EGNR6NYmN
+Y5%jZ@!'&NjZ[3mHMdP,3@1Ka&!k'DA%&Dk"6rkB2#c4m(EBUN`+GmV2`*G$HImN
+&!Sfr,2VADKE9rkr0A`#6R(rI-pA3pH@KGH[IHAI$c0R[rHRp#+AR2[94Hp$YaqX
+rqI3c[2NmqHE@h#X`M&V,CGcKFNie@c@Q`8YLpPG`U(Q-DUr(E)V40%EeN!!A#kY
+NjY['8p-BlBEh$@,8-%D0`[H0Yle2Le%6%$U3!$A&@UmH8%8Y8YbEK8MYLAGAaZ!
+LKhHiYdLq#p([$R3YBi3(V80dEC,SEJr4lC&cHfk-fNkQGLhY'D2fZ(Iik9`5Ipd
+aM&i4MhB+SeI'SpRrP[R[jp+@U%VR'1eCE%Zb9k)N-Ia#NChICf-8m3TcTmr'[)*
++GiPAI*piEde(0h50peZhq*Z-CBYMe,epbj`l`Y4if51HBGpY'ASQ-k"6pSYhc2l
+E-[4+C!Lc!(A[12Sqm5a,JDP[(&ZrECRlEd1I%mm`)&%ci$`JMRIJYUb$YP9NF$c
+$N!"Y'BBQ-bb0iIFdN!!"pq(E-Z4ZUeQBD9PQlSK-cc`2,E#")3'Ejr$R'*KY-Ap
+&[RrlE8L4Gr`&RT311,QaGBYS"(Zm,2XEEiJYV-LV`"m&d2RfYpY`[f*dcMMB2G"
+0&C9cl3,TmBUb#Sa6p%+rh2j`&k@hq`l[EreP[h'rhFELIVZ0-pa2Yh'$SVaLr-`
+&Y`)KfrLHZ0[irS9BHH!qH05J#IKj$$jSl)K5kd-rKHBE'#a[Xkq(*jEpm!i#FLa
+")BXS$0rp`FCUR@*Me@#3!*0mpm$@h,#NF$'i1Dk4dV1aDM2`qi1YH")6h)U5q@!
+TNh`(2aIlR4r'-*mQBYKr*f29QQf0KAlr(ki)ka6q-*MllB"8H-mQkaIqi-$r"`!
+!$3!19A"NBA4P)&"33b"8Bf`i,M"UC@0dF`#3#9Z8!*!2!9A4!!'5l`!!,`[rN!4
+"8&"-BA"XG#%!V5`iU+qS`VB!!"%@!*!'#K8!N!36(3#3#"+i$-$ikjKR[Y4M,cI
++RaB&S0G&1Ffkp9NMSjabY4`3CY[SEqPeQh@%%rjiDRLDXP[cbAV5iqFQa`PEYi4
+hK&pN`)pXmTaXXXPJXilX)jY'RNIfNprNpT(*5RK(0YRRdH18jbR[I!IbJ9d1BUe
+m&1@r&J"3eEFTGlrN1,NYiC(Mj$C"e!BJ!(Tjf4%LMBJ#0P%YIZf4M)LP*Y2a4$b
+jAic%%Q)mP4(fK#@qEXC#KY%AVpf6(M0Y5``0G60r5%Ih)60M$rH20!(k0rVCqrR
+jZkjbN!#e'eJC9)4($STXDLS6Xi5CL8h%Tkf3!"$pYSLC56&U`B1Tj*J`lAE$U"Q
+hdqhK-+T3GLUC-%Hc)IJ96Nq0KQhSQ$4MBF2S(aH(S%BN8UQ$l+0T`m*i9SbPBP1
+69Y*QYTJ`Tbf4cX#'#k2rXBVIADVbR#0*2*6XifE'4BVF4flRkZ(@)jX'TVT(8L)
+cPA4NCf1CH0S@CMUGL-G-1jj+AUBFQ*c+fQ)mRN%96fCY-j%3AHKK$DYq)FMblPZ
+N+VMM%Lcb8l4kUFr-MZhT'KEE3YXLr0H#j3l!&iedFQPXN!!"6$YBmXbYNa[-094
+PS0!2+0)DHCDUI5Jf4+KQmT!!E@Ef@hD@S4%(-ULDY0f1!2,S'!5GDXKVS0!Q&8d
+MRjpmY*k-G$VfNa[MSaNcFbMdDr6"jmA[PmX'qCefl)hKKc(R8B$E$FFRi6JLS04
+3,R2A+[be&$"3k!RQBH++mK00&U&!IX)Y![L$Y0C!SDbX)SrmQ0Ej8$4%b)pabYM
+T61U!&E0,k*!!JaUdcV'LLUVP4blj%@NkVB@Dp94RS&"UDXJRPqJm,YC&U$S4(af
+2*b`&p!&Jqj3'6!*Ym0-'#2$YR)SRaX3H1jl)1YlAi6qIkJd8F*&MPZ6Ik3)0"FE
+K![S'I8hX55+q9#Ca&#C-C)&pCdSJIUfXX&-1+q@NKNL0+pb*jF5BP4&aPA6L6M0
+T1jVVm9p)&aNS+TSrT!B0"63hd29dp@T6P[L[R)ScE*94DbaZTc)K4pe&q$I5a3D
++LVS2U&&$!A@0e%AA)e*6D5YM(q,0)@Eea$1LA66hCbFQ65[4hQ00@iP8QJe[,de
+RYKh"[6d8D@pf0&k-Ae#6JD+LmAeUeP"!Bc1e8V2)@MC'4)dL1eK4fP*Q19+Dm'q
+Lc3D+5Sbm*pr9j(XF)qpbLmhi,k%@!i8H"pq2B,Q8@Jd8V[j5bhGN3ElYPHp3IFL
+dTZd8JM`jP8J3jF"qN!$Dm$4Ci2"kQb1hY4bjBGULdaD)D+1Y"JUGP`hX@A3CA@k
+JJ#GVP153!$aM8+JXf#rr4Q(jPKGPI5Kl+*Y+T-`a&PPH2Xa%(,%F*YeCSccb6BT
+i8ELp(&)'48K,JDFMhpl`b6Fq6c"G[X8cF)B0ZpcTaeDrlT1[8df%eNbT')1'VIL
+hd48'#Rd3iaM!A&j*9aNSP*rV-ICAdc8'#[M(q%Ej9lT@[ZC$b8NmbV&BhLXFY,4
+Dk(3Ya'fAVaUdhE'JMLk3!+Gpm[3AfiJZAq8jHieYZfE&YPGmmK8+4UJUBpR6CN,
+9Hmf%J390p3K38,lXNbqIXrB+r0I*P`bkMYbhS%X6CUUGVTF[bN8$J,i$iG1%K1L
+J'``85NN60FY62RRUFl8h1%Y"-ff5*ehb*'N'mYCe%bLAdPCjJRE)iek8L"'%UjA
+*L*@TGQ,%S"f1K#f)LdirG@*,@1rX&FKqc[dq%m-ljUa+alPiNFGiNC'Af0-@r&(
+jJN(4PFKlAMkRbHHjch2Fj`@1)$!$3A*4PI`,8RZRr$0fQ'i0)2DT,R,,Cq@#2#D
+ImFPR[jK&ReciDYAbb@1IKipA2[0PPYE56Y,GmQRUFD(3DkQ(hI+4iB*,@Lee8h9
+3rSPDj90bRRUT6clT"IcIE(k+ECpRDhZjk)2VFh*@2L%IPhqN6UqF+d@R9mjq'EN
+qqF4UI[MNierPQ`rU2SZ*YI**LV3YM[)U($k!YEMhkF((eP&Y'c2Si&Cbp4lE-rL
+lJpT'UYPbi24j0j0V)X#"!EVrij-R(i8GMD8M$1pT`cD@`eMj(L1'*bbf(q1X9LH
+-ZKH@mjC4ILS8X#J50KARmA&$d)mlNA&(XFF39J25"[E+TE"VQX+Z5-I$MrkdVkA
+amPh-L(6-r)K4%C*,[mM[&f'Ak)LPNhEA'9PXh[A`SmhhY66ZMSjlG[p-&[IVdeV
+3e4+5l`rF0M!eX"FlNIrQ"m)G!i-Mr9#EQfPX[9hiaceT9bFGrF-GV@(rdHq,%H&
+jDSEUQk*8Am)DJ$AXH5"F*firFYZ1h-KJDe)@9a30r%D1l+EpEDc-6#IXF%FfPVE
+6660YV'lr1[$mi3lf0%dcE8IIhcH)MRCC!hJ0h*AjI6IepUQ*b29h$fa5b%2-Bk#
+kDfMSaY,"3c&d4)`EjjLlF)kj0iJV!NiMZT[FZ,0i2"S&kbJRQLNDl5*4b1@#pe2
+8med5lRY*k&%+DS+#HT!!JQi2"6eZ%N(NYY!S&p@r66Rh24TjHU"M&fiZqccN(N0
+@2`DG'TqUS*[eZe"AjiN1)rfaIQUi9EK`)+R'-BH[3)e5jMUPc"q@FK(AUJ,q*Ia
+&r'I"NH#H4BmLHLe9Jqp#(ab0mUKc`+'"G46a,e(eD`9br4Bk0HK9dHU%L&UYcVd
+#"mM+#hcD)-"VmMmD&'C2V5S)N!"rGV9"J@ER!*BE-"hp+Je+p()$49GmT`(6Pdp
+8'LMk#8F!0j!!%[6MqBU#XmH,S2[pj3E,Xr1JjbX0LV1"1G$*M`X90`K3IKCdFKV
+kjkRJab0b&-*(0'#kiS11PNc2+clEc!e!Rm005p'9+k$2PZM+-Y"Rbh4D,M!pAk'
+I+*kM(jpITE1$Uh4fm&4aK8k"r(`K-&ZKmdK`Nhm1m!Up2(@9&p9bYG'eSLQidh2
+DrB0l(Zb+0SRQB%rpICF%@m6'+1@dA#$IZ0KC1,b%h$NVj@(CHEDaf,M8@HKFh*K
+A3F*r`0%N-91-qJ0+C#%rch-Cm2Y9*XM#[!U,j92,+L5@!mICZJ#2'@C8cGpF!Ed
+#'%'dKUUj)VGHRPF`&HF9M"#UH&VbmNVRiUUZVk8,V@(mEm9DYj+##13UUPTrIqP
++baGDjfCE4hI6Gr4p1*fJeNlUEjEEVGlFYB@HQ8CH0"Ud4bLBM@@r"Hal[#6a!M,
+FIdX[P$l#5`h`hirdlKZ"J+HcpL&fiBeX1MZ"qX2Z`CjHdM4pjd!2pK6Y3QHTd9U
+FT8Dl`PPTY"ha@!+()feh2*CPI#pUaNFRaXG`d0'5haa+BEh9i)'kFC1fF-YPP*0
+bL1KLB$K[+Gi2JD'[`QD!EAGZiV8$`$cF$laI!G[XRQ$-mdYJNIAhUakDYY"G+2%
+@`-0@Sl#hJ@&4Ne+3!1F$B,YBDah9V!9fUk2*blf21Ifm6H"Kc9*BLlCJjZJKK@d
+$Ejq$qDi'liL$'GH"GdF*ZaYB`qYjjFGfB(j(4qfY`)Eq$`#3!`d!'&9`C'&dC5"
+8Bf`J8fKPE'`J*L"6D%aTBJ#3"hL-!*!2!BKU!!'GS!!!,`[rN!4"8&"-BA"XG#%
+!V5`iU+qS`d3!!"&B!*!'#N%!N!42``#3#2IC$-$9-Fpmq`EF+$GD&)"H(H@HT9q
+$2%fZPJ01Vil3jdH[fk`MR2"If4UHTUbemrCkdMUkb5E(eLhKC"2qC-#2F2+m)jX
+-q%HfC0-f1AjN(aPXF[[)C#@m)rYB6i[b-fmlL!hN!lH$2&YjAKlP[aB!80@hf@E
+lb#E(b'd*Ma`RU0J%&4Y2!(63fH'*""%&RbF+i"82f0CBLab`TA@hE8f0TD8pBFR
+akDQS(8Y-4H)aZhClFLaL@h)d'TFM%eBm,TY3ha$E*3hi')l`Ql*("NBE!*rlIR&
+qrj818VP6aUDd`ejfQiE&Y"a2a-HXP%b-bjR%G%U1c+4YDe,fD9B,89PZpP%V498
+HY+h#f10L(d*3&GIMSRUNfY%cKREYX5UMpSeL1PCT@kl0CRFL191CLSRG%j@fG-h
++MCXfA9%YZb"lYfk'jfbA&$k8h+Q,'CF*FMpf1eH2VheXcH"dpfK#TUDjHl'd6%G
+6XD3Y)mPN2"D0m+KFaYf6Np0T@il(8UKL8fNlJQRTJSBeS[A369S9rXqBF%Z'qb,
+TXHeG)h*MbmBfIJ0JZB2SM##$A)*EC!)6GaB8h3Dj`9a"C5B+BimQPDR691j$XE+
+0+LCRl%KUYf@R'4Te)*2+5@c6@L[)Bf!8$+SJViP#6'UD)*qII&4$J@3bqJ4QAip
+mbkmKK-H,edqQLF+)XbM`J&Sb+H$S-ald8j!!3Z69fSJ04eZS*6CJiJfT[!N"E3#
+pT8VeT8Q9MJ('Ur`BFM3J2I(%5'`53`3R440I3N,P@DF-EcA9Q#MJK#1*e"IUFk'
+qB*h2@D)'lhQddN5K"k5F+Y3LRHp$8GG'ISaTbNkQ%RZXU&e!Kah8T21GGT564hh
+Q8Tq4-'JPh065"5B+lFC,I[8TVI+KU'UMmRKXehJXEQQJ$i"*Ua`2ASc6KAkk%#h
+fECf1aFINGMX@6cX$G3(H1PTYSN!A1D"*rBdZ%LJ`BaI4MA5ph$i968a1@P1f$Y"
+i""PMhj@3!2(BP)A86MLXK*0'R+D-FfJAmM@QmeAH&CQb(FqVmGD60&'82(p#$3)
+&2$I3CVVUM#KEr&Iq&F+mJ&TM-6Z"b0EZ*0j'@Q1L+,RlQ#i@+1$ZBZULc4*$Pl4
+5pJaDP)TD2E'8E*H0!qQ*bBJ9EqqapPVa4*)EhPkBcR5l(BeIdp,@$NrXF3hH5kM
+*4&(bq&Hk9+#!adYT,6A+Y'9M423SFJG,6TZ+,-G+%pkeY-j%8BU4Me41U)mi4R)
+XX3j[-kdh84Jam$Qm,U-0*JVA3%(b3h9+IH"9(e*Y5m6DDbH`)%a0aq0%'E!ISQC
+m3ThLm2U!$@`S"RNVY4M%Np0+E5B+)k9T!GT)PjXSd*-9`2edKAVIT#Z+K[hU,h5
+PHXq,XVBP2C01a"14-6CCA#L``#(XVb6$@F!mkPfkbS[#lH@3!$,T+K)*(EIPkKf
+IHZGFJKRU2Ck"plPKPcYkh1UhIHTYUQLM&G-kaZ#K$Hqhk'S6K6'%F3`L"+kK65B
++hFpU*%dlE6C4S(q-VeCrTJjedSH5NhJAaf*a@h(3`X*L8!I-AD[H-ZPDT`8eG)&
+kdkIHr'V(-G4E2'FRZ@fEPp[fKNqp3D%f+NYCpYj)A0Fl)R'60MNDf&R8kcleqYR
+@ASehLeS`D3ZjEi&+!fDdNm,UK$TZ!M#f)(`DG+TY09&S*`h8U)lje,&cEVFk5`%
+58KeeUD-N6!U6kbC3,UAekNr8V9lcSN5-)&bY9%SZ6l86)bCe1aE@)Bpkr05$(D,
+Df5Z3!2fFqhd4$1qBMMIe'KFRH)b2-l,!29f2YeHpDP,[FZ5pSPi@kKA@HCPeAZ8
+)!M-B`Mj@T[j)IA5G1S)GTPm!42leN9XG9LqT3qT&RcVme5cke%[IV&SqGHKFq(M
+9LepRDB#Z)m1YAU!"&`TAJ!E3*qaC3DTbS8mL32e8(P,cY%%pV`l50VTHcAN"rcH
+GF43aS)AQBN%1dIASqh2U@I@-1U$q3$eHp9`K2,hUfDp$ekHH1C-J2RAJQi6c`Gf
+rJk*5c9&Emm)ZhUKEprK*p"iDHVU+!Xh-S$[ANk[hm2DKhpdT9P2&ZMdRclZCA"0
+"MJc3r9mF2riNfY&511$S6@dLNV,'j&iVaEHAiTBi20bY%b20HcS89cUl&'EIL`R
+JYD2ikC6!jN[BNjb2VbL5IYVC3@)reL6#QN"LF)GDE(AYT9CA@mIM6rkXVkPq3cm
+cfMTQ(f98YUM&AfChbeDAl)JQTqbZ8bVIf2riNihh0G9[#iplYMfPmVZ0[5,NDQT
+4R`cH0MJpZ!0,N[rQ"eXl"SG'"q!f-eZrpRET(rFNACfdrm!GDe[pqaq@Sp,c`Lc
+90S5TYS$9!D[ErQ"VMEcpXGZfC%D(eNkTr,+M`GqSd@fdZjQG4C*aZl8M(8hDbBE
+CCRDhZ`SmIfX(pc4*Xmhl2pNj"%@lk!'m1PCPIYp0[Aek)M)$hB0V02))maJSlaS
+H[U&`9p%-!iRMaLASENPdE`KR"9aJ$$HjFFlai0!9UU'-E+4`Z)YN,T-*h8pKc`p
+)ZZmPDB3T*#5&M"#&h"i+HG`N3`D&TD"-f2JqCGch#2,d`%HrQc`l2H3H3hJr$Cq
+#,dr`cIjGU-Zc42Z`#@#l&6L&Z("2+FI0L)p0p8TP1TA+lP0U!@Ha(0j&[(QmTm&
+4i*k'4KjDLqAJZk#$fe3@G3Bi2,#220j&+Rml4klI`UH!Ajfd6SMSAH[XPq-!@Ik
+#ra!)mKEqGi(F(2DCCB%JqHI1#14SlL$!SJ$6S9F5+0#,!TUZqBi!djH1P33drCK
+MJ!@8![eSYZ6Jp0%mk(jr8@"TEKldE%NJ2aFm#$VjFIaLJ5"Pjd!R4p!r6cNr2L,
+()IS)!DCV2ZL3!'4k9[1jc5`!qN'F`$4GG`AdZ3*GY`cdZ5+GPR*-cjESar*Rk8I
+Rcp#jJfISh-%6q@8k"E2cZH"FLFiM`5,r(1"PHR(U5PpBC!,K5YN3fZSjkIl423p
+eK4YNBkLRpVj,3NebGCJb)K2-eLpdj[BY)RG1+l92GCkZcpF[GZBk&eCRGC!!m"Y
+d2#R-&+2qS$DCbmlcA!EpITd*+MH[`f,Ta*)1LDAJ8@jGN!$($$1UjqpJ$PT"M##
+NiHTJRU@AjM9-qAN0)i4+25hdFUYcfY9RhX)Tf$6rYh&9,BFLmVQ-bUV["q,GZ8!
+Z*$HrI2&ST6A'$mA(A)ZI'ka3@$#@VrRL5-pX2HmGGH)"#['Z"1b"G$6pAGj(H,G
+"rC24hTfM%(iUEFq`qpqRNqN*e)HkKhTk`6ZqGE#(ej92RGe''-jZ)`,1CL0@aD*
+a(*4%8bbDC[abe)a[Q4JI`k&(E"XCZ+8ApBj[$bH`r)TGP&&UQ(Yej"EXM[V1rMe
+JNRR!ILb1p(@i*aMcR!*[Y2TqaJ)h!+YcH"85'#*3Bqh!B%FT549KF555`3+MDUM
+L9[#`1E''&pVGKadpEabm@`Zml`$VTdFdaMhSF$"I"PMB`FalSCdVB!I!DhXhUr[
+a-$#2mjp!B"EB0BkR`+q!hI&r!!d!$99`C'&dC5"8Bf`i,M"PE'`J*L"6D%aTBJ#
+3"lG*!*!2!C,[!!'SG3!!,`[rN!4"8&"-BA"XG#%!V5`iU+qS`r-!!"(%!*!'#Q8
+!N!3Z@3#3#&'+$-$ikjKR[MelZ9&ZY#LHAKIP4NZYFQ!dZGTPF[TGp2PTYeP(11'
+8Vfc0ARCVjj(eT(9ZXXQaG8XifB3rf4*qC*0RK*00"TX9f8Hi4jj&pT%C2r+EV)6
+RN!!@V8[+"qP!2SXe@[Pb2+2me`lBUQqcl$TbR0b@m-Ka-Yd%04Y2!(63fH'*0#)
++0"2jm@Th,eUT2j+ZTJ2-4)Y'J&@HcJT@YJSba'aX6`k&VDJj%)Q[Efc5`HN2Tka
+Yh31e`TI['rbElrIRGPeQ)iXIdqM`3A1`ELalB'8A"8c85Di08D8JlBHSUP"A5hh
+`jUlXL&XK0He(XJGkEqkGq-93BR!mBF@'"`Flpm*4l`kL(R"(P)13!ehCiDm9ldP
+&alk5*,T09DkcA@*m++96U[0QJT`("k9kB2A"PEd6Q`B5CQTLh,4'BfNc(8R&NTB
+C6LEMX8MBLLA',c(h*5E-XBQdC3l(8UKLifNV()qEEG#)EP0kME#e226[-C'@r,%
+cR"lDhVE0A0HiVNPH(eK12cUMN8i169TN!02f&"5G1MR"A%4P"JTpYb+9mcb9He!
+XDk++XAe@1$85YG)#$GL3!%(PT28SV6*bk4J&R5V)ED$3aK40)iqA2,58M#[@ErR
+GeYLZ9$LeVr&Kk1"air@5BD$3ik)*h-Gc"[PXHF(pA[+,I$)C15Z[mCai-2!'D,'
+"3RP!GfN*j`eDBRX3I+NA$XiK[l4J@f`-Fi33+VV)LmCL[*AmT8'9YJX(TZ%FrX+
+!UR)Kq$)[,4-AdSPrZ[J#,[K,X9+'pebU-P$!LZ3FmHFmUr(RSM-V%P9ick2P"JS
+eD5jbmprTI!q+kLEbBYj69M+9f"f0@!@dhdB01YrZKiXUq$-(IdDD6X[KTTT@'#L
+8'`mCr$Hk`)0L5419af1lKQ2aU!)k!4KdJHh"Jl'V`B2QHpSRB[%KFlX9LkIYd9b
+"ek4D!`@k+%P2r#R9D5JJ@dIAd4CcqhJN-6B@(EH3!'94-aj'@&Qh*XaiE$bD0Uf
+%c8VBX@BQKK@1N6'(%r'KD-U-$DZSZc8mEYQHDr'ZT&8'LT,RrkF,046`I#&YS-[
+2L)V&Ei)d*R#dL%D(BPBLe@Ll@i@hRLib8*6Fr4qYeP$!h@TUS`dQKLiC69Rld+*
+8*0S45jR0CPehHR3X()dhGd6h4Z1*T$5mZ6#Gk@C,E620GEE(Lr"H6!d'LT,(6fL
+0KJ)Hem"PRCQ1@KJ40BV5`C,6qL,,YY+!pa*DDk!Sa8L12pBi*c(bX8LXaGY)331
+&(J2IKdPZSR8'#NGh3I)MrT!!2h$c4e69')lZY4,B0-BRiR'L$0Mh83-qM6q8m2T
+!0S*eaBdJ5*IUG#P-r)JZ-e$S+8AcdH9dKB%#29N%h%YAm[X'A9Ndl1AhD$fIGU1
+XDNc[5bILLI#3!*JXELEKH!aE`hV5l8h1aAqPUp`SR'i*+B1Z)LfK8VZFhrA`Zpm
+QQ-kRC3EHPiCGBHY*Upram$Y8d85,*P5-`F0PH*YTJi&#lm-iqT&Q,A5eJ8,eFbR
+#Eb1e'LM32m&Am0X8iVFm+#@*GdNX&YFH'beX2MU&B+k0hc33(+S&PA3H[q(K0lj
+EPR4q8qEX,@PEkd,EA[I`ka4SSV*8e0SEMUYk4cKZd0@fKTm#212KQE1YhB#hR8m
+Ce%l1'k&5LiRG4"emNNmB!250#*pDC0jQkM43+#He9-I(2Acm@lHGpP*34b[j03H
+r4TT"(H5i(T5,D!hrKDlK9pdS%5-)efJUC5j-Y4dM"PeM@d!!8THAZV$G,,Ah#Q5
+rj(jR'--lT1+0AjALT)ca#8&158q$H,ZTad"4LVaAq'@0Aa'GPd@L"qm@IXQJ,3X
+5drbLaY-LmD*BH8P5#Nar!&YE'IqCYY+er!)Q[9F$L$9a+cRjH6l'8rbFKjrrEP`
+pI1b(EFc$8prQNjZIqcjZIA3Yk8iq5Rd1&%iIp@'ha$)Q@qib"cUPqDLAbJ-m5H[
+i@Ak'qZNkIYS0q$m4rUbdrKPTElm8ek(c6r'6r!3rcSp4PjZI+L5XQjrm2TNpr-5
+CQ2(`icr%S!IZrT8QLrPTDQUBf58,I(#hPl60,r3pZS4m$F+J2@[)XIR&lAf2lG&
+@8-A&Zpmqj`CbM2SP9d$hIR(bj"'dBfhKA#6VA(rr*M-m2Q4LIcGa!dJVF*Z&a6*
+LTNHMFHN9GR1eEf(ih4J!@8f+RiS*,0f%rF[qj'4MdQpE@dJlM(f+X2Z3!0DlJfH
+$MVd8G$5e2($N`FlkQV9G`QKU1I4V3Fe'R[e$GX3-1Xb@5(,FD[Z)mh9G$abTZl1
+qTLFdl1TjL2-MqPiYi+K[j%rPC#4(TD$hKRZ$,Eep!pe`QcP8XhV3p!klNSj@1[c
+8,DZ$hX1r0!G-ec'FV(#qULTJeF#UYpmEV$3($pkm-623YhUFm`Z1HKrKJ4iDD4"
+Ri@6F#VDN)dNV@AZS3Gb0,!(2'fb4RLET8-2K6hIf3G%UHJ#[@P5&hhRpjNie%CR
+Z6EdV&A*!H!+8YrAhEbdFF44$4q!iFADkc55k)i$6!mipZT1FZ"fjA"S&+LPMeP%
+Se%CQ,T-*h%8Kemr*G0j"TKkLJ'C53!p3`1QLJ-Y*CJ!VP+P4*U6rM$,1fc9bGF"
+(Pj0F1ehN(%*k2`UIQTbji&[m1e#ACiRfcmJZV)iT$Ta[j%SPPkdDjN`VFhBrm`a
+ZF$QmXhMcH1I"BA$RSC'(eQ`jq!lSi"#@4Cd"$JrL)iphPXVIcC(M6r#T`Dm+@MY
+%e$jfpXY*J#amrUm%r,+Zrd-J0iP0Cd(!6pl*-`)jQM`+X#JJG1L9"!VdSS#L+li
+Y)25j%b8"46pK'a!"CY#2CdX1jSrR3IGkL`*cNe1JCdX#q8Rr8G$*LcZE#2JT1`N
+kfB,H+FTjm4(C$Y&(#!KGm8'(T0#cLLpY&J(3Mq,LTZLU+k"2&ZLUCD"2&ZNdPa0
+kYN3rN6p,2cjeKLiG2%1A$Tl+,p$*Rjh+q5G,G"N*%IPkJ"ISaDNVI5%Yi`XY0QX
+$lDkhRIIIIPpEU0DX#h48hAPKS0jF%D+-P[&RDfCDFrYRN6[cc2ZjGEiQAc2EQQZ
+G@C&935+[hrE%Q#P"[AjP-THGNVRdHldU%cJhTF*LlY5F#SNjrh&TR9r'$$1UjZp
+S$PTqM##NiHTSAU6RTK4-q5N&)i4+25hdXXfq)kZEFZ(ZE"6[mrpGZ*BXC#,LZBc
++PYi&a,ecKK`)ERRP+$*+&qM[kEe5Dh2k(8@j-hm1D0-GKfTNlDM@lUD!V%V!lNj
+(dMq4G84@'p5r'GLmF`$#$k@YIGKpkBPd-Mf+qS90I4fiEp$*pYi1f9BqXeFE6EG
+A'meR,cEDmPJNMTZ69Kq,T!@r&,AJ'dH(Kh!,dRUfGGqi'I@1(rFRd&eY&f@BX8Z
+60RdMGK"edrmTX&A#!rBVEAVVrFj4`5TZ!QrpdVX%mcd-E+$!ZdHElX3DTV!(`F-
++bQa5a4&Y1Tc"rX+992%dH&LF4--0l8fiB5MX9I"Z+["1`ZYppTm9lY2J0GQBjd2
+Sj@c-q!4HNcEQZa`DYpKrArMQSAh-rLI"A`QHDA[be`(crJm!)5%1G'0X6@&M8(*
+[DQ9MG(-!N"E4!B!#BJ0h!*!$!3!"RD!!N!B[#`#3!iB!!!)!rj!%!`#Y0P!-X)6
+[T3#3"3@H%3#3"3'RIrrArrX!N!D6%3d0$%eKBe4ME#"08d`ZZ6"PE'`J*L"6D%a
+TBJ#3"`M!!*!3,`X!!F`h!*!$&[q3"%e08(*$9dP&!3#[Pr(PX)6YiJ!!!4i!!6%
+D!*!$G3!!)QfB5M6Q!*!'TA)4!!LbdAJqT3$Ldi`fC,5RjQK+Ai"mIT)55NR(rQ!
+RhrRBieJEr!(4ZNIl*!6+H@RGIKmki-8R!-9[k,6f!G5lBNkrLTCcYI[RD%XEcYA
+ZQU-YUc9A1cT(1l[bA%fISeALZGUYfCUp2jR1V['eF45UEf%5!!!1q+X'1FM2@@C
+*qAQG[4hPGVfac3TZce[V1Qmc1cHcbkm"fbYEXmkLlqhef55ihq[YK0Z%qq'Hj+"
+1(Y`2ph8La@YL)kqa$5(C6q"qi6j)i1f$Qq`MQ`&M!35-[miZZpCQH1EK+EGhX`d
+*lmJq-YRNf(kfm4X#j$Rb1h`bR@kc,#XQppQ@[@LZh*GCeS5[L6eKbm-lBbaEcdh
+@10XkF-"e2(!!*f0k3#(LLepX@9YIc#FqYM9KA%1k)j&-qaP96N`U-0'q0ADGpqi
+m*K2H0V@SH'rEPXXRX[NJ`q%M26!f8CIHI5L&-6`ZNq42F'VKP-@YcH5'42++9+)
+jPFh9lHa0`*E)AP66Gc8chf&091q*ic1*j0@*(DRqr#HTIeeZIh[9rm5QrEPmUMh
+HPXMP8VPZrh%VGRFdY`fN*p9`RY2N1c"bU"p0LXepGrSER`*5H$CEEA5"EaZM0YV
+-YrA(LlPek-a[Q[1mpX$UY4ZfUGqdX*l4"BGD+CMjYA04`'#!eRNX,9TSaZmj%HE
+qXfA09hX988"%+bChMGaMj"iVYi#d04kJNRZ#h"2PRJ4'bAfLh&2NRLVh0,P2NRZ
+kh$2NRLRh,,PRbce(lVPbRbch2,P2NAZqh+I+$GLI*RHYh+I,IBEF#q4H+2HCFTm
+Ppb+jcjEl(,R2PAZah1I*IElFGA*I)2F5Z5q8qb)T*AH$S,YM@5rhik5S8R8$ZpK
+lbUrdTA)Z**XBcJpdZX1K*F"#j`Y[HJKQS5"6"-1*hhL9f-XIh9A%FFmL(@ISL@-
+AU*mQP+"fI90YBf1m0Rj"I2(LZVIGcdSZPE1mXA%Y',+PLa,pkC!!MfIFC$r(RK$
+lpjd0j@Ij2`U8`(%Z%Lm$ZXAbAaKED,fQCT'K5HGCpKBhVKYaHM(QJQ*Hp,TTF$Q
+V&33jX"3A$*p!EkRYfA)l*-UbrPAZ#@Vl-,fUYKr!P64pFTkXYJI!NG4fX6bQU+e
+"(P29eP`J%2BqHCbNY[qN0F6f+RR-80Ylj6&6ECq6abber8JHXl99U1NFY3(PFpA
+f3(QFV,CemTLRYU3m6P(EIRNBq"IEFq9aUYTH)`rULBdDR+Df,mQM9QdrPFITbZc
+ST628KJmpL)dq@+Lf+q4aTYSH+iqce,CE(UDcaAC6!@eVrTXmcP%E06KAEG4JXGV
+ZNXGjMXfdqIPUSkCeDJ-$,P"E[6b@U#fK1)i0R#)1YKI*Jpl"pKCj2%KYRjE(JpA
+fIAP3@b#&a"qL0[*HUMCL294YMj6(-V9"VLp4fj2Pm6#e[93HrdjYEjA(`pAf'D"
+9EE!d%9%iim#Hj@UM2eHSMAcLDYXN$fU1$FUq8Qh2P-FUYGdXMm[9pLjjd+IB2Uq
+BLHdRmPMMf-D$LBp3'cd[r-(BU#pBKke*(Q!10[*@IMAq1I*S90XEj8&IB+2''p3
+'YK%I+!DA0kS0A+#Hf+M[P@VE*Sr0DRZ52,DSl6r,Bk[Dk+HVe2CCH6a+EG6edBj
+Y![Mq',949c!+'re$MYM!Eq'0aRDp2-!3E263GVAG)Jm`&Y[Aj8&-E2pEH3G8!Jl
+3SMB`DiIDk$&9GbDfbS-Efp2NX8YYj(UefX"&4$CXhj!!K`Sh%hmPM`l(0JP-8R9
+X%VL684ZpmALelC&(9QhJRmSlNqJE&DdQd6GJ0EDIbB1BFLE$BIDU$Eb'ef!$8q!
+Af1L"Dp6f&(NS,j`-jX'rX,eI(Np8flIN35r,-C6U@VA"6j4$RJJQJTrBk'Ib`ND
+pRUSfH"9pLZd0mU#2X)(P6eFE'(#$BjX#"[`(YF&2RU%fm1C'YG'hi#FfFS#cB)-
+[rNHeI8)Hce)E2"GH+@FUf!N'BU2[U3mfm"6qKBdqIjlDb1hjDRZp2&kJYY[Nm8+
+er9!Hrq6BTS'Ap#mf1*A4*-3'0hL*fX!DqJiE048&b0KH*`m`%pZRj2&Ie!E2qaI
+(GK+F&[c"4Uqr6'e`K[qU0[$Vj@UMPekKYRq6ab[9pR&j`1q``DIK[(+Q`b0IV6D
+i)Mf&$Cj$I'cJ,r`8'hMa@V94DfU)$GbLAl"p34ld2MEi)Va$cJakm8eUSeIHV$B
+i%V`2'lK#,YM!1"9BCY#VEeFEHEj$E4q4ac[9"NH%6mQC#8GrYpVJ`qp4'aJ'KQ1
+$Bla2EH!QH)J0[2L!fUMl"pAf-AR!0E$"#fpeE!KXeSI8"[DMA@#$Ve)IE2#ZMkS
+02N!Zf-!EX!8EZG+Rf2!"dl$pGhPm8QdSA'#&R0P`8(!9'l`A6SF0rRDlfZ!BGkL
+0ZX)TX)%&k"[BU#2F%aZFK[l&pNYjI0'acB%rS30JJm0r@@e`bkqS$Flc9E@"F``
+HB!0(lP3E[3&(`iB2q@,lZ6bqkGMQSX[!4l#K+AaEEI$HlkJ062fZfZ!N2@TUa0!
+C9&`,DUZVhTf86lD*9YV3Y,BaQfTTh9HhNcYCRD23+4!["AZK5NH4,JFL#i%&X#'
+XJ#P%&a)%8B@J3T3K$a"8L#Q%&#*+Ld)m)C`363JQa"*##C'%3%)F)G53!%E))L3
+43J#aJp""X#"`%%0)#331iJCKJcJ#k"!fL"S%$@)')B1)3F!JAK!ZL"B%#f)&SB*
+)36!K8C!!$NJ6K!"#K$!#@8%)3@#"6#!X))!JI#$!),"!#K%m)'`)(!JE#"S38`3
+-K!X%#dJ"!JA#"))%3JeL"!)#iJ0%'B)&XB*33D3JD"!`L"3%#Z)%JB1-3C`J6"!
+P#",%#%)%%B)!3A`J2*!!'JJ1a!C#!p'$c%"L)#q3!"D%084Ma'*%BK@@MDL-8!b
+*4(K"I!BI%@)4(e&Q%$%3"5"'#,&!,L)+!MQLGfAk")%#`4b4(B%CdSLJM'L-k)C
+`$%''r#0m)m*!cK%E)(f)64!b"(+%@84@L#d#,-)Z`Ld#,!3834,d4YK&q%)B4@"
+&@)9i)k3L,##1)2!Jp%(q%8B4Va!e)*H)S!KcL$53!$l%Cm4+4%V),D)NBLHN'P%
+5-4)4%M%83SV3K[L)Q)$BL-L)Z!MK4ma!4%3m4$4%+%-N4'4#0)9B3P-3!P8!M&S
+i3TTUih8bBQ)YApHdZMCHZlCeHcD4h@pYkQMG9pZd1j0*bf4FBVZmYUAfYHEVNPD
+LV5fGj0f4Dph@dYU@bQ(-YZChmTEKX5a4YZG5L@`5Pqfl@eT5f@fYDE%PNqRfpN4
+(-kDG#GFThC&,Yk8`YLI),#R*Y#B6EGZbU4fYiZbkjIGR8[*ZEXfQNRNRGLUElH"
+0(4`2eq,%00C-QK+eY+86HGF0flEf4(lRYKeYZe-dJ(K*A40YC0Lq2CI2YREX`*4
+UGelE@RCh*-QM[6@AG&,052b,@R)iC@3DFT[E'8@MNfj'NXQhL1(a1@NNH@HG(XJ
+P%afij9ThG#6D-,KT1`BR6E(PdfdQ(TEG*Y$qA+TMMaMbVHe8c$beYXQ1I*[DC,$
+4,IRZMYCF[VPJh1HDLU&hjh-G#C22-JmBkJ34,,PV9lH$"B`M@5XSEVUMpST8@mC
+Uf1b-*aP2-6BQT+aYaVSKGBdPlq@jGQY,I2fU9Ai1M5Y,jQ80qf[,16GX,6KB(X9
+Aqc+aENbf98*f1PP0UpG[fL,P01r,fp,E%fedUc%hT$TfHmC'1M59GFfE@cZDdh[
+a,UCdmG*(e'@bZdUjip0@cPaFr(l"h0#iZ@4f1dD0fM&BLef"H9NQNhaP)EG+N8d
+R5"`r"0A)TI+lfM0e&%G(&8D11fJ&Yh-(VH#,lU!92-dGY)+$ZB0@m#jhd!Sqj3j
+D`B[F35[iN5[98!ehd!V1VB0@KP[VS*AKccTSCI3'(E3bHS%1@KNY3!HY$-rA35[
+$RAA3b["R(E3bI&J(V5`'8(63b[T&J3rEj+b$9MBq1QKP`eeed-U'UqUJP8dIk+#
+9$Hr835ZE2Y""+a[ZU)0@0Ta2"keXDUq$9MBDJ`jDf@J+1QKPSahSS*@02U1$9MD
+kL`jDfHJT1QKPSk2SS*@00U+$9MEkK`jDfI5($PVCD!XkD'@M'HLJPFe!J`jDfI5
+($PV&`!99bf,dT!jDaHJ6(E5+NEm1@XAJl6TS&B0rkk"9$'c33DXB2&N(V@*`C"f
+dLX'(GG!U"MESS&8-(8S(V@*S6MTS&8-ldN'V',AA3DXBfSS1@X@SX3jDa4K+d%'
+V''+`$PV9J(FkD&8$MZLJP4Pkdd'V'ZUSJeCQk%d(V@V3"A63USCHed%V-`#RJeB
+eD%3kD&@$hUD$9MASC6TS9B2@TB0@0HK@1QKP"Z0k"eQM2JkeTVISAc#&AUF[A'd
+*EZ,V5q!,h-,ASZ!1i$Hi"%H!'i"c[Ti%rS2lp#Yi"FE6ar3iH%(rJIqq9UEpE(S
+C,+12kAm`#1bRPm%T9d-$bhcG#j`$1qKKF,fU6B("[LlQDQ*J'aJ1GS20i#qi$"k
+$`iU9%3#(['4dZM#8DiMHfMGHrhe4UXl5-C+)YV0+)+'-#Z[HH2e2[RRJ`+H8VdD
+d(AJCA-bm"3pNaL#Q3hH&8jl`Mf`lih5KKDljF@p(*63ZcUU,QZRG'LEhd84C69&
+D6h(mh,hU`MR&98)6Y,cG`fLFRQ%dFrTAC!M#6Pf6f*23I6aeel6UB(IKA,@kXAE
+0mL[4%56ZK)C8GNHUG[h`&U,KQTYe)44K62hDblFNVfjYEXbQGfeZ%TQj"1Je-He
+VeXEia606GG%6TA-&j+l&6ch(LF,,Uh+j,Ipq)J$@6Ihpr,NIJ!#c&1I)Z5FrGJi
+j)"*eN!"G0%MIMT'&AceM,i8628#%IYH0aDbl#C0"d`hVeqZZ$qI8A,jKNbi,XH`
+TRH0R)S'Z@VefTF#"VHqB[Q[d28EIBr8p6YrMpAf#[LISHk+q*qPlXVj2e2F8I8r
+9pc4pRk6[kEbPN!!ce$j6hl2d29[IFr3p9pmRkhZH[Nr4phapRkV["qMl0(hAk[Y
+dICqKl`AkAUM[-r9pPViA&GXU0VNdaPGSNV2eIBkqcpAhBRfITqrcLmR8R0#4fQZ
+QSm6SGPfG[Lr3pa*pAkK[(3BC@&H'&(#2Q&m9mK(`+i+p2p!D$U#k3VXVXM-`J"L
+2f1i,l3`Pk)",9-)jfP[X%V1GIT+(,&TFYN`'qA4!*TVY'+ilaSSYDdMPXqQpUHc
+9ZGUQ[!bE*V,0,VGb4MZMcN$#E+i60B9499NKU!4`Q@iBAFC+`DC-+YRDdKTeaKC
+X*XhX!4`3G@#2['Aff2@),X1"Q`8(Z[P!BHP`C*TQB+m8(+LaDYJYUkYPelCfA*h
+5jB"(cj6b%J)CXUJN'ZNQ3MR(A4IKRI['6D*Z6J6%$!TY(!N`5a0*FQ3kChVhYTE
+YrRa1C-9dMX`04!"N'"0@k5jfL35Seq(YjfCpKb%CC[6"[(XQMb)$-[PGk6UY"eI
+-L`X+,5Y9C-M3'L2h@,RCq6aHlK2NRL$h4,NRb6eClK2PRL,h9,QRbAf5h02PRLR
+h,,PRbce(lVPbRbch2,P2NAZqh+I+r3#j6j1l9Zl6j6j$lJ9b,j6l6,R2NRZ4h'I
+,IBlFjmUp@1lcj$jIlMUj,j!!HiRF&jVKNjKXqA'AfNHqR*Q,iZ[V9bkUA95rI10
+bH6DZMQr896a4+FF9P'511`T!8(,hE*914*fJT#Zd)Re1a*@J&$dKbd3c(+-Z4!P
+)1,qAHCb*Eef'&l8c`qaY+&Lf3JC4C5PXd@0PFfXql6ZX5RINLqD'eBe0YI&dFqV
+b9%I&c9%AC'9Q4kUYiX['$pN-klYPiir+C"j6Hp$PB(lUZ6Q4lC!!jDXjhc@aSc9
+C'dpNDXe5%`RHRT(0XRi0#b&8!+Qk$PDS8Y$9'fVACf3eDqXeT96BUe,0)Kl[bN"
+fQ'i3Z1bZe,kP&aqX2PjGPF1T1e[eU&fj,jp0q'd5hjh,TpYV(j(D[cHGEIBpPbH
+6+HQE4YQBklZYf0hDeYbG"c*5I@Z1p6(Yfm[&+bT-CDIZ-MNl9JmfJ10iX-hMUaV
+-5YC#TCh0V!Gc8-q$54L5dY9HH2@9Y$L&9AD5CE!9MqjH01YeZjTI0Zp@UpD8hTe
+0TTS5,5P**GA5f8,G9GZBN!$&22RDTP3qheRP9C*CE8-LNc&q,L)BVl@bD,L%ILL
+$cSUI5TN-R-RHRibXrZRdZV+KY!'i'eYmjc+mq*jG&I5Gbd8XZCD4bIFXG8V&XGc
+L&@qhbbYqAPZA#Yi*Apfq"I!Tq5U)q6jP0Z&lPMU`bl'R-$hYHE$,IIFZ)$hSh&[
+1%Ta@(!IEc3I9LTr"e5kRDUR,k1TlPJ(@pkc`,Yqh4,dUMY9bq35XF`Gf&b*@r%Z
+J@('Zi',&[`b0&Hm51PDFIB#XqTDDYKT!'k(U1Y!,CE$XGIF!TX[GJFb+@`Ne+mi
+qF2EipTI+KFq+AcH#9L*83,62Ik$-2T4@I3meCK&3UkjJDSpIAaH8N!#eiP`#eiT
+c*lj@h(f)VIVfeE#NG(3ZfHVQRT8!CIjCmHlLS*8!R6bdiPlQSKA[%KqY1TG*8M@
+#bcbU[S00dFP2Hrd,T+l,AhPUaDr-95[H*ElDica3-)qh9K`2FYG+L#lqfKGJX0`
+P(PYe(Qj6Rmp@I3fRlA(XEiFbYkeiPrPYaE[#F5[q*CjEGHi[C4m-kdKB!-4ZL(i
+SG[f(`0J0-3$(ES"q3(Epqb$CGqr[GMp'Gj2ihN'E$%"c18)9VE`)AI$XH[B$Y1[
+I"p%Ppk(L(B4Ter838,Y"KU#k-d43rMkipYh$&Zk&E0ql%l4,VS-0dJrFVRmrG,[
+qJq$Y4ZL$EpppX,#$%$i#h`&dMm$f)FJ1i(S)UN1B(S6S)AJHKZCK@1k&j!#1Kk!
+iJ1%q#"k&ha(S(B(G)FJ0iAB3D[YJGJKL!hJ0S(8B9SFJG4"1qk&d4*)+"+N41HU
+3!"J95&&$3P3S3`f+8%-5e,!!05`rpBT2JI3d*$`&XP1Ik$3U1Bd)6L0bdj!!f"4
++6B0#8jr-0#3b"4*6)$!0bdY$iY+JY&34PL+5Ml1Ef-a)bl$d1"Ci4-,Y*KiEJEH
+E'-%R-QdhXGR$%9fhQpKKK+fTk,69a!iI-2T!40b1DVBU*DVr$K-eFp`rUH'H@P6
+@Q$Z4rpZ5RcqV[m@kr[1eeK2[@$L6IcfG(pYMcGRCh-D["plDY(($!ZQecc5XA,I
+*rG-ATrpLcrqCqi0RGm5Hrk[5TVhBm`ki2`85FA"kDaTGFS`Z0[L["P%qrq`3+EH
+SPXA,mQ6K-NIrYlY`D[Ml@5F1)9M+(-Ba[m&e1!iE!eRZ(-CKBSB&d'%F0Jqb*$U
+-!ipQNA3BK`f',*X1il$PN!#&e'%F0L'bY$U-`lC%&PZ(FGLSb2,V-!jE&eQ3!"h
+'B6-M5l6$1'a[C0&f')F0Mc-1af%,*%Zl`cKXLQ5aGaL(6C)XrJlMX'f5jH"K($C
+5XN!mM-2@5TD-Kh(BE-NLmM!1fbpC9Kl'B8-Q#mh$1'c4C1Pj')G0Qba'$q1`MC2
+Pk@%F0RDbB$f-`eC2PV#(F9"H@03HaQ%l+-[F`cKX%'AKHaL(,D-XK3rMX)Q8aI&
+K(,D9XP`qM-0'8aE3Kh'JV5bT$q1`'C9&pQ%FmjZ&Kq1`BC@&q'%FYV#b0$q-`kC
+@&ZZ(FGMQb[,p-!iEAbrYMq-Hm@FVl'@(ik!#,MmFKqfb+`l(iBqJiSIMm,Z0km-
+irb!pR(mN%#E"12b5qFD9@cE@EHrr*8rRP2jaZqqB2(EQfrQ&q$mIjNC-(VZ'-8h
+q%hX8p8`H)lrH`MpjK`FU%FB)km%[@9c9QY'rBrjEAC[65IkL13+Jll1jl(hr`cf
+5"kFZbCp!r+fZ*Sm4BRY[(T%Q[h"NeNJ0MZcClZL$rX&brmLH(bFBfI2M"#0lITa
+JC-q2%icXqA'#N6dr6M#bjmF*4[Em1-()RKmR'0Rci`3MHhkFB'62Ma1-l2PaJT%
+p2di`XZI(#8Efr$M"b*iIKap!iAqG`MM"D*mI*aMYmq-%SheqR'#dcim6M2EjFB,
+42Mp1-0VRa`P'qr`i`@LI(bFBlI2M"+0pITaJY-q2%icfqA'#d6ir6M$DjmF*4[[
+m1-&SRamR'1hci`5MIAkFB,62Ma1-p[PaJY%q2di`fZI(#8Elr$M"D*mI*aMYmq2
+F1pSRA[H1pSRA[D0piRA[D*pih6[D&q&rBYD8dGq@R'Gq!r[i3H&GRXRm4G6hmQK
+S@-XrrKmkXZQZGR8l)aj8YMG'3q2D85AphM`faqZM!HUkS@P$AiDrcm1Ga%MQFMq
+el&mh@p-qdZ`&'$[Ef+U6'2B0kme38Zc(Yj1'NmH)YLp+ZV-8IU!lh$`@`r!M!I)
+B,XM[mKLHI2YrHB56"[IPNGVRj1%5I2Zbkfjarh+aaRkLYG#qBFeYP[fMqCGGpj+
+*pR@aci[p*fimq`B[Mq%"R0&kH*-c)i1"NSHZbamXV*1(r00!4%!Hb819$HYkA6'
+2!)Q1jT'ek-1Q'ppVqR(VdJrC'kFHm*!!G#X63IBkHpeEfZb'@jE3T1,r'iPcUlA
+4rZJCCPc)j*'cGJBil@clY`a3HpPei[5@q2T4(N1-950-*RTL)LLhXfhdGrAPh`P
+'q9NZ[cXL)!p1R66*AqV+C1ISIae'Ic"ZU@a[M$m`lX%m)J-BprS9DqkHb@[F2&U
+2L!rQ2P$92c$hd6b1-2I42)i`pl[cZ)qjKhNBj[lcQq3@c+jjKB`*1-cGr+#p`p`
+IqI3LFfm5Zq(V6ZGkHIb@ZII9idr-IE#`[fIZB4j(Q(YI'RpNlQ%HRFcpdPRh-IG
+,CeDBHfU(0B66$!@E(aATBHjh'Tb1r'$F&bqpZMI'(aMh3"kFL!$',6mrmX#,DSY
+r-Y*j6VbI-@eCHR&rM2XCdfJH4jM1hARFah6#2$*@1YPfmh1Xf$[1YQCYIk1iEE2
+hLRh@[*[&GRf"%8LMLF1UpB*iHfrqS2(IpGTA&r)3CK%4N!$(%@E49pFr-SX`Ma%
+3PMc-6lJ%-C`m8MPVmH)"CN%5UCb#TpL"XiS#i#(R8"iqKF0FcZ21alPE51VDL[p
+EI2!8&4ZRBIZ42,fpm`GNbfIppPfMH8`bP'VSGfLR'1eX`cP6l"[@$9Eqi2%VlfP
+RN3"ja0YNSi'cf'!J$hFI3D$b'XdV%U!H4UZ+"-M$eDU#2)jU9@EIab!MN!!TjUH
+GGB8bJ*PEAe&Q"1pK*V5ilf1`([IdQ@S%VCQKIN8M'16f6KjQh`H,+)lh[G%))J(
+ke@J%N3"j'#4hpR6mYDiQ$rCd(1q2#3dMrpXq2Ejf8j13!+&8bl(+XeE$U1#3!+U
+K2+VUG4H5Si*(!Z4Ke'YTaGa3(KAeZXS99IXBcU06A4[-3jKd4%!H3PdM![*Sbaf
+UKka4+IppDMN2MpZ,&K-98!r4BU)"mK!i#r))mDb3!)GS"-Ibm&6RR9EZ,rMUe50
+M)FB%r9&5R3Ik!idT)L!2dCL1p@ZRaK3&N!"(2QIp[FmQ&ArkYLIJ4'8%GpNr[[(
+E9ZbY@kaCGel[HFpqbPY,&5-EXI1`Ira--dm6Zf3Z[,h!##)#mK"'%"'3!)FJH94
+!(TQ)J,VZY$+CBhN8jMi%UBlPdBP8Imf$8jFBaSq9rN5LjP,)BrXGAKlT+)!m*K9
+r$Dd(mFBEeE$K-kq[HGQfbi`+0Ir"$r+mjhppi2r'**iTe*L9@r+HDKJ*N!#(8HN
+L!I*`9ESJMkT+9mKM0@XYA9AX8$fU@r!UH4J9+K+JVQC5jAJH[+GZf*R)j0,0qr[
+jd&`('@jrH&3!-N3"j1'T8%0j9,F@9$V48k(qRJHkG#4!A4h%L`,)`d8m)6&(%Br
+5pL"H8LCHKZT4R4E[c8-B984!(X+")`,b%!iF&C!!4bBLS+l-8"j(FSp,(kY(L8X
+Ibk165dF"j*%eUYJKjL9V!Ja3(qUch(!HZQhJ8"jQfi#-1J9j9,F092)`F`ddrR'
+m0i`b%L!2`bLGKKhXMi0E!LTe0E12N3"jF)`kHkbZ6(#Y5hIdDKlZX4XD'NIffpj
+pc(c%b&S$kj6SYld'`6Qk'cTLDDr"hdl%dPk$61E3,S'`VN@YiG#jCpHjYarKq)N
+!fBr3"b"rh)m`J044!IX4`[%)RBq)"1LJk!$Q(P("6#-"N!!c@J'TlMRKFXJ)%%d
+R`Q8lC(!L#,5Bk+$YN!$(6X65GXLM@Na[)P%%@Xa`$*hl1(5LYlC-KLZ[V'Rh-lL
+Kc6lh-lM42)i`Z0%mMM#iZr1iMm'&HIb@HIAPm5IQ09L3!0mcVc#2)mbV,idr-Ur
+42(l,[(S6L5MBj69d+VZmqNmd!#-`H84+l2)+9hPC*d92D)[ap6F0E5VdN!"Kp0p
+Lc%k`5)!meZc+YY6*rCHk`L`L6M6+D-Kr#IU(bI!r'mEFYI8*-SPlQJcZ@ZfjI"%
+"aYbe@9lM(Q0CNr%X!Y@BZlE)eTiC(a8,RKf9R'TH+SqcaE29MhQPc!l2F@0+RM8
+rp#SJQiP2`I-k*mq#jjDjPP8V1'$M+AQkRRV1PRYb*L[lTUEGqQDaZAmSB&R-)bp
+a2"mp4fba!L$)[FEaA2)0LZ9j[PlZ%ac2Lcp$qTlRf`&)ar2"+m8feR@d*mVMBXG
+crjYS&mm6%+Yc2+qG,EEaRLIpSRQqCbBfch02`E2Pkf+Ei(NqLASiRX[ALBfm(Fq
+R&$cIqN+a6I)mRbk2'ah2P9qL8ec2Q"!(qjQ1jbAI%SF6AFqaTmTMRZ0j)eJ!a6"
+Rh'Tjc(3mEB"XPZXjrF1568clKL%Yk8VTGQ%"mB9LRGZHci%GfT[5dmqaV1F,JCT
+m3R[HF&r2mbVTK*S2LHQfpRaEZY62q$p6(P-N*UMLaG`U(A3kf,'N2EqMM"fbMIA
+-RdZecf[2j#4QdI24dTULk0LrEPbEbe[6fUQkfG4Sr&pF3+p#c#X&mGEq5')q5#S
+!GRX9f#!B21D@BU89D`3rC9[N%pj@V,6RZ98%P5@,LYQiRJZq*6,2Q+m@+qh&[2+
+edP%2%p1(Y6X+Q%BA#NjVjpDIqJbaQ9fdR&f#lC-[-jla2C[%i9pGce@##,&Qar0
+5UBEeEklRc9,6q%l(mdA-r,r'kiiIH(J6ra@bN!"84F(i$(V!mIcZR@*lR9HE[5#
+@irNcYL5"Y%l-C96DmG`26Vr"mla#(KpekRR4Xm8Q[H5FFkE)BkN6mbD`%0ae2''
+-$Kq)[ffEf1!%jP`KpE5rjRMH$SkmaBZjS4$c&qm4QpRFC$`Ikb&ir&U`9$VC1AX
+NYc%1KiLrJ$qGJ"miq%N0RHkSA`!lHBHAM@aKYlBlRX[SlhHkRS[I9DMRZbi5'hB
+RjPeJXq2j[(m4flXpcepjD"brjFGLSh,QR$Zed'[ASCbmer8mMhlmX&1"'RM(qec
+20@ZN1fBl-4ZH*3l[Gch2IcaC1jk[HkMB2Z"9l@FH`iVrXm5h2ZKkAL2i%Y11qKC
++(0MS91"dH5ad2,ra'l(GkRR#UV4Uc9[%"JX`ja&`MHFkRMqJ!X)fR,2LP4k6LjX
+YFKra-%T`fXA#HI2!%GIc`UG+QNk[e9mU0ZYMVZFPdN'+KI82T2khZClIqdS"#jm
+%@RcFkhCiS',KEA#G6hLH$r'`X(iP+24*ca01je5k[RDTf$lPHFVQ@"F,hrNraIC
+Tca0XGl!`rJA3$REU)1Z62HbSEi6*hHlaY38&A2Zr+&phZ*i2&ckJ@&Kr&5cZXel
+-#`SaVbIQjca81EQ!K@m'p6r[HYiN(-A&`TDALm-A[+V0+(6(8q%GAr5bZGc$`RL
++[S'G1Tj`%mA#&"cRbejY,LPJiD[TI1P+MING$`[V,`)G3&HR1d"5lE@PF2#[H6(
+rMiH&m64L(Rc&R%Yrk@&KrCAJ#$cFR18JUf,KFd%me!-([HKFaF,pF*e[ZTi!X)Z
+&Yp$Yp+J6mpS#&MiG$H,ERLGGT&9VqPpLSlj1"8!HaF)XUYCh25am9!%,hrN#3-Z
+brMm!$3d28N9"4%e&,R"bEfTPBh4cE#!Q)&0S6'PL!*!(1mB!N!m"U18!!G(0!*!
+$&[q3"&4&@&4"6%C"!3#[f%,pX)6`$!!!!CS!!!YU!*!$T3!!")%fNF*0!*!'CE%
+4!!JFe"b#'($`eCIG05NKdCrNL`SqJ+E)6!pi)*68-j63U8d#!UAH950UIVlBrG4
+l@Vd0N!"hJ02kPZrDRLEK1C`6`#03`H[RM+4`Z1Aj6J#9Vp$lmDqrI9S&L0dfabQ
+YLkVT6TB$UN%jcd32RXA[h(jUIS$FZfBMU@,Z+AP6r-hpHPDq`P'SFer%hk09+dH
+6r)&J9iIlBUE1Z4*qLY(F-IHFNQB"#djAmJ!%'F#FF(+EE8U1KSmI'A$###-66PX
+*Tq3S2qAd#&rMK&eN`JR!#V!#V+Idm1I&!3Edq%V3a`Nk1%%k8&hIGFDTK*2M*q'
+%45DF(#I(bA%bi8H3!-!T@F-,p(CpTH@be9ARhE9@-G"c)F5C$G%R&BfcJ9E1Nh*
+YCaTMeh5PQ[`LeTV1TDU%1$8q4()VNNec6"ZAU*8E@KQl*"0*bf!dj"aG*mJXhCe
+YR&`1qXC'&fTaUhf!@AE"$f&bHR9$`5@[0%Q[DR1V+k+c5%TD@QK%N!$J6mDA3Na
+@XAXjRH+r+L6Eb%@S%0Hd5iYTK)p@ULN5AA%bRKVREMK''@(8"15K8UYYc,R9mPB
+63&M)4E0"R"jSE#MC+,eH#Ji'KPj8(ih")))%90*UT6P4q1Na3Ml0%V%MdQal6,S
+5hm$SR@&8%,E#ik#2i68iXTTGZ$dMb-Ci26L1AQIEST8hH*6`NN@8@fU#Ha#B%GT
+dB1LcYeHJX`326rCCT"[VlUM'EhB*D@#3!2-*ZPR4mbfLi+6i&f0bp-KS534p!FU
+I"@U6UR[Bi9TFe6S`Z5@IN3V63*(VBiE%hNM[$EjGHNFIJfjSEXKBe55NbE*#,P!
+kFF0a,C*T!$c06XmrHI(&I4JSL`qb1!b2,DDrlpJ`#i--5jPH9-%!*YU$@bNr`R0
+iB+l,ib%+TV53!0NeNR((CrCK22YFSKm$@pXlUbV%2h-f!Yb!GJ)rA*RRmpI9Mf#
+&V3(8R#Cir3NUb0"VXr$5'i#5q855cV06r!VSlrr#TPfi*P!+h'TXiF21bh8VUG@
+UPYD%&R&bj`cY8N$+C58QNdPfXH)+,l%6bQkYi4AX[K`&j"&A@"mNA9l1%#@Ej5q
+2%Cjm16qM'Id[Zm[Uml1,Vpp5-m4DMDi@$kiBkq,U%I#rA%dQ!Qj'J$*aQEHKJ"6
+!"1p!UdqCZiLjlPI(&VlU`0V2G%`BMDj62a6Kc@!B2faT(Q8d+Q05NYS88552N!"
+r&f8+(N49F6U[)BXipU+KjT&bF,SX6Yq,2MR94`c$S-Pr@ee*TbGAJh+[LZSJG$j
+,kUCKlVD5!hTpjGf#,TI`Iq%ll#BICI8$H1qjQjZfDiVm8l`lqJ*E'pN,GDrEbci
+*Ef(D#B1rXMlZ6Em$DLFm-2KE9'(,r%jii"!2YMMmJQ+@,5e)iYA&bEIh1$kb+1Q
+99$GVcb2kqBA&f2dA[j%LZ2dE*"$i!0+Jr`G,J""D82b(#JM,$Rk$mUD,"bckLZV
+Vk)5PjPN+)`alM[[UQ"I$B4S3AdMDC)d#aKKLGbE@CEIX6&c-6eLQFaEEX-rN9lc
+bj0VRa4#9R-[ZfPI`1eRQCj!!lFIcRmUPri[bSI2j5N5c0aM[jHM$KjNmPS11UD1
+PlM3fYP8mC'AVqRAD*pe[6E&A`E@!YaJ-81U1F@()m`ac,8UVF#8ajCEKS$P!1MD
+Fk#(',39AQA`HZCISMH0e2rDmrLlKX$,%bIlchKFj3a`0Z!`LrErF)iCa[3GN@`Y
+('2fIQjE1l,U@VEJfE39*I2T8fc@ITIJNp4m!N!-0%&4ME'&`F'aPFf0bDA"d,VN
+J*L"6D%aTBJ#3"`Gm!*!2!F`h!!(TaJ#3!aErN!4069"b3eG*43%!VpP[Pl#%ldN
+!N!EYrJ#3"KH*!*!$DJ#3"T1b$Z[RpGR%Dl+`cXfZGAXjmPGqpJXrSpZ,EGV+*Pl
++UCaqClR2@#YENrh+EThXpGZH,FHAiiZaC5*K1hk4ECe2GPlfjN8@[KMEK*-G@6a
+bLjIQ)YQphj(&b('bm'AL'GQ56IDjX*EMC,'"f6'J!cMaecIT(16CfHFeb(fakmN
+Yj"Bl4YM#!0J#3!$1L9pH1*Q-14`1&qjV()jRrXAKq*VAiDMk'pMh12(S2TE,C4+
+6jl@ibm5f&EGEE2IKpSMYREM,aIC4h"9Lqa,Z5V&p!rFd5C2j9)RYeAK-&pXU2'D
+)E4-H-mAfCMaQL@dr(V2&pK%mUXAfD6aUa2B921D)l4!HFlA0Y352H@+l$BrjBVX
+EM`9Lbq$a3f*l'ai,aIBK2#i4ffI`Z&4XIih()QdV)hjH*EE,m9JXYR9i-(IDGJQ
+qD2Xj2)"(CIX02)J&fSJEaUIYlr#i3Y[Fa-0Va(B$(PH+V3@2Um5@`10UX6fXFDp
+X[ih(Y@,l8cbZ%pYcH#c90JmaXdaXYq#aA'c%[8pX$q"a[GJqJ!IV30ZRm&JKYUI
+aZ&&Xhm(M*QdV*djZ&Y[YH2b`f%*i-&rDIK+2@m9'I+m8farM3Fc54Nc8DPX&HB%
+F44YcBekdYH*aKpJkm(LGf0k$"hQ'YYr$ir9Lq`XmkX6fEhLXeVC+iYN[0ZD`4Qa
+[`'1Yf0k+"c&1fiIa@#qf,q#a3@bX@Eff65-I0BL0f0JSYL!HM@)Mj`A%4Rkp8f`
+Iak0*E%rK`CLdr4-HGfPE&6QV@@c%$rQ"YMBmL![DL!Pb,'h[aQ1cf*JIip$fC6b
+fL1dIm5"2NUl*Qq3%fXJ,a!*YV0FEaEB(Mh[%4KjpNpKq$BpYB[Xm([H+lCYiN!!
+(+!'S!ED,M6`9&K[cDaIEEM`LBYZ(a`kar3SH1m9'RLEIdNC0%"8YBUBja!Re((8
+Fp4Ye'r8-p4je'r@Dk$5P"iP4kK(b,r8BG4Me&c8%qBdkLca"A88p48kLIU+Z*)q
+6[mREPJiJ6j'[bE(NCh)jG3$jQEa-2LB2Nhr*Zq4EmLcjPEa+2L@2NMr*%p36j$h
+b(AQ1r%EH*#q5hmKVj$2b+RQ6I%BH)hq4YmKAj#Rb%hQ*I%3H)[q3!(I)0q3CmLr
+e((8Fp4Ye'h81p4je'r8DG4Ve)[8JG4Ve'A8Cp4MjMIU,ZSYkLha+I89G46e&(8@
+0),V5B($)M3m"eLq)T1lRbYC`,*4+a5+CF$UDbMV@4G1CV,FPXM-H5@3GY5&IXL2
+VD)aZppE(8mPdeR[,bSf13,#YB&iGLX@5bB4h3b5@FJ6D[2lVr8ZAkN"YhQ!S%`l
+&P,8jmS!MZ(CG)A4Y)*,H'I%f)FHZ1V6X3XlG2[jeJ9Y@lZPf#JEpMQ`i&JL&%6!
+G5ZreKFAHe&,AD8XlkKLf4B9PG[@*E#5p)a51d"J)C9A+JCC'Eh0()KZ04j!!QQp
+0Bk0b8I832emq(SVSA4HkjZESYTAYefT(4!Zd55JiU+S"#Ye*D$F9-BmZ9Y0'N!!
+B"8'diUl,a"eEr%hVE"JT[abUD!C#0"LLNBc[%ij8+[`K!BHM&Vl,@GJB%JHDZKc
+KS"`C%AB03RUZp0h!S*PG-8EGf1XXe96qfN2Ea$eRl%*Z[emK&d'CGZN'fY(-lEa
+3bAJbQqaMN9c!bB,daI+f*$[5iBLMC@mQ'iPlEEJaM%C'S'dEE(R+f4!*Y8I5[P4
+Bj+XjiP!48X%G9L28K&iR!eKG3DZE5(9SG41TJ+aZ)T@4e8fN`V(L8ZPCh83U0UZ
+E5'9QG41TrU@Ek'$(5lU*MJIc+[9R4DAb[%r8+Xr(4,AbI&EU`m0ZKh36(AmVDTE
+R@k*UHGM0NQkLNh@4EU+618Jhd8N&+0e%*a@XG"1G9)V56A4518ShdFRZNA36RHm
+3p8MEqh-iFciQf+(YF9'AY$dTkT-feNqkLFjR4)h5GP"8+@hXE%NhdFAk56I4a6T
++0p(&Z0*0G&'"5MI44@8Zh83A&E0d%ee8bp*0G"'AdNedXDl56A6p%Kl56A4p!Jr
+T*VVBeC0ZSSYG3qNQZPJrk5Dk[SZ(G"2,L$hT*TDa&Y*0,'0YT*YB4Xk3!'jL'9@
+qG"-0#iGi)iE)Hq3QBSki)QD)*f+0059@L"eb$IQ2R%QZ)8H5(iJ0eTam3Lb4,mN
+R9RH&I%+Z*(m3cq31eTlF5)iJ(a$Mj"&b*r&#h&LG"SYlbC2%(MQ5Z#1(NPF+h4h
+L5cKSiNMRTL`V&(m8Jmc6kb*-UPRc(fHhr[#,+"T@(TDhUH(NXLIqL(9,Sa#A9Y@
+)C`+"',GdLhQJ$00acm3p#rGX)JVh$0b9Z#Y`9q&f1j`S#@kqG'!A2FV+q(+2BG"
+5CIQMNXMP9)'AZT6R0-Pa"VSU@Y&QI&1#eP+)1VFFYT(rl)E3@d,q@#L63E[LJ@L
+U*r6@qU#hS@ic1iB@p[+PmV$),(Had%H,h&9DJ0bMqedr1+Y`kS*"0#bG$fe"kqh
+#B6kfFC2c%HFdeipdel%R5i",9jAFj!4Bb%f+X+e@TUh+V9kQl8!*Sf5IjD#kQZ3
+KMiBXHC!!r'laA4mA@YeQmUDPeFd"Kpq-AUSR3PC*qH`ZVBkJZFcTZ(5`9m0H@Mq
+A+3,6+4@iV-"-MR*KPKbrp"+VCFi6Up1aH,!BdNGmX4KRL,@cG%#-VP`2CkZkj5a
+P,UPQ2ZeCZ5S$GjZ#pEj81V)MH[mJRZ9PSd2J3MjC)6@"4d%mX+0Y"bF2,,8D6X8
+iK(Y0,Kq6Jl3dj*p+KrZ5i8m,a`r#0jk1GZ`FDd6SNeG@e,5jlcdrb&Ue8e3RDdh
+MqLhK2G(fB$UjZkd&fVcm#30!AEGYbf4$kIrYq&`i&+@U@AVm[0`Y-aiJm,r9rTQ
+Ukck59hAiDR#lFAY`6mGGKEXFG`AZ5YbcF&IMRXeB1HYJNm4ZPNPRPjiZ0,R4f*!
+!cmJ'Yb0p1CF*MJHJ"p$VR+kqNAU9RSSQpN65Cr1BfrI"Y604ma[6J'8mGbB6-J(
+KD)a!)2J5pI3HIX"R'`(r9SHCV%CrC$Prq0@HAaR-!(RiQrCc!XAS`ApT&RBdKMq
+@i83B!d!H$E[61hbicp@9Rr!#EAkC3()H(mdYc32r9FlQdETf5kY[HqP69qHIrm'
+MmYL9MCm$2r'KmYKG3Z-8AP8HBpc*'3AMKaff#ra""YiD6FQ%QI0eE8q'1IR&!)$
+lG#BY8eR1jm(MJpJGBGQTZUSmMR3iAmT$#hF1%"L81i[-%dSR%'L8@8A$ThXQad$
+PJid6$(-m$f1!3QPDhA#-1EZ'Lr3I3iA5'H21cX%SShNXPGrf&r)S&H4d(U-%r2d
+maTRm4"k4qdX&Q6aDQCl(Uke-akV4031R@)p8D,3VF6U2dS#4mEVbfk59a`J6RFi
+M0DT1aqYUjf%%81iUMda%CSRpcc&2+1kTRelGNjIk6bEEB3M)JmF(N!#FUbY(Uq4
+ElJ0"+X`6bYe3S8b0!-aT9Q#UUD1C!4rdc58pRD1c"elUk3cRB6ET1TrUa3bKif`
+[CL+2NlfBL6a1pQ+1jA'L&c1HKhQK&c0BMeGk-F1&2G1,'FrMC#pQ-)fAHc%6HCc
+Ua3`NBL,SaC4Lb,c$dF0KL11jpJj-2(+-(cfG)5)kfp-T-ViTS+GM$"QcC!qGX51
+B!-TJJ$N'L'N-HJD!XrZ[l[IQEZKM6pm`$8a0+-eP-S0-``#VMQZ$![F,,q-chCE
+I0b%`3eiPp'N%$TrL&!Re2V$[H8b`R[PX6a+G%kT-ENG0@bp3ZC+60aeBq1jl$ah
+k-fXbVCRYF0UR24G(XF+b!rX1AR[Sd'1RTq@Bb!lR'(9TKD@D&6iTNkZ0E+HXHZ)
+691R8(0kNS1XBi#E5U1R5Q&jZ6djeGID[E%8#I`kcA6JCKa1%,jQ-`bQrQ#)ZITa
+M2&!I6KPH2TN2TaEl"LI+rN3q$LI0cCh-Ke291C&EmKRSrX1IdpBR*Xr#Ra2CEjf
+-`kp1R!)q'XFJI-TGr-X"R9fIL'DMS9MdJFLkG%M[4R,Ur0qI#TerDb3GMbC#f9I
+59hm5A'S#YKXI*6"Qh"JhfG*C@lXcNSLNSf&M'b%S(LJcb%diGGAUIR*,4iSrJ@Y
+PZ`Z6'MXi$i%(U!F#N@`kH9mN[5IMEFQ'%ZfKG,YXZ,1hPRX-qI8V'BmR%lA"MZf
+aD0KER`M(1YSMCM#k8(V!r5)23$8Bb8M!iJ%2qd5eJ@3kXLk+Rd,H&EkEI6HCeMS
+'LJFUlIpQa8'UT61[Ijf[3U)'Z!RSDPZK`R&LhDAZIiSVI,*4P$RP'%"qS"$'eXC
+I4VF6D+PI@k1@VNY%XYkepkGLk#UF&C(eQ$M(X*Jm9pU6`'"fMZabCB3j*Sr"55j
+-K90$Yd``%p6QAHe[@V2fDZr9DqTDkr!-e[YEC9-lBp-aQ8hjZiK!k%GKrF)&JhZ
+%@XFmX)cALfGmC19raH9#K@TIZkkUerSl-YPNh,XaX[HqC,TGE8*DF+m,Kb1C$1C
+,ChIeqVD'X1%"Yil0CU1*REhZr(Q'EiDT9*rckSjSV"hXR8eMCRHh,lmUqC2YNI@
+44*rVQQL'Dh6&YmG!qdImjCI6%8q1FSf%HjD@VG9$Z2%a0S@+p3E@hQfKG++[MV,
+IAlGAIE1h+B9pBI(YScFIYF%20[Y+p@j2Ued(Lk4m0`Gkh2+l0J#NL8LX*i"-"Mp
+DAA%r@Pj1+4Z%)Pe(S*JIF(E%%l1Vqpd'LUmRLJm8'&2,MeCAEHXdaR!k4T(QG)!
+5eqNB)i5R)a4C6`FBTVkFIa&dZ5$pb-Zj$q"-m$*#Ki83Jk3K)IU)8EX@f9%('+E
+)[2p)#3I)8[Z1-kD18U,0cKLM-"JQd*cr"+#(U$6RITK2mlj&T"5C93FSdU[q#MV
+'Va+N5,!5SF5`%Q5%BL9%N@-P`M$*jJ-83CQ2dSr+[2m!p#cJM""YCia"LV&Lp&'
+Yq"Dj9L)-NfdK`'JK"qK@R-Ij9X+8#,FV5!N1`j5E$h!-hN1NQrFrc,S&ja()&(P
+A)K5*&m((@*F4LT4,pa,I-X))fG+rb,4d(kCCblX)3LY%2`)Yj`'%+A5-8'XZ`##
+4U!"pT%V()U25ICK1EHrKXJd3+6h(@C3a5K5DMe!Xqc"j@YjMS"fL6F[j-'IDRN1
+i+,)Ph6ZT8V,`+[CUM'B-$cp@c*5R['qG"I2,Y)E1$kekqhLSLMABlb+"K6f0%lZ
+I'`q1qH9$+qLaDhjfepaTqc-T[$LI06GhHMJ1[lr2Qic$rihc*q0`([H#b6M(jh%
+M$ZGaAmGLUTL$FlEKaARF0dcQVEB9(jphM6LFRcdaCaYa1$plBXkffKeeFXifiR!
+1q)hMG65i(M*J@A068f["U@apmbDe#4"Ye5el-pP)A1B+4L2F#+PbAAhM@QSRHA[
+NA5l[#RQV10`p30k@[5UIS1Y5p#-NZleH$$(dYZb+B6dZYLEKVP*$b1Q58T@m,IX
+XH8r,Tq5FLC5D@ZUmQ@4(1QaRJ9UA5E6CmUk4GlAiikpS(b$Fa`'"+LP!i$h$f!!
+)q-f8pb3J%-99H&X!J9h"LS!31rEc9CP`crh1"G32Vk#ZpZh2a6Lc56!ci,lm24[
+R-cjhi9HlS4H3!$Q`#j!!%H0clhrLi[M'5aFp#K1mZYCdU,VSI9M6SIbLG@&0KfR
+iUX922dHrVKDqeTUR[LCcpE!9NhQEEVmFQi,143A#CdrccB`SimXa`L`p`4BHQjK
+US-@VF9p1Jc8#i`VFVbNiA)Rl+S5XXLCLU"%CK3K(aQLB8Q"ahIGJBCEMB+I$FfF
+b8@T41!1"i%XV6r8HI0&`U0QX)aY8eHJeAFiIlT!!AJH0E3E)`pqd[h04Ulk$hH&
+Cf0%BrPKQE12h%hNdl%l[m1%q9eF1JJZdqGHB!I$4h0*Fh*VpG"jU*rVYT4Q4Ud1
+a@$+Cm'k)a)Dfh9Gjl-V'ci(IhUPrG`Q08hJe"qb-[l8qk,h!(f6JVG(8a-li8h8
+e6qb-cq0$Dff%CDIUU[*i)$V%,kIbQ&JBEC&j3ZN%!SfVaq2JEkfe,6p+1eMjB1-
+%`ac2`aLJ8*T@0aaMcQ$E4$d-&8TRM$["9(T)qe"9V6b@,M8&j&%Ub1Nm4JRiqhQ
+--rQ*22#Ci`,fY6)pMeGEQBj9!hR)Q2VK`ZSmX(@!)5#2m'KPaq[+JAY@(L0-G$U
+2e+Jk(DqVRBF43,QV2$+4R4Ii`cbKZ+FQ2f*2J3PGPFPf'!,bi2%"*1IUbV'Hq5d
+4"S*8Q#H8Zk&#Q4S"Q01X`&46Cf,TG20(6qI`(Za@jFrdG)Ec-*YdR8reBSE3FEB
+A-j((b9l-4"iRHc((mMM4LaR2`lc3LaQXabZpQ1(#RZR&M1GaXKFcQ-E,[CL*2%l
+eBJB5-4(dBNSap*iNT4KEr%d6HSJal+l&)%D-(cfG)5)kfp-T-ViTS+GcXG6bbme
+pX'fH`j&p'eNlRXRQQF4pX*AIBM!5X*bHHGAY2VMP)r##TiZHLCkm+Z(TZ!DHd8,
+-Zc&![a)TZbA2XQpBRP[r(Y2Fh`)2b62RH4F@[jS06kINQI2FXK,6lTrKE-*i9R8
+%C#SKUSBFUq(TH!LHC,5F*hilc'$4&mDcQAa-I@C3'ma#6&E0MYRf2Nccj`Mj'I&
+X,0N6XaUeX5UGVmdMk&2m!Y#a,*l+G(VH$86jR`"feX@c1r19eQF1jlTHQNT(GMJ
+mdcKLIj(PHGPQ42FU6rH$C'"l)kXV8!&AZijCa9f$&eZH9ci0K$bV24qm(3j,l$`
+E@!cYZIGjTQGlhNPdk$`r1`Ffqhr)(2kVUp)alrN(f$KK8RY5jFh5-ErpUl#TZC-
+mYh0CpXrTQ*Fraf,C-Am-MjADFqX"f04S5ZAj1m5D92V0,+2PHFG2!ha2kjM,bBT
+Af6'"+)RTZBDY5AXBij`[N5Ce0Qpr@,1C2SrF$`M85ma(iF!pZA6-lpVSF,rpJl#
+T'CJmUbJ%YQ[2Vrd(E,B'A-8+k(Ukrq"MX#fc21Ib-90l2R`*E-[YQ0r"BjkZ`1f
+XY-rbI$eA*G"BFhrU0f'lh[CFL-H61ZE1$m"Q6`*qp$0!a`)GFarie,(#M[PAH(a
+5aec)2HeZY$`ICTiD(Ck9hi,Y*X[cm3eJ&8(8M9q%!lB!!drr,RTCB#fEFf@V!M!
+Hd&fc1mqj1Fq[)%qbc`h#ZChl*P5r2mqjGXc0B*fDEbTQeCcE&I1a(%YH83FE0a&
+6TaPSQ,9"B`#PdK0-eENAD,GBFP8!$VGDRPr!eKF@5eD`3`PG)APq,XH5'cm2fff
+@jr`2jeMbd9q%cGiFBrkRFmKpjlGKHkhYqBFjPRcq5C+MjEQ)@N9B%UZ"JZMXQ%r
+P@1@&CYKHChNZi*)-JXr,eT*-,-rY3,[&NNZq62ME-DNQK&QIqeIBL"hY5Ei8P[a
+hVK&KGdEE`FB@5bCB@eZ0cU%#%A5i@&ZlHrNUD%0K58mGP42VSr-NfU@Hcaf%cHi
+8,0KNXk6Rj[I!YYlfT&S@PNcq%@aJ*['NpK*&XTRBV,Fm&h0e#Ff5lJ0N"qSGGAC
+")3P,HVDbD[D2LGhcFbbjr8f`fGhUa6N0iDRiCGM)(cVQRpJXkGj2MSCk!Z1"jAi
+'('@cT%cd"RpL*G*jE-9B,'PlEJ*kUPPG5jPf6J&ImN+H*HfBV@!l*Gb@#8YfaTa
+,VD&Cd[e4lUV@C(Qq#k`L,1RC6+4BHmNj'S"pB8RheeQ&Zbc2Md1(@b`C)Zl)4ZV
+8%*qLPTj#*m(4BPH!DN*BmJRU3RZ*ZcP8PX+5qqP&p1ZBa+0Q58mCe5*dVhMHR@2
+*4ZU`0TXPL@l4N[G#G6Zff*j[cE&N`cYJB`lUm"1dX+6lFHV2VAE-Rmr&[1eCf0j
+Jm`"eSI$!Ma*4El3mNq!aB8RhVfq$`cdf1ULDK58Vf4BPXfK-8e@+P[`YmL,MDXr
+p1CEmi!++&lXflmeTbEpNM[C(f`ASh`K,ZVp+E@2hQ1D4)S3P2G6YGXIS,L*FY+6
+cA54lbh-IXV'dj"HCLIhG*d-0V9R5rG@[`fErYPp#65-DiVdF3fhrk[STF+E&NRp
+12B3q#rSUL,FI,1QX#6CL99Mh2l1[B[H,jK%G`ALQS![&NkVCmZaN[$RX995M&m0
+qK(4TrKm!!!d19'0X6'PLFQ&bD@9c,VNZZ5!Q)&0S6'PL!*!(Sa3!N!m"dFd!!L#
+6!*!$&[q3"%e08(*$9dP&!3#[[Z!5X)6Ze`#3"3)rGJ#3"MCG!!#E#!#3"KXA"[L
+,4EB,ImP#D-ZaKHdMLi36MPri`XP#Dq&&ZqAi*@'%,8S@HR[YZ)00C4kK!ql9@Gb
+9VH'C*kG1q1V4SPf4ff`Ii3XRYlaNajBM[h[*FXCflm8**i`XaeV)[[KLC$Qfm+X
+M#eQ1h,CM,@HXKI!MYf0pTRX3DcRI,SrF3PDXm!HmfRAYBpZ"hF+Z@eJ,!&R)E#'
+hb5E$K@bb@cGCEG5NXipb-kmc,bFfciP0SRCpY-kADj1m,Xqm"RC1mVYd[jQ,ATq
+Gk6A*5HIRjA9mmIh&3AlRZr$&FcPR,QpRGKjCI2+lb#Blb5DhMba(&V+3!0X#!!'
+FGEVDpAD&2`E!SYGY9Zbl#'[KYr$&10Q3!*qh!GL#2q#"jGQJ9+pA2-r,)HZph-$
+&b'QHYfSBqpdqL[qPZpC2)Zrh["mDplc9EA[(9i$Ipb'U9!+8rKqm4lqNYm+lZ!G
+!&1Ep-X@"qN*m&Z2mp1Q83[TUri"r8HlfjAG4%LqFpEe@UqhiF-[A"p239-AhPYr
+d[*pVk4FZRRI4U`Ve@V&82rG@&@4[PIr4h2j-lhK-crZ`Ib+hFX8kEah2F+rRIEl
+JrH"5VPC0MfmCD$6$hHA&Pr2#5el6re,TNb@mYbF2Dc6af+9D)#eiDb'&PN163RU
+QX-!Uc3')6#a(5%ej,YmS4j`1&H4BeUZ-TSI4NKlamY`&ZC%9PhD,N!#T"VSi8-&
+5Q%(k9lL5h2-Yj'XF(amP[*IY12h)[iM(0hD8IVaN+FT+5iRD`[DETdU9c@&a*Qb
+1MqI2KkV51djr(qLrdcrYdMq9@dTVp@@ADm,rI*II(-A&j[qPp+qqY,IL%[*`)LN
+iU9,HY4Cpl$0CAXKdGm,RGD2HP4[d(eYaY8`IZYEcAKeJ@)cFR061#l[%Tj!!P*l
+Ap)rNVXKpX90bGcC+(aJYlfS@QhXhMMIVYi5P1#L8Sj+hj,LfA*[)"rPkY9'ZK-e
+PejXhA)[MjR"6@$[YGe'j0[m-()9Cm&Xd8ilVTk!@efZR-&U,8DPBHIiCb(GYX9N
+VefDMCGqPa6h&ji,@lleS-@i@6f%f,84a[4Um+Gal@ldjFmUhX93+SbJB,mCcTac
+c#qA+c,24c0c`TZH5"(l0jDJB4@&eecHI&-kG'35hmQ-fVFYIGGAcbD&FZh+MkIS
+#!B9CdDT8lhJXq%@2"HI1ai*EkmMehr)TCf0VILLUNPEE`mUbimT`hr2[ZUVBR!h
+MB$+-ip-2ZaLdBB9LSj&icY``rhb9BmGLP@0AVR)P2hVfNTYqB[DM+XFZXXS9RUG
+Bj6Tpr8aQhd+9+lmhe59f,98jpLe81ABX9$Pfj#TAmLX8MT*cC`CaP5Zm@&MP1Pb
+lFS1UA#%V6*8Vq8@2CDTFb3e9VYfRR)eFjGLa81ABX96P#Y@M8193r`4lEC[$[B2
+-qCkGE-lh,G'jJU-Tm!8rVZC"r*eXVH4FS#5qXq'#[Sp2"Rf2GPEAr[+'L2QqC9l
+R1lF61pqcRGRjRL9U9h"XTdX&lh)kPGKGm(!Gp+lSfje-KZ!&#9*NH!A(q-f+(+r
+JTdPHk059R5@DjhZfmccIXdcdJY*3U)%kqDAA4HAS&-GXQ3M''R'j@Ylh$5STUmQ
++KEK"3l(GEdeKf@GCX63f'44#hU6mM1daKLA,""Nk8T5q8dHBA2N,8EEc3!Ubh8r
+%b$lP%#rmcf*CF#lb3q2C39L-FiQA'pFLX65H)E-X1KEC@Y(ETfY&[i#EmB1Af'@
+lVk'Al+[jTI%T*UMa$$1dj0Me-%(b'UHHl1eS*(3iGcpRb)f,MR'k&GKad8r4ij*
+6qDQ,"0Pi&KQbm@c[h"MIX(96G#`r&c0Di64lB2e!0&Ij9M9Nhd)aC-G5,@6IX"5
+bCk%5XL-A`T*I)6&,c[63*EHZG`k,B)HVAc3+VUS%XNZK!V)M&m"f[r+6k2,(2Kh
+9Mle,aDr6YqXCZI59r+)%-i@[j)Dkeql6qF+&UXH1KD,(MX@DakjFmNTqRHp8,(M
+Gh+qEpd@FEarIkqCkA6`[jRKPIYI&l4lKGBp`ZK+IkqCbA6bZQm1emlIph#hLE4&
+Rkq*V-9FVml4fMYE&clUj@6F[FhCpHScVc1l)d(P)-GSR2c%Nj`rIE8*Qc)B"Ykc
+CIJXTarE%p`kN'0'6hjmL+mhf0D5HSI`KXYV#KejMYM%SIFb'U9UDP24Z4+Nef`d
+SrFb'Z2ZElIG4"TJ0XmLRQHdI815!XV$p#1Ade*E8f`ddfe#8-m`f&f@3!0P@@Pl
+!GMA+B,1p&'@)fAiEj5bcLEQUa+9Qqb)+iS,YZbMRQ!eMHaMD3SSKRZ&Q%a2ALF[
+0eS)b`Q`E88DD$I0aSmaf"mTSXld,"EN$'pkqhQarMd*6E+Pr3aQAfY,+XI&Q3``
+6c)BKXiPQ@iXbb@b)@mb05GY[S%`aflY4TTVY8bKi3pLqML*(e)6YqeC28$T34fD
+B$HmZ"YLNE6E+,,1KhX!1ffD81@Dl"DA"E'p#3Cl#pXFSmmb'R*Y[0Z6FJY3Qja0
+TJ#kV[*86fm+'0fSd'q,1Qfd,#NeLCZp%`53mE'p&@@5fpk0Jm!kf"e'@Q1dl+"H
+B$EQ1A%Cj4"eCDME%ID(C%$FNE0HK,$2EVk%X0p[E8&DBl8p3a-bpY2dYbX9QqaF
+8e#YGIY[-KKUdbQc)Yp9Q3raVc)Bm3ll$KYUfcQa[4N(YKHdM+1[0pK$+"V2K[5m
+efhqLA*ED+P9rAf!fe+E,cBEmZF*Xm%&pJ`hMceHDl6A'0@"$RZ&pB2XXbP9QqbB
++DM*XU'hAT,BUmB4VcBDkKPb'$EQ+r))0X9e[0V`hYKr!K[IHCVEl8,DEl5XS0$P
+ET6cEQGSNK3%IJ3dFJ%K`YHVAEV-KYfQZY9V[GD2CEN@jb@`BSAkKf6k)3U2Je3q
+Jl$AEpe"HP0TUa,9S`,K'A1)PCN1p3jf%$EQ0Yi80EieiBEXGK3ClDpk(FT[C2SD
+#QJ2E9e&HEVCr43'Qq2U)qi&h`)DkJYS)'qVb+mf'Z[-UXb&RIYeXd&pYYYp$!Bq
+!l4-S[fNfF%6N2Q`r3!'r%epIFEAAQJfmi8kcSHlIC6E8apHC$IRrHV2KVGpJ0Z6
+C'mhf!46`#0LqJ!)H"a[b'h9!I,AL`-#%$E`"p4mfj$GU-Qb)qqeQ3ehj(E-K2j&
+IX#&qm',B%2FlcICA+1"ZX(d,"AN"flqMJ&Z*VjrUfA[-"Pi(RJXEF[fpCN2YITr
+C8,2q`'c)fcmd'plaEV0p#1@2c2DA++LaX(d$"Hm$fip48)[%eermr"kcSFk"jm)
+'[SFk#4[i$lJBE1!!L"%f[-H(cBBD!"i"'plkSfC$R`#m"MC`#p3Lf&$c2QkfRk#
+J9SK[J()#Q,#"'rqCf9#(Z[H3!(4ri!IJZq#ji,IJaq$&i,IJYAKIm'G`FI"0a)S
+F"am"T`%A38d(*`H2"Um$e`A("GF#Td@Y30kLAS,,iSh3#d$G4Ld$j`Ir!1p!VU"
+QSRkKCS0RJ&q!9i$IJ,q!9i"2J%H!2i!hJ#q!*i!IS1k!$i!(S2kMlU-'JJHKeU2
+'SlDM0U#rJPa#2`9p&13jHJ2SSi#rS@m#NS1kMli'kM"i(rJHqMV)Fh!mm"'3!%l
+d9Y"635m&244`A[3iG0m(046e3bpe3(e&6`#m'(`8A!Rm&r`C["Rm&r89I"Ie"C`
+FI"4m(0`42"*m%K`5h"&F(K`HR"KF'&`%h"HF&h`)("#F!I85("Hp!Y44p!E3%`#
+r"8F"0`%R!4F"ad(G!KF""`(h!!F#a`(h!1F!ed#0"lF!T`#A!)G!c39R!&F!4`!
+h!#F!9`)I!!p!r8FY4-e'V8D04Qe'c8G04fe'68BY"LG!c8FY4Je'l8A04De&M89
+Y48e&,8804He%c85Y4)dNlZ"rX[H@8KULQL(EYPkJK0alGV&(X+L$&JmNPFSYYV"
+&IB@&,L+8*$+&c##cb%VND'39FK5b$MQ!Y39GLem5[Vf2l%iLrHi5E-ELeIQR'T2
+(GkZS#"$P)dYUp*U1"'elYD0Mpi"e&`jmj68CDJ23d9dCM#cUEUd'#CSUDZV[(YK
+AYJj%m+hI-KjX(ET"&6")(9kPSpDUq#plH#P1A!4-UUTAeK'V@)-P&(U65l`3TX+
+lB&8kNk*Q,q4NbK-F$L9q8fAd1kMaGfLG5kP@q(9L`0)k&r@J&jiV',r-mR!2Mep
+ZLU&4#8AbEh`f)0I-Tp-,XVB3aXhkE@&c2JU5)CkfbbH#+rheKqrbeqmHR"i,*ME
+2H9F%Np,brCHp`I1h3EH'Ikc[XUhHE$"Yl9Vl643Vk9Z0'k,QKASm(l+Ar0&U2%Y
+M)(9LZ65*PP(bGG9'"'ESf8M$aPXa2XVFFr,%JcM3`)&Ja'JRe6rlTQNebIHqGlq
+hpkQNTHCGpAYprNHfU6AaS(K6)[F(lrIfINlM'ZVl2(*fk[NPN@ArPG-U4c@Tjjd
+D"D!@YHJpL*VM2CakALp563eVJ3Qb9TGklK9PTIDei1)J`e@Tjai4AQTQ#dr3hFq
+NRPp@ki&Dfk+[)CS)hTV8Fil)1M@k4EF$EB*2T*iE4DHTl5eb"Jd8b4!6ZGH+5&)
+6A(4(40XLDHrj*G&fDSQ,IJ!D29HQRTp8Ji3Dj-*6Y!3'[5VeR#G+6Zeb`IRa(MG
+AidL0(MeB)lph825pip5!GXp'03#Q911+'N+K*pUcZQi82'@MLI,Qlp4!S5Dpq0$
++'TPkpPAEJ9VfP!hdDUp6)i`Dq)4aTfAKTl%Khi)pA25j!,DVZ@!q"m6f+k5a(ZC
+bcAc(QcC*H!mB0rA(h#jIAApqE(LN2qJI(TSD3QhGNTqb'69AbLHB'IA(#Krk`i+
+!96"M)-FHD3DPq$hCm4-0+$94,)D5Ir&DrNT%[&PkH(66MY*mH8Cc`'XRf8Vibpj
+Pf5GS6ENQYR058p)CX2'eDm@MD!J+FI!CU*XUApHIjqc+T6!RQa0-Y'9+Q+QqG2,
+Fc)!IrkUlQh#km$dEch5jIDk3!0@Xf3Xd85#UC8ZY(*H,&ABr,'i@CkXKLmL1ILF
+E1LVq9@'c@Ui9iqq%$ek&GDCkdiF3lHY-h306%mFqAQIkb*lXacI+DL6`(XbNkCN
+bM!1KTD9Rdm!3+a+P-cJcX1)5i(qZU+',20RHK'aQ6r,$[4GNq8hG$1rJf*!!q*l
+"I!EhfALI`hdU$XPMNJQM`3S0d9GUf$JEeX*QZG5cVHALTG26SJjX+rCZU`'b$XK
+Tfd61YSUe,63Dp@Dmd5D9A@U&`@[4NK)M!`dE0aEUc9#VphB(2ce`cF$9[GE)JGH
+L2j!!%am)HNjYFE%f8fc1-29"ZhrE4S0mUZfS9ZZeRQ3P!S09LKFq9JF%Hh59m34
+C"c,LKCYBdlNalYh@+T+mX)*I(6NL0X(Mb*&R)R%2(%&bG0H+qF5T*XAAe3XeR6k
+I+f)&`31p30l49E0'!65dCkU1*cq9a*cG1Qk-FKjmMmiM(Tr%IhErQ-YXVBTMEL8
+)l@!`j`XFrkUl0h`ikhB`Z""f`6J3)K3aGRC4*(hUAUU$9@IBHBXGZ&MMK[fU@'L
+(REPB@SEGZYL0Llfh@15'KA"i16"fE$h&cPMXHF9q@Hb@4Am4bpZ`Z"&lCV'b$U[
+K-(@*[J6f[Q,[,[E"JYTM[4Y@V@'r,PEFBEm,GU1#e@-r,IB&B(mY&VDKHi!p[pM
+$Lrfmf1q,RElBdiY9EpMaLhff@)D((F$SdQ)P'kCrpFjI,)ZMhHGbcbpfjQ)R-IE
+@BTFZdJ-lH,'V'$2a@15'0A@J#pK4Lrfk@0#(AEISG@!&R0jTLefhf'A,qhZa+eM
+[lX8HB1`baRT"l#p'ka8lM,%M'IZ4p5jN%$[XS-(D#EeA@HpEaUjPV*VM2F[BrD[
+h0@#2!hBfS*Z#P3hB8iZpa&LBT2IjBXm`lbl'LN$H@iaGa)rXBmBZClf,'EYMX41
+BG`&MlbrYQIrTPreQ2eSkl8QfElJfZ)0Ei(-Km"$4,ACrl'Pj&[Hr-V(h#jMGiAJ
+%V3(l#IBa`k$[`T!!qjJ&`ZKN3E1VTME'@HU`f)NQ1@eTTjMHi9lbdcYi5Rl`!Fm
+Vq6QUeK2cYf`lTlr)'f6L%`9AMHbB'QL8AYU1,Z*3PpHdKe&qdfIL8"qD02)pGRR
+edQZH(24@c*c`9QrDQ6[@HX$(lUfK*4-`Nlh[D9pN-XcEGh[IdUimq$lGTke0TQT
+EYqFR&QTFMq05kY-@pjk9ccKd9H`p`j8%m+2GC(3pJ3'R@bN%$ZV@QM-iAKF(M(a
+P"kG!a"N(AEGe,Kjdj6DFLBII"lcc8KFhZR@lAX!aHB&ZhKk(JmlM5mrJd*8M%JI
+GbE8Z(R3`Ap["k9j**h$3%EhKI$a&UeYZ+LLS$A`64fPr)DU[lSAV1ce+phZ8qYr
+P@cc+IAbq4H6RIAap0`Rhm4rTZHYq1hV[TAiljL2dl4jk"S2Zl(%eI)9a6&fKNA@
+D"#"EG+&(CQK![,VZK')U3mqak#Y*m'&k3er)K)N9I5%6*M"dc`iY9EU3!%PH$%)
+A-XR,31K#*RR4KjihrCa9!RbiqSJZC%SmBC8"(kjIdKFbiEhdK8c`eaFbS5,3K8b
+H-TdZC2+8`A3KNkI-T!ZC2%h2d)9-mNSRZT!!bG-d#Ph)j+QV4aFbHCT@S3ZC2%f
+Ed)9-RUB`k'!&6qp0r4K2&j(3K8b51G+&60jI@k@#lFY@X@$$"6Pd)C1Rbi6S3LE
+[+DYNX2f(965N-h+5'J4*j3aGb*681p+&6%RKdS9-5H8hAFL89-@L#jQ5QN#L#jQ
+5QNkKjRC5NdCd)905Nced)905rA1kN!!T+@j+&c)P0F&$&c,*bk,S3UDN,MqK#jQ
+51Q'",Q4+kQ`'ZT!!+DP*D@SV*C86G#&68KG3dB9-mK)TZT!!+IQd9@"GbUJhN9)
+0SJZC8US4G#&65RP)&c+Pp+E8H8XT0VU3!#QPb5+Uh#P0j0#&6#P08G'&6#R9!lU
+3!#QP+5LkN!!TT9%#ZT!!+D9V@@K,GNUAVY#&6#R91EU3!#QPA+F,Q9+I4U'HCNV
+R5Y$j%@RP0adFNGCEdSN4DG8Q1LSLV9T!Cd5NP9Gd1%4DEd5R3U3e08E(3D49fqJ
+FL,6HNJk!5'Z#Ldjq5'Z#L)j[51X#'$Uh)De,AqM!KV41K+!,QG,+AEU3!#QYUir
+S3UDd,[+K2QMkXbM8Y8Tr"B8ZC**A9G'&6"Ra#TTFbSJ2d*4B4[@8,Q6+U%j4PcD
+Mh+8,Q6,+0lU3!#QMGk3,Q6,#T3ZC-TT!S`ZC-TS+S`ZC-Z)VG#&64TI08#FrS`Y
+Pk%+QM%k)S%CSjZp4k%+Qc--S02U58CfQ#jNbfSa*&c*P9C[T3UDXkMX0e'G9lqK
+#TUcbQ5jNbLTrU,Z@9Cad)90@18SA-Q8eU8)A-Q9e'3eGb*39Vk+Gd&R9'1SGC4p
+&S3ZCXVTdLLjNbUQZd)9-1A%5ZT!!59jj44Fbj94Ek8+QR1SAAFL88pfK#jPbbP@
+kN!!TTabJ#jPbHJZkN!!T*jj%&c,PG!81AFL8dmNGG#&66YFXdB9-1H8@AFL8dd9
+0G#&6lMp3k%+Q#[%rZT!!U8+mKbjNUP#HG9mRi%cie"lm4-k@-f0*F`D*@fh%K6Q
+*(d"@)UZ3!0A)'Q3IC&pN,E)IXMpb!2)dC"hbG14!j"R)3FJcNB143j!!Cb(24Z+
+)iR13!-13!-14jb*()%FL4b&()mFJkj&MNH13!114%j!!%j'6N!#6N913!&14dj!
+!dj(R)@FJCb*R)@FMjb!EN!"cNI13!214#j!!#j(R)aZ4H@36XKQj*$hbeph4jAB
+EI1Bm!A%,k&9DH,@P8JjR!YZ'L40qKT%@#BlP`qTFDI1h*8j)$YRE'!FrJGp1"Nb
+#N`hN8)XB@42iMC9+[643-Q[6A,'@'4I9pQ5fjQd6Q@ea[MV6-BT3I@0,,3kE#if
+ikl#PBebdf$8ZVmIPhAXcXcM$Ed[R'9D'8AfK@HS%ePB[c@I'9BbIq-E9YI*LalL
+RA-Q-&p@,HUCGi@bif%Lp'U1p0BXbAicD!HHC@0aP6p%dAq`N4"-@#PXmHH2Qc03
+bQTQ@[GP--MRTA@"FY0KSTYCQjL'9aFqS4AZBM566c@&TS3d3T"EbDRQarG",3N1
+lS"M0Q8AFJlUMr@`YYCP`F@cA,@fV5%0kmTDaYKiN4mYB&LCf0QM,lML,J(*(*Y)
+@U`KiMGd@&@H[$pTDE%EfAUhcXfEB&8CKFdrEE9FlY9VV8APa-VB-%3Ca"D)I#"+
+F2)0(@e18bcDUfp@UET0QkL9[Z%a94"Bde4Yk$5500V8ed[)(fid9(QH2%XH[MQ4
+V$U2jZ0iSc#SiheRGmLJmGXI0@UNBKD@U(YkXULMABiN[Mh8Ye9l+U1AeQK+",f0
+08#E%IPYehD[d'&ELqN@"+a*(eN"j'k2HF*KJapQfHPcAZ*Kbf3)!e8LJ6k,@kIU
+R))0k5(Cj+D1q#PX(*01TFG[NPL!r)&Fm64XeBeeQP8APkQ)TP(%Cf53KS0&%Q%4
+CYYfX-$BX"BUREDNQMbeF%Qp8RGe4)h@fLTZBiEG`-NmFj*K)6h9-l-L2AArp8Jc
+Lb%Ffbh$e)MJ6,Ul6%*0V"E-1Q)`8-+`Q+*J4P'DPL@5rT*m4X)Bj%[JhMiiQ9XS
+'lG)@cq3ck&,ZE+VASMS8BRHmX#ZT6hZ$E`4m5H*3M&N3)P%JLNL"8iM'ek(UYq8
+VT6L&J"8%)Pe3ZSb,INV1HK90q`Y6N!$d1#XQNh#SM#MIB@Z[+GqmBHE+EP6+NA1
+%RJc2UGq,d0@6FVBZ,MFMRI'T"Y%EdQ9GA8pHM'MBC&*jJaT[5RcKa4BAPpjXcra
+bP69jm['PK*5PUTa)!B3X2*hTjfFZZ#ca9%&4VNl5JjUR6[&2M'CK4R-4XJ@C4)U
+cb14P@KNNMX$-)5Z3!*A)+Q3eXJEC"pNA@B[XKqb2()!m$9Q(2"dj%(N'FK$b614
+Jj"$N@FLcN814jb#()BFMcd@13)j%MN+14Sj"eL2()XFKab-R)#FL*b%R)kFJTb+
+R)DFMcd213-j%cN,14Xj"0L$R)ZFKjb-A)"FLcdFf)S1l0a`!Ppr8,29JA(9Eap3
+%T0c6``k*Q`rIFC+6cDlA6++ll9XU&PDS#YG5&F5GPU"1$VG[Z@fS#+V#GUV#Rd0
+Sk9*54p[hSZ4q#Di+,kBUI+R9HYUQ3PeXhrrZai[hUVJIEV05@plF!9G'iCda+9c
+DUBE0%jL),ZpD`c4ab8ppHJ-*Q"P#,QhNG$YX)-&Z"SbjPMD3!'$A!QEDH31*hMk
+#[3VP$55Pl52BDi!p"pKTJ*PiC*8$BJZ*mq$VZU2"rE+Ed3&bqGN[6JG!R8qPZiC
+%fDrT&EG(A03$9pbP@I+#'#IFT9RCRR#ACU&G*UlD+0B"Ilf#1kd5b$SJlR6mkB9
+4BQ0-JrII#1kZ1L$kKC)Ar[cLX0D&A48f-,A85T@&Q4jKT%(@JFF[6m2&B5kb)U$
+V3%92Z)[$8!HUHX*G*)JkJ)P"c*UT+51KLjRHVl9DRp!@fm,R$i5lhMlhbpjlE-h
+'YQaXS+EYf()H#l86mcMk2J"XbmE@CQc(TUhBMSE2JC@MiM(f)Qp'6N9Z3fj(lN$
+Z40k!h)AFMGb$["(CM&b%A)aFJV`!fB*FLV`3H4&b'A)jFJ@b&ANaFL@b$EN+Z4U
+j"VN@Z3jj#A)pFJ2b8Z4Pb"FJ,dGHJGb)["+j#ENCH4AbDZ3eb'Z4@j!!eb'[4fj
+&6N014jk(R)'FLCb&R)fFJfa!cNA13mj(,N!Z4*k2E%6QN8PN#MNC139j%h)d%V@
+Nb&QrHefVGIcdA8M11-lUk[KF&,F'*Ee,AYPA0cLp%r$%Ka-"'KX0ZfcJ4"c,#U0
+f'82m&9IkGRh,aNIYBSD6FDc0fd81*pjejH6%Q3L2ab&[mEPbcLY&d@%1X,MG@lR
+4,PB3AdAMbe),1ije3IM)%9hcN!$`5fp*,X+3!((dV'lY[3dSL'1mAAMaUcJHIC!
+!aq0ip2bP*q)i%-La1,!FHr+q`64IlcNqerVUB%lf1Sj+U0Pl+&Nf2C5ji)T055i
+,hiH3!$Yckpi@q&miPLbXNA%FZ!MTd(ZJJ56MH$3pRVK4DD0G(['V1*kpG8PprSe
++)JjELCkiGHR!Kh6Yr@3FZlfjFh@DpS[,3UeG5h8DbmGlBfeI80ljL6hV$S#pAq!
+IZk*Q$i#&ciMMm%80a6hVA4q@PVX"iX!RPp(rr`qRNKbm5p(p`EM&bhCM2-QiicL
+F!Bala4Zh[R,-E(%pIpIRq'$ZdDXqbG`2aR'%Z4q-i`Kc2a6(cjKlEabpc"dI-AI
+[mBI@p`"Jl[[HifRQ(MrXFHEH'mF4jVi[M+HBHfmF2FaGa('3!,`VjRl9l2rR[I1
+$FBYV(,SaRQ6F84ci(!'-HffjG[A2")XEVMh$Z#[rPc'*1!j8KU1-k@!F4jM1S6K
+qaR4kicKDbII&m93PlifMTqL*1%6H(f,Q[GGCQil%rJ`4FHcBC4FGGArLL*5$F93
+@rZYXJ)T#)@rh2*hi(UYi6@NQ(STMkmYF8F5"LilPk5PL1,hdZ(j'E`lEPjDHH0H
+6R-(RdMfFr&JF[C@c*mrmr0Mc8TSppP8R"bcZVc&pNqlMcLpYSkX8GD(+Ap#&ZLE
+)ZSp1J$LD+P(N8@*%!BRL%,8HljSiebHAA8-R`([)ETm6)!lGlE0a(1[fA4YA+pl
+SJ6519ac9Y@A*(GJ(hVSqYqUY4lQJBXBMDdI[b`A(MJ-TjS$lI3Erqh1[Ir"$Z9A
+[5&E3bMLZ8aE&lh%ickM,XU9a0Pr4BT'&D(mFZ-!bS8-e6qDpl,)i!I*9GPQF!((
+J8q8XmGehPA')p%Km,cp`qmm"bZ!9#Z2I2Q1MrF0SGbre5+cU26(jd$6fVV1p+IA
+T(,1Ij$"1J$L@hY,F2B"mlPh"5Yd9-i[f+h1KdKG`S42j%A#K%rRU$TJ9NecSC2e
+!"9jIEV`bJA2iAGd6R@Yma+QHIeFC4mpYY)IM1(Kkq*!!hQmcA[BlaR6F5M0H*cr
+(dScAcXC,l,6hA9d%8pjL9ZcNj`#C&GYA3*kD&BXUY5YJ9N`aGhP-H6G)V[F%FhG
+8-&-R319d+e5U`pr"`klF(cdGKmZQ(2Xj#(SaEU"015Frap+QR'1pQ1j!R!3EG`j
+mY((R`1IHfVM61rkIk1Y9-IprK-'j0rB)('9Hqq*iQRR&$h+FHIA'iCcBMh#-HA8
+(iKEBXk$L%!HKl[m3K0KEVdM"IK`h!#13!(%i*IBqq(FMlKmCHr5V@EUIe&9h0b+
+f['mm2phSJ[N`DlYdk)BKbGVZK4ebHVhYmSRJ5RrpiE[mpEX(TmH#LFechKA"T,4
+mrf9[i%MhMl0#rBYpPfheCS0TZj,mk1G#k2'9hr5C104RHR-l5UpjFY"E-A2#@le
+TCqjBk`%IZlH'QH2JlV'pll&*c&6JlEZpEqP@6[JqcAPUNqY'@VIRl3jEKa,R58+
+LF9FGIZI,9pHI(aXHk3rkKiHQKP"EYq5Rl2Kp9mU(#P!c-6CQ9pfVVf,6a(5lcq+
+YIZj#F1'iH-[S#2"H&bajBIYbF((&![NR68qCRMBpBhV@p*cT&DCAQPjPHVAT0DE
+h-Ef[kE@Qpc1p[qRb(A$PV(QRe#9,Pif,LaJ)kc66PjKHCrVTTJmdr3c6"jPqTZQ
+$64pLqPQQRfhk8022-AfBkF002pId%DD20(f8kD00(f0k[HPM6GI[10ld#DC20(f
+5kC00Rf,k901RQ6lGp20-Rf(k600RQ6lEp$QQ0jJqYjYVk9HrF$PkN!$EmdbIErS
+#daHDIVlTMDER6@mbr8,6QlYa9k`jFrBfP53FY%"kUJYEUA2KrE1iUF`*&MbkLe&
+e)IlbA'k+3IM,FLEdE"HRHZAb1GhdhJ*%jV-)A1DTX'Xr@DZ%,ZZ1m(qKk6,[K5l
+c9HJhQBkV,4lrF*p$-ZNMCHab26IFaA+TRR%Abk9l`PdXph$lBMNRh'9DQCja&mX
+pIUNDA5cR,,Y-Um,9!Ap8`*m8F)a9!eN(+R[#A5chF)qjLqAFChFS68RhNbrYV(@
+SZ$ZaGHfhIp0l%jXhHHb!G!I6GUf(lYfrG0@)*hYiKa)'21@ZHHrSRrEKIkprp#-
+lrAIrX1jpFdcGSI6i05[b$U@S6RIGS95Xdilb1j4F#XcG$E5Mh$*hI-6F[9pB[E-
+(!(0h5pfKG$,[6fNClP$D@$Y#9bRU3T@rS![eR30Cpp%*%)Hj3bQ+Sq[HRQ*A6(B
+0R3$[)EYp6S!ir$Z8pXGaV0XREkqjMqe`qJiPldlr)HcL$LA[`%FEhNErd0l0pqc
+h$rkXLSQi3kQfK[r,r%1e6rS(RJ#2Ekq*hq0`RTNlP+)iZZj3+XCKlP"krMeNPm8
+*N!#[XX[L")J$(pe-mrblbMM8(8V2ah'+D(1(NRYl%kHm,elQk+Qh`bC1bGbGE*X
+i$q6p+4A%*XjcrEXEIr[-*XklCljIe0R%L9[,8mQYj9QlYIbj*hD$IELafqXCGh0
+lTUImcHfBijFhYaIUJ,UUHN[[X)[DMp5"C-qiQpZchlkjh89fK[q6YpF,pZJN+`+
+k$P6dK,Zj(AA!)AGcZj!!Q#0B,88kbADb3IPSUJZF&1UD-cKH&fFdkLdC6PD`rRG
+Efb"`--Qfi3b1(jc!QBakUm1CJ[SbKc-90C[Kj%kpYm'CKTTl)5m-cR68#SH$cGk
+9$QF'DTA$`F4BYF1CK9VMF'DMpR%iFe$l1Kc3L9U(-aHeRm1CKpVIiFa((H"`&U#
+HjR!@SYBj(+c41phK0+)1G$MBd(''`m(QM%%1Ca(UQ3i(%qb$(Fi5e#%1"eZTch)
+i,DKR1jbPU%-G$[B"RH0`X*PPQ-0CKMVFi5a(2GIKV%!GiA!`PMV5i9b-1XVKV%3
+GlA$D8-FiR&@Sp3jR0HTBKl-'GCc$@BXkhZ'X3jhJF#j"RHK`eU01FMJE8#FlR%Y
+4TcLFbe#R1T`AS%jc1*HM6RFi@!"aRX2"iXXC$JHce6-G$QDjCcNFh$dcfq&JEGF
+FKi-GZJd1"j[EjMSFc2l2FcKE81Fl(-b8,h!if%qmd1&JSp6j$JHl6aSGcRE8[-2
+CJGVNF,$0SGRKh)#kb1&JbmGLKi1G"%XF$PB5A1"`X(1KaH(FK2SDemGk)HTV-ac
+GUHU)jfE80lTqeel80jh(199(q(Uk`XbUE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jK
+aE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jK
+aE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jK
+aE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jKaE&HBF@aAQ(&X9jK
+aE&HBF@aAQ(&X9jKaE&HBFG`!A@'1ahD&'FGfK4R(GS8CahD&'FGfK4R(GS8CahD
+&'HF83k%V,&J-L%``"Ej[kPei!5+D!MFi)'64&,M"%C3URJ)h1"R8D!VFi'!rD$3
+&ER#`365D!MFi&DM4&,M"U850TX!06K9U0!9ZF+T4SbP`Je1$'Nf"'j`qU0%8Z-(
+TLaT0J4ZF@Y4S#YcJB!Pa0!9ZF2UM4P2J"QF!DM3&ER"13ifQ`!e1(@Sd"@j`6NH
+0TX!0cN$8D!VFi*b"'Nf"'aaaJ93m"@j`cN50TX!0cQ$8D!VFi!a"MDE!$FjCU0%
+8Z-%j'c@D!MFi3e'M+A#$F`jU0!9ZF($66$3&ER#'SdC6i!ERA04S#YcJM%#0TX!
+0cNM8D!VFi)a#MDE!$3kfM846i!CR$'Sd"@j`kP'M+A#$-aBeQJ)h1103SbP`Ji0
+Y+0%8Z-'CJ"T0J4ZFLDM4&,M"QB3D6B%E('aKLDE!$3kfX%46i!B(@eLL+A#$Jbd
+Xd45i`F%@PQJ+h1"J#dXd"@j`X)8PQJ)h10M#%Nf"'aaXBBQQ`!d1YV"%8q!'"eY
+BSLP`Ji-Y,0%8Z-("&TCS#YcJB!Y,e1mh1*LhLkE!$3lQlD)TF)1$HEYS#YcJB0i
+ZQJ)h1*LhLkE!$3lQlD)TF)1$,II4&,M"`9aH0!9ZF$"(&r6Rpme9##r-X`ApqAd
+iTpi)Rq!cMrARK6mJPQ8ib4Gad*m2q[Ja$[Vc34mraJRlmc%1q[0"[cr'3Amqk12
+(11M2"hhm'#IXcmFik-m(rIiB"rhjS)mIik!r(r6aBacdji-qISb$rRc3aipad*m
+2q[Ja$[Vc34mraN&r2ZMMacMSc`Gpr"JRl-qRAX3*qr-a6YLIMh(#rRb-%rERBjb
+`2arMK2hj'#IXcmFiBAmqaJRlmc&1f*q2FF,qI)`6pZGMR,!r(q1%rINB*qc2acK
+KIcl'#I[c-8lBRipa`[jmM"2fjf1FX$mIii6pq4J(rIQJlalMS$mIp2&MR,!r(q1
+%rINB*qc2acKKIcl'3Amqk,[(11M2"hhm'#IXcmFiBAmqaJRlmc%1q[0"2ch'3Am
+qk12(11M2"hhm'#IXcmFiBAmqaJRlmc&1f*q2FF,qI2T&(26RJcjdM)2qI0$(Mh(
+3R`rkq$%1q[0"(cr'3Amqk12(1'&r2XC"IclSpmFik-m(II`B"hYc$[ERK6rfejb
+#*26Rpkqm1M)#bcKf"*Cal!JXipJ4@-Da)l#-BdGJ'FH1`$+1(B&P($X#bcKf"*C
+al!JXipJ4@-Da)l#-BdGJ'FH1`$+1(B&P($X#bcKf"*Cal!JXipJ4@-Da)l#-BdG
+J'FH1`$+1(B&P($X#bcKf"*Cal!JXipJ4@-Da)l#-BdGJ'FH1`$+1'f!%PZ1a)l#
+-BdGJ'FH1`$+1(B&P($X#bcKf"*Cal!JXipJ4@0pikT)`!ZZ5qC,XZK@d6[l1Pkq
+Z2cmf20)Ip!m263fKYQl*6kQVje$jX&"XqGLfSF,)`-J1MH"dIQKrb$&Z++5[pJr
+i&q9ZAiiNqrfKcAhccS"0crlDN!#H6Fq-BcFp-iiEB0-caf-h2611hI6-1(E6-q2
+B6Fq-BcFp-ilGp-`iGY-cipK0ciaM0cdcMYhdc$Kfdc2Mf%h2M'-h2611hI6-1(E
+6-q1i!6BpFcafdc2Mf%h2M'-h2611hI6-1(E6-q2B6Fq-BcFp-ilGp-`iGY-cipK
+0ciaM0cdcMYhdc$Kfdc2Mf%h2M'-h2611hI6-1(E6-q2B6Fq-BcFp-ilGp-`iGY-
+cipK0ciaM0cdcMYhdc$Kfdc2MZ!%f2A-mGY-cipK0ciaM0cdcMYhdc$Kfdc2Mf%h
+2M1-'f26-mGK0cicM"YMdc2(B6Fq-BcFp-ilGp-`iGY-cipK0ciaM0cdcMYhdc$L
+RHJQERT2H*AhR"i!(pqkDrpd84BFprfYhH#XhkPj'p98d[Lbe22rVIIM)[bEkTVF
+NZf8F621rNrF0T[Pkcr'jePF(Fl,A2F`XaYj$b5$S80S1&CZ5A"Dq$b&hjYDp,I#
+rF#aCK1GBQ[pe#FcYARZZ6Y2FVLc8fV98TpeEFl[%Z1-eDZi2aZd!fU,Q@'$ZEU!
+YDTDjib2QlMhqd2SH!-cGrE0&VBHjLcJ1NRGrqpR*[(H!E$rEYdAiUHeRqlF41`)
+BGqqUM-TH&CXbR"-E,Y`6Qb#F!"XFC)9a5Qa-U#bmZ)G0I4@&3PlAG6X![XFUAP1
+DLBILf2Sb9a4aB)[aX(bpfLKA6MqZRp'E`qrZ!2IIib4Rm,Pd$bFr&NG[jHc*-cm
+rpVbbE[hJ9heqAAhIT2Zimd[Ek#T&ADMb&h5KVJQblU-6)!kjC9kY`BlLd0ZVECp
+FGJfG!1mKZhe1J$KdYmr'FDcE*lI$Ah3JMH-94jN3bH9fB"pikrVFUVFHCFI%M%I
+@MYkA#iiG"e*XIqMh'Ic[clhq`3rP9Ve$dq4Q1hcm(SIcM,SX@aTRma8Y&PQ)pXF
+KYm0MEIR*[*GG&LG![XSZLa-J$RbdeIhjGj9aL24)I#mr6JeY,Q9)Rp`q4@[jhh3
+i`,BSlM+8p-Nhdc-EJQHP2%eI-(hbaMYBp#im8r,FIMSSl25Zah2,%ZBkL0l0Ik-
+$$e5FU41CTl$XB$)mYcq0dhLqb[0Z1X*-16a&R0U6r0q08Y9SXVXKq5GrJ5eBMV`
+H16,e[&HA-G!#CI'pY)-jr#PXZ1Y"I5,@a+qPRVGTC&&ZbX(RkFD!TDRRK0r!KYX
+Gj*Hj"f9+kVRL8pK`VB2br(B(-h85'ej"4I-6P0QTjkfkeJ!A1FJ[U4cYNhUqjdC
+XZ-&"IZ1**Qh4l&80`Y80mXXpKP+AH[Ej3fbiXd&&JlSi12@m6l2%Z+a"IMrqFmj
+1@*Gk[[*h&E2r0TMM6UHHVIq1$GFcU'JZ3aQ8HVEm(6EFbk!m8HXTSpi[&0!NjAQ
+V)P#H(p5qHYc%S$,h!bJ2@ZCLFcqZB&"jJdT0f6&EliQl&e3dVp%E+Xp2UHiKGq3
+h"FlL2Cak[PYlYA(EJ[bbBM18(Hp8R,KQ38AcPXkV9DXhM2X9&#BfNAmQpC6A)1"
+L"9A@40jlDe,2pp9a`)d++JY446k4HRj$HBD+)ErTZMYK8Z,TIH@Gf'"ARQ+cGp,
+HFm#ri)"Bj6IVdhKZ6MfrrcXii0B%QCijhRck,aNQ,NX38P4MNDQc9*F'9H0)GCV
+UB2VNp%(2Icm9VrCJ08ikqllR1ZB&EJ,6!h1VhP*lM[M82r'HU+Cp`83&,k`F6rj
+q*fqqrK!fh+fJ2*'Y9(2(XJG#AUUJ22qQJhRlRGK`Qi,br%DRjMji+cCFSb#rqFS
+LURLE$Q,$r3Rb5reaTqC@UX,JiJ6PL9T)Q!rSrJ$FQ+!m`9'SUYbZ14jFPD$H'rF
+@8-hpV%CVrF-Rjpr3UERI8[5i(%&K)PqSUQclE@bi&8&jBQXreGbl&61Z3j!!Ab0
+[f(Gck[PQe8kICkFqf+Qj@m8Im#)UQVC1cEeHH+LKb[2PRBaU8)A!P3I+%e@5DZi
+hYf,$A3H+$B)l8Fepp5mUKrak)ejDCmI[L[NJGq3hPPUJDqlR9*R"l16A5VC6cI@
+H[NhP6([1Q1jNafIr%KXZ-T!!hcK99Pdl(K#8pP`TlN8epkh`5RPeJIcDU&1kj[l
+MK"j,Hki5KkDDHkGfLq#b![R0HeG@Fj0hX440hP)J[l8hG@VZ2hd4"ea2),p,k+$
+SQVY*Y46h%XLDfr#q6Xh0I8$KbCVl-EUSU("A@-dPKLPBmal2[iHkl0GFhh-YZpP
+ZK`(l09GlMRL8&k[AQqZD'r"9I+JmQV-L8h"lJFV2(h9UlYe#`E8&LT&mSB-TZjc
+)2IR09,ZDDZiV9AZ3!2'U$TLDqfQGbBXE#Y3$I,j6)3DU&[V62EPrl062&k["iAG
+M2(A*U%jr8CMq")kRHNjapPI$a6qjFc1Y(eechrPC(2aZYrHj6PA*+4+mMhSEF%H
+UZIrmG@cqPLUF69#hdqSdpZ,KPJ)9$ITP9(0R+pY4+99')I0dc88PmkIqkP@A+D0
+Z8FAd*klUpHj8FpqZGeR@pQc3@e$04F&,E-[L"%1NM,T$V(Y&&JdB%Y@S+e4[GGX
+S-3ere$ahZjMfa9NdU)b8(9[d,V#VD&lAHE@r8%F$R%*qFmAYUHC18Sd@I5$eA8i
+9d69hM5*"(LK--$QUZIe8Ej%(kJ@`'B4UlJ1U!@[ERYI6kp%eplir`f&Gfr-11LD
+kjNj9[`05IKqQ(ZUDqcP9-Y(2%C99G*!!CRfXbh1TGb-UkfFmVda2bMYZ0GIhA)1
+erZH9#&4cYHH)IbD[aSKVk*VVBlBYdJ`5&DlLTQSmHkSI*AEEh!h[5,kZfSM!$$`
+[)4Yq#1Y0h6Fq'XAdI&#M0f5F#2d+kSJ&Q1[K%0YJjpi"AJ$XbQIRPhb5%LfbeII
+d183EQ218492--qKI)8484XUepiU9#Vj$,i!k32RCmMJfe!p9#j%[9!Y[&!0!YLM
+-qe'Z6$frXNH&`Frf0f4aTLj9"dQ[`NKFUGUZiNaGr-[Br(89+I8(+-kr&Zr`Hk#
+ALVe5R'rq"faqPh@QDTq+-h[Ked33r&U)ESQ+-hY-HH-2cDEZcZ,-hLJQkqqXfD$
+DSH,-rYKGf-4XY+J3)QIZSL1@f'a9KITqkC06'ccrRI#YIZfUiRZZT3[brRH61rG
+D&QV2%Bp41qTPe9A&aea(R2I3SI#ZX8VNpaFP0dEr5E'Br2eLTEUMlpAJGF4LmVm
+LVZ*h9ImIh5bURrQ@UVIZ"RYIjh@TIZE[9EI1hb@8PN9P4rk$RmIQphA(+EF8mfR
+kUAZaqE0)BcqHFBMmNlq+cHriMU964F`Rrq[L%hKA&Fe,-ZD6Ie39`TqC'#rZU*K
+2df[&9G$h8CM)9TAYHE99%PNhq[A8D@)qqI[9$I2lqH2&CJRcfkU5IJ0r[(L8UK$
+j2k+H*V+CK1q"55bcDD9k-DKY+M[HPQ9(dhAU6U#c)EmVP&qUGZ5I8!GAj$P9)R"
+(pClj4p3hfjZp`)FcETcrZ2LG2bJfr[k-Vc80r"BfriEFmH,6P'XIK0%NP%IU"A!
+lL1*VqCDLZDAYH5AXL2KDdiq,UD2(,EpVC99mV@P!A"6p-P9Cd@P6fG'd9P8&3aI
+bq`&FL[KDrV"Bc'eCR1K8Ufj$rK2+&23cj6GI&9Lp@Y12L'QM2b@r694*kMBdr55
+pMi6H9(jh+EY9&ZB2kYA[D(YZ9#GGaGPm5081R%*9#2!"&@Icfm9[hYAfr*!!Q,q
++XrQ[e*G"cC'em#[UUe#fIeAE%$!eS0J5-Qp509TLIr65i2VD-kc6Q#bSJXQKRK(
+Qr`%!N!30#e4ME&0SC@aXFbkjFbkj,VNJ*L"6D%aTBJ#3"lp+!*!2!HR'!!*2j!#
+3!aErN!4069"b3eG*43%!VllJ3l#%l`d!N!8#51`!N!BZi3!!Dri!N!C92!B!a6)
+h)e[bY+hEMK`R@r&E`JQRA@jTYYN4IQl+*EHCVAeH8GPkQpTah8mfi4422CR+$Tq
+rm8rjq4djlLE(1X,)*M`**EH2E(,mb)6Y)rX)2m)fZdeSqmMam`JRa`NMV)[m*YY
+1k`NlFTa`)r`*[`JRqb4d(pPN$qb08+$$(c!eZmlbY[6i18Jj*CcmIX,*FE,*FI,
+lb*lJ1F&IepQSXdPfAV'ADefXcR0l0SKYZZf-RGcVBJZlcGakRGFeB!YVd,1Yfqp
+BREQFpMD`JEf$cP"JAZIeIZGhC*m0NLa(GRiDBC[FcSrX1&Nmblad1A+,PjfpQF"
+B!!&hkhQGAAEjf@NmZYRPKQbch-m)Jl`MqpN#`"D!J2(!Pqph&9cA9NUPB'HVe,*
+[`(jHU3rUm'r3m101AGAl+GL[+hAa68V0(r&A$MQjNeAUlV[TH0l`a"rhN!"G0XS
+`5AVMi3jZ$H%3bpr@@qZ01VFr2(h(Sk*5kirqRk)0D(06Ye4[bBfNQdrEH,)DMP6
+%1!XPcGI*h2f6U1bFR`cc4K-h2IlPd#M($r16N!#SLr,G0eVTZVGZfA)bD0RQ")!
+XE-9m!VhA`!BcR8p5fC5!3,jlj)b&26cUYdR!R5Q`8pP(-rl4ID'DHf('GBb#HkE
+#MF$1CZeJDP[P[p)#SET0HdBl2'ZK@S)bh+c8,c+*&(fDB,B@*impp*8,E1l+YG9
+j[VR"f[ak2[b&k)plZRri()mc2jGV4d,2lcl4Ah[bFFi+bP#i0%Yk)h1X3cDIP02
+i(E$R8ZflfY(8(k[B%pIaJ('b%R-UbmfLdb4BhTCCIf0R`@ieMD,Tjh,Tmjf3!2Y
+Edr5Ie6F'SH(r#d#NA%Z03[0Q+f`eR+*YqZmN-%KJkBP0dDkKI!lp,f4UA0iUHlD
+TS`rD&k*P$ceqbi9@8)VaY@8Ib[QGZ+bV$L3")1h`#DY)I+AfE%UE&CAQPQZ8qT!
+!6[kVb!3+YF+1)C88#`FA,KM-K@f$(3XlRSa[J*dA@,Mjma338RkHV(GP6r'pmlh
+#0q-fP#lXc2RZ4V-3kKNV++KMS5XYTb1YTpfbCa'TLX(2AR%03XmbejM1bFJPPV2
+T,eGUZUA)EL-S'2C8UKUpd[!GbqN,MNF[,&UK1h(P)YHCb('aFC-aPElf`-,0S@p
+-j0I9(i4Z@ErHh(+ckaFRSZFA#QB3k$NM,%f%,ZLhl1+V14fli[V*jL(b"#X`JX!
+Xpll5#S6hpKD"IFAY@T*H[(LUYD,JMCh9eC*"@QQ[G"-5UU8MFP2T#1mY(B(Gc5f
+RS[UkY6[G'*64FZHDp[(3NmfY8j9HBIKpCUMRc6!m@HT&Z,%pBhKH&,Zq0!@3!%P
+N#4q6f"JHbi(D"Z8i@qpLrL9XV!Dl"Nk#&4Q6'!1-585#Llf99`K,BP086))68%`
+L%da-)Q0),!FQX&+1VVC6M)I&`KAKX#HfVjN8$)X08X$#FZ"Jc3T)@)i$##Y"[Gd
+C`f!5QD"J%TQ#B"%D%Jb8L18Pdck1IbkUK(dZ,XDp*%J,RX6BZZCc,@&G'ZKDd`8
+UaMQr`6IR6E#YA&'&)4HABTS,62$-459BjU*L(%Z#%Ma))Y2@L,%VAj`LETAL+Sf
+KH*8[HJ'VNU#qZK3`+SN"RiS"jHk+FFP&*CMNSP)mbVGaJNA(VYJd4FL+S598+JE
+(d&5*e'*A!Qf"5d8S)99[Y1[+BV4L9M()!&Fa*%'[[Kj3p#N'TcK@M%l!V"LD)&S
+a0)De5Q5#)CA`hYk+8Dj8[b,89B-hGTD#AUPA#XKALGa8ZJ)'9J)"`TkS[Qk0)E%
+BQZ"L-63&aa*H*!KTmF"%,E'##FhNd4ekeJZYXVAeK$"L8'CCIqK"K1b*2$9c2%V
+dkf9j2@1L1&AbQ@4D%4Sdd8UJj*N%9G*dj#"*XFMe0,eLN!#NjJ)UD4AE+XQY"ii
+e`Cj)bE)B98NeJUG05&fq)!(VFR5+%18,LL"4$Nr`[K`G3hj[F!+G[6FSH[E'@UL
+X0%84rMI'1`C3LBp)3$NZDHebG0cGIF%$"E2YA`lm+3+N2,,rJX&bar5Q0hK,QaC
+)6QmX2+F[X,mG%VC6MNi)6cQk41$,m6'(l`hZ,f9*EPU`jMA*aiDQSSq0kp%XE'K
+C3E1"U94NidTL84b@bM*aE&kBLD1Uj5f,4XA)@$CbN8iiXK%Thl*a*FD9K288Sm$
+&E%J[bE2"2@*J+E4D[T,1&BIeYe44kiUM91e+3LU&648['jG!R@IL2!9f,Ha6BFq
+"I4,XNf'C`AiDl,Q`Cm1ZJEd3pJcB&m0H#RXQl%YJA`Ul'[D2B4N01arfkE#8HMd
+X)deR`Ci1qdaBQG)12J[lH0JR`$i4pP@`Pm0H!AXPl-YKA`Pl&HbVB9m$qc,B9m"
+H$IYDf0I"[Kk@1EFh`Vi*pXf`Ei&p+qcEB0m1q`lBGm*H"RX0l,YJVi@p$TB*dME
+BFE$MB9YKam"1J*d)bcKj#f`$l,4SZLe3@f$r",B*PX'Vjm$@`qCJpi1G$,Xrl!'
+`8f#R`YU*f!0K(b#6@3`KbTbHQH4LC28`f-0Kjm$+M&C`&Hb$BBq!24*f,LbcD!I
+$2Kcf%0L,BCm,qd$Bjm%bEGF"1`[f+0LMBBq"PHQei&VBHE#cBDI$2Jbf%eE'N!!
+$cYFI"$X6pRf`liHp%IBQf2I![KG@CXD#[E!IK(dhl!f`Ym$H#RXEl)GJ2``VmhV
+"IYL2`Yi1qc(BMm0q![D6X-c`A3ql'2D2B'A',mM!RJ6lD0M(`#k$lBBp%CCacY0
+J6i#p"2B&X!YKA`Ml)YMjX!YJ(`Yl-Zabf"@`Tm#H#VX)pMMBPE#VB"m"qdKBT[c
+-5*hAi9![qSmk8A2kJ&kRYm%!X*IDJJ(8P4T63fT*IF&1F"GFTXjJ'Ed2jY$Rp!D
+B$SD"(q!%@!4fdH[d'[e(,i*lB!Zp!6D"(r30r@Ha!lbJ$fh[d%[J#(J%eS"2B"U
+B!hk"Vf!HH!LHJN2J'lh0S8r"26!4I!8l`6c`&i`#%m!!-!eX"UIJ%H!XZ!Q1JJe
+J&aJ1jS)0i!Mm!Pi#Gi&R`%(!'l!DlJ)f`hr!II!GV)HAJ12J2$`)22BB('QbDE!
+0X2["6SHG$0X-f`Bl&[BJf*Q`(E$d06dk1aVkRSAbKl!Cf#cX40Kkf"aX!f`EE#Y
+X#bbG3IFFHJ'EKMU6"bIP)CE(d!rd!$J"AS!IC1"h114[XBYkf2kh0H034qT*lDL
+KAq&3NpQc@Bj$B0YK'f!lB'I"(Laadf#R`cE$cSKUQ"`I`!)'(mcjhpPm,m"a@eI
+-%A4USqM9C90f@PqheD*'NTc6fh,kfXBEb0IZhfT4(2bqIcG#[$1QZXdN[cpJjrk
+*3JllNm@"I-fc#0Jc+ZMYQcNdFD5)LV5k*`@hTB6QUfYUAp0Gf'39U9bZc!-+2#&
+l80`+KHKB0QXC,GKLV@@%pLk3!0EL&mS"Gh*3-5`c3l'!BA*3,5a@SEVBI&"2BC`
+F9&)B+JGebLTr+*X`4!kUT@A6+*'@MD1Q@I4(1820iA`1&Jl2q4YB&![1Yf"45MM
+r$S[#3RQTSeQ%*6i8&G35I#K0q2'KXU$+i%1YSIli8*&34[#K6U%Ni80&3XR"KiU
+,BS-203lP"Kq+,+S02K4$mX@(!JMQik1@U$AirJirU&$ilXB2+JqqIm-2DJIY55e
+4TI"4#j3aI+K6U&Ri8(a3Zr#K+1NbN3b9(e3SI#MCe"`ILLfU%cl34&@H$09Xe#P
+mp#J+($l86K3iI035K3lIAq%(93hIRILK*[Mq#6qSBIKqK"rk#hJ")m!6I23KUKS
+qkSZkKXmUD[K3Ue$Fm+&JSE,K3kP(QF1(!XbGq-!Be$Ym+0f+T&R@6*A1l'2iJ@A
+LZ`XrU)[irK8r5JlVL'ZSI2MS@rS,(r8#(r#KX+(-i81C4+R$"di3L`q9('84(qS
+ppF5(HSrUL!rm3rA%Kj+-)SR[-rK"%FAh&F&HI1!%+LLq(q)(M!+L`@[UJ!qX"!I
+`J8dSTIM!!T4@I239+LSqkSLULJpe%884(`SJIRbSkkL$q*K-3&h%4bhT6AcJ")S
+X2[!Ep4(I"Z%,q-"XF-P5#C4EI1!iUL3qkS4DLBmq4`A'4jhS,hc8J[VJ!`p3-[(
+"PTMSm08F0MqYYK`VY!`E8dbl8r!!U%ZV3p-[@ii4[TZq2d&0fVBYdDP"i6mc(Ge
+HD(9UCARZ'!CZEV!E`Z#pk5f&623@@%&kbhdl(`[VQr)k@D&,9BY6m5b@+(kVc88
+CPmVM%eJGp4Y&,pR5jKAB%MCaE%[BqY,9'%"2&S9*h*)NLLeKIIh0,1A`fGPrNGT
+6h$5CQ8haCbVUJBU6)ZM`-9[#VY-He[kF'KVI#PRT63r3m86-+1aNNS-NX*rV&0Q
+C4F8*BkLS3mE$KA,lmX!mJdGQf%m#@QF,rYQT2bI@)[SB)FF'f2Nr%j!!V,+!4l4
+(SlT"aX9'P[0X!h2!CrL'[d9PeSYVV4Q0&p[!GUaYE1m`!lIIahKi%%El(1GlAK[
+%K6N&qPHBJAJN-Zr%Xkah)jcVV0ibdTe6G#ZqS-f"1[!NSf!Lc5$IPZhUVJ-aR%2
+[8JbJQrq9kBjq"f2BCdGKmpIPfr4dj4BTdH(d58+DZLh5R'0V1)*F)4T*AQX@pEJ
+AmfYhiN)(Sd@1'hH19bMaQRPepA9"b4j*9MTJR98`3XYeN!#[H105,9d[ATcG[[P
++!@bZl9IUf+&KjVH$-3iS@((SXHdDTP6F)eIQ+d8Ab$@Q#maXZI&%r53jZ-CCC#a
+FELeC89b8VS4TQiQl[4*Y!MY2V+b8U2DfXZIkS8lf[X#`EGGe8-ae(R%M'UdR8T`
+kUBjAaX'$H&3mk%jR@eV'FT!!3I2BRH4X#A"R"DlDdAh&1db$&1S#Z#l0V4phfmU
+S8bZ$Yj!![3PHhJjNFCf`HU36SMK3jS6fpXKEl+am[2@@N!"-)P*SN!!3pCI`VLp
+p[5[1Z(!pC8Nh2pJq-@d5"4pk["*4P%XSKU[m-J4T1Eh(`"l0''&Q6hV9lSe5S%V
+QIVL"K%ZqFrBceT%0FHGM)c#!Y"6ZLjV%A8&pf2m3A`(UFD[&FUVPk!%iQJ4Da14
+'8eB$Hk@#N@%DR$D%)`8'U5*-6['j5+ZLG-3K5c2@Q8("Yl``ESK#3$lRq"DED#(
+'e11FLC[L+K8M6AH93dUm"QDhB!ei@hkc3i+p#pE%V1"-e`PFfk`,`[lHJ*c[(0a
+r8R[c6DB64Rk6d,*m)h`qTj2"4%QN@hYJj+a*YHPX8h1YAY[8f0Q)hqkfG+H-9[P
+5cQpRGB[lkDd+(X9UN!"FBHGGhBS+TdReU9CbjI34A5Y4VFK(%Q&@D&-q%PSrF[d
+@&H`h-aXp%`pj29$+ab4IL!bClYY4qA+Pa$NMUU82B4V@Kj!!B65C*E-118`DQS(
+4`8NYkCSaicV2'8[Ih*(1R)F(B[V"9c20hDq4jqH)I"5[Er"09#6+jKF65S+b9Tl
+lriMZ*Sck%Cd"CHDLImpbE)$N`[bdQ80RN!$8$*!!mVS!$K1NCR,8AXhSU*'3!!L
+!FHlNVNaRV$PeKfrQf)l"YQA-d(G[0[e0JFj'DmpIhU%[dZS(lp2U0kcUbZSGV59
+eKClRhi,D"5Z9YJkEX!jkY'E"f[J9"ST+"XTQr&5QhM+(8LYh2kPfl0JaBX2RlZe
+44imH(EG[`240l,pKeki6GpaRUcAY[5[0hIpJEhr``B5%21ha4p3GI1L2p4,J`pE
+FJeNemIl'`[l%R@I-q$K@crfKV%(`Z4hr%eYYEqAq4c`4@rf*["e&rJeE,ILG6If
+eZ1(iAVCDblRUMmp3(@UekXqP&TIQY512AIAER9prr8I[UqEGImqZ[YR4Xd0jf$e
+-jXe1BY(Zd0ckYark'6BIqN,H+*3lQ!#3!,ArB9*Hhcc&PXl)AGUr%A,[EA32'0)
+iF`pidc4c$hM%0Y$U2@(e(M#VCI3HZmDXI!qieMTj6j`hZ-Ifd9Sqi1,ibAXZUGj
+M0LVrY)j-)cem+Zq#JleSamhF`jkd4mlF`eD"*D2hp)dAQ,Imj0q190R$X[8H2p$
+b$&rcmFY06(X!*MjDaeE491rh`8emL!+D[",0E&6CHH,pF(k!ZHKB!3d(9-FXTA(
+rUTemPQ1QX12M"9&!T42$$jcFEZ12k-3q,6VUa1,U1l-96rE6jV@jC,QG8kr0#`e
+PTqe2lf(fGd3le,RH*mcF`mlN+C1DCC`hfZ[8mjUUh)0@1[qm"LT4l-apa-`pD+8
+$@[1ZHb3H6AUNMK*[jM"UfVA%Sb'2e&[LkBZ4HNXmZl0(kmJqj`(0[(!2QdF(Y2$
+#2H$&D4`!-2Y$L[R`#Jjl$kaM"(mNLThE!l-*KA[Bf$%`ke#iK`dI!c--KA[Bicf
+LQGplMiIqH-hHcq&&f-B8R@4,FS&i9ULdjf`6XTIQh,mGVR#'-AMRaL+6'Jpb5&I
+hdlk!Fr9j!$b8SA+I$q!&X(k5JmKURml$%,"pAJmRILD3!%m#,Rd)0,(kZ!0YM6c
+)H*ifNr#i,11*0T0`G11$fdcbZqdMXGqHdFdNkIfe[(IA*kj(rlhhjVeh1m[Q[[%
+(p0rZHr`(GUJ(Ulfk%81#iD5j#GZ@kT[iGNrBZXfAr41k2ZLGDJFYNeF"&ADU$5N
+AIJ$fA2*[9Lj'eBEdIcGlV[VlmpjElpr8`hq3!2IZI@C$2GPrAfdA@jT2pC6c3"5
+ZE5Z,Yj&&eXZ`VEckjKdIh9D6`Y0+Gjiaidp6mG4T,Z`$mAqm3!ZQe0U4cFSEbl5
+`*hCdM6cV-T`lqU)HQDPCe0EHc1F[k[mXqHq3!2q$UcGRDNkm`%H#Z%L5VZFr1aN
++&fB['RqKM`bYD9E0FYPNr[-35[e[P@6-2I,I*[rM*AkFh$pGlVIj6"1rZ8rZDC!
+!rlCU-HUL*c[NRlQLTC2Efq@rSATE`r[(RYNM(D3Cf6+E#XLG-k4#TR,LRmPr9SS
+8FQQHce`+Vqq*hXkM"C!!bkE)rp468kck1$Z[cr&'c%a[d6!m!Lm&NcJb(GQ*+[G
+`aFLZ8lRRClY6!8Ijj8@Nd6hQHB$ZZ*fMFJmML[Np+jPApmS!ir,,kdUMHl+[lT@
+"2XM[[-PlA(,3#rRYR,Q(r62(cpc$ATj(cGc$Qe"'pX$)2HcP'GQcSUp%AC[![ir
+&4h!J2(!jmhrcpPpLPr4U[NSj1EkDp3hHPE2e[B$Y543[jK(dbX,@`EE#MS'YKmh
+"0X!f`EE"MS8G$kZ[1Hdj%8kDe`XB*5*XD1Jc(G1h#Jh+Y&f[M"GSGAVaZmAA0q!
+G@[+XS2`0AV*MC+"kiX$6M+5b$Yq'!mKhZ85ikD0)bFl)HrZAphYmkeqR[,l3TiB
+1)@82QBSSiB!ESr+R)B("!AP29fGe!m$b%#rEA1-A4`E61U2A2(DZYT`'pHB0rLi
+F-"06ScKJrXiVPpd%VfD[i8$$Ah&!f+1[M#ND(*!!9apd0[#*VQ[#j$EGd1#![0Z
+hXk%KirTQLiAANEB[V9YHYbaT$4&#$cM!FPLQVmfD9"YT(!mFh$idK2(M'a2@3+&
+i*Q,8b+i+MP$K#+##[16r)Dr2UrR3cRiBfbfL`SQ$(ri1hXCr,0qilfmllE,[)im
++Fm%9IUa8H@59XjrY,1"kT!39ZM$[RaNHrY@K"$G-m&#mLIE,!b-HXpNSI9J#-Eb
+d*Sfc$bHS2P`KQYM2bF5qG`K!2"`RHV"5[,R"e`B$-!PK2jkic3heLA!6qhFQaNh
+XJ`-H[iRpl[jHl!GZEh-+GRma)B`dr(TLhdF'!KB(r(!6qcFNaNhXhaP0l'I8qkG
+IDMSehSMkKm0$9RKpJ"mJMk@CpYARla&Ufpj@TJC+CI[Z@*TVEdN)b'0PZLNCS+i
+RjcXQ-pbCaiVQlXkkhT)U"%'pd[k`A9fdGR5MIq1Zb,I!X'dAVd!ibE3VVlX*[hT
+2j![cm45EbH2-FrR+iaUkPU3A,hkp1f`H$ekF&*!!ajD#r$b2,BrDqApjE%jNHaj
+RErE8S3HfaIekdp1PiGq[dZLIp!6QrLlDV6V-VHSb6(XdVLP'2ETKA`hLEpB1lHr
+4lVTiH5@2TrbhAhP1J-PM5hZ3!%Hh%43-qh4KScc@m*N6AS!mcMaEf9TGH8k-c@-
+)LEER-Icd%pUeGN`HkeAT$%j,'HB(C48"Y3e0FAT91M[0BlKMd4Y-jLbhd$pGY1%
+$rhK'i,r"'VEQXEjNpjkrTl[jI&8PM`[k%`,bi-a"NrbZVVc(Bq39-Ii2aLf9lE[
+M2XBpQ)FhJ(%[@lefqQNM5h2VTq[Kq@$Z!e@pMlQ2j,'0ZBrNXBfjhj2(9ZCHbk2
+'h$R+h-2EjrFN!$$hMIAi&A-I,1a1jPl,BaYchjM',jPl,BpKjLjjM*!!piLjRph
+hrllhIM"ZHFe5hahh-Hk"2$LH!-DpdR+@I9cI[1+D5FEGp$CMNM`f)m1pM'NNMfe
+-jjimYM+G@Klh)[R'2(k*j,8mKN&2mT!![Vq(QFqaVE0S99!N0R@)j(&HlmBcH5c
+Vh6LG4e2QM3Hc0fBbkGDr`pr!q4RLGF@GH%mHkmja4FQ$&j`bChSq4Sl5iVU12X[
+FN!!380HpR-&ak@&1[Mf2'R)1pjRVM`[1YYR26N[d,,e0'$-f8KrA1!p"94T3SDS
+RVd,G09"4(ld!HA6C3D!!-3)J!hN)eP2Ai)a1EP4$,d!pM0VR"FM$URe$H@aAqji
+5PQfe&fq9)ip,X4%Y[%-l![rNcpGV!`FpY8[Emm5q[GZdRGF46!l!Ne(14IccY6f
+20fN$cdFEe%`H6f8A$GCMY-p8C9RVRHjA*"B$4*[bi&f&!CqIZ,I[MFVL"HKASl*
+i!I,J4(!@r+HZ*JpTMq"rrI%BecRhd,-`NmQpmp5jmZ(K@$AU%Fa,RTKmk-VHH9U
+ELSlYXD&M1)`A))r&'rd0GE#rUbZXe&maXcKdUP`S2ANZp)Iqb(1K2r5V2f"@c(#
+K[IJ"!TpZHG-61+0ep8mSeacP9,q[UmPMq-@MShQ-2"6a`15h'DqKXjhTq*9Q[2B
+Hcp+-erRH@ACDUkZ2B-TECXAf(Jr)V0K'!2RPV0J!8[X#CX8+cfVZZk3KHB+jHbU
+BU4F!1Id+5$9kDSYb2##DMXGP8ml3m4"S-AkJ66PlMfGT8mjf,DB[%5r"aTh04cI
+ZE$lqVBdlYI(rS#DTB[jr'i2cEq`4Z*GjEFcM9maVX#!lQ9FY$qr%IS6Yc+X[%Er
+!RS8S$r2NjB&$%V+00#)&Qqla!c!#NiGABZr$2[A$5cr@[6G!H*[R2Y(#5cm16)a
+lk3GmS&RQLaVaahc4Q2Hd$r0&(VUh[bFi)&lI'L8`1*!!6BbE-r[jI*([E-kX-6&
+ZcXc-&hRIjXbLq5*Ih*aCLjSerEUYi6-ZhC,"jGIQVE*RQjf&%iY`IA#6Dfa*@h2
+qP3iqQ-1E-4BhhY")feC9Dm`V6*CIhU%[dZS(lp2U0kcUbZSGV59eKClRhi,D"5Z
+9YQirRUVpqCS&De@IhT@0%Y+hGQIdeN(aE%LYh2fN'KiHMYcb(cjhEmqBhpR8AiX
+EMUr@G#6RUMmq3h@SeDSrPeTFQYH12(E9EhGqrI8I[DqDGrmpZrTQ4mm1jL&l8r`
+[,+(RC,!L8bD$cHGp1C0UdpQQjPUpYUQaXa'rh@hTcYT%PIVVQrZR#N`+)L53!""
+UpeIZi3heVC9lFRc5I1'Lr$h6m([#j$dZ1EPR1RiAcY`c!lq,+[FdM0pc5I8HAS%
+bBDU1KAYQiRI*k$ep"%(ZkF"[if3qm6fcm0X`Fmr"q'fDZHF3r1D5!qlCTe)iXT0
+V3Q@SSAeK21C`k0XTb-9,iMH'Y1cV2T!!"&#5ih'Fma4Y3*ZEZZAB$GNAq"HYLM&
+(ITZLal'dCr[2,'NIcYT8%8jDep5qTVZ`b5VQI(IMq[aV,d(`TVe8q16SGE[Q0,C
+qKEr9pjGNPQb0I1(45k**"!r6qdXHXRA9f,XhT4mI0I95BBRG`(l0,,P9eeimM#%
+a2pK,K5XiAAfTF)V6I[1A#RX4Q,XIk"9V3mbGBeqXqmdMp3N!c0d[p9,K[Afr6m[
+`8Z([I[XTX08"&DTkmLV8c-'+qZJ&b+2b8Z&+(Y8AfDDUQ&%0[3$e-'UI&b!2UrB
+0jE&Gl61[Fedb-2T5iFbF9$ImmP,Kc,c2(9)r6eflp+Af!bRpm01i8PiU21jRL2q
+ce,8,YkIQID'qNSGjRHYJ28ElV2*5i8SHeCF+ThP8ALUmTaj'CI%#p+Y4@E`!HA#
++,aAH8eH64r*5i6ejl#2D[&6B-lH*-rc0Vb0Iq2@lG[,I3l@*dr4[Y)Pc6E"*Vdc
+8HpFfFDBilB2Ia2PljZj$fX3CVG[h"c"hRpBQcT'qhkGPf-4jmj8rJUVdLif$H4A
+UM6XVkU-A))rl0h'QUTK4$Ed!p6"URaFJ$k[f$H@aAHflCa2RXEHIfX4jl+dR0h%
+1eQ1dcqlIa*RQFImQcM32Sl*i!IV9U#aHJ$`iZcGaTR8eHIak%fHDalk9cLE1aD2
+!eVJVm[91q,rfRXJAjJm2m0r$T#pZH'$Ef&kRN!$qRKI@Q4lGX+m'm6GVKrEhD(G
+G[,b5KcGU%qI2phR&QcJV10flLE1%dhlc6CaH"1EZ"jV5hXEF`p[Rpb3!-(I[d5E
+1AdaAlqhlI9U'6CaVR)HJ+JfS80@69k(Z'ULSMek!2#UE1#Yjp'iF,+PL4MAd!Y6
+$U(eHJ$cF*Xj0H@aAqmcfZ3rN4MGaKRGS4q#A6CcK`%&2ADAYU9faGjZfmcU#L@c
+LE(-3rhaYcf@2D!22iljiqpaJ28ElV,+*Xj*(lbE18Kk96CalkQ&8&Lp![aU9a3Z
+3!!HRZ)Pc6ee0(XNQcMejl#2DE1,-`@E9((VNN@DY5Q[iGiRpB)Gh[)A!JFiqdc&
+pUj!!f!B)B3SrGF5"TaR*E4KJF!!q8+p5$I%Bb[*qMibbXp8dLUBI*+N"3fKMMMm
+mJ3-L9Mc$m#dc33d*3Zjcb"!(cJjppfE6ha6SqG"`LSCIK-`0'Pc8N!$*Yq[TKY@
+@dk$H[-(IK31L&qEH`J(cGekjl$S0ZIjHfbVSE8l"lLmQK*%'J`-0Im8"BBpH-K#
+`10")[I"-,&YF%bDh5BEKTF#"*Z*!CmEec4DXh9b[,keEAVFXD3d4$"pSIZrBmZE
+fVIfkMi2cjRCr(!kB[8$a#GAdq*S(jkbq-3L0XeML36KKp)UA0HGR5hd`KdRRaBd
+h00+f9EI@Qpd"bbr[d"GTpB2hDI8E9R9PpBl@NVT#cr0[3Hf#P8TEYeqTMcjDXf#
+YkY1lXY*jjQ6deN(aE%LYh2fN'KiHMYcb(cjhEmqBhpR8AiXEMUr@G#6RUMmq3h@
+SeDSrPeTFQYH12(E9EhGqrI8I[DqDGrmpZrTQ4mm1jT%l#%UceV&#bl#YVHGfGf`
+m(J"'Y$SdrE,P'1'lkCZh5IJ3Z)5(i`MlRjLhbTjYkTd&@emBP+lf[-+LX5Z)LqE
+-@[EKF8MI3BJXGPKe)!'K0Z%RFG4hTICX5TX9eH8@+"RlkqKQH@@`IYkA-kNfR@e
+UVY9VQaSl'r(EhCEZV%eLD31,!`I#@UbI"jX9hmQ`9ZeLadkpq&i-blZR10I!STY
+`2JAE+,i[`cD*lapKQb9PmQN4hd(iD48IZ$9'I+IMCkcid%AEa(FjIKJY`(FMIXD
+,lbra-d&mhm$242(p$eXpmQ9Birh%abkYbH*EM*rpaEF@2l*hbrKHJ*mTiRXpIUD
++li25,rMZ`-m$a!I+6iYp@IE'G2(0a-m-m4f((j8+XphiSIliRSiIlX(h-[adL1q
+Gq*NP[NrLjf$ar5eq$K(I[q"(SDZ126aEI04&@8NGHrT"iMX&2kTBelRi18amj(f
+iq-KlM[KJ,3m4heIa3qrJqajqMSappHcEZH)Mjk2%p`MmQ2I5Lqp8r"`M2NLYUU[
+eGq,RSH*lKq!2[SrLjf(Lqa*qp2%6p82iHAMXba&(k#Pmp!2jiL2QNH*EJ4rP4$R
+f0bYfm&f-RrRLZ`Sr1S@EqaCq9"r22B)IRBE0X3B,aAFAIR5k,2F5INk-I3h%*Yh
+mf-!qH,6ib"qF`8IrkAam!l9SR8CZf)kITH)$EaiM[[IM*e,*JMRI`ip+iJe(mI0
+BmIfcB$A`#`BX&amB32hadEINMSqkdiriq&mT2LDD`59mi0pTiRX6IX"NI1$Iim3
+(rMeHI0r&ca0LAa-arSRL!a0ALimqee9!6Db&,ZKTiUb"k[Y01r#M-`00c&[hT6A
+GMam9-TTqJKrGVp9%(0,0$FhN%MVIdda-T0ra8@r9rCZC[qi,Dpk#(jhLE[ibIR5
+QX*NUj,RLSmEJ*$lkAVAKjTIa!fl,D5%Id)Qe&Z+GcNkdX1G9`'PK(AA'Sq8fr$a
+,I'r%ciAL%l8Jf#`qm)Eki2X(r1MSC#Xjfjq+MlbI)ck`'%c$"bim9hc8QRcaJ6'
+-LZ"l!hiZ%4pjdqri[S#I&iV[QrMK6R`r`!qm6miBmV&,a3H[H)Ri`%Vk&api!DI
+!4qeH,MjkqM,aL4)F%2rab8VQi%[Lqdrm[#VfM58hJrIKSlId"GeML9YALSrH!m2
+aF4HpM1mQr1M1[l'2iHGUmAdE2kq0I@hNY+m6(a`-l-8(6k"(m)'$p#NqqSdDiRX
+,IYiX[NrJ"cqqVq(RVH,l-AlH&[['N8rUAX"aj%[`(AcJ1j`,(aJ%TmC(Rla,I2#
+5DmAh'IaF*lkramqlBppiBX0la!IfAbmqqZB'mC%VZH!$+pQ#M3pFJ'[JSarJerK
+Z`3ppK1qcq&'&IMah9(j!I2q&(hL"R!RNfpb*$djfUrMJBlH*$q`(cr&4l`q,MaU
+!4IMS*I!"(c(`3AaJrqhLJh0m,2C0*1IqZ2LS2If)$qi+GmB(Ce-9EL,j#AU&TqR
+8$AA`N62#[5DTFK"@ThhVKMl9U9+,`)UEYb'bX'1MEZJcd$UQ)5,,519RK31LcND
+NXVlScY1!+I1!Fif5Te&M6H5TB-32!JVN'%P@,[)dF*lf&bQ*4ARDb1MNb"+D24p
+lN!!c"kR81$8e*$E1LL0[*kijr6`NJp!l$bIk@B8Yd-McVSSMAd&-Gp0P'6,FaA(
+N3kPN@I8YZ)#DcE`imR(NA&D,LeMkQ$LbMFcI+R14eR"%(2PbmM'Vd`9cb'`dcjZ
+)P&De#pT`Cje%[SMBVaUHA)&+-#Q1R%,%9d92$PamDKcjXFIK8he2L)!S0j0kiXK
+A-hY9qq5!lh9aj11*bkVp5AI!A!k))dmKNUX5+!IFeilkm-2`U5iSI8-AMSdM2d)
+QU#UKT!J(rh3Fq5Pb6G8-TB%+(A8#kkN+SP3!IDBeM[`XApZ[HU)dZY3cI#+1[*'
+-5Y9&U3$F3l[M[Fa6Y8Dj$f9$UcDCl%b94kN!YIQ,1,+&[&ae5"(hK(Q(Pm54(b4
+DU#STR3[hqfJFq@eU%DT4#P6!bZI%N5(CVLU@)Rm*&QDNRY1T'DPq+H+6-,9--Bl
+m$k+3!+UCJISqY+LM[KK(6U-f)0UQS,%`rEQXl!(P-#"1+`l@$A@MBUH#McHmVaa
+'@h*Fj'R)XC(-q1KbD&09XC%Gck"r-cpQjmUG)(JbSe"AaGa[%4088D@ImjKl$2A
+,r#JQ#SAHH6Q9$&9E"AcKm)UjAk6HSGUV("LP)YkjC1kUa%SAJZ@+%*1S[kSZ+l8
+"V44clk"US5UYG'%"FbmR,eI09L),Q,Z"D1''$lV4paCclbBI9MeAlU6E&9@H6FE
+YCNiDH)GLlQdrJ%qehN#p$-A@BZiel%3hUaa5Ke$-[C!!U+3kX23RADLBqbbU1DS
++UmDR(E@3!2UADX452Y4CaGc[8)e3a9L+40D+Z9G6ae,p@1j%+G@1ZTjXAp9NLD6
+ZLP&I)ZDUYL`#XU#+aGb!@+K+Xpb*MU6Gm89LQZV1%NQP,AD!'kT#5bRJ'SUjee%
+cG41r#c'qC6(h@e3r9+'@Y1"!LVP[TYkXHVANLF+LQ(XVle2e@Q44kAD,ZGqQrZ)
+HmV3DM-pLlVQr4B!Ufi&@KKjR-AFLX8FdlEUKpDMjA(JFjLV$&$BV1Z2CB#5j9B+
+j,[*dm-#CB,0"[@#ZMHai'KbUJleL-6HCp`V*4V9[$U2bUHUk($3iaGcEb!G8DjI
+XBD*kjq1)mhBD+@JKBLRQ[TVBVMUmS-S24l(`Fe6"9*8A3%$c8B3iL(UQfj496p9
+G-IG5pTfED-p`2N!apaV@e'fcbR)L3r2m#T959I0&SKAYbQ,Z!mJ(h1DB,"8b4CA
+h-8G9qJ9cZ8-aG`)Vl9jmF$Akdf,ZhH6J1J8J"ie9-IFLGSV1"%LP[cq+Z9hdZ3e
+k1I*DlDKR%BRFpV)QpSPLlN[*HA9k3'4qf,9LlVZT-HSXJ@!((%)lkJjU"6TC)*(
+JQQ,8&@3NG[3qF+"`@X`pKbLV8`Gb*pUHGXG&e2"d"N'k!j9GUhB"F83R%U3fp*G
+LlKH)[cUI)!+kU2X@Fap'(UA6#Y+Se&-aG`he5TeG%)5%b5RQ(NJ&@#FC4%BAIQ)
+ap`kb#jeV%2&FXV'Bqh'bHCeb#,42!&8XjKj($9-k40LX-*!!ZCa1X*LVfSf`@G'
+&cN)0``("h(bNB%#'#UN`B)1j6Zma6!%HC$%hL64X6r[QViNE1QNK&8#(9m`G5dD
+MFaH#KI5ahRN9'CP1B3KBdDf+Z4G3fG'C$+NbM-SL(MaA*c3%LHKl4BLh8hqfUjZ
+$TH5#LVPAF+,,V9F1141KQ$Z$f1&f04a&Y9Ac[*JFh'f$Z"MpBM(hJCb,F([aMb(
+5+kTmJ`MTaPH2T(k[Q$Z2R-2Z@!rRJB90,X@4AbFlGlXmc9b@BZlhU35jr5pcUD)
+VjVk"16[Gm%MLV(E8Fri%RpXC-CIpTCKlqqrJFj[Rcb"q+ZDqLE--6VNmQP0%9Ue
+$9h+EUqB5qa5MEL(,GTVQ1Z4T-II2UA$S")Td&(a0Zq09R'e`Z`VQ8Q(3UKh)6YI
+T&+N0(&Sap`M@aHQYjf-+a@,Z&839YrAM%ZVcLVR2T%VP"T'2MTLreSEZF*Y,AS"
+D@-cp(KQRcVM)%)RJY-AFk84MRAJ*Y+p"(l5BZiV+SmbrL!BXfGj+hR#5B+kUSS+
+XSSpFKXKF56$A4Di!FR93q6K--0G'GK`&VRH3!$0Bc(9hVJ*ZA!pqdqbA`lja$IK
+8)2&98(Bb(bYl!Hl-4ki%ehS*TM,#Kh,Y33Kf$K,TT)l36G"(9HMmRFY4e3iLh+f
+S!$f@9m3%(@C4khZl4$VH[K,h2BL+a'b*G1aL*AMl#Q,XZb3bf8Kb#(%YkX+'$*8
+'Yh6Y%#SQ8HFfIZ3T8L%E@8Gp-%,*KKHTNHK8NHJhi0SCFH6GC"SkBb3XKQP!cI0
+jj0BkF56iLCi@jGR`3r*[R6m5VN)24(NfANTY6DH4T'rS!FhcR94eG$C*q!#+NHC
+j$R&0*j@%@+1%D*jIilbTcLh4CrPkISJX3DHB"&$JcjVR(Db6cM3*#U%M4(NfcQD
+11Z%NiJmiShdcLlfQmdk#3LLZQZGrF`T9TjqNRR5Gj[N$mJkCK4)F%0ai"R99LfZ
+UkBY+Fi$5PJ)rRAlM)PHKCpDc8be#f-L1Sp!FCP%lYlMQlP`1,*p&hL$BBE$3c3k
+BHU)q4M`UDj!!CHYXPJ`Mb&58DKIC1eJeRG3+0+TSLZ$CUmQBG@iVd&i!$l))rNV
+QUP0F8NY33ERAPmJVGDC,+N"r4Y`V@dr-eJN[b36H%E'Bl(ELTmjlbCfI(q9HAk@
+qU00I3LVK34(hb[B5jh8@61k%L8AF+pY$K0(*-%'9JUlrBfT'lQdB,`1b+[I+pT(
+MkY5Bb%p`S1M1V%HQVM0N%JQ1+5HkN3a6*mS#l5VJKI,Fl!l1DHTmQ@JNU&RD(Cq
+QKUc6CN)$d6XLl-KHH!3qR6d6Q3Z'U28mL8LNNfK5!HDe)RDH[BbcEMUA*RI#Sj3
+aANY8e5NeZC-j+Q@-Rk6@TM0V!ReS&a&Mc*Bj3k)6E)&@"bh*-XBl1DIQhVRa'R)
+0CB`r)YlSG*Z!(6J3G8HfMTaACpd#E3Q`64PMGJGhCqMNQr3RHNfNGf4A%Tpd$Nj
+i,XLU9EZC'VK1a3RSdd@4hT(p009+RC%6'%-Y8EAK)q6Y1M%Rc33UG*H$9fB1&P#
+TXT'*-YV&HYV)K(YeNA[Cb!4cMb&A'3GH#&p20*q6f,QAbCdDqAm!N!-K)3jdBfa
+0B@03FQpUC@0dF`#3&Y%"J!*L!hF!N!-"!!)JN`#3"aB!N!1'!!!#!2q3"!-!V6C
+3$,#%lk8!N!8-8kd!N!8#6elrerrl!*!'F!rhL`!!:
diff --git a/mac/tclMacResource.c b/mac/tclMacResource.c
index 5a4244e..97c480e 100644
--- a/mac/tclMacResource.c
+++ b/mac/tclMacResource.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacResource.c 1.40 98/01/21 22:29:00
+ * RCS: @(#) $Id: tclMacResource.c,v 1.1.2.2 1998/09/24 23:59:16 stanton Exp $
*/
#include <Errors.h>
@@ -1245,7 +1245,7 @@ Tcl_MacEvalResource(
Handle sourceText;
Str255 rezName;
char msg[200];
- int result;
+ int result, iOpenedResFile = false;
short saveRef, fileRef = -1;
char idStr[64];
FSSpec fileSpec;
@@ -1261,7 +1261,8 @@ Tcl_MacEvalResource(
if (nativeName == NULL) {
return TCL_ERROR;
}
- err = FSpLocationFromPath(strlen(nativeName), nativeName, &fileSpec);
+ err = FSpLocationFromPath(strlen(nativeName), nativeName,
+ &fileSpec);
Tcl_DStringFree(&buffer);
if (err != noErr) {
Tcl_AppendResult(interp, "Error finding the file: \"",
@@ -1277,6 +1278,7 @@ Tcl_MacEvalResource(
}
UseResFile(fileRef);
+ iOpenedResFile = true;
} else {
/*
* The default behavior will search through all open resource files.
@@ -1317,7 +1319,8 @@ Tcl_MacEvalResource(
if (result == TCL_RETURN) {
result = TCL_OK;
} else if (result == TCL_ERROR) {
- sprintf(msg, "\n (rsrc \"%.150s\" line %d)", resourceName,
+ sprintf(msg, "\n (rsrc \"%.150s\" line %d)",
+ resourceName,
interp->errorLine);
Tcl_AddErrorInfo(interp, msg);
}
@@ -1334,12 +1337,27 @@ Tcl_MacEvalResource(
".", NULL);
rezEvalCleanUp:
+
+ /*
+ * TRICKY POINT: The code that you are sourcing here could load a
+ * shared library. This will go AHEAD of the resource we stored away
+ * in saveRef on the resource path.
+ * If you restore the saveRef in this case, you will never be able
+ * to get to the resources in the shared library, since you are now
+ * pointing too far down on the resource list.
+ * So, we only reset the current resource file if WE opened a resource
+ * explicitly, and then only if the CurResFile is still the
+ * one we opened...
+ */
+
+ if (iOpenedResFile && (CurResFile() == fileRef)) {
+ UseResFile(saveRef);
+ }
+
if (fileRef != -1) {
CloseResFile(fileRef);
}
- UseResFile(saveRef);
-
return result;
}
diff --git a/mac/tclMacResource.r b/mac/tclMacResource.r
index 4c17581..abdbbb2 100644
--- a/mac/tclMacResource.r
+++ b/mac/tclMacResource.r
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacResource.r 1.20 98/01/21 22:23:43
+ * RCS: @(#) $Id: tclMacResource.r,v 1.1.2.2 1998/09/24 23:59:17 stanton Exp $
*/
#include <Types.r>
diff --git a/mac/tclMacShLib.exp b/mac/tclMacShLib.exp
index 8936114..aea4acf 100644
--- a/mac/tclMacShLib.exp
+++ b/mac/tclMacShLib.exp
@@ -197,6 +197,7 @@ SetIsStationery
SetNameLocked
Share
StrToAddr
+TclAccess
TclAllocateFreeObjects
TclChdir
TclCleanupByteCode
@@ -303,7 +304,7 @@ TclIsProc
TclLoadFile
TclLooksLikeInt
TclLookupVar
-TclMacAccess
+TclpAccess
TclMacCreateEnv
TclMacExitHandler
TclMacFOpenHack
@@ -313,7 +314,7 @@ TclMacOSErrorToPosixError
TclMacReadlink
TclMacRemoveTimer
TclMacStartTimer
-TclMacStat
+TclpStat
TclMacTimerExpired
TclMatchFiles
TclNeedSpace
@@ -341,6 +342,7 @@ TclSetEnv
TclSetIndexedScalar
TclSetupEnv
TclSockGetPort
+TclStat
TclTeardownNamespace
TclTestChannelCmd
TclTestChannelEventCmd
diff --git a/mac/tclMacSock.c b/mac/tclMacSock.c
index e192560..156c92a 100644
--- a/mac/tclMacSock.c
+++ b/mac/tclMacSock.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacSock.c 1.63 98/02/19 15:32:22
+ * RCS: @(#) $Id: tclMacSock.c,v 1.1.2.2 1998/09/24 23:59:18 stanton Exp $
*/
#include "tclInt.h"
diff --git a/mac/tclMacTest.c b/mac/tclMacTest.c
index 2452ca1..54ea96d 100644
--- a/mac/tclMacTest.c
+++ b/mac/tclMacTest.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacTest.c 1.9 97/09/09 16:36:37
+ * RCS: @(#) $Id: tclMacTest.c,v 1.1.2.1 1998/09/24 23:59:18 stanton Exp $
*/
#define TCL_TEST
diff --git a/mac/tclMacTime.c b/mac/tclMacTime.c
index e5b6a1f..0ea5a2b 100644
--- a/mac/tclMacTime.c
+++ b/mac/tclMacTime.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacTime.c 1.19 97/06/27 13:07:10
+ * RCS: @(#) $Id: tclMacTime.c,v 1.1.2.1 1998/09/24 23:59:18 stanton Exp $
*/
#include "tclInt.h"
diff --git a/mac/tclMacUnix.c b/mac/tclMacUnix.c
index 20d2215..840d6bf 100644
--- a/mac/tclMacUnix.c
+++ b/mac/tclMacUnix.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacUnix.c 1.61 98/01/02 17:17:43
+ * RCS: @(#) $Id: tclMacUnix.c,v 1.1.2.2 1998/09/24 23:59:18 stanton Exp $
*/
#include <Files.h>
diff --git a/mac/tclMacUtil.c b/mac/tclMacUtil.c
index e638c6d..c8f004d 100644
--- a/mac/tclMacUtil.c
+++ b/mac/tclMacUtil.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMacUtil.c 1.54 97/09/02 16:09:02
+ * RCS: @(#) $Id: tclMacUtil.c,v 1.1.2.2 1998/09/24 23:59:19 stanton Exp $
*/
#include "tcl.h"
diff --git a/tests/README b/tests/README
index 7dce2a2..3bfb3c9 100644
--- a/tests/README
+++ b/tests/README
@@ -1,7 +1,7 @@
Tcl Test Suite
--------------
-SCCS: @(#) README 1.6 96/04/17 10:51:11
+RCS: @(#) $Id: README,v 1.1.2.1 1998/09/24 23:59:19 stanton Exp $
This directory contains a set of validation tests for the Tcl
commands. Each of the files whose name ends in ".test" is
diff --git a/tests/append.test b/tests/append.test
index cac10ba..d25e141 100644
--- a/tests/append.test
+++ b/tests/append.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) append.test 1.19 97/12/24 10:40:56
+# RCS: @(#) $Id: append.test,v 1.1.2.2 1998/09/24 23:59:19 stanton Exp $
if {[info procs test] != "test"} {source defs}
diff --git a/tests/assocd.test b/tests/assocd.test
index 6d8fac5..839c11f 100644
--- a/tests/assocd.test
+++ b/tests/assocd.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# "@(#) assocd.test 1.6 97/12/08 15:04:52"
+# RCS: @(#) $Id: assocd.test,v 1.1.2.2 1998/09/24 23:59:19 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/async.test b/tests/async.test
index 1933111..1b3ef90 100644
--- a/tests/async.test
+++ b/tests/async.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) async.test 1.6 97/12/08 15:02:15
+# RCS: @(#) $Id: async.test,v 1.1.2.2 1998/09/24 23:59:19 stanton Exp $
if {[info commands testasync] == {}} {
puts "This application hasn't been compiled with the \"testasync\""
diff --git a/tests/autoMkindex.test b/tests/autoMkindex.test
new file mode 100644
index 0000000..11db5f0
--- /dev/null
+++ b/tests/autoMkindex.test
@@ -0,0 +1,55 @@
+# Commands covered: auto_mkindex auto_import
+#
+# This file contains tests related to autoloading and generating
+# the autoloading index.
+#
+# Copyright (c) 1998 Lucent Technologies, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: autoMkindex.test,v 1.1.2.1 1998/09/24 23:59:19 stanton Exp $
+
+if {[string compare test [info procs test]] == 1} then {source defs}
+
+test autoMkindex-1.1 {remove any existing tclIndex file} {
+ file delete tclIndex
+ file exists tclIndex
+} {0}
+
+test autoMkindex-1.2 {build tclIndex based on a test file} {
+ auto_mkindex . autoMkindex.tcl
+ file exists tclIndex
+} {1}
+
+set element "{source [file join . autoMkindex.tcl]}"
+
+test autoMkindex-1.3 {examine tclIndex} {
+ namespace eval tcl_autoMkindex_tmp {
+ set dir "."
+ variable auto_index
+ source tclIndex
+ set result ""
+ foreach elem [lsort [array names auto_index]] {
+ lappend result [list $elem $auto_index($elem)]
+ }
+ set result
+ }
+} "{::buried::explicit $element} {::buried::inside $element} {::buried::pub_one $element} {::buried::pub_two $element} {::buried::relative $element} {::buried::under::neath $element} {::buried::within $element} {indented $element} {normal $element} {top $element}"
+
+namespace delete tcl_autoMkindex_tmp
+
+test autoMkindex-2.1 {commands on the autoload path can be imported} {
+ set interp [interp create]
+ set final [$interp eval {
+ namespace eval blt {}
+ set auto_path [linsert $auto_path 0 .]
+ set info [list [catch {namespace import buried::*} result] $result]
+ foreach name [lsort [info commands pub_*]] {
+ lappend info $name [namespace origin $name]
+ }
+ set info
+ }]
+ interp delete $interp
+ set final
+} "0 {} pub_one ::buried::pub_one pub_two ::buried::pub_two"
diff --git a/tests/basic.test b/tests/basic.test
index b4b8c55..a339768 100644
--- a/tests/basic.test
+++ b/tests/basic.test
@@ -14,16 +14,11 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) basic.test 1.23 97/12/09 16:34:32
+# RCS: @(#) $Id: basic.test,v 1.1.2.2 1998/09/24 23:59:20 stanton Exp $
#
if {[string compare test [info procs test]] == 1} then {source defs}
-if {[info commands testcreatecommand] == ""} {
- puts "This application hasn't been compiled with the testcreatecommand"
- puts "command. Skipping all of these tests."
-}
-
catch {namespace delete test_ns_basic}
catch {interp delete test_interp}
catch {rename p ""}
@@ -199,6 +194,10 @@ test basic-13.2 {Tcl_ExposeCommand, invalidate cached refs to cmd now being expo
[p]
} {42 {} {} Hello {} {} 42}
+if {[info commands testcreatecommand] == ""} {
+ puts "This application hasn't been compiled with the testcreatecommand"
+ puts "command. Skipping affected tests."
+} else {
test basic-14.1 {Tcl_CreateCommand, new cmd goes into a namespace specified in its name, if any} {
catch {eval namespace delete [namespace children :: test_ns_*]}
list [testcreatecommand create] \
@@ -212,6 +211,7 @@ test basic-14.2 {Tcl_CreateCommand, namespace code ignore single ":"s in middle
[value:at:] \
[testcreatecommand delete2]
} {{} {CreatedCommandProc2 in ::} {}}
+}
test basic-15.1 {Tcl_CreateObjCommand, new cmd goes into a namespace specified in its name, if any} {
catch {eval namespace delete [namespace children :: test_ns_*]}
@@ -296,6 +296,10 @@ test basic-18.6 {TclRenameCommand, check for command shadowing by newly renamed
test basic-19.1 {Tcl_SetCommandInfo} {
} {}
+if {[info commands testcmdtoken] == {}} {
+ puts "This application hasn't been compiled with the \"testcmdtoken\""
+ puts "command, so I can't test Tcl_GetCommandInfo."
+} else {
test basic-20.1 {Tcl_GetCommandInfo, names for commands created inside namespaces} {
catch {eval namespace delete [namespace children :: test_ns_*]}
catch {rename p ""}
@@ -316,6 +320,7 @@ test basic-20.2 {Tcl_GetCommandInfo, names for commands created outside namespac
[rename test_ns_basic::test_ns_basic2::p q] \
[testcmdtoken name $x]
} {{p ::test_ns_basic::test_ns_basic2::p} {} {q ::q}}
+}
test basic-21.1 {Tcl_GetCommandName} {
} {}
@@ -476,6 +481,10 @@ test basic-37.1 {Tcl_ExprString: see expr.test} {
test basic-38.1 {Tcl_ExprObj} {
} {}
+if {[info commands testcmdtrace] == {}} {
+ puts "This application hasn't been compiled with the \"testcmdtrace\""
+ puts "command, so I can't test Tcl_CreateTrace."
+} else {
test basic-39.1 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {
testcmdtrace tracetest {set stuff [expr 14 + 16]}
} {{expr 14 + 16} {expr 14 + 16} {set stuff [expr 14 + 16]} {set stuff 30}}
@@ -485,6 +494,7 @@ test basic-39.2 {Tcl_CreateTrace, correct command and argc/argv arguments of tra
test basic-39.3 {Tcl_CreateTrace, correct command and argc/argv arguments of trace proc} {
testcmdtrace deletetest {set stuff [info tclversion]}
} 8.1
+}
test basic-40.1 {Tcl_DeleteTrace} {
} {}
diff --git a/tests/binary.test b/tests/binary.test
index 4f49acd..f978147 100644
--- a/tests/binary.test
+++ b/tests/binary.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) binary.test 1.15 98/01/07 16:22:49
+# RCS: @(#) $Id: binary.test,v 1.1.2.2 1998/09/24 23:59:20 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/case.test b/tests/case.test
index bd7d870..4eb3624 100644
--- a/tests/case.test
+++ b/tests/case.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) case.test 1.14 97/12/08 15:02:20
+# RCS: @(#) $Id: case.test,v 1.1.2.2 1998/09/24 23:59:20 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/clock.test b/tests/clock.test
index 6af00ec..0a5e1ca 100644
--- a/tests/clock.test
+++ b/tests/clock.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) clock.test 1.22 98/02/02 22:03:36
+# RCS: @(#) $Id: clock.test,v 1.1.2.2 1998/09/24 23:59:20 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/cmdAH.test b/tests/cmdAH.test
index 4c23dae..2e473fe 100644
--- a/tests/cmdAH.test
+++ b/tests/cmdAH.test
@@ -9,12 +9,12 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) cmdAH.test 1.41 98/02/02 21:59:54
+# RCS: @(#) $Id: cmdAH.test,v 1.1.2.2 1998/09/24 23:59:20 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
global env
-set platform [testgetplatform]
+catch {set platform [testgetplatform]}
test cmdAH-1.1 {Tcl_CdObjCmd} {
list [catch {cd foo bar} msg] $msg
@@ -107,6 +107,10 @@ test cmdAH-4.1 {Tcl_FileObjCmd - file attrs} {
# dirname
+if {[info commands testsetplatform] == {}} {
+ puts "This application hasn't been compiled with the \"testsetplatform\""
+ puts "command, so I can't test Tcl_FileObjCmd etc."
+} else {
test cmdAH-5.1 {Tcl_FileObjCmd: dirname} {
testsetplatform unix
list [catch {file dirname a b} msg] $msg
@@ -895,11 +899,17 @@ test cmdAH-12.1 {Tcl_FileObjCmd} {
} {1 {user "_bad_user" doesn't exist}}
testsetplatform $platform
-makeFile abcde gorp.file
-makeDirectory dir.file
+}
# readable
+if {[info commands testchmod] == {}} {
+ puts "This application hasn't been compiled with the \"testchmod\""
+ puts "command, so I can't test Tcl_FileObjCmd etc."
+} else {
+makeFile abcde gorp.file
+makeDirectory dir.file
+
test cmdAH-13.1 {Tcl_FileObjCmd: readable} {
list [catch {file readable a b} msg] $msg
} {1 {wrong # args: should be "file readable name"}}
@@ -971,6 +981,8 @@ test cmdAH-15.6 {Tcl_FileObjCmd: executable} {
file delete -force dir.file
file delete gorp.file
file delete link.file
+}
+
# exists
test cmdAH-16.1 {Tcl_FileObjCmd: exists} {
@@ -993,6 +1005,10 @@ test cmdAH-16.5 {Tcl_FileObjCmd: exists} {
} 1
# nativename
+if {[info commands testsetplatform] == {}} {
+ puts "This application hasn't been compiled with the \"testsetplatform\""
+ puts "command, so I can't test Tcl_FileObjCmd etc."
+} else {
test cmdAH-16.6 {Tcl_FileObjCmd: nativename} {
testsetplatform unix
list [catch {file nativename a/b} msg] $msg [testsetplatform $platform]
@@ -1005,6 +1021,7 @@ test cmdAH-16.8 {Tcl_FileObjCmd: nativename} {
testsetplatform mac
list [catch {file nativename a/b} msg] $msg [testsetplatform $platform]
} {0 :a:b {}}
+}
test cmdAH-16.9 {Tcl_FileObjCmd: ~ : exists} {
file exists ~nOsUcHuSeR
@@ -1036,7 +1053,7 @@ if {$tcl_platform(platform) == "unix"} {
# Stat related commands
-testsetplatform $platform
+catch {testsetplatform $platform}
file delete gorp.file
makeFile "Test string" gorp.file
catch {exec chmod 765 gorp.file}
@@ -1206,7 +1223,7 @@ test cmdAH-24.3 {Tcl_FileObjCmd: size} {
# stat
-testsetplatform $platform
+catch {testsetplatform $platform}
makeFile "Test string" gorp.file
catch {exec chmod 765 gorp.file}
@@ -1344,7 +1361,7 @@ test cmdAH-27.8 {error conditions} {
list [catch {file dirname ~woohgy} msg] $msg
} {1 {user "woohgy" doesn't exist}}
-testsetplatform $platform
+catch {testsetplatform $platform}
catch {unset platform}
catch {exec chmod 777 dir.file}
diff --git a/tests/cmdIL.test b/tests/cmdIL.test
index 572c77e..58b83d4 100644
--- a/tests/cmdIL.test
+++ b/tests/cmdIL.test
@@ -7,7 +7,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) cmdIL.test 1.22 98/01/13 18:24:45
+# RCS: @(#) $Id: cmdIL.test,v 1.1.2.2 1998/09/24 23:59:21 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -263,5 +263,42 @@ test cmdIL-4.25 {DictionaryCompare procedure, international characters} {hasIsoL
restore_locale
set result
} "a23\xe3 a23\xe4 a23\xc5"
-
+test cmdIL-4.26 {DefaultCompare procedure, signed characters} {
+ set l [lsort [list "abc\200" "abc"]]
+ set viewlist {}
+ foreach s $l {
+ set viewelem ""
+ set len [string length $s]
+ for {set i 0} {$i < $len} {incr i} {
+ set c [string index $s $i]
+ scan $c %c d
+ if {$d > 0 && $d < 128} {
+ append viewelem $c
+ } else {
+ append viewelem "\\[format %03o $d]"
+ }
+ }
+ lappend viewlist $viewelem
+ }
+ set viewlist
+} [list "abc" "abc\\200"]
+test cmdIL-4.27 {DictionaryCompare procedure, signed characters} {
+ set l [lsort -dictionary [list "abc\200" "abc"]]
+ set viewlist {}
+ foreach s $l {
+ set viewelem ""
+ set len [string length $s]
+ for {set i 0} {$i < $len} {incr i} {
+ set c [string index $s $i]
+ scan $c %c d
+ if {$d > 0 && $d < 128} {
+ append viewelem $c
+ } else {
+ append viewelem "\\[format %03o $d]"
+ }
+ }
+ lappend viewlist $viewelem
+ }
+ set viewlist
+} [list "abc" "abc\\200"]
return
diff --git a/tests/cmdInfo.test b/tests/cmdInfo.test
index 2b2b00b..ffc9c61 100644
--- a/tests/cmdInfo.test
+++ b/tests/cmdInfo.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) cmdInfo.test 1.11 97/12/08 15:05:59
+# RCS: @(#) $Id: cmdInfo.test,v 1.1.2.2 1998/09/24 23:59:21 stanton Exp $
if {[info commands testcmdinfo] == {}} {
puts "This application hasn't been compiled with the \"testcmdinfo\""
diff --git a/tests/compile.test b/tests/compile.test
index 53dc3d8..e5995c8 100644
--- a/tests/compile.test
+++ b/tests/compile.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) compile.test 1.9 97/12/16 13:32:14
+# RCS: @(#) $Id: compile.test,v 1.1.2.2 1998/09/24 23:59:21 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -78,8 +78,44 @@ test compile-3.1 {TclCompileCatchCmd: only catch cmds with scalar vars are compi
}
list [p] $a(1)
} {0 123}
+test compile-3.2 {TclCompileCatchCmd: non-local variables} {
+ set ::foo 1
+ proc catch-test {} {
+ catch {set x 3} ::foo
+ }
+ catch-test
+ set ::foo
+} 3
+
+test compile-4.1 {TclCompileForCmd: command substituted test expression} {
+ set i 0
+ set j 0
+ # Should be "forever"
+ for {} [expr $i < 3] {} {
+ set j [incr i]
+ if {$j > 3} break
+ }
+ set j
+} {4}
-test compile-4.1 {TclCompileSetCmd: global scalar names with ::s} {
+test compile-5.1 {TclCompileForeachCmd: exception stack} {
+ proc foreach-exception-test {} {
+ foreach array(index) [list 1 2 3] break
+ foreach array(index) [list 1 2 3] break
+ foreach scalar [list 1 2 3] break
+ }
+ list [catch foreach-exception-test result] $result
+} {0 {}}
+test compile-5.2 {TclCompileForeachCmd: non-local variables} {
+ set ::foo 1
+ proc foreach-test {} {
+ foreach ::foo {1 2 3} {}
+ }
+ foreach-test
+ set ::foo
+} 3
+
+test compile-6.1 {TclCompileSetCmd: global scalar names with ::s} {
catch {unset x}
catch {unset y}
set x 123
@@ -90,7 +126,7 @@ test compile-4.1 {TclCompileSetCmd: global scalar names with ::s} {
list $::x [expr {[lsearch -exact [info globals] x] != 0}] \
[p] $::y [expr {[lsearch -exact [info globals] y] != 0}]
} {123 1 789 789 1}
-test compile-4.2 {TclCompileSetCmd: global array names with ::s} {
+test compile-6.2 {TclCompileSetCmd: global array names with ::s} {
catch {unset a}
set ::a(1) 2
proc p {} {
@@ -99,7 +135,7 @@ test compile-4.2 {TclCompileSetCmd: global array names with ::s} {
}
list $::a(1) [p] [set ::a($::a(1)) 3] $::a(1) [expr {[lsearch -exact [info globals] a] != 0}]
} {2 1 3 3 1}
-test compile-4.3 {TclCompileSetCmd: namespace var names with ::s} {
+test compile-6.3 {TclCompileSetCmd: namespace var names with ::s} {
catch {namespace delete test_ns_compile}
catch {unset x}
namespace eval test_ns_compile {
@@ -111,17 +147,28 @@ test compile-4.3 {TclCompileSetCmd: namespace var names with ::s} {
list $::x $::test_ns_compile::arr(1)
} {hello 123}
-test compile-5.1 {CollectArgInfo: binary data} {
+test compile-7.1 {TclCompileWhileCmd: command substituted test expression} {
+ set i 0
+ set j 0
+ # Should be "forever"
+ while [expr $i < 3] {
+ set j [incr i]
+ if {$j > 3} break
+ }
+ set j
+} {4}
+
+test compile-8.1 {CollectArgInfo: binary data} {
list [catch "string length \000foo" msg] $msg
} {0 4}
-test compile-5.2 {CollectArgInfo: binary data} {
+test compile-8.2 {CollectArgInfo: binary data} {
list [catch "string length foo\000" msg] $msg
} {0 4}
-test compile-5.3 {CollectArgInfo: handle "]" at end of command properly} {
+test compile-8.3 {CollectArgInfo: handle "]" at end of command properly} {
set x ]
} {]}
-test compile-6.1 {UpdateStringOfByteCode: called for duplicate of compiled empty object} {
+test compile-9.1 {UpdateStringOfByteCode: called for duplicate of compiled empty object} {
proc p {} {
set x {}
eval $x
@@ -138,3 +185,4 @@ catch {unset y}
catch {unset a}
return
+
diff --git a/tests/concat.test b/tests/concat.test
index 99972e9..60ce0b3 100644
--- a/tests/concat.test
+++ b/tests/concat.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) concat.test 1.11 97/12/08 15:02:29
+# RCS: @(#) $Id: concat.test,v 1.1.2.2 1998/09/24 23:59:21 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/dcall.test b/tests/dcall.test
index 8ab615e..91dd757 100644
--- a/tests/dcall.test
+++ b/tests/dcall.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) dcall.test 1.7 97/12/08 15:02:32
+# RCS: @(#) $Id: dcall.test,v 1.1.2.2 1998/09/24 23:59:22 stanton Exp $
if {[info commands testdcall] == {}} {
puts "This application hasn't been compiled with the \"testdcall\""
diff --git a/tests/defs b/tests/defs
index babb10d..758eeca 100644
--- a/tests/defs
+++ b/tests/defs
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) defs 1.72 98/01/15 18:41:39
+# RCS: @(#) $Id: defs,v 1.1.2.2 1998/09/24 23:59:22 stanton Exp $
if ![info exists VERBOSE] {
set VERBOSE 0
@@ -512,6 +512,7 @@ if {$tcl_platform(os) != "Win32s"} {
close $f
set testConfig(stdio) 1
}
+ catch {file delete -force tmp}
}
if {($tcl_platform(platform) == "windows") && ($testConfig(stdio) == 0)} {
diff --git a/tests/dstring.test b/tests/dstring.test
index 23f37c7..3c591e2 100644
--- a/tests/dstring.test
+++ b/tests/dstring.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) dstring.test 1.11 97/12/08 15:02:36
+# RCS: @(#) $Id: dstring.test,v 1.1.2.2 1998/09/24 23:59:22 stanton Exp $
if {[info commands testdstring] == {}} {
puts "This application hasn't been compiled with the \"testdstring\""
diff --git a/tests/env.test b/tests/env.test
index cd2c354..b3064b8 100644
--- a/tests/env.test
+++ b/tests/env.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) env.test 1.18 98/02/17 23:45:10
+# RCS: @(#) $Id: env.test,v 1.1.2.2 1998/09/24 23:59:22 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/error.test b/tests/error.test
index 1e52543..512a15c 100644
--- a/tests/error.test
+++ b/tests/error.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) error.test 1.23 97/12/08 15:02:42
+# RCS: @(#) $Id: error.test,v 1.1.2.2 1998/09/24 23:59:22 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/eval.test b/tests/eval.test
index 1506baf..d523f85 100644
--- a/tests/eval.test
+++ b/tests/eval.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) eval.test 1.11 97/12/08 15:02:45
+# RCS: @(#) $Id: eval.test,v 1.1.2.2 1998/09/24 23:59:23 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/event.test b/tests/event.test
index 2dc6eb6..a4e9c95 100644
--- a/tests/event.test
+++ b/tests/event.test
@@ -8,7 +8,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# "@(#) event.test 1.36 97/12/08 15:05:00"
+# RCS: @(#) $Id: event.test,v 1.1.2.2 1998/09/24 23:59:23 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -384,8 +384,8 @@ test event-11.5 {Tcl_VwaitCmd procedure: round robin scheduling, 2 sources} {soc
puts $s foobar
close $s
}
- set s1 [socket -server accept 5000]
- set s2 [socket 127.0.0.1 5000]
+ set s1 [socket -server accept 5001]
+ set s2 [socket 127.0.0.1 5001]
close $s1
set x 0
set y 0
diff --git a/tests/exec.test b/tests/exec.test
index fb0355d..a5095f7 100644
--- a/tests/exec.test
+++ b/tests/exec.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) exec.test 1.62 97/12/24 13:42:34
+# RCS: @(#) $Id: exec.test,v 1.1.2.2 1998/09/24 23:59:23 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/execute.test b/tests/execute.test
index 092dcfd..7459b5b 100644
--- a/tests/execute.test
+++ b/tests/execute.test
@@ -13,7 +13,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) execute.test 1.6 97/12/08 15:07:24
+# RCS: @(#) $Id: execute.test,v 1.1.2.2 1998/09/24 23:59:23 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/expr-old.test b/tests/expr-old.test
index 98251be..2d0c8a2 100644
--- a/tests/expr-old.test
+++ b/tests/expr-old.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) expr-old.test 1.68 97/12/16 13:32:24
+# RCS: @(#) $Id: expr-old.test,v 1.1.2.2 1998/09/24 23:59:24 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -900,15 +900,24 @@ test expr-old-36.10 {ExprLooksLikeInt procedure} {nonPortable unixOnly} {
list [catch {expr 78e} msg] $msg
} {1 {syntax error in expression "78e"}}
+if {[info commands testexprlong] == {}} {
+ puts "This application hasn't been compiled with the \"testexprlong\""
+ puts "command, so I can't test Tcl_ExprLong etc."
+} else {
test expr-old-37.1 {Check that Tcl_ExprLong doesn't modify interpreter result if no error} {
testexprlong
} {This is a result: 5}
+}
+if {[info commands testexprstring] == {}} {
+ puts "This application hasn't been compiled with the \"testexprstring\""
+ puts "command, so I can't test Tcl_ExprString etc."
+} else {
test expr-old-38.1 {Verify Tcl_ExprString's basic operation} {
list [testexprstring "1+4"] [testexprstring "2*3+4.2"] \
[catch {testexprstring "1+"} msg] $msg
} {5 10.2 1 {syntax error in expression "1+"}}
-
+}
# Special test for Pentium arithmetic bug of 1994:
diff --git a/tests/expr.test b/tests/expr.test
index 3c4779f..3c743ce 100644
--- a/tests/expr.test
+++ b/tests/expr.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) expr.test 1.39 97/11/03 16:04:47
+# RCS: @(#) $Id: expr.test,v 1.1.2.1 1998/09/24 23:59:24 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/fCmd.test b/tests/fCmd.test
index 139ecab..2544a3f 100644
--- a/tests/fCmd.test
+++ b/tests/fCmd.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) fCmd.test 1.37 98/01/18 15:47:02
+# RCS: @(#) $Id: fCmd.test,v 1.1.2.2 1998/09/24 23:59:24 stanton Exp $
#
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/fileName.test b/tests/fileName.test
index 585a41b..3ffe4da 100644
--- a/tests/fileName.test
+++ b/tests/fileName.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) fileName.test 1.34 98/01/07 16:23:09
+# RCS: @(#) $Id: fileName.test,v 1.1.2.2 1998/09/24 23:59:24 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/for-old.test b/tests/for-old.test
index 29330ea..3367d34 100644
--- a/tests/for-old.test
+++ b/tests/for-old.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) for-old.test 1.15 97/12/08 15:06:07
+# RCS: @(#) $Id: for-old.test,v 1.1.2.2 1998/09/24 23:59:25 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/for.test b/tests/for.test
index f6d4324..ceb70c2 100644
--- a/tests/for.test
+++ b/tests/for.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) for.test 1.13 97/12/08 15:02:58
+# RCS: @(#) $Id: for.test,v 1.1.2.2 1998/09/24 23:59:25 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/foreach.test b/tests/foreach.test
index ef29d7c..8032ea1 100644
--- a/tests/foreach.test
+++ b/tests/foreach.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) foreach.test 1.9 97/12/08 15:06:20
+# RCS: @(#) $Id: foreach.test,v 1.1.2.2 1998/09/24 23:59:25 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/format.test b/tests/format.test
index 6a67fb4..e6261c1 100644
--- a/tests/format.test
+++ b/tests/format.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) format.test 1.31 98/01/16 16:21:58
+# RCS: @(#) $Id: format.test,v 1.1.2.2 1998/09/24 23:59:25 stanton Exp $
if {[info commands test] != "test"} {
source defs
diff --git a/tests/get.test b/tests/get.test
index 8ba8be0..b198a1f 100644
--- a/tests/get.test
+++ b/tests/get.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) get.test 1.9 97/12/19 11:57:36
+# RCS: @(#) $Id: get.test,v 1.1.2.2 1998/09/24 23:59:25 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/history.test b/tests/history.test
index 317fc06..d878d0a 100644
--- a/tests/history.test
+++ b/tests/history.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) history.test 1.16 97/12/08 15:03:07
+# RCS: @(#) $Id: history.test,v 1.1.2.2 1998/09/24 23:59:25 stanton Exp $
if {[catch {history}]} {
puts stdout "This version of Tcl was built without the history command;\n"
diff --git a/tests/http.test b/tests/http.test
index be43f21..3a0e420 100644
--- a/tests/http.test
+++ b/tests/http.test
@@ -11,7 +11,7 @@
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
#
-# SCCS: @(#) http.test 1.11 98/02/20 14:51:59
+# RCS: @(#) $Id: http.test,v 1.1.2.2 1998/09/24 23:59:25 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/httpold.test b/tests/httpold.test
index 5e9ba0c..3873639 100644
--- a/tests/httpold.test
+++ b/tests/httpold.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) http.test 1.12 97/07/29 17:04:12
+# RCS: @(#) $Id: httpold.test,v 1.1.2.1 1998/09/24 23:59:25 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/if-old.test b/tests/if-old.test
index d4c3587..59974cd 100644
--- a/tests/if-old.test
+++ b/tests/if-old.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) if-old.test 1.11 97/12/08 15:06:04
+# RCS: @(#) $Id: if-old.test,v 1.1.2.2 1998/09/24 23:59:26 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/if.test b/tests/if.test
index 79d4bbe..cfd3876 100644
--- a/tests/if.test
+++ b/tests/if.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) if.test 1.11 97/12/08 15:02:55
+# RCS: @(#) $Id: if.test,v 1.1.2.2 1998/09/24 23:59:26 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/incr-old.test b/tests/incr-old.test
index 710896c..570aae7 100644
--- a/tests/incr-old.test
+++ b/tests/incr-old.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) incr-old.test 1.12 97/12/08 15:06:10
+# RCS: @(#) $Id: incr-old.test,v 1.1.2.2 1998/09/24 23:59:26 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/incr.test b/tests/incr.test
index 8dd9cce..fabbd6c 100644
--- a/tests/incr.test
+++ b/tests/incr.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) incr.test 1.13 97/12/16 13:32:33
+# RCS: @(#) $Id: incr.test,v 1.1.2.2 1998/09/24 23:59:26 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/indexObj.test b/tests/indexObj.test
index cbe32e8..f06c0c5 100644
--- a/tests/indexObj.test
+++ b/tests/indexObj.test
@@ -7,7 +7,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# @(#) indexObj.test 1.4 97/12/08 15:06:27
+# RCS: @(#) $Id: indexObj.test,v 1.1.2.2 1998/09/24 23:59:26 stanton Exp $
if {[info procs test] != "test"} {
source defs
diff --git a/tests/info.test b/tests/info.test
index 7bc5e84..d45d44c 100644
--- a/tests/info.test
+++ b/tests/info.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) info.test 1.43 98/02/11 17:28:43
+# RCS: @(#) $Id: info.test,v 1.1.2.2 1998/09/24 23:59:26 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -350,6 +350,13 @@ test info-12.6 {info locals vs unset compiled locals} {
}
lsort [t1 {a b c c d e f}]
} {a b c d e f}
+test info-12.7 {info locals with temporary variables} {
+ proc t1 {} {
+ foreach a {b c} {}
+ info locals
+ }
+ t1
+} {a}
test info-13.1 {info nameofexecutable option} {
list [catch {info nameofexecutable foo} msg] $msg
@@ -467,6 +474,13 @@ test info-19.3 {info vars option} {
test info-19.4 {info vars option} {
list [catch {info vars a b} msg] $msg
} {1 {wrong # args: should be "info vars ?pattern?"}}
+test info-19.5 {info vars with temporary variables} {
+ proc t1 {} {
+ foreach a {b c} {}
+ info vars
+ }
+ t1
+} {a}
test info-20.1 {miscellaneous error conditions} {
list [catch {info} msg] $msg
diff --git a/tests/init.test b/tests/init.test
index 658b998..f2504bd 100644
--- a/tests/init.test
+++ b/tests/init.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) init.test 1.6 97/12/08 15:07:52
+# RCS: @(#) $Id: init.test,v 1.1.2.2 1998/09/24 23:59:27 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/interp.test b/tests/interp.test
index 4c43edb..ac8f792 100644
--- a/tests/interp.test
+++ b/tests/interp.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) interp.test 1.70 98/02/17 23:45:11
+# RCS: @(#) $Id: interp.test,v 1.1.2.2 1998/09/24 23:59:27 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -146,8 +146,8 @@ test interp-3.8 {testing interp exists and interp slaves} {
} {1 {wrong # args: should be "interp slaves ?path?"}}
test interp-3.9 {testing interp exists and interp slaves} {
interp create {a a2} -safe
- interp slaves a
-} {a2}
+ expr {[lsearch [interp slaves a] a2] >= 0}
+} 1
test interp-3.10 {testing interp exists and interp slaves} {
interp exists {a a2}
} 1
@@ -173,8 +173,8 @@ test interp-4.5 {testing interp delete} {
interp create a
interp create {a x1}
interp delete {a x1}
- interp slaves a
-} ""
+ expr {[lsearch [interp slaves a] x1] >= 0}
+} 0
test interp-4.6 {testing interp delete} {
interp create c1
interp create c2
diff --git a/tests/io.test b/tests/io.test
index 2f55660..d90d1c0 100644
--- a/tests/io.test
+++ b/tests/io.test
@@ -11,7 +11,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) io.test 1.149 98/02/10 17:49:32
+# RCS: @(#) $Id: io.test,v 1.1.2.2 1998/09/24 23:59:27 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -6680,6 +6680,51 @@ test io-56.1 {ChannelTimerProc} {
lappend result $y
} {2 done}
+test io-34.1 {buffered data and file events, gets} {
+ proc accept {sock args} {
+ set ::s2 $sock
+ }
+ set server [socket -server accept 4040]
+ set s [socket localhost 4040]
+ vwait s2
+ update
+ fileevent $s2 readable {lappend result readable}
+ puts $s "12\n34567890"
+ flush $s
+ set result [gets $s2]
+ after 1000 {lappend result timer}
+ vwait result
+ lappend result [gets $s2]
+ vwait result
+ close $s
+ close $s2
+ close $server
+ set result
+} {12 readable 34567890 timer}
+test io-34.2 {buffered data and file events, read} {
+ proc accept {sock args} {
+ set ::s2 $sock
+ }
+ set server [socket -server accept 4040]
+ set s [socket localhost 4040]
+ vwait s2
+ update
+ fileevent $s2 readable {lappend result readable}
+ puts -nonewline $s "1234567890"
+ flush $s
+ set result [read $s2 1]
+ after 1000 {lappend result timer}
+ vwait result
+ lappend result [read $s2 9]
+ vwait result
+ close $s
+ close $s2
+ close $server
+ set result
+} {1 readable 234567890 timer}
+
+
+
removeFile fooBar
removeFile longfile
removeFile script
diff --git a/tests/ioCmd.test b/tests/ioCmd.test
index e8eb96c..223be22 100644
--- a/tests/ioCmd.test
+++ b/tests/ioCmd.test
@@ -11,7 +11,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# "@(#) ioCmd.test 1.53 98/01/07 16:23:34"
+# RCS: @(#) $Id: ioCmd.test,v 1.1.2.2 1998/09/24 23:59:28 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/ioUtil.test b/tests/ioUtil.test
new file mode 100644
index 0000000..4e86353
--- /dev/null
+++ b/tests/ioUtil.test
@@ -0,0 +1,300 @@
+# This file (iOUtil.test) tests the hookable TclStat(), TclAccess(),
+# and Tcl_OpenFileChannel, routines in the file generic/tclIOUtils.c.
+# Sourcing this file into Tcl runs the tests and generates output for
+# errors. No output means no errors were found.
+#
+# Copyright (c) 1998 by Scriptics Corporation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: ioUtil.test,v 1.1.2.1 1998/09/24 23:59:26 stanton Exp $
+
+if {[string compare test [info procs test]] == 1} then {source defs}
+
+set unsetScript {
+ catch {unset testStat1(size)}
+ catch {unset testStat2(size)}
+ catch {unset testStat3(size)}
+}
+
+test stat-1.1 {TclStat: Check that none of the test procs are there.} {
+ catch {file stat testStat1%.fil testStat1} err1
+ catch {file stat testStat2%.fil testStat2} err2
+ catch {file stat testStat3%.fil testStat3} err3
+ list $err1 $err2 $err3
+} {{couldn't stat "testStat1%.fil": no such file or directory} {couldn't stat "testStat2%.fil": no such file or directory} {couldn't stat "testStat3%.fil": no such file or directory}}
+
+if {[info commands teststatproc] == {}} {
+ puts "This application hasn't been compiled with the \"teststatproc\""
+ puts "command, so I can't test Tcl_Stat_* etc."
+} else {
+test stat-1.2 {TclStatInsertProc: Insert the 3 test TclStat_ procedures.} {
+ catch {teststatproc insert TclpStat} err1
+ teststatproc insert TestStatProc1
+ teststatproc insert TestStatProc2
+ teststatproc insert TestStatProc3
+ set err1
+} {bad arg "insert": must be TestStatProc1, TestStatProc2, or TestStatProc3}
+
+test stat-1.3 {TclStat: Use "file stat ?" to invoke each procedure.} {
+ file stat testStat2%.fil testStat2
+ file stat testStat1%.fil testStat1
+ file stat testStat3%.fil testStat3
+
+ list $testStat2(size) $testStat1(size) $testStat3(size)
+} {2345 1234 3456}
+
+eval $unsetScript
+
+test stat-1.4 {TclStatDeleteProc: "TclpStat" function should not be deletedable.} {
+ catch {teststatproc delete TclpStat} err2
+ set err2
+} {"TclpStat": could not be deleteed}
+
+test stat-1.5 {TclStatDeleteProc: Delete the 2nd TclStat procedure.} {
+ # Delete the 2nd procedure and test that it longer exists but that
+ # the others do actually return a result.
+
+ teststatproc delete TestStatProc2
+ file stat testStat1%.fil testStat1
+ catch {file stat testStat2%.fil testStat2} err3
+ file stat testStat3%.fil testStat3
+
+ list $testStat1(size) $err3 $testStat3(size)
+} {1234 {couldn't stat "testStat2%.fil": no such file or directory} 3456}
+
+eval $unsetScript
+
+test stat-1.6 {TclStatDeleteProc: Delete the 1st TclStat procedure.} {
+ # Next delete the 1st procedure and test that only the 3rd procedure
+ # is the only one that exists.
+
+ teststatproc delete TestStatProc1
+ catch {file stat testStat1%.fil testStat1} err4
+ catch {file stat testStat2%.fil testStat2} err5
+ file stat testStat3%.fil testStat3
+
+ list $err4 $err5 $testStat3(size)
+} {{couldn't stat "testStat1%.fil": no such file or directory} {couldn't stat "testStat2%.fil": no such file or directory} 3456}
+
+eval $unsetScript
+
+test stat-1.7 {TclStatDeleteProc: Delete the 3rd procedure & verify all are gone.} {
+ # Finally delete the 3rd procedure and check that none of the
+ # procedures exist.
+
+ teststatproc delete TestStatProc3
+ catch {file stat testStat1%.fil testStat1} err6
+ catch {file stat testStat2%.fil testStat2} err7
+ catch {file stat testStat3%.fil testStat3} err8
+
+ list $err6 $err7 $err8
+} {{couldn't stat "testStat1%.fil": no such file or directory} {couldn't stat "testStat2%.fil": no such file or directory} {couldn't stat "testStat3%.fil": no such file or directory}}
+
+eval $unsetScript
+
+test stat-1.8 {TclStatDeleteProc: Verify that all procs have been deleted.} {
+ # Attempt to delete all the Stat procs. again to ensure they no longer
+ # exist and an error is returned.
+
+ catch {teststatproc delete TestStatProc1} err9
+ catch {teststatproc delete TestStatProc2} err10
+ catch {teststatproc delete TestStatProc3} err11
+
+ list $err9 $err10 $err11
+} {{"TestStatProc1": could not be deleteed} {"TestStatProc2": could not be deleteed} {"TestStatProc3": could not be deleteed}}
+}
+
+eval $unsetScript
+
+
+test access-1.1 {TclAccess: Check that none of the test procs are there.} {
+ catch {file exists testAccess1%.fil} err1
+ catch {file exists testAccess2%.fil} err2
+ catch {file exists testAccess3%.fil} err3
+ list $err1 $err2 $err3
+} {0 0 0}
+
+if {[info commands testaccessproc] == {}} {
+ puts "This application hasn't been compiled with the \"testaccessproc\""
+ puts "command, so I can't test Tcl_Access_* etc."
+} else {
+test access-1.2 {TclAccessInsertProc: Insert the 3 test TclAccess_ procedures.} {
+ catch {testaccessproc insert TclpAccess} err1
+ testaccessproc insert TestAccessProc1
+ testaccessproc insert TestAccessProc2
+ testaccessproc insert TestAccessProc3
+ set err1
+} {bad arg "insert": must be TestAccessProc1, TestAccessProc2, or TestAccessProc3}
+
+test access-1.3 {TclAccess: Use "file access ?" to invoke each procedure.} {
+ list \
+ [file exists testAccess2%.fil] \
+ [file exists testAccess1%.fil] \
+ [file exists testAccess3%.fil]
+} {1 1 1}
+
+test access-1.4 {TclAccessDeleteProc: "TclpAccess" function should not be deletedable.} {
+ catch {testaccessproc delete TclpAccess} err2
+ set err2
+} {"TclpAccess": could not be deleteed}
+
+test accesst-1.5 {TclAccessDeleteProc: Delete the 2nd TclAccess procedure.} {
+ # Delete the 2nd procedure and test that it longer exists but that
+ # the others do actually return a result.
+
+ testaccessproc delete TestAccessProc2
+ set res1 [file exists testAccess1%.fil]
+ catch {file exists testAccess2%.fil} err3
+ set res2 [file exists testAccess3%.fil]
+
+ list $res1 $err3 $res2
+} {1 0 1}
+
+test access-1.6 {TclAccessDeleteProc: Delete the 1st TclAccess procedure.} {
+ # Next delete the 1st procedure and test that only the 3rd procedure
+ # is the only one that exists.
+
+ testaccessproc delete TestAccessProc1
+ catch {file exists testAccess1%.fil} err4
+ catch {file exists testAccess2%.fil} err5
+ set res3 [file exists testAccess3%.fil]
+
+ list $err4 $err5 $res3
+} {0 0 1}
+
+test access-1.7 {TclAccessDeleteProc: Delete the 3rd procedure & verify all are gone.} {
+ # Finally delete the 3rd procedure and check that none of the
+ # procedures exist.
+
+ testaccessproc delete TestAccessProc3
+ catch {file exists testAccess1%.fil} err6
+ catch {file exists testAccess2%.fil} err7
+ catch {file exists testAccess3%.fil} err8
+
+ list $err6 $err7 $err8
+} {0 0 0}
+
+test access-1.8 {TclAccessDeleteProc: Verify that all procs have been deleted.} {
+ # Attempt to delete all the Access procs. again to ensure they no longer
+ # exist and an error is returned.
+
+ catch {testaccessproc delete TestAccessProc1} err9
+ catch {testaccessproc delete TestAccessProc2} err10
+ catch {testaccessproc delete TestAccessProc3} err11
+
+ list $err9 $err10 $err11
+} {{"TestAccessProc1": could not be deleteed} {"TestAccessProc2": could not be deleteed} {"TestAccessProc3": could not be deleteed}}
+}
+
+test openfilechannel-1.1 {TclOpenFileChannel: Check that none of the test procs are there.} {
+ catch {file exists __testOpenFileChannel1%__.fil} err1
+ catch {file exists __testOpenFileChannel2%__.fil} err2
+ catch {file exists __testOpenFileChannel3%__.fil} err3
+ catch {file exists __testOpenFileChannel1%__.fil} err4
+ catch {file exists __testOpenFileChannel2%__.fil} err5
+ catch {file exists __testOpenFileChannel3%__.fil} err6
+ list $err1 $err2 $err3 $err4 $err5 $err6
+} {0 0 0 0 0 0}
+
+if {[info commands testopenfilechannelproc] == {}} {
+ puts "This application hasn't been compiled with the \"testopenfilechannelproc\""
+ puts "command, so I can't test Tcl_OpenFileChannelInsert"
+} else {
+test openfilechannel-1.2 {TclOpenFileChannelInsertProc: Insert the 3 test TclOpenFileChannel_ procedures.} {
+ catch {testopenfilechannelproc insert TclpOpenFileChannel} err1
+ testopenfilechannelproc insert TestOpenFileChannelProc1
+ testopenfilechannelproc insert TestOpenFileChannelProc2
+ testopenfilechannelproc insert TestOpenFileChannelProc3
+ set err1
+} {bad arg "insert": must be TestOpenFileChannelProc1, TestOpenFileChannelProc2, or TestOpenFileChannelProc3}
+
+test openfilechannel-1.3 {TclOpenFileChannel: Use "file openfilechannel ?" to invoke each procedure.} {
+ close [open __testOpenFileChannel1%__.fil w]
+ close [open __testOpenFileChannel2%__.fil w]
+ close [open __testOpenFileChannel3%__.fil w]
+
+ catch {
+ close [open testOpenFileChannel1%.fil r]
+ close [open testOpenFileChannel2%.fil r]
+ close [open testOpenFileChannel3%.fil r]
+ } err
+
+ file delete __testOpenFileChannel1%__.fil
+ file delete __testOpenFileChannel2%__.fil
+ file delete __testOpenFileChannel3%__.fil
+
+ set err
+} {}
+
+test openfilechannel-1.4 {TclOpenFileChannelDeleteProc: "TclpOpenFileChannel" function should not be deletedable.} {
+ catch {testopenfilechannelproc delete TclpOpenFileChannel} err2
+ set err2
+} {"TclpOpenFileChannel": could not be deleteed}
+
+test openfilechannelt-1.5 {TclOpenFileChannelDeleteProc: Delete the 2nd TclOpenFileChannel procedure.} {
+ # Delete the 2nd procedure and test that it longer exists but that
+ # the others do actually return a result.
+
+ testopenfilechannelproc delete TestOpenFileChannelProc2
+
+ close [open __testOpenFileChannel1%__.fil w]
+ close [open __testOpenFileChannel3%__.fil w]
+
+ catch {
+ close [open testOpenFileChannel1%.fil r]
+ catch {close [open testOpenFileChannel2%.fil r]}
+ close [open testOpenFileChannel3%.fil r]
+ } err3
+
+ file delete __testOpenFileChannel1%__.fil
+ file delete __testOpenFileChannel3%__.fil
+
+ set err3
+} {}
+
+test openfilechannel-1.6 {TclOpenFileChannelDeleteProc: Delete the 1st TclOpenFileChannel procedure.} {
+ # Next delete the 1st procedure and test that only the 3rd procedure
+ # is the only one that exists.
+
+ testopenfilechannelproc delete TestOpenFileChannelProc1
+
+ close [open __testOpenFileChannel3%__.fil w]
+
+ catch {
+ catch {close [open testOpenFileChannel1%.fil r]}
+ catch {close [open testOpenFileChannel2%.fil r]}
+ close [open testOpenFileChannel3%.fil r]
+ } err4
+
+ file delete __testOpenFileChannel3%__.fil
+
+ set err4
+} {}
+
+test openfilechannel-1.7 {TclOpenFileChannelDeleteProc: Delete the 3rd procedure & verify all are gone.} {
+ # Finally delete the 3rd procedure and check that none of the
+ # procedures exist.
+
+ testopenfilechannelproc delete TestOpenFileChannelProc3
+ catch {
+ catch [open testOpenFileChannel1%.fil r]
+ catch [open testOpenFileChannel2%.fil r]
+ catch [open testOpenFileChannel3%.fil r]
+ } err5
+
+ set err5
+} {1}
+
+test openfilechannel-1.8 {TclOpenFileChannelDeleteProc: Verify that all procs have been deleted.} {
+ # Attempt to delete all the OpenFileChannel procs. again to ensure they no longer
+ # exist and an error is returned.
+
+ catch {testopenfilechannelproc delete TestOpenFileChannelProc1} err9
+ catch {testopenfilechannelproc delete TestOpenFileChannelProc2} err10
+ catch {testopenfilechannelproc delete TestOpenFileChannelProc3} err11
+
+ list $err9 $err10 $err11
+} {{"TestOpenFileChannelProc1": could not be deleteed} {"TestOpenFileChannelProc2": could not be deleteed} {"TestOpenFileChannelProc3": could not be deleteed}}
+}
diff --git a/tests/join.test b/tests/join.test
index 770f53a..0553f43 100644
--- a/tests/join.test
+++ b/tests/join.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) join.test 1.8 97/12/08 15:03:20
+# RCS: @(#) $Id: join.test,v 1.1.2.2 1998/09/24 23:59:28 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/lindex.test b/tests/lindex.test
index 46023ca..45d5f70 100644
--- a/tests/lindex.test
+++ b/tests/lindex.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) lindex.test 1.8 97/12/08 15:03:23
+# RCS: @(#) $Id: lindex.test,v 1.1.2.2 1998/09/24 23:59:28 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/link.test b/tests/link.test
index 4e405a0..df788cd 100644
--- a/tests/link.test
+++ b/tests/link.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) link.test 1.14 98/02/18 11:59:28
+# RCS: @(#) $Id: link.test,v 1.1.2.2 1998/09/24 23:59:28 stanton Exp $
if {[info commands testlink] == {}} {
puts "This application hasn't been compiled with the \"testlink\""
diff --git a/tests/linsert.test b/tests/linsert.test
index 9111afb..3fe65d4 100644
--- a/tests/linsert.test
+++ b/tests/linsert.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) linsert.test 1.15 97/12/08 15:03:29
+# RCS: @(#) $Id: linsert.test,v 1.1.2.2 1998/09/24 23:59:28 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/list.test b/tests/list.test
index f2bd5e5..64819fb 100644
--- a/tests/list.test
+++ b/tests/list.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) list.test 1.23 97/12/08 15:03:32
+# RCS: @(#) $Id: list.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/listObj.test b/tests/listObj.test
index db4a7aa..e9c3e0c 100644
--- a/tests/listObj.test
+++ b/tests/listObj.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) listObj.test 1.11 97/12/16 13:34:13
+# RCS: @(#) $Id: listObj.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
if {[info commands testobj] == {}} {
puts "This application hasn't been compiled with the \"testobj\""
diff --git a/tests/llength.test b/tests/llength.test
index 119c3da..27b1197 100644
--- a/tests/llength.test
+++ b/tests/llength.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) llength.test 1.5 97/12/08 15:03:34
+# RCS: @(#) $Id: llength.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/load.test b/tests/load.test
index 4e8d29c..ccf0fab 100644
--- a/tests/load.test
+++ b/tests/load.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) load.test 1.22 98/02/11 19:45:38
+# RCS: @(#) $Id: load.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/lrange.test b/tests/lrange.test
index 973c94e..b2beb53 100644
--- a/tests/lrange.test
+++ b/tests/lrange.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) lrange.test 1.13 97/12/08 15:03:37
+# RCS: @(#) $Id: lrange.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/lreplace.test b/tests/lreplace.test
index faca206..6fe4a00 100644
--- a/tests/lreplace.test
+++ b/tests/lreplace.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) lreplace.test 1.17 97/12/08 15:03:40
+# RCS: @(#) $Id: lreplace.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/lsearch.test b/tests/lsearch.test
index d0a1ba2..8caf8d8 100644
--- a/tests/lsearch.test
+++ b/tests/lsearch.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) lsearch.test 1.8 97/12/08 15:03:42
+# RCS: @(#) $Id: lsearch.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/macFCmd.test b/tests/macFCmd.test
index 5290d05..5edc69e 100644
--- a/tests/macFCmd.test
+++ b/tests/macFCmd.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) macFCmd.test 1.4 97/12/08 15:06:36
+# RCS: @(#) $Id: macFCmd.test,v 1.1.2.2 1998/09/24 23:59:29 stanton Exp $
#
if {$tcl_platform(platform) != "macintosh"} {
diff --git a/tests/misc.test b/tests/misc.test
index 5faa63e..d13a28f 100644
--- a/tests/misc.test
+++ b/tests/misc.test
@@ -11,7 +11,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) misc.test 1.14 97/12/16 13:34:35
+# RCS: @(#) $Id: misc.test,v 1.1.2.2 1998/09/24 23:59:30 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/namespace-old.test b/tests/namespace-old.test
index df2c822..cd6a379 100644
--- a/tests/namespace-old.test
+++ b/tests/namespace-old.test
@@ -13,7 +13,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) namespace-old.test 1.6 97/12/08 15:07:16
+# RCS: @(#) $Id: namespace-old.test,v 1.1.2.2 1998/09/24 23:59:30 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/namespace.test b/tests/namespace.test
index 2c186e1..2d1f501 100644
--- a/tests/namespace.test
+++ b/tests/namespace.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) namespace.test 1.18 97/12/16 13:34:44
+# RCS: @(#) $Id: namespace.test,v 1.1.2.2 1998/09/24 23:59:31 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -222,6 +222,23 @@ test namespace-9.6 {Tcl_Import, cmd redefinition ok if allowOverwrite!=0} {
cmd1 555
}
} {cmd1: 555}
+test namespace-9.7 {Tcl_Import, links are preserved if cmd is redefined} {
+ catch {eval namespace delete [namespace children :: test_ns_*]}
+ namespace eval test_ns_export {
+ namespace export cmd1
+ proc cmd1 {args} {return "cmd1: $args"}
+ }
+ namespace eval test_ns_import {
+ namespace import -force ::test_ns_export::*
+ }
+ list [test_ns_import::cmd1 a b c] \
+ [test_ns_export::cmd1 d e f] \
+ [proc test_ns_export::cmd1 {args} {return "new1: $args"}] \
+ [namespace origin test_ns_import::cmd1] \
+ [namespace origin test_ns_export::cmd1] \
+ [test_ns_import::cmd1 g h i] \
+ [test_ns_export::cmd1 j k l]
+} {{cmd1: a b c} {cmd1: d e f} {} ::test_ns_export::cmd1 ::test_ns_export::cmd1 {new1: g h i} {new1: j k l}}
test namespace-10.1 {Tcl_ForgetImport, check for valid namespaces} {
catch {eval namespace delete [namespace children :: test_ns_*]}
diff --git a/tests/obj.test b/tests/obj.test
index 0a854af..5557150 100644
--- a/tests/obj.test
+++ b/tests/obj.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# @(#) obj.test 1.15 98/01/06 11:12:00
+# RCS: @(#) $Id: obj.test,v 1.1.2.2 1998/09/24 23:59:32 stanton Exp $
if {[info commands testobj] == {}} {
puts "This application hasn't been compiled with the \"testobj\""
diff --git a/tests/opt.test b/tests/opt.test
index 72efead..e669718 100644
--- a/tests/opt.test
+++ b/tests/opt.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) opt.test 1.7 98/01/07 17:07:52
+# RCS: @(#) $Id: opt.test,v 1.1.2.2 1998/09/24 23:59:32 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -253,7 +253,6 @@ test opt-10.10 {medium size overall test} {
list [catch {optTest save tst foo} msg] [lindex [split $msg "\n"] 0]
} {1 {too many arguments (unexpected argument(s): foo), usage:}}
-
test opt-11.1 {too many args test 2} {
set key [::tcl::OptKeyRegister {-foo}]
list [catch {::tcl::OptKeyParse $key {-foo blah}} msg] $msg\
@@ -263,9 +262,6 @@ test opt-11.1 {too many args test 2} {
------------ ---- ----- ----
( -help gives this help )
-foo boolflag (false) } {}}
-
-
-
test opt-11.2 {default value for args} {
set args {}
set key [::tcl::OptKeyRegister {{args -list {a b c} "args..."}}]
diff --git a/tests/osa.test b/tests/osa.test
index 3392128..c2e16bb 100644
--- a/tests/osa.test
+++ b/tests/osa.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) osa.test 1.5 97/12/08 15:06:02
+# RCS: @(#) $Id: osa.test,v 1.1.2.2 1998/09/24 23:59:32 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/parse.test b/tests/parse.test
index e14449d..ff61caa 100644
--- a/tests/parse.test
+++ b/tests/parse.test
@@ -7,7 +7,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) parse.test 1.14 97/12/22 19:41:39
+# RCS: @(#) $Id: parse.test,v 1.1.2.2 1998/09/24 23:59:33 stanton Exp $
if {[info commands testparser] == {}} {
puts "This application hasn't been compiled with the \"testparser\""
diff --git a/tests/pid.test b/tests/pid.test
index 3b2f30b..323b12a 100644
--- a/tests/pid.test
+++ b/tests/pid.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) pid.test 1.13 97/12/08 15:05:26
+# RCS: @(#) $Id: pid.test,v 1.1.2.2 1998/09/24 23:59:33 stanton Exp $
# If pid is not defined just return with no error
# Some platforms may not have the pid command implemented
diff --git a/tests/pkg.test b/tests/pkg.test
index 63dc05c..22b2baa 100644
--- a/tests/pkg.test
+++ b/tests/pkg.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) pkg.test 1.14 97/12/08 15:03:04
+# RCS: @(#) $Id: pkg.test,v 1.1.2.2 1998/09/24 23:59:34 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/proc-old.test b/tests/proc-old.test
index 4eb956c..3a9bd43 100644
--- a/tests/proc-old.test
+++ b/tests/proc-old.test
@@ -13,7 +13,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) proc-old.test 1.32 97/12/08 15:06:46
+# RCS: @(#) $Id: proc-old.test,v 1.1.2.2 1998/09/24 23:59:34 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/proc.test b/tests/proc.test
index 7a0081a..17da4f7 100644
--- a/tests/proc.test
+++ b/tests/proc.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) proc.test 1.12 97/12/08 15:03:59
+# RCS: @(#) $Id: proc.test,v 1.1.2.2 1998/09/24 23:59:34 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/pwd.test b/tests/pwd.test
index e283799..8a11910 100644
--- a/tests/pwd.test
+++ b/tests/pwd.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) pwd.test 1.2 97/08/13 23:06:41
+# RCS: @(#) $Id: pwd.test,v 1.1.2.1 1998/09/24 23:59:34 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/regexp.test b/tests/regexp.test
index e39c96c..873ab4d 100644
--- a/tests/regexp.test
+++ b/tests/regexp.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) regexp.test 1.27 98/01/28 18:07:48
+# RCS: @(#) $Id: regexp.test,v 1.1.2.2 1998/09/24 23:59:34 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/registry.test b/tests/registry.test
index b1597d1..ffa2961 100644
--- a/tests/registry.test
+++ b/tests/registry.test
@@ -9,7 +9,7 @@
#
# Copyright (c) 1997 by Sun Microsystems, Inc. All rights reserved.
#
-# SCCS: @(#) registry.test 1.9 98/01/05 16:18:05
+# RCS: @(#) $Id: registry.test,v 1.1.2.2 1998/09/24 23:59:34 stanton Exp $
if {$tcl_platform(platform) != "windows"} {
return
diff --git a/tests/remote.tcl b/tests/remote.tcl
new file mode 100644
index 0000000..6fe72a8
--- /dev/null
+++ b/tests/remote.tcl
@@ -0,0 +1,161 @@
+# This file contains Tcl code to implement a remote server that can be
+# used during testing of Tcl socket code. This server is used by some
+# of the tests in socket.test.
+#
+# Source this file in the remote server you are using to test Tcl against.
+#
+# Copyright (c) 1995-1996 Sun Microsystems, Inc.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: remote.tcl,v 1.1.2.1 1998/09/24 23:59:35 stanton Exp $
+
+# Initialize message delimitor
+
+# Initialize command array
+catch {unset command}
+set command(0) ""
+set callerSocket ""
+
+# Detect whether we should print out connection messages etc.
+if {![info exists VERBOSE]} {
+ set VERBOSE 0
+}
+
+proc __doCommands__ {l s} {
+ global callerSocket VERBOSE
+
+ if {$VERBOSE} {
+ puts "--- Server executing the following for socket $s:"
+ puts $l
+ puts "---"
+ }
+ set callerSocket $s
+ if {[catch {uplevel #0 $l} msg]} {
+ list error $msg
+ } else {
+ list success $msg
+ }
+}
+
+proc __readAndExecute__ {s} {
+ global command VERBOSE
+
+ set l [gets $s]
+ if {[string compare $l "--Marker--Marker--Marker--"] == 0} {
+ if {[info exists command($s)]} {
+ puts $s [list error incomplete_command]
+ }
+ puts $s "--Marker--Marker--Marker--"
+ return
+ }
+ if {[string compare $l ""] == 0} {
+ if {[eof $s]} {
+ if {$VERBOSE} {
+ puts "Server closing $s, eof from client"
+ }
+ close $s
+ }
+ return
+ }
+ append command($s) $l "\n"
+ if {[info complete $command($s)]} {
+ set cmds $command($s)
+ unset command($s)
+ puts $s [__doCommands__ $cmds $s]
+ }
+ if {[eof $s]} {
+ if {$VERBOSE} {
+ puts "Server closing $s, eof from client"
+ }
+ close $s
+ }
+}
+
+proc __accept__ {s a p} {
+ global VERBOSE
+
+ if {$VERBOSE} {
+ puts "Server accepts new connection from $a:$p on $s"
+ }
+ fileevent $s readable [list __readAndExecute__ $s]
+ fconfigure $s -buffering line -translation crlf
+}
+
+set serverIsSilent 0
+for {set i 0} {$i < $argc} {incr i} {
+ if {[string compare -serverIsSilent [lindex $argv $i]] == 0} {
+ set serverIsSilent 1
+ break
+ }
+}
+if {![info exists serverPort]} {
+ if {[info exists env(serverPort)]} {
+ set serverPort $env(serverPort)
+ }
+}
+if {![info exists serverPort]} {
+ for {set i 0} {$i < $argc} {incr i} {
+ if {[string compare -port [lindex $argv $i]] == 0} {
+ if {$i < [expr $argc - 1]} {
+ set serverPort [lindex $argv [expr $i + 1]]
+ }
+ break
+ }
+ }
+}
+if {![info exists serverPort]} {
+ set serverPort 2048
+}
+
+if {![info exists serverAddress]} {
+ if {[info exists env(serverAddress)]} {
+ set serverAddress $env(serverAddress)
+ }
+}
+if {![info exists serverAddress]} {
+ for {set i 0} {$i < $argc} {incr i} {
+ if {[string compare -address [lindex $argv $i]] == 0} {
+ if {$i < [expr $argc - 1]} {
+ set serverAddress [lindex $argv [expr $i + 1]]
+ }
+ break
+ }
+ }
+}
+if {![info exists serverAddress]} {
+ set serverAddress 0.0.0.0
+}
+
+if {$serverIsSilent == 0} {
+ set l "Remote server listening on port $serverPort, IP $serverAddress."
+ puts ""
+ puts $l
+ for {set c [string length $l]} {$c > 0} {incr c -1} {puts -nonewline "-"}
+ puts ""
+ puts ""
+ puts "You have set the Tcl variables serverAddress to $serverAddress and"
+ puts "serverPort to $serverPort. You can set these with the -address and"
+ puts "-port command line options, or as environment variables in your"
+ puts "shell."
+ puts ""
+ puts "NOTE: The tests will not work properly if serverAddress is set to"
+ puts "\"localhost\" or 127.0.0.1."
+ puts ""
+ puts "When you invoke tcltest to run the tests, set the variables"
+ puts "remoteServerPort to $serverPort and remoteServerIP to"
+ puts "[info hostname]. You can set these as environment variables"
+ puts "from the shell. The tests will not work properly if you set"
+ puts "remoteServerIP to \"localhost\" or 127.0.0.1."
+ puts ""
+ puts -nonewline "Type Ctrl-C to terminate--> "
+ flush stdout
+}
+
+if {[catch {set serverSocket \
+ [socket -myaddr $serverAddress -server __accept__ $serverPort]} msg]} {
+ puts "Server on $serverAddress:$serverPort cannot start: $msg"
+} else {
+ vwait __server_wait_variable__
+}
diff --git a/tests/rename.test b/tests/rename.test
index 0484108..6956cf0 100644
--- a/tests/rename.test
+++ b/tests/rename.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) rename.test 1.21 97/12/08 15:04:05
+# RCS: @(#) $Id: rename.test,v 1.1.2.2 1998/09/24 23:59:35 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/resource.test b/tests/resource.test
index e815ef8..840443c 100644
--- a/tests/resource.test
+++ b/tests/resource.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) resource.test 1.8 97/11/06 12:36:32
+# RCS: @(#) $Id: resource.test,v 1.1.2.1 1998/09/24 23:59:35 stanton Exp $
# Only run this test on Macintosh systems
if {$tcl_platform(platform) != "macintosh"} {
diff --git a/tests/safe.test b/tests/safe.test
index 36fcbd2..4ca857a 100644
--- a/tests/safe.test
+++ b/tests/safe.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) safe.test 1.35 97/12/08 15:06:30
+# RCS: @(#) $Id: safe.test,v 1.1.2.2 1998/09/24 23:59:35 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/scan.test b/tests/scan.test
index c9e204c..e343742 100644
--- a/tests/scan.test
+++ b/tests/scan.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) scan.test 1.31 98/01/05 15:24:00
+# RCS: @(#) $Id: scan.test,v 1.1.2.2 1998/09/24 23:59:35 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/set-old.test b/tests/set-old.test
index f77709b..78a5005 100644
--- a/tests/set-old.test
+++ b/tests/set-old.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) set-old.test 1.25 97/12/16 13:35:36
+# RCS: @(#) $Id: set-old.test,v 1.1.2.2 1998/09/24 23:59:35 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -474,6 +474,29 @@ test set-old-8.37 {array command, set option} {
array set aVaRnAmE {}
list [info exists aVaRnAmE] [catch {set aVaRnAmE} msg] $msg
} {1 1 {can't read "aVaRnAmE": variable is array}}
+test set-old-8.37.1 {array command, set scalar} {
+ catch {unset aVaRnAmE}
+ set aVaRnAmE 1
+ list [catch {array set aVaRnAmE {}} msg] $msg
+} {1 {can't array set "aVaRnAmE": variable isn't array}}
+test set-old-8.37.2 {array command, set alias} {
+ catch {unset aVaRnAmE}
+ upvar 0 aVaRnAmE anAliAs
+ array set anAliAs {}
+ list [array exists aVaRnAmE] [catch {set anAliAs} msg] $msg
+} {1 1 {can't read "anAliAs": variable is array}}
+test set-old-8.37.3 {array command, set element alias} {
+ catch {unset aVaRnAmE}
+ list [catch {upvar 0 aVaRnAmE(elem) elemAliAs}] \
+ [catch {array set elemAliAs {}} msg] $msg
+} {0 1 {can't array set "elemAliAs": variable isn't array}}
+test set-old-8.37.4 {array command, empty set with populated array} {
+ catch {unset aVaRnAmE}
+ array set aVaRnAmE [list e1 v1 e2 v2]
+ array set aVaRnAmE {}
+ array set aVaRnAmE [list e3 v3]
+ list [lsort [array names aVaRnAmE]] [catch {set aVaRnAmE(e2)} msg] $msg
+} {{e1 e2 e3} 0 v2}
test set-old-8.38 {array command, size option} {
catch {unset a}
array size a
diff --git a/tests/set.test b/tests/set.test
index 1b138d2..03c1492 100644
--- a/tests/set.test
+++ b/tests/set.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) set.test 1.9 97/12/16 13:35:44
+# RCS: @(#) $Id: set.test,v 1.1.2.2 1998/09/24 23:59:36 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/socket.test b/tests/socket.test
index 30a3746..67e6d46 100644
--- a/tests/socket.test
+++ b/tests/socket.test
@@ -59,7 +59,7 @@
# listening at port 2048. If all fails, a message is printed and the tests
# using the remote server are not performed.
#
-# SCCS: @(#) socket.test 1.86 98/01/02 17:33:48
+# RCS: @(#) $Id: socket.test,v 1.1.2.2 1998/09/24 23:59:36 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -534,6 +534,34 @@ test socket-2.10 {close on accept, accepted socket lives} {
after cancel $timer
set done
} 1
+test socket-2.11 {detecting new data} {
+ proc accept {s a p} {
+ global sock
+ set sock $s
+ }
+
+ set s [socket -server accept 2400]
+ set sock ""
+ set s2 [socket localhost 2400]
+ vwait sock
+ puts $s2 one
+ flush $s2
+ after 500
+ fconfigure $sock -blocking 0
+ set result [gets $sock]
+ lappend result [gets $sock]
+ fconfigure $sock -blocking 1
+ puts $s2 two
+ flush $s2
+ fconfigure $sock -blocking 0
+ lappend result [gets $sock]
+ fconfigure $sock -blocking 1
+ close $s2
+ close $s
+ close $sock
+ set result
+} {one {} two}
+
test socket-3.1 {socket conflict} {stdio} {
removeFile script
diff --git a/tests/source.test b/tests/source.test
index c2ed57a..21c92f2 100644
--- a/tests/source.test
+++ b/tests/source.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) source.test 1.30 98/01/05 16:17:37
+# RCS: @(#) $Id: source.test,v 1.1.2.2 1998/09/24 23:59:36 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/split.test b/tests/split.test
index a57c714..d8a85bf 100644
--- a/tests/split.test
+++ b/tests/split.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) split.test 1.10 97/07/07 16:30:07
+# RCS: @(#) $Id: split.test,v 1.1.2.1 1998/09/24 23:59:37 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/string.test b/tests/string.test
index 6643d4f..5fd4352 100644
--- a/tests/string.test
+++ b/tests/string.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) string.test 1.15 97/07/02 16:49:27
+# RCS: @(#) $Id: string.test,v 1.1.2.1 1998/09/24 23:59:37 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/stringObj.test b/tests/stringObj.test
index a4efc8b..4d1e841 100644
--- a/tests/stringObj.test
+++ b/tests/stringObj.test
@@ -11,7 +11,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# @(#) stringObj.test 1.9 97/12/08 15:06:42
+# RCS: @(#) $Id: stringObj.test,v 1.1.2.2 1998/09/24 23:59:38 stanton Exp $
if {[info commands testobj] == {}} {
puts "This application hasn't been compiled with the \"testobj\""
diff --git a/tests/subst.test b/tests/subst.test
index 41afa48..fca58c4 100644
--- a/tests/subst.test
+++ b/tests/subst.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) subst.test 1.10 97/12/08 15:04:29
+# RCS: @(#) $Id: subst.test,v 1.1.2.2 1998/09/24 23:59:38 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/switch.test b/tests/switch.test
index d272836..cf5fec9 100644
--- a/tests/switch.test
+++ b/tests/switch.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) switch.test 1.8 97/12/08 15:04:33
+# RCS: @(#) $Id: switch.test,v 1.1.2.2 1998/09/24 23:59:38 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/timer.test b/tests/timer.test
index 1372ffa..0cb4f4d 100644
--- a/tests/timer.test
+++ b/tests/timer.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) timer.test 1.4 97/12/08 15:06:49
+# RCS: @(#) $Id: timer.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/trace.test b/tests/trace.test
index 3a80f08..84bb205 100644
--- a/tests/trace.test
+++ b/tests/trace.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) trace.test 1.29 97/12/08 15:04:36
+# RCS: @(#) $Id: trace.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/unixFCmd.test b/tests/unixFCmd.test
index 2f3fe9e..b8c6711 100644
--- a/tests/unixFCmd.test
+++ b/tests/unixFCmd.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) unixFCmd.test 1.17 97/12/08 15:05:53
+# RCS: @(#) $Id: unixFCmd.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -91,7 +91,26 @@ test unixFCmd-1.7 {TclpRenameFile: EXDEV} {
catch {file delete -force foo}
set result
} {1}
-
+test unixFCmd-1.8 {Checking EINTR Bug} nonPortable {
+ testalarm
+ after 2000
+ list [testgotsig] [testgotsig]
+} {1 0}
+test unixFCmd-1.9 {Checking EINTR Bug} nonPortable {
+ cleanup
+ set f [open tfalarm w]
+ puts $f {
+ after 2000
+ puts "hello world"
+ exit 0
+ }
+ close $f
+ testalarm
+ set pipe [open "|[info nameofexecutable] tfalarm" r+]
+ set line [read $pipe 1]
+ catch {close $pipe}
+ list $line [testgotsig]
+} {h 1}
test unixFCmd-2.1 {TclpCopyFile: target exists: lstat(dst) == 0} {
cleanup
exec touch tf1
diff --git a/tests/unixFile.test b/tests/unixFile.test
new file mode 100644
index 0000000..e94ed90
--- /dev/null
+++ b/tests/unixFile.test
@@ -0,0 +1,66 @@
+# This file contains tests for the routines in the file tclUnixFile.c
+#
+# This file contains a collection of tests for one or more of the Tcl
+# built-in commands. Sourcing this file into Tcl runs the tests and
+# generates output for errors. No output means no errors were found.
+#
+# Copyright (c) 1998 by Scriptics Corporation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: unixFile.test,v 1.1.2.1 1998/09/24 23:59:39 stanton Exp $
+
+
+if {[string compare test [info procs test]] == 1} then {source defs}
+
+if {[info commands testobj] == {}} {
+ puts "This application hasn't been compiled with the \"testfindexecutable\""
+ puts "command, so I can't test the Tcl_FindExecutable function"
+ return
+}
+
+if {$tcl_platform(platform) != "unix"} {
+ return
+}
+
+
+set oldPath $env(PATH)
+close [open junk w]
+file attributes junk -perm 0777
+
+set absPath [file join [pwd] junk]
+test unixFile-1.1 {Tcl_FindExecutable} {
+ set env(PATH) ""
+ testfindexecutable junk
+} $absPath
+test unixFile-1.2 {Tcl_FindExecutable} {
+ set env(PATH) "/dummy"
+ testfindexecutable junk
+} {}
+test unixFile-1.3 {Tcl_FindExecutable} {
+ set env(PATH) "/dummy:[pwd]"
+ testfindexecutable junk
+} $absPath
+test unixFile-1.4 {Tcl_FindExecutable} {
+ set env(PATH) "/dummy:"
+ testfindexecutable junk
+} $absPath
+test unixFile-1.5 {Tcl_FindExecutable} {
+ set env(PATH) "/dummy:/dummy"
+ testfindexecutable junk
+} {}
+test unixFile-1.6 {Tcl_FindExecutable} {
+ set env(PATH) "/dummy::/dummy"
+ testfindexecutable junk
+} $absPath
+test unixFile-1.7 {Tcl_FindExecutable} {
+ set env(PATH) ":/dummy"
+ testfindexecutable junk
+} $absPath
+
+
+
+
+set env(PATH) $oldPath
+file delete junk
diff --git a/tests/unixNotfy.test b/tests/unixNotfy.test
index 262131f..da92085 100644
--- a/tests/unixNotfy.test
+++ b/tests/unixNotfy.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) unixNotfy.test 1.7 98/02/17 23:45:12
+# RCS: @(#) $Id: unixNotfy.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -47,4 +47,5 @@ test unixNotfy-1.2 {Tcl_DeleteFileHandler} {
} {1 {can't wait for variable "x": would wait forever}}
file delete foo
+file delete foo2
return
diff --git a/tests/unknown.test b/tests/unknown.test
index 0fbc04a..ba9fc68 100644
--- a/tests/unknown.test
+++ b/tests/unknown.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) unknown.test 1.13 97/12/08 15:04:40
+# RCS: @(#) $Id: unknown.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/uplevel.test b/tests/uplevel.test
index 3aedf59..f9d11ce 100644
--- a/tests/uplevel.test
+++ b/tests/uplevel.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) uplevel.test 1.14 97/12/08 15:04:43
+# RCS: @(#) $Id: uplevel.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/upvar.test b/tests/upvar.test
index 8b556d9..cc934cd 100644
--- a/tests/upvar.test
+++ b/tests/upvar.test
@@ -10,7 +10,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) upvar.test 1.16 97/12/08 15:04:46
+# RCS: @(#) $Id: upvar.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -327,6 +327,11 @@ test upvar-8.9 {upvar won't create namespace variable that refers to procedure v
}
list [catch {MakeLink 1} msg] $msg
} {1 {bad variable name "a": upvar won't create namespace variable that refers to procedure variable}}
+test upvar-8.10 {upvar will create element alias for new array element} {
+ catch {unset upvarArray}
+ array set upvarArray {}
+ catch {upvar 0 upvarArray(elem) upvarArrayElemAlias}
+} {0}
if {[info commands testupvar] != {}} {
test upvar-9.1 {Tcl_UpVar2 procedure} {
diff --git a/tests/util.test b/tests/util.test
index c24ada7..bf29134 100644
--- a/tests/util.test
+++ b/tests/util.test
@@ -6,7 +6,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) util.test 1.13 98/01/16 23:30:07
+# RCS: @(#) $Id: util.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
if {[info commands testobj] == {}} {
puts "This application hasn't been compiled with the \"testobj\""
diff --git a/tests/var.test b/tests/var.test
index 9c10ed7..f90a4f2 100644
--- a/tests/var.test
+++ b/tests/var.test
@@ -13,7 +13,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) var.test 1.12 98/02/05 20:22:48
+# RCS: @(#) $Id: var.test,v 1.1.2.2 1998/09/24 23:59:39 stanton Exp $
#
if {[string compare test [info procs test]] == 1} then {source defs}
@@ -407,6 +407,10 @@ test var-8.1 {TclDeleteVars, "unset" traces are called with fully-qualified var
list [unset test_ns_var::v] $test_ns_var::info
} {{} {test_ns_var::v {} u}}
+if {[info commands testsetnoerr] == {}} {
+ puts "This application hasn't been compiled with the \"testsetnoerr\""
+ puts "command, so I can't test TclSetVar etc."
+} else {
test var-9.1 {behaviour of TclSetVar without TCL_LEAVE_ERR_MSG flag} {
testsetnoerr v 1
} 1
diff --git a/tests/while-old.test b/tests/while-old.test
index 478aac9..49d849c 100644
--- a/tests/while-old.test
+++ b/tests/while-old.test
@@ -12,7 +12,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) while-old.test 1.15 97/12/08 15:06:17
+# RCS: @(#) $Id: while-old.test,v 1.1.2.2 1998/09/24 23:59:40 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/while.test b/tests/while.test
index 8eba9bd..e9a0ba6 100644
--- a/tests/while.test
+++ b/tests/while.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) @(#) while.test 1.12 97/12/16 13:36:19
+# RCS: @(#) $Id: while.test,v 1.1.2.2 1998/09/24 23:59:40 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/winFCmd.test b/tests/winFCmd.test
index 651ffc0..5f1477a 100644
--- a/tests/winFCmd.test
+++ b/tests/winFCmd.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) winFCmd.test 1.17 98/02/11 17:37:01
+# RCS: @(#) $Id: winFCmd.test,v 1.1.2.2 1998/09/24 23:59:40 stanton Exp $
#
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/winNotify.test b/tests/winNotify.test
index 2ae6b94..28429f9 100644
--- a/tests/winNotify.test
+++ b/tests/winNotify.test
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) winNotify.test 1.3 97/12/08 15:06:52
+# RCS: @(#) $Id: winNotify.test,v 1.1.2.2 1998/09/24 23:59:40 stanton Exp $
if {[string compare test [info procs test]] == 1} then {source defs}
diff --git a/tests/winPipe.test b/tests/winPipe.test
index a732343..f8d0192 100644
--- a/tests/winPipe.test
+++ b/tests/winPipe.test
@@ -11,7 +11,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) winPipe.test 1.15 97/12/22 18:13:59
+# RCS: @(#) $Id: winPipe.test,v 1.1.2.2 1998/09/24 23:59:40 stanton Exp $
if {($tcl_platform(platform) != "windows") || ($testConfig(stdio) == 0)} {
return
@@ -366,6 +366,17 @@ test winpipe-5.2 {PipeSetupProc & PipeCheckProc: write threads} {
}
+makeFile {
+ puts "[list $argv0 $argv]"
+} echoArgs.tcl
+
+test winpipe-4.1 {BuildCommandLine: null arguments} {
+ exec $tcltest echoArgs.tcl foo "" bar
+} {echoArgs.tcl {foo {} bar}}
+test winpipe-4.1 {BuildCommandLine: null arguments} {
+ exec $tcltest echoArgs.tcl foo \" bar
+} {echoArgs.tcl {foo {"} bar}}
+
# restore old values for env(TMP) and env(TEMP)
if {[catch {set env(TMP) $env_tmp}]} {
@@ -375,5 +386,5 @@ if {[catch {set env(TEMP) $env_temp}]} {
unset env(TEMP)
}
-file delete big little stdout stderr nothing cat
+file delete big little stdout stderr nothing
return
diff --git a/tools/Makefile.in b/tools/Makefile.in
index b0f2fc8..8de979f 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -6,14 +6,18 @@
#
# HTML: 1. Build the html target on Unix
-# SCCS: @(#) Makefile.in 1.2 97/01/28 18:58:31
+# RCS: @(#) $Id: Makefile.in,v 1.1.2.2 1998/09/24 23:59:40 stanton Exp $
-TCL = tcl@TCL_VERSION@@TCL_PATCH_LEVEL@
-TK = tk@TCL_VERSION@@TCL_PATCH_LEVEL@
+#TCL = tcl@TCL_VERSION@@TCL_PATCH_LEVEL@
+#TK = tk@TCL_VERSION@@TCL_PATCH_LEVEL@
+TCL = tcl@TCL_VERSION@
+TK = tk@TCL_VERSION@
VER=@TCL_WIN_VERSION@
TCL_SOURCE = @srcdir@/..
TK_SOURCE = @srcdir@/../../$(TK)
+PRO_SOURCE = @srcdir@/../../pro
+ITCL_SOURCE = @srcdir@/../../itcl3.0.1
TCL_DOCS = \
$(TCL_SOURCE)/doc/*.[13n]
@@ -21,29 +25,42 @@ TCL_DOCS = \
TK_DOCS = \
$(TK_SOURCE)/doc/*.[13n]
+PRO_DOCS = \
+ $(PRO_SOURCE)/doc/man/*.[13n]
+
+ITCL_DOCS = \
+ $(ITCL_SOURCE)/itcl/doc/*.[13n] \
+ $(ITCL_SOURCE)/itk/doc/*.[13n]
+
+# $(ITCL_SOURCE)/iwidgets3.0.0/doc/*.[13n]
+
+COREDOCS = $(TCL_DOCS) $(TK_DOCS)
+PRODOCS = $(COREDOCS) $(PRO_DOCS) $(ITCL_DOCS)
TCLSH = $(TCL_SOURCE)/unix/tclsh
+CC=@CC@
+
+all: core
+pro:
+ $(MAKE) PRODOCS="$(PRODOCS)" VER="" rtf
-all: winhelp
+core:
+ $(MAKE) DOCS="$(COREDOCS)" rtf
+
+rtf: man2help.tcl man2tcl $(DOCS)
+ LD_LIBRARY_PATH=$(TCL_SOURCE)/unix \
+ $(TCLSH) man2help.tcl tcl "$(VER)" $(DOCS)
winhelp: tcl.rtf
-html: tcl$(VER).html
man2tcl: man2tcl.c
$(CC) $(CFLAGS) -o man2tcl man2tcl.c
-tcl.rtf: man2help.tcl man2tcl $(TCL_DOCS) $(TK_DOCS)
- $(TCLSH) man2help.tcl tcl $(VER) \
- $(TCL_SOURCE)/doc $(TK_SOURCE)/doc
-
-tcl$(VER).html: man2html.tcl man2tcl $(TCL_DOCS) $(TK_DOCS)
- $(TCLSH) man2html.tcl tcl$(VER).html \
- ../.. ${TCL} ${TK}
-
clean:
- -rm -f man2tcl *.o tcl$(VER).cnt tcl$(VER).rtf
+ -rm -f man2tcl *.o *.cnt *.rtf
helpfile:
- hc31 tcl.hpj
- mv tcl.hlp tcl$(VER).hlp
+ hcw /c tcl.hpj
+
+# mv tcl.hlp tcl$(VER).hlp
diff --git a/tools/configure.in b/tools/configure.in
index 824773a..70a4d86 100644
--- a/tools/configure.in
+++ b/tools/configure.in
@@ -2,7 +2,7 @@ dnl This file is an input file used by the GNU "autoconf" program to
dnl generate the file "configure", which is run to configure the
dnl Makefile in this directory.
AC_INIT(man2tcl.c)
-# SCCS: @(#) configure.in 1.2 97/01/28 18:58:48
+# RCS: @(#) $Id: configure.in,v 1.1.2.2 1998/09/24 23:59:40 stanton Exp $
# Recover information that Tcl computed with its configure script.
diff --git a/tools/index.tcl b/tools/index.tcl
index 1a9c437..e620316 100644
--- a/tools/index.tcl
+++ b/tools/index.tcl
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) index.tcl 1.2 96/10/17 14:44:16
+# RCS: @(#) $Id: index.tcl,v 1.1.2.2 1998/09/24 23:59:41 stanton Exp $
#
# Global variables used by these scripts:
@@ -55,6 +55,7 @@ proc getPackages {} {
proc getSections {pkg} {
global topics
+ regsub -all {[][*?\\]} $pkg {\\&} pkg
foreach i [array names topics "${pkg},*"] {
regsub {^.*,(.*),.*$} $i {\1} i
set temp($i) {}
@@ -73,6 +74,8 @@ proc getSections {pkg} {
proc getTopics {pkg sect} {
global topics
+ regsub -all {[][*?\\]} $pkg {\\&} pkg
+ regsub -all {[][*?\\]} $sect {\\&} sect
foreach i [array names topics "${pkg},${sect},*"] {
regsub {^.*,.*,(.*)$} $i {\1} i
set temp($i) {}
@@ -157,6 +160,7 @@ proc macro {name args} {
set topic [lindex $args 0] ;# Tcl_UpVar
set curPkg [lindex $args 3] ;# Tcl
set curSect [lindex $args 4] ;# {Tcl Library Procedures}
+ regsub -all {\\ } $curSect { } curSect
set index "$curPkg,$curSect,$topic"
set topics($index) $curID
lappend keywords($topic) $curID
diff --git a/tools/man2help.tcl b/tools/man2help.tcl
index 4983026..f36965e 100644
--- a/tools/man2help.tcl
+++ b/tools/man2help.tcl
@@ -6,7 +6,7 @@
#
# Copyright (c) 1996 by Sun Microsystems, Inc.
#
-# SCCS: @(#) man2help.tcl 1.2 97/01/28 18:58:20
+# RCS: @(#) $Id: man2help.tcl,v 1.1.2.2 1998/09/24 23:59:41 stanton Exp $
#
#
diff --git a/tools/man2help2.tcl b/tools/man2help2.tcl
index 6f16dd5..727f817 100644
--- a/tools/man2help2.tcl
+++ b/tools/man2help2.tcl
@@ -9,7 +9,7 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) man2help2.tcl 1.7 98/01/22 16:51:45
+# RCS: @(#) $Id: man2help2.tcl,v 1.1.2.2 1998/09/24 23:59:41 stanton Exp $
#
# Global variables used by these scripts:
@@ -173,7 +173,7 @@ proc text {string} {
SEE {
global topics curPkg curSect
foreach i [split $string] {
- if ![regexp -nocase {^[a-z_]+} [string trim $i] i ] {
+ if ![regexp -nocase {^[a-z_0-9]+} [string trim $i] i ] {
continue
}
if ![catch {set ref $topics($curPkg,$curSect,$i)} ] {
@@ -439,6 +439,7 @@ proc font {type} {
set state(textState) INSERT
}
}
+ C -
B {
beginFont Code
if {$state(textState) == "INSERT"} {
@@ -627,6 +628,10 @@ proc char {name} {
\\o {
set state(intl) 1
}
+ \\\ {
+ textSetup
+ puts -nonewline $file " "
+ }
\\0 {
textSetup
puts -nonewline $file " \\emspace "
@@ -642,6 +647,10 @@ proc char {name} {
\\% -
\\| {
}
+ \\(bu {
+ textSetup
+ puts -nonewline $file "·"
+ }
default {
puts stderr "Unknown character: $name"
}
@@ -751,6 +760,7 @@ proc IPmacro {argList} {
set count [lindex $argList 1]
set tab [expr $count * 0.1]i
newPara $tab -$tab
+ textSetup
setTabs $tab
formattedText [lindex $argList 0]
tab
@@ -816,6 +826,8 @@ proc THmacro {argList} {
set vers [lindex $argList 2] ;# 7.4
set curPkg [lindex $argList 3] ;# Tcl
set curSect [lindex $argList 4] ;# {Tcl Library Procedures}
+
+ regsub -all {\\ } $curSect { } curSect ;# Clean up for [incr\ Tcl]
puts $file "#{\\footnote $curID}" ;# Context string
puts $file "\${\\footnote $name}" ;# Topic title
diff --git a/tools/man2tcl.c b/tools/man2tcl.c
index 7384065..850c1c2 100644
--- a/tools/man2tcl.c
+++ b/tools/man2tcl.c
@@ -15,6 +15,8 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id: man2tcl.c,v 1.1.2.2 1998/09/24 23:59:41 stanton Exp $
*/
static char sccsid[] = "@(#) man2tcl.c 1.3 95/08/12 17:34:08";
diff --git a/tools/tcl.hpj b/tools/tcl.hpj
index 9e58351..9797d1b 100644
--- a/tools/tcl.hpj
+++ b/tools/tcl.hpj
@@ -1,14 +1,20 @@
+; This file is maintained by HCW. Do not modify this file directly.
+
[OPTIONS]
+HCW=0
+LCID=0x409 0x0 0x0 ;English (United States)
REPORT=Yes
-TITLE=Tcl/Tk Reference Manual
CONTENTS=contents
-COPYRIGHT=Copyright © 1996-1997 Sun Microsystems, Inc.
+TITLE=Tcl/Tk Reference Manual
+CNT=.\tcl80.cnt
+COPYRIGHT=Copyright © 1998 Scriptics Corporation
+HLP=.\tcl80.hlp
[FILES]
.\tcl.rtf
[WINDOWS]
-main="Tcl/Tk Reference Manual",,0,,,0
+main="Tcl/Tk Reference Manual",,0
[CONFIG]
BrowseButtons()
diff --git a/unix/Makefile.in b/unix/Makefile.in
index e5d440f..1874285 100644
--- a/unix/Makefile.in
+++ b/unix/Makefile.in
@@ -5,7 +5,7 @@
# "autoconf" program (constructs like "@foo@" will get replaced in the
# actual Makefile.
#
-# SCCS: @(#) Makefile.in 1.214 98/02/23 17:10:26
+# RCS: @(#) $Id: Makefile.in,v 1.1.2.2 1998/09/24 23:59:42 stanton Exp $
# Current Tcl version; used in various names.
@@ -71,9 +71,23 @@ MAN3_INSTALL_DIR = $(MAN_INSTALL_DIR)/man3
# Tcl commands:
MANN_INSTALL_DIR = $(MAN_INSTALL_DIR)/mann
-# To change the compiler switches, for example to change from -O
-# to -g, change the following line:
-CFLAGS = -O
+# Libraries built with optimization switches have this additional extension
+TCL_DBGX = @TCL_DBGX@
+
+# warning flags
+CFLAGS_WARNING = @CFLAGS_WARNING@
+
+# The default switches for optimization or debugging
+CFLAGS_DEBUG = @CFLAGS_DEBUG@
+CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@
+
+# To change the compiler switches, for example to change from optimization to
+# debugging symbols, change the following line:
+#CFLAGS = $(CFLAGS_DEBUG)
+#CFLAGS = $(CFLAGS_OPTIMIZE)
+#CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE)
+CFLAGS = $(@CFLAGS_DEFAULT@)
+
# To disable ANSI-C procedure prototypes reverse the comment characters
# on the following lines:
@@ -173,6 +187,9 @@ BUILD_DLTEST = @BUILD_DLTEST@
TCL_LIB_FILE = @TCL_LIB_FILE@
#TCL_LIB_FILE = libtcl.a
+TCL_LIB_FLAG = @TCL_LIB_FLAG@
+#TCL_LIB_FLAG = -ltcl
+
#----------------------------------------------------------------
# The information below is modified by the configure script when
# Makefile is generated from Makefile.in. You shouldn't normally
@@ -203,7 +220,8 @@ CC = @CC@
#----------------------------------------------------------------
-CC_SWITCHES = ${CFLAGS} ${TCL_SHLIB_CFLAGS} -I${GENERIC_DIR} -I${SRC_DIR} \
+CC_SWITCHES = ${CFLAGS} ${CFLAGS_WARNING} ${TCL_SHLIB_CFLAGS} \
+-I${GENERIC_DIR} -I${SRC_DIR} \
${AC_FLAGS} ${MATH_FLAGS} ${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
${COMPILE_DEBUG_FLAGS} ${NO_DEPRECATED_FLAGS} ${ENV_FLAGS} \
-DTCL_SHLIB_EXT=\"${SHLIB_SUFFIX}\"
@@ -233,8 +251,8 @@ GENERIC_OBJS = compile.o exec.o panic.o \
tclLiteral.o tclLoad.o tclMain.o tclNamesp.o tclNotify.o \
tclObj.o tclParse.o tclParseExpr.o tclPipe.o \
tclPkg.o tclPosixStr.o tclPreserve.o tclProc.o tclRegexp.o \
- tclResult.o tclStringObj.o tclThread.o tclTimer.o tclUtf.o tclUtil.o \
- tclVar.o
+ tclResolve.o tclResult.o tclStringObj.o tclThread.o tclTimer.o \
+ tclUtf.o tclUtil.o tclVar.o
OBJS = ${GENERIC_OBJS} ${UNIX_OBJS} ${NOTIFY_OBJS} ${COMPAT_OBJS} @DL_OBJS@
@@ -291,6 +309,7 @@ GENERIC_SRCS = \
$(GENERIC_DIR)/tclPreserve.c \
$(GENERIC_DIR)/tclProc.c \
$(GENERIC_DIR)/tclRegexp.c \
+ $(GENERIC_DIR)/tclResolve.c \
$(GENERIC_DIR)/tclResult.c \
$(GENERIC_DIR)/tclStringObj.c \
$(GENERIC_DIR)/tclTest.c \
@@ -376,12 +395,14 @@ xttest: ${XTTEST_OBJS} ${GENERIC_OBJS} ${UNIX_OBJS} ${COMPAT_OBJS} \
test: tcltest
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
+ SHLIB_PATH=`pwd`:${SHLIB_PATH}; export SHLIB_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
( echo cd $(TOP_DIR)/tests\; source all ) | ./tcltest
# Useful target to launch a built tcltest with the proper path,...
runtest:
LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; \
+ SHLIB_PATH=`pwd`:${SHLIB_PATH}; export SHLIB_PATH; \
TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}"; export TCL_LIBRARY; \
./tcltest
@@ -404,7 +425,7 @@ topDirName:
gendate:
yacc -l $(GENERIC_DIR)/tclGetDate.y
sed -e 's/yy/TclDate/g' -e '/^#include <values.h>/d' \
- -e 's/SCCSID/%Z\% %M\% %I\% %E\% %U\%/g' \
+ -e "s/SCCSID/RCS: @(#) \$Id\$"
-e '/#ifdef __STDC__/,/#endif/d' -e '/TclDateerrlab:/d' \
-e '/TclDatenewstate:/d' -e '/#pragma/d' \
<y.tab.c >$(GENERIC_DIR)/tclDate.c
@@ -541,7 +562,7 @@ clean:
distclean: clean
rm -rf Makefile config.status config.cache config.log tclConfig.sh \
- SUNWtcl.* prototype
+ $(PACKAGE).* prototype
if test -f dltest/Makefile; then cd dltest; $(MAKE) distclean; fi
depend:
@@ -752,6 +773,9 @@ tclProc.o: $(GENERIC_DIR)/tclProc.c
tclRegexp.o: $(GENERIC_DIR)/tclRegexp.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclRegexp.c
+tclResolve.o: $(GENERIC_DIR)/tclResolve.c
+ $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclResolve.c
+
tclResult.o: $(GENERIC_DIR)/tclResult.c
$(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclResult.c
@@ -876,9 +900,10 @@ checkexports: $(TCL_LIB_FILE)
# to put the distribution.
#
+DISTROOT = /tmp/dist
DISTNAME = tcl@TCL_VERSION@@TCL_PATCH_LEVEL@
ZIPNAME = tcl@TCL_MAJOR_VERSION@@TCL_MINOR_VERSION@@TCL_PATCH_LEVEL@.zip
-DISTDIR = /proj/tcl/dist/$(DISTNAME)
+DISTDIR = $(DISTROOT)/$(DISTNAME)
$(UNIX_DIR)/configure: $(UNIX_DIR)/configure.in
autoconf $(UNIX_DIR)/configure.in > $(UNIX_DIR)/configure
dist: $(UNIX_DIR)/configure
@@ -886,7 +911,7 @@ dist: $(UNIX_DIR)/configure
mkdir $(DISTDIR)
mkdir $(DISTDIR)/unix
cp -p $(UNIX_DIR)/*.c $(UNIX_DIR)/*.h $(DISTDIR)/unix
- rm -f $(DISTDIR)/unix/bp.c $(DISTDIR)/unix/tclXtNotify.c
+ rm -f $(DISTDIR)/unix/bp.c
cp $(UNIX_DIR)/Makefile.in $(DISTDIR)/unix
chmod 664 $(DISTDIR)/unix/Makefile.in
cp $(UNIX_DIR)/configure $(UNIX_DIR)/configure.in \
@@ -904,7 +929,7 @@ dist: $(UNIX_DIR)/configure
cp -p $(GENERIC_DIR)/*.c $(GENERIC_DIR)/*.h $(DISTDIR)/generic
cp -p $(GENERIC_DIR)/README $(DISTDIR)/generic
cp -p $(GENERIC_DIR)/tclGetDate.y $(DISTDIR)/generic
- cp -p $(TOP_DIR)/changes $(TOP_DIR)/README $(TOP_DIR)/license.terms \
+ cp -p $(TOP_DIR)/changes $(TOP_DIR)/README* $(TOP_DIR)/license.terms \
$(DISTDIR)
mkdir $(DISTDIR)/library
cp -p $(TOP_DIR)/license.terms $(TOP_DIR)/library/*.tcl \
@@ -926,20 +951,21 @@ dist: $(UNIX_DIR)/configure
mkdir $(DISTDIR)/tests
cp -p $(TOP_DIR)/license.terms $(DISTDIR)/tests
cp -p $(TOP_DIR)/tests/*.test $(TOP_DIR)/tests/README \
- $(TOP_DIR)/tests/all $(TOP_DIR)/tests/remote.tcl \
+ $(TOP_DIR)/tests/all $(TOP_DIR)/tests/*.tcl \
$(TOP_DIR)/tests/defs $(TOP_DIR)/tests/httpd $(DISTDIR)/tests
mkdir $(DISTDIR)/win
cp -p $(TOP_DIR)/win/*.c $(TOP_DIR)/win/*.h $(TOP_DIR)/win/*.rc \
$(DISTDIR)/win
+ cp -p $(TOP_DIR)/win/*.bat $(DISTDIR)/win
cp -p $(TOP_DIR)/win/makefile.* $(DISTDIR)/win
cp -p $(TOP_DIR)/win/README $(DISTDIR)/win
cp -p $(TOP_DIR)/win/pkgIndex.tcl $(DISTDIR)/win
cp -p $(TOP_DIR)/license.terms $(DISTDIR)/win
mkdir $(DISTDIR)/mac
- sccs edit -s $(TOP_DIR)/mac/tclMacProjects.sit.hqx
- cp -p tclMacProjects.sit.hqx $(DISTDIR)/mac
- sccs unedit $(TOP_DIR)/mac/tclMacProjects.sit.hqx
- rm -f tclMacProjects.sit.hqx
+ sccs edit -s $(TOP_DIR)/mac/tclMacProjects.sea.hqx
+ cp -p tclMacProjects.sea.hqx $(DISTDIR)/mac
+ sccs unedit $(TOP_DIR)/mac/tclMacProjects.sea.hqx
+ rm -f tclMacProjects.sea.hqx
cp -p $(TOP_DIR)/mac/*.c $(TOP_DIR)/mac/*.h $(TOP_DIR)/mac/*.r \
$(DISTDIR)/mac
cp -p $(TOP_DIR)/mac/porting.notes $(TOP_DIR)/mac/README $(DISTDIR)/mac
@@ -965,10 +991,10 @@ dist: $(UNIX_DIR)/configure
#
alldist: dist
- rm -f $(DISTDIR)/../$(DISTNAME).tar.Z \
- $(DISTDIR)/../$(DISTNAME).tar.gz \
- $(DISTDIR)/../$(ZIPNAME)
- cd $(DISTDIR)/..; tar cf $(DISTNAME).tar $(DISTNAME); \
+ rm -f $(DISTROOT)/$(DISTNAME).tar.Z \
+ $(DISTROOT)/$(DISTNAME).tar.gz \
+ $(DISTROOT)/$(ZIPNAME)
+ cd $(DISTROOT); tar cf $(DISTNAME).tar $(DISTNAME); \
gzip -9 -c $(DISTNAME).tar > $(DISTNAME).tar.gz; \
compress $(DISTNAME).tar; zip -r8 $(ZIPNAME) $(DISTNAME)
@@ -981,16 +1007,16 @@ alldist: dist
#
allpatch: dist
- rm -f /proj/tcl/dist/$(DISTNAME).tar.Z \
- /proj/tcl/dist/$(DISTNAME).tar.gz \
- /proj/tcl/dist/$(ZIPNAME)
- mv /proj/tcl/dist/tcl${VERSION} /proj/tcl/dist/old
- mv /proj/tcl/dist/$(DISTNAME) /proj/tcl/dist/tcl${VERSION}
- cd /proj/tcl/dist; tar cf $(DISTNAME).tar tcl${VERSION}; \
+ rm -f $(DISTROOT)/$(DISTNAME).tar.Z \
+ $(DISTROOT)/$(DISTNAME).tar.gz \
+ $(DISTROOT)/$(ZIPNAME)
+ mv $(DISTROOT)/tcl${VERSION} $(DISTROOT)/old
+ mv $(DISTROOT)/$(DISTNAME) $(DISTROOT)/tcl${VERSION}
+ cd $(DISTROOT); tar cf $(DISTNAME).tar tcl${VERSION}; \
gzip -9 -c $(DISTNAME).tar > $(DISTNAME).tar.gz; \
compress $(DISTNAME).tar; zip -r8 $(ZIPNAME) tcl${VERSION}
- mv /proj/tcl/dist/tcl${VERSION} /proj/tcl/dist/$(DISTNAME)
- mv /proj/tcl/dist/old /proj/tcl/dist/tcl${VERSION}
+ mv $(DISTROOT)/tcl${VERSION} $(DISTROOT)/$(DISTNAME)
+ mv $(DISTROOT)/old $(DISTROOT)/tcl${VERSION}
#
# This target creates the HTML folder for Tcl & Tk and places it
@@ -1002,7 +1028,7 @@ allpatch: dist
html:
tclsh $(TOOL_DIR)/tcl8.1-tk8.1-man-html.tcl --htmldir=$(DISTDIR)/html
-
+
#
# Target to create a Macintosh version of the distribution. This will
# do a normal distribution and then massage the output to prepare it
@@ -1011,7 +1037,7 @@ html:
#
macdist: dist html
- rm -f $(DISTDIR)/mac/tclMacProjects.sit.hqx
+ rm -f $(DISTDIR)/mac/tclMacProjects.sea.hqx
rm -rf $(DISTDIR)/doc
tclsh $(TOOL_DIR)/cvtEOL.tcl $(DISTDIR)
@@ -1029,13 +1055,15 @@ macdist: dist html
# make DISTDIR=<distdir> package-quick
#
# <distdir> is the absolute path to a directory where the build should
-# take place. These steps will generate the SUNWtcl.sun4 and
-# SUNWtcl.i86pc stream packages. It is important that the packages be
+# take place. These steps will generate the $(PACKAGE).sun4 and
+# $(PACKAGE).i86pc stream packages. It is important that the packages be
# built in this fashion in order to ensure that the architecture
# independent files are exactly the same, including timestamps, in
# both packages.
#
+PACKAGE=SCRPtcl
+
package: dist package-config package-common package-binaries package-generate
package-quick: package-config package-binaries package-generate
@@ -1045,11 +1073,11 @@ package-quick: package-config package-binaries package-generate
package-config:
mkdir -p $(DISTDIR)/unix/`arch`
cd $(DISTDIR)/unix/`arch`; \
- ../configure --prefix=/opt/SUNWtcl/$(VERSION) \
- --exec_prefix=/opt/SUNWtcl/$(VERSION)/`arch` \
+ ../configure --prefix=/opt/$(PACKAGE)/$(VERSION) \
+ --exec_prefix=/opt/$(PACKAGE)/$(VERSION)/`arch` \
--enable-shared
- mkdir -p $(DISTDIR)/SUNWtcl/$(VERSION)
- mkdir -p $(DISTDIR)/SUNWtcl/$(VERSION)/`arch`
+ mkdir -p $(DISTDIR)/$(PACKAGE)/$(VERSION)
+ mkdir -p $(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch`
#
# Build and install the architecture independent files in the dist directory.
@@ -1058,13 +1086,13 @@ package-config:
package-common:
cd $(DISTDIR)/unix/`arch`;\
$(MAKE); \
- $(MAKE) prefix=$(DISTDIR)/SUNWtcl/$(VERSION) \
- exec_prefix=$(DISTDIR)/SUNWtcl/$(VERSION)/`arch` \
+ $(MAKE) prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION) \
+ exec_prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch` \
install-libraries install-man
- mkdir -p $(DISTDIR)/SUNWtcl/$(VERSION)/bin
+ mkdir -p $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin
sed -e "s/TCLVERSION/$(VERSION)/g" < $(UNIX_DIR)/tclsh.sh \
- > $(DISTDIR)/SUNWtcl/$(VERSION)/bin/tclsh$(VERSION)
- chmod 755 $(DISTDIR)/SUNWtcl/$(VERSION)/bin/tclsh$(VERSION)
+ > $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin/tclsh$(VERSION)
+ chmod 755 $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin/tclsh$(VERSION)
#
# Build and install the architecture specific files in the dist directory.
@@ -1073,8 +1101,8 @@ package-common:
package-binaries:
cd $(DISTDIR)/unix/`arch`; \
$(MAKE); \
- $(MAKE) install-binaries prefix=$(DISTDIR)/SUNWtcl/$(VERSION) \
- exec_prefix=$(DISTDIR)/SUNWtcl/$(VERSION)/`arch`
+ $(MAKE) install-binaries prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION) \
+ exec_prefix=$(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch`
#
# Generate a package from the installed files in the dist directory for the
@@ -1082,15 +1110,15 @@ package-binaries:
#
package-generate:
- pkgproto $(DISTDIR)/SUNWtcl/$(VERSION)/bin=bin \
- $(DISTDIR)/SUNWtcl/$(VERSION)/include=include \
- $(DISTDIR)/SUNWtcl/$(VERSION)/lib=lib \
- $(DISTDIR)/SUNWtcl/$(VERSION)/man=man \
- $(DISTDIR)/SUNWtcl/$(VERSION)/`arch`=`arch` \
+ pkgproto $(DISTDIR)/$(PACKAGE)/$(VERSION)/bin=bin \
+ $(DISTDIR)/$(PACKAGE)/$(VERSION)/include=include \
+ $(DISTDIR)/$(PACKAGE)/$(VERSION)/lib=lib \
+ $(DISTDIR)/$(PACKAGE)/$(VERSION)/man=man \
+ $(DISTDIR)/$(PACKAGE)/$(VERSION)/`arch`=`arch` \
| tclsh $(UNIX_DIR)/mkProto.tcl \
$(VERSION) $(UNIX_DIR) > prototype
pkgmk -o -d . -f prototype -a `arch`
- pkgtrans -s . SUNWtcl.`arch` SUNWtcl
- rm -rf SUNWtcl
+ pkgtrans -s . $(PACKAGE).`arch` $(PACKAGE)
+ rm -rf $(PACKAGE)
# DO NOT DELETE THIS LINE -- make depend depends on it.
diff --git a/unix/README b/unix/README
index 3725d49..5726706 100644
--- a/unix/README
+++ b/unix/README
@@ -12,7 +12,7 @@ SGI, as well as PCs running Linux, BSDI, and SCO UNIX. To compile for
a PC running Windows, see the README file in the directory ../win. To
compile for a Macintosh, see the README file in the directory ../mac.
-SCCS: @(#) README 1.17 98/02/18 15:07:42
+RCS: @(#) $Id: README,v 1.1.2.2 1998/09/24 23:59:42 stanton Exp $
How To Compile And Install Tcl:
-------------------------------
diff --git a/unix/configure.in b/unix/configure.in
index e1bf054..817f3b2 100644
--- a/unix/configure.in
+++ b/unix/configure.in
@@ -2,12 +2,12 @@ dnl This file is an input file used by the GNU "autoconf" program to
dnl generate the file "configure", which is run during Tcl installation
dnl to configure the system for the local environment.
AC_INIT(../generic/tcl.h)
-# SCCS: @(#) configure.in 1.156 98/02/23 17:51:51
+# RCS: @(#) $Id: configure.in,v 1.1.2.2 1998/09/24 23:59:42 stanton Exp $
TCL_VERSION=8.1
TCL_MAJOR_VERSION=8
TCL_MINOR_VERSION=1
-TCL_PATCH_LEVEL=a2
+TCL_PATCH_LEVEL="a2"
VERSION=${TCL_VERSION}
if test "${prefix}" = "NONE"; then
@@ -47,6 +47,13 @@ else
AC_MSG_RESULT(Will compile without Threads support (normal))
fi
+# set the warning flags depending on whether or not we are using gcc
+if test "${GCC}" = "yes" ; then
+ CFLAGS_WARNING="-Wall -Wconversion"
+else
+ CFLAGS_WARNING=""
+fi
+
#--------------------------------------------------------------------
# Supply substitutes for missing POSIX library procedures, or
# set flags so Tcl uses alternate procedures.
@@ -472,6 +479,7 @@ fi
# instead of vfork.
#--------------------------------------------------------------------
+AC_TYPE_SIGNAL()
AC_CHECK_FUNC(vfork, tcl_ok=1, tcl_ok=0)
if test "$tcl_ok" = 1; then
AC_MSG_CHECKING([vfork/signal bug]);
@@ -693,7 +701,11 @@ AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
fullSrcDir=`cd $srcdir; pwd`
TCL_SHARED_LIB_SUFFIX=""
TCL_UNSHARED_LIB_SUFFIX=""
+TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`'
+ECHO_VERSION='`echo ${VERSION}`'
TCL_LIB_VERSIONS_OK=ok
+CFLAGS_DEBUG=-g
+CFLAGS_OPTIMIZE=-O
case $system in
AIX-4.[[2-9]])
SHLIB_CFLAGS=""
@@ -705,7 +717,7 @@ case $system in
LD_FLAGS=""
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
AIX=yes
- TCL_SHARED_LIB_SUFFIX='${VERSION}.a'
+ TCL_SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
;;
AIX-*)
SHLIB_CFLAGS=""
@@ -716,7 +728,7 @@ case $system in
DL_LIBS="-lld"
LD_FLAGS=""
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- TCL_SHARED_LIB_SUFFIX='${VERSION}.a'
+ TCL_SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
;;
BSD/OS-2.1*|BSD/OS-3*)
SHLIB_CFLAGS=""
@@ -748,7 +760,7 @@ case $system in
DL_OBJS="tclLoadShl.o"
DL_LIBS="-ldld"
LD_FLAGS="-Wl,-E"
- LD_SEARCH_FLAGS='-Wl,+b,${LIB_RUNTIME_DIR}:.'
+ LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
fi
;;
IRIX-4.*)
@@ -760,7 +772,7 @@ case $system in
DL_LIBS=""
LD_FLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- TCL_SHARED_LIB_SUFFIX='${VERSION}.a'
+ TCL_SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
;;
IRIX-5.*|IRIX-6.*)
SHLIB_CFLAGS=""
@@ -832,7 +844,7 @@ case $system in
DL_LIBS=""
LD_FLAGS=""
LD_SEARCH_FLAGS=""
- TCL_SHARED_LIB_SUFFIX='`echo ${VERSION} | tr -d .`.so.1.0'
+ TCL_SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
], [
SHLIB_CFLAGS=""
SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r"
@@ -842,12 +854,12 @@ case $system in
DL_LIBS=""
LD_FLAGS=""
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
- TCL_SHARED_LIB_SUFFIX='`echo ${VERSION} | tr -d .`.a'
+ TCL_SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
])
# FreeBSD doesn't handle version numbers with dots.
- TCL_UNSHARED_LIB_SUFFIX='`echo ${VERSION} | tr -d .`.a'
+ TCL_UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
TCL_LIB_VERSIONS_OK=nodots
;;
NEXTSTEP-*)
@@ -942,8 +954,8 @@ case $system in
# requires an extra version number at the end of .so file names.
# So, the library has to have a name like libtcl75.so.1.0
- TCL_SHARED_LIB_SUFFIX='`echo ${VERSION} | tr -d .`.so.1.0'
- TCL_UNSHARED_LIB_SUFFIX='`echo ${VERSION} | tr -d .`.a'
+ TCL_SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
+ TCL_UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
TCL_LIB_VERSIONS_OK=nodots
;;
SunOS-5*)
@@ -970,7 +982,7 @@ case $system in
LD_FLAGS="-Wl,-D,08000000"
LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
;;
- UNIX_SV*)
+ UNIX_SV* | UnixWare-5*)
SHLIB_CFLAGS="-KPIC"
SHLIB_LD="cc -G"
SHLIB_LD_LIBS=""
@@ -1120,6 +1132,18 @@ if test "$DL_OBJS" != "tclLoadNone.o" ; then
fi
fi
+# Set the default compiler switches based on the --enable-symbols option
+
+AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols],
+ [tcl_ok=$enableval], [tcl_ok=no])
+if test "$tcl_ok" = "yes"; then
+ CFLAGS_DEFAULT=CFLAGS_DEBUG
+ TCL_DBGX=g
+else
+ CFLAGS_DEFAULT=CFLAGS_OPTIMIZE
+ TCL_DBGX=""
+fi
+
#--------------------------------------------------------------------
# The statements below check for systems where POSIX-style
# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
@@ -1178,10 +1202,10 @@ esac
realRanlib=$RANLIB
if test "$TCL_SHARED_LIB_SUFFIX" = "" ; then
- TCL_SHARED_LIB_SUFFIX='${VERSION}${SHLIB_SUFFIX}'
+ TCL_SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}${SHLIB_SUFFIX}'
fi
if test "$TCL_UNSHARED_LIB_SUFFIX" = "" ; then
- TCL_UNSHARED_LIB_SUFFIX='${VERSION}.a'
+ TCL_UNSHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
fi
AC_ARG_ENABLE(shared,
[ --enable-shared build libtcl as a shared library],
@@ -1192,9 +1216,9 @@ if test "$tcl_ok" = "yes" -a "${SHLIB_SUFFIX}" != "" ; then
TCL_LD_SEARCH_FLAGS="${LD_SEARCH_FLAGS}"
eval "TCL_LIB_FILE=libtcl${TCL_SHARED_LIB_SUFFIX}"
if test "x$DL_OBJS" = "xtclLoadAout.o"; then
- MAKE_LIB="ar cr ${TCL_LIB_FILE} \${OBJS}"
+ MAKE_LIB="ar cr \${TCL_LIB_FILE} \${OBJS}"
else
- MAKE_LIB="\${SHLIB_LD} -o ${TCL_LIB_FILE} \${OBJS} ${SHLIB_LD_LIBS}"
+ MAKE_LIB="\${SHLIB_LD} -o \${TCL_LIB_FILE} \${OBJS} ${SHLIB_LD_LIBS}"
RANLIB=":"
fi
else
@@ -1213,7 +1237,7 @@ else
TCL_SHLIB_CFLAGS=""
TCL_LD_SEARCH_FLAGS=""
eval "TCL_LIB_FILE=libtcl${TCL_UNSHARED_LIB_SUFFIX}"
- MAKE_LIB="ar cr ${TCL_LIB_FILE} \${OBJS}"
+ MAKE_LIB="ar cr \${TCL_LIB_FILE} \${OBJS}"
fi
# Note: in the following variable, it's important to use the absolute
@@ -1222,12 +1246,23 @@ fi
# up the Tcl library.
if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then
- TCL_BUILD_LIB_SPEC="-L`pwd` -ltcl${VERSION}"
- TCL_LIB_SPEC="-L${exec_prefix}/lib -ltcl${VERSION}"
+ TCL_LIB_FLAG="-ltcl${TCL_VERSION}\${TCL_DBGX}"
else
- TCL_BUILD_LIB_SPEC="-L`pwd` -ltcl`echo ${VERSION} | tr -d .`"
- TCL_LIB_SPEC="-L${exec_prefix}/lib -ltcl`echo ${VERSION} | tr -d .`"
+ TCL_LIB_FLAG="-ltcl`echo ${TCL_VERSION} | tr -d .`\${TCL_DBGX}"
fi
+TCL_BUILD_LIB_SPEC="-L`pwd` ${TCL_LIB_FLAG}"
+TCL_LIB_SPEC="-L${exec_prefix}/lib ${TCL_LIB_FLAG}"
+
+# tclConfig.sh needs a version of the _LIB_SUFFIX that has been eval'ed
+# so that the backslashes quoting the DBX braces are dropped.
+
+# Trick to replace DBGX with TCL_DBGX
+DBGX='${TCL_DBGX}'
+eval "TCL_LIB_FILE=${TCL_LIB_FILE}"
+
+VERSION='${VERSION}'
+eval "CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}"
+eval "CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}"
#--------------------------------------------------------------------
# The statements below define the symbol TCL_PACKAGE_PATH, which
@@ -1243,6 +1278,13 @@ else
fi
AC_SUBST(BUILD_DLTEST)
+AC_SUBST(CFLAGS_DEBUG)
+AC_SUBST(CFLAGS_DEFAULT)
+AC_SUBST(CFLAGS_OPTIMIZE)
+AC_SUBST(CFLAGS_WARNING)
+AC_SUBST(CFG_TCL_SHARED_LIB_SUFFIX)
+AC_SUBST(CFG_TCL_UNSHARED_LIB_SUFFIX)
+AC_SUBST(TCL_DBGX)
AC_SUBST(DL_LIBS)
AC_SUBST(DL_OBJS)
AC_SUBST(LD_FLAGS)
@@ -1255,6 +1297,7 @@ AC_SUBST(SHLIB_SUFFIX)
AC_SUBST(TCL_BUILD_LIB_SPEC)
AC_SUBST(TCL_LD_SEARCH_FLAGS)
AC_SUBST(TCL_LIB_FILE)
+AC_SUBST(TCL_LIB_FLAG)
AC_SUBST(TCL_LIB_SPEC)
AC_SUBST(TCL_LIB_VERSIONS_OK)
AC_SUBST(TCL_MAJOR_VERSION)
diff --git a/unix/dltest/Makefile.in b/unix/dltest/Makefile.in
index 2197b4b..1f1035f 100644
--- a/unix/dltest/Makefile.in
+++ b/unix/dltest/Makefile.in
@@ -1,7 +1,7 @@
# This Makefile is used to create several test cases for Tcl's load
# command. It also illustrates how to take advantage of configuration
# exported by Tcl to set up Makefiles for shared libraries.
-# SCCS: @(#) Makefile.in 1.12 97/02/22 14:13:54
+# RCS: @(#) $Id: Makefile.in,v 1.1.2.1 1998/09/24 23:59:47 stanton Exp $
CC = @CC@
LIBS = @TCL_BUILD_LIB_SPEC@ @TCL_LIBS@ -lc
diff --git a/unix/dltest/README b/unix/dltest/README
index f4e54d4..51ba6eb 100644
--- a/unix/dltest/README
+++ b/unix/dltest/README
@@ -9,4 +9,4 @@ Tcl before configuring here, since information learned during Tcl's
configure is needed here. Then type "make" to create the shared
libraries.
-sccsid: @(#) README 1.2 95/08/22 08:13:23
+RCS: @(#) $Id: README,v 1.1.2.1 1998/09/24 23:59:47 stanton Exp $
diff --git a/unix/dltest/configure.in b/unix/dltest/configure.in
index 29924e9..ee3df12 100644
--- a/unix/dltest/configure.in
+++ b/unix/dltest/configure.in
@@ -2,7 +2,7 @@ dnl This file is an input file used by the GNU "autoconf" program to
dnl generate the file "configure", which is run to configure the
dnl Makefile in this directory.
AC_INIT(pkga.c)
-# SCCS: @(#) configure.in 1.9 96/04/15 09:50:20
+# RCS: @(#) $Id: configure.in,v 1.1.2.1 1998/09/24 23:59:47 stanton Exp $
# Recover information that Tcl computed with its configure script.
diff --git a/unix/dltest/pkga.c b/unix/dltest/pkga.c
index ab48522..6323f23 100644
--- a/unix/dltest/pkga.c
+++ b/unix/dltest/pkga.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) pkga.c 1.4 96/02/15 12:30:35
+ * RCS: @(#) $Id: pkga.c,v 1.1.2.1 1998/09/24 23:59:47 stanton Exp $
*/
#include "tcl.h"
diff --git a/unix/dltest/pkgb.c b/unix/dltest/pkgb.c
index 1da9575..4ebf616 100644
--- a/unix/dltest/pkgb.c
+++ b/unix/dltest/pkgb.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) pkgb.c 1.4 96/02/15 12:30:34
+ * RCS: @(#) $Id: pkgb.c,v 1.1.2.1 1998/09/24 23:59:48 stanton Exp $
*/
#include "tcl.h"
diff --git a/unix/dltest/pkgc.c b/unix/dltest/pkgc.c
index c35189a..50c132a 100644
--- a/unix/dltest/pkgc.c
+++ b/unix/dltest/pkgc.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) pkgc.c 1.4 96/02/15 12:30:35
+ * RCS: @(#) $Id: pkgc.c,v 1.1.2.1 1998/09/24 23:59:48 stanton Exp $
*/
#include "tcl.h"
diff --git a/unix/dltest/pkgd.c b/unix/dltest/pkgd.c
index 56821cc..1077bd5 100644
--- a/unix/dltest/pkgd.c
+++ b/unix/dltest/pkgd.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) pkgd.c 1.4 96/02/15 12:30:32
+ * RCS: @(#) $Id: pkgd.c,v 1.1.2.1 1998/09/24 23:59:48 stanton Exp $
*/
#include "tcl.h"
diff --git a/unix/dltest/pkge.c b/unix/dltest/pkge.c
index f5b84a6..cce07ae 100644
--- a/unix/dltest/pkge.c
+++ b/unix/dltest/pkge.c
@@ -10,8 +10,9 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) pkge.c 1.6 97/10/20 13:17:59
+ * RCS: @(#) $Id: pkge.c,v 1.1.2.2 1998/09/24 23:59:48 stanton Exp $
*/
+
#include "tcl.h"
/*
diff --git a/unix/dltest/pkgf.c b/unix/dltest/pkgf.c
index d7c641a..c36ce0c 100644
--- a/unix/dltest/pkgf.c
+++ b/unix/dltest/pkgf.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) pkgf.c 1.2 96/02/15 12:30:32
+ * RCS: @(#) $Id: pkgf.c,v 1.1.2.1 1998/09/24 23:59:48 stanton Exp $
*/
#include "tcl.h"
diff --git a/unix/ldAix b/unix/ldAix
index 4da2b20..c0cdee7 100755
--- a/unix/ldAix
+++ b/unix/ldAix
@@ -10,7 +10,7 @@
# symbols exported by those files, and then invokes "ldCmd" to
# perform the real link.
#
-# SCCS: @(#) ldAix 1.8 97/02/21 14:50:27
+# RCS: @(#) $Id: ldAix,v 1.1.2.1 1998/09/24 23:59:42 stanton Exp $
# Extract from the arguments the names of all of the object files.
diff --git a/unix/porting.notes b/unix/porting.notes
index 2d0a403..58fa768 100644
--- a/unix/porting.notes
+++ b/unix/porting.notes
@@ -26,7 +26,7 @@ and Tk to compile. You can also add new entries to that database
when you install Tcl and Tk on a new platform. The Web database is
likely to be more up-to-date than this file.
-sccsid = SCCS: @(#) porting.notes 1.20 97/11/03 09:43:40
+sccsid = RCS: @(#) $Id: porting.notes,v 1.1.2.1 1998/09/24 23:59:43 stanton Exp $
--------------------------------------------
Solaris, various versions
diff --git a/unix/porting.old b/unix/porting.old
index e312de0..be55e5a 100644
--- a/unix/porting.old
+++ b/unix/porting.old
@@ -13,7 +13,7 @@ some cases, a person has volunteered to act as a contact point for
questions about porting Tcl to a particular machine; in these
cases the person's name and e-mail address are listed.
-sccsid = SCCS: @(#) porting.old 1.3 96/02/16 08:56:07
+sccsid = RCS: @(#) $Id: porting.old,v 1.1.2.1 1998/09/24 23:59:43 stanton Exp $
---------------------------------------------
Cray machines running UNICOS:
diff --git a/unix/tclAppInit.c b/unix/tclAppInit.c
index 888769b..496f33d 100644
--- a/unix/tclAppInit.c
+++ b/unix/tclAppInit.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclAppInit.c 1.30 98/02/18 16:57:43
+ * RCS: @(#) $Id: tclAppInit.c,v 1.1.2.2 1998/09/24 23:59:43 stanton Exp $
*/
#ifdef TCL_XT_TEST
diff --git a/unix/tclConfig.sh.in b/unix/tclConfig.sh.in
index 905aa84..1875852 100644
--- a/unix/tclConfig.sh.in
+++ b/unix/tclConfig.sh.in
@@ -9,7 +9,7 @@
#
# The information in this file is specific to a single platform.
#
-# SCCS: @(#) tclConfig.sh.in 1.20 97/07/01 11:40:19
+# RCS: @(#) $Id: tclConfig.sh.in,v 1.1.2.1 1998/09/24 23:59:43 stanton Exp $
# Tcl's version number.
TCL_VERSION='@TCL_VERSION@'
@@ -23,11 +23,19 @@ TCL_CC='@CC@'
# -D flags for use with the C compiler.
TCL_DEFS='@DEFS@'
+# If TCL was built with debugging symbols, generated libraries contain
+# this string at the end of the library name (before the extension).
+TCL_DBGX=@TCL_DBGX@
+
+# Default flags used in an optimized and debuggable build, respectively.
+TCL_CFLAGS_DEBUG='@CFLAGS_DEBUG@'
+TCL_CFLAGS_OPTIMIZE='@CFLAGS_OPTIMIZE@'
+
# Flag, 1: we built a shared lib, 0 we didn't
TCL_SHARED_BUILD=@TCL_SHARED_BUILD@
# The name of the Tcl library (may be either a .a file or a shared library):
-TCL_LIB_FILE=@TCL_LIB_FILE@
+TCL_LIB_FILE='@TCL_LIB_FILE@'
# Additional libraries to use when linking Tcl.
TCL_LIBS='@DL_LIBS@ @LIBS@ @MATH_LIBS@'
@@ -75,6 +83,9 @@ TCL_COMPAT_OBJS='@LIBOBJS@'
# Name of the ranlib program to use.
TCL_RANLIB='@RANLIB@'
+# -l flag to pass to the linker to pick up the Tcl library
+TCL_LIB_FLAG='@TCL_LIB_FLAG@'
+
# String to pass to linker to pick up the Tcl library from its
# build directory.
TCL_BUILD_LIB_SPEC='@TCL_BUILD_LIB_SPEC@'
@@ -94,13 +105,13 @@ TCL_LIB_VERSIONS_OK='@TCL_LIB_VERSIONS_OK@'
# extension, and anything else needed). May depend on the variables
# VERSION and SHLIB_SUFFIX. On most UNIX systems this is
# ${VERSION}${SHLIB_SUFFIX}.
-TCL_SHARED_LIB_SUFFIX='@TCL_SHARED_LIB_SUFFIX@'
+TCL_SHARED_LIB_SUFFIX='@CFG_TCL_SHARED_LIB_SUFFIX@'
# String that can be evaluated to generate the part of an unshared library
# name that comes after the "libxxx" (includes version number, if any,
# extension, and anything else needed). May depend on the variable
# VERSION. On most UNIX systems this is ${VERSION}.a.
-TCL_UNSHARED_LIB_SUFFIX='@TCL_UNSHARED_LIB_SUFFIX@'
+TCL_UNSHARED_LIB_SUFFIX='@CFG_TCL_UNSHARED_LIB_SUFFIX@'
# Location of the top-level source directory from which Tcl was built.
# This is the directory that contains a README file as well as
diff --git a/unix/tclLoadAix.c b/unix/tclLoadAix.c
index ac701b2..e6780d5 100644
--- a/unix/tclLoadAix.c
+++ b/unix/tclLoadAix.c
@@ -17,7 +17,7 @@
* for any results of using the software, alterations are clearly marked
* as such, and this notice is not modified.
*
- * SCCS: @(#) tclLoadAix.c 1.12 97/08/27 19:19:54
+ * RCS: @(#) $Id: tclLoadAix.c,v 1.1.2.2 1998/09/24 23:59:43 stanton Exp $
*
* Note: this file has been altered from the original in a few
* ways in order to work properly with Tcl.
diff --git a/unix/tclLoadAout.c b/unix/tclLoadAout.c
index 0ab75f9..972d17d 100644
--- a/unix/tclLoadAout.c
+++ b/unix/tclLoadAout.c
@@ -14,7 +14,7 @@
* and Design Engineering (MADE) Initiative through ARPA contract
* F33615-94-C-4400.
*
- * SCCS: @(#) tclLoadAout.c 1.14 98/01/12 15:28:58
+ * RCS: @(#) $Id: tclLoadAout.c,v 1.1.2.2 1998/09/24 23:59:43 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclLoadDl.c b/unix/tclLoadDl.c
index 6b70269..0cbe428 100644
--- a/unix/tclLoadDl.c
+++ b/unix/tclLoadDl.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLoadDl.c 1.11 97/12/11 10:59:33
+ * RCS: @(#) $Id: tclLoadDl.c,v 1.1.2.2 1998/09/24 23:59:43 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclLoadDld.c b/unix/tclLoadDld.c
index 7a11bae..a2e2f0a 100644
--- a/unix/tclLoadDld.c
+++ b/unix/tclLoadDld.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLoadDld.c 1.7 97/12/11 10:59:40
+ * RCS: @(#) $Id: tclLoadDld.c,v 1.1.2.2 1998/09/24 23:59:43 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclLoadNext.c b/unix/tclLoadNext.c
index e96cebc..f708a3a 100644
--- a/unix/tclLoadNext.c
+++ b/unix/tclLoadNext.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLoadNext.c 1.6 97/12/11 11:00:48
+ * RCS: @(#) $Id: tclLoadNext.c,v 1.1.2.2 1998/09/24 23:59:44 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclLoadOSF.c b/unix/tclLoadOSF.c
index 0615870..9f6468d 100644
--- a/unix/tclLoadOSF.c
+++ b/unix/tclLoadOSF.c
@@ -31,7 +31,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLoadOSF.c 1.4 97/12/11 10:59:16
+ * RCS: @(#) $Id: tclLoadOSF.c,v 1.1.2.2 1998/09/24 23:59:44 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclLoadShl.c b/unix/tclLoadShl.c
index a228d39..8216943 100644
--- a/unix/tclLoadShl.c
+++ b/unix/tclLoadShl.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclLoadShl.c 1.9 98/01/07 16:23:57
+ * RCS: @(#) $Id: tclLoadShl.c,v 1.1.2.2 1998/09/24 23:59:44 stanton Exp $
*/
#include <dl.h>
diff --git a/unix/tclMtherr.c b/unix/tclMtherr.c
index dd86154..746101a 100644
--- a/unix/tclMtherr.c
+++ b/unix/tclMtherr.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclMtherr.c 1.14 98/02/13 15:35:28
+ * RCS: @(#) $Id: tclMtherr.c,v 1.1.2.2 1998/09/24 23:59:44 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclUnixChan.c b/unix/tclUnixChan.c
index 5217fe2..f76b65a 100644
--- a/unix/tclUnixChan.c
+++ b/unix/tclUnixChan.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixChan.c 1.217 98/02/18 18:23:24
+ * RCS: @(#) $Id: tclUnixChan.c,v 1.1.2.2 1998/09/24 23:59:44 stanton Exp $
*/
#include "tclInt.h" /* Internal definitions for Tcl. */
@@ -1219,7 +1219,7 @@ TtyInit(fd)
/*
*----------------------------------------------------------------------
*
- * Tcl_OpenFileChannel --
+ * TclpOpenFileChannel --
*
* Open an file based channel on Unix systems.
*
@@ -1236,7 +1236,7 @@ TtyInit(fd)
*/
Tcl_Channel
-Tcl_OpenFileChannel(interp, fileName, modeString, permissions)
+TclpOpenFileChannel(interp, fileName, modeString, permissions)
Tcl_Interp *interp; /* Interpreter for error reporting;
* can be NULL. */
char *fileName; /* Name of file to open. */
@@ -1272,7 +1272,7 @@ Tcl_OpenFileChannel(interp, fileName, modeString, permissions)
/*
* This may occurr if modeString was "", for example.
*/
- panic("Tcl_OpenFileChannel: invalid mode value");
+ panic("TclpOpenFileChannel: invalid mode value");
return NULL;
}
@@ -1852,12 +1852,20 @@ TcpWatchProc(instanceData, mask)
{
TcpState *statePtr = (TcpState *) instanceData;
- if (mask) {
- Tcl_CreateFileHandler(statePtr->fd, mask,
- (Tcl_FileProc *) Tcl_NotifyChannel,
- (ClientData) statePtr->channel);
- } else {
- Tcl_DeleteFileHandler(statePtr->fd);
+ /*
+ * Make sure we don't mess with server sockets since they will never
+ * be readable or writable at the Tcl level. This keeps Tcl scripts
+ * from interfering with the -accept behavior.
+ */
+
+ if (!statePtr->acceptProc) {
+ if (mask) {
+ Tcl_CreateFileHandler(statePtr->fd, mask,
+ (Tcl_FileProc *) Tcl_NotifyChannel,
+ (ClientData) statePtr->channel);
+ } else {
+ Tcl_DeleteFileHandler(statePtr->fd);
+ }
}
}
diff --git a/unix/tclUnixEvent.c b/unix/tclUnixEvent.c
index 26eff5f..cb8617c 100644
--- a/unix/tclUnixEvent.c
+++ b/unix/tclUnixEvent.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixEvent.c 1.2 98/02/04 16:21:02
+ * RCS: @(#) $Id: tclUnixEvent.c,v 1.1.2.2 1998/09/24 23:59:45 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclUnixFCmd.c b/unix/tclUnixFCmd.c
index 83f4bfb..cbcab04 100644
--- a/unix/tclUnixFCmd.c
+++ b/unix/tclUnixFCmd.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixFCmd.c 1.36 98/02/18 18:24:52
+ * RCS: @(#) $Id: tclUnixFCmd.c,v 1.1.2.2 1998/09/24 23:59:45 stanton Exp $
*
* Portions of this code were derived from NetBSD source code which has
* the following copyright notice:
@@ -1070,7 +1070,7 @@ GetGroupAttribute(interp, objIndex, fileName, attributePtrPtr)
int result;
native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
- result = stat(native, &statBuf); /* INTL: Native. */
+ result = TclStat(native, &statBuf); /* INTL: Native. */
Tcl_DStringFree(&ds);
if (result != 0) {
@@ -1122,7 +1122,7 @@ GetOwnerAttribute(interp, objIndex, fileName, attributePtrPtr)
int result;
native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
- result = stat(native, &statBuf); /* INTL: Native. */
+ result = TclStat(native, &statBuf); /* INTL: Native. */
Tcl_DStringFree(&ds);
if (result != 0) {
@@ -1174,7 +1174,7 @@ GetPermissionsAttribute(interp, objIndex, fileName, attributePtrPtr)
int result;
native = Tcl_UtfToExternalDString(NULL, fileName, -1, &ds);
- result = stat(native, &statBuf); /* INTL: Native. */
+ result = TclStat(native, &statBuf); /* INTL: Native. */
Tcl_DStringFree(&ds);
if (result != 0) {
diff --git a/unix/tclUnixFile.c b/unix/tclUnixFile.c
index e826fdb..4ba41e9 100644
--- a/unix/tclUnixFile.c
+++ b/unix/tclUnixFile.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixFile.c 1.58 98/01/17 00:01:01
+ * RCS: @(#) $Id: tclUnixFile.c,v 1.1.2.2 1998/09/24 23:59:45 stanton Exp $
*/
#include "tclInt.h"
@@ -77,6 +77,12 @@ Tcl_FindExecutable(argv0)
*/
p = ":/bin:/usr/bin";
+ } else if (*p == '\0') {
+ /*
+ * An empty path is equivalent to ".".
+ */
+
+ p = "./";
}
/*
@@ -101,15 +107,18 @@ Tcl_FindExecutable(argv0)
}
}
name = Tcl_DStringAppend(&buffer, argv0, -1);
- if ((access(name, X_OK) == 0) /* INTL: Native. */
- && (stat(name, &statBuf) == 0) /* INTL: Native. */
+ if ((TclAccess(name, X_OK) == 0) /* INTL: Native. */
+ && (TclStat(name, &statBuf) == 0) /* INTL: Native. */
&& S_ISREG(statBuf.st_mode)) {
goto gotName;
}
if (*p == '\0') {
break;
+ } else if (*(p+1) == 0) {
+ p = "./";
+ } else {
+ p++;
}
- p++;
}
goto done;
@@ -206,7 +215,7 @@ TclpMatchFiles(interp, separators, dirPtr, pattern, tail)
}
native = Tcl_UtfToExternalDString(NULL, dirName, -1, &ds);
- if ((stat(native, &statBuf) != 0) /* INTL: Native. */
+ if ((TclStat(native, &statBuf) != 0) /* INTL: Native. */
|| !S_ISDIR(statBuf.st_mode)) {
Tcl_DStringFree(&ds);
return TCL_OK;
@@ -299,7 +308,9 @@ TclpMatchFiles(interp, separators, dirPtr, pattern, tail)
Tcl_DStringAppend(dirPtr, utf, -1);
if (tail == NULL) {
Tcl_AppendElement(interp, Tcl_DStringValue(dirPtr));
- } else if ((TclpStat(Tcl_DStringValue(dirPtr), &statBuf) == 0)
+ } else if ((TclStat(Tcl_DStringValue(dirPtr), &statBuf) == 0)
+ Tcl_AppendElement(interp, dirPtr->string);
+ } else if ((TclStat(dirPtr->string, &statBuf) == 0)
&& S_ISDIR(statBuf.st_mode)) {
Tcl_DStringAppend(dirPtr, "/", 1);
result = TclDoGlob(interp, separators, dirPtr, tail);
diff --git a/unix/tclUnixInit.c b/unix/tclUnixInit.c
index f7d00a1..5dac2b6 100644
--- a/unix/tclUnixInit.c
+++ b/unix/tclUnixInit.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixInit.c 1.39 98/01/20 23:00:59
+ * RCS: @(#) $Id: tclUnixInit.c,v 1.1.2.2 1998/09/24 23:59:45 stanton Exp $
*/
#include "tclInt.h"
@@ -36,7 +36,7 @@
* symbol is defined by Makefile.
*/
-static char defaultLibraryDir[200] = TCL_LIBRARY;
+static char defaultLibraryDir[sizeof(TCL_LIBRARY)+200] = TCL_LIBRARY;
/*
* Directory in which to look for packages (each package is typically
@@ -44,7 +44,7 @@ static char defaultLibraryDir[200] = TCL_LIBRARY;
* defined by Makefile.
*/
-static char pkgPath[200] = TCL_PACKAGE_PATH;
+static char pkgPath[sizeof(TCL_PACKAGE_PATH)+200] = TCL_PACKAGE_PATH;
typedef struct LocaleTable {
CONST char *lang;
diff --git a/unix/tclUnixNotfy.c b/unix/tclUnixNotfy.c
index 4f4683e..f0d2250 100644
--- a/unix/tclUnixNotfy.c
+++ b/unix/tclUnixNotfy.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixNotfy.c 1.55 98/02/23 17:19:20
+ * RCS: @(#) $Id: tclUnixNotfy.c,v 1.1.2.2 1998/09/24 23:59:45 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclUnixPipe.c b/unix/tclUnixPipe.c
index 5c9cd18..08c54a9 100644
--- a/unix/tclUnixPipe.c
+++ b/unix/tclUnixPipe.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixPipe.c 1.42 97/12/22 19:41:57
+ * RCS: @(#) $Id: tclUnixPipe.c,v 1.1.2.2 1998/09/24 23:59:45 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclUnixPort.h b/unix/tclUnixPort.h
index 8d3885b..46677ce 100644
--- a/unix/tclUnixPort.h
+++ b/unix/tclUnixPort.h
@@ -19,7 +19,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixPort.h 1.56 98/02/18 13:59:57
+ * RCS: @(#) $Id: tclUnixPort.h,v 1.1.2.2 1998/09/24 23:59:46 stanton Exp $
*/
#ifndef _TCLUNIXPORT
@@ -280,6 +280,15 @@ EXTERN int gettimeofday _ANSI_ARGS_((struct timeval *tp,
#endif
/*
+ * On UNIX, there's no platform specific implementation of "TclpStat(...)"
+ * or "TclpAccess(...)". Simply call "stat(...)' and "access(...)"
+ * respectively.
+ */
+
+#define TclpStat stat
+#define TclpAccess access
+
+/*
* On systems without symbolic links (i.e. S_IFLNK isn't defined)
* define "lstat" to use "stat" instead.
*/
@@ -480,6 +489,12 @@ EXTERN int TclpStat _ANSI_ARGS_((CONST char *path,
struct stat *buf));
/*
+ * TclpFinalize is a noop on Unix systems.
+ */
+
+#define TclpFinalize()
+
+/*
* The following routine is only exported for testing purposes.
*/
diff --git a/unix/tclUnixSock.c b/unix/tclUnixSock.c
index 703dc38..fb904e4 100644
--- a/unix/tclUnixSock.c
+++ b/unix/tclUnixSock.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixSock.c 1.11 98/02/19 11:52:09
+ * RCS: @(#) $Id: tclUnixSock.c,v 1.1.2.2 1998/09/24 23:59:46 stanton Exp $
*/
#include "tcl.h"
diff --git a/unix/tclUnixTest.c b/unix/tclUnixTest.c
index 8163f58..f6ab520 100644
--- a/unix/tclUnixTest.c
+++ b/unix/tclUnixTest.c
@@ -8,13 +8,21 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixTest.c 1.6 97/11/07 21:31:30
+ * RCS: @(#) $Id: tclUnixTest.c,v 1.1.2.2 1998/09/24 23:59:46 stanton Exp $
*/
#include "tclInt.h"
#include "tclPort.h"
/*
+ * The headers are needed for the testalarm command that verifies the
+ * use of SA_RESTART in signal handlers.
+ */
+
+#include <signal.h>
+#include <sys/resource.h>
+
+/*
* The following macros convert between TclFile's and fd's. The conversion
* simple involves shifting fd's up by one to ensure that no valid fd is ever
* the same as NULL. Note that this code is duplicated from tclUnixPipe.c
@@ -45,6 +53,12 @@ typedef struct Pipe {
static Pipe testPipes[MAX_PIPES];
/*
+ * The stuff below is used by the testalarm and testgotsig ommands.
+ */
+
+static char *gotsig = "0";
+
+/*
* Forward declarations of procedures defined later in this file:
*/
@@ -54,9 +68,16 @@ static int TestfilehandlerCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestfilewaitCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
+static int TestfindexecutableCmd _ANSI_ARGS_((ClientData dummy,
+ Tcl_Interp *interp, int argc, char **argv));
static int TestgetopenfileCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
int TclplatformtestInit _ANSI_ARGS_((Tcl_Interp *interp));
+static int TestalarmCmd _ANSI_ARGS_((ClientData dummy,
+ Tcl_Interp *interp, int argc, char **argv));
+static int TestgotsigCmd _ANSI_ARGS_((ClientData dummy,
+ Tcl_Interp *interp, int argc, char **argv));
+static void AlarmHandler _ANSI_ARGS_(());
/*
*----------------------------------------------------------------------
@@ -83,8 +104,14 @@ TclplatformtestInit(interp)
(ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testfilewait", TestfilewaitCmd,
(ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
+ Tcl_CreateCommand(interp, "testfindexecutable", TestfindexecutableCmd,
+ (ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testgetopenfile", TestgetopenfileCmd,
(ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
+ Tcl_CreateCommand(interp, "testalarm", TestalarmCmd,
+ (ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
+ Tcl_CreateCommand(interp, "testgotsig", TestgotsigCmd,
+ (ClientData) 0, (Tcl_CmdDeleteProc *) NULL);
return TCL_OK;
}
@@ -388,6 +415,48 @@ TestfilewaitCmd(clientData, interp, argc, argv)
/*
*----------------------------------------------------------------------
*
+ * TestfindexecutableCmd --
+ *
+ * This procedure implements the "testfindexecutable" command. It is
+ * used to test Tcl_FindExecutable.
+ *
+ * Results:
+ * A standard Tcl result.
+ *
+ * Side effects:
+ * None.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+TestfindexecutableCmd(clientData, interp, argc, argv)
+ ClientData clientData; /* Not used. */
+ Tcl_Interp *interp; /* Current interpreter. */
+ int argc; /* Number of arguments. */
+ char **argv; /* Argument strings. */
+{
+ char *oldName;
+
+ if (argc != 2) {
+ Tcl_AppendResult(interp, "wrong # arguments: should be \"", argv[0],
+ " argv0\"", (char *) NULL);
+ return TCL_ERROR;
+ }
+ oldName = tclExecutableName;
+ tclExecutableName = NULL;
+ Tcl_FindExecutable(argv[1]);
+ if (tclExecutableName != NULL) {
+ Tcl_SetResult(interp, tclExecutableName, TCL_VOLATILE);
+ ckfree(tclExecutableName);
+ }
+ tclExecutableName = oldName;
+ return TCL_OK;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
* TestgetopenfileCmd --
*
* This procedure implements the "testgetopenfile" command. It is
@@ -429,3 +498,109 @@ TestgetopenfileCmd(clientData, interp, argc, argv)
}
return TCL_OK;
}
+
+/*
+ *----------------------------------------------------------------------
+ * TestalarmCmd --
+ *
+ * Test that EINTR is handled correctly by generating and
+ * handling a signal. This requires using the SA_RESTART
+ * flag when registering the signal handler.
+ *
+ * Results:
+ * None.
+ *
+ * Side Effects:
+ * Sets up an signal and async handlers.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TestalarmCmd(clientData, interp, argc, argv)
+ ClientData clientData; /* Not used. */
+ Tcl_Interp *interp; /* Current interpreter. */
+ int argc; /* Number of arguments. */
+ char **argv; /* Argument strings. */
+{
+#ifdef SA_RESTART
+ unsigned int sec;
+ struct sigaction action;
+
+ if (argc > 1) {
+ Tcl_GetInt(interp, argv[1], (int *)&sec);
+ } else {
+ sec = 1;
+ }
+
+ /*
+ * Setup the signal handling that automatically retries
+ * any interupted I/O system calls.
+ */
+ action.sa_handler = AlarmHandler;
+ memset((void *)&action.sa_mask, 0, sizeof(sigset_t));
+ action.sa_flags = SA_RESTART;
+
+ if (sigaction(SIGALRM, &action, NULL) < 0) {
+ Tcl_AppendResult(interp, "sigaction: ", Tcl_PosixError(interp), NULL);
+ return TCL_ERROR;
+ }
+ if (alarm(sec) < 0) {
+ Tcl_AppendResult(interp, "alarm: ", Tcl_PosixError(interp), NULL);
+ return TCL_ERROR;
+ }
+ return TCL_OK;
+#else
+ Tcl_AppendResult(interp, "warning: sigaction SA_RESTART not support on this platform", NULL);
+ return TCL_ERROR;
+#endif
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * AlarmHandler --
+ *
+ * Signal handler for the alarm command.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Calls the Tcl Async handler.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+AlarmHandler()
+{
+ gotsig = "1";
+}
+
+/*
+ *----------------------------------------------------------------------
+ * TestgotsigCmd --
+ *
+ * Verify the signal was handled after the testalarm command.
+ *
+ * Results:
+ * None.
+ *
+ * Side Effects:
+ * Resets the value of gotsig back to '0'.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+TestgotsigCmd(clientData, interp, argc, argv)
+ ClientData clientData; /* Not used. */
+ Tcl_Interp *interp; /* Current interpreter. */
+ int argc; /* Number of arguments. */
+ char **argv; /* Argument strings. */
+{
+ Tcl_AppendResult(interp, gotsig, (char *) NULL);
+ gotsig = "0";
+ return TCL_OK;
+}
diff --git a/unix/tclUnixTime.c b/unix/tclUnixTime.c
index c94166d..fe68774 100644
--- a/unix/tclUnixTime.c
+++ b/unix/tclUnixTime.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclUnixTime.c 1.14 98/02/19 11:52:08
+ * RCS: @(#) $Id: tclUnixTime.c,v 1.1.2.2 1998/09/24 23:59:47 stanton Exp $
*/
#include "tclInt.h"
diff --git a/unix/tclXtNotify.c b/unix/tclXtNotify.c
new file mode 100644
index 0000000..cd8f6b5
--- /dev/null
+++ b/unix/tclXtNotify.c
@@ -0,0 +1,656 @@
+/*
+ * tclXtNotify.c --
+ *
+ * This file contains the notifier driver implementation for the
+ * Xt intrinsics.
+ *
+ * Copyright (c) 1997 by Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * RCS: @(#) $Id: tclXtNotify.c,v 1.1.2.1 1998/09/24 23:59:47 stanton Exp $
+ */
+
+#include <X11/Intrinsic.h>
+#include <tclInt.h>
+
+/*
+ * This structure is used to keep track of the notifier info for a
+ * a registered file.
+ */
+
+typedef struct FileHandler {
+ int fd;
+ int mask; /* Mask of desired events: TCL_READABLE, etc. */
+ int readyMask; /* Events that have been seen since the
+ last time FileHandlerEventProc was called
+ for this file. */
+ XtInputId read; /* Xt read callback handle. */
+ XtInputId write; /* Xt write callback handle. */
+ XtInputId except; /* Xt exception callback handle. */
+ Tcl_FileProc *proc; /* Procedure to call, in the style of
+ * Tcl_CreateFileHandler. */
+ ClientData clientData; /* Argument to pass to proc. */
+ struct FileHandler *nextPtr;/* Next in list of all files we care about. */
+} FileHandler;
+
+/*
+ * The following structure is what is added to the Tcl event queue when
+ * file handlers are ready to fire.
+ */
+
+typedef struct FileHandlerEvent {
+ Tcl_Event header; /* Information that is standard for
+ * all events. */
+ int fd; /* File descriptor that is ready. Used
+ * to find the FileHandler structure for
+ * the file (can't point directly to the
+ * FileHandler structure because it could
+ * go away while the event is queued). */
+} FileHandlerEvent;
+
+/*
+ * The following static structure contains the state information for the
+ * Xt based implementation of the Tcl notifier.
+ */
+
+static struct NotifierState {
+ XtAppContext appContext; /* The context used by the Xt
+ * notifier. Can be set with
+ * TclSetAppContext. */
+ int appContextCreated; /* Was it created by us? */
+ XtIntervalId currentTimeout; /* Handle of current timer. */
+ FileHandler *firstFileHandlerPtr; /* Pointer to head of file handler
+ * list. */
+} notifier;
+
+/*
+ * The following static indicates whether this module has been initialized.
+ */
+
+static int initialized = 0;
+
+/*
+ * Static routines defined in this file.
+ */
+
+static int FileHandlerEventProc _ANSI_ARGS_((Tcl_Event *evPtr,
+ int flags));
+static void FileProc _ANSI_ARGS_((caddr_t clientData,
+ int *source, XtInputId *id));
+static void InitNotifier _ANSI_ARGS_((void));
+static void NotifierExitHandler _ANSI_ARGS_((
+ ClientData clientData));
+static void TimerProc _ANSI_ARGS_((caddr_t clientData,
+ XtIntervalId *id));
+
+/*
+ * Functions defined in this file for use by users of the Xt Notifier:
+ */
+
+EXTERN XtAppContext TclSetAppContext _ANSI_ARGS_((XtAppContext ctx));
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclSetAppContext --
+ *
+ * Set the notifier application context.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Sets the application context used by the notifier. Panics if
+ * the context is already set when called.
+ *
+ *----------------------------------------------------------------------
+ */
+
+XtAppContext
+TclSetAppContext(appContext)
+ XtAppContext appContext;
+{
+ if (!initialized) {
+ InitNotifier();
+ }
+
+ /*
+ * If we already have a context we check whether we were asked to set a
+ * new context. If so, we panic because we try to prevent switching
+ * contexts by mistake. Otherwise, we return the one we have.
+ */
+
+ if (notifier.appContext != NULL) {
+ if (appContext != NULL) {
+
+ /*
+ * We already have a context. We do not allow switching contexts
+ * after initialization, so we panic.
+ */
+
+ panic("TclSetAppContext: multiple application contexts");
+
+ }
+ } else {
+
+ /*
+ * If we get here we have not yet gotten a context, so either create
+ * one or use the one supplied by our caller.
+ */
+
+ if (appContext == NULL) {
+
+ /*
+ * We must create a new context and tell our caller what it is, so
+ * she can use it too.
+ */
+
+ notifier.appContext = XtCreateApplicationContext();
+ notifier.appContextCreated = 1;
+ } else {
+
+ /*
+ * Otherwise we remember the context that our caller gave us
+ * and use it.
+ */
+
+ notifier.appContextCreated = 0;
+ notifier.appContext = appContext;
+ }
+ }
+
+ return notifier.appContext;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * InitNotifier --
+ *
+ * Initializes the notifier state.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Creates a new exit handler.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+InitNotifier(void)
+{
+ /*
+ * Only reinitialize if we are not in exit handling. The notifier
+ * can get reinitialized after its own exit handler has run, because
+ * of exit handlers for the I/O and timer sub-systems (order dependency).
+ */
+
+ if (TclInExit()) {
+ return;
+ }
+
+ /*
+ * DO NOT create the application context yet; doing so would prevent
+ * external applications from setting it for us to their own ones.
+ */
+
+ initialized = 1;
+ memset(&notifier, 0, sizeof(notifier));
+ Tcl_CreateExitHandler(NotifierExitHandler, NULL);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * NotifierExitHandler --
+ *
+ * This function is called to cleanup the notifier state before
+ * Tcl is unloaded.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Destroys the notifier window.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+NotifierExitHandler(
+ ClientData clientData) /* Not used. */
+{
+ if (notifier.currentTimeout != 0) {
+ XtRemoveTimeOut(notifier.currentTimeout);
+ }
+ for (; notifier.firstFileHandlerPtr != NULL; ) {
+ Tcl_DeleteFileHandler(notifier.firstFileHandlerPtr->fd);
+ }
+ if (notifier.appContextCreated) {
+ XtDestroyApplicationContext(notifier.appContext);
+ notifier.appContextCreated = 0;
+ notifier.appContext = NULL;
+ }
+ initialized = 0;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_SetTimer --
+ *
+ * This procedure sets the current notifier timeout value.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Replaces any previous timer.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+Tcl_SetTimer(timePtr)
+ Tcl_Time *timePtr; /* Timeout value, may be NULL. */
+{
+ long timeout;
+
+ if (!initialized) {
+ InitNotifier();
+ }
+
+ TclSetAppContext(NULL);
+ if (notifier.currentTimeout != 0) {
+ XtRemoveTimeOut(notifier.currentTimeout);
+ }
+ if (timePtr) {
+ timeout = timePtr->sec * 1000 + timePtr->usec / 1000;
+ notifier.currentTimeout =
+ XtAppAddTimeOut(notifier.appContext, (unsigned long) timeout,
+ TimerProc, NULL);
+ } else {
+ notifier.currentTimeout = 0;
+ }
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TimerProc --
+ *
+ * This procedure is the XtTimerCallbackProc used to handle
+ * timeouts.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Processes all queued events.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+TimerProc(data, id)
+ caddr_t data; /* Not used. */
+ XtIntervalId *id;
+{
+ if (*id != notifier.currentTimeout) {
+ return;
+ }
+ notifier.currentTimeout = 0;
+
+ Tcl_ServiceAll();
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_CreateFileHandler --
+ *
+ * This procedure registers a file handler with the Xt notifier.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Creates a new file handler structure and registers one or more
+ * input procedures with Xt.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+Tcl_CreateFileHandler(fd, mask, proc, clientData)
+ int fd; /* Handle of stream to watch. */
+ int mask; /* OR'ed combination of TCL_READABLE,
+ * TCL_WRITABLE, and TCL_EXCEPTION:
+ * indicates conditions under which
+ * proc should be called. */
+ Tcl_FileProc *proc; /* Procedure to call for each
+ * selected event. */
+ ClientData clientData; /* Arbitrary data to pass to proc. */
+{
+ FileHandler *filePtr;
+
+ if (!initialized) {
+ InitNotifier();
+ }
+
+ TclSetAppContext(NULL);
+
+ for (filePtr = notifier.firstFileHandlerPtr; filePtr != NULL;
+ filePtr = filePtr->nextPtr) {
+ if (filePtr->fd == fd) {
+ break;
+ }
+ }
+ if (filePtr == NULL) {
+ filePtr = (FileHandler*) ckalloc(sizeof(FileHandler));
+ filePtr->fd = fd;
+ filePtr->read = 0;
+ filePtr->write = 0;
+ filePtr->except = 0;
+ filePtr->readyMask = 0;
+ filePtr->mask = 0;
+ filePtr->nextPtr = notifier.firstFileHandlerPtr;
+ notifier.firstFileHandlerPtr = filePtr;
+ }
+ filePtr->proc = proc;
+ filePtr->clientData = clientData;
+
+ /*
+ * Register the file with the Xt notifier, if it hasn't been done yet.
+ */
+
+ if (mask & TCL_READABLE) {
+ if (!(filePtr->mask & TCL_READABLE)) {
+ filePtr->read =
+ XtAppAddInput(notifier.appContext, fd, XtInputReadMask,
+ FileProc, filePtr);
+ }
+ } else {
+ if (filePtr->mask & TCL_READABLE) {
+ XtRemoveInput(filePtr->read);
+ }
+ }
+ if (mask & TCL_WRITABLE) {
+ if (!(filePtr->mask & TCL_WRITABLE)) {
+ filePtr->write =
+ XtAppAddInput(notifier.appContext, fd, XtInputWriteMask,
+ FileProc, filePtr);
+ }
+ } else {
+ if (filePtr->mask & TCL_WRITABLE) {
+ XtRemoveInput(filePtr->write);
+ }
+ }
+ if (mask & TCL_EXCEPTION) {
+ if (!(filePtr->mask & TCL_EXCEPTION)) {
+ filePtr->except =
+ XtAppAddInput(notifier.appContext, fd, XtInputExceptMask,
+ FileProc, filePtr);
+ }
+ } else {
+ if (filePtr->mask & TCL_EXCEPTION) {
+ XtRemoveInput(filePtr->except);
+ }
+ }
+ filePtr->mask = mask;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_DeleteFileHandler --
+ *
+ * Cancel a previously-arranged callback arrangement for
+ * a file.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * If a callback was previously registered on file, remove it.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+Tcl_DeleteFileHandler(fd)
+ int fd; /* Stream id for which to remove
+ * callback procedure. */
+{
+ FileHandler *filePtr, *prevPtr;
+
+ if (!initialized) {
+ InitNotifier();
+ }
+
+ TclSetAppContext(NULL);
+
+ /*
+ * Find the entry for the given file (and return if there
+ * isn't one).
+ */
+
+ for (prevPtr = NULL, filePtr = notifier.firstFileHandlerPtr; ;
+ prevPtr = filePtr, filePtr = filePtr->nextPtr) {
+ if (filePtr == NULL) {
+ return;
+ }
+ if (filePtr->fd == fd) {
+ break;
+ }
+ }
+
+ /*
+ * Clean up information in the callback record.
+ */
+
+ if (prevPtr == NULL) {
+ notifier.firstFileHandlerPtr = filePtr->nextPtr;
+ } else {
+ prevPtr->nextPtr = filePtr->nextPtr;
+ }
+ if (filePtr->mask & TCL_READABLE) {
+ XtRemoveInput(filePtr->read);
+ }
+ if (filePtr->mask & TCL_WRITABLE) {
+ XtRemoveInput(filePtr->write);
+ }
+ if (filePtr->mask & TCL_EXCEPTION) {
+ XtRemoveInput(filePtr->except);
+ }
+ ckfree((char *) filePtr);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * FileProc --
+ *
+ * These procedures are called by Xt when a file becomes readable,
+ * writable, or has an exception.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Makes an entry on the Tcl event queue if the event is
+ * interesting.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static void
+FileProc(clientData, fd, id)
+ caddr_t clientData;
+ int *fd;
+ XtInputId *id;
+{
+ FileHandler *filePtr = (FileHandler *)clientData;
+ FileHandlerEvent *fileEvPtr;
+ int mask = 0;
+
+ /*
+ * Determine which event happened.
+ */
+
+ if (*id == filePtr->read) {
+ mask = TCL_READABLE;
+ } else if (*id == filePtr->write) {
+ mask = TCL_WRITABLE;
+ } else if (*id == filePtr->except) {
+ mask = TCL_EXCEPTION;
+ }
+
+ /*
+ * Ignore unwanted or duplicate events.
+ */
+
+ if (!(filePtr->mask & mask) || (filePtr->readyMask & mask)) {
+ return;
+ }
+
+ /*
+ * This is an interesting event, so put it onto the event queue.
+ */
+
+ filePtr->readyMask |= mask;
+ fileEvPtr = (FileHandlerEvent *) ckalloc(sizeof(FileHandlerEvent));
+ fileEvPtr->header.proc = FileHandlerEventProc;
+ fileEvPtr->fd = filePtr->fd;
+ Tcl_QueueEvent((Tcl_Event *) fileEvPtr, TCL_QUEUE_TAIL);
+
+ /*
+ * Process events on the Tcl event queue before returning to Xt.
+ */
+
+ Tcl_ServiceAll();
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * FileHandlerEventProc --
+ *
+ * This procedure is called by Tcl_ServiceEvent when a file event
+ * reaches the front of the event queue. This procedure is
+ * responsible for actually handling the event by invoking the
+ * callback for the file handler.
+ *
+ * Results:
+ * Returns 1 if the event was handled, meaning it should be removed
+ * from the queue. Returns 0 if the event was not handled, meaning
+ * it should stay on the queue. The only time the event isn't
+ * handled is if the TCL_FILE_EVENTS flag bit isn't set.
+ *
+ * Side effects:
+ * Whatever the file handler's callback procedure does.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+FileHandlerEventProc(evPtr, flags)
+ Tcl_Event *evPtr; /* Event to service. */
+ int flags; /* Flags that indicate what events to
+ * handle, such as TCL_FILE_EVENTS. */
+{
+ FileHandler *filePtr;
+ FileHandlerEvent *fileEvPtr = (FileHandlerEvent *) evPtr;
+ int mask;
+
+ if (!(flags & TCL_FILE_EVENTS)) {
+ return 0;
+ }
+
+ /*
+ * Search through the file handlers to find the one whose handle matches
+ * the event. We do this rather than keeping a pointer to the file
+ * handler directly in the event, so that the handler can be deleted
+ * while the event is queued without leaving a dangling pointer.
+ */
+
+ for (filePtr = notifier.firstFileHandlerPtr; filePtr != NULL;
+ filePtr = filePtr->nextPtr) {
+ if (filePtr->fd != fileEvPtr->fd) {
+ continue;
+ }
+
+ /*
+ * The code is tricky for two reasons:
+ * 1. The file handler's desired events could have changed
+ * since the time when the event was queued, so AND the
+ * ready mask with the desired mask.
+ * 2. The file could have been closed and re-opened since
+ * the time when the event was queued. This is why the
+ * ready mask is stored in the file handler rather than
+ * the queued event: it will be zeroed when a new
+ * file handler is created for the newly opened file.
+ */
+
+ mask = filePtr->readyMask & filePtr->mask;
+ filePtr->readyMask = 0;
+ if (mask != 0) {
+ (*filePtr->proc)(filePtr->clientData, mask);
+ }
+ break;
+ }
+ return 1;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tcl_WaitForEvent --
+ *
+ * This function is called by Tcl_DoOneEvent to wait for new
+ * events on the message queue. If the block time is 0, then
+ * Tcl_WaitForEvent just polls without blocking.
+ *
+ * Results:
+ * Returns 1 if an event was found, else 0. This ensures that
+ * Tcl_DoOneEvent will return 1, even if the event is handled
+ * by non-Tcl code.
+ *
+ * Side effects:
+ * Queues file events that are detected by the select.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tcl_WaitForEvent(
+ Tcl_Time *timePtr) /* Maximum block time, or NULL. */
+{
+ int timeout;
+
+ if (!initialized) {
+ InitNotifier();
+ }
+
+ TclSetAppContext(NULL);
+
+ if (timePtr) {
+ timeout = timePtr->sec * 1000 + timePtr->usec / 1000;
+ if (timeout == 0) {
+ if (XtAppPending(notifier.appContext)) {
+ goto process;
+ } else {
+ return 0;
+ }
+ } else {
+ Tcl_SetTimer(timePtr);
+ }
+ }
+process:
+ XtAppProcessEvent(notifier.appContext, XtIMAll);
+ return 1;
+}
diff --git a/unix/tclXtTest.c b/unix/tclXtTest.c
index 069003f..7a30b5c 100644
--- a/unix/tclXtTest.c
+++ b/unix/tclXtTest.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclXtTest.c 1.3 97/11/06 15:16:16
+ * RCS: @(#) $Id: tclXtTest.c,v 1.1.2.2 1998/09/24 23:59:47 stanton Exp $
*/
#include <X11/Intrinsic.h>
diff --git a/win/README b/win/README
index 60f15ab..80473bf 100644
--- a/win/README
+++ b/win/README
@@ -1,6 +1,10 @@
Tcl 8.1a2 for Windows
-SCCS: @(#) README 1.28 98/02/18 15:11:13
+by Scott Stanton
+Scriptics Corporation
+scott.stanton@scriptics.com
+
+RCS: @(#) $Id: README,v 1.1.2.2 1998/09/24 23:59:48 stanton Exp $
1. Introduction
---------------
@@ -18,7 +22,7 @@ common source release. The binary distribution is a self-extracting
archive with a built-in installation script.
Look for the binary release in the same location as the source release
-(ftp.sunlabs.com:/pub/tcl or any of the mirror sites). For most users,
+(ftp.scriptics.com:/pub/tcl or any of the mirror sites). For most users,
the binary release will be much easier to install and use. You only
need the source release if you plan to modify the core of Tcl, or if
you need to compile with a different compiler. With the addition of
@@ -34,8 +38,10 @@ In order to compile Tcl for Windows, you need the following items:
Borland C++ 4.52 (both 16-bit and 32-bit compilers)
or
- Visual C++ 2.x/4.x
- Visual C++ 1.5 (to build tcl1681.dll for Win32s support of exec)
+ Visual C++ 2.x/4.x/5.x
+ Visual C++ 1.5 (to build tcl1680.dll for Win32s support of exec)
+
+In practice, the 8.1.a2 release is built with Visual C++ 5.0
In the "win" subdirectory of the source release, you will find two
files called "makefile.bc" and "makefile.vc". These are the makefiles
@@ -55,11 +61,10 @@ find them. Tcl looks in one of three places for the library files:
as specified in the registry:
For Windows NT & 95:
- HKEY_LOCAL_MACHINE\SOFTWARE\Sun\Tcl\8.1
- Value Name is "Root"
+ HKEY_LOCAL_MACHINE\SOFTWARE\Scriptics\Tcl\8.1
For Win32s:
- HKEY_CLASSES_ROOT\SOFTWARE\Sun\Tcl\8.1\
+ HKEY_CLASSES_ROOT\SOFTWARE\Scriptics\Tcl\8.1\
3) Relative to the directory containing the current .exe.
Tcl will look for a directory "..\lib\tcl8.1" relative to the
@@ -69,7 +74,90 @@ Note that in order to run tclsh81.exe, you must ensure that tcl81.dll
and tclpip81.dll (plus tcl1681.dll under Win32s) are on your path, in
the system directory, or in the directory containing tclsh81.exe.
-4. Test suite
+4. Building Extensions
+----------------------
+
+With the Windows compilers you have to worry about how you export symbols
+from DLLs. tcl.h defines a few macros to help solve this problem:
+EXTERN - all Tcl_ function prototypes use this macro, which implies
+ they are exported. You'll see this used in tcl.h and tk.h.
+ You should use this in your exported procedures.
+ However, this is not the whole story.
+TCL_STORAGE_CLASS - this is really an import/export flag, depending on if you are
+ importing symbols from a DLL (i.e., a user of the DLL), or if
+ you are exporting symbols from the DLL (i.e., you are building it.)
+ The EXTERN macro includes TCL_STORAGE_CLASS.
+ TCL_STORAGE_CLASS is defined to be either DLLIMPORT or DLLEXPORT as
+ described below.
+STATIC_BUILD - define this if you are *not* building a DLL
+ (e.g., a main program)
+DLL_BUILD - define this if you *are* building a DLL
+DLLIMPORT - If STATIC_BUILD is defined, this becomes nothing.
+ (On UNIX, DLLIMPORT is defined to be empty)
+ Otherwise, this this expands to __declspec(dllimport)
+DLLEXPORT - If STATIC_BUILD is defined, this becomes nothing.
+ (On UNIX, DLLEXPORT is defined to be empty)
+ Otherwise, this this expands to __declspec(dllexport)
+
+EXPORT(type, func)
+ For the Borland compiler, you need to export functions differently.
+ The DLLEXPORT macro is empty, and instead you need to use
+ EXPORT because they had a different order. Your declaration will
+ look like
+ EXTERN EXPORT(int, Foo_Init)(Tcl_Interp *interp);
+We have not defined EXPORT anywhere. You can paste this into your C file:
+#ifndef STATIC_BUILD
+#if defined(_MSC_VER)
+# define EXPORT(a,b) __declspec(dllexport) a b
+# define DllEntryPoint DllMain
+#else
+# if defined(__BORLANDC__)
+# define EXPORT(a,b) a _export b
+# else
+# define EXPORT(a,b) a b
+# endif
+#endif
+#endif
+
+
+How to use these:
+
+Assume your extension is named Foo. In its Makefile, define
+BUILD_Foo so that you know you are building Foo and not using it.
+Then, in your main header file, foo.h, conditionally define
+EXPORT to be either DLLIMPORT or DLLEXPORT based on the
+presense of BUILD_Foo, like this:
+
+#ifndef _FOO
+#define _FOO
+#include "tcl.h"
+/* Additional includes go here */
+/*
+ * if the BUILD_foo macro is defined, the assumption is that we are
+ * building the dynamic library.
+ */
+#ifdef BUILD_Foo
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+/*
+ * Function prototypes for this module.
+ */
+EXTERN int Foo_Init _ANSI_ARGS_((Tcl_Interp *interp));
+EXTERN int Foo_SafeInit _ANSI_ARGS_((Tcl_Interp *interp));
+/* Additional prototypes go here */
+/*
+ * end of foo.h
+ * reset TCL_STORAGE_CLASS to DLLIMPORT.
+ */
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLIMPORT
+#endif /* _FOO */
+
+In your C file, put EXTERN before then functions you need to export.
+If you use Borland, you'll need to use the old EXPORT macro, too.
+
+5. Test suite
-------------
This distribution contains an extensive test suite for Tcl. Some of
@@ -81,7 +169,7 @@ In order to run the test suite, you build the "test" target using the
appropriate makefile for your compiler.
-5. Known Bugs
+6. Known Bugs
-------------
Here is the current list of known bugs/missing features for the
@@ -98,6 +186,11 @@ Windows version of Tcl:
- Environment variables containing international characters aren't
imported correctly.
+If you have comments or bug reports for the Windows version of Tcl,
+please direct them to:
+
+<bugs@scriptics.com>
+
If you have comments or bug reports for the Windows version of Tk,
please direct them to the comp.lang.tcl newsgroup or the wintcl
mailing list (see http://sunscript.sun.com/win/wintcl-list.html for
diff --git a/win/cat.c b/win/cat.c
index 0ce550f..2c3f7e3 100644
--- a/win/cat.c
+++ b/win/cat.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) cat.c 1.3 96/09/18 15:15:32
+ * RCS: @(#) $Id: cat.c,v 1.1.2.1 1998/09/24 23:59:48 stanton Exp $
*/
#include <stdio.h>
diff --git a/win/makefile.bc b/win/makefile.bc
index 3436b5c..cb0a936 100644
--- a/win/makefile.bc
+++ b/win/makefile.bc
@@ -1,5 +1,5 @@
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
-# SCCS: @(#) makefile.bc 1.88 98/02/19 16:49:06
+# RCS: @(#) $Id: makefile.bc,v 1.1.2.2 1998/09/24 23:59:49 stanton Exp $
#
# Borland C++ 4.5 makefile
#
@@ -105,6 +105,7 @@ TCLOBJS = \
$(TMPDIR)\tclPreserve.obj \
$(TMPDIR)\tclProc.obj \
$(TMPDIR)\tclRegexp.obj \
+ $(TMPDIR)\tclResolve.obj \
$(TMPDIR)\tclResult.obj \
$(TMPDIR)\tclStringObj.obj \
$(TMPDIR)\tclThread.obj \
diff --git a/win/makefile.vc b/win/makefile.vc
index 7bdfff4..5ded8d6 100644
--- a/win/makefile.vc
+++ b/win/makefile.vc
@@ -4,7 +4,7 @@
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# Copyright (c) 1995-1996 Sun Microsystems, Inc.
-# SCCS: @(#) makefile.vc 1.91 98/02/18 15:07:56
+# RCS: @(#) $Id: makefile.vc,v 1.1.2.2 1998/09/24 23:59:49 stanton Exp $
# Does not depend on the presence of any environment variables in
# order to compile tcl; all needed information is derived from
@@ -30,13 +30,17 @@
# will return an error.
# B. A 16-bit program to test the behavior of the exec
# command under NT and 95 will not be built.
+# INSTALLDIR = where the install- targets should copy the binaries and
+# support files
#
ROOT = ..
-TMPDIR = .
-TOOLS32 = c:\msdev
+TOOLS32 = c:\progra~1\devstudio\vc
+TOOLS32_rc = c:\progra~1\devstudio\sharedide
TOOLS16 = c:\msvc
+INSTALLDIR = c:\progra~1\Tcl
+
# Set this to the appropriate value of /MACHINE: for your platform
MACHINE = IX86
@@ -46,6 +50,9 @@ MACHINE = IX86
# Uncomment the following line to compile with thread support
#THREADDEFINES = -DTCL_THREADS=1
+# Set NODEBUG to 0 to compile with symbols
+NODEBUG = 1
+
# The following defines can be added to enable various options in the
# way Tcl is built:
#
@@ -59,21 +66,44 @@ MACHINE = IX86
# Do not modify below this line
######################################################################
-VERSION = 81
+NAMEPREFIX = tcl
+DOTVERSION = 8.0
+VERSION = 80
-TCLLIB = tcl$(VERSION).lib
-TCLDLL = tcl$(VERSION).dll
-TCLPLUGINLIB = tcl$(VERSION)p.lib
-TCLPLUGINDLL = tcl$(VERSION)p.dll
-TCL16DLL = tcl16$(VERSION).dll
-TCLSH = tclsh$(VERSION).exe
-TCLSHP = tclshp$(VERSION).exe
-TCLTEST = tcltest.exe
+BINROOT = .
+!IF "$(NODEBUG)" == "1"
+TMPDIRNAME = Release
+DBGX =
+!ELSE
+TMPDIRNAME = Debug
+DBGX = d
+!ENDIF
+TMPDIR = $(BINROOT)\$(TMPDIRNAME)
+OUTDIRNAME = $(TMPDIRNAME)
+OUTDIR = $(TMPDIR)
+
+TCLLIB = $(OUTDIR)\$(NAMEPREFIX)$(VERSION)$(DBGX).lib
+TCLDLLNAME = $(NAMEPREFIX)$(VERSION)$(DBGX).dll
+TCLDLL = $(OUTDIR)\$(TCLDLLNAME)
+TCLPLUGINLIB = $(OUTDIR)\$(NAMEPREFIX)$(VERSION)p$(DBGX).lib
+TCLPLUGINDLLNAME= $(NAMEPREFIX)$(VERSION)p$(DBGX).dll
+TCLPLUGINDLL = $(OUTDIR)\$(TCLPLUGINDLLNAME)
+TCL16DLL = $(OUTDIR)\$(NAMEPREFIX)16$(VERSION)$(DBGX).dll
+TCLSH = $(OUTDIR)\$(NAMEPREFIX)sh$(VERSION)$(DBGX).exe
+TCLSHP = $(OUTDIR)\$(NAMEPREFIX)shp$(VERSION)$(DBGX).exe
+TCLPIPEDLLNAME = $(NAMEPREFIX)pip$(VERSION)$(DBGX).dll
+TCLPIPEDLL = $(OUTDIR)\$(TCLPIPEDLLNAME)
+TCLREGDLLNAME = $(NAMEPREFIX)reg$(VERSION)$(DBGX).dll
+TCLREGDLL = $(OUTDIR)\$(TCLREGDLLNAME)
+TCLTEST = $(OUTDIR)\$(NAMEPREFIX)test.exe
DUMPEXTS = $(TMPDIR)\dumpexts.exe
-TCLPIPEDLL = tclpip$(VERSION).dll
-TCLREGDLL = tclreg$(VERSION).dll
-CAT16 = cat16.exe
-CAT32 = cat32.exe
+CAT16 = $(TMPDIR)\cat16.exe
+CAT32 = $(TMPDIR)\cat32.exe
+
+LIB_INSTALL_DIR = $(INSTALLDIR)\lib
+BIN_INSTALL_DIR = $(INSTALLDIR)\bin
+SCRIPT_INSTALL_DIR = $(INSTALLDIR)\lib\tcl$(DOTVERSION)
+INCLUDE_INSTALL_DIR = $(INSTALLDIR)\include
TCLSHOBJS = \
$(TMPDIR)\tclAppInit.obj
@@ -132,6 +162,7 @@ TCLOBJS = \
$(TMPDIR)\tclPkg.obj \
$(TMPDIR)\tclPosixStr.obj \
$(TMPDIR)\tclPreserve.obj \
+ $(TMPDIR)\tclResolve.obj \
$(TMPDIR)\tclProc.obj \
$(TMPDIR)\tclRegexp.obj \
$(TMPDIR)\tclResult.obj \
@@ -157,7 +188,7 @@ TCLOBJS = \
cc32 = $(TOOLS32)\bin\cl.exe
link32 = $(TOOLS32)\bin\link.exe
-rc32 = $(TOOLS32)\bin\rc.exe
+rc32 = $(TOOLS32_rc)\bin\rc.exe
include32 = -I$(TOOLS32)\include
cc16 = $(TOOLS16)\bin\cl.exe
@@ -181,9 +212,7 @@ DLL16_CFLAGS = $(cdebug) $(cflags) $(include16) -ALw
# Link flags
######################################################################
-!IF "$(DEBUG)" == "1"
-ldebug = -debug:full -debugtype:cv
-!ELSE
+!IF "$(NODEBUG)" == "1"
ldebug = /RELEASE
!ENDIF
@@ -193,7 +222,7 @@ lcommon = /NODEFAULTLIB /RELEASE /NOLOGO
# declarations for use on Intel i386, i486, and Pentium systems
!IF "$(MACHINE)" == "IX86"
DLLENTRY = @12
-lflags = $(lcommon) -align:0x1000 /MACHINE:$(MACHINE)
+lflags = $(lcommon) /MACHINE:$(MACHINE)
!ELSE
lflags = $(lcommon) /MACHINE:$(MACHINE)
!ENDIF
@@ -222,15 +251,19 @@ conlibsdll = $(libcdll) $(baselibs)
# Compile flags
######################################################################
-!IF "$(DEBUG)" == "1"
-#cdebug = -Z7 -Od -WX
-cdebug = -Z7 -Od
+!IF "$(NODEBUG)" == "1"
+!IF "$(MACHINE)" == "ALPHA"
+# MSVC on Alpha doesn't understand -Ot
+cdebug = -O2i -Gs -GD
!ELSE
cdebug = -Oti -Gs -GD
!ENDIF
+!ELSE
+cdebug = -Z7 -Od -WX
+!ENDIF
# declarations common to all compiler options
-ccommon = -c -W3 -nologo -YX -Dtry=__try -Dexcept=__except
+ccommon = -c -W3 -nologo -YX -Fp$(TMPDIR)\ -Dtry=__try -Dexcept=__except
!IF "$(MACHINE)" == "IX86"
cflags = $(ccommon) -D_X86_=1
@@ -252,21 +285,32 @@ cvars = -DWIN32 -D_WIN32
cvarsmt = $(cvars) -D_MT
cvarsdll = $(cvarsmt) -D_DLL
+!IF "$(NODEBUG)" == "1"
+cvarsdll = $(cvars) -MD
+!ELSE
+cvarsdll = $(cvars) -MDd
+!ENDIF
+
######################################################################
# Project specific targets
######################################################################
-release: $(TCLSH) dlls
-dlls: $(TCL16DLL) $(TCLPIPEDLL) $(TCLREGDLL)
-all: $(TCLSH) dlls $(CAT16) $(CAT32)
-tcltest: $(TCLTEST) dlls $(CAT16) $(CAT32)
-plugin: $(TCLPLUGINDLL) $(TCLSHP)
-test: $(TCLTEST) dlls $(CAT16) $(CAT32)
+release: setup $(TCLSH) dlls
+dlls: setup $(TCL16DLL) $(TCLPIPEDLL) $(TCLREGDLL)
+all: setup $(TCLSH) dlls $(CAT16) $(CAT32)
+tcltest: setup $(TCLTEST) dlls $(CAT16) $(CAT32)
+plugin: setup $(TCLPLUGINDLL) $(TCLSHP)
+install: install-binaries install-libraries
+test: setup $(TCLTEST) dlls $(CAT16) $(CAT32)
$(TCLTEST) <<
cd ../tests
source all
<<
+setup:
+ @mkd $(TMPDIR)
+ @mkd $(OUTDIR)
+
$(DUMPEXTS): $(WINDIR)\winDumpExts.c
$(cc32) $(CON_CFLAGS) -Fo$(TMPDIR)\ $?
set LIB=$(TOOLS32)\lib
@@ -351,44 +395,96 @@ $(CAT16): $(WINDIR)\cat.c
$(TMPDIR)\cat.obj,$@,nul,llibce.lib,nul
$(TMPDIR)\tcl.def: $(DUMPEXTS) $(TCLOBJS)
- $(DUMPEXTS) -o $@ $(TCLDLL) @<<
+ $(DUMPEXTS) -o $@ $(TCLDLLNAME) @<<
$(TCLOBJS)
<<
$(TMPDIR)\plugin.def: $(DUMPEXTS) $(TCLOBJS)
- $(DUMPEXTS) -o $@ $(TCLPLUGINDLL) @<<
+ $(DUMPEXTS) -o $@ $(TCLPLUGINDLLNAME) @<<
$(TCLOBJS)
<<
+install-binaries: $(TCLSH)
+ @mkd $(BIN_INSTALL_DIR)
+ @mkd $(LIB_INSTALL_DIR)
+ @echo installing $(TCLDLLNAME)
+ @copy $(TCLDLL) $(BIN_INSTALL_DIR)
+ @echo installing $(TCLSH)
+ @copy $(TCLSH) $(BIN_INSTALL_DIR)
+
+install-libraries:
+ @mkd $(LIB_INSTALL_DIR)
+ @mkd $(INCLUDE_INSTALL_DIR)
+ @mkd $(SCRIPT_INSTALL_DIR)
+ @mkd $(SCRIPT_INSTALL_DIR)\http1.0
+ @copy $(ROOT)\library\http1.0\http.tcl $(SCRIPT_INSTALL_DIR)\http1.0
+ @copy $(ROOT)\library\http1.0\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)\http1.0
+ @mkd $(SCRIPT_INSTALL_DIR)\http2.0
+ @copy $(ROOT)\library\http2.0\http.tcl $(SCRIPT_INSTALL_DIR)\http2.0
+ @copy $(ROOT)\library\http2.0\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)\http2.0
+ @mkd $(SCRIPT_INSTALL_DIR)\opt0.1
+ @copy $(ROOT)\library\opt0.1\optparse.tcl $(SCRIPT_INSTALL_DIR)\opt0.1
+ @copy $(ROOT)\library\opt0.1\pkgIndex.tcl $(SCRIPT_INSTALL_DIR)\opt0.1
+ @copy $(GENERICDIR)\tcl.h $(INCLUDE_INSTALL_DIR)
+ @copy $(ROOT)\library\history.tcl $(SCRIPT_INSTALL_DIR)
+ @copy $(ROOT)\library\init.tcl $(SCRIPT_INSTALL_DIR)
+ @copy $(ROOT)\library\ldAout.tcl $(SCRIPT_INSTALL_DIR)
+ @copy $(ROOT)\library\parray.tcl $(SCRIPT_INSTALL_DIR)
+ @copy $(ROOT)\library\safe.tcl $(SCRIPT_INSTALL_DIR)
+ @copy $(ROOT)\library\tclIndex $(SCRIPT_INSTALL_DIR)
+ @copy $(ROOT)\library\word.tcl $(SCRIPT_INSTALL_DIR)
+
#
# Special case object file targets
#
+$(TMPDIR)\tclWinInit.obj: $(WINDIR)\tclWinInit.c
+ $(cc32) -DDLL_BUILD -DBUILD_tcl $(TCL_CFLAGS) $(EXTFLAGS) \
+ -Fo$(TMPDIR)\ $?
+
$(TMPDIR)\testMain.obj: $(WINDIR)\tclAppInit.c
- $(cc32) $(TCL_CFLAGS) -DTCL_TEST -Fo$(TMPDIR)\testMain.obj $?
+ $(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -DTCL_TEST \
+ -Fo$(TMPDIR)\testMain.obj $?
+
+$(TMPDIR)\tclTest.obj: $(GENERICDIR)\tclTest.c
+ $(cc32) $(TCL_CFLAGS) -Fo$@ $?
+
+$(TMPDIR)\tclTestObj.obj: $(GENERICDIR)\tclTestObj.c
+ $(cc32) $(TCL_CFLAGS) -Fo$@ $?
+
+$(TMPDIR)\tclWinTest.obj: $(WINDIR)\tclWinTest.c
+ $(cc32) $(TCL_CFLAGS) -Fo$@ $?
+
+$(TMPDIR)\tclAppInit.obj : $(WINDIR)\tclAppInit.c
+ $(cc32) $(TCL_CFLAGS) -DSTATIC_BUILD -Fo$@ $?
#
# Implicit rules
#
{$(WINDIR)}.c{$(TMPDIR)}.obj:
- $(cc32) $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
+ $(cc32) -DDLL_BUILD -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
{$(GENERICDIR)}.c{$(TMPDIR)}.obj:
- $(cc32) $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
+ $(cc32) -DDLL_BUILD -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
{$(ROOT)\compat}.c{$(TMPDIR)}.obj:
- $(cc32) $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
+ $(cc32) -DDLL_BUILD -DBUILD_tcl $(TCL_CFLAGS) -Fo$(TMPDIR)\ $<
{$(WINDIR)}.rc{$(TMPDIR)}.res:
$(rc32) -fo $@ -r -i $(GENERICDIR) -i $(WINDIR) -D__WIN32__ \
$(TCL_DEFINES) $<
clean:
- -@del *.exp
- -@del *.lib
- -@del *.dll
- -@del *.exe
+ -@del $(OUTDIR)\*.exp
+ -@del $(OUTDIR)\*.lib
+ -@del $(OUTDIR)\*.dll
+ -@del $(OUTDIR)\*.exe
+ -@del $(OUTDIR)\*.pdb
+ -@del $(TMPDIR)\*.pch
-@del $(TMPDIR)\*.obj
-@del $(TMPDIR)\*.res
-@del $(TMPDIR)\*.def
+ -@del $(TMPDIR)\*.exe
+ -@rmd $(OUTDIR)
+ -@rmd $(TMPDIR)
diff --git a/win/mkd.bat b/win/mkd.bat
new file mode 100644
index 0000000..3cc90f1
--- /dev/null
+++ b/win/mkd.bat
@@ -0,0 +1,20 @@
+@echo off
+rem RCS: @(#) $Id: mkd.bat,v 1.1.2.1 1998/09/24 23:59:49 stanton Exp $
+
+if exist %1 goto end
+
+if %OS% == Windows_NT goto winnt
+
+echo Add support for Win 95 please
+goto end
+
+goto success
+
+:winnt
+md %1
+if errorlevel 1 goto end
+
+:success
+echo created directory %1
+
+:end
diff --git a/win/pkgIndex.tcl b/win/pkgIndex.tcl
index be61b0a..aafe17f 100644
--- a/win/pkgIndex.tcl
+++ b/win/pkgIndex.tcl
@@ -6,6 +6,6 @@
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
-# SCCS: @(#) pkgIndex.tcl 1.2 97/08/22 11:13:05
+# RCS: @(#) $Id: pkgIndex.tcl,v 1.1.2.2 1998/09/24 23:59:49 stanton Exp $
package ifneeded registry 1.0 [list tclPkgSetup $dir registry 1.0 {{tclreg81.dll load registry}}]
diff --git a/win/rmd.bat b/win/rmd.bat
new file mode 100644
index 0000000..c7fb74b
--- /dev/null
+++ b/win/rmd.bat
@@ -0,0 +1,20 @@
+@echo off
+rem RCS: @(#) $Id: rmd.bat,v 1.1.2.1 1998/09/24 23:59:49 stanton Exp $
+
+if not exist %1 goto end
+
+if %OS% == Windows_NT goto winnt
+
+echo Add support for Win 95 please
+goto end
+
+goto success
+
+:winnt
+rmdir %1 /s /q
+if errorlevel 1 goto end
+
+:success
+echo deleted directory %1
+
+:end
diff --git a/win/stub16.c b/win/stub16.c
index 5fafd29..32e1e9e 100644
--- a/win/stub16.c
+++ b/win/stub16.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) stub16.c 1.5 96/12/11 20:01:58
+ * RCS: @(#) $Id: stub16.c,v 1.1.2.1 1998/09/24 23:59:49 stanton Exp $
*/
#define STRICT
diff --git a/win/tcl.rc b/win/tcl.rc
index dfc6cac..34bc66c 100644
--- a/win/tcl.rc
+++ b/win/tcl.rc
@@ -1,4 +1,4 @@
-// SCCS: @(#) tcl.rc 1.26 98/01/20 19:38:38
+// RCS: @(#) $Id: tcl.rc,v 1.1.2.2 1998/09/24 23:59:50 stanton Exp $
//
// Version
//
diff --git a/win/tcl16.rc b/win/tcl16.rc
index 5e4498e..a202c3c 100644
--- a/win/tcl16.rc
+++ b/win/tcl16.rc
@@ -1,4 +1,4 @@
-// SCCS: @(#) tcl16.rc 1.17 96/09/18 18:19:00
+// RCS: @(#) $Id: tcl16.rc,v 1.1.2.1 1998/09/24 23:59:50 stanton Exp $
//
// Version
//
diff --git a/win/tclAppInit.c b/win/tclAppInit.c
index a84e9c4..1dd2e96 100644
--- a/win/tclAppInit.c
+++ b/win/tclAppInit.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclAppInit.c 1.20 98/02/19 15:23:43
+ * RCS: @(#) $Id: tclAppInit.c,v 1.1.2.2 1998/09/24 23:59:50 stanton Exp $
*/
#include "tcl.h"
diff --git a/win/tclWin16.c b/win/tclWin16.c
index d8ea801..c4802de 100644
--- a/win/tclWin16.c
+++ b/win/tclWin16.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWin16.c 1.18 97/05/23 13:13:32
+ * RCS: @(#) $Id: tclWin16.c,v 1.1.2.1 1998/09/24 23:59:50 stanton Exp $
*/
#define STRICT
diff --git a/win/tclWin32Dll.c b/win/tclWin32Dll.c
index acb431f..2584b71 100644
--- a/win/tclWin32Dll.c
+++ b/win/tclWin32Dll.c
@@ -1,4 +1,5 @@
/*
+
* tclWin32Dll.c --
*
* This file contains the DLL entry point which sets up the 32-to-16-bit
@@ -9,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWin32Dll.c 1.37 98/02/02 22:07:20
+ * RCS: @(#) $Id: tclWin32Dll.c,v 1.1.2.2 1998/09/24 23:59:50 stanton Exp $
*/
#include "tclWinInt.h"
@@ -121,12 +122,16 @@ TclWinProcs *tclWinProcs;
static Tcl_Encoding tclWinTCharEncoding;
/*
- * Declarations for functions that are only used in this file.
+ * The following declaration is for the VC++ DLL entry point.
*/
BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason,
LPVOID reserved);
+
+#ifdef __WIN32__
+#ifndef STATIC_BUILD
+
/*
*----------------------------------------------------------------------
@@ -178,8 +183,6 @@ DllMain(hInst, reason, reserved)
DWORD reason; /* Reason this function is being called. */
LPVOID reserved; /* Not used. */
{
- OSVERSIONINFO os;
-
switch (reason) {
case DLL_PROCESS_ATTACH:
if (hInstance != NULL) {
@@ -194,12 +197,7 @@ DllMain(hInst, reason, reserved)
return FALSE;
}
- hInstance = hInst;
- os.dwOSVersionInfoSize = sizeof(os);
- GetVersionEx(&os);
- platformId = os.dwPlatformId;
-
- tclWinProcs = &asciiProcs;
+ TclWinInit(hInst);
return TRUE;
case DLL_PROCESS_DETACH:
@@ -211,6 +209,9 @@ DllMain(hInst, reason, reserved)
return TRUE;
}
+
+#endif /* !STATIC_BUILD */
+#endif /* __WIN32__ */
/*
*----------------------------------------------------------------------
@@ -311,6 +312,88 @@ TclWinGetTclInstance()
/*
*----------------------------------------------------------------------
*
+ * TclWinInit --
+ *
+ * This function initializes the internal state of the tcl library.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Initializes the 16-bit thunking library, and the tclPlatformId
+ * variable.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+TclWinInit(hInst)
+ HINSTANCE hInst; /* Library instance handle. */
+{
+ OSVERSIONINFO os;
+
+ tclInstance = hInst;
+ os.dwOSVersionInfoSize = sizeof(os);
+ GetVersionEx(&os);
+ tclPlatformId = os.dwPlatformId;
+
+ /*
+ * The following code stops Windows 3.x from automatically putting
+ * up Sharing Violation dialogs, e.g, when someone tries to
+ * access a file that is locked or a drive with no disk in it.
+ * Tcl already returns the appropriate error to the caller, and they
+ * can decide to put up their own dialog in response to that failure.
+ *
+ * Under 95 and NT, the system doesn't automatically put up dialogs
+ * when the above operations fail.
+ */
+
+ if (tclPlatformId == VER_PLATFORM_WIN32s) {
+ SetErrorMode(SetErrorMode(0) | SEM_FAILCRITICALERRORS);
+ }
+
+ tclWinProcs = &asciiProcs;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * TclpFinalize --
+ *
+ * Clean up the Windows specific library state.
+ *
+ * Results:
+ * None.
+ *
+ * Side effects:
+ * Unloads any DLLs and cleans up the thunking library, if
+ * necessary.
+ *
+ *----------------------------------------------------------------------
+ */
+
+void
+TclpFinalize()
+{
+ /*
+ * Unregister the Tcl thunk.
+ */
+
+ if (UTUnRegister != NULL) {
+ UTUnRegister(tclInstance);
+ UTUnRegister = NULL;
+ }
+
+ /*
+ * Cleanup any dynamically loaded libraries.
+ */
+
+ UnloadLibraries();
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
* TclWinGetPlatformId --
*
* Determines whether running under NT, 95, or Win32s, to allow
diff --git a/win/tclWinChan.c b/win/tclWinChan.c
index 913d547..1f08f51 100644
--- a/win/tclWinChan.c
+++ b/win/tclWinChan.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinChan.c 1.83 98/02/19 14:12:21
+ * RCS: @(#) $Id: tclWinChan.c,v 1.1.2.2 1998/09/24 23:59:51 stanton Exp $
*/
#include "tclWinInt.h"
@@ -840,7 +840,7 @@ ComGetOptionProc(instanceData, interp, optionName, dsPtr)
/*
*----------------------------------------------------------------------
*
- * Tcl_OpenFileChannel --
+ * TclpOpenFileChannel --
*
* Open an File based channel on Unix systems.
*
@@ -856,7 +856,7 @@ ComGetOptionProc(instanceData, interp, optionName, dsPtr)
*/
Tcl_Channel
-Tcl_OpenFileChannel(interp, fileName, modeString, permissions)
+TclpOpenFileChannel(interp, fileName, modeString, permissions)
Tcl_Interp *interp; /* Interpreter for error reporting;
* can be NULL. */
char *fileName; /* Name of file to open. */
@@ -905,7 +905,7 @@ Tcl_OpenFileChannel(interp, fileName, modeString, permissions)
channelPermissions = (TCL_READABLE | TCL_WRITABLE);
break;
default:
- panic("Tcl_OpenFileChannel: invalid mode value");
+ panic("TclpOpenFileChannel: invalid mode value");
break;
}
diff --git a/win/tclWinError.c b/win/tclWinError.c
index 8e67b34..d0bf5d2 100644
--- a/win/tclWinError.c
+++ b/win/tclWinError.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinError.c 1.8 97/10/29 09:47:13
+ * RCS: @(#) $Id: tclWinError.c,v 1.1.2.2 1998/09/24 23:59:51 stanton Exp $
*/
#include "tclWinInt.h"
diff --git a/win/tclWinFCmd.c b/win/tclWinFCmd.c
index 97986c9..97826e5 100644
--- a/win/tclWinFCmd.c
+++ b/win/tclWinFCmd.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinFCmd.c 1.34 98/02/11 17:39:47
+ * RCS: @(#) $Id: tclWinFCmd.c,v 1.1.2.2 1998/09/24 23:59:51 stanton Exp $
*/
#include "tclWinInt.h"
diff --git a/win/tclWinFile.c b/win/tclWinFile.c
index 889994c1..99a20c7 100644
--- a/win/tclWinFile.c
+++ b/win/tclWinFile.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinFile.c 1.59 98/02/02 22:07:09
+ * RCS: @(#) $Id: tclWinFile.c,v 1.1.2.2 1998/09/24 23:59:51 stanton Exp $
*/
#include "tclWinInt.h"
@@ -952,4 +952,3 @@ TclWinResolveShortcut(bufferPtr)
return 0;
}
#endif
-
diff --git a/win/tclWinInit.c b/win/tclWinInit.c
index 98eda3f..ec0acea 100644
--- a/win/tclWinInit.c
+++ b/win/tclWinInit.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinInit.c 1.48 98/02/17 17:17:19
+ * RCS: @(#) $Id: tclWinInit.c,v 1.1.2.2 1998/09/24 23:59:52 stanton Exp $
*/
#include "tclWinInt.h"
@@ -17,6 +17,15 @@
#include <winbase.h>
/*
+ * The following macro can be defined at compile time to specify
+ * the root of the Tcl registry keys.
+ */
+
+#ifndef TCL_REGISTRY_KEY
+#define TCL_REGISTRY_KEY "Software\\Scriptics\\Tcl\\" TCL_VERSION
+#endif
+
+/*
* The following declaration is a workaround for some Microsoft brain damage.
* The SYSTEM_INFO structure is different in various releases, even though the
* layout is the same. So we overlay our own structure on top of it so we
@@ -68,8 +77,8 @@ static char* processors[NUMPROCESSORS] = {
* The Init script (common to Windows and Unix platforms) is
* defined in tkInitScript.h
*/
-#include "tclInitScript.h"
+#include "tclInitScript.h"
static void AppendEnvironment(Tcl_Obj *listPtr, CONST char *lib);
static void AppendPath(Tcl_Obj *listPtr, HMODULE hModule,
@@ -329,13 +338,10 @@ AppendRegistry(
if (TclWinGetPlatformId() == VER_PLATFORM_WIN32s) {
key = HKEY_CLASSES_ROOT;
- subKey = "";
} else {
key = HKEY_LOCAL_MACHINE;
- subKey = "Root";
}
- result = RegOpenKeyExA(key, "Software\\Sun\\Tcl\\" TCL_VERSION, 0,
- KEY_QUERY_VALUE, &key);
+ result = RegOpenKeyExA(key, TCL_REGISTRY_KEY, 0, KEY_QUERY_VALUE, &key);
if (result != ERROR_SUCCESS) {
return;
}
@@ -349,13 +355,13 @@ AppendRegistry(
len = MAX_PATH;
if (TclWinGetPlatformId() == VER_PLATFORM_WIN32_NT) {
- MultiByteToWideChar(CP_ACP, 0, subKey, -1, wBuf, MAX_PATH);
+ MultiByteToWideChar(CP_ACP, 0, "", -1, wBuf, MAX_PATH);
result = RegQueryValueExW(key, wBuf, NULL, NULL, (LPBYTE) wBuf, &len);
if (result == ERROR_SUCCESS) {
len = ToUtf(wBuf, buf);
}
} else {
- result = RegQueryValueExA(key, subKey, NULL, NULL, (LPBYTE) buf, &len);
+ result = RegQueryValueExA(key, "", NULL, NULL, (LPBYTE) buf, &len);
}
if (result == ERROR_SUCCESS) {
if (buf[len - 1] != '\\') {
diff --git a/win/tclWinInt.h b/win/tclWinInt.h
index 19d3fb6..2d3f5a0 100644
--- a/win/tclWinInt.h
+++ b/win/tclWinInt.h
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinInt.h 1.17 98/02/02 22:07:26
+ * RCS: @(#) $Id: tclWinInt.h,v 1.1.2.2 1998/09/24 23:59:52 stanton Exp $
*/
#ifndef _TCLWININT
@@ -29,6 +29,11 @@
#define TCL_WIN_STACK_THRESHOLD 0x2000
+#ifdef BUILD_tcl
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
/*
* Some versions of Borland C have a define for the OSVERSIONINFO for
* Win32s and for NT, but not for Windows 95.
@@ -93,14 +98,16 @@ EXTERN Tcl_Encoding tclWinTCharEncoding;
EXTERN TclPlatformType *TclWinGetPlatform(void);
EXTERN int TclWinGetPlatformId(void);
+EXTERN void TclWinInit(HINSTANCE hInst);
EXTERN char * TclWinNoBackslash(char *path);
EXTERN void TclWinSetInterfaces(int);
EXTERN int TclWinSynchSpawn(void *args, int type, void **trans,
Tcl_Pid *pidPtr);
-
EXTERN TCHAR * Tcl_WinUtfToTChar(CONST char *string, int len,
Tcl_DString *dsPtr);
EXTERN char * Tcl_WinTCharToUtf(CONST TCHAR *string, int len,
Tcl_DString *dsPtr);
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLIMPORT
#endif /* _TCLWININT */
diff --git a/win/tclWinLoad.c b/win/tclWinLoad.c
index b49cb1c..a488cf1 100644
--- a/win/tclWinLoad.c
+++ b/win/tclWinLoad.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinLoad.c 1.10 98/01/20 22:42:13
+ * RCS: @(#) $Id: tclWinLoad.c,v 1.1.2.2 1998/09/24 23:59:52 stanton Exp $
*/
#include "tclWinInt.h"
diff --git a/win/tclWinMtherr.c b/win/tclWinMtherr.c
index f630767..2a28411 100644
--- a/win/tclWinMtherr.c
+++ b/win/tclWinMtherr.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinMtherr.c 1.4 98/02/13 15:35:39
+ * RCS: @(#) $Id: tclWinMtherr.c,v 1.1.2.2 1998/09/24 23:59:52 stanton Exp $
*/
#include "tclWinInt.h"
diff --git a/win/tclWinNotify.c b/win/tclWinNotify.c
index 99eb641..71b592e 100644
--- a/win/tclWinNotify.c
+++ b/win/tclWinNotify.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinNotify.c 1.20 98/02/12 19:04:16
+ * RCS: @(#) $Id: tclWinNotify.c,v 1.1.2.2 1998/09/24 23:59:52 stanton Exp $
*/
#include "tclWinInt.h"
diff --git a/win/tclWinPipe.c b/win/tclWinPipe.c
index 0c1d8a9..6b6ecdb 100644
--- a/win/tclWinPipe.c
+++ b/win/tclWinPipe.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinPipe.c 1.63 98/02/19 14:12:31
+ * RCS: @(#) $Id: tclWinPipe.c,v 1.1.2.2 1998/09/24 23:59:52 stanton Exp $
*/
#include "tclWinInt.h"
@@ -1743,13 +1743,19 @@ BuildCommandLine(
}
quote = 0;
- for (start = arg; *start != '\0'; start++) {
- if (isspace(*start)) { /* INTL: ISO space. */
- quote = 1;
- Tcl_DStringAppend(&ds, "\"", 1);
- break;
+ if (argv[i][0] == '\0') {
+ quote = 1;
+ } else {
+ for (start = argv[i]; *start != '\0'; start++) {
+ if (isspace(*start)) { /* INTL: ISO space. */
+ quote = 1;
+ break;
+ }
}
}
+ if (quote) {
+ Tcl_DStringAppend(linePtr, "\"", 1);
+ }
start = arg;
for (special = arg; ; ) {
diff --git a/win/tclWinPort.h b/win/tclWinPort.h
index 7452739..18b4996 100644
--- a/win/tclWinPort.h
+++ b/win/tclWinPort.h
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinPort.h 1.62 98/02/18 14:00:22
+ * RCS: @(#) $Id: tclWinPort.h,v 1.1.2.2 1998/09/24 23:59:53 stanton Exp $
*/
#ifndef _TCLWINPORT
@@ -62,6 +62,11 @@ typedef float *TCHAR;
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
+#ifdef BUILD_tcl
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLEXPORT
+#endif
+
/*
* Define EINPROGRESS in terms of WSAEINPROGRESS.
*/
@@ -414,6 +419,10 @@ EXTERN size_t TclStrftime _ANSI_ARGS_((char *s, size_t maxsize,
EXTERN int TclpStat _ANSI_ARGS_((CONST char *path,
struct stat *buf));
+EXTERN int TclpAccess _ANSI_ARGS_((CONST char *path,
+ int mode));
+
+#define TclpReleaseFile(file) ckfree((char *) file)
/*
* Declarations for Windows-only functions.
@@ -451,4 +460,7 @@ typedef int TclpMutex;
#define TclpMutexUnlock(a)
#endif /* TCL_THREADS */
+# undef TCL_STORAGE_CLASS
+# define TCL_STORAGE_CLASS DLLIMPORT
+
#endif /* _TCLWINPORT */
diff --git a/win/tclWinReg.c b/win/tclWinReg.c
index 718aa65..2fae2b2 100644
--- a/win/tclWinReg.c
+++ b/win/tclWinReg.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinReg.c 1.12 98/02/11 17:41:21
+ * RCS: @(#) $Id: tclWinReg.c,v 1.1.2.2 1998/09/24 23:59:53 stanton Exp $
*/
#include <tcl.h>
@@ -21,21 +21,23 @@
#undef WIN32_LEAN_AND_MEAN
/*
+ * TCL_STORAGE_CLASS is set unconditionally to DLLEXPORT because the
+ * Registry_Init declaration is in the source file itself, which is only
+ * accessed when we are building a library.
+ */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLEXPORT
+
+/*
* VC++ has an alternate entry point called DllMain, so we need to rename
* our entry point.
*/
-#ifndef STATIC_BUILD
-#if defined(_MSC_VER)
-# define EXPORT(a,b) __declspec(dllexport) a b
-# define DllEntryPoint DllMain
-#else
-# if defined(__BORLANDC__)
-# define EXPORT(a,b) a _export b
-# else
-# define EXPORT(a,b) a b
-# endif
-#endif
+#ifdef DLL_BUILD
+# if defined(_MSC_VER)
+# define DllEntryPoint DllMain
+# endif
#endif
/*
@@ -79,7 +81,7 @@ static char *typeNames[] = {
"dword_big_endian", "link", "multi_sz", "resource_list", NULL
};
-static DWORD lastType = REG_RESOURCE_REQUIREMENTS_LIST;
+static DWORD lastType = REG_RESOURCE_LIST;
/*
@@ -114,7 +116,7 @@ static int SetValue(Tcl_Interp *interp, Tcl_Obj *keyNameObj,
Tcl_Obj *valueNameObj, Tcl_Obj *dataObj,
Tcl_Obj *typeObj);
-EXTERN EXPORT(int,Registry_Init)(Tcl_Interp *interp);
+EXTERN int Registry_Init(Tcl_Interp *interp);
/*
*----------------------------------------------------------------------
@@ -136,7 +138,7 @@ EXTERN EXPORT(int,Registry_Init)(Tcl_Interp *interp);
*/
#ifdef __WIN32__
-#ifndef STATIC_BUILD
+#ifdef DLL_BUILD
BOOL APIENTRY
DllEntryPoint(
HINSTANCE hInst, /* Library instance handle. */
@@ -164,7 +166,8 @@ DllEntryPoint(
*----------------------------------------------------------------------
*/
-EXPORT(int,Registry_Init)(
+int
+Registry_Init(
Tcl_Interp *interp)
{
Tcl_CreateObjCommand(interp, "registry", RegistryObjCmd, NULL, NULL);
@@ -542,7 +545,7 @@ GetType(
* If we don't know about the type, just use the numeric value.
*/
- if (type > lastType) {
+ if (type > lastType || type < 0) {
Tcl_SetIntObj(resultPtr, type);
} else {
Tcl_SetStringObj(resultPtr, typeNames[type], -1);
@@ -590,19 +593,27 @@ GetValue(
}
/*
- * Get the value once to determine the length then again to store
- * the data in the buffer.
+ * Initialize a Dstring to maximum statically allocated size
+ * we could get one more byte by avoiding Tcl_DStringSetLength()
+ * and just setting length to TCL_DSTRING_STATIC_SIZE, but this
+ * should be safer if the implementation Dstrings changes.
+ *
+ * This allows short values to be read from the registy in one call.
+ * Longer values need a second call with an expanded DString.
*/
Tcl_DStringInit(&data);
- resultPtr = Tcl_GetObjResult(interp);
+ Tcl_DStringSetLength(&data, length = TCL_DSTRING_STATIC_SIZE - 1);
- valueName = Tcl_GetStringFromObj(valueNameObj, (int*) &length);
- result = RegQueryValueEx(key, valueName, NULL, &type, NULL, &length);
- if (result == ERROR_SUCCESS) {
- Tcl_DStringSetLength(&data, length);
- result = RegQueryValueEx(key, valueName, NULL, &type,
- (LPBYTE) Tcl_DStringValue(&data), &length);
+ resultPtr = Tcl_GetObjResult(interp);
+
+ valueName = Tcl_GetStringFromObj(valueNameObj, NULL);
+ result = RegQueryValueEx(key, valueName, NULL, &type,
+ (LPBYTE) Tcl_DStringValue(&data), &length);
+ if (result == ERROR_MORE_DATA) {
+ Tcl_DStringSetLength(&data, length);
+ result = RegQueryValueEx(key, valueName, NULL, &type,
+ (LPBYTE) Tcl_DStringValue(&data), &length);
}
RegCloseKey(key);
if (result != ERROR_SUCCESS) {
diff --git a/win/tclWinSock.c b/win/tclWinSock.c
index c6e6273..3b0ba15 100644
--- a/win/tclWinSock.c
+++ b/win/tclWinSock.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinSock.c 1.93 98/02/19 15:21:32
+ * RCS: @(#) $Id: tclWinSock.c,v 1.1.2.2 1998/09/24 23:59:53 stanton Exp $
*/
#include "tclWinInt.h"
@@ -51,6 +51,9 @@ static struct {
int (PASCAL FAR *listen)(SOCKET s, int backlog);
u_short (PASCAL FAR *ntohs)(u_short netshort);
int (PASCAL FAR *recv)(SOCKET s, char FAR * buf, int len, int flags);
+ int (PASCAL FAR *select)(int nfds, fd_set FAR * readfds,
+ fd_set FAR * writefds, fd_set FAR * exceptfds,
+ const struct timeval FAR * tiemout);
int (PASCAL FAR *send)(SOCKET s, const char FAR * buf, int len, int flags);
int (PASCAL FAR *setsockopt)(SOCKET s, int level, int optname,
const char FAR * optval, int optlen);
@@ -292,7 +295,8 @@ InitSockets()
const struct sockaddr FAR *name, int namelen))
GetProcAddress(winSock.hInstance, "connect");
winSock.ioctlsocket = (int (PASCAL FAR *)(SOCKET s, long cmd,
- u_long FAR *argp)) GetProcAddress(winSock.hInstance, "ioctlsocket");
+ u_long FAR *argp))
+ GetProcAddress(winSock.hInstance, "ioctlsocket");
winSock.getsockopt = (int (PASCAL FAR *)(SOCKET s,
int level, int optname, char FAR * optval, int FAR *optlen))
GetProcAddress(winSock.hInstance, "getsockopt");
@@ -308,6 +312,10 @@ InitSockets()
GetProcAddress(winSock.hInstance, "ntohs");
winSock.recv = (int (PASCAL FAR *)(SOCKET s, char FAR * buf,
int len, int flags)) GetProcAddress(winSock.hInstance, "recv");
+ winSock.select = (int (PASCAL FAR *)(int nfds, fd_set FAR * readfds,
+ fd_set FAR * writefds, fd_set FAR * exceptfds,
+ const struct timeval FAR * tiemout))
+ GetProcAddress(winSock.hInstance, "select");
winSock.send = (int (PASCAL FAR *)(SOCKET s, const char FAR * buf,
int len, int flags)) GetProcAddress(winSock.hInstance, "send");
winSock.setsockopt = (int (PASCAL FAR *)(SOCKET s, int level,
@@ -362,6 +370,7 @@ InitSockets()
(winSock.listen == NULL) ||
(winSock.ntohs == NULL) ||
(winSock.recv == NULL) ||
+ (winSock.select == NULL) ||
(winSock.send == NULL) ||
(winSock.setsockopt == NULL) ||
(winSock.socket == NULL) ||
@@ -686,8 +695,7 @@ SocketEventProc(evPtr, flags)
SocketInfo *infoPtr;
SocketEvent *eventPtr = (SocketEvent *) evPtr;
int mask = 0;
- u_long nBytes;
- int status, events;
+ int events;
ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
if (!(flags & TCL_FILE_EVENTS)) {
@@ -747,33 +755,30 @@ SocketEventProc(evPtr, flags)
Tcl_SetMaxBlockTime(&blockTime);
mask |= TCL_READABLE;
} else if (events & FD_READ) {
+ fd_set readFds;
+ struct timeval timeout;
+
/*
* We must check to see if data is really available, since someone
- * could have consumed the data in the meantime.
+ * could have consumed the data in the meantime. Turn off async
+ * notification so select will work correctly. If the socket is
+ * still readable, notify the channel driver, otherwise reset the
+ * async select handler and keep waiting.
*/
- nBytes = 0;
- status = (*winSock.ioctlsocket)(infoPtr->socket, FIONREAD,
- &nBytes);
- if ((status != SOCKET_ERROR) && (nBytes > 0)) {
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd, 0, 0);
+
+ FD_ZERO(&readFds);
+ FD_SET(infoPtr->socket, &readFds);
+ timeout.tv_usec = 0;
+ timeout.tv_sec = 0;
+
+ if ((*winSock.select)(0, &readFds, NULL, NULL, &timeout) != 0) {
mask |= TCL_READABLE;
} else {
- /*
- * We are in a strange state, probably because someone
- * besides Tcl is reading from this socket. Try to
- * recover by clearing the read event.
- */
-
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
+ SOCKET_MESSAGE, infoPtr->selectEvents);
infoPtr->readyEvents &= ~(FD_READ);
-
- /*
- * Re-issue WSAAsyncSelect() since we are gobbling up an
- * event, without letting the reader do any I/O to re-enable
- * the notification.
- */
-
- (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
- SOCKET_MESSAGE, infoPtr->selectEvents);
}
}
if (events & FD_WRITE) {
@@ -1094,6 +1099,7 @@ CreateSocket(interp, port, host, server, myaddr, myport, async)
* automatically places the socket into non-blocking mode.
*/
+ (*winSock.ioctlsocket)(sock, FIONBIO, &flag);
(void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
SOCKET_MESSAGE, infoPtr->selectEvents);
@@ -1219,51 +1225,42 @@ WaitForSocketEvent(infoPtr, events, errorCodePtr)
oldMode = Tcl_SetServiceMode(TCL_SERVICE_NONE);
- while (!(infoPtr->readyEvents & events)) {
- if (infoPtr->flags & SOCKET_ASYNC) {
- if (!PeekMessage(&msg, winSock.hwnd, SOCKET_MESSAGE,
- SOCKET_MESSAGE, PM_REMOVE)) {
- *errorCodePtr = EWOULDBLOCK;
- result = 0;
- break;
- }
- } else {
- /*
- * Look for a socket event. Note that we will be getting
- * events for all of Tcl's sockets, not just the one we wanted.
- */
-
- result = GetMessage(&msg, winSock.hwnd, SOCKET_MESSAGE,
- SOCKET_MESSAGE);
- if (result == -1) {
- TclWinConvertError(GetLastError());
- *errorCodePtr = Tcl_GetErrno();
- result = 0;
- break;
- }
-
- /*
- * I don't think we can get a WM_QUIT during a tight modal
- * loop, but just in case...
- */
+ /*
+ * Reset WSAAsyncSelect so we have a fresh set of events pending.
+ */
- if (result == 0) {
- panic("WaitForSocketEvent: Got WM_QUIT during modal loop!");
- }
- }
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd, 0, 0);
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
+ SOCKET_MESSAGE, infoPtr->selectEvents);
+ while (1) {
/*
- * Dispatch the message and then check for an error on the socket.
+ * Process all outstanding messages on the socket window.
*/
- infoPtr->lastError = 0;
- DispatchMessage(&msg);
+ while (PeekMessage(&msg, winSock.hwnd, 0, 0, PM_REMOVE)) {
+ DispatchMessage(&msg);
+ }
+
if (infoPtr->lastError) {
*errorCodePtr = infoPtr->lastError;
result = 0;
break;
+ } else if (infoPtr->readyEvents & events) {
+ break;
+ } else if (infoPtr->flags & SOCKET_ASYNC) {
+ *errorCodePtr = EWOULDBLOCK;
+ result = 0;
+ break;
}
+
+ /*
+ * Wait until something happens.
+ */
+
+ WaitMessage();
}
+
(void) Tcl_SetServiceMode(oldMode);
return result;
@@ -1595,45 +1592,43 @@ TcpInputProc(instanceData, buf, toRead, errorCodePtr)
*/
while (1) {
- if (infoPtr->readyEvents & (FD_CLOSE|FD_READ)) {
- bytesRead = (*winSock.recv)(infoPtr->socket, buf, toRead, 0);
- infoPtr->readyEvents &= ~(FD_READ);
-
- /*
- * Check for end-of-file condition or successful read.
- */
-
- if (bytesRead == 0) {
- infoPtr->flags |= SOCKET_EOF;
- }
- if (bytesRead != SOCKET_ERROR) {
- return bytesRead;
- }
-
- /*
- * If an error occurs after the FD_CLOSE has arrived,
- * then ignore the error and report an EOF.
- */
-
- if (infoPtr->readyEvents & FD_CLOSE) {
- infoPtr->flags |= SOCKET_EOF;
- return 0;
- }
-
- /*
- * Check for error condition or underflow in non-blocking case.
- */
-
- error = (*winSock.WSAGetLastError)();
- if ((infoPtr->flags & SOCKET_ASYNC) || (error != WSAEWOULDBLOCK)) {
- TclWinConvertWSAError(error);
- *errorCodePtr = Tcl_GetErrno();
- return -1;
- }
-
- } else if (infoPtr->flags & SOCKET_ASYNC) {
- *errorCodePtr = EWOULDBLOCK;
- return -1;
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
+ 0, 0);
+ bytesRead = (*winSock.recv)(infoPtr->socket, buf, toRead, 0);
+ infoPtr->readyEvents &= ~(FD_READ);
+
+ /*
+ * Check for end-of-file condition or successful read.
+ */
+
+ if (bytesRead == 0) {
+ infoPtr->flags |= SOCKET_EOF;
+ }
+ if (bytesRead != SOCKET_ERROR) {
+ break;
+ }
+
+ /*
+ * If an error occurs after the FD_CLOSE has arrived,
+ * then ignore the error and report an EOF.
+ */
+
+ if (infoPtr->readyEvents & FD_CLOSE) {
+ infoPtr->flags |= SOCKET_EOF;
+ bytesRead = 0;
+ break;
+ }
+
+ /*
+ * Check for error condition or underflow in non-blocking case.
+ */
+
+ error = (*winSock.WSAGetLastError)();
+ if ((infoPtr->flags & SOCKET_ASYNC) || (error != WSAEWOULDBLOCK)) {
+ TclWinConvertWSAError(error);
+ *errorCodePtr = Tcl_GetErrno();
+ bytesRead = -1;
+ break;
}
/*
@@ -1642,9 +1637,14 @@ TcpInputProc(instanceData, buf, toRead, errorCodePtr)
*/
if (!WaitForSocketEvent(infoPtr, FD_READ|FD_CLOSE, errorCodePtr)) {
- return -1;
- }
+ bytesRead = -1;
+ break;
+ }
}
+
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
+ SOCKET_MESSAGE, infoPtr->selectEvents);
+ return bytesRead;
}
/*
@@ -1699,6 +1699,8 @@ TcpOutputProc(instanceData, buf, toWrite, errorCodePtr)
}
while (1) {
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
+ 0, 0);
bytesWritten = (*winSock.send)(infoPtr->socket, buf, toWrite, 0);
if (bytesWritten != SOCKET_ERROR) {
/*
@@ -1726,12 +1728,14 @@ TcpOutputProc(instanceData, buf, toWrite, errorCodePtr)
infoPtr->readyEvents &= ~(FD_WRITE);
if (infoPtr->flags & SOCKET_ASYNC) {
*errorCodePtr = EWOULDBLOCK;
- return -1;
+ bytesWritten = -1;
+ break;
}
} else {
TclWinConvertWSAError(error);
*errorCodePtr = Tcl_GetErrno();
- return -1;
+ bytesWritten = -1;
+ break;
}
/*
@@ -1740,10 +1744,13 @@ TcpOutputProc(instanceData, buf, toWrite, errorCodePtr)
*/
if (!WaitForSocketEvent(infoPtr, FD_WRITE|FD_CLOSE, errorCodePtr)) {
- return -1;
+ bytesWritten = -1;
+ break;
}
}
+ (void) (*winSock.WSAAsyncSelect)(infoPtr->socket, winSock.hwnd,
+ SOCKET_MESSAGE, infoPtr->selectEvents);
return bytesWritten;
}
diff --git a/win/tclWinTest.c b/win/tclWinTest.c
index b4d7687..5aed1f0 100644
--- a/win/tclWinTest.c
+++ b/win/tclWinTest.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinTest.c 1.3 97/07/28 15:27:32
+ * RCS: @(#) $Id: tclWinTest.c,v 1.1.2.2 1998/09/24 23:59:54 stanton Exp $
*/
#include "tclWinInt.h"
diff --git a/win/tclWinTime.c b/win/tclWinTime.c
index 8570e65..fcb61e8 100644
--- a/win/tclWinTime.c
+++ b/win/tclWinTime.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * SCCS: @(#) tclWinTime.c 1.11 98/02/19 14:30:36
+ * RCS: @(#) $Id: tclWinTime.c,v 1.1.2.2 1998/09/24 23:59:54 stanton Exp $
*/
#include "tclWinInt.h"
diff --git a/win/tclsh.rc b/win/tclsh.rc
index b340a1a..5ff2b05 100644
--- a/win/tclsh.rc
+++ b/win/tclsh.rc
@@ -1,4 +1,4 @@
-// SCCS: @(#) tclsh.rc 1.18 98/01/20 19:38:48
+// RCS: @(#) $Id: tclsh.rc,v 1.1.2.2 1998/09/24 23:59:54 stanton Exp $
//
// Version
//
diff --git a/win/winDumpExts.c b/win/winDumpExts.c
index 8bc496e..36b03c3 100644
--- a/win/winDumpExts.c
+++ b/win/winDumpExts.c
@@ -19,7 +19,7 @@
* compiler other than Visual C++.
*----------------------------------------------------------------------
*
- * SCCS: @(#) winDumpExts.c 1.11 96/09/18 15:25:11
+ * RCS: @(#) $Id: winDumpExts.c,v 1.1.2.1 1998/09/24 23:59:54 stanton Exp $
*/
#include <windows.h>