You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(107) |
Dec
(67) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(76) |
Feb
(125) |
Mar
(72) |
Apr
(13) |
May
(18) |
Jun
(12) |
Jul
(129) |
Aug
(47) |
Sep
(1) |
Oct
(36) |
Nov
(128) |
Dec
(124) |
2002 |
Jan
(59) |
Feb
|
Mar
(14) |
Apr
(14) |
May
(72) |
Jun
(9) |
Jul
(3) |
Aug
(5) |
Sep
(18) |
Oct
(65) |
Nov
(28) |
Dec
(12) |
2003 |
Jan
(10) |
Feb
(2) |
Mar
(4) |
Apr
(33) |
May
(21) |
Jun
(9) |
Jul
(29) |
Aug
(34) |
Sep
(4) |
Oct
(8) |
Nov
(15) |
Dec
(4) |
2004 |
Jan
(26) |
Feb
(12) |
Mar
(11) |
Apr
(9) |
May
(7) |
Jun
|
Jul
(5) |
Aug
|
Sep
(3) |
Oct
(7) |
Nov
(1) |
Dec
(10) |
2005 |
Jan
(2) |
Feb
(72) |
Mar
(16) |
Apr
(39) |
May
(48) |
Jun
(97) |
Jul
(57) |
Aug
(13) |
Sep
(16) |
Oct
(24) |
Nov
(100) |
Dec
(24) |
2006 |
Jan
(15) |
Feb
(34) |
Mar
(33) |
Apr
(31) |
May
(79) |
Jun
(64) |
Jul
(41) |
Aug
(64) |
Sep
(31) |
Oct
(46) |
Nov
(55) |
Dec
(37) |
2007 |
Jan
(32) |
Feb
(61) |
Mar
(11) |
Apr
(58) |
May
(46) |
Jun
(30) |
Jul
(94) |
Aug
(93) |
Sep
(86) |
Oct
(69) |
Nov
(125) |
Dec
(177) |
2008 |
Jan
(169) |
Feb
(97) |
Mar
(74) |
Apr
(113) |
May
(120) |
Jun
(334) |
Jul
(215) |
Aug
(237) |
Sep
(72) |
Oct
(189) |
Nov
(126) |
Dec
(160) |
2009 |
Jan
(180) |
Feb
(45) |
Mar
(98) |
Apr
(140) |
May
(151) |
Jun
(71) |
Jul
(107) |
Aug
(119) |
Sep
(73) |
Oct
(121) |
Nov
(14) |
Dec
(6) |
2010 |
Jan
(13) |
Feb
(9) |
Mar
(10) |
Apr
(64) |
May
(3) |
Jun
(16) |
Jul
(7) |
Aug
(23) |
Sep
(17) |
Oct
(37) |
Nov
(5) |
Dec
(8) |
2011 |
Jan
(10) |
Feb
(11) |
Mar
(77) |
Apr
(11) |
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Finn B. <bc...@us...> - 2000-12-05 18:50:12
|
Update of /cvsroot/jython/htdocs In directory slayer.i.sourceforge.net:/tmp/cvs-serv10673 Modified Files: index.ht Log Message: Added David Mertz's article. Index: index.ht =================================================================== RCS file: /cvsroot/jython/htdocs/index.ht,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** index.ht 2000/11/26 18:08:43 1.4 --- index.ht 2000/12/05 18:50:09 1.5 *************** *** 36,44 **** <dl> ! <dt>8-nov-2000 <dd>JPython is mentioned in an ! <a href="http://www.javasoft.com/features/2000/11/dotnetvsms.html?frontpage-banner"> ! article</a> that compares the Java platform with MicroSoft's .NET </dl> - <font size=-1> last updated 26-now-2000 </font> --- 36,51 ---- <dl> ! <dt><b>5-dec-2000</b> ! <dd>David Mertz have done an ! <a href="http://gnosis.cx/publish/programming/charming_python_10.txt">interview</a> ! with some of the jython developers ! ! <p><dt><b>8-nov-2000</b> <dd>JPython is mentioned in an ! <a href="http://www.javasoft.com/features/2000/11/dotnetvsms.html?frontpage-banner"> ! article</a> that compares the Java platform with MicroSoft's .NET </dl> + + <font size=-1> last updated 5-dec-2000 </font> + |
From: Finn B. <bc...@us...> - 2000-12-05 18:49:47
|
Update of /cvsroot/jython/htdocs In directory slayer.i.sourceforge.net:/tmp/cvs-serv10606 Modified Files: users.ht Log Message: Renamed JPython. Index: users.ht =================================================================== RCS file: /cvsroot/jython/htdocs/users.ht,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** users.ht 2000/11/26 19:15:02 1.2 --- users.ht 2000/12/05 18:49:45 1.3 *************** *** 1,5 **** Title: Who uses Jython ! <h3>Who uses JPython?</h3> Here's a partial list of projects and users of Jython. --- 1,5 ---- Title: Who uses Jython ! <h3>Who uses Jython?</h3> Here's a partial list of projects and users of Jython. |
From: Finn B. <bc...@us...> - 2000-12-04 21:56:22
|
Update of /cvsroot/jython/jython/org/python/modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv25522 Modified Files: Setup.java Log Message: Added ucnhash. Index: Setup.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/modules/Setup.java,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -r2.10 -r2.11 *** Setup.java 2000/10/26 08:30:49 2.10 --- Setup.java 2000/12/04 21:56:20 2.11 *************** *** 49,52 **** --- 49,53 ---- "imp", "sha", + "ucnhash", }; } |
From: Finn B. <bc...@us...> - 2000-12-04 21:52:01
|
Update of /cvsroot/jython/jython/org/python/core In directory slayer.i.sourceforge.net:/tmp/cvs-serv24868 Modified Files: PyFile.java Log Message: InputStreamWrapper.read(int n): Fix bug 124028. The code was clearly wrong, but perhaps the lenght should be limited to the available number of bytes. The PyFile.read(int n) already do some looping in order to read as much as possible up to the n limit. Index: PyFile.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyFile.java,v retrieving revision 2.10 retrieving revision 2.11 diff -C2 -r2.10 -r2.11 *** PyFile.java 2000/10/02 09:03:58 2.10 --- PyFile.java 2000/12/04 21:51:57 2.11 *************** *** 96,100 **** // test done by the caller int avail = istream.available(); ! n = (n > avail) ? n : avail; byte buf[] = new byte[n]; int read = istream.read(buf); --- 96,100 ---- // test done by the caller int avail = istream.available(); ! //n = (n > avail) ? n : avail; byte buf[] = new byte[n]; int read = istream.read(buf); |
From: Finn B. <bc...@us...> - 2000-12-04 21:47:24
|
Update of /cvsroot/jython/jython/org/python/core In directory slayer.i.sourceforge.net:/tmp/cvs-serv24628 Modified Files: PyString.java Log Message: atoi(): Fixed StringIndexOutOfBoundsException when doing int("0", 16) Index: PyString.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyString.java,v retrieving revision 2.29 retrieving revision 2.30 diff -C2 -r2.29 -r2.30 *** PyString.java 2000/12/04 21:23:06 2.29 --- PyString.java 2000/12/04 21:47:21 2.30 *************** *** 1166,1170 **** if (base == 0 || base == 16) { if (string.charAt(b) == '0') { ! if (string.charAt(b+1) == 'x') { if (base == 0) base = 16; --- 1166,1170 ---- if (base == 0 || base == 16) { if (string.charAt(b) == '0') { ! if (b < e-1 && string.charAt(b+1) == 'x') { if (base == 0) base = 16; |
From: Finn B. <bc...@us...> - 2000-12-04 21:43:22
|
Update of /cvsroot/jython/jython/Tools/jythonc In directory slayer.i.sourceforge.net:/tmp/cvs-serv23829 Modified Files: ImportName.py compile.py depend.py jar.py Log Message: Added very simplistic support for resourcefiles. The resource must be specified with an absolute path to be recognized. I.e. public static String[] __depends__ = new String[] { "/org/python/modules/ucnhash.dat", } in a java module will cause the named resource to be included in the resulting jar. Index: ImportName.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/ImportName.py,v retrieving revision 2.4 retrieving revision 2.5 diff -C2 -r2.4 -r2.5 *** ImportName.py 2000/11/17 12:44:21 2.4 --- ImportName.py 2000/12/04 21:43:18 2.5 *************** *** 34,37 **** --- 34,39 ---- def importName(name): + if name[0] == "/": + return Resource(name) try: names = name.split('.') *************** *** 61,64 **** --- 63,72 ---- return importName(name) + class Resource: + def __init__(self, name): + self.name = name + def getDepends(self): + return [] + class Namespace: Index: compile.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/compile.py,v retrieving revision 2.15 retrieving revision 2.16 diff -C2 -r2.15 -r2.16 *** compile.py 2000/11/30 08:54:55 2.15 --- compile.py 2000/12/04 21:43:18 2.16 *************** *** 264,267 **** --- 264,269 ---- m.addEvents(attrs, self.events, mod.name) self.addJavaClass(m.name, mod.name) + elif isinstance(m, ImportName.Resource): + self.javadepends[m.name] = mod.name if self.dependencies.has_key(m): Index: depend.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/depend.py,v retrieving revision 2.4 retrieving revision 2.5 diff -C2 -r2.4 -r2.5 *** depend.py 2000/11/17 12:44:21 2.4 --- depend.py 2000/12/04 21:43:18 2.5 *************** *** 134,137 **** --- 134,154 ---- return openResource(res) + def getZipName(self): + return '/'.join(self.classname.split('.')) + '.class' + + class ResourceEntry: + def __init__(self, name): + self.name = name + + def __repr__(self): + return "ResourceEntry(%s)" % (self.name) + + def getInputStream(self): + import java + return java.lang.Class.getResourceAsStream("".__class__, self.name) + + def getZipName(self): + return self.name + ##class ZipEntry: *************** *** 165,168 **** --- 182,187 ---- def depends(name): + if name[0] == '/': + return ResourceEntry(name), [] ze = getFile(name) ip = ze.getInputStream() Index: jar.py =================================================================== RCS file: /cvsroot/jython/jython/Tools/jythonc/jar.py,v retrieving revision 2.5 retrieving revision 2.6 diff -C2 -r2.5 -r2.6 *** jar.py 2000/11/17 12:44:21 2.5 --- jar.py 2000/12/04 21:43:18 2.6 *************** *** 50,54 **** def addEntry(self, entry): ! outfile = SLASH.join(entry.classname.split('.')) + '.class' if self.jar_entries.has_key(outfile): return --- 50,54 ---- def addEntry(self, entry): ! outfile = entry.getZipName() if self.jar_entries.has_key(outfile): return *************** *** 83,87 **** for entry in self.entries: ! outfile = SLASH.join(entry.classname.split('.')) + '.class' instream = entry.getInputStream() self.zipfile.putNextEntry(ZipEntry(outfile)) --- 83,87 ---- for entry in self.entries: ! outfile = entry.getZipName() instream = entry.getInputStream() self.zipfile.putNextEntry(ZipEntry(outfile)) |
From: Finn B. <bc...@us...> - 2000-12-04 21:39:42
|
Update of /cvsroot/jython/jython In directory slayer.i.sourceforge.net:/tmp/cvs-serv23654 Modified Files: NEWS Log Message: More news. Index: NEWS =================================================================== RCS file: /cvsroot/jython/jython/NEWS,v retrieving revision 2.8 retrieving revision 2.9 diff -C2 -r2.8 -r2.9 *** NEWS 2000/12/01 20:19:52 2.8 --- NEWS 2000/12/04 21:39:40 2.9 *************** *** 7,10 **** --- 7,14 ---- The support does not match CPython2.0 exactly, but matches what CPython2.1 will do. + - The \x escape will only eat two hex characters and will + always create a character with values < 256. Use the \u + escape for high-byte values. + - A ucnhash module to support the \n{name} escape. Bug fixes. |
From: Finn B. <bc...@us...> - 2000-12-04 21:38:24
|
Update of /cvsroot/jython/jython In directory slayer.i.sourceforge.net:/tmp/cvs-serv23459 Modified Files: build.xml Log Message: Added copying and jar'ing of ucnhash.dat Index: build.xml =================================================================== RCS file: /cvsroot/jython/jython/build.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** build.xml 2000/11/24 17:04:20 1.2 --- build.xml 2000/12/04 21:38:20 1.3 *************** *** 67,74 **** excludes="org/python/parser/python.java,${exludejava2files}" /> </target> <target name="jar" depends="compile"> ! <jar jarfile="jython.jar" basedir="${outputDir}" includes="**/*.class" /> </target> --- 67,79 ---- excludes="org/python/parser/python.java,${exludejava2files}" /> + + <copy file="org/python/modules/ucnhash.dat" + todir="${outputDir}/org/python/modules" /> </target> <target name="jar" depends="compile"> ! <jar jarfile="jython.jar" ! basedir="${outputDir}" ! includes="**/*.class,**/ucnhash.dat" /> </target> |
From: Finn B. <bc...@us...> - 2000-12-04 21:32:44
|
Update of /cvsroot/jython/jython/org/python/modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv22775 Added Files: ucnhash.dat Log Message: First version of compressed unicode database. --- NEW FILE --- ¨i Ò Zf: lù 3 Ò )19AGQZ_ilu|¥§¬°µº¾ÄÌÐÕÚàäèïô÷ý !%+/4?ILQT]`cgjprw{¤¦²º¾ÁÆÏÓØÝãíïòöúü .4;=?BJOQX\^`cfltx|¡¦ª²¸ÀÅÉÏØäçìóøý #(+3:=BEJMW[`imv|¤«°¸ÁÊÍÐ×ÛÞãéò÷ý #+.9?BGMRYcfls{ ¦©¬²·»ÁÈÏÖÞâæéôøÿ (-2:=@CJRWZ`dkqw{~¡¬³¹ÄÇÌÔßçïôû$-37:?FIORX[biotwz} ¨«¯·¼ÅÊÍÑÛâåìïóöü ! ' , / 3 = E H N U \ a j m p x © ± · ½ Ä È Í Ð Ö Ù Ü ß ä ê í ð õ ø ! * 0 7 > F O S W \ a h r { § « ´ ¿ Æ Ì Ö á ä ê î ò õ ø þ!(369BEKPW`chqy| ¡¥¬±¶ºÃÇËÐØÜãëðô÷ÿ #(-059?EN[hox|£©²¾ÄËÏÓ×Üäêîôúÿ % ) , / 8 ; B I Q V \ b g j m p s v { ¥ © ® » Â É Ò Ø Ü á é ï õ û þ #'/7CFLPY_bmsvz~£¦©¬°³¼¿ÂÅÊÔØÝàåêíóü $'2<EKQ\fpz ¥ª²·¾ÄËÐÔÛßâæéñôúý #)08<@CFIMPYaflpux|¡¦©±ÀÍÒÕØßëöù !%,/49<@CGKNU\_ehknrvz~¯²µ»¾ÂÅÈÌÏÒÖÚÝáçêôý!%(-1;@CFINSW[^dkptx{ ¢¦©²µ¸½ÁÅÉÍÐÔ×ÚÝàéìùü % % % % % % % % % % % % % % % % %%% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %% % % % % % % % % % % % %% % % % % % % % ý¢?_ 4üù üï þp 4 ýd 4ýã? þ#f _ _ 4 P 4 PûR ü %ý û3 % )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )()()()()()()()( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )()()()()()()()( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()( )( )( )()()()()()()( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )()()()()()()()()()()()()()()( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )()()()()()()()()()()( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )( )()()()()()()()()()()()()( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()! ()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )()()()()()()()()()()()()()()()()()()()()()()()()()( )( )( )( )( )( )( )()()()()()()()()()()()()()()())(L)(R)(_)(ª)(¸)(¼)(Ô)(Ø)(Ü)(ä)(ë)(ù)(û)(û)(û%)(û=)(ûI)(ûW)(ûr)(û)(û)(û)(û¨)(û½)(ûÅ)(ü)(ü$)(ü%)(ü0)(ü5)(ü)(üÒ)(üí)(üü)(ý0)(ý])(ýr)(ýs)(ýv)(ýw)(ý)(ý)(ý)(ý)(ýÐ)(ýä)(ýå)(ýô)(ýû)(ýü)(þ)(þ+)(þ0)(þ3)(þ8)(þ>)(þF)(þf)(þg)(þh)(þ)(þ)(þ)(þ²)(þ³)(þÁ)(þÂ)(þÃ)(þÄ)(þÅ)(þÆ)(þÔ)(þÕ)(þÖ)(þ×)(þÝ)(þÞ)(þô)(þý)(þþ)(þÿ)(ÿ )5)5 )5 )5)5)5)5)5)5û)5ýr)5ýs)5ý)5ý)5ý)5ýÐ)5ýå)5ýô)5ýû)5ýü)5þ)5þ3)5þ8)5þ>)5þg)5þh)5þ)5þ)5þ)5þ²)5þÁ)5þÂ)5þÅ)5þÔ)5þÕ)5þÖ)5þÞ)5þô)5þý)5þÿ)5ÿ)5ÿ<)5ÿE)5ÿL)5ÿZ)5ÿl)5ÿ{* û K+&ü K8-+&ü KA-+&ü KI-+&ü Ku-+&ü í+&ü+&ü8-+&üA-+&üI-+&üu-+&üþ»ûtYI-+&üþ»ûtYu-+&ü+&ü8-+&üA-+&üI-+&üu-+&ü+&ü8-+&üA-+&üI-+&üu-+&ü!+&ü!8-+&ü!A-+&ü!I-+&ü!u-+&ü"+&ü"8-+&ü"A-+&ü"I-+&ü"u-+&ü)+&ü)8-+&ü)A-+&ü)I-+&ü)u-+&ü-+&ü-8-+&ü-A-+&ü-I-+&ü-u-+&ü1+&ü18-+&ü1A-+&ü1I-+&ü1u-+&ü4+&ü48-+&ü4A-+&ü4I-+&ü4u-+&ü;+&ü;8-+&ü;A-+&ü;I-+&ü;u-+&ü?+&ü?8-+&ü?A-+&ü?I-+&ü?u-+&üL+&üL8-+&üLA-+&üLI-+&üLu-+&üT+&üT8-+&üTA-+&üTI-+&üTu-+&üU+&üU8-+&üUA-+&üUI-+&üUu-+&üj+&üj8-+&üjA-+&ü÷+&ü÷8-+&ü÷A-+&ý*+&ý*8-+&ý*A-+&ýF+&ýF8-+&ýFA-+&ýN+&ýN8-+&ýNA-+&ýO+&ýO8-+&ýOA-+&ýS+&ýS8-+&ýSA-+*K+*úû +1 A-+1ýþ®«4A-+1A-+1 A-+1ÿý+1G'G'K8-+1G'G8-+1G'GA-+1G'GI-+1G'KA-+1G'Y8-+1G'YA-+1G'e'GI-+1G'e'K8-+1G'e'gI-+1G'eA-+1G'eI-+1G'g'GI-+1G'g'K8-+1G'g'eI-+1G'g'I-+1G'gA-+1G'gI-+1G''GI-+1G''K8-+1G''gI-+1G'A-+1G'I-+1K'G'G8-+1K'G'GI-+1K'G'K8-+1K'G8-+1K'GA-+1K'GI-+1K'Gu-+1K'K8-+1K'KA-+1K'Y8-+1K'YA-+1K'e'K8-+1K'eA-+1K'eI-+1K'g'K8-+1K'gA-+1K'gI-+1K'C'8-+1K'C'A-+1K'C'8-+1K'C'A-+1K'C'I-+1K'C'8-+1K'C'A-+1K'C'8-+1K'C'A-+1K'C'8-+1K'C'A-+1K'C'G8-+1K'C'GA-+1K'C'GI-+1K'C'Gu-+1K'C'K8-+1K'C'KA-+1K'C'Y8-+1K'C'YA-+1K'C'Y8-+1K'C'YA-+1K'C'eA-+1K'C'eI-+1K'C'gA-+1K'C'gI-+1K'C'I-+1K'C'¬8-+1K'C'·I-+1K'C'·u-+1K'C'å8-+1K'C'û;8-+1K'C'û;A-+1K'C'û}8-+1K'A-+1K'I-+1K'¬8-+1K'·I-+1K'·u-+1K'å8-+1K'û}8-+1Y'üE8-+1Y'üEA-+1Y'ôY8-+1Y'ôYA-+1e'G'K8-+1e'G'Y8-+1e'GA-+1e'GI-+1e'K8-+1e'KA-+1e'Y8-+1e'YA-+1e'g'K8-+1e'gA-+1e'gI-+1g'G'K8-+1g'G'Y8-+1g'G'e8-+1g'G'eI-+1g'GA-+1g'GI-+1g'K8-+1g'KA-+1g'Y8-+1g'YA-+1g'e'K8-+1g'e'Y8-+1g'eA-+1g'eI-+1'GA-+1'GI-+1'K8-+1'KA-+1'Y8-+1'YA-+1'eA-+1'gA-+1'gI-+1¤'G'K8-+1¤'G'e8-+1¤'G'eI-+1¤'G8-+1¤'GA-+1¤'GI-+1¤'Gu-+1¤'K8-+1¤'KA-+1¤'Y'C8-+1¤'Y'CA-+1¤'Y'J8-+1¤'Y'JA-+1¤'Y'üC8-+1¤'Y'üCA-+1¤'Y8-+1¤'YA-+1¤'Y8-+1¤'YA-+1¤'e'G8-+1¤'e'GI-+1¤'e'K8-+1¤'e'Y8-+1¤'eA-+1¤'eI-+1¤'g'G8-+1¤'g'GI-+1¤'g'K8-+1¤'g'g8-+1¤'g'gI-+1¤'gA-+1¤'gI-+1¤''G8-+1¤''GI-+1¤'A-+1¤'I-+1¤'·I-+1¬'G'K8-+1¬'G'Y8-+1¬'G8-+1¬'GA-+1¬'GI-+1¬'Gu-+1¬'K8-+1¬'KA-+1¬'Y8-+1¬'YA-+1¬'e'GI-+1¬'e'K8-+1¬'e'Y8-+1¬'eA-+1¬'eI-+1¬'g'G8-+1¬'g'GI-+1¬'g'K8-+1¬'g'Y8-+1¬'g'e8-+1¬'g'eI-+1¬'gA-+1¬'gI-+1¬'A-+1¬'I-+1¬'¬8-+1¬'·I-+1¬'·u-+1¬'å8-+1¬'û}8-+1µ'G'K8-+1µ'G'Y8-+1µ'G'eI-+1µ'G'gI-+1µ'G'I-+1µ'G8-+1µ'GA-+1µ'GI-+1µ'Gu-+1µ'K8-+1µ'KA-+1µ'Y8-+1µ'YA-+1µ'e'GI-+1µ'e'g8-+1µ'e'gI-+1µ'eA-+1µ'eI-+1µ'g'GI-+1µ'g'K8-+1µ'g'Y8-+1µ'gA-+1µ'gI-+1µ''GI-+1µ''K8-+1µ''Y8-+1µ'A-+1µ'I-+1µ'¬8-+1µ'·I-+1µ'·u-+1µ'å8-+1µ'û}8-+1·'G'GI-+1·'G'gI-+1·'GA-+1·'GI-+1·'KA-+1·'YA-+1·'gA-+1·'gI-+1·'ôYI-+1¾'G'G8-+1¾'G'GI-+1¾'G'e8-+1¾'G'eI-+1¾'G'gI-+1¾'GA-+1¾'GI-+1¾'Gu-+1¾'K8-+1¾'KA-+! 1¾'Y8-+1¾'YA-+1¾'e'gI-+1¾'eA-+1¾'eI-+1¾'eu-+1¾'g'Y8-+1¾'g'eI-+1¾'gA-+1¾'gI-+1¾'gu-+1¾''K8-+1¾''Y8-+1¾'A-+1¾'I-+1¾'u-+1¾'·I-+1¾'·u-+1¾'å8-+1¾'åA-+1Â'G'G8-+1Â'G'GI-+1Â'G'8-+1Â'G'I-+1Â'G8-+1Â'GA-+1Â'GI-+1Â'Gu-+1Â'K8-+1Â'KA-+1Â'Y8-+1Â'YA-+1Â'e'G8-+1Â'e'GI-+1Â'e'K8-+1Â'e8-+1Â'eA-+1Â'eI-+1Â'eu-+1Â'g'K8-+1Â'g8-+1Â'gA-+1Â'gI-+1Â'gu-+1Â'8-+1Â'A-+1Â'I-+1Â'u-+1Â'·I-+1Â'·u-+1Â'å8-+1Â'åA-+1Ä'G'G8-+1Ä'G'GI-+1Ä'G'K8-+1Ä'G8-+1Ä'GA-+1Ä'GI-+1Ä'Gu-+1Ä'K8-+1Ä'KA-+1Ä'Y8-+1Ä'YA-+1Ä'Y8-+1Ä'YA-+1Ä'eA-+1Ä'eI-+1Ä'gA-+1Ä'gI-+1Ä'A-+1Ä'I-+1Ä'¤8-+1Ä'¤A-+1Ä'¤I-+1Ä'¤u-+1å'ôYA-+1í'G'K8-+1í'GA-+1í'GI-+1í'K8-+1í'KA-+1í'Y8-+1í'YA-+1í'eA-+1í'eI-+1í'gA-+1í'gI-+1í''G8-+1í''GI-+1í'A-+1í'I-+1î'G8-+1î'GA-+1î'GI-+1î'Gu-+1î'K8-+1î'KA-+1î'Y8-+1î'YA-+1î'e'K8-+1î'eA-+1î'eI-+1î'gA-+1î'gI-+1î''K8-+1î'A-+1î'I-+1î'¬8-+1î'·I-+1î'·u-+1î'å8-+1î'û}8-+1õ'G'G8-+1õ'G'GI-+1õ'GA-+1õ'GI-+1õ'K8-+1õ'KA-+1õ'Y8-+1õ'YA-+1õ'e'K8-+1õ'e'e8-+1õ'e'eI-+1õ'eA-+1õ'eI-+1õ'I-+1õ'å8-+1õ'åA-+1÷'GA-+1÷'GI-+1÷'K8-+1÷'KA-+1÷'Y8-+1÷'YA-+1÷'e'K8-+1÷'e'Y8-+1÷'eA-+1÷'eI-+1÷'gA-+1÷'gI-+1÷''G8-+1÷''GI-+1÷'A-+1÷'I-+1÷'å8-+1÷'åA-+1û 'G'GI-+1û 'G'K8-+1û 'G'e8-+1û 'G'eI-+1û 'GA-+1û 'GI-+1û 'Gu-+1û 'K8-+1û 'KA-+1û 'Y8-+1û 'YA-+1û 'eA-+1û 'eI-+1û'G'G8-+1û'G'K8-+1û'G'e8-+1û'G'eI-+1û'GA-+1û'GI-+1û'K8-+1û'KA-+1û'Y8-+1û'YA-+1û'eA-+1û'eI-+1û'G'G8-+1û'G'GI-+1û'G'K8-+1û'G'Y8-+1û'GA-+1û'GI-+1û'K8-+1û'KA-+1û'Y8-+1û'YA-+1û'g'G8-+1û'g'GI-+1û'gA-+1û'gI-+1û'G8-+1û'GA-+1û'GI-+1û'Gu-+1û'K8-+1û'KA-+1û'Y8-+1û'YA-+1û'gA-+1û'¬8-+1û'·u-+1û'å8-+1û'û}8-+1û)'G'G8-+1û)'G'K8-+1û)'G'Y8-+1û)'GA-+1û)'GI-+1û)'K8-+1û)'KA-+1û)'Y8-+1û)'YA-+1û)'gA-+1û)'gI-+1û\'ôYA-+1û\'ü<A-+1û\'ü<u-+1û\'üFA-+1û\'üFu-+1û\'üOA-+1û\'üOu-+1û\'ý%A-+1û\'ýRA-+1û©'GA-+1û©'GI-+1û©'Gu-+1üûtK'C'Y8-+1üûtK'C'YA-+1üûtK'C'YI-+1üj'ôYA-+1ýA-+1þA-+1þýþ®«4A-+1ÿA-+4ýó ûÜ+4ýóü±+C+J+¯û]ê+Ë«+ç+ûU+û\+û\A-+û\u-+ûmP+û¶ +ÿ:û,&üP,& þR,&üP,&üP,& ,*& '%ûÎ,*& ',*& '´,*&,*&,*&'LJ,*&'p,*&'r,*&' J,*&'´,*&'â,*&,*& '®,*&,*& ,*&û¥,*&û¥,*&'LJ,*&'LJ3,*&'p,*&'J,*&' J,*&'®,*&'´,*&'Ì,*&'â,*&'û&L,*&'û&,*&'ûÖr,*&'ÿw,*& ,*& 'LC,*& 'LJ,*& 'p,*& 'r,*&,*& ,*&'LC,*&'LJ,*&'Or,*&'p,*&'J,*&',*&',*&' J,*&'´,*&'â,*&'ûMü,*&'ûÖr,*&,*& ,*&,*&'LC,*&'LC3,*&'LJ,*&'Vp,*&'V,*&'p,*&'rC,*&',*&'3LJ,*&'3p,*&'3rC,*&'3,*&'3,*&',*&'3,*&',*&'3p,*&'3,*&'3,*&',*&',*&'3p,*&'3,*&'§,*&'®,*&'®3p,*&'´,*&'ß,*&'ß3LJ,*&'ß3p,*&'ß3rC,*&'ß3,*&'ß3,*&'æ§,*&'ûB,*&'ûB3,*&,*&'LC,*&'p,*&'r,*&,*&'r,*&,*& ß,*&'LC,*&'LJ,*&'LJ3,*&'V,*&'p,*&' J,*&'´,*&'â,*&'æ§,*&'ûü,*&'ûÎ,*&'ÿ,*&,*&'LC,*&'LJ,*&'LJ3LC,*&'p,*&'p3LC,*&'r,*&',*&'´,*&'´3LC,*&'â,*&'çJ,*&,*&û¥'ü,*&û¥,*&û¥,*&'r,*&'LC,*&'LJ,*&'r,*&'J,*&',*&' J,*&'®,*&'´,*&'â,*&'çJ,*&'ûÖr,*&,*&'LJ,*&'Vp,*&'V,*&'p,*&'rC,*&',*&'J,*&',*&'3p,*&'3,*&'3,*&'3´,*&'J,*&',*&'3p,*&'J,*&',*&',*&'3,*&'§,*&'´,*&'¿C,*&'ß,*&'ß3LJ,*&'ß3p,*&'ß3rC,*&'ß3,*&'ß3,*&'æ§,*&'ûB,*&Ì,*&,*&'LJ,*&'r,*&',*&,*&'LC,*&'LJ,*&'p,*&',*&',*&',*&'¿C,*&,*&'LC,*&',*&,*&'LC,*&'LJ,*&'p,*&'r,*&'rC,*&',*&',*&',*&',*&',*&'¿C,*&,*&'LC,*&'LJ,*&'p,*&'r,*&',*&' J,*&'®,*&'´,*&'ûÖr,*&'ü,*&£,*&À,*&È,*&Û,*&Û'ÿ,*&Ûû,*&Ûû'r,*&ï,*&ï,*&ï,*&ï,*&ï ,*&ï 'ûü,*&ï,*&ï'r,*&ï'ûü,*&ï,*&ï,*&ï,*&ï,*&ï£,*&ïûç,*&ñk,*&ñ¯,*&ñ¸,*&û,*&û,*&û,*&û'LC,*&û6,*&ûÁ,*&ûÁ'´,*&ûÁ'ûÎ,*&ûÁ'ü,*&ûÁÛ,*&ûÕ,*&ûÕ'r,*&ü ,*&ü '®,*&ü '®3r,*&ü,,*&üA,*&üH,*&üH'ü,*&üV,*&ü¢,*&üÕ,*&ýA,*&ý[,*&ý[Ûû,*&ý[û,*&ý,*&ýêÛüH,*&þ,*1,*1 ,*1,*1 ,*1,*1 ,*1,*1,*1û ,.& ',.&,.&'LJ,.&'p,.&'r,.&' J,.&'´,.&'â,.&,.& ,.&'*& ,.&'LJ,.&'LJ3,.&'p,.&'J,.&' J,.&'®,.&'´,.&'â,.&'û&L,.& ,.& 'LC,.& 'LJ,.& 'p,.&,.& ,.&'*& ,.&'LC,.&'LJ,.&'Or,.&'p,.&'J,.&',.&',.&' J,.&'´,.&'â,.&,.& ,.&,.&'LC,.&'LC3,.&'LJ,.&'Vp,.&'V,.&'p,.&'rC,.&',.&'3LJ,.&'3p,.&'3rC,.&'3,.&'3,.&',.&'3,.&',.&'3p,.&'3,.&'3,.&',.&',.&'3p,.&'3,.&'§,.&'®,.&'®3p,.&'´,.&'ß,.&'ß3LJ,.&'ß3p,.&'ß3rC,.&'ß3,.&'ß3,.&'æ§,.&'û&,.&'ûB,.&'ûB3,.&,.&'LC,.&'p,.&'r,.&,.&,.&'LC,.&'LJ,.&'LJ3,.&'V,.&'p,.&' J,.&'´,.&'â,.&'æ§,.&,.&'LC,.&'LJ,.&'LJ3LC,.&'p,.&'p3LC,.&',.&'´,.&'´3LC,.&'â,.&'çJ,.&,.&'LC,.&'LJ,.&'r,.&'J,.&' J,.&'®,.&'´,.&'â,.&'çJ,.&'ûÖr,.&,.&'LJ,.&'Vp,.&'V,.&'p,.&'rC,.&',.&'J,.&',.&'3p,.&'3,.&'3,.&'3´,.&'J,.&',.&'3p,.&'J,.&',.&',.&'3,.&'§,.&'´,.&'¿C,.&'ß,.&'ß3LJ,.&'ß3p,.&'ß3rC,.&'ß3,.&'ß3,.&'æ§,.&'ûB,.&,.&'LJ,.&'r,.&',.&,.&'LC,.&'LJ,.&'p,.&',.&',.&',.&,.&'LC,.&',.&,.&'LC,.&'LJ,.&'p,.&'r,.&'rC,.&',.&',.&',.&',.&',.&,.&'LC,.&'LJ,.&'p,.&'r,.&',.&' J,.&'®,.&'´,.&À,.&È,.&Û,.&ï ,.&ñk,.&ñ¯,.&ñ¸,.&û,.&û,.&ûÁ,.&ûÁ'´,.&ûÁÛ,.&ûÕ,.&üA,.&üH,.&ü¢,.&ü½,.&üÕ,.&ýA,.&ý,.1 ,.1,û2-ü 0/0/ 0/ 0/H 0/H 0/H 0/H 0/H 0/H 0/H 0/H0/H0/H 0/H0/H0/H0/H0/H0/H 0/H0/H0/H0/H0/H0/H0/H0/H 0/H0/H0/H 0/H 0/H 0/H 0/H0/H0/H0/H 0/H0/H0/H0/H0/H 0/H0/H0/H0/H 0/H0/H0/H0/H0/H0/H 0/H0/H0/H0/H0/H0/H0/H0/H0/H0/H 0/H0/H0/H0/H0/H0/H 0/H0/H0/H0/H0/H0/H0/H0/H0/H 0/H0/H0/H)0/HI0/HÇ0/HÔ0/HÜ0/Hë0/Hù0/Hû0/Hû0/Hû"0/Hû-0/Hû.0/Hû10/HûT0/HûX0/Hûw0/Hû0/Hû¡0/HûÅ0/HûÍ0/Hûè0/Hûð0/Hü$0/Hü%0/HüK0/Hüt0/Hüv0/Hü¤0/HüÈ0/HüÉ0/HüÊ0/Hüí0/Hý0/Hý]0/Hý|0/Hý0/Hý0/Hýª0/Hý«0/Hý0/Hý²0/Hýµ0/Hý¶0/Hý·0/Hý¸0/Hý¹0/Hýº0/Hý»0/Hý¼0/Hý½0/HýÃ0/HýÈ0/Hþ0/Hþ%0/HþT0/Hþv0/Hþ0/Hþ0/Hþ 0/Hþ¡0/HþÃ0/HþÄ0/HþÆ0/HþÊ0/Hþã0/Hÿ0/Hÿ20/Hÿ90/Hÿ_0/_0/k0/nX0/nX0/nX0/nX0/nX 0/nX0/nX0/nX0/nX 0/nX0/nX0/nX0/nX 0/nX0/nX0/nXk0/nXÜ0/nXü_0/nXü0/nXü·0/nXü¾0/nXüÅ0/nXüÆ0/nXüÜ0/nXüÝ0/nXüì0/nXý0/nXý0/nXý0/nXý 0/nXý0/nXý0/nXý0/nXý0/nXý0/nXý 0/nXýT0/nXýU0/nXý0/nXý0/nXý0/nXý0/nXý0/nXý 0/nXý0/nXý¦0/nXý§0/nXý¨0/nXý©0/nXýÂ0/nXýØ0/nXýÙ0/nXýÚ0/nXýÛ0/nXýÜ0/nXýõ0/nXýö0/nXý÷0/nXýø0/nXýù0/nXýú0/nXþ0/nXþ90/nXþ:0/nXþ;0/nXþ<0/nXþ=0/nXþi0/nXþ{0/nXþ|0/nXþ}0/nXþ~0/nXþ0/nXþ0/nXþ0/nXþ0/nXþ0/nXþ0/nXþ0/nXþ¨0/nXþ©0/nXþª0/nXÿ0/nXÿF0/nXÿG0/nXÿH0/nXÿI0/nXÿJ0/u0/u0/¼0/Ç0/Ë«0/Ô0/Ü0/ã0/ä0/è0/ë0/ì0/ù0/û"0/û%0/û(«0/û,0/û,0/û, 0/û,0/û, 0/û,0/û,0/û,0/û, 0/û,0/û,0/û,0/û,0/û,0/û, 0/û,0/û,¼0/û-0/û.0/û90/û90/û90/û90/û90/û9% 0/ûM 0/ûM 0/ûM0/ûM)0/ûMØ0/ûMù0/ûMü$0/ûMü%0/ûMüt0/ûX0/û³X0/û³Xû"0/û³Xû.0/û³XûX0/û³Xûð0/û³Xük0/û³Xü×0/û³XýÅ0/û¼0/û¼0/û¼ 0/û¼ 0/û¼0/û¼0/û¼Ø0/û¼û£0/ûè40/ûð0/üX0/üXû"0/üXû.0/üXûX0/üXûð0/ü$0/ü%0/ü50/ü_0/ük0/üoüq0/üoüq 0/üoüq0/üoüqý$0/üt0/ü|0/ü0/ü·0/ü»0/ü¾0/üÅ0/üÆ0/üÏ0/ü×0/üÜ0/üÝ0/üì0/üþ0/ý 6( 6( 6( 6( 6( 6( 6(6(6( 6(6(6(6(6(6(6(6( 6(6(6(6(6(6(6( 6(6(6( 6(6(6( 6( 6( 6( 6( 6(6(6( 6(6(6(6(6(6(6(6(6(6(6(6(6( 6(6(6(6(6(6(6(6(6(6( 6(6(6(6(6(6(6( 6( 6(6(6(6(6(6(6( 6(6( 6(6(6(6(6(6(6( 6(6(6(6(6(6(6( 6(6(6(6(6(6(6( 6(6(6(6(6(6(6(6( 6(6(6(6(6(6(6( 6(6(6(6(6(6( 6(6(6(6(6(6(6( 6(6(6(6(6(6(6( 6(6(6(6(6(6(6(6(6( 6(6(6(6()6(_6(¼6(Ç6(Ô6(Ø6(Ü6(ä6(ë6(ù6(û6(û6(û"6(û(6(û(6(û(6(û( 6(û(6(û(6(û(6(û(è6(û.6(û@6(ûI6(ûP6(ûW6(ûX6(û6(û6(û£6(û»6(û»6(û»6(û» 6(û»6(û»6(û»è6(ûÅ6(ûÍ6(û×6(ûè6(ûð6(ü$6(ü%6(ü,6(ü06(ü_6(ük6(üt6(üv6(ü|6(ü6(ü6(ü»6(üÆ6(üÈ6(üÉ6(üÊ6(üÝ6(üì6(üí6(ý >,*&>,*&>,*& >,*&>,*&>,*&>,*&>,*&>,*&>,*&>,*&>,*&>,*&>,*&>,*&>,*&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.& >,.& >,.&>,.&>,.& >,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>,.&>2×>2×>2á>2á>2ú>2ú>2û>2û>2û>2û>2û!>2û!>2û/>2û/>2û7>2û7>2û8>2û8>2ûD>2ûD>2ûF>2ûF>2û_>2û_>2ûf>2ûf>2û>2û>9k>9l>9~>9¡>9¯>9°>9¸>9½>9Å>9Ö>E>E>E>E >E>E>E >E>E >E>E>E >E >E >E >E>E>E >E>E>E>E>E >E>E>E>E>E >E>E>E>E >E>E>E>E>E >E>E>E>E_>E¼>EÇ>EÔ>EØ>EÜ>Eä>Lûp>\aQ>aê>q >q>q>q>q >q >q >q >q>q >qM>qO>qk>ql>q~>q¡>q¯>q°>q¸>q½>qÅ>qúû>qû>qû>qûV>qûÑ>qûí>qü @*&@*&@*&'@*&@*&'û&r@*&@*&'û@*&@*&@*&'Vp@*&'@*&'@*&@*&@*&@*&'@*&'û@*&)@*&@*&'üÐ@*&¼@*&¼'d®@*&¼'r@*&¼'®@*&¼'û@*&Ç@*&Ø@*&Ø'û@*&ù@*&û@*&û'd®@*&û'@*&û'û@*&û5 @*&û5@*&ûW@*&ûW'@*&ûW'§@*&ûW'û@*&ûw@*&ûw'®@*&ûw'û&r@*&ûw'ý @*&ûÉØ@*&ûÉû@*&ûÉû'û@*&ûÉüK@*&ûÍ@*&ûÕ@*&ûÕ'@*&ü@*&üü8ûª@*&üüSûª@*&ü8ûª@*&üK@*&üSûª@*&üV@*&üV'@*&ü]@*&ü]'@*&üc @*&ün@*&ün'®@*&üp4@*&ü~@*&ü@*&ü@*&ü'V¥@*&ý@*&ý°@*&ýþ@*&þ@*&þ4@*&þ@*&þr@*&þ@*&þ¬@*&þ±@*&þ¹û@*&þè4@*&þ÷@*&ÿ@*&ÿ-@*&ÿ3@*&ÿküc @*&ÿ|¼@*1 @.&@.&@.&'@.&@.&'û&r@.&@.&'û@.&@.&@.&'Vp@.&'@.&'@.&@.&@.&@.&'@.&'û@.&)@.&@.&'üÐ@.&¼@.&¼'d®@.&¼'r@.&¼'®@.&¼'û@.&Ç@.&Ø@.&Ø'û@.&ù@.&û@.&û'd®@.&û'@.&û'û@.&û5 @.&û5@.&ûW@.&ûW'@.&ûW'§@.&ûW'û@.&ûw@.&ûw'®@.&ûw'û&r@.&ûw'ý @.&ûÉØ@.&ûÉû@.&ûÉû'û@.&ûÉüK@.&ûÍ@.&ûÕ@.&ûÕ'@.&ü@.&üü8ûª@.&üüSûª@.&ü8ûª@.&üK@.&üSûª@.&üV@.&üV'@.&ü]@.&ü]'@.&üc @.&ün@.&ün'®@.&üp4@.&ü~@.&ü@.&ü@.&ü'V¥@.&ý@.&ý°@.&ýþ@.&þ@.&þ4@.&þ@.&þr@.&þ@.&þ¬@.&þ±@.&þ¹û@.&þè4@.&þ÷@.&ÿ@.&ÿ-@.&ÿ3@.&ÿküc @.&ÿ|¼@.1 B5B5B5B5 B5 B5 B5 B5 B5 B5 B5B5B5B5 B5B5B5B5B5 B5 B5B5B5 ýB5B5B5B5 B5 B5B5 B5B5B5B5B5 B5B5B5 B5B5B5 B5B5B5 B5B5B5 B5B5 B5B5B5B5*B53B5=B5LB5MûRB5QB5VB5aB5kB5kB5lB5rB5tB5RB5üÍý³B5 B5ªB5«B5°B5ßB5ûRB5ûB5ûB5û B5û5üÚýcB5û5ýÄB5û6B5ûZB5ûvB5ûB5û B5ûÂB5ûÂý\B5ûÑB5ûíB5ûøB5üB5üB5üB5üýCB5ü(B5ü6B5ü7B5ü9B5üCB5üGB5üJB5üSB5üeB5üvB5üB5üB5ü¿B5üÄB5üÍB5üÎB5üçB5üéB5üëB5üüB5ýB5ýB5ýB5ý!B5ý1B5ý?B5ý@B5ýCB5ýGB5ý\B5ý`B5ýcB5ýB5ýB5ýB5ýÀB5ýÒýB5ýÔB5ýëB5þ F&F&F&F&F&F&%F&¼F&ÇF&ÔF&ØF&ÜF&äF&ëF&ùF&ûF&û"F&û%F&û-F&û1F&û<F&û=F&û@F&ûIF&ûPF&ûQF&ûTF&ûcF&ûeF&ûhF&ûF&ûF&ü-ÜF&ü¤F&ý±F&þ«F&ÿ.F( F4ûûÇF4 ûlF4 ý¯F4 ûÇF4 F¶&F¶&F¶&F¶&F¶&F¶&%F¶&¼F¶&ÇF¶&ÔF¶&ØF¶&ÜF¶&äF¶&ëF¶&ùF¶&ûF¶&û"F¶&û%F¶&û-F¶&û1F¶&û<F¶&û=F¶&û@F¶&ûIF¶&ûPF¶&ûQF¶&ûTF¶&ûcF¶&ûeF¶&ûhF¶&ûF¶&ûF¶&ü-F¶&ü-ÇF¶&ü-ÜF¶&ü¤F¶&ý±F¶&þ«F¶&ÿ.Fü4 N&N&N&N&N&N&N&N&N&N&N&N&º¹N&º¹N&º¹N&º¹N&º¹N&º¹ N&º¹ N&º¹N&º¹~ÿN&º¹N&º¹ÇN&º¹¼N&º¹äN&º¹æý¤N&º¹ëN&º¹û%N&º¹û-N&º¹û<N&º¹û=N&º¹û@N&º¹ûIN&º¹ûQN&º¹ûlN&º¹ûlN&º¹ûN&º¹ý¤N&º¹ÿN&¼N&ÇN&ÔN&ÚN&ÚN&ÚN&ÚN&Ú N&Ú N&Ú N&Ú N&ÚN&ÚN&ÚN&ÚN&ÚN&ÚN&Úº¹äN&Úº¹ûN&Ú¼N&ÚÇN&ÚÔN&ÚäN&ÚëN&ÚûN&ÚûD4N&ÚûN&Úû£N&ÚûëN&Úü¤N&Úý:N&ÜN&äN&ëN&øN&øN&øN&øN&ø N&ø N&ø N&øN&øN&øN&ø¼N&øØN&øäN&øëN&øùN&øûN&øûN&øûN&øû£N&øûëN&øü|N&øý:N&ùN&ûN&û N&ûº¹N&ûº¹N&ûº¹N&ûº¹äN&ûº¹û%N&ûº¹û-N&ûº¹û=N&ûº¹ûTN&ûº¹ûcN&ûº¹ûeN&ûº¹ûhN&ûº¹ûN&ûº¹ûN&û¼N&ûÜN&ûûN&ûN&û1N&ûN&û£N&ûèN&ûëN&ýN&ýxN9kN9lN9~N9¡N9¯N9°N9¸N9½N9ÅN9ÖNDûN¡ÏNË«NÚüpüNçNø( % %ÓüeZ5 %ÓüÎZ5 %Óý@Z5 %ÓýGZ5 Z5 Z5Z5 Z5Z5*kZ5*lZ5RZ5ÓüÍý³Z5ÓßZ5ÓüZ5ÓýZ5ÓýZ5ßZ5ûkZ5ûlZ5ûvkZ5ûvlZ5ûkZ5ûlZ5ûÑZ5ûíkZ5ûílZ5ûûZ5üZ5ükZ5ülZ5ü(kZ5ü(lZ5ü(~Z5ü6kZ5ü6lZ5ü6~Z5ü6¡Z5ü9kZ5ü9lZ5ü9~Z5ü9¡Z5üCZ5üJkZ5üJlZ5üJ~Z5üeZ5üZ5ükZ5ülZ5ü~Z5üçkZ5üçlZ5üékZ5üélZ5üëZ5üüZ5ýkZ5ýlZ5ý!kZ5ý!lZ5ý1Z5ý\Z5ý`kZ5ý`lZ5ýÀZ5ýÄZ5ýÔZ5þ ]?S ]?S ]?S ]?S ]?S ]?S]?S ]?SÕ %l]?SÕk]?SÕl]?SÕ~]?SÕ¡]?SÕ¯]?SÕ°]?SÕ¸]?SÕ½]?SÕÅ]?SÕû]?SÕûKk]?SÕûKl]?SÕûK~]?SÕûK¡]?SÕûK¯]?SÕûK°]?SÕûK¸]?SÕûK½]?SÕûKÅ]?SÕû¯]?SÕûË]?SÕûÔ]?SÕûã]?SÕü]?SÕü&]?SÕü3]?SÕüB]?SÕüD]?SÕüI]?SÕüÖ]?Sók]?Sól]?Só~]?Só¡]?Só¯]?Só°]?Só¸]?Só½]?SóÅ]?SóÖ]?Sóû]?SóûKk]?SóûKl]?SóûK~]?SóûK¡]?Sóû¯]?SóûË]?SóûÔ]?Sóûã]?Sóü]?Sóü&]?Sóü3]?SóüB]?SóüD]?SóüI] ü û?]ûÀû]Ö]Ë«]ç]û P]ûkP]ûlP]û~P]û¡P]ûû&P]ûûP]ûûéP]ûüP]ûü(P]ûü*P]ûü7P]ûýÆP]ûþäP]ûÿP]ûÿP]û]ûdf ]ûdfC_J]ûdfC_û&3J]ûdfO_M]ûdfO_û&3M]ûdfËûÐ]ûdfûÐûaC]ûdfûÐûaJ]ûdfûÐûaO]ûdfûÐûaÍO]ûdfûÐûaÐM]ûdfûÐûaÐO]ü>P]ü`ü]ýJñP]ÿWP^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*& ^,*& ^,*&^,*&^,*& ^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*&^,*&^2×^2×^2á^2á^2ú^2ú^2û^2û^2û^2û^2û!^2û!^2û!^2û/^2û/^2û7^2û7^2û8^2û8^2ûD^2ûD^2ûF^2ûF^2û_^2û_^2ûf^2ûf^2û^2û^9k^9l^9~^9¡^9¯^9°^9¸^9½^9Å^q^q ^q^q^qk^ql^q~^q¡^q¯^q°^q¸^q½^qÅ^qû^qûÑ^qûí^qü `&`&`&`&`&`&`&`&`&`&¢`&¢`&¢`&¢`&¼`&Ç`&Ô`&Ø`&Ü`&ã`&ä`&è`&ë`&ì`&ù`&û`&û"`&û%`&û-`&û1`&û5`&û5`&û<`&û=`&û@`&ûI`&ûP`&ûQ`&ûT`&ûc`&ûe`&ûh`&û`&û`&û`&ûÆ`&ûÆ`&ü¶`&üú`&ý`&þq`&þµ`&þú`4û`4û`4û`4ü`4ü2`4ýj`9k`9l`9~`9¡`9¯`9°`9¸`9½`9Å`9Ö`D4`D4`D4 `D4`D4`D4`D4¢`D4¢`D4¢`D4¢`D4ã`D4è`D4ì`D4û5`D4û5`D4ûÆ`D4ûÆ`VÿB`p¥`¥`üâ4`üâ4`ýp4`ÿBa üGa*=a=a='d a='ÍMû?a='ÍOû?a='ÐMû?a='ÐOû?a='ûVd a='üøa=ÿQt*=aMÊûÞaOÊûÞadü+aÊûÞaÊûÞa¡û]êaÆaÆ'ÍMû?aÆ'ÍOû?aÆ'ÐMû?aÆ'ÐOû?aêaû#Ê*ðaû#Êðaû#ÊüaûRÊ*ðaûRÊðaûRÊüaûgþaûgþ2aûgþVaûgþ°aûgþ´aûgÿuaûvû´aûzaûzû´aûzÿQt*ûzaû{aû®Ê*ðaû®Êðaû®Êð'LaûÑ'þ*aü aü+aüMÊ*ðaüMÊðaüwaüaýîû´aýòüGaþYaþsaÿTû´b&b&b&b&b&b&b&b&b& b&b&b&b&b&b&b&b&b&_b&¼b&Øb&äb&ùb&ûb&û"b&û.b&û1b&û<b&û@b&û¡b&ûÅb&û×b&ü0b&ü5b&ý¬b&ýäb4b4b4b4 b4 b4b4 þMb4b4b4b4 b4üÏb4 b4 b4 c,*&c,*&c,*& c,*&c,*&c,*&c,*&c,*&c,*&c,*&c,*&c,*&c,*&c,*&c,*&c,*&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.& c,.& c,.&c,.&c,.& c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c,.&c9kc9lc9~c9¡c9¯c9°c9¸c9½c9Åc9ÖcM=¨cMûAcMû¨cO=¨cOûAcOû¨cd c¥cc¥cc4cª4cË«cçcúü4cúÿ4cûPcû cûcûcûN4cûmPcûx4cûPcûÓcûúcücü*ûÓcü4cü±cý/û:cýI4cýZcýaÌcý4cý4cþE4cÿc4d d 'û&LdûÏdûâdü=ûû'ûiûZPdü=ûû'ûiûZPÐdü=ûûPdü=ûûPÍdü=ûûPÐfûÏ' fûÏü'füÒh&h&h&h& h&h&h&h&h& h&h&h&h&h&h& h&h&h&h& h&h&h& h&h& h&h&h& h& h& h& h&h&h&h& h&h&h&h&h& h&h&h&h& h&h&h&h&h& h&h&h&h& h&h&h&h&h&h& h&h&h&h&h&h& h&h&h&*h&*h&* h&*h&*h&*h&*h&*h&*h&*Çh&_h&¼h&Çh&Ôh&Øh&Üh&äh&ëhûiü>Phü>Pj*&j*&j*&j*&j*&j*&j*& j*&j*&j*&j*&)j*&_j*&Üj*&åj*&íj*&ùj*&ûj*&ûWj*&ûØj*&ûÜj*&üj*&ü£j*&ü¸j*&ü¼j*&üÃj*&ý$j*&ý.j*&ýfj*&ý¾j*&þj*&þKj*&þj*&þºj*&þÈj*&þøj*&þüj*&ÿ^j*&ÿj*1ûÜüj*1ûÜü£j*1ûÜü¼j*1ûÜý.j*1ü£ü¸j*1üÃüj.&j.&j.&j.&j.&j.&j.& j.&j.&j.&j.&)j.&_j.&Üj.&åj.&íj.&ùj.&ûj.&ûWj.&ûØj.&ûÜj.&üj.&ü£j.&ü¸j.&ü¼j.&üÃj.&ý$j.&ý.j.&ýfj.&ý¾j.&þj.&þKj.&þj.&þºj.&þÈj.&þøj.&þüj.&ÿ^j.&ÿj&O¿jË«jçjûmPjûPjüjüjýpPjÿ*PkLýlLýmû Pm&m&m&m&m&m&m&m& m& m&m&m&m&m&m&m&¢m&¢m&¢m&¢m&¼m&Çm&Ôm&Øm&Üm&Ü'Íûm&Ü'û&ûm&ãm&äm&èm&ëm&ìm&ùm&ûm&û"m&û%m&û-m&û1m&û<m&û=m&û@m&ûIm&ûPm&ûQm&ûTm&ûcm&ûem&ûhm&ûm&ûm&ü¶m&üúm4ûm4ûm4ûm4üm4ü2m9km9lm9~m9¡m9¯m9°m9¸m9½m9Åm9ÖmD4mD4mD4 mD4mD4mD4mD4¢mD4¢mD4¢mD4¢mD4ãmD4èmD4ìmûûÿkmûûÿlmûûÿlûXÿ7mûûÿ~mûûÿ¡mûÿ7ûÔmüö4müöPmþÌo9ko9lo9~o9¡o9¯o9°o9¸o9½o9Åo9Öofof y& ü½y&y&y&y&y&ûû z&z&z&z&z&z&z&z&z&¢z&¢z&¢z&¢z&¼z&Çz&Ôz&Øz&Üz&ãz&äz&èz&ëz&ìz&ùz&ûz&û"z&û%z&û-z&û1z&û<z&û=z&û@z&ûIz&ûPz&ûQz&ûTz&ûcz&ûez&ûhz&ûz&ûz&ûz4ûz4ûz4ûz4üz9kz9lz9~z9¡z9¯z9°z9¸z9½z9Åz9ÖzD4zD4zD4zD4 zD4zD4zD4zD4zD4¢zD4¢zD4ãzD4èzD4ìzãû Pzû P{&{&{&{& {& ýh{&{&{&{&{&{&{& {& {& {& {& {& {& þz{& {&{&{&{&{&{&{&{&ûý+{&ûý9{&ûýM{&ûýP{&ûýh{&ûý®{&ûýÍ{&ûþU{&ûþ¼{&ûÿe{&ûý+{&ûý9{&ûýM{&ûýP{&ûýh{&ûý®{&ûýÍ{&ûþU{&ûþ¼{&ûÿe{&üxý+{&üxý9{&üxýM{&üxýP{&üÛ |&|&|&|&|&|&|&|&|&¢|&¢|&¢|&¢|&¼|&Ç|&Ô|&Ø|&Ü|&ã|&ä|&è|&ë|&ì|&ù|&û|&û"|&û%|&û-|&û1|&û<|&û=|&û@|&ûI|&ûP|&ûQ|&ûT|&ûc|&ûe|&ûh|&û|&û|&û|4û|4û|4û|9k|9l|9~|9¡|9¯|9°|9¸|9½|9Å|9Ö|D4|D4|D4|D4 |D4|D4|D4|D4|D4¢|D4¢|D4ã|D4è|D4ì|ãû P|û P}û P}&}&}&}&}&}&}&}& }& }&}&}&}&}&}&}&¢}&¢}&¢}&¢}&¼}&Ç}&Ô}&Ø}&Ü}&ã}&ä}&è}&ë}&ì}&ù}&û}&û"}&û%}&û-}&û1}&û<}&û=}&û@}&ûI}&ûP}&ûQ}&ûT}&ûc}&ûe}&ûh}&û}&û}&û}&ü¶}&üú}4û}4û}4û}4ü}4ü2}4ýj}9k}9l}9~}9¡}9¯}9°}9¸}9½}9Å}9Ö}D4}D4}D4 }D4}D4}D4}D4¢}D4ã}D4è}D4ì}ãû P}þÌ&&&&&&&& & &&&&&&&&&¢&¢&¢&¢&¼&Ç&Ô&Ø&Ü&ä&ë&ì&ù&û&û"&û%&û-&û1&û<&û=&û@&ûI&ûP&ûQ&ûT&ûc&ûe&ûh&û&û4LJ4û4û4û4ü8üó4üó9k9l9~9¡9¯9°9¸9½9Å9Ö? ? ? ? D4D4 D4D4D4¢D4¢D4¢D4¢D4ãD4èD4ìû P&&&&&&&&& & &&&&&&&&&¢&¢&¢&¢&¼&Ç&Ô&Ø&Ü&ã&ä&è&ë&ì&ù&û&û"&û%&û-&û1&û<&û=&û@&ûI&ûP&ûQ&ûT&ûc&ûe&ûh&û&û&û&ý4û4û4û9k9l9~9¡9¯9°9¸9½9Å9ÖD4D4D4D4 D4D4D4D4D4¢D4ãD4èD4ì &&&&&&&& & &&&&&&&&¢&¢&¼&Ç&Ô&Ø&Ü&ã&ä&è&ë&ì&ù&û&û"&û%&û-&û1&û<&û=&û@&ûI&ûP&ûQ&ûT&ûc&ûe&ûh&û&û4û4û4û4ü4ü24ýj9k9l9~9¡9¯9°9¸9½9Å9ÖD4D4D4 D4D4D4D4¢D4¢D4ãD4èD4ìD4ûÆD4ûÆDûÆDûÆ&&& && &&&&û[&ûÇ&ü7&ý)&ý0&ýy&ý{&ý&ý&ýÑ&ýÓ&þ&þ-&þ6&þP&þZ&þy&þ¤&þ·&þÇ&þÉ&þÜ&þé&þì&þû&ÿ&ÿ0&ÿ[&ÿ\&ÿ`&ÿ}.&.&.&.& .&.&.&.&û[.&ûÇ.&ü7.&ý).&ý0.&ýy.&ý{.&ý.&ý.&ýÑ.&ýÓ.&þ.&þ-.&þ6.&þP.&þZ.&þy.&þ¤.&þ·.&þÇ.&þÉ.&þÜ.&þé.&þì.&þû.&ÿ.&ÿ0.&ÿ[.&ÿ\.&ÿ`.&ÿ}ü.û &&&&&&&&&¼&Ç&Ô&Ø&Ü&ã&ä&è&ë&ì&ù&û&û"&û%&û-&û1&û<&û@&ûI&ûP&ûQ&ûT&ûc&ûe&ûh&û&û&û&þµ&þú4 4û4ü29k9l9~9¡9¯9°9¸9½9Å9ÖD4D4D4 D4D4D4D4ãD4èD4ì %ýBû & & & & & & & & & & & &8þ &Û &ôÿ &û; &û[ &û} &ü ÿCþ &ü &ý &ý &ýÉ &ýÉÿ &þ &þ &ÿ &ÿ ÿ &ÿC &ÿ kdÏC kdÏJ ~ÏC ~ÏJ ²û ûürM ûürO ûUü. ûÂýt ûÂýt² ü üµC üµJ üµû üÞË« üÞû üÞûürO üàË« üàû üàûürM ýC ýJ ýû ý3 ý3 ý3 ýBC ýBJ ýpP þ)C þ)J þe C þe J þæC þæJ ÿL¥? % 4þ 4ü0&& & &&&&&&&&&&&&& &&&&&&&&& & & & & & & & &&& &&&&& &&&&&&&&&&&&&&&& &ã&ûë&ü¢&þc8&8&8&8&¥û P&&&&&& & &&&&&&&&&¼&Ç&Ô&Ø&Ü&ã&ä&è&ë&ì&û%&û-&û=&ûP&ûQ&û&û&ý&þq4û4û4û9k9l9~9¡9¯9°9¸9½9ÅD4D4D4D4 D4D4D4D4D4ãD4èD4ìlû²lû¾û& ñÌ& r& & &*&*'r&* &*&*&*&*&*&*&*.æ&*Ûû(«&*ï&*ï'r&*üA&M¿&Mû&O¿&Oû&Vûn&Vü&d &p¥&¥&û0&û&û0&û&¥&&üÌû&Ûç&Ûû(«&ïç&úûñÌ&ûd &ûp¥&û¥&û&ûñÌ&û(«&û2¥&û:4&ûN4&ûn&ü&üºýJñP&üÌû&ýýJñP&ÿ$úûñÌ&ÿ$ûñÌ&ÿbM¿&ÿbO¿3ý __ ©&©&©& ©& ©& ©&©& ©&©&©&©& ©&©& ©&©&©&©&©& ©&©&_©&û£©&ük©&ü|©&ü»©&ý©&þá©&ÿ©ümªýEªûóªûöª4ª=ûßÃ_ª=ü/Ã_ªª_ªúüªúÿªûH_ªûûµªûûµÃ_ªüQPªü²_ªý _ªý´ªþÓ_ªÿ _°ûYû°û]tê°û]ýê°û]þ&tê°ûûYþAû°þQûÚtü²Ì²ûϲûâ´¸û]tê¸þQt3aü¿ _¿C¿_¿ûpÆ'MtÆ'OtÆ'dûÀÆ'ÍtÆ'ÐMû?tÆ'ÐtÆ'ü³û¨ÐOû?tɦkɦlɦlû²É¦lû² 9kÙ>ûû 9lÙ>ûû 9~Ù>ûû 9¡Ù>ûû 9¯Ù>ûû 9°Ù>ûû 9¸Ù>ûû 9½Ù>ûû 9ÅÙ>ûû ûÙúþ>9kÙúþ>9lÙúþ>9~Ùúþ>9¡Ùúþ>9¯Ùúþ>9°Ùúþ>9¸Ùúþ>9½Ùúþ>9ÅÙúþ>ûÙúþ>ûû 9kÙúþ>ûû 9lÙúþ>ûû 9~Ùúþ>ûû 9¡Ùúþ>ûû 9¯Ùúþ>ûû 9°Ùúþ>ûû 9¸Ùúþ>ûû 9½Ùúþ>ûû 9ÅÙúþ>ûû ûÛVûnÛVûnûPÛÛûxÛª4ÛûkûnÛûnÛüyý<ûvû{ÛþL4Þ& Þ& Þ& Þ&Þ& Þ&Þ&Þ& Þ&Þ&Þ& Þ& Þ& Þ& Þ&Þ& Þ& Þ& Þ& Þ& Þ& Þ&Þ& Þ&Þ&ÃÞ&þcÞÛý?PÞûPÞý?Pâæ û2 û3û*k û3û*ký>û3û*l û3û*l û3û*lû3û*lûäû3û*lûüû3û*lýÆû3û*~û¤û3û*~üýû3û*~ý>û3û*¡ý>û3û*¯ û3û*¯û¤û3û*½û¤û4MûAû4OûAû4kû4lû4~û4¡û4¯û4°û4¸û4½û4Åû4Öû4û:û4ûN4û4ûx4û6*û6*û6*û6*û6.û6.û6.û6.û6. û6.û6. û6.û6.û:4û:ûBûCûH_ûJ*&ýýûJ*&ýÿûJ*&þ¶ûJ*&þÙûJ*&ÿûJ*&ÿ ûJ*&ÿ8ûJ.&ýýûJ.&ýÿûJ.&þ¶ûJ.&þÙûJ.&ÿûJ.&ÿ ûJ.&ÿ8ûLa,û2ûLaÆûLaêûN4ûRÊVûûPûRÊû¨ûRûïMPûRûïMþ^ûRûïMÿ+ûRþaQûUûUügûUügûûUülûUüûUþü°ûUþðü°ûV ?ûZ ÿOû`¦kû`¦lû`¦~û`¦¡û`¦¯û`¦°û`¦¸û`¦½û`¦Åû`¦ûû`¦ûËû`¦üÖûb û2ûkdÌMüÇûkûkûnûkûuûmPûmûPûnûq üQûq ûq ÿûqVüXûqrûqæÿûqû ?üüûÆQüûuüûþQüýWûuüüû _ýüRûýýübýüý,ý-ûý-ûûý-ûýËý/û:ý5?ý<ûvýDü'ýEýI4ýKýL ýL ýL4ýV ü.4ûÛýWûuýZý^ý^fýaÆ'QýaÌýdýgýg?ýiûYûýný"?ýüºý4ý4ýüÚQýüúüýüúÿý¡ûý´ýÇ ýÇûyª ýÖþÒýêtQýíþ#fþ'ûþ@þCüô?þE4þF *PsÙkp,Í*v¤©ÖÊYܶÅ@) Lcͪ%QQPf ÇZ¢±Ìå,f æõ±rae!+lJPb¡Æ!4¥ Å1c¥PÅ1SǤ1SÆÛ¥!JSŦ)HSÆVÆ1R¥Ç1sÆã¦1Cæ %¥1LR¥ aÆ1JR¦ ¢Æ1cæ îÅ!JCæ /¥1HR¥ k¥!JRe ¡¥!Jb¥ ÛÆ1R¥ç9cæi¥1RǪÅ)b¥éÅ)R¥(Æ1ÎbÅoÆ9s¦¸Å1Sæ ç1LcÆ JÆ1ÌbÇ Æ1ÎsÆ ÜÆ)JCÆç1LbÆh¤Îs¦ª¥1Rçæ1cç3 )cæu¥!JbÆ´¤)JB¥ð¦1HR - ) R¥h¤)JB¦¥¦) S¦ãÅ1R¥$Æ9ÌSÇo¤)Jc« )SÅêÅ1R -Æ)bÆtÆ)s¦ºÅ1sÆÅ)cÅEÆ1sÅæ)JS¤Ôæ)bƤ1cÇ_Æ)bƤÆ9Sæêç1JbÆ1¦1sÆzÆ1Îb¦ÂÆ)cŤ)JBfDÆ) R¥Å!LR¦¿Æ1 R¥ü¥)R¦8Æ1LR xÆ9sÆÀ¥1Cæ¥!Jb =Æ1c¥ 1ÌcæÌÆ1JR¦Æ1cÆU¤1cƦ)HR¥×¥)B )SÅQÆ1HR¤¥1HR Ȥ)JBÅÆ)b¥A¤1JR¥}¤)Lc¥º )SÅù¥!JR¦6ç1cÆ1ÌbÇÆÅ!JB¦¥1JBÅAÇ9cÆÅ1ÌbÅÐcÆ1Æú!Bc'!BW!B!B·!Bç!B!BG!Bw!B§!B×!B !B <Æ!!¤ p¥)HBÄ ££!A¥ Ö¥R£!h1cÄ!S£1c¥!ÈBce!Ú Ã9Ô¤¥",¥JN!"¥1Ð3¦"Ä¥FR£"úe)JsÃ#;9ÊR¥#|¡Îr¥#ç9Î¥$¥)Vtç$W¥)Ì2¥$¥)ÎÃ$Þ¥(ÊRæ%¦JRã%WÆ2s¥%ÆAc%çÆ1ÈcÄ&*!1&Æ1c&È!+9cÈ'Ç!cÆ'`Æ!Ns¦'¨Æ!c'øÆ1cÄ(:Ä1bÆ(~Æ1c(À1CÆ)Æ!cÆ)FÆ!C)çbð3)æ¤ )ÔbÆ*3ç:bA*°)JNt¥(+çJRs¥)+s¬çIÎ ç+Õ)KZµ©J,Q)JRÖ¥)J,Ëç:Öµ)J-7çRR!-éJs¥-øç9Τ¡.Tç:Rè.¯¡:Ö¥)G/)JRs©)/ç:s)/Ý%)9Ô¡0C ç9Îs)0 ç9Ît¥*0ý¤çRRs¥)1b)AÎsê1¾)JR2¥G9Òç2{ç9Îu$ç2Ö¡9Îs¥)34ç:Ns)3)IÎsç3èçBsç4>çJsç4çJNs4ïç:Pç5IéJsç5¢ç9Ò¡5þç:ç6[! Rsé6À!JR¥7*!jR¥7!B¤¥7û©IB¥8e¥)B!8˽ïB¥)9FeÍ#8Æ9e(Æò£9Ѽ¤)FR¥:1 QÆQ¡:h¥)NR«:´ç*tÅ;IÎrÆ;UÈ2$Ç;¬é9¡&<Ç!Ìsä<PG9RC Æ<£ä9Ìcæ<ðÇBæ=GçAd Æ=Æ1cÇ=àç1s$>,È1c>xÆysÆ>ǧYcÇ?!1s'?jåc?¿Qsæ@% 1Ìs'@e!2 È@»èBPA¤çACäAaä9ÒsæA´¥D9c&B Æ1ÌsíB_!9cäB°ÆAtèCä)Î% CUä9cäCÆ1sçCåè1cçD/¨¥)J ¤Dx¥1JRGD½¦BS$ÆE¥)RHEY¥)S ¨EçIØsEôÆA¡&FJçIÌ% F£Æ1ÈsçFîæ9ÔG@$Ç1ÎrÆG!1Ìc¡ Gåä1Ès ÆH/çAcÆHyæ9ÎCÇHÄç1cÈI!säIZç"cæI¤æ1ÌsIòæ9ΤJAAd!(J!(IJô1DK@(ç!ÌcéKÇ9dÉKãÇ9ÈÆL0è1Ð ÇL JcÈLÞÆ1ÎCäM#Æ9sÇMmÆ9cM²Ç)R¥Móc)JR¥N) !A¨Ngd) BN ÈBNÎ!BÆO¦9CkOIæ9bO0ÈAçOÉ !2ÄP !BP6¥1RPrä)2P¬g9ÎsçPùç)ÌBQD¥1sÇQÆ) RÆQϧ1RÆRÆ1ÌbÇRX¥)JRæR¥)JB¥RÓè9JR¥S¥)LsSb¤)JR¥S¥)JRSÓ¥)JR¥T¥)JR¥TK¥)JR¥T¥)JR¥TÃÆ(ÆR¥Tþ¦1c¥UAÆ1cÆUÆ1cÆUÑÆ1cÆVÆ1cÆVaÆ1cÆV©Æ1cÆVïcÆ2dWÆ1RWU )c¦WÆ1d!Wé¦)cX+ç9ÎrÆXy 1NcÅXÀ%)!BçY!BY<!BYl!BY!BYÌ!BYü!BZ,!BZ\!BZ!BZ¼2Zî!Bd[e1JR¤[U¥!Q¥[1R[ÄÅ!C¤[ý¤!R¥\5!B\e ÑϯP¤]'¥)Rê]p¥JR¥]¬e)JR]á¤!b^1c¥^W!R^1 B^À¦1JR^üe)SÅ_6Å)A¥_nÅ)HBÆ_«!bÆ_æ¤1LRÅ`$ÄHB`Yf)s` æ9ÃÇ`ä¥ÈCa1RÅaX¥!Jb¥a !¡¦aÓ!b b¤!HBÆbB!B¤b{¥)RÅb¸ !Bbë¥)bc+!BæcbÆ)B c¤!CÅcÖÇ1ÌRÅd! b¤dQ¦)BdÅ!CdÉ!HR¥dÿ) Be2Ä!B¦encÆ2e¥1JBceÎ!B f!R¦f7!Bfg!Bf!BfÇ!Bf÷!Bg'!BgV èÆ1cgbBg¾¤!B)egÿ!HRÅhX È2 !Hh¸) BbÈiB¤)iu!H1s ÆiË!HR!Hj/!!Ì Èj¤ç1d!jØ!BbIk2IJNsÆk¨9Ò¥'kæç*t¤él;¥)JR¥lw!H1 R¥lÃ!HR!Hm') BbÆmÆB¤)mÞ!HRçn:Æ2 !HnÆBd!nêÆ2ço: çJN§o¨9Ò¥'oì¥)JR¥p%bApJ¥)F"§p 2p« "pÏ%KRPsq*%BP% qBPt% qð%BP%rTBPsr¬%1LssBPt% s`1Ðt%s¸BPsÇt1Lst\ 1LsÇt %BP%uBPsu\%1Lsu°Ç1Ðsv B¤}¤) B¤}ÐcÆ1c}ö!B~%!2~T!B~,e Æ1c~µcRui Æ1c1!Ba!B$!BƤ(Æ2¤cýç:NC¥I!cçÈ!CÄÐ¥)HRħ9HdY*Jb¦ä"RÆâ è)BÆ*ÈIʦå:Rc§Ð%)LåÇ)JS¥ZÆ!Îs ¥¡ ¨*R¤è 1S¤*¦1ÊD%pæ1Èr´å1t ¥:d$å Tç*r) ¨Å)J¦ ë)Jc¥0è2 çèIÌcIØK b¦2 ÅQuGéRbÆß¼¦9£¨4è9Îs(é%AÐcGèfÆ3ÇcÈ1L! 1BÁ!Bñ!B!!BS!B!B³!Bæ!Bd!BCBr!Bd¡ ÈBÐ!B R¥;¥)JRuçAJR¥¸)K¬w8¥2å!Jacid!" Ì1ÄÑ ÈBþªYbIÆ1rÆ£ÌcæÌ¤)Hc ¥9HBC¤)HQev¥)B¥!BPS¥ý)P!IcÆBr²2c«Ä(Ì4!ëÆ)S *ÄHÆBÆd! J!ÁÆ1¡9ÈBÆVÇ1cç9Îs¡òÄ9ÎBç: 9CÄèBJá¡AÎ;¡AÎsçg9Îà¥9S#!k9aÆuä1bæºä9Cçÿç!ÈrCå!Èr §Qc(âç;Pv§B%"¥%*µç)LRÿ8ÊV!D i8Æ1{¥!HB ³Æ1R¥ð¥9ÊR .¥)LR¥k )JB¥£¥) R¥Þ¥)JR¤¥)JR U!BÆcÆ2©Ãç9Îs¨âç9Îs¤çk¨As§¹¥JR dò¥)R¥ +¤)JR¥ f )JR !JB¥ Ó!B¤¡ .!B¡F¥ÆCd¡¤)JRc¡Ã (ÊB¥¡úd2d¢$D È1£¢ND Æ1b¢vä!A¢¬#)J2Ç¢÷ÅR£2iA(£éBR¤ h£ê&2NÃ)G¤E1IJ3䤥ÍjØt¡¥!AÌcÆ¥fç9Ît!¥¾Æ1cç¦ ç9Ð æ¦`bÌ禧Æ1c¥¦í%):£°f§P¥)HRJ§¥)JR¥§Ð)JR¥¨ ) B¨: !HR ¨pcÆ1e¨ cÆ1g¨Ñ!B©!B©1d!B©_3©¤)B©¾Æ1c©å!Bª!JBªIcBªt! 1cª¢Æ1B¦ªÞîÖ2)«1¥) S°ç«xÅ1aç«»ÃIFR¥«úe(ÆSf¬,¤!B¬]cÆB¬!B¬»&IÜ13oBZó¥© (Æ1cÊ!HR¥®1sÅ®O¥*c)®¥)JR¥®Ö¥)JR¥¯¥)JR¥¯N¥)JR¥¯Æ1c¯°cÄ1¯Õ!2¥°!HQ£°4(A±Â°!B°·d!B°æ ÈB±!B±D!B±s!B±¤cÆ2¥±Ï¥)JR²¥)HB²A¥)JR¥²}ç9Îr¥²Å)JR¥²ý¥)JR³7¥)JR¥³s ÆBf³¢B³ÎcHRd³úÆ1´+!B´[c!B´!F1c´³æ1CÅ´ücÆ1µ&- AÐ¥°cµ *C)¦µç%¨:RD!+¶P©Jã!(¶´1ÌR¦·¡iJc´Ì·n´¡ ·»!A·ê!A¸d!B¸K!B¥¸}!Be¸¬ Æ1d¸Öd!B¹ B ¹3¥)c¹pf)q¥¹« c(ÆRe¹ãæÒÓKºK©%iG ú·½t:§»+HÊsÇ»«¥ 5k»÷)J¥)¼[HB¤¼A¼ºcÆR¼å!Ac½!B½AcÆ1½gÅ) B ½% BR¤¤½ú%+B¥¥)¾lÆ1¡)¾ÂÆ1cÆ¿ Æ1°cÆ¿d¥)9Ú¶0ƿҴç*R¥¥À6!2Àd¤)AÀÆ1cÀ¹!BÀécÈBÁ¤!HQcÁC1 BÅÁxdAdÁ¤cÆ1 ÁÍ!BcÁû!BÂ+cÆ2ÂS )BcÂdBe± !2ÄÂâÆ1cà !BÃ:cBÃgRà1cñf!b¥Ãéd!BÄcHRÄB!1cÄl!BÄcÆ2ÄĤ)RcÄ÷!AÅ#e!2ÅOÆ1cÅw!BŧcBÅÒ! 1cÆ !BÈ:9BÈk¥Æ1cÈ*[B¤Èé§1 É)Ä1 ÉbÄ! RÄɨ)JBÌÉâ!ÆÊ*R" Êp AÐv èÊÅÆ1RËÆ)s ËNÆ1cÇËæ1ÎsçËå¥1#æÌ#9ÊeÌc@Ì1 ÌQg+Ìâ!ÆÍ"1cÍ\Æ1cÍ ) B¤Í¼Ã1cGÍÿA Î.1¤Î^¤Æ2Îc Æ1 δ!2cÎáBÂÏ cÆBÏ5!BcÏbcÆ1Ï) B Ͼ"Z Ð¥9NbÐA¥)HB¥ÐwÅ1bйèB¥Ñ¥)DRÏÑI B¥! ÑíêZt)ÒQ!HYÐuëÒµ!2(çÒð"ÃÓ&¥)B&ÓeEAB1 Ó £Êr¥ÓÜÃÆRcÔ!1ÔJ)bÆÔåFS( ÔÇ!BÕ'!ÄÕR¡B §Õ¯(æ1cÆÖ "¦ B'«"5#,&#"È%Î!&$&K&Q!&!#&&"##2&#"X#4#5 ¢"#-%&# ! ` a ^ _ j k i X \ ] Z [ Y V W g h e f n c d b o q p m t u r s * + ) ' ( % . # $ " / 0 - 4 5 7 6 2 3¢¸¢¶¢·¢Â¢Ã¢Á£d£a£b£p£m£n£l£i£j£g£h£e£f£s£u£t£q£x£y£{£z£v£w¢°¢´¢µ¢²¢³¢®¢¯¢¿¢À¢½¢¾¢Æ¢»¢º¢É¢È¢Ä¢Å¢Ì¢Ï¢Î¢Ê¢Ë¡ ¡ ¡¡¡@¡=¡>¡J¡H¡;¡<¡:¡9¡6¡7¡G¡D¡E¡B¡C¡A¡N¡O¡K¡L¡¡¡¡¡¡¡¡¡ ¢¡ú¡ý¡þ¡ü¡ù¢¢ ¢¢¢¢¢¢¢¢¢¢¢¡Á¡Â¡¿¡À¡Ì¡Í¡Ë¡¹¡¾¡»¡¼¡º¡·¡¸¡É¡Ê¡Ç¡È¡Ð¡Å¡Æ¡Ã¡Ä¡Ñ¡Ó¡Ò¡Î¡Ï¡Ö¡×¡Ø¡Ô¡Õ ¸ µ ¶  Á¢4¢5¢2¢3¢>¢?¢=¢1¢0¢<¢9¢:¢B¢7¢8¢6¢C¢E¢D¢@¢A ° ³ ´ ² ± ® ¯ ¿ ½ ¾ Å » ¼ ¹ º Æ È Ç Ã Ä Ë Ì É Ê¡ ¡¡ } ~ x { | z y v w ¡Y¡Z¡W¡X¡`¡a¡_¡S¡V¡U¡T¡Q¡R¡]¡^¡[¡\¡d¡e¡g¡f¡b¡c¡¡¡¢c¢`¢a¢l¢m¢k¢^¢_¢]¢j¢g¢h¢f¢d¢e¡¡¡¡¡¡}¡~¤3¤7¤8¤5¤6¤4¤1¤2¤=¤>¤;¤<¤@¤:¤9¤A¤C¤B¤?¤F¤G¤I¤H¤D¤E¡¡¡££££££££££££¡£¢£¤££££ £§£¨£ª£©£¥£¦¡¡¡¡¡¡¡¡¡¤P¤Q¤N¤O¤J¤K¤U¤V¤S¤T¤R¤\¤Y¤Z¢ö¢÷¢ô¢õ¢ý¢ü¢ï¢ò¢ó¢ñ¢ð¢í¢î¢û¢ú¢ÿ¢ù¢ø£ ¤¤ ¤¤¤¤¤¤¤¤¤ ¤¤¤¤¤¤£Ç£Ò£Ó£Ñ£Ï£Ð£Í£Î£|££££ £££££££~££££££££££££Ö£Ë£Ì£Ê£×£Ù£Ø£Ô£Õ£Ü£Ý£ß£Þ£Ú£Û££££££££®£¬£¹£¶£·£²£³£°£±£¯£½£¾£º£»£Ã£Å£Ä£À£Á££££ ££ £££££4£1£2£:£;£9£/£0£.£-£*£+£8£5£6£>£?£<£=£B£C£E£D£@£A£ ££££!£#£"£££&£'£)£(£$£%¡$¡"¡.¡/¡-¡¡ ¡¡¡¡)¡*¡2¡'¡(¡%¡&¡3¡5¡4¡0¡1 ì í ê ë ò ä è é æ ç å â ã ð ñ î ï ö ÷ ø ô õ ü ý ÿ þ ú û¢¢¢¢¢¢¢¢¢¢ ¢ ¢¢¤_¤c¤d¤a¤b¤`¤]¤^¤i¤j¤g¤h¤f¤e¤m¤n¤p¤o¤k¤l¤w¤x¤u¤v¤t¤r¤¤¤~¤¤{¤|¤y¤z¤¤¤ ¤¤¤¤¤¤¤¤¢¢¢¢¢ ¢¡¢£I£F£G£T£Q£R£P£M£N£K£L£J£X£Z£Y£U£V£]£^£`£_£[£\¢¢¢¢¢¢¢¢¢¢¢¤¢¢¢¢¥¢§¢¦¢¢¢£¢ª¢«¢¢¬¢¨¢©¢Ú¢Û¢Ø¢Ù¢à¢á¢ß¢Ò¢Ö¢×¢Õ¢Ó¢Ð¢Ñ¢Ý¢Þ¢Ü¢ã¢ä¢æ¢å¢â¢é¢ê¢ì¢ë¢ç¢è¤s¡ &¡+¡£ ¢ ·¢s£È¡# A££c£o¢b£3¡?£S¢;¡,£H£} ,£ì£k¡£´£¸¤W¢i¤L¡£¼£É¢p£r¢Ô¢£W£O¤}¤q ù ó¡!£7£,£Â£¿£µ£«£Æ¤¤ P J I¤[¤X¤M À¡Ù¡½¡ø¡û¤/¤'¤)¤%¤¤¢T¢Y¢F¢y¡r ¡¡ê¢ ¢,¢%¢$¢¢(¢¡ñ Ý¡P¡M¡F¡8¡I¢Í¢Ç¢¼¢±¢¹ 1 l¤¼¤¹¤¡¤³¤Æ¤¤¤©¤¨¤¸¤¤²¤Ã¤Ä¤«¤®¤¯¤±¤ ¤¤°¤º¤Â¤À¤¤¬¤¤§¤¤¤¤»¤¤µ¤ª¤·¤¤¿¤¤¤¶¤¦¤¤¤¤¤¤½¤¾¤¥¤þXþZþ\þ^þYþ[þ]þQÜþ_!q!p!!}!r!s!t!~!w!u!v!x!y!{!z!|þRþPþeþdþaþUþbþVþfþWþTþhþj" þ`þc" þiþkSÕÐûåûäûæûçûÔûÓûÕûÖÆûÚûÙªÇwûÝûØû×ËûßûÞÈûÜûÛEþâþáþãþäJÎÑ&þþþþÍþòþñþóþôÒÓû±û°û¯û®'#þþ%þþrs"þþþþIþðþïqûQûP- þ¢þ¡þ£þ¤,þþþþ !þ.þ¦þ¥þ§þ¨Dµ¶·¸þÞþÝþßþàF¹½¼þæþåþçþèºûû*}|þþþþ)þþÃGÀû¥û¤þêþéþëþìÁÂû§û¦û¨û©¾û«ûªû¬û3þ²þ±þ³þ´4úþ¶þµþ·þ¸C¬®«þÚþÙþÛþÜ1þ®þA¢£¥þÒþÑþÓþÔ(þþþþp5þºþ¹þ»þ¼6ûþ¾þ½þ¿þÀtxuv7þÂþÁþÃþÄB§¨þÖþÕþ×þØ9 þÊþÉþËþÌ+þþþþ:üþÎþÍþÏþÐHÏÊ$þþ ÄþîþíÅûáûàÉûãûâ2þ°þ¯8þÆþÅþÇþȯ²´°ûûûû/þªþ©~ûWûVûXûY¿û{ûzû|û}Ìûýûüûþûÿ¡¤ûkûjûlûmûèûézû_û^û`ûayûgûfûhûiûcûbûdûeûû~ûû»û¡û û¢û£¦ûoûnûpûqûwûvûxûy±ûûûû©ûûûû³ûûûûûsûrûtûuû[ûZû\û]{ûSûRûTûU0þ¬þ«ûûûûûûûûûûû ûæàÖ×âØçÚÛÙèÜäáßíãåýóýòýûýôýñýöýõýúý±üüHüÑüJüüIýýýüFüÏýýÀýýüEüÎýý¹ýüGüÐýýý°üüXüÝüðüüZüüYý®üVüÛý¯üUüÚûíûìû÷ûöûøûóûòûñûðûõûôüfüüüßüiüûëûêühüüüü ý.ý8ýiý%ý ý-ý7ý'ýý/ý9ý2üêý)ý ý»ýÃý·üü<üÈüìüü>üü7üü=ü9üÅü8üÄü:üÆüü;üÇüëü\ýÁü0üÁü}ü2ü|ü1ü.ü¿ü-ü¾ý|ý}ü/üÀülüüüáüoü ünü ýÂüüüüýüüümü üâüjükýfýÅü!ü³ý"ýý!ýý©ýdýeü ü±ü²ý+ýü%ü·ý$ýý#ýý«ýnü#üµü"ü´ýoýpü$ü¶ý,ýýsýtýqýrü'ý3ý:ýüöýüõü&ü¸ýý²ý~ý´ü4üÃüü6ü~ü5ü3üÂývýwý¶ýxü*ü»ýüøýü÷ýuýÄü)üºüxüü¦üåü{üüzüüüyüæüvüwýyýzý{ü,ü½ýüúýüùü+ü¼ücübüôü`üòüaüóü_ü^ü(ü¹ý;ûúûùûûü[ýøýùýðý÷þýTUmÔÝQþ|þ}ÞPþzþ{KþpNþvþwOþxþyRþ~þjlìMþtëêLþr@þqékÂÀÁ¦bjtv»¢ª¾¡Ã¿¬ . ¯.?¡+]YTSUVWX},lkmnoêÚÔÓ¦¥¡£ÕÖ×»¤£½¥¦§ ÐÇÁÀpÒÂÃuvqrstÄ|_ac-I0/13 ~PEBFGHICôîí%ïðñfMLjNOoklspqr>'&)*RH,ó5Æ©Ùq(#%&* $'()"!T*+,)(KLIHôñÇÈÅÄóðïK7ÛØÙÚ×Ö !÷øùõ ÑîêìéèÌÎËÊSPZRON=74ålijkhgâÕÒÔÑÐFEBDA@G ÏíYfcáçÝúÉÞÆ`öb]eàUVJXQM[\_T3aCÓãæä^:;>5869<?ÜßWÍë/2% 6ò-SdP]ëMDJ¼JQ @^<db"GEÎ̹·çwu86420:`\ZXiÿýûù÷ $OCA?=;ʵ³±¯åãáßÝé}{y\ìRr-nªKU8f³°±¼½¾»¸¹º²·´µ¶¿jd =eϺ nÀÁ¿¢AÃ^®¬ª§¨©«{tuvwxyzm`g L;.caQb Y+_LG WXV,SR³ÓÔ°²Î¶´µÍÒÑ±×ØÖÌÙÏÕçêè麹åã䨸®Â½ÇÅÆ¬ÉÈÀ¯Á«ÝÚÜáÛßàÞ·ìïí뿾¼»ÄªÃù©ñòÊËæøöõ÷ðîôâÐóabvwfesuil¢njpqhmrtc gd`|z{ok¡ }~xy0.1dfa`edbfagx}|+/z~yðóûüÿõòöñ÷HMLJNIOZ YU35417RVQ@EDPSUTRVQX[]\ZBFAHKMLJ-*.)/X05261 #%$"&!'ut'r;?q@CEDBFAhkmljnioÈÍÊÎÉ íîéØÝãäçÚÞÙßêv¨è º»¹¼¸)+-/(*,.ÊËÌ9;=?8:<>ÚÛ٪إY[]_êëé«èÈÉIKMHJLøù¡ì§¦£¨¤þÝÞß¿ÍÎÏïýtÀzÓÒÔu¾íîÁ ~ñÕÑðÐ½× ((:(z(ú(º(Z(Ú((*(j(ê(ª(J(Ê(((2(r(ò(²(R(Ò(("(b(â(¢(B(Â(((((<(|(ü(¼(\(Ü((,(l(ì(¬(L(Ì(((4(t(ô(´(T(Ô(($(d(ä(¤(D(Ä((((8(x(ø(¸(X(Ø((((h(è(¨(H(È(((0(p(ð(°(P(Ð(( (`(à( (@(À(( 3u3+3,3v3;383:3733×3.303/3Ø3=3@3Ù3Ú3°3´3º3U3V3R3Q3S3T33 3"3#3!3Û3Ü33'33W3Ý3N3O3P%¦%è%ç%¥%¤%ê%¨%§%é%©33t33Ê3©3"""ä"""å33®3¯3{3~3|3}"3K#""$Ð$Ñ$Ò$Ó$Ô$Õ$Ö$×$Ø$Ù$Ú$Û$Ü$Ý$Þ$ß$à$á$â$ã$ä$å$æ$ç$è$é$¶$·$¸$¹$º$»$¼$½$¾$¿$À$Á$Â$Ã$Ä$Å$Æ$Ç$È$É$Ê$Ë$Ì$Í$Î$Ï2f2t2`2n2e2s2b2p2m2{2h2v2k2y2c2q2l2z2a2o2d2r2j2x2i2w2g2u$a$`$b$c$d$g$e$f$h$ê2Ð2Ó2ì2ê2í2ë2Ñ2Ø2Ö2Ù2×2ñ2ï2ò2ð2ä2ç2å2è2æ2Ô2ù2÷2ú2ø2Ú2Ý2Û2Þ2Ü2â2à2á2Ò2û2ý2ü2þ2õ2ô2ã2Õ2ó2î2é2ö2ß"'²'*22¢2£22 2©2°2ª222¨2§2222222 222¤2¦22¥22222222¬2«2222¡2®2222222222¯$i$k$s$o$j$l$p$r$m$n$q#"#"'B""""""06$$$$$ $ $$ $$$$$$$$$$$$$$$$&$!$%$$$$$$ nË*r Ô¤´///D///////:/À/s/&/R/V//P/+/ /Å/C/k/¤/>/O/Î/2/Ë/#/[/W/e/¾/Õ/¹/!/"/r/=/Ç///(//x/K/²/ //c/`/É// //Ð/0///~//^//v/./'//¿/H/ /7/g/j/ª/Z/m//,/t/S/;/o//b/¼/a//q/Í/1//¥/N/%////®/)/}/E///n/X/i//6/ //]//M/\//¢//@/8/»/f//u0¢0Ð0Ù0Ó0Ü0Ö0À0Ç0Â0É0Å0¨0¬0²0®0´0°0Ø0Ò0Û0Õ0¤0±00³0¯0á0ß0â0à0ó0Ê0Í0Ë0Î0Ì0ª0Ú0Ô0Ý0×0ì0ê0í0ë0µ0»0·0½0¹0Æ0Á0Ä0¦0÷0ù0ø0ú0ô0ï0ñ0ð0ò0è0æ0¶0¼0¸0¾0º0¡0§0£0ö0©0Ã0¥0î0ç0å0õ0ã0È0«0ä0Þ0Ï0é0¿0Ñ0û0þ0ý¾¿hVEQBGcSf]_`@aXgbOTdFPDJAKeULINCRMWY^j[Zi\ 4 89 6<=75:;¸¦¡³£¶¯°±¨·²¤´ µ¥¢§©®º»¼«ª¹¬ÂÃÀÁÙ"8""Å *3!'9-"5/(#%,0$&8=?©¦§ :6.KQDNESZ[FHMGIVWUOPLRCTYJ\X72+i]kd^_ja`ocehfgqnrmbpl1vs£¥ ¢¡¨¤tuw4;<>B)@A 0000%%0%%%Ö%%% 00"£ #%>%.%6%I%1%9%F%D%=%-%5%J%2%:%E%C%Q%`%c%l%T%W%f%Z%]%i%P%z%x%~%O%M%%#%+%K%{%%%3%y%%%%;%%%%% %_%b%k% %(%B%%%%?%^%a%j%v%t%|%N%L%%%$%<%w%%%,%u%%%}%4% %%S%V%e%%%%'%A%0% %!%%)%G%/%R%U%d%Y%\%h%%%%&%@%8%%"%%*%H%7%X%[%g" % Ø'+/:&N2 Ò68 Ó57 (G"00 ã Þ Ý à ß â Õ Ù Ô ÚLF*K'F'¨''''^']'Z'd'¦'¥''$'8'K''®'\'[''1'c'¸'¹'·'b'»'='C''' '.'''''½'H0-0*0+2Ã2Ç2Ë2Á2À2Æ2Å2Â2Ä2Ê2É2È3þ3á3à3â3ã3ä3ç3å3æ3è3é3õ3ô3ö3÷3ø3û3ù3ú3ü3ë3ó3ï3ê3ì3ð3ò3í3î3ñ3ý3Z3Y3[3\3]3`3^3_3a3X3b3n3m3o3p3d3l3h3c3e3i3k3f3g3j070?00011111111111111110 22 222$u$t$v$w$x${$y$z$|2:2@2C292!2 2"2#2$2'2%2&2(2)202,242*2/2+2-2<2;2125232B2A2>2.2822262=272?$}$$$$~$$$$$$ P , & \ ^ 2 ( X 8 5 [ a ` / . 9 0 $ * 6 % 7 + ! # ' " - 1 3 _ ] 4 ) Y Z M < = h g i j k n l m o f L G ? K A B b c C D H > @ F J E I e T S R Q p d&9%«%¡%ë%ò%ñ%ó%ð# %¢%£&&%¯&&''%Ë%ö%õ%÷%ô&%¹%·%»%Ã%Á%Å&V&U&Y&X&T&W&a%Ç&b%È%æ%µ%³%ì&<&%%¿%½''@&d&:%±'&g ¡¢ ÏÜËÕÓØÖÒÎÔÚ×ÉÆÙÇÌÐÍÊÑÈâáãäåèæçéàÂÅÁ·À¾Ä»½¼¹º¿Ã¶¸´µ®£³¯¥§¨ª«¬²±¤©¦°ÛÿAÿBÿCÿDÿEÿFÿGÿHÿIÿJÿKÿLÿMÿNÿOÿPÿQÿRÿSÿTÿUÿVÿWÿXÿYÿZÿ!ÿ"ÿ#ÿ$ÿ%ÿ&ÿ'ÿ(ÿ)ÿ*ÿ+ÿ,ÿ-ÿ.ÿ/ÿ0ÿ1ÿ2ÿ3ÿ4ÿ5ÿ6ÿ7ÿ8ÿ9ÿ:ÿÿÿÿÿÿÿÿÿÿÿ=ÿ ÿ]ÿ;ÿÿ[ÿ\ÿ>ÿ^ÿ@ÿãÿÿâÿÿÿÿÿÿ?ÿ ÿÿÿÿÿÿÿÿÿ<ÿÿÿ ÿÿ ÿäÿåÿæÿáÿà ? 5a`/.90$*6% 7+!#'"-13MhgijknlmofLFG?JKABCDH>@VU ¹ Æ Ä ¸ » À º £ ª ° · ¨ ® µ ¡ ¢ © ¯ ¶ § ´ ¦ ¬ ³ ¥ Á ¤  « Å Ã ± ½ Ê Û Ú ó Ö Ó ò Ñ Ù Ý Þ Ü Ô Ò Ð ß Ï Ø ô ¬¦Þ²¨¸µá௮¹°¤ª¶¥ ·«¡£§¢±³ÍèçéêëîìíïæÌÆÇ¿ÊËÁÂÃÄȾÀÖÕW,&2(8 a`/.90$*6% 7+!#'"-\3_]M<=hgijknlmofLG?KABCH>@Vp!*'# )%&TURS 5 a ` / . 9 0 $ * 6 % 7 + ! # ' " - 1 3 4 M h g i j k n l m o f L F G ? J K A B C H > @ Ð ¬ ¦ ² ¨ ¸ µ à ¯ ® ¹ ° ¤ ª ¶ ¥ · « ¡ £ § ¢ ³ Í ¼ ½ è ç é ê ë î ì í ï æ Ì Ç ¿ Ë Á Â Ã Ä È ¾ À Å É ÐÔöñØÝãóèêÛÙòßÖîÕâ×áàçäÞÜÚåëïõôðæÒÓìéíÑ ¤Á¨³Ã¸º«©Â¯¦¾¥²§±°·´®¬ªµ»¿ÅÄÀ¶¢£¼¹½¡û q t r p s , & ^ 2 ( 8 5 [ / . 9 0 $ * 6 % + ! # ' " - \ 3 Y Z M < h g i j k n l m o f L G ? K A B H > @J <AB?% !&)(,$'+"#*CDEF 1(1«1*1111¡11$1%1§1·1¶1´1µ '%'"'#ا¦¬©¨¯®«ª¢£ ¤¥¡ °" " " !!4!,!0!1!!!!3!!""BÛ"½"Míãçéëåïìâæèêäî''M'0 ... [truncated message content] |
From: Finn B. <bc...@us...> - 2000-12-04 21:31:33
|
Update of /cvsroot/jython/jython/org/python/modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv22616 Added Files: ucnhash.java Log Message: First version. --- NEW FILE --- // Copyright 1998 Finn Bock. package org.python.modules; import java.io.*; import org.python.core.*; public class ucnhash implements ucnhashAPI { // Parameters for the word hash. private static int n; private static int m; private static int minchar; private static int maxchar; private static int alphasz; private static int maxlen; private static int maxidx; private static int maxklen; private static short[] G; private static short[] T0; private static short[] T1; private static short[] T2; // Map the hashed values into the text (as bytes). private static byte[] worddata; private static short[] wordoffs; // wordindex greate then cutoff is stored as into two bytes. private static short wordstart; private static short wordcutoff; // The raw data and indexes into start of each name // The rawindex is sorted based on the wordindexes. private static byte[] rawdata; private static char[] rawindex; // The mapping from raw data index to unicode code points. private static char[] codepoint; public static String[] __depends__ = new String[] { "/org/python/modules/ucnhash.dat", }; public static void loadTables() throws Exception { InputStream instream = ucnhash.class.getResourceAsStream("ucnhash.dat"); if (instream == null) throw new IOException("Unicode name database not found: ucnhash.dat"); DataInputStream in = new DataInputStream( new BufferedInputStream(instream)); n = in.readShort(); m = in.readShort(); minchar= in.readShort(); maxchar = in.readShort(); alphasz = in.readShort(); maxlen = in.readShort(); maxidx = maxlen*alphasz-minchar; G = readShortTable(in); if (in.readShort() != 3) throw new IOException("UnicodeNameMap file corrupt, unknown dimension"); T0 = readShortTable(in); T1 = readShortTable(in); T2 = readShortTable(in); wordoffs = readShortTable(in); worddata = readByteTable(in); wordstart = in.readShort(); wordcutoff = in.readShort(); maxklen = in.readShort(); rawdata = readByteTable(in); rawindex = readCharTable(in); codepoint = readCharTable(in); } private static short[] readShortTable(DataInputStream in) throws IOException { if (in.read() != 't') throw new IOException("UnicodeNameMap file corrupt, shorttable"); int n = in.readUnsignedShort() / 2; short[] table = new short[n]; for (int i = 0; i < n; i++) { table[i] = in.readShort(); } return table; } private static char[] readCharTable(DataInputStream in) throws IOException { if (in.read() != 't') throw new IOException("UnicodeNameMap file corrupt, chartable"); int n = in.readUnsignedShort() / 2; char[] table = new char[n]; for (int i = 0; i < n; i++) { table[i] = in.readChar(); } return table; } private static byte[] readByteTable(DataInputStream in) throws IOException { if (in.read() != 't') throw new IOException("UnicodeNameMap file corrupt, byte table"); int n = in.readUnsignedShort(); byte[] table = new byte[n]; in.readFully(table); return table; } public static int hash(String key) { return hash(key, 0, key.length()); } public static int hash(String key, int start, int end) { int i, j; int f0, f1, f2; for (j = start, i=-minchar, f0=f1=f2=0; j < end; j++) { char ch = key.charAt(j); if (ch >= 'a' && ch <= 'z') ch = (char) (ch - 'a' + 'A'); f0 += T0[i + ch]; f1 += T1[i + ch]; f2 += T2[i + ch]; i += alphasz; if (i >= maxidx) i = -minchar; } f0 %= n; f1 %= n; f2 %= n; return (G[f0] + G[f1] + G[f2]) % m; } private static final char[] charmap = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-".toCharArray(); private static String getWord(int idx) { int offset = wordoffs[idx]; int end = worddata.length; if (idx < wordoffs.length-1) end = wordoffs[idx+1]; StringBuffer buf = new StringBuffer(); for (int i = offset; i < end; i++) buf.append(charmap[worddata[i]]); return buf.toString(); } private static boolean match(int idx, byte[] raw, int begin, int end) { int woff = wordoffs[idx]; int wend = worddata.length; if (idx < wordoffs.length-1) wend = wordoffs[idx+1]; if (end-begin != wend - woff) return false; int l = end-begin; for (int i = 0; i < l; i++) { if (worddata[woff + i] != raw[begin + i]) return false; } return true; } private static int compare(byte[] a1, int off1, int len1, byte a2[], int off2, int len2) { for (int i = 0; i < len1 && i < len2; i++) { int d = (a1[off1 + i] & 0xFF) - (a2[off2 + i] & 0xFF); if (d != 0) return d; } return len1 - len2; } private static int binarysearch(byte[] rawlist, int start, int end) { int floor = 0; int ceiling = (rawindex.length) / 5; while (floor < ceiling - 1) { int middle = (floor + ceiling) / 2; if (debug) System.out.println("floor:" + floor + " ceiling:" + ceiling +" => " + middle); int off = rawindex[middle*5]; int len = rawindex[middle*5+4] & 0x1F; int d = compare(rawlist, start, end - start, rawdata, off, len); //System.out.println("middle:" + middle + " off:" + off + " " + len + " " + d); if (d < 0) ceiling = middle; else if (d > 0) floor = middle; else return middle * 12; } int tmp = floor*5; int off = rawindex[tmp++]; long lengths = ((long) rawindex[tmp++] << 48) | ((long) rawindex[tmp++] << 32) | ((long) rawindex[tmp++] << 16) | ((long) rawindex[tmp++]); //System.out.println("start seq:" + floor + " " + off + " " + Long.toHexString(lengths)); floor *= 12; for (int i = 0; i < 12; i++) { int len = (int) (lengths >> (i * 5)) & 0x1F; //System.out.println("seqcompare:" + off + " " + len); if (compare(rawlist, start, end, rawdata, off, len) == 0) return floor; off += len; floor++; } return -1; } public static int lookup(String name) { return lookup(name, 0, name.length()); } private static int lookup(String name, int start, int end) { byte[] rawlist = new byte[32]; int ridx = 0; int rbegin = 0; int rstart = 0; int i; while (true) { rbegin = ridx; int begin = start; for (i = start; i < end; i++) { char ch = name.charAt(i); if (ch == ' ') { start = i+1; break; } int v; if (ch >= 'a' && ch <= 'z') ch = (char) (ch - 'a' + 'A'); if (ch >= 'A' && ch <= 'Z') v = ch - 'A' + 1; else if (ch >= '0' && ch <= '9') v = ch - '0' + 27; else if (ch == '-') v = 37; else return -1; rawlist[ridx++] = (byte) v; if (ch == '-' && start != i) { start = ++i; break; } } int hash = hash(name, begin, i); if (debug) System.out.println(name.substring(begin, i) + " " + hash); boolean isWord = hash >= 0 && ridx - rbegin > 1 && match(hash, rawlist, rbegin, ridx); if (isWord) { if (debug) System.out.println("match " + getWord(hash)); hash += wordstart; ridx = rstart; if (hash > wordcutoff) { rawlist[ridx++] = (byte) ((hash >> 8) + wordcutoff); rawlist[ridx++] = (byte) (hash & 0xFF); } else rawlist[ridx++] = (byte) hash; } rstart = ridx; if (i >= end) break; if (!isWord) { rawlist[ridx++] = 0; } } if (debug) { System.out.print("rawdata: "); for (int k = 0; k < ridx; k++) System.out.print((rawlist[k] & 0xFF) + " "); System.out.println(); } int idx = binarysearch(rawlist, 0, ridx); if (idx < 0) return idx; if (debug) { System.out.println("idx:" + idx); System.out.println("codepoint:" + codepoint[idx] + " " + Integer.toHexString((int)codepoint[idx])); } return codepoint[idx]; } // From the ucnhashAPI interface public int getCchMax() { if (!initialized()) return -1; return maxklen; } private static String cjkPrefix = "CJK COMPATIBILITY IDEOGRAPH-"; private static int cjkPrefixLen = cjkPrefix.length(); // From the ucnhashAPI interface public int getValue(String s, int start, int end) { if (!initialized()) return -1; if (s.regionMatches(start, cjkPrefix, 0, cjkPrefixLen)) { try { String hex = s.substring(start + cjkPrefixLen, end); int v = Integer.parseInt(hex, 16); return v; } catch (NumberFormatException exc) { return -1; // Maybe fallthrough to the main algorithme. } } return lookup(s, start, end); } private static boolean initialized = false; private static boolean loaded = false; private synchronized boolean initialized() { if (initialized && loaded) return true; if (initialized) return false; try { loadTables(); loaded = true; } catch (Exception exc) { return false; } initialized = true; return true; } private static boolean debug = false; public static void main(String[] args) throws Exception { loadTables(); debug = true; /* System.out.println(getWord(hash("ARABIC"))); System.out.println(getWord(hash("SMALL"))); System.out.println(getWord(hash("YI"))); System.out.println(getWord(hash("SYLLABLE"))); System.out.println(getWord(hash("WITH"))); System.out.println(getWord(hash("LETTER"))); System.out.println(lookup("NULL")); System.out.println(lookup("LATIN CAPITAL LETTER AFRICAN D")); System.out.println(lookup("GURMUKHI TIPPI")); System.out.println(lookup("TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA")); System.out.println(lookup("HANGUL CHOSEONG PIEUP")); System.out.println(lookup("SINGLE LOW-9 QUOTATION MARK")); */ System.out.println(lookup("BACKSPACE")); // System.out.println(lookup("ACTIVATE SYMMETRIC SWAPPING")); /* System.out.println(lookup("LATIN CAPITAL LETTER A")); System.out.println(lookup("GREATER-THAN SIGN")); System.out.println(lookup("EURO-CURRENCY SIGN")); */ } } |
From: Finn B. <bc...@us...> - 2000-12-04 21:30:42
|
Update of /cvsroot/jython/jython/Demo/javaclasses In directory slayer.i.sourceforge.net:/tmp/cvs-serv22495 Modified Files: readme.txt Log Message: Renamed jpython to jython. Index: readme.txt =================================================================== RCS file: /cvsroot/jython/jython/Demo/javaclasses/readme.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** readme.txt 1999/05/27 20:56:56 1.5 --- readme.txt 2000/12/04 21:30:39 1.6 *************** *** 1,3 **** ! This example shows one way to incorporate a JPython class into a Java program. --- 1,3 ---- ! This example shows one way to incorporate a Jython class into a Java program. *************** *** 7,15 **** translation for Windows. ! 1. run "jpython Graph.py" in this directory ! This is just to make sure the JPython code works on your machine ! 2. run "jpythonc -package pygraph Graph.py" in this directory This should produce the Java class pygraph.Graph. Because this is --- 7,15 ---- translation for Windows. ! 1. run "jython Graph.py" in this directory ! This is just to make sure the Jython code works on your machine ! 2. run "jythonc -package pygraph Graph.py" in this directory This should produce the Java class pygraph.Graph. Because this is *************** *** 26,31 **** 3. run "javac pygraph/PythonGraph.java" ! You must have both the current directory ('.') and the JPython ! library directory (<install_dir>\jpython.jar) in your CLASSPATH for this to work. --- 26,31 ---- 3. run "javac pygraph/PythonGraph.java" ! You must have both the current directory ('.') and the Jython ! library directory (<install_dir>\jython.jar) in your CLASSPATH for this to work. |
From: Finn B. <bc...@us...> - 2000-12-04 21:27:05
|
Update of /cvsroot/jython/jython/org/python/core In directory slayer.i.sourceforge.net:/tmp/cvs-serv21872 Added Files: ucnhashAPI.java Log Message: Moved here from the modules package. --- NEW FILE --- /* * Copyright 2000 Finn Bock * * This program contains material copyrighted by: * Copyright (c) Corporation for National Research Initiatives. * Originally written by Marc-Andre Lemburg (ma...@le...). */ package org.python.core; public interface ucnhashAPI { public int getCchMax(); public int getValue(String s, int start, int end); } |
From: Finn B. <bc...@us...> - 2000-12-04 21:26:28
|
Update of /cvsroot/jython/jython/org/python/modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv21709 Removed Files: ucnhashAPI.java Log Message: Moved the interface to the core package. --- ucnhashAPI.java DELETED --- |
From: Finn B. <bc...@us...> - 2000-12-04 21:25:09
|
Update of /cvsroot/jython/jython/org/python/parser In directory slayer.i.sourceforge.net:/tmp/cvs-serv21405 Modified Files: SimpleNode.java Log Message: Use the string decoder from PyString. This will enable support for the \N escape. Index: SimpleNode.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/parser/SimpleNode.java,v retrieving revision 2.11 retrieving revision 2.12 diff -C2 -r2.11 -r2.12 *** SimpleNode.java 2000/11/17 21:28:06 2.11 --- SimpleNode.java 2000/12/04 21:25:06 2.12 *************** *** 3,6 **** --- 3,7 ---- import org.python.core.Py; + import org.python.core.PyString; public class SimpleNode implements Node *************** *** 98,189 **** int last_i=i; ! while (i<n) { ! if (ca[i] == '\r') { ! sb.append(ca, last_i, i-last_i); ! sb.append('\n'); ! i++; ! if (ca[i] == '\n') i++; ! last_i = i; ! continue; ! } ! if (ca[i++] != '\\' || i >= n) continue; ! sb.append(ca, last_i, i-last_i-1); ! switch(ca[i++]) { ! case '\r': ! if (ca[i] == '\n') i++; ! case '\n': break; ! case 'b': sb.append('\b'); break; ! case 't': sb.append('\t'); break; ! case 'n': sb.append('\n'); break; ! case 'f': sb.append('\f'); break; ! case 'r': sb.append('\r'); break; ! case '\"': ! case '\'': ! sb.append(ca[i-1]); ! break; ! case '\\': sb.append('\\'); break; ! //Special Python escapes ! case 'a': sb.append('\007'); break; ! case 'v': sb.append('\013'); break; ! ! case '0': ! case '1': ! case '2': ! case '3': ! case '4': ! case '5': ! case '6': ! case '7': ! int c = ca[i-1]-'0'; ! if (i<n && '0' <= ca[i] && ca[i] <= '7') { ! c = (c<<3) + (ca[i++] -'0'); ! if (i<n && '0' <= ca[i] && ca[i] <= '7') { ! c = (c<<3) + (ca[i++] -'0'); ! } ! } ! sb.append((char)c); ! break; ! case 'u': ! if (!ustring) { ! sb.append('u'); ! break; ! } ! if (i+4 > n) ! throw new TokenMgrError( ! "Unicode-Escape decoding error: "+ ! "truncated \\uXXXX", beginLine, beginColumn); ! char u=0; ! for (int j = 0; j < 4; j++) { ! int digit = Character.digit(ca[i++], 16); ! if (digit == -1) ! throw new TokenMgrError( ! "Unicode-Escape decoding error: "+ ! "truncated \\uXXXX", beginLine, beginColumn); ! u = (char)(u*16 + digit); ! } ! sb.append(u); ! break; ! case 'x': ! if (Character.digit(ca[i], 16) != -1) { ! int digit; ! char x=0; ! while (i<n && ! (digit = Character.digit(ca[i++], 16)) != -1) ! { ! x = (char)(x*16 + digit); ! } ! if (i<n) i-=1; ! sb.append(x); ! break; ! } ! // If illegal hex digit, just fall through ! default: ! sb.append('\\'); ! sb.append(ca[i-1]); ! } ! last_i = i; ! } ! sb.append(ca, last_i, i-last_i); ! return sb.toString(); } } --- 99,103 ---- int last_i=i; ! return PyString.decode_UnicodeEscape(s, i, n, "strict", ustring); } } |
From: Finn B. <bc...@us...> - 2000-12-04 21:23:10
|
Update of /cvsroot/jython/jython/org/python/core In directory slayer.i.sourceforge.net:/tmp/cvs-serv20935/core Modified Files: PyString.java Log Message: Moved the method _codecs.decodeUnicodeEscape() to PyString.decode_UnicodeEscape(). This is so the string parser in SimpleNopde can use it too. Index: PyString.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyString.java,v retrieving revision 2.28 retrieving revision 2.29 diff -C2 -r2.28 -r2.29 *** PyString.java 2000/11/30 09:03:48 2.28 --- PyString.java 2000/12/04 21:23:06 2.29 *************** *** 279,283 **** dict.__setitem__("atoi", null); dict.__setitem__("atol", null); ! dict.__setitem__("unicodeescape", null); } --- 279,284 ---- dict.__setitem__("atoi", null); dict.__setitem__("atol", null); ! dict.__setitem__("encode_UnicodeEscape", null); ! dict.__setitem__("decode_UnicodeEscape", null); } *************** *** 309,318 **** public PyString __repr__() { ! return new PyString(unicodeescape(string, true)); } private static char[] hexdigit = "0123456789ABCDEF".toCharArray(); ! public static String unicodeescape(String str, boolean use_quotes) { int size = str.length(); StringBuffer v = new StringBuffer(str.length()); --- 310,319 ---- public PyString __repr__() { ! return new PyString(encode_UnicodeEscape(string, true)); } private static char[] hexdigit = "0123456789ABCDEF".toCharArray(); ! public static String encode_UnicodeEscape(String str, boolean use_quotes) { int size = str.length(); StringBuffer v = new StringBuffer(str.length()); *************** *** 366,369 **** --- 367,540 ---- v.append(quote); return v.toString(); + } + + private static ucnhashAPI pucnHash = null; + + public static String decode_UnicodeEscape(String str, int start, int end, + String errors, boolean unicode) + { + StringBuffer v = new StringBuffer(end-start); + for (int s = start; s < end; ) { + char ch = str.charAt(s); + + /* Non-escape characters are interpreted as Unicode ordinals */ + if (ch != '\\') { + v.append(ch); + s++; + continue; + } + + /* \ - Escapes */ + s++; + ch = str.charAt(s++); + switch (ch) { + + /* \x escapes */ + case '\n': break; + case '\\': v.append('\\'); break; + case '\'': v.append('\''); break; + case '\"': v.append('\"'); break; + case 'b': v.append('\b'); break; + case 'f': v.append('\014'); break; /* FF */ + case 't': v.append('\t'); break; + case 'n': v.append('\n'); break; + case 'r': v.append('\r'); break; + case 'v': v.append('\013'); break; /* VT */ + case 'a': v.append('\007'); break; /* BEL, not classic C */ + + /* \OOO (octal) escapes */ + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + + int x = Character.digit(ch, 8); + for (int j = 0; j < 2 && s < end; j++) { + ch = str.charAt(s++); + if (ch < '0' || ch > '7') + break; + x = (x<<3) + Character.digit(ch, 8); + } + v.append((char) x); + break; + + case 'x': + int i; + for (x = 0, i = 0; i < 2 && s < end; i++) { + ch = str.charAt(s + i); + int d = Character.digit(ch, 16); + if (d == -1) { + codecs.decoding_error("unicode escape", v, errors, + "truncated \\xXX"); + i++; + break; + } + + x = ((x<<4) & ~0xF) + d; + } + s += i; + v.append((char) x); + break; + + /* \ uXXXX with 4 hex digits */ + case 'u': + if (!unicode) { + v.append('\\'); + v.append('u'); + break; + } + if (s+4 > end) { + codecs.decoding_error("unicode escape", v, errors, + "truncated \\uXXXX"); + break; + } + for (x = 0, i = 0; i < 4; i++) { + ch = str.charAt(s + i); + int d = Character.digit(ch, 16); + if (d == -1) { + codecs.decoding_error("unicode escape", v, errors, + "truncated \\uXXXX"); + break; + } + x = ((x<<4) & ~0xF) + d; + } + s += i; + v.append((char) x); + break; + + case 'N': + if (!unicode) { + v.append('\\'); + v.append('N'); + break; + } + /* Ok, we need to deal with Unicode Character Names now, + * make sure we've imported the hash table data... + */ + if (pucnHash == null) { + PyObject mod = imp.importName("ucnhash", true); + mod = mod.__call__(); + pucnHash = (ucnhashAPI) mod.__tojava__(Object.class); + if (pucnHash.getCchMax() < 0) + codecs.decoding_error("unicode escape", v, errors, + "Unicode names not loaded"); + } + + if (str.charAt(s) == '{') { + int startName = s + 1; + int endBrace = startName; + + /* look for either the closing brace, or we + * exceed the maximum length of the unicode character names + */ + int maxLen = pucnHash.getCchMax(); + while (endBrace < end && str.charAt(endBrace) != '}' + && (endBrace - startName) <= maxLen) { + endBrace++; + } + if (endBrace != end && str.charAt(endBrace) == '}') { + int value = pucnHash.getValue(str, startName, endBrace); + if (value < 0) { + codecs.decoding_error("unicode escape", v, errors, + "Invalid Unicode Character Name"); + v.append('\\'); + v.append(str.charAt(s-1)); + break; + } + + if (value < 1<<16) { + /* In UCS-2 range, easy solution.. */ + v.append((char) value); + } else { + /* Oops, its in UCS-4 space, */ + /* compute and append the two surrogates: */ + /* translate from 10000..10FFFF to 0..FFFFF */ + value -= 0x10000; + + /* high surrogate = top 10 bits added to D800 */ + v.append((char) (0xD800 + (value >> 10))); + + /* low surrogate = bottom 10 bits added to DC00*/ + v.append((char) (0xDC00 + (value & ~0xFC00))); + } + s = endBrace + 1; + } else { + codecs.decoding_error("unicode escape", v, errors, + "Unicode name missing closing brace"); + v.append('\\'); + v.append(str.charAt(s-1)); + break; + } + break; + } + codecs.decoding_error("unicode escape", v, errors, + "Missing opening brace for Unicode Character Name escape"); + + /* fall through on purpose */ + default: + v.append('\\'); + v.append(str.charAt(s-1)); + break; + } + } + return v.toString(); } |
From: Finn B. <bc...@us...> - 2000-12-04 21:23:09
|
Update of /cvsroot/jython/jython/org/python/modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv20935/modules Modified Files: _codecs.java Log Message: Moved the method _codecs.decodeUnicodeEscape() to PyString.decode_UnicodeEscape(). This is so the string parser in SimpleNopde can use it too. Index: _codecs.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/modules/_codecs.java,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** _codecs.java 2000/10/17 19:14:19 2.3 --- _codecs.java 2000/12/04 21:23:06 2.4 *************** *** 648,804 **** public static PyTuple unicode_escape_encode(String str, String errors) { ! return codec_tuple(PyString.unicodeescape(str, false), str.length()); } - - - - public static PyTuple unicode_escape_decode(String str, String errors) { ! return codec_tuple(decodeUnicodeEscape(str, errors), str.length()); } - private static ucnhashAPI pucnHash = null; - - private static String decodeUnicodeEscape(String str, String errors) { - int size = str.length(); - StringBuffer v = new StringBuffer(size); - - for (int s = 0; s < size; ) { - char ch = str.charAt(s); - - /* Non-escape characters are interpreted as Unicode ordinals */ - if (ch != '\\') { - v.append(ch); - s++; - continue; - } - - - /* \ - Escapes */ - s++; - ch = str.charAt(s++); - switch (ch) { - - /* \x escapes */ - case '\n': break; - case '\\': v.append('\\'); break; - case '\'': v.append('\''); break; - case '\"': v.append('\"'); break; - case 'b': v.append('\b'); break; - case 'f': v.append('\014'); break; /* FF */ - case 't': v.append('\t'); break; - case 'n': v.append('\n'); break; - case 'r': v.append('\r'); break; - case 'v': v.append('\013'); break; /* VT */ - case 'a': v.append('\007'); break; /* BEL, not classic C */ - - /* \OOO (octal) escapes */ - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - - int x = Character.digit(ch, 8); - ch = str.charAt(s++); - if ('0' <= ch && ch <= '7') { - x = (x<<3) + Character.digit(ch, 8); - ch = str.charAt(s++); - if ('0' <= ch && ch <= '7') { - x = (x<<3) + Character.digit(ch, 8); - } - } - v.append((char) x); - break; - - /* \ uXXXX with 4 hex digits */ - case 'u': - int i; - for (x = 0, i = 0; i < 4; i++) { - ch = str.charAt(s + i); - int d = Character.digit(ch, 16); - if (d == -1) { - codecs.decoding_error("unicode escape", v, errors, - "truncated \\uXXXX"); - break; - } - x = ((x<<4) & ~0xF) + d; - } - s += i; - v.append((char) x); - break; - - case 'N': - /* Ok, we need to deal with Unicode Character Names now, - * make sure we've imported the hash table data... - */ - if (pucnHash == null) { - PyObject mod = imp.importName("ucnhash", true); - pucnHash = (ucnhashAPI) mod.__tojava__(ucnhashAPI.class); - } - - if (str.charAt(s) == '{') { - int start = s + 1; - int endBrace = start; - - /* look for either the closing brace, or we - * exceed the maximum length of the unicode character names - */ - int maxLen = pucnHash.getCchMax(); - while (str.charAt(endBrace) != '}' - && (endBrace - start) <= maxLen - && endBrace < size) { - endBrace++; - } - if (endBrace != size && str.charAt(endBrace) == '}') { - int value = pucnHash.getValue(str, start, endBrace); - if (value < 0) { - codecs.decoding_error("unicode escape", v, errors, - "Invalid Unicode Character Name"); - v.append('\\'); - v.append(str.charAt(s-1)); - break; - } - - if (value < 1<<16) { - /* In UCS-2 range, easy solution.. */ - v.append(value); - } else { - /* Oops, its in UCS-4 space, */ - /* compute and append the two surrogates: */ - /* translate from 10000..10FFFF to 0..FFFFF */ - value -= 0x10000; - - /* high surrogate = top 10 bits added to D800 */ - v.append((char) (0xD800 + (value >> 10))); - - /* low surrogate = bottom 10 bits added to DC00*/ - v.append((char) (0xDC00 + (value & ~0xFC00))); - } - s = endBrace + 1; - } else { - codecs.decoding_error("unicode escape", v, errors, - "Unicode name missing closing brace"); - v.append('\\'); - v.append(str.charAt(s-1)); - break; - } - break; - } - codecs.decoding_error("unicode escape", v, errors, - "Missing opening brace for Unicode Character Name escape"); - - /* fall through on purpose */ - default: - v.append('\\'); - v.append(str.charAt(s-1)); - break; - } - } - return v.toString(); - } - - - /* --- UnicodeInternal Codec -------------------------------------------- */ --- 648,661 ---- public static PyTuple unicode_escape_encode(String str, String errors) { ! return codec_tuple(PyString.encode_UnicodeEscape(str, false), str.length()); } public static PyTuple unicode_escape_decode(String str, String errors) { ! int n = str.length(); ! return codec_tuple(PyString.decode_UnicodeEscape(str, 0, n, errors, true), n); } /* --- UnicodeInternal Codec -------------------------------------------- */ *************** *** 807,812 **** return codec_tuple(str, str.length()); } - - public static PyTuple unicode_internal_decode(String str, String errors) { --- 664,667 ---- |
From: Finn B. <bc...@us...> - 2000-12-04 21:19:02
|
Update of /cvsroot/jython/jython/org/python/util In directory slayer.i.sourceforge.net:/tmp/cvs-serv20313 Modified Files: InteractiveInterpreter.java Log Message: runsource(): Added graceful handling of the ValueError and OverflowError that can be raised during compilation. Index: InteractiveInterpreter.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/util/InteractiveInterpreter.java,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** InteractiveInterpreter.java 1999/05/17 19:55:38 2.2 --- InteractiveInterpreter.java 2000/12/04 21:18:59 2.3 *************** *** 53,56 **** --- 53,61 ---- showexception(exc); return false; + } else if (Py.matchException(exc, Py.ValueError) || + Py.matchException(exc, Py.OverflowError)) { + // Should not print the stack trace, just the error. + showexception(exc); + return false; } else { throw exc; |
From: Finn B. <bc...@us...> - 2000-12-04 20:04:18
|
Update of /cvsroot/jython/jython/Misc In directory slayer.i.sourceforge.net:/tmp/cvs-serv30242 Added Files: make_ucnhashdat.py Log Message: First version. --- NEW FILE --- # Copyright Finn Bock # # Generate a ucnhash.dat file with mapping from unicode # names to codepoints. # # python mkucnhashdat.py UnicodeData-3.0.0.txt # # The "mph" program must be available on the path. # This program is used to create the minimum perfect # hash used by the wordhash table. # # I've used 1.2 from: # # http://www.ibiblio.org/pub/Linux/devel/lang/c/!INDEX.short.html # import fileinput, re, os, sys, struct, cStringIO def debug(str): print >>debugFile, str def splitIntoWords(name): wordlist = [] wordstart = 0 l = len(name) for i in range(l): c = name[i] n = None if c == ' ' or c == '-': n = name[wordstart:i] elif i == l-1: n = name[wordstart:i+1] if n: #print " ", i, c, n wordstart = i if c == '-' and n != '': n += '-' if c == ' ' or c == '-': wordstart = i+1 #print " ", n wordlist.append(n) return wordlist def readUnicodeDict(file): d = {} for l in fileinput.input(file): l = l.strip().split(";"); v,name = l[0:2] if name == "<control>": name = l[10] if name == '': continue if name[0] == "<": continue #handled by code in ucnhash if name.startswith("CJK COMPATIBILITY IDEOGRAPH-"): continue wordlist = splitIntoWords(name) #print name, wordlist d[name] = (int(v, 16), wordlist, []) return d #readUnicodeDict("nametest.txt") #sys.exit() def count(dict, index): c = dict.get(index) if c is None: c = 0 c += 1 dict[index] = c def dumpUnicodeDict(title, dict): lst = [] i = 0 for k,(v,wordlist, rawlist) in dict.items(): p = wordlist[:] lst.append((v, k, p)) lst.sort() print "=======", title for v,k,p in lst: print "%.4X %s %s" % (v, k, p) class MphEmitter: def readint(self): return int(self.inf.readline().strip()) def readfloat(self): return float(self.inf.readline().strip()) def readconst(self): global d, n, m, c, maxlen, minklen, maxklen, minchar, maxchar, alphasz self.inf.readline() self.d = self.readint() self.n = self.readint() self.m = self.readint() self.c = self.readfloat() self.maxlen = self.readint() self.minklen = self.readint() self.maxklen = self.readint() self.minchar = self.readint() self.maxchar = self.readint() self.loop = self.readint() self.numiter= self.readint() self.readint() self.readint() debug(" * d=%d" % self.d) debug(" * n=%d" % self.n) debug(" * m=%d" % self.m) debug(" * c=%g" % self.c) debug(" * maxlen=%d" % self.maxlen) debug(" * minklen=%d" % self.minklen) debug(" * maxklen=%d" % self.maxklen) debug(" * minchar=%d" % self.minchar) debug(" * maxchar=%d" % self.maxchar) self.alphasz = self.maxchar - self.minchar+1; def readg(self): data = Table() for i in range(self.n): v = self.readint() data.write_Short(v) return data def readT(self, t): data = Table() for i in range(self.maxlen): for j in range(256): v = self.readint() if j < self.minchar or j > self.maxchar: continue data.write_Short(v) return data def writeFile(self, inf, outf): self.inf = inf self.readconst(); outf.write(struct.pack("!hhhhhh", self.n, self.m, self.minchar, self.maxchar, self.alphasz, self.maxlen)) self.readg().writeto(outf) outf.write(struct.pack("!h", self.d)) for t in range(self.d): self.readT(t).writeto(outf) class Table: def __init__(self): self.buf = cStringIO.StringIO() def write_Str(self, str): self.buf.write(str) def write_Short(self, v): self.buf.write(struct.pack("!h", v)) def write_UShort(self, v): self.buf.write(struct.pack("!H", v)) def writeto(self, file): file.write('t') file.write(struct.pack("!H", self.size())) file.write(self.buf.getvalue()) def size(self): return self.buf.tell() def calculateSize(dict): cnt = 0 for name in dict.keys(): cnt += len(name) return cnt def calculateWords(unicodeDict): words = {} for key, (value, wordlist, rawlist) in unicodeDict.items(): for name in wordlist: wordlist = words.setdefault(name, []) wordlist.append(key) return words def replaceWord(word, index, charlist): replaced = 0 for char in charlist: (v, wordlist, rawlist) = unicodeDict[char] try: i = wordlist.index(word) except ValueError: continue wordlist[i] = index replaced = 1 return replaced def compress(): #dumpUnicodeDict("UnicodeDict before", unicodeDict) words = calculateWords(unicodeDict) lenp = [(len(v), k, v) for k, v in words.items()] lenp.sort() lenp.reverse() wordidx = len(chars) for (length, word, value) in lenp: # Do not lookup single char words or words only used once if len(word) == 1 or len(value) == 1: continue # Do not lookup two char words of the replacement would # be just as big. if len(word) == 2 and wordidx >= 238: continue #print length, word, len(value) replaceWord(word, wordidx, value) wordmap[wordidx] = word wordidx += 1 #dumpUnicodeDict("UnicodeDict after", unicodeDict) def writeUcnhashDat(): cutoff = 255 - ((len(chars) + len(wordmap)) >> 8) debug("wordmap entries: %d" % len(wordmap)) debug("wordmap cutoffs: %d" % cutoff) worddata = Table() wordoffs = Table() wordfile = open("words.in", "wt"); size = 0 l = [(k,v) for k,v in wordmap.items()] l.sort() for k,v in l: print >>wordfile, v wordoffs.write_UShort(worddata.size()) mapv = ''.join(map(lambda x: chr(chardict.get(x)), v)) worddata.write_Str(mapv) wordfile.close() os.system("mph.exe -d3 -S1 -m4 -a < words.in > words.hash") outf = open("ucnhash.dat", "wb+") m = MphEmitter() m.writeFile(open("words.hash"), outf) debug("wordhash size %d" % outf.tell()) debug("wordoffs size %d" % wordoffs.size()) debug("worddata size %d" % worddata.size()) wordoffs.writeto(outf) worddata.writeto(outf) maxklen = 0 lst = [] for key, (value, wordlist, rawlist) in unicodeDict.items(): savewordlist = wordlist[:] # Map remaining strings to a list of bytes in chardict # range: range(0,37) l = len(wordlist) for i in range(l-1, -1, -1): part = wordlist[i] if type(part) == type(""): ipart = map(chardict.get, part) if i > 0 and type(wordlist[i-1]) == type(""): ipart[0:0] = [0] # index of space wordlist[i:i+1] = ipart # Encode high values as two bytes for v in wordlist: if v <= cutoff: rawlist.append(v) else: rawlist.append((v>>8) + cutoff) rawlist.append(v & 0xFF) if value in debugChars: print key, savewordlist, rawlist lst.append((rawlist, wordlist, key, value)) maxklen = max(maxklen, len(key)) lst.sort() outf.write(struct.pack("!hhh", len(chars), cutoff, maxklen)); raw = Table() datasize = [] i = 0 for (rawlist, wordlist, key, value) in lst: for r in rawlist: raw.write_Str(chr(r)) datasize.append((len(rawlist), value)) debug("%d %s %r" % (i, key, rawlist)) i += 1 debug("Raw size = %d" % raw.size()) raw.writeto(outf) rawindex = Table() codepoint = Table() offset = 0 maxlen = 0 for i in range(0, len(datasize), 12): saveoffset = offset rawindex.write_UShort(offset) v = 0L j = 0 for (size, value) in datasize[i:i+12]: offset += size v = v | (long(size) << (j*5)) maxlen = max(maxlen, size) codepoint.write_UShort(value) j += 1 debug("%d %d %x" % (i/ 12, saveoffset, v)) rawindex.write_UShort((v >> 48) & 0xFFFF) rawindex.write_UShort((v >> 32) & 0xFFFF) rawindex.write_UShort((v >> 16) & 0xFFFF) rawindex.write_UShort(v & 0xFFFF) debug("rawindex size % d" % rawindex.size()) rawindex.writeto(outf) codepoint.writeto(outf) debug("raw entries %d" % len(datasize)) outf.close(); if __name__ == "__main__": chars = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-" chardict = {} for c in chars: chardict[c] = chars.index(c) debugChars = [] # [0x41, 0x20AC] debugFile = open("ucnhash.lst", "wt") wordmap = {} unicodeDataFile = "UnicodeData-3.0.0.txt" if len(sys.argv) > 1: unicodeDataFile = sys.argv[1] unicodeDict = readUnicodeDict(unicodeDataFile) print "Size:", calculateSize(unicodeDict) compress() print "compressed" writeUcnhashDat() print "done" sys.exit(0) |
From: Finn B. <bc...@us...> - 2000-12-01 20:31:36
|
Update of /cvsroot/jython/htdocs/docs In directory slayer.i.sourceforge.net:/tmp/cvs-serv15795 Modified Files: links.h Log Message: Use the faqwizard for the FAQ. Index: links.h =================================================================== RCS file: /cvsroot/jython/htdocs/docs/links.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** links.h 2000/11/13 10:14:40 1.1 --- links.h 2000/12/01 20:31:33 1.2 *************** *** 28,32 **** <h3>Other</h3> <li><a href="differences.html">Jython vs. CPython</a> ! <li><a href="faq.html">Jython FAQ</a> <li><a href="http://www.geocrawler.com/archives/3/7017/2000/">List Archives</a> (exit) <LI><A HREF="http://www.python.org/workshops/1997-10/proceedings/hugunin.html">JPython paper</A> (exit) --- 28,32 ---- <h3>Other</h3> <li><a href="differences.html">Jython vs. CPython</a> ! <li><a href="http://jython.sourceforge.net/cgi-bin/faqw.py?req=index">Jython FAQ</a> <li><a href="http://www.geocrawler.com/archives/3/7017/2000/">List Archives</a> (exit) <LI><A HREF="http://www.python.org/workshops/1997-10/proceedings/hugunin.html">JPython paper</A> (exit) |
From: Finn B. <bc...@us...> - 2000-12-01 20:19:58
|
Update of /cvsroot/jython/jython In directory slayer.i.sourceforge.net:/tmp/cvs-serv14982 Modified Files: NEWS Log Message: Some recent new items. Index: NEWS =================================================================== RCS file: /cvsroot/jython/jython/NEWS,v retrieving revision 2.7 retrieving revision 2.8 diff -C2 -r2.7 -r2.8 *** NEWS 2000/11/25 21:11:42 2.7 --- NEWS 2000/12/01 20:19:52 2.8 *************** *** 1,4 **** --- 1,17 ---- Jython NEWS + XX-Dec-2000 Jython 2.0 alpha 2 + + CPython2.0 compatibility + - Added support for formatting of long values in "%d %x %X %o". + The support does not match CPython2.0 exactly, but matches + what CPython2.1 will do. + + Bug fixes. + - Package relative import work, at least when the dotted package name + match the directory structure. + - Fixed oct(0) to return "0" + - Add a os.__file__ attribute. CPython's site.py expects that. + 26-Nov-2000 Jython 2.0 alpha 1 |
From: Finn B. <bc...@us...> - 2000-12-01 19:23:45
|
Update of /cvsroot/jython/jython/org/python/modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv11335 Modified Files: os.java Log Message: Add a __file__ attribute to the "os" module. This is mostly a hack, but it allow the site.py module from CPython2.0 to be used with jython. Index: os.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/modules/os.java,v retrieving revision 2.2 retrieving revision 2.3 diff -C2 -r2.2 -r2.3 *** os.java 2000/10/10 14:37:15 2.2 --- os.java 2000/12/01 19:23:43 2.3 *************** *** 6,9 **** --- 6,14 ---- public class os implements ClassDictInit { public static String[] __depends__ = new String[] {"javaos", }; + + // An ugly hack, but it keeps the site.py from CPython2.0 happy + + public static String __file__ = + Py.getSystemState().prefix.toString() + "/Lib/javaos.py"; public static void classDictInit(PyObject dict) { |
From: Finn B. <bc...@us...> - 2000-12-01 18:57:17
|
Update of /cvsroot/jython/jython/installer In directory slayer.i.sourceforge.net:/tmp/cvs-serv8931 Modified Files: jython_template.unix_sh jythonc_template.unix_sh Log Message: Fix bug 124026: Wrapper doesn't pass command line arguments properly Index: jython_template.unix_sh =================================================================== RCS file: /cvsroot/jython/jython/installer/jython_template.unix_sh,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** jython_template.unix_sh 2000/11/24 16:58:57 1.1 --- jython_template.unix_sh 2000/12/01 18:57:11 1.2 *************** *** 5,7 **** # Created on XXX by @user.name@ ! @jvm@ -Dpython.home=@location._top_@ -classpath "@location._top_@/jython.jar:$CLASSPATH" @classname@ $* --- 5,7 ---- # Created on XXX by @user.name@ ! @jvm@ -Dpython.home=@location._top_@ -classpath "@location._top_@/jython.jar:$CLASSPATH" @classname@ "$@" Index: jythonc_template.unix_sh =================================================================== RCS file: /cvsroot/jython/jython/installer/jythonc_template.unix_sh,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** jythonc_template.unix_sh 2000/11/24 16:58:57 1.1 --- jythonc_template.unix_sh 2000/12/01 18:57:11 1.2 *************** *** 5,7 **** # Created on XXX by @user.name@ ! @location._top_@/jython @location._top_@/Tools/jythonc/jythonc.py $@ --- 5,7 ---- # Created on XXX by @user.name@ ! @location._top_@/jython @location._top_@/Tools/jythonc/jythonc.py "$@" |
From: Finn B. <bc...@us...> - 2000-11-30 09:03:52
|
Update of /cvsroot/jython/jython/org/python/core In directory slayer.i.sourceforge.net:/tmp/cvs-serv29337 Modified Files: PyString.java Log Message: Added support for formatting of long values in "%d %x %X %o". Index: PyString.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyString.java,v retrieving revision 2.27 retrieving revision 2.28 diff -C2 -r2.27 -r2.28 *** PyString.java 2000/10/23 19:49:12 2.27 --- PyString.java 2000/11/30 09:03:48 2.28 *************** *** 1604,1607 **** --- 1604,1660 ---- } + public String formatLong(PyString arg, char type, boolean altFlag) { + String s = arg.toString(); + int end = s.length(); + int ptr = 0; + + int numnondigits = 0; + if (type == 'x' || type == 'X') + numnondigits = 2; + + if (s.endsWith("L")) + end--; + + negative = s.charAt(0) == '-'; + if (negative) { + ptr++; + } + + int numdigits = end - numnondigits - ptr; + if (!altFlag) { + switch (type) { + case 'o' : + if (numdigits > 1) { + ++ptr; + --numdigits; + } + break; + case 'x' : + case 'X' : + ptr += 2; + numnondigits -= 2; + break; + } + } + if (precision > numdigits) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < numnondigits; ++i) + buf.append(s.charAt(ptr++)); + for (int i = 0; i < precision - numdigits; i++) + buf.append('0'); + for (int i = 0; i < numdigits; i++) + buf.append(s.charAt(ptr++)); + s = buf.toString(); + } else if (end < s.length() || ptr > 0) + s = s.substring(ptr, end); + + switch (type) { + case 'x' : + s = s.toLowerCase(); + break; + } + return s; + } + public String formatInteger(PyObject arg, int radix, boolean unsigned) { return formatInteger(arg.__int__().getValue(), radix, unsigned); *************** *** 1801,1827 **** case 'i': case 'd': ! string = formatInteger(arg, 10, false); break; case 'u': ! string = formatInteger(arg, 10, true); break; case 'o': ! string = formatInteger(arg, 8, true); ! if (altFlag) { ! string = "0" + string; } break; case 'x': ! string = formatInteger(arg, 16, true); ! if (altFlag) { ! string = "0x" + string; } break; case 'X': ! string = formatInteger(arg, 16, true); ! //Do substitution of caps for lowercase here ! if (altFlag) { ! string = "0X" + string; } break; case 'e': --- 1854,1900 ---- case 'i': case 'd': ! if (arg instanceof PyLong) ! string = formatLong(arg.__str__(), c, altFlag); ! else ! string = formatInteger(arg, 10, false); break; case 'u': ! if (arg instanceof PyLong) ! string = formatLong(arg.__str__(), c, altFlag); ! else ! string = formatInteger(arg, 10, true); break; case 'o': ! if (arg instanceof PyLong) ! string = formatLong(arg.__oct__(), c, altFlag); ! else { ! string = formatInteger(arg, 8, true); ! if (altFlag) { ! string = "0" + string; ! } } break; case 'x': ! if (arg instanceof PyLong) ! string = formatLong(arg.__hex__(), c, altFlag); ! else { ! string = formatInteger(arg, 16, true); ! string = string.toLowerCase(); ! if (altFlag) { ! string = "0x" + string; ! } } break; case 'X': ! if (arg instanceof PyLong) ! string = formatLong(arg.__hex__(), c, altFlag); ! else { ! string = formatInteger(arg, 16, true); ! string = string.toUpperCase(); ! if (altFlag) { ! string = "0X" + string; ! } } + break; case 'e': *************** *** 1878,1882 **** throw Py.ValueError("unsupported format character '"+c+"'"); } ! String signString = ""; if (negative) { signString = "-"; --- 1951,1957 ---- throw Py.ValueError("unsupported format character '"+c+"'"); } ! int length = string.length(); ! int skip = 0; ! String signString = null; if (negative) { signString = "-"; *************** *** 1889,1910 **** } ! int length = string.length() + signString.length(); if (width < length) width = length; ! if (ljustFlag && fill==' ') { ! buffer.append(signString); ! buffer.append(string); ! while (width-- > length) ! buffer.append(fill); ! } else { ! if (fill != ' ') { buffer.append(signString); ! } ! while (width-- > length) buffer.append(fill); ! if (fill == ' ') { buffer.append(signString); } buffer.append(string); } } --- 1964,2008 ---- } ! //System.out.println(length + " " + width + " " + signString + " fill:" + fill + " " + string); if (width < length) width = length; ! if (signString != null) { ! if (fill != ' ') buffer.append(signString); ! if (width > length) ! width--; ! } ! if (altFlag && (c == 'x' || c == 'X')) { ! if (fill != ' ') { ! buffer.append('0'); ! buffer.append(c); ! skip += 2; ! } ! width -= 2; ! if (width < 0) ! width = 0; ! length -= 2; ! } ! if (width > length && !ljustFlag) { ! do { buffer.append(fill); ! } while (--width > length); ! } ! if (fill == ' ') { ! if (signString != null) buffer.append(signString); + if (altFlag && (c == 'x' || c == 'X')) { + buffer.append('0'); + buffer.append(c); + skip += 2; } + } + if (skip > 0) + buffer.append(string.substring(skip)); + else buffer.append(string); + + while (--width >= length) { + buffer.append(' '); } } |
From: Finn B. <bc...@us...> - 2000-11-30 09:01:47
|
Update of /cvsroot/jython/jython/org/python/core In directory slayer.i.sourceforge.net:/tmp/cvs-serv29117 Modified Files: PyInteger.java Log Message: __oct__(): Fixed return of oct(0) ==> "0" Index: PyInteger.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyInteger.java,v retrieving revision 2.3 retrieving revision 2.4 diff -C2 -r2.3 -r2.4 *** PyInteger.java 2000/10/01 17:57:03 2.3 --- PyInteger.java 2000/11/30 09:01:43 2.4 *************** *** 257,263 **** return new PyString( "0"+Long.toString(0x100000000l+(long)value, 8)); ! } else { return new PyString("0"+Integer.toString(value, 8)); ! } } --- 257,264 ---- return new PyString( "0"+Long.toString(0x100000000l+(long)value, 8)); ! } else if (value > 0) { return new PyString("0"+Integer.toString(value, 8)); ! } else ! return new PyString("0"); } |
From: Finn B. <bc...@us...> - 2000-11-30 08:59:15
|
Update of /cvsroot/jython/htdocs/applets In directory slayer.i.sourceforge.net:/tmp/cvs-serv28790 Modified Files: JythonLoader.java Log Message: activeApplets(): In netscape the getApplet("name") call may throw an NPE when the name does not exists. Index: JythonLoader.java =================================================================== RCS file: /cvsroot/jython/htdocs/applets/JythonLoader.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** JythonLoader.java 2000/11/14 20:35:12 1.2 --- JythonLoader.java 2000/11/30 08:59:11 1.3 *************** *** 56,62 **** private int activeApplets() { ! Applet a = getAppletContext().getApplet(waitFor); ! if (a != null) ! return 2; return 1; } --- 56,66 ---- private int activeApplets() { ! try { ! Applet a = getAppletContext().getApplet(waitFor); ! if (a != null) ! return 2; ! } catch (Exception ex) { ! return 1; ! } return 1; } |