summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLua Team <team@lua.org>1997-07-01 12:00:00 +0000
committerrepogen <>1997-07-01 12:00:00 +0000
commit4f8c5d0f284e1f4da717aea5008915f185cd2e05 (patch)
tree5671acf8a2cacf0c0524ce96d22959590a3aa5af
parent47a298a24ad3a8202440051de5938618502302a0 (diff)
downloadlua-github-4f8c5d0f284e1f4da717aea5008915f185cd2e05.tar.gz
Lua 3.03.0
-rw-r--r--COPYRIGHT2
-rw-r--r--HISTORY16
-rw-r--r--INSTALL41
-rw-r--r--Makefile4
-rw-r--r--README32
-rw-r--r--clients/lib/iolib.c167
-rw-r--r--clients/lib/mathlib.c81
-rw-r--r--clients/lib/old/Makefile35
-rw-r--r--clients/lib/old/iolib.c618
-rw-r--r--clients/lib/old/lualib.h33
-rw-r--r--clients/lib/old/mathlib.c230
-rw-r--r--clients/lib/old/strlib.c276
-rw-r--r--clients/lib/strlib.c250
-rw-r--r--clients/lua/lua.c76
-rw-r--r--config10
-rw-r--r--doc/Makefile23
-rw-r--r--doc/idx.html241
-rw-r--r--doc/index.html85
-rw-r--r--doc/luac.html88
-rw-r--r--doc/luac.man75
-rw-r--r--doc/luac.ps246
-rw-r--r--doc/luac.txt66
-rw-r--r--doc/manual.html2545
-rw-r--r--doc/refman.ps7807
-rw-r--r--include/Makefile2
-rw-r--r--include/auxlib.h30
-rw-r--r--include/lua.h123
-rw-r--r--include/lualib.h19
-rw-r--r--src/Makefile18
-rw-r--r--src/auxlib.c81
-rw-r--r--src/auxlib.h30
-rw-r--r--src/fallback.c395
-rw-r--r--src/fallback.h72
-rw-r--r--src/func.c42
-rw-r--r--src/func.h5
-rw-r--r--src/hash.c281
-rw-r--r--src/hash.h33
-rw-r--r--src/inout.c448
-rw-r--r--src/inout.h25
-rw-r--r--src/lex.c219
-rw-r--r--src/lex.h7
-rw-r--r--src/lua.stx63
-rw-r--r--src/luac/dump.c30
-rw-r--r--src/luac/luac.c139
-rw-r--r--src/luac/luac.h11
-rw-r--r--src/luac/print.c233
-rw-r--r--src/luac/print.h9
-rw-r--r--src/luamem.c159
-rw-r--r--src/luamem.h (renamed from src/mem.h)6
-rw-r--r--src/mem.c58
-rw-r--r--src/opcode.c886
-rw-r--r--src/opcode.h71
-rw-r--r--src/parser.c660
-rw-r--r--src/table.c180
-rw-r--r--src/table.h11
-rw-r--r--src/tree.c118
-rw-r--r--src/tree.h18
-rw-r--r--src/undump.c145
-rw-r--r--src/undump.h15
-rw-r--r--src/zio.c79
-rw-r--r--src/zio.h48
-rw-r--r--test/README7
-rw-r--r--test/array.lua6
-rw-r--r--test/bisect.lua4
-rw-r--r--test/dump.lua26
-rw-r--r--test/examples/complex/complex.lua82
-rw-r--r--test/examples/complex/mandel.lua25
-rw-r--r--test/examples/www/README10
-rw-r--r--test/examples/www/db.lua46
-rw-r--r--test/examples/www/staff.lua37
-rw-r--r--test/examples/www/template.html29
-rw-r--r--test/hello.lua2
-rw-r--r--test/loop.lua6
l---------test/lua1
l---------test/luac1
-rw-r--r--test/sort.lua2
-rw-r--r--test/split.lua18
-rw-r--r--test/type.lua37
78 files changed, 6569 insertions, 11586 deletions
diff --git a/COPYRIGHT b/COPYRIGHT
index 5ca877a7..f84898d0 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,4 +1,4 @@
-Copyright (c) 1994-1996 TeCGraf, PUC-Rio. Written by Waldemar Celes Filho,
+Copyright (c) 1994-1997 TeCGraf, PUC-Rio. Written by Waldemar Celes Filho,
Roberto Ierusalimschy, Luiz Henrique de Figueiredo. All rights reserved.
Permission is hereby granted, without written agreement and without license or
diff --git a/HISTORY b/HISTORY
index 3f1e5d69..1db2df24 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,4 +1,18 @@
-Current version is 2.5
+This is version 3.0.
+
+* Changes since version 2.5 (no versions between 2.5 and 3.0)
+ + NEW CONCEPT: "tag methods".
+ Tag methods replace fallbacks as the meta-mechanism for extending the
+ semantics of Lua. Whereas fallbacks had a global nature, tag methods
+ work on objects having the same tag (e.g., groups of tables).
+ Existing code that uses fallbacks should work without change.
+ + new, general syntax for constructors {[exp] = exp, ... }.
+ + support for handling variable number of arguments in functions (varargs).
+ + support for conditional compilation ($if ... $else ... $end).
+ + cleaner semantics in API simplifies host code.
+ + better support for writing libraries (auxlib.h).
+ + better type checking and error messages in the standard library.
+ + luac can now also undump.
* Changes since version 2.4
+ io and string libraries are now based on pattern matching;
diff --git a/INSTALL b/INSTALL
index 3d34379b..5a349d7a 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,26 +1,53 @@
* Installation
- Installing Lua should be very easy:
+
+ Building Lua on a Unix system should be very easy:
1. Edit "config" to suit your platform, if at all necessary
2. Then, type "make"
+ See below for instructions for Windows and Macintosh.
+
* What you get
+
If make succeeds, you get:
- * a compiler and an interpreter in ./bin/lua;
+ * an interpreter and a compiler in ./bin;
* libraries in ./lib;
* include files in ./include.
+ These are the only directories you need for development.
- There is a reference manual in ./doc, and tests and examples in ./test.
+ There is a reference manual in html in ./doc, and sample code in ./test.
You don't need these directories for development.
* If you have problems (and solutions!)
- If make fails, please let us know (lua@icad.puc-rio.br).
+
+ If "make" fails, please let us know (lua@tecgraf.puc-rio.br).
If you make changes to "config", please send them to us.
* Shared libraries
+
If you are running SunOs 4.x, type the following after "make" succeeds:
- ld -o lib/liblua.so.2.5 src/*.o
- ld -o lib/liblualib.so.2.5 clients/lib/*.o
+ ld -o lib/liblua.so.3.0 src/*.o
+ ld -o lib/liblualib.so.3.0 clients/lib/*.o
For AIX, the OpenGL clone Mesa includes a script for making shared libraries.
- For other systems, please let us know how!
+ For other systems, please tell us how!
+
+* Installation on Windows or Macintosh
+
+ The instructions for building Lua on a Mac or Windows machine depend on
+ the particular compiler you are using.
+ The simplest way is to create a folder with all .c and .h files.
+ Then create projects for the basic library, the standard library,
+ the interpreter and the compiler, as follows:
+
+ basic lib: auxlib.c fallback.c func.c hash.c inout.c lex.c luamem.c
+ opcode.c parser.c table.c tree.c undump.c zio.c
+
+ standard lib: iolib.c mathlib.c strlib.c
+
+ interpreter: basic lib, standard lib, lua.c
+
+ compiler: basic lib, dump.c luac.c print.c
+
+ Of course, to use Lua as a library, you'll have to know how to create
+ libraries and use with your compiler.
diff --git a/Makefile b/Makefile
index 60153269..c1c09f5f 100644
--- a/Makefile
+++ b/Makefile
@@ -5,8 +5,4 @@ all co clean klean:
cd src; make $@
cd src/luac; make $@
cd clients/lib; make $@
- cd clients/lib/old; make $@
cd clients/lua; make $@
-
-old:
- cd clients/lib/old; make $@
diff --git a/README b/README
index 1f124d66..b5d9b434 100644
--- a/README
+++ b/README
@@ -5,32 +5,32 @@
Dozens of industrial products developed by TeCGraf use Lua.
* Some features of Lua
- + a simple, pascal-like, syntax
- + powerful data description constructs (e.g., associative arrays)
- + user-controlled type constructors
- + fallbacks for extending the language in unconventional ways (e.g.,
- inheritance, overloading)
- + garbage collection
- + Lua programs are compiled into bytecodes, which are then interpreted
- + portable, written in ANSI C (runs in Unix, DOS, Windows, Mac, Cray, ...)
+ + simple syntax (Pascal-like);
+ + powerful data description constructs (e.g., associative arrays);
+ + user-controlled type constructors;
+ + extensible semantics with tag methods;
+ + garbage collection;
+ + Lua programs are compiled into bytecodes, which are then interpreted;
+ + truly portable, written in ANSI C.
* Availability
The latest version of Lua is always available at the following locations:
- In Brazil: ftp://ftp.icad.puc-rio.br/pub/lua/lua.tar.gz
- In Canada: ftp://csg.uwaterloo.ca/pub/lhf/lua/lua.tar.gz
- In Germany: ftp://ftp.uni-trier.de/pub/languages/lua/lua.tar.gz
- In Greece: ftp://ftp.ntua.gr/pub/lang/lua/lua.tar.gz
- Home page: http://www.inf.puc-rio.br/~roberto/lua.html
- The current version is 2.5.
+ In Brazil: ftp://ftp.icad.puc-rio.br/pub/lua/lua.tar.gz
+ In Canada: ftp://csg.uwaterloo.ca/pub/lhf/lua/lua.tar.gz
+ In Germany: ftp://ftp.uni-trier.de/pub/languages/lua/lua.tar.gz
+ In Greece: ftp://ftp.ntua.gr/pub/lang/lua/lua.tar.gz
+ Home page: http://www.tecgraf.puc-rio.br/lua/
+ Meta page: http://www.tecgraf.puc-rio.br/lua/meta.html
+ The current version is 3.0
* Legal matters
Lua is freely available for both academic and commercial purposes.
- Lua is not in the public domain; TeCGraf keeps its copyright.
See COPYRIGHT.
* Installation
See INSTALL.
* Contacting the authors
- Send your comments, bug reports and anything else to lua@icad.puc-rio.br.
+ Send your comments, bug reports and anything else to lua@tecgraf.puc-rio.br.
Please send us email if you download Lua so that we can know how far it goes.
+ For reporting bugs, try also the mailing list: lua-l@tecgraf.puc-rio.br
diff --git a/clients/lib/iolib.c b/clients/lib/iolib.c
index c2faf1c5..e518df1b 100644
--- a/clients/lib/iolib.c
+++ b/clients/lib/iolib.c
@@ -1,16 +1,16 @@
#include <stdio.h>
-#include <ctype.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <errno.h>
#include "lua.h"
+#include "auxlib.h"
#include "luadebug.h"
#include "lualib.h"
-FILE *lua_infile, *lua_outfile;
+int lua_tagio;
#ifdef POPEN
@@ -31,76 +31,95 @@ static void pushresult (int i)
#ifndef NOSTRERROR
lua_pushstring(strerror(errno));
#else
- lua_pushstring("system unable to define the error");
+ lua_pushstring("O.S. unable to define the error");
#endif
}
}
-static void closefile (FILE *f)
+
+static FILE *getfile (char *name)
+{
+ lua_Object f = lua_getglobal(name);
+ if (!lua_isuserdata(f) || lua_tag(f) != lua_tagio)
+ luaL_verror("global variable %s is not a file handle", name);
+ return lua_getuserdata(f);
+}
+
+
+static void closefile (char *name)
{
- if (f == stdin || f == stdout)
- return;
- if (f == lua_infile)
- lua_infile = stdin;
- if (f == lua_outfile)
- lua_outfile = stdout;
+ FILE *f = getfile(name);
+ if (f == stdin || f == stdout) return;
if (pclose(f) == -1)
fclose(f);
}
+static void setfile (FILE *f, char *name)
+{
+ lua_pushusertag(f, lua_tagio);
+ lua_setglobal(name);
+}
+
+
+static void setreturn (FILE *f, char *name)
+{
+ setfile(f, name);
+ lua_pushusertag(f, lua_tagio);
+}
+
static void io_readfrom (void)
{
+ FILE *current;
lua_Object f = lua_getparam(1);
- if (f == LUA_NOOBJECT)
- closefile(lua_infile); /* restore standart input */
- else if (lua_isuserdata(f))
- lua_infile = lua_getuserdata(f);
+ if (f == LUA_NOOBJECT) {
+ closefile("_INPUT");
+ current = stdin;
+ }
+ else if (lua_tag(f) == lua_tagio)
+ current = lua_getuserdata(f);
else {
- char *s = lua_check_string(1, "readfrom");
- FILE *fp = (*s == '|') ? popen(s+1, "r") : fopen(s, "r");
- if (fp)
- lua_infile = fp;
- else {
+ char *s = luaL_check_string(1);
+ current = (*s == '|') ? popen(s+1, "r") : fopen(s, "r");
+ if (current == NULL) {
pushresult(0);
return;
}
}
- lua_pushuserdata(lua_infile);
+ setreturn(current, "_INPUT");
}
static void io_writeto (void)
{
+ FILE *current;
lua_Object f = lua_getparam(1);
- if (f == LUA_NOOBJECT)
- closefile(lua_outfile); /* restore standart output */
- else if (lua_isuserdata(f))
- lua_outfile = lua_getuserdata(f);
+ if (f == LUA_NOOBJECT) {
+ closefile("_OUTPUT");
+ current = stdout;
+ }
+ else if (lua_tag(f) == lua_tagio)
+ current = lua_getuserdata(f);
else {
- char *s = lua_check_string(1, "writeto");
- FILE *fp = (*s == '|') ? popen(s+1,"w") : fopen(s,"w");
- if (fp)
- lua_outfile = fp;
- else {
+ char *s = luaL_check_string(1);
+ current = (*s == '|') ? popen(s+1,"w") : fopen(s,"w");
+ if (current == NULL) {
pushresult(0);
return;
}
}
- lua_pushuserdata(lua_outfile);
+ setreturn(current, "_OUTPUT");
}
static void io_appendto (void)
{
- char *s = lua_check_string(1, "appendto");
+ char *s = luaL_check_string(1);
FILE *fp = fopen (s, "a");
- if (fp != NULL) {
- lua_outfile = fp;
- lua_pushuserdata(lua_outfile);
- }
+ if (fp != NULL)
+ setreturn(fp, "_OUTPUT");
else
pushresult(0);
}
@@ -110,23 +129,30 @@ static void io_appendto (void)
static void io_read (void)
{
+ FILE *f = getfile("_INPUT");
char *buff;
- char *p = lua_opt_string(1, "[^\n]*{\n}", "read");
+ char *p = luaL_opt_string(1, "[^\n]*{\n}");
int inskip = 0; /* to control {skips} */
int c = NEED_OTHER;
- luaI_addchar(0);
+ luaI_emptybuff();
while (*p) {
- if (*p == '{' || *p == '}') {
- inskip = (*p == '{');
+ if (*p == '{') {
+ inskip++;
+ p++;
+ }
+ else if (*p == '}') {
+ if (inskip == 0)
+ lua_error("unbalanced braces in read pattern");
+ inskip--;
p++;
}
else {
- char *ep = item_end(p); /* get what is next */
+ char *ep = luaL_item_end(p); /* get what is next */
int m; /* match result */
- if (c == NEED_OTHER) c = getc(lua_infile);
- m = (c == EOF) ? 0 : singlematch((char)c, p);
+ if (c == NEED_OTHER) c = getc(f);
+ m = (c == EOF) ? 0 : luaL_singlematch((char)c, p);
if (m) {
- if (!inskip) luaI_addchar(c);
+ if (inskip == 0) luaI_addchar(c);
c = NEED_OTHER;
}
switch (*ep) {
@@ -144,7 +170,7 @@ static void io_read (void)
}
} break_while:
if (c >= 0) /* not EOF nor NEED_OTHER? */
- ungetc(c, lua_infile);
+ ungetc(c, f);
buff = luaI_addchar(0);
if (*buff != 0 || *p == 0) /* read something or did not fail? */
lua_pushstring(buff);
@@ -153,31 +179,32 @@ static void io_read (void)
static void io_write (void)
{
+ FILE *f = getfile("_OUTPUT");
int arg = 1;
int status = 1;
char *s;
- while ((s = lua_opt_string(arg++, NULL, "write")) != NULL)
- status = status && (fputs(s, lua_outfile) != EOF);
+ while ((s = luaL_opt_string(arg++, NULL)) != NULL)
+ status = status && (fputs(s, f) != EOF);
pushresult(status);
}
static void io_execute (void)
{
- lua_pushnumber(system(lua_check_string(1, "execute")));
+ lua_pushnumber(system(luaL_check_string(1)));
}
static void io_remove (void)
{
- pushresult(remove(lua_check_string(1, "remove")) == 0);
+ pushresult(remove(luaL_check_string(1)) == 0);
}
static void io_rename (void)
{
- pushresult(rename(lua_check_string(1, "rename"),
- lua_check_string(2, "rename")) == 0);
+ pushresult(rename(luaL_check_string(1),
+ luaL_check_string(2)) == 0);
}
@@ -190,7 +217,7 @@ static void io_tmpname (void)
static void io_getenv (void)
{
- lua_pushstring(getenv(lua_check_string(1, "getenv"))); /* if NULL push nil */
+ lua_pushstring(getenv(luaL_check_string(1))); /* if NULL push nil */
}
@@ -198,7 +225,7 @@ static void io_date (void)
{
time_t t;
struct tm *tm;
- char *s = lua_opt_string(1, "%c", "date");
+ char *s = luaL_opt_string(1, "%c");
char b[BUFSIZ];
time(&t); tm = localtime(&t);
if (strftime(b,sizeof(b),s,tm))
@@ -229,34 +256,36 @@ static void io_debug (void)
static void lua_printstack (FILE *f)
{
- int level = 0;
+ int level = 1; /* skip level 0 (it's this function) */
lua_Object func;
- fprintf(f, "Active Stack:\n");
while ((func = lua_stackedfunction(level++)) != LUA_NOOBJECT) {
char *name;
int currentline;
- fprintf(f, "\t");
+ char *filename;
+ int linedefined;
+ lua_funcinfo(func, &filename, &linedefined);
+ fprintf(f, (level==2) ? "Active Stack:\n\t" : "\t");
switch (*lua_getobjname(func, &name)) {
case 'g':
fprintf(f, "function %s", name);
break;
- case 'f':
- fprintf(f, "`%s' fallback", name);
+ case 't':
+ fprintf(f, "`%s' tag method", name);
break;
default: {
- char *filename;
- int linedefined;
- lua_funcinfo(func, &filename, &linedefined);
if (linedefined == 0)
fprintf(f, "main of %s", filename);
else if (linedefined < 0)
fprintf(f, "%s", filename);
else
fprintf(f, "function (%s:%d)", filename, linedefined);
+ filename = NULL;
}
}
if ((currentline = lua_currentline(func)) > 0)
fprintf(f, " at line %d", currentline);
+ if (filename)
+ fprintf(f, " [in file %s]", filename);
fprintf(f, "\n");
}
}
@@ -264,13 +293,13 @@ static void lua_printstack (FILE *f)
static void errorfb (void)
{
- char *s = lua_opt_string(1, "(no messsage)", NULL);
- fprintf(stderr, "lua: %s\n", s);
+ fprintf(stderr, "lua: %s\n", lua_getstring(lua_getparam(1)));
lua_printstack(stderr);
}
-static struct lua_reg iolib[] = {
+
+static struct luaL_reg iolib[] = {
{"readfrom", io_readfrom},
{"writeto", io_writeto},
{"appendto", io_appendto},
@@ -289,7 +318,13 @@ static struct lua_reg iolib[] = {
void iolib_open (void)
{
- lua_infile=stdin; lua_outfile=stdout;
- luaI_openlib(iolib, (sizeof(iolib)/sizeof(iolib[0])));
- lua_setfallback("error", errorfb);
+ lua_tagio = lua_newtag();
+ setfile(stdin, "_INPUT");
+ setfile(stdout, "_OUTPUT");
+ setfile(stdin, "_STDIN");
+ setfile(stdout, "_STDOUT");
+ setfile(stderr, "_STDERR");
+ luaL_openlib(iolib, (sizeof(iolib)/sizeof(iolib[0])));
+ lua_pushcfunction(errorfb);
+ lua_seterrormethod();
}
diff --git a/clients/lib/mathlib.c b/clients/lib/mathlib.c
index d8f8dc13..e929d6aa 100644
--- a/clients/lib/mathlib.c
+++ b/clients/lib/mathlib.c
@@ -3,12 +3,13 @@
** Mathematics library to LUA
*/
-char *rcs_mathlib="$Id: mathlib.c,v 1.18 1996/08/01 14:55:33 roberto Exp $";
+char *rcs_mathlib="$Id: mathlib.c,v 1.25 1997/06/19 18:03:04 roberto Exp $";
#include <stdlib.h>
#include <math.h>
#include "lualib.h"
+#include "auxlib.h"
#include "lua.h"
#ifndef PI
@@ -19,7 +20,7 @@ char *rcs_mathlib="$Id: mathlib.c,v 1.18 1996/08/01 14:55:33 roberto Exp $";
static void math_abs (void)
{
- double d = lua_check_number(1, "abs");
+ double d = luaL_check_number(1);
if (d < 0) d = -d;
lua_pushnumber (d);
}
@@ -27,7 +28,7 @@ static void math_abs (void)
static void math_sin (void)
{
- double d = lua_check_number(1, "sin");
+ double d = luaL_check_number(1);
lua_pushnumber (sin(TORAD(d)));
}
@@ -35,7 +36,7 @@ static void math_sin (void)
static void math_cos (void)
{
- double d = lua_check_number(1, "cos");
+ double d = luaL_check_number(1);
lua_pushnumber (cos(TORAD(d)));
}
@@ -43,98 +44,82 @@ static void math_cos (void)
static void math_tan (void)
{
- double d = lua_check_number(1, "tan");
+ double d = luaL_check_number(1);
lua_pushnumber (tan(TORAD(d)));
}
static void math_asin (void)
{
- double d = lua_check_number(1, "asin");
+ double d = luaL_check_number(1);
lua_pushnumber (TODEGREE(asin(d)));
}
static void math_acos (void)
{
- double d = lua_check_number(1, "acos");
+ double d = luaL_check_number(1);
lua_pushnumber (TODEGREE(acos(d)));
}
static void math_atan (void)
{
- double d = lua_check_number(1, "atan");
+ double d = luaL_check_number(1);
lua_pushnumber (TODEGREE(atan(d)));
}
static void math_atan2 (void)
{
- double d1 = lua_check_number(1, "atan2");
- double d2 = lua_check_number(2, "atan2");
+ double d1 = luaL_check_number(1);
+ double d2 = luaL_check_number(2);
lua_pushnumber (TODEGREE(atan2(d1, d2)));
}
static void math_ceil (void)
{
- double d = lua_check_number(1, "ceil");
+ double d = luaL_check_number(1);
lua_pushnumber (ceil(d));
}
static void math_floor (void)
{
- double d = lua_check_number(1, "floor");
+ double d = luaL_check_number(1);
lua_pushnumber (floor(d));
}
static void math_mod (void)
{
- float x = lua_check_number(1, "mod");
- float y = lua_check_number(2, "mod");
+ float x = luaL_check_number(1);
+ float y = luaL_check_number(2);
lua_pushnumber(fmod(x, y));
}
static void math_sqrt (void)
{
- double d = lua_check_number(1, "sqrt");
+ double d = luaL_check_number(1);
lua_pushnumber (sqrt(d));
}
-static int old_pow;
static void math_pow (void)
{
- lua_Object o1 = lua_getparam (1);
- lua_Object o2 = lua_getparam (2);
- lua_Object op = lua_getparam(3);
- if (!lua_isnumber(o1) || !lua_isnumber(o2) || *(lua_getstring(op)) != 'p')
- {
- lua_Object old = lua_getref(old_pow);
- lua_pushobject(o1);
- lua_pushobject(o2);
- lua_pushobject(op);
- if (lua_callfunction(old) != 0)
- lua_error(NULL);
- }
- else
- {
- double d1 = lua_getnumber(o1);
- double d2 = lua_getnumber(o2);
- lua_pushnumber (pow(d1,d2));
- }
+ double d1 = luaL_check_number(1);
+ double d2 = luaL_check_number(2);
+ lua_pushnumber(pow(d1,d2));
}
static void math_min (void)
{
int i=1;
- double dmin = lua_check_number(i, "min");
+ double dmin = luaL_check_number(i);
while (lua_getparam(++i) != LUA_NOOBJECT)
{
- double d = lua_check_number(i, "min");
+ double d = luaL_check_number(i);
if (d < dmin) dmin = d;
}
lua_pushnumber (dmin);
@@ -143,10 +128,10 @@ static void math_min (void)
static void math_max (void)
{
int i=1;
- double dmax = lua_check_number(i, "max");
+ double dmax = luaL_check_number(i);
while (lua_getparam(++i) != LUA_NOOBJECT)
{
- double d = lua_check_number(i, "max");
+ double d = luaL_check_number(i);
if (d > dmax) dmax = d;
}
lua_pushnumber (dmax);
@@ -154,33 +139,33 @@ static void math_max (void)
static void math_log (void)
{
- double d = lua_check_number(1, "log");
+ double d = luaL_check_number(1);
lua_pushnumber (log(d));
}
static void math_log10 (void)
{
- double d = lua_check_number(1, "log10");
+ double d = luaL_check_number(1);
lua_pushnumber (log10(d));
}
static void math_exp (void)
{
- double d = lua_check_number(1, "exp");
+ double d = luaL_check_number(1);
lua_pushnumber (exp(d));
}
static void math_deg (void)
{
- float d = lua_check_number(1, "deg");
+ float d = luaL_check_number(1);
lua_pushnumber (d*180./PI);
}
static void math_rad (void)
{
- float d = lua_check_number(1, "rad");
+ float d = luaL_check_number(1);
lua_pushnumber (d/180.*PI);
}
@@ -191,11 +176,11 @@ static void math_random (void)
static void math_randomseed (void)
{
- srand(lua_check_number(1, "randomseed"));
+ srand(luaL_check_number(1));
}
-static struct lua_reg mathlib[] = {
+static struct luaL_reg mathlib[] = {
{"abs", math_abs},
{"sin", math_sin},
{"cos", math_cos},
@@ -224,7 +209,9 @@ static struct lua_reg mathlib[] = {
*/
void mathlib_open (void)
{
- luaI_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));
- old_pow = lua_refobject(lua_setfallback("arith", math_pow), 1);
+ luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));
+ lua_pushcfunction(math_pow);
+ lua_pushnumber(0); /* to get its tag */
+ lua_settagmethod(lua_tag(lua_pop()), "pow");
}
diff --git a/clients/lib/old/Makefile b/clients/lib/old/Makefile
deleted file mode 100644
index b9668617..00000000
--- a/clients/lib/old/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# makefile for lualib
-
-LUA= ../../..
-
-include $(LUA)/config
-
-EXTRA_DEFS= $(POPEN) $(NOSTRERROR)
-
-OBJS= iolib.o mathlib.o strlib.o
-SRCS= iolib.c mathlib.c strlib.c
-
-SLIB= $(LIB)/liboldlualib.a
-
-# dynamic libraries only work for SunOs
-DLIB= $(LIB)/liboldlualib.so.$(VERSION)
-
-all: $(SLIB)
-
-dynamic: $(DLIB)
-
-$(SLIB): $(OBJS)
- ar rcu $@ $(OBJS)
- $(RANLIB) $(SLIB)
-
-$(DLIB): $(OBJS)
- ld -o $@ $(OBJS)
-
-clean:
- rm -f $(OBJS) $(SLIB) $(DLIB)
-
-co:
- co -f -M -rv2_4 $(SRCS)
-
-klean: clean
- rm -f $(SRCS)
diff --git a/clients/lib/old/iolib.c b/clients/lib/old/iolib.c
deleted file mode 100644
index 9ed7e479..00000000
--- a/clients/lib/old/iolib.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/*
-** iolib.c
-** Input/output library to LUA
-*/
-
-char *rcs_iolib="$Id: iolib.c,v 1.44 1996/05/03 20:10:59 roberto Exp $";
-
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <time.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "lua.h"
-#include "luadebug.h"
-#include "lualib.h"
-
-static FILE *in=stdin, *out=stdout;
-
-
-#ifdef POPEN
-FILE *popen();
-int pclose();
-#else
-#define popen(x,y) NULL /* that is, popen always fails */
-#define pclose(x) (-1)
-#endif
-
-
-static void pushresult (int i)
-{
- if (i)
- lua_pushnumber (1);
- else
- lua_pushnil();
-}
-
-static void closeread (void)
-{
- if (in != stdin)
- {
- if (pclose(in) == -1)
- fclose(in);
- in = stdin;
- }
-}
-
-static void closewrite (void)
-{
- if (out != stdout)
- {
- if (pclose(out) == -1)
- fclose(out);
- out = stdout;
- }
-}
-
-/*
-** Open a file to read.
-** LUA interface:
-** status = readfrom (filename)
-** where:
-** status = 1 -> success
-** status = nil -> error
-*/
-static void io_readfrom (void)
-{
- if (lua_getparam (1) == LUA_NOOBJECT)
- { /* restore standart input */
- closeread();
- lua_pushnumber (1);
- }
- else
- {
- char *s = lua_check_string(1, "readfrom");
- FILE *fp = (*s == '|') ? popen(s+1, "r") : fopen(s, "r");
- if (fp == NULL)
- lua_pushnil();
- else
- {
- closeread();
- in = fp;
- lua_pushnumber (1);
- }
- }
-}
-
-
-/*
-** Open a file to write.
-** LUA interface:
-** status = writeto (filename)
-** where:
-** status = 1 -> success
-** status = nil -> error
-*/
-static void io_writeto (void)
-{
- if (lua_getparam (1) == LUA_NOOBJECT) /* restore standart output */
- {
- closewrite();
- lua_pushnumber (1);
- }
- else
- {
- char *s = lua_check_string(1, "writeto");
- FILE *fp = (*s == '|') ? popen(s+1,"w") : fopen(s,"w");
- if (fp == NULL)
- lua_pushnil();
- else
- {
- closewrite();
- out = fp;
- lua_pushnumber (1);
- }
- }
-}
-
-
-/*
-** Open a file to write appended.
-** LUA interface:
-** status = appendto (filename)
-** where:
-** status = 1 -> success
-** status = nil -> error
-*/
-static void io_appendto (void)
-{
- char *s = lua_check_string(1, "appendto");
- FILE *fp = fopen (s, "a");
- if (fp == NULL)
- lua_pushnil();
- else
- {
- if (out != stdout) fclose (out);
- out = fp;
- lua_pushnumber(1);
- }
-}
-
-
-static char getformat (char *f, int *just, int *m, int *n)
-{
- int t;
- switch (*f++)
- {
- case 'q': case 'Q':
- case 's': case 'S':
- case 'i': case 'I':
- t = tolower(*(f-1));
- break;
- case 'f': case 'F': case 'g': case 'G': case 'e': case 'E':
- t = 'f';
- break;
- default:
- t = 0; /* to avoid compiler warnings */
- lua_arg_error("read/write (format)");
- }
- *just = (*f == '<' || *f == '>' || *f == '|') ? *f++ : '>';
- if (isdigit(*f))
- {
- *m = 0;
- while (isdigit(*f))
- *m = *m*10 + (*f++ - '0');
- }
- else
- *m = -1;
- if (*f == '.')
- {
- f++; /* skip point */
- *n = 0;
- while (isdigit(*f))
- *n = *n*10 + (*f++ - '0');
- }
- else
- *n = -1;
- return t;
-}
-
-
-/*
-** Read a variable. On error put nil on stack.
-** LUA interface:
-** variable = read ([format])
-**
-** O formato pode ter um dos seguintes especificadores:
-**
-** s ou S -> para string
-** f ou F, g ou G, e ou E -> para reais
-** i ou I -> para inteiros
-**
-** Estes especificadores podem vir seguidos de numero que representa
-** o numero de campos a serem lidos.
-*/
-
-static int read_until_char (int del)
-{
- int c;
- while((c = fgetc(in)) != EOF && c != del)
- luaI_addchar(c);
- return c;
-}
-
-static void read_until_blank (void)
-{
- int c;
- while((c = fgetc(in)) != EOF && !isspace(c))
- luaI_addchar(c);
- if (c != EOF) ungetc(c,in);
-}
-
-static void read_m (int m)
-{
- int c;
- while (m-- && (c = fgetc(in)) != EOF)
- luaI_addchar(c);
-}
-
-
-static void read_free (void)
-{
- int c;
- while (isspace(c=fgetc(in)))
- ;
- if (c == EOF)
- {
- lua_pushnil();
- return;
- }
- if (c == '\"' || c == '\'')
- { /* string */
- c = read_until_char(c);
- if (c == EOF)
- lua_pushnil();
- else
- lua_pushstring(luaI_addchar(0));
- }
- else
- {
- double d;
- char dummy;
- char *s;
- luaI_addchar(c);
- read_until_blank();
- s = luaI_addchar(0);
- if (sscanf(s, "%lf %c", &d, &dummy) == 1)
- lua_pushnumber(d);
- else
- lua_pushstring(s);
- }
-}
-
-static void io_read (void)
-{
- lua_Object o = lua_getparam (1);
- luaI_addchar(0); /* initialize buffer */
- if (o == LUA_NOOBJECT) /* free format */
- read_free();
- else /* formatted */
- {
- int m, dummy1, dummy2;
- switch (getformat(lua_check_string(1, "read"), &dummy1, &m, &dummy2))
- {
- case 's':
- {
- char *s;
- if (m < 0)
- read_until_blank();
- else
- read_m(m);
- s = luaI_addchar(0);
- if ((m >= 0 && strlen(s) == m) || (m < 0 && strlen(s) > 0))
- lua_pushstring(s);
- else
- lua_pushnil();
- break;
- }
-
- case 'i': /* can read as float, since it makes no difference to Lua */
- case 'f':
- {
- double d;
- int result;
- if (m < 0)
- result = fscanf(in, "%lf", &d);
- else
- {
- read_m(m);
- result = sscanf(luaI_addchar(0), "%lf", &d);
- }
- if (result == 1)
- lua_pushnumber(d);
- else
- lua_pushnil();
- break;
- }
- default:
- lua_arg_error("read (format)");
- }
- }
-}
-
-
-/*
-** Read characters until a given one. The delimiter is not read.
-*/
-static void io_readuntil (void)
-{
- int del, c;
- lua_Object p = lua_getparam(1);
- luaI_addchar(0); /* initialize buffer */
- if (p == LUA_NOOBJECT || lua_isnil(p))
- del = EOF;
- else
- del = *lua_check_string(1, "readuntil");
- c = read_until_char(del);
- if (c != EOF) ungetc(c,in);
- lua_pushstring(luaI_addchar(0));
-}
-
-
-/*
-** Write a variable. On error put 0 on stack, otherwise put 1.
-** LUA interface:
-** status = write (variable [,format])
-**
-** O formato pode ter um dos seguintes especificadores:
-**
-** s ou S -> para string
-** f ou F, g ou G, e ou E -> para reais
-** i ou I -> para inteiros
-**
-** Estes especificadores podem vir seguidos de:
-**
-** [?][m][.n]
-**
-** onde:
-** ? -> indica justificacao
-** < = esquerda
-** | = centro
-** > = direita (default)
-** m -> numero maximo de campos (se exceder estoura)
-** n -> indica precisao para
-** reais -> numero de casas decimais
-** inteiros -> numero minimo de digitos
-** string -> nao se aplica
-*/
-
-static int write_fill (int n, int c)
-{
- while (n--)
- if (fputc(c, out) == EOF)
- return 0;
- return 1;
-}
-
-static int write_string (char *s, int just, int m)
-{
- int status;
- int l = strlen(s);
- int pre; /* number of blanks before string */
- if (m < 0) m = l;
- else if (l > m)
- {
- write_fill(m, '*');
- return 0;
- }
- pre = (just == '<') ? 0 : (just == '>') ? m-l : (m-l)/2;
- status = write_fill(pre, ' ');
- status = status && fprintf(out, "%s", s) >= 0;
- status = status && write_fill(m-(l+pre), ' ');
- return status;
-}
-
-static int write_quoted (int just, int m)
-{
- luaI_addchar(0);
- luaI_addquoted(lua_check_string(1, "write"));
- return write_string(luaI_addchar(0), just, m);
-}
-
-static int write_float (int just, int m, int n)
-{
- char buffer[100];
- lua_Object p = lua_getparam(1);
- float number;
- if (!lua_isnumber(p)) return 0;
- number = lua_getnumber(p);
- if (n >= 0)
- sprintf(buffer, "%.*f", n, number);
- else
- sprintf(buffer, "%g", number);
- return write_string(buffer, just, m);
-}
-
-
-static int write_int (int just, int m, int n)
-{
- char buffer[100];
- lua_Object p = lua_getparam(1);
- int number;
- if (!lua_isnumber(p)) return 0;
- number = (int)lua_getnumber(p);
- if (n >= 0)
- sprintf(buffer, "%.*d", n, number);
- else
- sprintf(buffer, "%d", number);
- return write_string(buffer, just, m);
-}
-
-
-static void io_write (void)
-{
- int status = 0;
- if (lua_getparam (2) == LUA_NOOBJECT) /* free format */
- {
- lua_Object o1 = lua_getparam(1);
- int t = lua_type(o1);
- if (t == LUA_T_NUMBER)
- status = fprintf (out, "%g", lua_getnumber(o1)) >= 0;
- else if (t == LUA_T_STRING)
- status = fprintf (out, "%s", lua_getstring(o1)) >= 0;
- }
- else /* formated */
- {
- int just, m, n;
- switch (getformat(lua_check_string(2, "write"), &just, &m, &n))
- {
- case 's':
- {
- lua_Object p = lua_getparam(1);
- if (lua_isstring(p))
- status = write_string(lua_getstring(p), just, m);
- else
- status = 0;
- break;
- }
- case 'q':
- status = write_quoted(just, m);
- break;
- case 'f':
- status = write_float(just, m, n);
- break;
- case 'i':
- status = write_int(just, m, n);
- break;
- }
- }
- if (status)
- lua_pushnumber(status);
- else
- lua_pushnil();
-}
-
-/*
-** Execute a executable program using "system".
-** Return the result of execution.
-*/
-static void io_execute (void)
-{
- lua_pushnumber(system(lua_check_string(1, "execute")));
-}
-
-/*
-** Remove a file. On error return nil.
-*/
-static void io_remove (void)
-{
- pushresult(remove(lua_check_string(1, "remove")) == 0);
-}
-
-static void io_rename (void)
-{
- char *f1 = lua_check_string(1, "rename");
- char *f2 = lua_check_string(2, "rename");
- pushresult(rename(f1, f2) == 0);
-}
-
-static void io_tmpname (void)
-{
- lua_pushstring(tmpnam(NULL));
-}
-
-static void io_errorno (void)
-{
-/* lua_pushstring(strerror(errno));*/
-}
-
-
-/*
-** To get a environment variable
-*/
-static void io_getenv (void)
-{
- char *env = getenv(lua_check_string(1, "getenv"));
- lua_pushstring(env); /* if NULL push nil */
-}
-
-/*
-** Return user formatted time stamp
-*/
-static void io_date (void)
-{
- time_t t;
- struct tm *tm;
- char *s;
- char b[BUFSIZ];
- if (lua_getparam(1) == LUA_NOOBJECT)
- s = "%c";
- else
- s = lua_check_string(1, "date");
- time(&t); tm = localtime(&t);
- if (strftime(b,sizeof(b),s,tm))
- lua_pushstring(b);
- else
- lua_error("invalid `date' format");
-}
-
-/*
-** To exit
-*/
-static void io_exit (void)
-{
- lua_Object o = lua_getparam(1);
- int code = lua_isnumber(o) ? (int)lua_getnumber(o) : 1;
- exit(code);
-}
-
-/*
-** To debug a lua program. Start a dialog with the user, interpreting
- lua commands until an 'cont'.
-*/
-static void io_debug (void)
-{
- while (1)
- {
- char buffer[250];
- fprintf(stderr, "lua_debug> ");
- if (fgets(buffer, sizeof(buffer), stdin) == 0) return;
- if (strcmp(buffer, "cont") == 0) return;
- lua_dostring(buffer);
- }
-}
-
-
-static void lua_printstack (FILE *f)
-{
- int level = 0;
- lua_Object func;
- fprintf(f, "Active Stack:\n");
- while ((func = lua_stackedfunction(level++)) != LUA_NOOBJECT)
- {
- char *name;
- int currentline;
- fprintf(f, "\t");
- switch (*lua_getobjname(func, &name))
- {
- case 'g':
- fprintf(f, "function %s", name);
- break;
- case 'f':
- fprintf(f, "`%s' fallback", name);
- break;
- default:
- {
- char *filename;
- int linedefined;
- lua_funcinfo(func, &filename, &linedefined);
- if (linedefined == 0)
- fprintf(f, "main of %s", filename);
- else if (linedefined < 0)
- fprintf(f, "%s", filename);
- else
- fprintf(f, "function (%s:%d)", filename, linedefined);
- }
- }
- if ((currentline = lua_currentline(func)) > 0)
- fprintf(f, " at line %d", currentline);
- fprintf(f, "\n");
- }
-}
-
-
-static void errorfb (void)
-{
- lua_Object o = lua_getparam(1);
- char *s = lua_isstring(o) ? lua_getstring(o) : "(no messsage)";
- fprintf(stderr, "lua: %s\n", s);
- lua_printstack(stderr);
-}
-
-
-static struct lua_reg iolib[] = {
-{"readfrom", io_readfrom},
-{"writeto", io_writeto},
-{"appendto", io_appendto},
-{"read", io_read},
-{"readuntil",io_readuntil},
-{"write", io_write},
-{"execute", io_execute},
-{"remove", io_remove},
-{"rename", io_rename},
-{"tmpname", io_tmpname},
-{"ioerror", io_errorno},
-{"getenv", io_getenv},
-{"date", io_date},
-{"exit", io_exit},
-{"debug", io_debug},
-{"print_stack", errorfb}
-};
-
-void iolib_open (void)
-{
- luaI_openlib(iolib, (sizeof(iolib)/sizeof(iolib[0])));
- lua_setfallback("error", errorfb);
-}
diff --git a/clients/lib/old/lualib.h b/clients/lib/old/lualib.h
deleted file mode 100644
index 6005d7c2..00000000
--- a/clients/lib/old/lualib.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-** Libraries to be used in LUA programs
-** Grupo de Tecnologia em Computacao Grafica
-** TeCGraf - PUC-Rio
-** $Id: lualib.h,v 1.8 1996/04/30 21:13:55 roberto Exp $
-*/
-
-#ifndef lualib_h
-#define lualib_h
-
-#include "lua.h"
-
-void iolib_open (void);
-void strlib_open (void);
-void mathlib_open (void);
-
-
-/* auxiliar functions (private) */
-
-struct lua_reg {
- char *name;
- lua_CFunction func;
-};
-
-void luaI_openlib (struct lua_reg *l, int n);
-void lua_arg_error(char *funcname);
-char *lua_check_string (int numArg, char *funcname);
-double lua_check_number (int numArg, char *funcname);
-char *luaI_addchar (int c);
-void luaI_addquoted (char *s);
-
-#endif
-
diff --git a/clients/lib/old/mathlib.c b/clients/lib/old/mathlib.c
deleted file mode 100644
index 07081e48..00000000
--- a/clients/lib/old/mathlib.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-** mathlib.c
-** Mathematics library to LUA
-*/
-
-char *rcs_mathlib="$Id: mathlib.c,v 1.17 1996/04/30 21:13:55 roberto Exp $";
-
-#include <stdlib.h>
-#include <math.h>
-
-#include "lualib.h"
-#include "lua.h"
-
-#ifndef PI
-#define PI 3.14159265358979323846
-#endif
-#define TODEGREE(a) ((a)*180.0/PI)
-#define TORAD(a) ((a)*PI/180.0)
-
-static void math_abs (void)
-{
- double d = lua_check_number(1, "abs");
- if (d < 0) d = -d;
- lua_pushnumber (d);
-}
-
-
-static void math_sin (void)
-{
- double d = lua_check_number(1, "sin");
- lua_pushnumber (sin(TORAD(d)));
-}
-
-
-
-static void math_cos (void)
-{
- double d = lua_check_number(1, "cos");
- lua_pushnumber (cos(TORAD(d)));
-}
-
-
-
-static void math_tan (void)
-{
- double d = lua_check_number(1, "tan");
- lua_pushnumber (tan(TORAD(d)));
-}
-
-
-static void math_asin (void)
-{
- double d = lua_check_number(1, "asin");
- lua_pushnumber (TODEGREE(asin(d)));
-}
-
-
-static void math_acos (void)
-{
- double d = lua_check_number(1, "acos");
- lua_pushnumber (TODEGREE(acos(d)));
-}
-
-
-static void math_atan (void)
-{
- double d = lua_check_number(1, "atan");
- lua_pushnumber (TODEGREE(atan(d)));
-}
-
-
-static void math_atan2 (void)
-{
- double d1 = lua_check_number(1, "atan2");
- double d2 = lua_check_number(2, "atan2");
- lua_pushnumber (TODEGREE(atan2(d1, d2)));
-}
-
-
-static void math_ceil (void)
-{
- double d = lua_check_number(1, "ceil");
- lua_pushnumber (ceil(d));
-}
-
-
-static void math_floor (void)
-{
- double d = lua_check_number(1, "floor");
- lua_pushnumber (floor(d));
-}
-
-static void math_mod (void)
-{
- int d1 = (int)lua_check_number(1, "mod");
- int d2 = (int)lua_check_number(2, "mod");
- lua_pushnumber (d1%d2);
-}
-
-
-static void math_sqrt (void)
-{
- double d = lua_check_number(1, "sqrt");
- lua_pushnumber (sqrt(d));
-}
-
-static int old_pow;
-
-static void math_pow (void)
-{
- lua_Object o1 = lua_getparam (1);
- lua_Object o2 = lua_getparam (2);
- lua_Object op = lua_getparam(3);
- if (!lua_isnumber(o1) || !lua_isnumber(o2) || *(lua_getstring(op)) != 'p')
- {
- lua_Object old = lua_getref(old_pow);
- lua_pushobject(o1);
- lua_pushobject(o2);
- lua_pushobject(op);
- if (lua_callfunction(old) != 0)
- lua_error(NULL);
- }
- else
- {
- double d1 = lua_getnumber(o1);
- double d2 = lua_getnumber(o2);
- lua_pushnumber (pow(d1,d2));
- }
-}
-
-static void math_min (void)
-{
- int i=1;
- double dmin = lua_check_number(i, "min");
- while (lua_getparam(++i) != LUA_NOOBJECT)
- {
- double d = lua_check_number(i, "min");
- if (d < dmin) dmin = d;
- }
- lua_pushnumber (dmin);
-}
-
-static void math_max (void)
-{
- int i=1;
- double dmax = lua_check_number(i, "max");
- while (lua_getparam(++i) != LUA_NOOBJECT)
- {
- double d = lua_check_number(i, "max");
- if (d > dmax) dmax = d;
- }
- lua_pushnumber (dmax);
-}
-
-static void math_log (void)
-{
- double d = lua_check_number(1, "log");
- lua_pushnumber (log(d));
-}
-
-
-static void math_log10 (void)
-{
- double d = lua_check_number(1, "log10");
- lua_pushnumber (log10(d));
-}
-
-
-static void math_exp (void)
-{
- double d = lua_check_number(1, "exp");
- lua_pushnumber (exp(d));
-}
-
-static void math_deg (void)
-{
- float d = lua_check_number(1, "deg");
- lua_pushnumber (d*180./PI);
-}
-
-static void math_rad (void)
-{
- float d = lua_check_number(1, "rad");
- lua_pushnumber (d/180.*PI);
-}
-
-static void math_random (void)
-{
- lua_pushnumber((double)(rand()%RAND_MAX) / (double)RAND_MAX);
-}
-
-static void math_randomseed (void)
-{
- srand(lua_check_number(1, "randomseed"));
-}
-
-
-static struct lua_reg mathlib[] = {
-{"abs", math_abs},
-{"sin", math_sin},
-{"cos", math_cos},
-{"tan", math_tan},
-{"asin", math_asin},
-{"acos", math_acos},
-{"atan", math_atan},
-{"atan2", math_atan2},
-{"ceil", math_ceil},
-{"floor", math_floor},
-{"mod", math_mod},
-{"sqrt", math_sqrt},
-{"min", math_min},
-{"max", math_max},
-{"log", math_log},
-{"log10", math_log10},
-{"exp", math_exp},
-{"deg", math_deg},
-{"rad", math_rad},
-{"random", math_random},
-{"randomseed", math_randomseed}
-};
-
-/*
-** Open math library
-*/
-void mathlib_open (void)
-{
- luaI_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));
- old_pow = lua_refobject(lua_setfallback("arith", math_pow), 1);
-}
-
diff --git a/clients/lib/old/strlib.c b/clients/lib/old/strlib.c
deleted file mode 100644
index 6a99871c..00000000
--- a/clients/lib/old/strlib.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
-** strlib.c
-** String library to LUA
-*/
-
-char *rcs_strlib="$Id: strlib.c,v 1.23 1996/04/30 21:13:55 roberto Exp $";
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <limits.h>
-
-#include "lua.h"
-#include "lualib.h"
-
-
-void lua_arg_error(char *funcname)
-{
- char buff[100];
- sprintf(buff, "incorrect arguments to function `%s'", funcname);
- lua_error(buff);
-}
-
-char *lua_check_string (int numArg, char *funcname)
-{
- lua_Object o = lua_getparam(numArg);
- if (!lua_isstring(o))
- lua_arg_error(funcname);
- return lua_getstring(o);
-}
-
-double lua_check_number (int numArg, char *funcname)
-{
- lua_Object o = lua_getparam(numArg);
- if (!lua_isnumber(o))
- lua_arg_error(funcname);
- return lua_getnumber(o);
-}
-
-static int lua_opt_number (int numArg, int def, char *funcname)
-{
- return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
- (int)lua_check_number(numArg, funcname);
-}
-
-char *luaI_addchar (int c)
-{
- static char *buff = NULL;
- static int max = 0;
- static int n = 0;
- if (n >= max)
- {
- if (max == 0)
- {
- max = 100;
- buff = (char *)malloc(max);
- }
- else
- {
- max *= 2;
- buff = (char *)realloc(buff, max);
- }
- if (buff == NULL)
- lua_error("memory overflow");
- }
- buff[n++] = c;
- if (c == 0)
- n = 0; /* prepare for next string */
- return buff;
-}
-
-
-/*
-** Return the position of the first caracter of a substring into a string
-** LUA interface:
-** n = strfind (string, substring, init, end)
-*/
-static void str_find (void)
-{
- char *s1 = lua_check_string(1, "strfind");
- char *s2 = lua_check_string(2, "strfind");
- int init = lua_opt_number(3, 1, "strfind") - 1;
- char *f = (init>=0 && init<=strlen(s1)) ? strstr(s1+init,s2) : NULL;
- if (f != NULL)
- {
- int pos = f-s1+1;
- if (lua_opt_number(4, INT_MAX, "strfind") >= pos+strlen(s2)-1)
- lua_pushnumber (pos);
- else
- lua_pushnil();
- }
- else
- lua_pushnil();
-}
-
-/*
-** Return the string length
-** LUA interface:
-** n = strlen (string)
-*/
-static void str_len (void)
-{
- char *s = lua_check_string(1, "strlen");
- lua_pushnumber(strlen(s));
-}
-
-
-/*
-** Return the substring of a string, from start to end
-** LUA interface:
-** substring = strsub (string, start, end)
-*/
-static void str_sub (void)
-{
- char *s = lua_check_string(1, "strsub");
- int start = (int)lua_check_number(2, "strsub");
- int end = lua_opt_number(3, strlen(s), "strsub");
- if (end < start || start < 1 || end > strlen(s))
- lua_pushliteral("");
- else
- {
- luaI_addchar(0);
- while (start <= end)
- luaI_addchar(s[start++ - 1]);
- lua_pushstring (luaI_addchar(0));
- }
-}
-
-/*
-** Convert a string to lower case.
-** LUA interface:
-** lowercase = strlower (string)
-*/
-static void str_lower (void)
-{
- char *s = lua_check_string(1, "strlower");
- luaI_addchar(0);
- while (*s)
- luaI_addchar(tolower(*s++));
- lua_pushstring(luaI_addchar(0));
-}
-
-
-/*
-** Convert a string to upper case.
-** LUA interface:
-** uppercase = strupper (string)
-*/
-static void str_upper (void)
-{
- char *s = lua_check_string(1, "strupper");
- luaI_addchar(0);
- while (*s)
- luaI_addchar(toupper(*s++));
- lua_pushstring(luaI_addchar(0));
-}
-
-/*
-** get ascii value of a character in a string
-*/
-static void str_ascii (void)
-{
- char *s = lua_check_string(1, "ascii");
- int pos = lua_opt_number(2, 1, "ascii") - 1;
- if (pos<0 || pos>=strlen(s))
- lua_arg_error("ascii");
- lua_pushnumber(s[pos]);
-}
-
-void luaI_addquoted (char *s)
-{
- luaI_addchar('"');
- for (; *s; s++)
- {
- if (*s == '"' || *s == '\\' || *s == '\n')
- luaI_addchar('\\');
- luaI_addchar(*s);
- }
- luaI_addchar('"');
-}
-
-#define MAX_CONVERTION 2000
-#define MAX_FORMAT 50
-
-static void str_format (void)
-{
- int arg = 1;
- char *strfrmt = lua_check_string(arg++, "format");
- luaI_addchar(0); /* initialize */
- while (*strfrmt)
- {
- if (*strfrmt != '%')
- luaI_addchar(*strfrmt++);
- else if (*++strfrmt == '%')
- luaI_addchar(*strfrmt++); /* %% */
- else
- { /* format item */
- char form[MAX_FORMAT]; /* store the format ('%...') */
- char buff[MAX_CONVERTION]; /* store the formated value */
- int size = 0;
- int i = 0;
- form[i++] = '%';
- form[i] = *strfrmt++;
- while (!isalpha(form[i]))
- {
- if (isdigit(form[i]))
- {
- size = size*10 + form[i]-'0';
- if (size >= MAX_CONVERTION)
- lua_error("format size/precision too long in function `format'");
- }
- else if (form[i] == '.')
- size = 0; /* re-start */
- if (++i >= MAX_FORMAT)
- lua_error("bad format in function `format'");
- form[i] = *strfrmt++;
- }
- form[i+1] = 0; /* ends string */
- switch (form[i])
- {
- case 'q':
- luaI_addquoted(lua_check_string(arg++, "format"));
- buff[0] = '\0'; /* addchar already done */
- break;
- case 's':
- {
- char *s = lua_check_string(arg++, "format");
- if (strlen(s) >= MAX_CONVERTION)
- lua_error("string argument too long in function `format'");
- sprintf(buff, form, s);
- break;
- }
- case 'c': case 'd': case 'i': case 'o':
- case 'u': case 'x': case 'X':
- sprintf(buff, form, (int)lua_check_number(arg++, "format"));
- break;
- case 'e': case 'E': case 'f': case 'g':
- sprintf(buff, form, lua_check_number(arg++, "format"));
- break;
- default: /* also treat cases 'pnLlh' */
- lua_error("invalid format option in function `format'");
- }
- for (i=0; buff[i]; i++) /* move formated value to result */
- luaI_addchar(buff[i]);
- }
- }
- lua_pushstring(luaI_addchar(0)); /* push the result */
-}
-
-
-void luaI_openlib (struct lua_reg *l, int n)
-{
- int i;
- for (i=0; i<n; i++)
- lua_register(l[i].name, l[i].func);
-}
-
-static struct lua_reg strlib[] = {
-{"strfind", str_find},
-{"strlen", str_len},
-{"strsub", str_sub},
-{"strlower", str_lower},
-{"strupper", str_upper},
-{"ascii", str_ascii},
-{"format", str_format}
-};
-
-
-/*
-** Open string library
-*/
-void strlib_open (void)
-{
- luaI_openlib(strlib, (sizeof(strlib)/sizeof(strlib[0])));
-}
diff --git a/clients/lib/strlib.c b/clients/lib/strlib.c
index 47e91f4f..bd41693b 100644
--- a/clients/lib/strlib.c
+++ b/clients/lib/strlib.c
@@ -3,7 +3,7 @@
** String library to LUA
*/
-char *rcs_strlib="$Id: strlib.c,v 1.33 1996/11/20 13:47:59 roberto Exp $";
+char *rcs_strlib="$Id: strlib.c,v 1.46 1997/06/19 18:49:40 roberto Exp $";
#include <string.h>
#include <stdio.h>
@@ -11,6 +11,7 @@ char *rcs_strlib="$Id: strlib.c,v 1.33 1996/11/20 13:47:59 roberto Exp $";
#include <ctype.h>
#include "lua.h"
+#include "auxlib.h"
#include "lualib.h"
@@ -23,7 +24,7 @@ struct lbuff {
static struct lbuff lbuffer = {NULL, 0, 0};
-static char *lua_strbuffer (unsigned long size)
+static char *strbuffer (unsigned long size)
{
if (size > lbuffer.max) {
/* ANSI "realloc" doesn't need this test, but some machines (Sun!)
@@ -38,55 +39,24 @@ static char *lua_strbuffer (unsigned long size)
static char *openspace (unsigned long size)
{
- char *buff = lua_strbuffer(lbuffer.size+size);
+ char *buff = strbuffer(lbuffer.size+size);
return buff+lbuffer.size;
}
-void lua_arg_check(int cond, char *funcname)
-{
- if (!cond) {
- char buff[100];
- sprintf(buff, "incorrect argument to function `%s'", funcname);
- lua_error(buff);
- }
-}
-
-char *lua_check_string (int numArg, char *funcname)
-{
- lua_Object o = lua_getparam(numArg);
- lua_arg_check(lua_isstring(o), funcname);
- return lua_getstring(o);
-}
-
-char *lua_opt_string (int numArg, char *def, char *funcname)
-{
- return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
- lua_check_string(numArg, funcname);
-}
-
-double lua_check_number (int numArg, char *funcname)
-{
- lua_Object o = lua_getparam(numArg);
- lua_arg_check(lua_isnumber(o), funcname);
- return lua_getnumber(o);
-}
-
-long lua_opt_number (int numArg, long def, char *funcname)
-{
- return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
- (long)lua_check_number(numArg, funcname);
-}
-
char *luaI_addchar (int c)
{
if (lbuffer.size >= lbuffer.max)
- lua_strbuffer(lbuffer.max == 0 ? 100 : lbuffer.max*2);
+ strbuffer(lbuffer.max == 0 ? 100 : lbuffer.max*2);
lbuffer.b[lbuffer.size++] = c;
- if (c == 0)
- lbuffer.size = 0; /* prepare for next string */
return lbuffer.b;
}
+void luaI_emptybuff (void)
+{
+ lbuffer.size = 0; /* prepare for next string */
+}
+
+
static void addnchar (char *s, int n)
{
char *b = openspace(n);
@@ -99,35 +69,13 @@ static void addstr (char *s)
addnchar(s, strlen(s));
}
-/*
-** Interface to strtok
-*/
-static void str_tok (void)
-{
- char *s1 = lua_check_string(1, "strtok");
- char *del = lua_check_string(2, "strtok");
- lua_Object t = lua_createtable();
- int i = 1;
- /* As strtok changes s1, and s1 is "constant", make a copy of it */
- s1 = strcpy(lua_strbuffer(strlen(s1+1)), s1);
- while ((s1 = strtok(s1, del)) != NULL) {
- lua_pushobject(t);
- lua_pushnumber(i++);
- lua_pushstring(s1);
- lua_storesubscript();
- s1 = NULL; /* prepare for next strtok */
- }
- lua_pushobject(t);
- lua_pushnumber(i-1); /* total number of tokens */
-}
-
/*
** Return the string length
*/
static void str_len (void)
{
- lua_pushnumber(strlen(lua_check_string(1, "strlen")));
+ lua_pushnumber(strlen(luaL_check_string(1)));
}
/*
@@ -135,15 +83,18 @@ static void str_len (void)
*/
static void str_sub (void)
{
- char *s = lua_check_string(1, "strsub");
- long start = (long)lua_check_number(2, "strsub");
- long end = lua_opt_number(3, strlen(s), "strsub");
- if (1 <= start && start <= end && end <= strlen(s)) {
- luaI_addchar(0);
+ char *s = luaL_check_string(1);
+ long l = strlen(s);
+ long start = (long)luaL_check_number(2);
+ long end = (long)luaL_opt_number(3, -1);
+ if (start < 0) start = l+start+1;
+ if (end < 0) end = l+end+1;
+ if (1 <= start && start <= end && end <= l) {
+ luaI_emptybuff();
addnchar(s+start-1, end-start+1);
lua_pushstring(luaI_addchar(0));
}
- else lua_pushliteral("");
+ else lua_pushstring("");
}
/*
@@ -151,10 +102,10 @@ static void str_sub (void)
*/
static void str_lower (void)
{
- char *s = lua_check_string(1, "strlower");
- luaI_addchar(0);
- while (*s)
- luaI_addchar(tolower(*s++));
+ char *s;
+ luaI_emptybuff();
+ for (s = luaL_check_string(1); *s; s++)
+ luaI_addchar(tolower((unsigned char)*s));
lua_pushstring(luaI_addchar(0));
}
@@ -163,18 +114,18 @@ static void str_lower (void)
*/
static void str_upper (void)
{
- char *s = lua_check_string(1, "strupper");
- luaI_addchar(0);
- while (*s)
- luaI_addchar(toupper(*s++));
+ char *s;
+ luaI_emptybuff();
+ for (s = luaL_check_string(1); *s; s++)
+ luaI_addchar(toupper((unsigned char)*s));
lua_pushstring(luaI_addchar(0));
}
static void str_rep (void)
{
- char *s = lua_check_string(1, "strrep");
- int n = (int)lua_check_number(2, "strrep");
- luaI_addchar(0);
+ char *s = luaL_check_string(1);
+ int n = (int)luaL_check_number(2);
+ luaI_emptybuff();
while (n-- > 0)
addstr(s);
lua_pushstring(luaI_addchar(0));
@@ -185,9 +136,9 @@ static void str_rep (void)
*/
static void str_ascii (void)
{
- char *s = lua_check_string(1, "ascii");
- long pos = lua_opt_number(2, 1, "ascii") - 1;
- lua_arg_check(0<=pos && pos<strlen(s), "ascii");
+ char *s = luaL_check_string(1);
+ long pos = (long)luaL_opt_number(2, 1) - 1;
+ luaL_arg_check(0<=pos && pos<strlen(s), 2, "out of range");
lua_pushnumber((unsigned char)s[pos]);
}
@@ -195,23 +146,23 @@ static void str_ascii (void)
/* pattern matching */
#define ESC '%'
-#define SPECIALS "^$*?.([%"
+#define SPECIALS "^$*?.([%-"
static char *bracket_end (char *p)
{
return (*p == 0) ? NULL : strchr((*p=='^') ? p+2 : p+1, ']');
}
-char *item_end (char *p)
+char *luaL_item_end (char *p)
{
switch (*p++) {
case '\0': return p-1;
case ESC:
- if (*p == 0) lua_error("incorrect pattern");
+ if (*p == 0) luaL_verror("incorrect pattern (ends with `%c')", ESC);
return p+1;
case '[': {
char *end = bracket_end(p);
- if (end == NULL) lua_error("incorrect pattern");
+ if (end == NULL) lua_error("incorrect pattern (missing `]')");
return end+1;
}
default:
@@ -222,21 +173,21 @@ char *item_end (char *p)
static int matchclass (int c, int cl)
{
int res;
- switch (tolower(cl)) {
- case 'a' : res = isalpha(c); break;
- case 'c' : res = iscntrl(c); break;
- case 'd' : res = isdigit(c); break;
- case 'l' : res = islower(c); break;
- case 'p' : res = ispunct(c); break;
- case 's' : res = isspace(c); break;
- case 'u' : res = isupper(c); break;
- case 'w' : res = isalnum(c); break;
+ switch (tolower((unsigned char)cl)) {
+ case 'a' : res = isalpha((unsigned char)c); break;
+ case 'c' : res = iscntrl((unsigned char)c); break;
+ case 'd' : res = isdigit((unsigned char)c); break;
+ case 'l' : res = islower((unsigned char)c); break;
+ case 'p' : res = ispunct((unsigned char)c); break;
+ case 's' : res = isspace((unsigned char)c); break;
+ case 'u' : res = isupper((unsigned char)c); break;
+ case 'w' : res = isalnum((unsigned char)c); break;
default: return (cl == c);
}
- return (islower(cl) ? res : !res);
+ return (islower((unsigned char)cl) ? res : !res);
}
-int singlematch (int c, char *p)
+int luaL_singlematch (int c, char *p)
{
if (c == 0) return 0;
switch (*p) {
@@ -333,7 +284,7 @@ static char *match (char *s, char *p, int level)
return res;
}
case ESC:
- if (isdigit(*(p+1))) { /* capture */
+ if (isdigit((unsigned char)(*(p+1)))) { /* capture */
int l = check_cap(*(p+1), level);
if (strncmp(capture[l].init, s, capture[l].len) == 0) {
/* return match(p+2, s+capture[l].len, level); */
@@ -358,8 +309,8 @@ static char *match (char *s, char *p, int level)
}
else goto dflt;
default: dflt: { /* it is a pattern item */
- int m = singlematch(*s, p);
- char *ep = item_end(p); /* get what is next */
+ int m = luaL_singlematch(*s, p);
+ char *ep = luaL_item_end(p); /* get what is next */
switch (*ep) {
case '*': { /* repetition */
char *res;
@@ -367,6 +318,17 @@ static char *match (char *s, char *p, int level)
return res;
p=ep+1; goto init; /* else return match(s, ep+1, level); */
}
+ case '-': { /* repetition */
+ char *res;
+ if ((res = match(s, ep+1, level)) != 0)
+ return res;
+ else if (m) {
+ s++;
+ goto init; /* return match(s+1, p, level); */
+ }
+ else
+ return NULL;
+ }
case '?': { /* optional */
char *res;
if (m && (res = match(s+1, ep+1, level)))
@@ -383,10 +345,10 @@ static char *match (char *s, char *p, int level)
static void str_find (void)
{
- char *s = lua_check_string(1, "strfind");
- char *p = lua_check_string(2, "strfind");
- long init = lua_opt_number(3, 1, "strfind") - 1;
- lua_arg_check(0 <= init && init <= strlen(s), "strfind");
+ char *s = luaL_check_string(1);
+ char *p = luaL_check_string(2);
+ long init = (long)luaL_opt_number(3, 1) - 1;
+ luaL_arg_check(0 <= init && init <= strlen(s), 3, "out of range");
if (lua_getparam(4) != LUA_NOOBJECT ||
strpbrk(p, SPECIALS) == NULL) { /* no special caracters? */
char *s2 = strstr(s+init, p);
@@ -410,12 +372,12 @@ static void str_find (void)
}
}
-static void add_s (lua_Object newp)
+static void add_s (lua_Object newp, lua_Object table, int n)
{
if (lua_isstring(newp)) {
char *news = lua_getstring(newp);
while (*news) {
- if (*news != ESC || !isdigit(*++news))
+ if (*news != ESC || !isdigit((unsigned char)*++news))
luaI_addchar(*news++);
else {
int l = check_cap(*news++, num_captures);
@@ -426,41 +388,50 @@ static void add_s (lua_Object newp)
else if (lua_isfunction(newp)) {
lua_Object res;
struct lbuff oldbuff;
+ int status;
lua_beginblock();
+ if (lua_istable(table)) {
+ lua_pushobject(table);
+ lua_pushnumber(n);
+ }
push_captures();
/* function may use lbuffer, so save it and create a new one */
oldbuff = lbuffer;
lbuffer.b = NULL; lbuffer.max = lbuffer.size = 0;
- lua_callfunction(newp);
+ status = lua_callfunction(newp);
/* restore old buffer */
free(lbuffer.b);
lbuffer = oldbuff;
+ if (status != 0)
+ lua_error(NULL);
res = lua_getresult(1);
addstr(lua_isstring(res) ? lua_getstring(res) : "");
lua_endblock();
}
- else lua_arg_check(0, "gsub");
+ else luaL_arg_check(0, 3, NULL);
}
static void str_gsub (void)
{
- char *src = lua_check_string(1, "gsub");
- char *p = lua_check_string(2, "gsub");
+ char *src = luaL_check_string(1);
+ char *p = luaL_check_string(2);
lua_Object newp = lua_getparam(3);
- int max_s = lua_opt_number(4, strlen(src), "gsub");
+ lua_Object table = lua_getparam(4);
+ int max_s = (int)luaL_opt_number(lua_istable(table)?5:4, strlen(src)+1);
int anchor = (*p == '^') ? (p++, 1) : 0;
int n = 0;
- luaI_addchar(0);
- while (*src && n < max_s) {
- char *e;
- if ((e=match(src, p, 0)) == NULL)
- luaI_addchar(*src++);
- else {
- if (e == src) lua_error("empty pattern in substitution");
- add_s(newp);
- src = e;
+ luaI_emptybuff();
+ while (n < max_s) {
+ char *e = match(src, p, 0);
+ if (e) {
n++;
+ add_s(newp, table, n);
}
+ if (e && e>src) /* non empty match? */
+ src = e; /* skip it */
+ else if (*src)
+ luaI_addchar(*src++);
+ else break;
if (anchor) break;
}
addstr(src);
@@ -470,12 +441,12 @@ static void str_gsub (void)
static void str_set (void)
{
- char *item = lua_check_string(1, "strset");
+ char *item = luaL_check_string(1);
int i;
- lua_arg_check(*item_end(item) == 0, "strset");
- luaI_addchar(0);
+ luaL_arg_check(*luaL_item_end(item) == 0, 1, "wrong format");
+ luaI_emptybuff();
for (i=1; i<256; i++) /* 0 cannot be part of a set */
- if (singlematch(i, item))
+ if (luaL_singlematch(i, item))
luaI_addchar(i);
lua_pushstring(luaI_addchar(0));
}
@@ -497,8 +468,8 @@ void luaI_addquoted (char *s)
static void str_format (void)
{
int arg = 1;
- char *strfrmt = lua_check_string(arg++, "format");
- luaI_addchar(0); /* initialize */
+ char *strfrmt = luaL_check_string(arg++);
+ luaI_emptybuff(); /* initialize */
while (*strfrmt) {
if (*strfrmt != '%')
luaI_addchar(*strfrmt++);
@@ -510,26 +481,26 @@ static void str_format (void)
char *initf = strfrmt-1; /* -1 to include % */
strfrmt = match(strfrmt, "[-+ #]*(%d*)%.?(%d*)", 0);
if (capture[0].len > 3 || capture[1].len > 3) /* < 1000? */
- lua_error("invalid format (width/precision too long)");
+ lua_error("invalid format (width or precision too long)");
strncpy(form, initf, strfrmt-initf+1); /* +1 to include convertion */
form[strfrmt-initf+1] = 0;
buff = openspace(1000); /* to store the formated value */
switch (*strfrmt++) {
case 'q':
- luaI_addquoted(lua_check_string(arg++, "format"));
+ luaI_addquoted(luaL_check_string(arg++));
continue;
case 's': {
- char *s = lua_check_string(arg++, "format");
+ char *s = luaL_check_string(arg++);
buff = openspace(strlen(s));
sprintf(buff, form, s);
break;
}
case 'c': case 'd': case 'i': case 'o':
case 'u': case 'x': case 'X':
- sprintf(buff, form, (int)lua_check_number(arg++, "format"));
+ sprintf(buff, form, (int)luaL_check_number(arg++));
break;
case 'e': case 'E': case 'f': case 'g':
- sprintf(buff, form, lua_check_number(arg++, "format"));
+ sprintf(buff, form, luaL_check_number(arg++));
break;
default: /* also treat cases 'pnLlh' */
lua_error("invalid format option in function `format'");
@@ -541,16 +512,7 @@ static void str_format (void)
}
-void luaI_openlib (struct lua_reg *l, int n)
-{
- int i;
- for (i=0; i<n; i++)
- lua_register(l[i].name, l[i].func);
-}
-
-
-static struct lua_reg strlib[] = {
-{"strtok", str_tok},
+static struct luaL_reg strlib[] = {
{"strlen", str_len},
{"strsub", str_sub},
{"strset", str_set},
@@ -569,5 +531,5 @@ static struct lua_reg strlib[] = {
*/
void strlib_open (void)
{
- luaI_openlib(strlib, (sizeof(strlib)/sizeof(strlib[0])));
+ luaL_openlib(strlib, (sizeof(strlib)/sizeof(strlib[0])));
}
diff --git a/clients/lua/lua.c b/clients/lua/lua.c
index a6d558a2..afa2b560 100644
--- a/clients/lua/lua.c
+++ b/clients/lua/lua.c
@@ -3,12 +3,13 @@
** Linguagem para Usuarios de Aplicacao
*/
-char *rcs_lua="$Id: lua.c,v 1.14 1996/09/24 17:30:28 roberto Exp $";
+char *rcs_lua="$Id: lua.c,v 1.18 1997/06/19 18:55:40 roberto Exp $";
#include <stdio.h>
#include <string.h>
#include "lua.h"
+#include "auxlib.h"
#include "lualib.h"
@@ -19,6 +20,74 @@ char *rcs_lua="$Id: lua.c,v 1.14 1996/09/24 17:30:28 roberto Exp $";
#endif
+#define DEBUG 0
+
+static void testC (void)
+{
+#if DEBUG
+#define getnum(s) ((*s++) - '0')
+#define getname(s) (nome[0] = *s++, nome)
+
+ static int locks[10];
+ lua_Object reg[10];
+ char nome[2];
+ char *s = luaL_check_string(1);
+ nome[1] = 0;
+ while (1) {
+ switch (*s++) {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ lua_pushnumber(*(s-1) - '0');
+ break;
+
+ case 'c': reg[getnum(s)] = lua_createtable(); break;
+
+ case 'P': reg[getnum(s)] = lua_pop(); break;
+
+ case 'g': { int n = getnum(s); reg[n] = lua_getglobal(getname(s)); break; }
+
+ case 'G': { int n = getnum(s);
+ reg[n] = lua_rawgetglobal(getname(s));
+ break;
+ }
+
+ case 'l': locks[getnum(s)] = lua_ref(1); break;
+ case 'L': locks[getnum(s)] = lua_ref(0); break;
+
+ case 'r': { int n = getnum(s); reg[n] = lua_getref(locks[getnum(s)]); break; }
+
+ case 'u': lua_unref(locks[getnum(s)]); break;
+
+ case 'p': { int n = getnum(s); reg[n] = lua_getparam(getnum(s)); break; }
+
+ case '=': lua_setglobal(getname(s)); break;
+
+ case 's': lua_pushstring(getname(s)); break;
+
+ case 'o': lua_pushobject(reg[getnum(s)]); break;
+
+ case 'f': lua_call(getname(s)); break;
+
+ case 'i': reg[getnum(s)] = lua_gettable(); break;
+
+ case 'I': reg[getnum(s)] = lua_rawgettable(); break;
+
+ case 't': lua_settable(); break;
+
+ case 'T': lua_rawsettable(); break;
+
+ default: luaL_verror("unknown command in `testC': %c", *(s-1));
+
+ }
+ if (*s == 0) return;
+ if (*s++ != ' ') lua_error("missing ` ' between commands in `testC'");
+ }
+#else
+ lua_error("`testC' not active");
+#endif
+}
+
+
static void manual_input (void)
{
if (isatty(0)) {
@@ -41,6 +110,7 @@ int main (int argc, char *argv[])
iolib_open ();
strlib_open ();
mathlib_open ();
+ lua_register("testC", testC);
if (argc < 2)
manual_input();
else for (i=1; i<argc; i++) {
@@ -59,8 +129,8 @@ int main (int argc, char *argv[])
result = lua_dofile (argv[i]);
if (result) {
if (result == 2) {
- fprintf(stderr, "lua: cannot execute file `%s' - ", argv[i]);
- perror(NULL);
+ fprintf(stderr, "lua: cannot execute file ");
+ perror(argv[i]);
}
return 1;
}
diff --git a/config b/config
index 079e9066..4de15702 100644
--- a/config
+++ b/config
@@ -2,31 +2,31 @@
# you need an ANSI C compiler
CC= gcc
-WARN= -ansi -Wall # -Wmissing-prototypes -Wshadow
+WARN= -ansi -Wall
# for SGI's with cc
#CC= cc
#WARN= -ansi -fullwarn
# in SunOs 4.1.x, uncomment the following line to avoid prototypes warnings
-# for standard functions
+# for standard functions:
#EXTRA_INCS= -I/usr/5include
# if you don't have popen() in your C library, comment the following line:
POPEN= -DPOPEN
# if your C library is not POSIX compliant, comment the following line:
-POSIX= -DPOSIX
+POSIX= -D_POSIX_SOURCE
# if you don't have strerror() in your C library, uncomment the following line:
#NOSTRERROR= -DNOSTRERROR
-# if your system doesn't have ranlib, change "ranlib" to "true"
+# if your system doesn't have (or need) ranlib, change "ranlib" to "true":
RANLIB=ranlib
### NO NEED TO CHANGE ANYTHING BELOW THIS LINE ================================
-VERSION= 2.5
+VERSION= 3.0
INC= $(LUA)/include
LIB= $(LUA)/lib
diff --git a/doc/Makefile b/doc/Makefile
deleted file mode 100644
index b7eab0c6..00000000
--- a/doc/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-# makefile for lua distribution
-
-all:
- rm -f manual.id
- touch manual.id
- latex manual.tex
- latex manual.tex
- makeindex manual
- sort -df manual.idx | sed -e 's/_/\\_/g' >manual.id
- latex manual.tex
- dvips -o manual.ps manual.dvi
- gzip manual.ps
- mv manual.ps.gz refman.ps.gz
- rm -f manual.*
-
-clean:
- rm -f manual.tex
-
-co:
- co -f -M manual.tex luac.man
-
-klean: clean
- rm -f manual.tex manual.ps manual.dvi
diff --git a/doc/idx.html b/doc/idx.html
new file mode 100644
index 00000000..26fb74b2
--- /dev/null
+++ b/doc/idx.html
@@ -0,0 +1,241 @@
+<HTML>
+<HEAD>
+<TITLE>Lua 3.0 Reference Manual - Word Index</TITLE>
+</HEAD>
+
+<BODY>
+
+<H1>Index</H1>
+
+<A HREF="manual.html#..">..</A><BR>
+<A HREF="manual.html#abs">abs</A><BR>
+<A HREF="manual.html#acos">acos</A><BR>
+<A HREF="manual.html#add event">add event</A><BR>
+<A HREF="manual.html#Adjustment">Adjustment</A><BR>
+<A HREF="manual.html#and">and</A><BR>
+<A HREF="manual.html#appendto">appendto</A><BR>
+<A HREF="manual.html#arg">arg</A><BR>
+<A HREF="manual.html#arguments">arguments</A><BR>
+<A HREF="manual.html#arithmetic operators">arithmetic operators</A><BR>
+<A HREF="manual.html#arrays">arrays</A><BR>
+<A HREF="manual.html#ascii">ascii</A><BR>
+<A HREF="manual.html#asin">asin</A><BR>
+<A HREF="manual.html#assert">assert</A><BR>
+<A HREF="manual.html#Assignment">Assignment</A><BR>
+<A HREF="manual.html#associative arrays">associative arrays</A><BR>
+<A HREF="manual.html#atan2">atan2</A><BR>
+<A HREF="manual.html#atan">atan</A><BR>
+<A HREF="manual.html#basic types">basic types</A><BR>
+<A HREF="manual.html#block">block</A><BR>
+<A HREF="manual.html#C pointers">C pointers</A><BR>
+<A HREF="manual.html#C2lua">C2lua</A><BR>
+<A HREF="manual.html#call">call</A><BR>
+<A HREF="manual.html#captures">captures</A><BR>
+<A HREF="manual.html#ceil">ceil</A><BR>
+<A HREF="manual.html#character class">character class</A><BR>
+<A HREF="manual.html#chunk">chunk</A><BR>
+<A HREF="manual.html#closing a file">closing a file</A><BR>
+<A HREF="manual.html#Coercion">Coercion</A><BR>
+<A HREF="manual.html#collectgarbage">collectgarbage</A><BR>
+<A HREF="manual.html#Comments">Comments</A><BR>
+<A HREF="manual.html#concatenation event">concatenation event</A><BR>
+<A HREF="manual.html#concatenation">concatenation</A><BR>
+<A HREF="manual.html#condition expression">condition expression</A><BR>
+<A HREF="manual.html#constructors">constructors</A><BR>
+<A HREF="manual.html#cos">cos</A><BR>
+<A HREF="manual.html#date">date</A><BR>
+<A HREF="manual.html#debug pragma">debug pragma</A><BR>
+<A HREF="manual.html#div event">div event</A><BR>
+<A HREF="manual.html#dofile">dofile</A><BR>
+<A HREF="manual.html#dostring">dostring</A><BR>
+<A HREF="manual.html#error method">error method</A><BR>
+<A HREF="manual.html#error">error</A><BR>
+<A HREF="manual.html#event">event</A><BR>
+<A HREF="manual.html#execute">execute</A><BR>
+<A HREF="manual.html#exit">exit</A><BR>
+<A HREF="manual.html#exponentiation">exponentiation</A><BR>
+<A HREF="manual.html#Expressions">Expressions</A><BR>
+<A HREF="manual.html#file handles">file handles</A><BR>
+<A HREF="manual.html#floor">floor</A><BR>
+<A HREF="manual.html#format">format</A><BR>
+<A HREF="manual.html#function call">function call</A><BR>
+<A HREF="manual.html#Function Definitions">Function Definitions</A><BR>
+<A HREF="manual.html#function event">function event</A><BR>
+<A HREF="manual.html#function">function</A><BR>
+<A HREF="manual.html#gc event">gc event</A><BR>
+<A HREF="manual.html#ge event">ge event</A><BR>
+<A HREF="manual.html#getenv">getenv</A><BR>
+<A HREF="manual.html#getglobal event">getglobal event</A><BR>
+<A HREF="manual.html#getglobal">getglobal</A><BR>
+<A HREF="manual.html#gettable event">gettable event</A><BR>
+<A HREF="manual.html#gettagmethod">gettagmethod</A><BR>
+<A HREF="manual.html#gettagmethod">gettagmethod</A><BR>
+<A HREF="manual.html#global environment">global environment</A><BR>
+<A HREF="manual.html#Global variables">Global variables</A><BR>
+<A HREF="manual.html#gsub">gsub</A><BR>
+<A HREF="manual.html#gt event">gt event</A><BR>
+<A HREF="manual.html#Identifiers">Identifiers</A><BR>
+<A HREF="manual.html#if-then-else">if-then-else</A><BR>
+<A HREF="manual.html#index event">index event</A><BR>
+<A HREF="manual.html#_INPUT">_INPUT</A><BR>
+<A HREF="manual.html#le event">le event</A><BR>
+<A HREF="manual.html#Literal strings">Literal strings</A><BR>
+<A HREF="manual.html#Local variables">Local variables</A><BR>
+<A HREF="manual.html#log10">log10</A><BR>
+<A HREF="manual.html#log">log</A><BR>
+<A HREF="manual.html#logical operators">logical operators</A><BR>
+<A HREF="manual.html#lt event">lt event</A><BR>
+<A HREF="manual.html#Lua Stand-alone">Lua Stand-alone</A><BR>
+<A HREF="manual.html#lua2C">lua2C</A><BR>
+<A HREF="manual.html#LUA_ANYTAG">LUA_ANYTAG</A><BR>
+<A HREF="manual.html#luac">luac</A><BR>
+<A HREF="manual.html#luac">luac</A><BR>
+<A HREF="manual.html#lua_callfunction">lua_callfunction</A><BR>
+<A HREF="manual.html#lua_CFunction">lua_CFunction</A><BR>
+<A HREF="manual.html#lua_collectgarbage">lua_collectgarbage</A><BR>
+<A HREF="manual.html#lua_createtable">lua_createtable</A><BR>
+<A HREF="manual.html#lua_dofile">lua_dofile</A><BR>
+<A HREF="manual.html#lua_dostring">lua_dostring</A><BR>
+<A HREF="manual.html#lua_error">lua_error</A><BR>
+<A HREF="manual.html#lua_getcfunction">lua_getcfunction</A><BR>
+<A HREF="manual.html#lua_getglobal">lua_getglobal</A><BR>
+<A HREF="manual.html#lua_getnumber">lua_getnumber</A><BR>
+<A HREF="manual.html#lua_getparam">lua_getparam</A><BR>
+<A HREF="manual.html#lua_getref">lua_getref</A><BR>
+<A HREF="manual.html#lua_getresult">lua_getresult</A><BR>
+<A HREF="manual.html#lua_getstring">lua_getstring</A><BR>
+<A HREF="manual.html#lua_gettable">lua_gettable</A><BR>
+<A HREF="manual.html#lua_gettagmethod">lua_gettagmethod</A><BR>
+<A HREF="manual.html#lua_getuserdata">lua_getuserdata</A><BR>
+<A HREF="manual.html#lua_iscfunction">lua_iscfunction</A><BR>
+<A HREF="manual.html#lua_isfunction">lua_isfunction</A><BR>
+<A HREF="manual.html#lua_isnil">lua_isnil</A><BR>
+<A HREF="manual.html#lua_isnumber">lua_isnumber</A><BR>
+<A HREF="manual.html#lua_isstring">lua_isstring</A><BR>
+<A HREF="manual.html#lua_istable">lua_istable</A><BR>
+<A HREF="manual.html#lua_isuserdata">lua_isuserdata</A><BR>
+<A HREF="manual.html#lua_lua2C">lua_lua2C</A><BR>
+<A HREF="manual.html#lua_newtag">lua_newtag</A><BR>
+<A HREF="manual.html#LUA_NOOBJECT">LUA_NOOBJECT</A><BR>
+<A HREF="manual.html#lua_Object">lua_Object</A><BR>
+<A HREF="manual.html#lua_pop">lua_pop</A><BR>
+<A HREF="manual.html#lua_pushcfunction">lua_pushcfunction</A><BR>
+<A HREF="manual.html#lua_pushnil">lua_pushnil</A><BR>
+<A HREF="manual.html#lua_pushnumber">lua_pushnumber</A><BR>
+<A HREF="manual.html#lua_pushobject">lua_pushobject</A><BR>
+<A HREF="manual.html#lua_pushstring">lua_pushstring</A><BR>
+<A HREF="manual.html#lua_pushuserdata">lua_pushuserdata</A><BR>
+<A HREF="manual.html#lua_pushusertag">lua_pushusertag</A><BR>
+<A HREF="manual.html#lua_rawgetglobal">lua_rawgetglobal</A><BR>
+<A HREF="manual.html#lua_rawgetglobal">lua_rawgetglobal</A><BR>
+<A HREF="manual.html#lua_rawgetglobal">lua_rawgetglobal</A><BR>
+<A HREF="manual.html#lua_rawsettable">lua_rawsettable</A><BR>
+<A HREF="manual.html#lua_ref">lua_ref</A><BR>
+<A HREF="manual.html#lua_register">lua_register</A><BR>
+<A HREF="manual.html#lua_seterrormethod">lua_seterrormethod</A><BR>
+<A HREF="manual.html#lua_setglobal">lua_setglobal</A><BR>
+<A HREF="manual.html#lua_settable">lua_settable</A><BR>
+<A HREF="manual.html#lua_settag">lua_settag</A><BR>
+<A HREF="manual.html#lua_settagmethod">lua_settagmethod</A><BR>
+<A HREF="manual.html#lua_tag">lua_tag</A><BR>
+<A HREF="manual.html#lua_unref">lua_unref</A><BR>
+<A HREF="manual.html#max">max</A><BR>
+<A HREF="manual.html#methods">methods</A><BR>
+<A HREF="manual.html#min">min</A><BR>
+<A HREF="manual.html#mod">mod</A><BR>
+<A HREF="manual.html#mul event">mul event</A><BR>
+<A HREF="manual.html#multiple assignment">multiple assignment</A><BR>
+<A HREF="manual.html#newtag">newtag</A><BR>
+<A HREF="manual.html#next">next</A><BR>
+<A HREF="manual.html#nextvar">nextvar</A><BR>
+<A HREF="manual.html#nil">nil</A><BR>
+<A HREF="manual.html#not">not</A><BR>
+<A HREF="manual.html#number">number</A><BR>
+<A HREF="manual.html#Numerical constants">Numerical constants</A><BR>
+<A HREF="manual.html#Operator precedence">Operator precedence</A><BR>
+<A HREF="manual.html#or">or</A><BR>
+<A HREF="manual.html#_OUTPUT">_OUTPUT</A><BR>
+<A HREF="manual.html#packed results">packed results</A><BR>
+<A HREF="manual.html#pattern item">pattern item</A><BR>
+<A HREF="manual.html#pattern">pattern</A><BR>
+<A HREF="manual.html#piped input">piped input</A><BR>
+<A HREF="manual.html#piped output">piped output</A><BR>
+<A HREF="manual.html#popen">popen</A><BR>
+<A HREF="manual.html#popen">popen</A><BR>
+<A HREF="manual.html#pow event">pow event</A><BR>
+<A HREF="manual.html#pre-compilation">pre-compilation</A><BR>
+<A HREF="manual.html#predefined functions">predefined functions</A><BR>
+<A HREF="manual.html#Pre-processor">Pre-processor</A><BR>
+<A HREF="manual.html#print">print</A><BR>
+<A HREF="manual.html#random">random</A><BR>
+<A HREF="manual.html#randomseed">randomseed</A><BR>
+<A HREF="manual.html#rawgetglobal">rawgetglobal</A><BR>
+<A HREF="manual.html#rawgettable">rawgettable</A><BR>
+<A HREF="manual.html#rawsetglobal">rawsetglobal</A><BR>
+<A HREF="manual.html#rawsettable">rawsettable</A><BR>
+<A HREF="manual.html#read pattern">read pattern</A><BR>
+<A HREF="manual.html#read">read</A><BR>
+<A HREF="manual.html#readfrom">readfrom</A><BR>
+<A HREF="manual.html#records">records</A><BR>
+<A HREF="manual.html#reference">reference</A><BR>
+<A HREF="manual.html#reflexivity">reflexivity</A><BR>
+<A HREF="manual.html#relational operators">relational operators</A><BR>
+<A HREF="manual.html#remove">remove</A><BR>
+<A HREF="manual.html#rename">rename</A><BR>
+<A HREF="manual.html#repeat-until">repeat-until</A><BR>
+<A HREF="manual.html#reserved words">reserved words</A><BR>
+<A HREF="manual.html#return statement">return statement</A><BR>
+<A HREF="manual.html#return">return</A><BR>
+<A HREF="manual.html#self">self</A><BR>
+<A HREF="manual.html#setglobal event">setglobal event</A><BR>
+<A HREF="manual.html#setglobal">setglobal</A><BR>
+<A HREF="manual.html#settable event">settable event</A><BR>
+<A HREF="manual.html#settag">settag</A><BR>
+<A HREF="manual.html#settagmethod">settagmethod</A><BR>
+<A HREF="manual.html#settagmethod">settagmethod</A><BR>
+<A HREF="manual.html#short-cut evaluation">short-cut evaluation</A><BR>
+<A HREF="manual.html#Simple Expressions">Simple Expressions</A><BR>
+<A HREF="manual.html#sin">sin</A><BR>
+<A HREF="manual.html#skips">skips</A><BR>
+<A HREF="manual.html#sqrt">sqrt</A><BR>
+<A HREF="manual.html#statements">statements</A><BR>
+<A HREF="manual.html#_STDERR">_STDERR</A><BR>
+<A HREF="manual.html#_STDIN">_STDIN</A><BR>
+<A HREF="manual.html#_STDOUT">_STDOUT</A><BR>
+<A HREF="manual.html#strfind">strfind</A><BR>
+<A HREF="manual.html#string">string</A><BR>
+<A HREF="manual.html#strlen">strlen</A><BR>
+<A HREF="manual.html#strlower">strlower</A><BR>
+<A HREF="manual.html#strrep">strrep</A><BR>
+<A HREF="manual.html#strsub">strsub</A><BR>
+<A HREF="manual.html#strupper">strupper</A><BR>
+<A HREF="manual.html#sub event">sub event</A><BR>
+<A HREF="manual.html#table">table</A><BR>
+<A HREF="manual.html#Tag Methods">Tag Methods</A><BR>
+<A HREF="manual.html#tag">tag</A><BR>
+<A HREF="manual.html#tag">tag</A><BR>
+<A HREF="manual.html#tan">tan</A><BR>
+<A HREF="manual.html#tmpname">tmpname</A><BR>
+<A HREF="manual.html#tokens">tokens</A><BR>
+<A HREF="manual.html#tonumber">tonumber</A><BR>
+<A HREF="manual.html#tostring">tostring</A><BR>
+<A HREF="manual.html#type">type</A><BR>
+<A HREF="manual.html#Types and Tags">Types and Tags</A><BR>
+<A HREF="manual.html#unm event">unm event</A><BR>
+<A HREF="manual.html#userdata">userdata</A><BR>
+<A HREF="manual.html#vararg">vararg</A><BR>
+<A HREF="manual.html#version 1.1">version 1.1</A><BR>
+<A HREF="manual.html#version 2.1">version 2.1</A><BR>
+<A HREF="manual.html#version 2.2">version 2.2</A><BR>
+<A HREF="manual.html#version 2.4">version 2.4</A><BR>
+<A HREF="manual.html#version 2.5">version 2.5</A><BR>
+<A HREF="manual.html#while-do">while-do</A><BR>
+<A HREF="manual.html#write">write</A><BR>
+<A HREF="manual.html#writeto">writeto</A><BR>
+
+<HR>
+Last update:
+Tue Jul 1 07:55:45 EST 1997
+by <A HREF="http://www.tecgraf.puc-rio.br/~lhf/">lhf</A>.
+</BODY>
+</HTML>
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 00000000..5ce16c44
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,85 @@
+<HTML>
+<HEAD>
+<TITLE>Lua 3.0 Reference Manual - Index</TITLE>
+</HEAD>
+
+<BODY>
+
+<H1>Reference Manual of the Programming Language Lua 3.0</H1>
+<P>
+<A HREF="http://www.inf.puc-rio.br/~roberto/">Roberto Ierusalimschy</A>,
+<A HREF="http://www2.lncc.br/~lhf/">Luiz Henrique de Figueiredo</A>,
+<A HREF="http://www.graphics.cornell.edu/~celes/">Waldemar Celes</A>
+<BR>
+<A HREF="mailto:lua@tecgraf.puc-rio.br">lua@tecgraf.puc-rio.br</A><BR>
+<A HREF="http://www.tecgraf.puc-rio.br">TeCGraf</A>,
+<A HREF="http://www.inf.puc-rio.br">Computer Science Department</A>,
+<A HREF="http://www.puc-rio.br">PUC-Rio</A>
+<P>
+
+<HR>
+<B>Abstract.</B>
+Lua is an extension programming language designed to be used
+as a configuration language for any program that needs one.
+This document describes version 3.0 of the Lua programming language and
+the API that allows interaction between Lua programs and their host C programs.
+<HR>
+
+<B>Sumário.</B>
+Lua é uma linguagem de extensão projetada para ser usada como
+linguagem de configuração em qualquer programa que precise de uma.
+Este documento descreve a versão 3.0 da linguagem de
+programação Lua e a Interface de Programação (API) que permite
+a interação entre programas Lua e programas C hospedeiros.
+<HR>
+<A NAME="index"></A>
+<UL>
+<LI><A HREF="manual.html#1.">1 - Introduction</A>
+<LI><A HREF="manual.html#2.">2 - Environment and Chunks</A>
+<LI><A HREF="manual.html#3.">3 - Types and Tags</A>
+<LI><A HREF="manual.html#4.">4 - The Language</A>
+ <UL>
+ <LI><A HREF="manual.html#4.1">4.1 - Lexical Conventions</A>
+ <LI><A HREF="manual.html#4.2">4.2 - The Pre-processor</A>
+ <LI><A HREF="manual.html#4.3">4.3 - Coercion</A>
+ <LI><A HREF="manual.html#4.4">4.4 - Adjustment</A>
+ <LI><A HREF="manual.html#4.5">4.5 - Statements</A>
+ <LI><A HREF="manual.html#4.6">4.6 - Expressions</A>
+ <LI><A HREF="manual.html#4.7">4.7 - Function Definitions</A>
+ <LI><A HREF="manual.html#4.8">4.8 - Tag Methods</A>
+ <LI><A HREF="manual.html#4.9">4.9 - Error Handling</A>
+ </UL>
+<LI><A HREF="manual.html#5.">5 - The Application Program Interface</A>
+ <UL>
+ <LI><A HREF="manual.html#5.1">5.1 - Exchanging Values between C and Lua</A>
+ <LI><A HREF="manual.html#5.2">5.2 - Executing Lua Code</A>
+ <LI><A HREF="manual.html#5.3">5.3 - Manipulating Lua Objects</A>
+ <LI><A HREF="manual.html#5.4">5.4 - Calling Lua Functions</A>
+ <LI><A HREF="manual.html#5.5">5.5 - C Functions</A>
+ <LI><A HREF="manual.html#5.6">5.6 - References to Lua Objects</A>
+ </UL>
+<LI><A HREF="manual.html#6.">6 - Predefined Functions and Libraries</A>
+ <UL>
+ <LI><A HREF="manual.html#6.1">6.1 - Predefined Functions</A>
+ <LI><A HREF="manual.html#6.2">6.2 - String Manipulation</A>
+ <LI><A HREF="manual.html#6.3">6.3 - Mathematical Functions</A>
+ <LI><A HREF="manual.html#6.4">6.4 - I/O Facilities</A>
+ </UL>
+<LI><A HREF="manual.html#7.">7 - The Debugger Interface</A>
+ <UL>
+ <LI><A HREF="manual.html#7.1">7.1 - Stack and Function Information</A>
+ <LI><A HREF="manual.html#7.2">7.2 - Manipulating Local Variables</A>
+ <LI><A HREF="manual.html#7.3">7.3 - Hooks</A>
+ </UL>
+<LI><A HREF="manual.html#8.">8 - Lua Stand-alone</A>
+<LI><A HREF="manual.html#Acknowledgments">Acknowledgments</A>
+<LI><A HREF="manual.html#Incompatibilities">Incompatibilities with Previous Versions</A>
+<LI><A HREF="idx.html">Index</A>
+</UL>
+
+<HR>
+Last update:
+Tue Jul 1 07:55:45 EST 1997
+by <A HREF="http://www.tecgraf.puc-rio.br/~lhf/">lhf</A>.
+</BODY>
+</HTML>
diff --git a/doc/luac.html b/doc/luac.html
new file mode 100644
index 00000000..7d43ff1d
--- /dev/null
+++ b/doc/luac.html
@@ -0,0 +1,88 @@
+<!-- manual page source format generated by RosettaMan, -->
+<!-- available via anonymous ftp from ftp.cs.berkeley.edu:/ucb/people/phelps/tcltk/rman.tar.Z -->
+<HTML>
+<HEADER>
+<TITLE>luac manual page</TITLE>
+</HEADER>
+<BODY>
+<A HREF="#toc">Table of Contents</A><P>
+
+<A NAME="sect0" HREF="#toc0"><H2>NAME</H2></A>
+luac - Lua compiler<P>
+
+<A NAME="sect1" HREF="#toc1"><H2>SYNOPSIS</H2></A>
+luac [ -c | -u ] [ -d ] [ -l ] [ -p ] [ -q ] [ -v ] [ -o <I>outputfile</I> ] <I>sourcefile</I> ...<P>
+
+<A NAME="sect2" HREF="#toc2"><H2>DESCRIPTION</H2></A>
+luac is the Lua compiler. It translates programs written in the Lua programming language into binary files that can be loaded and executed with lua_dofile in C or dofile in Lua.<P>
+luac produces a single output file containing the bytecode for all named source files. By default, the output file is named luac.out, but you can change this with the -o option.<P>
+You can use &quot;-&quot; to indicate stdin as a source file.<P>
+luac can also load and list binary files.<P>
+
+<A NAME="sect3" HREF="#toc3"><H2>OPTIONS</H2></A>
+<dl>
+<dt>-c <dd> compile (this is the default).<P>
+</dd>
+</dl>
+<dl>
+<dt>-u <dd> undump.<P>
+</dd>
+</dl>
+<dl>
+<dt>-d <dd> turns debugging on.<P>
+</dd>
+</dl>
+<dl>
+<dt>-l <dd> produces a listing of the compiled bytecode for Lua's virtual machine. This is the default when undumping.<P>
+</dd>
+</dl>
+<dl>
+<dt>-p <dd> parses sources files but does not generate any output file.<P>
+</dd>
+</dl>
+<dl>
+<dt>-q <dd> quiet; procudes no listing. This is the default when compiling.<P>
+</dd>
+</dl>
+<dl>
+<dt>-v <dd> prints version information.<P>
+</dd>
+</dl>
+<dl>
+<dt>-o <I>outputfile</I><dd> Name the output file <I>output</I>, instead of the default luac.out. The output file cannot be a source file.<P>
+</dd>
+</dl>
+
+<A NAME="sect4" HREF="#toc4"><H2>FILES</H2></A>
+<dl>
+<dt>luac.out <dd> default output file<P>
+</dd>
+</dl>
+
+<A NAME="sect5" HREF="#toc5"><H2>SEE ALSO</H2></A>
+<A HREF="http://localhost/cgi-bin/man2html?lua?1">lua(1)</A><P>
+<I>Reference</I> <I>Manual</I> <I>of</I> <I>the</I> <I>Programming</I> <I>Language</I> <I>Lua</I><P>
+
+<A NAME="sect6" HREF="#toc6"><H2>DIAGNOSTICS</H2></A>
+Error messages should be self explanatory.<P>
+
+<A NAME="sect7" HREF="#toc7"><H2>BUGS</H2></A>
+Inherits any bugs from Lua, but Lua has no bugs...<P>
+
+<A NAME="sect8" HREF="#toc8"><H2>AUTHORS</H2></A>
+W. Celes, R. Ierusalimschy &amp; L. H. de Figueiredo (lua@tecgraf.puc-rio.br)<P>
+
+<HR><P>
+<A NAME="toc"><B>Table of Contents</B></A><P>
+<UL>
+<LI><A NAME="toc0" HREF="#sect0">NAME</A></LI>
+<LI><A NAME="toc1" HREF="#sect1">SYNOPSIS</A></LI>
+<LI><A NAME="toc2" HREF="#sect2">DESCRIPTION</A></LI>
+<LI><A NAME="toc3" HREF="#sect3">OPTIONS</A></LI>
+<LI><A NAME="toc4" HREF="#sect4">FILES</A></LI>
+<LI><A NAME="toc5" HREF="#sect5">SEE ALSO</A></LI>
+<LI><A NAME="toc6" HREF="#sect6">DIAGNOSTICS</A></LI>
+<LI><A NAME="toc7" HREF="#sect7">BUGS</A></LI>
+<LI><A NAME="toc8" HREF="#sect8">AUTHORS</A></LI>
+</UL>
+</BODY></HTML>
diff --git a/doc/luac.man b/doc/luac.man
deleted file mode 100644
index e64e570f..00000000
--- a/doc/luac.man
+++ /dev/null
@@ -1,75 +0,0 @@
-.\" $Id: luac.man,v 1.3 1996/03/28 20:24:55 lhf Exp $
-.TH LUAC 1 "12 March 1996"
-.SH NAME
-luac \- Lua compiler
-.SH SYNOPSIS
-.B luac
-[
-.B \-dlpv
-]
-[
-.B \-o
-.I outputfile
-]
-.I sourcefile
-\&.\|.\|.
-.SH DESCRIPTION
-.B luac
-is the Lua compiler.
-It translates programs written in the Lua programming language
-into binary files that can be loaded and executed with
-.B lua_dofile
-in C or
-.B dofile
-in Lua.
-
-.BR luac
-produces a single output file containing the bytecode
-for all named source files.
-By default,
-the output file is named
-.BR luac.out ,
-but you can change this with the
-.B \-o
-option.
-
-You can use "-" to indicate stdin as a source file.
-.SH OPTIONS
-.LP
-.TP 1i
-.B \-d
-turns debugging on.
-.TP
-.B \-l
-produces a listing of the compiled bytecode for Lua's virtual machine.
-.TP
-.B \-p
-parses sources files but does not generate any output file.
-.TP
-.B \-v
-prints version information.
-.TP
-.BI \-o " outputfile"
-Name the output file
-.IR output ,
-instead of the default
-.BR luac.out .
-The output file cannot be a source file.
-.SH FILES
-.PD 0
-.TP 20
-.B luac.out
-default output file
-.PD
-.SH "SEE ALSO"
-.BR lua (1)
-.LP
-.IR "Reference Manual of the Programming Language Lua"
-.SH DIAGNOSTICS
-Error messages should be self explanatory.
-.SH BUGS
-Inherits any bugs from Lua,
-but Lua has no bugs...
-.SH AUTHORS
-W. Celes, R. Ierusalimschy & L. H. de Figueiredo
-(lua@icad.puc-rio.br)
diff --git a/doc/luac.ps b/doc/luac.ps
deleted file mode 100644
index c701ac29..00000000
--- a/doc/luac.ps
+++ /dev/null
@@ -1,246 +0,0 @@
-%!PS-Adobe-3.0
-%%Creator: groff version 1.09
-%%CreationDate: Fri Mar 29 10:45:53 1996
-%%DocumentNeededResources: font Times-Roman
-%%+ font Times-Bold
-%%+ font Times-Italic
-%%DocumentSuppliedResources: procset grops 1.09 0
-%%Pages: 1
-%%PageOrder: Ascend
-%%Orientation: Portrait
-%%EndComments
-%%BeginProlog
-%%BeginResource: procset grops 1.09 0
-/setpacking where{
-pop
-currentpacking
-true setpacking
-}if
-/grops 120 dict dup begin
-/SC 32 def
-/A/show load def
-/B{0 SC 3 -1 roll widthshow}bind def
-/C{0 exch ashow}bind def
-/D{0 exch 0 SC 5 2 roll awidthshow}bind def
-/E{0 rmoveto show}bind def
-/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
-/G{0 rmoveto 0 exch ashow}bind def
-/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/I{0 exch rmoveto show}bind def
-/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
-/K{0 exch rmoveto 0 exch ashow}bind def
-/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/M{rmoveto show}bind def
-/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
-/O{rmoveto 0 exch ashow}bind def
-/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/Q{moveto show}bind def
-/R{moveto 0 SC 3 -1 roll widthshow}bind def
-/S{moveto 0 exch ashow}bind def
-/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
-/SF{
-findfont exch
-[exch dup 0 exch 0 exch neg 0 0]makefont
-dup setfont
-[exch/setfont cvx]cvx bind def
-}bind def
-/MF{
-findfont
-[5 2 roll
-0 3 1 roll
-neg 0 0]makefont
-dup setfont
-[exch/setfont cvx]cvx bind def
-}bind def
-/level0 0 def
-/RES 0 def
-/PL 0 def
-/LS 0 def
-/PLG{
-gsave newpath clippath pathbbox grestore
-exch pop add exch pop
-}bind def
-/BP{
-/level0 save def
-1 setlinecap
-1 setlinejoin
-72 RES div dup scale
-LS{
-90 rotate
-}{
-0 PL translate
-}ifelse
-1 -1 scale
-}bind def
-/EP{
-level0 restore
-showpage
-}bind def
-/DA{
-newpath arcn stroke
-}bind def
-/SN{
-transform
-.25 sub exch .25 sub exch
-round .25 add exch round .25 add exch
-itransform
-}bind def
-/DL{
-SN
-moveto
-SN
-lineto stroke
-}bind def
-/DC{
-newpath 0 360 arc closepath
-}bind def
-/TM matrix def
-/DE{
-TM currentmatrix pop
-translate scale newpath 0 0 .5 0 360 arc closepath
-TM setmatrix
-}bind def
-/RC/rcurveto load def
-/RL/rlineto load def
-/ST/stroke load def
-/MT/moveto load def
-/CL/closepath load def
-/FL{
-currentgray exch setgray fill setgray
-}bind def
-/BL/fill load def
-/LW/setlinewidth load def
-/RE{
-findfont
-dup maxlength 1 index/FontName known not{1 add}if dict begin
-{
-1 index/FID ne{def}{ pop pop}ifelse
-}forall
-/Encoding exch def
-dup/FontName exch def
-currentdict end definefont pop
-}bind def
-/DEFS 0 def
-/EBEGIN{
-moveto
-DEFS begin
-}bind def
-/EEND/end load def
-/CNT 0 def
-/level1 0 def
-/PBEGIN{
-/level1 save def
-translate
-div 3 1 roll div exch scale
-neg exch neg exch translate
-0 setgray
-0 setlinecap
-1 setlinewidth
-0 setlinejoin
-10 setmiterlimit
-[] 0 setdash
-/setstrokeadjust where{
-pop
-false setstrokeadjust
-}if
-/setoverprint where{
-pop
-false setoverprint
-}if
-newpath
-/CNT countdictstack def
-userdict begin
-/showpage{} def
-}bind def
-/PEND{
-clear
-countdictstack CNT sub{end}repeat
-level1 restore
-}bind def
-end def
-/setpacking where{
-pop
-setpacking
-}if
-%%EndResource
-%%IncludeResource: font Times-Roman
-%%IncludeResource: font Times-Bold
-%%IncludeResource: font Times-Italic
-grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
-def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
-/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
-/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
-/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
-/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
-/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
-/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
-/semicolon/less/equal/greater/question/at/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/bracketleft/backslash/bracketright/circumflex
-/underscore/quoteleft/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/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
-/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
-/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
-/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
-/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
-/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
-/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
-/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
-/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
-/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
-/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
-/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
-/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
-/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
-/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
-/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
-/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
-/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
-/Times-Roman@0 ENC0/Times-Roman RE
-%%EndProlog
-%%Page: 1 1
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF(LU)72 48 Q -.034 -.4(AC \( 1 \))-.4 H
-(User Commands)157.852 E(LU)157.452 E -.034 -.4(AC \( 1 \))-.4 H/F1 9
-/Times-Bold@0 SF -.18(NA)72 96 S(ME).18 E F0(luac \255 Lua compiler)108
-108 Q F1(SYNOPSIS)72 124.8 Q/F2 10/Times-Bold@0 SF(luac)108 136.8 Q F0
-([)3.75 E F2(\255dlpv)3.75 E F0 3.75(][)3.75 G F2<ad6f>A/F3 10
-/Times-Italic@0 SF(output\214le)3.75 E F0(])3.75 E F3(sour)3.75 E
-(ce\214le)-.37 E F0 1.666(...)3.75 G F1(DESCRIPTION)72 153.6 Q F2(luac)
-108 165.6 Q F0 .371(is the Lua compiler)2.871 F 5.371(.I)-.55 G 2.871
-(tt)-5.371 G .37(ranslates programs written in the Lua programming lang\
-uage into binary \214les)-2.871 F(that can be loaded and e)108 177.6 Q
--.15(xe)-.15 G(cuted with).15 E F2(lua_do\214le)2.5 E F0(in C or)2.5 E
-F2(do\214le)2.5 E F0(in Lua.)2.5 E F2(luac)108 201.6 Q F0 .159(produces\
- a single output \214le containing the bytecode for all named source \
-\214les.)2.658 F .159(By def)5.159 F .159(ault, the output)-.1 F
-(\214le is named)108 213.6 Q F2(luac.out)2.5 E F0 2.5(,b)C
-(ut you can change this with the)-2.7 E F2<ad6f>2.5 E F0(option.)2.5 E
--1.1(Yo)108 237.6 S 2.5(uc)1.1 G
-(an use "-" to indicate stdin as a source \214le.)-2.5 E F1(OPTIONS)72
-254.4 Q F2<ad64>108 266.4 Q F0(turns deb)60.74 E(ugging on.)-.2 E F2
-<ad6c>108 283.2 Q F0
-(produces a listing of the compiled bytecode for Lua')63.52 E 2.5(sv)
--.55 G(irtual machine.)-2.5 E F2<ad70>108 300 Q F0
-(parses sources \214les b)60.74 E(ut does not generate an)-.2 E 2.5(yo)
--.15 G(utput \214le.)-2.5 E F2<ad76>108 316.8 Q F0(prints v)61.3 E
-(ersion information.)-.15 E F2<ad6f>108 333.6 Q F3(output\214le)2.5 E F0
-.657(Name the output \214le)21.02 F F3(output)3.157 E F0 3.157(,i)C .657
-(nstead of the def)-3.157 F(ault)-.1 E F2(luac.out)3.157 E F0 5.657(.T)C
-.656(he output \214le cannot be a)-5.657 F(source \214le.)180 345.6 Q F1
-(FILES)72 362.4 Q F2(luac.out)108 374.4 Q F0(def)65.83 E
-(ault output \214le)-.1 E F1(SEE ALSO)72 391.2 Q F2(lua)108 403.2 Q F0
-(\(1\))A F3(Refer)108 420 Q(ence Manual of the Pr)-.37 E -.1(og)-.45 G
--.15(ra).1 G(mming Langua).15 E .2 -.1(ge L)-.1 H(ua).1 E F1(DIA)72
-436.8 Q(GNOSTICS)-.495 E F0(Error messages should be self e)108 448.8 Q
-(xplanatory)-.15 E(.)-.65 E F1 -.09(BU)72 465.6 S(GS).09 E F0
-(Inherits an)108 477.6 Q 2.5(yb)-.15 G(ugs from Lua, b)-2.7 E
-(ut Lua has no b)-.2 E(ugs...)-.2 E F1 -.45(AU)72 494.4 S(THORS).45 E F0
-1.84 -.92(W. C)108 506.4 T(eles, R. Ierusalimsch).92 E 2.5(y&L)-.05 G
-2.5(.H)-2.5 G 2.5(.d)-2.5 G 2.5(eF)-2.5 G
-(igueiredo \(lua@icad.puc-rio.br\))-2.5 E(29 March 1996)72 768 Q
-(12 March 1996)142.35 E(1)198.45 E EP
-%%Trailer
-end
-%%EOF
diff --git a/doc/luac.txt b/doc/luac.txt
deleted file mode 100644
index d1989530..00000000
--- a/doc/luac.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-LUAC(1) User Commands LUAC(1)
-
-
-
-NAME
- luac - Lua compiler
-
-SYNOPSIS
- luac [ -dlpv ] [ -o outputfile ] sourcefile ...
-
-DESCRIPTION
- luac is the Lua compiler. It translates programs written in
- the Lua programming language into binary files that can be
- loaded and executed with lua_dofile in C or dofile in Lua.
-
- luac produces a single output file containing the bytecode
- for all named source files. By default, the output file is
- named luac.out, but you can change this with the -o option.
-
- You can use "-" to indicate stdin as a source file.
-
-OPTIONS
- -d turns debugging on.
-
- -l produces a listing of the compiled bytecode for
- Lua's virtual machine.
-
- -p parses sources files but does not generate any
- output file.
-
- -v prints version information.
-
- -o outputfile
- Name the output file output, instead of the
- default luac.out. The output file cannot be a
- source file.
-
-FILES
- luac.out default output file
-
-SEE ALSO
- lua(1)
-
- Reference Manual of the Programming Language Lua
-
-DIAGNOSTICS
- Error messages should be self explanatory.
-
-BUGS
- Inherits any bugs from Lua, but Lua has no bugs...
-
-AUTHORS
- W. Celes, R. Ierusalimschy & L. H. de Figueiredo
- (lua@icad.puc-rio.br)
-
-
-
-
-
-Formatted 96/03/29 12 March 1996 1
-
-
-
diff --git a/doc/manual.html b/doc/manual.html
new file mode 100644
index 00000000..0c3f531c
--- /dev/null
+++ b/doc/manual.html
@@ -0,0 +1,2545 @@
+<HEAD>
+<TITLE>Lua 3.0 Reference Manual</TITLE>
+</HEAD>
+<BODY>
+<h1>Lua 3.0 Reference Manual</h1>
+
+<!-- ====================================================================== -->
+<HR>
+<A NAME="1."></A>
+<H1>1 - Introduction</H1>
+<P>
+Lua is an extension programming language designed to support
+general procedural programming with data description
+facilities.
+It is intended to be used as a light-weight, but powerful,
+configuration language for any program that needs one.
+Lua has been designed and implemented by
+W.&nbsp;Celes,
+R.&nbsp;Ierusalimschy and
+L.&nbsp;H.&nbsp;de Figueiredo.
+<P>
+Lua is implemented as a library, written in C.
+Being an extension language, Lua has no notion of a ``main'' program:
+it only works <EM>embedded</EM> in a host client,
+called the <EM>embedding</EM> program.
+This host program can invoke functions to execute a piece of
+code in Lua, can write and read Lua variables,
+and can register C functions to be called by Lua code.
+Through the use of C functions, Lua can be augmented to cope with
+a wide range of different domains,
+thus creating customized programming languages sharing a syntactical framework.
+<P>
+Lua is free-distribution software,
+and provided as usual with no guarantees,
+as stated in the copyright notice in the front page of this manual.
+The implementation described in this manual is available
+at the following URL's:
+<LISTING>
+ <A HREF="http://www.tecgraf.puc-rio.br/lua/">http://www.tecgraf.puc-rio.br/lua/</A>
+ <A HREF="ftp://ftp.tecgraf.puc-rio.br/pub/lua/lua.tar.gz">ftp://ftp.tecgraf.puc-rio.br/pub/lua/lua.tar.gz</A>
+</LISTING>
+<P>
+<P>
+<!-- ====================================================================== -->
+<HR>
+<A NAME="2."></A>
+<H1>2 - Environment and Chunks</H1>
+<P>
+All statements in Lua are executed in a <A NAME="global environment"><EM>global environment</EM></A>.
+This environment, which keeps all global variables and functions,
+is initialized at the beginning of the embedding program and
+persists until its end.
+<P>
+The global environment can be manipulated by Lua code or
+by the embedding program,
+which can read and write global variables
+using functions in the library that implements Lua.
+<P>
+<A NAME="Global variables">Global variables</A> do not need declaration.
+Any variable is assumed to be global unless explicitly declared local
+(see Section&nbsp;<A HREF="#localvar">4.5.5</A>).
+Before the first assignment, the value of a global variable is <B>nil</B>;
+this default can be changed (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+<P>
+The unit of execution of Lua is called a <A NAME="chunk"><EM>chunk</EM></A>.
+The syntax
+\footnote{As usual, {<EM>a</EM>} means 0 or more <EM>a</EM>'s,
+[<EM>a</EM>] means an optional <EM>a</EM> and ('<EM>a</EM>)+ means
+one or more <EM>a</EM>'s.}
+for chunks is:
+<LISTING>
+chunk ::= {stat | function} [ret]
+</LISTING>
+A chunk may contain statements and function definitions,
+and may be in a file or in a string inside the host program.
+A chunk may optionally end with a <CODE>return</CODE> statement (see Section&nbsp;<A HREF="#return">4.5.3</A>).
+When a chunk is executed, first all its functions and statements are compiled,
+then the statements are executed in sequential order.
+All modifications a chunk effects on the global environment persist
+after its end.
+Those include modifications to global variables and definitions
+of new functions
+\footnote{Actually, a function definition is an
+assignment to a global variable (see Section&nbsp;<A HREF="#TypesSec">3</A>).}.
+<P>
+Chunks may be pre-compiled into binary form;
+see program <A NAME="luac"><TT>luac</TT></A> for details.
+Text files with chunks and their binary pre-compiled forms
+are interchangeable.
+Lua automatically detects the file type and acts accordingly.
+<A NAME="pre-compilation"></A>
+<P>
+<A NAME="TypesSec"></A>
+<!-- ====================================================================== -->
+<HR>
+<A NAME="3."></A>
+<H1>3 - Types and Tags</H1>
+<P>
+Lua is a dynamically typed language.
+Variables do not have types; only values do.
+Therefore, there are no type definitions in the language.
+All values carry their own type.
+Besides a type, all values also have a <A NAME="tag">tag</A>.
+<P>
+There are six <A NAME="basic types">basic types</A> in Lua: <A NAME="nil"><EM>nil</EM></A>, <A NAME="number"><EM>number</EM></A>,
+<A NAME="string"><EM>string</EM></A>, <A NAME="function"><EM>function</EM></A>, <A NAME="userdata"><EM>userdata</EM></A>, and <A NAME="table"><EM>table</EM></A>.
+<EM>Nil</EM> is the type of the value <B>nil</B>,
+whose main property is to be different from any other value.
+<EM>Number</EM> represents real (floating-point) numbers,
+while <EM>string</EM> has the usual meaning.
+The function <CODE>type</CODE> returns a string describing the type
+of a given value (see Section&nbsp;<A HREF="#pdf-type">6.1</A>).
+<P>
+Functions are considered first-class values in Lua.
+This means that functions can be stored in variables,
+passed as arguments to other functions and returned as results.
+When a function is defined in Lua, its body is compiled and stored
+in a given variable.
+Lua can call (and manipulate) functions written in Lua and
+functions written in C.
+They can be distinguished by their tags:
+all Lua functions have the same tag,
+and all C functions have the same tag,
+which is different from the tag of a Lua function.
+<P>
+The type <EM>userdata</EM> is provided to allow
+arbitrary <A NAME="C pointers">C pointers</A> to be stored in Lua variables.
+It corresponds to a <CODE>void*</CODE> and has no pre-defined operations in Lua,
+besides assignment and equality test.
+However, by using <EM>tag methods</EM>,
+the programmer may define operations for <EM>userdata</EM> values
+(see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+<P>
+The type <EM>table</EM> implements <A NAME="associative arrays">associative arrays</A>,
+that is, <A NAME="arrays">arrays</A> that can be indexed not only with numbers,
+but with any value (except <B>nil</B>).
+Therefore, this type may be used not only to represent ordinary arrays,
+but also symbol tables, sets, records, etc.
+To represent <A NAME="records">records</A>, Lua uses the field name as an index.
+The language supports this representation by
+providing <CODE>a.name</CODE> as syntactic sugar for <CODE>a["name"]</CODE>.
+Tables may also carry methods.
+Because functions are first class values,
+table fields may contain functions.
+The form <CODE>t:f(x)</CODE> is syntactic sugar for <CODE>t.f(t,x)</CODE>,
+which calls the method <CODE>f</CODE> from the table <CODE>t</CODE> passing
+itself as the first parameter (see Section&nbsp;<A HREF="#func-def">4.7</A>).
+<P>
+It is important to notice that tables are <EM>objects</EM>, and not values.
+Variables cannot contain tables, only <EM>references</EM> to them.
+Assignment, parameter passing and returns always manipulate references
+to tables, and do not imply any kind of copy.
+Moreover, tables must be explicitly created before used
+(see Section&nbsp;<A HREF="#tableconstructor">4.6.7</A>).
+<P>
+Tags are mainly used to select tag methods when
+some events occur (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+Each of the types nil, number and string has a different tag.
+All values of each of these types have this same pre-defined tag.
+Values of type function can have two different tags,
+depending on whether they are Lua or C functions.
+Finally,
+values of type userdata and table can have
+as many different tags as needed (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+Tags are created with the function <CODE>newtag</CODE>,
+and the function <CODE>tag</CODE> returns the tag of a given value.
+To change the tag of a given table,
+there is the function <CODE>settag</CODE> (see Section&nbsp;<A HREF="#pdf-newtag">6.1</A>).
+<P>
+<P>
+<!-- ====================================================================== -->
+<HR>
+<A NAME="4."></A>
+<H1>4 - The Language</H1>
+<P>
+This section describes the lexis, the syntax and the semantics of Lua.
+<P>
+<P>
+<A NAME="lexical"></A>
+<A NAME="4.1"></A>
+<H2>4.1 - Lexical Conventions</H2>
+<P>
+Lua is a case-sensitive language.
+<A NAME="Identifiers">Identifiers</A> can be any string of letters, digits, and underscores,
+not beginning with a digit.
+The following words are reserved, and cannot be used as identifiers:
+<A NAME="reserved words"></A>
+<LISTING>
+ and do else elseif
+ end function if local
+ nil not or repeat
+ return then until while
+</LISTING>
+<P>
+The following strings denote other <A NAME="tokens">tokens</A>:
+<LISTING>
+ ~= &lt;= &gt;= &lt; &gt; == = .. + - * /
+ % ( ) { } [ ] ; , . ...
+</LISTING>
+<P>
+<A NAME="Literal strings">Literal strings</A> can be delimited by matching single or double quotes,
+and can contain the C-like escape sequences
+<CODE>'\n'</CODE>, <CODE>'\t'</CODE> and <CODE>'\r'</CODE>.
+Literal strings can also be delimited by matching <CODE>[[ ... ]]</CODE>.
+Literals in this bracketed form may run for several lines,
+may contain nested <CODE>[[ ... ]]</CODE> pairs,
+and do not interpret escape sequences.
+This form is specially convenient for
+handling strings that contain program pieces or
+other quoted strings.
+<P>
+<A NAME="Comments">Comments</A> start anywhere outside a string with a
+double hyphen (<CODE>--</CODE>) and run until the end of the line.
+Moreover,
+the first line of a chunk file is skipped if it starts with <CODE>#</CODE>
+\footnote{This facility allows the use of Lua as a script interpreter
+in Unix systems (see Section&nbsp;<A HREF="#lua-sa">8</A>).}.
+<P>
+<A NAME="Numerical constants">Numerical constants</A> may be written with an optional decimal part,
+and an optional decimal exponent.
+Examples of valid numerical constants are:
+<LISTING>
+ 4 4.0 0.4 4.57e-3 0.3e12
+</LISTING>
+<P>
+<A NAME="pre-processor"></A>
+<A NAME="4.2"></A>
+<H2>4.2 - The Pre-processor</H2>
+<P>
+All lines that start with a <CODE>$</CODE> are handled by a pre-processor.
+The <CODE>$</CODE> can be followed by any of the following directives:
+<DL>
+<DT><B><TT>debug</TT></B><DD> - turn on some debugging facilities (see Section&nbsp;<A HREF="#pragma">4.9</A>).
+<DT><B><TT>nodebug</TT></B><DD> - turn off some debugging facilities (see Section&nbsp;<A HREF="#pragma">4.9</A>).
+<DT><B><TT>if <EM>cond</TT></EM></B><DD> - starts a conditional part.
+If <EM>cond</EM> is false, then this part is skipped by the lexical analyzer.
+<DT><B><TT>ifnot <EM>cond</TT></EM></B><DD> - starts a conditional part.
+If <EM>cond</EM> is true, then this part is skipped by the lexical analyzer.
+<DT><B><TT>end</TT></B><DD> - ends a conditional part.
+<DT><B><TT>else</TT></B><DD> - starts an ``else'' conditional part,
+switching the ``skip'' status.
+<DT><B><TT>endinput</TT></B><DD> - ends the lexical parse of the file.
+</DL>
+<P>
+Directives can be freely nested.
+Particularly, a <CODE>$endinput</CODE> may occur inside a <CODE>$if</CODE>;
+in that case, even the matching <CODE>$end</CODE> is not parsed.
+<P>
+A <EM>cond</EM> part may be:
+<DL>
+<DT><B><TT>nil</TT></B><DD> - always false.
+<DT><B><TT>1</TT></B><DD> - always true.
+<DT><B><EM>name</EM></B><DD> - true if the value of the
+global variable <EM>name</EM> is different from <B>nil</B>.
+Notice that <EM>name</EM> is evaluated before the chunk starts its execution.
+Therefore, actions in a chunk do not affect its own conditional directives.
+</DL>
+<P>
+<A NAME="coercion"></A>
+<A NAME="4.3"></A>
+<H2>4.3 - Coercion</H2>
+<P>
+Lua provides some automatic conversions between values.
+Any arithmetic operation applied to a string tries to convert
+that string to a number, following the usual rules.
+Conversely, whenever a number is used when a string is expected,
+that number is converted to a string, according to the following rule:
+if the number is an integer, it is written without exponent or decimal point;
+otherwise, it is formatted following the <CODE>%g</CODE>
+conversion specification of the <CODE>printf</CODE> function in the
+standard C library.
+For complete control on how numbers are converted to strings,
+use the <CODE>format</CODE> function (see Section&nbsp;<A HREF="#format">6.2</A>).
+<P>
+<P>
+<A NAME="adjust"></A>
+<A NAME="4.4"></A>
+<H2>4.4 - Adjustment</H2>
+<P>
+Functions in Lua can return many values.
+Because there are no type declarations,
+the system does not know how many values a function will return,
+or how many parameters it needs.
+Therefore, sometimes, a list of values must be <EM>adjusted</EM>, at run time,
+to a given length.
+If there are more values than are needed, then the last values are thrown away.
+If there are more needs than values, then the list is extended with as
+many <B>nil</B>'s as needed.
+Adjustment occurs in multiple assignment and function calls.
+<P>
+<P>
+<A NAME="4.5"></A>
+<H2>4.5 - Statements</H2>
+<P>
+Lua supports an almost conventional set of <A NAME="statements">statements</A>,
+similar to those in Pascal or C.
+The conventional commands include
+assignment, control structures and procedure calls.
+Non-conventional commands include table constructors
+(see Section&nbsp;<A HREF="#tableconstructor">4.6.7</A>),
+and local variable declarations (see Section&nbsp;<A HREF="#localvar">4.5.5</A>).
+<P>
+<H3>4.5.1 - Blocks</H3>
+A <A NAME="block">block</A> is a list of statements, which are executed sequentially.
+Any statement can be optionally followed by a semicolon:
+<LISTING>
+block ::= {stat sc} [ret]
+sc ::= ['<B>;</B>']
+</LISTING>
+For syntactic reasons, a <A NAME="return"><TT>return</TT></A> statement can only be written
+as the last statement of a block.
+This restriction also avoids some ``statement not reached'' conditions.
+<P>
+<A NAME="assignment"></A>
+<H3>4.5.2 - <A NAME="Assignment</H3>">Assignment</H3></A>
+The language allows <A NAME="multiple assignment">multiple assignment</A>.
+Therefore, the syntax for assignment
+defines a list of variables on the left side,
+and a list of expressions on the right side.
+Both lists have their elements separated by commas:
+<LISTING>
+stat ::= varlist1 '<B>=</B>' explist1
+varlist1 ::= var {'<B>,</B>' var}
+</LISTING>
+This statement first evaluates all values on the right side
+and eventual indices on the left side,
+and then makes the assignments.
+Therefore, it can be used to exchange two values, as in
+<LISTING>
+ x, y = y, x
+</LISTING>
+The two lists may have different lengths.
+Before the assignment, the list of values is <EM>adjusted</EM> to
+the length of the list of variables (see Section&nbsp;<A HREF="#adjust">4.4</A>).
+<P>
+A single name can denote a global or a local variable,
+or a formal parameter:
+<LISTING>
+var ::= name
+</LISTING>
+Square brackets are used to index a table:
+<LISTING>
+var ::= var '<B>[</B>' exp1 '<B>]</B>'
+</LISTING>
+The <CODE>var</CODE> should result in a table value,
+where the field indexed by the expression value gets the assigned value.
+<P>
+The meaning of assignments and evaluations of global variables and
+indexed variables can be changed by tag methods (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+Actually,
+an assignment <CODE>x = val</CODE>, where <CODE>x</CODE> is a global variable,
+is equivalent to a call <CODE>setglobal('x', val)</CODE>;
+an assignment <CODE>t[i] = val</CODE> is equivalent to
+<CODE>settable_event(t, i, val)</CODE>.
+See Section&nbsp;<A HREF="#tag-method">4.8</A> for a description of these functions
+\footnote{Function <CODE>setglobal</CODE> is pre-defined in Lua.
+Function <TT>settable_event</TT> is used only for explanation purposes.}.
+<P>
+The syntax <CODE>var.NAME</CODE> is just syntactic sugar for
+<CODE>var["NAME"]</CODE>:
+<LISTING>
+var ::= var '<B>.</B>' name
+</LISTING>
+<P>
+<H3>4.5.3 - Control Structures</H3>
+The <A NAME="condition expression">condition expression</A> of a control structure may return any value.
+All values different from <B>nil</B> are considered true;
+only <B>nil</B> is considered false.
+<TT>if</TT>'s, <TT>while</TT>'s and <TT>repeat</TT>'s have the usual meaning.
+<P>
+<A NAME="while-do"></A><A NAME="repeat-until"></A><A NAME="if-then-else"></A>
+<LISTING>
+stat ::= <B>while</B> exp1 <B>do</B> block <B>end</B> <BR> | <B>repeat</B> block <B>until</B> exp1 <BR> | <B>if</B> exp1 <B>then</B> block {elseif} [<B>else</B> block] <B>end</B>
+elseif ::= <B>elseif</B> exp1 <B>then</B> block
+</LISTING>
+<P>
+A <TT>return</TT> is used to return values from a function or a chunk.
+<A NAME="return"></A>
+
+Because they may return more than one value,
+the syntax for a <A NAME="return statement">return statement</A> is:
+<LISTING>
+ret ::= <B>return</B> [explist1] [sc]
+</LISTING>
+<P>
+<A NAME="funcstat"></A>
+<H3>4.5.4 - Function Calls as Statements</H3>
+Because of possible side-effects,
+function calls can be executed as statements:
+<LISTING>
+stat ::= functioncall
+</LISTING>
+In this case, returned values are thrown away.
+Function calls are explained in Section&nbsp;<A HREF="#functioncall">4.6.8</A>.
+<P>
+<A NAME="localvar"></A>
+<H3>4.5.5 - Local Declarations</H3>
+<A NAME="Local variables">Local variables</A> may be declared anywhere inside a block.
+Their scope begins after the declaration and lasts until the
+end of the block.
+The declaration may include an initial assignment:
+<LISTING>
+stat ::= <B>local</B> declist [init]
+declist ::= name {'<B>,</B>' name}
+init ::= '<B>=</B>' explist1
+</LISTING>
+If present, an initial assignment has the same semantics
+of a multiple assignment.
+Otherwise, all variables are initialized with <B>nil</B>.
+<P>
+<P>
+<A NAME="4.6"></A>
+<H2>4.6 - Expressions</H2>
+<P>
+<H3>4.6.1 - <A NAME="Simple Expressions</H3>">Simple Expressions</H3></A>
+Simple expressions are:
+<LISTING>
+exp ::= '<B>(</B>' exp '<B>)</B>'
+exp ::= <B>nil</B>
+exp ::= '<B>number</B>'
+exp ::= '<B>literal</B>'
+exp ::= var
+</LISTING>
+Numbers (numerical constants) and
+string literals are explained in Section&nbsp;<A HREF="#lexical">4.1</A>.
+Variables are explained in Section&nbsp;<A HREF="#assignment">4.5.2</A>.
+<P>
+An access to a global variable <CODE>x</CODE> is equivalent to a
+call <CODE>getglobal('x')</CODE>;
+an access to an indexed variable <CODE>t[i]</CODE> is equivalent to
+a call <CODE>gettable_event(t, i)</CODE>.
+See Section&nbsp;<A HREF="#tag-method">4.8</A> for a description of these functions
+\footnote{Function <CODE>getglobal</CODE> is pre-defined in Lua.
+Function <TT>gettable_event</TT> is used only for explanation purposes.}.
+<P>
+The non-terminal <EM>exp1</EM> is used to indicate that the values
+returned by an expression must be adjusted to one single value:
+<LISTING>
+exp1 ::= exp
+</LISTING>
+<P>
+<H3>4.6.2 - Arithmetic Operators</H3>
+Lua supports the usual <A NAME="arithmetic operators">arithmetic operators</A>:
+the binary <CODE>+</CODE> (addition),
+<CODE>-</CODE> (subtraction), <CODE>*</CODE> (multiplication),
+<CODE>/</CODE> (division) and <CODE>^</CODE> (exponentiation),
+and unary <CODE>-</CODE> (negation).
+If the operands are numbers, or strings that can be converted to
+numbers, according to the rules given in Section&nbsp;<A HREF="#coercion">4.3</A>,
+then all operations except exponentiation have the usual meaning.
+Otherwise, an appropriate tag method is called (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+An exponentiation always calls a tag method.
+The standard mathematical library redefines this method for numbers,
+giving the expected meaning to <A NAME="exponentiation">exponentiation</A>
+(see Section&nbsp;<A HREF="#mathlib">6.3</A>).
+<P>
+<H3>4.6.3 - Relational Operators</H3>
+Lua provides the following <A NAME="relational operators">relational operators</A>:
+<LISTING>
+ &lt; &gt; &lt;= &gt;= ~= ==
+</LISTING>
+All these return <B>nil</B> as false and a value different from <B>nil</B> as true.
+<P>
+Equality first compares the types of its operands.
+If they are different, then the result is <B>nil</B>.
+Otherwise, their values are compared.
+Numbers and strings are compared in the usual way.
+Tables, userdata and functions are compared by reference,
+that is, two tables are considered equal only if they are the same table.
+The operator <CODE>~=</CODE> is exactly the negation of equality (<CODE>==</CODE>).
+Note that the conversion rules of Section&nbsp;<A HREF="#coercion">4.3</A>
+<EM>do not</EM> apply to equality comparisons.
+Thus, <CODE>"0"==0</CODE> evaluates to false.
+<P>
+The other operators work as follows.
+If both arguments are numbers, then they are compared as such.
+Otherwise, if both arguments are strings,
+their values are compared using lexicographical order.
+Otherwise, the ``order'' tag method is called (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+<P>
+<H3>4.6.4 - Logical Operators</H3>
+Like control structures, all logical operators
+consider <B>nil</B> as false and anything else as true.
+The <A NAME="logical operators">logical operators</A> are:
+<A NAME="and"></A><A NAME="or"></A><A NAME="not"></A>
+<LISTING>
+ and or not
+</LISTING>
+The operator <CODE>and</CODE> returns <B>nil</B> if its first argument is <B>nil</B>;
+otherwise, it returns its second argument.
+The operator <CODE>or</CODE> returns its first argument
+if it is different from <B>nil</B>;
+otherwise, it returns its second argument.
+Both <CODE>and</CODE> and <CODE>or</CODE> use <A NAME="short-cut evaluation">short-cut evaluation</A>,
+that is,
+the second operand is evaluated only when necessary.
+<P>
+<H3>4.6.5 - Concatenation</H3>
+Lua offers a string <A NAME="concatenation">concatenation</A> operator,
+denoted by ``<A NAME=".."><TT>..</TT></A>''.
+If operands are strings or numbers, then they are converted to
+strings according to the rules in Section&nbsp;<A HREF="#coercion">4.3</A>.
+Otherwise, the ``concat'' tag method is called (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
+<P>
+<H3>4.6.6 - Precedence</H3>
+<A NAME="Operator precedence">Operator precedence</A> follows the table below,
+from the lower to the higher priority:
+<LISTING>
+ and or
+ &lt; &gt; &lt;= &gt;= ~= ==
+ ..
+ + -
+ * /
+ not - (unary)
+ ^
+</LISTING>
+All binary operators are left associative,
+except for <CODE>^</CODE> (exponentiation),
+which is right associative.
+<P>
+<A NAME="tableconstructor"></A>
+<H3>4.6.7 - Table Constructors</H3>
+Table <A NAME="constructors">constructors</A> are expressions that create tables;
+every time a constructor is evaluated, a new table is created.
+Constructors can be used to create empty tables,
+or to create a table and initialize some fields.
+<P>
+The general syntax for constructors is:
+<LISTING>
+tableconstructor ::= '<B>{</B>' fieldlist '<B>}</B>'
+fieldlist ::= lfieldlist | ffieldlist | lfieldlist '<B>;</B>' ffieldlist
+lfieldlist ::= [lfieldlist1]
+ffieldlist ::= [ffieldlist1]
+</LISTING>
+<P>
+The form <EM>lfieldlist1</EM> is used to initialize lists.
+<LISTING>
+lfieldlist1 ::= exp {'<B>,</B>' exp} ['<B>,</B>']
+</LISTING>
+The expressions in the list are assigned to consecutive numerical indices,
+starting with 1.
+For example:
+<LISTING>
+ a = {"v1", "v2", 34}
+</LISTING>
+is essentially equivalent to:
+<LISTING>
+ temp = {}
+ temp[1] = "v1"
+ temp[2] = "v2"
+ temp[3] = 34
+ a = temp
+</LISTING>
+<P>
+The form <EM>ffieldlist1</EM> initializes other fields in a table:
+<LISTING>
+ffieldlist1 ::= ffield {'<B>,</B>' ffield} ['<B>,</B>']
+ffield ::= '<B>[</B>' exp '<B>]</B>' \ter {= exp | name '<B>=</B>' exp}
+</LISTING>
+For example:
+<LISTING>
+ a = {[f(k)] = g(y), x = 1, y = 3, [0] = b+c}
+</LISTING>
+is essentially equivalent to:
+<LISTING>
+ temp = {}
+ temp[f(k)] = g(y)
+ temp.x = 1 -- or temp["x"] = 1
+ temp.y = 3 -- or temp["y"] = 3
+ temp[0] = b+c
+ a = temp
+</LISTING>
+An expression like <CODE>{x = 1, y = 4}</CODE> is
+in fact syntactic sugar for <CODE>{["x"] = 1, ["y"] = 4}</CODE>.
+<P>
+<A NAME="functioncall"></A>
+<H3>4.6.8 - Function Calls</H3>
+A <A NAME="function call">function call</A> has the following syntax:
+<LISTING>
+functioncall ::= var realParams
+</LISTING>
+Here, <EM>var</EM> can be any variable (global, local, indexed, etc).
+If its value has type <EM>function</EM>,
+then this function is called.
+Otherwise, the ``function'' tag method is called,
+having as first parameter the value of <EM>var</EM>,
+and then the original call parameters.
+<P>
+The form:
+<LISTING>
+functioncall ::= var '<B>:</B>' name realParams
+</LISTING>
+can be used to call ``methods''.
+A call <CODE>var:name(...)</CODE>
+is syntactic sugar for
+<LISTING>
+ var.name(var, ...)
+</LISTING>
+except that <CODE>var</CODE> is evaluated only once.
+<P>
+<LISTING>
+realParams ::= '<B>(</B>' [explist1] '<B>)</B>'
+realParams ::= tableconstructor
+explist1 ::= exp1 {'<B>,</B>' exp1}
+</LISTING>
+All argument expressions are evaluated before the call.
+A call of the form <CODE>f{...}</CODE> is syntactic sugar for
+<CODE>f({...})</CODE>, that is,
+the parameter list is a single new table.
+<P>
+Because a function can return any number of results
+(see Section&nbsp;<A HREF="#return">4.5.3</A>),
+the number of results must be adjusted before used.
+If the function is called as a statement (see Section&nbsp;<A HREF="#funcstat">4.5.4</A>),
+then its return list is adjusted to&nbsp;0,
+thus discarding all returned values.
+If the function is called in a place that needs a single value
+(syntactically denoted by the non-terminal <EM>exp1</EM>),
+then its return list is adjusted to&nbsp;1,
+thus discarding all returned values but the first one.
+If the function is called in a place that can hold many values
+(syntactically denoted by the non-terminal <EM>exp</EM>),
+then no adjustment is made.
+<P>
+<P>
+<A NAME="func-def"></A>
+<A NAME="4.7"></A>
+<H2>4.7 - Function Definitions</H2>
+<P>
+Functions in Lua can be defined anywhere in the global level of a chunk.
+The syntax for function definition is:
+<LISTING>
+function ::= <B>function</B> var '<B>(</B>' [parlist1] '<B>)</B>' block <B>end</B>
+</LISTING>
+<P>
+When Lua pre-compiles a chunk,
+all its function bodies are pre-compiled, too.
+Then, when Lua ``executes'' the function definition,
+its body is stored, with type <EM>function</EM>,
+into the variable <CODE>var</CODE>.
+It is in this sense that
+a function definition is an assignment to a global variable.
+<P>
+Parameters act as local variables,
+initialized with the argument values.
+<LISTING>
+parlist1 ::= '<B>...</B>'
+parlist1 ::= name {'<B>,</B>' name} ['<B>,</B>' '<B>...</B>']
+</LISTING>
+<A NAME="vararg"></A>
+
+When a function is called,
+the list of <A NAME="arguments">arguments</A> is adjusted to
+the length of the list of parameters (see Section&nbsp;<A HREF="#adjust">4.4</A>),
+unless the function is a <A NAME="vararg"><EM>vararg</EM></A> function,
+indicated by the dots (...) at the end of its parameter list.
+A vararg function does not adjust its argument list;
+instead, it collects any extra arguments in an implicit parameter,
+called <A NAME="arg"><EM>arg</EM></A>.
+This parameter is always initialized as a table,
+with a field <CODE>n</CODE> with the number of extra arguments,
+and the extra arguments at positions 1, 2, ...
+<P>
+As an example, suppose definitions like:
+<LISTING>
+ function f(a, b) end
+ function g(a, b, ...) end
+</LISTING>
+Then, we have the following mapping from arguments to parameters:
+<LISTING>
+ CALL PARAMETERS
+<P>
+ f(3) a=3, b=nil
+ f(3, 4) a=3, b=4
+ f(3, 4, 5) a=3, b=4
+<P>
+ g(3) a=3, b=nil, arg={n=0}
+ g(3, 4) a=3, b=4, arg={n=0}
+ g(3, 4, 5, 8) a=3, b=4, arg={5, 8; n=2}
+</LISTING>
+<P>
+Results are returned using the <CODE>return</CODE> statement (see Section&nbsp;<A HREF="#return">4.5.3</A>).
+If control reaches the end of a function without a return instruction,
+then the function returns with no results.
+<P>
+There is a special syntax for defining <A NAME="methods">methods</A>,
+that is, functions that have an extra parameter <A NAME="self"><EM>self</EM></A>.
+<LISTING>
+function ::= <B>function</B> var '<B>:</B>' name '<B>(</B>' [parlist1] '<B>)</B>' block <B>end</B>
+</LISTING>
+Thus, a declaration like
+<LISTING>
+function v:f (...)
+ ...
+end
+</LISTING>
+is equivalent to
+<LISTING>
+function v.f (self, ...)
+ ...
+end
+</LISTING>
+that is, the function gets an extra formal parameter called <CODE>self</CODE>.
+Notice that
+the variable <CODE>v</CODE> must have been
+previously initialized with a table value.
+<P>
+<P>
+<A NAME="tag-method"></A>
+<A NAME="4.8"></A>
+<H2>4.8 - Tag Methods</H2>
+<P>
+Lua provides a powerful mechanism to extend its semantics,
+called <A NAME="Tag Methods"><EM>Tag Methods</EM></A>.
+A tag method (TM) is a programmer-defined function
+that can be called at many key points of the evaluation of a program,
+allowing a programmer to change the standard Lua behavior at these points.
+Each of these points is called an <A NAME="event"><EM>event</EM></A>.
+<P>
+The tag method called for any specific event is selected
+according to the tag of the values involved
+in the event (see Section&nbsp;<A HREF="#TypesSec">3</A>).
+The function <A NAME="settagmethod"><TT>settagmethod</TT></A> changes the tag method
+associated with a given pair <EM>&lt;tag, event&gt;</EM>.
+Its first parameter is the tag, the second the event name
+(a string, see below),
+and the third parameter is the new method (a function),
+or <B>nil</B> to restore the default behavior.
+The function returns the previous tag method.
+Another function, <A NAME="gettagmethod"><TT>gettagmethod</TT></A>,
+receives a tag and an event name and returns the
+current method associated with the pair.
+<P>
+Tag methods are called in the following events,
+identified by the given names.
+The semantics of tag methods is better explained by a Lua function
+describing the behavior of the interpreter at each event.
+The function not only shows when a tag method is called,
+but also its arguments, its results and the default behavior.
+Please notice that the code shown here is only illustrative;
+the real behavior is hard coded in the interpreter,
+and it is much more efficient than this simulation.
+All functions used in these descriptions
+(<CODE>rawgetglobal</CODE>, <CODE>tonumber</CODE>, <CODE>call</CODE>, etc)
+are described in Section&nbsp;<A HREF="#predefined">6.1</A>.
+<P>
+<DL>
+<P>
+<DT><B>``add'':</B><DD><A NAME="add event"></A>
+called when a <CODE>+</CODE> operation is applied to non numerical operands.
+<P>
+The function <CODE>getbinmethod</CODE> defines how Lua chooses a tag method
+for a binary operation.
+First Lua tries the first operand.
+If its tag does not define a tag method for the operation,
+then Lua tries the second operand.
+If it also fails, then it gets a tag method from tag&nbsp;0:
+<LISTING>
+ function getbinmethod (op1, op2, event)
+ return gettagmethod(tag(op1), event) or
+ gettagmethod(tag(op2), event) or
+ gettagmethod(0, event)
+ end
+</LISTING>
+<LISTING>
+ function add_event (op1, op2)
+ local o1, o2 = tonumber(op1), tonumber(op2)
+ if o1 and o2 then -- both operands are numeric
+ return o1+o2 -- '+' here is the primitive 'add'
+ else -- at least one of the operands is not numeric.
+ local tm = getbinmethod(op1, op2, "add")
+ if tm then
+ -- call the method with both operands and an extra
+ -- argument with the event name
+ return tm(op1, op2, "add")
+ else -- no tag method available: Default behavior
+ error("unexpected type at arithmetic operation")
+ end
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``sub'':</B><DD><A NAME="sub event"></A>
+called when a <CODE>-</CODE> operation is applied to non numerical operands.
+Behavior similar to <CODE>"add"</CODE> event.
+<P>
+<DT><B>``mul'':</B><DD><A NAME="mul event"></A>
+called when a <CODE>*</CODE> operation is applied to non numerical operands.
+Behavior similar to <CODE>"add"</CODE> event.
+<P>
+<DT><B>``div'':</B><DD><A NAME="div event"></A>
+called when a <CODE>/</CODE> operation is applied to non numerical operands.
+Behavior similar to <CODE>"add"</CODE> event.
+<P>
+<DT><B>``pow'':</B><DD><A NAME="pow event"></A>
+called when a <CODE>^</CODE> operation is applied.
+<LISTING>
+ function pow_event (op1, op2)
+ local tm = getbinmethod(op1, op2, "pow")
+ if tm then
+ -- call the method with both operands and an extra
+ -- argument with the event name
+ return tm(op1, op2, "pow")
+ else -- no tag method available: Default behavior
+ error("unexpected type at arithmetic operation")
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``unm'':</B><DD><A NAME="unm event"></A>
+called when an unary <CODE>-</CODE> operation is applied to a non numerical operand.
+<LISTING>
+ function unm_event (op)
+ local o = tonumber(op)
+ if o then -- operand is numeric
+ return -o -- '-' here is the primitive 'unm'
+ else -- the operand is not numeric.
+ -- Try to get a tag method from the operand;
+ -- if it does not have one, try a "global" one (tag 0)
+ local tm = gettagmethod(tag(op), "unm") or
+ gettagmethod(0, "unm")
+ if tm then
+ -- call the method with the operand, nil, and an extra
+ -- argument with the event name
+ return tm(op, nil, "unm")
+ else -- no tag method available: Default behavior
+ error("unexpected type at arithmetic operation")
+ end
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``lt'':</B><DD><A NAME="lt event"></A>
+called when a <CODE>&lt;</CODE> operation is applied to non numerical
+or non string operands.
+<LISTING>
+ function lt_event (op1, op2)
+ if type(op1) == "number" and type(op2) == "number" then
+ return op1 &lt; op2 -- numeric comparison
+ elseif type(op1) == "string" and type(op2) == "string" then
+ return op1 &lt; op2 -- lexicographic comparison
+ else
+ local tm = getbinmethod(op1, op2, "lt")
+ if tm then
+ return tm(op1, op2, "lt")
+ else
+ error("unexpected type at comparison");
+ end
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``gt'':</B><DD><A NAME="gt event"></A>
+called when a <CODE>&gt;</CODE> operation is applied to non numerical
+or non string operands.
+Behavior similar to <CODE>"lt"</CODE> event.
+<P>
+<DT><B>``le'':</B><DD><A NAME="le event"></A>
+called when a <CODE>&lt;=</CODE> operation is applied to non numerical
+or non string operands.
+Behavior similar to <CODE>"lt"</CODE> event.
+<P>
+<DT><B>``ge'':</B><DD><A NAME="ge event"></A>
+called when a <CODE>&gt;=</CODE> operation is applied to non numerical
+or non string operands.
+Behavior similar to <CODE>"lt"</CODE> event.
+<P>
+<DT><B>``concat'':</B><DD><A NAME="concatenation event"></A>
+called when a concatenation is applied to non string operands.
+<LISTING>
+ function concat_event (op1, op2)
+ if (type(op1) == "string" or type(op1) == "number") and
+ (type(op2) == "string" or type(op2) == "number") then
+ return op1..op2 -- primitive string concatenation
+ else
+ local tm = getbinmethod(op1, op2, "concat")
+ if tm then
+ return tm(op1, op2, "concat")
+ else
+ error("unexpected type for concatenation")
+ end
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``index'':</B><DD><A NAME="index event"></A>
+called when Lua tries to retrieve the value of an index
+not present in a table.
+See event <CODE>"gettable"</CODE> for its semantics.
+<P>
+<DT><B>``getglobal'':</B><DD><A NAME="getglobal event"></A>
+called whenever Lua accesses a global variable.
+This method can only be set for <B>nil</B> and for tags
+created by <CODE>newtag</CODE>.
+<LISTING>
+ function getglobal (varname)
+ local value = rawgetglobal(varname)
+ local tm = gettagmethod(tag(value), "getglobal")
+ if not tm then
+ return value
+ else
+ return tm(varname, value)
+ end
+ end
+</LISTING>
+Notice: the function <CODE>getglobal</CODE> is pre-defined in Lua (see Section&nbsp;<A HREF="#predefined">6.1</A>).
+<P>
+<DT><B>``setglobal'':</B><DD><A NAME="setglobal event"></A>
+called whenever Lua assigns to a global variable.
+This method cannot be set for numbers, strings, and tables and
+userdata with default tags.
+<LISTING>
+ function setglobal (varname, newvalue)
+ local oldvalue = rawgetglobal(varname)
+ local tm = gettagmethod(tag(oldvalue), "setglobal")
+ if not tm then
+ return rawsetglobal(varname, newvalue)
+ else
+ return tm(varname, oldvalue, newvalue)
+ end
+ end
+</LISTING>
+Notice: the function <CODE>setglobal</CODE> is pre-defined in Lua (see Section&nbsp;<A HREF="#predefined">6.1</A>).
+<P>
+<DT><B>``gettable'':</B><DD><A NAME="gettable event"></A>
+called whenever Lua accesses an indexed variable.
+This method cannot be set for tables with default tag.
+<LISTING>
+ function gettable_event (table, index)
+ local tm = gettagmethod(tag(table), "gettable")
+ if tm then
+ return tm(table, index)
+ elseif type(table) ~= "table" then
+ error("indexed expression not a table");
+ else
+ local v = rawgettable(table, index)
+ tm = gettagmethod(tag(table), "index")
+ if (v == nil) and tm then
+ return tm(table, index)
+ else
+ return v
+ end
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``settable'':</B><DD><A NAME="settable event"></A>
+called when Lua assigns to an indexed variable.
+This method cannot be set for tables with default tag.
+<LISTING>
+ function settable_event (table, index, value)
+ local tm = gettagmethod(tag(table), "settable")
+ if tm then
+ tm(table, index, value)
+ elseif type(table) ~= "table" then
+ error("indexed expression not a table")
+ else
+ rawsettable(table, index, value)
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``function'':</B><DD><A NAME="function event"></A>
+called when Lua tries to call a non function value.
+<LISTING>
+ function function_event (func, ...)
+ if type(func) == "function" then
+ return call(func, arg)
+ else
+ local tm = gettagmethod(tag(func), "function")
+ if tm then
+ local i = arg.n
+ while i &gt; 0 do
+ arg[i+1] = arg[i]
+ i = i-1
+ end
+ arg.n = arg.n+1
+ arg[1] = func
+ return call(tm, arg)
+ else
+ error("call expression not a function")
+ end
+ end
+ end
+</LISTING>
+<P>
+<DT><B>``gc'':</B><DD><A NAME="gc event"></A>
+called when Lua is garbage collecting an object.
+This method cannot be set for strings, numbers, functions,
+and userdata with default tag.
+For each object to be collected,
+Lua does the equivalent of the following function:
+<LISTING>
+ function gc_event (obj)
+ local tm = gettagmethod(tag(obj), "gc")
+ if tm then
+ tm(obj)
+ end
+ end
+</LISTING>
+Moreover, at the end of a garbage collection cycle,
+Lua does the equivalent of the call <CODE>gc_event(nil)</CODE>.
+<P>
+</DL>
+<P>
+<P>
+<P>
+<A NAME="error"></A>
+<A NAME="4.9"></A>
+<H2>4.9 - Error Handling</H2>
+<P>
+Because Lua is an extension language,
+all Lua actions start from C code calling a function from the Lua library.
+Whenever an error occurs during Lua compilation or execution,
+the <A NAME="error method"><EM>error method</EM></A> is called,
+and then the corresponding function from the library
+(<CODE>lua_dofile</CODE>, <CODE>lua_dostring</CODE>, or <CODE>lua_callfunction</CODE>)
+is terminated returning an error condition.
+<P>
+The only argument to the error method is a string
+describing the error.
+The default method prints this message in <CODE>stderr</CODE>.
+If needed, it is possible to change the error method with the
+function <CODE>seterrormethod</CODE>,
+which gets the new error handler as its only parameter
+(see Section&nbsp;<A HREF="#pdf-seterrormethod">6.1</A>).
+The standard I/O library uses this facility to redefine the error method,
+using the debug facilities (see Section&nbsp;<A HREF="#debugI">7</A>),
+in order to print some extra information,
+like the call stack.
+<P>
+To provide more information about errors,
+Lua programs should include the compilation pragma <CODE>$debug</CODE>.
+<A NAME="pragma"></A>
+<A NAME="debug pragma"></A>
+When an error occurs in a program compiled with this option,
+the I/O error routine is able to print the number of the
+lines where the calls (and the error) were made.
+<P>
+Lua code can explicitly generate an error by calling the built-in
+function <CODE>error</CODE> (see Section&nbsp;<A HREF="#pdf-error">6.1</A>).
+<P>
+<P>
+<!-- ====================================================================== -->
+<HR>
+<A NAME="5."></A>
+<H1>5 - The Application Program Interface</H1>
+<P>
+This section describes the API for Lua, that is,
+the set of C functions available to the host program to communicate
+with the Lua library.
+The API functions can be classified in the following categories:
+<OL>
+<LI>exchanging values between C and Lua;
+<LI>executing Lua code;
+<LI>manipulating (reading and writing) Lua objects;
+<LI>calling Lua functions;
+<LI>C functions to be called by Lua;
+<LI>manipulating references to Lua Objects.
+</OL>
+All API functions and related types and constants
+are declared in the header file <CODE>lua.h</CODE>.
+<P>
+<A NAME="valuesCLua"></A>
+<A NAME="5.1"></A>
+<H2>5.1 - Exchanging Values between C and Lua</H2>
+Because Lua has no static type system,
+all values passed between Lua and C have type
+<CODE>lua_Object</CODE><A NAME="lua_Object"></A>,
+which works like an abstract type in C that can hold any Lua value.
+Values of type <CODE>lua_Object</CODE> have no meaning outside Lua;
+for instance,
+the comparison of two <CODE>lua_Object's</CODE> is undefined.
+<P>
+To check the type of a <CODE>lua_Object</CODE>,
+the following functions are available:
+<A NAME="lua_isnil"></A><A NAME="lua_isnumber"></A><A NAME="lua_isstring"></A>
+<A NAME="lua_istable"></A><A NAME="lua_iscfunction"></A><A NAME="lua_isuserdata"></A>
+<A NAME="lua_isfunction"></A>
+<LISTING>
+int lua_isnil (lua_Object object);
+int lua_isnumber (lua_Object object);
+int lua_isstring (lua_Object object);
+int lua_istable (lua_Object object);
+int lua_isfunction (lua_Object object);
+int lua_iscfunction (lua_Object object);
+int lua_isuserdata (lua_Object object);
+</LISTING>
+All macros return 1 if the object is compatible with the given type,
+and 0 otherwise.
+The function <CODE>lua_isnumber</CODE> accepts numbers and numerical strings,
+whereas
+<CODE>lua_isstring</CODE> accepts strings and numbers (see Section&nbsp;<A HREF="#coercion">4.3</A>),
+and <CODE>lua_isfunction</CODE> accepts Lua and C functions.
+<P>
+To check the tag of a <CODE>lua_Object</CODE>,
+the following function is available:
+<A NAME="lua_tag"></A>
+<LISTING>
+int lua_tag (lua_Object object);
+</LISTING>
+<P>
+To translate a value from type <CODE>lua_Object</CODE> to a specific C type,
+the programmer can use:
+<A NAME="lua_getnumber"></A><A NAME="lua_getstring"></A>
+<A NAME="lua_getcfunction"></A><A NAME="lua_getuserdata"></A>
+<LISTING>
+float lua_getnumber (lua_Object object);
+char *lua_getstring (lua_Object object);
+lua_CFunction lua_getcfunction (lua_Object object);
+void *lua_getuserdata (lua_Object object);
+</LISTING>
+<P>
+<CODE>lua_getnumber</CODE> converts a <CODE>lua_Object</CODE> to a floating-point number.
+This <CODE>lua_Object</CODE> must be a number or a string convertible to number
+(see Section&nbsp;<A HREF="#coercion">4.3</A>); otherwise, the function returns&nbsp;0.
+<P>
+<CODE>lua_getstring</CODE> converts a <CODE>lua_Object</CODE> to a string (<CODE>char*</CODE>).
+This <CODE>lua_Object</CODE> must be a string or a number;
+otherwise, the function returns&nbsp;0 (the <CODE>NULL</CODE> pointer).
+This function does not create a new string,
+but returns a pointer to a string inside the Lua environment.
+Because Lua has garbage collection,
+there is no guarantee that such pointer will be valid after the block ends
+(see below).
+<P>
+<CODE>lua_getcfunction</CODE> converts a <CODE>lua_Object</CODE> to a C function.
+This <CODE>lua_Object</CODE> must have type <EM>CFunction</EM>;
+otherwise, the function returns 0 (the <CODE>NULL</CODE> pointer).
+The type <CODE>lua_CFunction</CODE> is explained in Section&nbsp;<A HREF="#LuacallC">5.5</A>.
+<P>
+<CODE>lua_getuserdata</CODE> converts a <CODE>lua_Object</CODE> to <CODE>void*</CODE>.
+This <CODE>lua_Object</CODE> must have type <EM>userdata</EM>;
+otherwise, the function returns 0 (the <CODE>NULL</CODE> pointer).
+<P>
+Because Lua has automatic memory management and garbage collection,
+a <CODE>lua_Object</CODE> has a limited scope,
+and is only valid inside the <EM>block</EM> where it was created.
+A C function called from Lua is a block,
+and its parameters are valid only until its end.
+It is good programming practice to convert Lua objects to C values
+as soon as they are available,
+and never to store <CODE>lua_Object</CODE>s in C global variables.
+<P>
+A garbage collection cycle can be forced by:
+<A NAME="lua_collectgarbage"></A>
+<LISTING>
+long lua_collectgarbage (long limit);
+</LISTING>
+This function returns the number of objects collected.
+The argument <CODE>limit</CODE> makes the next cycle occur only
+when that number of new objects have been created.
+If <CODE>limit</CODE>=0, then Lua uses an adaptable heuristics to set this limit.
+<P>
+<P>
+All communication between Lua and C is done through two
+abstract data types, called <A NAME="lua2C"><EM>lua2C</EM></A> and <A NAME="C2lua"><EM>C2lua</EM></A>.
+The first one, as the name implies, is used to pass values
+from Lua to C: parameters when Lua calls C and results when C calls Lua.
+The structure C2lua is used in the reverse direction:
+parameters when C calls Lua and results when Lua calls C.
+<P>
+The structure lua2C is an abstract array,
+which can be indexed with the function:
+<A NAME="lua_lua2C"></A>
+<LISTING>
+lua_Object lua_lua2C (int number);
+</LISTING>
+where <CODE>number</CODE> starts with 1.
+When called with a number larger than the array size,
+this function returns <CODE>LUA_NOOBJECT</CODE><A NAME="LUA_NOOBJECT"></A>.
+In this way, it is possible to write C functions that receive
+a variable number of parameters,
+and to call Lua functions that return a variable number of results.
+Notice that the structure lua2C cannot be directly modified by C code.
+<P>
+The second structure, C2lua, is a stack.
+Pushing elements into this stack
+is done with the following functions:
+<A NAME="lua_pushnumber"></A><A NAME="lua_pushstring"></A>
+<A NAME="lua_pushcfunction"></A><A NAME="lua_pushusertag"></A>
+<A NAME="lua_pushnil"></A><A NAME="lua_pushobject"></A>
+<A NAME="pushing"></A>
+<A NAME="lua_pushuserdata"></A>
+<LISTING>
+void lua_pushnumber (double n);
+void lua_pushstring (char *s);
+void lua_pushcfunction (lua_CFunction f);
+void lua_pushusertag (void *u, int tag);
+void lua_pushnil (void);
+void lua_pushobject (lua_Object object);
+</LISTING>
+All of them receive a C value,
+convert it to a corresponding <CODE>lua_Object</CODE>,
+and leave the result on the top of C2lua.
+The function
+<A NAME="lua_pop"></A>
+<LISTING>
+lua_Object lua_pop (void);
+</LISTING>
+returns a reference to the object at the top of the C2lua stack,
+and pops it.
+<P>
+As a general rule, all API functions pop from the stack
+all elements that they use.
+<P>
+Because userdata are objects,
+the function <CODE>lua_pushusertag</CODE> may create a new userdata.
+If Lua has a userdata with the given value (<CODE>void*</CODE>) and tag,
+that userdata is pushed.
+Otherwise, a new userdata is created, with the given value and tag.
+If this function is called with
+<CODE>tag</CODE>=<CODE>LUA_ANYTAG</CODE><A NAME="LUA_ANYTAG"></A>,
+then Lua will try to find any userdata with the given value,
+no matter its tag.
+If there is no userdata with that value, then a new one is created,
+with tag=0.
+<P>
+Userdata can have different tags,
+whose semantics are only known to the host program.
+Tags are created with the function:
+<A NAME="lua_newtag"></A>
+<LISTING>
+int lua_newtag (void);
+</LISTING>
+The function <CODE>lua_settag</CODE> changes the tag of
+the object on the top of C2lua (and pops it);
+the object must be a userdata or a table.
+<A NAME="lua_settag"></A>
+<LISTING>
+void lua_settag (int tag);
+</LISTING>
+<CODE>tag</CODE> must be a value created with <CODE>lua_newtag</CODE>.
+<P>
+When C code calls Lua repeatedly, as in a loop,
+objects returned by these calls can accumulate,
+and may cause a stack overflow.
+To avoid this,
+nested blocks can be defined with the functions:
+<LISTING>
+void lua_beginblock (void);
+void lua_endblock (void);
+</LISTING>
+After the end of the block,
+all <CODE>lua_Object</CODE>'s created inside it are released.
+The use of explicit nested blocks is strongly encouraged.
+<P>
+<A NAME="5.2"></A>
+<H2>5.2 - Executing Lua Code</H2>
+A host program can execute Lua chunks written in a file or in a string
+using the following functions:
+<A NAME="lua_dofile"></A><A NAME="lua_dostring"></A>
+<LISTING>
+int lua_dofile (char *filename);
+int lua_dostring (char *string);
+</LISTING>
+Both functions return an error code:
+0, in case of success; non zero, in case of errors.
+More specifically, <CODE>lua_dofile</CODE> returns 2 if for any reason
+it could not open the file.
+The function <CODE>lua_dofile</CODE>, if called with argument <CODE>NULL</CODE>,
+executes the <CODE>stdin</CODE> stream.
+Function <CODE>lua_dofile</CODE> is also able to execute pre-compiled chunks.
+It automatically detects whether the file is text or binary,
+and loads it accordingly (see program <A NAME="luac"><TT>luac</TT></A>).
+<P>
+These functions return, in structure lua2C,
+any values eventually returned by the chunks.
+They also empty the stack C2lua.
+<P>
+<P>
+<A NAME="5.3"></A>
+<H2>5.3 - Manipulating Lua Objects</H2>
+To read the value of any global Lua variable,
+one uses the function:
+<A NAME="lua_getglobal"></A>
+<LISTING>
+lua_Object lua_getglobal (char *varname);
+</LISTING>
+As in Lua, this function may trigger a tag method.
+To read the real value of any global variable,
+without invoking any tag method,
+this function has a <EM>raw</EM> version:
+<A NAME="lua_rawgetglobal"></A>
+<LISTING>
+lua_Object lua_rawgetglobal (char *varname);
+</LISTING>
+<P>
+To store a value previously pushed onto C2lua in a global variable,
+there is the function:
+<A NAME="lua_setglobal"></A>
+<LISTING>
+void lua_setglobal (char *varname);
+</LISTING>
+As in Lua, this function may trigger a tag method.
+To set the real value of any global variable,
+without invoking any tag method,
+this function has a <EM>raw</EM> version:
+<A NAME="lua_rawgetglobal"></A>
+<LISTING>
+void lua_rawsetglobal (char *varname);
+</LISTING>
+<P>
+Tables can also be manipulated via the API.
+The function
+<A NAME="lua_gettable"></A>
+<LISTING>
+lua_Object lua_gettable (void);
+</LISTING>
+pops from the stack C2lua a table and an index,
+and returns the contents of the table at that index.
+As in Lua, this operation may trigger a tag method.
+To get the real value of any table index,
+without invoking any tag method,
+this function has a <EM>raw</EM> version:
+<A NAME="lua_rawgetglobal"></A>
+<LISTING>
+lua_Object lua_rawgettable (void);
+</LISTING>
+<P>
+To store a value in an index,
+the program must push the table, the index,
+and the value onto C2lua,
+and then call the function:
+<A NAME="lua_settable"></A>
+<LISTING>
+void lua_settable (void);
+</LISTING>
+Again, the tag method for ``settable'' may be called.
+To set the real value of any table index,
+without invoking any tag method,
+this function has a <EM>raw</EM> version:
+<A NAME="lua_rawsettable"></A>
+<LISTING>
+void lua_rawsettable (void);
+</LISTING>
+<P>
+Finally, the function
+<A NAME="lua_createtable"></A>
+<LISTING>
+lua_Object lua_createtable (void);
+</LISTING>
+creates and returns a new, empty table.
+<P>
+<P>
+<A NAME="5.4"></A>
+<H2>5.4 - Calling Lua Functions</H2>
+Functions defined in Lua by a chunk executed with
+<CODE>dofile</CODE> or <CODE>dostring</CODE> can be called from the host program.
+This is done using the following protocol:
+first, the arguments to the function are pushed onto C2lua
+(see Section&nbsp;<A HREF="#pushing">5.1</A>), in direct order, i.e., the first argument is pushed first.
+<P>
+Then, the function is called using
+<A NAME="lua_callfunction"></A>
+<LISTING>
+int lua_callfunction (lua_Object function);
+</LISTING>
+This function returns an error code:
+0, in case of success; non zero, in case of errors.
+Finally, the results (a Lua function may return many values)
+are returned in structure lua2C,
+and can be retrieved with the macro <CODE>lua_getresult</CODE>,
+<A NAME="lua_getresult"></A>
+which is just another name to the function <CODE>lua_lua2C</CODE>.
+Notice that the function <CODE>lua_callfunction</CODE>
+pops all elements from the C2lua stack.
+<P>
+The following example shows how a C program may do the
+equivalent to the Lua code:
+<LISTING>
+ a = f("how", t.x, 4)
+</LISTING>
+<LISTING>
+ lua_pushstring("how"); /* 1st argument */
+ lua_pushobject(lua_getglobal("t")); /* push value of global 't' */
+ lua_pushstring("x"); /* push the string 'x' */
+ lua_pushobject(lua_gettable()); /* push result of t.x (= t['x']) */
+ lua_pushnumber(4); /* 3th argument */
+ lua_callfunction(lua_getglobal("f")); /* call Lua function */
+ lua_pushobject(lua_getresult(1)); /* push first result of the call */
+ lua_setglobal("a"); /* sets global variable 'a' */
+</LISTING>
+<P>
+Some special Lua functions have exclusive interfaces.
+A C function can generate a Lua error calling the function
+<A NAME="lua_error"></A>
+<LISTING>
+void lua_error (char *message);
+</LISTING>
+This function never returns.
+If the C function has been called from Lua,
+then the corresponding Lua execution terminates,
+as if an error had occurred inside Lua code.
+Otherwise, the whole program terminates with a call to <CODE>exit(1)</CODE>.
+<P>
+The error handler method (see Section&nbsp;<A HREF="#error">4.9</A>) can be changed with:
+<A NAME="lua_seterrormethod"></A>
+<LISTING>
+lua_Object lua_seterrormethod (void);
+</LISTING>
+This function sets the object at the top of C2lua
+as the new error method,
+and returns the old error method value.
+<P>
+Tag methods can be changed with:
+<A NAME="lua_settagmethod"></A>
+<LISTING>
+lua_Object lua_settagmethod (int tag, char *event);
+</LISTING>
+The first parameter is the tag,
+the second is the event name (see Section&nbsp;<A HREF="#tag-method">4.8</A>);
+the new method is pushed from C2lua.
+This function returns a <CODE>lua_Object</CODE>,
+which is the old tag method value.
+To get just the current value of a tag method,
+there is the function
+<A NAME="lua_gettagmethod"></A>
+<LISTING>
+lua_Object lua_gettagmethod (int tag, char *event);
+</LISTING>
+<P>
+<P>
+<A NAME="LuacallC"></A>
+<A NAME="5.5"></A>
+<H2>5.5 - C Functions</H2>
+To register a C function to Lua,
+there is the following macro:
+<A NAME="lua_register"></A>
+<LISTING>
+#define lua_register(n,f) (lua_pushcfunction(f), lua_setglobal(n))
+/* char *n; */
+/* lua_CFunction f; */
+</LISTING>
+which receives the name the function will have in Lua,
+and a pointer to the function.
+This pointer must have type <CODE>lua_CFunction</CODE>,
+which is defined as
+<A NAME="lua_CFunction"></A>
+<LISTING>
+typedef void (*lua_CFunction) (void);
+</LISTING>
+that is, a pointer to a function with no parameters and no results.
+<P>
+In order to communicate properly with Lua,
+a C function must follow a protocol,
+which defines the way parameters and results are passed.
+<P>
+A C function receives its arguments in structure lua2C;
+to access them, it uses the macro <CODE>lua_getparam</CODE>, <A NAME="lua_getparam"></A>
+again just another name to <CODE>lua_lua2C</CODE>.
+To return values, a C function just pushes them onto the stack C2lua,
+in direct order (see Section&nbsp;<A HREF="#valuesCLua">5.1</A>).
+Like a Lua function, a C function called by Lua can also return
+many results.
+<P>
+For some examples, see files <CODE>strlib.c</CODE>,
+<CODE>iolib.c</CODE> and <CODE>mathlib.c</CODE> in Lua distribution.
+<P>
+<A NAME="5.6"></A>
+<H2>5.6 - References to Lua Objects</H2>
+<P>
+As noted in Section&nbsp;<A HREF="#LuacallC">5.5</A>, <CODE>lua_Object</CODE>s are volatile.
+If the C code needs to keep a <CODE>lua_Object</CODE>
+outside block boundaries,
+then it must create a <A NAME="reference"><EM>reference</EM></A> to the object.
+The routines to manipulate references are the following:
+<A NAME="lua_ref"></A><A NAME="lua_getref"></A>
+<A NAME="lua_unref"></A>
+<LISTING>
+int lua_ref (int lock);
+lua_Object lua_getref (int ref);
+void lua_unref (int ref);
+</LISTING>
+The function <CODE>lua_ref</CODE> creates a reference
+to the object that is on the top of the stack,
+and returns this reference.
+If <CODE>lock</CODE> is true, the object is <EM>locked</EM>:
+this means the object will not be garbage collected.
+Notice that an unlocked reference may be garbage collected.
+Whenever the referenced object is needed,
+a call to <CODE>lua_getref</CODE>
+returns a handle to it;
+if the object has been collected,
+<CODE>lua_getref</CODE> returns <CODE>LUA_NOOBJECT</CODE>.
+<P>
+When a reference is no longer needed,
+it can be freed with a call to <CODE>lua_unref</CODE>.
+<P>
+<P>
+<P>
+<!-- ====================================================================== -->
+<HR>
+<A NAME="6."></A>
+<H1>6 - Predefined Functions and Libraries</H1>
+<P>
+The set of <A NAME="predefined functions">predefined functions</A> in Lua is small but powerful.
+Most of them provide features that allow some degree of
+<A NAME="reflexivity">reflexivity</A> in the language.
+Some of these features cannot be simulated with the rest of the
+language nor with the standard Lua API.
+Others are just convenient interfaces to common API functions.
+<P>
+The libraries, on the other hand, provide useful routines
+that are implemented directly through the standard API.
+Therefore, they are not necessary to the language,
+and are provided as separate C modules.
+Currently there are three standard libraries:
+<UL>
+<LI>string manipulation;
+<LI>mathematical functions (sin, log, etc);
+<LI>input and output (plus some system facilities).
+</UL>
+In order to have access to these libraries,
+the host program must call the functions
+<CODE>strlib_open</CODE>, <CODE>mathlib_open</CODE>, and <CODE>iolib_open</CODE>,
+declared in <CODE>lualib.h</CODE>.
+<P>
+<P>
+<A NAME="predefined"></A>
+<A NAME="6.1"></A>
+<H2>6.1 - Predefined Functions</H2>
+<P>
+<h3> <TT>call (func, arg, [retmode])</TT></h3><A NAME="call"></A>
+This function calls function <CODE>func</CODE> with
+the arguments given by the table <CODE>arg</CODE>.
+The call is equivalent to
+<LISTING>
+ func(arg[1], arg[2], ..., arg[arg.n])
+</LISTING>
+If <CODE>arg.n</CODE> is not defined,
+then Lua stops getting arguments at the first nil value.
+<P>
+If <CODE>retmode</CODE> is absent,
+all results from <CODE>func</CODE> are just returned by the call.
+If <CODE>retmode</CODE> is equal to <CODE>"pack"</CODE>,
+the results are <EM>packed</EM> in a single table.<A NAME="packed results"></A>
+That is, <CODE>call</CODE> returns just one table;
+at index <CODE>n</CODE>, the table has the total number of results
+from the call;
+the first result is at index 1, etc.
+For instance, the following calls produce the following results:
+<LISTING>
+a = call(sin, {5}) --&gt; a = 0.0871557 = sin(5)
+a = call(max, {1,4,5; n=2}) --&gt; a = 4 (only 1 and 4 are arguments)
+t = {x=1}
+a = call(next, {t,nil;n=2}, "pack") --&gt; a={"x", 1; n=2}
+</LISTING>
+<P>
+<h3> <TT>collectgarbage ([limit])</TT></h3><A NAME="collectgarbage"></A>
+Forces a garbage collection cycle.
+Returns the number of objects collected.
+An optional argument, <CODE>limit</CODE>, is a number that
+makes the next cycle occur when that number of new
+objects have been created.
+If absent, Lua uses an adaptable algorithm to set
+this limit.
+<CODE>collectgarbage</CODE> is equivalent to
+the API function <CODE>lua_collectgarbage</CODE>.
+<P>
+<h3> <TT>dofile (filename)</TT></h3><A NAME="dofile"></A>
+This function receives a file name,
+opens it, and executes its contents as a Lua chunk,
+or as pre-compiled chunks.
+When called without arguments,
+it executes the contents of the standard input (<CODE>stdin</CODE>).
+If there is any error executing the file,
+then <CODE>dofile</CODE> returns <B>nil</B>.
+Otherwise, it returns the values returned by the chunk,
+or a non <B>nil</B> value if the chunk returns no values.
+It issues an error when called with a non string argument.
+<CODE>dofile</CODE> is equivalent to the API function <CODE>lua_dofile</CODE>.
+<P>
+<h3> <TT>dostring (string [, errmethod])</TT></h3><A NAME="dostring"></A>
+This function executes a given string as a Lua chunk.
+If there is any error executing the string, it returns <B>nil</B>.
+Otherwise, it returns the values returned by the chunk,
+or a non <B>nil</B> value if the chunk returns no values.
+If provided, <CODE>errmethod</CODE> is temporarily set as the error method,
+while <CODE>string</CODE> runs.
+As a particular case, if <CODE>errmethod</CODE> is <B>nil</B>,
+no error messages will be issued during the execution of the string.
+<P>
+<A NAME="pdf-newtag"></A>
+<h3> <TT>newtag ()</TT></h3><A NAME="newtag"></A>
+Returns a new tag.
+<CODE>newtag</CODE> is equivalent to the API function <CODE>lua_newtag</CODE>.
+<P>
+<h3> <TT>next (table, index)</TT></h3><A NAME="next"></A>
+This function allows a program to traverse all fields of a table.
+Its first argument is a table and its second argument
+is an index in this table.
+It returns the next index of the table and the
+value associated with the index.
+When called with <B>nil</B> as its second argument,
+the function returns the first index
+of the table (and its associated value).
+When called with the last index, or with <B>nil</B> in an empty table,
+it returns <B>nil</B>.
+<P>
+In Lua there is no declaration of fields;
+semantically, there is no difference between a
+field not present in a table or a field with value <B>nil</B>.
+Therefore, the function only considers fields with non <B>nil</B> values.
+The order in which the indices are enumerated is not specified,
+<EM>not even for numeric indices</EM>
+(to traverse a table in numeric order,
+use a counter).
+If the table is modified in any way during a traversal,
+the semantics of <CODE>next</CODE> is undefined.
+<P>
+This function cannot be written with the standard API.
+<P>
+<h3> <TT>nextvar (name)</TT></h3><A NAME="nextvar"></A>
+This function is similar to the function <CODE>next</CODE>,
+but iterates over the global variables.
+Its single argument is the name of a global variable,
+or <B>nil</B> to get a first name.
+Similarly to <CODE>next</CODE>, it returns the name of another variable
+and its value,
+or <B>nil</B> if there are no more variables.
+There can be no assignments to global variables during the traversal;
+otherwise the semantics of <CODE>nextvar</CODE> is undefined.
+<P>
+This function cannot be written with the standard API.
+<P>
+<h3> <TT>tostring (e)</TT></h3><A NAME="tostring"></A>
+This function receives an argument of any type and
+converts it to a string in a reasonable format.
+<P>
+<h3> <TT>print (e1, e2, ...)</TT></h3><A NAME="print"></A>
+This function receives any number of arguments,
+and prints their values in a reasonable format.
+Each value is printed in a new line.
+This function is not intended for formatted output,
+but as a quick way to show a value,
+for instance for error messages or debugging.
+See Section&nbsp;<A HREF="#libio">6.4</A> for functions for formatted output.
+<P>
+<h3> <TT>tonumber (e)</TT></h3><A NAME="tonumber"></A>
+This function receives one argument,
+and tries to convert it to a number.
+If the argument is already a number or a string convertible
+to a number (see Section&nbsp;<A HREF="#coercion">4.3</A>), then it returns that number;
+otherwise, it returns <B>nil</B>.
+<P>
+<A NAME="pdf-type"></A>
+<h3> <TT>type (v)</TT></h3><A NAME="type"></A>
+This function allows Lua to test the type of a value.
+It receives one argument, and returns its type, coded as a string.
+The possible results of this function are
+<CODE>"nil"</CODE> (a string, not the value <B>nil</B>),
+<CODE>"number"</CODE>,
+<CODE>"string"</CODE>,
+<CODE>"table"</CODE>,
+<CODE>"function"</CODE>,
+and <CODE>"userdata"</CODE>.
+<CODE>type</CODE> is equivalent to the API function <CODE>lua_type</CODE>.
+<P>
+<h3> <TT>tag (v)</TT></h3><A NAME="tag"></A>
+This function allows Lua to test the tag of a value (see Section&nbsp;<A HREF="#TypesSec">3</A>).
+It receives one argument, and returns its tag (a number).
+<CODE>tag</CODE> is equivalent to the API function <CODE>lua_tag</CODE>.
+<P>
+<h3> <TT>settag (t, tag)</TT></h3><A NAME="settag"></A>
+This function sets the tag of a given table (see Section&nbsp;<A HREF="#TypesSec">3</A>).
+<CODE>tag</CODE> must be a value created with <CODE>newtag</CODE>
+(see Section&nbsp;<A HREF="#pdf-newtag">6.1</A>).
+For security reasons,
+it is impossible to change the tag of a userdata from Lua.
+<P>
+<h3> <TT>assert (v)</TT></h3><A NAME="assert"></A>
+This function issues an <EM>``assertion failed!''</EM> error
+when its argument is <B>nil</B>.
+<P>
+<A NAME="pdf-error"></A>
+<h3> <TT>error (message)</TT></h3><A NAME="error"></A>
+This function issues an error message and terminates
+the last called function from the library
+(<CODE>lua_dofile</CODE>, <CODE>lua_dostring</CODE>, or <CODE>lua_callfunction</CODE>).
+It never returns.
+<CODE>error</CODE> is equivalent to the API function <CODE>lua_error</CODE>.
+<P>
+<h3> <TT>rawgettable (table, index)</TT></h3><A NAME="rawgettable"></A>
+Gets the real value of <CODE>table[index]</CODE>,
+without invoking any tag method.
+<CODE>table</CODE> must be a table,
+and <CODE>index</CODE> is any value different from <B>nil</B>.
+<P>
+<h3> <TT>rawsettable (table, index, value)</TT></h3><A NAME="rawsettable"></A>
+Sets the real value <CODE>table[index]=value</CODE>,
+without invoking any tag method.
+<CODE>table</CODE> must be a table,
+<CODE>index</CODE> is any value different from <B>nil</B>,
+and <CODE>value</CODE> is any Lua value.
+<P>
+<h3> <TT>rawsetglobal (name, value)</TT></h3><A NAME="rawsetglobal"></A>
+This function assigns the given value to a global variable.
+The string <CODE>name</CODE> does not need to be a syntactically valid variable name.
+Therefore, this function can set global variables with strange names like
+<CODE>"m v 1"</CODE> or <CODE>34</CODE>.
+It returns the value of its second argument.
+<P>
+<h3> <TT>setglobal (name, value)</TT></h3><A NAME="setglobal"></A>
+This function assigns the given value to a global variable,
+or calls a tag method.
+Its full semantics is explained in Section&nbsp;<A HREF="#tag-method">4.8</A>.
+<P>
+<h3> <TT>rawgetglobal (name)</TT></h3><A NAME="rawgetglobal"></A>
+This function retrieves the value of a global variable.
+The string <CODE>name</CODE> does not need to be a
+syntactically valid variable name.
+<P>
+<h3> <TT>getglobal (name)</TT></h3><A NAME="getglobal"></A>
+This function retrieves the value of a global variable,
+or calls a tag method.
+Its full semantics is explained in Section&nbsp;<A HREF="#tag-method">4.8</A>.
+<P>
+<h3> <TT>seterrormethod (newmethod)</TT></h3>
+<A NAME="pdf-seterrormethod"></A>
+
+Sets the error handler (see Section&nbsp;<A HREF="#error">4.9</A>).
+<CODE>newmethod</CODE> must be a function or <B>nil</B>,
+in which case the error handler does nothing.
+Returns the old error handler.
+<P>
+<h3> <TT>settagmethod (tag, event, newmethod)</TT></h3>
+<A NAME="settagmethod"></A>
+This function sets a new tag method to the given pair <EM>&lt;tag, event&gt;</EM>.
+It returns the old method.
+If <CODE>newmethod</CODE> is <B>nil</B>,
+it restores the default behavior for the given event.
+<P>
+<h3> <TT>gettagmethod (tag, event)</TT></h3>
+<A NAME="gettagmethod"></A>
+This function returns the current tag method
+for a given pair <EM>&lt;tag, event&gt;</EM>.
+<P>
+<P>
+<A NAME="6.2"></A>
+<H2>6.2 - String Manipulation</H2>
+This library provides generic functions for string manipulation,
+such as finding and extracting substrings and pattern matching.
+When indexing a string, the first character is at position&nbsp;1,
+not&nbsp;0, as in C.
+<P>
+<h3> <TT>strfind (str, pattern [, init [, plain]])</TT></h3>
+<A NAME="strfind"></A>
+This function looks for the first <EM>match</EM> of
+<CODE>pattern</CODE> in <CODE>str</CODE>.
+If it finds one, then it returns the indices on <CODE>str</CODE>
+where this occurrence starts and ends;
+otherwise, it returns <B>nil</B>.
+If the pattern specifies captures,
+the captured strings are returned as extra results.
+A third optional numerical argument specifies where to start the search;
+its default value is 1.
+A value of 1 as a fourth optional argument
+turns off the pattern matching facilities,
+so the function does a plain ``find substring'' operation,
+with no characters in <CODE>pattern</CODE> being considered ``magic''.
+<P>
+<h3> <TT>strlen (s)</TT></h3><A NAME="strlen"></A>
+Receives a string and returns its length.
+<P>
+<h3> <TT>strsub (s, i [, j])</TT></h3><A NAME="strsub"></A>
+Returns another string, which is a substring of <CODE>s</CODE>,
+starting at <CODE>i</CODE> and running until <CODE>j</CODE>.
+If <CODE>i</CODE> or <CODE>j</CODE> are negative,
+they are replaced by the length of the string minus their
+absolute value plus 1.
+Therefore, -1 points to the last character of <CODE>s</CODE>
+and -2 to the previous one.
+If <CODE>j</CODE> is absent, it is assumed to be equal to -1
+(which is the same as the string length).
+In particular,
+the call <CODE>strsub(s,1,j)</CODE> returns a prefix of <CODE>s</CODE>
+with length <CODE>j</CODE>,
+and the call <CODE>strsub(s, -i)</CODE> returns a suffix of <CODE>s</CODE>
+with length <CODE>i</CODE>.
+<P>
+<h3> <TT>strlower (s)</TT></h3><A NAME="strlower"></A>
+Receives a string and returns a copy of that string with all
+upper case letters changed to lower case.
+All other characters are left unchanged.
+<P>
+<h3> <TT>strupper (s)</TT></h3><A NAME="strupper"></A>
+Receives a string and returns a copy of that string with all
+lower case letters changed to upper case.
+All other characters are left unchanged.
+<P>
+<h3> <TT>strrep (s, n)</TT></h3><A NAME="strrep"></A>
+Returns a string which is the concatenation of <CODE>n</CODE> copies of
+the string <CODE>s</CODE>.
+<P>
+<h3> <TT>ascii (s [, i])</TT></h3><A NAME="ascii"></A>
+Returns the ASCII code of the character <CODE>s[i]</CODE>.
+If <CODE>i</CODE> is absent, then it is assumed to be 1.
+<P>
+<h3> <TT>format (formatstring, e1, e2, ...)</TT></h3><A NAME="format"></A>
+<A NAME="format"></A>
+
+This function returns a formated version of its variable number of arguments
+following the description given in its first argument (which must be a string).
+The format string follows the same rules as the <CODE>printf</CODE> family of
+standard C functions.
+The only differences are that the options/modifiers
+<CODE>*</CODE>, <CODE>l</CODE>, <CODE>L</CODE>, <CODE>n</CODE>, <CODE>p</CODE>,
+and <CODE>h</CODE> are not supported,
+and there is an extra option, <CODE>q</CODE>.
+This option formats a string in a form suitable to be safely read
+back by the Lua interpreter;
+that is,
+the string is written between double quotes,
+and all double quotes, returns and backslashes in the string
+are correctly escaped when written.
+For instance, the call
+<LISTING>
+format('%q', 'a string with "quotes" and \n new line')
+</LISTING>
+will produce the string:
+<LISTING>
+"a string with \"quotes\" and \
+ new line"
+</LISTING>
+<P>
+The options <CODE>c</CODE>, <CODE>d</CODE>, <CODE>E</CODE>, <CODE>e</CODE>, <CODE>f</CODE>,
+<CODE>g</CODE> <CODE>i</CODE>, <CODE>o</CODE>, <CODE>u</CODE>, <CODE>X</CODE>, and <CODE>x</CODE> all
+expect a number as argument,
+whereas <CODE>q</CODE> and <CODE>s</CODE> expect a string.
+Note that the <CODE>*</CODE> modifier can be simulated by building
+the appropriate format string.
+For example, <CODE>"%*g"</CODE> can be simulated with
+<CODE>"%"..width.."g"</CODE>.
+<P>
+<h3> <TT>gsub (s, pat, repl [, table] [, n])</TT></h3>
+<A NAME="gsub"></A>
+Returns a copy of <CODE>s</CODE>,
+where all occurrences of the pattern <CODE>pat</CODE> have been
+replaced by a replacement string specified by <CODE>repl</CODE>.
+This function also returns, as a second value,
+the total number of substitutions made.
+<P>
+If <CODE>repl</CODE> is a string, then its value is used for replacement.
+Any sequence in <CODE>repl</CODE> of the form <CODE>%n</CODE>
+with <CODE>n</CODE> between 1 and 9
+stands for the value of the n-th captured substring.
+<P>
+If <CODE>repl</CODE> is a function, then this function is called every time a
+match occurs, with the following arguments:
+If <CODE>table</CODE> is present, then the first argument is this table
+and the second one is a match counter (1 for the first call).
+Independently of these two optional arguments,
+all captured substrings are passed as arguments,
+in order (see below);
+If the value returned by this function is a string,
+then it is used as the replacement string;
+otherwise, the replacement string is the empty string.
+<P>
+A last optional parameter <CODE>n</CODE> limits
+the maximum number of substitutions to occur.
+For instance, when <CODE>n</CODE> is 1 only the first occurrence of
+<CODE>pat</CODE> is replaced.
+<P>
+See some examples below:
+<LISTING>
+ x = gsub("hello world", "(%w%w*)", "%1 %1", 1)
+ --&gt; x="hello hello world"
+<P>
+ x = gsub("home = $HOME, user = $USER", "$(%w%w*)", getenv)
+ --&gt; x="home = /home/roberto, user = roberto" (for instance)
+<P>
+ x = gsub("4+5 = $return 4+5$", "$(.-)%$", dostring)
+ --&gt; x="4+5 = 9"
+<P>
+ function f(t, i, v) return t[v] end
+ t = {name="lua", version="3.0"}
+ x = gsub("$name - $version", "$(%w%w*)", f, t)
+ --&gt; x="lua - 3.0"
+<P>
+ t = {"apple", "orange", "lime"}
+ x = gsub("x and x and x", "x", rawgettable, t)
+ --&gt; x="apple and orange and lime"
+<P>
+ t = {}
+ dummy, t.n = gsub("first second word", "(%w%w*)", rawsettable, t)
+ --&gt; t={"first", "second", "word"; n=3}
+</LISTING>
+<P>
+<P>
+<A NAME="pm"></A>
+<h3>Patterns</h3>
+<P>
+<H4>Character Class:</H4>
+a <A NAME="character class"><EM>character class</EM></A> is used to represent a set of characters.
+The following combinations are allowed in describing a character class:
+<DL>
+<DT><B><EM>x</EM></B><DD> (where <EM>x</EM> is any character not in the list <CODE>()%.[*-?</CODE>)
+- represents the character <EM>x</EM> itself.
+<DT><B><TT>.</TT></B><DD> - represents all characters.
+<DT><B><TT>%a</TT></B><DD> - represents all letters.
+<DT><B><TT>%A</TT></B><DD> - represents all non letter characters.
+<DT><B><TT>%d</TT></B><DD> - represents all digits.
+<DT><B><TT>%D</TT></B><DD> - represents all non digits.
+<DT><B><TT>%l</TT></B><DD> - represents all lower case letters.
+<DT><B><TT>%L</TT></B><DD> - represents all non lower case letter characters.
+<DT><B><TT>%s</TT></B><DD> - represents all space characters.
+<DT><B><TT>%S</TT></B><DD> - represents all non space characters.
+<DT><B><TT>%u</TT></B><DD> - represents all upper case letters.
+<DT><B><TT>%U</TT></B><DD> - represents all non upper case letter characters.
+<DT><B><TT>%w</TT></B><DD> - represents all alphanumeric characters.
+<DT><B><TT>%W</TT></B><DD> - represents all non alphanumeric characters.
+<DT><B><TT>%<EM>x</TT></EM></B><DD> (where <EM>x</EM> is any non alphanumeric character) -
+represents the character <EM>x</EM>.
+This is the standard way to escape the magic characters <CODE>()%.[*-?</CODE>.
+<DT><B><TT>[char-set]</TT></B><DD> -
+Represents the class which is the union of all
+characters in char-set.
+To include a <CODE>]</CODE> in char-set, it must be the first character.
+A range of characters may be specified by
+separating the end characters of the range with a <CODE>-</CODE>;
+e.g., <CODE>A-Z</CODE> specifies the upper case characters.
+If <CODE>-</CODE> appears as the first or last character of char-set,
+then it represents itself.
+All classes <CODE>%</CODE><EM>x</EM> described above can also be used as
+components in a char-set.
+All other characters in char-set represent themselves.
+<DT><B><TT>[^char-set]</TT></B><DD> -
+represents the complement of char-set,
+where char-set is interpreted as above.
+</DL>
+<P>
+<H4>Pattern Item:</H4>
+a <A NAME="pattern item"><EM>pattern item</EM></A> may be:
+<UL>
+<LI>
+a single character class,
+which matches any single character in the class;
+<LI>
+a single character class followed by <CODE>*</CODE>,
+which matches 0 or more repetitions of characters in the class.
+These repetition items will always match the longest possible sequence.
+<LI>
+a single character class followed by <CODE>-</CODE>,
+which also matches 0 or more repetitions of characters in the class.
+Unlike <CODE>*</CODE>,
+these repetition items will always match the shortest possible sequence.
+<LI>
+a single character class followed by <CODE>?</CODE>,
+which matches 0 or 1 occurrence of a character in the class;
+<LI>
+<TT>%<EM>n</TT></EM>, for <EM>n</EM> between 1 and 9;
+such item matches a sub-string equal to the n-th captured string
+(see below);
+<LI>
+<TT>%b<EM>xy</TT></EM>, where <EM>x</EM> and <EM>y</EM> are two distinct characters;
+such item matches strings that start with <EM>x</EM>, end with <EM>y</EM>,
+and where the <EM>x</EM> and <EM>y</EM> are <EM>balanced</EM>.
+That means that, if one reads the string from left to write,
+counting plus 1 for an <EM>x</EM> and minus 1 for a <EM>y</EM>,
+the ending <EM>y</EM> is the first where the count reaches 0.
+For instance, the item <CODE>%b()</CODE> matches expressions with
+balanced parentheses.
+</UL>
+<P>
+<H4>Pattern:</H4>
+a <A NAME="pattern"><EM>pattern</EM></A> is a sequence of pattern items.
+A <CODE>^</CODE> at the beginning of a pattern anchors the match at the
+beginning of the subject string.
+A <CODE>$</CODE> at the end of a pattern anchors the match at the
+end of the subject string.
+<P>
+<H4>Captures:</H4>
+a pattern may contain sub-patterns enclosed in parentheses,
+that describe <A NAME="captures"><EM>captures</EM></A>.
+When a match succeeds, the sub-strings of the subject string
+that match captures are stored (<EM>captured</EM>) for future use.
+Captures are numbered according to their left parentheses.
+For instance, in the pattern <CODE>"(a*(.)%w(%s*))"</CODE>,
+the part of the string matching <CODE>"a*(.)%w(%s*)"</CODE> is
+stored as the first capture (and therefore has number 1);
+the character matching <CODE>.</CODE> is captured with number 2,
+and the part matching <CODE>%s*</CODE> has number 3.
+<P>
+<A NAME="mathlib"></A>
+<A NAME="6.3"></A>
+<H2>6.3 - Mathematical Functions</H2>
+<P>
+This library is an interface to some functions of the standard C math library.
+In addition, it registers a tag method for the binary operator <CODE>^</CODE> that
+returns <I>x^y</I> when applied to numbers <CODE>x^y</CODE>.
+<P>
+The library provides the following functions:
+<A NAME="abs"></A><A NAME="acos"></A><A NAME="asin"></A><A NAME="atan"></A>
+<A NAME="atan2"></A><A NAME="ceil"></A><A NAME="cos"></A><A NAME="floor"></A>
+<A NAME="log"></A><A NAME="log10"></A><A NAME="max"></A><A NAME="min"></A>
+<A NAME="mod"></A><A NAME="sin"></A><A NAME="sqrt"></A><A NAME="tan"></A>
+<A NAME="random"></A><A NAME="randomseed"></A>
+<LISTING>
+abs acos asin atan atan2 ceil cos floor log log10
+max min mod sin sqrt tan random randomseed
+</LISTING>
+Most of them
+are only interfaces to the homonymous functions in the C library,
+except that, for the trigonometric functions,
+all angles are expressed in <EM>degrees</EM>, not radians.
+<P>
+The function <CODE>max</CODE> returns the maximum
+value of its numeric arguments.
+Similarly, <CODE>min</CODE> computes the minimum.
+Both can be used with an unlimited number of arguments.
+<P>
+The functions <CODE>random</CODE> and <CODE>randomseed</CODE> are interfaces to
+the simple random generator functions <CODE>rand</CODE> and <CODE>srand</CODE>,
+provided by ANSI C.
+The function <CODE>random</CODE> returns pseudo-random numbers in the
+range <I>[0,1)</I>.
+<P>
+<P>
+<A NAME="libio"></A>
+<A NAME="6.4"></A>
+<H2>6.4 - I/O Facilities</H2>
+<P>
+All input and output operations in Lua are done over two
+<A NAME="file handles"><EM>file handles</EM></A>, one for reading and one for writing.
+These handles are stored in two Lua global variables,
+called <CODE>_INPUT</CODE> and <CODE>_OUTPUT</CODE>.
+The global variables
+<CODE>_STDIN</CODE>, <CODE>_STDOUT</CODE> and <CODE>_STDERR</CODE>
+are initialized with file descriptors for
+<CODE>stdin</CODE>, <CODE>stdout</CODE> and <CODE>stderr</CODE>.
+Initially, <CODE>_INPUT=_STDIN</CODE> and <CODE>_OUTPUT=_STDOUT</CODE>.
+<A NAME="_INPUT"></A><A NAME="_OUTPUT"></A>
+<A NAME="_STDIN"></A><A NAME="_STDOUT"></A><A NAME="_STDERR"></A>
+<P>
+A file handle is a userdata containing the file stream <CODE>FILE*</CODE>,
+and with a distinctive tag created by the I/O library.
+<P>
+<P>
+Unless otherwise stated,
+all I/O functions return <B>nil</B> on failure and
+some value different from <B>nil</B> on success.
+<P>
+<h3> <TT>readfrom (filename)</TT></h3><A NAME="readfrom"></A>
+<P>
+This function may be called in two ways.
+When called with a file name, it opens the named file,
+sets its handle as the value of <CODE>_INPUT</CODE>,
+and returns this value.
+It does not close the current input file.
+When called without parameters,
+it closes the <CODE>_INPUT</CODE> file,
+and restores <CODE>stdin</CODE> as the value of <CODE>_INPUT</CODE>.
+<P>
+If this function fails, it returns <B>nil</B>,
+plus a string describing the error.
+<P>
+<CITE>
+<EM>System dependent</EM>: if <CODE>filename</CODE> starts with a <CODE>|</CODE>,
+then a <A NAME="piped input">piped input</A> is open, via function <A NAME="popen"><TT>popen</TT></A>.
+Not all systems implement pipes.
+Moreover,
+the number of files that can be open at the same time is
+usually limited and depends on the system.
+</CITE>
+<P>
+<h3> <TT>writeto (filename)</TT></h3><A NAME="writeto"></A>
+<P>
+This function may be called in two ways.
+When called with a file name,
+it opens the named file,
+sets its handle as the value of <CODE>_OUTPUT</CODE>,
+and returns this value.
+It does not close the current output file.
+Notice that, if the file already exists,
+then it will be <EM>completely erased</EM> with this operation.
+When called without parameters,
+this function closes the <CODE>_OUTPUT</CODE> file,
+and restores <CODE>stdout</CODE> as the value of <CODE>_OUTPUT</CODE>.
+<A NAME="closing a file"></A>
+<P>
+If this function fails, it returns <B>nil</B>,
+plus a string describing the error.
+<P>
+<CITE>
+<EM>System dependent</EM>: if <CODE>filename</CODE> starts with a <CODE>|</CODE>,
+then a <A NAME="piped output">piped output</A> is open, via function <A NAME="popen"><TT>popen</TT></A>.
+Not all systems implement pipes.
+Moreover,
+the number of files that can be open at the same time is
+usually limited and depends on the system.
+</CITE>
+<P>
+<h3> <TT>appendto (filename)</TT></h3><A NAME="appendto"></A>
+<P>
+This function opens a file named <CODE>filename</CODE> and sets it as the
+value of <CODE>_OUTPUT</CODE>.
+Unlike the <CODE>writeto</CODE> operation,
+this function does not erase any previous content of the file.
+If this function fails, it returns <B>nil</B>,
+plus a string describing the error.
+<P>
+Notice that function <CODE>writeto</CODE> is available to close an output file.
+<P>
+<h3> <TT>remove (filename)</TT></h3><A NAME="remove"></A>
+<P>
+This function deletes the file with the given name.
+If this function fails, it returns <B>nil</B>,
+plus a string describing the error.
+<P>
+<h3> <TT>rename (name1, name2)</TT></h3><A NAME="rename"></A>
+<P>
+This function renames file named <CODE>name1</CODE> to <CODE>name2</CODE>.
+If this function fails, it returns <B>nil</B>,
+plus a string describing the error.
+<P>
+<h3> <TT>tmpname ()</TT></h3><A NAME="tmpname"></A>
+<P>
+This function returns a string with a file name that can safely
+be used for a temporary file.
+The file must be explicitly removed when no longer needed.
+<P>
+<h3> <TT>read ([readpattern])</TT></h3><A NAME="read"></A>
+<P>
+This function reads the file <CODE>_INPUT</CODE>
+according to a read pattern, that specifies how much to read;
+characters are read from the current input file until
+the read pattern fails or ends.
+The function <CODE>read</CODE> returns a string with the characters read,
+even if the pattern succeeds only partially,
+or <B>nil</B> if the read pattern fails <EM>and</EM>
+the result string would be empty.
+When called without parameters,
+it uses a default pattern that reads the next line
+(see below).
+<P>
+A <A NAME="read pattern"><EM>read pattern</EM></A> is a sequence of read pattern items.
+An item may be a single character class
+or a character class followed by <CODE>?</CODE> or by <CODE>*</CODE>.
+A single character class reads the next character from the input
+if it belongs to the class, otherwise it fails.
+A character class followed by <CODE>?</CODE> reads the next character
+from the input if it belongs to the class;
+it never fails.
+A character class followed by <CODE>*</CODE> reads until a character that
+does not belong to the class, or end of file;
+since it can match a sequence of zero characters, it never fails.
+\footnote{
+Notice that the behavior of read patterns is different from
+the regular pattern matching behavior,
+where a <CODE>*</CODE> expands to the maximum length <EM>such that</EM>
+the rest of the pattern does not fail.
+With the read pattern behavior
+there is no need for backtracking the reading.
+}
+<P>
+A pattern item may contain sub-patterns enclosed in curly brackets,
+that describe <A NAME="skips"><EM>skips</EM></A>.
+Characters matching a skip are read,
+but are not included in the resulting string.
+<P>
+Following are some examples of read patterns and their meanings:
+<UL>
+<LI><CODE>"."</CODE> returns the next character, or <B>nil</B> on end of file.
+<LI><CODE>".*"</CODE> reads the whole file.
+<LI><CODE>"[^\n]*{\n}"</CODE> returns the next line
+(skipping the end of line), or <B>nil</B> on end of file.
+This is the default pattern.
+<LI><CODE>"{%s*}%S%S*"</CODE> returns the next word
+(maximal sequence of non white-space characters),
+skipping spaces if necessary,
+or <B>nil</B> on end of file.
+<LI><CODE>"{%s*}[+-]?%d%d*"</CODE> returns the next integer
+or <B>nil</B> if the next characters do not conform to an integer format.
+</UL>
+<P>
+<h3> <TT>write (value1, ...)</TT></h3><A NAME="write"></A>
+<P>
+This function writes the value of each of its arguments to the
+file <CODE>_OUTPUT</CODE>.
+The arguments must be strings or numbers.
+To write other values,
+use <CODE>tostring</CODE> or <CODE>format</CODE> before <CODE>write</CODE>.
+If this function fails, it returns <B>nil</B>,
+plus a string describing the error.
+<P>
+<h3> <TT>date ([format])</TT></h3><A NAME="date"></A>
+<P>
+This function returns a string containing date and time
+formatted according to the given string <CODE>format</CODE>,
+following the same rules of the ANSI C function <CODE>strftime</CODE>.
+When called without arguments,
+it returns a reasonable date and time representation that depends on
+the host system.
+<P>
+<h3> <TT>exit ([code])</TT></h3><A NAME="exit"></A>
+<P>
+This function calls the C function <CODE>exit</CODE>,
+with an optional <CODE>code</CODE>,
+to terminate the program.
+The default value for <CODE>code</CODE> is 1.
+<P>
+<h3> <TT>getenv (varname)</TT></h3><A NAME="getenv"></A>
+<P>
+Returns the value of the environment variable <CODE>varname</CODE>,
+or <B>nil</B> if the variable is not defined.
+<P>
+<h3> <TT>execute (command)</TT></h3><A NAME="execute"></A>
+<P>
+This function is equivalent to the C function <CODE>system</CODE>.
+It passes <CODE>command</CODE> to be executed by an operating system shell.
+It returns an error code, which is system-dependent.
+<P>
+<P>
+<A NAME="debugI"></A>
+<!-- ====================================================================== -->
+<HR>
+<A NAME="7."></A>
+<H1>7 - The Debugger Interface</H1>
+<P>
+Lua has no built-in debugging facilities.
+Instead, it offers a special interface,
+by means of functions and <EM>hooks</EM>,
+which allows the construction of different
+kinds of debuggers, profilers, and other tools
+that need ``inside information'' from the interpreter.
+This interface is declared in the header file <CODE>luadebug.h</CODE>.
+<P>
+<A NAME="7.1"></A>
+<H2>7.1 - Stack and Function Information</H2>
+<P>
+The main function to get information about the interpreter stack
+is
+<LISTING>
+lua_Function lua_stackedfunction (int level);
+</LISTING>
+It returns a handle (<CODE>lua_Function</CODE>) to the <EM>activation record</EM>
+of the function executing at a given level.
+Level&nbsp;0 is the current running function,
+while level <I>n+1</I> is the function that has called level <I>n</I>.
+When called with a level greater than the stack depth,
+<CODE>lua_stackedfunction</CODE> returns <CODE>LUA_NOOBJECT</CODE>.
+<P>
+The type <CODE>lua_Function</CODE> is just another name
+to <CODE>lua_Object</CODE>.
+Although, in this library,
+a <CODE>lua_Function</CODE> can be used wherever a <CODE>lua_Object</CODE> is required,
+when a parameter has type <CODE>lua_Function</CODE>
+it accepts only a handle returned by
+<CODE>lua_stackedfunction</CODE>.
+<P>
+Three other functions produce extra information about a function:
+<LISTING>
+void lua_funcinfo (lua_Object func, char **filename, int *linedefined);
+int lua_currentline (lua_Function func);
+char *lua_getobjname (lua_Object o, char **name);
+</LISTING>
+<CODE>lua_funcinfo</CODE> gives the file name and the line where the
+given function has been defined.
+If the ``function'' is in fact the main code of a chunk,
+then <CODE>linedefined</CODE> is 0.
+If the function is a C function,
+then <CODE>linedefined</CODE> is -1, and <CODE>filename</CODE> is <CODE>"(C)"</CODE>.
+<P>
+The function <CODE>lua_currentline</CODE> gives the current line where
+a given function is executing.
+It only works if the function has been compiled with debug
+information (see Section&nbsp;<A HREF="#pragma">4.9</A>).
+When no line information is available, it returns -1.
+<P>
+Function <CODE>lua_getobjname</CODE> tries to find a reasonable name for
+a given function.
+Because functions in Lua are first class values,
+they do not have a fixed name:
+Some functions may be the value of many global variables,
+while others may be stored only in a table field.
+Function <CODE>lua_getobjname</CODE> first checks whether the given
+function is a tag method.
+If so, it returns the string <CODE>"tag-method"</CODE>,
+and <CODE>name</CODE> is set to point to the event name.
+Otherwise, if the given function is the value of a global variable,
+then <CODE>lua_getobjname</CODE> returns the string <CODE>"global"</CODE>,
+and <CODE>name</CODE> points to the variable name.
+If the given function is neither a tag method nor a global variable,
+then <CODE>lua_getobjname</CODE> returns the empty string,
+and <CODE>name</CODE> is set to <CODE>NULL</CODE>.
+<P>
+<A NAME="7.2"></A>
+<H2>7.2 - Manipulating Local Variables</H2>
+<P>
+The following functions allow the manipulation of the
+local variables of a given activation record.
+They only work if the function has been compiled with debug
+information (see Section&nbsp;<A HREF="#pragma">4.9</A>).
+<LISTING>
+lua_Object lua_getlocal (lua_Function func, int local_number, char **name);
+int lua_setlocal (lua_Function func, int local_number);
+</LISTING>
+<CODE>lua_getlocal</CODE> returns the value of a local variable,
+and sets <CODE>name</CODE> to point to the variable name.
+<CODE>local_number</CODE> is an index for local variables.
+The first parameter has index 1, and so on, until the
+last active local variable.
+When called with a <CODE>local_number</CODE> greater than the
+number of active local variables,
+or if the activation record has no debug information,
+<CODE>lua_getlocal</CODE> returns <CODE>LUA_NOOBJECT</CODE>.
+Formal parameters are the first local variables.
+<P>
+The function <CODE>lua_setlocal</CODE> sets the local variable
+<CODE>local_number</CODE> to the value previously pushed on the stack
+(see Section&nbsp;<A HREF="#valuesCLua">5.1</A>).
+If the function succeeds, then it returns 1.
+If <CODE>local_number</CODE> is greater than the number
+of active local variables,
+or if the activation record has no debug information,
+then this function fails and returns 0.
+<P>
+<A NAME="7.3"></A>
+<H2>7.3 - Hooks</H2>
+<P>
+The Lua interpreter offers two hooks for debugging purposes:
+<LISTING>
+typedef void (*lua_CHFunction) (lua_Function func, char *file, int line);
+extern lua_CHFunction lua_callhook;
+<P>
+typedef void (*lua_LHFunction) (int line);
+extern lua_LHFunction lua_linehook;
+</LISTING>
+The first one is called whenever the interpreter enters or leaves a
+function.
+When entering a function,
+its parameters are a handle to the function activation record,
+plus the file and the line where the function is defined (the same
+information which is provided by <CODE>lua_funcinfo</CODE>);
+when leaving a function, <CODE>func</CODE> is <CODE>LUA_NOOBJECT</CODE>,
+<CODE>file</CODE> is <CODE>"(return)"</CODE>, and <CODE>line</CODE> is 0.
+<P>
+The other hook is called every time the interpreter changes
+the line of code it is executing.
+Its only parameter is the line number
+(the same information which is provided by the call
+<CODE>lua_currentline(lua_stackedfunction(0))</CODE>).
+This second hook is only called if the active function
+has been compiled with debug information (see Section&nbsp;<A HREF="#pragma">4.9</A>).
+<P>
+A hook is disabled when its value is <CODE>NULL</CODE>,
+which is the initial value of both hooks.
+<P>
+<P>
+<P>
+<A NAME="lua-sa"></A>
+<!-- ====================================================================== -->
+<HR>
+<A NAME="8."></A>
+<H1>8 - Lua Stand-alone</H1>
+<P>
+Although Lua has been designed as an extension language,
+the language can also be used as a stand-alone interpreter.
+An implementation of such an interpreter,
+called simply <CODE>lua</CODE>,
+is provided with the standard distribution.
+This program can be called with any sequence of the following arguments:
+<DL>
+<DT><B><TT>-v</TT></B><DD> prints version information.
+<DT><B><TT>-</TT></B><DD> runs interactively, accepting commands from standard input
+until an <CODE>EOF</CODE>.
+<DT><B><TT>-e stat</TT></B><DD> executes <CODE>stat</CODE> as a Lua chunk.
+<DT><B><TT>var=exp</TT></B><DD> executes <CODE>var=exp</CODE> as a Lua chunk.
+<DT><B><TT>filename</TT></B><DD> executes file <CODE>filename</CODE> as a Lua chunk.
+</DL>
+All arguments are handled in order.
+For instance, an invocation like
+<LISTING>
+$ lua - a=1 prog.lua
+</LISTING>
+will first interact with the user until an <CODE>EOF</CODE>,
+then will set <CODE>a</CODE> to 1,
+and finally will run file <CODE>prog.lua</CODE>.
+<P>
+Please notice that the interaction with the shell may lead to
+unintended results.
+For instance, a call like
+<LISTING>
+$ lua a="name" prog.lua
+</LISTING>
+will <EM>not</EM> set <CODE>a</CODE> to the string <CODE>"name"</CODE>.
+Instead, the quotes will be handled by the shell,
+lua will get only <CODE>a=name</CODE> to run,
+and <CODE>a</CODE> will finish with <B>nil</B>,
+because the global variable <CODE>name</CODE> has not been initialized.
+Instead, one should write
+<LISTING>
+$ lua 'a="name"' prog.lua
+</LISTING>
+<P>
+<HR>
+<A NAME="Acknowledgments"></A>
+<h1>Acknowledgments</h1>
+<P>
+The authors would like to thank CENPES/PETROBRAS which,
+jointly with TeCGraf, used extensively early versions of
+this system and gave valuable comments.
+The authors would also like to thank Carlos Henrique Levy,
+who found the name of the game.
+Lua means <EM>moon</EM> in Portuguese.
+<P>
+<P>
+<P>
+<P>
+<HR>
+<A NAME="Incompatibilities"></A>
+<h1>Incompatibilities with Previous Versions</h1>
+<P>
+Although great care has been taken to avoid incompatibilities with
+the previous public versions of Lua,
+some differences had to be introduced.
+Here is a list of all these incompatibilities.
+<P>
+<h2>Incompatibilities with <A NAME="version 2.5</h2>">version 2.5</h2></A>
+<UL>
+<LI>
+The whole fallback mechanism has been replaced by tag methods.
+Nevertheless, the function <CODE>setfallback</CODE> has been rewritten in
+a way that uses tag methods to fully emulate the old behavior
+of fallbacks.
+<LI>
+Tags now must be created with the function <CODE>newtag</CODE>.
+Nevertheless, old user defined tags are still accepted
+(user defined tags must be positive;
+<CODE>newtag</CODE> uses negative numbers).
+Tag methods cannot be set for such user defined tags,
+and fallbacks do not affect tags created by <CODE>newtag</CODE>.
+<LI>
+Lua 2.5 accepts mixed comparisons of strings and numbers,
+like <CODE>2&lt;"12"</CODE>, giving weird results.
+Now this is an error.
+<LI>
+Character <CODE>"-"</CODE> (hyphen) now is ``magic'' in pattern matching.
+<LI>
+Some API functions have been rewritten as macros.
+</UL>
+<P>
+<h2>Incompatibilities with <A NAME="version 2.4</h2>">version 2.4</h2></A>
+The whole I/O facilities have been rewritten.
+We strongly encourage programmers to adapt their code
+to this new version.
+The incompatibilities between the new and the old libraries are:
+<UL>
+<LI>The format facility of function <CODE>write</CODE> has been supersed by
+function <CODE>format</CODE>;
+therefore this facility has been dropped.
+<LI>Function <CODE>read</CODE> now uses <EM>read patterns</EM> to specify
+what to read;
+this is incompatible with the old format options.
+<LI>Function <CODE>strfind</CODE> now accepts patterns,
+so it may have a different behavior when the pattern includes
+special characters.
+</UL>
+<P>
+<h2>Incompatibilities with <A NAME="version 2.2</h2>">version 2.2</h2></A>
+<UL>
+<LI>
+Functions <CODE>date</CODE> and <CODE>time</CODE> (from <CODE>iolib</CODE>)
+have been superseded by the new, more powerful version of function <CODE>date</CODE>.
+<LI>
+Function <CODE>append</CODE> (from <CODE>iolib</CODE>) now returns 1 whenever it succeeds,
+whether the file is new or not.
+<LI>
+Function <CODE>int2str</CODE> (from <CODE>strlib</CODE>) has been superseded by new
+function <CODE>format</CODE>, with parameter <CODE>"%c"</CODE>.
+<LI>
+The API lock mechanism has been superseded by the reference mechanism.
+However, <CODE>lua.h</CODE> provides compatibility macros,
+so there is no need to change programs.
+<LI>
+The API function <CODE>lua_pushliteral</CODE> now is just a macro to
+<CODE>lua_pushstring</CODE>.
+</UL>
+<P>
+<h2>Incompatibilities with <A NAME="version 2.1</h2>">version 2.1</h2></A>
+<UL>
+<LI>
+The function <CODE>type</CODE> now returns the string <CODE>"function"</CODE>
+both for C and Lua functions.
+Because Lua functions and C functions are compatible,
+this behavior is usually more useful.
+When needed, the second result of function <TT>type</TT> may be used
+to distinguish between Lua and C functions.
+<LI>
+A function definition only assigns the function value to the
+given variable at execution time.
+</UL>
+<P>
+<h2>Incompatibilities with <A NAME="version 1.1</h2>">version 1.1</h2></A>
+<UL>
+<LI>
+The equality test operator now is denoted by <CODE>==</CODE>,
+instead of <CODE>=</CODE>.
+<LI>
+The syntax for table construction has been greatly simplified.
+The old <CODE>@(size)</CODE> has been substituted by <CODE>{}</CODE>.
+The list constructor (formerly <CODE>@[...]</CODE>) and the record
+constructor (formerly <CODE>@{...}</CODE>) now are both coded like
+<CODE>{...}</CODE>.
+When the construction involves a function call,
+like in <CODE>@func{...}</CODE>,
+the new syntax does not use the <CODE>@</CODE>.
+More important, {\em a construction function must now
+explicitly return the constructed table}.
+<LI>
+The function <CODE>lua_call</CODE> no longer has the parameter <CODE>nparam</CODE>.
+<LI>
+The function <CODE>lua_pop</CODE> is no longer available,
+since it could lead to strange behavior.
+In particular,
+to access results returned from a Lua function,
+the new macro <CODE>lua_getresult</CODE> should be used.
+<LI>
+The old functions <CODE>lua_storefield</CODE> and <CODE>lua_storeindexed</CODE>
+have been replaced by
+<LISTING>
+int lua_storesubscript (void);
+</LISTING>
+with the parameters explicitly pushed on the stack.
+<LI>
+The functionality of the function <CODE>lua_errorfunction</CODE> has been
+replaced by the <EM>fallback</EM> mechanism (see Section&nbsp;<A HREF="#error">4.9</A>).
+<LI>
+When calling a function from the Lua library,
+parameters passed through the stack
+must be pushed just before the corresponding call,
+with no intermediate calls to Lua.
+Special care should be taken with macros like
+<CODE>lua_getindexed</CODE> and <CODE>lua_getfield</CODE>.
+</UL>
+<P>
+<P>
+
+<HR>
+Last update:
+Tue Jul 1 07:55:45 EST 1997
+by <A HREF="http://www.tecgraf.puc-rio.br/~lhf/">lhf</A>.
+</BODY>
+</HTML>
diff --git a/doc/refman.ps b/doc/refman.ps
deleted file mode 100644
index 24896e0e..00000000
--- a/doc/refman.ps
+++ /dev/null
@@ -1,7807 +0,0 @@
-%!PS-Adobe-2.0
-%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
-%%Title: manual.dvi
-%%Pages: 39
-%%PageOrder: Ascend
-%%BoundingBox: 0 0 612 792
-%%DocumentPaperSizes: Letter
-%%EndComments
-%DVIPSCommandLine: /visgraf/pub/teTeX/bin/sun4/dvips manual
-%DVIPSParameters: dpi=600, comments removed
-%DVIPSSource: TeX output 1996.11.18:1940
-%%BeginProcSet: tex.pro
-/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
-/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
-mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
-ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
-isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
-hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
-TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
-forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
-/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
-/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
-/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
-string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
-end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
-/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
-N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
-length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
-128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
-get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
-dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
-/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
-/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
-0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
-setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
-.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
-if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
-length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
-cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
-0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
-add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
-/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
-known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
-/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
-65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
-0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
-{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
-getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
-ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
-RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
-false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
-round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
-rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
-{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
-B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
-4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
-p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
-a}B /bos{/SS save N}B /eos{SS restore}B end
-%%EndProcSet
-TeXDict begin 40258431 52099146 1000 600 600 (manual.dvi)
-@start /Fa 7 115 df<000000FFF00000000FFFFF8000003FFFFFF00000FFFFFFFC0001
-FFFFFFFC0007FFFFFFFC000FFF803FF8001FFC0003F8003FF00000F8007FC000003800FF
-8000001801FF0000000003FE0000000003FC0000000007FC0000000007F8000000000FF0
-000000000FF0000000001FE0000000001FE0000000003FC0000000003FC0000000003FC0
-000000007F80000000007F80000000007F80000000007F8000000000FF0000000000FF00
-00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
-00000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000000007F80
-000000007F80000000007F80000000007F80000000003FC0000000003FC0000000003FC0
-000000001FE0000000001FE0000000000FF0000000000FF00000000007F80000000007FC
-0000000003FC0000000003FE0000000001FF0000000400FF8000000C007FC000003C003F
-F000007C001FFC0001FE000FFF801FFE0007FFFFFFFE0001FFFFFFFC0000FFFFFFF00000
-3FFFFFC000000FFFFF00000000FFF0002F437AC03A>67 D<000000FFF000000007FFFF00
-00003FFFFFE00000FFFFFFF80001FFFFFFFE0007FFFFFFFE000FFF803FFE001FFC0003FC
-003FF00000FC007FE000003C00FF8000001C01FF0000000C01FE0000000003FC00000000
-07FC0000000007F8000000000FF0000000000FF0000000001FE0000000001FE000000000
-3FC0000000003FC0000000003FC0000000007F80000000007F80000000007F8000000000
-7F8000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
-FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF000007FFFF
-FF000007FFFFFF000007FFFF7F800007FFFF7F800007FFFF7F800007FFFF7F800000007F
-3FC00000007F3FC00000007F3FC00000007F1FE00000007F1FE00000007F0FF00000007F
-0FF00000007F07F80000007F07FC0000007F03FC0000007F01FE0000007F01FF0000007F
-00FF8000007F007FE000007F003FF000007F001FFC0001FF000FFF801FFF0007FFFFFFFF
-0001FFFFFFFF0000FFFFFFFC00003FFFFFF0000007FFFF00000000FFF00030437AC03D>
-71 D<FFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFF
-FFFEFFFFFFFFFFFFFE000000FF000000000000FF000000000000FF000000000000FF0000
-00000000FF000000000000FF000000000000FF000000000000FF000000000000FF000000
-000000FF000000000000FF000000000000FF000000000000FF000000000000FF00000000
-0000FF000000000000FF000000000000FF000000000000FF000000000000FF0000000000
-00FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000
-FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF
-000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF00
-0000000000FF000000000000FF000000000000FF000000000000FF000000000000FF0000
-00000000FF000000000000FF000000000000FF000000000000FF000000000000FF000000
-000000FF000000000000FF000000000000FF000000000000FF000000000000FF00000000
-0000FF000000000000FF000000000000FF000000000000FF000000000000FF0000000000
-00FF000000373E7DBD3E>84 D<000FF80000FFFF0003FFFF800FFFFFE01FFFFFF01FFFFF
-F01FF00FF81F8003FC1E0001FC180001FE100000FE000000FF0000007F0000007F000000
-7F0000007F0000007F0000007F0000007F00007FFF000FFFFF007FFFFF01FFFFFF07FFFF
-FF0FFFF07F3FFC007F3FC0007F7F00007FFE00007FFC00007FFC00007FFC00007FFC0000
-FFFE0000FFFE0001FF7F8007FF7FE01FFF3FFFFFFF3FFFFFFF1FFFFF7F0FFFFC7F07FFF0
-7F01FF0000202B7CA92C>97 D<0003F80000001FFF0000007FFFC00000FFFFE00001FFFF
-F00003FFFFF80007FE07F8000FF801FC000FE000FE001FC0007E003FC0003E003F80003F
-003F00001F007F00001F007E00001F007E00000F80FFFFFFFF80FFFFFFFF80FFFFFFFF80
-FFFFFFFF80FFFFFFFF80FFFFFFFF80FC00000000FC00000000FC00000000FE000000007E
-000000007E000000007F000000007F000000003F800000003F800000001FC00000001FE0
-0000800FF000038007FC001F8007FF00FF8003FFFFFF8001FFFFFF80007FFFFF00003FFF
-FC00000FFFE0000001FF0000212B7DA928>101 D<00001FF00000FFFC0001FFFC0007FF
-FC000FFFFC000FFFFC001FE03C003F8004003F0000007F0000007E000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE00001E407FBF1C>I<FC007CFC
-03FCFC0FFCFC1FFCFC3FFCFC7FFCFCFFC0FDFE00FFF800FFF000FFE000FFC000FFC000FF
-8000FF8000FF0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
-0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
-0000FE0000FE0000FE0000162979A81F>114 D E /Fb 7 121 df<001FFC00000000FFFF
-80000003FFFFE0000007FFFFF000000FFFFFFC00001FFFFFFE00001FF007FF00001FE001
-FF00001FE000FF80001FE0003F80000FC0003FC0000780001FC0000000001FE000000000
-0FE0000000000FE0000000000FE0000000000FE0000000000FE00000000FFFE0000001FF
-FFE000001FFFFFE000007FFFFFE00001FFFFFFE00007FFFF0FE0000FFFC00FE0001FFC00
-0FE0003FF0000FE0007FC0000FE0007F80000FE000FF00000FE000FE00000FE000FE0000
-0FE000FE00000FE000FE00000FE000FE00000FE000FF00001FE0007F00001FE0007F8000
-7FE0003FE000FFF0003FF807FFFFF01FFFFFFFFFF80FFFFFFFFFF807FFFFF3FFF803FFFF
-C1FFF800FFFF003FF0001FF00000002D2E7BAC33>97 D<0000FF80000007FFF000001FFF
-FC00003FFFFE0000FFFFFF0001FFFFFF8003FF80FFC007FE003FE007F8000FF00FF00007
-F01FE00007F81FC00003F83FC00003FC3F800001FC7F800001FC7F000001FC7F000001FE
-7F000000FEFF000000FEFE000000FEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFF
-FFFFFFFEFFFFFFFFFCFE00000000FF000000007F000000007F000000007F000000003F80
-0000003F8000007C1FC00000FE1FE00000FE0FF00000FE0FF80001FE07FC0003FC03FF00
-0FFC01FFC03FF800FFFFFFF0007FFFFFE0003FFFFFC0000FFFFF000003FFFC0000007FE0
-00272E7BAC33>101 D<000001FF00003FFC07FFC0007FFE1FFFF000FFFE7FFFF800FFFE
-FFFFF8007FFFFFFFFC003FFFFF07FE0000FFF801FE0000FFF000FE0000FFE000FF0000FF
-C0007F0000FF80007F0000FF80007F0000FF00007F0000FF00007F0000FF00007F0000FE
-00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE
-00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE
-00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE
-00007F0000FE00007F0000FE00007F0000FE00007F003FFFF80FFFFC7FFFFC1FFFFEFFFF
-FE3FFFFFFFFFFE3FFFFF7FFFFC1FFFFE3FFFF80FFFFC302C7FAB33>110
-D<00000003FE007FFF801FFF80FFFFC07FFFE0FFFFC1FFFFE0FFFFC3FFFFF0FFFFC7FFFF
-F07FFFCFFE0FF0001FDFF00FF0001FFFC007E0001FFF8003C0001FFF000000001FFE0000
-00001FFC000000001FF8000000001FF8000000001FF0000000001FF0000000001FE00000
-00001FE0000000001FE0000000001FC0000000001FC0000000001FC0000000001FC00000
-00001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000
-00001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000
-00001FC0000000001FC00000007FFFFFFE0000FFFFFFFF0000FFFFFFFF0000FFFFFFFF00
-00FFFFFFFF00007FFFFFFE00002C2C7DAB33>114 D<0003C00000000007E0000000000F
-E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
-E0000000000FE0000000000FE0000000000FE00000003FFFFFFFFC007FFFFFFFFE00FFFF
-FFFFFE00FFFFFFFFFE00FFFFFFFFFE007FFFFFFFFC00000FE0000000000FE0000000000F
-E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
-E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
-E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
-E0000000000FE0001F00000FE0003F80000FE0003F80000FE0003F80000FE0003F80000F
-E0003F80000FE0007F80000FF0007F000007F000FF000007F801FF000007FE07FE000003
-FFFFFC000001FFFFF8000000FFFFF00000007FFFE00000001FFF8000000007FC00002938
-7EB633>116 D<3FFFC00FFFF07FFFE01FFFF8FFFFF03FFFFCFFFFF03FFFFC7FFFE01FFF
-F83FFFC00FFFF001F800007E0001FC0000FE0000FC0000FC0000FC0000FC0000FE0001FC
-00007E0001F800007E0001F800007F0003F800003F0003F000003F0003F000003F8007F0
-00001F8007E000001F8007E000001FC00FE000000FC00FC000000FC00FC000000FC00FC0
-000007E01F80000007E01F80000007E01F80000007F03F80000003F03F00000003F03F00
-000003F87F00000001F87E00000001F87E00000001FCFE00000000FCFC00000000FCFC00
-000000FFFC000000007FF8000000007FF8000000007FF8000000003FF0000000003FF000
-0000001FE0000000000FC000002E2B7EAA33>118 D<3FFFC07FFF807FFFE0FFFFC0FFFF
-F1FFFFE0FFFFF1FFFFE07FFFE0FFFFC03FFFC07FFF8000FE000FE000007F001FC000003F
-801FC000003F803F8000001FC07F0000000FE07E00000007F0FE00000007F1FC00000003
-FBF800000001FFF800000000FFF000000000FFE0000000007FC0000000003FC000000000
-1F80000000003F80000000003FC0000000007FE000000000FFE000000001FBF000000001
-F9F800000003F1FC00000007E0FC00000007E07E0000000FC07F0000001FC03F8000003F
-801F8000003F001FC000007F000FE00000FE0007F00001FC0003F0007FFFC03FFFE0FFFF
-E07FFFF0FFFFE07FFFF0FFFFE07FFFF0FFFFE07FFFF07FFFC03FFFE02C2B7DAA33>120
-D E /Fc 1 43 df<000F0000001F8000001F8000001F8000001F8000001F8000001F8000
-781F81E0FE1F87F0FF1F8FF0FFDFBFF07FFFFFE03FFFFFC00FFFFF0003FFFC0000FFF000
-00FFF00003FFFC000FFFFF003FFFFFC07FFFFFE0FFDFBFF0FF1F8FF0FE1F87F0781F81E0
-001F8000001F8000001F8000001F8000001F8000001F8000000F00001C207BA627>42
-D E /Fd 1 122 df<01E0000007F8000E0E3C001F1C3E003F383E003E303E003E703E00
-3E607E007EE07C007CC07C007CC0FC007C80F800FC00F800F801F800F801F000F801F001
-F803F001F003E001F003E001F003E003F007E003E007C003E007C003E007C007E007C007
-C003C00FC003E01FC003E03FC001F07F80007FEF80001F8F8000001F8000001F0000001F
-003E003E003E003E007E007C007E00F8007C01F0007003E0003007C0003C0F80000FFE00
-0003F00000202C7E9D23>121 D E /Fe 3 121 df<1E007F80FF80FFC0FFC0FFE0FFE0FF
-E07FE01E60006000600060006000E000C000C000C001C001800380030007000E001C0018
-00380030000B1C798919>59 D<01F0000FF0000007FC003FFE00000F1F00F01F00000E1F
-03C00F80001E0F87000FC0001C0F8E0007C0003C0FDC0007E000380FF80007E000380FF0
-0007E000781FF00007E000701FE00007E000701FC00007E000701FC00007E000F01F8000
-0FE000F03F80000FC000003F00000FC000003F00000FC000003F00001FC000007F00001F
-8000007E00001F8000007E00003F8000007E00003F000000FE00003F000000FC00007F00
-0000FC00007E000000FC00007E000001FC0000FE038001F80000FC038001F80000FC0380
-01F80001FC078003F80001F8070003F00001F8070003F00001F80F0003F00001F00E0007
-F00001F01E0007E00001F01C0007E00001F0380007E00001F078000FE00000F8F0000FC0
-00007FC000038000001F000031297EA737>110 D<0001F8003F000007FE00FFE0001E0F
-83C0F0003807C780F8007003CF03F800E003FE03F801C003FC07F803C003FC07F8038003
-F807F8070003F807F0070003F801C00E0003F000000E0003F000001E0007F000001E0007
-F00000000007E00000000007E0000000000FE0000000000FC0000000000FC0000000000F
-C0000000001FC0000000001F80000000001F80000000001F80000000003F80000000003F
-0001C000003F0001C000003F0001C000007F0003C01E007F0003803F007E0007807F80FE
-0007007F80FE000F00FF81FE001E00FF01DF001C00FE03DF0038007C078F80F0003C0F07
-C1E0001FFC03FF800007F0007E00002D297EA734>120 D E /Ff
-51 121 df<0000000FFF0000000001FFFFC00000000FFFFFF00000007FFFFFF8000001FF
-F803FC000003FFC000FE00000FFF0003FE00001FFE0007FF00003FFC000FFF00003FF800
-0FFF00007FF0000FFF00007FF0001FFF8000FFF0000FFF0000FFE0000FFF0000FFE0000F
-FF0000FFE0000FFF0000FFE00007FE0000FFE00001F80000FFE00000000000FFE0000000
-0000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000000
-00FFE001FFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FF
-FFFFFFFFFF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FF
-E00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE0
-0003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE000
-03FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003
-FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF
-8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF80
-00FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF807FFFFFC1FFFFFF7F
-FFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF38467EC53E>12
-D<07C01FF03FF87FFCFFFEFFFEFFFEFFFEFFFEFFFEFFFE7FFC3FF81FF007C00F0F788E1F
->46 D<0000000001C00000000003E00000000007E00000000007E0000000000FE0000000
-000FC0000000001FC0000000001F80000000001F80000000003F80000000003F00000000
-007F00000000007E00000000007E0000000000FE0000000000FC0000000001FC00000000
-01F80000000001F80000000003F80000000003F00000000003F00000000007F000000000
-07E0000000000FE0000000000FC0000000000FC0000000001FC0000000001F8000000000
-3F80000000003F00000000003F00000000007F00000000007E0000000000FE0000000000
-FC0000000000FC0000000001FC0000000001F80000000003F80000000003F00000000003
-F00000000007F00000000007E0000000000FE0000000000FC0000000000FC0000000001F
-C0000000001F80000000003F80000000003F00000000003F00000000007F00000000007E
-00000000007E0000000000FE0000000000FC0000000001FC0000000001F80000000001F8
-0000000003F80000000003F00000000007F00000000007E00000000007E0000000000FE0
-000000000FC0000000001FC0000000001F80000000001F80000000003F80000000003F00
-000000007F00000000007E00000000007E0000000000FE0000000000FC0000000001FC00
-00000001F80000000001F80000000003F80000000003F00000000003F00000000007F000
-00000007E0000000000FE0000000000FC0000000000FC0000000001FC0000000001F8000
-0000003F80000000003F00000000003F00000000007F00000000007E0000000000FE0000
-000000FC0000000000FC0000000000F800000000007800000000002B647ACA38>I<0000
-3FF800000001FFFF0000000FFFFFE000003FFFFFF800007FF01FFC0000FFC007FE0001FF
-0001FF0003FE0000FF8007FE0000FFC007FC00007FC00FFC00007FE00FF800003FE01FF8
-00003FF01FF800003FF03FF800003FF83FF800003FF83FF000001FF87FF000001FFC7FF0
-00001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFCFFF000001FFEFFF0
-00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0
-00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0
-00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0
-00001FFEFFF000001FFE7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF0
-00001FFC3FF800003FF83FF800003FF83FF800003FF81FF800003FF01FF800003FF00FF8
-00003FE00FFC00007FE007FC00007FC007FE0000FFC003FF0001FF8001FF8003FF0000FF
-C007FE00007FF01FFC00003FFFFFF800000FFFFFE0000003FFFF800000003FF800002F42
-7CC038>I<000003C000000007C00000001FC00000007FC0000003FFC000003FFFC000FF
-FFFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFC3FFC0000003FFC0000003FFC0000003
-FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF
-C0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0
-000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000
-0003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000
-03FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003
-FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF
-C0000003FFC0000003FFC0000003FFC000FFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFFFFFFF
-FCFFFFFFFFFC264177C038>I<0000FFE00000000FFFFE0000003FFFFF800000FFFFFFE0
-0003FFFFFFF80007FC03FFFE000FE0007FFF001F80003FFF803F00000FFFC07F000007FF
-C07FC00007FFE07FF00003FFE0FFF00001FFF0FFF80001FFF0FFF80001FFF8FFF80000FF
-F8FFF80000FFF8FFF80000FFF8FFF80000FFF87FF00000FFF83FE00000FFF81FC00000FF
-F800000000FFF800000000FFF000000001FFF000000001FFF000000001FFE000000003FF
-E000000003FFC000000007FF800000000FFF000000000FFF000000001FFC000000003FF8
-000000003FF0000000007FE000000000FFC000000001FF0000000003FE0000000007FC00
-0000000FF0000000001FE0000000003F80000000007F0000780000FE0000780001FC0000
-780003F80000F80007E00000F0000FC00000F0001F800000F0003F000000F0007C000001
-F000F8000003F001FFFFFFFFF003FFFFFFFFE007FFFFFFFFE00FFFFFFFFFE01FFFFFFFFF
-E03FFFFFFFFFE07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFF
-C0FFFFFFFFFFC02D417BC038>I<0000FFF000000007FFFF0000001FFFFFC000007FFFFF
-F00000FF007FF80003F8003FFE0007E0001FFF0007E0000FFF000FF80007FF800FFE0007
-FF801FFE0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF0007
-FFC01FFF0007FFC00FFE0007FFC007FC0007FF8003F8000FFF800000000FFF000000001F
-FF000000001FFE000000003FFC000000007FF800000000FFF000000001FFE00000000FFF
-80000007FFFE00000007FFF800000007FFFF00000007FFFFC000000000FFF0000000003F
-FC000000000FFE000000000FFF8000000007FF8000000003FFC000000003FFE000000003
-FFE000000001FFF000000001FFF000000001FFF800000001FFF800000001FFF80FC00001
-FFF83FF00001FFF87FF80001FFF87FF80001FFF8FFFC0001FFF8FFFC0001FFF8FFFC0001
-FFF0FFFC0001FFF0FFFC0003FFF0FFFC0003FFE07FF80003FFE07FF00007FFC07FE00007
-FFC03F80000FFF801FF0001FFF000FFE00FFFE0007FFFFFFF80001FFFFFFF000007FFFFF
-C000001FFFFE00000001FFE000002D427BC038>I<000000003F0000000000003F000000
-0000007F000000000000FF000000000001FF000000000003FF000000000003FF00000000
-0007FF00000000000FFF00000000001FFF00000000003FFF00000000003FFF0000000000
-7FFF0000000000FFFF0000000001F7FF0000000003E7FF0000000007E7FF0000000007C7
-FF000000000F87FF000000001F07FF000000003E07FF000000007E07FF000000007C07FF
-00000000F807FF00000001F007FF00000003E007FF00000007E007FF00000007C007FF00
-00000F8007FF0000001F0007FF0000003E0007FF0000007C0007FF0000007C0007FF0000
-00F80007FF000001F00007FF000003E00007FF000007C00007FF00000FC00007FF00000F
-800007FF00001F000007FF00003E000007FF00007C000007FF0000FC000007FF0000FFFF
-FFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80000000
-0FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000F
-FF00000000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF
-00000000000FFF000000007FFFFFFF8000007FFFFFFF8000007FFFFFFF8000007FFFFFFF
-8000007FFFFFFF8031417DC038>I<07000000030007E000003F0007FF0007FF0007FFFF
-FFFF0007FFFFFFFE0007FFFFFFFC0007FFFFFFF80007FFFFFFF00007FFFFFFE00007FFFF
-FF800007FFFFFE000007FFFFFC000007FFFFE0000007FFFF00000007C00000000007C000
-00000007C00000000007C00000000007C00000000007C00000000007C00000000007C000
-00000007C00000000007C00000000007C03FF0000007C1FFFF000007C7FFFFC00007DFFF
-FFF00007FFE03FFC0007FF000FFE0007FC0007FF0007F00003FF8007E00003FFC007C000
-01FFC003800001FFE000000001FFE000000000FFF000000000FFF000000000FFF0000000
-00FFF800000000FFF800000000FFF800000000FFF80F800000FFF83FE00000FFF87FF000
-00FFF8FFF00000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF0FFF000
-00FFF0FFF00001FFF07FE00001FFE07FC00001FFE07E000003FFC03E000003FFC03F0000
-07FF801FC0000FFF000FF0001FFE0007FE00FFFC0003FFFFFFF00000FFFFFFE000003FFF
-FF8000000FFFFC00000001FFC000002D427BC038>I<000001FF800000001FFFF0000000
-7FFFFC000001FFFFFF000007FF807F80000FFC001F80003FF0001FC0007FE0007FC000FF
-C000FFE001FF8001FFE003FF8001FFE003FF0001FFE007FE0001FFE00FFE0001FFE00FFE
-0001FFE01FFC0000FFC01FFC00007F801FFC00001E003FFC000000003FFC000000003FF8
-000000007FF8000000007FF8000000007FF807FC00007FF81FFF8000FFF87FFFE000FFF8
-FFFFF800FFF9F01FFC00FFFBC007FE00FFFF8003FF00FFFF8003FF80FFFF0001FFC0FFFE
-0001FFC0FFFE0000FFE0FFFE0000FFE0FFFC0000FFF0FFFC0000FFF0FFFC0000FFF0FFFC
-0000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF87FF80000FFF87FF8
-0000FFF87FF80000FFF87FF80000FFF87FF80000FFF83FF80000FFF83FF80000FFF83FF8
-0000FFF03FFC0000FFF01FFC0000FFF01FFC0000FFF00FFC0001FFE00FFC0001FFE007FE
-0001FFC007FF0003FF8003FF8003FF0001FFC007FE0000FFE01FFC00007FFFFFF800001F
-FFFFF0000007FFFFC0000001FFFF000000003FF000002D427BC038>I<1E00000000001F
-00000000001FFC000000001FFFFFFFFFFE1FFFFFFFFFFE1FFFFFFFFFFE1FFFFFFFFFFE3F
-FFFFFFFFFE3FFFFFFFFFFC3FFFFFFFFFF83FFFFFFFFFF03FFFFFFFFFE03FFFFFFFFFC03F
-FFFFFFFFC07FFFFFFFFF807E0000003F007C0000007E007C000000FC0078000000F80078
-000001F80078000003F000F8000007E000F000000FC000F000000F8000F000001F800000
-00003F00000000007E0000000000FC0000000000FC0000000001F80000000003F8000000
-0003F00000000007F0000000000FE0000000000FE0000000001FE0000000001FC0000000
-003FC0000000003FC0000000007FC0000000007F8000000000FF8000000000FF80000000
-01FF8000000001FF8000000001FF8000000003FF8000000003FF0000000003FF00000000
-03FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000000
-0FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF00000000
-0FFF000000000FFF000000000FFF000000000FFF0000000007FE0000000003FC00000000
-01F80000002F447AC238>I<00007FF000000003FFFF0000000FFFFFC000003FFFFFF000
-007F801FFC0001FC0003FE0003F80001FF0003F00000FF0007E000007F8007E000003F80
-0FC000003FC00FC000003FC01FC000001FC01FC000001FC01FE000001FC01FE000001FC0
-1FF000001FC01FF800001FC01FFE00003FC01FFF00003F801FFFC0007F801FFFF0007F00
-0FFFFC00FF000FFFFE01FE0007FFFF83FC0007FFFFE7F80003FFFFFFE00001FFFFFFC000
-00FFFFFF0000007FFFFFC000003FFFFFE000000FFFFFF800000FFFFFFC00003FFFFFFE00
-00FFFFFFFF0001FF3FFFFF8007FC0FFFFFC00FF803FFFFE01FF000FFFFE01FE0007FFFF0
-3FE0001FFFF07FC00007FFF07F800003FFF87F800000FFF8FF8000007FF8FF0000003FF8
-FF0000001FF8FF0000000FF8FF0000000FF8FF00000007F8FF00000007F8FF00000007F8
-FF80000007F07F80000007F07F8000000FF07FC000000FE03FE000001FE03FF000003FC0
-1FF800007F800FFE0001FF0007FFC00FFE0003FFFFFFFC0000FFFFFFF000003FFFFFC000
-000FFFFF00000000FFF000002D427BC038>I<00007FF000000007FFFE0000001FFFFF80
-00007FFFFFE00000FFE03FF00001FF800FF80003FF0007FC0007FE0007FE000FFC0003FF
-001FFC0001FF003FFC0001FF803FFC0001FF807FF80001FFC07FF80000FFC07FF80000FF
-E07FF80000FFE0FFF80000FFE0FFF80000FFF0FFF80000FFF0FFF80000FFF0FFF80000FF
-F0FFF80000FFF0FFF80000FFF0FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FF
-F8FFF80001FFF87FF80001FFF87FF80001FFF87FF80001FFF83FF80003FFF83FF80003FF
-F81FFC0003FFF81FFC0007FFF80FFE000FFFF807FE000FFFF803FF001EFFF801FFC07CFF
-F800FFFFF8FFF8003FFFF0FFF8000FFFC0FFF00001FF00FFF000000000FFF000000000FF
-F000000000FFE000000001FFE000000001FFE003C00001FFE00FF00001FFC01FF80001FF
-C03FFC0003FF803FFC0003FF803FFC0003FF003FFC0007FE003FFC000FFE003FFC000FFC
-003FF8001FF8001FF0003FF0001FC000FFE0000FF003FFC00007FFFFFF800003FFFFFE00
-0001FFFFF80000007FFFE000000007FE0000002D427BC038>I<000000001F8000000000
-000000001F8000000000000000003FC000000000000000003FC000000000000000007FE0
-00000000000000007FE000000000000000007FE00000000000000000FFF0000000000000
-0000FFF00000000000000001FFF80000000000000001FFF80000000000000001FFF80000
-000000000003FFFC0000000000000003FFFC0000000000000007FFFE0000000000000007
-FFFE0000000000000007FFFE000000000000000FFFFF000000000000000F9FFF00000000
-0000001F9FFF800000000000001F1FFF800000000000001F0FFF800000000000003F0FFF
-C00000000000003E07FFC00000000000007E07FFE00000000000007C07FFE00000000000
-007C03FFE0000000000000FC03FFF0000000000000F801FFF0000000000001F801FFF800
-0000000001F001FFF8000000000001F000FFF8000000000003F000FFFC000000000003E0
-007FFC000000000007E0007FFE000000000007C0007FFE000000000007C0003FFE000000
-00000FC0003FFF00000000000F80001FFF00000000001F80001FFF80000000001F00000F
-FF80000000001F00000FFF80000000003F00000FFFC0000000003E000007FFC000000000
-7E000007FFE0000000007FFFFFFFFFE0000000007FFFFFFFFFE000000000FFFFFFFFFFF0
-00000000FFFFFFFFFFF000000001FFFFFFFFFFF800000001F0000000FFF800000001F000
-0000FFF800000003F0000000FFFC00000003E00000007FFC00000007E00000007FFE0000
-0007C00000003FFE00000007C00000003FFE0000000F800000003FFF0000000F80000000
-1FFF0000001F800000001FFF8000001F000000000FFF8000003F000000000FFFC000003E
-000000000FFFC000007E0000000007FFC000FFFFFF00000FFFFFFFF0FFFFFF00000FFFFF
-FFF0FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF04C457CC4
-55>65 D<00000000FFF00000700000001FFFFF0000F0000001FFFFFFE001F0000007FFFF
-FFF803F000003FFFFFFFFE07F00000FFFFE001FF0FF00001FFFE00003F9FF00007FFF000
-000FFFF0000FFFC0000007FFF0001FFF00000003FFF0003FFE00000001FFF0007FFC0000
-0000FFF000FFF8000000007FF001FFF0000000003FF003FFE0000000001FF007FFE00000
-00001FF007FFC0000000000FF00FFF80000000000FF00FFF800000000007F01FFF000000
-000007F01FFF000000000003F03FFF000000000003F03FFE000000000003F03FFE000000
-000003F07FFE000000000001F07FFE000000000001F07FFE000000000001F07FFC000000
-00000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000
-00000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000
-00000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000
-00000000FFFC00000000000000FFFC000000000000007FFC000000000000007FFE000000
-000000007FFE000000000000F07FFE000000000000F03FFE000000000000F03FFE000000
-000000F03FFF000000000000F01FFF000000000001F01FFF000000000001E00FFF800000
-000001E00FFF800000000003E007FFC00000000003C007FFE00000000007C003FFE00000
-000007C001FFF0000000000F8000FFF8000000001F00007FFC000000003F00003FFE0000
-00007E00001FFF80000000FC00000FFFC0000001F8000007FFF0000007F0000001FFFE00
-001FE0000000FFFFF001FF800000003FFFFFFFFF0000000007FFFFFFFC0000000001FFFF
-FFF000000000001FFFFF80000000000000FFF800000044467AC451>67
-D<FFFFFFFFFFFF00000000FFFFFFFFFFFFF0000000FFFFFFFFFFFFFE000000FFFFFFFFFF
-FFFF800000FFFFFFFFFFFFFFE00000003FFE00001FFFF80000003FFE000001FFFC000000
-3FFE0000003FFF0000003FFE0000000FFF8000003FFE00000007FFC000003FFE00000003
-FFE000003FFE00000001FFF000003FFE00000000FFF000003FFE000000007FF800003FFE
-000000003FFC00003FFE000000003FFC00003FFE000000001FFE00003FFE000000001FFE
-00003FFE000000000FFF00003FFE000000000FFF00003FFE000000000FFF80003FFE0000
-00000FFF80003FFE0000000007FF80003FFE0000000007FFC0003FFE0000000007FFC000
-3FFE0000000007FFC0003FFE0000000007FFC0003FFE0000000007FFC0003FFE00000000
-07FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE
-0000000007FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000000007FF
-E0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000
-000007FFE0003FFE0000000007FFE0003FFE0000000007FFC0003FFE0000000007FFC000
-3FFE0000000007FFC0003FFE0000000007FFC0003FFE0000000007FFC0003FFE00000000
-07FF80003FFE000000000FFF80003FFE000000000FFF80003FFE000000000FFF00003FFE
-000000001FFF00003FFE000000001FFE00003FFE000000003FFE00003FFE000000003FFC
-00003FFE000000007FF800003FFE00000000FFF800003FFE00000000FFF000003FFE0000
-0001FFE000003FFE00000007FFC000003FFE0000000FFF8000003FFE0000003FFF000000
-3FFE000001FFFE0000003FFE00000FFFF80000FFFFFFFFFFFFFFF00000FFFFFFFFFFFFFF
-C00000FFFFFFFFFFFFFE000000FFFFFFFFFFFFF0000000FFFFFFFFFFFF000000004B447C
-C356>I<FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFF
-FFFFF800FFFFFFFFFFFFFFFC00001FFF000001FFFC00001FFF0000003FFC00001FFF0000
-000FFC00001FFF00000003FC00001FFF00000001FC00001FFF00000000FC00001FFF0000
-0000FC00001FFF000000007E00001FFF000000003E00001FFF000000003E00001FFF0000
-00003E00001FFF000000001E00001FFF000000001E00001FFF000078001E00001FFF0000
-78001E00001FFF000078000F00001FFF000078000F00001FFF000078000F00001FFF0000
-78000F00001FFF0000F8000000001FFF0000F8000000001FFF0000F8000000001FFF0001
-F8000000001FFF0003F8000000001FFF001FF8000000001FFFFFFFF8000000001FFFFFFF
-F8000000001FFFFFFFF8000000001FFFFFFFF8000000001FFFFFFFF8000000001FFF001F
-F8000000001FFF0003F8000000001FFF0001F8000000001FFF0000F8000000001FFF0000
-F8000000001FFF0000F80001E0001FFF0000780001E0001FFF0000780001E0001FFF0000
-780003C0001FFF0000780003C0001FFF0000780003C0001FFF0000780003C0001FFF0000
-000003C0001FFF0000000007C0001FFF0000000007C0001FFF000000000780001FFF0000
-00000780001FFF000000000F80001FFF000000000F80001FFF000000001F80001FFF0000
-00001F80001FFF000000003F80001FFF000000007F00001FFF00000000FF00001FFF0000
-0001FF00001FFF00000007FF00001FFF0000001FFF00001FFF000001FFFF00FFFFFFFFFF
-FFFFFF00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFF
-FFFFFE0043447DC34A>I<FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FF
-FFFFFFFFFFFF80FFFFFFFFFFFFFFC0003FFE00001FFFC0003FFE000001FFC0003FFE0000
-007FC0003FFE0000003FC0003FFE0000001FC0003FFE0000000FC0003FFE00000007C000
-3FFE00000007E0003FFE00000003E0003FFE00000003E0003FFE00000003E0003FFE0000
-0001E0003FFE00000001E0003FFE00000001E0003FFE0001E001E0003FFE0001E000F000
-3FFE0001E000F0003FFE0001E000F0003FFE0001E000F0003FFE0001E00000003FFE0003
-E00000003FFE0003E00000003FFE0003E00000003FFE0007E00000003FFE000FE0000000
-3FFE007FE00000003FFFFFFFE00000003FFFFFFFE00000003FFFFFFFE00000003FFFFFFF
-E00000003FFFFFFFE00000003FFE007FE00000003FFE000FE00000003FFE0007E0000000
-3FFE0003E00000003FFE0003E00000003FFE0003E00000003FFE0001E00000003FFE0001
-E00000003FFE0001E00000003FFE0001E00000003FFE0001E00000003FFE0001E0000000
-3FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000
-000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000000000
-3FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000
-000000003FFE0000000000FFFFFFFFF0000000FFFFFFFFF0000000FFFFFFFFF0000000FF
-FFFFFFF0000000FFFFFFFFF00000003C447CC346>I<FFFFFFFF8003FFFFFFFEFFFFFFFF
-8003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFE
-003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
-00FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003F
-FE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FF
-F800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00
-000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800
-003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
-00FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003F
-FFFFFFFFFFFFF800003FFFFFFFFFFFFFF800003FFFFFFFFFFFFFF800003FFFFFFFFFFFFF
-F800003FFFFFFFFFFFFFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00
-000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800
-003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
-00FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003F
-FE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FF
-F800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00
-000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800
-003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
-00FFF800FFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFF
-FFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFE4F447CC358>72 D<FFFFFFFFE0FFFFFFFFE0
-FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0001FFF0000001FFF0000001FFF0000001FFF000000
-1FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001F
-FF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF
-0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF00
-00001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000
-001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF000000
-1FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001F
-FF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF
-0000001FFF0000001FFF0000001FFF0000FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFF
-E0FFFFFFFFE023447DC32A>I<FFFFFFFFF0000000FFFFFFFFF0000000FFFFFFFFF00000
-00FFFFFFFFF0000000FFFFFFFFF0000000003FFE0000000000003FFE0000000000003FFE
-0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
-00003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
-0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
-00003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
-0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
-00003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
-0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
-00003FFE0000000000003FFE0000000780003FFE0000000780003FFE0000000780003FFE
-0000000780003FFE0000000F80003FFE0000000F00003FFE0000000F00003FFE0000000F
-00003FFE0000000F00003FFE0000001F00003FFE0000001F00003FFE0000001F00003FFE
-0000003F00003FFE0000003F00003FFE0000007E00003FFE0000007E00003FFE000000FE
-00003FFE000001FE00003FFE000003FE00003FFE000007FE00003FFE00001FFE00003FFE
-00007FFE00003FFE0003FFFE00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC
-00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC0039447CC343>76 D<FFFFFE0000000000007FFF
-FF80FFFFFF000000000000FFFFFF80FFFFFF000000000000FFFFFF80FFFFFF8000000000
-01FFFFFF80FFFFFF800000000001FFFFFF80003FFF800000000001FFFE0000003DFFC000
-00000003DFFE0000003DFFC00000000003DFFE0000003CFFE000000000079FFE0000003C
-FFE000000000079FFE0000003C7FF0000000000F1FFE0000003C7FF0000000000F1FFE00
-00003C3FF8000000001E1FFE0000003C3FF8000000001E1FFE0000003C1FFC000000003C
-1FFE0000003C1FFC000000003C1FFE0000003C1FFC000000003C1FFE0000003C0FFE0000
-0000781FFE0000003C0FFE00000000781FFE0000003C07FF00000000F01FFE0000003C07
-FF00000000F01FFE0000003C03FF80000001E01FFE0000003C03FF80000001E01FFE0000
-003C01FFC0000003C01FFE0000003C01FFC0000003C01FFE0000003C01FFC0000003C01F
-FE0000003C00FFE0000007801FFE0000003C00FFE0000007801FFE0000003C007FF00000
-0F001FFE0000003C007FF000000F001FFE0000003C003FF800001E001FFE0000003C003F
-F800001E001FFE0000003C001FFC00003C001FFE0000003C001FFC00003C001FFE000000
-3C001FFC00003C001FFE0000003C000FFE000078001FFE0000003C000FFE000078001FFE
-0000003C0007FF0000F0001FFE0000003C0007FF0000F0001FFE0000003C0003FF8001E0
-001FFE0000003C0003FF8001E0001FFE0000003C0001FFC003C0001FFE0000003C0001FF
-C003C0001FFE0000003C0000FFE00780001FFE0000003C0000FFE00780001FFE0000003C
-0000FFE00780001FFE0000003C00007FF00F00001FFE0000003C00007FF00F00001FFE00
-00003C00003FF81E00001FFE0000003C00003FF81E00001FFE0000003C00001FFC3C0000
-1FFE0000003C00001FFC3C00001FFE0000003C00000FFE7800001FFE0000003C00000FFE
-7800001FFE0000003C00000FFE7800001FFE0000003C000007FFF000001FFE0000003C00
-0007FFF000001FFE0000003C000003FFE000001FFE0000003C000003FFE000001FFE0000
-003C000001FFC000001FFE0000003C000001FFC000001FFE0000003C000000FF8000001F
-FE0000003C000000FF8000001FFE0000FFFFFF0000FF80007FFFFFFF80FFFFFF00007F00
-007FFFFFFF80FFFFFF00007F00007FFFFFFF80FFFFFF00003E00007FFFFFFF80FFFFFF00
-001C00007FFFFFFF8061447CC36A>I<00000007FFC0000000000000FFFFFE0000000000
-07FFFFFFC0000000001FFFFFFFF0000000007FFE00FFFC00000001FFF0001FFF00000007
-FF800003FFC000000FFF000001FFE000001FFC0000007FF000003FF80000003FF800007F
-F00000001FFC0000FFF00000001FFE0001FFE00000000FFF0003FFC000000007FF8003FF
-C000000007FF8007FF8000000003FFC007FF8000000003FFC00FFF0000000001FFE00FFF
-0000000001FFE01FFF0000000001FFF01FFE0000000000FFF03FFE0000000000FFF83FFE
-0000000000FFF83FFE0000000000FFF87FFE0000000000FFFC7FFC00000000007FFC7FFC
-00000000007FFC7FFC00000000007FFC7FFC00000000007FFCFFFC00000000007FFEFFFC
-00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC
-00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC
-00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFE7FFC
-00000000007FFC7FFE0000000000FFFC7FFE0000000000FFFC7FFE0000000000FFFC3FFE
-0000000000FFF83FFE0000000000FFF83FFF0000000001FFF81FFF0000000001FFF01FFF
-0000000001FFF01FFF8000000003FFF00FFF8000000003FFE00FFF8000000003FFE007FF
-C000000007FFC003FFC000000007FF8003FFE00000000FFF8001FFF00000001FFF0000FF
-F80000003FFE00007FFC0000007FFC00003FFE000000FFF800001FFF000001FFF000000F
-FFC00007FFE0000007FFF0001FFFC0000001FFFE00FFFF00000000FFFFFFFFFE00000000
-3FFFFFFFF80000000007FFFFFFC00000000000FFFFFE00000000000007FFC00000004746
-7AC454>79 D<FFFFFFFFFFFF000000FFFFFFFFFFFFF00000FFFFFFFFFFFFFE0000FFFFFF
-FFFFFFFF8000FFFFFFFFFFFFFFE000001FFF00000FFFF000001FFF000001FFF800001FFF
-0000007FFC00001FFF0000003FFE00001FFF0000001FFF00001FFF0000000FFF80001FFF
-0000000FFF80001FFF0000000FFFC0001FFF00000007FFC0001FFF00000007FFC0001FFF
-00000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF
-00000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF
-00000007FFE0001FFF00000007FFC0001FFF00000007FFC0001FFF0000000FFF80001FFF
-0000000FFF80001FFF0000000FFF00001FFF0000001FFF00001FFF0000003FFE00001FFF
-0000007FFC00001FFF000001FFF800001FFF00000FFFF000001FFFFFFFFFFFC000001FFF
-FFFFFFFF0000001FFFFFFFFFFC0000001FFFFFFFFFC00000001FFF000000000000001FFF
-000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
-000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
-000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
-000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
-000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
-000000000000001FFF000000000000001FFF000000000000001FFF000000000000FFFFFF
-FFE000000000FFFFFFFFE000000000FFFFFFFFE000000000FFFFFFFFE000000000FFFFFF
-FFE00000000043447DC34D>I<FFFFFFFFFFF800000000FFFFFFFFFFFFC0000000FFFFFF
-FFFFFFF8000000FFFFFFFFFFFFFE000000FFFFFFFFFFFFFF800000001FFF00003FFFE000
-00001FFF000003FFF00000001FFF000000FFF80000001FFF0000007FFC0000001FFF0000
-003FFE0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF800000
-1FFF0000000FFF8000001FFF0000000FFF8000001FFF0000000FFFC000001FFF0000000F
-FFC000001FFF0000000FFFC000001FFF0000000FFFC000001FFF0000000FFFC000001FFF
-0000000FFFC000001FFF0000000FFFC000001FFF0000000FFF8000001FFF0000000FFF80
-00001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000003FFE0000001FFF0000
-003FFC0000001FFF0000007FFC0000001FFF000001FFF00000001FFF000007FFE0000000
-1FFF00003FFF800000001FFFFFFFFFFF000000001FFFFFFFFFF8000000001FFFFFFFFFE0
-000000001FFFFFFFFFF8000000001FFF0000FFFC000000001FFF00003FFF000000001FFF
-00000FFF800000001FFF000007FFC00000001FFF000003FFE00000001FFF000003FFE000
-00001FFF000001FFF00000001FFF000001FFF00000001FFF000000FFF80000001FFF0000
-00FFF80000001FFF000000FFF80000001FFF000000FFF80000001FFF000000FFF8000000
-1FFF000000FFF80000001FFF000000FFF80000001FFF000000FFFC0000001FFF000000FF
-FC0000001FFF000000FFFC0000001FFF000000FFFC0000001FFF000000FFFC0000001FFF
-000000FFFC0000001FFF000000FFFC000F001FFF000000FFFE000F001FFF000000FFFE00
-0F001FFF0000007FFE000F001FFF0000007FFF001F001FFF0000003FFF001EFFFFFFFFE0
-001FFF803EFFFFFFFFE0000FFFE0FCFFFFFFFFE00007FFFFF8FFFFFFFFE00001FFFFF0FF
-FFFFFFE000007FFFE00000000000000007FF8050457DC354>82 D<0000FFE0001C000007
-FFFE003C00003FFFFF807C0000FFFFFFE0FC0001FFFFFFF9FC0003FF801FFFFC0007FC00
-01FFFC000FF800007FFC001FF000003FFC003FE000000FFC003FC0000007FC007FC00000
-03FC007F80000003FC007F80000001FC007F80000000FC00FF80000000FC00FF80000000
-7C00FF800000007C00FFC00000007C00FFC00000007C00FFE00000003C00FFF00000003C
-00FFF80000003C00FFFC00000000007FFE00000000007FFFE0000000007FFFFE00000000
-3FFFFFF00000003FFFFFFF0000001FFFFFFFE000001FFFFFFFFC00000FFFFFFFFE000007
-FFFFFFFF800003FFFFFFFFC00001FFFFFFFFE000007FFFFFFFF000001FFFFFFFF8000007
-FFFFFFFC000000FFFFFFFC0000000FFFFFFE00000000FFFFFE0000000007FFFF00000000
-007FFF00000000003FFF00000000000FFF800000000007FF800000000003FF80F0000000
-03FF80F000000001FF80F000000001FF80F000000000FF80F000000000FF80F800000000
-FF80F800000000FF80F800000000FF00FC00000000FF00FC00000000FF00FE00000001FF
-00FF00000001FE00FF80000003FE00FFC0000003FC00FFE0000007FC00FFF800000FF800
-FFFF00003FF000FFFFF800FFE000FE7FFFFFFFC000FC1FFFFFFF0000F807FFFFFC0000F0
-00FFFFF00000E00007FF80000031467AC43E>I<3FFFFFFFFFFFFFFFE03FFFFFFFFFFFFF
-FFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFE000FFF8003
-FFE07FE0000FFF80003FF07FC0000FFF80001FF07F00000FFF800007F07F00000FFF8000
-07F07E00000FFF800003F07C00000FFF800001F07C00000FFF800001F07C00000FFF8000
-01F07800000FFF800000F07800000FFF800000F07800000FFF800000F07800000FFF8000
-00F0F800000FFF800000F8F000000FFF80000078F000000FFF80000078F000000FFF8000
-0078F000000FFF80000078F000000FFF800000780000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
-00000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFFFF
-00000007FFFFFFFFFF000045437CC24E>I<FFFFFFFF000000FFFFFFFFFFFFFF000000FF
-FFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFF003FFE00
-00000000FC00003FFF0000000000FC00001FFF0000000000F800001FFF8000000001F800
-000FFF8000000001F000000FFFC000000001F000000FFFC000000003F0000007FFC00000
-0003E0000007FFE000000007E0000003FFE000000007C0000003FFF00000000FC0000001
-FFF00000000F80000001FFF80000000F80000001FFF80000001F80000000FFFC0000001F
-00000000FFFC0000003F000000007FFC0000003E000000007FFE0000007E000000003FFE
-0000007C000000003FFF0000007C000000003FFF000000FC000000001FFF800000F80000
-00001FFF800001F8000000000FFF800001F0000000000FFFC00003F00000000007FFC000
-03E00000000007FFE00003E00000000007FFE00007E00000000003FFF00007C000000000
-03FFF0000FC00000000001FFF0000F800000000001FFF8001F800000000000FFF8001F00
-0000000000FFFC003F0000000000007FFC003E0000000000007FFE003E0000000000007F
-FE007E0000000000003FFE007C0000000000003FFF00FC0000000000001FFF00F8000000
-0000001FFF81F80000000000000FFF81F00000000000000FFFC1F00000000000000FFFC3
-F000000000000007FFC3E000000000000007FFE7E000000000000003FFE7C00000000000
-0003FFFFC000000000000001FFFF8000000000000001FFFF8000000000000001FFFF8000
-000000000000FFFF0000000000000000FFFF00000000000000007FFE0000000000000000
-7FFE00000000000000003FFC00000000000000003FFC00000000000000003FFC00000000
-000000001FF800000000000000001FF800000000000000000FF000000000000000000FF0
-000000000000000007E0000000000000000007E00000000050457EC355>86
-D<0001FFE0000000001FFFFE000000007FFFFF80000001FFFFFFE0000003FE007FF80000
-07FC001FFC000007FE000FFE00000FFF0007FF00000FFF0007FF00000FFF0003FF80000F
-FF0003FF80000FFF0003FF80000FFF0001FFC00007FE0001FFC00003FC0001FFC00000F0
-0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000003
-FFFFC0000000FFFFFFC0000007FFFFFFC000003FFFF1FFC00000FFFC01FFC00003FFE001
-FFC0000FFF8001FFC0001FFE0001FFC0003FFC0001FFC0003FF80001FFC0007FF80001FF
-C0007FF00001FFC000FFF00001FFC000FFE00001FFC000FFE00001FFC000FFE00001FFC0
-00FFE00003FFC000FFE00003FFC000FFF00007FFC0007FF8000FFFC0007FF8001FFFF000
-3FFE003EFFFFC01FFF80FC7FFFC007FFFFF87FFFC003FFFFE01FFFC0007FFF8007FFC000
-0FFC00000000322F7DAD36>97 D<007FC000000000FFFFC000000000FFFFC000000000FF
-FFC000000000FFFFC000000000FFFFC00000000003FFC00000000001FFC00000000001FF
-C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0
-0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000
-00000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000
-000001FFC00FF8000001FFC0FFFF800001FFC3FFFFE00001FFCFFFFFF80001FFDFC03FFC
-0001FFFF000FFE0001FFFC0003FF0001FFF80001FF8001FFF00001FFC001FFE00000FFE0
-01FFC00000FFE001FFC000007FF001FFC000007FF001FFC000007FF801FFC000003FF801
-FFC000003FF801FFC000003FF801FFC000003FFC01FFC000003FFC01FFC000003FFC01FF
-C000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC0
-00003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FF801FFC000
-003FF801FFC000007FF801FFC000007FF001FFC000007FF001FFC000007FF001FFC00000
-FFE001FFE00000FFC001FFF00001FFC001FFF80003FF8001FF7C0007FF0001FE3E000FFE
-0001FC1FC07FFC0001F80FFFFFF00001F003FFFFC00001E000FFFF00000000001FF00000
-36467DC43E>I<00003FFC00000001FFFFC000000FFFFFF000003FFFFFFC00007FF003FE
-0000FFC001FF0003FF8003FF0007FF0007FF8007FE0007FF800FFE0007FF801FFC0007FF
-801FFC0007FF803FF80007FF803FF80003FF007FF80001FE007FF8000078007FF0000000
-007FF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000
-00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000
-00FFF0000000007FF8000000007FF8000000007FF8000000003FF8000000003FFC000003
-C03FFC000003C01FFE000007C00FFE000007800FFF00000F8007FF80001F0003FFC0003E
-0001FFF0007C00007FFC03F800003FFFFFF000000FFFFFC0000003FFFF000000003FF800
-002A2F7CAD32>I<0000000003FE0000000007FFFE0000000007FFFE0000000007FFFE00
-00000007FFFE0000000007FFFE00000000001FFE00000000000FFE00000000000FFE0000
-0000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000
-00000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000
-000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000003FE0
-0FFE000003FFFC0FFE00000FFFFF8FFE00003FFFFFCFFE0000FFF807FFFE0001FFC001FF
-FE0003FF80007FFE0007FF00003FFE000FFE00001FFE000FFC00000FFE001FFC00000FFE
-003FF800000FFE003FF800000FFE003FF800000FFE007FF800000FFE007FF000000FFE00
-7FF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FF
-F000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF0
-00000FFE00FFF000000FFE00FFF000000FFE007FF000000FFE007FF000000FFE007FF000
-000FFE007FF800000FFE003FF800000FFE003FF800000FFE001FFC00001FFE001FFC0000
-1FFE000FFE00003FFE0007FE00007FFE0003FF0000FFFF0001FFC003FFFFFC00FFF01FEF
-FFFC007FFFFF8FFFFC001FFFFE0FFFFC0007FFF80FFFFC00007FC00FF80036467CC43E>
-I<00003FF800000003FFFF8000000FFFFFE000003FFFFFF000007FF83FF80000FFC007FC
-0001FF8003FE0003FF0001FF0007FE0000FF800FFC0000FF801FFC00007FC01FF800007F
-C03FF800003FE03FF800003FE07FF800003FE07FF000003FE07FF000003FF07FF000001F
-F0FFF000001FF0FFF000001FF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFF
-F0FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000007FF0000000
-007FF0000000007FF8000000007FF8000000003FF8000000003FF8000000F01FFC000000
-F01FFC000001F00FFE000001E007FF000003E003FF800007C001FFC0000F8000FFF0003F
-00007FFE01FE00001FFFFFFC000007FFFFF0000001FFFFC00000001FFE00002C2F7DAD33
->I<000000FF8000000FFFE000007FFFF00001FFFFF80003FF8FFC000FFE0FFE001FFC1F
-FE001FF81FFE003FF81FFE007FF01FFE007FF01FFE007FF00FFC00FFE00FFC00FFE003F0
-00FFE000C000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000
-FFE0000000FFE0000000FFE0000000FFE0000000FFE00000FFFFFFF800FFFFFFF800FFFF
-FFF800FFFFFFF800FFFFFFF80000FFE0000000FFE0000000FFE0000000FFE0000000FFE0
-000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000
-0000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000
-00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000
-FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF
-E000007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE00027467DC522>I<00
-00FFE0007E00000FFFFE03FF80003FFFFF8FFF8000FFFFFFFFFFC001FFC07FFF3FC003FF
-001FF83FC007FE000FFC3FC00FFC0007FE1F801FFC0007FF0F001FF80003FF00001FF800
-03FF00003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003
-FF80003FF80003FF80003FF80003FF80003FF80003FF80001FF80003FF00001FF80003FF
-00001FFC0007FF00000FFC0007FE000007FE000FFC000003FF001FF8000001FFC07FF000
-0003FFFFFFE0000003FFFFFF800000078FFFFE0000000780FFE00000000F800000000000
-0F8000000000000F8000000000000F8000000000000FC000000000000FE000000000000F
-F000000000000FFFFFFFC000000FFFFFFFFC000007FFFFFFFF800007FFFFFFFFE00003FF
-FFFFFFF00001FFFFFFFFFC0000FFFFFFFFFC0003FFFFFFFFFE000FFFFFFFFFFF001FF000
-007FFF003FC0000007FF007F80000001FF807F80000000FF80FF00000000FF80FF000000
-007F80FF000000007F80FF000000007F80FF000000007F80FF80000000FF807F80000000
-FF007FC0000001FF003FE0000003FE001FF0000007FC000FFE00003FF80007FFC001FFF0
-0001FFFFFFFFC000007FFFFFFF0000000FFFFFF8000000007FFF00000032427DAC38>I<
-007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FF
-FFC00000000003FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF
-C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0
-0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000
-00000001FFC00000000001FFC00000000001FFC00000000001FFC007FE000001FFC03FFF
-800001FFC0FFFFE00001FFC1FFFFF80001FFC7F03FFC0001FFCF801FFC0001FFDF000FFE
-0001FFDE000FFE0001FFFC000FFE0001FFF80007FF0001FFF00007FF0001FFF00007FF00
-01FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC00007FF0001FFC00007FF0001
-FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF
-C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0
-0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000
-07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007
-FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFF
-FEFFFFFF83FFFFFEFFFFFF83FFFFFE37457CC43E>I<007C0001FF0003FF8007FFC007FF
-C00FFFE00FFFE00FFFE00FFFE00FFFE007FFC007FFC003FF8001FF00007C000000000000
-00000000000000000000000000000000000000000000000000007FC07FFFC07FFFC07FFF
-C07FFFC07FFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
-C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
-C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
-C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18467CC520>I<000003E000000FF800001FFC00
-003FFE00003FFE00007FFF00007FFF00007FFF00007FFF00007FFF00003FFE00003FFE00
-001FFC00000FF8000003E000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000001FF0003FFFF0003FFFF0003FFFF0003FFFF00
-03FFFF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
-0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
-0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
-0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
-0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF1F
-8007FF3FC007FF7FE007FFFFF007FFFFF00FFEFFF00FFEFFF00FFCFFF01FFCFFE01FF87F
-E03FF03FC0FFE01FFFFF800FFFFF0003FFFC0000FFC000205A86C522>I<007FC0000000
-00FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000
-03FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001
-FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF
-C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0
-0000000001FFC00000000001FFC00000000001FFC00000000001FFC0007FFFE001FFC000
-7FFFE001FFC0007FFFE001FFC0007FFFE001FFC0007FFFE001FFC0000FE00001FFC0001F
-C00001FFC0003F000001FFC0007E000001FFC000FC000001FFC003F8000001FFC007E000
-0001FFC00FC0000001FFC01F80000001FFC07F00000001FFC0FE00000001FFC1FC000000
-01FFC3FE00000001FFC7FE00000001FFDFFF00000001FFFFFF80000001FFFFFFC0000001
-FFFFFFC0000001FFF9FFE0000001FFE1FFF0000001FFC0FFF8000001FF807FF8000001FF
-803FFC000001FF803FFE000001FF801FFF000001FF800FFF000001FF8007FF800001FF80
-07FFC00001FF8003FFE00001FF8001FFE00001FF8000FFF00001FF8000FFF80001FF8000
-7FFC0001FF80003FFC00FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FF
-FFF8FFFFFF03FFFFF835457DC43B>I<007FC000FFFFC000FFFFC000FFFFC000FFFFC000
-FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80
-FFFFFF8019457CC420>I<007F8007FE00000FFC0000FFFF803FFFC0007FFF8000FFFF80
-FFFFF001FFFFE000FFFF81FFFFF803FFFFF000FFFF87F01FFC0FE03FF800FFFF8FC00FFE
-1F801FFC0003FF9F000FFF3E001FFE0001FF9E0007FF3C000FFE0001FFBC0007FF78000F
-FE0001FFF80003FFF00007FF0001FFF80003FFF00007FF0001FFF00003FFE00007FF0001
-FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFC000
-03FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF80
-0007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF
-0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FF
-C00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003
-FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF8000
-07FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF00
-01FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC0
-0003FF800007FF0001FFC00003FF800007FF00FFFFFF81FFFFFF03FFFFFEFFFFFF81FFFF
-FF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FF
-FFFE572D7CAC5E>I<007F8007FE0000FFFF803FFF8000FFFF80FFFFE000FFFF81FFFFF8
-00FFFF87F03FFC00FFFF8F801FFC0003FF9F000FFE0001FF9E000FFE0001FFBC000FFE00
-01FFF80007FF0001FFF00007FF0001FFF00007FF0001FFE00007FF0001FFE00007FF0001
-FFE00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF
-C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0
-0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000
-07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007
-FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF
-00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE
-372D7CAC3E>I<00001FFC0000000001FFFFC000000007FFFFF00000001FFFFFFC000000
-7FF80FFF000000FFC001FF800001FF8000FFC00003FE00003FE00007FE00003FF0000FFC
-00001FF8000FF800000FF8001FF800000FFC001FF800000FFC003FF800000FFE003FF000
-0007FE007FF0000007FF007FF0000007FF007FF0000007FF007FF0000007FF00FFF00000
-07FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007
-FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF807FF0000007FF
-007FF0000007FF007FF0000007FF007FF0000007FF003FF800000FFE003FF800000FFE00
-1FF800000FFC001FFC00001FFC000FFC00001FF80007FE00003FF00007FE00003FF00003
-FF8000FFE00001FFC001FFC000007FF80FFF0000003FFFFFFE0000000FFFFFF800000001
-FFFFC0000000001FFC000000312F7DAD38>I<007FC00FF80000FFFFC0FFFF8000FFFFC3
-FFFFE000FFFFCFFFFFF800FFFFDFC03FFC00FFFFFF001FFE0003FFFC0007FF0001FFF800
-03FF8001FFF00003FFC001FFE00001FFE001FFC00001FFE001FFC00000FFF001FFC00000
-FFF001FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF801FFC000003F
-FC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC
-01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01
-FFC000003FFC01FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF001FF
-C00000FFF001FFC00000FFF001FFC00001FFE001FFE00001FFC001FFF00003FFC001FFF8
-0007FF8001FFFC000FFF0001FFFE001FFE0001FFDFC07FFC0001FFCFFFFFF00001FFC3FF
-FFC00001FFC0FFFF000001FFC01FF0000001FFC00000000001FFC00000000001FFC00000
-000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0000000
-0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000
-FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF8000000036
-407DAC3E>I<007F807F00FFFF81FFE0FFFF83FFF0FFFF8FFFF8FFFF8F8FFCFFFF9F1FFE
-03FFBE1FFE01FFBC1FFE01FFF81FFE01FFF81FFE01FFF01FFE01FFF00FFC01FFE007F801
-FFE001E001FFE0000001FFE0000001FFE0000001FFC0000001FFC0000001FFC0000001FF
-C0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0
-000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC000
-0001FFC0000001FFC0000001FFC0000001FFC0000001FFC00000FFFFFFE000FFFFFFE000
-FFFFFFE000FFFFFFE000FFFFFFE000272D7DAC2E>114 D<001FFC038000FFFF878003FF
-FFFF800FFFFFFF801FF003FF803FC000FF803F80003F807F00001F807E00001F80FE0000
-0F80FE00000F80FE00000780FF00000780FF00000780FF80000780FFE0000000FFFE0000
-007FFFF000007FFFFF00003FFFFFC0003FFFFFF0001FFFFFFC000FFFFFFE0003FFFFFF00
-01FFFFFF80007FFFFF80000FFFFFC000003FFFC0000003FFE0000000FFE0F000003FE0F0
-00003FE0F800001FE0F800000FE0F800000FE0FC00000FE0FC00000FE0FE00000FC0FF00
-001FC0FF00001FC0FF80003F80FFE0007F00FFF803FE00FFFFFFFC00FCFFFFF800F03FFF
-E000E007FE0000232F7CAD2C>I<0001E000000001E000000001E000000001E000000001
-E000000003E000000003E000000003E000000003E000000007E000000007E00000000FE0
-0000000FE00000001FE00000001FE00000003FE00000007FE0000000FFE0000003FFE000
-000FFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF8000FFE0000000FFE00000
-00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000
-FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF
-E0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE001E000FFE001E000FFE0
-01E000FFE001E000FFE001E000FFE001E000FFE001E000FFE001E000FFE001E000FFE003
-E000FFF003C0007FF003C0007FF007C0003FF80F80001FFC1F00000FFFFF000007FFFC00
-0001FFF80000003FE00023407EBE2C>I<007FC00001FF00FFFFC003FFFF00FFFFC003FF
-FF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF0003FFC0000FFF0001FFC00007FF
-0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00
-01FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001
-FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF
-C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0
-0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000
-0FFF0001FFC0000FFF0001FFC0001FFF0001FFC0001FFF0001FFC0003FFF0000FFC0003F
-FF0000FFE0007FFF80007FE001F7FFFE007FF807E7FFFE003FFFFFC7FFFE000FFFFF07FF
-FE0003FFFE07FFFE00007FF007FC00372E7CAC3E>I<FFFFFF0003FFFCFFFFFF0003FFFC
-FFFFFF0003FFFCFFFFFF0003FFFCFFFFFF0003FFFC01FFE000003E0000FFE000003C0000
-FFF000003C00007FF000007800007FF800007800007FF80000F800003FF80000F000003F
-FC0001F000001FFC0001E000001FFE0003E000000FFE0003C000000FFF0007C0000007FF
-000780000007FF800F80000003FF800F00000003FFC00F00000003FFC01F00000001FFE0
-1E00000001FFE03E00000000FFE03C00000000FFF07C000000007FF078000000007FF8F8
-000000003FF8F0000000003FFDF0000000001FFDE0000000001FFFE0000000000FFFC000
-0000000FFFC0000000000FFFC00000000007FF800000000007FF800000000003FF000000
-000003FF000000000001FE000000000001FE000000000000FC000000000000FC00000000
-000078000000362C7EAB3B>I<FFFFFE1FFFFF801FFFF0FFFFFE1FFFFF801FFFF0FFFFFE
-1FFFFF801FFFF0FFFFFE1FFFFF801FFFF0FFFFFE1FFFFF801FFFF001FFC0003FE000007C
-0001FFC0003FF00000780001FFE0003FF00000F80000FFE0001FF80000F00000FFF0001F
-F80001F000007FF0000FFC0001E000007FF0000FFC0001E000007FF8001FFC0003E00000
-3FF8001FFE0003C000003FFC003FFE0007C000001FFC003FFF00078000001FFC003FFF00
-078000001FFE0079FF000F8000000FFE0079FF800F0000000FFF00F9FF801F00000007FF
-00F0FFC01E00000007FF80F0FFC01E00000003FF81E07FC03C00000003FF81E07FE03C00
-000003FFC3E07FE07C00000001FFC3C03FF07800000001FFE7C03FF07800000000FFE780
-1FF0F000000000FFE7801FF8F000000000FFFF801FF9F0000000007FFF000FFDE0000000
-007FFF000FFFE0000000003FFE0007FFC0000000003FFE0007FFC0000000003FFE0007FF
-C0000000001FFC0003FF80000000001FFC0003FF80000000000FF80001FF00000000000F
-F80001FF00000000000FF00000FF000000000007F00000FE000000000007F00000FE0000
-00000003E000007C000000000003C000003C0000004C2C7EAB51>I<FFFFFE003FFFF0FF
-FFFE003FFFF0FFFFFE003FFFF0FFFFFE003FFFF0FFFFFE003FFFF000FFF00003E000007F
-F80007C000003FF8000F8000001FFC001F0000001FFE003F0000000FFF007E00000007FF
-807C00000003FFC0F800000001FFC1F000000001FFE3E000000000FFF7C0000000007FFF
-80000000003FFF80000000001FFF00000000001FFE00000000000FFF000000000007FF80
-0000000003FFC00000000003FFC00000000007FFE0000000000FFFF0000000000FFFF800
-0000001F3FFC000000003E1FFC000000007C1FFE00000000F80FFF00000001F007FF8000
-0003F003FFC0000007E001FFC0000007C001FFE000000F8000FFF000001F00007FF80000
-3E00003FFC00007E00001FFC00FFFFE000FFFFFCFFFFE000FFFFFCFFFFE000FFFFFCFFFF
-E000FFFFFCFFFFE000FFFFFC362C7EAB3B>I E /Fg 6 118 df<0003F000000FF800003E
-1C60007C0FF000F807F001F007F003E007F007E003E00FC003E00FC003E01F8007E01F80
-07C03F0007C03F0007C03F000FC07F000F807E000F807E000F807E001F80FE001F00FC00
-1F00FC001F06FC003F07FC003E0FFC003E0EFC007E0E7C007E1E7C00FE1C7C01FC1C3C03
-FC3C3E07BE381F0E1E7807FC0FF001F003C0202278A027>97 D<0000FC000007FF00001F
-0780003E03C000FC01C001F803C003F007C007E00FC007C00FC00FC00FC01F8007001F80
-00003F0000003F0000003F0000007F0000007E0000007E0000007E000000FE000000FC00
-0000FC000000FC000000FC0000007C0000C07C0001E07C0001E07C0003C03E000F803E00
-1F001F007C000F81F00003FFC00000FE00001B2278A023>99 D<000FC0000003FFC00000
-03FFC0000003FF800000001F800000001F800000001F800000001F000000001F00000000
-3F000000003F000000003E000000003E000000007E000000007E000000007C000000007C
-00000000FC00000000FC00000000F83F800000F8FFE00001FBE0F00001FF80F80001FF00
-780001FE007C0003FC007C0003F8007C0003F0007C0003F0007C0007E000FC0007E000F8
-0007C000F80007C000F8000FC001F8000FC001F0000F8001F0000F8001F0001F8003F000
-1F8003E0001F0007E0001F0007C0C03F0007C1E03F000FC1C03E000F81C03E000F81C07E
-000F83C07E000F03807C000F07807C000F0700FC000F0E00FC000F1E00F80007F8007000
-01F00023357BB327>104 D<0003F0001FFC003C1E00780F00F00701E00701E00F03E01F
-03C01F03C01F03E00403E00003F00003FF8003FFE001FFF000FFF8007FFC0007FC0000FE
-00007E00003E38003EFC003CFC003CFC003CFC007CF00078E000F0F001F07803E03C0F80
-1FFE0003F80018227AA01F>115 D<000300000F80000F80000F80001F80001F80001F00
-001F00003F00003F00003E00003E00007E00007E00007C007FFFF87FFFF8FFFFF800F800
-00F80001F80001F80001F00001F00003F00003F00003E00003E00007E00007E00007C000
-07C0000FC0000FC0000F80000F80601F80F01F80E01F00E01F01E01F01C01F03C01E0380
-1E07001E0F000F1E0007F80001E00015307AAE19>I<01F000000003FC0007000F1E000F
-000E1E001F001C1E001F003C1E001F00381E003F00783E003E00703E003E00703E003E00
-707E007E00F07C007C0060FC007C0000F8007C0000F800FC0001F800F80001F000F80001
-F000F80001F001F80003F001F00003E001F00003E001F06003E003F07003E003E0F007C0
-03E0E007C003E0E003C007E1E003C007E1C003E00FC1C003E01FC3C001E03FE38001F071
-E780007FE0FF00001F803C0024227AA029>I E /Fh 2 104 df<000007E000003FE00000
-FE000003F8000007F000000FE000000FC000001FC000001F8000001F8000001F8000001F
-8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
-8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
-8000001F8000003F8000003F0000007E000000FC000003F800007FE00000FF0000007FE0
-000003F8000000FC0000007E0000003F0000003F8000001F8000001F8000001F8000001F
-8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
-8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
-8000001F8000001FC000000FC000000FE0000007F0000003F8000000FE0000003FE00000
-07E01B4B7BB726>102 D<FC000000FFC0000007F0000001FC000000FE0000007F000000
-3F0000003F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
-1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
-1F8000001F8000001F8000001F8000001F8000001F8000001F8000001FC000000FC00000
-07E0000003F0000001FC0000007FC000001FE000007FC00001FC000003F0000007E00000
-0FC000001FC000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
-1F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
-1F8000001F8000001F8000001F8000001F8000001F8000001F8000003F8000003F000000
-7F000000FE000001FC000007F00000FFC00000FC0000001B4B7BB726>I
-E /Fi 38 122 df<00003FE00FE00001FFF83FF80007E01EF83C001F800FF07E003F001F
-E0FE007E003FE0FE00FC003FC0FE01F8003FC0FE01F8003FC03803F0001F800003F0001F
-800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
-800003F0001F800003F0001F800003F0001F800003F0001F8000FFFFFFFFFFC0FFFFFFFF
-FFC0FFFFFFFFFFC003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
-800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
-800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
-800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
-800003F0001F800003F0001F800007F8003FC000FFFF83FFFF00FFFF83FFFF00FFFF83FF
-FF002F357FB42D>11 D<00001FE0000000FFFC000003F01E00000FC00780001F80078000
-3F000FC0007E001FC000FC001FC000FC001FC001F8001FC001F8000F8001F800000001F8
-00000001F800000001F800000001F800000001F800000001F800000001F800000001F800
-000001F8000FC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC001F8001FC001F8000FC001F8000F
-C001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC0
-01F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001
-F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8
-000FC003FC001FE07FFFC1FFFF7FFFC1FFFF7FFFC1FFFF28357FB42B>I<3C007E00FF00
-FF00FF80FF807F803D800180018001800180038003000300070006000E000C001C003800
-7000600009177AB315>39 D<3C007E00FF00FF00FF80FF807F803D800180018001800180
-038003000300070006000E000C001C0038007000600009177A8715>44
-D<3C7EFFFFFFFF7E3C08087A8715>46 D<000FE000007FFC0000F83E0003E00F8007C007
-C0078003C00F8003E01F0001F01F0001F03F0001F83F0001F83E0000F87E0000FC7E0000
-FC7E0000FC7E0000FC7E0000FCFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000
-FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000
-FEFE0000FEFE0000FEFE0000FE7E0000FC7E0000FC7E0000FC7E0000FC7E0000FC3F0001
-F83F0001F83F0001F81F0001F01F0001F00F8003E007C007C007C007C003E00F8000F83E
-00007FFC00000FE0001F347DB126>48 D<001FE00000FFFC0001FFFF0007E03F800F001F
-C01E000FE01C0007F03F0007F03F8007F83F8003F83FC003F83F8003F83F8003F81F0007
-F8000007F8000007F0000007F000000FE000000FC000001FC000003F8000007E000001F8
-00007FE000007FFC0000003F0000001FC000000FE0000007F0000007F8000003F8000003
-FC000001FC000001FE000001FE000001FE7E0001FEFF0001FEFF0001FEFF0001FEFF0001
-FEFF0001FCFE0003FC780003FC700007F8380007F03C000FF01F001FE00FE03F8003FFFF
-0000FFFC00001FE0001F347DB126>51 D<3C7EFFFFFFFF7E3C0000000000000000000000
-00000000003C7EFEFFFFFF7F3F03030303070606060E0C1C38307060082F7A9F15>59
-D<000000E0000000000000E0000000000000E0000000000001F0000000000001F0000000
-000003F8000000000003F8000000000003F8000000000007FC000000000007FC00000000
-0007FC00000000000DFE00000000000CFE00000000000CFE0000000000187F0000000000
-187F0000000000187F0000000000303F8000000000303F8000000000703FC00000000060
-1FC000000000601FC000000000E01FE000000000C00FE000000000C00FE000000001800F
-F0000000018007F0000000018007F0000000030003F8000000030003F8000000030003F8
-000000060001FC000000060001FC0000000E0001FE0000000FFFFFFE0000000FFFFFFE00
-00001FFFFFFF0000001800007F0000001800007F0000003000007F8000003000003F8000
-003000003F8000006000001FC000006000001FC000006000001FC00000C000000FE00000
-C000000FE00001C000000FF00001C0000007F00003E0000007F0001FF000000FF800FFFE
-0001FFFFE0FFFE0001FFFFE0FFFE0001FFFFE033367DB53A>65 D<FFFFFE000000FFFFFE
-000000FFFFFE00000003FE0000000001FC0000000001FC0000000001FC0000000001FC00
-00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
-00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
-00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
-00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
-00018001FC0000018001FC0000018001FC0000018001FC0000038001FC0000030001FC00
-00030001FC0000030001FC0000030001FC0000070001FC0000070001FC00000F0001FC00
-001F0001FC00003F0001FC00007F0001FC0000FE0003FC0007FE00FFFFFFFFFE00FFFFFF
-FFFE00FFFFFFFFFE0029337DB230>76 D<FFFE00001FFFF8FFFF00001FFFF8FFFF80001F
-FFF800FF800000FF0000FFC000003C0000DFE00000180000CFF00000180000CFF0000018
-0000C7F80000180000C3FC0000180000C3FC0000180000C1FE0000180000C0FF00001800
-00C07F8000180000C07F8000180000C03FC000180000C01FE000180000C01FE000180000
-C00FF000180000C007F800180000C003FC00180000C003FC00180000C001FE00180000C0
-00FF00180000C000FF00180000C0007F80180000C0003FC0180000C0001FE0180000C000
-1FE0180000C0000FF0180000C00007F8180000C00007F8180000C00003FC180000C00001
-FE180000C00000FF180000C00000FF180000C000007F980000C000003FD80000C000003F
-D80000C000001FF80000C000000FF80000C0000007F80000C0000007F80000C0000003F8
-0000C0000001F80000C0000001F80001E0000000F80007F80000007800FFFFC000003800
-FFFFC000003800FFFFC00000180035337EB23A>78 D<001FE00300007FFC070001FFFF07
-0007F01FCF000F8003FF001F0000FF003E00007F003E00003F007C00001F007C00001F00
-7800000F00F800000700F800000700F800000700F800000700FC00000300FC00000300FE
-00000300FE000000007F000000007FC00000003FF00000003FFF0000001FFFF000000FFF
-FF000007FFFFC00003FFFFF00000FFFFF800003FFFFC000003FFFE0000003FFF00000003
-FF00000000FF800000007F800000003F800000001FC00000000FC0C000000FC0C000000F
-C0C0000007C0C0000007C0C0000007C0E0000007C0E0000007C0F000000F80F000000F80
-F800000F00FC00001F00FE00003E00FF00007E00FFC000FC00F1FC03F800E0FFFFE000E0
-1FFF8000C003FE000022377CB42B>83 D<7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7F
-8007F001FE7C0007F0003E780007F0001E700007F0000E700007F0000E600007F00006E0
-0007F00007E00007F00007E00007F00007C00007F00003C00007F00003C00007F00003C0
-0007F00003C00007F00003C00007F00003000007F00000000007F00000000007F0000000
-0007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
-0007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
-0007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
-0007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
-0007F00000000007F0000000000FF80000001FFFFFFC00001FFFFFFC00001FFFFFFC0030
-337DB237>I<FFFFFE001FFFF8FFFFFE001FFFF8FFFFFE001FFFF801FF000000FF0000FE
-0000003C0000FE000000180000FE000000180000FE000000180000FE000000180000FE00
-0000180000FE000000180000FE000000180000FE000000180000FE000000180000FE0000
-00180000FE000000180000FE000000180000FE000000180000FE000000180000FE000000
-180000FE000000180000FE000000180000FE000000180000FE000000180000FE00000018
-0000FE000000180000FE000000180000FE000000180000FE000000180000FE0000001800
-00FE000000180000FE000000180000FE000000180000FE000000180000FE000000180000
-FE000000180000FE000000180000FE000000180000FE0000003800007F0000003000007F
-0000003000007F0000007000003F8000006000001F800000E000001FC00001C000000FC0
-0003C0000007E0000780000003F0000F00000001FC001E00000000FF00FC000000003FFF
-F0000000000FFFC00000000001FF00000035357EB23A>I<FFF0FFF0FFF0FFF0F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000FFF0FFF0FFF0FFF00C4B79B715>
-91 D<FFF0FFF0FFF0FFF000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F0FFF0FFF0FFF0FFF00C4B7FB715>93 D<007F80000003FFF000000F80FC00001C003E00
-003F003F00003F801F80003F800FC0003F800FC0003F8007E0001F0007E000000007E000
-000007E000000007E000000007E0000001FFE000001FFFE00000FF87E00003FC07E0000F
-F007E0001FC007E0003F8007E0007F8007E0007F0007E000FF0007E0C0FE0007E0C0FE00
-07E0C0FE0007E0C0FE000FE0C0FE000FE0C0FF001FE0C07F003BE0C03F8071F1801FC1E1
-FF8007FFC0FF0000FE003C0022237DA126>97 D<03F0000000FFF0000000FFF0000000FF
-F000000007F000000003F000000003F000000003F000000003F000000003F000000003F0
-00000003F000000003F000000003F000000003F000000003F000000003F000000003F000
-000003F000000003F03F800003F0FFE00003F3C0F80003F7007E0003FE003F0003FC001F
-8003F8000FC003F0000FC003F00007E003F00007F003F00007F003F00003F003F00003F8
-03F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803
-F00003F803F00003F803F00003F003F00007F003F00007E003F00007E003F0000FC003F8
-000FC003FC001F8003EC003F0003CF007C00038381F8000301FFE00000007F000025357E
-B32B>I<0007F800003FFF0000FC07C001F000E003E003F007C007F00FC007F01F8007F0
-3F8007F03F0003E07F0000007F0000007E000000FE000000FE000000FE000000FE000000
-FE000000FE000000FE000000FE000000FE000000FE0000007F0000007F0000003F000018
-3F8000181F8000381FC000300FC0007007E000E003F001C000FC0F80003FFE000007F000
-1D237EA122>I<0000003F0000000FFF0000000FFF0000000FFF000000007F000000003F
-000000003F000000003F000000003F000000003F000000003F000000003F000000003F00
-0000003F000000003F000000003F000000003F000000003F000000003F000007F03F0000
-3FFC3F0000FC0F3F0001F003BF0007E001FF000FC000FF001F80007F001F80003F003F00
-003F003F00003F007F00003F007E00003F00FE00003F00FE00003F00FE00003F00FE0000
-3F00FE00003F00FE00003F00FE00003F00FE00003F00FE00003F00FE00003F007E00003F
-007F00003F007F00003F003F00003F001F80007F001F80007F000FC000FF0007E001FF80
-03F007BFFC00F81E3FFC003FFC3FFC000FE03F0026357DB32B>I<000FE000007FFC0000
-F83F0003F00F8007E00FC00FC007E01F8003E01F8003F03F0003F03F0001F07F0001F87E
-0001F87E0001F8FE0001F8FE0001F8FFFFFFF8FFFFFFF8FE000000FE000000FE000000FE
-000000FE0000007E0000007F0000007F0000003F0000183F0000181F8000380F8000300F
-C0007007E000E001F003C000FC0F00003FFE000007F0001D237EA122>I<0001FC000007
-FF00001F0780003E0FC0007C1FC000FC1FC001F81FC001F81FC003F8070003F0000003F0
-000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0
-000003F00000FFFFF000FFFFF000FFFFF00003F0000003F0000003F0000003F0000003F0
-000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0
-000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0
-000003F0000003F0000007F800007FFFE0007FFFE0007FFFE0001A357FB417>I<000000
-1F00001FC07F8000FFF8E3C001F07FC7C007E03F03C00FC01F83800F800F80001F800FC0
-001F0007C0003F0007E0003F0007E0003F0007E0003F0007E0003F0007E0003F0007E000
-1F0007C0001F800FC0000F800F80000FC01F800007E03F000007F07C00000EFFF800000C
-1FC000001C000000001C000000001C000000001E000000001E000000001F000000000FFF
-FE00000FFFFFC00007FFFFF00003FFFFFC0007FFFFFE001F0001FE003E00007F007C0000
-3F007C00001F80F800000F80F800000F80F800000F80F800000F80F800000F80FC00001F
-807C00001F003E00003E001F00007C000FC001F80003F007E00000FFFF8000001FFC0000
-22337EA126>I<03F0000000FFF0000000FFF0000000FFF000000007F000000003F00000
-0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
-03F000000003F000000003F000000003F000000003F000000003F000000003F01FC00003
-F07FF00003F1E0FC0003F3807C0003F7007E0003FE007E0003FC003F0003FC003F0003F8
-003F0003F8003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F000
-3F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F
-0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0007F8007F80
-FFFFC7FFFCFFFFC7FFFCFFFFC7FFFC26347EB32B>I<07800FC01FE01FE01FE01FE00FC0
-0780000000000000000000000000000000000000000007E0FFE0FFE0FFE00FE007E007E0
-07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0
-07E007E007E007E00FF0FFFFFFFFFFFF10337EB215>I<07E0FFE0FFE0FFE00FE007E007
-E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
-E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
-E007E007E007E007E007E00FF0FFFFFFFFFFFF10347EB315>108
-D<03F01FE000FF0000FFF07FF803FFC000FFF1E07C0F03E000FFF3803E1C01F00007F700
-3F3801F80003FE003F7001F80003FC001FE000FC0003FC001FE000FC0003F8001FC000FC
-0003F8001FC000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F000
-1F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC
-0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F000
-1F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC
-0003F0001F8000FC0003F0001F8000FC0007F8003FC001FE00FFFFC7FFFE3FFFF0FFFFC7
-FFFE3FFFF0FFFFC7FFFE3FFFF03C217EA041>I<03F01FC000FFF07FF000FFF1E0FC00FF
-F3807C0007F7007E0003FE007E0003FC003F0003FC003F0003F8003F0003F8003F0003F0
-003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F000
-3F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F
-0003F0003F0003F0003F0003F0003F0003F0003F0007F8007F80FFFFC7FFFCFFFFC7FFFC
-FFFFC7FFFC26217EA02B>I<0007F00000003FFE000000FC1F800001F007C00003C001E0
-0007C001F0000F8000F8001F00007C001F00007C003F00007E003E00003E007E00003F00
-7E00003F007E00003F00FE00003F80FE00003F80FE00003F80FE00003F80FE00003F80FE
-00003F80FE00003F80FE00003F807E00003F007E00003F007E00003F003F00007E003F00
-007E001F00007C001F8000FC000FC001F80007C001F00003F007E00000FC1F8000003FFE
-00000007F0000021237EA126>I<03F03F8000FFF0FFE000FFF3C0F800FFF7007E0007FE
-003F0003FC001F8003F8001FC003F0000FC003F0000FE003F00007F003F00007F003F000
-07F003F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803F00003
-F803F00003F803F00003F803F00007F803F00007F003F00007F003F00007E003F0000FE0
-03F0000FC003F8001FC003FC003F8003FC003F0003FF00FC0003F381F80003F1FFE00003
-F07F000003F000000003F000000003F000000003F000000003F000000003F000000003F0
-00000003F000000003F000000003F000000007F8000000FFFFC00000FFFFC00000FFFFC0
-000025307EA02B>I<03E07C00FFE1FF00FFE38F80FFE71FC007EE1FC003EC1FC003EC1F
-C003FC0F8003F8000003F8000003F8000003F0000003F0000003F0000003F0000003F000
-0003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000
-0003F0000003F0000003F0000003F0000007F80000FFFFE000FFFFE000FFFFE0001A217F
-A01E>114 D<00FF060007FFCE001F00FE003C003E0078001E0078000E00F0000E00F000
-0600F0000600F8000600F8000600FE000000FF8000007FFC00003FFFC0003FFFF0000FFF
-F80007FFFC0000FFFE00000FFF000000FF0000003F80C0001F80C0000F80E0000780E000
-0780E0000780F0000780F0000700F8000F00FC000E00FE001C00F7807800E1FFE000C07F
-800019237EA11E>I<00300000300000300000300000300000700000700000700000F000
-00F00001F00001F00003F00007F0001FFFFEFFFFFEFFFFFE03F00003F00003F00003F000
-03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F003
-03F00303F00303F00303F00303F00303F00303F00303F00701F80601F80600FC0E007E1C
-001FF80007E0182F7FAD1E>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F000
-7F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F
-0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F00
-03F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0007F0003F0007F0003
-F0007F0003F000FF0001F000FF0001F801FF8000F803BFFC007E073FFC001FFE3FFC0007
-F83F0026227EA02B>I<FFFF00FFF0FFFF00FFF0FFFF00FFF00FF0003F8007F0001F0003
-F0000E0003F0000C0003F8001C0001F800180001F800180000FC00300000FC00300000FE
-007000007E006000007F006000003F00C000003F00C000001F818000001F818000001FC3
-8000000FC30000000FC300000007E600000007E600000007FE00000003FC00000003FC00
-000001F800000001F800000001F800000000F000000000F00000000060000024217E9F29
->I<FFFF1FFF81FFF0FFFF1FFF81FFF0FFFF1FFF81FFF007F801FC003F8007F001F8001E
-0003F000F8001C0003F000FC001C0001F8007C00180001F8007C00180001FC007E003800
-00FC00FE00300000FC00FE003000007E01FF006000007E019F006000007E019F80600000
-3F030F80C000003F030F80C000003F030FC0C000001F8607C18000001F8607C18000001F
-C607E38000000FCC03E30000000FCC03E300000007FC03F600000007F801F600000007F8
-01FE00000003F000FC00000003F000FC00000003F000FC00000001E0007800000001E000
-7800000001E0007800000000C00030000034217F9F37>I<FFFF01FFF8FFFF01FFF8FFFF
-01FFF803FE00FF8001FC007C0000FC007800007E007000007F00E000003F81C000001F83
-8000000FC300000007E600000007FE00000003FC00000001F800000000FC00000000FE00
-000000FF00000001FF000000039F800000071FC00000060FE000000C07E000001C03F000
-003801F800007001FC0000F000FC0001F000FE000FF000FF80FFFC03FFFCFFFC03FFFCFF
-FC03FFFC26207F9F29>I<7FFF807FF87FFF807FF87FFF807FF807F8001FC003F8000F80
-01F800070001F800060000FC000C0000FC000C0000FE001C00007E001800007E00180000
-3F003000003F003000003F807000001F806000001FC0E000000FC0C000000FC0C0000007
-E180000007E180000007F380000003F300000003FB00000001FE00000001FE00000000FC
-00000000FC00000000FC0000000078000000007800000000300000000030000000006000
-0000006000000000E000000000C000000000C0000000018000007801800000FC03000000
-FC03000000FC06000000FC0E000000701C00000078380000001FF00000000FC000000025
-307F9F29>I E /Fj 5 53 df<0000380000000038000000003800000000380000000038
-000000003800000000380000000038000000003800000000380000000038000000003800
-00000038000000003800000000380000000038000000003800000000380000FFFFFFFFFE
-FFFFFFFFFEFFFFFFFFFE0000380000000038000000003800000000380000000038000000
-003800000000380000000038000000003800000000380000000038000000003800000000
-3800000000380000000038000000003800000000380000000038000027277C9F2F>43
-D<00E00001E00007E000FFE000F9E00001E00001E00001E00001E00001E00001E00001E0
-0001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0
-0001E00001E00001E00001E00001E00001E00003F000FFFFC0FFFFC012217AA01E>49
-D<01FC0007FF801C0FC03003E06001F06000F8F800F8FC00FCFC00FCFC007C78007C3000
-FC0000FC0000F80000F80001F00003E00003C0000780000F00001E0000380000700000E0
-0001C00C03800C0600180C00181800183FFFF87FFFF8FFFFF0FFFFF016217CA01E>I<00
-FF0003FFC00F03E01C00F01C00F83E00FC3E007C3E007C1E00FC0C00FC0000F80000F800
-01F00003E0000FC001FF0001FF000003E00000F000007800007C00003E00003F30003F78
-003FFC003FFC003FFC003EF8007E60007C3800F81E03F00FFFC001FF0018227DA01E>I<
-0000E00001E00001E00003E00007E00007E0000DE0001DE00039E00031E00061E000E1E0
-00C1E00181E00381E00701E00601E00C01E01C01E01801E03001E07001E0E001E0FFFFFF
-FFFFFF0001E00001E00001E00001E00001E00001E00003F0003FFF003FFF18227DA11E>
-I E /Fk 5 107 df<000FFC0000003FFF000000FFFFC00003FFFFF00007FFFFF8000FFF
-FFFC001FFFFFFE003FFFFFFF003FFFFFFF007FFFFFFF807FFFFFFF807FFFFFFF80FFFFFF
-FFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFF
-C0FFFFFFFFC0FFFFFFFFC07FFFFFFF807FFFFFFF807FFFFFFF803FFFFFFF003FFFFFFF00
-1FFFFFFE000FFFFFFC0007FFFFF80003FFFFF00000FFFFC000003FFF0000000FFC000022
-227BA72D>15 D<0000000000000030000000000000000000780000000000000000007800
-00000000000000007C0000000000000000003C0000000000000000003C00000000000000
-00003E0000000000000000001E0000000000000000001E0000000000000000001F000000
-0000000000000F8000000000000000000F80000000000000000007C00000000000000000
-03E0000000000000000003E0000000000000000001F0000000000000000000F800000000
-00000000007C0000000000000000007E0000000000000000001F8000000000000000000F
-C0000000000000000007F07FFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFFFF7FFFFFFFFFFFFFFFFFFC000000000000000007F000000000000000000FC000
-000000000000001F8000000000000000007E0000000000000000007C0000000000000000
-00F8000000000000000001F0000000000000000003E0000000000000000003E000000000
-0000000007C000000000000000000F8000000000000000000F8000000000000000001F00
-00000000000000001E0000000000000000001E0000000000000000003E00000000000000
-00003C0000000000000000003C0000000000000000007C00000000000000000078000000
-0000000000007800000000000000000030000050307BAE5B>33 D<0000003F000003FF00
-000FE000003F8000007E000001FC000001F8000003F0000003F0000007E0000007E00000
-07E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
-07E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
-07E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000000FE00000
-0FC000001FC000003F8000003F000000FE000003F800007FE00000FF0000007FE0000003
-F8000000FE0000003F0000003F8000001FC000000FC000000FE0000007E0000007E00000
-07E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
-07E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
-07E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000003F00000
-03F0000001F8000001FC0000007E0000003F8000000FE0000003FF0000003F205B7AC32D
->102 D<FC000000FFC0000007F0000001FC0000007E0000003F8000001F8000000FC000
-000FC0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E0000007F0000003F0000003F8000001FC000000FC0000007F0000001FC0
-000007FE000000FF000007FE00001FC000007F000000FC000001FC000003F8000003F000
-0007F0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E000000FC000000FC000001F8000003F8000007E000001FC000007F00000
-FFC00000FC000000205B7AC32D>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
-F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
-F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F060045B
-76C319>106 D E /Fl 4 53 df<000C00003C00007C0003FC00FFFC00FC7C00007C0000
-7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
-7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
-7C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000FE007FFFFE7F
-FFFE172C7AAB23>49 D<007F800001FFF0000780FC000E003F001C001F8038000FC07000
-0FC0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003F0FE0003F07C0007F00000
-07F0000007F0000007E000000FE000000FC000001FC000001F8000003F0000007E000000
-7C000000F8000001F0000003E0000007C000000F8000001E0000003C00000078000000F0
-003000E0003001C0003003800060070000600E0000E01FFFFFE03FFFFFE07FFFFFC0FFFF
-FFC0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC000E007E001C003F001C001F
-803F001FC03F001FC03F800FC03F000FC03F000FC00C001FC000001FC000001F8000001F
-8000003F0000003E0000007C000000F8000003F00000FFC00000FFF0000000FC0000003F
-0000001F8000001FC000000FC000000FE000000FE0000007F0000007F0380007F07C0007
-F0FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC070001FC038001F801E003F
-000780FC0001FFF000007FC0001C2D7DAB23>I<00000E0000000E0000001E0000003E00
-00003E0000007E000000FE000000FE000001BE000003BE0000033E0000063E00000E3E00
-000C3E0000183E0000383E0000303E0000603E0000E03E0000C03E0001803E0003803E00
-03003E0006003E000E003E000C003E0018003E0038003E0030003E0060003E00E0003E00
-FFFFFFFCFFFFFFFC00003E0000003E0000003E0000003E0000003E0000003E0000003E00
-00003E0000003E0000007F00001FFFFC001FFFFC1E2D7EAC23>I
-E /Fm 52 122 df<000000FFF8000000000FFFFF000000007FFFFF80000001FFFFFFE000
-0007FFC01FF000000FFE0007F000001FF8000FF800003FE0001FF800007FC0003FFC0000
-FFC0003FFC0000FF80003FFC0001FF80003FFC0001FF00003FFC0001FF00003FFC0001FF
-00001FF80001FF00000FF00001FF000003C00001FF000000000001FF000000000001FF00
-0000000001FF000000000001FF000000000001FF000000000001FF000003FC00FFFFFFFF
-FFFC00FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC0001FF80001F
-FC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC
-0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC00
-01FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001
-FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF
-80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80
-000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC007FFFFE03FFFFF07FFFFE03
-FFFFF07FFFFE03FFFFF07FFFFE03FFFFF07FFFFE03FFFFF034407EBF3A>12
-D<0FC0001F801FE0003FC03FF0007FE07FF800FFF0FFFC01FFF8FFFC01FFF8FFFC01FFF8
-FFFE01FFFCFFFE01FFFCFFFE01FFFC7FFE00FFFC3FFE007FFC1FFE003FFC0FDE001FBC00
-1E00003C001E00003C003E00007C003C000078003C000078007C0000F800780000F00078
-0000F000F80001F001F00003E001F00003E003E00007C007C0000F800F80001F001F8000
-3F003F00007E003E00007C001C0000380026207DBE37>34 D<FFFFFFE0FFFFFFE0FFFFFF
-E0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE01B097F9823>45
-D<0FC01FE03FF07FF8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE00FC00E0E798D1D>I<
-0000FFE000000007FFFC0000001FFFFF0000007FFFFFC00000FFE0FFE00001FF803FF000
-03FE000FF80007FC0007FC0007FC0007FC000FF80003FE001FF80003FF001FF80003FF00
-1FF80003FF003FF00001FF803FF00001FF803FF00001FF807FF00001FFC07FF00001FFC0
-7FF00001FFC07FF00001FFC07FF00001FFC0FFF00001FFE0FFF00001FFE0FFF00001FFE0
-FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0
-FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0
-FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE07FF00001FFC0
-7FF00001FFC07FF00001FFC07FF00001FFC07FF00001FFC03FF00001FF803FF80003FF80
-3FF80003FF801FF80003FF001FF80003FF000FF80003FE000FFC0007FE0007FE000FFC00
-03FF001FF80001FF803FF00000FFE0FFE000007FFFFFC000001FFFFF00000007FFFC0000
-0000FFE000002B3D7CBB34>48 D<00000F000000003F000000007F00000001FF0000000F
-FF000001FFFF0000FFFFFF0000FFFFFF0000FFFFFF0000FFF7FF0000FE07FF00000007FF
-00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00
-000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF0000
-0007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF000000
-07FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007
-FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF
-00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00
-00FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0243C78BB34>I<0003FF
-800000003FFFF8000000FFFFFE000003FFFFFF800007FFFFFFC0000FF80FFFE0001FC003
-FFF0003F8000FFF8007FC0007FFC007FE0003FFE00FFF0003FFE00FFF8001FFF00FFF800
-1FFF00FFF8000FFF80FFF8000FFF80FFF8000FFF80FFF8000FFF807FF0000FFF803FE000
-0FFF801FC0000FFF800700000FFF800000000FFF800000001FFF000000001FFF00000000
-1FFE000000003FFE000000003FFC000000007FF8000000007FF800000000FFF000000000
-FFE000000001FFC000000003FF8000000007FE0000000007FC000000000FF8000000001F
-E0000000003FC0000000007F8000000000FF000F800001FC000F800003F8000F800007F0
-001F00000FE0001F00001F80001F00003F00001F00007E00003F0000FC00003F0001FFFF
-FFFF0003FFFFFFFE0007FFFFFFFE000FFFFFFFFE001FFFFFFFFE003FFFFFFFFE007FFFFF
-FFFE00FFFFFFFFFE00FFFFFFFFFC00FFFFFFFFFC00FFFFFFFFFC00FFFFFFFFFC00293C7B
-BB34>I<0001FFE00000000FFFFE0000003FFFFF800000FFFFFFE00001FF81FFF00003FC
-007FF80007F0003FFC0007F0003FFE000FFC001FFE000FFE001FFF001FFE001FFF001FFF
-001FFF001FFF001FFF001FFF001FFF001FFF001FFF001FFF001FFF000FFE001FFF000FFE
-001FFE0007FC003FFE0001F0003FFC000000003FFC000000007FF8000000007FF0000000
-00FFE000000001FFC00000000FFF80000007FFFE00000007FFF800000007FFFE00000007
-FFFFC000000001FFF0000000007FF8000000003FFC000000001FFE000000000FFF000000
-000FFF800000000FFF8000000007FFC000000007FFC000000007FFE00FC00007FFE01FE0
-0007FFE03FF00007FFE07FF80007FFE0FFFC0007FFE0FFFC0007FFE0FFFC0007FFE0FFFC
-0007FFC0FFFC0007FFC0FFFC000FFFC0FFF8000FFF807FF8000FFF807FF0001FFF003FC0
-003FFE001FE0007FFC000FFE01FFF80007FFFFFFF00003FFFFFFE00000FFFFFF8000003F
-FFFE00000003FFE000002B3D7CBB34>I<00000001F80000000003F80000000007F80000
-000007F8000000000FF8000000001FF8000000003FF8000000003FF8000000007FF80000
-0000FFF800000001FFF800000003FFF800000003FFF800000007FFF80000000FFFF80000
-001FBFF80000003F3FF80000003E3FF80000007C3FF8000000FC3FF8000001F83FF80000
-01F03FF8000003E03FF8000007E03FF800000FC03FF800001F803FF800001F003FF80000
-3E003FF800007E003FF80000FC003FF80001F8003FF80001F0003FF80003E0003FF80007
-E0003FF8000FC0003FF8000F80003FF8001F00003FF8003F00003FF8007E00003FF800FC
-00003FF800FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF800
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000001FFFFFFF80001FFFFFFF800
-01FFFFFFF80001FFFFFFF80001FFFFFFF82D3C7DBB34>I<0700000038000FE00001F800
-0FFE003FF8000FFFFFFFF8000FFFFFFFF0000FFFFFFFE0000FFFFFFFC0000FFFFFFF8000
-0FFFFFFF00000FFFFFFE00000FFFFFF800000FFFFFF000000FFFFFC000000FFFFE000000
-0F80000000000F80000000000F80000000000F80000000000F80000000000F8000000000
-0F80000000000F80000000000F80000000000F80FFC000000F87FFFC00000F9FFFFF0000
-0FFFFFFF80000FFF01FFE0000FF8007FF0000FF0003FF8000FC0001FFC000F80001FFC00
-0700001FFE000000000FFE000000000FFF000000000FFF000000000FFF000000000FFF80
-0000000FFF800700000FFF801FC0000FFF803FE0000FFF807FF0000FFF80FFF0000FFF80
-FFF8000FFF80FFF8000FFF80FFF8000FFF00FFF8000FFF00FFF0000FFF00FFF0001FFE00
-7FE0001FFE007F80001FFC003F00003FFC003F80007FF8001FE000FFF0000FFC07FFE000
-07FFFFFFC00003FFFFFF000000FFFFFC0000003FFFF000000007FF000000293D7BBB34>
-I<000007FF000000003FFFC0000001FFFFF0000007FFFFF800000FFF03FC00003FF800FC
-00007FE001FE0000FFC003FE0001FF8007FF0003FF000FFF0003FF000FFF0007FE000FFF
-000FFE000FFF000FFE000FFF001FFC000FFF001FFC0007FE003FFC0003FC003FFC0001F8
-003FFC000000007FF8000000007FF8000000007FF8020000007FF83FFE0000FFF87FFF80
-00FFF9FFFFE000FFFBFFFFF000FFFBE03FF800FFFF800FFC00FFFF0007FE00FFFF0007FF
-00FFFE0007FF00FFFE0003FF80FFFC0003FFC0FFFC0003FFC0FFFC0003FFC0FFFC0003FF
-E0FFF80003FFE0FFF80003FFE0FFF80003FFE0FFF80003FFE07FF80003FFE07FF80003FF
-E07FF80003FFE07FF80003FFE07FF80003FFE03FF80003FFE03FF80003FFE03FFC0003FF
-C01FFC0003FFC01FFC0003FFC00FFC0007FF800FFE0007FF0007FE0007FF0003FF000FFE
-0001FF801FFC0000FFE07FF800007FFFFFF000003FFFFFE000001FFFFF80000007FFFE00
-000000FFF000002B3D7CBB34>I<1F00000000001F80000000001FF8000000001FFFFFFF
-FFF01FFFFFFFFFF01FFFFFFFFFF01FFFFFFFFFF03FFFFFFFFFF03FFFFFFFFFE03FFFFFFF
-FFC03FFFFFFFFF803FFFFFFFFF003FFFFFFFFE003FFFFFFFFC007FFFFFFFFC007E000001
-F8007E000003F0007C000007E0007C00000FC0007C00001F80007C00001F0000F800003F
-0000F800007E0000F80000FC0000000001F80000000003F00000000003F00000000007E0
-000000000FE0000000000FC0000000001FC0000000003FC0000000003F80000000007F80
-000000007F8000000000FF8000000000FF0000000001FF0000000001FF0000000003FF00
-00000003FF0000000003FF0000000007FE0000000007FE0000000007FE000000000FFE00
-0000000FFE000000000FFE000000000FFE000000000FFE000000001FFE000000001FFE00
-0000001FFE000000001FFE000000001FFE000000001FFE000000001FFE000000001FFE00
-0000001FFE000000001FFE000000000FFC0000000007F80000000003F00000002C3F7ABD
-34>I<0000FFF000000007FFFE0000001FFFFF8000007FFFFFE00000FFC07FF00001FE00
-1FF80003FC000FFC0007F80007FE0007F80003FE000FF00003FE000FF00003FF000FF000
-01FF001FF00001FF001FF00001FF001FF80001FF001FFC0001FF001FFE0001FF001FFF00
-03FF001FFFC003FE001FFFF003FE000FFFF807FC000FFFFE0FF8000FFFFF9FF00007FFFF
-FFE00003FFFFFFC00003FFFFFF800001FFFFFF000000FFFFFF8000007FFFFFE000001FFF
-FFF000003FFFFFF80000FFFFFFFC0001FFFFFFFE0007FE3FFFFF000FFC1FFFFF801FF807
-FFFF801FF001FFFFC03FE0007FFFC07FE0003FFFC07FC0000FFFE07FC00003FFE0FF8000
-01FFE0FF800000FFE0FF8000007FE0FF8000007FE0FF8000003FE0FF8000003FE0FF8000
-003FE0FFC000003FC07FC000003FC07FC000007F807FE000007F803FF00000FF001FF800
-01FF001FFE0007FE000FFFC03FFC0007FFFFFFF80001FFFFFFE000007FFFFFC000001FFF
-FE00000001FFF000002B3D7CBB34>I<0001FFE00000000FFFFC0000003FFFFF000000FF
-FFFFC00001FFE0FFE00003FF003FF00007FE001FF8000FFE000FFC001FFC000FFC001FFC
-0007FE003FFC0007FE007FF80007FF007FF80003FF007FF80003FF80FFF80003FF80FFF8
-0003FF80FFF80003FFC0FFF80003FFC0FFF80003FFC0FFF80003FFC0FFF80003FFC0FFF8
-0003FFE0FFF80003FFE0FFF80003FFE0FFF80003FFE07FF80007FFE07FF80007FFE07FF8
-0007FFE07FF80007FFE03FF8000FFFE01FFC000FFFE01FFC001FFFE00FFE001FFFE007FE
-003FFFE003FF80FBFFE001FFFFFBFFE0007FFFF3FFE0003FFFC3FFE0000FFF83FFC00000
-0803FFC000000003FFC000000003FFC000000007FF8003F00007FF8007F80007FF800FFC
-0007FF001FFE0007FF001FFE000FFE001FFE000FFE001FFE000FFC001FFE001FFC001FFE
-003FF8001FFC003FF0000FF800FFE0000FF001FFC00007FC0FFF800003FFFFFF000001FF
-FFFC000000FFFFF00000007FFFC00000000FFE0000002B3D7CBB34>I<0FC01FE03FF07F
-F8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE00FC0000000000000000000000000000000
-0000000000000000000FC01FE03FF07FF8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE00F
-C00E2879A71D>I<00000000FC0000000000000000FC0000000000000001FE0000000000
-000001FE0000000000000003FF0000000000000003FF0000000000000003FF0000000000
-000007FF8000000000000007FF800000000000000FFFC00000000000000FFFC000000000
-00000FFFC00000000000001FFFE00000000000001FFFE00000000000003FFFF000000000
-00003FFFF00000000000003FFFF00000000000007FFFF80000000000007CFFF800000000
-0000FCFFFC000000000000F87FFC000000000000F87FFC000000000001F87FFE00000000
-0001F03FFE000000000003F03FFF000000000003E01FFF000000000007E01FFF80000000
-0007C01FFF800000000007C00FFF80000000000FC00FFFC0000000000F8007FFC0000000
-001F8007FFE0000000001F0007FFE0000000001F0003FFE0000000003F0003FFF0000000
-003E0001FFF0000000007E0001FFF8000000007C0000FFF8000000007C0000FFF8000000
-00FC0000FFFC00000000F800007FFC00000001FFFFFFFFFE00000001FFFFFFFFFE000000
-01FFFFFFFFFE00000003FFFFFFFFFF00000003FFFFFFFFFF00000007E000001FFF800000
-07C000000FFF8000000FC000000FFFC000000F8000000FFFC000000F80000007FFC00000
-1F80000007FFE000001F00000003FFE000003F00000003FFF000003E00000003FFF00000
-3E00000001FFF000007E00000001FFF800007C00000000FFF800FFFFFC0000FFFFFFFCFF
-FFFC0000FFFFFFFCFFFFFC0000FFFFFFFCFFFFFC0000FFFFFFFCFFFFFC0000FFFFFFFC46
-3F7CBE4F>65 D<FFFFFFFFFFF80000FFFFFFFFFFFF8000FFFFFFFFFFFFF000FFFFFFFFFF
-FFFC00FFFFFFFFFFFFFE00003FFC00003FFF00003FFC00000FFF80003FFC000007FFC000
-3FFC000003FFE0003FFC000001FFE0003FFC000001FFF0003FFC000001FFF0003FFC0000
-00FFF8003FFC000000FFF8003FFC000000FFF8003FFC000000FFF8003FFC000000FFF800
-3FFC000000FFF8003FFC000000FFF8003FFC000000FFF0003FFC000001FFF0003FFC0000
-01FFF0003FFC000003FFE0003FFC000003FFC0003FFC000007FF80003FFC00000FFF0000
-3FFC00003FFE00003FFC0001FFF800003FFFFFFFFFE000003FFFFFFFFF8000003FFFFFFF
-FFF800003FFFFFFFFFFE00003FFC00000FFF80003FFC000003FFC0003FFC000001FFE000
-3FFC000000FFF0003FFC000000FFF8003FFC0000007FFC003FFC0000007FFC003FFC0000
-003FFE003FFC0000003FFE003FFC0000003FFF003FFC0000003FFF003FFC0000003FFF00
-3FFC0000001FFF003FFC0000003FFF003FFC0000003FFF003FFC0000003FFF003FFC0000
-003FFF003FFC0000003FFE003FFC0000007FFE003FFC0000007FFE003FFC000000FFFC00
-3FFC000001FFF8003FFC000003FFF8003FFC000007FFF0003FFC00003FFFE0FFFFFFFFFF
-FFFFC0FFFFFFFFFFFFFF00FFFFFFFFFFFFFC00FFFFFFFFFFFFF000FFFFFFFFFFFF000040
-3E7DBD4A>I<00000007FFC0000E000000FFFFFC001E000007FFFFFF003E00003FFFFFFF
-C07E0000FFFFFFFFE1FE0003FFFF803FFBFE0007FFF80003FFFE000FFFC00000FFFE003F
-FF0000007FFE007FFE0000001FFE00FFF80000000FFE01FFF000000007FE03FFE0000000
-07FE03FFC000000003FE07FFC000000001FE0FFF8000000001FE0FFF8000000000FE1FFF
-0000000000FE1FFF00000000007E3FFF00000000007E3FFE00000000007E3FFE00000000
-003E7FFE00000000003E7FFE00000000003E7FFE00000000003E7FFC000000000000FFFC
-000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC00000000
-0000FFFC000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC
-000000000000FFFC000000000000FFFC0000000000007FFC0000000000007FFE00000000
-00007FFE00000000003E7FFE00000000003E3FFE00000000003E3FFE00000000003E3FFF
-00000000003E1FFF00000000007E1FFF00000000007C0FFF80000000007C0FFF80000000
-00FC07FFC000000000F803FFE000000001F803FFE000000001F001FFF000000003F000FF
-F800000007E0007FFE0000000FC0003FFF0000003F80000FFFC00000FF000007FFF80003
-FE000003FFFF801FFC000000FFFFFFFFF80000003FFFFFFFE000000007FFFFFF80000000
-00FFFFFC000000000007FFC000003F407ABE4C>I<FFFFFFFFFFF8000000FFFFFFFFFFFF
-800000FFFFFFFFFFFFF00000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFF0000003FFC00007F
-FFC000003FFC000007FFE000003FFC000001FFF000003FFC0000007FF800003FFC000000
-3FFC00003FFC0000001FFE00003FFC0000000FFF00003FFC00000007FF80003FFC000000
-07FF80003FFC00000003FFC0003FFC00000003FFC0003FFC00000001FFE0003FFC000000
-01FFE0003FFC00000001FFF0003FFC00000000FFF0003FFC00000000FFF0003FFC000000
-00FFF8003FFC00000000FFF8003FFC00000000FFF8003FFC00000000FFF8003FFC000000
-00FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC000000
-00FFFC003FFC000000007FFC003FFC000000007FFC003FFC000000007FFC003FFC000000
-00FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC000000
-00FFFC003FFC00000000FFF8003FFC00000000FFF8003FFC00000000FFF8003FFC000000
-00FFF8003FFC00000000FFF0003FFC00000000FFF0003FFC00000001FFF0003FFC000000
-01FFE0003FFC00000001FFE0003FFC00000003FFC0003FFC00000003FFC0003FFC000000
-07FF80003FFC0000000FFF00003FFC0000001FFF00003FFC0000003FFE00003FFC000000
-7FFC00003FFC000001FFF800003FFC000007FFE000003FFC00007FFFC000FFFFFFFFFFFF
-FF8000FFFFFFFFFFFFFE0000FFFFFFFFFFFFF80000FFFFFFFFFFFFC00000FFFFFFFFFFF8
-000000463E7DBD50>I<FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF
-FFFFFFFFFF00FFFFFFFFFFFFFF80003FFE00003FFF80003FFE000007FF80003FFE000001
-FF80003FFE000000FF80003FFE0000003F80003FFE0000003F80003FFE0000001F80003F
-FE0000000FC0003FFE0000000FC0003FFE0000000FC0003FFE00000007C0003FFE0007C0
-07C0003FFE0007C007C0003FFE0007C007C0003FFE0007C003E0003FFE0007C003E0003F
-FE0007C003E0003FFE000FC003E0003FFE000FC00000003FFE001FC00000003FFE003FC0
-0000003FFE00FFC00000003FFFFFFFC00000003FFFFFFFC00000003FFFFFFFC00000003F
-FFFFFFC00000003FFFFFFFC00000003FFE00FFC00000003FFE003FC00000003FFE001FC0
-0000003FFE000FC0007C003FFE000FC0007C003FFE0007C0007C003FFE0007C000F8003F
-FE0007C000F8003FFE0007C000F8003FFE0007C000F8003FFE0007C000F8003FFE000000
-01F8003FFE00000001F8003FFE00000001F0003FFE00000003F0003FFE00000003F0003F
-FE00000007F0003FFE00000007F0003FFE0000000FF0003FFE0000001FE0003FFE000000
-3FE0003FFE000000FFE0003FFE000003FFE0003FFE00003FFFE0FFFFFFFFFFFFFFE0FFFF
-FFFFFFFFFFE0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC03E3D7DBC45>
-I<FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFF
-FFFFFFFF00003FFE00007FFF00003FFE00000FFF00003FFE000003FF00003FFE000000FF
-00003FFE0000007F00003FFE0000007F00003FFE0000003F00003FFE0000001F80003FFE
-0000001F80003FFE0000001F80003FFE0000000F80003FFE0000000F80003FFE0007C00F
-80003FFE0007C00F80003FFE0007C007C0003FFE0007C007C0003FFE0007C007C0003FFE
-0007C007C0003FFE000FC00000003FFE000FC00000003FFE001FC00000003FFE003FC000
-00003FFE00FFC00000003FFFFFFFC00000003FFFFFFFC00000003FFFFFFFC00000003FFF
-FFFFC00000003FFFFFFFC00000003FFE00FFC00000003FFE003FC00000003FFE001FC000
-00003FFE000FC00000003FFE000FC00000003FFE0007C00000003FFE0007C00000003FFE
-0007C00000003FFE0007C00000003FFE0007C00000003FFE0007C00000003FFE00000000
-00003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
-0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
-00003FFE0000000000003FFE0000000000FFFFFFFFE0000000FFFFFFFFE0000000FFFFFF
-FFE0000000FFFFFFFFE0000000FFFFFFFFE00000003A3D7DBC42>I<FFFFFFFF80FFFFFF
-FF80FFFFFFFF80FFFFFFFF80FFFFFFFF80003FFE0000003FFE0000003FFE0000003FFE00
-00003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000
-003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE000000
-3FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003F
-FE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE
-0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE00
-00003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000
-003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000FFFFFFFF80FFFFFFFF80FF
-FFFFFF80FFFFFFFF80FFFFFFFF80213E7DBD28>73 D<FFFFFFFFE00000FFFFFFFFE00000
-FFFFFFFFE00000FFFFFFFFE00000FFFFFFFFE00000003FFE00000000003FFE0000000000
-3FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003F
-FE00000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE
-00000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE00
-000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE0000
-0000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE000000
-00003FFE00000000003FFE00000000003FFE00000000003FFE0000003E003FFE0000003E
-003FFE0000003E003FFE0000003E003FFE0000007E003FFE0000007C003FFE0000007C00
-3FFE0000007C003FFE0000007C003FFE000000FC003FFE000000FC003FFE000001FC003F
-FE000001FC003FFE000003F8003FFE000003F8003FFE000007F8003FFE00000FF8003FFE
-00001FF8003FFE00007FF8003FFE0001FFF8003FFE000FFFF8FFFFFFFFFFFFF8FFFFFFFF
-FFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0373E7DBD3F>76
-D<0000003FFF00000000000003FFFFF000000000001FFFFFFE00000000007FFFFFFF8000
-000001FFF807FFE000000007FFC000FFF80000000FFF00003FFC0000003FFC00000FFF00
-00007FF8000007FF800000FFF0000003FFC00001FFE0000001FFE00001FFC0000000FFE0
-0003FFC0000000FFF00007FF800000007FF80007FF800000007FF8000FFF000000003FFC
-001FFF000000003FFE001FFF000000003FFE001FFE000000001FFE003FFE000000001FFF
-003FFE000000001FFF003FFE000000001FFF007FFC000000000FFF807FFC000000000FFF
-807FFC000000000FFF807FFC000000000FFF80FFFC000000000FFFC0FFFC000000000FFF
-C0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFF
-C0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFF
-C0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFFC07FFC000000000FFF
-807FFE000000001FFF807FFE000000001FFF807FFE000000001FFF803FFE000000001FFF
-003FFE000000001FFF003FFF000000003FFF001FFF000000003FFE001FFF000000003FFE
-000FFF800000007FFC000FFF800000007FFC0007FFC0000000FFF80003FFE0000001FFF0
-0003FFE0000001FFF00001FFF0000003FFE00000FFF8000007FFC000007FFC00000FFF80
-00003FFF00003FFF0000001FFFC000FFFE00000007FFF807FFF800000001FFFFFFFFE000
-000000FFFFFFFFC0000000001FFFFFFE000000000003FFFFF00000000000003FFF000000
-0042407ABE4F>79 D<FFFFFFFFFFF00000FFFFFFFFFFFF0000FFFFFFFFFFFFC000FFFFFF
-FFFFFFF000FFFFFFFFFFFFFC00003FFC0000FFFE00003FFC00001FFF00003FFC00000FFF
-80003FFC000007FFC0003FFC000003FFE0003FFC000003FFE0003FFC000001FFF0003FFC
-000001FFF0003FFC000001FFF0003FFC000001FFF8003FFC000001FFF8003FFC000001FF
-F8003FFC000001FFF8003FFC000001FFF8003FFC000001FFF8003FFC000001FFF8003FFC
-000001FFF8003FFC000001FFF0003FFC000001FFF0003FFC000001FFF0003FFC000003FF
-E0003FFC000003FFC0003FFC000007FFC0003FFC00000FFF80003FFC00003FFF00003FFC
-0000FFFE00003FFFFFFFFFF800003FFFFFFFFFF000003FFFFFFFFF8000003FFFFFFFFC00
-00003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
-0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
-00003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
-0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
-00003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000FFFFFF
-FF80000000FFFFFFFF80000000FFFFFFFF80000000FFFFFFFF80000000FFFFFFFF800000
-003D3E7DBD47>I<FFFFFFFFFF8000000000FFFFFFFFFFFC00000000FFFFFFFFFFFF8000
-0000FFFFFFFFFFFFF0000000FFFFFFFFFFFFF8000000003FFC0001FFFE000000003FFC00
-003FFF000000003FFC00000FFF800000003FFC000007FFC00000003FFC000003FFE00000
-003FFC000003FFE00000003FFC000003FFF00000003FFC000001FFF00000003FFC000001
-FFF80000003FFC000001FFF80000003FFC000001FFF80000003FFC000001FFF80000003F
-FC000001FFF80000003FFC000001FFF80000003FFC000001FFF80000003FFC000001FFF0
-0000003FFC000001FFF00000003FFC000003FFF00000003FFC000003FFE00000003FFC00
-0003FFC00000003FFC000007FF800000003FFC00000FFF000000003FFC00003FFE000000
-003FFC0001FFFC000000003FFFFFFFFFF0000000003FFFFFFFFFC0000000003FFFFFFFFE
-00000000003FFFFFFFFF80000000003FFC000FFFC0000000003FFC0001FFF0000000003F
-FC0000FFF8000000003FFC00007FFC000000003FFC00007FFC000000003FFC00003FFE00
-0000003FFC00003FFE000000003FFC00001FFF000000003FFC00001FFF000000003FFC00
-001FFF000000003FFC00001FFF000000003FFC00001FFF000000003FFC00001FFF000000
-003FFC00001FFF800000003FFC00001FFF800000003FFC00001FFF800000003FFC00001F
-FF800000003FFC00001FFF800000003FFC00001FFF800000003FFC00001FFF8007C0003F
-FC00001FFFC007C0003FFC00001FFFC007C0003FFC00000FFFC00FC0003FFC00000FFFE0
-0F80FFFFFFFF0007FFF01F80FFFFFFFF0003FFFC3F00FFFFFFFF0001FFFFFF00FFFFFFFF
-00007FFFFE00FFFFFFFF00001FFFF80000000000000001FFE0004A3F7DBD4E>82
-D<0003FFC001C0001FFFF803C0007FFFFE07C001FFFFFF8FC003FFFFFFDFC007FF00FFFF
-C00FF8000FFFC01FF00003FFC01FE00001FFC03FC000007FC07FC000007FC07F8000003F
-C07F8000001FC0FF8000001FC0FF8000000FC0FF8000000FC0FFC000000FC0FFC0000007
-C0FFC0000007C0FFE0000007C0FFF0000007C0FFFC00000000FFFF800000007FFFF80000
-007FFFFFC000003FFFFFFC00003FFFFFFF80001FFFFFFFE0001FFFFFFFF8000FFFFFFFFC
-0007FFFFFFFE0003FFFFFFFF0001FFFFFFFF80007FFFFFFFC0003FFFFFFFC00007FFFFFF
-E000007FFFFFE0000007FFFFF00000003FFFF000000003FFF000000000FFF8000000007F
-F8000000003FF8780000003FF8F80000001FF8F80000001FF8F80000000FF8F80000000F
-F8FC0000000FF8FC0000000FF8FC0000000FF0FE0000000FF0FE0000001FF0FF0000001F
-E0FF8000003FE0FFE000003FC0FFF800007F80FFFE0001FF80FFFFE007FF00FEFFFFFFFE
-00FC7FFFFFF800F81FFFFFF000F003FFFFC000E0003FFE00002D407ABE3A>I<3FFFFFFF
-FFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC
-3FFE003FFE003FFC7FF0003FFE000FFE7FC0003FFE0003FE7F80003FFE0001FE7F00003F
-FE0000FE7F00003FFE00007E7E00003FFE00007E7E00003FFE00007E7C00003FFE00003E
-7C00003FFE00003E7C00003FFE00003E7C00003FFE00003EFC00003FFE00003FF800003F
-FE00001FF800003FFE00001FF800003FFE00001FF800003FFE00001FF800003FFE00001F
-0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
-FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
-0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
-FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
-0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
-FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
-0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
-FE0000000000003FFE000000000FFFFFFFFFF800000FFFFFFFFFF800000FFFFFFFFFF800
-000FFFFFFFFFF800000FFFFFFFFFF800403D7CBC49>I<00700000E000F80001F001F800
-03F003F00007E003E00007C007C0000F800F80001F001F00003E001F00003E003E00007C
-003C000078003C000078007C0000F800780000F000780000F000F80001F000F00001E000
-F00001E000F7E001EFC0FFF001FFE0FFF801FFF0FFFC01FFF8FFFE01FFFCFFFE01FFFCFF
-FE01FFFC7FFE00FFFC7FFE00FFFC7FFE00FFFC3FFC007FF81FF8003FF00FF0001FE007E0
-000FC0262073BE37>92 D<0007FFC00000003FFFF8000001FFFFFF000003FFFFFF800007
-FE03FFC0000FF800FFE0000FFC003FF0001FFE003FF8001FFE001FFC001FFE001FFC001F
-FE001FFC001FFE000FFE001FFE000FFE000FFC000FFE0007F8000FFE0001E0000FFE0000
-00000FFE000000003FFE000000FFFFFE00000FFFFFFE00007FFFFFFE0001FFFE0FFE0003
-FFE00FFE000FFF800FFE001FFE000FFE003FFC000FFE003FF8000FFE007FF0000FFE00FF
-F0000FFE00FFE0000FFE00FFE0000FFE00FFE0000FFE00FFE0000FFE00FFE0001FFE00FF
-F0001FFE007FF0003FFE007FF8007BFF803FFC00FBFFFE1FFF07F3FFFE0FFFFFE1FFFE03
-FFFF80FFFE00FFFF003FFE001FF80000002F2B7DA933>97 D<00FF0000000000FFFF0000
-000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF000000000007FF000000
-000003FF000000000003FF000000000003FF000000000003FF000000000003FF00000000
-0003FF000000000003FF000000000003FF000000000003FF000000000003FF0000000000
-03FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003
-FF00FFE0000003FF07FFFC000003FF1FFFFF800003FF7FFFFFC00003FFFF81FFF00003FF
-FC003FF80003FFF0001FFC0003FFE0000FFE0003FFC00007FE0003FF800007FF0003FF80
-0003FF8003FF800003FF8003FF800003FFC003FF800001FFC003FF800001FFC003FF8000
-01FFC003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001
-FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FF
-E003FF800001FFC003FF800001FFC003FF800003FFC003FF800003FF8003FF800003FF80
-03FF800003FF0003FF800007FF0003FFC00007FE0003FFE0000FFC0003FFF0001FF80003
-FFFC007FF00003FCFF01FFE00003F87FFFFFC00003F01FFFFF000003E007FFFC00000000
-01FFC0000033407DBE3A>I<00007FF0000007FFFF00001FFFFFC0007FFFFFE000FFF01F
-F001FF800FF803FF001FF807FE003FFC0FFE003FFC1FFC003FFC1FFC003FFC3FF8003FFC
-3FF8003FFC7FF8001FF87FF0000FF07FF00003C0FFF0000000FFF0000000FFF0000000FF
-F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0
-0000007FF00000007FF80000007FF80000007FF80000003FF800003E3FFC00003E1FFC00
-007E0FFE00007C07FF0000FC07FF8001F803FFC003F000FFF81FE0007FFFFFC0001FFFFF
-800007FFFE0000007FF000272B7DA92E>I<0000000007F80000000007FFF80000000007
-FFF80000000007FFF80000000007FFF80000000007FFF800000000003FF800000000001F
-F800000000001FF800000000001FF800000000001FF800000000001FF800000000001FF8
-00000000001FF800000000001FF800000000001FF800000000001FF800000000001FF800
-000000001FF800000000001FF800000000001FF800000000001FF80000007FF01FF80000
-07FFFE1FF800001FFFFF9FF800007FFFFFDFF80000FFF01FFFF80001FFC003FFF80003FF
-0001FFF80007FE00007FF8000FFC00007FF8001FFC00003FF8001FF800003FF8003FF800
-003FF8003FF800003FF8007FF800003FF8007FF000003FF8007FF000003FF800FFF00000
-3FF800FFF000003FF800FFF000003FF800FFF000003FF800FFF000003FF800FFF000003F
-F800FFF000003FF800FFF000003FF800FFF000003FF800FFF000003FF8007FF000003FF8
-007FF000003FF8007FF000003FF8007FF800003FF8003FF800003FF8003FF800003FF800
-1FFC00007FF8000FFC00007FF8000FFE0000FFF80007FF0003FFFC0003FF8007FFFFE001
-FFF03FFFFFE0007FFFFFBFFFE0003FFFFF3FFFE00007FFFC3FFFE00000FFE03FE0003340
-7DBE3A>I<0000FFF000000007FFFE0000001FFFFF8000007FFFFFC00000FFE07FE00001
-FF801FF00003FF000FF80007FE0007FC000FFC0003FE001FFC0003FE001FF80001FE003F
-F80001FF003FF80001FF007FF00001FF007FF00000FF807FF00000FF80FFF00000FF80FF
-F00000FF80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFF000000000FF
-F000000000FFF000000000FFF000000000FFF0000000007FF0000000007FF0000000007F
-F8000000003FF8000000003FF800000F801FFC00000F801FFC00001F800FFE00001F0007
-FF00003F0003FF80007E0001FFE001FC0000FFF80FF800003FFFFFF000001FFFFFC00000
-03FFFF000000007FF80000292B7DA930>I<000007FE0000007FFF800001FFFFC00007FF
-FFE0000FFE3FF0001FF03FF0003FE07FF8007FC07FF800FFC07FF800FF807FF800FF807F
-F801FF003FF001FF001FE001FF000FC001FF00000001FF00000001FF00000001FF000000
-01FF00000001FF00000001FF00000001FF00000001FF00000001FF000000FFFFFFE000FF
-FFFFE000FFFFFFE000FFFFFFE000FFFFFFE00001FF80000001FF80000001FF80000001FF
-80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF80
-000001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF8000
-0001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF800000
-01FF80000001FF80000001FF80000001FF80000001FF8000007FFFFF80007FFFFF80007F
-FFFF80007FFFFF80007FFFFF800025407DBF20>I<0003FF8007F0003FFFF83FF8007FFF
-FCFFFC01FFFFFFFFFE03FF83FFF9FE07FC007FC3FE0FF8003FE1FE1FF8003FF1FC1FF000
-1FF0F81FF0001FF0003FF0001FF8003FF0001FF8003FF0001FF8003FF0001FF8003FF000
-1FF8003FF0001FF8003FF0001FF8001FF0001FF0001FF0001FF0001FF8003FF0000FF800
-3FE00007FC007FC00003FF83FF800003FFFFFF000007FFFFFC000007BFFFF800000F03FF
-8000000F00000000000F00000000001F80000000001F80000000001FC0000000001FF000
-0000000FFFFFFF00000FFFFFFFF0000FFFFFFFFC0007FFFFFFFF0007FFFFFFFF8003FFFF
-FFFFC001FFFFFFFFE007FFFFFFFFE01FFFFFFFFFF03FE00003FFF07FC000003FF07F8000
-001FF8FF8000000FF8FF00000007F8FF00000007F8FF00000007F8FF00000007F8FF0000
-0007F87F8000000FF07FC000001FF03FC000001FE03FF000007FE01FFC0001FFC007FF80
-0FFF0003FFFFFFFE0000FFFFFFF800003FFFFFE0000001FFFC00002F3D7DA834>I<00FF
-0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF00
-0000000007FF000000000003FF000000000003FF000000000003FF000000000003FF0000
-00000003FF000000000003FF000000000003FF000000000003FF000000000003FF000000
-000003FF000000000003FF000000000003FF000000000003FF000000000003FF00000000
-0003FF000000000003FF001FF8000003FF00FFFE000003FF03FFFF800003FF07FFFFC000
-03FF0FE0FFE00003FF1F007FE00003FF3C007FF00003FF78007FF00003FFF0003FF80003
-FFE0003FF80003FFE0003FF80003FFC0003FF80003FFC0003FF80003FFC0003FF80003FF
-80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80
-003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8000
-3FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003F
-F80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8
-0003FF80003FF800FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0
-FFFFFE0FFFFFE0333F7CBE3A>I<01F80003FC0007FE000FFF001FFF801FFF801FFF801F
-FF801FFF801FFF800FFF0007FE0003FC0001F80000000000000000000000000000000000
-000000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003
-FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003
-FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003
-FF0003FF0003FF0003FF00FFFFF8FFFFF8FFFFF8FFFFF8FFFFF815407CBF1D>I<00FF00
-00000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000
-00000007FF000000000003FF000000000003FF000000000003FF000000000003FF000000
-000003FF000000000003FF000000000003FF000000000003FF000000000003FF00000000
-0003FF000000000003FF000000000003FF000000000003FF000000000003FF0000000000
-03FF000000000003FF000000000003FF000FFFFE0003FF000FFFFE0003FF000FFFFE0003
-FF000FFFFE0003FF000FFFFE0003FF0001FE000003FF0003FC000003FF0007F0000003FF
-001FE0000003FF003FC0000003FF007F80000003FF00FF00000003FF03FC00000003FF07
-F800000003FF0FF000000003FF1FF000000003FF7FF800000003FFFFFC00000003FFFFFC
-00000003FFFFFE00000003FFFFFF00000003FFE7FF80000003FFC3FFC0000003FF81FFC0
-000003FF00FFE0000003FF00FFF0000003FF007FF8000003FF003FFC000003FF001FFC00
-0003FF000FFE000003FF000FFF000003FF0007FF800003FF0003FFC00003FF0001FFC000
-03FF0000FFE000FFFFFC07FFFFC0FFFFFC07FFFFC0FFFFFC07FFFFC0FFFFFC07FFFFC0FF
-FFFC07FFFFC0323F7DBE37>107 D<00FF00FFFF00FFFF00FFFF00FFFF00FFFF0007FF00
-03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
-03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
-03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
-03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
-03FF0003FF0003FF00FFFFFCFFFFFCFFFFFCFFFFFCFFFFFC163F7CBE1D>I<00FF001FF8
-0000FFC00000FFFF00FFFF0007FFF80000FFFF03FFFFC01FFFFE0000FFFF07FFFFE03FFF
-FF0000FFFF0FE0FFF07F07FF8000FFFF1F003FF0F801FF800007FF3E003FF9F001FFC000
-03FF78003FFBC001FFC00003FFF0001FFF8000FFE00003FFF0001FFF8000FFE00003FFE0
-001FFF0000FFE00003FFC0001FFE0000FFE00003FFC0001FFE0000FFE00003FFC0001FFE
-0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FF
-E00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003
-FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF8000
-1FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC00
-00FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE0
-0003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF
-80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE000FFFFFE07FF
-FFF03FFFFF80FFFFFE07FFFFF03FFFFF80FFFFFE07FFFFF03FFFFF80FFFFFE07FFFFF03F
-FFFF80FFFFFE07FFFFF03FFFFF8051297CA858>I<00FF001FF80000FFFF00FFFE0000FF
-FF03FFFF8000FFFF07FFFFC000FFFF0FE0FFE000FFFF1F007FE00007FF3C007FF00003FF
-78007FF00003FFF0003FF80003FFE0003FF80003FFE0003FF80003FFC0003FF80003FFC0
-003FF80003FFC0003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8000
-3FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003F
-F80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8
-0003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF800
-03FF80003FF80003FF80003FF80003FF80003FF800FFFFFE0FFFFFE0FFFFFE0FFFFFE0FF
-FFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE033297CA83A>I<00007FF000000003FF
-FE0000001FFFFFC000007FFFFFF00000FFE03FF80001FF800FFC0003FE0003FE0007FC00
-01FF000FFC0001FF801FF80000FFC01FF80000FFC03FF80000FFE03FF000007FE07FF000
-007FF07FF000007FF07FF000007FF07FF000007FF0FFF000007FF8FFF000007FF8FFF000
-007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000
-007FF8FFF000007FF87FF000007FF07FF000007FF07FF000007FF07FF000007FF03FF800
-00FFE03FF80000FFE01FF80000FFC00FFC0001FF800FFC0001FF8007FE0003FF0003FF80
-0FFE0001FFE03FFC00007FFFFFF000001FFFFFC0000007FFFF000000007FF000002D2B7D
-A934>I<00FF00FFE00000FFFF07FFFC0000FFFF1FFFFF8000FFFF7FFFFFC000FFFFFF81
-FFF000FFFFFC007FF80003FFF0003FFC0003FFE0001FFE0003FFC0000FFE0003FF800007
-FF0003FF800007FF8003FF800007FF8003FF800003FFC003FF800003FFC003FF800003FF
-C003FF800001FFC003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE0
-03FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003
-FF800001FFE003FF800003FFC003FF800003FFC003FF800003FFC003FF800003FF8003FF
-800007FF8003FF800007FF0003FF80000FFF0003FFC0000FFE0003FFE0001FFC0003FFF0
-003FF80003FFFC00FFF00003FFFF03FFE00003FFFFFFFFC00003FF9FFFFF000003FF87FF
-FC000003FF81FFC0000003FF800000000003FF800000000003FF800000000003FF800000
-000003FF800000000003FF800000000003FF800000000003FF800000000003FF80000000
-0003FF800000000003FF800000000003FF8000000000FFFFFE00000000FFFFFE00000000
-FFFFFE00000000FFFFFE00000000FFFFFE00000000333B7DA83A>I<01FE01FE00FFFE07
-FF80FFFE0FFFE0FFFE1FFFF0FFFE3F1FF0FFFE7C3FF807FEF83FF803FEF03FF803FFE03F
-F803FFE03FF803FFC01FF003FFC00FE003FF8007C003FF80000003FF80000003FF800000
-03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003
-FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
-00000003FF00000003FF00000003FF00000003FF00000003FF000000FFFFFF0000FFFFFF
-0000FFFFFF0000FFFFFF0000FFFFFF000025297DA82B>114 D<003FFC1E0001FFFFBE00
-07FFFFFE000FFFFFFE001FF00FFE003F8001FE007F0000FE007E00007E007E00007E00FE
-00003E00FE00003E00FF00003E00FF80003E00FFC0000000FFF8000000FFFFE000007FFF
-FF00007FFFFFC0003FFFFFF0001FFFFFF8000FFFFFFC0007FFFFFE0003FFFFFF0000FFFF
-FF80001FFFFF800000FFFF80000007FFC0000000FFC07800007FC0F800003FC0F800001F
-C0FC00001FC0FC00001FC0FE00001FC0FE00001F80FF00003F80FF80003F00FFE000FF00
-FFF803FE00FFFFFFFC00FFFFFFF000F87FFFC000E00FFE0000222B7DA929>I<0007C000
-0007C0000007C0000007C0000007C000000FC000000FC000000FC000000FC000001FC000
-001FC000001FC000003FC000007FC000007FC00000FFC00001FFC00007FFC0001FFFFFFE
-FFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE01FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
-01FFC00001FFC00001FFC00001FFC00001FFC00001FFC01F01FFC01F01FFC01F01FFC01F
-01FFC01F01FFC01F01FFC01F01FFC01F01FFC01F00FFE03E00FFE03E007FE07E007FF8FC
-003FFFF8001FFFF00007FFE00000FF80203B7EB929>I<00FF80000FF800FFFF800FFFF8
-00FFFF800FFFF800FFFF800FFFF800FFFF800FFFF800FFFF800FFFF80007FF80007FF800
-03FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003
-FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF
-80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80
-003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8000
-3FF80003FF80003FF80003FF80003FF80003FF80007FF80003FF80007FF80003FF80007F
-F80003FF8000FFF80001FF8001FFF80001FF8003FFFC0000FFC007DFFFE000FFF01F9FFF
-E0007FFFFF1FFFE0003FFFFE1FFFE0000FFFF81FFFE00001FFE01FE000332A7CA83A>I<
-FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC001
-FFC00003E00001FFE00007E00001FFE00007E00000FFE00007C00000FFF0000FC000007F
-F0000F8000007FF8001F8000003FF8001F0000003FFC003F0000001FFC003E0000001FFE
-007E0000000FFE007C0000000FFF00FC0000000FFF00FC00000007FF00F800000007FF81
-F800000003FF81F000000003FFC3F000000001FFC3E000000001FFE7E000000000FFE7C0
-00000000FFFFC0000000007FFF80000000007FFF80000000007FFF80000000003FFF0000
-0000003FFF00000000001FFE00000000001FFE00000000000FFC00000000000FFC000000
-000007F8000000000007F8000000000003F0000000000003F000000032287EA737>I<FF
-FFFC3FFFFC03FFFEFFFFFC3FFFFC03FFFEFFFFFC3FFFFC03FFFEFFFFFC3FFFFC03FFFEFF
-FFFC3FFFFC03FFFE03FF8000FFC0000F8003FFC000FFC0001F8001FFC0007FC0001F0001
-FFE000FFE0003F0000FFE000FFE0003E0000FFE000FFF0003E0000FFF001FFF0007E0000
-7FF001FFF0007C00007FF803FFF800FC00003FF803EFF800F800003FF803EFFC00F80000
-3FFC07EFFC01F800001FFC07C7FC01F000001FFE0FC7FE03F000000FFE0F83FE03E00000
-0FFE0F83FF03E000000FFF1F83FF07E0000007FF1F01FF07C0000007FFBF01FF8FC00000
-03FFBE00FF8F80000003FFBE00FFCF80000003FFFE00FFDF80000001FFFC007FDF000000
-01FFFC007FFF00000000FFF8003FFE00000000FFF8003FFE00000000FFF8003FFE000000
-007FF0001FFC000000007FF0001FFC000000003FE0000FF8000000003FE0000FF8000000
-003FE0000FF8000000001FC00007F0000000001FC00007F0000000000F800003E0000047
-287EA74C>I<FFFFFC03FFFF80FFFFFC03FFFF80FFFFFC03FFFF80FFFFFC03FFFF80FFFF
-FC03FFFF8000FFE0007F000000FFF000FE0000007FF800FC0000003FFC01F80000001FFE
-03F00000000FFE07F000000007FF0FE000000007FF9FC000000003FFFF8000000001FFFF
-0000000000FFFE00000000007FFC00000000007FFC00000000003FFC00000000001FFE00
-000000000FFE00000000000FFF00000000001FFF80000000003FFFC0000000007FFFE000
-000000FEFFF000000001FC7FF000000003F83FF800000003F03FFC00000007E01FFE0000
-000FC00FFF0000001FC007FF0000003F8003FF8000007F0003FFC00000FE0001FFE000FF
-FFC007FFFFC0FFFFC007FFFFC0FFFFC007FFFFC0FFFFC007FFFFC0FFFFC007FFFFC03228
-7EA737>I<FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC
-003FFFC001FFC00003E00001FFE00007E00001FFE00007E00000FFE00007C00000FFF000
-0FC000007FF0000F8000007FF8001F8000003FF8001F0000003FFC003F0000001FFC003E
-0000001FFE007E0000000FFE007C0000000FFF00FC0000000FFF00FC00000007FF00F800
-000007FF81F800000003FF81F000000003FFC3F000000001FFC3E000000001FFE7E00000
-0000FFE7C000000000FFFFC0000000007FFF80000000007FFF80000000007FFF80000000
-003FFF00000000003FFF00000000001FFE00000000001FFE00000000000FFC0000000000
-0FFC000000000007F8000000000007F8000000000003F0000000000003F0000000000003
-F0000000000003E0000000000007E0000000000007C00000000E000FC00000003F800F80
-0000007FC01F80000000FFE01F00000000FFE03F00000000FFE03E00000000FFE07E0000
-0000FFE0FC00000000FFC1F8000000007FC3F0000000007E0FE0000000003FFFC0000000
-001FFF80000000000FFE000000000003F80000000000323B7EA737>I
-E /Fn 88 127 df<1C007F00FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80
-FF80FF80FF80FF80FF80FF80FF807F007F007F007F007F007F007F007F007F007F007F00
-7F007F007F007F007F007F007F003E00000000000000000000000000000000001C007F00
-7F00FF80FF80FF807F007F001C0009396DB830>33 D<100004007C001F00FE003F80FE00
-3F80FF007F80FF007F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE00
-3F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE00
-3F80FE003F80FE003F807E003F007C001F003C001E0010000400191C75B830>I<0007C0
-07C0000007C007C000000FE00FE000000FE00FE000000FE00FE000000FE00FE000000FE0
-0FE000000FE00FE000000FE00FE000000FE00FE000001FE01FE000001FE01FE000001FC0
-1FC000001FC01FC000001FC01FC0007FFFFFFFFF007FFFFFFFFF00FFFFFFFFFF80FFFFFF
-FFFF80FFFFFFFFFF807FFFFFFFFF003FFFFFFFFE00007F807F8000007F807F8000007F00
-7F0000007F007F0000007F007F0000007F007F0000007F007F0000007F007F0000007F00
-7F0000007F007F0000007F007F000000FF00FF000000FF00FF00003FFFFFFFFE007FFFFF
-FFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF007FFFFFFFFF0001FC01
-FC000001FC01FC000001FC01FC000003FC03FC000003FC03FC000003F803F8000003F803
-F8000003F803F8000003F803F8000003F803F8000003F803F8000003F803F8000001F001
-F0000001F001F0000029387DB730>I<000038000000007C00000000FC00000000FC0000
-0000FC00000000FC00000003FF0000001FFFE00000FFFFFC0001FFFFFE0007FFFFFF000F
-FFFFFF801FFEFDFFC01FF0FC3FE03FC0FC1FE07F80FC0FF07F00FC07F07E00FC07F8FE00
-FC03F8FC00FC03F8FC00FC07F8FC00FC07F8FC00FC07F8FE00FC03F0FE00FC03F07F00FC
-00007F80FC00007FC0FC00003FF0FC00001FFEFC00001FFFFC00000FFFFF000007FFFFE0
-0001FFFFF800007FFFFC00001FFFFE000003FFFF000000FFFF800000FDFFC00000FC7FE0
-0000FC1FE00000FC0FF00000FC07F01800FC03F87E00FC03F87E00FC01F8FF00FC01F8FF
-00FC01F8FF00FC01F8FE00FC01F8FE00FC01F8FF00FC03F07F00FC03F07F80FC07F07F80
-FC0FE03FC0FC1FE03FF0FC7FC01FFEFFFF800FFFFFFF0007FFFFFE0003FFFFFC0000FFFF
-F000003FFFC0000007FE00000000FC00000000FC00000000FC00000000FC00000000FC00
-0000007C0000000038000025477BBE30>I<03C00001E0000FF00003E0001FF80007F000
-3FFC0007F0003FFC000FF0007FFE000FF0007E7E001FE000FE7F001FE000FE7F001FC000
-FC3F003FC000FC3F003FC000FC3F003F8000FC3F007F8000FC3F007F8000FC3F00FF0000
-FE7F00FF0000FE7F00FE00007E7E01FE00007FFE01FE00003FFC01FC00003FFC03FC0000
-1FF803FC00000FF007F8000003C007F80000000007F0000000000FF0000000000FF00000
-00000FE0000000001FE0000000001FE0000000003FC0000000003FC0000000003F800000
-00007F80000000007F80000000007F0000000000FF0000000000FF0000000001FE000000
-0001FE0000000001FC0000000003FC0000000003FC0000000003F80000000007F8000000
-0007F8000000000FF001E000000FF007F800000FE00FFC00001FE01FFE00001FE01FFE00
-001FC03FFF00003FC03FFF00003FC03F3F00007F807F3F80007F807E1F80007F007E1F80
-00FF007E1F8000FF007E1F8000FE007E1F8001FE007E1F8001FE007E1F8003FC007F3F80
-03FC003F3F0003F8003FFF0007F8003FFF0007F8001FFE0007F0001FFE0007F0000FFC00
-03E00007F80001E00001E00029477DBE30>I<0007E0000000001FF8000000003FFC0000
-00007FFC00000000FFFE00000000FFFF00000001FC7F00000001F83F00000001F83F8000
-0003F81F80000003F01F80000003F01F80000003F01F80000003F01F80000003F01F8000
-0003F01F80000003F03F80000003F03F00000003F07F0FFF0003F87E1FFF8001F8FE1FFF
-8001F9FC1FFF8001FBFC1FFF8001FBF80FFF0001FFF00FC00000FFE00FC00000FFE01FC0
-0000FFC01F8000007F801F800000FF003F800001FF003F000003FF007F000007FF807E00
-000FFF807E00000FFF80FE00001FDFC0FC00003F8FE0FC00003F8FE1FC00007F07F1F800
-007F03F3F80000FE03FBF00000FE01FFF00000FE01FFE00000FE00FFE00000FE00FFC006
-00FE007FC00F00FE003F801F80FE003FC01F80FF007FC01F807F00FFE01F807F01FFF83F
-807F87FFFC3F003FFFFBFFFF001FFFF1FFFE001FFFE0FFFE000FFFC03FFC0003FF001FF8
-0001FC0007E000293A7DB830>I<07C00FF01FF81FF81FFC1FFC1FFE0FFE07FE007E007E
-007E007E007E00FE00FC00FC01FC01F803F807F00FF01FE07FE0FFC0FF80FF007C003800
-0F1D70B730>I<00001E00007F0000FF0001FF0003FE0007FC000FF0001FE0003FC0007F
-8000FF0001FE0001FC0003FC0003F80007F0000FF0000FE0000FE0001FC0001FC0003FC0
-003F80003F80007F80007F00007F00007F00007F0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00007F00007F00007F00007F00
-007F80003F80003F80003FC0001FC0001FC0000FE0000FE0000FF00007F00003F80003FC
-0001FC0001FE0000FF00007F80003FC0001FE0000FF00007FC0003FE0001FF0000FF0000
-7F00001E184771BE30>I<780000FE0000FF0000FF80007FC0003FE0000FF00007F80003
-FC0001FE0000FF00007F80003F80003FC0001FC0000FE0000FF00007F00007F00003F800
-03F80003FC0001FC0001FC0001FE0000FE0000FE0000FE0000FE00007F00007F00007F00
-007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000FE0000FE00
-00FE0000FE0001FE0001FC0001FC0003FC0003F80003F80007F00007F0000FF0000FE000
-1FC0003FC0003F80007F8000FF0001FE0003FC0007F8000FF0003FE0007FC000FF8000FF
-0000FE0000780000184778BE30>I<0000E000000001F000000003F800000003F8000000
-03F800000003F800000003F800000003F800003803F803807E03F80FC0FF83F83FE0FFC3
-F87FE0FFF3F9FFE07FFBFBFFC03FFFFFFF800FFFFFFE0003FFFFF80001FFFFF000007FFF
-C000001FFF0000007FFFC00001FFFFF00003FFFFF8000FFFFFFE003FFFFFFF807FFBFBFF
-C0FFF3F9FFE0FFC3F87FE0FF83F83FE07E03F80FC03803F803800003F800000003F80000
-0003F800000003F800000003F800000003F800000001F000000000E0000023277AAE30>
-I<00003E00000000003E00000000007F00000000007F00000000007F00000000007F0000
-0000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
-0000007F00000000007F00000000007F00000000007F00000000007F0000007FFFFFFFFF
-007FFFFFFFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF007FFFFFFFFF
-0000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
-0000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
-0000007F00000000007F00000000007F00000000003E00000000003E00000029297DAF30
->I<03E00FF01FF81FFC3FFE3FFE3FFF3FFF1FFF1FFF0FFF03FF007F007F007E00FE01FC
-03FC07F83FF07FF0FFE07F807F003C001019708B30>I<7FFFFFFFF07FFFFFFFF0FFFFFF
-FFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF07FFFFFFFF025077B9E30>I<0F003FC07FE07F
-E0FFF0FFF0FFF0FFF07FE07FE03FC00F000C0C6E8B30>I<00000000F000000001F00000
-0003F800000003F800000007F800000007F80000000FF00000000FF00000001FE0000000
-1FE00000003FC00000003FC00000007F800000007F80000000FF00000000FF00000001FE
-00000001FE00000001FC00000003FC00000003FC00000007F800000007F80000000FF000
-00000FF00000001FE00000001FE00000003FC00000003FC00000007F800000007F800000
-00FF00000000FF00000001FE00000001FE00000001FC00000003FC00000003FC00000007
-F800000007F80000000FF00000000FF00000001FE00000001FE00000003FC00000003FC0
-0000007F800000007F80000000FF00000000FF00000001FE00000001FE00000001FC0000
-0003FC00000003FC00000007F800000007F80000000FF00000000FF00000001FE0000000
-1FE00000003FC00000003FC00000007F800000007F80000000FF00000000FF00000000FE
-00000000FE000000007C000000007C0000000025477BBE30>I<0000FE00000007FFC000
-000FFFE000003FFFF800007FFFFC0000FFFFFE0001FF83FF0003FE00FF8003FC007F8007
-F8003FC00FF0001FE00FE0000FE01FE0000FF01FC00007F01FC00007F03F800003F83F80
-0003F83F000001F87F000001FC7F000001FC7F000001FC7F000001FCFE000000FEFE0000
-00FEFE000000FEFE000000FEFE000000FEFE000000FEFE000000FEFE000000FEFE000000
-FEFE000000FEFE000000FEFE000000FEFE000000FEFF000001FE7F000001FC7F000001FC
-7F000001FC7F800003FC3F800003F83F800003F83FC00007F81FC00007F01FC00007F01F
-E0000FF00FF0001FE00FF0001FE007F8003FC003FC007F8003FE00FF8001FF83FF0000FF
-FFFE00007FFFFC00003FFFF800000FFFE0000007FFC0000000FE0000273A7CB830>I<00
-03C0000007E0000007E000000FE000000FE000001FE000001FE000003FE000007FE00000
-FFE00003FFE0003FFFE000FFFFE000FFFFE000FFEFE000FF8FE0007E0FE000000FE00000
-0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000
-0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000
-0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000
-0FE000000FE000000FE000000FE000000FE000000FE0003FFFFFF87FFFFFFCFFFFFFFEFF
-FFFFFE7FFFFFFC3FFFFFF81F3977B830>I<0007FC0000003FFFC00000FFFFF00003FFFF
-F80007FFFFFE000FFFFFFF001FF80FFF803FE001FFC03FC0007FC07F80003FE07F00001F
-E07F00000FF0FF000007F0FE000007F0FF000007F8FF000003F8FF000003F8FF000003F8
-7E000003F818000003F800000003F800000003F800000007F800000007F00000000FF000
-00000FE00000001FE00000001FC00000003FC00000007F80000000FF80000001FF000000
-01FE00000007FC0000000FF80000001FF00000003FE00000007FC0000000FF80000001FF
-00000003FE00000007FC0000000FF00000003FE00000007FC0000000FF80000001FF0000
-0003FE0001F007FC0003F80FF80003F81FE00003F83FFFFFFFF8FFFFFFFFF8FFFFFFFFF8
-FFFFFFFFF87FFFFFFFF83FFFFFFFF025397BB830>I<0003FF0000003FFFE00000FFFFF8
-0001FFFFFE0003FFFFFF0007FFFFFF800FFE01FFC00FF0007FC01FE0001FE01FE0000FE0
-1FE0000FF01FE00007F01FE00007F00FC00007F007800007F000000007F00000000FF000
-00000FE00000000FE00000001FE00000003FC00000007FC0000000FF80000007FF000007
-FFFE00000FFFFC00000FFFF800000FFFFC00000FFFFF000007FFFF80000001FFC0000000
-3FE00000001FF000000007F800000003F800000003FC00000001FC00000001FE00000000
-FE00000000FE18000000FE7E000000FEFF000000FEFF000000FEFF000001FEFF000001FC
-FE000003FCFF000003F87F800007F87FC0001FF03FF0003FF01FFE01FFE00FFFFFFFC007
-FFFFFF8003FFFFFE0000FFFFFC00003FFFF0000003FF8000273A7CB830>I<000003FC00
-00000007FE000000000FFE000000001FFE000000001FFE000000003FFE000000007FFE00
-0000007F7E00000000FE7E00000000FE7E00000001FC7E00000003F87E00000003F87E00
-000007F07E00000007F07E0000000FE07E0000001FC07E0000001FC07E0000003F807E00
-00003F807E0000007F007E000000FE007E000000FE007E000001FC007E000003F8007E00
-0003F8007E000007F0007E000007F0007E00000FE0007E00001FC0007E00001FC0007E00
-003F80007E00003F80007E00007F00007E0000FE00007E0000FFFFFFFFFF00FFFFFFFFFF
-80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF000000007E00000000007E00
-000000007E00000000007E00000000007E00000000007E00000000007E00000000007E00
-000000007E00000000007E000000007FFFFE000000FFFFFF000000FFFFFF000000FFFFFF
-000000FFFFFF0000007FFFFE0029397DB830>I<0FFFFFFF801FFFFFFFC03FFFFFFFC03F
-FFFFFFC03FFFFFFFC03FFFFFFF803F800000003F800000003F800000003F800000003F80
-0000003F800000003F800000003F800000003F800000003F800000003F800000003F8000
-00003F800000003F800000003F83FF00003F9FFFC0003FFFFFF0003FFFFFFC003FFFFFFE
-003FFFFFFF003FFE03FF803FF0007FC03FE0003FC03F80001FE01F00000FE00E00000FF0
-00000007F000000007F000000007F800000003F800000003F800000003F818000003F87E
-000003F87E000003F8FF000003F8FF000007F8FF000007F0FE00000FF0FF00000FE07F00
-001FE07F80003FC07FC0007FC03FE001FF801FFC0FFF000FFFFFFE0007FFFFFC0003FFFF
-F80001FFFFE000007FFF8000000FFC000025397BB730>I<7C00000000FFFFFFFFFCFFFF
-FFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFCFE00000FF8FE00000FF0FE0000
-1FE07C00003FC00000007F80000000FF00000000FF00000001FE00000003FC00000003F8
-00000007F800000007F00000000FF00000000FE00000001FC00000001FC00000003F8000
-00003F800000007F000000007F00000000FF00000000FE00000001FE00000001FC000000
-01FC00000003FC00000003F800000003F800000007F800000007F000000007F000000007
-F000000007F00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
-0000001FE00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000
-00001FC00000001FC00000001FC00000000F8000000007000000273A7CB830>55
-D<0F003FC07FE07FE0FFF0FFF0FFF0FFF07FE07FE03FC00F000000000000000000000000
-000000000000000000000000000000000000000F003FC07FE07FE0FFF0FFF0FFF0FFF07F
-E07FE03FC00F000C276EA630>58 D<03C00FF01FF81FF83FFC3FFC3FFC3FFC1FF81FF80F
-F003C000000000000000000000000000000000000000000000000000000000000003C00F
-F01FF01FF83FF83FFC3FFC3FFC1FFC1FFC0FFC03FC00FC01FC01F803F803F007F01FE03F
-E07FC0FF807F007E0038000E3470A630>I<00000000F000000003F000000007F8000000
-1FF80000007FF8000000FFF0000003FFF0000007FFC000001FFF8000003FFE000000FFF8
-000001FFF0000007FFC000000FFF8000003FFE0000007FFC000001FFF0000003FFE00000
-0FFF8000001FFF0000007FFC0000007FF8000000FFE0000000FFC0000000FFE00000007F
-F80000007FFC0000001FFF0000000FFF80000003FFE0000001FFF00000007FFC0000003F
-FE0000000FFF80000007FFC0000001FFF0000000FFF80000003FFE0000001FFF80000007
-FFC0000003FFF0000000FFF00000007FF80000001FF800000007F800000003F000000000
-F0252F7BB230>I<7FFFFFFFFF007FFFFFFFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFF
-FF807FFFFFFFFF003FFFFFFFFE0000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000003FFFFFFFFE007FFFFFFFFF00FFFFFFFF
-FF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF007FFFFFFFFF0029157DA530>I<780000
-00007E00000000FF00000000FFC0000000FFE00000007FF80000007FFE0000001FFF0000
-000FFFC0000003FFE0000001FFF80000007FFC0000001FFF0000000FFF80000003FFE000
-0001FFF00000007FFC0000003FFE0000000FFF80000007FFC0000001FFF0000000FFF000
-00003FF80000001FF80000003FF8000000FFF0000001FFF0000007FFC000000FFF800000
-3FFE0000007FFC000001FFF0000003FFE000000FFF8000001FFF0000007FFC000001FFF8
-000003FFE000000FFFC000001FFF0000007FFE0000007FF8000000FFE0000000FFC00000
-00FF000000007E000000007800000000252F7BB230>I<001FFE000000FFFFE00003FFFF
-F8000FFFFFFE001FFFFFFF003FFFFFFF807FF803FFC07FC0007FC0FF00001FC0FF00001F
-E0FF00000FE0FF00000FE0FF00000FE07E00000FE07E00001FE01800007FC0000000FFC0
-000003FF80000007FF0000000FFE0000001FF80000003FF00000007FC0000000FF800000
-00FF00000001FE00000001FE00000003FC00000003F800000003F800000007F800000007
-F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
-00000003E000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000001C000000007F000000007F00000000FF80000000FF80000
-000FF800000007F000000007F000000001C0000023397AB830>I<00001FE0000000FFF8
-000003FFFE00000FFFFF00001FFFFF80003FFFFFC0007FF03FE000FF800FE001FF0007F0
-03FC0003F007F801FBF807F007FFF80FE01FFFF80FE03FFFFC1FC03FFFFC1F807FFFFC3F
-80FF0FFC3F00FE07FC3F01FC03FE7F01F801FE7E03F801FE7E03F000FE7E03F000FEFE07
-F000FEFC07E0007EFC07E0007EFC07E0007EFC07E0007EFC07E0007EFC07E0007EFC07E0
-007EFC07E0007EFC07E0007EFC07E0007EFE07F000FE7E03F000FC7E03F000FC7E03F801
-FC7F01F801F83F01FC03F83F00FE07F03F80FF0FF01F807FFFE01FC03FFFC00FE03FFFC0
-0FE01FFF8007F007FE0007F801F80003FC00007C01FF0000FE00FF8003FE007FF01FFE00
-3FFFFFFC001FFFFFF8000FFFFFE00003FFFFC00000FFFE0000001FF000273A7CB830>I<
-00007F0000000000FF8000000000FF8000000001FFC000000001FFC000000001FFC00000
-0001FFC000000003FFE000000003F7E000000003F7E000000003F7E000000003F7E00000
-0007F7F000000007E3F000000007E3F000000007E3F00000000FE3F80000000FE3F80000
-000FE3F80000000FC1F80000000FC1F80000001FC1FC0000001FC1FC0000001FC1FC0000
-001FC1FC0000003F80FE0000003F80FE0000003F80FE0000003F80FE0000003F80FE0000
-007F007F0000007F007F0000007F007F0000007F007F000000FF007F800000FE003F8000
-00FFFFFF800000FFFFFF800000FFFFFF800001FFFFFFC00001FFFFFFC00001FFFFFFC000
-01FC001FC00003FC001FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE000
-07F8000FF00007F00007F00007F00007F0007FFF007FFF00FFFF80FFFF80FFFF80FFFF80
-FFFF80FFFF80FFFF80FFFF807FFF007FFF0029397DB830>I<7FFFFFF00000FFFFFFFE00
-00FFFFFFFF8000FFFFFFFFC000FFFFFFFFE0007FFFFFFFF00003F8001FF80003F80007F8
-0003F80003FC0003F80001FC0003F80001FC0003F80000FE0003F80000FE0003F80000FE
-0003F80000FE0003F80000FE0003F80000FE0003F80001FE0003F80001FC0003F80001FC
-0003F80003F80003F80007F80003F8001FF00003F8007FE00003FFFFFFC00003FFFFFF80
-0003FFFFFE000003FFFFFF800003FFFFFFE00003FFFFFFF00003F8000FF80003F80003FC
-0003F80001FE0003F80000FE0003F800007F0003F800007F0003F800007F0003F800003F
-8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800007F
-8003F800007F0003F800007F0003F80000FF0003F80001FE0003F80003FE0003F8001FFC
-007FFFFFFFFC00FFFFFFFFF800FFFFFFFFF000FFFFFFFFC000FFFFFFFF80007FFFFFFC00
-0029387EB730>I<00007F803C0003FFF03E0007FFFC7E001FFFFE7E003FFFFFFE007FFF
-FFFE00FFE07FFE01FF801FFE03FE000FFE07FC0007FE07F80007FE0FF00003FE0FF00003
-FE1FE00001FE1FC00001FE3FC00001FE3F800000FE3F800000FE7F800000FE7F000000FE
-7F0000007C7F00000000FF00000000FE00000000FE00000000FE00000000FE00000000FE
-00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
-000000FF000000007F000000007F000000007F0000007C7F800000FE3F800000FE3F8000
-00FE3FC00000FE1FC00000FE1FE00001FE0FF00001FC0FF00001FC07F80003F807FC0007
-F803FE000FF001FF801FF000FFE07FE0007FFFFFC0003FFFFF80001FFFFF000007FFFC00
-0003FFF00000007FC000273A7CB830>I<3FFFFFE000007FFFFFFC0000FFFFFFFE0000FF
-FFFFFF80007FFFFFFFC0003FFFFFFFE00003F8007FF00003F8001FF80003F8000FF80003
-F80007FC0003F80003FE0003F80001FE0003F80000FF0003F80000FF0003F800007F8003
-F800007F8003F800003F8003F800003FC003F800001FC003F800001FC003F800001FC003
-F800001FC003F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003
-F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003
-F800000FE003F800001FE003F800001FC003F800001FC003F800001FC003F800003FC003
-F800003F8003F800003F8003F800007F8003F800007F0003F80000FF0003F80001FE0003
-F80003FE0003F80007FC0003F8000FFC0003F8001FF80003F8007FF0003FFFFFFFE0007F
-FFFFFFC000FFFFFFFF8000FFFFFFFF00007FFFFFFC00003FFFFFE000002B387FB730>I<
-7FFFFFFFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF80
-03F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F80
-03F800003F8003F800003F8003F800001F0003F80000000003F80000000003F800000000
-03F80000000003F8007C000003F800FE000003F800FE000003F800FE000003F800FE0000
-03FFFFFE000003FFFFFE000003FFFFFE000003FFFFFE000003FFFFFE000003FFFFFE0000
-03F800FE000003F800FE000003F800FE000003F800FE000003F8007C000003F800000000
-03F80000000003F80000000003F80000000003F80000000003F8000007C003F800000FE0
-03F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003F800000FE0
-03F800000FE003F800000FE07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0
-FFFFFFFFFFE07FFFFFFFFFC02B387EB730>I<3FFFFFFFFF807FFFFFFFFFC0FFFFFFFFFF
-C0FFFFFFFFFFC07FFFFFFFFFC03FFFFFFFFFC001FC00001FC001FC00001FC001FC00001F
-C001FC00001FC001FC00001FC001FC00001FC001FC00001FC001FC00001FC001FC00000F
-8001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC003E00
-0001FC007F000001FC007F000001FC007F000001FC007F000001FFFFFF000001FFFFFF00
-0001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FC007F000001FC007F00
-0001FC007F000001FC007F000001FC003E000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC000000003FFFF80000
-007FFFFC000000FFFFFC000000FFFFFC0000007FFFFC0000003FFFF80000002A387EB730
->I<0000FF00F0000003FFC0F800000FFFF1F800003FFFFDF800007FFFFFF80000FFFFFF
-F80001FFC1FFF80001FF007FF80003FE003FF80007FC001FF80007F8000FF8000FF0000F
-F8000FE00007F8001FE00007F8001FC00007F8003FC00007F8003F800003F8003F800003
-F8007F800003F8007F000003F8007F000001F0007F0000000000FF0000000000FE000000
-0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000
-0000FE0000000000FE0000FFFF00FE0001FFFF80FE0003FFFF80FE0003FFFF80FF0001FF
-FF807F0000FFFF007F000003F8007F000003F8007F800003F8003F800007F8003F800007
-F8003FC00007F8001FC00007F8001FE0000FF8000FE0000FF8000FF0000FF80007F8001F
-F80007F8001FF80003FE003FF80001FF007FF80001FFC1FFF80000FFFFFFF800007FFFFF
-F800003FFFFBF800000FFFF3F8000003FFC1F0000000FF000000293A7DB830>I<3FFF80
-0FFFE07FFFC01FFFF0FFFFE03FFFF8FFFFE03FFFF87FFFC01FFFF03FFF800FFFE003F800
-00FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
-00FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
-00FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003FFFF
-FFFE0003FFFFFFFE0003FFFFFFFE0003FFFFFFFE0003FFFFFFFE0003FFFFFFFE0003F800
-00FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
-00FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
-00FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
-00FE0003F80000FE003FFF800FFFE07FFFC01FFFF0FFFFE03FFFF8FFFFE03FFFF87FFFC0
-1FFFF03FFF800FFFE02D387FB730>I<7FFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFFFF80
-FFFFFFFF807FFFFFFF000007F000000007F000000007F000000007F000000007F0000000
-07F000000007F000000007F000000007F000000007F000000007F000000007F000000007
-F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
-00000007F000000007F000000007F000000007F000000007F000000007F000000007F000
-000007F000000007F000000007F000000007F000000007F000000007F000000007F00000
-0007F000000007F000000007F000000007F000000007F000000007F000000007F0000000
-07F000000007F000000007F000007FFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFF
-FFFF807FFFFFFF00213879B730>I<0001FFFFF00003FFFFF80007FFFFF80007FFFFF800
-03FFFFF80001FFFFF0000000FE00000000FE00000000FE00000000FE00000000FE000000
-00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
-FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
-00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
-000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
-0000FE00000000FE00000000FE003C0000FE007E0000FE00FF0000FE00FF0000FE00FF00
-01FC00FF0003FC00FF8007FC007FF01FF8003FFFFFF0003FFFFFE0001FFFFFC00007FFFF
-800001FFFE0000003FF0000025397AB730>I<3FFFF80000007FFFFC000000FFFFFE0000
-00FFFFFE0000007FFFFC0000003FFFF800000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC00000F8001FC00001FC001FC00001FC001FC00001FC001FC00001F
-C001FC00001FC001FC00001FC001FC00001FC001FC00001FC001FC00001FC03FFFFFFFFF
-C07FFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC07FFFFFFFFFC03FFFFFFFFF802A387EB730
->76 D<3FF80000FFE07FFC0001FFF0FFFE0003FFF8FFFE0003FFF87FFE0003FFF03FFF00
-07FFE007FF0007FF0007EF0007BF0007EF800FBF0007EF800FBF0007EF800FBF0007E7C0
-1F3F0007E7C01F3F0007E7C01F3F0007E7C01F3F0007E7E03F3F0007E3E03E3F0007E3E0
-3E3F0007E3F07E3F0007E3F07E3F0007E1F07C3F0007E1F07C3F0007E1F8FC3F0007E1F8
-FC3F0007E0F8F83F0007E0F8F83F0007E0FDF83F0007E07DF03F0007E07DF03F0007E07D
-F03F0007E07FF03F0007E03FE03F0007E03FE03F0007E03FE03F0007E01FC03F0007E01F
-C03F0007E007003F0007E000003F0007E000003F0007E000003F0007E000003F0007E000
-003F0007E000003F0007E000003F0007E000003F0007E000003F0007E000003F0007E000
-003F0007E000003F0007E000003F003FFC0001FFE07FFE0003FFF0FFFF0007FFF8FFFF00
-07FFF87FFE0003FFF03FFC0001FFE02D387FB730>I<3FFC001FFF807FFE003FFFC0FFFF
-007FFFE0FFFF007FFFE07FFF803FFFC03FFF801FFF8003FF8001F80003F7C001F80003F7
-C001F80003F7C001F80003F3E001F80003F3E001F80003F3E001F80003F3F001F80003F1
-F001F80003F1F001F80003F1F801F80003F1F801F80003F0F801F80003F0FC01F80003F0
-FC01F80003F07C01F80003F07E01F80003F07E01F80003F03E01F80003F03F01F80003F0
-3F01F80003F01F01F80003F01F01F80003F01F81F80003F01F81F80003F00F81F80003F0
-0FC1F80003F00FC1F80003F007C1F80003F007E1F80003F007E1F80003F003E1F80003F0
-03F1F80003F003F1F80003F001F1F80003F001F1F80003F001F9F80003F000F9F80003F0
-00F9F80003F000F9F80003F0007DF80003F0007DF80003F0007DF80003F0003FF8003FFF
-003FF8007FFF803FF800FFFFC01FF800FFFFC01FF8007FFF800FF8003FFF0007F0002B38
-7EB730>I<003FFFE00001FFFFFC0007FFFFFF000FFFFFFF801FFFFFFFC03FFFFFFFE03F
-F800FFE03FE0003FE07F80000FF07F80000FF07F000007F07F000007F07F000007F07F00
-0007F0FF000007F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE0000
-03F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003
-F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8
-FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FF
-000007F8FF000007F87F000007F07F000007F07F000007F07F80000FF07F80000FF07FC0
-001FF03FE0003FE03FF800FFE03FFFFFFFE01FFFFFFFC00FFFFFFF8007FFFFFF0001FFFF
-FC00003FFFE000253A7BB830>I<7FFFFFF00000FFFFFFFE0000FFFFFFFF8000FFFFFFFF
-E000FFFFFFFFF0007FFFFFFFF80003F8003FF80003F8000FFC0003F80003FE0003F80001
-FE0003F80000FF0003F80000FF0003F800007F0003F800007F8003F800003F8003F80000
-3F8003F800003F8003F800003F8003F800003F8003F800003F8003F800007F8003F80000
-7F0003F80000FF0003F80000FF0003F80001FE0003F80003FE0003F8000FFC0003F8003F
-F80003FFFFFFF80003FFFFFFF00003FFFFFFE00003FFFFFF800003FFFFFE000003FFFFF0
-000003F80000000003F80000000003F80000000003F80000000003F80000000003F80000
-000003F80000000003F80000000003F80000000003F80000000003F80000000003F80000
-000003F80000000003F80000000003F80000000003F8000000007FFFC0000000FFFFE000
-0000FFFFE0000000FFFFE0000000FFFFE00000007FFFC000000029387EB730>I<3FFFFF
-8000007FFFFFF00000FFFFFFFC0000FFFFFFFF00007FFFFFFF80003FFFFFFFC00003F801
-FFE00003F8003FF00003F8001FF00003F8000FF80003F80007F80003F80003F80003F800
-03FC0003F80001FC0003F80001FC0003F80001FC0003F80001FC0003F80001FC0003F800
-03FC0003F80003F80003F80007F80003F8000FF80003F8001FF00003F8003FF00003F801
-FFE00003FFFFFFC00003FFFFFF800003FFFFFF000003FFFFFE000003FFFFFF000003FFFF
-FF800003F800FFC00003F8003FE00003F8001FE00003F8000FE00003F8000FF00003F800
-07F00003F80007F00003F80007F00003F80007F00003F80007F00003F80007F00003F800
-07F00003F80007F00003F80007F0F803F80007F1FC03F80007F1FC03F80007F1FC03F800
-07F1FC03F80007F1FC3FFF8003FBFC7FFFC003FFF8FFFFE001FFF8FFFFE001FFF07FFFC0
-00FFE03FFF80007FC0000000001F002E397FB730>82 D<000FF803C0007FFF03E001FFFF
-C7E003FFFFF7E007FFFFFFE00FFFFFFFE01FF80FFFE03FE001FFE03FC000FFE07F80007F
-E07F00003FE0FF00003FE0FE00001FE0FE00001FE0FE00000FE0FE00000FE0FE00000FE0
-FF00000FE0FF000007C07F000000007F800000007FC00000003FF00000001FFE0000001F
-FFF000000FFFFF000007FFFFE00001FFFFF80000FFFFFC00001FFFFF000003FFFF800000
-3FFFC0000001FFC00000007FE00000001FE00000000FF00000000FF000000007F8000000
-07F87C000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FF000007
-F8FF000007F0FF800007F0FFC0000FE0FFE0001FE0FFF8003FC0FFFF00FFC0FFFFFFFF80
-FFFFFFFF00FDFFFFFE00FC7FFFF800F81FFFF0007801FF8000253A7BB830>I<3FFFFFFF
-FFC07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FE003F80
-0FE0FE003F800FE0FE003F800FE0FE003F800FE0FE003F800FE0FE003F800FE0FE003F80
-0FE0FE003F800FE07C003F8007C000003F80000000003F80000000003F80000000003F80
-000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
-000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
-000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
-000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
-000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
-000000003F800000001FFFFF0000003FFFFF8000003FFFFF8000003FFFFF8000003FFFFF
-8000001FFFFF00002B387EB730>I<7FFFC007FFFCFFFFE00FFFFEFFFFE00FFFFEFFFFE0
-0FFFFEFFFFE00FFFFE7FFFC007FFFC03F800003F8003F800003F8003F800003F8003F800
-003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
-003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
-003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
-003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
-003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
-003F8003F800003F8003FC00007F8001FC00007F0001FC00007F0001FC00007F0000FE00
-00FE0000FF0001FE00007F0001FC00007F8003FC00003FE00FF800001FF83FF000000FFF
-FFE0000007FFFFC0000003FFFF80000001FFFF000000007FFC000000001FF000002F3980
-B730>I<7FFE000FFFC0FFFF001FFFE0FFFF803FFFE0FFFF803FFFE0FFFF001FFFE07FFE
-000FFFC007F00001FC0007F00001FC0007F80003FC0003F80003F80003F80003F80003F8
-0003F80003F80003F80001FC0007F00001FC0007F00001FC0007F00001FC0007F00000FE
-000FE00000FE000FE00000FE000FE00000FE000FE00000FF001FE000007F001FC000007F
-001FC000007F001FC000007F803FC000003F803F8000003F803F8000003F803F8000003F
-803F8000001FC07F0000001FC07F0000001FC07F0000001FC07F0000000FE0FE0000000F
-E0FE0000000FE0FE0000000FE0FE00000007E0FC00000007F1FC00000007F1FC00000007
-F1FC00000003F1F800000003F1F800000003F1F800000003FBF800000001FBF000000001
-FBF000000001FBF000000001FFF000000001FFF000000000FFE000000000FFE000000000
-FFE000000000FFE0000000007FC0000000003F8000002B397EB730>I<3FFC0001FFE07F
-FE0003FFF0FFFE0003FFF8FFFE0003FFF87FFE0003FFF03FFC0001FFE01FC000001FC00F
-C000001F800FC000001F800FC000001F800FC000001F800FC000001F800FC000001F800F
-C000001F800FE000003F8007E000003F0007E000003F0007E000003F0007E000003F0007
-E000003F0007E000003F0007E000003F0003E00F803E0003F01FC07E0003F03FE07E0003
-F03FE07E0003F03FE07E0003F07FF07E0003F07FF07E0003F07DF07E0001F07DF07C0001
-F07DF07C0001F8FDF8FC0001F8FDF8FC0001F8FDF8FC0001F8F8F8FC0001F8F8F8FC0001
-F8F8F8FC0000F8F8F8F80000F9F8FCF80000F9F8FCF80000F9F07CF80000F9F07CF80000
-FDF07DF80000FDF07DF800007DF07DF000007DE03DF000007DE03DF000007DE03DF00000
-7FE03FF000007FE03FF000007FC01FF000007FC01FF000003FC01FE000003FC01FE00000
-3F800FE000001F0007C0002D397FB730>I<3FFF01FFF8007FFF83FFFC007FFFC7FFFE00
-7FFFC7FFFE007FFF83FFFC003FFF01FFF80001FC007F800001FE007F000000FE00FF0000
-00FF00FE0000007F01FE0000007F81FC0000003F83FC0000003FC3FC0000001FC3F80000
-001FE7F80000000FE7F00000000FFFF000000007FFE000000007FFE000000003FFC00000
-0003FFC000000001FF8000000001FF8000000000FF0000000000FF0000000000FF000000
-0000FF0000000001FF8000000001FF8000000003FFC000000003FFC000000003FFE00000
-0007FFE000000007FFF00000000FE7F00000000FE7F80000001FC3F80000001FC3FC0000
-003F81FC0000003F81FE0000007F00FE0000007F00FF000000FF007F000000FE007F8000
-01FE003F800001FC003FC00003FC001FC00003F8001FE00007F8000FE0007FFE007FFF00
-FFFF00FFFF80FFFF80FFFF80FFFF80FFFF80FFFF00FFFF807FFE007FFF0029387DB730>
-I<1FFFFFFFFC3FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7F000003FC
-7F000007F87F000007F07F00000FF07F00001FE07F00001FC07F00003FC07F00007F803E
-00007F00000000FF00000001FE00000001FC00000003FC00000007F800000007F0000000
-0FF00000001FE00000001FC00000003FC00000007F800000007F00000000FF00000001FE
-00000001FC00000003FC00000007F800000007F00000000FF00000001FE00000001FC000
-00003FC00000007F800000007F00000000FF00000001FE00007C01FC0000FE03FC0000FE
-07F80000FE07F00000FE0FF00000FE1FE00000FE1FC00000FE3FC00000FE7F800000FE7F
-FFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC27387CB730>90
-D<7FFFFF00FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF00FE000000FE000000FE0000
-00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
-00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
-00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
-00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
-00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
-00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
-00FE000000FE000000FFFFFF00FFFFFF80FFFFFF80FFFFFF80FFFFFF807FFFFF0019476D
-BE30>I<7C000000007C00000000FE00000000FE00000000FF00000000FF000000007F80
-0000007F800000003FC00000003FC00000001FE00000001FE00000000FF00000000FF000
-000007F800000007F800000003FC00000003FC00000001FC00000001FE00000001FE0000
-0000FF00000000FF000000007F800000007F800000003FC00000003FC00000001FE00000
-001FE00000000FF00000000FF000000007F800000007F800000003FC00000003FC000000
-01FC00000001FE00000001FE00000000FF00000000FF000000007F800000007F80000000
-3FC00000003FC00000001FE00000001FE00000000FF00000000FF000000007F800000007
-F800000003FC00000003FC00000001FC00000001FE00000001FE00000000FF00000000FF
-000000007F800000007F800000003FC00000003FC00000001FE00000001FE00000000FF0
-0000000FF000000007F800000007F800000003F800000003F800000001F000000000F025
-477BBE30>I<7FFFFF00FFFFFF80FFFFFF80FFFFFF80FFFFFF807FFFFF8000003F800000
-3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
-3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
-3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
-3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
-3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
-3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
-3F8000003F8000003F8000003F807FFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF807FFF
-FF0019477DBE30>I<00070000001FC000007FF00000FFF80003FFFE000FFFFF803FFFFF
-E07FFDFFF0FFF07FF8FFC01FF8FF800FF8FE0003F87C0001F0100000401D0E77B730>I<
-7FFFFFFFF07FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF07FFFFFFFF025
-077B7D30>I<0038007C01FE03FE07FE0FFC0FF01FE01FC03F803F007F007E007E00FE00
-FC00FC00FC00FC00FC00FFC0FFE0FFF07FF07FF03FF03FF01FE007C00F1D70BE30>I<00
-3FFC00000001FFFF80000003FFFFE0000007FFFFF000000FFFFFF800001FFFFFFC00001F
-F00FFE00001FE001FF00001FE000FF00001FE0007F80000FC0003F80000780003FC00000
-00001FC0000000001FC0000000001FC0000000001FC0000000FFFFC000000FFFFFC00000
-7FFFFFC00001FFFFFFC00007FFFFFFC0000FFFFFFFC0001FFFC01FC0003FFC001FC0007F
-E0001FC0007F80001FC000FF00001FC000FE00001FC000FE00001FC000FE00001FC000FE
-00001FC000FF00003FC000FF00003FC0007F80007FC0007FC001FFC0003FF80FFFFFC01F
-FFFFFFFFE01FFFFFFFFFE007FFFFF7FFE003FFFFC3FFE000FFFF00FFC0003FF00000002B
-2A7CA830>I<3FFC000000007FFE00000000FFFE00000000FFFE000000007FFE00000000
-3FFE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000000
-00FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE03FE0000
-00FE1FFF800000FE7FFFE00000FEFFFFF00000FFFFFFFC0000FFFFFFFE0000FFFE07FE00
-00FFF001FF0000FFE000FF8000FFC0007F8000FF80003FC000FF00001FC000FE00001FE0
-00FE00000FE000FE00000FE000FE00000FF000FE000007F000FE000007F000FE000007F0
-00FE000007F000FE000007F000FE000007F000FE000007F000FE000007F000FE00000FF0
-00FE00000FF000FE00000FE000FF00000FE000FF00001FE000FF80003FC000FF80003FC0
-00FFC0007F8000FFE000FF8000FFF003FF0000FFFC0FFE0000FFFFFFFC0000FFFFFFF800
-00FEFFFFF000007E7FFFC000003C1FFF0000000003FC00002C3980B730>I<0000FFE000
-0007FFFC00001FFFFE00007FFFFF0000FFFFFF8001FFFFFFC003FF807FC007FC003FC00F
-F8003FC01FF0003FC01FE0001F803FC0000F003F800000007F800000007F000000007F00
-000000FF00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
-0000FE00000000FE00000000FF000000007F000000007F000000007F800000003F800007
-C03FC0000FE01FE0000FE01FF0001FE00FF8001FC007FE003FC007FFC0FF8003FFFFFF80
-00FFFFFF00007FFFFE00001FFFF8000007FFF0000001FF8000232A7AA830>I<000001FF
-E000000003FFF000000007FFF000000007FFF000000003FFF000000001FFF00000000007
-F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007
-F00000000007F00000000007F00000000007F0000003FE07F000001FFF87F000003FFFE7
-F00000FFFFFFF00001FFFFFFF00003FFFFFFF00007FF03FFF0000FFC00FFF0001FF0003F
-F0001FE0001FF0003FC0001FF0003FC0000FF0007F800007F0007F000007F0007F000007
-F000FF000007F000FF000007F000FE000007F000FE000007F000FE000007F000FE000007
-F000FE000007F000FE000007F000FE000007F000FE000007F000FF000007F0007F00000F
-F0007F00000FF0007F80000FF0003F80001FF0003FC0003FF0001FE0003FF0001FF0007F
-F0000FF801FFF00007FE07FFFFC003FFFFFFFFE001FFFFFFFFF000FFFFF7FFF0007FFFC7
-FFE0001FFF03FFC00007FC0000002C397DB730>I<0001FF00000007FFE000001FFFF800
-007FFFFC0000FFFFFE0001FFFFFF0003FF81FF8007FC007FC00FF8003FC01FE0001FE01F
-E0000FE03FC0000FF03F800007F07F800007F07F000007F07F000003F8FF000003F8FE00
-0003F8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF0FE0000
-0000FF000000007F000000007F000000007F800000003F800001F03FC00003F81FE00003
-F80FF00003F80FF80007F807FE001FF003FFC07FE001FFFFFFE000FFFFFFC0003FFFFF80
-001FFFFE000007FFF8000000FFC000252A7CA830>I<000000FF80000007FFE000001FFF
-F000003FFFF000007FFFF80000FFFFF80001FF87F80003FE07F80003FC03F00007F800C0
-0007F000000007F000000007F000000007F000000007F000000007F000000007F0000000
-07F000003FFFFFFFC07FFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFC00007
-F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
-00000007F000000007F000000007F000000007F000000007F000000007F000000007F000
-000007F000000007F000000007F000000007F000000007F000000007F000000007F00000
-0007F000000007F000000007F000000007F000000007F000003FFFFFFE007FFFFFFF00FF
-FFFFFF80FFFFFFFF807FFFFFFF003FFFFFFE0025397DB830>I<0003FC00FF00001FFF87
-FFC0003FFFDFFFC000FFFFFFFFE001FFFFFFFFE003FFFFFFFFE007FE07FF8FE007F801FE
-07C00FF000FF00000FF000FF00000FE0007F00001FE0007F80001FC0003F80001FC0003F
-80001FC0003F80001FC0003F80001FC0003F80001FE0007F80000FE0007F00000FF000FF
-00000FF000FF000007F801FE000007FE07FE000007FFFFFC000007FFFFF800000FFFFFF0
-00000FFFFFC000000FDFFF8000000FC3FC0000000FC0000000000FC0000000000FC00000
-00000FE0000000000FF00000000007FFFFF0000007FFFFFF000003FFFFFFC00007FFFFFF
-F0000FFFFFFFF8001FFFFFFFFC003FE0001FFE003F800001FE007F0000007F007E000000
-3F00FE0000003F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC000000
-1F80FE0000003F807F0000007F007F800000FF003FC00001FE003FF00007FE001FFF007F
-FC000FFFFFFFF80007FFFFFFF00001FFFFFFC000007FFFFF0000001FFFFC00000001FFC0
-00002B3E7DA730>I<3FFC000000007FFE00000000FFFE00000000FFFE000000007FFE00
-0000003FFE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00
-00000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE01
-FE000000FE0FFF800000FE3FFFE00000FEFFFFF00000FFFFFFF80000FFFFFFF80000FFFE
-07FC0000FFF803FC0000FFE001FE0000FFC001FE0000FF8000FE0000FF8000FE0000FF00
-00FE0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE003FFFF81FFFF87FFFFC3FFFFCFFFFFE
-3FFFFEFFFFFE3FFFFE7FFFFC3FFFFC3FFFF81FFFF82F3880B730>I<0000E000000003F8
-00000003F800000007FC00000007FC00000007FC00000003F800000003F800000000E000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000001FFFF800003FFFFC00007FFFFC00007FFFFC00003FFFFC00001F
-FFFC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
-FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
-00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
-000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00003FFFFFFFC0
-7FFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFE03FFFFFFFC023397AB830>I<000001C0
-000007F0000007F000000FF800000FF800000FF8000007F0000007F0000001C000000000
-000000000000000000000000000000000000000000000000000000000000000000FFFFF0
-01FFFFF801FFFFF801FFFFF801FFFFF800FFFFF8000003F8000003F8000003F8000003F8
-000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
-000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
-000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
-000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
-000003F8000007F0000007F03C0007F07E000FE0FF001FE0FF003FC0FF007FC0FFFFFF80
-7FFFFF007FFFFE003FFFFC000FFFF00003FFC0001D4E7CB830>I<7FF800000000FFFC00
-000000FFFC00000000FFFC00000000FFFC000000007FFC0000000000FC0000000000FC00
-00000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC00
-00000000FC0000000000FC0000000000FC0000000000FC03FFFF8000FC07FFFFC000FC07
-FFFFE000FC07FFFFE000FC07FFFFC000FC03FFFF8000FC001FE00000FC003FC00000FC00
-7F800000FC00FF000000FC01FE000000FC03FC000000FC0FF8000000FC1FF0000000FC3F
-E0000000FC7FC0000000FCFF80000000FDFFC0000000FFFFE0000000FFFFF0000000FFF7
-F0000000FFE3F8000000FFC1FC000000FF81FE000000FF00FF000000FE007F000000FC00
-3F800000FC001FC00000FC001FE00000FC000FF00000FC0007F00000FC0003F80000FC00
-01FC007FFFF81FFFE0FFFFFC3FFFF0FFFFFC3FFFF8FFFFFC3FFFF8FFFFFC3FFFF07FFFF8
-1FFFE02D387FB730>I<7FFFF80000FFFFFC0000FFFFFC0000FFFFFC0000FFFFFC00007F
-FFFC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
-FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
-00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
-000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000
-0001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000000
-01FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
-FC00000001FC00007FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFF
-FFF025387BB730>I<0000FC007E00007FC3FF01FF8000FFEFFF87FFC000FFFFFFCFFFE0
-00FFFFFFDFFFE000FFFFFFFFFFF0007FFF0FFF87F00007FE07FF03F80007FC07FE03F800
-07F803FC01F80007F803FC01F80007F003F801F80007F003F801F80007F003F801F80007
-E003F001F80007E003F001F80007E003F001F80007E003F001F80007E003F001F80007E0
-03F001F80007E003F001F80007E003F001F80007E003F001F80007E003F001F80007E003
-F001F80007E003F001F80007E003F001F80007E003F001F80007E003F001F80007E003F0
-01F80007E003F001F80007E003F001F80007E003F001F80007E003F001F8007FFE0FFF07
-FF80FFFF1FFF8FFFC0FFFF1FFF8FFFC0FFFF1FFF8FFFC0FFFF1FFF8FFFC07FFE0FFF07FF
-80322881A730>I<000001FE00003FFC0FFF80007FFE3FFFE000FFFEFFFFF000FFFFFFFF
-F8007FFFFFFFF8003FFFFE07FC0000FFF803FC0000FFE001FE0000FFC001FE0000FF8000
-FE0000FF8000FE0000FF0000FE0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000
-FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000
-FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000
-FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE003FFFF81F
-FFF87FFFFC3FFFFCFFFFFE3FFFFEFFFFFE3FFFFE7FFFFC3FFFFC3FFFF81FFFF82F2880A7
-30>I<0001FF0000000FFFE000003FFFF800007FFFFC0000FFFFFE0003FFFFFF8003FF01
-FF8007FC007FC00FF8003FE01FE0000FF01FE0000FF03FC00007F83F800003F87F800003
-FC7F000001FC7F000001FC7F000001FCFE000000FEFE000000FEFE000000FEFE000000FE
-FE000000FEFE000000FEFE000000FEFE000000FEFF000001FE7F000001FC7F000001FC7F
-800003FC3F800003F83FC00007F83FE0000FF81FF0001FF00FF8003FE00FFC007FE007FF
-01FFC003FFFFFF8001FFFFFF00007FFFFC00003FFFF800000FFFE0000001FF0000272A7C
-A830>I<000003FE00003FFC1FFF80007FFE7FFFE000FFFEFFFFF000FFFFFFFFFC007FFF
-FFFFFE003FFFFE07FE0000FFF001FF0000FFE000FF8000FFC0007F8000FF80003FC000FF
-00001FC000FE00001FE000FE00000FE000FE00000FE000FE00000FF000FE000007F000FE
-000007F000FE000007F000FE000007F000FE000007F000FE000007F000FE000007F000FE
-000007F000FE00000FF000FE00000FF000FE00000FE000FF00000FE000FF00001FE000FF
-80003FC000FF80003FC000FFC0007F8000FFE000FF8000FFF003FF0000FFFC0FFE0000FF
-FFFFFC0000FFFFFFF80000FEFFFFF00000FE7FFFC00000FE1FFF000000FE03FC000000FE
-0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE
-0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE
-000000003FFFF80000007FFFFC000000FFFFFE000000FFFFFE0000007FFFFC0000003FFF
-F80000002C3C80A730>I<0001FF00F800000FFFC1FC00003FFFF1FC00007FFFFDFC0001
-FFFFFFFC0003FFFFFFFC0007FF81FFFC000FFC007FFC000FF8001FFC001FF0000FFC001F
-E00007FC003FC00007FC003F800003FC007F800003FC007F000003FC007F000001FC00FF
-000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE
-000001FC00FE000001FC00FF000001FC007F000001FC007F000003FC007F800003FC007F
-800003FC003FC00007FC003FC0000FFC001FE0001FFC000FF0003FFC000FFC007FFC0007
-FF01FFFC0003FFFFFFFC0001FFFFFDFC0000FFFFF9FC00003FFFF1FC00000FFFC1FC0000
-03FE01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000
-000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000
-000001FC0000000001FC00000000FFFFF8000001FFFFFC000001FFFFFC000001FFFFFC00
-0001FFFFFC000000FFFFF82E3C7DA730>I<00000007F8003FFF803FFF007FFFC0FFFF80
-FFFFC3FFFF80FFFFCFFFFFC07FFFDFFFFFC03FFFFFFC3FC0001FFFE03FC0001FFF801F80
-001FFF000F00001FFE000000001FFC000000001FF8000000001FF0000000001FF0000000
-001FE0000000001FE0000000001FE0000000001FE0000000001FC0000000001FC0000000
-001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000
-001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000
-001FC00000003FFFFFFC00007FFFFFFE0000FFFFFFFF0000FFFFFFFF00007FFFFFFE0000
-3FFFFFFC00002A287EA730>I<001FFC1E0001FFFF9F0007FFFFFF000FFFFFFF001FFFFF
-FF003FFFFFFF007FF007FF007F8001FF00FE0000FF00FC00007F00FC00007F00FC00007F
-00FC00007F00FE00003E007F000000007FE00000003FFF0000001FFFFC00000FFFFF8000
-07FFFFE00001FFFFF800007FFFFC000003FFFE0000000FFF00000000FF807C00007F80FE
-00001FC0FE00001FC0FE00000FC0FF00000FC0FF00000FC0FF80000FC0FF80001FC0FFC0
-003F80FFE0007F80FFFC03FF00FFFFFFFF00FFFFFFFE00FFFFFFFC00FCFFFFF000F83FFF
-C000780FFE0000222A79A830>I<0007800000000FC00000001FC00000001FC00000001F
-C00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000003FFFFF
-FFE07FFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF07FFFFFFFE0001FC00000001FC000
-00001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000
-001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000000
-1FC00000001FC00000001FC000F8001FC001FC001FC001FC001FC001FC001FC001FC001F
-C001FC001FE003FC000FE007F8000FF007F8000FFC1FF00007FFFFE00003FFFFC00003FF
-FF800001FFFF0000007FFC0000001FF00026337EB130>I<3FFC003FFC007FFE007FFE00
-FFFE00FFFE00FFFE00FFFE007FFE007FFE003FFE003FFE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
-00FE0000FE0000FE0000FE0000FE0001FE0000FE0001FE0000FE0003FE0000FE0007FE00
-00FF000FFE00007FC07FFFF8007FFFFFFFFC003FFFFFFFFE001FFFFFFFFE000FFFFEFFFC
-0007FFF87FF80000FFC000002F2880A630>I<3FFFC07FFF807FFFE0FFFFC0FFFFE0FFFF
-E0FFFFE0FFFFE07FFFE0FFFFC03FFFC07FFF8001F80003F00001F80003F00001FC0007F0
-0000FC0007E00000FC0007E00000FE000FE000007E000FC000007E000FC000007F001FC0
-00003F001F8000003F001F8000003F803F8000001F803F0000001F803F0000001FC07F00
-00000FC07E0000000FC07E0000000FE0FE00000007E0FC00000007E0FC00000007F1FC00
-000003F1F800000003F1F800000003F1F800000001FBF000000001FBF000000001FBF000
-000001FFF000000000FFE000000000FFE000000000FFE0000000007FC0000000003F8000
-002B277EA630>I<3FFFC01FFFE07FFFE03FFFF0FFFFE03FFFF8FFFFE03FFFF87FFFE03F
-FFF03FFFC01FFFE007E000003F0007E000003F0007F000007F0003F000007E0003F00000
-7E0003F000007E0003F000007E0003F000007E0003F80000FE0001F80000FC0001F80F80
-FC0001F81FC0FC0001F83FE0FC0001F83FE0FC0001F83FE0FC0000FC7FF1F80000FC7FF1
-F80000FC7DF1F80000FC7DF1F80000FCFDF9F800007CFDF9F000007CF8F9F000007CF8F9
-F000007CF8F9F000007EF8FBF000007EF8FBF000003FF07FE000003FF07FE000003FF07F
-E000003FE03FE000003FE03FE000001FE03FC000000F800F80002D277FA630>I<3FFF81
-FFFC007FFFC3FFFE00FFFFC3FFFF00FFFFC3FFFF007FFFC3FFFE003FFF81FFFC0000FE00
-7F0000007F007F0000007F80FE0000003F81FC0000001FC3F80000000FE3F80000000FE7
-F000000007FFE000000003FFC000000001FFC000000000FF8000000000FF00000000007E
-00000000007F0000000000FF0000000001FF8000000001FFC000000003F7E000000007E7
-E00000000FE3F00000000FC1F80000001F81FC0000003F80FE0000007F007E0000007E00
-7F000000FE003F800001FC001FC0007FFF80FFFF00FFFFC1FFFF80FFFFE3FFFF80FFFFE3
-FFFF80FFFFC1FFFF807FFF80FFFF0029277DA630>I<3FFFC07FFF807FFFE0FFFFC0FFFF
-E0FFFFE0FFFFE0FFFFE07FFFE0FFFFC03FFFC07FFF8001FC0003F00001FC0003F00000FC
-0007F00000FE0007E000007E0007E000007E000FE000007F000FC000003F000FC000003F
-001FC000001F801F8000001F801F8000001FC01F8000000FC03F0000000FC03F0000000F
-E03F00000007E07E00000007E07E00000003F07E00000003F07C00000003F0FC00000001
-F8FC00000001F8F800000001F8F800000000F9F800000000FDF0000000007DF000000000
-7FF0000000007FF0000000003FE0000000003FE0000000003FE0000000001FC000000000
-1FC0000000001FC0000000001F80000000001F80000000003F80000000003F0000000000
-3F00000000007F00000000007E00000000007E0000000F00FE0000001F80FC0000003FC1
-FC0000003FC3F80000003F87F80000003F8FF00000003FFFE00000001FFFC00000001FFF
-800000000FFF0000000007FE0000000001F0000000002B3C7EA630>I<1FFFFFFFFC3FFF
-FFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFC7F00000FF87F00001FF07F0000
-3FE07F00007FC07F0000FF803E0001FF00000003FE00000007FC0000000FF80000001FF0
-0000003FE00000007FC0000000FF80000001FF00000003FE00000007FC0000000FF80000
-001FF00000003FE00000007FC0000000FF80003E01FF00007F03FE00007F07FC00007F0F
-F800007F1FF000007F3FE000007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-FFFFFF7FFFFFFFFE28277DA630>I<0000003FF0000003FFF800000FFFF800001FFFF800
-007FFFF800007FFFF00000FFF0000000FF00000001FE00000001FC00000001FC00000001
-FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
-00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
-000001FC00000001FC00000001FC00000003FC00000007F80000003FF800003FFFF00000
-FFFFE00000FFFFC00000FFFF000000FFFFC00000FFFFE000003FFFF00000003FF8000000
-07F800000003FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
-FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
-00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
-000001FE00000000FF00000000FFF00000007FFFF000007FFFF800001FFFF800000FFFF8
-000003FFF80000003FF025477BBE30>I<7C7CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
-FEFEFEFEFEFEFEFEFEFEFEFEFEFE7C7C07476CBE30>I<7FE0000000FFFE000000FFFF80
-0000FFFFC00000FFFFF000007FFFF00000007FF800000007F800000003FC00000001FC00
-000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000
-0001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000000
-01FC00000001FC00000001FC00000001FC00000001FC00000001FE00000000FF00000000
-FFE00000007FFFE000003FFFF800001FFFF8000007FFF800001FFFF800003FFFF800007F
-FFE00000FFE0000000FF00000001FE00000001FC00000001FC00000001FC00000001FC00
-000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000
-0001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000000
-01FC00000001FC00000003FC00000007F80000007FF800007FFFF00000FFFFF00000FFFF
-C00000FFFF800000FFFE0000007FE000000025477BBE30>I<007C003801FF007C03FF80
-FE07FFC1FE0FFFC3FE1FFFEFFC7FEFFFF0FF87FFE0FF07FFC0FE03FF807C01FF0038007C
-001F0C78B730>I E /Fo 39 122 df<0000000007FF80000000003FFFE000000000FE00
-F800000001F0003E00000007E0000E0000000FC0001F0000000F80007F0000001F8000FF
-0000003F0000FF0000003F0000FF0000003F0000FE0000007E0000FE0000007E00007800
-00007E000000000000FE000000000000FC000000000000FC000000000000FC0000000000
-01FC000000000001FC000000000001F8000000000001F8000000000001F8000000000001
-F8000000000003F80000000003FFFFFFFFF00003FFFFFFFFF00003FFFFFFFFE0000003F0
-0007E0000007F0000FE0000007E0000FC0000007E0000FC0000007E0000FC0000007E000
-1FC000000FE0001F8000000FC0001F8000000FC0001F8000000FC0003F8000000FC0003F
-0000001FC0003F0000001F80003F0000001F80007F0000001F80007E0000001F80007E00
-00003F80007E0000003F0000FE0000003F0000FC0000003F0000FC0000003F0000FC0000
-007F0001FC0000007E0001F81C00007E0001F81C00007E0001F81C00007E0003F81C0000
-FE0003F03C0000FC0003F0380000FC0003F0380000FC0003F0780000FC0003F0700001FC
-0003F0700001F80001F0F00001F80001F0E00001F80000F1C00001F800007F800003F000
-001F000003F0000000000003F0000000000003F0000000000003E0000000000007E00000
-00000007E0000000001E07C0000000007F07C0000000007F0FC000000000FF0F80000000
-00FF0F8000000000FF1F0000000000FE1F0000000000F81E0000000000703C0000000000
-787800000000001FF0000000000007C00000000000385383BF33>12
-D<0000000007FC00007FF800000000003FFF8003FFFF0000000000FC03C00FE007C00000
-0003F001E03F0001F000000007E001F07C0000700000000FC007F0F80000F80000000F80
-0FF1F80003F80000001F800FF3F00007F80000001F800FF3F00007F80000003F000FF7E0
-0007F80000003F000FE7E00007F00000003F00038FC00007F00000007E00000FC00003C0
-0000007E00000FC00000000000007E00000FC00000000000007E00001FC0000000000000
-FE00001F80000000000000FC00001F80000000000000FC00001F80000000000000FC0000
-3F80000000000000FC00003F80000000000001FC00003F00000000000001F800003F0000
-0000000001F800003F00000000000001F800003F000000000001FFFFFFFFFFFFFFFF8000
-03FFFFFFFFFFFFFFFF800003FFFFFFFFFFFFFFFF00000003F000007E00003F00000003F0
-00007E00007F00000003F00000FE00007E00000007F00000FC00007E00000007E00000FC
-00007E00000007E00000FC0000FE00000007E00000FC0000FC00000007E00001FC0000FC
-0000000FE00001F80000FC0000000FC00001F80001FC0000000FC00001F80001F8000000
-0FC00001F80001F80000000FC00003F80001F80000001FC00003F00003F80000001F8000
-03F00003F00000001F800003F00003F00000001F800003F00003F00000001F800007F000
-07F00000003F800007E00007E00000003F800007E00007E00000003F000007E00007E000
-00003F000007E0000FE00000003F00000FE0000FC0E000003F00000FC0000FC0E000007F
-00000FC0000FC0E000007E00000FC0001FC0E000007E00000FC0001F81E000007E00000F
-C0001F81C000007E00001FC0001F81C00000FE00001F80001F83C00000FC00001F80001F
-83800000FC00001F80001F83800000FC00003F80000F87800000FC00003F00000F870000
-01F800003F0000078E000001F800003F000003FC000001F800003F000000F8000001F800
-007E00000000000003F000007E00000000000003F000007E00000000000003F000007C00
-000000000003F00000FC00000000000003E00000FC00000000001E07E07800F800000000
-007F07E1FC01F800000000007F07C1FC01F80000000000FF0FC3FC01F00000000000FF0F
-83FC03E00000000000FF0F83FC07E00000000000FE1F03F807C00000000000F81E03E00F
-800000000000703C01C01E000000000000787800F07C0000000000001FF0007FF0000000
-00000007C0001FC0000000000000555383BF50>14 D<00003C0000FE0001FF0003FF0003
-FF0003FF0003FF0003FE0007FE0007FE0007FC0007FC0007FC0007F8000FF8000FF8000F
-F0000FF0000FF0000FE0001FE0001FE0001FC0001FC0001FC0001F80003F80003F80003F
-00003F00003F00003E00007E00007E00007C00007C00007C0000780000F80000F80000F0
-0000F00000F00000E00001E00001E00000C0000000000000000000000000000000000000
-000000000000000F00003FC0007FC0007FC000FFC000FFC000FFC000FF80007F00003C00
-00184177C01C>33 D<01E000F007F803FC0FF807FC0FFC07FE1FFC0FFE1FFC0FFE1FFC0F
-FE1FFC0FFE0FFC07FE03D801EC0018000C0018000C0038001C0030001800700038006000
-3000E0007000C0006001C000E0038001C003000180070003800E0007001C000E0038001C
-0070003800E0007000C00060001F1C70BE2F>I<0F003FC07FC07FC0FFC0FFC0FFC0FF80
-7F003C000A0A77891C>46 D<00000003000000070000000F0000001F0000001E0000003E
-0000007E000001FE000003FC000007FC00001FFC0001FFFC000FFBF8001FC3F8000E07F8
-000007F8000007F0000007F000000FF000000FF000000FE000000FE000001FE000001FE0
-00001FC000001FC000003FC000003FC000003F8000003F8000007F8000007F8000007F00
-00007F000000FF000000FF000000FE000000FE000001FE000001FE000001FC000001FC00
-0003FC000003FC000003F8000003F8000007F8000007F8000007F0000007F000000FF000
-000FF000000FE000000FE000001FE000001FE000001FC000007FE000FFFFFFF0FFFFFFF0
-FFFFFFE0203D77BC2E>49 D<0000000FE00000007FF8000001F01C000007C00E00001F80
-0F00003E000700007C001F0000F8007F0001F000FF0003F000FF0007E000FF000FC000FE
-001FC000FE003F800078003F000000007F00000000FE00000000FE00000001FC00000001
-FC00000003FC00000003F800000007F81FC00007F87FF0000FF1E07C000FF3803E000FF7
-003E001FFE001F001FFC001F801FF8001F801FF0000FC03FF0000FC03FE0000FC03FE000
-1FC03FC0001FE07FC0001FE07FC0001FE07F80001FE07F80003FC07F80003FC0FF00003F
-C0FF00003FC0FF00007FC0FF00007F80FE00007F80FE00007F80FE0000FF80FE0000FF00
-FE0000FF00FE0001FE00FE0001FE00FC0001FC007C0003F8007C0003F8007E0007F0007E
-000FE0003E001FC0003F003F80001F807E00000FC1FC000007FFF8000003FFE00000007F
-000000283F76BC2E>54 D<0000007F00000001FFE0000007C0F000001F007C00003C003C
-000078003E0000F0001F0001F0001F0003E0001F0003C0001F0007C0001F0007C0001F00
-0F80001F000F80001F000F80003F001F80003E001F80003E001F80007E001FC0007C001F
-C000F8001FE001F8001FF001F0001FF803E0001FFC07C0000FFE0F00000FFFBE000007FF
-F8000003FFF0000001FFF0000000FFF8000000FFFC000003FFFE00000F9FFF00001F0FFF
-80007C07FFC000F803FFC001F001FFE003E0007FE007C0003FE00F80001FE01F80000FE0
-1F00000FE03E000007E03E000007E07E000007E07C000007E07C000007E0FC000007C0F8
-000007C0F8000007C0F800000F80F800000F80F800001F00F800003E007C00003C007C00
-007C007E0000F8003F0003F0001F8007C0000FE03F800007FFFE000001FFF80000003FC0
-0000283F78BC2E>56 D<001E00003F80007F8000FFC001FFC001FFC001FF8000FF0000FE
-00003C000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000F00003FC0007FC0007FC0
-00FFC000FFC000FFC000FF80007F00003C0000122777A61C>58 D<00000000FF8001C000
-00000FFFE001C00000003FFFF80380000000FF807E0780000003FC001F0F8000000FF000
-071F8000001FC00007BF0000007F800003FF000000FF000001FF000001FE000001FF0000
-03F8000000FE000007F0000000FE00000FF0000000FE00001FE00000007E00003FC00000
-007C00007F800000007C0000FF800000007C0000FF000000007C0001FE00000000780003
-FE00000000780003FC00000000780007FC00000000780007F80000000070000FF8000000
-0070000FF80000000070001FF00000000070001FF00000000000003FE00000000000003F
-E00000000000003FE00000000000007FE00000000000007FC00000000000007FC0000000
-0000007FC0000000000000FFC0000000000000FF80000000000000FF80000000000000FF
-80000000000000FF80000000000000FF00000000000000FF00000000000000FF00000000
-0F0000FF000000000F0000FF000000000E0000FF000000000E0000FF000000001E0000FF
-000000001C0000FF000000003C0000FF00000000380000FF000000007800007F00000000
-7000007F80000000F000007F80000001E000003F80000001C000003FC0000003C000001F
-C00000078000001FE000000F0000000FE000001E00000007F000003C00000003F80000F8
-00000001FC0001F000000000FE0007C0000000007FC03F80000000001FFFFE0000000000
-07FFF0000000000000FF80000000003A4272BF41>67 D<0001FFFFFFFFFFF00001FFFFFF
-FFFFF00001FFFFFFFFFFF0000003FE00003FF0000003FE00000FF0000003FC000003F000
-0003FC000003F0000003FC000001E0000007FC000001E0000007F8000001E0000007F800
-0001E0000007F8000001E000000FF8000001E000000FF0000001E000000FF0000001C000
-000FF0000001C000001FF0000001C000001FE0000001C000001FE0007001C000001FE000
-F003C000003FE000E0038000003FC000E0000000003FC000E0000000003FC001E0000000
-007FC001C0000000007F8003C0000000007F8003C0000000007F8007C000000000FF801F
-8000000000FFFFFF8000000000FFFFFF8000000000FFFFFF8000000001FF003F00000000
-01FE001F0000000001FE000F0000000001FE000F0000000003FE000E0000000003FC000E
-0000000003FC000E0000000003FC001E0000000007FC001C0000000007F8001C00000000
-07F8001C0000000007F80000000000000FF80000000000000FF00000000000000FF00000
-000000000FF00000000000001FF00000000000001FE00000000000001FE0000000000000
-1FE00000000000003FE00000000000003FC00000000000003FC00000000000007FC00000
-000000007FC00000000000007F80000000000000FFC00000000000FFFFFFE000000000FF
-FFFFE000000000FFFFFFE0000000003C3E7BBD3B>70 D<0001FFFE00000FFFFF0003FFFF
-00001FFFFF0003FFFF00001FFFFF000001FF800000FFC0000003FF8000003F00000003FF
-8000003E00000003FFC000001C00000003FFC000003C00000007BFC000003C000000073F
-E0000038000000071FE0000038000000071FE00000780000000F1FF00000780000000E0F
-F00000700000000E0FF80000700000000E0FF80000F00000001E07F80000F00000001C07
-FC0000E00000001C07FC0000E00000001C03FC0001E00000003C03FE0001E00000003801
-FE0001C00000003801FE0001C00000003801FF0003C00000007800FF0003C00000007000
-FF8003800000007000FF80038000000070007F800780000000F0007FC00780000000E000
-3FC00700000000E0003FC00700000000E0003FE00F00000001E0001FE00F00000001C000
-1FF00E00000001C0001FF00E00000001C0000FF01E00000003C0000FF81E000000038000
-0FF81C00000003800007F81C00000003800007FC3C00000007800003FC3C000000070000
-03FC3800000007000003FE3800000007000001FE780000000F000001FF780000000E0000
-01FF700000000E000000FF700000000E000000FFF00000001E000000FFF00000001C0000
-007FE00000001C0000007FE00000001C0000003FE00000003C0000003FE0000000380000
-003FC0000000380000001FC0000000780000001FC0000000F80000001FC0000001FC0000
-000F80000007FE0000000F800000FFFFF0000007800000FFFFF0000007800000FFFFF000
-0007000000483E7BBD44>78 D<0001FFFFFFFF80000001FFFFFFFFF0000001FFFFFFFFFC
-00000003FE0003FE00000003FE0000FF00000003FC00007F80000003FC00003FC0000007
-FC00001FC0000007FC00001FE0000007F800001FE0000007F800001FE000000FF800001F
-F000000FF800001FF000000FF000001FF000000FF000001FF000001FF000001FF000001F
-F000003FE000001FE000003FE000001FE000003FE000003FE000003FC000003FE000007F
-C000003FC000007F8000003FC000007F8000007FC00000FF0000007FC00000FE0000007F
-800001FC0000007F800003F8000000FF800007F0000000FF80000FE0000000FF00003FC0
-000000FF0001FF00000001FFFFFFFC00000001FFFFFFE000000001FE00000000000001FE
-00000000000003FE00000000000003FE00000000000003FC00000000000003FC00000000
-000007FC00000000000007FC00000000000007F800000000000007F80000000000000FF8
-0000000000000FF80000000000000FF00000000000000FF00000000000001FF000000000
-00001FF00000000000001FE00000000000001FE00000000000003FE00000000000003FE0
-0000000000003FC00000000000003FC00000000000007FC00000000000007FC000000000
-00007F80000000000000FFC00000000000FFFFFF8000000000FFFFFF8000000000FFFFFF
-80000000003C3E7BBD3E>80 D<0000000FF001C00000007FFE01C0000001FFFF03800000
-07F80FC78000000FC003EF8000001F8001FF8000003F0000FF0000007E00007F000000FC
-00007F000001F800007F000003F000003E000003F000003E000007E000003E000007E000
-003E00000FE000003C00000FC000003C00000FC000003C00000FC000003C00001FC00000
-3800001FC000003800001FC000003800001FE000003800001FE000000000001FF0000000
-00001FF000000000001FFC00000000000FFF00000000000FFFF0000000000FFFFE000000
-0007FFFFC000000003FFFFF000000001FFFFFC00000000FFFFFE000000003FFFFE000000
-000FFFFF0000000001FFFF80000000001FFF800000000003FF800000000000FFC0000000
-00007FC000000000003FC000000000003FC000000000001FC000000000001FC000070000
-001FC0000F0000001FC0000F0000001F80000E0000001F80000E0000001F80001E000000
-3F80001E0000003F00001E0000003F00001E0000003E00003E0000007E00003E0000007C
-00003F000000FC00003F000001F800007F800001F000007F800003E000007FC00007C000
-007DE0001F800000F8F8003F000000F87F00FE000000F03FFFF8000000E00FFFE0000000
-C000FF0000000032427ABF33>83 D<000C0006001C000E0078003C00E0007001C000E001
-8000C0038001C0070003800E0007000C0006001C000E0018000C0038001C003000180070
-0038006000300060003000E0007000CF006780FFC07FE0FFC07FE0FFC07FE0FFC07FE0FF
-C07FE0FFC07FE0FF807FC07F003F803C001E001F1C69BE2F>92 D<00007E00000001FF80
-000007C1C380001F80EFC0003F00FFC0007E007FC000FC007F8001F8003F8003F0003F80
-03F0003F8007E0003F000FE0003F000FC0003F001FC0007F001FC0007E003F80007E003F
-80007E003F8000FE007F8000FC007F0000FC007F0000FC007F0001FC00FF0001F800FE00
-01F800FE0001F800FE0003F800FE0003F038FC0003F038FC0003F038FC0007F038FC0007
-E078FC000FE0707C000FE0707C001FE0F07E003FE0E03E007FE0E03E00F3E1E01F01E3E1
-C00F8781E38003FF00FF0000FC003E00252977A72E>97 D<001FC0000FFFC0000FFF8000
-0FFF8000003F8000003F8000003F0000003F0000007F0000007F0000007E0000007E0000
-00FE000000FE000000FC000000FC000001FC000001FC000001F8000001F8000003F80000
-03F8000003F0000003F07E0007F1FF8007F783E007EF01F007FE01F00FF800F80FF800F8
-0FF000FC0FE0007C1FC0007C1FC0007E1F80007E1F8000FE3F8000FE3F8000FE3F0000FE
-3F0000FE7F0001FE7F0001FC7E0001FC7E0001FC7E0003FCFE0003F8FC0003F8FC0003F8
-FC0007F0FC0007F0FC0007E0F8000FE0F8000FC0F8001FC0F8001F8078003F007C003F00
-7C007E003C00FC003E01F8001E03E0000F07C00007FF000001F800001F4076BE2A>I<00
-001FE0000000FFF8000003F03E000007C00F00001F800700003F000780007E001F8000FC
-007F8001F8007F8003F0007F8007F0007F0007E0007F000FE0007E001FC00000001FC000
-00003F800000003F800000003F800000007F800000007F000000007F000000007F000000
-00FF00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
-FC000003007E000007007E00000F007E00001E003E00003C003E000078001F0000F0001F
-0003E0000F800F800003E07E000001FFF80000003FC00000212977A72A>I<000000003F
-800000001FFF800000001FFF000000001FFF00000000007F00000000007F00000000007E
-00000000007E0000000000FE0000000000FE0000000000FC0000000000FC0000000001FC
-0000000001FC0000000001F80000000001F80000000003F80000000003F80000000003F0
-0000000003F00000000007F00000000007F00000000007E00000007E07E0000001FF8FE0
-000007C1CFE000001F80EFC000003F00FFC000007E007FC00000FC007FC00001F8003F80
-0003F0003F800003F0003F800007E0003F80000FE0003F00000FC0003F00001FC0007F00
-001FC0007F00003F80007E00003F80007E00003F8000FE00007F8000FE00007F0000FC00
-007F0000FC00007F0001FC0000FF0001FC0000FE0001F80000FE0001F80000FE0003F800
-00FE0003F83800FC0003F03800FC0003F03800FC0007F03800FC0007F07800FC000FE070
-007C000FE070007C001FE0F0007E003FE0E0003E007FE0E0003E00F3E1E0001F01E3E1C0
-000F8781E3800003FF00FF000000FC003E0000294077BE2E>I<00003F800001FFE00007
-E0F8001F803C003E003C00FC001E01F8001E03F0001E07F0001E0FE0003E0FC0003C1FC0
-003C3F80007C3F8000F83F8003F07F000FE07F00FF80FFFFFC00FFFFC000FE000000FE00
-0000FE000000FE000000FC000000FC000000FC000000FC000000FC000000FC000000FC00
-0006FC00000EFC00001E7C00003C7C0000783E0000F03E0001E01F0007C00F801F0007C0
-FC0001FFF000007F80001F2976A72A>I<000000007C0000000001FF0000000007C78000
-00000F83C00000001F87C00000001F1FC00000003F3FC00000003F3FC00000007E3FC000
-00007E3FC00000007E3F800000007E0E00000000FC0000000000FC0000000000FC000000
-0000FC0000000001FC0000000001F80000000001F80000000001F80000000001F8000000
-0003F80000000003F00000000003F00000000003F000000003FFFFF8000003FFFFF80000
-03FFFFF800000007E00000000007E00000000007E0000000000FE0000000000FC0000000
-000FC0000000000FC0000000000FC0000000000FC0000000001FC0000000001F80000000
-001F80000000001F80000000001F80000000003F80000000003F00000000003F00000000
-003F00000000003F00000000007F00000000007E00000000007E00000000007E00000000
-007E0000000000FE0000000000FC0000000000FC0000000000FC0000000000FC00000000
-01FC0000000001F80000000001F80000000001F80000000001F80000000003F000000000
-03F00000000003F00000000003F00000000007E00000000007E00000000007E000000000
-07E0000000000FC00000001E0FC00000007F0FC00000007F0F80000000FF0F80000000FF
-1F00000000FF1F00000000FE1E00000000F83C00000000703C000000007878000000003F
-E0000000000F80000000002A5383BF1C>I<000003F00000000FFC0000003E0E1C0000FC
-077E0001F003FE0003F003FE0007E001FE000FC001FC001F8001FC001F8001FC003F0001
-FC007F0001F8007E0001F800FE0003F800FE0003F801FC0003F001FC0003F001FC0007F0
-03FC0007F003F80007E003F80007E003F8000FE007F8000FE007F0000FC007F0000FC007
-F0001FC007F0001FC007F0001F8007E0001F8007E0003F8003E0003F8003E0007F0003F0
-00FF0003F000FF0001F001FF0000F003FE0000F80F7E00007C1EFE00001FF8FE000007E0
-FC00000000FC00000001FC00000001FC00000001F800000001F800000003F800000003F8
-00000003F0001C0007F0007F0007E000FF000FE000FF000FC000FF001F8000FF003F0000
-FE007E0000F800FC00007C03F000001FFFC0000003FE000000273B7CA72A>I<0001FC00
-0000FFFC000000FFF8000000FFF800000003F800000003F800000003F000000003F00000
-0007F000000007F000000007E000000007E00000000FE00000000FE00000000FC0000000
-0FC00000001FC00000001FC00000001F800000001F800000003F800000003F800000003F
-000000003F03F800007F0FFE00007F3E0F80007E780FC0007EE007C000FFC007E000FF80
-07E000FF0007E000FF0007E001FE0007E001FC0007E001FC0007E001F80007E003F8000F
-E003F8000FC003F0000FC003F0000FC007F0001FC007F0001F8007E0001F8007E0001F80
-0FE0003F800FE0003F000FC0003F000FC0007F001FC0007E001FC000FE071F8000FC071F
-8000FC073F8001FC0F3F8001F80E3F0001F80E3F0001F81E7F0001F01C7F0001F01C7E00
-01F0387E0001F038FE0001F070FE0000F0E0FC00007FC03800001F0028407ABE2E>I<00
-00780001FC0001FC0003FC0003FC0003FC0003F80000E000000000000000000000000000
-0000000000000000000000000000000000000000000000000000007C0001FF00038F8007
-07800E07C01E07C01C07C03C0FC0380FC0380FC0781FC0701F80701F80F03F80F03F0000
-3F00007F00007E0000FE0000FC0000FC0001FC0001F80001F80003F80003F00003F03807
-F03807E0380FE0780FC0700FC0700FC0F00F80E00F80E00F81C00F83C00F838007870003
-FE0000F800163E79BC1C>I<00000007000000001FC00000001FC00000003FC00000003F
-C00000003FC00000003F800000000E000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000007C00000003FF000000078F8000000E07C000001C07C000003
-C07C000003807E000007007E000007007E00000E00FE00000E00FC00001E00FC00001C00
-FC00003C01FC00003C01FC00000001F800000001F800000003F800000003F800000003F0
-00000003F000000007F000000007F000000007E000000007E00000000FE00000000FE000
-00000FC00000000FC00000001FC00000001FC00000001F800000001F800000003F800000
-003F800000003F000000003F000000007F000000007F000000007E000000007E00000000
-FE00000000FE00000000FC00000000FC00000001FC00000001F800000001F800001C01F8
-00007F03F00000FF03F00000FF07E00000FF07C00000FF0F800000FE1F000000F83E0000
-00707C0000003FF00000000FC0000000225083BC1C>I<0001FC000000FFFC000000FFF8
-000000FFF800000003F800000003F800000003F000000003F000000007F000000007F000
-000007E000000007E00000000FE00000000FE00000000FC00000000FC00000001FC00000
-001FC00000001F800000001F800000003F800000003F800000003F000000003F0003E000
-7F000FF8007F003C3C007E00707C007E00E1FC00FE01C1FC00FE0383FC00FC0703FC00FC
-0E03FC01FC1C03F801FC3800E001F870000001F860000003F8E0000003F9C0000003F780
-000003FE00000007FE00000007FFE0000007E7F8000007E0FE00000FE07F00000FE03F80
-000FC01F80000FC00FC0001FC00FC0001FC00FC0701F800FC0701F800FC0703F800FC0F0
-3F801FC0E03F001F80E03F001F80E07F001F81E07F001F81C07E000F83C07E000F8380FE
-000F8780FE00078F00FC0003FE00380000F80026407ABE2A>I<0007F003FFF003FFE003
-FFE0000FE0000FE0000FC0000FC0001FC0001FC0001F80001F80003F80003F80003F0000
-3F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0001FC0001FC0001F80001
-F80003F80003F80003F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000F
-C0001FC0001FC0001F80001F80003F80003F80003F00003F00007F00007F07007E07007E
-0700FE0F00FE0E00FC0E00FC0E00FC1E00FC1C00FC1C007C38007C78003C70001FE00007
-8000144079BE17>I<01F0003F80007F000007FC01FFE003FFC0000F3E07C1F80F83F000
-0E1F0F00FC1E01F8001E1F1C007C3800F8001C1F38007E7000FC003C1FF0007EE000FC00
-381FF0007FE000FC00381FE0007FC000FC00783FC0007F8000FC00703FC0007F8000FC00
-703F80007F0000FC00703F00007E0000FC00F03F0000FE0001FC00F07F0000FC0001F800
-007E0000FC0001F800007E0000FC0001F800007E0001FC0003F80000FE0001FC0003F000
-00FC0001F80003F00000FC0001F80003F00000FC0003F80007F00001FC0003F80007E000
-01F80003F00007E00001F80003F0000FE00001F80007F0000FC00003F80007F0001FC0E0
-03F00007E0001F80E003F00007E0001F80E003F0000FE0003F81E007F0000FE0003F01C0
-07E0000FC0003F01C007E0000FC0003F01C007E0001FC0003E03800FE0001FC0003E0380
-0FC0001F80003E07000FC0001F80003E07000FC0003F80003E0E001FC0003F80001E1C00
-1F80003F00000FF8000700000E000003E000432979A74A>I<01F0003F800007FC01FFE0
-000F3E07C1F8000E1F0F00FC001E1F1C007C001C1F38007E003C1FF0007E00381FF0007E
-00381FE0007E00783FC0007E00703FC0007E00703F80007E00703F00007E00F03F0000FE
-00F07F0000FC00007E0000FC00007E0000FC00007E0001FC0000FE0001F80000FC0001F8
-0000FC0001F80000FC0003F80001FC0003F00001F80003F00001F80007F00001F80007E0
-0003F8000FE07003F0000FC07003F0000FC07003F0001FC0F007F0001F80E007E0001F80
-E007E0001F81E007E0001F01C00FE0001F01C00FC0001F03800FC0001F03800FC0001F07
-001FC0000F0E001F800007FC0007000001F0002C2979A733>I<00001FC0000000FFF800
-0003F07C00000FC01F00001F801F00003F000F80007E000FC000FC0007C001F80007E003
-F00007E007F00007E007E00007E00FE00007F01FC00007F01FC00007F03F800007F03F80
-0007F03F80000FE07F80000FE07F00000FE07F00000FE07F00001FE0FF00001FC0FE0000
-1FC0FE00001FC0FE00003F80FE00003F80FE00007F00FE00007F00FC00007E007C0000FC
-007E0001FC007E0001F8007E0003F0003E0007E0001F000FC0001F001F80000F803E0000
-07C0FC000001FFF00000003F800000242977A72E>I<0003E001F800000FF807FE00001E
-7C1E0F80001C3E3C07C0003C3E7807C000383EE003E000783FE003E000703FC003F00070
-3F8001F000F07F0001F000E07F0001F800E07E0001F800E07E0003F801E0FE0003F801E0
-FE0003F80000FC0003F80000FC0003F80001FC0007F80001FC0007F00001F80007F00001
-F80007F00003F8000FF00003F8000FE00003F0000FE00003F0000FE00007F0001FC00007
-F0001FC00007E0001F800007E0003F80000FE0003F00000FE0007F00000FE0007E00000F
-E000FC00001FE000FC00001FE001F800001FF003F000001FF007E000003FB80F8000003F
-9C1F0000003F0FFC0000003F03E00000007F00000000007F00000000007E00000000007E
-0000000000FE0000000000FE0000000000FC0000000000FC0000000001FC0000000001FC
-0000000001F80000000001F80000000003F80000000003F8000000007FFFE0000000FFFF
-E0000000FFFFE00000002D3A80A72E>I<01F000FC0007FC07FF800F3E0F03C00E1F1C03
-E01E1F380FE01C1F700FE03C1FE01FE0381FE01FE0381FC01FE0783FC01FC0703F800700
-703F800000703F000000F03F000000F07F000000007E000000007E000000007E00000000
-FE00000000FC00000000FC00000000FC00000001FC00000001F800000001F800000001F8
-00000003F800000003F000000003F000000003F000000007F000000007E000000007E000
-000007E00000000FE00000000FC00000000FC00000000FC00000001FC00000001F800000
-000700000000232979A726>114 D<00007F800001FFE00007C0F8001F003C003E001C00
-3C001E007C003E00F8007E00F800FE00F800FE01F800FC01F800FC01F8007001FC000001
-FE000001FFC00001FFFC0000FFFF0000FFFF80007FFFC0003FFFE0000FFFF00000FFF000
-000FF0000007F0000003F00C0003F03F0003F07F8001F07F8003F0FF0003E0FF0003E0FF
-0003E0FC0007C0F0000F8070000F8078001F003C003C001F01F80007FFE00000FF00001F
-297AA725>I<0001C0000003F0000007F0000007F0000007E0000007E000000FE000000F
-E000000FC000000FC000001FC000001FC000001F8000001F8000003F8000003F8000003F
-0000003F00007FFFFF80FFFFFF80FFFFFF00007E000000FE000000FE000000FC000000FC
-000001FC000001FC000001F8000001F8000003F8000003F8000003F0000003F0000007F0
-000007F0000007E0000007E000000FE000000FE000000FC000000FC000001FC000001FC0
-1C001F801C001F801C003F803C003F8038003F0078003F0070003F00F0003F00E0003F01
-C0001F03C0001F0780000F0F000007FC000001F00000193A78B81E>I<007C0000000001
-FF00001C00038F80007E00070780007E000E07C0007E001E07C000FE001C07C000FE003C
-0FC000FC00380FC000FC00380FC001FC00781FC001FC00701F8001F800701F8001F800F0
-3F8003F800F03F0003F800003F0003F000007F0003F000007E0007F000007E0007F00000
-FE0007E00000FC0007E00000FC000FE00001FC000FE00001F8000FC00001F8000FC00001
-F8001FC00003F8001FC1C003F0001F81C003F0001F81C003F0003F81C003F0003F83C003
-F0003F038003F0003F038003F0007F078001F000FF070001F001FF070001F801DF0F0000
-F8079F0E00007C0F0F1C00001FFC07F8000007F001F0002A2979A731>I<007C0001C001
-FF0007F0038F8007F007078007F00E07C007F81E07C007F81C07C003F83C0FC003F8380F
-C001F0380FC001F0781FC000F0701F8000F0701F8000F0F03F8000F0F03F0000E0003F00
-00E0007F0000E0007E0001E0007E0001C000FE0001C000FC0001C000FC0003C001FC0003
-8001F800038001F800038001F800070003F800070003F0000F0003F0000E0003F0000E00
-03F0001C0003F0001C0003F000380003F000780001F000700001F800E00000F801C00000
-FC038000007E0F0000001FFE00000003F00000252979A72A>I<007C000000007001FF00
-007001FC038F8001F801FC07078001F801FC0E07C001F801FE1E07C003F801FE1C07C003
-F000FE3C0FC003F000FE380FC003F0007C380FC007F0007C781FC007E0003C701F8007E0
-003C701F8007E0003CF03F800FE0003CF03F000FC00038003F000FC00038007F000FC000
-38007E001FC00078007E001F80007000FE001F80007000FC001F80007000FC003F8000F0
-01FC003F0000E001F8003F0000E001F8003F0000E001F8003F0001E003F8007F0001C003
-F0007E0001C003F0007E0003C003F0007E00038003F0007E00038003F0007E00070003F0
-00FE00070003F000FE000E0001F001FE001E0001F801FF001C0000F8039F00380000FC07
-9F807000003E0F07C1E000001FFC03FFC0000003F0007F0000372979A73C>I<0003F001
-F800000FFC07FE00003C1E0E0F0000780F1C0F8000F00FB83F8001E00FF83F8001C007F0
-7F80038007F07F80078007E07F8007000FE07F000F000FE01C000E000FC000000E000FC0
-00001E001FC000001E001FC0000000001F80000000001F80000000003F80000000003F00
-000000003F00000000003F00000000007F00000000007E00000000007E00000000007E00
-00000000FE0000000000FC001C000000FC001C000000FC001C000001FC003C001E01FC00
-38003F01F80078007F81F80070007F83F800F000FF83F800E000FF077801C000FE0F7C03
-C0007C0E3C078000783C1E1E00001FF80FFC000007E003F0000029297CA72A>I<007C00
-000001FF000038038F8000FC07078000FC0E07C000FC1E07C001FC1C07C001F83C0FC001
-F8380FC001F8380FC003F8781FC003F0701F8003F0701F8003F0F03F8007F0F03F0007E0
-003F0007E0007F0007E0007E000FE0007E000FC000FE000FC000FC000FC000FC001FC001
-FC001FC001F8001F8001F8001F8001F8003F8003F8003F0003F0003F0003F0003F0003F0
-007F0003F0007E0003F0007E0003F0007E0003F000FE0003F000FC0001F001FC0001F803
-FC0000F807FC00007C1FF800003FF9F8000007E1F800000003F800000003F000000003F0
-00000007F0000E0007E0003F8007E0007F800FC0007F800FC0007F801F8000FF001F0000
-FF003E00007C007E00007000FC00007801F000003803E000001E0FC000000FFF00000003
-F8000000263B79A72C>I E /Fp 78 125 df<000001FF000FE00000001FFFE03FFC0000
-007F00F8FC1E000001FC003FF03F000007F0007FE07F80000FE000FFE0FF80001FC001FF
-C0FF80003F8001FF80FF80007F8001FF80FF80007F0001FF807F00007F0001FF003E0000
-FE0000FF00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
-00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
-FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
-000000FFFFFFFFFFFF8000FFFFFFFFFFFF8000FFFFFFFFFFFF800000FE00007F00000000
-FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
-00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
-FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
-00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
-FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
-00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
-FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000001FF0000FF
-8000007FFFFC3FFFFF80007FFFFC3FFFFF80007FFFFC3FFFFF800039407FBF35>11
-D<000001FF000000001FFFC00000007F01F0000001FC0078000007F0001C00000FE0003E
-00001FC000FF00003F8001FF00007F8001FF00007F0001FF00007F0001FF0000FE0001FF
-0000FE0000FE0000FE0000380000FE0000000000FE0000000000FE0000000000FE000000
-0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000
-0000FE00007F00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF0000FE0001FF0000FE0000FF
-0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
-0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
-0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
-0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
-0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
-0001FF0000FF807FFFFC3FFFFE7FFFFC3FFFFE7FFFFC3FFFFE2F407FBF33>I<000001FF
-800000001FFFF70000007F00FF000001F800FF000007F001FF00000FE001FF00001FC001
-FF00003F8001FF00007F8001FF00007F0001FF00007F0000FF0000FE00007F0000FE0000
-7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
-7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
-7F00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF0000FE00007F0000FE00007F0000FE0000
-7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
-7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
-7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
-7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
-7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0001FF0000
-FF807FFFFC3FFFFE7FFFFC3FFFFE7FFFFC3FFFFE2F407FBF33>I<000001FF0000FF8000
-00001FFFC00FFFE00000007F01F03F80F8000001F80078FE003C000007F0003FF8000E00
-000FE0007FF0001F00001FC000FFE0007F80003F8001FFC000FF80007F8001FFC000FF80
-007F0001FF8000FF80007F0001FF8000FF8000FE0001FF0000FF8000FE0000FF00007F00
-00FE00007F00001C0000FE00007F0000000000FE00007F0000000000FE00007F00000000
-00FE00007F0000000000FE00007F0000000000FE00007F0000000000FE00007F00000000
-00FE00007F0000000000FE00007F0000000000FE00007F0000000000FE00007F00003F80
-FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF8000FE00007F0000FF80
-00FE00007F00007F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
-00FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
-00FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
-00FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
-00FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
-00FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
-00FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
-00FE00007F00003F8000FE00007F00003F8000FE00007F00003F8001FF0000FF80007FC0
-7FFFFC3FFFFE1FFFFF7FFFFC3FFFFE1FFFFF7FFFFC3FFFFE1FFFFF48407FBF4C>I<003E
-003F007F00FF00FF01FE03FC07F807F00FE01FC01F803E007C00F8007000200010116EBE
-2D>19 D<1E000F007F803FC0FF807FC0FFC07FE0FFC07FE0FFE07FF0FFE07FF0FFE07FF0
-7FE03FF01E600F300060003000600030006000300060003000E0007000C0006000C00060
-00C0006001C000E0018000C0038001C003000180070003800E0007001C000E0018000C00
-38001C00300018001C1C7DBE2D>34 D<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60
-006000600060006000E000C000C000C001C001800380030007000E001C00180038003000
-0B1C79BE19>39 D<0000300000700000E00001C0000380000780000F00001E00003E0000
-3C0000780000F80000F00001F00001E00003E00003E00007C00007C0000FC0000F80000F
-80001F80001F00001F00003F00003F00003F00003E00007E00007E00007E00007E00007E
-00007E00007C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
-0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00007E
-00007E00007E00007E00003E00003F00003F00003F00001F00001F00001F80000F80000F
-80000FC00007C00007C00003E00003E00001E00001F00000F00000F800007800003C0000
-3E00001E00000F000007800003800001C00000E0000070000030145A77C323>I<C00000
-E000007000003800001C00001E00000F000007800007C00003C00001E00001F00000F000
-00F800007800007C00007C00003E00003E00003F00001F00001F00001F80000F80000F80
-000FC0000FC0000FC00007C00007E00007E00007E00007E00007E00007E00003E00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003E00007E00007E00007E00007E00007E00007E0
-0007C0000FC0000FC0000FC0000F80000F80001F80001F00001F00003F00003E00003E00
-007C00007C0000780000F80000F00001F00001E00003C00007C0000780000F00001E0000
-1C0000380000700000E00000C00000145A7BC323>I<00000006000000000000000F0000
-00000000000F000000000000000F000000000000000F000000000000000F000000000000
-000F000000000000000F000000000000000F000000000000000F000000000000000F0000
-00000000000F000000000000000F000000000000000F000000000000000F000000000000
-000F000000000000000F000000000000000F000000000000000F000000000000000F0000
-00000000000F000000000000000F000000000000000F000000000000000F000000000000
-000F000000000000000F000000000000000F000000000000000F000000007FFFFFFFFFFF
-FFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFFFFE00000000F000000000000
-000F000000000000000F000000000000000F000000000000000F000000000000000F0000
-00000000000F000000000000000F000000000000000F000000000000000F000000000000
-000F000000000000000F000000000000000F000000000000000F000000000000000F0000
-00000000000F000000000000000F000000000000000F000000000000000F000000000000
-000F000000000000000F000000000000000F000000000000000F000000000000000F0000
-00000000000F000000000000000F000000000000000F0000000000000006000000003C3C
-7BB447>43 D<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60006000600060006000E0
-00C000C000C001C001800380030007000E001C001800380030000B1C798919>I<FFFFFE
-FFFFFEFFFFFEFFFFFEFFFFFEFFFFFE17067F961E>I<1E007F807F80FFC0FFC0FFC0FFC0
-7F807F801E000A0A798919>I<000000018000000003C000000007C000000007C0000000
-07800000000F800000000F800000000F000000001F000000001F000000001E000000003E
-000000003E000000003C000000007C000000007C000000007800000000F800000000F800
-000000F000000001F000000001F000000001E000000003E000000003E000000003C00000
-0007C000000007C000000007800000000F800000000F800000001F000000001F00000000
-1E000000003E000000003E000000003C000000007C000000007C000000007800000000F8
-00000000F800000000F000000001F000000001F000000001E000000003E000000003E000
-000003C000000007C000000007C000000007800000000F800000000F800000000F000000
-001F000000001F000000001E000000003E000000003E000000007C000000007C00000000
-7800000000F800000000F800000000F000000001F000000001F000000001E000000003E0
-00000003E000000003C000000007C000000007C000000007800000000F800000000F8000
-00000F000000001F000000001F000000001E000000003E000000003E000000003C000000
-007C000000007C000000007800000000F800000000F800000000F0000000006000000000
-225B7BC32D>I<0001FE0000000FFFC000003F03F000007C00F80000F8007C0001F0003E
-0003E0001F0007C0000F8007C0000F800FC0000FC01F800007E01F800007E01F800007E0
-3F800007F03F800007F03F000003F07F000003F87F000003F87F000003F87F000003F87F
-000003F87F000003F8FF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF00
-0003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF0000
-03FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003
-FC7F000003F87F000003F87F000003F87F000003F87F000003F83F800007F03F800007F0
-3F800007F01F800007E01F800007E01F800007E00FC0000FC00FC0000FC007E0001F8003
-E0001F0001F0003E0000F8007C00007C00F800003F03F000000FFFC0000001FE0000263F
-7DBC2D>I<0001C0000003C0000007C000001FC000007FC00007FFC000FFFFC000FF9FC0
-00F81FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
-00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
-00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
-00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
-00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
-00001FC000001FC000001FC000001FC000007FF000FFFFFFF8FFFFFFF8FFFFFFF81D3D78
-BC2D>I<0007FC0000003FFF800000FFFFE00003F01FF80007C007FC000F0001FE001E00
-00FF001C0000FF803C00007FC07800007FC07800003FE07000003FE0FF00003FE0FF8000
-1FF0FFC0001FF0FFC0001FF0FFC0001FF0FFC0001FF0FFC0001FF07F80001FF03F00001F
-F00C00001FF00000001FE00000003FE00000003FE00000003FC00000007FC00000007F80
-000000FF80000000FF00000001FE00000001FC00000003F800000007F000000007E00000
-000FC00000001F800000003F000000007E000000007C00000000F800000001F000000003
-E000000007C00000000F800000001F000070003E000070003C000070007800007000F000
-00E001E00000E003C00000E007800000E00F000001E01FFFFFFFE01FFFFFFFE03FFFFFFF
-E07FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0243D7CBC2D>I<0007FC0000003FFF
-800000F80FE00001E003F800078001FC000F0001FE000E0000FF001E0000FF801F80007F
-803FC0007FC03FE0007FC03FE0007FC03FF0007FC03FE0007FC03FE0007FC01FE0007FC0
-0FC0007FC00000007F80000000FF80000000FF00000000FF00000001FE00000001FE0000
-0003FC00000003F800000007E00000000FC00000003F0000001FFC0000001FFF80000000
-0FE000000007F800000003FC00000001FE00000000FF00000000FF800000007FC0000000
-7FC00000007FE00000003FE00000003FE00000003FF00000003FF00C00003FF03F00003F
-F07F80003FF0FFC0003FF0FFC0003FF0FFC0003FF0FFC0003FE0FFC0003FE0FF80007FE0
-7F00007FC07800007FC0780000FF803C0000FF801E0001FF000F0003FE0007C007FC0003
-F80FF00000FFFFE000003FFF80000007F80000243F7CBC2D>I<0000000E000000001E00
-0000003E000000003E000000007E000000007E00000000FE00000001FE00000001FE0000
-0003FE000000077E000000067E0000000E7E0000001C7E0000001C7E000000387E000000
-707E000000707E000000E07E000001C07E000001C07E000003807E000007007E00000700
-7E00000E007E00001C007E00001C007E000038007E000070007E000070007E0000E0007E
-0000C0007E0001C0007E000380007E000300007E000700007E000E00007E000C00007E00
-1C00007E003800007E003800007E007000007E00E000007E00FFFFFFFFFFFFFFFFFFFFFF
-FFFFFFFF000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000
-00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000001FF000001FF
-FFFF0001FFFFFF0001FFFFFF283E7EBD2D>I<06000003000780001F0007F800FE0007FF
-FFFE0007FFFFFC0007FFFFF80007FFFFF00007FFFFC00007FFFF000007FFFC0000073FE0
-000007000000000700000000070000000007000000000700000000070000000007000000
-00070000000007000000000700000000070000000007000000000701FE0000070FFF8000
-073E03E000077001F80007E000FC0007C0007E000780003F000700003F800600001F8000
-00001FC00000001FC00000001FE00000000FE00000000FE00000000FE00000000FF00000
-000FF00000000FF00C00000FF07F00000FF07F80000FF0FF80000FF0FF80000FF0FF8000
-0FF0FF80000FF0FF80000FE0FF00001FE0FC00001FE07000001FC07800001FC03800003F
-803C00003F801E00007F001F0000FE000F8001FC0007C003F80003F80FE00000FFFFC000
-003FFF00000007F80000243F7CBC2D>I<00001FE0000000FFF8000003F03E00000FC00F
-00001F000780003E000780007E001FC000FC003FC001F8007FC003F8007FC003F0007FC0
-07F0007FC00FE0003F800FE0001F001FE00000001FC00000001FC00000003FC00000003F
-C00000003FC00000007F800000007F800000007F80FE00007F87FF8000FF8F07E000FF9C
-01F000FFB800FC00FFB0007E00FFF0007E00FFE0003F00FFE0003F80FFC0003FC0FFC000
-3FC0FFC0001FE0FFC0001FE0FFC0001FE0FF80001FF0FF80001FF0FF80001FF0FF80001F
-F0FF80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF0
-3F80001FF03FC0001FE03FC0001FE01FC0001FE01FC0003FC01FC0003FC00FE0003F800F
-E0003F8007E0007F0003F0007E0001F800FC0000FC01F800007E07F000003FFFE000000F
-FF80000003FC0000243F7CBC2D>I<38000000003C000000003F000000003FFFFFFFFC3F
-FFFFFFFC3FFFFFFFFC3FFFFFFFF87FFFFFFFF87FFFFFFFF07FFFFFFFE078000001E07000
-0003C0700000078070000007007000000F00E000001E00E000001C00E000003C00E00000
-78000000007000000000F000000001E000000001C000000003C000000007800000000700
-0000000F000000001E000000001E000000003C000000003C000000007C00000000780000
-0000F800000000F800000001F800000001F000000003F000000003F000000003F0000000
-07F000000007F000000007F00000000FF00000000FE00000000FE00000001FE00000001F
-E00000001FE00000001FE00000001FE00000001FE00000003FE00000003FE00000003FE0
-0000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE000
-00001FC00000000700000026407BBD2D>I<0003FC0000001FFF8000007C07E00000F001
-F80001E0007C0003C0003E000780001F000F00001F000F00000F801E00000F801E00000F
-C03E000007C03E000007C03E000007C03E000007C03F000007C03F000007C03F80000F80
-3FC0000F801FE0001F801FF0001F001FFC003E000FFE007C000FFF80780007FFC0F00003
-FFF3E00001FFFF800000FFFF0000003FFF0000001FFFC000000FFFE000003FFFF8000078
-FFFC0001F07FFE0003E01FFF0007C00FFF800F8003FFC01F0001FFC03F00007FE03E0000
-3FE07E00001FE07C00000FF07C000007F0F8000003F0F8000003F0F8000003F0F8000001
-F0F8000001F0F8000001F0F8000001F0FC000001E07C000003E07C000003E07E000003C0
-3F000007C01F00000F801F80001F000FC0003E0007F0007C0001FC03F80000FFFFE00000
-1FFF80000003FC0000243F7CBC2D>I<0003FC0000001FFF0000007E07C00000FC03F000
-01F801F80003F000FC0007E0007C000FE0007E001FC0007F001FC0003F003FC0003F803F
-80003F807F80003FC07F80003FC07F80001FC0FF80001FC0FF80001FE0FF80001FE0FF80
-001FE0FF80001FE0FF80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000
-1FF07F80001FF07F80003FF07F80003FF07F80003FF03FC0003FF03FC0003FF01FC0007F
-F00FC0007FF007E000FFF007F000DFF003F001DFF000F8039FF0007E0F1FF0001FFE1FE0
-0007F01FE00000001FE00000001FE00000003FC00000003FC00000003FC00000003FC000
-00003F800000007F800F80007F001FC0007F003FE000FE003FE000FE003FE001FC003FE0
-01F8003FC003F0003F8007F0001E000FE0001F001FC0000FC07F000003FFFE000001FFF8
-0000003FC00000243F7CBC2D>I<1E007F807F80FFC0FFC0FFC0FFC07F807F801E000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-1E007F807F80FFC0FFC0FFC0FFC07F807F801E000A2779A619>I<1E007F807F80FFC0FF
-C0FFC0FFC07F807F801E0000000000000000000000000000000000000000000000000000
-000000000000000000000000001E007F00FF80FF80FFC0FFC0FFC0FFC07FC01EC000C000
-C000C000C001C001800180018003800300070006000E000C001C003800300030000A3979
-A619>I<7FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFFFFE0
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-000000007FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFFFFE0
-3C167BA147>61 D<00000007000000000000000F800000000000000F800000000000000F
-800000000000001FC00000000000001FC00000000000001FC00000000000003FE0000000
-0000003FE00000000000003FE00000000000007FF00000000000007FF00000000000007F
-F0000000000000FFF8000000000000E7F8000000000000E7F8000000000001C7FC000000
-000001C3FC000000000001C3FC00000000000381FE00000000000381FE00000000000381
-FE00000000000700FF00000000000700FF00000000000700FF00000000000E007F800000
-00000E007F80000000000E007F80000000001C003FC0000000001C003FC0000000001C00
-3FC00000000038001FE00000000038001FE00000000038001FE00000000070000FF00000
-000070000FF00000000070000FF000000000E00007F800000000E00007F800000000E000
-07F800000001C00003FC00000001FFFFFFFC00000001FFFFFFFC00000003FFFFFFFE0000
-0003800001FE00000003800001FE00000007000000FF00000007000000FF0000000F0000
-00FF8000000E0000007F8000000E0000007F8000001E0000007FC000001C0000003FC000
-001C0000003FC000003C0000003FE00000380000001FE00000380000001FE00000780000
-001FF00000780000000FF00000FC0000000FF00003FC0000001FF8000FFF0000003FFC00
-FFFFF0000FFFFFF8FFFFF0000FFFFFF8FFFFF0000FFFFFF83D417DC044>65
-D<FFFFFFFFFC0000FFFFFFFFFF8000FFFFFFFFFFF00001FF80000FF800007F000003FE00
-007F000001FF00007F000000FF80007F0000007FC0007F0000003FE0007F0000003FE000
-7F0000001FF0007F0000001FF0007F0000001FF8007F0000001FF8007F0000001FF8007F
-0000000FF8007F0000001FF8007F0000001FF8007F0000001FF8007F0000001FF0007F00
-00001FF0007F0000003FE0007F0000007FE0007F0000007FC0007F000000FF80007F0000
-01FF00007F000003FC00007F00000FF800007F00007FE000007FFFFFFF0000007FFFFFFF
-E000007F000007FC00007F000001FE00007F000000FF80007F0000007FC0007F0000003F
-E0007F0000001FF0007F0000001FF8007F0000000FF8007F0000000FFC007F00000007FC
-007F00000007FC007F00000007FE007F00000007FE007F00000007FE007F00000007FE00
-7F00000007FE007F00000007FE007F00000007FE007F00000007FC007F0000000FFC007F
-0000000FFC007F0000001FF8007F0000001FF0007F0000003FF0007F0000007FE0007F00
-0000FFC0007F000003FF8001FF80000FFE00FFFFFFFFFFFC00FFFFFFFFFFE000FFFFFFFF
-FF0000373E7DBD40>I<0000003FF00006000003FFFE000E00000FFFFF801E00003FF007
-E03E0000FF8000F83E0003FE00007C7E0007F800001EFE000FF000000FFE003FE0000007
-FE007FC0000003FE00FF80000003FE00FF00000001FE01FE00000000FE03FE00000000FE
-07FC000000007E07F8000000007E0FF8000000003E0FF8000000003E1FF0000000001E1F
-F0000000001E3FF0000000001E3FE0000000001E3FE0000000000E7FE0000000000E7FE0
-000000000E7FE0000000000E7FC00000000000FFC00000000000FFC00000000000FFC000
-00000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000
-000000FFC00000000000FFC00000000000FFC00000000000FFC000000000007FC0000000
-00007FE000000000007FE0000000000E7FE0000000000E3FE0000000000E3FE000000000
-0E3FF0000000000E1FF0000000001E1FF0000000001C0FF8000000001C0FF8000000001C
-07F8000000003C07FC000000003803FE000000007801FE000000007000FF00000000F000
-FF80000001E0007FC0000001C0003FE0000003C0000FF0000007800007F800001F000003
-FE00003E000000FF8000F80000003FF007F00000000FFFFFC000000003FFFF0000000000
-3FF0000037427BBF42>I<FFFFFFFFFC000000FFFFFFFFFF800000FFFFFFFFFFE0000001
-FFC0001FF80000007F800003FE0000007F800000FF0000007F8000007F8000007F800000
-3FC000007F8000000FE000007F8000000FF000007F80000007F800007F80000003FC0000
-7F80000001FC00007F80000001FE00007F80000000FF00007F80000000FF00007F800000
-00FF80007F800000007F80007F800000007FC0007F800000007FC0007F800000007FC000
-7F800000003FE0007F800000003FE0007F800000003FE0007F800000003FE0007F800000
-003FE0007F800000003FF0007F800000003FF0007F800000003FF0007F800000003FF000
-7F800000003FF0007F800000003FF0007F800000003FF0007F800000003FF0007F800000
-003FF0007F800000003FF0007F800000003FF0007F800000003FE0007F800000003FE000
-7F800000003FE0007F800000003FE0007F800000003FE0007F800000007FC0007F800000
-007FC0007F800000007F80007F800000007F80007F80000000FF80007F80000000FF0000
-7F80000001FE00007F80000001FE00007F80000003FC00007F80000003F800007F800000
-07F800007F8000000FF000007F8000001FE000007F8000007FC000007F800000FF000000
-7F800003FE000001FFC0001FF80000FFFFFFFFFFF00000FFFFFFFFFF800000FFFFFFFFFC
-0000003C3E7DBD45>I<FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE001FFC00001
-FFE0007F8000001FE0007F8000000FF0007F80000003F0007F80000003F0007F80000001
-F0007F80000000F0007F80000000F0007F80000000F0007F8000000070007F8000000070
-007F8000000070007F8000000070007F8000000038007F80001C0038007F80001C003800
-7F80001C0038007F80001C0038007F80001C0000007F80001C0000007F80003C0000007F
-80003C0000007F80007C0000007F8000FC0000007F8003FC0000007FFFFFFC0000007FFF
-FFFC0000007FFFFFFC0000007F8003FC0000007F8000FC0000007F80007C0000007F8000
-3C0000007F80003C0000007F80001C0000007F80001C0000007F80001C0007007F80001C
-0007007F80001C0007007F80001C000E007F800000000E007F800000000E007F80000000
-0E007F800000000E007F800000001E007F800000001C007F800000001C007F800000003C
-007F800000003C007F800000007C007F800000007C007F80000000F8007F80000001F800
-7F80000003F8007F80000007F8007F8000001FF801FFC00001FFF8FFFFFFFFFFFFF0FFFF
-FFFFFFFFF0FFFFFFFFFFFFF0383E7DBD3E>I<FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFF
-FFFFFF8001FFC00003FF80007F8000007F80007F8000001FC0007F8000000FC0007F8000
-0007C0007F80000007C0007F80000003C0007F80000003C0007F80000003C0007F800000
-01C0007F80000001C0007F80000001C0007F80000001C0007F80000000E0007F80000000
-E0007F80003800E0007F80003800E0007F80003800E0007F8000380000007F8000380000
-007F8000380000007F8000780000007F8000780000007F8000F80000007F8001F8000000
-7F8007F80000007FFFFFF80000007FFFFFF80000007FFFFFF80000007F8007F80000007F
-8001F80000007F8000F80000007F8000780000007F8000780000007F8000380000007F80
-00380000007F8000380000007F8000380000007F8000380000007F8000380000007F8000
-000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
-0000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
-00007F8000000000007F8000000000007F8000000000007F800000000001FFE000000000
-FFFFFFF0000000FFFFFFF0000000FFFFFFF0000000333E7DBD3B>I<0000003FE0000C00
-000003FFFE001C0000001FFFFF803C0000007FF00FC07C000000FF0001F07C000003FC00
-0078FC000007F800003DFC00001FE000001FFC00003FC000000FFC00007F80000007FC00
-00FF80000003FC0001FF00000003FC0001FE00000001FC0003FC00000001FC0007FC0000
-0000FC0007F800000000FC000FF8000000007C000FF0000000007C001FF0000000003C00
-1FF0000000003C003FE0000000003C003FE0000000003C003FE0000000001C007FE00000
-00001C007FE0000000001C007FC0000000001C007FC0000000000000FFC0000000000000
-FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC00000
-00000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000
-FFC0000000000000FFC000001FFFFFF07FC000001FFFFFF07FC000001FFFFFF07FE00000
-000FFE007FE000000003FC003FE000000003FC003FE000000003FC003FF000000003FC00
-1FF000000003FC001FF000000003FC000FF800000003FC000FF800000003FC0007F80000
-0003FC0007FC00000003FC0003FC00000003FC0001FE00000003FC0001FF00000003FC00
-00FF80000003FC00007FC0000007FC00003FE0000007FC00001FF000000FFC000007F800
-001EFC000003FE00003C7C000000FF8000F83C0000007FF007F01C0000001FFFFFC00C00
-000003FFFF0000000000003FF00000003C427BBF47>I<FFFFFFC01FFFFFF8FFFFFFC01F
-FFFFF8FFFFFFC01FFFFFF801FFE000003FFC00007F8000000FF000007F8000000FF00000
-7F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
-0FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
-7F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
-0FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
-7F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007FFFFFFF
-FFF000007FFFFFFFFFF000007FFFFFFFFFF000007F8000000FF000007F8000000FF00000
-7F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
-0FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
-7F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
-0FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
-7F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
-0FF000007F8000000FF000007F8000000FF00001FFE000003FFC00FFFFFFC01FFFFFF8FF
-FFFFC01FFFFFF8FFFFFFC01FFFFFF83D3E7DBD44>I<FFFFFFF0FFFFFFF0FFFFFFF000FF
-F000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
-C00000FFF000FFFFFFF0FFFFFFF0FFFFFFF01C3E7EBD21>I<001FFFFFFC001FFFFFFC00
-1FFFFFFC000007FF00000003FE00000001FE00000001FE00000001FE00000001FE000000
-01FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001
-FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE
-00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00
-000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000
-0001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE000000
-01FE00000001FE003F0001FE007F8001FE00FFC001FE00FFC001FE00FFC001FE00FFC001
-FE00FFC003FC00FF8003FC007F0003F8007C0007F800380007F0003C000FE0001E001FC0
-000F003F800003E07E000000FFF80000003FC0000026407CBD2F>I<FFFFFFF8000000FF
-FFFFF8000000FFFFFFF800000001FFE000000000007F8000000000007F8000000000007F
-8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
-00000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
-000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
-0000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
-00007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
-007F8000000000007F8000000000007F8000000000007F8000000000007F800000000000
-7F8000000000007F8000000380007F8000000380007F8000000380007F8000000380007F
-8000000380007F8000000780007F8000000700007F8000000700007F8000000700007F80
-00000700007F8000000F00007F8000000F00007F8000000F00007F8000001F00007F8000
-001F00007F8000003F00007F8000007F00007F800000FF00007F800001FE00007F800007
-FE0001FFC0003FFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00313E7DBD39>
-76 D<FFFFC0000000003FFFF0FFFFC0000000003FFFF0FFFFC0000000003FFFF001FFE0
-000000007FF800007FE0000000007FE0000077F000000000EFE0000077F000000000EFE0
-000077F000000000EFE0000073F800000001CFE0000073F800000001CFE0000071FC0000
-00038FE0000071FC000000038FE0000071FC000000038FE0000070FE000000070FE00000
-70FE000000070FE0000070FF0000000E0FE00000707F0000000E0FE00000707F0000000E
-0FE00000703F8000001C0FE00000703F8000001C0FE00000703F8000001C0FE00000701F
-C00000380FE00000701FC00000380FE00000700FE00000700FE00000700FE00000700FE0
-0000700FE00000700FE000007007F00000E00FE000007007F00000E00FE000007003F800
-01C00FE000007003F80001C00FE000007003F80001C00FE000007001FC0003800FE00000
-7001FC0003800FE000007001FC0003800FE000007000FE0007000FE000007000FE000700
-0FE0000070007F000E000FE0000070007F000E000FE0000070007F000E000FE000007000
-3F801C000FE0000070003F801C000FE0000070001FC038000FE0000070001FC038000FE0
-000070001FC038000FE0000070000FE070000FE0000070000FE070000FE0000070000FE0
-E0000FE00000700007F0E0000FE00000700007F0E0000FE00000700003F9C0000FE00000
-700003F9C0000FE00000700003F9C0000FE00000700001FF80000FE00000700001FF8000
-0FE00000700000FF00000FE00000700000FF00000FE00000F80000FF00000FE00001FC00
-007E00000FE00007FF00007E00003FF800FFFFF8003C001FFFFFF0FFFFF8003C001FFFFF
-F0FFFFF8003C001FFFFFF04C3E7DBD53>I<FFFF800000FFFFF8FFFFC00000FFFFF8FFFF
-E00000FFFFF8007FE0000007FF00007FF0000001FC00007FF8000000F800007FF8000000
-70000077FC00000070000073FE00000070000073FE00000070000071FF00000070000070
-FF80000070000070FF800000700000707FC00000700000703FE00000700000703FE00000
-700000701FF00000700000700FF80000700000700FF800007000007007FC000070000070
-03FE00007000007003FE00007000007001FF00007000007000FF80007000007000FF8000
-70000070007FC00070000070003FE00070000070003FE00070000070001FF00070000070
-000FF80070000070000FF800700000700007FC00700000700003FE00700000700003FE00
-700000700001FF00700000700000FF80700000700000FF807000007000007FC070000070
-00003FE07000007000003FE07000007000001FF07000007000000FF87000007000000FF8
-70000070000007FC70000070000003FE70000070000003FE70000070000001FF70000070
-000000FFF0000070000000FFF00000700000007FF00000700000003FF00000700000003F
-F00000700000001FF00000700000000FF00000700000000FF000007000000007F00000F8
-00000003F00001FC00000003F00007FF00000001F000FFFFF8000000F000FFFFF8000000
-F000FFFFF800000070003D3E7DBD44>I<0000007FE0000000000007FFFE00000000001F
-C03F80000000007E0007E000000001FC0003F800000007F00000FE0000000FE000007F00
-00001FC000003F8000003F8000001FC000007F0000000FE00000FE00000007F00001FE00
-000007F80001FC00000003F80003FC00000003FC0007F800000001FE0007F800000001FE
-000FF000000000FF000FF000000000FF001FF000000000FF801FE0000000007F803FE000
-0000007FC03FE0000000007FC03FE0000000007FC07FE0000000007FE07FC0000000003F
-E07FC0000000003FE07FC0000000003FE0FFC0000000003FF0FFC0000000003FF0FFC000
-0000003FF0FFC0000000003FF0FFC0000000003FF0FFC0000000003FF0FFC0000000003F
-F0FFC0000000003FF0FFC0000000003FF0FFC0000000003FF0FFC0000000003FF0FFC000
-0000003FF07FC0000000003FE07FE0000000007FE07FE0000000007FE07FE0000000007F
-E07FE0000000007FE03FE0000000007FC03FE0000000007FC01FF000000000FF801FF000
-000000FF801FF000000000FF800FF800000001FF000FF800000001FF0007FC00000003FE
-0003FC00000003FC0003FE00000007FC0001FE00000007F80000FF0000000FF000007F00
-00000FE000003F8000001FC000001FC000003F8000000FE000007F00000007F00000FE00
-000001FC0003F8000000007F000FE0000000001FC03F800000000007FFFE000000000000
-7FE00000003C427BBF47>I<FFFFFFFFF80000FFFFFFFFFF8000FFFFFFFFFFE00001FFC0
-003FF800007F800007FC00007F800001FE00007F800000FF00007F8000007F80007F8000
-003FC0007F8000003FE0007F8000003FE0007F8000001FF0007F8000001FF0007F800000
-1FF8007F8000001FF8007F8000001FF8007F8000001FF8007F8000001FF8007F8000001F
-F8007F8000001FF8007F8000001FF8007F8000001FF0007F8000001FF0007F8000003FE0
-007F8000003FE0007F8000003FC0007F8000007F80007F800000FF00007F800001FE0000
-7F800007FC00007F80003FF000007FFFFFFFC000007FFFFFFE0000007F8000000000007F
-8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
-00000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
-000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
-0000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
-00007F8000000000007F8000000000007F800000000001FFE000000000FFFFFFC0000000
-FFFFFFC0000000FFFFFFC0000000353E7DBD3E>I<FFFFFFFFC0000000FFFFFFFFFC0000
-00FFFFFFFFFF80000001FFC000FFE00000007F80001FF00000007F800007FC0000007F80
-0001FE0000007F800000FF0000007F800000FF8000007F8000007FC000007F8000007FC0
-00007F8000003FE000007F8000003FE000007F8000003FF000007F8000003FF000007F80
-00003FF000007F8000003FF000007F8000003FF000007F8000003FF000007F8000003FF0
-00007F8000003FE000007F8000007FE000007F8000007FC000007F8000007F8000007F80
-0000FF8000007F800000FF0000007F800001FC0000007F800007F80000007F80001FE000
-00007F8000FF800000007FFFFFFC000000007FFFFFF0000000007F8001FC000000007F80
-003F000000007F80001FC00000007F80000FE00000007F800007F00000007F800007F800
-00007F800003F80000007F800003FC0000007F800001FC0000007F800001FE0000007F80
-0001FE0000007F800001FE0000007F800001FF0000007F800001FF0000007F800001FF00
-00007F800001FF0000007F800001FF8000007F800001FF8000007F800001FF8000007F80
-0001FF8000007F800001FFC004007F800001FFC00E007F800001FFC00E007F800000FFC0
-0E007F800000FFE00E007F8000007FE01E01FFE000007FE01CFFFFFFC0003FF01CFFFFFF
-C0001FF838FFFFFFC00007F870000000000001FFE00000000000003F803F407DBD43>82
-D<0007FC000C001FFF801C007FFFF03C01FC03F83C03F0007E7C07C0001FFC0F80000FFC
-1F800007FC3F000003FC3E000001FC7E000000FC7E000000FC7C0000007CFC0000007CFC
-0000007CFC0000003CFC0000003CFC0000003CFE0000001CFE0000001CFF0000001CFF00
-00001C7F800000007FC00000007FE00000003FF80000003FFF8000001FFFF800000FFFFF
-800007FFFFF00003FFFFFC0001FFFFFF0000FFFFFFC0003FFFFFE00007FFFFF000007FFF
-F0000007FFF80000007FFC0000000FFC00000007FE00000003FE00000001FE00000000FF
-00000000FFE00000007FE00000007FE00000007FE00000003FE00000003FF00000003FF0
-0000003FF00000003FF00000003EF80000003EF80000007EFC0000007CFE000000FCFF00
-0000F8FF800001F8FFC00003F0FFE00007E0F9FC000FC0F07F803F80F01FFFFE00E007FF
-F800C0007FC00028427BBF33>I<3FFFFFFFFFFFFF803FFFFFFFFFFFFF803FFFFFFFFFFF
-FF803FF0007FE001FF803F80003FC0003F807F00003FC0001FC07E00003FC00007C07C00
-003FC00007C07800003FC00003C07800003FC00003C07800003FC00003C07000003FC000
-01C07000003FC00001C07000003FC00001C07000003FC00001C07000003FC00001C0E000
-003FC00000E0E000003FC00000E0E000003FC00000E0E000003FC00000E0E000003FC000
-00E00000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
-003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC000
-00000000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
-003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC000
-00000000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
-003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC000
-00000000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
-003FC00000000000003FC00000000000003FC00000000000003FC00000000000007FE000
-0000000000FFF00000000007FFFFFFFE00000007FFFFFFFE00000007FFFFFFFE00003B3D
-7DBC42>I<FFFFFFC000FFFFF8FFFFFFC000FFFFF8FFFFFFC000FFFFF801FFE0000007FF
-00007F80000001FC00007F80000000F800007F800000007000007F800000007000007F80
-0000007000007F800000007000007F800000007000007F800000007000007F8000000070
-00007F800000007000007F800000007000007F800000007000007F800000007000007F80
-0000007000007F800000007000007F800000007000007F800000007000007F8000000070
-00007F800000007000007F800000007000007F800000007000007F800000007000007F80
-0000007000007F800000007000007F800000007000007F800000007000007F8000000070
-00007F800000007000007F800000007000007F800000007000007F800000007000007F80
-0000007000007F800000007000007F800000007000007F800000007000007F8000000070
-00007F800000007000007F800000007000007F800000007000007F800000007000007F80
-0000007000007F800000007000003F80000000F000003FC0000000E000003FC0000000E0
-00003FC0000001E000001FC0000001C000001FE0000001C000000FE0000003C000000FF0
-00000780000007F000000700000003F800000F00000001FC00001E00000000FE00003C00
-0000007F0000F8000000003F8001F0000000000FF00FE00000000003FFFF800000000000
-FFFE0000000000001FF00000003D407DBD44>I<FFFFFF00000FFFFEFFFFFF00000FFFFE
-FFFFFF00000FFFFE03FFE0000001FFE001FF800000007F8000FF800000003F00007F8000
-00003E00007F800000001C00007FC00000003C00003FC00000003800003FC00000003800
-003FE00000007800001FE00000007000001FE00000007000000FF0000000E000000FF000
-0000E000000FF8000001E0000007F8000001C0000007F8000001C0000007FC000003C000
-0003FC00000380000003FC00000380000001FE00000700000001FE00000700000001FF00
-000700000000FF00000E00000000FF00000E00000000FF80001E000000007F80001C0000
-00007F80001C000000007FC0003C000000003FC00038000000003FC00038000000001FE0
-0070000000001FE00070000000001FF000F0000000000FF000E0000000000FF000E00000
-00000FF801E00000000007F801C00000000007F801C00000000003FC03800000000003FC
-03800000000003FE07800000000001FE07000000000001FE07000000000001FF0F000000
-000000FF0E000000000000FF0E0000000000007F9C0000000000007F9C0000000000007F
-DC0000000000003FF80000000000003FF80000000000003FF80000000000001FF0000000
-0000001FF00000000000001FF00000000000000FE00000000000000FE000000000000007
-C000000000000007C000000000000007C000000000000003800000003F407EBD44>I<FF
-FFFE007FFFFF8007FFFFFFFFFE007FFFFF8007FFFFFFFFFE007FFFFF8007FFFF03FFC000
-01FFE00000FFF801FF000000FFC000003FE001FF0000007F8000000F8000FF0000007F80
-00000F8000FF0000007FC000000F0000FF8000003FC000000F00007F8000003FC000000E
-00007F8000003FE000000E00007F8000003FE000000E00003FC000003FE000001C00003F
-C000003FE000001C00003FC000007FF000001C00001FE000007FF000003800001FE00000
-7FF000003800001FE00000E7F800003800000FF00000E7F800007000000FF00000E7F800
-007000000FF00001C3FC00007000000FF80001C3FC0000F0000007F80001C3FC0000E000
-0007F80003C3FE0000E0000007FC000381FE0001E0000003FC000381FE0001C0000003FC
-000781FF0001C0000003FC000700FF0001C0000001FE000700FF000380000001FE000700
-FF000380000001FE000E007F800380000000FF000E007F800700000000FF000E007F8007
-00000000FF001C003FC007000000007F801C003FC00E000000007F801C003FC00E000000
-007F8038001FE00E000000007FC038001FE01E000000003FC038001FE01C000000003FC0
-78001FF01C000000003FE070000FF03C000000001FE070000FF038000000001FE0F0000F
-F838000000001FE0E00007F838000000000FF0E00007F870000000000FF0E00007F87000
-0000000FF1C00003FC700000000007F9C00003FCE00000000007F9C00003FCE000000000
-07FB800001FEE00000000003FF800001FFC00000000003FF800001FFC00000000003FF00
-0000FFC00000000003FF000000FFC00000000001FF000000FF800000000001FF000000FF
-800000000001FE0000007F800000000000FE0000007F000000000000FE0000007F000000
-000000FC0000003F0000000000007C0000003E0000000000007C0000003E000000000000
-780000001E000000000000380000001C00000058407EBD5D>I<FFFCFFFCFFFCFFFCF000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
-F000F000F000F000F000F000F000F000F000F000FFFCFFFCFFFCFFFC0E5B77C319>91
-D<018000C0038001C003000180070003800E0007001C000E0018000C0038001C00300018
-0070003800600030006000300060003000E0007000C0006000C0006000C0006000C00060
-00CF006780FFC07FE0FFE07FF0FFE07FF0FFE07FF07FE03FF07FE03FF03FE01FF03FC01F
-E00F0007801C1C73BE2D>I<FFFCFFFCFFFCFFFC003C003C003C003C003C003C003C003C
-003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
-003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
-003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
-003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
-003C003C003CFFFCFFFCFFFCFFFC0E5B7FC319>I<000FF800000000FFFE00000003F01F
-800000078007E000000F8003F000000FE001F800001FF001FC00001FF000FE00001FF000
-FE00001FF000FE00001FF0007F00000FE0007F00000380007F00000000007F0000000000
-7F00000000007F00000000007F000000001FFF00000003FFFF0000001FF87F0000007F80
-7F000001FC007F000007F8007F00000FE0007F00001FC0007F00003F80007F00003F8000
-7F00007F00007F00007F00007F0380FE00007F0380FE00007F0380FE00007F0380FE0000
-FF0380FE0000FF0380FE0000FF03807F0001FF03807F0003BF03803F80071F87001FC00E
-1FCF0007F03C0FFE0001FFF807FC00003FC001F000292A7DA82D>97
-D<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC03FC00
-0001FC1FFF800001FC7C07E00001FDE001F00001FFC000FC0001FF80007E0001FF00003F
-0001FE00003F8001FC00001F8001FC00001FC001FC00000FE001FC00000FE001FC00000F
-F001FC00000FF001FC000007F001FC000007F801FC000007F801FC000007F801FC000007
-F801FC000007F801FC000007F801FC000007F801FC000007F801FC000007F801FC000007
-F801FC000007F001FC000007F001FC00000FF001FC00000FF001FC00000FE001FC00001F
-E001FC00001FC001FE00001F8001FE00003F0001FF00007F0001FF8000FE0001F3C001F8
-0001F1E003F00001E0780FC00001C03FFF0000000007F800002D407EBE33>I<0001FF00
-00000FFFE000003F00F800007C001E0001F8001F0003F0007F0007F000FF800FE000FF80
-0FC000FF801FC000FF801FC000FF803F80007F003F80001C007F800000007F800000007F
-00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00
-000000FF00000000FF00000000FF00000000FF000000007F800000007F800000007F8000
-00003F800001C03FC00001C01FC00003C01FC00003800FE000078007F000070003F0000E
-0001F8001E0000FC007800003F01F000000FFFC0000001FE0000222A7DA828>I<000000
-01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC00000000
-01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000
-01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000
-01FC0000000001FC0000000001FC0000000001FC0000000001FC000000FF01FC000007FF
-E1FC00001F80F9FC00007E003DFC0000FC001FFC0003F80007FC0007F00007FC0007E000
-03FC000FC00001FC001FC00001FC003FC00001FC003F800001FC007F800001FC007F8000
-01FC007F000001FC007F000001FC00FF000001FC00FF000001FC00FF000001FC00FF0000
-01FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF0000
-01FC007F000001FC007F800001FC007F800001FC003F800001FC003F800001FC001FC000
-01FC000FC00003FC000FE00003FC0007E00007FC0003F0000FFE0001F8001FFF00007C00
-79FFF8003F01F1FFF8000FFFC1FFF80001FE01FC002D407DBE33>I<0001FE0000000FFF
-C000003F03F00000FC01F80001F800FC0003F0007E0007E0003F000FE0003F800FC0001F
-801FC0001FC03F80000FC03F80000FC07F80000FC07F80000FE07F00000FE07F00000FE0
-FF00000FE0FF00000FE0FFFFFFFFE0FFFFFFFFE0FF00000000FF00000000FF00000000FF
-00000000FF00000000FF000000007F000000007F000000007F800000003F800000003F80
-0000E01FC00000E01FC00001E00FC00001C007E00003C007F000078003F800070000FC00
-1E00007E003C00001F80F8000007FFE0000000FF0000232A7EA828>I<00001FC000007F
-F80001F83C0007E07E000FC0FF001FC1FF003F81FF003F01FF007F01FF007F00FE00FE00
-7C00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE0000FFFFFF00FFFFFF00FFFFFF0000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
-0000FE000000FE000000FE000000FE000001FF00007FFFFF007FFFFF007FFFFF0020407E
-BF1C>I<000000007C000003F801FF00001FFF078F80007E0FDE1F8000F803F81F8003F0
-01F81F8003F001F81F8007E000FC06000FE000FE00000FC0007E00001FC0007F00001FC0
-007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0
-007F00000FC0007E00000FE000FE000007E000FC000003F001F8000003F001F8000001F8
-03E0000003FE0FC00000071FFF0000000703F80000000600000000000E00000000000E00
-000000000E00000000000F00000000000F00000000000F80000000000FC00000000007FF
-FFE0000007FFFFFE000003FFFFFF800001FFFFFFE00000FFFFFFF00003FFFFFFF8000FC0
-001FFC001F000001FE003E000000FE007C0000007E007C0000003F00F80000003F00F800
-00001F00F80000001F00F80000001F00F80000001F00FC0000003F007C0000003E007E00
-00007E003F000000FC001F800001F8000FC00003F00003F0000FC00000FE007F0000003F
-FFFC00000003FFC00000293D7EA82D>I<01FC00000000FFFC00000000FFFC00000000FF
-FC0000000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC01FE000001FC07FFC00001FC1E07E00001FC7803F00001
-FCE001F80001FDC001FC0001FD8001FC0001FF8000FE0001FF0000FE0001FF0000FE0001
-FE0000FE0001FE0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0003FE0001FF00FFFFF87FFFFCFFFFF87FFFFCFFFFF87FFFFC2E
-3F7DBE33>I<01E00007F80007F8000FFC000FFC000FFC000FFC0007F80007F80001E000
-000000000000000000000000000000000000000000000000000000000000000000000000
-01FC007FFC007FFC007FFC0007FC0003FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-03FE00FFFFF0FFFFF0FFFFF0143E7DBD1A>I<0000780001FE0001FE0003FF0003FF0003
-FF0003FF0001FE0001FE0000780000000000000000000000000000000000000000000000
-0000000000000000000000000000007F007FFF007FFF007FFF0001FF0000FF00007F0000
-7F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000
-7F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000
-7F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000
-7F00007F00007F00007F3E007F7F007FFF807EFF80FEFF80FEFF80FCFF81F87F01F87C03
-F01E07C00FFF8001FC00185185BD1C>I<01FC00000000FFFC00000000FFFC00000000FF
-FC0000000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC00FFFF8001FC00FFFF8001FC00FFFF8001
-FC003FFC0001FC003FE00001FC003F800001FC003F000001FC003C000001FC0078000001
-FC00F0000001FC01E0000001FC07C0000001FC0F80000001FC1F00000001FC3E00000001
-FC7F00000001FCFF80000001FDFF80000001FFDFC0000001FF9FE0000001FF0FE0000001
-FE07F0000001FC07F8000001F803FC000001F801FC000001F801FE000001F800FF000001
-F8007F000001F8007F800001F8003FC00001F8001FC00001F8001FE00001F8000FF00001
-F8000FF00001F8000FF80003FC000FFE00FFFFF07FFFE0FFFFF07FFFE0FFFFF07FFFE02B
-3F7EBE30>I<01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0003FE00FFFFF8FFFFF8FFFFF8153F7DBE1A>I<01F801FE0000FF0000FFF807FFC0
-03FFE000FFF81E07E00F03F000FFF87803F03C01F80007F8E001F87000FC0003F9C001FC
-E000FE0001F98001FCC000FE0001FB8000FFC0007F0001FB0000FF80007F0001FF0000FF
-80007F0001FE0000FF00007F0001FE0000FF00007F0001FC0000FE00007F0001FC0000FE
-00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
-00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
-00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
-00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
-00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
-00007F0001FC0000FE00007F0001FC0000FE00007F0003FE0001FF0000FF80FFFFF87FFF
-FC3FFFFEFFFFF87FFFFC3FFFFEFFFFF87FFFFC3FFFFE47287DA74C>I<01F801FE0000FF
-F807FFC000FFF81E07E000FFF87803F00007F8E001F80003F9C001FC0001F98001FC0001
-FB8000FE0001FB0000FE0001FF0000FE0001FE0000FE0001FE0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
-FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0003FE0001FF00FF
-FFF87FFFFCFFFFF87FFFFCFFFFF87FFFFC2E287DA733>I<0000FF00000007FFE000001F
-81F800007E007E0000F8001F0001F0000F8003E00007C007C00003E00FC00003F01F8000
-01F81F800001F83F800001FC3F800001FC7F000000FE7F000000FE7F000000FE7F000000
-FEFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FF
-FF000000FFFF000000FF7F000000FE7F000000FE7F000000FE3F800001FC3F800001FC3F
-800001FC1F800001F80FC00003F00FC00003F007E00007E003F0000FC001F8001F80007E
-007E00003F81FC00000FFFF0000000FF0000282A7EA82D>I<01FC03FC0000FFFC1FFF80
-00FFFC7C0FE000FFFDE003F00003FFC001FC0001FF8000FE0001FF00007F0001FE00003F
-8001FC00003F8001FC00001FC001FC00001FE001FC00001FE001FC00000FF001FC00000F
-F001FC00000FF001FC000007F801FC000007F801FC000007F801FC000007F801FC000007
-F801FC000007F801FC000007F801FC000007F801FC000007F801FC000007F801FC00000F
-F001FC00000FF001FC00000FF001FC00000FF001FC00001FE001FC00001FE001FC00003F
-C001FE00003F8001FE00007F0001FF00007F0001FF8000FE0001FFC001F80001FDE007F0
-0001FC780FC00001FC3FFF000001FC07F8000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000003FE00000000FFFFF80000
-00FFFFF8000000FFFFF80000002D3A7EA733>I<0000FF001C000007FFC03C00001F80F0
-3C00007F00387C0000FC001C7C0003F8000E7C0007F0000FFC0007F00007FC000FE00003
-FC001FE00003FC003FC00003FC003FC00001FC007F800001FC007F800001FC007F800001
-FC007F800001FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF000001
-FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC007F800001
-FC007F800001FC007F800001FC003FC00001FC003FC00001FC001FC00003FC000FE00003
-FC000FE00007FC0007F0000FFC0003F8000FFC0001FC003DFC00007E0079FC00003F81F1
-FC00000FFFC1FC000001FE01FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000003FE00000000FFFFF8000000FF
-FFF8000000FFFFF82D3A7DA730>I<01F807E0FFF81FF8FFF8787CFFF8E1FE07F9C1FE03
-F981FE01FB81FE01FB01FE01FB00FC01FF003001FE000001FE000001FE000001FC000001
-FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001
-FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001
-FC000001FC000001FC000001FC000003FE0000FFFFFE00FFFFFE00FFFFFE001F287EA724
->I<003FC06001FFF8E007C03FE01F000FE03E0007E03C0003E07C0003E0780001E0F800
-01E0F80000E0F80000E0FC0000E0FE0000E0FF0000E0FF8000007FF800007FFFC0003FFF
-F8001FFFFE000FFFFF0007FFFF8001FFFFC0003FFFE00003FFF000001FF000000FF8E000
-03F8E00003F8E00001F8F00001F8F00000F8F00000F8F80000F8F80000F0FC0000F0FC00
-01F0FE0001E0FF0003C0FF800780F3E01F00E0FFFC00C01FE0001D2A7DA824>I<001C00
-00001C0000001C0000001C0000001C0000001C0000003C0000003C0000003C0000003C00
-00007C0000007C000000FC000000FC000001FC000003FC000007FC00001FFFFFC0FFFFFF
-C0FFFFFFC001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
-0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
-0001FC000001FC000001FC000001FC00E001FC00E001FC00E001FC00E001FC00E001FC00
-E001FC00E001FC00E001FC00E000FC00E000FE01C000FE01C0007F03C0003F0380001F87
-000007FE000001F8001B397EB723>I<01FC0000FE00FFFC007FFE00FFFC007FFE00FFFC
-007FFE0007FC0003FE0003FC0001FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
-0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
-0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
-0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
-0000FE0001FC0000FE0001FC0001FE0001FC0001FE0001FC0001FE0001FC0003FE0000FC
-0003FE0000FC0007FE0000FE0006FF00007E000EFF80003F001CFFFC001FC078FFFC0007
-FFE0FFFC0000FF80FE002E297DA733>I<FFFFE00FFFE0FFFFE00FFFE0FFFFE00FFFE007
-FE0003FF0003FC0000FC0003FC0000F80001FC0000F00001FE0000F00000FE0000E00000
-FE0000E00000FF0001E000007F0001C000007F0001C000003F80038000003F8003800000
-3FC0078000001FC0070000001FC0070000000FE00E0000000FE00E0000000FF01E000000
-07F01C00000007F01C00000003F83800000003F83800000003FC7800000001FC70000000
-01FC7000000001FEF000000000FEE000000000FEE0000000007FC0000000007FC0000000
-007FC0000000003F80000000003F80000000001F00000000001F00000000001F00000000
-000E0000002B287EA630>I<FFFFC3FFFE03FFF8FFFFC3FFFE03FFF8FFFFC3FFFE03FFF8
-0FFE003FE000FFC007FC001FC0003F8003F8001FC0003F0003FC000FC0001E0001FC000F
-E0001C0001FC0007E0001C0001FE0007E0003C0000FE000FF000380000FE000FF0003800
-007F000FF0007000007F001FF8007000007F001DF8007000003F801DF800E000003F803D
-FC00E000003F8038FC00E000001FC038FC01C000001FC078FE01C000001FC0707E03C000
-000FE0707F038000000FE0E03F038000000FF0E03F0780000007F0E03F8700000007F1C0
-1F8700000007F9C01F8F00000003F9C01FCE00000003FB800FCE00000003FF800FDE0000
-0001FF800FFC00000001FF0007FC00000000FF0007F800000000FF0007F800000000FE00
-03F8000000007E0003F0000000007E0003F0000000007C0001F0000000003C0001E00000
-0000380000E000003D287EA642>I<FFFFF01FFFE0FFFFF01FFFE0FFFFF01FFFE003FFC0
-0FFF0000FF8007F800007F0007E000007F8007C000003FC0078000001FC00F0000000FE0
-0E0000000FF01E00000007F83C00000003F87800000001FCF000000001FEE000000000FF
-E0000000007FC0000000003F80000000003FC0000000001FC0000000001FE0000000003F
-F0000000003FF8000000007BF800000000F1FC00000001E1FE00000001C0FF00000003C0
-7F00000007803F8000000F003FC000001E001FE000003E000FE000007C0007F00000FC00
-07F80001FE0007FC000FFE000FFE00FFFF803FFFF8FFFF803FFFF8FFFF803FFFF82D277F
-A630>I<FFFFE00FFFE0FFFFE00FFFE0FFFFE00FFFE007FE0003FF0003FC0001FC0003FC
-0000F80001FC0000F00001FE0000F00000FE0000E00000FE0000E000007F0001C000007F
-0001C000007F8003C000003F80038000003F80038000001FC0070000001FC0070000001F
-E00F0000000FE00E0000000FE00E00000007F01C00000007F01C00000007F83C00000003
-F83800000003F83800000001FC7000000001FC7000000001FEF000000000FEE000000000
-FEE0000000007FC0000000007FC0000000007FC0000000003F80000000003F8000000000
-3F80000000001F00000000001F00000000000E00000000000E00000000001E0000000000
-1C00000000003C0000000000380000000000380000000000780000001800700000007E00
-70000000FF00E0000000FF00E0000000FF01C0000000FF01C0000000FE03800000007E07
-00000000780E000000003C3C000000001FF80000000007E0000000002B3A7EA630>I<1F
-FFFFFF801FFFFFFF801FE000FF801F8000FF001F0001FE001E0003FC001C0003FC001C00
-07F8003C000FF0003C001FF00038001FE00038003FC00038007FC00038007F80003800FF
-00000001FE00000001FE00000003FC00000007F80000000FF80000000FF00000001FE000
-00003FC00380003FC00380007F80038000FF00038001FF00038001FE00038003FC000780
-07FC00078007F80007000FF00007001FE0000F001FE0000F003FC0001F007F80007F00FF
-8001FF00FFFFFFFF00FFFFFFFF0021277EA628>I<FFFFFFFFFFFFFFFFFFFFFFC0FFFFFF
-FFFFFFFFFFFFFFFFC05A0280985B>124 D E /Fq 45 122 df<00000000FFFC00000000
-00001FFFFF800000000001FFFFFFE00000000007FFFFFFF0000000001FFFC00FF8000000
-007FFE0003FC00000000FFF00000FE00000001FFE00003FF00000003FF800007FF000000
-07FF00000FFF8000000FFE00001FFF8000000FFE00001FFF8000001FFC00001FFF800000
-1FFC00003FFFC000003FFC00001FFF8000003FF800001FFF8000003FF800001FFF800000
-3FF800001FFF8000003FF800000FFF0000003FF8000007FE0000003FF8000001F8000000
-3FF8000000000000003FF8000000000000003FF8000000000000003FF800000000000000
-3FF8000000000000003FF8000000000000003FF8000000000000003FF800000000000000
-3FF8000000000000003FF80003FFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FF
-FFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000003FFC000007FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
-3FFC000003FFC000003FFC000003FFC0003FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03F
-FFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC042547DD34B>12
-D<FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0
-FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0240B7F9F2D>45
-D<000000780000000000FC0000000003FC0000000007FC000000001FFC00000000FFFC00
-00000FFFFC000007FFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFF7FFC0000FFF07FFC00
-00F8007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
-0000007FFC00007FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFF
-FE2F4E76CD43>49 D<00003FFE0000000003FFFFE00000000FFFFFFC0000003FFFFFFF00
-0000FFFFFFFFC00001FFC07FFFE00003FE000FFFF80007F80003FFFC000FE00001FFFE00
-1FC00000FFFF003F8000007FFF003FF000007FFF807FF800003FFFC07FFC00003FFFC0FF
-FE00001FFFE0FFFF00001FFFE0FFFF00001FFFE0FFFF00000FFFF0FFFF00000FFFF0FFFF
-00000FFFF0FFFF00000FFFF0FFFF00000FFFF07FFE00000FFFF07FFE00000FFFF03FFC00
-000FFFF00FF000000FFFF003C000000FFFF0000000000FFFE0000000001FFFE000000000
-1FFFE0000000001FFFC0000000003FFFC0000000003FFF80000000003FFF80000000007F
-FF00000000007FFE0000000000FFFC0000000001FFF80000000001FFF00000000003FFE0
-0000000003FFC00000000007FF80000000000FFF00000000001FFE00000000001FFC0000
-0000003FF800000000007FE00000000000FFC00000000001FF800000000003FE00000000
-0007FC000000000007F800000000000FF00001F000001FE00001F000003F800001F00000
-7F000001F00000FE000003E00001FC000003E00003F8000003E00007F0000003E0000FE0
-000003E0001F80000007E0003F00000007E0003E0000000FE0007FFFFFFFFFE000FFFFFF
-FFFFC001FFFFFFFFFFC003FFFFFFFFFFC007FFFFFFFFFFC00FFFFFFFFFFFC01FFFFFFFFF
-FFC03FFFFFFFFFFFC07FFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFFFF80FFFFFFFFFFFF
-80FFFFFFFFFFFF80FFFFFFFFFFFF80344E79CD43>I<00000FFFC000000000FFFFFC0000
-0007FFFFFF8000001FFFFFFFE000003FF807FFF00000FF8001FFFC0001FE00007FFE0003
-F800003FFF0003F000003FFF8007FC00001FFF800FFF00001FFFC00FFF80001FFFC01FFF
-C0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFE0001FFFE01FFFC0
-001FFFE01FFFC0001FFFE01FFFC0001FFFE00FFFC0001FFFC007FF80001FFFC003FF0000
-3FFFC001FC00003FFF80000000003FFF80000000007FFF00000000007FFE00000000007F
-FE0000000000FFFC0000000001FFF80000000003FFF00000000007FFC0000000000FFF80
-00000000FFFE00000000FFFFF800000000FFFFE000000000FFFFFC00000000FFFFFF8000
-00000007FFE00000000001FFF800000000007FFE00000000003FFF00000000001FFF8000
-0000000FFFC0000000000FFFE00000000007FFF00000000007FFF00000000007FFF80000
-000007FFF80000000003FFFC0000000003FFFC0000000003FFFE0000000003FFFE03E000
-0003FFFE0FF8000003FFFE1FFC000003FFFE3FFE000003FFFE7FFF000003FFFEFFFF8000
-03FFFEFFFF800003FFFEFFFF800003FFFEFFFF800003FFFCFFFF800003FFFCFFFF800007
-FFFCFFFF800007FFF8FFFF000007FFF87FFF000007FFF07FFE00000FFFF03FFC00000FFF
-E03FF000001FFFC01FE000003FFF800FF800007FFF0007FF0000FFFE0003FFF007FFFC00
-00FFFFFFFFF000007FFFFFFFE000001FFFFFFF80000003FFFFFC000000001FFF80000037
-4F7ACD43>I<00000000007C00000000000000FE00000000000000FE00000000000001FE
-00000000000003FE00000000000007FE0000000000000FFE0000000000000FFE00000000
-00001FFE0000000000003FFE0000000000007FFE0000000000007FFE000000000000FFFE
-000000000001FFFE000000000003FFFE000000000003FFFE000000000007FFFE00000000
-000FFFFE00000000001FBFFE00000000003F3FFE00000000003E3FFE00000000007C3FFE
-0000000000FC3FFE0000000001F83FFE0000000001F03FFE0000000003E03FFE00000000
-07E03FFE000000000FC03FFE000000000F803FFE000000001F003FFE000000003F003FFE
-000000007E003FFE000000007C003FFE00000000F8003FFE00000001F8003FFE00000003
-F0003FFE00000007E0003FFE00000007C0003FFE0000000F80003FFE0000001F80003FFE
-0000003F00003FFE0000003E00003FFE0000007C00003FFE000000FC00003FFE000001F8
-00003FFE000001F000003FFE000003E000003FFE000007E000003FFE00000FC000003FFE
-00001F8000003FFE00001F0000003FFE00003E0000003FFE00007E0000003FFE0000FC00
-00003FFE0000FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFF
-FFC0FFFFFFFFFFFFFFC0000000007FFE0000000000007FFE0000000000007FFE00000000
-00007FFE0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE
-0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE00000000
-00007FFE0000000000007FFE0000000000007FFE000000000FFFFFFFFFC000000FFFFFFF
-FFC000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFFFFC03A4F7CCE43>I<038000
-00000E0007E00000007E0007FE000003FE0007FFF0007FFE0007FFFFFFFFFC0007FFFFFF
-FFF80007FFFFFFFFF00007FFFFFFFFE00007FFFFFFFFC00007FFFFFFFF800007FFFFFFFF
-000007FFFFFFFE000007FFFFFFFC000007FFFFFFF0000007FFFFFFC0000007FFFFFF0000
-0007FFFFF800000007E1FF0000000007E0000000000007E0000000000007E00000000000
-07E0000000000007E0000000000007E0000000000007E0000000000007E0000000000007
-E0000000000007E0000000000007E0000000000007E00FFF00000007E07FFFF0000007E3
-FFFFFE000007E7FFFFFF800007FFF807FFC00007FFC001FFE00007FE0000FFF80007FC00
-007FFC0007F800003FFC0007F000003FFE0007E000001FFF0003C000001FFF8000000000
-1FFF80000000001FFFC0000000000FFFC0000000000FFFE0000000000FFFE0000000000F
-FFE0000000000FFFE0000000000FFFF0000000000FFFF0000000000FFFF00FE000000FFF
-F01FF000000FFFF03FF800000FFFF07FFC00000FFFF0FFFE00000FFFF0FFFE00000FFFF0
-FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFE0FFFE00000FFFE0FFFE00000FFFE0FF
-FC00000FFFE07FF800001FFFC07FF000001FFFC07FE000001FFF803E0000003FFF803F00
-00003FFF001F8000007FFE001FC000007FFC000FE00000FFF80007F80001FFF00003FE00
-07FFE00001FFC03FFFC00000FFFFFFFF8000003FFFFFFE0000001FFFFFF800000003FFFF
-C0000000007FF8000000344F79CD43>I<0000000FFF0000000000FFFFE000000007FFFF
-F00000001FFFFFFC0000007FFE03FE000001FFF0007F000003FFC0003F800007FF00001F
-80000FFE00007FC0001FFC0000FFC0003FF80001FFE0007FF00003FFE000FFF00007FFE0
-01FFE00007FFE001FFE00007FFE003FFC00007FFE007FFC00007FFE007FFC00007FFE00F
-FFC00003FFC00FFF800001FF801FFF800000FF001FFF8000007E001FFF80000000003FFF
-80000000003FFF80000000003FFF00000000007FFF00000000007FFF00000000007FFF00
-080000007FFF01FFF800007FFF07FFFF0000FFFF0FFFFFC000FFFF1FFFFFF000FFFF3F00
-7FF800FFFF3C003FFC00FFFF78001FFE00FFFFF0000FFF00FFFFF00007FF80FFFFE00007
-FFC0FFFFE00007FFC0FFFFC00007FFE0FFFFC00003FFF0FFFF800003FFF0FFFF800003FF
-F8FFFF800003FFF8FFFF800003FFF8FFFF800003FFF8FFFF000003FFFCFFFF000003FFFC
-FFFF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC7F
-FF000003FFFC7FFF000003FFFC3FFF000003FFFC3FFF000003FFFC3FFF000003FFFC3FFF
-000003FFFC1FFF000003FFF81FFF800003FFF81FFF800003FFF80FFF800003FFF80FFF80
-0003FFF007FF800007FFF007FF800007FFE003FFC00007FFC001FFC00007FFC001FFE000
-0FFF8000FFF0000FFF00007FF8001FFE00003FFC007FFC00001FFF01FFF800000FFFFFFF
-F0000003FFFFFFC0000000FFFFFF000000003FFFFC0000000007FFC00000364F7ACD43>
-I<1F000000000000001F800000000000001FC00000000000001FFF8000000000001FFFFF
-FFFFFFFF801FFFFFFFFFFFFF801FFFFFFFFFFFFF801FFFFFFFFFFFFF803FFFFFFFFFFFFF
-803FFFFFFFFFFFFF003FFFFFFFFFFFFE003FFFFFFFFFFFFC003FFFFFFFFFFFF8003FFFFF
-FFFFFFF8003FFFFFFFFFFFF0003FFFFFFFFFFFE0003FFFFFFFFFFFC0007FFFFFFFFFFF80
-007F800000007F00007E00000000FF00007E00000001FE00007C00000003FC00007C0000
-0003F800007C00000007F000007C0000000FF000007C0000001FE00000F80000003FC000
-00F80000007F800000F80000007F000000F8000000FE00000000000001FE000000000000
-03FC00000000000003F800000000000007F00000000000000FF00000000000001FE00000
-000000001FE00000000000003FC00000000000003FC00000000000007F80000000000000
-FF80000000000000FF80000000000001FF00000000000001FF00000000000003FF000000
-00000003FE00000000000007FE00000000000007FE0000000000000FFE0000000000000F
-FE0000000000000FFC0000000000001FFC0000000000001FFC0000000000003FFC000000
-0000003FFC0000000000003FFC0000000000003FFC0000000000007FFC0000000000007F
-F80000000000007FF80000000000007FF8000000000000FFF8000000000000FFF8000000
-000000FFF8000000000000FFF8000000000000FFF8000000000001FFF8000000000001FF
-F8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000
-000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FF
-F8000000000001FFF8000000000000FFF0000000000000FFF00000000000003FC0000000
-0000001F8000000000395279D043>I<000007FFC0000000007FFFFC00000003FFFFFF80
-00000FFFFFFFE000001FFC01FFF800003FE0003FFC00007F80000FFE0000FF000007FF00
-01FE000003FF0003FC000001FF8007FC000001FFC007F8000000FFC00FF8000000FFC00F
-F8000000FFE00FF80000007FE00FF80000007FE01FF80000007FE01FFC0000007FE01FFC
-0000007FE01FFE0000007FE01FFF0000007FE01FFF800000FFE01FFFE00000FFC01FFFF8
-0000FFC01FFFFE0001FF800FFFFF0001FF800FFFFFC003FF000FFFFFF007FE0007FFFFF8
-07FC0007FFFFFE1FF80003FFFFFFBFF00001FFFFFFFFE00001FFFFFFFF800000FFFFFFFE
-0000007FFFFFFF0000003FFFFFFF8000000FFFFFFFE0000007FFFFFFF0000001FFFFFFFC
-000007FFFFFFFE00001FFFFFFFFF00003FFFFFFFFF8000FFE7FFFFFF8001FF81FFFFFFC0
-03FF007FFFFFE007FE001FFFFFF00FFC000FFFFFF01FF80003FFFFF01FF80000FFFFF83F
-F000007FFFF83FF000001FFFF87FE0000007FFFC7FE0000001FFFC7FE0000000FFFCFFC0
-0000007FFCFFC00000003FFCFFC00000003FFCFFC00000001FFCFFC00000001FFCFFC000
-00000FFCFFC00000000FFCFFC00000000FF8FFC00000000FF8FFE00000000FF87FE00000
-000FF07FF00000001FF07FF00000001FF03FF80000003FE01FF80000003FC01FFC000000
-7FC00FFE000000FF8007FF800003FF0003FFE0000FFE0001FFFC00FFFC00007FFFFFFFF0
-00003FFFFFFFE000000FFFFFFF80000001FFFFFC000000000FFFC00000364F7ACD43>I<
-00000FFF8000000000FFFFF800000003FFFFFE0000000FFFFFFF8000001FFF03FFC00000
-7FF800FFE00000FFF0003FF00001FFE0001FF80003FFC0001FFC0007FFC0000FFE000FFF
-80000FFF000FFF800007FF001FFF800007FF803FFF800007FF803FFF000007FFC07FFF00
-0007FFC07FFF000003FFE07FFF000003FFE07FFF000003FFF0FFFF000003FFF0FFFF0000
-03FFF0FFFF000003FFF0FFFF000003FFF8FFFF000003FFF8FFFF000003FFF8FFFF000003
-FFF8FFFF000003FFF8FFFF000003FFF8FFFF000003FFFCFFFF000003FFFCFFFF000003FF
-FCFFFF000003FFFC7FFF000007FFFC7FFF000007FFFC7FFF000007FFFC3FFF000007FFFC
-3FFF000007FFFC3FFF00000FFFFC1FFF80000FFFFC0FFF80001FFFFC0FFF80001FFFFC07
-FF80003FFFFC03FFC0003FFFFC01FFE0007BFFFC00FFF000F3FFFC007FF803F3FFFC001F
-FFFFE3FFFC000FFFFFC3FFFC0003FFFF83FFF800007FFE03FFF80000004003FFF8000000
-0003FFF80000000003FFF80000000003FFF00000000007FFF00000000007FFF000000000
-07FFF001F8000007FFE003FC000007FFE007FE000007FFC00FFF000007FFC01FFF80000F
-FF801FFF80000FFF801FFF80000FFF001FFF80001FFF001FFF80001FFE001FFF80003FFC
-001FFF00003FFC000FFE00007FF8000FFC0000FFF0000FF80001FFE00007F00003FFC000
-03FC000FFF800003FF807FFE000001FFFFFFFC0000007FFFFFF00000003FFFFFC0000000
-0FFFFE0000000000FFF0000000364F7ACD43>I<00000000001F00000000000000000000
-003F80000000000000000000007FC0000000000000000000007FC0000000000000000000
-00FFE000000000000000000000FFE000000000000000000000FFE0000000000000000000
-01FFF000000000000000000001FFF000000000000000000003FFF8000000000000000000
-03FFF800000000000000000003FFF800000000000000000007FFFC000000000000000000
-07FFFC00000000000000000007FFFC0000000000000000000FFFFE000000000000000000
-0FFFFE0000000000000000001FFFFF0000000000000000001FFFFF000000000000000000
-1FFFFF0000000000000000003FFFFF8000000000000000003F7FFF800000000000000000
-7F7FFFC000000000000000007E7FFFC000000000000000007E3FFFC00000000000000000
-FE3FFFE00000000000000000FC1FFFE00000000000000001FC1FFFF00000000000000001
-F81FFFF00000000000000001F80FFFF00000000000000003F80FFFF80000000000000003
-F007FFF80000000000000007F007FFFC0000000000000007E007FFFC0000000000000007
-E003FFFC000000000000000FE003FFFE000000000000000FC001FFFE000000000000001F
-C001FFFF000000000000001F8001FFFF000000000000001F8000FFFF000000000000003F
-8000FFFF800000000000003F00007FFF800000000000007F00007FFFC00000000000007E
-00007FFFC00000000000007E00003FFFC0000000000000FE00003FFFE0000000000000FC
-00001FFFE0000000000001FC00001FFFF0000000000001F800001FFFF0000000000001F8
-00000FFFF0000000000003F800000FFFF8000000000003F0000007FFF8000000000007F0
-000007FFFC000000000007E0000007FFFC000000000007E0000003FFFC00000000000FFF
-FFFFFFFFFE00000000000FFFFFFFFFFFFE00000000001FFFFFFFFFFFFF00000000001FFF
-FFFFFFFFFF00000000001FFFFFFFFFFFFF00000000003F80000000FFFF80000000003F00
-0000007FFF80000000007F000000007FFFC0000000007F000000007FFFC0000000007E00
-0000003FFFC000000000FE000000003FFFE000000000FC000000001FFFE000000001FC00
-0000001FFFF000000001FC000000001FFFF000000001F8000000000FFFF000000003F800
-0000000FFFF800000003F00000000007FFF800000007F00000000007FFFC00000007F000
-00000007FFFC00000007E00000000003FFFC0000000FE00000000003FFFE0000000FC000
-00000003FFFE0000001FC00000000001FFFF000000FFFC0000000001FFFF0000FFFFFFF8
-00000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF8
-00000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE05B547BD366>65
-D<0000000001FFFC000001C0000000007FFFFFC00003C000000007FFFFFFF80007C00000
-003FFFFFFFFE001FC0000000FFFFFFFFFF803FC0000003FFFFE003FFC07FC000000FFFFC
-00003FF0FFC000003FFFE000000FF9FFC000007FFF80000003FFFFC00001FFFE00000000
-FFFFC00003FFF8000000007FFFC00007FFF0000000003FFFC0000FFFE0000000001FFFC0
-001FFFC0000000000FFFC0003FFF800000000007FFC0007FFF000000000003FFC000FFFE
-000000000001FFC000FFFE000000000001FFC001FFFC000000000000FFC003FFF8000000
-000000FFC003FFF80000000000007FC007FFF00000000000007FC00FFFF0000000000000
-3FC00FFFF00000000000003FC01FFFE00000000000001FC01FFFE00000000000001FC01F
-FFE00000000000001FC03FFFC00000000000001FC03FFFC00000000000000FC03FFFC000
-00000000000FC07FFFC00000000000000FC07FFFC00000000000000FC07FFFC000000000
-000000007FFF8000000000000000007FFF800000000000000000FFFF8000000000000000
-00FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF
-800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF800000
-000000000000FFFF800000000000000000FFFF800000000000000000FFFF800000000000
-000000FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000
-7FFF8000000000000000007FFF8000000000000000007FFFC000000000000000007FFFC0
-00000000000000007FFFC000000000000007C03FFFC000000000000007C03FFFC0000000
-00000007C03FFFC000000000000007C01FFFE000000000000007C01FFFE0000000000000
-07C01FFFE00000000000000FC00FFFF00000000000000F800FFFF00000000000000F8007
-FFF00000000000001F8003FFF80000000000001F8003FFF80000000000001F0001FFFC00
-00000000003F0000FFFE0000000000007E0000FFFE0000000000007E00007FFF00000000
-0000FC00003FFF800000000001F800001FFFC00000000003F800000FFFE00000000007F0
-000007FFF0000000000FE0000003FFFC000000001FC0000001FFFE000000007F80000000
-7FFF80000000FF000000003FFFE0000007FE000000000FFFFE00001FF80000000003FFFF
-E001FFF00000000000FFFFFFFFFFC000000000003FFFFFFFFF00000000000007FFFFFFFC
-000000000000007FFFFFE00000000000000001FFFC00000000525479D261>67
-D<FFFFFFFFFFFFFF8000000000FFFFFFFFFFFFFFFC00000000FFFFFFFFFFFFFFFF800000
-00FFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFFC0000000007FFF000000FFFFF0000
-000007FFF0000000FFFFC000000007FFF00000001FFFE000000007FFF000000007FFF800
-000007FFF000000001FFFC00000007FFF000000000FFFE00000007FFF0000000007FFF00
-000007FFF0000000003FFF80000007FFF0000000001FFFC0000007FFF0000000000FFFC0
-000007FFF00000000007FFE0000007FFF00000000003FFF0000007FFF00000000003FFF8
-000007FFF00000000001FFF8000007FFF00000000001FFFC000007FFF00000000000FFFC
-000007FFF00000000000FFFE000007FFF00000000000FFFE000007FFF000000000007FFF
-000007FFF000000000007FFF000007FFF000000000007FFF000007FFF000000000007FFF
-800007FFF000000000003FFF800007FFF000000000003FFF800007FFF000000000003FFF
-C00007FFF000000000003FFFC00007FFF000000000003FFFC00007FFF000000000003FFF
-C00007FFF000000000003FFFC00007FFF000000000003FFFE00007FFF000000000003FFF
-E00007FFF000000000003FFFE00007FFF000000000001FFFE00007FFF000000000001FFF
-E00007FFF000000000001FFFE00007FFF000000000001FFFE00007FFF000000000001FFF
-E00007FFF000000000001FFFE00007FFF000000000001FFFE00007FFF000000000001FFF
-E00007FFF000000000001FFFE00007FFF000000000003FFFE00007FFF000000000003FFF
-E00007FFF000000000003FFFE00007FFF000000000003FFFC00007FFF000000000003FFF
-C00007FFF000000000003FFFC00007FFF000000000003FFFC00007FFF000000000003FFF
-C00007FFF000000000003FFF800007FFF000000000003FFF800007FFF000000000007FFF
-800007FFF000000000007FFF000007FFF000000000007FFF000007FFF000000000007FFF
-000007FFF00000000000FFFE000007FFF00000000000FFFE000007FFF00000000000FFFC
-000007FFF00000000001FFFC000007FFF00000000001FFF8000007FFF00000000003FFF0
-000007FFF00000000007FFF0000007FFF00000000007FFE0000007FFF0000000000FFFC0
-000007FFF0000000001FFF80000007FFF0000000003FFF00000007FFF000000000FFFE00
-000007FFF000000001FFFC00000007FFF000000007FFF800000007FFF00000001FFFF000
-000007FFF0000000FFFFC000000007FFF000000FFFFF000000FFFFFFFFFFFFFFFFFE0000
-00FFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFC0000000FFFFFFFFFFFFFFFC000000
-00FFFFFFFFFFFFFF80000000005B527CD167>I<FFFFFFFFFFFFFFFFFF80FFFFFFFFFFFF
-FFFFFF80FFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFF800007
-FFF8000001FFFFC00007FFF80000001FFFC00007FFF800000007FFC00007FFF800000001
-FFC00007FFF800000000FFC00007FFF8000000007FC00007FFF8000000003FC00007FFF8
-000000001FC00007FFF8000000001FC00007FFF8000000000FE00007FFF8000000000FE0
-0007FFF80000000007E00007FFF80000000007E00007FFF80000000007E00007FFF80000
-000003E00007FFF80000000003E00007FFF80000000003E00007FFF80000F80003E00007
-FFF80000F80003F00007FFF80000F80001F00007FFF80000F80001F00007FFF80000F800
-01F00007FFF80000F80001F00007FFF80000F80000000007FFF80001F80000000007FFF8
-0001F80000000007FFF80001F80000000007FFF80003F80000000007FFF80007F8000000
-0007FFF8000FF80000000007FFF8007FF80000000007FFFFFFFFF80000000007FFFFFFFF
-F80000000007FFFFFFFFF80000000007FFFFFFFFF80000000007FFFFFFFFF80000000007
-FFF8007FF80000000007FFF8000FF80000000007FFF80007F80000000007FFF80003F800
-00000007FFF80001F80000000007FFF80001F80000000007FFF80001F80000000007FFF8
-0000F80000000007FFF80000F800003E0007FFF80000F800003E0007FFF80000F800003E
-0007FFF80000F800007C0007FFF80000F800007C0007FFF80000F800007C0007FFF80000
-0000007C0007FFF800000000007C0007FFF80000000000FC0007FFF80000000000FC0007
-FFF80000000000F80007FFF80000000000F80007FFF80000000001F80007FFF800000000
-01F80007FFF80000000001F80007FFF80000000003F80007FFF80000000003F00007FFF8
-0000000007F00007FFF8000000000FF00007FFF8000000000FF00007FFF8000000001FF0
-0007FFF8000000003FF00007FFF8000000007FE00007FFF800000001FFE00007FFF80000
-0007FFE00007FFF80000001FFFE00007FFF8000003FFFFE0FFFFFFFFFFFFFFFFFFE0FFFF
-FFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFF
-FFC04F517CD058>I<FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFF
-FFFE00FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFE000007FFF8000007FFFF000007FF
-F80000007FFF000007FFF80000001FFF000007FFF800000007FF000007FFF800000003FF
-000007FFF800000001FF000007FFF800000000FF000007FFF8000000007F000007FFF800
-0000003F000007FFF8000000003F800007FFF8000000003F800007FFF8000000001F8000
-07FFF8000000001F800007FFF8000000001F800007FFF8000000000F800007FFF8000000
-000F800007FFF8000000000F800007FFF8000000000F800007FFF8000000000FC00007FF
-F80000F80007C00007FFF80000F80007C00007FFF80000F80007C00007FFF80000F80007
-C00007FFF80000F80000000007FFF80000F80000000007FFF80000F80000000007FFF800
-01F80000000007FFF80001F80000000007FFF80001F80000000007FFF80003F800000000
-07FFF80007F80000000007FFF8000FF80000000007FFF8007FF80000000007FFFFFFFFF8
-0000000007FFFFFFFFF80000000007FFFFFFFFF80000000007FFFFFFFFF80000000007FF
-FFFFFFF80000000007FFF8007FF80000000007FFF8000FF80000000007FFF80007F80000
-000007FFF80003F80000000007FFF80001F80000000007FFF80001F80000000007FFF800
-01F80000000007FFF80000F80000000007FFF80000F80000000007FFF80000F800000000
-07FFF80000F80000000007FFF80000F80000000007FFF80000F80000000007FFF80000F8
-0000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF
-F80000000000000007FFF80000000000000007FFF80000000000000007FFF80000000000
-000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800
-00000000000007FFF80000000000000007FFF80000000000000007FFF800000000000000
-07FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF8000000
-0000000007FFF8000000000000FFFFFFFFFFF800000000FFFFFFFFFFF800000000FFFFFF
-FFFFF800000000FFFFFFFFFFF800000000FFFFFFFFFFF8000000004A517CD055>I<FFFF
-FFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC00007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
-FFF800000007FFF800000007FFF800000007FFF800000007FFF80000FFFFFFFFFFC0FFFF
-FFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC02A527CD132>73
-D<FFFFFFFFFFF8000000FFFFFFFFFFF8000000FFFFFFFFFFF8000000FFFFFFFFFFF80000
-00FFFFFFFFFFF80000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
-000007FFF800000000000007FFF800000000000007FFF8000000007C0007FFF800000000
-7C0007FFF8000000007C0007FFF8000000007C0007FFF800000000FC0007FFF800000000
-F80007FFF800000000F80007FFF800000000F80007FFF800000000F80007FFF800000000
-F80007FFF800000001F80007FFF800000001F80007FFF800000001F80007FFF800000003
-F80007FFF800000003F80007FFF800000007F80007FFF800000007F00007FFF80000000F
-F00007FFF80000000FF00007FFF80000001FF00007FFF80000003FF00007FFF80000007F
-F00007FFF8000000FFF00007FFF8000003FFF00007FFF8000007FFF00007FFF800003FFF
-F00007FFF80001FFFFF0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFF
-E0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE046527CD151>76 D<FFFFFFFFFFFFFF0000
-00FFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFE000FFFFFFFFFF
-FFFFFFF0000007FFF000001FFFFC000007FFF0000001FFFF000007FFF00000007FFF8000
-07FFF00000003FFFC00007FFF00000000FFFE00007FFF00000000FFFF00007FFF0000000
-07FFF00007FFF000000003FFF80007FFF000000003FFFC0007FFF000000003FFFC0007FF
-F000000001FFFE0007FFF000000001FFFE0007FFF000000001FFFE0007FFF000000001FF
-FE0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000
-000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF00
-07FFF000000001FFFF0007FFF000000001FFFE0007FFF000000001FFFE0007FFF0000000
-01FFFE0007FFF000000001FFFC0007FFF000000003FFFC0007FFF000000003FFFC0007FF
-F000000003FFF80007FFF000000007FFF00007FFF00000000FFFE00007FFF00000001FFF
-E00007FFF00000003FFFC00007FFF00000007FFF000007FFF0000001FFFE000007FFF000
-001FFFFC000007FFFFFFFFFFFFF0000007FFFFFFFFFFFFC0000007FFFFFFFFFFFE000000
-07FFFFFFFFFFE000000007FFF80000000000000007FFF80000000000000007FFF8000000
-0000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF
-F80000000000000007FFF80000000000000007FFF80000000000000007FFF80000000000
-000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800
-00000000000007FFF80000000000000007FFF80000000000000007FFF800000000000000
-07FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF8000000
-0000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF
-F80000000000000007FFF80000000000000007FFF80000000000000007FFF80000000000
-000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800
-0000000000FFFFFFFFFFC000000000FFFFFFFFFFC000000000FFFFFFFFFFC000000000FF
-FFFFFFFFC000000000FFFFFFFFFFC00000000050527CD15C>80 D<00000FFF8000070000
-00FFFFF8000F000007FFFFFF001F00001FFFFFFFC03F00003FFFFFFFF07F0000FFFC00FF
-F8FF0001FFE0000FFDFF0003FF800001FFFF0007FE0000007FFF000FFC0000003FFF000F
-F80000000FFF001FF800000007FF001FF000000003FF003FF000000003FF003FE0000000
-01FF007FE000000000FF007FE000000000FF007FE0000000007F00FFE0000000007F00FF
-E0000000003F00FFE0000000003F00FFF0000000003F00FFF0000000003F00FFF8000000
-001F00FFF8000000001F00FFFC000000001F00FFFE000000001F00FFFF000000000000FF
-FFC000000000007FFFF000000000007FFFFF00000000007FFFFFF8000000003FFFFFFF80
-0000003FFFFFFFFC0000001FFFFFFFFFC000001FFFFFFFFFF000000FFFFFFFFFFC000007
-FFFFFFFFFF000003FFFFFFFFFFC00001FFFFFFFFFFE00000FFFFFFFFFFF000007FFFFFFF
-FFF800003FFFFFFFFFFC00000FFFFFFFFFFE000003FFFFFFFFFE000000FFFFFFFFFF0000
-001FFFFFFFFF80000000FFFFFFFF800000000FFFFFFFC0000000007FFFFFC00000000007
-FFFFE00000000000FFFFE000000000003FFFE000000000000FFFF0000000000007FFF000
-0000000003FFF0000000000003FFF0780000000001FFF0F80000000000FFF0F800000000
-00FFF0F80000000000FFF0F800000000007FF0F800000000007FF0FC00000000007FF0FC
-00000000007FF0FC00000000007FE0FE00000000007FE0FE00000000007FE0FF00000000
-00FFC0FF0000000000FFC0FF8000000000FFC0FFC000000001FF80FFE000000001FF00FF
-F000000003FF00FFFC00000007FE00FFFF0000000FFC00FFFFC000001FF800FFFFF80000
-7FF000FF1FFFC003FFE000FE0FFFFFFFFFC000FC03FFFFFFFF0000F8007FFFFFFC0000F0
-000FFFFFF00000E000007FFF0000003C5479D24B>83 D<3FFFFFFFFFFFFFFFFFFF803FFF
-FFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFF
-FFFFFFFFFF803FFFC0003FFFC0007FFF803FFE00003FFFC00007FF807FF800003FFFC000
-01FFC07FE000003FFFC00000FFC07FC000003FFFC000007FC07F8000003FFFC000003FC0
-7F0000003FFFC000001FC07F0000003FFFC000001FC07E0000003FFFC000000FC07E0000
-003FFFC000000FC07E0000003FFFC000000FC07C0000003FFFC0000007C07C0000003FFF
-C0000007C07C0000003FFFC0000007C07C0000003FFFC0000007C07C0000003FFFC00000
-07C0FC0000003FFFC0000007E0F80000003FFFC0000003E0F80000003FFFC0000003E0F8
-0000003FFFC0000003E0F80000003FFFC0000003E0F80000003FFFC0000003E0F8000000
-3FFFC0000003E0000000003FFFC000000000000000003FFFC000000000000000003FFFC0
-00000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000
-00000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000
-00003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003F
-FFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000
-000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000
-000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000
-003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFF
-C000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000
-0000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000
-0000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000000000
-3FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0
-00000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000
-00000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000
-00003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000FFFFFF
-FFFFFFF000000000FFFFFFFFFFFFF000000000FFFFFFFFFFFFF000000000FFFFFFFFFFFF
-F000000000FFFFFFFFFFFFF0000053517BD05E>I<FFFFFFFFFE0000001FFFFFFEFFFFFF
-FFFE0000001FFFFFFEFFFFFFFFFE0000001FFFFFFEFFFFFFFFFE0000001FFFFFFEFFFFFF
-FFFE0000001FFFFFFE001FFFF000000000003FFE00001FFFF0000000000007F000000FFF
-F0000000000007E000000FFFF800000000000FE0000007FFF800000000000FC0000007FF
-FC00000000000FC0000007FFFC00000000001FC0000003FFFE00000000001F80000003FF
-FE00000000003F80000001FFFE00000000003F00000001FFFF00000000007F00000000FF
-FF00000000007E00000000FFFF80000000007E00000000FFFF8000000000FE000000007F
-FFC000000000FC000000007FFFC000000001FC000000003FFFE000000001F8000000003F
-FFE000000003F8000000001FFFE000000003F0000000001FFFF000000007F0000000001F
-FFF000000007F0000000000FFFF800000007E0000000000FFFF80000000FE00000000007
-FFFC0000000FC00000000007FFFC0000001FC00000000003FFFC0000001F800000000003
-FFFE0000003F800000000003FFFE0000003F800000000001FFFF0000003F000000000001
-FFFF0000007F000000000000FFFF8000007E000000000000FFFF800000FE000000000000
-7FFF800000FC0000000000007FFFC00001FC0000000000007FFFC00001FC000000000000
-3FFFE00001F80000000000003FFFE00003F80000000000001FFFF00003F0000000000000
-1FFFF00007F00000000000000FFFF00007E00000000000000FFFF8000FE0000000000000
-0FFFF8000FE000000000000007FFFC000FC000000000000007FFFC001FC0000000000000
-03FFFE001F8000000000000003FFFE003F8000000000000001FFFE003F00000000000000
-01FFFF007F0000000000000001FFFF007F0000000000000000FFFF807E00000000000000
-00FFFF80FE00000000000000007FFFC0FC00000000000000007FFFC1FC00000000000000
-003FFFC1F800000000000000003FFFE3F800000000000000001FFFE3F000000000000000
-001FFFF3F000000000000000001FFFF7F000000000000000000FFFFFE000000000000000
-000FFFFFE0000000000000000007FFFFC0000000000000000007FFFFC000000000000000
-0003FFFF80000000000000000003FFFF80000000000000000003FFFF8000000000000000
-0001FFFF00000000000000000001FFFF00000000000000000000FFFE0000000000000000
-0000FFFE000000000000000000007FFC000000000000000000007FFC0000000000000000
-00007FFC000000000000000000003FF8000000000000000000003FF80000000000000000
-00001FF0000000000000000000001FF0000000000000000000000FE00000000000000000
-000007C000000000005F537DD166>86 D<00007FFF000000000007FFFFF0000000003FFF
-FFFE00000000FFFFFFFF80000001FFE00FFFC0000003FE0001FFF0000007FF0000FFF800
-0007FF80003FFC00000FFF80003FFE00000FFFC0001FFE00000FFFC0001FFF00000FFFC0
-000FFF80000FFFC0000FFF80000FFFC0000FFF800007FF800007FFC00007FF800007FFC0
-0003FF000007FFC00001FE000007FFC0000000000007FFC0000000000007FFC000000000
-0007FFC0000000000007FFC0000000000007FFC0000000000007FFC0000000007FFFFFC0
-0000000FFFFFFFC0000000FFFFFFFFC0000007FFFF87FFC000003FFFF007FFC000007FFF
-8007FFC00001FFFC0007FFC00003FFF00007FFC00007FFE00007FFC0000FFFC00007FFC0
-001FFF800007FFC0003FFF000007FFC0007FFF000007FFC0007FFE000007FFC0007FFE00
-0007FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC0
-00FFFC00000FFFC000FFFC00000FFFC000FFFE00001FFFC0007FFE00001DFFC0007FFE00
-003DFFC0003FFF000079FFE0001FFF8000F1FFF8000FFFC003E1FFFFE007FFF81FC0FFFF
-F003FFFFFF807FFFF000FFFFFF001FFFF0001FFFFC0007FFE00001FFE0000000003C387C
-B641>97 D<003FF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF000
-0000000000FFFFF0000000000000FFFFF000000000000003FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF001FFE000000000FFF00FFFFE00000000FFF03F
-FFFFC0000000FFF0FFFFFFF0000000FFF3FF01FFF8000000FFF7F8003FFE000000FFFFE0
-000FFF000000FFFF800007FF800000FFFF000003FFC00000FFFE000001FFE00000FFFC00
-0001FFF00000FFF8000000FFF80000FFF8000000FFF80000FFF80000007FFC0000FFF800
-00007FFC0000FFF80000007FFE0000FFF80000007FFE0000FFF80000007FFF0000FFF800
-00003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF8000FFF800
-00003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF800
-00003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF800
-00003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF0000FFF800
-00003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000007FFE0000FFF800
-00007FFE0000FFF80000007FFE0000FFF80000007FFC0000FFF8000000FFFC0000FFF800
-0000FFF80000FFFC000001FFF00000FFFC000001FFF00000FFFE000003FFE00000FFFF00
-0007FFC00000FFFF80000FFF800000FFCFC0001FFF000000FF87F0007FFC000000FF03FE
-03FFF8000000FE00FFFFFFE0000000FC007FFFFF80000000F8001FFFFC00000000000003
-FFC000000041547BD24B>I<000001FFF8000000001FFFFF80000000FFFFFFF0000003FF
-FFFFFC00000FFFC00FFE00001FFE0001FF00007FFC0003FF8000FFF00007FF8001FFF000
-07FFC003FFE0000FFFC003FFC0000FFFC007FFC0000FFFC00FFF80000FFFC00FFF80000F
-FFC01FFF800007FF801FFF000007FF803FFF000003FF003FFF000001FE007FFF00000000
-007FFE00000000007FFE00000000007FFE0000000000FFFE0000000000FFFE0000000000
-FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FF
-FE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE
-00000000007FFE00000000007FFF00000000007FFF00000000003FFF00000000003FFF00
-000000003FFF00000003E01FFF80000003E01FFF80000007E00FFFC0000007C007FFC000
-0007C007FFE000000FC003FFE000001F8001FFF000003F0000FFF800007E00007FFE0000
-FC00003FFF0003F800000FFFE01FF0000003FFFFFFE0000000FFFFFF800000003FFFFE00
-00000001FFE0000033387CB63C>I<000000000001FF80000000000007FFFF8000000000
-0007FFFF80000000000007FFFF80000000000007FFFF80000000000007FFFF8000000000
-00001FFF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
-000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
-000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
-000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
-000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
-000007FF8000000000000007FF8000000000000007FF8000000001FFE007FF800000001F
-FFFC07FF80000000FFFFFF07FF80000003FFFFFFC7FF8000000FFFE03FE7FF8000001FFF
-0007F7FF8000007FFC0001FFFF800000FFF80000FFFF800001FFF000003FFF800003FFE0
-00001FFF800007FFC000001FFF800007FFC000000FFF80000FFF8000000FFF80001FFF80
-00000FFF80001FFF0000000FFF80003FFF0000000FFF80003FFF0000000FFF80003FFF00
-00000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE00
-00000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE00
-00000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE00
-00000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE00
-00000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80003FFF00
-00000FFF80003FFF0000000FFF80003FFF0000000FFF80001FFF0000000FFF80001FFF00
-00000FFF80000FFF8000000FFF80000FFF8000001FFF800007FFC000003FFF800003FFC0
-00003FFF800001FFE000007FFF800000FFF00001FFFF8000007FF80003FFFFE000003FFE
-000FEFFFFF80000FFFC07FCFFFFF800007FFFFFF8FFFFF800001FFFFFE0FFFFF8000003F
-FFF80FFFFF80000003FFC00FFE000041547CD24B>I<000003FFC0000000003FFFFC0000
-0001FFFFFF00000007FFFFFFC000000FFF81FFE000003FFC007FF800007FF8003FFC0000
-FFF0001FFE0001FFE0000FFE0003FFC00007FF0007FFC00007FF800FFF800003FF800FFF
-800003FFC01FFF800001FFC01FFF000001FFC03FFF000001FFE03FFF000001FFE07FFF00
-0000FFE07FFE000000FFE07FFE000000FFF07FFE000000FFF0FFFE000000FFF0FFFE0000
-00FFF0FFFE000000FFF0FFFE000000FFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFF
-FFF0FFFFFFFFFFFFE0FFFE0000000000FFFE0000000000FFFE0000000000FFFE00000000
-00FFFE0000000000FFFE00000000007FFE00000000007FFE00000000007FFF0000000000
-3FFF00000000003FFF00000000003FFF00000000E01FFF00000001F01FFF80000003F00F
-FF80000003F007FFC0000007E007FFC0000007E003FFE000000FC001FFF000001FC000FF
-F800003F80007FFC0000FF00001FFE0003FE00000FFFC03FF8000003FFFFFFF0000000FF
-FFFFC00000001FFFFE0000000001FFF0000034387CB63D>I<0000003FFC00000003FFFF
-0000000FFFFFC000003FFFFFE00000FFF81FF00001FFC03FF80003FF807FF80007FF00FF
-FC000FFE00FFFC001FFC00FFFC001FFC00FFFC003FF800FFFC003FF800FFFC003FF8007F
-F8007FF0007FF8007FF0003FF0007FF0000FC0007FF0000000007FF0000000007FF00000
-00007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000
-00007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000FFFFFFFFE0
-00FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
-00007FF8000000007FF8000000007FF8000000007FF8000000007FF80000007FFFFFFE00
-007FFFFFFE00007FFFFFFE00007FFFFFFE00007FFFFFFE00002E547CD329>I<00003FFF
-0000FF000003FFFFF007FFC0000FFFFFFC1FFFE0003FFFFFFF7FFFE0007FFC0FFFFF9FF0
-00FFE001FFF83FF001FFC000FFE03FF003FF80007FF01FF007FF00003FF81FE00FFF0000
-3FFC0FC00FFF00003FFC07801FFE00001FFE00001FFE00001FFE00003FFE00001FFF0000
-3FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE0000
-1FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00001FFE00001FFE0000
-1FFE00001FFE00000FFF00003FFC00000FFF00003FFC000007FF00003FF8000003FF8000
-7FF0000001FFC000FFE0000000FFE001FFC0000000FFFC0FFF80000001FFFFFFFF000000
-03EFFFFFFC00000003C3FFFFF000000007C03FFF0000000007C000000000000007C00000
-000000000FC00000000000000FC00000000000000FC00000000000000FE0000000000000
-0FE00000000000000FF80000000000000FFE0000000000000FFFFFFFFF00000007FFFFFF
-FFF8000007FFFFFFFFFF000007FFFFFFFFFFC00003FFFFFFFFFFE00001FFFFFFFFFFF000
-00FFFFFFFFFFF800007FFFFFFFFFFC00007FFFFFFFFFFE0001FFFFFFFFFFFF0007FFFFFF
-FFFFFF000FFE000003FFFF801FF80000003FFF803FF000000007FF807FE000000003FFC0
-7FE000000001FFC0FFC000000001FFC0FFC000000000FFC0FFC000000000FFC0FFC00000
-0000FFC0FFC000000000FFC0FFC000000000FFC0FFE000000001FFC07FE000000001FF80
-7FF000000003FF803FF000000003FF001FF800000007FE000FFE0000001FFC0007FF8000
-007FF80003FFE00001FFF00001FFFE001FFFE000007FFFFFFFFF8000000FFFFFFFFC0000
-0001FFFFFFE0000000000FFFFC0000003C4F7CB543>I<003FF0000000000000FFFFF000
-0000000000FFFFF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF000
-000000000003FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
-1FFC00000000FFF000FFFFC0000000FFF003FFFFF0000000FFF00FFFFFF8000000FFF01F
-E07FFC000000FFF03F001FFE000000FFF07C001FFF000000FFF0F0000FFF000000FFF1E0
-000FFF800000FFF3C0000FFF800000FFF7800007FF800000FFF7800007FFC00000FFFF00
-0007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC00000FFFC00
-0007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF8
-07FFFFFFC0FFFFFFF807FFFFFFC042537BD24B>I<007F000000FF800003FFE00007FFF0
-0007FFF0000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF80007FFF0
-0007FFF00003FFE00000FF8000007F000000000000000000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000003FF0
-00FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF000FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE01B547B
-D325>I<003FF00000000000FFFFF00000000000FFFFF00000000000FFFFF00000000000
-FFFFF00000000000FFFFF0000000000003FFF0000000000000FFF0000000000000FFF000
-0000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000000000
-00FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF000
-0000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000000000
-00FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF000
-0000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00001FFFFF8
-00FFF00001FFFFF800FFF00001FFFFF800FFF00001FFFFF800FFF00001FFFFF800FFF000
-003FFE0000FFF000001FF00000FFF000003FC00000FFF000007F800000FFF00000FF0000
-00FFF00003FE000000FFF00007F8000000FFF0000FF0000000FFF0001FE0000000FFF000
-7FC0000000FFF000FF00000000FFF001FE00000000FFF003FC00000000FFF00FF8000000
-00FFF01FE000000000FFF03FF000000000FFF07FF800000000FFF1FFF800000000FFF3FF
-FC00000000FFF7FFFE00000000FFFFFFFF00000000FFFFFFFF80000000FFFF9FFF800000
-00FFFF0FFFC0000000FFFE0FFFE0000000FFF807FFF0000000FFF003FFF0000000FFF001
-FFF8000000FFF000FFFC000000FFF000FFFE000000FFF0007FFF000000FFF0003FFF0000
-00FFF0001FFF800000FFF0001FFFC00000FFF0000FFFE00000FFF00007FFF00000FFF000
-03FFF00000FFF00001FFF80000FFF00001FFFC0000FFF00000FFFE0000FFF000007FFE00
-00FFF000003FFF0000FFF000007FFFC0FFFFFFF003FFFFFFFFFFFFF003FFFFFFFFFFFFF0
-03FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFF40537CD247>107
-D<003FF000FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
-0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000FFFFFFF0FFFFFFF0FFFFFF
-F0FFFFFFF0FFFFFFF01C537BD225>I<003FF0001FFC000000FFE00000FFFFF000FFFFC0
-0007FFFE0000FFFFF003FFFFF0001FFFFF8000FFFFF00FFFFFF8007FFFFFC000FFFFF01F
-E07FFC00FF03FFE000FFFFF03F001FFE01F800FFF00003FFF07C001FFF03E000FFF80000
-FFF0F0000FFF0780007FF80000FFF1E0000FFF8F00007FFC0000FFF3C0000FFF9E00007F
-FC0000FFF7800007FFBC00003FFC0000FFF7800007FFFC00003FFE0000FFFF000007FFF8
-00003FFE0000FFFE000007FFF000003FFE0000FFFE000007FFF000003FFE0000FFFC0000
-07FFE000003FFE0000FFFC000007FFE000003FFE0000FFFC000007FFE000003FFE0000FF
-FC000007FFE000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE
-0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000
-003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007
-FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8
-000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE00
-00FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC00000
-3FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FF
-C000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF800
-0007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000
-FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003F
-FE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC0
-00003FFE00FFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807
-FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFE6736
-7BB570>I<003FF0001FFC000000FFFFF000FFFFC00000FFFFF003FFFFF00000FFFFF00F
-FFFFF80000FFFFF01FE07FFC0000FFFFF03F001FFE000003FFF07C001FFF000000FFF0F0
-000FFF000000FFF1E0000FFF800000FFF3C0000FFF800000FFF7800007FF800000FFF780
-0007FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC00
-0007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
-0007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF8
-07FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042367BB54B>I<000001FFE000
-000000001FFFFE0000000000FFFFFFC000000003FFFFFFF00000000FFF807FFC0000001F
-FC000FFE0000007FF80007FF800000FFF00003FFC00001FFE00001FFE00003FFC00000FF
-F00003FF8000007FF00007FF8000007FF8000FFF0000003FFC000FFF0000003FFC001FFF
-0000003FFE001FFF0000003FFE003FFE0000001FFF003FFE0000001FFF003FFE0000001F
-FF007FFE0000001FFF807FFE0000001FFF807FFE0000001FFF807FFE0000001FFF80FFFE
-0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001F
-FFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE
-0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC07FFE0000001FFF807FFE0000001F
-FF807FFE0000001FFF803FFE0000001FFF003FFF0000003FFF003FFF0000003FFF001FFF
-0000003FFE001FFF0000003FFE000FFF0000003FFC000FFF8000007FFC0007FF8000007F
-F80003FFC00000FFF00001FFE00001FFE00000FFF00003FFC000007FF80007FF8000003F
-FE001FFF0000000FFF807FFC00000007FFFFFFF800000000FFFFFFC0000000003FFFFF00
-0000000001FFE00000003A387CB643>I<003FF001FFE0000000FFFFF00FFFFE000000FF
-FFF03FFFFFC00000FFFFF0FFFFFFF00000FFFFF3FF01FFF80000FFFFF7F8007FFE000003
-FFFFE0001FFF000000FFFF80000FFF800000FFFF000007FFC00000FFFE000007FFE00000
-FFFC000003FFF00000FFF8000001FFF80000FFF8000001FFF80000FFF8000000FFFC0000
-FFF8000000FFFC0000FFF8000000FFFE0000FFF80000007FFE0000FFF80000007FFF0000
-FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000003FFF8000
-FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000
-FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000
-FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF0000
-FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFE0000
-FFF8000000FFFE0000FFF8000000FFFE0000FFF8000000FFFC0000FFF8000001FFFC0000
-FFF8000001FFF80000FFFC000003FFF00000FFFC000003FFF00000FFFE000007FFE00000
-FFFF00000FFFC00000FFFF80001FFF800000FFFFC0003FFF000000FFFFF000FFFC000000
-FFFBFE07FFF8000000FFF8FFFFFFE0000000FFF87FFFFF80000000FFF81FFFFC00000000
-FFF803FFC000000000FFF800000000000000FFF800000000000000FFF800000000000000
-FFF800000000000000FFF800000000000000FFF800000000000000FFF800000000000000
-FFF800000000000000FFF800000000000000FFF800000000000000FFF800000000000000
-FFF800000000000000FFF800000000000000FFF800000000000000FFF800000000000000
-FFF800000000000000FFF8000000000000FFFFFFF80000000000FFFFFFF80000000000FF
-FFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000414D7BB54B>I<007FE0
-03FE00FFFFE00FFF80FFFFE03FFFE0FFFFE07FFFF0FFFFE0FE1FF8FFFFE1F83FFC03FFE3
-E03FFE00FFE3C07FFE00FFE7807FFE00FFEF807FFE00FFEF007FFE00FFEE007FFE00FFFE
-003FFC00FFFC003FFC00FFFC001FF800FFFC000FF000FFF800000000FFF800000000FFF8
-00000000FFF800000000FFF800000000FFF000000000FFF000000000FFF000000000FFF0
-00000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
-00000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
-00000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
-00000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
-000000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFFFFFC00002F367C
-B537>114 D<0003FFF00F00003FFFFE1F0000FFFFFFFF0003FFFFFFFF0007FF003FFF00
-0FF80007FF001FE00001FF003FC00000FF003F8000007F007F8000007F007F0000003F00
-7F0000003F00FF0000001F00FF0000001F00FF8000001F00FF8000001F00FFC000001F00
-FFF000000000FFFC00000000FFFFC00000007FFFFF0000007FFFFFF800003FFFFFFF0000
-3FFFFFFFC0001FFFFFFFF0000FFFFFFFF80007FFFFFFFC0003FFFFFFFE0000FFFFFFFF00
-003FFFFFFF80000FFFFFFFC00000FFFFFFC0000007FFFFE00000003FFFE000000007FFF0
-00000001FFF0780000007FF0F80000003FF0F80000001FF0FC0000001FF0FC0000000FF0
-FC0000000FF0FE0000000FF0FE0000000FE0FF0000000FE0FF8000001FE0FF8000001FC0
-FFC000001FC0FFE000003F80FFF800007F00FFFE0001FE00FFFFC00FFC00FF7FFFFFF800
-FC1FFFFFE000F807FFFF8000F000FFF800002C387CB635>I<00003E00000000003E0000
-0000003E00000000003E00000000003E00000000003E00000000007E00000000007E0000
-0000007E00000000007E0000000000FE0000000000FE0000000001FE0000000001FE0000
-000001FE0000000003FE0000000007FE0000000007FE000000000FFE000000001FFE0000
-00003FFE00000000FFFE00000001FFFE0000000FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF
-00FFFFFFFFFF00FFFFFFFFFF00003FFE000000003FFE000000003FFE000000003FFE0000
-00003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0000
-00003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0000
-00003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0000
-00003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0007
-C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007
-C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0001FFE000F80001FFF000F
-80001FFF000F80000FFF001F00000FFF801F000007FFC03E000003FFF0FC000001FFFFF8
-0000007FFFF00000001FFFE000000003FF80002A4D7ECB34>I<003FF8000001FFC000FF
-FFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FF
-FFF80007FFFFC00003FFF800001FFFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
-FFF8000007FFC00000FFF8000007FFC00000FFF800000FFFC00000FFF800000FFFC00000
-FFF800000FFFC00000FFF800001FFFC00000FFF800001FFFC000007FF800003FFFC00000
-7FF800003BFFC000007FF800007BFFC000003FFC0000F3FFC000003FFC0001E3FFF00000
-1FFE0007C3FFFFC0000FFFC03F83FFFFC00007FFFFFF03FFFFC00001FFFFFE03FFFFC000
-007FFFF803FFFFC0000007FFE003FF000042377BB54B>I<FFFFFFF00007FFFFFFFFFFF0
-0007FFFFFFFFFFF00007FFFFFFFFFFF00007FFFFFFFFFFF00007FFFF01FFF80000007FE0
-00FFFC0000003F0000FFFC0000003F00007FFC0000003E00007FFE0000007E00003FFE00
-00007C00003FFF000000FC00001FFF000000F800001FFF800001F800000FFF800001F000
-000FFFC00001F000000FFFC00003F0000007FFC00003E0000007FFE00007E0000003FFE0
-0007C0000003FFF0000FC0000001FFF0000F80000001FFF8001F80000000FFF8001F0000
-0000FFFC001F00000000FFFC003F000000007FFE003E000000007FFE007E000000003FFE
-007C000000003FFF00FC000000001FFF00F8000000001FFF81F8000000000FFF81F00000
-00000FFFC3F0000000000FFFC3F00000000007FFE3E00000000007FFE7E00000000003FF
-E7C00000000003FFFFC00000000001FFFF800000000001FFFF800000000000FFFF000000
-000000FFFF0000000000007FFE0000000000007FFE0000000000007FFE0000000000003F
-FC0000000000003FFC0000000000001FF80000000000001FF80000000000000FF0000000
-0000000FF000000000000007E000000000000003C000000040367DB447>I<FFFFFFE07F
-FFFFC003FFFFC0FFFFFFE07FFFFFC003FFFFC0FFFFFFE07FFFFFC003FFFFC0FFFFFFE07F
-FFFFC003FFFFC0FFFFFFE07FFFFFC003FFFFC001FFF00000FFF000001FF80001FFF80000
-7FF0000007E00000FFF800007FF8000007C00000FFF800007FF8000007C00000FFFC0000
-3FF800000FC000007FFC00003FFC00000F8000007FFC00003FFC00000F8000007FFE0000
-3FFC00001F8000003FFE00007FFE00001F0000003FFF00007FFE00003F0000001FFF0000
-7FFF00003E0000001FFF0000FFFF00003E0000001FFF8000FFFF00007E0000000FFF8001
-FFFF80007C0000000FFFC001F3FF8000FC00000007FFC001F3FFC000F800000007FFC003
-F3FFC000F800000007FFE003E1FFC001F800000003FFE007E1FFE001F000000003FFF007
-C0FFE001F000000001FFF007C0FFF003E000000001FFF00FC0FFF003E000000001FFF80F
-807FF007E000000000FFF80F807FF807C000000000FFF81F003FF807C000000000FFFC1F
-003FF80FC0000000007FFC3F003FFC0F80000000007FFE3E001FFC1F80000000003FFE3E
-001FFE1F00000000003FFE7E001FFE1F00000000003FFF7C000FFE3F00000000001FFFFC
-000FFF3E00000000001FFFF80007FF7E00000000000FFFF80007FFFC00000000000FFFF8
-0007FFFC00000000000FFFF00003FFFC000000000007FFF00003FFF8000000000007FFE0
-0001FFF8000000000003FFE00001FFF0000000000003FFE00001FFF0000000000003FFC0
-0000FFF0000000000001FFC00000FFE0000000000001FF8000007FE0000000000001FF80
-00007FE0000000000000FF8000007FC0000000000000FF0000003FC00000000000007F00
-00003F800000000000007F0000003F800000000000003E0000001F000000005A367DB461
->I<7FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0007FFF
-FE007FFFFFF0007FFFFE00007FFE00000FFF0000003FFF000007F80000001FFF800007F0
-0000000FFFC0000FE000000007FFC0001FC000000007FFE0003F8000000003FFF0003F00
-00000001FFF8007E0000000000FFFC00FC00000000007FFE01FC00000000007FFE03F800
-000000003FFF07F000000000001FFF8FE000000000000FFFCFC0000000000007FFFF8000
-0000000003FFFF00000000000003FFFF00000000000001FFFE00000000000000FFFC0000
-00000000007FFE000000000000003FFF000000000000003FFF000000000000001FFF8000
-00000000001FFFC00000000000003FFFE00000000000007FFFF0000000000000FFFFF000
-0000000001FDFFF8000000000001F8FFFC000000000003F07FFE000000000007E03FFF00
-000000000FE01FFF00000000001FC01FFF80000000003F800FFFC0000000007F0007FFE0
-00000000FE0003FFF000000000FC0001FFF800000001F80001FFF800000003F00000FFFC
-00000007F000007FFE0000000FE000003FFF0000001FC000001FFF800000FFF000001FFF
-8000FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FFFF
-FFC0FFFFFE0001FFFFFFC042357EB447>I<FFFFFFF00007FFFFFFFFFFF00007FFFFFFFF
-FFF00007FFFFFFFFFFF00007FFFFFFFFFFF00007FFFF00FFF80000007FE000FFFC000000
-3F0000FFFC0000003F00007FFE0000003E00007FFE0000007E00003FFE0000007C00003F
-FF000000FC00001FFF000000F800001FFF800001F800000FFF800001F000000FFFC00003
-F0000007FFC00003E0000007FFE00003E0000007FFE00007E0000003FFF00007C0000003
-FFF0000FC0000001FFF8000F80000001FFF8001F80000000FFF8001F00000000FFFC003F
-000000007FFC003E000000007FFE007E000000003FFE007C000000003FFF00FC00000000
-3FFF00FC000000001FFF80F8000000001FFF81F8000000000FFFC1F0000000000FFFC3F0
-0000000007FFC3E00000000007FFE7E00000000003FFE7C00000000003FFFFC000000000
-01FFFF800000000001FFFF800000000000FFFF000000000000FFFF000000000000FFFF00
-00000000007FFE0000000000007FFE0000000000003FFC0000000000003FFC0000000000
-001FF80000000000001FF80000000000000FF00000000000000FF000000000000007E000
-000000000007E000000000000007E000000000000007C00000000000000FC00000000000
-000F800000000000001F800000000000001F000000000000003F000000001FC0003E0000
-00003FE0007E000000007FF0007C00000000FFF800FC00000000FFF800F800000000FFF8
-01F800000000FFF801F000000000FFF803F000000000FFF807E0000000007FF00FC00000
-00007FE01F80000000003FC07F00000000003F81FE00000000001FFFFC00000000000FFF
-F0000000000003FFE0000000000000FF000000000000404D7DB447>I
-E /Fr 42 127 df<00000FF8000000007FFE00000001F80780000007E001C000001F8000
-E000003F0007E000007E000FF000007E000FF00000FC000FF00000FC000FF00001F8000F
-F00001F80007E00001F80001800001F80000000001F80000000001F80000000001F80000
-000001F80000000001F80000000001F80000000001F80000000001F80000000001F80003
-F000FFFFFFFFF000FFFFFFFFF000FFFFFFFFF00001F8000FF00001F80003F00001F80003
-F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
-F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
-F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
-F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
-F00001F80003F00001F80003F00003FC0007F8007FFFE0FFFFC07FFFE0FFFFC07FFFE0FF
-FFC02A3B7FBA2E>12 D<03F000FFF000FFF000FFF00007F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
-0007F800FFFFC0FFFFC0FFFFC012257EA417>16 D<003C007E007E00FE01FE03FC03F007
-E00FC01F801E003C007800F000C0000F0F6FB92A>19 D<03F00003F00003F00003FE0000
-3F80001FC0000FE00007E00007E00007E0000FE0001FC000FF80FFFE00FFE000130F757D
-25>24 D<0000600000E00001C0000380000700000E00001E00003C0000780000780000F0
-0001E00001E00003C00003C00007C0000780000F80000F00000F00001F00001E00001E00
-003E00003E00003E00007C00007C00007C00007C00007C00007C0000F80000F80000F800
-00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
-00F80000F80000F800007C00007C00007C00007C00007C00007C00003E00003E00003E00
-001E00001E00001F00000F00000F00000F800007800007C00003C00003C00001E00001E0
-0000F000007800007800003C00001E00000E000007000003800001C00000E00000601352
-78BD20>40 D<C00000E000007000003800001C00000E00000F000007800003C00003C000
-01E00000F00000F000007800007800007C00003C00003E00001E00001E00001F00000F00
-000F00000F80000F80000F800007C00007C00007C00007C00007C00007C00003E00003E0
-0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
-0003E00003E00003E00003E00007C00007C00007C00007C00007C00007C0000F80000F80
-000F80000F00000F00001F00001E00001E00003E00003C00007C0000780000780000F000
-00F00001E00003C00003C0000780000F00000E00001C0000380000700000E00000C00000
-13527CBD20>I<1C007F00FF80FF80FF80FF80FF807F001C000909798817>46
-D<000FF00000007FFE000001FFFF800003E03FE0000F000FF0000E0007F8001C0003FC00
-380001FE00300001FE00700000FF00600000FF00FC0000FF00FF00007F80FF80007F80FF
-80007F80FF80007F80FF80007F80FF80007F807F00007F801C00007F800000007F800000
-00FF00000000FF00000000FF00000001FE00000001FC00000003FC00000003F800000007
-F000000007E00000000FE00000001FC00000003F800000003F000000007C00000000F800
-000001F000000003E000000007C00000000F800000000F000000001E000180003C000180
-007800018000F000038001E000030003C000030007800003000E000007000FFFFFFF001F
-FFFFFF003FFFFFFF007FFFFFFE00FFFFFFFE00FFFFFFFE00FFFFFFFE0021387CB72A>50
-D<0600000C000780003C0007F003F80007FFFFF80007FFFFF00007FFFFE00007FFFF8000
-07FFFF000007FFFC0000067FE00000060000000006000000000600000000060000000006
-000000000600000000060000000006000000000600000000060000000006000000000607
-F80000063FFE000006780F800007E007E000078003F000070001F800060001F800060000
-FC00000000FE00000000FE00000000FF000000007F000000007F000000007F800000007F
-800000007F800000007F803E00007F807F00007F80FF80007F80FF80007F80FF80007F80
-FF80007F80FF00007F00FE0000FF00E00000FF00600000FE00700000FE00300001FC0038
-0001F8001C0003F8001E0007F0000F800FE00007E03F800001FFFF0000007FFC0000001F
-E00000213A7CB72A>53 D<0000003800000000000038000000000000380000000000007C
-0000000000007C0000000000007C000000000000FE000000000000FE000000000000FE00
-0000000001FF000000000001FF000000000001FF0000000000037F8000000000037F8000
-000000077FC000000000063FC000000000063FC0000000000E3FE0000000000C1FE00000
-00000C1FE0000000001C1FF000000000180FF000000000180FF000000000380FF8000000
-003007F8000000003007F8000000007007FC000000006003FC000000006003FC00000000
-C003FE00000000C001FE00000000C001FE000000018001FF000000018000FF0000000180
-00FF000000030000FF8000000300007F8000000300007F8000000600007FC0000007FFFF
-FFC0000007FFFFFFC000000FFFFFFFE000000C00001FE000000C00001FE000001800000F
-F000001800000FF000001800000FF0000030000007F8000030000007F8000030000007F8
-000060000003FC000060000003FC0000E0000003FC0000E0000001FE0001E0000001FE00
-03F0000001FF000FFC000007FF80FFFF8000FFFFFEFFFF8000FFFFFEFFFF8000FFFFFE37
-3C7DBB3E>65 D<000001FF80018000000FFFE0038000007FFFF803800001FF807E078000
-03FC000F0F80000FF000039F80001FE00001DF80003F800000FF80007F0000007F8000FE
-0000003F8001FE0000003F8003FC0000001F8007F80000000F8007F80000000F800FF000
-000007800FF000000007801FE000000007801FE000000003803FE000000003803FC00000
-0003807FC000000001807FC000000001807FC000000001807F800000000180FF80000000
-0000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000
-00FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000
-FF800000000000FF8000000000007F8000000000007FC000000001807FC000000001807F
-C000000001803FC000000001803FE000000001801FE000000003801FE000000003000FF0
-00000003000FF0000000070007F8000000070007F8000000060003FC0000000E0001FE00
-00001C0000FE0000001800007F0000003800003F8000007000001FE00000E000000FF000
-03C0000003FC000F80000001FF803F000000007FFFFC000000000FFFF00000000001FF80
-0000313D7BBA3C>67 D<FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC0001FF80000F
-FC0000FF000001FC0000FF0000007E0000FF0000003E0000FF0000001E0000FF0000000E
-0000FF0000000E0000FF0000000E0000FF000000060000FF000000060000FF0000000600
-00FF000000070000FF000000030000FF0000C0030000FF0000C0030000FF0000C0030000
-FF0000C0000000FF0000C0000000FF0000C0000000FF0001C0000000FF0001C0000000FF
-0003C0000000FF000FC0000000FFFFFFC0000000FFFFFFC0000000FFFFFFC0000000FF00
-0FC0000000FF0003C0000000FF0001C0000000FF0001C0000000FF0000C0000000FF0000
-C0000000FF0000C0006000FF0000C0006000FF0000C0006000FF0000C000E000FF000000
-00C000FF00000000C000FF00000000C000FF00000000C000FF00000001C000FF00000001
-C000FF00000001C000FF000000038000FF000000038000FF000000078000FF0000000780
-00FF0000000F8000FF0000003F8000FF0000007F8001FF800007FF00FFFFFFFFFFFF00FF
-FFFFFFFFFF00FFFFFFFFFFFF0033397DB839>69 D<FFFFFFC0FFFFFFC0FFFFFFC000FFC0
-00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
-00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
-00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
-00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
-00007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
-00007F8000007F8000007F8000007F800000FFC000FFFFFFC0FFFFFFC0FFFFFFC01A397E
-B81E>73 D<FFFFFFE00000FFFFFFE00000FFFFFFE0000001FFC000000000FF0000000000
-FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
-FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
-FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
-FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
-FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
-FF0000001800FF0000001800FF0000001800FF0000001800FF0000001800FF0000003800
-FF0000003000FF0000003000FF0000003000FF0000007000FF0000007000FF0000007000
-FF000000F000FF000000F000FF000001F000FF000003F000FF00000FF000FF00001FE001
-FF8000FFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE02D397DB834>76
-D<000003FF00000000001FFFE000000000FE01FC00000001F8007E00000007E0001F8000
-000FC0000FC000003F800007F000007F000003F80000FE000001FC0001FC000000FE0001
-F80000007E0003F80000007F0007F00000003F8007F00000003F800FE00000001FC00FE0
-0000001FC01FE00000001FE01FC00000000FE03FC00000000FF03FC00000000FF03FC000
-00000FF07FC00000000FF87F8000000007F87F8000000007F87F8000000007F8FF800000
-0007FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF80000000
-07FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007
-FCFF8000000007FC7F8000000007F87FC00000000FF87FC00000000FF87FC00000000FF8
-3FC00000000FF03FC00000000FF01FE00000001FE01FE00000001FE01FE00000001FE00F
-F00000003FC007F00000003F8007F80000007F8003F80000007F0001FC000000FE0001FC
-000000FE0000FE000001FC00007F000003F800003F800007F000001FC0000FE0000007E0
-001F80000003F8007F00000000FE01FC000000001FFFE00000000003FF000000363D7BBA
-41>79 D<FFFFFFFFC000FFFFFFFFF800FFFFFFFFFE0001FF8001FF8000FF00003FC000FF
-00000FE000FF000007F000FF000003F800FF000003FC00FF000003FE00FF000001FE00FF
-000001FE00FF000001FF00FF000001FF00FF000001FF00FF000001FF00FF000001FF00FF
-000001FF00FF000001FF00FF000001FE00FF000001FE00FF000003FC00FF000003FC00FF
-000007F800FF000007F000FF00000FE000FF00003FC000FF0001FF0000FFFFFFFC0000FF
-FFFFF00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
-0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
-0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
-0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000001FF
-80000000FFFFFF000000FFFFFF000000FFFFFF00000030397DB839>I<3FFFFFFFFFFFE0
-3FFFFFFFFFFFE03FFFFFFFFFFFE03FC003FF001FE03E0001FE0003E07C0001FE0001F078
-0001FE0000F0700001FE000070700001FE000070700001FE000070600001FE0000306000
-01FE000030600001FE000030600001FE000030E00001FE000038C00001FE000018C00001
-FE000018C00001FE000018C00001FE000018000001FE000000000001FE000000000001FE
-000000000001FE000000000001FE000000000001FE000000000001FE000000000001FE00
-0000000001FE000000000001FE000000000001FE000000000001FE000000000001FE0000
-00000001FE000000000001FE000000000001FE000000000001FE000000000001FE000000
-000001FE000000000001FE000000000001FE000000000001FE000000000001FE00000000
-0001FE000000000001FE000000000001FE000000000001FE000000000001FE0000000000
-01FE000000000001FE000000000001FE000000000001FE000000000001FE000000000001
-FE000000000007FF800000001FFFFFFFE000001FFFFFFFE000001FFFFFFFE00035397DB8
-3C>84 D<001FE0000000FFFC000003E03F000007000F80000F8007E0001FC003F0001FE0
-03F0001FE001F8001FE001F8001FE000FC000FC000FC00078000FC00000000FC00000000
-FC00000000FC00000000FC0000007FFC000007FFFC00003FE0FC0000FE00FC0003F800FC
-000FF000FC001FC000FC003FC000FC007F8000FC007F0000FC007F0000FC0CFE0000FC0C
-FE0000FC0CFE0000FC0CFE0001FC0CFE0001FC0CFF0003FC0C7F00077C0C7F80063E183F
-C01E3E180FE0781FF003FFF00FE0007F8007C026277DA52A>97 D<03F0000000FFF00000
-00FFF0000000FFF00000000FF000000003F000000003F000000003F000000003F0000000
-03F000000003F000000003F000000003F000000003F000000003F000000003F000000003
-F000000003F000000003F000000003F000000003F000000003F01FE00003F07FF80003F1
-E03E0003F3801F8003F7000FC003FE0007E003FC0003F003F80001F803F00001F803F000
-00FC03F00000FC03F00000FE03F00000FE03F000007E03F000007F03F000007F03F00000
-7F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F
-03F000007E03F00000FE03F00000FE03F00000FC03F00001FC03F80001F803F80003F003
-FC0003F003EE0007E003C6000FC003C7801F000381E07E000300FFF80000001FC000283B
-7EB92E>I<0003FC00001FFF80007E03E001F8007003F000F807E001FC0FC003FC0FC003
-FC1F8003FC3F8003FC3F0001F87F0000F07F0000007F0000007E000000FE000000FE0000
-00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000
-007F0000007F0000003F0000063F8000061F80000E1FC0000C0FC0001C07E0003803F000
-7001F800E0007C07C0001FFF000007F8001F277DA525>I<0000000FC0000003FFC00000
-03FFC0000003FFC00000003FC00000000FC00000000FC00000000FC00000000FC0000000
-0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F
-C00000000FC00000000FC00000000FC00000000FC00003F80FC0001FFF0FC0007E078FC0
-00F801EFC003F0007FC007E0003FC00FC0001FC00FC0001FC01F80000FC03F80000FC03F
-00000FC07F00000FC07F00000FC07E00000FC0FE00000FC0FE00000FC0FE00000FC0FE00
-000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC07E0000
-0FC07F00000FC07F00000FC03F00000FC03F00000FC01F80001FC01F80001FC00FC0003F
-C007E0007FC003F000EFF001F801CFFF007C078FFF001FFE0FFF0007F80FC0283B7DB92E
->I<0007F800001FFF00007C0FC001F803E003F001F007E001F80FC000F81F80007C1F80
-007C3F00007E3F00003E7F00003E7F00003F7E00003FFE00003FFE00003FFE00003FFFFF
-FFFFFFFFFFFFFE000000FE000000FE000000FE000000FE0000007E0000007E0000007F00
-00007F0000003F0000033F8000031F8000070FC0000607C0000E07E0001C01F0003800F8
-0070007E03E0001FFF800003FC0020277EA525>I<00007E000003FF80000FC1E0001F87
-E0003F0FF0007E0FF0007E0FF000FC0FF000FC0FF001F803C001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F80000FFFFFC00FFFFFC00FFFFFC0001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
-0001F8000001F8000001F8000001F8000001F8000001F8000003FC00007FFFF8007FFFF8
-007FFFF8001C3B7FBA19>I<00000003F0000FF00FF8003FFC3C3C00F81F707C01F00FE0
-7C03E007C07C07C003E0100FC003F0000FC003F0001F8001F8001F8001F8001F8001F800
-1F8001F8001F8001F8001F8001F8001F8001F8001F8001F8000FC003F0000FC003F00007
-C003E00003E007C00003F00F800003F81F0000073FFC0000060FF000000E000000000E00
-0000000E000000000E000000000F000000000F000000000FC000000007FFFFC00007FFFF
-F80003FFFFFE0001FFFFFF8003FFFFFFC00F80007FE01F00000FF03E000003F07C000001
-F07C000001F8F8000000F8F8000000F8F8000000F8F8000000F8F8000000F8FC000001F8
-7C000001F03E000003E03F000007E00F80000F8007E0003F0001FC01FC00007FFFF00000
-07FF000026387EA52A>I<03F000000000FFF000000000FFF000000000FFF0000000000F
-F00000000003F00000000003F00000000003F00000000003F00000000003F00000000003
-F00000000003F00000000003F00000000003F00000000003F00000000003F00000000003
-F00000000003F00000000003F00000000003F00000000003F00000000003F00FF0000003
-F03FFC000003F0F03F000003F1C01F800003F3800FC00003F7000FC00003FE000FC00003
-FC0007E00003FC0007E00003F80007E00003F80007E00003F80007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029
-3A7EB92E>I<0380000FE0001FF0001FF0001FF0001FF0001FF0000FE000038000000000
-00000000000000000000000000000000000000000000000000000003F000FFF000FFF000
-FFF00007F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000
-03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000
-03F00003F00003F00003F00003F00003F00007F800FFFFC0FFFFC0FFFFC012387EB717>
-I<0001C00007F0000FF8000FF8000FF8000FF8000FF80007F00001C00000000000000000
-000000000000000000000000000000000000000000000001F800FFF800FFF800FFF80007
-F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
-F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
-F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
-F80001F80001F83C01F87E01F8FF01F0FF03F0FF03F0FF03E0FE07C07C07C03C0F000FFE
-0003F800154984B719>I<03F000FFF000FFF000FFF0000FF00003F00003F00003F00003
-F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003
-F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003
-F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003
-F00003F00003F00003F00003F00003F00003F00003F00003F00003F00007F800FFFFC0FF
-FFC0FFFFC0123A7EB917>108 D<03F00FF0001FE000FFF03FFC007FF800FFF0F03F01E0
-7E00FFF1C01F83803F000FF3800FC7001F8003F7000FCE001F8003FE000FDC001F8003FC
-0007F8000FC003FC0007F8000FC003F80007F0000FC003F80007F0000FC003F80007F000
-0FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F0
-0007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E000
-0FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F0
-0007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E000
-0FC003F00007E0000FC003F00007E0000FC003F00007E0000FC007F8000FF0001FE0FFFF
-C1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40257EA445>I<03F00FF00000FF
-F03FFC0000FFF0F03F0000FFF1C01F80000FF3800FC00003F7000FC00003FE000FC00003
-FC0007E00003FC0007E00003F80007E00003F80007E00003F80007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
-F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029
-257EA42E>I<0003FE0000000FFF8000003E03E00000F800F80001F0007C0003E0003E00
-07C0001F000F80000F801F80000FC01F000007C03F000007E03F000007E07E000003F07E
-000003F07E000003F07E000003F0FE000003F8FE000003F8FE000003F8FE000003F8FE00
-0003F8FE000003F8FE000003F8FE000003F8FE000003F87E000003F07E000003F07F0000
-07F03F000007E03F000007E01F80000FC00F80000F800FC0001F8007E0003F0003F0007E
-0000F800F800007E03F000001FFFC0000003FE000025277EA52A>I<03F01FE000FFF07F
-F800FFF1E07E00FFF3801F8007F7000FC003FE0007E003FC0003F003F80003F803F00001
-F803F00001FC03F00000FC03F00000FE03F00000FE03F00000FE03F000007F03F000007F
-03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03
-F000007F03F00000FE03F00000FE03F00000FE03F00001FC03F00001FC03F80003F803F8
-0003F003FC0007F003FE000FE003F6000FC003F7803F0003F1E07E0003F0FFF80003F01F
-C00003F000000003F000000003F000000003F000000003F000000003F000000003F00000
-0003F000000003F000000003F000000003F000000007F8000000FFFFC00000FFFFC00000
-FFFFC0000028357EA42E>I<0003F800C0001FFE01C0007E0781C000FC01C3C003F000E3
-C007F00077C00FE00037C00FC0003FC01FC0001FC03F80001FC03F80000FC07F00000FC0
-7F00000FC07F00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE
-00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC07F00000FC07F00000FC07F00
-000FC03F00000FC03F80001FC01F80001FC01FC0003FC00FC0003FC007E0007FC003F000
-EFC001F801CFC0007E078FC0001FFE0FC00007F80FC00000000FC00000000FC00000000F
-C00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0
-0000000FC00000001FE0000003FFFF000003FFFF000003FFFF28357DA42C>I<07E01F00
-FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003EE07F003EC03E003FC008003F80000
-03F8000003F8000003F8000003F0000003F0000003F0000003F0000003F0000003F00000
-03F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000
-03F0000003F0000003F0000003F0000003F0000007F80000FFFFF000FFFFF000FFFFF000
-1C257EA421>I<00FF030003FFE7000F80FF001E003F003C001F0078000F0070000700F0
-000700F0000700F0000300F8000300F8000300FC000300FF0000007FE000007FFF00003F
-FFE0001FFFF8000FFFFC0003FFFE0000FFFF000007FF8000007F8000001F80C0000FC0C0
-0007C0C00007C0E00003C0E00003C0E00003C0F00003C0F0000380F8000780FC000780FC
-000F00FF001E00F3C07C00E1FFF000C03F80001A277DA521>I<00180000001800000018
-0000001800000018000000380000003800000038000000780000007800000078000000F8
-000001F8000003F8000007F800001FFFFF00FFFFFF00FFFFFF0001F8000001F8000001F8
-000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8
-000001F8000001F8000001F8000001F8000001F8000001F8000001F800C001F800C001F8
-00C001F800C001F800C001F800C001F800C001F800C001F800C000FC01C000FC0180007C
-0380007E0300003F0700000FFE000001F8001A347FB220>I<03F00007E000FFF001FFE0
-00FFF001FFE000FFF001FFE0000FF0001FE00003F00007E00003F00007E00003F00007E0
-0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
-0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
-0003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
-0003F00007E00003F0000FE00003F0000FE00003F0000FE00003F0001FE00001F0001FE0
-0001F8003FE00000F80077F80000FC00E7FF80003F03C7FF80001FFF87FF800003FC07E0
-0029267EA42E>I<FFFF803FFEFFFF803FFEFFFF803FFE0FF8000FF007F00007E003F000
-03C003F800038001F800030001F800030000FC00060000FC00060000FE000E00007E000C
-00007E000C00003F001800003F001800003F803800001F803000001F803000000FC06000
-000FC06000000FE060000007E0C0000007E0C0000003F180000003F180000003F1800000
-01FB00000001FB00000001FF00000000FE00000000FE000000007C000000007C00000000
-7C00000000380000000038000027257EA32C>I<FFFF1FFFE03FFEFFFF1FFFE03FFEFFFF
-1FFFE03FFE0FF800FF000FF807F0007E0003E007F0007E0003C003F0003E00018003F000
-3E00018001F8003F00030001F8003F00030001F8003F00030000FC003F80060000FC006F
-80060000FC006F800600007E00EFC00C00007E00C7C00C00007E00C7C00C00003F01C7E0
-1800003F0183E01800003F8183F03800001F8383F03000001F8301F03000001FC301F870
-00000FC600F86000000FC600F860000007E600FCC0000007EC007CC0000007EC007CC000
-0003FC007F80000003F8003F80000003F8003F80000001F8003F00000001F0001F000000
-01F0001F00000000F0001E00000000E0000E0000000060000C000037257EA33C>I<FFFF
-807FFF00FFFF807FFF00FFFF807FFF0003FE003FF00001FE001F800000FE001F0000007E
-001C0000003F00180000001F80300000001FC0700000000FC0E000000007E0C000000007
-F18000000003FB8000000001FF0000000000FE0000000000FE00000000007F0000000000
-3F00000000007F80000000007FC000000000CFC000000001C7E00000000383F000000007
-03F80000000601F80000000C00FC0000001C007E00000038007F00000078003F000000F0
-001F800001F8001FC0000FF8003FF000FFFE00FFFF80FFFE00FFFF80FFFE00FFFF802924
-7FA32C>I<FFFF803FFEFFFF803FFEFFFF803FFE0FF8000FF007F00007C003F000038001
-F800038001F800030001FC00030000FC00060000FC000600007E000C00007E000C00007F
-000C00003F001800003F001800001F803000001F803000001FC07000000FC06000000FC0
-60000007E0C0000007E0C0000007F1C0000003F180000003F180000001FB00000001FB00
-000001FF00000000FE00000000FE000000007C000000007C000000007C00000000380000
-0000380000000030000000003000000000700000000060000000006000000000C0000000
-00C000007C01C00000FE01800000FE03800000FE03000000FE06000000FC0E000000701C
-00000038380000001FF00000000FC000000027357EA32C>I<01E0004007F800E00FFE01
-C01FFF87803C3FFF00700FFE00E003FC004000F0001B0879B62A>126
-D E /Fs 13 118 df<000F00003F80003FC0007FE000FFE001FFE003FFE007FFE007FFC0
-0FFF801FFE003FF8007FE000FF80007E000038000013106DBA30>19
-D<00000003E00000000000000007F00000000000000007F0000000000000000FF8000000
-000000000FF8000000000000000FF8000000000000001FFC000000000000001FFC000000
-000000003FFE000000000000003FFE000000000000003FFE000000000000007FFF000000
-000000007FFF00000000000000FFFF80000000000000FFFF80000000000000FFFF800000
-00000001FFFFC0000000000001F3FFC0000000000003F3FFE0000000000003E1FFE00000
-00000003E1FFE0000000000007E1FFF0000000000007C0FFF000000000000FC0FFF80000
-0000000F807FF800000000000F807FF800000000001F807FFC00000000001F003FFC0000
-0000003F003FFE00000000003E001FFE00000000003E001FFE00000000007E001FFF0000
-0000007C000FFF0000000000FC000FFF8000000000F80007FF8000000000F80007FF8000
-000001F80007FFC000000001F00003FFC000000003FFFFFFFFE000000003FFFFFFFFE000
-000003FFFFFFFFE000000007FFFFFFFFF000000007C00000FFF00000000FC00000FFF800
-00000F8000007FF80000000F8000007FF80000001F8000007FFC0000001F0000003FFC00
-00003F0000003FFE0000003E0000001FFE0000003E0000001FFE0000007E0000001FFF00
-00007C0000000FFF000000FE0000000FFF8000FFFFF80007FFFFFF80FFFFF80007FFFFFF
-80FFFFF80007FFFFFF80FFFFF80007FFFFFF80413A7DB948>65 D<0007FF000E00003FFF
-E01E0000FFFFF83E0003FFFFFE7E0007FC01FFFE000FF0001FFE001FE0000FFE003FC000
-03FE003F800001FE007F800000FE007F000000FE007F0000007E00FF0000007E00FF0000
-003E00FF0000003E00FF8000003E00FF8000001E00FFC000001E00FFE000001E00FFF000
-000000FFFC000000007FFFE00000007FFFFE0000007FFFFFF000003FFFFFFE00003FFFFF
-FF80001FFFFFFFC0000FFFFFFFF00007FFFFFFF80003FFFFFFFC0000FFFFFFFE00003FFF
-FFFE00000FFFFFFF000001FFFFFF0000000FFFFF800000007FFF800000000FFFC0000000
-03FFC000000001FFC000000000FFC0F00000007FC0F00000007FC0F00000007FC0F00000
-003FC0F00000003FC0F80000003FC0F80000003F80FC0000003F80FC0000007F80FE0000
-007F00FF0000007F00FF800000FE00FFE00001FC00FFF80003FC00FFFF801FF800FCFFFF
-FFE000F83FFFFFC000F007FFFE0000E0007FF000002A3B7BB935>83
-D<003FFE00000003FFFFE000000FFFFFF800001FF00FFE00003FF003FF00003FF801FF80
-003FF800FFC0003FF800FFC0003FF8007FE0003FF8007FE0001FF0007FE0000FE0007FE0
-000380007FE0000000007FE0000000007FE00000003FFFE000000FFFFFE000007FFFFFE0
-0001FFF87FE00007FF807FE0000FFE007FE0003FF8007FE0003FF0007FE0007FE0007FE0
-00FFE0007FE000FFC0007FE000FFC0007FE000FFC0007FE000FFC0007FE000FFC000FFE0
-00FFE001FFE0007FE001FFE0003FF007FFF8001FFC1FBFFFC00FFFFE1FFFC003FFF80FFF
-C0003FE003FFC02A257DA42E>97 D<00FF00000000FFFF00000000FFFF00000000FFFF00
-000000FFFF0000000007FF0000000003FF0000000003FF0000000003FF0000000003FF00
-00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00
-00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF01
-FF800003FF0FFFF00003FF3FFFFC0003FFFE03FF0003FFF000FF8003FFE0007FC003FF80
-003FE003FF00003FF003FF00001FF803FF00001FF803FF00001FFC03FF00000FFC03FF00
-000FFC03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00
-000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFC03FF00
-000FFC03FF00000FFC03FF00001FF803FF00001FF803FF00001FF003FF80003FF003FFC0
-007FE003FFE0007FC003FDF001FF8003F8FC07FE0003F03FFFF80003E00FFFE00003C003
-FF00002F3A7EB935>I<0001FFC000000FFFFC00007FFFFF0000FF80FF8003FE00FFC007
-FC01FFC00FF801FFC01FF801FFC01FF001FFC03FF001FFC03FF000FF807FE0007F007FE0
-001C007FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000
-0000FFE0000000FFE0000000FFE00000007FE00000007FE00000007FF00000003FF00000
-003FF00001E01FF80001E01FF80003E00FFC0007C007FE00078003FF001F8000FFC07E00
-007FFFFC00000FFFF0000001FF800023257DA42A>I<01F00007FC000FFE000FFE001FFF
-001FFF001FFF001FFF001FFF000FFE000FFE0007FC0001F0000000000000000000000000
-0000000000000000000000000000000000FF007FFF007FFF007FFF007FFF0007FF0003FF
-0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF
-0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF
-0003FF0003FF00FFFFF8FFFFF8FFFFF8FFFFF8153B7DBA1B>105
-D<00FE007FE0000FFC0000FFFE01FFFC003FFF8000FFFE07FFFF00FFFFE000FFFE1F81FF
-83F03FF000FFFE3C00FF87801FF00007FE7800FFCF001FF80003FEF000FFDE001FF80003
-FFE0007FFC000FFC0003FFC0007FF8000FFC0003FFC0007FF8000FFC0003FF80007FF000
-0FFC0003FF80007FF0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00
-007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC
-0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007F
-E0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003
-FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE000
-0FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00
-007FE0000FFC00FFFFFC1FFFFF83FFFFF0FFFFFC1FFFFF83FFFFF0FFFFFC1FFFFF83FFFF
-F0FFFFFC1FFFFF83FFFFF04C257DA451>109 D<0001FFC00000000FFFF80000007FFFFF
-000000FF80FF800003FE003FE00007FC001FF0000FF8000FF8001FF00007FC001FF00007
-FC003FF00007FE003FE00003FE007FE00003FF007FE00003FF007FE00003FF00FFE00003
-FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003
-FF80FFE00003FF80FFE00003FF807FE00003FF007FE00003FF007FE00003FF003FE00003
-FE003FF00007FE001FF00007FC001FF00007FC000FF8000FF80007FC001FF00003FE003F
-E00001FF80FFC000007FFFFF0000001FFFFC00000001FFC0000029257DA430>111
-D<00FE03F000FFFE0FFE00FFFE3FFF00FFFE7C7F80FFFEF8FFC007FEF0FFC003FFE0FFC0
-03FFC0FFC003FFC0FFC003FF807F8003FF803F0003FF800C0003FF80000003FF00000003
-FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
-00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00
-000003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE00
-00FFFFFE000022257EA427>114 D<003FF03803FFFEF80FFFFFF81FC00FF83F0003F87E
-0001F87C0000F8FC0000F8FC000078FE000078FF000078FF800000FFFC0000FFFFE0007F
-FFFC007FFFFF803FFFFFC01FFFFFF00FFFFFF803FFFFF800FFFFFC001FFFFC00007FFE00
-0007FEF00001FEF00000FEF80000FEF800007EFC00007EFC00007CFE0000FCFF0000F8FF
-8001F8FFF007F0FFFFFFC0F8FFFF00E01FF8001F257DA426>I<000F0000000F0000000F
-0000000F0000000F0000001F0000001F0000001F0000001F0000003F0000003F0000007F
-000000FF000000FF000001FF000007FF00001FFFFFE0FFFFFFE0FFFFFFE0FFFFFFE003FF
-000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF
-000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF
-007803FF007803FF007803FF007803FF007803FF007803FF007803FF007803FF00F801FF
-80F001FF81F000FFC3E0003FFFC0001FFF800003FE001D357EB425>I<00FF00003FC0FF
-FF003FFFC0FFFF003FFFC0FFFF003FFFC0FFFF003FFFC007FF0001FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
-FF0000FFC003FF0000FFC003FF0001FFC003FF0001FFC003FF0003FFC003FF0003FFC001
-FF0007FFC001FF800FFFE000FFC03EFFFF007FFFFCFFFF001FFFF0FFFF0003FF80FFFF30
-257DA435>I E /Ft 7 115 df<0000003FFE0000000003FFFFF00000000FFFFFFE000000
-3FFFFFFF800000FFFFFFFF800001FFFFFFFF800003FFE007FF00000FFF0000FF00001FFC
-00001F00003FF800000700007FE000000300007FC00000000000FF800000000001FF0000
-00000003FF000000000003FE000000000007FC000000000007FC00000000000FF8000000
-00000FF800000000001FF000000000001FF000000000003FE000000000003FE000000000
-003FE000000000007FC000000000007FC000000000007FC000000000007FC00000000000
-7FC00000000000FF800000000000FF800000000000FF800000000000FF800000000000FF
-800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF80
-0000000000FF800000000000FF800000000000FF8000000000007FC000000000007FC000
-000000007FC000000000007FC000000000007FC000000000003FE000000000003FE00000
-0000003FE000000000001FF000000000001FF000000000000FF800000000000FF8000000
-000007FC000000000007FC000000000003FE000000000003FF000000000001FF00000000
-0000FF8000000080007FC000000180007FE000000380003FF800000F80001FFC00001FC0
-000FFF00007FC00003FFE003FFC00001FFFFFFFF800000FFFFFFFE0000003FFFFFFC0000
-000FFFFFF000000003FFFFC0000000003FFC000032497AC63E>67
-D<0000003FFC0000000001FFFFE00000000FFFFFF80000003FFFFFFF000000FFFFFFFFC0
-0001FFFFFFFFE00003FFE007FFE00007FF00007FE0001FFC00001FC0003FF8000007C000
-3FF0000003C0007FC0000001C000FF80000000C001FF800000000003FF000000000003FE
-000000000007FC000000000007FC00000000000FF800000000000FF800000000001FF000
-000000001FF000000000003FE000000000003FE000000000003FE000000000007FC00000
-0000007FC000000000007FC000000000007FC000000000007FC00000000000FF80000000
-0000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000
-00FF800000000000FF800000000000FF800000000000FF800000000000FF800001FFFFF0
-FF800001FFFFF0FF800001FFFFF07FC00001FFFFF07FC00001FFFFF07FC00001FFFFF07F
-C00000000FF07FC00000000FF03FE00000000FF03FE00000000FF03FE00000000FF01FF0
-0000000FF01FF00000000FF00FF80000000FF00FF80000000FF007FC0000000FF007FC00
-00000FF003FE0000000FF003FF0000000FF001FF8000000FF000FF8000000FF0007FC000
-000FF0003FF000000FF0003FF800000FF0001FFC00000FF00007FF00003FF00003FFE007
-FFF00001FFFFFFFFF00000FFFFFFFFE000003FFFFFFF0000000FFFFFFC00000001FFFFE0
-000000003FFC000034497AC641>71 D<FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFF
-FFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF00000003FE0000000
-0000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
-E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
-0000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
-E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
-0000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
-E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
-0000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
-E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
-0000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
-E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
-0000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
-E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
-0000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
-E00000000000003FE00000000000003FE00000000000003FE00000003C457DC443>84
-D<0007FE0000007FFFC00003FFFFE0000FFFFFF8001FFFFFFC001FFFFFFE001FF803FF00
-1F8001FF001E0000FF801800007F801000003FC00000003FC00000003FE00000001FE000
-00001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000
-7FFFE0000FFFFFE0003FFFFFE001FFFFFFE003FFFFFFE00FFFF01FE01FFE001FE03FF800
-1FE07FE0001FE07FC0001FE0FF80001FE0FF00001FE0FF00001FE0FF00001FE0FF00001F
-E0FF00003FE0FF80003FE07FC0007FE07FE001FFE07FF80FFFE03FFFFFFFE01FFFFFFFE0
-1FFFFFDFE00FFFFF1FE003FFF81FE000FF800000232F7CAD2F>97
-D<0001FE00000007FFC000001FFFF000007FFFF80000FFFFFC0001FFFFFE0003FF03FF00
-07FC00FF000FF8007F800FF0003F801FE0001FC01FE0000FC03FC0000FE03F800007E07F
-800007E07F800007E07F000007E07F000003F0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFF
-FFFFF0FFFFFFFFF0FFFFFFFFF0FE00000000FE00000000FE00000000FF00000000FF0000
-00007F000000007F000000007F800000003F800000003FC00000003FC00000001FE00000
-001FF00000100FF800007007FC0001F003FE0007F003FF803FF001FFFFFFF000FFFFFFE0
-003FFFFF80001FFFFE000007FFF8000000FFC000242F7DAD2B>101
-D<00001FF00000FFFE0001FFFE0007FFFE000FFFFE001FFFFE003FF01E003FC002007F80
-00007F000000FE000000FE000001FE000001FE000001FE000001FE000001FE000001FE00
-0001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE0000FFFFFF
-80FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF8001FE000001FE000001FE000001FE00
-0001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE00
-0001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE00
-0001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE00
-0001FE000001FE000001FE000001FE000001FE000001FE000001FE00001F467EC51E>I<
-00001FFE00FFFE03FFFE07FFFE1FFFFE3FFFFE7FFFFEFFF0FEFF80FFFE00FFFC00FFF800
-FFF000FFE000FFC000FFC000FF8000FF8000FF8000FF0000FF0000FF0000FF0000FF0000
-FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000
-FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000182D79AC21>114
-D E /Fu 25 118 df<7FFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF807FFF
-FFFF0021067B9B2C>45 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B0B70
-8A2C>I<00000007000000000F800000001F800000001F800000003F800000003F000000
-007F000000007E00000000FE00000000FC00000001FC00000001F800000003F800000003
-F000000003F000000007F000000007E00000000FE00000000FC00000001FC00000001F80
-0000003F800000003F000000007F000000007E00000000FE00000000FC00000000FC0000
-0001FC00000001F800000003F800000003F000000007F000000007E00000000FE0000000
-0FC00000001FC00000001F800000001F800000003F800000003F000000007F000000007E
-00000000FE00000000FC00000001FC00000001F800000003F800000003F000000007F000
-000007E000000007E00000000FE00000000FC00000001FC00000001F800000003F800000
-003F000000007F000000007E00000000FE00000000FC00000000FC00000000F800000000
-780000000021417BB92C>I<00070000000F8000000F8000001F8000001F8000003F8000
-007F800000FF800001FF800007FF80007FFF8000FFFF8000FFDF8000FF9F80007C1F8000
-001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
-001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
-001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
-001F8000001F8000001F8000001F8000001F80007FFFFFE0FFFFFFF0FFFFFFF0FFFFFFF0
-7FFFFFE01C3477B32C>49 D<000FF80000007FFF800001FFFFE00007FFFFF0000FFFFFFC
-001FF80FFE003FE001FF003F80007F007F00003F807E00001F80FE00001FC0FE00000FC0
-FF00000FE0FF000007E0FF000007E0FF000007E07E000007E03C000007E000000007E000
-000007E00000000FE00000000FC00000001FC00000001F800000003F800000003F000000
-007F00000000FE00000001FC00000003FC00000007F80000000FF00000001FE00000003F
-C0000000FF80000001FE00000003FC00000007F80000000FF00000003FE00000007F8000
-0000FF00000001FE00000003FC0003C007F80007E01FE00007E03FC00007E07FFFFFFFE0
-FFFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFC023347CB32C>I<000007F00000000FF8
-0000001FF80000003FF80000003FF80000007EF80000007EF8000000FCF8000001F8F800
-0001F8F8000003F0F8000007E0F8000007E0F800000FC0F800001F80F800001F80F80000
-3F00F800007E00F800007E00F80000FC00F80001F800F80001F800F80003F000F80003E0
-00F80007E000F8000FC000F8000FC000F8001F8000F8003F0000F8003F0000F8007E0000
-F800FC0000F800FFFFFFFFFCFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC000000F8
-00000000F800000000F800000000F800000000F800000000F800000000F800000000F800
-000000F800000000F80000007FFFF00000FFFFF80000FFFFF80000FFFFF800007FFFF027
-347EB32C>52 D<00003FC0000001FFF8000007FFFC00001FFFFE00003FFFFF00007FE07F
-0000FF003F8001FE007F8003F8007F8007F0007F8007E0007F800FE0003F001FC0001E00
-1F800000003F800000003F000000003F000000007F000000007E000000007E03FE00007E
-1FFF8000FC7FFFE000FDFFFFF000FFFFFFF800FFFE07FC00FFF001FE00FFC0007F00FF80
-003F80FF00001F80FF00001FC0FE00000FC0FE00000FE0FE000007E0FE000007E0FE0000
-07E07E000007E07E000007E07E000007E07E000007E03F000007E03F00000FE03F80000F
-C01F80001FC01FC0001F800FC0003F800FE0007F0007F801FE0003FE07FC0001FFFFF800
-00FFFFF000007FFFE000001FFF80000007FC000023357CB32C>54
-D<7800000000FFFFFFFFC0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFC0FC00003F80
-FC00007F00FC0000FE00780000FC00000001FC00000003F800000007F000000007E00000
-000FE00000000FC00000001F800000003F800000003F000000007F000000007E00000000
-FE00000000FC00000001FC00000001F800000001F800000003F000000003F000000007F0
-00000007E000000007E000000007E00000000FC00000000FC00000000FC00000000FC000
-00001F800000001F800000001F800000001F800000001F800000003F800000003F000000
-003F000000003F000000003F000000003F000000003F000000003F000000003F00000000
-3F000000003F000000001E00000023357CB32C>I<0007FC0000003FFF800000FFFFE000
-03FFFFF80007FFFFFC000FFC07FE001FF001FF001FC0007F003F80003F803F00001F807F
-00001FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC03F00001F803F00
-001F801F80003F001FC0007F000FF001FE0003FC07F80001FFFFF000007FFFC0000007FC
-0000007FFFC00001FFFFF00003FC07F8000FF001FE001FC0007F001F80003F003F00001F
-807E00000FC07E00000FC0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0
-FC000007E0FC000007E07E00000FC07E00000FC07F00001FC03F80003F801FC0007F001F
-F001FF000FFC07FE0007FFFFFC0003FFFFF80000FFFFE000003FFF80000007FC00002335
-7CB32C>I<0007FC0000003FFF000000FFFFC00001FFFFE00003FFFFF00007FC07F8000F
-F001FC001FE000FE003F80007E003F80007F007F00003F007E00001F80FE00001F80FC00
-001F80FC00000FC0FC00000FC0FC00000FC0FC00000FC0FC00000FE0FC00000FE0FC0000
-0FE0FE00000FE07E00000FE07F00001FE03F00001FE03F80003FE01FC0007FE00FF001FF
-E007FC0FFFE003FFFFFFE001FFFFF7E000FFFFC7E0003FFF0FE0000FF80FC00000000FC0
-0000000FC00000001FC00000001F800000003F800000003F000F00007F001F80007E003F
-C000FE003FC001FC003FC003F8003FC007F8003F801FF0001FE07FE0001FFFFFC0000FFF
-FF000007FFFE000001FFF80000007FC0000023357CB32C>I<1F003F807FC0FFE0FFE0FF
-E0FFE0FFE07FC03F801F0000000000000000000000000000000000000000000000000000
-0000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B2470A32C>I<00007F80
-000003FFE000000FFFF000003FFFF800007FFFFC0000FFC0FE0001FE007F0003F8003F00
-07F0001F8007E00FCF800FC03FFF801F807FFFC01F80FFFFC03F01FFFFC03E03F87FC03E
-07F03FE07E07E01FE07C0FC00FE07C0F8007E07C0F8007E0FC1F8007E0F81F0003E0F81F
-0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F00
-03E0FC1F8007E07C0F8007C07C0F8007C07C0FC00FC07E07E01F803E07F03F803E03F87F
-003F01FFFE001F80FFFC001F807FF8000FC03FF00007E00FC00007F00007C003F8000FE0
-01FE001FE000FFC0FFE0007FFFFFC0003FFFFF80000FFFFE000003FFF80000007FC00023
-337CB22C>64 D<7FFFFF0000FFFFFFC000FFFFFFF000FFFFFFF8007FFFFFFC0007E003FE
-0007E000FF0007E0007F8007E0003F8007E0001FC007E0000FE007E0000FE007E00007E0
-07E00007F007E00003F007E00003F807E00001F807E00001F807E00001F807E00001F807
-E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E0
-0000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00001F807E00001F807E000
-01F807E00003F807E00003F007E00003F007E00007F007E00007E007E0000FE007E0001F
-C007E0003FC007E0007F8007E000FF0007E003FE007FFFFFFC00FFFFFFF800FFFFFFF000
-FFFFFFC0007FFFFF000026337EB22C>68 D<01FFF0000007FFFE00001FFFFF80001FFFFF
-E0003FFFFFF0003FC01FF8003FC007F8003FC001FC001F8000FC00060000FE000000007E
-000000007E000000007E000000FFFE00001FFFFE0000FFFFFE0003FFFFFE000FFFFFFE00
-1FFF807E003FF8007E007FC0007E007F00007E00FE00007E00FC00007E00FC00007E00FC
-00007E00FC00007E00FE00007E007F0000FE007F8003FE003FE01FFE001FFFFFFFFC0FFF
-FFFFFE07FFFFBFFE01FFFE1FFE003FF007FC27247CA32C>97 D<7FF0000000FFF8000000
-FFF8000000FFF80000007FF800000001F800000001F800000001F800000001F800000001
-F800000001F800000001F800000001F800000001F800000001F800000001F81FE00001F8
-FFF80001FBFFFE0001FFFFFF0001FFFFFF8001FFF07FC001FF801FE001FF0007F001FE00
-03F801FC0003F801FC0001FC01F80000FC01F80000FC01F80000FE01F800007E01F80000
-7E01F800007E01F800007E01F800007E01F800007E01F800007E01F800007E01F80000FE
-01FC0000FC01FC0000FC01FC0001F801FE0003F801FF0007F001FF000FF001FF801FE001
-FFE07FC001FFFFFF8001FFFFFF0001FBFFFE0001F8FFF80000F03FC00027337FB22C>I<
-0003FFE000001FFFF800007FFFFE0001FFFFFE0003FFFFFF0007FE00FF000FF000FF001F
-E000FF001FC0007E003F800018003F000000007F000000007E000000007E00000000FC00
-000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000
-00007E000000007E000000007F000000003F00000F003F80001F801FC0001F801FE0003F
-800FF0007F0007FE03FF0003FFFFFE0001FFFFFC00007FFFF800001FFFE0000003FF0000
-21247AA32C>I<00000FFE0000001FFF0000001FFF0000001FFF0000000FFF000000003F
-000000003F000000003F000000003F000000003F000000003F000000003F000000003F00
-0000003F000000003F000007F83F00003FFE3F0000FFFFBF0001FFFFFF0003FFFFFF0007
-FC0FFF000FF003FF001FE001FF001FC000FF003F80007F003F00007F007E00003F007E00
-003F00FE00003F00FC00003F00FC00003F00FC00003F00FC00003F00FC00003F00FC0000
-3F00FC00003F00FC00003F00FE00003F007E00007F007E00007F007F0000FF003F8000FF
-003F8001FF001FC003FF000FF007FF0007FC1FFF0003FFFFFFFC01FFFFBFFE00FFFF3FFE
-003FFC3FFE000FF01FFC27337DB22C>I<0003FE0000001FFFC000007FFFF00001FFFFF8
-0003FFFFFC0007FE03FE000FF800FF001FE0003F801FC0003F803F80001FC03F00000FC0
-7F00000FC07E00000FE07E000007E0FC000007E0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FF
-FFFFFFE0FFFFFFFFC0FC00000000FE000000007E000000007E000000007F000000003F00
-0003C03F800007E01FC00007E00FF0000FE007F8003FC007FF00FFC001FFFFFF8000FFFF
-FF00003FFFFC00000FFFF0000001FF800023247CA32C>I<00070000001FC000001FC000
-003FE000003FE000003FE000001FC000001FC00000070000000000000000000000000000
-000000000000000000000000000000007FFFC0007FFFE000FFFFE0007FFFE0007FFFE000
-0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
-0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0007FFFFFFC
-FFFFFFFEFFFFFFFEFFFFFFFE7FFFFFFC1F3479B32C>105 D<7FFFE00000FFFFF00000FF
-FFF00000FFFFF000007FFFF000000003F000000003F000000003F000000003F000000003
-F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
-00000003F000000003F000000003F000000003F000000003F000000003F000000003F000
-000003F000000003F000000003F000000003F000000003F000000003F000000003F00000
-0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
-03F000000003F000000003F000000003F000000003F000000003F000000003F000000003
-F000007FFFFFFF80FFFFFFFFC0FFFFFFFFC0FFFFFFFFC07FFFFFFF8022337BB22C>108
-D<0007FC0000001FFF0000007FFFC00001FFFFF00003FFFFF80007FC07FC000FF001FE00
-1FE000FF001F80003F003F80003F803F00001F807E00000FC07E00000FC07E00000FC0FC
-000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FE00
-000FE07E00000FC07E00000FC07F00001FC03F00001F803F80003F801FC0007F001FE000
-FF000FF001FE0007FC07FC0003FFFFF80001FFFFF000007FFFC000001FFF00000007FC00
-0023247CA32C>111 D<7FF01FE000FFF8FFF800FFFBFFFE00FFFFFFFF007FFFFFFF8001
-FFF07FC001FF801FE001FF0007F001FE0003F801FC0003F801FC0001FC01F80000FC01F8
-0000FC01F80000FE01F800007E01F800007E01F800007E01F800007E01F800007E01F800
-007E01F800007E01F800007E01F80000FE01FC0000FC01FC0000FC01FC0001F801FE0003
-F801FF0007F001FF000FF001FF801FE001FFE07FC001FFFFFF8001FFFFFF0001FBFFFE00
-01F8FFF80001F83FC00001F800000001F800000001F800000001F800000001F800000001
-F800000001F800000001F800000001F800000001F800000001F800000001F800000001F8
-0000007FFFE00000FFFFF00000FFFFF00000FFFFF000007FFFE0000027367FA32C>I<7F
-FE003FC0FFFF01FFF0FFFF07FFF8FFFF1FFFFC7FFF3FFFFC003F7FE1FC003FFF01FC003F
-FC00F8003FF80070003FF00000003FE00000003FE00000003FC00000003F800000003F80
-0000003F800000003F000000003F000000003F000000003F000000003F000000003F0000
-00003F000000003F000000003F000000003F000000003F000000003F000000003F000000
-003F000000003F0000007FFFFFE000FFFFFFF000FFFFFFF000FFFFFFF0007FFFFFE00026
-247EA32C>114 D<001E000000003F000000003F000000003F000000003F000000003F00
-0000003F000000003F000000003F000000003F0000007FFFFFFF00FFFFFFFF80FFFFFFFF
-80FFFFFFFF807FFFFFFF00003F000000003F000000003F000000003F000000003F000000
-003F000000003F000000003F000000003F000000003F000000003F000000003F00000000
-3F000000003F000000003F000000003F000000003F000000003F0003C0003F0007E0003F
-0007E0003F0007E0003F0007E0003F0007E0003F800FE0001F801FC0001FE07FC0000FFF
-FF80000FFFFF000003FFFE000001FFF80000003FE000232E7EAD2C>116
-D<7FF003FF8000FFF807FFC000FFF807FFC000FFF807FFC0007FF803FFC00001F8000FC0
-0001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
-0001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
-0001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
-0001F8000FC00001F8000FC00001F8001FC00001F8001FC00001F8003FC00001FC007FC0
-0000FE03FFC00000FFFFFFFF00007FFFFFFF80003FFFFFFF80001FFFCFFF800003FE07FF
-0029247FA32C>I E /Fv 34 125 df<001F00001F80003F80007F80007F8000FF0001FE
-0003FC0003F80007F0000FE0000F80001F00003E00003C0000780000E000004000001112
-6CC431>19 D<FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC01A067F9721>
-45 D<0000000FFE000060000000FFFFC000E0000003FFFFF000E000000FFC01FC01E000
-003FC0003E01E00000FF00000F83E00003FC000003C7E00007F8000001E7E0000FF00000
-00FFE0001FE00000007FE0003FC00000003FE0007F800000001FE000FF000000000FE001
-FE000000000FE001FC0000000007E003FC0000000007E007F80000000003E007F8000000
-0003E00FF00000000001E00FF00000000001E01FE00000000000E01FE00000000000E03F
-E00000000000E03FE00000000000E03FC00000000000607FC00000000000607FC0000000
-0000607FC00000000000607FC0000000000000FF80000000000000FF80000000000000FF
-80000000000000FF80000000000000FF80000000000000FF80000000000000FF80000000
-000000FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF
-80000000000000FF80000000000000FF800000000000007FC00000000000007FC0000000
-0000007FC00000000000607FC00000000000603FC00000000000603FE00000000000603F
-E00000000000601FE00000000000E01FF00000000000E00FF00000000000C00FF0000000
-0000C007F80000000001C007F800000000018003FC00000000038001FC00000000038001
-FE00000000070000FF000000000600007F800000000E00003FC00000001C00001FE00000
-003800000FF000000078000007F8000000F0000003FC000001E0000000FF000007800000
-003FC0001F000000000FFC00FC0000000003FFFFF00000000000FFFFC000000000000FFE
-0000003B487BC546>67 D<FFFFFFFFFF00000000FFFFFFFFFFF0000000FFFFFFFFFFFC00
-000001FFC00007FF00000000FF8000007FC00000007F8000001FE00000007F80000007F0
-0000007F80000003FC0000007F80000001FE0000007F80000000FF0000007F800000007F
-0000007F800000003F8000007F800000001FC000007F800000000FE000007F800000000F
-E000007F8000000007F000007F8000000007F800007F8000000003F800007F8000000003
-FC00007F8000000003FC00007F8000000001FC00007F8000000001FE00007F8000000001
-FE00007F8000000001FE00007F8000000001FF00007F8000000000FF00007F8000000000
-FF00007F8000000000FF00007F8000000000FF80007F8000000000FF80007F8000000000
-FF80007F8000000000FF80007F8000000000FF80007F8000000000FF80007F8000000000
-FF80007F8000000000FF80007F8000000000FF80007F8000000000FF80007F8000000000
-FF80007F8000000000FF80007F8000000000FF80007F8000000000FF00007F8000000000
-FF00007F8000000000FF00007F8000000001FF00007F8000000001FE00007F8000000001
-FE00007F8000000001FE00007F8000000001FC00007F8000000003FC00007F8000000003
-F800007F8000000007F800007F8000000007F000007F800000000FF000007F800000000F
-E000007F800000001FC000007F800000003FC000007F800000003F8000007F800000007F
-0000007F80000000FE0000007F80000003FC0000007F80000007F80000007F8000001FE0
-000000FF8000007FC0000001FFC00007FF000000FFFFFFFFFFFC000000FFFFFFFFFFF000
-0000FFFFFFFFFF0000000041447CC34B>I<FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFF
-FFFFF001FFC000007FF0007F8000000FF8007F80000003F8007F80000001F8007F800000
-00F8007F8000000078007F8000000038007F8000000038007F800000001C007F80000000
-1C007F800000001C007F800000000C007F800000000C007F800000000C007F800000000C
-007F800000000E007F8000000006007F80000C0006007F80000C0006007F80000C000000
-7F80000C0000007F80000C0000007F80000C0000007F80000C0000007F80001C0000007F
-80001C0000007F80003C0000007F80007C0000007F8001FC0000007FFFFFFC0000007FFF
-FFFC0000007FFFFFFC0000007F8001FC0000007F80007C0000007F80003C0000007F8000
-1C0000007F80001C0000007F80000C0000007F80000C0000007F80000C0000007F80000C
-0000007F80000C0000007F80000C0000007F80000C0000007F8000000000007F80000000
-00007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
-007F8000000000007F8000000000007F8000000000007F8000000000007F800000000000
-7F8000000000007F8000000000007F8000000000007F8000000000007FC00000000001FF
-E000000000FFFFFFF8000000FFFFFFF8000000FFFFFFF800000037447CC340>70
-D<FFFFFFC003FFFFFFFFFFFFC003FFFFFFFFFFFFC003FFFFFF01FFE0000007FF80007F80
-000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
-00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
-000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
-00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
-000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
-00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007FFF
-FFFFFFFE00007FFFFFFFFFFE00007FFFFFFFFFFE00007F80000001FE00007F80000001FE
-00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
-000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
-00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
-000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
-00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
-000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
-00007F80000001FE0001FFE0000007FF80FFFFFFC003FFFFFFFFFFFFC003FFFFFFFFFFFF
-C003FFFFFF40447CC349>72 D<FFFFFFF0FFFFFFF0FFFFFFF000FFF000007FE000003FC0
-00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
-00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
-00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
-00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
-00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
-00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
-00003FC000003FC000003FC000007FE00000FFF000FFFFFFF0FFFFFFF0FFFFFFF01C447D
-C323>I<FFFFFFF8000000FFFFFFF8000000FFFFFFF800000001FFE000000000007FC000
-000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
-0000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
-00007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
-007F8000000000007F8000000000007F8000000000007F8000000000007F800000000000
-7F8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F
-8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
-00000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
-000000007F8000000000007F8000000030007F8000000030007F8000000030007F800000
-0030007F8000000070007F8000000060007F8000000060007F8000000060007F80000000
-60007F8000000060007F80000000E0007F80000000E0007F80000000E0007F80000001C0
-007F80000001C0007F80000003C0007F80000007C0007F80000007C0007F8000000FC000
-7F8000003FC0007F8000007FC0007F800001FFC001FFC0001FFF80FFFFFFFFFFFF80FFFF
-FFFFFFFF80FFFFFFFFFFFF8034447CC33D>76 D<FFFFFFFFFC0000FFFFFFFFFFC000FFFF
-FFFFFFF80001FFC0000FFC00007F800001FF00007F8000007F80007F8000001FE0007F80
-00000FE0007F80000007F0007F80000007F8007F80000003FC007F80000003FC007F8000
-0003FE007F80000001FE007F80000001FE007F80000001FF007F80000001FF007F800000
-01FF007F80000001FF007F80000001FF007F80000001FF007F80000001FF007F80000001
-FE007F80000001FE007F80000003FE007F80000003FC007F80000003FC007F80000007F8
-007F80000007F0007F8000000FE0007F8000001FC0007F8000007F80007F800001FE0000
-7F80000FFC00007FFFFFFFF000007FFFFFFF8000007F8000000000007F8000000000007F
-8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
-00000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
-000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
-0000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
-00007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
-01FFE000000000FFFFFFC0000000FFFFFFC0000000FFFFFFC000000038447CC342>80
-D<FFFFFFFFE000000000FFFFFFFFFF00000000FFFFFFFFFFC000000001FFC0003FF80000
-00007F800003FC000000007F800000FF000000007F8000007F800000007F8000003FC000
-00007F8000001FE00000007F8000000FF00000007F80000007F80000007F80000007F800
-00007F80000007FC0000007F80000003FC0000007F80000003FE0000007F80000003FE00
-00007F80000003FE0000007F80000003FE0000007F80000003FE0000007F80000003FE00
-00007F80000003FE0000007F80000003FC0000007F80000003FC0000007F80000007FC00
-00007F80000007F80000007F8000000FF00000007F8000000FF00000007F8000001FE000
-00007F8000003FC00000007F8000007F000000007F800001FE000000007F800007F80000
-00007F80003FE0000000007FFFFFFF00000000007FFFFFFC00000000007F80007F800000
-00007F80000FE0000000007F800007F0000000007F800003FC000000007F800001FE0000
-00007F800000FE000000007F800000FF000000007F8000007F800000007F8000007F8000
-00007F8000003FC00000007F8000003FC00000007F8000003FC00000007F8000003FC000
-00007F8000003FC00000007F8000003FC00000007F8000003FC00000007F8000003FE000
-00007F8000003FE00000007F8000003FE00000007F8000003FE00000007F8000003FE000
-00007F8000003FE00000007F8000003FE00000007F8000003FE00060007F8000003FF000
-60007F8000001FF00060007F8000001FF00060007F8000001FF000E0007F8000000FF800
-C001FFE0000007F801C0FFFFFFC00007F80180FFFFFFC00001FC0380FFFFFFC00000FE07
-000000000000003FFE0000000000000007F80043467CC348>82 D<FFFFFFC0000FFFFFFF
-FFFFC0000FFFFFFFFFFFC0000FFFFF01FFE0000000FFF0007F800000001F80007F800000
-000F00007F800000000F00007F800000000600007F800000000600007F80000000060000
-7F800000000600007F800000000600007F800000000600007F800000000600007F800000
-000600007F800000000600007F800000000600007F800000000600007F80000000060000
-7F800000000600007F800000000600007F800000000600007F800000000600007F800000
-000600007F800000000600007F800000000600007F800000000600007F80000000060000
-7F800000000600007F800000000600007F800000000600007F800000000600007F800000
-000600007F800000000600007F800000000600007F800000000600007F80000000060000
-7F800000000600007F800000000600007F800000000600007F800000000600007F800000
-000600007F800000000600007F800000000600007F800000000600007F80000000060000
-7F800000000600007F800000000600007F800000000600007F800000000600007F800000
-000E00003FC00000000C00003FC00000000C00003FC00000001C00001FC00000001C0000
-1FE00000001800000FE00000003800000FE000000030000007F000000070000007F00000
-00E0000003F8000001E0000001FC000001C0000000FE000007800000007F00000F000000
-003F80001E000000001FE0007C0000000007FC03F00000000001FFFFE000000000007FFF
-80000000000007FC00000040467CC349>85 D<FFFFFF0007FFFFF8000FFFFEFFFFFF0007
-FFFFF8000FFFFEFFFFFF0007FFFFF8000FFFFE03FFE000001FFF000000FFF001FF800000
-0FFC0000003FC001FF00000007F80000001F0000FF00000007F80000000F0000FF000000
-07F80000000E00007F80000003FC0000000E00007F80000003FC0000000C00007F800000
-03FC0000000C00003FC0000003FE0000001800003FC0000003FE0000001800003FC00000
-03FE0000001800003FE0000006FF0000003800001FE0000006FF0000003000001FE00000
-06FF0000003000001FF000000EFF8000007000000FF000000C7F8000006000000FF00000
-0C7F8000006000000FF800001C7FC0000060000007F80000183FC00000C0000007F80000
-183FC00000C0000007F80000183FE00000C0000003FC0000301FE0000180000003FC0000
-301FE0000180000003FC0000301FE0000180000001FE0000600FF0000300000001FE0000
-600FF0000300000001FE0000600FF0000300000000FF0000C007F8000600000000FF0000
-C007F8000600000000FF0000C007F8000600000000FF8001C007FC000E000000007F8001
-8003FC000C000000007F80018003FC000C000000007FC0038003FE000C000000003FC003
-0001FE0018000000003FC0030001FE0018000000003FE0030001FF0018000000001FE006
-0000FF0030000000001FE0060000FF0030000000001FE0060000FF0030000000000FF00C
-00007F8060000000000FF00C00007F8060000000000FF00C00007F80600000000007F818
-00003FC0C00000000007F81800003FC0C00000000007F81800003FC0C00000000007FC30
-00001FE1C00000000003FC3000001FE1800000000003FC3000001FE1800000000003FE70
-00001FF3800000000001FE6000000FF3000000000001FE6000000FF3000000000001FFE0
-00000FFB000000000000FFC0000007FE000000000000FFC0000007FE000000000000FFC0
-000007FE0000000000007F80000003FC0000000000007F80000003FC0000000000007F80
-000003FC0000000000003F00000001F80000000000003F00000001F80000000000003F00
-000001F80000000000001E00000000F00000000000001E00000000F00000000000001E00
-000000F00000000000001E00000000F00000000000000C00000000600000005F467EC364
->87 D<0007FC000000003FFF80000000F80FE0000003C003F00000070001F800000E0000
-FC00000FC0007E00001FE0007F00001FF0003F80001FF0003F80001FF0003F80001FF000
-1FC0001FF0001FC0000FE0001FC0000380001FC0000000001FC0000000001FC000000000
-1FC0000000001FC00000000FFFC0000001FFFFC000000FFE1FC000003FC01FC00000FF00
-1FC00003FC001FC00007F8001FC0000FF0001FC0001FE0001FC0003FC0001FC0007FC000
-1FC0007F80001FC0007F80001FC060FF00001FC060FF00001FC060FF00001FC060FF0000
-3FC060FF00003FC060FF00003FC060FF80007FC0607F8000EFC0607FC000C7E0C03FC001
-C7E0C01FE00783F1C007F81E03FF8001FFFC01FF00001FE0007C002B2E7CAC31>97
-D<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC03FC000001FC0FFF800001FC3C07E00001FC7001F80001FDE0007E
-0001FD80003F0001FF80001F8001FF00001FC001FE00000FE001FC000007E001FC000007
-F001FC000007F001FC000003F801FC000003F801FC000003FC01FC000003FC01FC000001
-FC01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001
-FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001
-FC01FC000003FC01FC000003FC01FC000003F801FC000003F801FC000007F001FC000007
-F001FE00000FE001FE00000FC001FF00001FC001FB00003F8001F380007E0001E1C000FC
-0001E0F001F80001C03C07E00001801FFF8000000003FC00002F467DC436>I<00007F80
-000003FFF000000FC07C00003F000F0000FC00038001F80001C003F8000FC007F0001FE0
-07E0003FE00FE0003FE01FC0003FE01FC0003FE03F80003FE03F80001FC07F800007007F
-800000007F800000007F00000000FF00000000FF00000000FF00000000FF00000000FF00
-000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000007F0000
-00007F800000007F800000003F800000003F800000303FC00000301FC00000700FE00000
-600FE00000E007F00000C003F80001C001F800038000FC000700003F001E00001FC07800
-0007FFF0000000FF8000242E7DAC2B>I<000000007F000000003FFF000000003FFF0000
-00003FFF0000000001FF0000000000FF00000000007F00000000007F00000000007F0000
-0000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
-0000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
-0000007F00000000007F00000000007F00000000007F0000007F807F000003FFF07F0000
-0FC07C7F00003F000E7F00007E00077F0000FC0003FF0003F80001FF0007F00000FF0007
-E00000FF000FE000007F001FC000007F001FC000007F003F8000007F003F8000007F007F
-8000007F007F8000007F007F0000007F00FF0000007F00FF0000007F00FF0000007F00FF
-0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF
-0000007F00FF0000007F007F0000007F007F8000007F007F8000007F003F8000007F003F
-8000007F001FC000007F001FC000007F000FC00000FF000FE00000FF0007F00001FF0003
-F00003FF0001F800077F8000FC000E7FC0003F001C7FFE000FC0F87FFE0003FFE07FFE00
-007F007F002F467DC436>I<0001FE00000007FFC000001F03F000007E00FC0000FC007E
-0001F8003F0003F0003F0007E0001F800FE0001FC00FC0000FC01FC0000FC03F80000FE0
-3F800007E03F800007E07F800007F07F000007F07F000007F0FF000007F0FF000007F0FF
-000007F0FFFFFFFFF0FFFFFFFFF0FF00000000FF00000000FF00000000FF00000000FF00
-000000FF000000007F000000007F000000007F800000007F800000003F800000003F8000
-00301FC00000301FC00000700FC00000600FE00000E007F00000C003F00001C001F80003
-8000FC000700003E001E00001F80F8000003FFE0000000FF0000242E7DAC2B>I<00000F
-E00000007FF8000001F81E000003F03F00000FE07F80001FC0FF80001F80FF80003F80FF
-80007F00FF80007F00FF80007F007F0000FE001C0000FE00000000FE00000000FE000000
-00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
-FE00000000FE00000000FE00000000FE00000000FE000000FFFFFF8000FFFFFF8000FFFF
-FF800000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
-000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
-0000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000
-00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
-FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
-00000001FF8000007FFFFF00007FFFFF00007FFFFF000021467EC51E>I<000000000F80
-0001FC007FE0000FFF81F0F0003F07E381F000FC01FF03F001F800FE01F003F0007E01E0
-07F0007F000007E0003F00000FE0003F80000FC0001F80001FC0001FC0001FC0001FC000
-1FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC000
-1FC0001FC0000FC0001F80000FE0003F800007E0003F000007F0007F000003F0007E0000
-01F800FC000001FC01F8000003BF07E00000030FFF8000000701FC000000070000000000
-0700000000000F00000000000F00000000000F00000000000F800000000007C000000000
-07E00000000007FFFFF8000003FFFFFF000003FFFFFFE00001FFFFFFF800007FFFFFFC00
-01FFFFFFFE0007C0000FFF000F800000FF003F0000003F803E0000001F807C0000000FC0
-7C0000000FC0F800000007C0F800000007C0F800000007C0F800000007C0F800000007C0
-FC0000000FC07C0000000F807E0000001F803E0000001F001F0000003E000F8000007C00
-07E00001F80001F80007E000007F003F8000001FFFFE00000001FFE000002C427DAC31>
-I<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
-0001FC0000000001FC01FE000001FC07FFC00001FC1E07F00001FC3801F80001FC7001FC
-0001FCE000FC0001FDC000FE0001FD8000FE0001FF80007F0001FF00007F0001FF00007F
-0001FE00007F0001FE00007F0001FE00007F0001FC00007F0001FC00007F0001FC00007F
-0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F
-0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F
-0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F
-0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0003FE0000FF
-80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F457DC436>I<01E00007F80007F8000F
-FC000FFC000FFC000FFC0007F80007F80001E00000000000000000000000000000000000
-000000000000000000000000000000000000000000000001FC00FFFC00FFFC00FFFC0007
-FC0003FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001
-FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001
-FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0003
-FE00FFFFF8FFFFF8FFFFF815437DC21C>I<01FC00FFFC00FFFC00FFFC0007FC0003FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
-01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0003FE00
-FFFFF8FFFFF8FFFFF815457DC41C>108 D<01FC00FF00001FE00000FFFC07FFE000FFFC
-0000FFFC0F03F801E07F0000FFFC3C01FC07803F800007FC7000FE0E001FC00003FCE000
-7E1C000FC00001FDC0007F38000FE00001FD80007F30000FE00001FF80003FF00007F000
-01FF00003FE00007F00001FF00003FE00007F00001FE00003FC00007F00001FE00003FC0
-0007F00001FE00003FC00007F00001FC00003F800007F00001FC00003F800007F00001FC
-00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007
-F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC0000
-3F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F000
-01FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F80
-0007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC
-00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007
-F00001FC00003F800007F00001FC00003F800007F00003FE00007FC0000FF800FFFFF81F
-FFFF03FFFFE0FFFFF81FFFFF03FFFFE0FFFFF81FFFFF03FFFFE04B2C7DAB52>I<01FC01
-FE0000FFFC07FFC000FFFC1E07F000FFFC3801F80007FC7001FC0003FCE000FC0001FDC0
-00FE0001FD8000FE0001FF80007F0001FF00007F0001FF00007F0001FE00007F0001FE00
-007F0001FE00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
-007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
-007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
-007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
-007F0001FC00007F0001FC00007F0001FC00007F0003FE0000FF80FFFFF83FFFFEFFFFF8
-3FFFFEFFFFF83FFFFE2F2C7DAB36>I<00007F8000000003FFF00000000FC0FC0000003E
-001F0000007C000F800000F80007C00001F00003E00003E00001F00007C00000F8000FC0
-0000FC000FC00000FC001F8000007E003F8000007F003F8000007F003F0000003F007F00
-00003F807F0000003F807F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF00
-00003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF00
-00003FC0FF0000003FC07F0000003F807F0000003F807F8000007F803F8000007F003F80
-00007F001F8000007E001FC00000FE000FC00000FC000FE00001FC0007E00001F80003F0
-0003F00001F80007E00000FC000FC000003E001F0000001FC0FE00000007FFF800000000
-7F8000002A2E7DAC31>I<01FC03FC0000FFFC0FFF8000FFFC3C07E000FFFC7001F80007
-FDE000FE0001FD80007F0001FF80003F8001FF00001FC001FE00001FE001FC00000FE001
-FC00000FF001FC000007F001FC000007F801FC000003F801FC000003FC01FC000003FC01
-FC000003FC01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01
-FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01
-FC000003FC01FC000003FC01FC000003FC01FC000007F801FC000007F801FC000007F001
-FC00000FF001FE00000FE001FE00001FC001FF00003FC001FF00003F8001FF80007E0001
-FDC000FC0001FCF003F80001FC3C0FE00001FC1FFF800001FC03FC000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
-FC0000000003FE00000000FFFFF8000000FFFFF8000000FFFFF80000002F3F7DAB36>I<
-00007F8003000003FFE00700000FE0780700003F801C0F00007E000E0F0000FC00071F00
-03F800039F0007F80001BF0007F00001FF000FE00000FF001FE00000FF001FC00000FF00
-3FC000007F003FC000007F007F8000007F007F8000007F007F8000007F00FF0000007F00
-FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00
-FF0000007F00FF0000007F00FF0000007F00FF0000007F007F8000007F007F8000007F00
-7F8000007F003F8000007F003FC000007F001FC000007F001FE00000FF000FE00000FF00
-0FF00001FF0007F00001FF0003F80003FF0001FC00077F0000FE000E7F00003F001C7F00
-000FC0F87F000003FFE07F0000007F007F00000000007F00000000007F00000000007F00
-000000007F00000000007F00000000007F00000000007F00000000007F00000000007F00
-000000007F00000000007F00000000007F00000000007F00000000007F0000000000FF80
-0000003FFFFE0000003FFFFE0000003FFFFE2F3F7DAB33>I<03F803F0FFF81FFCFFF83C
-3EFFF8707F07F8E0FF03F9C0FF01F980FF01FB80FF01FB007E01FB003C01FF000001FE00
-0001FE000001FE000001FE000001FC000001FC000001FC000001FC000001FC000001FC00
-0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
-0001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
-0001FC000003FF0000FFFFFE00FFFFFE00FFFFFE00202C7DAB26>I<003FE01801FFFC38
-07E01F780F0003F81E0001F83C0000F87C00007878000078F8000038F8000038F8000018
-F8000018FC000018FC000018FE000018FF8000007FC000007FFC00003FFFE0001FFFFC00
-0FFFFF0007FFFFC003FFFFE000FFFFF0001FFFF80000FFF800000FFC000003FCC00001FE
-C00000FEC000007EE000007EE000003EE000003EF000003EF000003EF000003EF800003C
-FC00007CFC000078FE0000F8FF0001F0F38003E0F1F00F80E07FFE00C00FF0001F2E7DAC
-26>I<0006000000060000000600000006000000060000000E0000000E0000000E000000
-0E0000001E0000001E0000001E0000003E0000007E0000007E000000FE000001FE000007
-FE00001FFFFFF0FFFFFFF0FFFFFFF000FE000000FE000000FE000000FE000000FE000000
-FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000
-FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000C00
-FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00
-7E001C007F0018007F0018003F0038001F8030001FC0700007E0E00001FFC000007F001E
-3E7EBC26>I<01FC00007F00FFFC003FFF00FFFC003FFF00FFFC003FFF0007FC0001FF00
-03FC0000FF0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F00
-01FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F00
-01FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F00
-01FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F00
-01FC00007F0001FC00007F0001FC00007F0001FC0000FF0001FC0000FF0001FC0000FF00
-01FC0001FF0001FC0001FF0000FC0001FF0000FE0003FF00007E00077F80007F000E7FC0
-003F001C7FFE000FC0787FFE0003FFF07FFE00007F807F002F2D7DAB36>I<FFFFF001FF
-FCFFFFF001FFFCFFFFF001FFFC07FF00007FE003FE00001F8001FE00001F0001FE00000E
-0000FE00000C0000FF00001C00007F00001800007F00001800007F80003800003F800030
-00003F80003000001FC0006000001FC0006000001FE000E000000FE000C000000FE000C0
-000007F00180000007F00180000007F80380000003F80300000003F80300000001FC0600
-000001FC0600000001FE0E00000000FE0C00000000FE0C000000007F18000000007F1800
-0000007FB8000000003FB0000000003FB0000000001FE0000000001FE0000000001FE000
-0000000FC0000000000FC000000000078000000000078000000000078000000000030000
-0000000300000000000600000000000600000000000600000000000C00000000000C0000
-000000180000000000180000003C00180000007E0030000000FF0030000000FF00600000
-00FF0060000000FF00C0000000FE01C00000007C03800000007007000000003C1E000000
-000FFC0000000003F0000000002E3F7EAA33>121 D<3FFFFFFFE03FFFFFFFE03FC0003F
-E03F00003FC03C00007F80380000FF00380000FF00300001FE00700003FC00700003FC00
-700007F80060000FF00060000FF00060001FE00060003FC00060003FC00000007F800000
-00FF00000001FF00000001FE00000003FC00000007FC00000007F80000000FF00000001F
-F00000001FE00060003FC00060007F800060007F80006000FF0000C001FE0000C001FE00
-00C003FC0000C007F80000C007F80001C00FF00001C01FE00003C01FE00003C03FC00007
-807F80001F80FF8000FF80FFFFFFFF80FFFFFFFF80232B7DAA2B>I<FFFFFFFFFFFFFFFF
-FFFFFFFF80FFFFFFFFFFFFFFFFFFFFFFFF806102809B62>124 D
-E /Fw 21 118 df<0F003FC07FE0FFF0FFF0FFF0FFF0FFF0FFF07FE03FC00F000C0C748B
-24>46 D<00000FFE00000000007FFFE000000003FFFFF80000000FFFFFFE0000001FE00F
-FF8000003E0001FFE00000FC00007FF00001F000003FF80003E000000FFC0003C0000007
-FE000780000003FF000F00000003FF800E00000001FF801E00000000FFC01C00000000FF
-C03C000000007FE038000000007FE078000000003FF070000000003FF070000000003FF0
-70000000003FF0FF800000001FF8FFE00000001FF8FFE00000001FF8FFF00000001FF8FF
-F00000001FF8FFF00000001FF8FFF00000001FF8FFF00000001FF8FFF00000001FF87FE0
-0000001FF83FC00000001FF806000000001FF000000000003FF000000000003FF0000000
-00003FF000000000003FE000000000007FE000000000007FE00000000000FFC000000000
-00FFC00000000000FF800000000001FF800000000001FF000000000003FE000000000007
-FE000000000007FC00000000000FF800000000000FF000000000001FF000000000003FE0
-00000000007FC000000000007F800000000000FF000000000001FE000000000003FC0000
-00000003F8000000000007F000000000000FE000000000001FC000000000003F80000000
-00007F0000000000007E000000000000FC000000000001F8000000000003F00000000000
-07E000000000000FC000000000001F8000000000003F0000000000003E0000000000007C
-000000380000F8000000380001F0000000380003E0000000380007C000000070000F8000
-000070001F0000000070001E0000000070003C0000000070007800000000F000F0000000
-00F001E000000000E003C000000001E0078000000003E00FFFFFFFFFFFE00FFFFFFFFFFF
-E01FFFFFFFFFFFE03FFFFFFFFFFFE07FFFFFFFFFFFE0FFFFFFFFFFFFC0FFFFFFFFFFFFC0
-FFFFFFFFFFFFC0FFFFFFFFFFFFC0355E7ADD42>50 D<0180000000030001E00000000F00
-01FC0000003F0001FF800003FE0001FFF8003FFC0001FFFFFFFFF80001FFFFFFFFF00001
-FFFFFFFFE00001FFFFFFFF800001FFFFFFFF000001FFFFFFFC000001DFFFFFF0000001C3
-FFFF80000001C03FF800000001C0000000000001C0000000000001C0000000000001C000
-0000000001C0000000000001C0000000000001C0000000000001C0000000000001C00000
-00000001C0000000000001C0000000000001C0000000000001C0000000000001C0000000
-000001C0000000000001C0000000000001C0000000000001C0000000000001C000000000
-0001C0000000000001C0000000000001C001FF80000001C01FFFF0000001C07FFFFC0000
-01C1FE00FF000001C3E0003F800001CF80001FE00001DF00000FF00001FC000007F80001
-F8000003FC0001F0000001FC0001F0000001FE0001E0000000FF0001C0000000FF000000
-0000007F8000000000007FC000000000007FC000000000003FC000000000003FE0000000
-00003FE000000000003FF000000000003FF000000000001FF000000000001FF000000000
-001FF000000000001FF800000000001FF800000000001FF800000000001FF80000000000
-1FF800000000001FF81F800000001FF87FC00000001FF87FE00000001FF8FFE00000001F
-F8FFF00000001FF8FFF00000001FF8FFF00000001FF0FFE00000001FF0FFE00000003FF0
-FFC00000003FF0FF800000003FE070000000003FE070000000003FE078000000007FC078
-000000007FC03C00000000FF803C00000000FF801E00000001FF001E00000001FF000F00
-000003FE000780000007FC0007C0000007F80003E000000FF00001F800003FE00000FC00
-007FC000007F0001FF8000003FF00FFE0000000FFFFFF800000003FFFFE000000000FFFF
-80000000000FF800000035607ADD42>53 D<FFFFFFFFE000000000FFFFFFFFE000000000
-FFFFFFFFE000000000FFFFFFFFE00000000000FFFF800000000000003FFC000000000000
-001FFC000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF8000000000000
-001FF8000000000000001FF8000000000000001FF8000000000000001FF800000000001C
-001FF800000000001C001FF800000000001C001FF800000000001C001FF800000000001C
-001FF800000000001C001FF800000000003C001FF8000000000038001FF8000000000038
-001FF8000000000038001FF8000000000038001FF8000000000038001FF8000000000038
-001FF8000000000078001FF8000000000078001FF8000000000078001FF8000000000078
-001FF80000000000F8001FF80000000000F8001FF80000000000F0001FF80000000001F0
-001FF80000000001F0001FF80000000003F0001FF80000000007F0001FF80000000007F0
-001FF8000000000FF0001FF8000000001FF0001FF8000000003FF0001FF8000000007FF0
-001FF800000001FFF0001FF800000007FFF0003FF80000003FFFE000FFFC000003FFFFE0
-FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE0
-466279E153>76 D<FFFFFC000000000000001FFFFF80FFFFFC000000000000001FFFFF80
-FFFFFC000000000000001FFFFF80FFFFFE000000000000003FFFFF8000FFFE0000000000
-00003FFF8000003FFE000000000000003FFE0000001DFF0000000000000077FC0000001D
-FF0000000000000077FC0000001CFF80000000000000E7FC0000001CFF80000000000000
-E7FC0000001CFF80000000000000E7FC0000001C7FC0000000000001C7FC0000001C7FC0
-000000000001C7FC0000001C7FC0000000000001C7FC0000001C3FE000000000000387FC
-0000001C3FE000000000000387FC0000001C3FE000000000000387FC0000001C1FF00000
-0000000707FC0000001C1FF000000000000707FC0000001C0FF800000000000E07FC0000
-001C0FF800000000000E07FC0000001C0FF800000000000E07FC0000001C07FC00000000
-001C07FC0000001C07FC00000000001C07FC0000001C07FC00000000001C07FC0000001C
-03FE00000000003807FC0000001C03FE00000000003807FC0000001C03FE000000000038
-07FC0000001C01FF00000000007007FC0000001C01FF00000000007007FC0000001C00FF
-8000000000E007FC0000001C00FF8000000000E007FC0000001C00FF8000000000E007FC
-0000001C007FC000000001C007FC0000001C007FC000000001C007FC0000001C007FC000
-000001C007FC0000001C003FE0000000038007FC0000001C003FE0000000038007FC0000
-001C003FE0000000038007FC0000001C001FF0000000070007FC0000001C001FF0000000
-070007FC0000001C000FF80000000E0007FC0000001C000FF80000000E0007FC0000001C
-000FF80000000E0007FC0000001C0007FC0000001C0007FC0000001C0007FC0000001C00
-07FC0000001C0007FC0000001C0007FC0000001C0003FE000000380007FC0000001C0003
-FE000000380007FC0000001C0003FE000000380007FC0000001C0001FF000000700007FC
-0000001C0001FF000000700007FC0000001C0000FF800000E00007FC0000001C0000FF80
-0000E00007FC0000001C0000FF800000E00007FC0000001C00007FC00001C00007FC0000
-001C00007FC00001C00007FC0000001C00007FC00001C00007FC0000001C00003FE00003
-800007FC0000001C00003FE00003800007FC0000001C00003FE00003800007FC0000001C
-00001FF00007000007FC0000001C00001FF00007000007FC0000001C00000FF8000E0000
-07FC0000001C00000FF8000E000007FC0000001C00000FF8000E000007FC0000001C0000
-07FC001C000007FC0000001C000007FC001C000007FC0000001C000007FC001C000007FC
-0000001C000003FE0038000007FC0000001C000003FE0038000007FC0000001C000003FE
-0038000007FC0000001C000001FF0070000007FC0000001C000001FF0070000007FC0000
-001C000001FF0070000007FC0000001C000000FF80E0000007FC0000001C000000FF80E0
-000007FC0000001C0000007FC1C0000007FC0000001C0000007FC1C0000007FC0000001C
-0000007FC1C0000007FC0000001C0000003FE380000007FC0000001C0000003FE3800000
-07FC0000001C0000003FE380000007FC0000001C0000001FF700000007FC0000001C0000
-001FF700000007FC0000001C0000001FF700000007FC0000001C0000000FFE00000007FC
-0000001C0000000FFE00000007FC0000003E00000007FC00000007FC0000003E00000007
-FC00000007FC0000007F00000007FC00000007FC0000007F00000003F800000007FC0000
-01FFC0000003F80000000FFE000007FFF8000003F80000003FFF8000FFFFFF800001F000
-003FFFFFFF80FFFFFF800001F000003FFFFFFF80FFFFFF800001F000003FFFFFFF80FFFF
-FF800000E000003FFFFFFF80696278E17A>I<FFFFFFFFFFFFC0000000FFFFFFFFFFFFFE
-000000FFFFFFFFFFFFFFC00000FFFFFFFFFFFFFFF0000000FFFC000000FFFC0000003FF8
-0000000FFF0000001FF800000003FF8000001FF800000000FFC000001FF8000000003FF0
-00001FF8000000001FF800001FF8000000000FFC00001FF80000000007FC00001FF80000
-000003FE00001FF80000000003FF00001FF80000000001FF80001FF80000000001FF8000
-1FF80000000000FFC0001FF80000000000FFC0001FF80000000000FFC0001FF800000000
-00FFE0001FF800000000007FE0001FF800000000007FE0001FF800000000007FF0001FF8
-00000000007FF0001FF800000000007FF0001FF800000000007FF0001FF800000000007F
-F0001FF800000000007FF0001FF800000000007FF0001FF800000000007FF0001FF80000
-0000007FF0001FF800000000007FE0001FF800000000007FE0001FF80000000000FFE000
-1FF80000000000FFC0001FF80000000000FFC0001FF80000000000FFC0001FF800000000
-01FF80001FF80000000001FF00001FF80000000003FF00001FF80000000007FE00001FF8
-0000000007FC00001FF8000000000FF800001FF8000000001FF000001FF8000000007FE0
-00001FF800000000FFC000001FF800000003FF0000001FF80000001FFE0000001FF80000
-01FFF80000001FFFFFFFFFFFE00000001FFFFFFFFFFF000000001FFFFFFFFFF800000000
-1FF800000000000000001FF800000000000000001FF800000000000000001FF800000000
-000000001FF800000000000000001FF800000000000000001FF800000000000000001FF8
-00000000000000001FF800000000000000001FF800000000000000001FF8000000000000
-00001FF800000000000000001FF800000000000000001FF800000000000000001FF80000
-0000000000001FF800000000000000001FF800000000000000001FF80000000000000000
-1FF800000000000000001FF800000000000000001FF800000000000000001FF800000000
-000000001FF800000000000000001FF800000000000000001FF800000000000000001FF8
-00000000000000001FF800000000000000001FF800000000000000001FF8000000000000
-00001FF800000000000000001FF800000000000000001FF800000000000000001FF80000
-0000000000001FF800000000000000001FF800000000000000001FF80000000000000000
-1FF800000000000000001FF800000000000000001FF800000000000000001FF800000000
-000000003FFC0000000000000000FFFF00000000000000FFFFFFFF000000000000FFFFFF
-FF000000000000FFFFFFFF000000000000FFFFFFFF0000000000004C6279E15A>80
-D<FFFFFFFFFFFC000000000000FFFFFFFFFFFFE00000000000FFFFFFFFFFFFFC00000000
-00FFFFFFFFFFFFFF800000000000FFFC00000FFFE000000000003FF80000007FF8000000
-00001FF80000001FFC00000000001FF800000007FF00000000001FF800000001FF800000
-00001FF800000000FFC0000000001FF8000000003FE0000000001FF8000000001FF00000
-00001FF8000000001FF8000000001FF8000000000FFC000000001FF80000000007FE0000
-00001FF80000000007FE000000001FF80000000007FF000000001FF80000000003FF0000
-00001FF80000000003FF800000001FF80000000003FF800000001FF80000000001FF8000
-00001FF80000000001FFC00000001FF80000000001FFC00000001FF80000000001FFC000
-00001FF80000000001FFC00000001FF80000000001FFC00000001FF80000000001FFC000
-00001FF80000000001FFC00000001FF80000000001FFC00000001FF80000000001FFC000
-00001FF80000000001FF800000001FF80000000003FF800000001FF80000000003FF8000
-00001FF80000000003FF000000001FF80000000007FF000000001FF80000000007FE0000
-00001FF80000000007FC000000001FF8000000000FF8000000001FF8000000001FF80000
-00001FF8000000003FF0000000001FF8000000007FE0000000001FF800000000FF800000
-00001FF800000001FF00000000001FF800000007FE00000000001FF80000001FF8000000
-00001FF8000000FFE000000000001FF800000FFF8000000000001FFFFFFFFFFC00000000
-00001FFFFFFFFFE00000000000001FFFFFFFFFF00000000000001FF800001FFE00000000
-00001FF8000001FF8000000000001FF80000007FC000000000001FF80000003FF0000000
-00001FF80000001FF800000000001FF800000007FC00000000001FF800000003FE000000
-00001FF800000003FF00000000001FF800000001FF80000000001FF800000000FF800000
-00001FF800000000FFC0000000001FF8000000007FE0000000001FF8000000007FE00000
-00001FF8000000007FE0000000001FF8000000003FF0000000001FF8000000003FF00000
-00001FF8000000003FF0000000001FF8000000003FF0000000001FF8000000003FF00000
-00001FF8000000003FF0000000001FF8000000003FF0000000001FF8000000003FF00000
-00001FF8000000003FF0000000001FF8000000003FF0000000001FF8000000003FF80000
-00001FF8000000003FF8000000001FF8000000003FF8000000001FF8000000003FF80000
-00001FF8000000003FF8000000001FF8000000003FF8000000001FF8000000003FF80000
-00001FF8000000003FF8000000001FF8000000003FF8000000001FF8000000003FF80000
-00001FF8000000003FF80000E0001FF8000000003FFC0000E0001FF8000000001FFC0000
-E0001FF8000000001FFC0000E0001FF8000000001FFC0000E0001FF8000000000FFC0001
-E0001FF8000000000FFE0001C0001FF80000000007FE0003C0003FFC0000000007FF0003
-C000FFFF0000000003FF000780FFFFFFFF00000001FF800F00FFFFFFFF00000000FFC01F
-00FFFFFFFF000000003FF03E00FFFFFFFF000000000FFFFC00000000000000000003FFF0
-000000000000000000003FC0005B6479E162>82 D<00003FF0000000000003FFFE000000
-00000FFFFF80000000003FC03FE0000000007E0007F800000000F80003FC00000001E000
-01FE00000003C00000FF000000078000007F8000000F0000003FC000000F8000003FC000
-000FF000001FE000001FF800001FE000001FFC00000FF000001FFC00000FF000001FFC00
-000FF000001FFC000007F800001FFC000007F800001FFC000007F800000FF8000007F800
-0003E0000007F800000000000007F800000000000007F800000000000007F80000000000
-0007F800000000000007F800000000000007F80000000000007FF800000000007FFFF800
-0000000FFFFFF8000000007FF807F800000001FF8007F800000007FC0007F80000001FF0
-0007F80000007FC00007F8000000FF800007F8000003FE000007F8000007FC000007F800
-000FFC000007F800000FF8000007F800001FF0000007F800003FE0000007F800003FE000
-0007F800007FC0000007F800E07FC0000007F800E07FC0000007F800E0FFC0000007F800
-E0FF80000007F800E0FF80000007F800E0FF8000000FF800E0FF8000000FF800E0FF8000
-000FF800E0FF8000001FF800E0FFC000001BF800E07FC000003BF800E07FC0000073F800
-E07FE0000071FC01C03FF00000E1FC01C01FF00001C1FC01C00FFC000780FE038007FE00
-0F00FF070001FF807E007FFF00007FFFF8003FFE00001FFFE0001FF8000001FF000007E0
-003B417ABF42>97 D<000001FF80000000000FFFF8000000003FFFFE00000000FF007F80
-000003FC0007E0000007F00001F000001FE000007800003FC000003C00007F8000001E00
-00FF0000000F0001FE0000001F0001FC000000FF0003FC000001FF8007F8000003FF8007
-F8000003FF800FF0000003FF800FF0000003FF801FE0000003FF801FE0000003FF803FE0
-000001FF003FC00000007C003FC000000000007FC000000000007FC000000000007FC000
-000000007F800000000000FF800000000000FF800000000000FF800000000000FF800000
-000000FF800000000000FF800000000000FF800000000000FF800000000000FF80000000
-0000FF800000000000FF800000000000FF800000000000FF8000000000007F8000000000
-007FC000000000007FC000000000007FC000000000007FC000000000003FC00000000000
-3FE000000000003FE000000000001FE000000001C01FF000000001C00FF000000003C00F
-F8000000038007F8000000038003FC000000078003FE000000070001FE0000000F0000FF
-0000001E00007F8000003C00003FC000007800001FE00000F000000FF80001E0000003FC
-0007C0000000FF803F800000003FFFFE000000000FFFF80000000001FF80000032417CBF
-3A>99 D<000003FE00000000001FFFE000000000FFFFF800000001FE03FE00000007F000
-7F8000000FE0003FC000003FC0001FE000007F00000FF00000FF000007F80000FE000003
-F80001FC000003FC0003F8000001FC0007F8000001FE0007F0000000FE000FF0000000FF
-000FF00000007F001FE00000007F001FE00000007F803FE00000007F803FC00000003F80
-3FC00000003F807FC00000003FC07FC00000003FC07FC00000003FC07F800000003FC07F
-800000003FC0FF800000003FC0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFFFFC0FF80
-0000000000FF800000000000FF800000000000FF800000000000FF800000000000FF8000
-00000000FF800000000000FF800000000000FF8000000000007F8000000000007FC00000
-0000007FC000000000007FC000000000003FC000000000003FC000000000003FE0000000
-00001FE000000000001FE000000001C00FF000000001C00FF000000003C007F800000003
-8007F8000000038003FC000000078001FC0000000F0001FE0000000E0000FF0000001E00
-007F8000003C00003FC000007800001FE00000F0000007F00003E0000003FC0007C00000
-00FF803F000000003FFFFC000000000FFFF00000000001FF80000032417CBF3A>101
-D<0000000FF0000000007FFC00000001FFFF00000007F81F8000000FE00FC000001FC03F
-C000003F807FE000007F007FE00000FF007FE00001FE007FE00001FC007FE00003FC003F
-C00003FC003FC00007F8000F000007F80000000007F8000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000FFFFFFFFF000FFFFFFFFF000FFFFFFFFF0
-00FFFFFFFFF000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000
-00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000001FF80000
-00003FFE0000003FFFFFFF00003FFFFFFF00003FFFFFFF00003FFFFFFF00002B657EE428
->I<0000000000003F80000003FC0001FFE000003FFFC007FFF00000FFFFF01FC1F80003
-FC03FC3E03F80007F000FE7803F8000FE0007FE003F8001FC0003FC003F8003F80001FC0
-01F0007F00000FE0000000FE000007F0000000FE000007F0000001FC000003F8000001FC
-000003F8000003FC000003FC000003FC000003FC000003F8000001FC000007F8000001FE
-000007F8000001FE000007F8000001FE000007F8000001FE000007F8000001FE000007F8
-000001FE000007F8000001FE000007F8000001FE000007F8000001FE000007F8000001FE
-000003F8000001FC000003FC000003FC000003FC000003FC000001FC000003F8000001FC
-000003F8000000FE000007F0000000FE000007F00000007F00000FE00000003F80001FC0
-0000001FC0003F800000003FE0007F0000000037F000FE0000000073FC03FC0000000060
-FFFFF000000000E03FFFC000000000E003FC0000000001C000000000000001C000000000
-000001C000000000000001C000000000000001C000000000000001E000000000000001E0
-00000000000001F000000000000001F000000000000001F800000000000000FC00000000
-000000FF00000000000000FFFFFFFE000000007FFFFFFFF00000003FFFFFFFFE0000001F
-FFFFFFFF8000000FFFFFFFFFE000000FFFFFFFFFF000003FFFFFFFFFFC0000FE000001FF
-FE0003F80000001FFE0007E000000003FF000FC000000000FF801F80000000007F803F80
-000000003FC03F00000000001FC07E00000000001FC07E00000000000FE0FE0000000000
-0FE0FC000000000007E0FC000000000007E0FC000000000007E0FC000000000007E0FC00
-0000000007E0FC000000000007E0FE00000000000FE07E00000000000FC07E0000000000
-0FC07F00000000001FC03F80000000003F801FC0000000007F000FC0000000007E0007F0
-00000001FC0003F800000003F80001FC00000007F000007F0000001FC000003FE00000FF
-8000000FFE000FFE00000001FFFFFFF0000000003FFFFF800000000001FFF00000003D5E
-7DBF42>I<0003C000000000000007FFC0000000000000FFFFC0000000000000FFFFC000
-0000000000FFFFC0000000000000FFFFC000000000000001FFC0000000000000007FC000
-0000000000007FC0000000000000003FC0000000000000003FC0000000000000003FC000
-0000000000003FC0000000000000003FC0000000000000003FC0000000000000003FC000
-0000000000003FC0000000000000003FC0000000000000003FC0000000000000003FC000
-0000000000003FC0000000000000003FC0000000000000003FC0000000000000003FC000
-0000000000003FC0000000000000003FC0000000000000003FC0000000000000003FC000
-0000000000003FC0000000000000003FC0000000000000003FC0000000000000003FC000
-0000000000003FC0000000000000003FC0000000000000003FC0000000000000003FC000
-0000000000003FC0000000000000003FC0007FE0000000003FC003FFFC000000003FC00F
-FFFF000000003FC03F00FFC00000003FC078001FE00000003FC0F0000FF00000003FC1C0
-0007F80000003FC3800007FC0000003FC7000003FC0000003FCE000003FE0000003FCE00
-0001FE0000003FDC000001FE0000003FD8000001FE0000003FF8000000FF0000003FF000
-0000FF0000003FF0000000FF0000003FF0000000FF0000003FE0000000FF0000003FE000
-0000FF0000003FE0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000007FE0000001FF800000FFF000
-0003FFC000FFFFFFF003FFFFFFC0FFFFFFF003FFFFFFC0FFFFFFF003FFFFFFC0FFFFFFF0
-03FFFFFFC042647DE349>I<003C000000FF000001FF800003FFC00003FFC00003FFC000
-03FFC00003FFC00003FFC00001FF800000FF0000003C0000000000000000000000000000
-000000000000000000000000000000000000000000000000000000000000000000000000
-00000000000000000000000000000000000000000000000000000000000000000003C000
-07FFC0007FFFC0007FFFC0007FFFC0007FFFC00001FFC000007FC000007FC000003FC000
-003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000
-003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000
-003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000
-003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000
-003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000
-003FC000003FC000007FE00000FFF000FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE01B5F7DDE
-23>I<0003C00007FFC000FFFFC000FFFFC000FFFFC000FFFFC00001FFC000007FC00000
-7FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
-3FC000003FC000003FC000003FC000003FC000007FE00000FFF000FFFFFFF0FFFFFFF0FF
-FFFFF0FFFFFFF01C647DE323>108 D<0003C000FFC0000007FE00000007FFC003FFF800
-001FFFC00000FFFFC00FFFFE00007FFFF00000FFFFC03F00FF8001F807FC0000FFFFC078
-003FC003C001FE0000FFFFC1E0001FE00F0000FF000001FFC3C0000FF01E00007F800000
-7FC3800007F81C00003FC000007FC7000007F83800003FC000003FCE000003FC7000001F
-E000003FCC000003FC6000001FE000003FDC000003FCE000001FE000003FD8000003FCC0
-00001FE000003FF8000001FFC000000FF000003FF0000001FF8000000FF000003FF00000
-01FF8000000FF000003FE0000001FF0000000FF000003FE0000001FF0000000FF000003F
-E0000001FF0000000FF000003FE0000001FF0000000FF000003FC0000001FE0000000FF0
-00003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000
-000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001
-FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0
-000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000
-003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE000000
-0FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE
-0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC000
-0001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF00000
-3FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000F
-F000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE00
-00000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003FC00000
-01FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF000003F
-C0000001FE0000000FF000003FC0000001FE0000000FF000003FC0000001FE0000000FF0
-00007FE0000003FF0000001FF80000FFF0000007FF8000003FFC00FFFFFFF007FFFFFF80
-3FFFFFFCFFFFFFF007FFFFFF803FFFFFFCFFFFFFF007FFFFFF803FFFFFFCFFFFFFF007FF
-FFFF803FFFFFFC663F7CBE6F>I<0003C0007FE000000007FFC003FFFC000000FFFFC00F
-FFFF000000FFFFC03F00FFC00000FFFFC078001FE00000FFFFC0F0000FF0000001FFC1C0
-0007F80000007FC3800007FC0000007FC7000003FC0000003FCE000003FE0000003FCE00
-0001FE0000003FDC000001FE0000003FD8000001FE0000003FF8000000FF0000003FF000
-0000FF0000003FF0000000FF0000003FF0000000FF0000003FE0000000FF0000003FE000
-0000FF0000003FE0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC000
-0000FF0000003FC0000000FF0000003FC0000000FF0000007FE0000001FF800000FFF000
-0003FFC000FFFFFFF003FFFFFFC0FFFFFFF003FFFFFFC0FFFFFFF003FFFFFFC0FFFFFFF0
-03FFFFFFC0423F7DBE49>I<000000FF8000000000000FFFF800000000003FFFFE000000
-0000FF007F8000000003FC001FE000000007F00007F00000000FC00001F80000003F8000
-00FE0000007F0000007F0000007E0000003F000000FC0000001F800001F80000000FC000
-03F80000000FE00003F000000007E00007F000000007F0000FE000000003F8000FE00000
-0003F8001FE000000003FC001FC000000001FC001FC000000001FC003FC000000001FE00
-3FC000000001FE003FC000000001FE007F8000000000FF007F8000000000FF007F800000
-0000FF007F8000000000FF00FF8000000000FF80FF8000000000FF80FF8000000000FF80
-FF8000000000FF80FF8000000000FF80FF8000000000FF80FF8000000000FF80FF800000
-0000FF80FF8000000000FF80FF8000000000FF80FF8000000000FF80FF8000000000FF80
-7F8000000000FF007F8000000000FF007FC000000001FF007FC000000001FF003FC00000
-0001FE003FC000000001FE003FC000000001FE001FE000000003FC001FE000000003FC00
-1FE000000003FC000FF000000007F80007F000000007F00007F000000007F00003F80000
-000FE00001FC0000001FC00001FC0000001FC00000FE0000003F8000007F0000007F0000
-003F800000FE0000001FC00001FC0000000FF00007F800000003FC001FE000000000FF00
-7F80000000007FFFFF00000000000FFFF8000000000001FFC000000039417CBF42>I<00
-078003F80007FF800FFF00FFFF803FFFC0FFFF807C0FE0FFFF81F01FE0FFFF81E03FF001
-FF83803FF0007F87003FF0007F8F003FF0003F8E003FF0003F9C001FE0003F9C000FC000
-3F98000300003FB8000000003FB8000000003FB0000000003FF0000000003FF000000000
-3FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FC000000000
-3FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000
-3FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000
-3FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000
-3FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000
-3FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000000000
-3FC0000000003FC0000000003FC0000000007FE000000000FFF8000000FFFFFFFC0000FF
-FFFFFC0000FFFFFFFC0000FFFFFFFC00002C3F7CBE33>114 D<00003800000000003800
-000000003800000000003800000000003800000000003800000000003800000000007800
-00000000780000000000780000000000780000000000F80000000000F80000000000F800
-00000001F80000000001F80000000001F80000000003F80000000003F80000000007F800
-0000000FF8000000001FF8000000001FF8000000007FF800000000FFF800000003FFF800
-00000FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF000007F80000000007F800
-00000007F80000000007F80000000007F80000000007F80000000007F80000000007F800
-00000007F80000000007F80000000007F80000000007F80000000007F80000000007F800
-00000007F80000000007F80000000007F80000000007F80000000007F80000000007F800
-00000007F80000000007F80000000007F80000000007F80000000007F80000000007F800
-00000007F80000000007F80000000007F80000000007F80000000007F80000000007F800
-00000007F80000E00007F80000E00007F80000E00007F80000E00007F80000E00007F800
-00E00007F80000E00007F80000E00007F80000E00007F80000E00007F80000E00007F800
-00E00007F80000E00007F80000E00003FC0001C00003FC0001C00003FC0001C00003FC00
-03C00001FE0003800001FE0007800000FF00070000007F800F0000003FC01E0000001FF0
-7C0000000FFFF800000003FFE0000000007F80002B597FD733>116
-D<0003C00000000F000007FFC000001FFF0000FFFFC00003FFFF0000FFFFC00003FFFF00
-00FFFFC00003FFFF0000FFFFC00003FFFF000001FFC0000007FF0000007FC0000001FF00
-00007FC0000001FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000000FF0000003FC0000000FF0000003FC0000000FF00
-00003FC0000000FF0000003FC0000001FF0000003FC0000001FF0000003FC0000001FF00
-00003FC0000003FF0000003FC0000003FF0000003FC0000003FF0000003FC0000007FF00
-00001FC0000006FF0000001FE000000EFF0000001FE000001CFF0000000FE000001CFF00
-00000FF0000038FF80000007F0000070FF80000003F80001E0FFE0000001FE0003C0FFFF
-C00000FFC01F80FFFFC000003FFFFE00FFFFC000000FFFF800FFFFC0000000FFC000FF80
-0042407DBE49>I E end
-%%EndProlog
-%%BeginSetup
-%%Feature: *Resolution 600dpi
-TeXDict begin
-%%PaperSize: Letter
-
-%%EndSetup
-%%Page: 1 1
-1 0 bop 299 456 a Fw(Reference)44 b(Man)l(ual)h(of)e(the)g(Programming)
-g(Language)g(Lua)g(2.5)408 708 y Fv(Rob)s(erto)32 b(Ierusalimsc)m(h)m
-(y)98 b(Luiz)32 b(Henrique)i(de)f(Figueiredo)96 b(W)-8
-b(aldemar)31 b(Celes)1514 868 y Fu(lua@icad.puc-rio.)o(br)801
-1080 y Ft(T)-8 b(eC)945 1111 y(Graf)1152 1080 y Fv(|)32
-b(Departamen)m(to)g(de)h(Inform\023)-49 b(atica)31 b(|)h(PUC-Rio)1405
-1272 y Fu(Date:)42 b(1996/11/18)d(14:27:42)1767 1607
-y Fs(Abstract)227 1759 y Fr(Lua)e(is)f(an)h(extension)f(programming)f
-(language)g(designed)i(to)f(b)r(e)i(used)f(as)f(a)g(con\014guration)f
-(language)227 1859 y(for)28 b(an)n(y)f(program)f(that)i(needs)g(one.)38
-b(This)28 b(do)r(cumen)n(t)g(describ)r(es)f(v)n(ersion)g(2.5)g(of)h
-(the)g(Lua)g(programming)227 1958 y(language)21 b(and)i(the)g(API)g
-(that)g(allo)n(ws)e(in)n(teraction)h(b)r(et)n(w)n(een)h(Lua)f(programs)
-e(and)j(their)g(host)f(C)h(programs.)227 2058 y(The)28
-b(do)r(cumen)n(t)g(also)e(presen)n(ts)h(some)g(examples)g(of)g(using)h
-(the)g(main)f(features)g(of)h(the)g(system.)1845 2488
-y Fs(Sum)o(\023)-47 b(ario)227 2624 y Fr(Lua)21 b(\023)-39
-b(e)23 b(uma)g(linguagem)f(de)i(extens~)-42 b(ao)22 b(pro)5
-b(jetada)22 b(para)g(ser)h(usada)f(como)h(linguagem)f(de)i
-(con\014gura\030)-37 b(c~)-42 b(ao)21 b(em)227 2723 y(qualquer)26
-b(programa)d(que)k(precise)e(de)i(uma.)36 b(Este)26 b(do)r(cumen)n(to)g
-(descrev)n(e)f(a)h(v)n(ers~)-42 b(ao)25 b(2.5)g(da)h(linguagem)g(de)227
-2823 y(programa\030)-37 b(c~)-42 b(ao)22 b(Lua)j(e)h(a)f(In)n(terface)g
-(de)g(Programa\030)-37 b(c~)-42 b(ao)22 b(\(API\))k(que)f(p)r(ermite)h
-(a)f(in)n(tera\030)-37 b(c~)-42 b(ao)24 b(en)n(tre)h(programas)227
-2923 y(Lua)30 b(e)g(programas)d(C)j(hosp)r(edeiros.)43
-b(O)29 b(do)r(cumen)n(to)h(tam)n(b)n(\023)-39 b(em)29
-b(apresen)n(ta)f(alguns)i(exemplos)f(de)h(uso)f(das)227
-3022 y(principais)e(caracter)-9 b(\023)-32 b(\020sticas)24
-b(do)k(sistema.)0 3309 y Fq(1)135 b(In)l(tro)t(duction)0
-3512 y Fp(Lua)34 b(is)f(an)i(extension)f(programming)f(language)i
-(designed)e(to)i(supp)s(ort)d(general)j(pro)s(cedural)d(programming)0
-3625 y(features)i(with)f(data)h(description)e(facilities.)49
-b(It)34 b(is)f(in)m(tended)f(to)j(b)s(e)e(used)g(as)h(a)g
-(con\014guration)f(language)h(for)0 3737 y(an)m(y)42
-b(program)g(that)g(needs)f(one.)76 b(Lua)41 b(has)h(b)s(een)f(designed)
-f(and)h(implemen)m(ted)g(b)m(y)g(W.)i(Celes,)h(L.)e(H.)g(de)0
-3850 y(Figueiredo)29 b(and)h(R.)h(Ierusalimsc)m(h)m(y)-8
-b(.)141 3963 y(Lua)23 b(is)g(implemen)m(ted)e(as)j(a)g(library)-8
-b(,)23 b(written)f(in)g(C.)i(Being)f(an)g(extension)g(language,)j(Lua)d
-(has)g(no)g(notion)g(of)0 4076 y(a)g(\\main")g(program:)36
-b(it)23 b(only)e(w)m(orks)i Fo(emb)-5 b(e)g(dde)g(d)25
-b Fp(in)c(a)i(host)g(clien)m(t,)h(called)e(the)h Fo(emb)-5
-b(e)g(dding)24 b Fp(program.)38 b(This)21 b(host)0 4189
-y(program)30 b(can)g(in)m(v)m(ok)m(e)h(functions)e(to)i(execute)h(a)e
-(piece)g(of)g(co)s(de)h(in)e(Lua,)h(can)g(write)g(and)f(read)h(Lua)g(v)
--5 b(ariables,)0 4302 y(and)27 b(can)h(register)f(C)h(functions)e(to)i
-(b)s(e)f(called)g(b)m(y)h(Lua)f(co)s(de.)40 b(Through)26
-b(the)i(use)f(of)h(C)f(functions,)g(Lua)h(can)g(b)s(e)0
-4415 y(augmen)m(ted)d(to)f(cop)s(e)g(with)f(rather)g(di\013eren)m(t)h
-(domains,)g(th)m(us)f(creating)h(customized)g(programming)f(languages)0
-4528 y(sharing)29 b(a)i(syn)m(tactical)g(framew)m(ork.)141
-4641 y(Lua)22 b(is)f(free-distribution)d(soft)m(w)m(are,)25
-b(and)d(pro)m(vided)e(as)i(usual)e(with)h(no)h(guaran)m(tees.)39
-b(The)21 b(implemen)m(tation)0 4754 y(describ)s(ed)28
-b(in)h(this)h(man)m(ual)f(is)h(a)m(v)-5 b(ailable)29
-b(at)j(the)e(follo)m(wing)f(URL's:)143 4941 y Fn
-(http://www.inf.puc-rio.br)o(/~ro)o(ber)o(to/l)o(ua.h)o(tml)143
-5054 y(ftp://ftp.icad.puc-rio.br)o(/pub)o(/lu)o(a/lu)o(a.ta)o(r.g)o(z)
-1927 5589 y Fp(1)p eop
-%%Page: 2 2
-2 1 bop 0 91 a Fq(2)135 b(En)l(vironmen)l(t)46 b(and)e(Ch)l(unks)0
-294 y Fp(All)19 b(statemen)m(ts)k(in)c(Lua)h(are)h(executed)h(in)d(a)i
-Fo(glob)-5 b(al)25 b(envir)-5 b(onment)p Fp(.)39 b(This)19
-b(en)m(vironmen)m(t,)j(whic)m(h)e(k)m(eeps)h(all)f(global)0
-407 y(v)-5 b(ariables)26 b(and)h(functions,)g(is)g(initialized)d(at)29
-b(the)e(b)s(eginning)e(of)j(the)g(em)m(b)s(edding)e(program)h(and)g(p)s
-(ersists)f(un)m(til)0 520 y(its)k(end.)141 633 y(The)e(global)g(en)m
-(vironmen)m(t)g(can)h(b)s(e)f(manipulated)e(b)m(y)i(Lua)g(co)s(de)h(or)
-g(b)m(y)f(the)h(em)m(b)s(edding)d(program,)j(whic)m(h)0
-746 y(can)i(read)f(and)g(write)f(global)h(v)-5 b(ariables)29
-b(using)g(functions)g(in)g(the)h(library)e(that)j(implemen)m(ts)e(Lua.)
-141 859 y(Global)d(v)-5 b(ariables)26 b(do)h(not)h(need)e(declaration.)
-40 b(An)m(y)27 b(v)-5 b(ariable)26 b(is)g(assumed)g(to)i(b)s(e)f
-(global)f(unless)f(explicitly)0 972 y(declared)30 b(lo)s(cal)f(\(see)j
-(Section)e(4.4.5\).)43 b(Before)31 b(the)g(\014rst)e(assignmen)m(t,)i
-(the)f(v)-5 b(alue)30 b(of)h(a)g(global)e(v)-5 b(ariable)29
-b(is)h Fm(nil)p Fp(.)141 1085 y(The)g(unit)f(of)h(execution)h(of)g(Lua)
-f(is)f(called)h(a)g Fo(chunk)p Fp(.)41 b(The)30 b(syn)m(tax)2484
-1052 y Fl(1)2554 1085 y Fp(for)g(c)m(h)m(unks)g(is:)167
-1229 y Fo(chunk)100 b Fk(!)f(f)p Fo(statement)67 b Fk(j)33
-b Fo(function)7 b Fk(g)33 b Fp([)p Fo(r)-5 b(et)9 b Fp(])0
-1373 y(A)28 b(c)m(h)m(unk)g(ma)m(y)g(con)m(tain)h(statemen)m(ts)g(and)f
-(function)f(de\014nitions,)f(and)h(ma)m(y)i(b)s(e)e(in)g(a)h(\014le)f
-(or)h(in)f(a)h(string)f(inside)0 1486 y(the)g(host)f(program.)39
-b(A)27 b(c)m(h)m(unk)f(ma)m(y)h(optionally)d(ends)i(with)f(a)i(return)e
-(statemen)m(t)j(\(see)f(Section)g(4.4.3\).)41 b(When)0
-1599 y(a)c(c)m(h)m(unk)f(is)g(executed,)j(\014rst)d(all)f(its)h
-(functions)f(and)h(statemen)m(ts)i(are)f(compiled,)f(then)h(the)f
-(statemen)m(ts)j(are)0 1712 y(executed)c(in)e(sequen)m(tial)h(order.)53
-b(All)33 b(mo)s(di\014cations)f(a)j(c)m(h)m(unk)f(e\013ects)i(on)e(the)
-h(global)f(en)m(vironmen)m(t)g(p)s(ersist)0 1825 y(after)d(its)f(end.)
-40 b(Those)30 b(include)e(mo)s(di\014cations)h(to)i(global)e(v)-5
-b(ariables)29 b(and)h(de\014nitions)e(of)j(new)f(functions)3715
-1792 y Fl(2)3753 1825 y Fp(.)141 1938 y(Ch)m(unks)k(ma)m(y)i(b)s(e)f
-(pre-compiled;)h(see)g(program)f Fn(luac)f Fp(for)h(details.)55
-b(T)-8 b(ext)36 b(\014les)e(with)g(c)m(h)m(unks)h(and)g(their)0
-2051 y(binary)g(pre-compiled)f(forms)i(are)g(in)m(terc)m(hangeable.)59
-b(Lua)36 b(automatically)g(detects)i(the)e(\014le)g(t)m(yp)s(e)g(and)g
-(acts)0 2163 y(accordingly)-8 b(.)0 2450 y Fq(3)135 b(T)l(yp)t(es)0
-2653 y Fp(Lua)27 b(is)f(a)i(dynamically)d(t)m(yp)s(ed)i(language.)40
-b(V)-8 b(ariables)27 b(do)g(not)h(ha)m(v)m(e)g(t)m(yp)s(es;)h(only)d(v)
--5 b(alues)27 b(do.)39 b(All)26 b(v)-5 b(alues)27 b(carry)0
-2766 y(their)i(o)m(wn)i(t)m(yp)s(e.)41 b(Therefore,)30
-b(there)h(are)f(no)h(t)m(yp)s(e)f(de\014nitions)e(in)h(the)i(language.)
-141 2879 y(There)39 b(are)h(sev)m(en)f(basic)g(t)m(yp)s(es)g(in)f(Lua:)
-58 b Fo(nil)p Fp(,)42 b Fo(numb)-5 b(er)p Fp(,)42 b Fo(string)p
-Fp(,)h Fo(function)p Fp(,)e Fo(CF)-7 b(unction)p Fp(,)43
-b Fo(user)-5 b(data)p Fp(,)44 b(and)0 2992 y Fo(table)p
-Fp(.)d Fo(Nil)28 b Fp(is)h(the)g(t)m(yp)s(e)g(of)g(the)h(v)-5
-b(alue)28 b Fm(nil)p Fp(,)i(whose)f(main)f(prop)s(ert)m(y)g(is)g(to)i
-(b)s(e)e(di\013eren)m(t)h(from)f(an)m(y)i(other)f(v)-5
-b(alue.)0 3104 y Fo(Numb)g(er)30 b Fp(represen)m(ts)h(real)f
-(\(\015oating)g(p)s(oin)m(t\))g(n)m(um)m(b)s(ers,)f(while)g
-Fo(string)h Fp(has)g(the)h(usual)e(meaning.)141 3217
-y(F)-8 b(unctions)39 b(are)i(considered)d(\014rst-class)i(v)-5
-b(alues)39 b(in)f(Lua.)69 b(This)38 b(means)i(that)g(functions)f(can)h
-(b)s(e)f(stored)0 3330 y(in)33 b(v)-5 b(ariables,)34
-b(passed)g(as)h(argumen)m(ts)f(to)h(other)g(functions)e(and)g(returned)
-g(as)i(results.)51 b(When)34 b(a)h(function)e(is)0 3443
-y(de\014ned)28 b(in)h(Lua,)g(its)g(b)s(o)s(dy)f(is)h(compiled)f(and)h
-(stored)g(in)f(a)i(giv)m(en)g(v)-5 b(ariable.)39 b(Lua)29
-b(can)h(call)f(\(and)g(manipulate\))0 3556 y(functions)g(written)g(in)g
-(Lua)h(and)g(functions)f(written)h(in)f(C;)h(the)g(latter)h(ha)m(v)m(e)
-h(t)m(yp)s(e)e Fo(CF)-7 b(unction)7 b Fp(.)141 3669 y(The)35
-b(t)m(yp)s(e)g Fo(user)-5 b(data)37 b Fp(is)d(pro)m(vided)g(to)i(allo)m
-(w)e(arbitrary)g(C)h(p)s(oin)m(ters)e(to)j(b)s(e)f(stored)g(in)f(Lua)g
-(v)-5 b(ariables.)54 b(It)0 3782 y(corresp)s(onds)33
-b(to)j Fn(void*)d Fp(and)h(has)g(no)h(pre-de\014ned)e(op)s(erations)h
-(in)f(Lua,)j(b)s(esides)d(assignmen)m(t)h(and)g(equalit)m(y)0
-3895 y(test.)50 b(Ho)m(w)m(ev)m(er,)37 b(b)m(y)c(using)f(fallbac)m(ks,)
-h(the)h(programmer)f(ma)m(y)h(de\014ne)e(op)s(erations)h(for)g
-Fo(user)-5 b(data)35 b Fp(v)-5 b(alues;)34 b(see)0 4008
-y(Section)c(4.7.)141 4121 y(The)e(t)m(yp)s(e)g Fo(table)h
-Fp(implemen)m(ts)e(asso)s(ciativ)m(e)i(arra)m(ys,)g(that)g(is,)f(arra)m
-(ys)h(that)g(can)g(b)s(e)e(indexed)g(not)i(only)e(with)0
-4234 y(n)m(um)m(b)s(ers,)j(but)g(with)f(an)m(y)i(v)-5
-b(alue)31 b(\(except)h Fm(nil)p Fp(\).)42 b(Therefore,)31
-b(this)f(t)m(yp)s(e)h(ma)m(y)g(b)s(e)f(used)g(not)h(only)f(to)i
-(represen)m(t)0 4346 y(ordinary)c(arra)m(ys,)j(but)f(also)g(sym)m(b)s
-(ol)f(tables,)h(sets,)h(records,)f(etc.)42 b(T)-8 b(o)30
-b(represen)m(t)g(records,)g(Lua)g(uses)g(the)g(\014eld)0
-4459 y(name)38 b(as)h(an)f(index.)62 b(The)38 b(language)g(supp)s(orts)
-f(this)g(represen)m(tation)h(b)m(y)g(pro)m(viding)e Fn(a.name)h
-Fp(as)h(syn)m(tactic)0 4572 y(sugar)i(for)f Fn(a["name"])p
-Fp(.)67 b(T)-8 b(ables)40 b(ma)m(y)g(also)g(carry)g(metho)s(ds.)68
-b(Because)42 b(functions)c(are)j(\014rst)e(class)g(v)-5
-b(alues,)0 4685 y(table)33 b(\014elds)f(ma)m(y)i(con)m(tain)g
-(functions.)48 b(The)33 b(form)g Fn(t:f\(x\))e Fp(is)i(syn)m(tactic)h
-(sugar)f(for)h Fn(t.f\(t,x\))p Fp(,)e(whic)m(h)g(calls)0
-4798 y(the)f(metho)s(d)e Fn(f)h Fp(from)g(the)h(table)f
-Fn(t)g Fp(passing)f(itself)h(as)g(the)h(\014rst)e(parameter.)141
-4911 y(It)23 b(is)f(imp)s(ortan)m(t)h(to)g(notice)h(that)f(tables)g
-(are)h(ob)5 b(jects,)25 b(and)e(not)g(v)-5 b(alues.)38
-b(V)-8 b(ariables)22 b(cannot)i(con)m(tain)f(tables,)0
-5024 y(only)28 b(references)i(to)g(them.)41 b(Assignmen)m(t,)29
-b(parameter)h(passing)e(and)h(returns)f(alw)m(a)m(ys)i(manipulate)e
-(references)p 0 5103 1560 4 v 104 5157 a Fj(1)138 5189
-y Fi(As)e(usual,)g Fh(f)p Fg(a)6 b Fh(g)26 b Fi(means)g(0)g(or)g(more)f
-Fg(a)6 b Fi('s,)26 b([)p Fg(a)6 b Fi(])27 b(means)e(an)h(optional)g
-Fg(a)g Fi(and)f Fh(f)p Fg(a)6 b Fh(g)2439 5157 y Fj(+)2517
-5189 y Fi(means)25 b(one)h(or)g(more)f Fg(a)6 b Fi('s.)104
-5248 y Fj(2)138 5280 y Fi(Actually)-6 b(,)26 b(a)g(function)f
-(de\014nition)h(is)g(an)g(assignmen)n(t)f(to)h(a)g(global)h(v)l
-(ariable;)g(see)f(Section)g(3.)1927 5589 y Fp(2)p eop
-%%Page: 3 3
-3 2 bop 0 91 a Fp(to)35 b(tables,)g(and)e(do)h(not)h(imply)d(an)m(y)i
-(kind)e(of)j(cop)m(y)-8 b(.)53 b(Moreo)m(v)m(er,)37 b(tables)d(m)m(ust)
-g(b)s(e)f(explicitly)f(created)j(b)s(efore)0 204 y(used)30
-b(\(see)h(Section)f(4.5.7\).)0 489 y Fq(4)135 b(The)44
-b(Language)0 692 y Fp(This)29 b(section)h(describ)s(es)f(the)h(lexis,)g
-(the)g(syn)m(tax)h(and)f(the)g(seman)m(tics)h(of)g(Lua.)0
-934 y Ff(4.1)112 b(Lexical)37 b(Con)m(v)m(en)m(tions)0
-1105 y Fp(Lua)e(is)g(a)h(case)g(sensitiv)m(e)f(language.)56
-b(Iden)m(ti\014ers)34 b(can)i(b)s(e)f(an)m(y)h(string)e(of)i(letters,)h
-(digits,)f(and)f(underscores,)0 1218 y(not)c(b)s(eginning)c(with)i(a)i
-(digit.)40 b(The)29 b(follo)m(wing)g(w)m(ords)h(are)h(reserv)m(ed,)g
-(and)e(cannot)i(b)s(e)f(used)g(as)g(iden)m(ti\014ers:)286
-1397 y Fn(and)334 b(do)381 b(else)285 b(elseif)286 1510
-y(end)334 b(function)93 b(if)381 b(local)286 1623 y(nil)334
-b(not)f(or)381 b(repeat)286 1736 y(return)190 b(then)285
-b(until)237 b(while)141 1914 y Fp(The)30 b(follo)m(wing)f(strings)g
-(denote)i(other)g(tok)m(ens:)430 2093 y Fn(~=)94 b(<=)h(>=)g(<)143
-b(>)g(==)95 b(=)143 b(..)95 b(+)143 b(-)g(*)g(/)430 2206
-y(\045)f(\()h(\))g({)g(})g([)g(])g(;)g(,)g(.)141 2385
-y Fp(Literal)44 b(strings)f(can)h(b)s(e)g(delimited)e(b)m(y)i(matc)m
-(hing)h(single)e(or)h(double)f(quotes,)49 b(and)43 b(can)i(con)m(tain)g
-(the)0 2498 y(C-lik)m(e)35 b(escap)s(e)h(sequences)g
-Fn('\\n')p Fp(,)g Fn('\\t')e Fp(and)h Fn('\\r')p Fp(.)56
-b(Literal)34 b(strings)h(can)h(also)f(b)s(e)g(delimited)e(b)m(y)j(matc)
-m(hing)0 2610 y Fn([[)47 b(...)g(]])p Fp(.)38 b(Literals)21
-b(in)h(this)f(brac)m(k)m(eted)j(form)f(ma)m(y)g(run)e(for)i(sev)m(eral)
-g(lines,)f(ma)m(y)i(con)m(tain)f(nested)f Fn([[)48 b(...)f(]])0
-2723 y Fp(pairs,)29 b(and)h(do)g(not)h(in)m(terpret)f(escap)s(e)h
-(sequences.)141 2836 y(Commen)m(ts)f(start)g(an)m(ywhere)f(outside)g(a)
-h(string)e(with)h(a)h(double)e(h)m(yphen)g(\()p Fn(--)p
-Fp(\))h(and)g(run)f(un)m(til)g(the)i(end)f(of)0 2949
-y(the)i(line.)39 b(Moreo)m(v)m(er,)32 b(if)e(the)g(\014rst)g(line)f(of)
-h(a)h(c)m(h)m(unk)f(\014le)g(starts)g(with)f Fn(#)p Fp(,)i(this)e(line)
-g(is)g(skipp)s(ed)3289 2916 y Fl(3)3326 2949 y Fp(.)141
-3062 y(Numerical)35 b(constan)m(ts)j(ma)m(y)e(b)s(e)g(written)f(with)g
-(an)h(optional)g(decimal)f(part,)j(and)d(an)i(optional)e(decimal)0
-3175 y(exp)s(onen)m(t.)41 b(Examples)29 b(of)i(v)-5 b(alid)28
-b(n)m(umerical)h(constan)m(ts)j(are:)334 3354 y Fn(4)238
-b(4.0)g(0.4)g(4.57e-3)f(0.3e12)0 3595 y Ff(4.2)112 b(Co)s(ercion)0
-3767 y Fp(Lua)37 b(pro)m(vides)f(some)h(automatic)h(con)m(v)m(ersions.)
-60 b(An)m(y)37 b(arithmetic)g(op)s(eration)f(applied)f(to)j(a)f(string)
-f(tries)g(to)0 3880 y(con)m(v)m(ert)c(that)e(string)f(to)i(a)g(n)m(um)m
-(b)s(er,)e(follo)m(wing)f(the)j(usual)d(rules.)40 b(Con)m(v)m(ersely)-8
-b(,)30 b(whenev)m(er)g(a)h(n)m(um)m(b)s(er)e(is)g(used)0
-3993 y(when)g(a)i(string)e(is)h(exp)s(ected,)h(that)g(n)m(um)m(b)s(er)e
-(is)g(con)m(v)m(erted)j(to)f(a)g(string,)f(according)g(to)h(the)g
-(follo)m(wing)e(rule:)39 b(if)0 4106 y(the)26 b(n)m(um)m(b)s(er)e(is)h
-(an)g(in)m(teger,)i(it)e(is)g(written)g(without)f(exp)s(onen)m(t)i(or)f
-(decimal)g(p)s(oin)m(t;)h(otherwise,)h(it)e(is)f(formatted)0
-4219 y(follo)m(wing)29 b(the)h Fn(\045g)g Fp(con)m(v)m(ersion)h(sp)s
-(eci\014cation)e(of)i(the)f Fn(printf)f Fp(function)g(in)g(the)h
-(standard)g(C)g(library)-8 b(.)0 4460 y Ff(4.3)112 b(Adjustmen)m(t)0
-4632 y Fp(F)-8 b(unctions)28 b(in)f(Lua)h(can)g(return)f(man)m(y)i(v)-5
-b(alues.)39 b(Because)30 b(there)e(are)h(no)f(t)m(yp)s(e)g
-(declarations,)g(the)h(system)f(do)s(es)0 4745 y(not)36
-b(kno)m(w)f(ho)m(w)g(man)m(y)h(v)-5 b(alues)35 b(a)g(function)f(will)f
-(return,)j(or)f(ho)m(w)h(man)m(y)f(parameters)h(it)f(needs.)55
-b(Therefore,)0 4858 y(sometimes,)26 b(a)g(list)e(of)h(v)-5
-b(alues)24 b(m)m(ust)h(b)s(e)g Fo(adjuste)-5 b(d)9 b
-Fp(,)28 b(at)e(run)e(time,)i(to)g(a)f(giv)m(en)g(length.)39
-b(If)24 b(there)i(are)f(more)h(v)-5 b(alues)0 4971 y(than)33
-b(are)g(needed,)g(then)g(the)g(last)f(v)-5 b(alues)33
-b(are)g(thro)m(wn)f(a)m(w)m(a)m(y)-8 b(.)51 b(If)32 b(there)h(are)g
-(more)g(needs)g(than)f(v)-5 b(alues,)33 b(then)0 5084
-y(the)g(list)e(is)g(extended)h(with)f(as)i(man)m(y)g
-Fm(nil)p Fp('s)f(as)h(needed.)46 b(Adjustmen)m(t)32 b(o)s(ccurs)g(in)f
-(m)m(ultiple)f(assignmen)m(t)j(and)0 5197 y(function)c(calls.)p
-0 5254 1560 4 v 104 5308 a Fj(3)138 5340 y Fi(This)e(facilit)n(y)f
-(allo)n(ws)i(the)d(use)h(of)h(Lua)e(as)i(a)f(script)f(in)n(terpreter)h
-(in)f(Unix)g(systems.)1927 5589 y Fp(3)p eop
-%%Page: 4 4
-4 3 bop 0 91 a Ff(4.4)112 b(Statemen)m(ts)0 263 y Fp(Lua)35
-b(supp)s(orts)f(an)i(almost)f(con)m(v)m(en)m(tional)i(set)f(of)g
-(statemen)m(ts.)58 b(The)35 b(con)m(v)m(en)m(tional)i(commands)e
-(include)e(as-)0 376 y(signmen)m(t,)h(con)m(trol)h(structures)e(and)g
-(pro)s(cedure)g(calls.)50 b(Non-con)m(v)m(en)m(tional)35
-b(commands)f(include)e(table)h(con-)0 489 y(structors)d(\(Section)h
-(4.5.7\),)i(and)c(lo)s(cal)h(v)-5 b(ariable)29 b(declarations)h
-(\(Section)h(4.4.5\).)0 729 y Fm(4.4.1)105 b(Blo)s(c)m(ks)0
-901 y Fp(A)36 b(blo)s(c)m(k)g(is)f(a)h(list)f(of)h(statemen)m(ts,)k
-(whic)m(h)35 b(is)g(executed)i(sequen)m(tially)-8 b(.)57
-b(An)m(y)36 b(statemen)m(t)i(can)e(b)s(e)g(optionally)0
-1013 y(follo)m(w)m(ed)30 b(b)m(y)g(a)h(semicolon:)167
-1150 y Fo(blo)-5 b(ck)100 b Fk(!)g(f)p Fo(stat)34 b(sc)5
-b Fk(g)33 b Fp([)p Fo(r)-5 b(et)9 b Fp(])279 1263 y Fo(sc)99
-b Fk(!)h Fp([';'])0 1399 y(F)-8 b(or)38 b(syn)m(tactic)g(reasons,)h(a)e
-Fn(return)f Fp(statemen)m(t)i(can)g(only)e(b)s(e)g(written)g(as)i(the)f
-(last)g(statemen)m(t)i(of)e(a)g(blo)s(c)m(k.)0 1512 y(This)29
-b(restriction)g(also)h(a)m(v)m(oids)h(some)g(\\statemen)m(t)h(not)f
-(reac)m(hed")h(errors.)0 1752 y Fm(4.4.2)105 b(Assignmen)m(t)0
-1924 y Fp(The)34 b(language)g(allo)m(ws)f(m)m(ultiple)f(assignmen)m(t.)
-52 b(Therefore,)35 b(the)f(syn)m(tax)h(de\014nes)e(a)h(list)f(of)h(v)-5
-b(ariables)33 b(on)h(the)0 2037 y(left)i(side,)h(and)e(a)i(list)e(of)h
-(expressions)f(on)h(the)h(righ)m(t)e(side.)58 b(Both)36
-b(lists)f(ha)m(v)m(e)j(their)d(elemen)m(ts)h(separated)h(b)m(y)0
-2150 y(commas:)315 2268 y Fo(stat)100 b Fk(!)g Fo(varlist1)34
-b Fp('=')f Fo(explist1)167 2381 y(varlist1)101 b Fk(!)f
-Fo(var)33 b Fk(f)p Fp(',')h Fo(var)10 b Fk(g)0 2518 y
-Fp(This)27 b(statemen)m(t)k(\014rst)d(ev)-5 b(aluates)30
-b(all)e(v)-5 b(alues)28 b(on)h(the)g(righ)m(t)f(side)g(and)h(ev)m(en)m
-(tual)g(indices)e(on)i(the)g(left)g(side,)g(and)0 2631
-y(then)h(mak)m(es)h(the)g(assignmen)m(ts.)40 b(Therefore,)31
-b(it)f(can)g(b)s(e)g(used)g(to)h(exc)m(hange)h(t)m(w)m(o)f(v)-5
-b(alues,)30 b(as)h(in)143 2818 y Fn(x,)47 b(y)h(=)f(y,)g(x)0
-3006 y Fp(Before)f(the)f(assignmen)m(t,)k(the)c(list)e(of)i(v)-5
-b(alues)44 b(is)g Fo(adjuste)-5 b(d)47 b Fp(to)e(the)g(length)g(of)g
-(the)g(list)e(of)i(v)-5 b(ariables)44 b(\(see)0 3119
-y(Section)30 b(4.3\).)141 3232 y(A)h(single)e(name)h(can)h(denote)g(a)f
-(global)g(or)g(a)h(lo)s(cal)f(v)-5 b(ariable,)29 b(or)i(a)f(formal)g
-(parameter:)167 3376 y Fo(var)100 b Fk(!)g Fo(name)0
-3520 y Fp(Square)30 b(brac)m(k)m(ets)i(are)e(used)g(to)h(index)e(a)i
-(table:)167 3665 y Fo(var)100 b Fk(!)g Fo(var)33 b Fp('[')g
-Fo(exp1)h Fp(']')0 3809 y(If)i Fn(var)f Fp(results)g(in)f(a)j(table)f
-(v)-5 b(alue,)37 b(the)g(\014eld)d(indexed)h(b)m(y)h(the)g(expression)f
-(v)-5 b(alue)35 b(gets)j(the)e(assigned)f(v)-5 b(alue.)0
-3922 y(Otherwise,)41 b(the)e(fallbac)m(k)g Fo(settable)h
-Fp(is)e(called,)k(with)c(three)h(parameters:)59 b(the)40
-b(v)-5 b(alue)39 b(of)g Fn(var)p Fp(,)i(the)f(v)-5 b(alue)39
-b(of)0 4035 y(expression,)29 b(and)h(the)h(v)-5 b(alue)30
-b(b)s(eing)f(assigned)g(to)i(it;)f(see)h(Section)g(4.7.)141
-4148 y(The)f(syn)m(tax)h Fn(var.NAME)d Fp(is)h(just)h(syn)m(tactic)i
-(sugar)e(for)g Fn(var["NAME"])p Fp(.)167 4292 y Fo(var)100
-b Fk(!)g Fo(var)33 b Fp('.')43 b Fo(name)0 4563 y Fm(4.4.3)105
-b(Con)m(trol)35 b(Structures)0 4735 y Fp(The)30 b(condition)f
-(expression)h(of)h(a)g(con)m(trol)g(structure)f(can)h(return)e(an)m(y)i
-(v)-5 b(alue.)41 b(All)30 b(v)-5 b(alues)30 b(di\013eren)m(t)g(from)g
-Fm(nil)0 4848 y Fp(are)h(considered)e(true;)h Fm(nil)h
-Fp(is)e(considered)g(false.)41 b Fn(if)p Fp('s,)30 b
-Fn(while)p Fp('s)f(and)h Fn(repeat)p Fp('s)f(ha)m(v)m(e)i(the)g(usual)e
-(meaning.)223 4987 y Fo(stat)101 b Fk(!)e Fm(while)32
-b Fo(exp1)i Fm(do)f Fo(blo)-5 b(ck)33 b Fm(end)574 5099
-y Fk(j)65 b Fm(rep)s(eat)32 b Fo(blo)-5 b(ck)33 b Fm(un)m(til)f
-Fo(exp1)574 5212 y Fk(j)65 b Fm(if)32 b Fo(exp1)i Fm(then)e
-Fo(blo)-5 b(ck)33 b Fk(f)p Fo(elseif)20 b Fk(g)33 b Fp([)p
-Fm(else)f Fo(blo)-5 b(ck)10 b Fp(])34 b Fm(end)167 5325
-y Fo(elseif)100 b Fk(!)f Fm(elseif)33 b Fo(exp1)g Fm(then)g
-Fo(blo)-5 b(ck)1927 5589 y Fp(4)p eop
-%%Page: 5 5
-5 4 bop 141 204 a Fp(A)32 b Fn(return)e Fp(is)h(used)g(to)h(return)f(v)
--5 b(alues)31 b(from)g(a)h(function)f(or)g(a)h(c)m(h)m(unk.)45
-b(Because)33 b(they)f(ma)m(y)g(return)f(more)0 317 y(than)f(one)h(v)-5
-b(alue,)30 b(the)g(syn)m(tax)h(for)g(a)f(return)g(statemen)m(t)i(is:)
-167 461 y Fo(r)-5 b(et)101 b Fk(!)e Fm(return)32 b Fo(explist)i
-Fp([)p Fo(sc)5 b Fp(])0 846 y Fm(4.4.4)105 b(F)-9 b(unction)36
-b(Calls)f(as)f(Statemen)m(ts)0 1017 y Fp(Because)e(of)e(p)s(ossible)e
-(side-e\013ects,)k(function)d(calls)g(can)i(b)s(e)f(executed)h(as)f
-(statemen)m(ts:)167 1162 y Fo(stat)101 b Fk(!)e Fo(functionc)-5
-b(al)5 b(l)0 1306 y Fp(Ev)m(en)m(tual)31 b(returned)e(v)-5
-b(alues)29 b(are)i(thro)m(wn)f(a)m(w)m(a)m(y)-8 b(.)43
-b(F)-8 b(unction)30 b(calls)g(are)g(explained)f(in)g(Section)h(4.5.8.)0
-1546 y Fm(4.4.5)105 b(Lo)s(cal)36 b(Declarations)0 1718
-y Fp(Lo)s(cal)c(v)-5 b(ariables)31 b(can)h(b)s(e)g(declared)g(an)m
-(ywhere)g(inside)e(a)i(blo)s(c)m(k.)46 b(Their)30 b(scop)s(e)j(b)s
-(egins)d(after)j(the)f(declaration)0 1830 y(and)e(lasts)g(un)m(til)e
-(the)j(end)f(of)g(the)h(blo)s(c)m(k.)40 b(The)30 b(declaration)g(ma)m
-(y)h(include)d(an)i(initial)e(assignmen)m(t:)267 1967
-y Fo(stat)101 b Fk(!)e Fm(lo)s(cal)33 b Fo(de)-5 b(clist)34
-b Fp([)p Fo(init)9 b Fp(])167 2080 y Fo(de)-5 b(clist)101
-b Fk(!)e Fo(name)34 b Fk(f)p Fp(',')f Fo(name)7 b Fk(g)274
-2193 y Fo(init)100 b Fk(!)f Fp('=')33 b Fo(explist1)0
-2329 y Fp(If)h(presen)m(t,)h(an)f(initial)d(assignmen)m(t)j(has)g(the)g
-(same)h(seman)m(tics)f(of)g(a)h(m)m(ultiple)c(assignmen)m(t.)52
-b(Otherwise,)34 b(all)0 2442 y(v)-5 b(ariables)29 b(are)i(initialized)c
-(with)i Fm(nil)p Fp(.)0 2686 y Ff(4.5)112 b(Expressions)0
-2857 y Fm(4.5.1)105 b(Simple)35 b(Expressions)0 3029
-y Fp(Simple)28 b(expressions)h(are:)167 3165 y Fo(exp)100
-b Fk(!)g Fp('\(')33 b Fo(exp)g Fp('\)')167 3278 y Fo(exp)100
-b Fk(!)g Fm(nil)167 3391 y Fo(exp)g Fk(!)g Fp('n)m(um)m(b)s(er')167
-3504 y Fo(exp)g Fk(!)g Fp('literal')167 3617 y Fo(exp)g
-Fk(!)g Fo(var)0 3758 y Fp(Num)m(b)s(ers)44 b(\(n)m(umerical)g(constan)m
-(ts\))j(and)e(string)f(literals)f(are)j(explained)d(in)h(Section)h
-(4.1.)87 b(V)-8 b(ariables)45 b(are)0 3871 y(explained)29
-b(in)g(Section)h(4.4.2.)0 4111 y Fm(4.5.2)105 b(Arithmetic)34
-b(Op)s(erators)0 4283 y Fp(Lua)41 b(supp)s(orts)e(the)i(usual)f
-(arithmetic)g(op)s(erators.)73 b(These)41 b(op)s(erators)g(are)h(the)f
-(binary)e Fn(+)p Fp(,)44 b Fn(-)p Fp(,)f Fn(*)p Fp(,)h
-Fn(/)d Fp(and)f Fn(^)0 4396 y Fp(\(exp)s(onen)m(tiation\),)32
-b(and)g(the)g(unary)e Fn(-)p Fp(.)45 b(If)32 b(the)g(op)s(erands)e(are)
-i(n)m(um)m(b)s(ers,)f(or)h(strings)f(that)h(can)g(b)s(e)f(con)m(v)m
-(erted)0 4509 y(to)26 b(n)m(um)m(b)s(ers,)f(according)h(to)g(the)g
-(rules)e(giv)m(en)h(in)f(Section)h(4.2,)j(then)d(all)g(op)s(erations)f
-(but)h(exp)s(onen)m(tiation)g(ha)m(v)m(e)0 4622 y(the)33
-b(usual)e(meaning.)47 b(Otherwise,)33 b(the)g(fallbac)m(k)f(\\arith")h
-(is)f(called)g(\(see)h(Section)g(4.7\).)49 b(An)33 b(exp)s(onen)m
-(tiation)0 4735 y(alw)m(a)m(ys)39 b(calls)f(this)f(fallbac)m(k.)65
-b(The)38 b(standard)f(mathematical)i(library)d(rede\014nes)i(this)f
-(fallbac)m(k,)j(giving)e(the)0 4848 y(exp)s(ected)31
-b(meaning)e(to)j(exp)s(onen)m(tiation)d(\(see)j(Section)e(6.3\).)0
-5088 y Fm(4.5.3)105 b(Relational)35 b(Op)s(erators)0
-5259 y Fp(Lua)30 b(pro)m(vides)f(the)i(follo)m(wing)e(relational)g(op)s
-(erators:)1927 5589 y(5)p eop
-%%Page: 6 6
-6 5 bop 334 91 a Fn(<)143 b(>)g(<=)95 b(>=)g(~=)g(==)0
-279 y Fp(All)29 b(these)i(return)e Fm(nil)i Fp(as)f(false)g(and)g(a)h
-(v)-5 b(alue)30 b(di\013eren)m(t)f(from)h Fm(nil)h Fp(\(actually)f(the)
-h(n)m(um)m(b)s(er)e(1\))i(as)f(true.)141 392 y(Equalit)m(y)k(\014rst)f
-(compares)i(the)g(t)m(yp)s(es)f(of)h(its)e(op)s(erands.)52
-b(If)34 b(they)g(are)h(di\013eren)m(t,)g(then)f(the)h(result)e(is)h
-Fm(nil)p Fp(.)0 505 y(Otherwise,)25 b(their)g(v)-5 b(alues)24
-b(are)i(compared.)39 b(Num)m(b)s(ers)24 b(and)h(strings)f(are)i
-(compared)f(in)f(the)i(usual)e(w)m(a)m(y)-8 b(.)40 b(T)-8
-b(ables,)0 618 y(CF)g(unctions,)28 b(and)g(functions)e(are)j(compared)f
-(b)m(y)g(reference,)h(that)g(is,)f(t)m(w)m(o)i(tables)e(are)g
-(considered)f(equal)h(only)0 731 y(if)h(they)i(are)g(the)f(same)h
-(table.)41 b(The)29 b(op)s(erator)i Fn(~=)f Fp(is)f(exactly)i(the)g
-(negation)g(of)f(equalit)m(y)g(\()p Fn(==)p Fp(\).)141
-844 y(The)h(other)i(op)s(erators)f(w)m(ork)g(as)g(follo)m(ws.)44
-b(If)31 b(b)s(oth)h(argumen)m(ts)g(are)g(n)m(um)m(b)s(ers,)f(then)h
-(they)g(are)g(compared)0 956 y(as)c(suc)m(h.)39 b(Otherwise,)27
-b(if)f(b)s(oth)h(argumen)m(ts)g(can)h(b)s(e)f(con)m(v)m(erted)h(to)g
-(strings,)f(their)g(v)-5 b(alues)26 b(are)i(compared)f(using)0
-1069 y(lexicographical)i(order.)40 b(Otherwise,)29 b(the)i(\\order")g
-(fallbac)m(k)f(is)f(called)h(\(see)h(Section)f(4.7\).)0
-1309 y Fm(4.5.4)105 b(Logical)36 b(Op)s(erators)0 1481
-y Fp(Lik)m(e)g(con)m(trol)g(structures,)g(all)f(logical)g(op)s(erators)
-h(consider)f Fm(nil)h Fp(as)g(false)f(and)g(an)m(ything)g(else)h(as)g
-(true.)56 b(The)0 1594 y(logical)30 b(op)s(erators)g(are:)620
-1782 y Fn(and)143 b(or)f(not)0 1969 y Fp(The)31 b(op)s(erator)g
-Fn(and)f Fp(returns)g Fm(nil)i Fp(if)e(its)g(\014rst)h(argumen)m(t)g
-(is)f Fm(nil)p Fp(;)i(otherwise)f(it)g(returns)e(its)i(second)g
-(argumen)m(t.)0 2082 y(The)d(op)s(erator)h Fn(or)g Fp(returns)e(its)i
-(\014rst)f(argumen)m(t)h(if)f(it)g(is)g(di\013eren)m(t)g(from)h
-Fm(nil)p Fp(;)g(otherwise)g(it)f(returns)g(its)g(second)0
-2195 y(argumen)m(t.)40 b(Both)29 b Fn(and)e Fp(and)g
-Fn(or)g Fp(use)h(short-cut)g(ev)-5 b(aluation,)28 b(that)h(is,)e(the)h
-(second)g(op)s(erand)f(is)g(ev)-5 b(aluated)28 b(only)0
-2308 y(if)h(necessary)-8 b(.)0 2548 y Fm(4.5.5)105 b(Concatenation)0
-2720 y Fp(Lua)33 b(o\013ers)h(a)g(string)e(concatenation)j(op)s
-(erator,)g(denoted)f(b)m(y)f(\\)p Fn(..)p Fp(".)50 b(If)33
-b(op)s(erands)f(are)i(strings)f(or)g(n)m(um)m(b)s(ers,)0
-2833 y(then)j(they)g(are)h(con)m(v)m(erted)h(to)f(strings)e(according)h
-(to)h(the)f(rules)f(in)g(Section)h(4.2.)59 b(Otherwise,)37
-b(the)f(fallbac)m(k)0 2946 y(\\concat")d(is)c(called)h(\(see)h(Section)
-f(4.7\).)0 3186 y Fm(4.5.6)105 b(Precedence)0 3357 y
-Fp(Op)s(erator)30 b(precedence)h(follo)m(ws)e(the)i(table)f(b)s(elo)m
-(w,)g(from)g(the)g(lo)m(w)m(er)h(to)g(the)g(higher)e(priorit)m(y:)620
-3545 y Fn(and)143 b(or)620 3658 y(<)g(>)g(<=)95 b(>=)g(~=)g(==)620
-3771 y(..)620 3884 y(+)143 b(-)620 3997 y(*)g(/)620 4109
-y(not)95 b(-)48 b(\(unary\))620 4222 y(^)0 4410 y Fp(All)29
-b(binary)g(op)s(erators)h(are)h(left)f(asso)s(ciativ)m(e,)h(except)h
-(for)e Fn(^)g Fp(\(exp)s(onen)m(tiation\),)g(whic)m(h)g(is)f(righ)m(t)h
-(asso)s(ciativ)m(e.)0 4650 y Fm(4.5.7)105 b(T)-9 b(able)35
-b(Constructors)0 4822 y Fp(T)-8 b(able)30 b(constructors)g(are)g
-(expressions)f(that)i(create)g(tables;)f(ev)m(ery)h(time)f(a)g
-(constructor)g(is)g(ev)-5 b(aluated,)30 b(a)g(new)0 4935
-y(table)c(is)f(created.)41 b(Constructors)26 b(can)g(b)s(e)g(used)f(to)
-i(create)h(empt)m(y)f(tables,)g(or)f(to)h(create)h(a)f(table)f(and)g
-(initialize)0 5048 y(some)31 b(\014elds.)141 5160 y(The)f(general)g
-(syn)m(tax)h(for)f(constructors)h(is:)1927 5589 y(6)p
-eop
-%%Page: 7 7
-7 6 bop 167 79 a Fo(table)-5 b(c)g(onstructor)103 b Fk(!)c
-Fp(')p Fk(f)p Fp(')34 b Fo(\014eld)5 b(list)33 b Fp(')p
-Fk(g)p Fp(')506 192 y Fo(\014eld)5 b(list)101 b Fk(!)e
-Fo(l\014eld)5 b(list)66 b Fk(j)33 b Fo(\016eld)5 b(list)66
-b Fk(j)33 b Fo(l\014eld)5 b(list)33 b Fp(';')h Fo(\016eld)5
-b(list)483 305 y(l\014eld)g(list)101 b Fk(!)e Fp([)p
-Fo(l\014eld)5 b(list1)12 b Fp(])477 418 y Fo(\016eld)5
-b(list)101 b Fk(!)e Fp([)p Fo(\016eld)5 b(list1)12 b
-Fp(])141 604 y(The)30 b(form)g Fo(l\014eld)5 b(list1)32
-b Fp(is)d(used)h(to)h(initialize)c(lists.)167 748 y Fo(l\014eld)5
-b(list1)101 b Fk(!)f Fo(exp)33 b Fk(f)p Fp(',')h Fo(exp)6
-b Fk(g)33 b Fp([','])0 893 y(The)40 b(expressions)g(in)f(the)i(list)e
-(are)i(assigned)f(to)i(consecutiv)m(e)f(n)m(umerical)f(indexes,)i
-(starting)f(with)e(1.)72 b(F)-8 b(or)0 1006 y(example:)143
-1193 y Fn(a)48 b(=)f({"v1",)f("v2",)h(34})0 1381 y Fp(is)29
-b(roughly)g(equiv)-5 b(alen)m(t)30 b(to:)143 1568 y Fn(temp)47
-b(=)g({})143 1681 y(temp[1])f(=)h("v1")143 1794 y(temp[2])f(=)h("v2")
-143 1907 y(temp[3])f(=)h(34)143 2020 y(a)h(=)f(temp)141
-2208 y Fp(The)30 b(next)h(form)e(initializes)f(named)i(\014elds)f(in)g
-(a)i(table:)167 2326 y Fo(\016eld)5 b(list1)101 b Fk(!)f
-Fo(\016eld)33 b Fk(f)p Fp(',')h Fo(\016eld)9 b Fk(g)34
-b Fp([','])337 2439 y Fo(\016eld)100 b Fk(!)g Fo(name)33
-b Fp('=')g Fo(exp)0 2576 y Fp(F)-8 b(or)31 b(example:)143
-2763 y Fn(a)48 b(=)f({x)g(=)h(1,)f(y)g(=)h(3})0 2951
-y Fp(is)29 b(roughly)g(equiv)-5 b(alen)m(t)30 b(to:)143
-3139 y Fn(temp)47 b(=)g({})143 3252 y(temp.x)f(=)i(1)190
-b(--)48 b(or)f(temp["x"])e(=)i(1)143 3365 y(temp.y)f(=)i(3)190
-b(--)48 b(or)f(temp["y"])e(=)i(3)143 3477 y(a)h(=)f(temp)0
-3718 y Fm(4.5.8)105 b(F)-9 b(unction)36 b(Calls)0 3889
-y Fp(A)30 b(function)g(call)f(has)h(the)h(follo)m(wing)e(syn)m(tax:)167
-4033 y Fo(functionc)-5 b(al)5 b(l)101 b Fk(!)e Fo(var)34
-b(r)-5 b(e)g(alPar)g(ams)0 4178 y Fp(Here,)49 b Fn(var)44
-b Fp(can)h(b)s(e)f(an)m(y)h(v)-5 b(ariable)44 b(\(global,)k(lo)s(cal,)g
-(indexed,)f(etc\).)86 b(If)44 b(its)g(v)-5 b(alue)45
-b(has)f(t)m(yp)s(e)h Fo(function)52 b Fp(or)0 4291 y
-Fo(CF)-7 b(unction)7 b Fp(,)29 b(then)f(this)e(function)h(is)g(called.)
-39 b(Otherwise,)27 b(the)h(\\function")f(fallbac)m(k)h(is)f(called,)g
-(ha)m(ving)h(as)g(\014rst)0 4403 y(parameter)j(the)f(v)-5
-b(alue)30 b(of)h Fn(var)p Fp(,)f(and)f(then)h(the)h(original)d(call)i
-(parameters.)141 4516 y(The)g(form:)167 4661 y Fo(functionc)-5
-b(al)5 b(l)101 b Fk(!)e Fo(var)34 b Fp(':')42 b Fo(name)33
-b(r)-5 b(e)g(alPar)g(ams)0 4805 y Fp(can)31 b(b)s(e)e(used)h(to)h(call)
-f(\\metho)s(ds".)41 b(A)30 b(call)g Fn(var:name\(...\))d
-Fp(is)i(syn)m(tactic)i(sugar)g(for)95 4992 y Fn(var.name\(var,)45
-b(...\))1927 5589 y Fp(7)p eop
-%%Page: 8 8
-8 7 bop 0 91 a Fp(except)31 b(that)g Fn(var)f Fp(is)f(ev)-5
-b(aluated)31 b(only)e(once.)167 228 y Fo(r)-5 b(e)g(alPar)g(ams)103
-b Fk(!)d Fp('\(')33 b([)p Fo(explist1)12 b Fp(])35 b('\)')167
-341 y Fo(r)-5 b(e)g(alPar)g(ams)103 b Fk(!)d Fo(table)-5
-b(c)g(onstructor)312 453 y(explist1)101 b Fk(!)f Fo(exp1)33
-b Fk(f)p Fp(',')h Fo(exp1)12 b Fk(g)0 590 y Fp(All)35
-b(argumen)m(t)h(expressions)f(are)i(ev)-5 b(aluated)36
-b(b)s(efore)g(the)g(call;)j(then)d(the)g(list)f(of)h(argumen)m(ts)h(is)
-e(adjusted)g(to)0 703 y(the)40 b(length)g(of)h(the)f(list)f(of)h
-(parameters)h(\(see)g(Section)f(4.3\);)47 b(\014nally)-8
-b(,)41 b(this)f(list)e(is)i(assigned)f(to)i(the)g(formal)0
-816 y(parameters.)i(A)32 b(call)e(of)i(the)f(form)g Fn(f{...})e
-Fp(is)h(syn)m(tactic)i(sugar)f(for)g Fn(f\({...}\))p
-Fp(,)f(that)i(is,)e(the)i(parameter)f(list)0 929 y(is)e(a)i(single)e
-(new)h(table.)141 1042 y(Because)j(a)e(function)f(can)h(return)f(an)m
-(y)i(n)m(um)m(b)s(er)d(of)j(results)d(\(see)j(Section)f(4.4.3\),)j(the)
-d(n)m(um)m(b)s(er)f(of)h(results)0 1155 y(m)m(ust)c(b)s(e)g(adjusted)g
-(b)s(efore)g(used.)39 b(If)27 b(the)h(function)e(is)g(called)h(as)h(a)g
-(statemen)m(t)h(\(see)f(Section)g(4.4.4\),)i(its)d(return)0
-1268 y(list)37 b(is)g(adjusted)h(to)h(0.)65 b(If)38 b(the)g(function)f
-(is)h(called)f(in)g(a)i(place)f(that)h(needs)f(a)h(single)e(v)-5
-b(alue)38 b(\(syn)m(tactically)0 1380 y(denoted)d(b)m(y)f(the)h
-(non-terminal)e Fn(exp1)p Fp(\),)j(then)e(its)g(return)g(list)g(is)f
-(adjusted)h(to)i(1.)54 b(If)35 b(the)f(function)g(is)g(called)0
-1493 y(in)k(a)h(place)h(that)f(can)h(hold)e(man)m(y)h(v)-5
-b(alues)38 b(\(syn)m(tactically)i(denoted)f(b)m(y)g(the)h(non-terminal)
-d Fn(exp)p Fp(\),)k(then)e(no)0 1606 y(adjustmen)m(t)30
-b(is)g(made.)0 1850 y Ff(4.6)112 b(F)-9 b(unction)37
-b(De\014nitions)0 2021 y Fp(F)-8 b(unctions)31 b(in)g(Lua)g(can)h(b)s
-(e)g(de\014ned)e(an)m(ywhere)i(in)e(the)i(global)g(lev)m(el)f(of)h(a)g
-(c)m(h)m(unk.)45 b(The)31 b(syn)m(tax)i(for)e(function)0
-2134 y(de\014nition)d(is:)167 2278 y Fo(function)100
-b Fk(!)g Fm(function)33 b Fo(var)g Fp('\(')g([)p Fo(p)-5
-b(arlist1)12 b Fp(])36 b('\)')e Fo(blo)-5 b(ck)33 b Fm(end)141
-2536 y Fp(When)27 b(Lua)g(pre-compiles)f(a)i(c)m(h)m(unk,)g(all)e(its)h
-(function)f(b)s(o)s(dies)f(are)j(pre-compiled,)e(to)s(o.)41
-b(Then,)27 b(when)f(Lua)0 2649 y(\\executes")33 b(the)d(function)f
-(de\014nition,)f(its)i(b)s(o)s(dy)f(is)g(stored,)i(with)e(t)m(yp)s(e)i
-Fo(function)p Fp(,)g(in)m(to)f(the)g(v)-5 b(ariable)30
-b Fn(var)p Fp(.)141 2761 y(P)m(arameters)i(act)f(as)g(lo)s(cal)e(v)-5
-b(ariables,)30 b(initialized)d(with)i(the)i(argumen)m(t)f(v)-5
-b(alues.)167 2906 y Fo(p)g(arlist1)102 b Fk(!)e Fo(name)33
-b Fk(f)p Fp(',')h Fo(name)7 b Fk(g)141 3163 y Fp(Results)28
-b(are)i(returned)e(using)g(the)h Fn(return)f Fp(statemen)m(t)j(\(see)f
-(Section)f(4.4.3\).)43 b(If)28 b(con)m(trol)i(reac)m(hes)g(the)g(end)0
-3276 y(of)h(a)f(function)f(without)h(a)g(return)g(instruction,)e(then)i
-(the)h(function)e(returns)g(with)g(no)i(results.)141
-3389 y(There)e(is)g(a)h(sp)s(ecial)e(syn)m(tax)i(for)g(de\014ning)e
-(metho)s(ds,)h(that)h(is,)f(functions)f(that)j(ha)m(v)m(e)g(an)e(extra)
-h(parameter)0 3502 y Fo(self)p Fp(.)167 3646 y Fo(function)100
-b Fk(!)g Fm(function)33 b Fo(var)g Fp(':')43 b Fo(name)33
-b Fp('\(')g([)p Fo(p)-5 b(arlist1)12 b Fp(])36 b('\)')d
-Fo(blo)-5 b(ck)33 b Fm(end)0 3790 y Fp(Th)m(us,)d(a)g(declaration)g
-(lik)m(e)0 3978 y Fn(function)46 b(v:f)g(\(...\))95 4091
-y(...)0 4203 y(end)0 4391 y Fp(is)29 b(equiv)-5 b(alen)m(t)30
-b(to)0 4579 y Fn(function)46 b(v.f)g(\(self,)h(...\))95
-4692 y(...)0 4804 y(end)0 4992 y Fp(that)33 b(is,)f(the)h(function)e
-(gets)i(an)g(extra)g(formal)f(parameter)g(called)g Fn(self)p
-Fp(.)46 b(Notice)33 b(that)g(the)g(v)-5 b(ariable)31
-b Fn(v)h Fp(m)m(ust)0 5105 y(ha)m(v)m(e)g(b)s(een)d(previously)f
-(initialized)g(with)h(a)h(table)h(v)-5 b(alue.)1927 5589
-y(8)p eop
-%%Page: 9 9
-9 8 bop 0 91 a Ff(4.7)112 b(F)-9 b(allbac)m(ks)0 263
-y Fp(Lua)33 b(pro)m(vides)g(a)h(p)s(o)m(w)m(erful)e(mec)m(hanism)h(to)i
-(extend)f(its)f(seman)m(tics,)i(called)e Fo(fal)5 b(lb)-5
-b(acks)p Fp(.)51 b(A)34 b(fallbac)m(k)f(is)g(a)h(pro-)0
-376 y(grammer)c(de\014ned)f(function)h(that)h(is)e(called)g(whenev)m
-(er)i(Lua)f(do)s(es)g(not)g(kno)m(w)h(ho)m(w)f(to)h(pro)s(ceed.)141
-489 y(Lua)f(supp)s(orts)f(the)h(follo)m(wing)f(fallbac)m(ks,)h(iden)m
-(ti\014ed)f(b)m(y)h(the)g(giv)m(en)h(strings:)0 652 y
-Fm(\\arith":)45 b Fp(called)31 b(when)g(an)i(arithmetic)e(op)s(eration)
-h(is)f(applied)f(to)j(non)f(n)m(umerical)f(op)s(erands,)g(or)h(when)g
-(the)227 765 y(binary)f Fn(^)h Fp(op)s(eration)g(is)g(called.)47
-b(It)32 b(receiv)m(es)i(three)e(argumen)m(ts:)46 b(the)33
-b(t)m(w)m(o)h(op)s(erands)d(\(the)i(second)g(one)227
-878 y(is)40 b(nil)f(when)h(the)h(op)s(eration)g(is)f(unary)g(min)m
-(us\))f(and)h(one)i(of)f(the)g(follo)m(wing)e(strings)h(describing)f
-(the)227 991 y(o\013ended)30 b(op)s(erator:)323 1186
-y Fn(add)94 b(sub)h(mul)g(div)f(pow)h(unm)227 1381 y
-Fp(Its)31 b(return)f(v)-5 b(alue)30 b(is)g(the)h(\014nal)f(result)g(of)
-h(the)g(arithmetic)f(op)s(eration.)42 b(The)30 b(default)g(handler)f
-(issues)h(an)227 1494 y(error.)0 1672 y Fm(\\order":)45
-b Fp(called)29 b(when)e(an)i(order)g(comparison)f(is)g(applied)e(to)k
-(non)e(n)m(umerical)g(or)h(non)f(string)g(op)s(erands.)39
-b(It)227 1785 y(receiv)m(es)e(three)f(argumen)m(ts:)51
-b(the)36 b(t)m(w)m(o)h(op)s(erands)e(and)g(one)h(of)g(the)g(follo)m
-(wing)e(strings)g(describing)g(the)227 1898 y(o\013ended)c(op)s
-(erator:)323 2093 y Fn(lt)47 b(gt)g(le)g(ge)227 2289
-y Fp(Its)28 b(return)f(v)-5 b(alue)28 b(is)f(the)i(\014nal)d(result)h
-(of)i(the)f(comparison)f(op)s(eration.)40 b(The)28 b(default)f(handler)
-f(issues)h(an)227 2402 y(error.)0 2580 y Fm(\\concat":)46
-b Fp(called)40 b(when)g(a)i(concatenation)g(is)e(applied)f(to)j(non)f
-(string)f(op)s(erands.)71 b(It)41 b(receiv)m(es)h(the)g(t)m(w)m(o)227
-2693 y(op)s(erands)36 b(as)i(argumen)m(ts.)61 b(Its)37
-b(return)g(v)-5 b(alue)36 b(is)g(the)i(\014nal)e(result)g(of)h(the)h
-(concatenation)g(op)s(eration.)227 2805 y(The)30 b(default)g(handler)e
-(issues)h(an)i(error.)0 2983 y Fm(\\index":)45 b Fp(called)27
-b(when)g(Lua)g(tries)g(to)i(retriev)m(e)f(the)g(v)-5
-b(alue)27 b(of)h(an)f(index)g(not)h(presen)m(t)f(in)g(a)h(table.)39
-b(It)28 b(receiv)m(es)227 3096 y(as)41 b(argumen)m(ts)f(the)g(table)g
-(and)g(the)g(index.)68 b(Its)40 b(return)f(v)-5 b(alue)40
-b(is)f(the)h(\014nal)f(result)g(of)h(the)g(indexing)227
-3209 y(op)s(eration.)g(The)30 b(default)g(handler)e(returns)i(nil.)0
-3387 y Fm(\\getglobal":)45 b Fp(called)28 b(when)g(Lua)g(tries)g(to)h
-(retriev)m(e)g(the)f(v)-5 b(alue)28 b(of)h(a)g(global)f(v)-5
-b(ariable)27 b(whic)m(h)g(has)h(a)h(nil)d(v)-5 b(alue)227
-3500 y(\(or)39 b(whic)m(h)e(has)g(not)i(b)s(een)e(initialized\).)61
-b(It)38 b(receiv)m(es)h(as)g(argumen)m(t)f(the)h(name)f(of)g(the)g(v)-5
-b(ariable.)63 b(Its)227 3613 y(return)30 b(v)-5 b(alue)29
-b(is)h(the)g(\014nal)f(result)h(of)g(the)h(expression.)39
-b(The)30 b(default)g(handler)e(returns)h(nil.)0 3790
-y Fm(\\gettable":)44 b Fp(called)34 b(when)g(Lua)g(tries)g(to)h(index)f
-(a)h(non)f(table)g(v)-5 b(alue.)53 b(It)35 b(receiv)m(es)g(as)g
-(argumen)m(ts)g(the)g(non)227 3903 y(table)d(v)-5 b(alue)31
-b(and)f(the)i(index.)42 b(Its)32 b(return)e(v)-5 b(alue)31
-b(is)g(the)g(\014nal)f(result)h(of)g(the)h(indexing)d(op)s(eration.)43
-b(The)227 4016 y(default)30 b(handler)e(issues)h(an)i(error.)0
-4194 y Fm(\\settable":)44 b Fp(called)34 b(when)e(Lua)i(tries)f(to)i
-(assign)e(indexed)g(a)h(non)f(table)h(v)-5 b(alue.)51
-b(It)34 b(receiv)m(es)g(as)h(argumen)m(ts)227 4307 y(the)c(non)f(table)
-g(v)-5 b(alue,)30 b(the)h(index,)e(and)h(the)g(assigned)g(v)-5
-b(alue.)40 b(The)30 b(default)f(handler)g(issues)g(an)h(error.)0
-4485 y Fm(\\function":)46 b Fp(called)30 b(when)g(Lua)h(tries)g(to)h
-(call)e(a)i(non)e(function)g(v)-5 b(alue.)43 b(It)31
-b(receiv)m(es)h(as)g(argumen)m(ts)f(the)h(non)227 4598
-y(function)k(v)-5 b(alue)36 b(and)h(the)g(argumen)m(ts)g(giv)m(en)g(in)
-f(the)h(original)e(call.)60 b(Its)37 b(return)f(v)-5
-b(alues)36 b(are)h(the)g(\014nal)227 4711 y(results)29
-b(of)i(the)g(call)e(op)s(eration.)40 b(The)30 b(default)g(handler)e
-(issues)h(an)i(error.)0 4888 y Fm(\\gc":)46 b Fp(called)35
-b(during)g(garbage)i(collection.)59 b(It)37 b(receiv)m(es)g(as)f
-(argumen)m(t)h(the)g(table)f(b)s(eing)f(collected.)60
-b(After)227 5001 y(eac)m(h)42 b(run)d(of)i(the)g(collector)g(this)e
-(function)h(is)f(called)h(with)f(argumen)m(t)i(nil.)70
-b(Because)42 b(this)d(function)227 5114 y(op)s(erates)28
-b(during)e(garbage)i(collection,)g(it)f(m)m(ust)h(b)s(e)e(used)h(with)f
-(great)j(care,)g(and)e(programmers)g(should)227 5227
-y(a)m(v)m(oid)39 b(the)f(creation)g(of)g(new)g(ob)5 b(jects)38
-b(\(tables)h(or)e(strings\))h(in)e(this)h(function.)62
-b(The)38 b(default)f(handler)227 5340 y(do)s(es)30 b(nothing.)1927
-5589 y(9)p eop
-%%Page: 10 10
-10 9 bop 0 91 a Fm(\\error":)45 b Fp(called)32 b(when)g(an)g(error)g(o)
-s(ccurs.)47 b(It)33 b(receiv)m(es)g(as)g(argumen)m(t)g(a)g(string)f
-(describing)e(the)j(error.)46 b(The)227 204 y(default)30
-b(handler)e(prin)m(ts)h(the)i(message)g(on)g(the)f(standard)g(error)g
-(output.)141 392 y(The)f(function)f Fn(setfallback)e
-Fp(is)j(used)f(to)i(c)m(hange)h(a)f(fallbac)m(k)f(handler.)38
-b(Its)29 b(\014rst)g(argumen)m(t)h(is)e(the)i(name)0
-505 y(of)k(a)h(fallbac)m(k)e(condition,)h(and)f(the)h(second)g(argumen)
-m(t)h(is)e(the)h(new)f(function)g(to)i(b)s(e)e(called.)51
-b(It)34 b(returns)f(the)0 618 y(old)d(handler)e(function)h(for)h(the)h
-(giv)m(en)f(fallbac)m(k.)141 731 y(Section)g(8.6)i(sho)m(ws)e(an)g
-(example)g(of)h(the)f(use)g(of)h(fallbac)m(ks.)0 974
-y Ff(4.8)112 b(Error)37 b(Handling)0 1146 y Fp(Because)g(Lua)e(is)g(an)
-g(extension)h(language,)h(all)e(Lua)g(actions)h(start)g(from)f(C)g(co)s
-(de)h(calling)e(a)i(function)e(from)0 1259 y(the)48 b(Lua)f(library)-8
-b(.)90 b(Whenev)m(er)48 b(an)f(error)g(o)s(ccurs)g(during)e(Lua)j
-(compilation)e(or)h(execution,)52 b(an)47 b(\\error")0
-1371 y(fallbac)m(k)42 b(function)f(is)h(called,)i(and)e(then)g(the)h
-(corresp)s(onding)d(function)i(from)f(the)i(library)d(\()p
-Fn(lua_dofile)p Fp(,)0 1484 y Fn(lua_dostring)p Fp(,)27
-b Fn(lua_call)p Fp(,)i(or)h Fn(lua_callfunction)p Fp(\))c(is)k
-(terminated)g(returning)e(an)i(error)g(condition.)141
-1597 y(The)22 b(only)g(argumen)m(t)g(to)i(the)e(\\error")h(fallbac)m(k)
-f(function)f(is)g(a)i(string)f(describing)e(the)i(error.)38
-b(The)22 b(standard)0 1710 y(I/O)29 b(library)e(rede\014nes)h(this)g
-(fallbac)m(k,)h(using)e(the)i(debug)g(facilities)e(\(see)j(Section)f
-(7\),)h(in)e(order)g(to)i(prin)m(t)e(some)0 1823 y(extra)33
-b(information,)e(lik)m(e)g(the)i(call)e(stac)m(k.)48
-b(F)-8 b(or)33 b(more)f(information)e(ab)s(out)i(an)g(error,)h(the)f
-(Lua)g(program)g(can)0 1936 y(include)e(the)i(compilation)f(pragma)i
-Fn($debug)p Fp(.)90 b(This)31 b(pragma)h(m)m(ust)g(b)s(e)g(written)f
-(in)g(a)h(line)f(b)m(y)h(itself.)45 b(When)0 2049 y(an)32
-b(error)f(o)s(ccurs)h(in)e(a)i(program)g(compiled)e(with)h(this)g
-(option,)g(the)h(error)g(routine)f(is)g(able)g(to)i(prin)m(t)d(also)i
-(the)0 2162 y(lines)37 b(where)h(the)h(calls)f(\(and)g(the)h(error\))g
-(w)m(ere)g(made.)66 b(If)38 b(needed,)j(it)d(is)g(p)s(ossible)e(to)k(c)
-m(hange)g(the)e(\\error")0 2275 y(fallbac)m(k)30 b(handler)e(\(see)k
-(Section)e(4.7\).)141 2388 y(Lua)23 b(co)s(de)h(can)g(explicitly)d
-(generate)k(an)e(error)g(b)m(y)g(calling)f(the)i(built-in)c(function)j
-Fn(error)f Fp(\(see)i(Section)f(6.1\).)0 2674 y Fq(5)135
-b(The)44 b(Application)i(Program)f(In)l(terface)0 2877
-y Fp(This)24 b(section)j(describ)s(es)d(the)j(API)f(for)g(Lua,)h(that)g
-(is,)f(the)h(set)g(of)f(C)g(functions)f(a)m(v)-5 b(ailable)25
-b(to)i(the)g(host)f(program)0 2990 y(to)31 b(comm)m(unicate)g(with)e
-(the)i(library)-8 b(.)39 b(The)29 b(API)i(functions)d(can)j(b)s(e)f
-(classi\014ed)f(in)g(the)h(follo)m(wing)f(categories:)111
-3178 y(1.)46 b(executing)31 b(Lua)f(co)s(de;)111 3365
-y(2.)46 b(con)m(v)m(erting)31 b(v)-5 b(alues)30 b(b)s(et)m(w)m(een)h(C)
-f(and)g(Lua;)111 3553 y(3.)46 b(manipulating)28 b(\(reading)i(and)f
-(writing\))g(Lua)h(ob)5 b(jects;)111 3740 y(4.)46 b(calling)29
-b(Lua)h(functions;)111 3928 y(5.)46 b(C)30 b(functions)f(to)i(b)s(e)f
-(called)g(b)m(y)g(Lua;)111 4116 y(6.)46 b(references)31
-b(to)g(Lua)f(Ob)5 b(jects.)0 4303 y(All)29 b(API)h(functions)f(are)i
-(declared)f(in)f(the)h(header)h(\014le)e Fn(lua.h)p Fp(.)0
-4547 y Ff(5.1)112 b(Executing)37 b(Lua)h(Co)s(de)0 4718
-y Fp(A)23 b(host)h(program)f(can)h(execute)g(Lua)f(c)m(h)m(unks)g
-(written)g(in)f(a)h(\014le)g(or)g(in)f(a)i(string,)g(using)e(the)h
-(follo)m(wing)f(functions:)0 5019 y Fn(int)47 b(lua_dofile)140
-b(\(char)47 b(*filename\);)0 5132 y(int)g(lua_dostring)d(\(char)j
-(*string\);)1905 5589 y Fp(10)p eop
-%%Page: 11 11
-11 10 bop 0 91 a Fp(Both)29 b(functions)e(return)h(an)g(error)g(co)s
-(de:)40 b(0,)30 b(in)d(case)j(of)e(success;)i(non)e(zero,)i(in)d(case)j
-(of)e(errors.)40 b(More)29 b(sp)s(eci\014-)0 204 y(cally)-8
-b(,)30 b Fn(lua_dofile)d Fp(returns)i(2)h(if)f(for)h(an)m(y)g(reason)g
-(it)g(could)f(not)h(op)s(en)f(the)i(\014le.)39 b(The)30
-b(function)e Fn(lua_dofile)p Fp(,)0 317 y(if)h(called)g(with)g(argumen)
-m(t)i Fn(NULL)e Fp(\(0\),)i(executes)h(the)e Fn(stdin)f
-Fp(stream.)41 b(F)-8 b(unction)30 b Fn(lua_dofile)d Fp(is)i(also)h
-(able)g(to)0 430 y(execute)h(pre-compiled)d(c)m(h)m(unks.)40
-b(It)30 b(automatically)f(detects)i(whether)e(the)h(\014le)f(is)f(text)
-j(or)f(binary)-8 b(,)28 b(and)h(loads)0 543 y(it)h(accordingly)f(\(see)
-j(program)e Fn(luac)p Fp(\).)0 786 y Ff(5.2)112 b(Con)m(v)m(erting)37
-b(V)-9 b(alues)37 b(b)s(et)m(w)m(een)g(C)h(and)g(Lua)0
-958 y Fp(Because)25 b(Lua)e(has)g(no)h(static)g(t)m(yp)s(e)g(system,)h
-(all)e(v)-5 b(alues)22 b(passed)h(b)s(et)m(w)m(een)i(Lua)e(and)g(C)g
-(ha)m(v)m(e)i(t)m(yp)s(e)e Fn(lua_Object)p Fp(,)0 1071
-y(whic)m(h)e(w)m(orks)h(lik)m(e)f(an)h(abstract)g(t)m(yp)s(e)h(in)d(C)i
-(that)g(can)h(hold)d(an)m(y)i(Lua)g(v)-5 b(alue.)37 b(V)-8
-b(alues)22 b(of)g(t)m(yp)s(e)h Fn(lua_Object)c Fp(ha)m(v)m(e)0
-1184 y(no)30 b(meaning)g(outside)g(Lua;)g(for)g(instance,)g(the)h
-(comparisson)e(of)i(t)m(w)m(o)h Fn(lua_Object's)27 b
-Fp(is)i(of)i(no)f(signi\014cance.)141 1297 y(Because)j(Lua)f(has)f
-(automatic)i(memory)f(managemen)m(t)h(and)e(garbage)i(collection,)f(a)g
-Fn(lua_Object)d Fp(has)j(a)0 1410 y(limited)i(scop)s(e,)k(and)e(is)f
-(only)g(v)-5 b(alid)35 b(inside)f(the)i Fo(blo)-5 b(ck)47
-b Fp(where)36 b(it)g(w)m(as)g(created.)60 b(A)36 b(C)g(function)f
-(called)g(from)0 1523 y(Lua)30 b(is)f(a)h(blo)s(c)m(k,)g(and)f(its)h
-(parameters)g(are)g(v)-5 b(alid)29 b(only)g(un)m(til)f(its)h(end.)40
-b(A)30 b(go)s(o)s(d)g(programming)f(practice)h(is)f(to)0
-1635 y(con)m(v)m(ert)35 b(Lua)d(ob)5 b(jects)34 b(to)g(C)e(v)-5
-b(alues)33 b(as)g(so)s(on)g(as)g(they)g(are)h(a)m(v)-5
-b(ailable,)33 b(and)f(nev)m(er)i(to)g(store)f Fn(lua_Object)p
-Fp(s)d(in)0 1748 y(C)g(global)g(v)-5 b(ariables.)141
-1861 y(When)26 b(C)f(co)s(de)h(calls)f(Lua)h(rep)s(eatedly)-8
-b(,)27 b(as)f(in)f(a)h(lo)s(op,)g(ob)5 b(jects)27 b(returned)d(b)m(y)i
-(these)h(calls)e(accum)m(ulate,)j(and)0 1974 y(ma)m(y)j(create)h(a)f
-(memory)f(problem.)39 b(T)-8 b(o)31 b(a)m(v)m(oid)g(this,)e(nested)i
-(blo)s(c)m(ks)e(can)i(b)s(e)f(de\014ned)f(with)g(the)i(functions:)0
-2162 y Fn(void)524 b(lua_beginblock)d(\(void\);)0 2275
-y(void)j(lua_endblock)617 b(\(void\);)0 2462 y Fp(After)31
-b(the)f(end)g(of)g(the)h(blo)s(c)m(k,)f(all)f Fn(lua_Object)p
-Fp('s)f(created)k(inside)c(it)i(are)g(released.)141 2575
-y(T)-8 b(o)31 b(c)m(hec)m(k)h(the)e(t)m(yp)s(e)h(of)g(a)f
-Fn(lua_Object)p Fp(,)e(the)j(follo)m(wing)e(function)g(is)g(a)m(v)-5
-b(ailable:)0 2763 y Fn(int)572 b(lua_type)809 b(\(lua_Object)45
-b(object\);)0 2951 y Fp(plus)28 b(the)j(follo)m(wing)e(macros)i(and)e
-(functions:)0 3138 y Fn(int)572 b(lua_isnil)761 b(\(lua_Object)45
-b(object\);)0 3251 y(int)572 b(lua_isnumber)617 b(\(lua_Object)45
-b(object\);)0 3364 y(int)572 b(lua_isstring)617 b(\(lua_Object)45
-b(object\);)0 3477 y(int)572 b(lua_istable)665 b(\(lua_Object)45
-b(object\);)0 3590 y(int)572 b(lua_isfunction)521 b(\(lua_Object)45
-b(object\);)0 3703 y(int)572 b(lua_iscfunction)473 b(\(lua_Object)45
-b(object\);)0 3816 y(int)572 b(lua_isuserdata)521 b(\(lua_Object)45
-b(object\);)0 4003 y Fp(All)28 b(macros)h(return)g(1)g(if)f(the)i(ob)5
-b(ject)30 b(is)e(compatible)g(with)g(the)i(giv)m(en)f(t)m(yp)s(e,)h
-(and)e(0)i(otherwise.)40 b(The)28 b(function)0 4116 y
-Fn(lua_isnumber)c Fp(accepts)k(n)m(um)m(b)s(ers)e(and)h(n)m(umerical)e
-(strings,)i Fn(lua_isstring)d Fp(accepts)29 b(strings)d(and)g(n)m(um)m
-(b)s(ers)0 4229 y(\(see)33 b(Section)f(4.2\),)i(and)d
-Fn(lua_isfunction)d Fp(accepts)33 b(Lua)f(and)f(C)h(functions.)44
-b(The)31 b(function)g Fn(lua_type)f Fp(can)0 4342 y(b)s(e)g(used)f(to)i
-(distinguish)c(b)s(et)m(w)m(een)k(di\013eren)m(t)f(kinds)e(of)j(user)e
-(data.)141 4455 y(T)-8 b(o)31 b(translate)g(a)f(v)-5
-b(alue)30 b(from)g(t)m(yp)s(e)h Fn(lua_Object)c Fp(to)k(a)g(sp)s
-(eci\014c)e(C)h(t)m(yp)s(e,)h(the)f(programmer)g(can)h(use:)0
-4643 y Fn(double)428 b(lua_getnumber)569 b(\(lua_Object)45
-b(object\);)0 4755 y(char)476 b(*lua_getstring)569 b(\(lua_Object)45
-b(object\);)0 4868 y(lua_CFunction)92 b(lua_getcfunction)425
-b(\(lua_Object)45 b(object\);)0 4981 y(void)476 b(*lua_getuserdata)d
-(\(lua_Object)45 b(object\);)0 5169 y(lua_getnumber)26
-b Fp(con)m(v)m(erts)32 b(a)e Fn(lua_Object)d Fp(to)k(a)f(\015oat.)41
-b(This)29 b Fn(lua_Object)e Fp(m)m(ust)i(b)s(e)h(a)g(n)m(um)m(b)s(er)f
-(or)h(a)g(string)0 5282 y(con)m(v)m(ertible)g(to)h(n)m(um)m(b)s(er)f
-(\(see)h(Section)f(4.2\);)i(otherwise,)e(the)h(function)e(returns)g(0.)
-1905 5589 y(11)p eop
-%%Page: 12 12
-12 11 bop 141 91 a Fn(lua_getstring)21 b Fp(con)m(v)m(erts)27
-b(a)e Fn(lua_Object)d Fp(to)k(a)f(string)f(\()p Fn(char)47
-b(*)p Fp(\).)39 b(This)23 b Fn(lua_Object)f Fp(m)m(ust)i(b)s(e)h(a)g
-(string)0 204 y(or)32 b(a)g(n)m(um)m(b)s(er;)f(otherwise,)h(the)g
-(function)e(returns)h(0)h(\(the)g(n)m(ull)e(p)s(oin)m(ter\).)44
-b(This)30 b(function)g(do)s(es)h(not)h(create)i(a)0 317
-y(new)27 b(string,)g(but)g(returns)f(a)i(p)s(oin)m(ter)f(to)h(a)g
-(string)f(inside)e(the)j(Lua)f(en)m(vironmen)m(t.)39
-b(Because)29 b(Lua)e(has)h(garbage)0 430 y(collection,)i(there)h(is)e
-(no)i(guaran)m(tee)g(that)g(suc)m(h)f(p)s(oin)m(ter)g(will)e(b)s(e)h(v)
--5 b(alid)29 b(after)i(the)f(blo)s(c)m(k)g(ends.)141
-543 y Fn(lua_getcfunction)e Fp(con)m(v)m(erts)34 b(a)e
-Fn(lua_Object)e Fp(to)j(a)f(C)g(function.)45 b(This)31
-b Fn(lua_Object)e Fp(m)m(ust)j(ha)m(v)m(e)i(t)m(yp)s(e)0
-656 y Fo(CF)-7 b(unction)7 b Fp(;)39 b(otherwise,)e(the)f(function)e
-(returns)g(0)i(\(the)g(n)m(ull)e(p)s(oin)m(ter\).)56
-b(The)35 b(t)m(yp)s(e)h Fn(lua_CFunction)c Fp(is)i(ex-)0
-769 y(plained)28 b(in)h(Section)h(5.5.)141 882 y Fn(lua_getuserdata)20
-b Fp(con)m(v)m(erts)26 b(a)f Fn(lua_Object)d Fp(to)j
-Fn(void*)p Fp(.)38 b(This)22 b Fn(lua_Object)g Fp(m)m(ust)i(ha)m(v)m(e)
-i(t)m(yp)s(e)f Fo(user)-5 b(data)7 b Fp(;)0 995 y(otherwise,)30
-b(the)h(function)e(returns)g(0)i(\(the)f(n)m(ull)f(p)s(oin)m(ter\).)141
-1108 y(The)34 b(rev)m(erse)h(pro)s(cess,)g(that)f(is,)h(passing)e(a)i
-(sp)s(eci\014c)e(C)g(v)-5 b(alue)34 b(to)h(Lua,)g(is)e(done)h(b)m(y)g
-(using)f(the)h(follo)m(wing)0 1220 y(functions:)0 1403
-y Fn(void)524 b(lua_pushnumber)d(\(double)46 b(n\);)0
-1516 y(void)524 b(lua_pushstring)d(\(char)46 b(*s\);)0
-1629 y(void)524 b(lua_pushcfunction)377 b(\(lua_CFunction)44
-b(f\);)0 1742 y(void)524 b(lua_pushusertag)473 b(\(void)46
-b(*u,)h(int)g(tag\);)0 1925 y Fp(plus)28 b(the)j(macro:)0
-2108 y Fn(void)524 b(lua_pushuserdata)425 b(\(void)46
-b(*u\);)0 2291 y Fp(All)33 b(of)h(them)f(receiv)m(e)i(a)g(C)e(v)-5
-b(alue,)35 b(con)m(v)m(ert)g(it)e(to)i(a)f(corresp)s(onding)e
-Fn(lua_Object)p Fp(,)h(and)g(lea)m(v)m(e)i(the)f(result)f(on)0
-2404 y(the)c(top)g(of)f(the)h(Lua)g(stac)m(k,)h(where)e(it)g(can)h(b)s
-(e)f(assigned)g(to)i(a)f(Lua)f(v)-5 b(ariable,)28 b(passed)g(as)h
-(parameter)g(to)g(a)g(Lua)0 2517 y(function,)g(etc.)141
-2629 y(User)43 b(data)g(can)g(ha)m(v)m(e)h(di\013eren)m(t)e(tags,)47
-b(whose)42 b(seman)m(tics)h(are)g(de\014ned)f(b)m(y)g(the)h(host)g
-(program.)77 b(An)m(y)0 2742 y(p)s(ositiv)m(e)35 b(in)m(teger)h(can)g
-(b)s(e)g(used)f(to)h(tag)h(a)g(user)e(datum.)56 b(When)36
-b(a)g(user)f(datum)h(is)f(retriev)m(ed,)i(the)f(function)0
-2855 y Fn(lua_type)28 b Fp(can)j(b)s(e)f(used)f(to)i(get)h(its)d(tag.)
-141 2968 y(T)-8 b(o)31 b(complete)g(the)f(set,)i(the)e(v)-5
-b(alue)30 b Fm(nil)g Fp(or)h(a)g Fn(lua_Object)c Fp(can)k(also)f(b)s(e)
-g(pushed)e(on)m(to)k(the)f(stac)m(k,)h(with:)0 3151 y
-Fn(void)524 b(lua_pushnil)665 b(\(void\);)0 3264 y(void)524
-b(lua_pushobject)d(\(lua_Object)45 b(object\);)0 3507
-y Ff(5.3)112 b(Manipulating)37 b(Lua)h(Ob)6 b(jects)0
-3678 y Fp(T)-8 b(o)31 b(read)f(the)h(v)-5 b(alue)30 b(of)g(an)m(y)h
-(global)e(Lua)i(v)-5 b(ariable,)29 b(one)i(uses)f(the)g(function:)0
-3861 y Fn(lua_Object)236 b(lua_getglobal)569 b(\(char)46
-b(*varname\);)0 4044 y Fp(As)30 b(in)f(Lua,)i(if)e(the)i(v)-5
-b(alue)29 b(of)i(the)g(global)e(is)h Fm(nil)p Fp(,)g(then)g(the)h
-(\\getglobal")h(fallbac)m(k)e(is)f(called.)141 4157 y(T)-8
-b(o)31 b(store)g(a)g(v)-5 b(alue)30 b(previously)e(pushed)g(on)m(to)k
-(the)e(stac)m(k)i(in)d(a)i(global)f(v)-5 b(ariable,)29
-b(there)i(is)e(the)i(function:)0 4340 y Fn(void)524 b(lua_storeglobal)
-473 b(\(char)46 b(*varname\);)141 4523 y Fp(T)-8 b(ables)30
-b(can)h(also)f(b)s(e)g(manipulated)e(via)i(the)h(API.)f(The)g(function)
-0 4705 y Fn(lua_Object)236 b(lua_getsubscript)425 b(\(void\);)0
-4888 y Fp(exp)s(ects)31 b(on)f(the)g(stac)m(k)i(a)f(table)f(and)f(an)i
-(index,)e(and)g(returns)g(the)i(con)m(ten)m(ts)h(of)e(the)h(table)f(at)
-h(that)g(index.)39 b(As)0 5001 y(in)29 b(Lua,)h(if)f(the)h(\014rst)f
-(ob)5 b(ject)31 b(is)e(not)i(a)f(table,)g(or)g(the)g(index)f(is)g(not)h
-(presen)m(t)h(in)d(the)i(table,)h(the)f(corresp)s(onding)0
-5114 y(fallbac)m(k)g(is)f(called.)141 5227 y(T)-8 b(o)34
-b(store)f(a)h(v)-5 b(alue)32 b(in)g(an)h(index,)f(the)h(program)g(m)m
-(ust)g(push)e(on)m(to)j(the)f(stac)m(k)i(the)e(table,)h(the)f(index,)g
-(and)0 5340 y(the)e(v)-5 b(alue,)30 b(and)f(then)i(call)e(the)i
-(function:)1905 5589 y(12)p eop
-%%Page: 13 13
-13 12 bop 0 91 a Fn(void)47 b(lua_storesubscript)42 b(\(void\);)0
-264 y Fp(Again,)30 b(the)h(corresp)s(onding)d(fallbac)m(k)i(is)g
-(called)f(if)g(needed.)141 377 y(Finally)-8 b(,)29 b(the)i(function)0
-549 y Fn(lua_Object)236 b(lua_createtable)473 b(\(void\);)0
-721 y Fp(creates)32 b(and)e(returns)f(a)h(new)g(table.)141
-834 y Fo(Ple)-5 b(ase)40 b(Notic)-5 b(e:)61 b Fp(Most)39
-b(functions)d(from)h(the)h(Lua)g(library)d(receiv)m(e)k(parameters)f
-(through)g(Lua's)f(stac)m(k.)0 947 y(Because)e(other)f(functions)f
-(also)h(use)f(this)g(stac)m(k,)k(it)c(is)g(imp)s(ortan)m(t)g(that)i
-(these)f(parameters)g(b)s(e)f(pushed)g(just)0 1060 y(b)s(efore)d(the)g
-(corresp)s(onding)e(call,)i(without)f(in)m(termediate)h(calls)f(to)i
-(the)f(Lua)g(library)-8 b(.)38 b(F)-8 b(or)31 b(instance,)f(supp)s(ose)
-0 1173 y(the)h(user)e(w)m(an)m(ts)i(the)g(v)-5 b(alue)30
-b(of)g Fn(a[i])p Fp(.)40 b(A)30 b(simplistic)d(solution)i(w)m(ould)g(b)
-s(e:)95 1345 y Fn(/*)48 b(Warning:)d(WRONG)i(CODE)f(*/)95
-1458 y(lua_Object)f(result;)95 1571 y(lua_pushobject\(lua_getglob)o
-(al\(")o(a"\))o(\);)89 b(/*)48 b(push)e(table)h(*/)95
-1684 y(lua_pushobject\(lua_getglob)o(al\(")o(i"\))o(\);)89
-b(/*)48 b(push)e(index)h(*/)95 1797 y(result)g(=)g
-(lua_getsubscript\(\);)0 1969 y Fp(Ho)m(w)m(ev)m(er,)d(the)39
-b(call)f Fn(lua_getglobal\("i"\))d Fp(mo)s(di\014es)i(the)i(stac)m(k,)k
-(and)c(in)m(v)-5 b(alidates)38 b(the)h(previous)f(pushed)0
-2082 y(v)-5 b(alue.)40 b(A)31 b(correct)g(solution)e(could)h(b)s(e:)95
-2254 y Fn(lua_Object)45 b(result;)95 2367 y(lua_Object)g(index)i(=)g
-(lua_getglobal\("i"\);)95 2480 y(lua_pushobject\(lua_getglob)o(al\(")o
-(a"\))o(\);)89 b(/*)48 b(push)e(table)h(*/)95 2593 y
-(lua_pushobject\(index\);)710 b(/*)48 b(push)e(index)h(*/)95
-2706 y(result)g(=)g(lua_getsubscript\(\);)0 2878 y Fp(The)35
-b(functions)f Fn(lua_getnumber)p Fp(,)f Fn(lua_getstring)p
-Fp(,)g Fn(lua_getuserdata)p Fp(,)g(and)h Fn(lua_getcfunction)p
-Fp(,)f(plus)0 2991 y(the)e(family)d Fn(lua_is*)p Fp(,)h(are)i(safe)g
-(to)g(b)s(e)e(called)h(without)f(mo)s(difying)f(the)j(stac)m(k.)0
-3231 y Ff(5.4)112 b(Calling)36 b(Lua)i(F)-9 b(unctions)0
-3403 y Fp(F)h(unctions)36 b(de\014ned)g(in)f(Lua)i(b)m(y)f(a)h(c)m(h)m
-(unk)g(executed)h(with)d Fn(dofile)g Fp(or)i Fn(dostring)d
-Fp(can)j(b)s(e)g(called)e(from)i(the)0 3516 y(host)d(program.)50
-b(This)32 b(is)h(done)g(using)f(the)i(follo)m(wing)e(proto)s(col:)47
-b(\014rst,)34 b(the)g(argumen)m(ts)g(to)g(the)g(function)f(are)0
-3629 y(pushed)27 b(on)m(to)j(the)f(Lua)g(stac)m(k)h(\(see)g(Section)e
-(5.2\),)j(in)d(direct)g(order,)h(i.e.,)g(the)g(\014rst)f(argumen)m(t)i
-(is)d(pushed)g(\014rst.)0 3742 y(Again,)j(it)g(is)g(imp)s(ortan)m(t)f
-(to)i(emphasize)f(that,)h(during)e(this)g(phase,)h(no)g(other)h(Lua)f
-(function)f(can)i(b)s(e)f(called.)141 3855 y(Then,)g(the)g(function)f
-(is)h(called)f(using)0 4027 y Fn(int)572 b(lua_call)809
-b(\(char)46 b(*functionname\);)0 4199 y Fp(or)0 4372
-y Fn(int)572 b(lua_callfunction)425 b(\(lua_Object)45
-b(function\);)0 4544 y Fp(Both)32 b(functions)e(return)h(an)h(error)f
-(co)s(de:)43 b(0,)33 b(in)d(case)j(of)f(success;)g(non)f(zero,)i(in)e
-(case)h(of)g(errors.)44 b(Finally)-8 b(,)31 b(the)0 4657
-y(returned)e(v)-5 b(alues)30 b(\(a)h(Lua)f(function)f(ma)m(y)i(return)e
-(man)m(y)i(v)-5 b(alues\))30 b(can)h(b)s(e)e(retriev)m(ed)i(with)e(the)
-h(macro)0 4829 y Fn(lua_Object)236 b(lua_getresult)617
-b(\(int)46 b(number\);)0 5001 y Fp(where)33 b Fn(number)f
-Fp(is)h(the)g(order)h(of)f(the)h(result,)g(starting)f(with)f(1.)51
-b(When)33 b(called)g(with)g(a)h(n)m(um)m(b)s(er)e(larger)h(than)0
-5114 y(the)e(actual)f(n)m(um)m(b)s(er)f(of)i(results,)e(this)h
-(function)f(returns)g Fn(LUA_NOOBJECT)p Fp(.)141 5227
-y(Tw)m(o)37 b(sp)s(ecial)e(Lua)i(functions)e(ha)m(v)m(e)j(exclusiv)m(e)
-e(in)m(terfaces:)54 b Fn(error)35 b Fp(and)h Fn(setfallback)p
-Fp(.)57 b(A)37 b(C)f(function)0 5340 y(can)31 b(generate)h(a)e(Lua)g
-(error)g(calling)f(the)i(function)1905 5589 y(13)p eop
-%%Page: 14 14
-14 13 bop 0 91 a Fn(void)47 b(lua_error)e(\(char)h(*message\);)0
-279 y Fp(This)34 b(function)g(nev)m(er)j(returns.)55
-b(If)36 b(the)g(C)f(function)f(has)i(b)s(een)f(called)g(from)g(Lua,)i
-(the)f(corresp)s(onding)e(Lua)0 392 y(execution)f(terminates,)g(as)g
-(if)e(an)i(error)f(had)g(o)s(ccurred)g(inside)e(Lua)i(co)s(de.)48
-b(Otherwise,)32 b(the)g(whole)g(program)0 505 y(terminates.)141
-618 y(F)-8 b(allbac)m(ks)31 b(can)g(b)s(e)e(c)m(hanged)i(with:)0
-805 y Fn(lua_Object)45 b(lua_setfallback)f(\(char)i(*name,)g
-(lua_CFunction)e(fallback\);)0 993 y Fp(The)22 b(\014rst)g(parameter)h
-(is)f(the)h(fallbac)m(k)f(name,)i(and)e(the)h(second)g(a)g(CF)-8
-b(unction)22 b(to)h(b)s(e)f(used)g(as)h(the)g(new)f(fallbac)m(k.)0
-1106 y(This)28 b(function)g(returns)g(a)i Fn(lua_Object)p
-Fp(,)d(whic)m(h)h(is)h(the)g(old)g(fallbac)m(k)g(v)-5
-b(alue,)29 b(or)h Fm(nil)g Fp(on)f(fail)f(\(in)m(v)-5
-b(alid)27 b(fallbac)m(k)0 1219 y(name\).)41 b(This)29
-b(old)g(v)-5 b(alue)30 b(can)h(b)s(e)e(used)h(for)g(c)m(haining)f
-(fallbac)m(ks.)141 1332 y(An)h(example)g(of)h(C)f(co)s(de)g(calling)f
-(a)i(Lua)f(function)f(is)g(sho)m(wn)h(in)f(Section)h(8.10.)0
-1575 y Ff(5.5)112 b(C)38 b(F)-9 b(unctions)0 1747 y Fp(T)h(o)31
-b(register)f(a)h(C)f(function)f(to)i(Lua,)f(there)h(is)e(the)i(follo)m
-(wing)e(macro:)0 1934 y Fn(#define)46 b(lua_register\(n,f\))329
-b(\(lua_pushcfunction\(f\),)42 b(lua_storeglobal\(n\)\))0
-2047 y(/*)47 b(char)g(*n;)429 b(*/)0 2160 y(/*)47 b(lua_CFunction)d(f;)
-k(*/)0 2348 y Fp(whic)m(h)28 b(receiv)m(es)i(the)g(name)f(the)g
-(function)f(will)f(ha)m(v)m(e)k(in)d(Lua,)h(and)g(a)g(p)s(oin)m(ter)g
-(to)h(the)f(function.)39 b(This)28 b(p)s(oin)m(ter)0
-2461 y(m)m(ust)i(ha)m(v)m(e)i(t)m(yp)s(e)e Fn(lua_CFunction)p
-Fp(,)d(whic)m(h)i(is)h(de\014ned)f(as)0 2648 y Fn(typedef)46
-b(void)g(\(*lua_CFunction\))e(\(void\);)0 2836 y Fp(that)31
-b(is,)f(a)g(p)s(oin)m(ter)g(to)h(a)g(function)e(with)g(no)h(parameters)
-h(and)f(no)g(results.)141 2949 y(In)d(order)h(to)g(comm)m(unicate)g
-(prop)s(erly)e(with)h(Lua,)h(a)g(C)f(function)g(m)m(ust)h(follo)m(w)f
-(a)h(proto)s(col,)g(whic)m(h)f(de\014nes)0 3062 y(the)k(w)m(a)m(y)g
-(parameters)g(and)e(results)h(are)g(passed.)141 3175
-y(T)-8 b(o)31 b(access)h(its)d(argumen)m(ts,)i(a)g(C)f(function)f
-(calls:)0 3362 y Fn(lua_Object)236 b(lua_getparam)617
-b(\(int)47 b(number\);)0 3550 y Fp(where)30 b Fn(number)f
-Fp(starts)i(with)e(1)i(to)g(get)g(the)g(\014rst)f(argumen)m(t.)41
-b(When)31 b(called)e(with)g(a)i(n)m(um)m(b)s(er)e(larger)i(than)f(the)0
-3663 y(actual)25 b(n)m(um)m(b)s(er)f(of)h(argumen)m(ts,)h(this)e
-(function)f(returns)h Fn(LUA_NOOBJECT)p Fp(.)d(In)j(this)g(w)m(a)m(y)-8
-b(,)28 b(it)c(is)g(p)s(ossible)e(to)k(write)0 3776 y(functions)j(that)i
-(w)m(ork)f(with)f(a)i(v)-5 b(ariable)29 b(n)m(um)m(b)s(er)g(of)i
-(parameters.)141 3889 y(T)-8 b(o)26 b(return)e(v)-5 b(alues,)27
-b(a)e(C)g(function)g(just)f(pushes)h(them)g(on)m(to)i(the)e(stac)m(k,)j
-(in)d(direct)g(order)g(\(see)h(Section)f(5.2\).)0 4002
-y(Lik)m(e)30 b(a)h(Lua)f(function,)f(a)i(C)f(function)f(called)h(b)m(y)
-g(Lua)g(can)h(also)f(return)f(man)m(y)i(results.)141
-4115 y(Section)f(8.9)i(presen)m(ts)e(an)g(example)g(of)h(a)g(CF)-8
-b(unction.)0 4358 y Ff(5.6)112 b(References)38 b(to)f(Lua)i(Ob)6
-b(jects)0 4530 y Fp(As)23 b(noted)g(in)f(Section)h(5.5,)j
-Fn(lua_Object)p Fp(s)20 b(are)k(v)m(olatile.)38 b(If)22
-b(the)i(C)e(co)s(de)i(needs)e(to)i(k)m(eep)g(a)f Fn(lua_Object)e
-Fp(outside)0 4642 y(blo)s(c)m(k)33 b(b)s(oundaries,)e(it)i(m)m(ust)g
-(create)h(a)g Fo(r)-5 b(efer)g(enc)g(e)33 b Fp(to)h(the)f(ob)5
-b(ject.)50 b(The)33 b(routines)e(to)j(manipulate)e(references)0
-4755 y(are)f(the)f(follo)m(wing:)0 4943 y Fn(int)572
-b(lua_ref)46 b(\(int)g(lock\);)0 5056 y(lua_Object)236
-b(lua_getref)93 b(\(int)46 b(ref\);)0 5169 y(void)524
-b(lua_pushref)45 b(\(int)h(ref\);)0 5282 y(void)524 b(lua_unref)45
-b(\(int)i(ref\);)1905 5589 y Fp(14)p eop
-%%Page: 15 15
-15 14 bop 0 91 a Fp(The)29 b(function)e Fn(lua_ref)g
-Fp(creates)k(a)e(reference)h(to)g(the)f(ob)5 b(ject)30
-b(that)g(is)e(on)h(the)g(top)g(of)g(the)h(stac)m(k,)h(and)d(returns)0
-204 y(this)39 b(reference.)69 b(If)39 b Fn(lock)g Fp(is)g(true,)j(the)e
-(ob)5 b(ject)41 b(is)e Fo(lo)-5 b(cke)g(d)p Fp(:)61 b(that)40
-b(means)g(the)g(ob)5 b(ject)40 b(will)d(not)k(b)s(e)e(garbage)0
-317 y(collected.)54 b(Notice)35 b(that)h(an)e(unlo)s(c)m(k)m(ed)g
-(reference)h(ma)m(y)g(b)s(e)f(garbage)i(collected.)54
-b(Whenev)m(er)35 b(the)g(referenced)0 430 y(ob)5 b(ject)39
-b(is)d(needed,)k(a)e(call)f(to)i Fn(lua_getref)34 b Fp(returns)j(a)h
-(handle)e(to)j(it,)g(whereas)f Fn(lua_pushref)c Fp(pushes)j(the)0
-543 y(ob)5 b(ject)29 b(on)f(the)h(stac)m(k.)41 b(If)28
-b(the)g(ob)5 b(ject)29 b(has)f(b)s(een)g(collected,)h(then)f
-Fn(lua_getref)d Fp(returns)i Fn(LUA_NOOBJECT)p Fp(,)f(and)0
-656 y Fn(lua_pushobject)g Fp(issues)k(an)g(error.)141
-769 y(When)g(a)h(reference)g(is)e(no)i(longer)f(needed,)g(it)g(can)g(b)
-s(e)g(freed)g(with)f(a)i(call)f(to)h Fn(lua_unref)p Fp(.)0
-1055 y Fq(6)135 b(Prede\014ned)44 b(F)-11 b(unctions)44
-b(and)h(Libraries)0 1258 y Fp(The)33 b(set)g(of)g(prede\014ned)f
-(functions)f(in)h(Lua)h(is)f(small)g(but)g(p)s(o)m(w)m(erful.)47
-b(Most)34 b(of)g(them)f(pro)m(vide)f(features)h(that)0
-1371 y(allo)m(ws)28 b(some)i(degree)g(of)f(re\015exivit)m(y)g(in)e(the)
-j(language.)40 b(Some)30 b(of)f(these)h(features)f(cannot)h(b)s(e)e
-(sim)m(ulated)g(with)0 1484 y(the)k(rest)g(of)g(the)g(Language)h(nor)e
-(with)g(the)h(standard)f(Lua)g(API.)h(Others)f(are)i(just)e(con)m(v)m
-(enien)m(t)i(in)m(terfaces)f(to)0 1597 y(common)f(API)f(functions.)141
-1710 y(The)d(libraries,)e(on)i(the)g(other)h(hand,)f(pro)m(vide)f
-(useful)g(routines)g(that)h(are)h(implemen)m(ted)e(directly)g(through)0
-1823 y(the)f(standard)f(API.)i(Therefore,)g(they)f(are)g(not)h
-(necessary)f(to)h(the)f(language,)i(and)d(are)i(pro)m(vided)d(as)i
-(separated)0 1936 y(C)30 b(mo)s(dules.)39 b(Curren)m(tly)29
-b(there)h(are)h(three)f(standard)g(libraries:)136 2123
-y Fk(\017)46 b Fp(string)30 b(manipulation;)136 2311
-y Fk(\017)46 b Fp(mathematical)31 b(functions)e(\(sin,)g(cos,)j(etc\);)
-136 2499 y Fk(\017)46 b Fp(input)29 b(and)g(output)h(\(plus)f(some)i
-(system)g(facilities\).)0 2686 y(In)h(order)g(to)h(ha)m(v)m(e)h(access)
-f(to)g(these)g(libraries,)e(the)h(host)h(program)f(m)m(ust)g(call)g
-(the)h(functions)e Fn(strlib_open)p Fp(,)0 2799 y Fn(mathlib_open)p
-Fp(,)c(and)j Fn(iolib_open)p Fp(,)e(declared)i(in)f Fn(lualib.h)p
-Fp(.)0 3042 y Ff(6.1)112 b(Prede\014ned)38 b(F)-9 b(unctions)0
-3214 y Fk(\017)35 b Fn(dofile)46 b(\(filename\))0 3386
-y Fp(This)33 b(function)g(receiv)m(es)i(a)g(\014le)e(name,)j(op)s(ens)d
-(it,)j(and)d(executes)j(its)e(con)m(ten)m(ts)i(as)f(a)g(Lua)f(c)m(h)m
-(unk,)h(or)g(as)f(pre-)0 3499 y(compiled)d(c)m(h)m(unks.)46
-b(When)32 b(called)g(without)f(argumen)m(ts,)j(it)e(executes)h(the)g
-(con)m(ten)m(ts)h(of)f(the)f(standard)g(input)0 3612
-y(\()p Fn(stdin)p Fp(\).)60 b(If)37 b(there)g(is)f(an)m(y)h(error)g
-(executing)g(the)g(\014le,)h(it)f(returns)f Fm(nil)p
-Fp(.)60 b(Otherwise,)38 b(it)f(returns)e(the)j(v)-5 b(alues)0
-3724 y(returned)32 b(b)m(y)g(the)h(c)m(h)m(unk,)h(or)f(a)g(non)f
-Fm(nil)h Fp(v)-5 b(alue)32 b(if)g(the)h(c)m(h)m(unk)g(returns)e(no)i(v)
--5 b(alues.)47 b(It)33 b(issues)f(an)h(error)f(when)0
-3837 y(called)e(with)f(a)h(non)g(string)g(argumen)m(t.)0
-4077 y Fk(\017)35 b Fn(dostring)46 b(\(string\))0 4249
-y Fp(This)29 b(function)h(executes)j(a)e(giv)m(en)g(string)f(as)i(a)f
-(Lua)g(c)m(h)m(unk.)43 b(If)30 b(there)i(is)e(an)m(y)h(error)g
-(executing)h(the)f(string,)f(it)0 4362 y(returns)c Fm(nil)p
-Fp(.)40 b(Otherwise,)27 b(it)h(returns)e(the)i(v)-5 b(alues)27
-b(returned)f(b)m(y)i(the)g(c)m(h)m(unk,)g(or)g(a)g(non)f
-Fm(nil)h Fp(v)-5 b(alue)27 b(if)f(the)i(c)m(h)m(unk)0
-4475 y(returns)h(no)h(v)-5 b(alues.)0 4715 y Fk(\017)35
-b Fn(next)47 b(\(table,)f(index\))0 4887 y Fp(This)34
-b(function)g(allo)m(ws)h(a)h(program)f(to)h(tra)m(v)m(erse)h(all)d
-(\014elds)g(of)i(a)g(table.)56 b(Its)35 b(\014rst)g(argumen)m(t)h(is)e
-(a)i(table)g(and)0 5000 y(its)31 b(second)g(argumen)m(t)h(is)e(an)i
-(index)d(in)i(this)f(table.)43 b(It)32 b(returns)e(the)h(next)h(index)e
-(of)h(the)h(table)f(and)g(the)g(v)-5 b(alue)0 5112 y(asso)s(ciated)33
-b(with)d(the)j(index.)44 b(When)32 b(called)f(with)g
-Fm(nil)h Fp(as)h(its)e(second)h(argumen)m(t,)i(the)e(function)f
-(returns)g(the)0 5225 y(\014rst)g(index)g(of)h(the)g(table)g(\(and)g
-(its)f(asso)s(ciated)i(v)-5 b(alue\).)45 b(When)32 b(called)f(with)g
-(the)h(last)g(index,)f(or)h(with)f Fm(nil)h Fp(in)0 5338
-y(an)e(empt)m(y)h(table,)g(it)e(returns)h Fm(nil)p Fp(.)1905
-5589 y(15)p eop
-%%Page: 16 16
-16 15 bop 141 91 a Fp(In)32 b(Lua)f(there)i(is)e(no)h(declaration)g(of)
-g(\014elds;)g(seman)m(tically)-8 b(,)32 b(there)h(is)e(no)h
-(di\013erence)g(b)s(et)m(w)m(een)g(a)h(\014eld)e(not)0
-204 y(presen)m(t)i(in)e(a)i(table)f(or)g(a)h(\014eld)e(with)h(v)-5
-b(alue)32 b Fm(nil)p Fp(.)47 b(Therefore,)33 b(the)f(function)g(only)f
-(considers)g(\014elds)g(with)h(non)0 317 y(nil)c(v)-5
-b(alues.)40 b(The)30 b(order)g(the)h(indices)d(are)j(en)m(umerated)g
-(is)e(not)i(sp)s(eci\014ed,)e Fo(even)j(for)h(numeric)f(indic)-5
-b(es)p Fp(.)141 430 y(See)31 b(Section)f(8.2)h(for)g(an)f(example)g(of)
-g(the)h(use)f(of)h(this)e(function.)0 670 y Fk(\017)35
-b Fn(nextvar)46 b(\(name\))0 842 y Fp(This)40 b(function)g(is)h
-(similar)e(to)k(the)f(function)e Fn(next)p Fp(,)k(but)d(iterates)i(o)m
-(v)m(er)g(the)f(global)f(v)-5 b(ariables.)74 b(Its)41
-b(single)0 955 y(argumen)m(t)31 b(is)f(the)h(name)g(of)g(a)g(global)f
-(v)-5 b(ariable,)30 b(or)h Fm(nil)g Fp(to)g(get)h(a)f(\014rst)f(name.)
-42 b(Similarly)27 b(to)32 b Fn(next)p Fp(,)e(it)g(returns)0
-1068 y(the)k(name)g(of)g(another)g(v)-5 b(ariable)33
-b(and)g(its)h(v)-5 b(alue,)34 b(or)g Fm(nil)g Fp(if)f(there)h(are)g(no)
-g(more)g(v)-5 b(ariables.)50 b(See)34 b(Section)g(8.2)0
-1181 y(for)c(an)g(example)g(of)h(the)g(use)f(of)g(this)f(function.)0
-1421 y Fk(\017)35 b Fn(tostring)46 b(\(e\))0 1592 y Fp(This)29
-b(function)g(receiv)m(es)i(an)f(argumen)m(t)h(of)f(an)m(y)h(t)m(yp)s(e)
-g(and)e(con)m(v)m(erts)j(it)e(to)h(a)g(string)e(in)g(a)i(reasonable)f
-(format.)0 1832 y Fk(\017)35 b Fn(print)47 b(\(e1,)f(e2,)h(...\))0
-2004 y Fp(This)35 b(function)g(receiv)m(es)i(an)m(y)f(n)m(um)m(b)s(er)f
-(of)i(argumen)m(ts,)h(and)e(prin)m(ts)f(their)g(v)-5
-b(alues)36 b(in)f(a)h(reasonable)g(format.)0 2117 y(Eac)m(h)i(v)-5
-b(alue)37 b(is)f(prin)m(ted)g(in)h(a)g(new)g(line.)61
-b(This)35 b(function)h(is)h(not)g(in)m(tended)g(for)g(formatted)h
-(output,)h(but)e(as)0 2230 y(a)j(quic)m(k)e(w)m(a)m(y)j(to)f(sho)m(w)f
-(a)g(v)-5 b(alue,)42 b(for)d(instance)g(for)g(error)f(messages)j(or)e
-(debugging.)66 b(See)40 b(Section)f(6.4)h(for)0 2343
-y(functions)29 b(for)h(formatted)h(output.)0 2583 y Fk(\017)k
-Fn(tonumber)46 b(\(e\))0 2754 y Fp(This)19 b(function)g(receiv)m(es)j
-(one)f(argumen)m(t,)i(and)e(tries)f(to)h(con)m(v)m(ert)i(it)d(to)h(a)h
-(n)m(um)m(b)s(er.)36 b(If)20 b(the)h(argumen)m(t)g(is)f(already)h(a)0
-2867 y(n)m(um)m(b)s(er)g(or)h(a)g(string)f(con)m(v)m(ertible)h(to)h(a)f
-(n)m(um)m(b)s(er)f(\(see)i(Section)f(4.2\),)j(then)d(it)f(returns)g
-(that)i(n)m(um)m(b)s(er;)g(otherwise,)0 2980 y(it)30
-b(returns)f Fm(nil)p Fp(.)0 3220 y Fk(\017)35 b Fn(type)47
-b(\(v\))0 3392 y Fp(This)25 b(function)g(allo)m(ws)h(Lua)g(to)i(test)f
-(the)g(t)m(yp)s(e)g(of)f(a)h(v)-5 b(alue.)39 b(It)27
-b(receiv)m(es)g(one)g(argumen)m(t,)h(and)e(returns)g(its)g(t)m(yp)s(e,)
-0 3505 y(co)s(ded)38 b(as)h(a)g(string.)65 b(The)38 b(p)s(ossible)e
-(results)h(of)i(this)f(function)f(are)i Fn("nil")e Fp(\(a)j(string,)f
-(not)g(the)g(v)-5 b(alue)38 b Fm(nil)p Fp(\),)0 3618
-y Fn("number")p Fp(,)h Fn("string")p Fp(,)g Fn("table")p
-Fp(,)g Fn("function")d Fp(\(returned)i(b)s(oth)g(for)h(C)g(functions)e
-(and)h(Lua)h(functions\),)0 3731 y(and)30 b Fn("userdata")p
-Fp(.)141 3844 y(Besides)f(this)f(string,)g(the)i(function)d(returns)h
-(a)i(second)f(result,)f(whic)m(h)g(is)g(the)i Fo(tag)f
-Fp(of)g(the)h(v)-5 b(alue.)39 b(This)28 b(tag)0 3957
-y(can)g(b)s(e)e(used)h(to)h(distinguish)23 b(b)s(et)m(w)m(een)28
-b(user)f(data)h(with)d(di\013eren)m(t)i(tags,)i(and)e(b)s(et)m(w)m(een)
-h(C)f(functions)f(and)g(Lua)0 4069 y(functions.)0 4310
-y Fk(\017)35 b Fn(assert)46 b(\(v\))0 4481 y Fp(This)29
-b(function)g(issues)g(an)h Fo(\\assertion)k(faile)-5
-b(d!")41 b Fp(error)30 b(when)f(its)h(argumen)m(t)h(is)e
-Fm(nil)p Fp(.)0 4721 y Fk(\017)35 b Fn(error)47 b(\(message\))0
-4893 y Fp(This)41 b(function)h(issues)g(an)h(error)f(message)i(and)f
-(terminates)g(the)g(last)g(called)f(function)g(from)g(the)h(library)0
-5006 y(\()p Fn(lua_dofile)p Fp(,)28 b Fn(lua_dostring)p
-Fp(,)f(.)16 b(.)f(.)h(\).)41 b(It)30 b(nev)m(er)h(returns.)1905
-5589 y(16)p eop
-%%Page: 17 17
-17 16 bop 0 91 a Fk(\017)35 b Fn(setglobal)46 b(\(name,)g(value\))0
-263 y Fp(This)35 b(function)h(assigns)f(the)i(giv)m(en)g(v)-5
-b(alue)37 b(to)g(a)g(global)f(v)-5 b(ariable.)59 b(The)37
-b(string)e Fn(name)h Fp(do)s(es)g(not)h(need)g(to)h(b)s(e)0
-376 y(a)33 b(syn)m(tactically)g(v)-5 b(alid)31 b(v)-5
-b(ariable)32 b(name.)48 b(Therefore,)33 b(this)f(function)g(can)h(set)g
-(global)f(v)-5 b(ariables)32 b(with)f(strange)0 489 y(names)f(lik)m(e)g
-Fn(`m)47 b(v)h(1')29 b Fp(or)i Fn(34)p Fp(.)40 b(It)30
-b(returns)f(the)i(v)-5 b(alue)30 b(of)g(its)g(second)h(argumen)m(t.)0
-729 y Fk(\017)k Fn(getglobal)46 b(\(name\))0 901 y Fp(This)41
-b(function)g(retriev)m(es)i(the)g(v)-5 b(alue)42 b(of)g(a)h(global)f(v)
--5 b(ariable.)76 b(The)42 b(string)g Fn(name)f Fp(do)s(es)h(not)h(need)
-f(to)i(b)s(e)e(a)0 1013 y(syn)m(tactically)30 b(v)-5
-b(alid)29 b(v)-5 b(ariable)29 b(name.)0 1254 y Fk(\017)35
-b Fn(setfallback)45 b(\(fallbackname,)f(newfallback\))0
-1425 y Fp(This)23 b(function)h(sets)i(a)f(new)g(fallbac)m(k)g(function)
-f(to)h(the)h(giv)m(en)f(fallbac)m(k.)38 b(It)26 b(returns)e(the)h(old)f
-(fallbac)m(k)h(function.)0 1669 y Ff(6.2)112 b(String)37
-b(Manipulation)0 1840 y Fp(This)26 b(library)f(pro)m(vides)h(generic)i
-(functions)e(for)h(string)f(manipulation,)g(suc)m(h)h(as)h(\014nding)d
-(and)i(extracting)h(sub-)0 1953 y(strings)40 b(and)g(pattern)h(matc)m
-(hing.)72 b(When)41 b(indexing)d(a)j(string,)i(the)e(\014rst)f(c)m
-(haracter)j(has)d(p)s(osition)f(1.)73 b(See)0 2066 y(P)m(age)30
-b(19)f(for)g(an)f(explanation)f(ab)s(out)i(patterns,)g(and)e(Section)i
-(8.3)g(for)f(some)h(examples)f(on)h(string)e(manipula-)0
-2179 y(tion)j(in)f(Lua.)0 2419 y Fk(\017)35 b Fn(strfind)46
-b(\(str,)g(pattern)g([,)h(init)g([,)g(plain]]\))0 2591
-y Fp(This)35 b(function)g(lo)s(oks)h(for)g(the)h(\014rst)e
-Fo(match)j Fp(of)f Fn(pattern)d Fp(in)i Fn(str)p Fp(.)58
-b(If)36 b(it)g(\014nds)f(one,)j(it)e(returns)f(the)i(indexes)0
-2704 y(on)j Fn(str)f Fp(where)g(this)g(o)s(ccurence)i(starts)f(and)f
-(ends;)45 b(otherwise,)d(it)d(returns)g Fm(nil)p Fp(.)70
-b(If)39 b(the)h(pattern)g(sp)s(eci\014es)0 2817 y(captures,)32
-b(the)f(captured)h(strings)e(are)i(returned)e(as)h(extra)h(results.)43
-b(A)31 b(third)f(optional)h(n)m(umerical)e(argumen)m(t)0
-2929 y(sp)s(eci\014es)f(where)g(to)i(start)f(the)g(searc)m(h;)h(its)f
-(default)f(v)-5 b(alue)28 b(is)g(1.)41 b(A)29 b(v)-5
-b(alue)28 b(of)h(1)g(as)h(a)f(forth)f(optional)g(argumen)m(t)0
-3042 y(turns)h(o\013)i(the)f(pattern)h(matc)m(hing)f(facilities,)f(so)i
-(the)f(function)f(do)s(es)i(a)f(plain)f(\\\014nd)g(substring")g(op)s
-(eration.)0 3282 y Fk(\017)35 b Fn(strlen)46 b(\(s\))0
-3454 y Fp(Receiv)m(es)31 b(a)g(string)e(and)h(returns)f(its)h(length.)0
-3694 y Fk(\017)35 b Fn(strsub)46 b(\(s,)h(i)h([,)f(j]\))0
-3866 y Fp(Returns)32 b(another)g(string,)h(whic)m(h)e(is)g(a)i
-(substring)e(of)h Fn(s)p Fp(,)h(starting)f(at)i Fn(i)e
-Fp(and)g(runing)e(un)m(til)h Fn(j)p Fp(.)46 b(If)32 b
-Fn(j)h Fp(is)e(absen)m(t,)0 3979 y(it)d(is)g(assumed)f(to)j(b)s(e)e
-(equal)g(to)h(the)g(length)f(of)g Fn(s)p Fp(.)40 b(In)28
-b(particular,)f(the)i(call)f Fn(strsub\(s,1,j\))d Fp(returns)i(a)i
-(pre\014x)0 4092 y(of)i Fn(s)f Fp(with)f(length)g Fn(j)p
-Fp(,)i(whereas)f(the)g(call)g Fn(strsub\(s,i\))d Fp(returns)j(a)g
-(su\016x)g(of)g Fn(s)p Fp(,)h(starting)f(at)h Fn(i)p
-Fp(.)0 4332 y Fk(\017)k Fn(strlower)46 b(\(s\))0 4503
-y Fp(Receiv)m(es)26 b(a)g(string)f(and)g(returns)f(a)i(cop)m(y)g(of)f
-(that)h(string)f(with)f(all)g(upp)s(er)g(case)i(letters)g(c)m(hanged)g
-(to)g(lo)m(w)m(er)g(case.)0 4616 y(All)j(other)i(c)m(haracters)g(are)g
-(left)f(unc)m(hanged.)0 4856 y Fk(\017)35 b Fn(strupper)46
-b(\(s\))0 5028 y Fp(Receiv)m(es)26 b(a)g(string)f(and)g(returns)f(a)i
-(cop)m(y)g(of)f(that)h(string)f(with)f(all)g(lo)m(w)m(er)i(case)g
-(letters)g(c)m(hanged)g(to)g(upp)s(er)e(case.)0 5141
-y(All)29 b(other)i(c)m(haracters)g(are)g(left)f(unc)m(hanged.)1905
-5589 y(17)p eop
-%%Page: 18 18
-18 17 bop 0 91 a Fk(\017)35 b Fn(strrep)46 b(\(s,)h(n\))0
-263 y Fp(Returns)29 b(a)i(string)f(whic)m(h)f(is)g(the)i(concatenation)
-g(of)g Fn(n)f Fp(copies)g(of)h(the)f(string)g Fn(s)p
-Fp(.)0 503 y Fk(\017)35 b Fn(ascii)47 b(\(s)g([,)g(i]\))0
-675 y Fp(Returns)29 b(the)i(ascii)f(co)s(de)g(of)h(the)f(c)m(haracter)i
-Fn(s[i])p Fp(.)40 b(If)30 b Fn(i)g Fp(is)f(absen)m(t,)i(then)f(it)g(is)
-g(assumed)f(to)i(b)s(e)f(1.)0 915 y Fk(\017)35 b Fn(format)46
-b(\(formatstring,)e(e1,)j(e2,)g(...\))0 1086 y Fp(This)25
-b(function)h(returns)g(a)h(formated)g(v)m(ersion)g(of)g(its)f(v)-5
-b(ariable)26 b(n)m(um)m(b)s(er)g(of)h(argumen)m(ts)g(follo)m(wing)f
-(the)h(descrip-)0 1199 y(tion)i(giv)m(en)h(in)e(its)h(\014rst)g
-(argumen)m(t)h(\(whic)m(h)f(m)m(ust)g(b)s(e)g(a)h(string\).)40
-b(The)29 b(format)h(string)f(follo)m(ws)g(the)g(same)h(rules)0
-1312 y(as)h(the)f Fn(printf)f Fp(family)g(of)h(standard)g(C)g
-(functions.)40 b(The)30 b(only)f(di\013erences)h(are)h(that)g(the)f
-(options/mo)s(di\014ers)0 1425 y Fn(*)p Fp(,)42 b Fn(l)p
-Fp(,)f Fn(L)p Fp(,)e Fn(n)p Fp(,)j Fn(p)p Fp(,)f(and)e
-Fn(h)g Fp(are)h(not)g(supp)s(orted,)g(and)e(there)i(is)e(an)i(extra)g
-(option,)h Fn(q)p Fp(.)68 b(This)37 b(option)i(formats)h(a)0
-1538 y(string)27 b(in)f(a)i(form)g(suitable)e(to)i(b)s(e)g(safely)f
-(read)h(bac)m(k)g(b)m(y)g(the)g(Lua)f(in)m(terpreter;)h(that)h(is,)e
-(the)h(string)f(is)g(written)0 1651 y(b)s(et)m(w)m(een)34
-b(double)e(quotes,)j(and)e(all)g(double)f(quotes,)j(returns)d(and)h
-(bac)m(kslashes)h(in)e(the)i(string)f(are)h(correctly)0
-1764 y(escap)s(ed)c(when)g(written.)40 b(F)-8 b(or)31
-b(instance,)f(the)h(call)0 1952 y Fn(format\('\045q',)44
-b('a)k(string)e(with)g("quotes")g(and)h(\\n)g(new)g(line'\))0
-2139 y Fp(will)28 b(pro)s(duce)h(the)h(string:)0 2327
-y Fn("a)47 b(string)f(with)h(\\"quotes\\")e(and)i(\\)48
-2440 y(new)g(line")141 2627 y Fp(The)29 b(options)g Fn(c)p
-Fp(,)g Fn(d)p Fp(,)h Fn(E)p Fp(,)f Fn(e)p Fp(,)h Fn(f)p
-Fp(,)f Fn(g)g(i)p Fp(,)h Fn(o)p Fp(,)f Fn(u)p Fp(,)h
-Fn(X)p Fp(,)f(and)g Fn(x)g Fp(all)f(exp)s(ect)i(a)g(n)m(um)m(b)s(er)e
-(as)i(argumen)m(t,)g(whereas)f Fn(q)g Fp(and)g Fn(s)0
-2740 y Fp(exp)s(ect)i(a)g(string.)0 2980 y Fk(\017)k
-Fn(gsub)47 b(\(s,)g(pat,)f(repl)h([,)g(n]\))0 3152 y
-Fp(Returns)37 b(a)h(cop)m(y)h(of)f Fn(s)p Fp(,)i(where)e(all)f(o)s
-(ccurrences)h(of)g(the)g(pattern)g Fn(pat)f Fp(ha)m(v)m(e)j(b)s(een)d
-(replaced)g(b)m(y)h(a)h(replace-)0 3265 y(men)m(t)34
-b(string)e(sp)s(eci\014ed)g(b)m(y)i Fn(repl)p Fp(.)49
-b(This)31 b(function)i(also)g(returns,)g(as)h(a)g(second)g(v)-5
-b(alue,)34 b(the)f(total)i(n)m(um)m(b)s(er)d(of)0 3378
-y(substitutions)c(made.)141 3491 y(If)h Fn(repl)f Fp(is)g(a)h(string,)g
-(its)f(v)-5 b(alue)29 b(is)f(used)g(for)h(replacemen)m(t.)41
-b(An)m(y)29 b(sequence)h(in)e Fn(repl)g Fp(of)h(the)g(form)g
-Fn(\045n)f Fp(with)0 3604 y Fn(n)i Fp(b)s(et)m(w)m(een)h(1)g(and)f(9)g
-(stands)g(for)g(the)h(v)-5 b(alue)30 b(of)g(the)h(n-th)f(captured)g
-(substring.)141 3717 y(If)44 b Fn(repl)f Fp(is)g(a)i(function,)i(this)c
-(function)g(is)g(called)h(ev)m(ery)h(time)f(a)g(matc)m(h)h(o)s(ccurs,)j
-(with)43 b(all)g(captured)0 3829 y(substrings)f(as)i(parameters.)82
-b(If)43 b(the)h(v)-5 b(alue)44 b(returned)f(b)m(y)g(this)g(function)g
-(is)g(a)h(string,)j(it)c(is)g(used)h(as)g(the)0 3942
-y(replacemen)m(t)31 b(string;)e(otherwise,)h(the)h(replacemen)m(t)g
-(string)e(is)h(the)g(empt)m(y)h(string.)141 4055 y(An)h(optional)g
-(parameter)g Fn(n)g Fp(limits)e(the)j(maxim)m(um)e(n)m(um)m(b)s(er)g
-(of)i(substitutions)c(to)34 b(o)s(ccur.)46 b(F)-8 b(or)33
-b(instance,)0 4168 y(when)c Fn(n)h Fp(is)g(1)h(only)e(the)i(\014rst)e
-(o)s(ccurrence)i(of)f Fn(pat)g Fp(is)f(replaced.)141
-4281 y(As)24 b(an)f(example,)i(in)d(the)i(follo)m(wing)e(expression)g
-(eac)m(h)j(o)s(ccurrence)f(of)f(the)h(form)f Fn($name$)f
-Fp(calls)h(the)g(function)0 4394 y Fn(getenv)p Fp(,)32
-b(passing)f Fn(name)g Fp(as)i(argumen)m(t)g(\(b)s(ecause)g(only)f(this)
-f(part)i(of)f(the)h(pattern)g(is)e(captured\).)47 b(The)32
-b(v)-5 b(alue)0 4507 y(returned)29 b(b)m(y)h Fn(getenv)f
-Fp(will)f(replace)i(the)h(pattern.)41 b(Therefore,)30
-b(the)h(whole)e(expression:)95 4695 y Fn(gsub\("home)45
-b(=)j($HOME$,)e(user)g(=)i($USER$",)d("$\(\045w\045w*\)$",)g(getenv\))0
-4882 y Fp(ma)m(y)31 b(return)e(the)i(string:)0 5070 y
-Fn(home)47 b(=)g(/home/roberto,)d(user)j(=)g(roberto)1905
-5589 y Fp(18)p eop
-%%Page: 19 19
-19 18 bop 0 91 a Fm(P)m(atterns)0 263 y(Character)52
-b(Class:)90 b Fp(a)46 b Fo(char)-5 b(acter)49 b(class)d
-Fp(is)e(used)h(to)h(represen)m(t)g(a)g(set)g(of)f(c)m(haracters.)88
-b(The)44 b(follo)m(wing)0 376 y(com)m(binations)30 b(are)g(allo)m(w)m
-(ed)h(in)e(describing)f(a)i(c)m(haracter)i(class:)0 563
-y Fo(x)46 b Fp(\(where)30 b Fo(x)g Fp(is)g(an)m(y)g(c)m(haracter)i(not)
-f(in)e(the)i(list)e Fn(\(\)\045.[*?)p Fp(\))f(|)j(represen)m(ts)f(the)h
-(c)m(haracter)g Fo(x)g Fp(itself.)0 751 y Fn(.)45 b Fp(|)30
-b(represen)m(ts)h(all)e(c)m(haracters.)0 939 y Fn(\045a)45
-b Fp(|)30 b(represen)m(ts)g(all)g(letters.)0 1126 y Fn(\045A)45
-b Fp(|)30 b(represen)m(ts)g(all)g(non)f(letter)i(c)m(haracters.)0
-1314 y Fn(\045d)45 b Fp(|)30 b(represen)m(ts)g(all)g(digits.)0
-1502 y Fn(\045D)45 b Fp(|)30 b(represen)m(ts)g(all)g(non)f(digits.)0
-1689 y Fn(\045l)45 b Fp(|)30 b(represen)m(ts)g(all)g(lo)m(w)m(er)g
-(case)i(letters.)0 1877 y Fn(\045L)45 b Fp(|)30 b(represen)m(ts)g(all)g
-(non)f(lo)m(w)m(er)i(case)g(letter)g(c)m(haracters.)0
-2065 y Fn(\045s)45 b Fp(|)30 b(represen)m(ts)g(all)g(space)h(c)m
-(haracters.)0 2252 y Fn(\045S)45 b Fp(|)30 b(represen)m(ts)g(all)g(non)
-f(space)i(c)m(haracters.)0 2440 y Fn(\045u)45 b Fp(|)30
-b(represen)m(ts)g(all)g(upp)s(er)e(case)j(letters.)0
-2627 y Fn(\045U)45 b Fp(|)30 b(represen)m(ts)g(all)g(non)f(upp)s(er)g
-(case)i(letter)g(c)m(haracters.)0 2815 y Fn(\045w)45
-b Fp(|)30 b(represen)m(ts)g(all)g(alphan)m(umeric)e(c)m(haracters.)0
-3003 y Fn(\045W)45 b Fp(|)30 b(represen)m(ts)g(all)g(non)f(alphan)m
-(umeric)g(c)m(haracters.)0 3190 y Fn(\045)p Fo(x)45 b
-Fp(\(where)31 b Fo(x)f Fp(is)f(an)m(y)i(non)f(alphan)m(umeric)e(c)m
-(haracter\))33 b(|)d(represen)m(ts)g(the)h(c)m(haracter)h
-Fo(x)p Fp(.)0 3378 y Fn([char-set])43 b Fp(|)27 b(Represen)m(ts)g(the)g
-(class)g(whic)m(h)f(is)g(the)h(union)f(of)h(all)f(c)m(haracters)j(in)c
-(c)m(har-set.)41 b(T)-8 b(o)28 b(include)d(a)i Fn(])227
-3491 y Fp(in)21 b(c)m(har-set,)26 b(it)21 b(m)m(ust)i(b)s(e)e(the)i
-(\014rst)e(c)m(haracter.)40 b(A)22 b(range)h(of)f(c)m(haracters)i(ma)m
-(y)f(b)s(e)e(sp)s(eci\014ed)g(b)m(y)h(separating)227
-3604 y(the)35 b(end)f(c)m(haracters)i(of)f(the)g(range)g(with)e(a)i
-Fn(-)p Fp(;)i(e.g.,)g Fn(A-Z)d Fp(sp)s(eci\014es)f(the)i(upp)s(er)d
-(case)k(c)m(haracters.)55 b(If)34 b Fn(-)227 3717 y Fp(app)s(ears)43
-b(as)g(the)g(\014rst)g(or)g(last)g(c)m(haracter)h(of)f(c)m(har-set,)48
-b(then)43 b(it)g(represen)m(ts)g(itself.)77 b(All)42
-b(classes)h Fn(\045)p Fo(x)227 3830 y Fp(describ)s(ed)31
-b(ab)s(o)m(v)m(e)i(can)g(also)g(b)s(e)f(used)f(as)i(comp)s(onen)m(ts)g
-(in)e(a)i(c)m(har-set.)48 b(All)31 b(other)i(c)m(haracters)h(in)d(c)m
-(har-)227 3942 y(set)g(represen)m(t)g(themselv)m(es.)0
-4130 y Fn([^char-set])42 b Fp(|)31 b(represen)m(ts)f(the)h(complemen)m
-(t)f(of)h(c)m(har-set,)h(where)d(c)m(har-set)j(is)e(in)m(terpreted)f
-(as)i(ab)s(o)m(v)m(e.)0 4370 y Fm(P)m(attern)39 b(Item:)89
-b Fp(a)35 b Fo(p)-5 b(attern)38 b(item)c Fp(ma)m(y)h(b)s(e)e(a)i
-(single)e(c)m(haracter)j(class,)f(or)f(a)h(c)m(haracter)g(class)f
-(follo)m(w)m(ed)g(b)m(y)0 4483 y Fn(*)j Fp(or)g(b)m(y)h
-Fn(?)p Fp(.)61 b(A)37 b(single)f(c)m(haracter)j(class)f(matc)m(hes)g
-(an)m(y)g(single)e(c)m(haracter)j(in)d(the)h(class.)62
-b(A)37 b(c)m(haracter)i(class)0 4596 y(follo)m(w)m(ed)33
-b(b)m(y)g Fn(*)f Fp(matc)m(hes)j(0)e(or)g(more)h(rep)s(etitions)d(of)i
-(c)m(haracters)i(in)d(the)h(class.)49 b(A)33 b(c)m(haracter)h(class)f
-(follo)m(w)m(ed)0 4709 y(b)m(y)27 b Fn(?)g Fp(matc)m(hes)h(0)g(or)f
-(one)h(o)s(ccurrence)f(of)g(a)h(c)m(haracter)h(in)d(the)h(class.)40
-b(A)27 b(pattern)g(item)g(ma)m(y)h(also)f(has)g(the)g(form)0
-4822 y Fn(\045n)p Fp(,)j(for)g Fn(n)g Fp(b)s(et)m(w)m(een)h(1)g(and)f
-(9;)h(suc)m(h)f(item)g(matc)m(hes)h(a)g(sub-string)e(equal)h(to)h(the)f
-(n-th)g(captured)g(string.)1905 5589 y(19)p eop
-%%Page: 20 20
-20 19 bop 0 91 a Fm(P)m(attern:)91 b Fp(a)32 b Fo(p)-5
-b(attern)34 b Fp(is)d(a)i(sequence)f(of)g(pattern)h(items.)45
-b(An)m(y)32 b(rep)s(etition)f(item)h(\()p Fn(*)p Fp(\))g(inside)e(a)i
-(pattern)h(will)0 204 y(alw)m(a)m(ys)f(matc)m(h)g(the)g(longest)f(p)s
-(ossible)e(sequence.)44 b(A)32 b Fn(^)f Fp(at)h(the)f(b)s(eginning)e
-(of)j(a)f(pattern)h(anc)m(hors)f(the)h(matc)m(h)0 317
-y(at)i(the)f(b)s(eginning)d(of)j(the)g(sub)5 b(ject)32
-b(string.)48 b(A)33 b Fn($)f Fp(at)i(the)f(end)f(of)h(a)g(pattern)g
-(anc)m(hors)g(the)g(matc)m(h)h(at)g(the)f(end)0 430 y(of)e(the)f(sub)5
-b(ject)30 b(string.)141 543 y(A)35 b(pattern)g(ma)m(y)h(con)m(tain)g
-(sub-patterns)e(enclosed)h(in)e(paren)m(theses,)k(that)f(describ)s(e)d
-Fo(c)-5 b(aptur)g(es)p Fp(.)57 b(When)35 b(a)0 656 y(matc)m(h)g
-(succeeds,)h(the)f(sub-strings)d(of)j(the)g(sub)5 b(ject)34
-b(string)f(that)i(matc)m(h)h(captures)e(are)h Fo(c)-5
-b(aptur)g(e)g(d)37 b Fp(for)d(future)0 769 y(use.)40
-b(Captures)30 b(are)h(n)m(um)m(b)s(ered)e(according)h(to)h(their)f
-(left)g(paren)m(theses.)0 1012 y Ff(6.3)112 b(Mathematical)36
-b(F)-9 b(unctions)0 1184 y Fp(This)24 b(library)g(is)h(an)i(in)m
-(terface)f(to)h(some)g(functions)e(of)h(the)g(standard)g(C)g(math)g
-(library)-8 b(.)37 b(Moreo)m(v)m(er,)29 b(it)d(registers)0
-1297 y(a)31 b(fallbac)m(k)f(for)g(the)g(binary)f(op)s(erator)i
-Fn(^)f Fp(whic)m(h,)f(when)g(applied)g(to)i(n)m(um)m(b)s(ers)e
-Fn(x^y)p Fp(,)g(returns)g Fe(x)3321 1264 y Fd(y)3363
-1297 y Fp(.)141 1410 y(The)h(library)e(pro)m(vides)h(the)i(follo)m
-(wing)e(functions:)0 1597 y Fn(abs)47 b(acos)g(asin)f(atan)h(atan2)f
-(ceil)h(cos)g(floor)f(log)h(log10)0 1710 y(max)g(min)95
-b(mod)f(sin)h(sqrt)46 b(tan)h(random)f(randomseed)0 1898
-y Fp(Most)36 b(of)f(them)g(are)h(only)e(in)m(terfaces)i(to)g(the)f
-(homon)m(ymous)g(functions)e(in)h(the)i(C)e(library)-8
-b(,)35 b(except)h(that,)h(for)0 2011 y(the)31 b(trigonometric)f
-(functions,)f(all)g(angles)h(are)h(expressed)f(in)f(degrees,)i(not)g
-(radians.)141 2124 y(The)22 b(function)g Fn(max)f Fp(returns)h(the)h
-(maxim)m(um)e(v)-5 b(alue)22 b(of)h(its)f(n)m(umeric)f(argumen)m(ts.)39
-b(Similarly)-8 b(,)21 b Fn(min)h Fp(computes)0 2237 y(the)31
-b(minim)m(um.)37 b(Both)31 b(can)g(b)s(e)f(used)f(with)h(an)g
-(unlimited)d(n)m(um)m(b)s(er)i(of)h(argumen)m(ts.)141
-2349 y(The)e(functions)e Fn(random)h Fp(and)g Fn(randomseed)e
-Fp(are)k(in)m(terfaces)f(to)h(the)f(simple)e(random)h(generator)i
-(functions)0 2462 y Fn(rand)35 b Fp(and)h Fn(srand)p
-Fp(,)h(pro)m(vided)f(b)m(y)g(ANSI)g(C.)h(The)f(function)f
-Fn(random)g Fp(returns)h(pseudo-random)f(n)m(um)m(b)s(ers)g(in)0
-2575 y(the)c(range)f([0)p Fe(;)15 b Fp(1\).)0 2819 y
-Ff(6.4)112 b(I/O)38 b(F)-9 b(acilities)0 2990 y Fp(All)37
-b(I/O)i(op)s(erations)f(in)f(Lua)i(are)g(done)g(o)m(v)m(er)h(t)m(w)m(o)
-g Fo(curr)-5 b(ent)39 b Fp(\014les:)57 b(one)39 b(for)f(reading)g(and)g
-(one)h(for)g(writing.)0 3103 y(Initially)-8 b(,)28 b(the)j(curren)m(t)f
-(input)e(\014le)i(is)f Fn(stdin)p Fp(,)g(and)h(the)h(curren)m(t)f
-(output)g(\014le)f(is)h Fn(stdout)p Fp(.)141 3216 y(Unless)k(otherwise)
-f(stated,)k(all)c(I/O)h(functions)f(return)h Fm(nil)g
-Fp(on)g(failure)f(and)h(some)h(v)-5 b(alue)34 b(di\013eren)m(t)f(from)0
-3329 y Fm(nil)d Fp(on)h(success.)0 3569 y Fk(\017)k Fn(readfrom)46
-b(\(filename\))0 3741 y Fp(This)29 b(function)g(ma)m(y)j(b)s(e)e
-(called)g(in)f(three)i(w)m(a)m(ys.)42 b(When)31 b(called)f(with)f(a)i
-(\014le)f(name,)h(it)g(op)s(ens)e(the)i(named)g(\014le,)0
-3854 y(sets)25 b(it)e(as)i(the)f Fo(curr)-5 b(ent)25
-b Fp(input)d(\014le,)j(and)f(returns)f(a)h Fo(hand)5
-b(le)25 b Fp(to)g(the)g(\014le)e(\(this)g(handle)g(is)g(a)i(user)e
-(data)i(con)m(taining)0 3967 y(the)37 b(\014le)f(stream)h
-Fn(FILE)47 b(*)p Fp(\).)60 b(When)37 b(called)f(with)f(a)j(\014le)e
-(handle,)h(returned)f(b)m(y)g(a)i(previous)d(call,)j(it)e(restores)0
-4080 y(the)31 b(\014le)e(as)i(the)f(curren)m(t)g(input.)39
-b(When)30 b(called)g(without)f(parameters,)i(it)f(closes)h(the)f
-(curren)m(t)g(input)f(\014le,)h(and)0 4192 y(restores)h
-Fn(stdin)e Fp(as)h(the)h(curren)m(t)f(input)f(\014le.)141
-4305 y(If)h(this)f(function)g(fails,)h(it)f(returns)h
-Fm(nil)p Fp(,)g(plus)f(a)h(string)g(describing)e(the)i(error.)141
-4418 y Fo(System)i(dep)-5 b(endent:)41 b Fp(if)27 b Fn(filename)f
-Fp(starts)j(with)e(a)i Fn(|)p Fp(,)g(then)f(a)h(pip)s(ed)d(input)g(is)i
-(op)s(en,)g(via)g(function)f Fn(popen)p Fp(.)0 4658 y
-Fk(\017)35 b Fn(writeto)46 b(\(filename\))0 4830 y Fp(This)38
-b(function)g(ma)m(y)i(b)s(e)f(called)g(in)g(three)g(w)m(a)m(ys.)70
-b(When)39 b(called)g(with)f(a)j(\014le)d(name,)43 b(it)c(op)s(ens)g
-(the)g(named)0 4943 y(\014le,)c(sets)h(it)e(as)h(the)g
-Fo(curr)-5 b(ent)36 b Fp(output)e(\014le,)i(and)e(returns)f(a)j
-Fo(hand)5 b(le)36 b Fp(to)f(the)g(\014le)f(\(this)g(handle)g(is)g(a)h
-(user)f(data)0 5056 y(con)m(taining)24 b(the)g(\014le)f(stream)i
-Fn(FILE)46 b(*)p Fp(\).)39 b(Notice)25 b(that,)h(if)d(the)i(\014le)e
-(already)h(exists,)h(it)f(will)d(b)s(e)j Fo(c)-5 b(ompletely)28
-b(er)-5 b(ase)g(d)0 5169 y Fp(with)28 b(this)g(op)s(eration.)40
-b(When)28 b(called)h(with)f(a)h(\014le)f(handle,)g(returned)g(b)m(y)h
-(a)h(previous)d(call,)i(it)g(restores)h(the)f(\014le)1905
-5589 y(20)p eop
-%%Page: 21 21
-21 20 bop 0 91 a Fp(as)37 b(the)g(curren)m(t)g(output.)59
-b(When)37 b(called)f(without)g(parameters,)j(this)c(function)h(closes)h
-(the)g(curren)m(t)f(output)0 204 y(\014le,)30 b(and)f(restores)i
-Fn(stdout)e Fp(as)i(the)f(curren)m(t)g(output)g(\014le.)141
-317 y(If)g(this)f(function)g(fails,)h(it)f(returns)h
-Fm(nil)p Fp(,)g(plus)f(a)h(string)g(describing)e(the)i(error.)141
-430 y Fo(System)e(dep)-5 b(endent:)39 b Fp(if)24 b Fn(filename)e
-Fp(starts)k(with)d(a)i Fn(|)p Fp(,)h(then)e(a)h(pip)s(ed)e(output)h(is)
-g(op)s(en,)h(via)g(function)e Fn(popen)p Fp(.)0 670 y
-Fk(\017)35 b Fn(appendto)46 b(\(filename\))0 842 y Fp(This)34
-b(function)h(op)s(ens)g(a)h(\014le)f(named)h Fn(filename)d
-Fp(and)j(sets)g(it)f(as)h(the)h Fo(curr)-5 b(ent)36 b
-Fp(output)g(\014le.)56 b(It)36 b(returns)f(the)0 955
-y(\014le)30 b(handle,)g(or)h Fm(nil)g Fp(in)e(case)j(of)f(error.)42
-b(Unlik)m(e)30 b(the)h Fn(writeto)d Fp(op)s(eration,)j(this)f(function)
-f(do)s(es)i(not)g(erase)h(an)m(y)0 1068 y(previous)d(con)m(ten)m(t)j
-(of)f(the)f(\014le.)40 b(If)30 b(this)f(function)g(fails,)g(it)h
-(returns)f Fm(nil)p Fp(,)i(plus)e(a)h(string)g(describing)e(the)i
-(error.)141 1181 y(Notice)h(that)g(function)f Fn(writeto)e
-Fp(is)h(a)m(v)-5 b(ailable)30 b(to)h(close)g(a)g(\014le.)0
-1421 y Fk(\017)k Fn(remove)46 b(\(filename\))0 1592 y
-Fp(This)25 b(function)h(deletes)h(the)g(\014le)g(with)e(the)j(giv)m(en)
-f(name.)39 b(If)27 b(this)f(function)f(fails,)i(it)g(returns)e
-Fm(nil)p Fp(,)j(plus)e(a)h(string)0 1705 y(describing)h(the)j(error.)0
-1945 y Fk(\017)k Fn(rename)46 b(\(name1,)g(name2\))0
-2117 y Fp(This)41 b(function)h(renames)i(\014le)e Fn(name1)g
-Fp(to)i Fn(name2)p Fp(.)78 b(If)43 b(this)f(function)g(fails,)j(it)e
-(returns)f Fm(nil)p Fp(,)47 b(plus)41 b(a)j(string)0
-2230 y(describing)28 b(the)j(error.)0 2470 y Fk(\017)k
-Fn(tmpname)46 b(\(\))0 2642 y Fp(This)29 b(function)g(returns)g(a)i
-(string)e(with)g(a)i(\014le)e(name)i(that)g(can)f(safely)g(b)s(e)g
-(used)g(for)g(a)g(temp)s(orary)g(\014le.)0 2882 y Fk(\017)35
-b Fn(read)47 b(\([readpattern]\))0 3053 y Fp(This)25
-b(function)h(reads)h(the)g(curren)m(t)g(input)e(according)i(to)g(a)h
-(read)f(pattern,)h(that)f(sp)s(eci\014es)f(ho)m(w)h(m)m(uc)m(h)g(to)h
-(read;)0 3166 y(c)m(haracters)36 b(are)g(read)f(from)f(the)h(curren)m
-(t)g(input)e(\014le)h(un)m(til)f(the)j(read)e(pattern)i(fails)d(or)i
-(ends.)54 b(The)34 b(function)0 3279 y Fn(read)28 b Fp(returns)f(a)i
-(string)f(with)g(the)g(c)m(haracters)j(read,)e(or)g Fm(nil)g
-Fp(if)e(the)i(read)g(pattern)g(fails)e Fo(and)39 b Fp(the)29
-b(result)f(string)0 3392 y(w)m(ould)35 b(b)s(e)g(empt)m(y)-8
-b(.)58 b(When)35 b(called)g(without)g(parameters,)j(it)d(uses)h(a)g
-(default)f(pattern)h(that)g(reads)g(the)g(next)0 3505
-y(line)29 b(\(see)i(b)s(elo)m(w\).)141 3618 y(A)37 b
-Fo(r)-5 b(e)g(ad)40 b(p)-5 b(attern)38 b Fp(is)e(a)h(sequence)g(of)f
-(read)h(pattern)g(items.)58 b(An)37 b(item)f(ma)m(y)h(b)s(e)f(a)h
-(single)e(c)m(haracter)j(class)0 3731 y(or)33 b(a)h(c)m(haracter)g
-(class)f(follo)m(w)m(ed)g(b)m(y)g Fn(?)f Fp(or)i(b)m(y)e
-Fn(*)p Fp(.)49 b(A)33 b(single)f(c)m(haracter)j(class)d(reads)h(the)g
-(next)h(c)m(haracter)g(from)0 3844 y(the)k(input)d(if)i(it)g(b)s
-(elongs)f(to)j(the)e(class,)j(otherwise)d(it)g(fails.)61
-b(A)37 b(c)m(haracter)i(class)f(follo)m(w)m(ed)f(b)m(y)g
-Fn(?)g Fp(reads)h(the)0 3957 y(next)d(c)m(haracter)i(from)d(the)h
-(input)e(if)h(it)h(b)s(elongs)f(to)i(the)f(class;)i(it)e(nev)m(er)g
-(fails.)53 b(A)35 b(c)m(haracter)i(class)d(follo)m(w)m(ed)0
-4069 y(b)m(y)f Fn(*)f Fp(reads)g(un)m(til)f(a)i(c)m(haracter)i(that)e
-(do)s(es)f(not)h(b)s(elong)f(to)i(the)f(class,)g(or)g(end)f(of)g
-(\014le;)i(since)e(it)g(can)h(matc)m(h)h(a)0 4182 y(sequence)d(of)f
-(zero)h(c)m(haracteres,)i(it)d(nev)m(er)h(fails.)1691
-4149 y Fl(4)141 4295 y Fp(A)e(pattern)f(item)g(ma)m(y)h(con)m(tain)g
-(sub-patterns)e(enclosed)i(in)e(curly)g(brac)m(k)m(ets,)j(that)f
-(describ)s(e)e Fo(skips)p Fp(.)40 b(Char-)0 4408 y(acters)31
-b(matc)m(hing)g(a)g(skip)e(are)h(read,)h(but)e(are)i(not)g(included)c
-(in)j(the)g(resulting)f(string.)141 4521 y(F)-8 b(ollo)m(wing)30
-b(are)h(some)g(examples)e(of)i(read)f(patterns)h(and)e(their)h
-(meanings:)136 4709 y Fk(\017)46 b Fn(".")30 b Fp(returns)f(the)h(next)
-h(c)m(haracter,)h(or)f Fm(nil)f Fp(on)g(end)g(of)h(\014le.)136
-4896 y Fk(\017)46 b Fn(".*")29 b Fp(reads)i(the)f(whole)g(\014le.)p
-0 4958 1560 4 v 104 5012 a Fj(4)138 5043 y Fi(Notice)24
-b(that)e(this)h(b)r(eha)n(viour)g(is)h(di\013eren)n(t)e(from)h(regular)
-h(pattern)e(matc)n(hing,)h(where)h(a)f Fc(*)g Fi(expands)f(to)i(the)e
-(maxim)n(um)e(length)0 5135 y Fg(such)28 b(that)35 b
-Fi(the)25 b(rest)h(of)g(the)f(pattern)h(do)r(es)g(not)g(fail.)1905
-5589 y Fp(21)p eop
-%%Page: 22 22
-22 21 bop 136 91 a Fk(\017)46 b Fn("[^\\n]*{\\n}")30
-b Fp(returns)i(the)h(next)g(line)f(\(skipping)e(the)k(end)e(of)h
-(line\),)g(or)g Fm(nil)g Fp(on)g(end)g(of)g(\014le.)48
-b(This)31 b(is)227 204 y(the)g(default)e(pattern.)136
-392 y Fk(\017)46 b Fn("{\045s*}\045S\045S*")31 b Fp(returns)i(the)h
-(next)g(w)m(ord)g(\(maximal)f(sequence)h(of)h(non)e(white-space)h(c)m
-(haracters\),)j(or)227 505 y Fm(nil)31 b Fp(on)f(end)g(of)g(\014le.)136
-692 y Fk(\017)46 b Fn("{\045s*}[+-]?\045d\045d*")26 b
-Fp(returns)j(the)i(next)f(in)m(teger)h(or)f Fm(nil)h
-Fp(if)e(the)i(next)f(c)m(haracters)i(do)e(not)h(conform)f(to)227
-805 y(an)h(in)m(teger)f(format.)0 1045 y Fk(\017)35 b
-Fn(write)47 b(\(value1,)e(...\))0 1217 y Fp(This)30 b(function)h
-(writes)h(the)g(v)-5 b(alue)32 b(of)g(eac)m(h)h(of)g(its)e(argumen)m
-(ts)i(to)g(the)f(curren)m(t)g(output)g(\014le.)45 b(The)32
-b(argumen)m(ts)0 1330 y(m)m(ust)e(b)s(e)f(strings)g(or)i(n)m(um)m(b)s
-(ers.)39 b(If)29 b(this)g(function)g(fails,)g(it)h(returns)f
-Fm(nil)p Fp(,)h(plus)e(a)j(string)e(describing)f(the)i(error.)0
-1570 y Fk(\017)35 b Fn(date)47 b(\([format]\))0 1742
-y Fp(This)35 b(function)h(returns)g(a)i(string)e(con)m(taining)h(date)h
-(and)e(time)h(formatted)h(according)f(to)h(the)g(giv)m(en)f(string)0
-1855 y Fn(format)p Fp(,)f(follo)m(wing)f(the)h(same)h(rules)d(of)j(the)
-f(ANSI)g(C)g(function)e Fn(strftime)p Fp(.)56 b(When)36
-b(called)g(without)f(argu-)0 1968 y(men)m(ts,)c(it)f(returns)f(a)i
-(reasonable)f(date)h(and)f(time)g(represen)m(tation.)0
-2208 y Fk(\017)35 b Fn(exit)47 b(\([code]\))0 2379 y
-Fp(This)29 b(function)g(calls)g(the)i(C)f(function)f
-Fn(exit)p Fp(,)g(with)g(an)i(optional)e Fn(code)p Fp(,)h(to)h
-(terminate)f(the)h(program.)0 2619 y Fk(\017)k Fn(getenv)46
-b(\(varname\))0 2791 y Fp(Returns)29 b(the)i(v)-5 b(alue)30
-b(of)g(the)h(en)m(vironmen)m(t)f(v)-5 b(ariable)29 b
-Fn(varname)p Fp(,)g(or)h Fm(nil)h Fp(if)e(the)h(v)-5
-b(ariable)30 b(is)f(not)i(de\014ned.)0 3031 y Fk(\017)k
-Fn(execute)46 b(\(command\))0 3203 y Fp(This)38 b(function)h(is)g
-(equiv)-5 b(alen)m(t)39 b(to)h(the)h(C)e(function)g Fn(system)p
-Fp(.)67 b(It)40 b(passes)g Fn(command)e Fp(to)i(b)s(e)g(executed)g(b)m
-(y)g(an)0 3316 y(Op)s(erating)29 b(System)h(Shell.)39
-b(It)30 b(returns)f(an)i(error)f(co)s(de,)h(whic)m(h)e(is)g(implemen)m
-(tation-de\014ned.)0 3602 y Fq(7)135 b(The)44 b(Debugger)i(In)l
-(terface)0 3805 y Fp(Lua)31 b(has)f(no)h(built-in)d(debugger)j
-(facilities.)41 b(Instead,)31 b(it)f(o\013ers)i(a)f(sp)s(ecial)f(in)m
-(terface,)h(b)m(y)g(means)g(of)g(functions)0 3918 y(and)f
-Fo(ho)-5 b(oks)p Fp(,)34 b(whic)m(h)29 b(allo)m(ws)i(the)g
-(construction)g(of)g(di\013eren)m(t)f(kinds)f(of)j(debuggers,)f
-(pro\014lers,)e(and)i(other)g(to)s(ols)0 4031 y(that)37
-b(need)e(\\inside)g(information")f(from)i(the)g(in)m(terpreter.)57
-b(This)35 b(in)m(terface)h(is)f(declared)h(in)f(the)h(header)g(\014le)0
-4144 y Fn(luadebug.h)p Fp(.)0 4387 y Ff(7.1)112 b(Stac)m(k)38
-b(and)g(F)-9 b(unction)37 b(Information)0 4559 y Fp(The)30
-b(main)f(function)g(to)i(get)h(information)d(ab)s(out)h(the)g(in)m
-(terpreter)g(stac)m(k)i(is)0 4746 y Fn(lua_Function)44
-b(lua_stackedfunction)f(\(int)k(level\);)0 4934 y Fp(It)35
-b(returns)e(a)i(handle)e(\()p Fn(lua_Function)p Fp(\))f(to)k(the)e
-Fo(activation)k(r)-5 b(e)g(c)g(or)g(d)47 b Fp(of)35 b(the)f(function)g
-(executing)h(at)g(a)g(giv)m(en)0 5047 y(lev)m(el.)68
-b(Lev)m(el)40 b(0)g(is)f(the)h(curren)m(t)g(running)d(function,)k
-(while)c(lev)m(el)j Fe(n)26 b Fp(+)g(1)40 b(is)f(the)h(function)e(that)
-i(has)g(called)0 5160 y(lev)m(el)g Fe(n)p Fp(.)69 b(When)39
-b(called)h(with)e(a)j(lev)m(el)e(greater)i(than)f(the)g(stac)m(k)i
-(depth,)f Fn(lua_stackedfunction)35 b Fp(returns)0 5273
-y Fn(LUA_NOOBJECT)p Fp(.)1905 5589 y(22)p eop
-%%Page: 23 23
-23 22 bop 141 91 a Fp(The)43 b(t)m(yp)s(e)g Fn(lua_Function)c
-Fp(is)j(just)g(another)h(name)g(to)h Fn(lua_Object)p
-Fp(.)75 b(Although,)46 b(in)41 b(this)h(library)-8 b(,)45
-b(a)0 204 y Fn(lua_Function)23 b Fp(can)k(b)s(e)f(used)g(wherev)m(er)h
-(a)g Fn(lua_Object)d Fp(is)h(required,)h(a)h(parameter)g
-Fn(lua_Function)d Fp(accepts)0 317 y(only)29 b(a)i(handle)e(returned)g
-(b)m(y)i Fn(lua_stackedfunction)p Fp(.)141 430 y(Three)f(other)h
-(functions)e(pro)s(duce)g(extra)i(information)e(ab)s(out)h(a)g
-(function:)0 593 y Fn(void)47 b(lua_funcinfo)d(\(lua_Object)h(func,)h
-(char)h(**filename,)e(int)h(*linedefined\);)0 706 y(int)h
-(lua_currentline)d(\(lua_Function)g(func\);)0 819 y(char)j
-(*lua_getobjname)c(\(lua_Object)i(o,)i(char)g(**name\);)0
-982 y(lua_funcinfo)31 b Fp(giv)m(es)j(the)h(\014le)e(name)h(and)g(the)g
-(line)f(where)g(the)i(giv)m(en)f(function)f(has)h(b)s(een)f(de\014ned.)
-51 b(If)34 b(the)0 1095 y(\\function")40 b(is)f(in)g(fact)j(the)e(main)
-f(co)s(de)i(of)f(a)h(c)m(h)m(unk,)i(then)d Fn(linedefined)d
-Fp(is)j(0.)71 b(If)40 b(the)g(function)f(is)h(a)g(C)0
-1208 y(function,)29 b(then)h Fn(linedefined)e Fp(is)h(-1,)i(and)f
-Fn(filename)e Fp(is)i Fn("\(C\)")p Fp(.)141 1320 y(The)35
-b(function)e Fn(lua_currentline)e Fp(giv)m(es)k(the)h(curren)m(t)e
-(line)g(where)g(a)h(giv)m(en)g(function)f(is)g(executing.)55
-b(It)0 1433 y(only)30 b(w)m(orks)h(if)f(the)h(function)f(has)g(b)s(een)
-g(pre-compiled)g(with)f(debug)h(information)g(\(see)i(Section)e(4.8\).)
-44 b(When)0 1546 y(no)30 b(line)f(information)g(is)g(a)m(v)-5
-b(ailable,)30 b(it)g(returns)f(-1.)141 1659 y(F)-8 b(unction)32
-b Fn(lua_getobjname)d Fp(tries)j(to)h(\014nd)d(a)j(reasonable)f(name)h
-(for)f(a)h(giv)m(en)f(function.)46 b(Because)34 b(func-)0
-1772 y(tions)22 b(in)f(Lua)h(are)g(\014rst)g(class)g(v)-5
-b(alues,)23 b(they)g(do)f(not)g(ha)m(v)m(e)i(a)e(\014xed)g(name.)38
-b(Some)22 b(functions)f(ma)m(y)i(b)s(e)f(the)g(v)-5 b(alue)22
-b(of)0 1885 y(man)m(y)30 b(global)e(v)-5 b(ariables,)29
-b(while)e(others)j(ma)m(y)g(b)s(e)f(stored)h(only)e(in)g(a)i(table)g
-(\014eld.)39 b(F)-8 b(unction)29 b Fn(lua_getobjname)0
-1998 y Fp(\014rst)k(c)m(hec)m(ks)j(whether)d(the)h(giv)m(en)g(function)
-f(is)g(a)i(fallbac)m(k.)51 b(If)33 b(so,)j(it)d(returns)g(the)h(string)
-f Fn("fallback")p Fp(,)g(and)0 2111 y Fn(name)e Fp(is)f(set)i(to)h(p)s
-(oin)m(t)e(to)h(the)g(fallbac)m(k)f(name.)45 b(Otherwise,)31
-b(if)f(the)i(giv)m(en)g(function)e(is)h(the)h(v)-5 b(alue)31
-b(of)h(a)g(global)0 2224 y(v)-5 b(ariable,)22 b(then)f
-Fn(lua_getobjname)c Fp(returns)j(the)h(string)f Fn("global")p
-Fp(,)h(while)f Fn(name)g Fp(p)s(oin)m(ts)g(to)h(the)h(v)-5
-b(ariable)20 b(name.)0 2337 y(If)32 b(the)g(giv)m(en)h(function)e(is)g
-(neither)g(a)i(fallbac)m(k)f(nor)g(a)h(global)e(v)-5
-b(ariable,)32 b(then)g Fn(lua_getobjname)d Fp(returns)i(the)0
-2450 y(empt)m(y)g(string,)e(and)h Fn(name)f Fp(is)h(set)h(to)g
-Fn(NULL)p Fp(.)0 2688 y Ff(7.2)112 b(Manipulating)37
-b(Lo)s(cal)g(V)-9 b(ariables)0 2860 y Fp(The)32 b(follo)m(wing)f
-(functions)f(allo)m(w)i(the)h(manipulation)c(of)k(the)f(lo)s(cal)g(v)-5
-b(ariables)31 b(of)h(a)h(giv)m(en)f(activ)-5 b(ation)33
-b(record.)0 2973 y(They)d(only)f(w)m(ork)i(if)e(the)i(function)e(has)h
-(b)s(een)g(pre-compiled)e(with)h(debug)h(information)f(\(see)i(Section)
-f(4.8\).)0 3136 y Fn(lua_Object)45 b(lua_getlocal)f(\(lua_Function)h
-(func,)h(int)h(local_number,)d(char)j(**name\);)0 3249
-y(int)g(lua_setlocal)d(\(lua_Function)h(func,)h(int)h(local_number\);)0
-3412 y Fp(The)37 b(\014rst)f(one)h(returns)f(the)h(v)-5
-b(alue)37 b(of)g(a)h(lo)s(cal)e(v)-5 b(ariable,)38 b(and)e(sets)i
-Fn(name)e Fp(to)i(p)s(oin)m(t)e(to)h(the)h(v)-5 b(ariable)36
-b(name.)0 3525 y Fn(local_number)e Fp(is)i(an)h(index)f(for)h(lo)s(cal)
-f(v)-5 b(ariables.)60 b(The)37 b(\014rst)g(parameter)g(has)g(index)f
-(1,)k(and)c(so)i(on,)h(un)m(til)0 3638 y(the)45 b(last)f(activ)m(e)i
-(lo)s(cal)e(v)-5 b(ariable.)82 b(When)44 b(called)g(with)f(a)i
-Fn(local_number)d Fp(greater)j(than)g(the)g(n)m(um)m(b)s(er)e(of)0
-3750 y(activ)m(e)32 b(lo)s(cal)f(v)-5 b(ariables,)30
-b(or)h(if)e(the)j(activ)-5 b(ation)31 b(record)g(has)g(no)g(debug)f
-(information,)g Fn(lua_getlocal)d Fp(returns)0 3863 y
-Fn(LUA_NOOBJECT)p Fp(.)141 3976 y(The)22 b(function)f
-Fn(lua_setlocal)e Fp(sets)k(the)f(lo)s(cal)g(v)-5 b(ariable)21
-b Fn(local_number)e Fp(to)k(the)g(v)-5 b(alue)22 b(previously)e(pushed)
-0 4089 y(on)j(the)g(stac)m(k)i(\(see)f(Section)e(5.2\).)40
-b(If)23 b(the)g(function)f(succeeds,)j(then)d(it)h(returns)f(1.)38
-b(If)23 b Fn(local_number)d Fp(is)i(greater)0 4202 y(than)j(the)g(n)m
-(um)m(b)s(er)e(of)j(activ)m(e)g(lo)s(cal)e(v)-5 b(ariables,)25
-b(or)g(if)f(the)h(activ)-5 b(ation)25 b(record)g(has)g(no)f(debug)h
-(information,)f(then)0 4315 y(this)29 b(function)g(fails)g(and)h
-(returns)f(0.)0 4554 y Ff(7.3)112 b(Ho)s(oks)0 4725 y
-Fp(The)30 b(Lua)g(in)m(terpreter)g(o\013ers)g(t)m(w)m(o)i(ho)s(oks)e
-(for)g(debugging)g(purp)s(oses:)0 4888 y Fn(typedef)46
-b(void)g(\(*lua_CHFunction\))e(\(lua_Function)g(func,)i(char)h(*file,)f
-(int)h(line\);)0 5001 y(extern)f(lua_CHFunction)e(lua_callhook;)0
-5227 y(typedef)i(void)g(\(*lua_LHFunction\))e(\(int)i(line\);)0
-5340 y(extern)g(lua_LHFunction)e(lua_linehook;)1905 5589
-y Fp(23)p eop
-%%Page: 24 24
-24 23 bop 0 91 a Fp(The)44 b(\014rst)f(one)i(is)e(called)g(whenev)m(er)
-h(the)g(in)m(terpreter)g(en)m(ters)h(or)f(lea)m(v)m(es)h(a)g(function.)
-81 b(When)43 b(en)m(tering)i(a)0 204 y(function,)35 b(its)g(parameters)
-h(are)g(a)f(handle)f(to)i(the)g(function)e(activ)-5 b(ation)35
-b(record,)i(plus)c(the)j(\014le)e(and)h(the)h(line)0
-317 y(where)g(the)h(function)e(is)h(de\014ned)g(\(the)h(same)g
-(information)e(whic)m(h)g(is)h(pro)m(vided)f(b)m(y)i
-Fn(lua_funcinfo)p Fp(\);)g(when)0 430 y(lea)m(ving)30
-b(a)h(function,)e Fn(func)g Fp(is)h Fn(LUA_NOOBJECT)p
-Fp(,)d Fn(file)i Fp(is)h Fn("\(return\)")p Fp(,)e(and)h
-Fn(line)g Fp(is)h(0.)141 543 y(The)46 b(other)h(ho)s(ok)g(is)f(called)f
-(ev)m(ery)j(time)e(the)h(in)m(terpreter)f(c)m(hanges)i(the)f(line)e(of)
-i(co)s(de)g(it)f(is)g(execut-)0 656 y(ing.)63 b(Its)38
-b(only)f(parameter)h(is)f(the)h(line)f(n)m(um)m(b)s(er)f(\(the)j(same)f
-(information)e(whic)m(h)h(is)g(pro)m(vided)g(b)m(y)g(the)i(call)0
-769 y Fn(lua_currentline\(lua_stac)o(kedf)o(unct)o(ion)o(\(0\)\))o
-Fp(\).)34 b(This)25 b(second)h(ho)s(ok)h(is)e(only)h(called)g(if)f(the)
-i(activ)m(e)h(func-)0 882 y(tion)i(has)g(b)s(een)g(pre-compiled)e(with)
-h(debug)h(information)f(\(see)i(Section)f(4.8\).)141
-995 y(A)h(ho)s(ok)f(is)f(disabled)f(when)i(its)f(v)-5
-b(alue)30 b(is)g(NULL)g(\(0\),)i(whic)m(h)d(is)g(the)i(initial)c(v)-5
-b(alue)30 b(of)h(b)s(oth)e(ho)s(oks.)0 1281 y Fq(8)135
-b(Some)45 b(Examples)0 1484 y Fp(This)32 b(section)i(giv)m(es)g
-(examples)f(sho)m(wing)g(some)h(features)g(of)g(Lua.)51
-b(It)34 b(do)s(es)f(not)h(in)m(tend)f(to)h(co)m(v)m(er)i(the)e(whole)0
-1597 y(language,)d(but)f(only)f(to)i(illustrate)e(some)i(in)m
-(teresting)e(uses)h(of)h(the)f(system.)0 1840 y Ff(8.1)112
-b(Data)38 b(Structures)0 2012 y Fp(T)-8 b(ables)28 b(are)i(a)f(strong)g
-(unifying)d(data)k(constructor.)40 b(They)29 b(directly)e(implemen)m(t)
-h(a)h(m)m(ultitude)e(of)i(data)h(t)m(yp)s(es,)0 2125
-y(lik)m(e)g(ordinary)e(arra)m(ys,)j(records,)g(sets,)g(bags,)g(and)e
-(lists.)141 2238 y(Arra)m(ys)40 b(need)g(no)h(explanations.)69
-b(In)39 b(Lua,)k(it)d(is)f(con)m(v)m(en)m(tional)i(to)g(start)g
-(indices)d(from)i(1,)j(but)d(this)f(is)0 2351 y(only)28
-b(a)i(con)m(v)m(en)m(tion.)41 b(Arra)m(ys)29 b(can)h(b)s(e)e(indexed)g
-(b)m(y)h(0,)h(negativ)m(e)g(n)m(um)m(b)s(ers,)e(or)h(an)m(y)h(other)f
-(v)-5 b(alue)29 b(\(except)h Fm(nil)p Fp(\).)0 2464 y(Records)g(are)h
-(also)g(trivially)c(implemen)m(ted)i(b)m(y)h(the)h(syn)m(tactic)g
-(sugar)f Fn(a.x)p Fp(.)141 2576 y(The)j(b)s(est)g(w)m(a)m(y)i(to)f
-(implemen)m(t)e(a)i(set)g(is)e(to)j(store)f(its)f(elemen)m(ts)g(as)h
-(indices)e(of)h(a)h(table.)50 b(The)33 b(statemen)m(t)0
-2689 y Fn(s)47 b(=)h({})29 b Fp(creates)i(an)e(empt)m(y)h(set)g
-Fn(s)p Fp(.)40 b(The)29 b(statemen)m(t)i Fn(s[x])47 b(=)g(1)29
-b Fp(inserts)f(the)i(v)-5 b(alue)29 b(of)g Fn(x)g Fp(in)m(to)h(the)f
-(set)h Fn(s)p Fp(.)40 b(The)0 2802 y(expression)28 b
-Fn(s[x])g Fp(is)g(true)g(if)g(and)h(only)f(if)g Fn(x)g
-Fp(b)s(elongs)g(to)i Fn(s)p Fp(.)40 b(Finally)-8 b(,)28
-b(the)h(statemen)m(t)i Fn(s[x])46 b(=)i(nil)28 b Fp(remo)m(v)m(es)i
-Fn(x)0 2915 y Fp(from)g Fn(s)p Fp(.)141 3028 y(Bags)i(can)g(b)s(e)e
-(implemen)m(ted)g(similarly)e(to)k(sets,)g(but)e(using)g(the)h(v)-5
-b(alue)31 b(asso)s(ciated)h(to)f(an)g(elemen)m(t)h(as)g(its)0
-3141 y(coun)m(ter.)41 b(So,)31 b(to)g(insert)e(an)i(elemen)m(t,)g(the)f
-(follo)m(wing)f(co)s(de)i(is)e(enough:)0 3329 y Fn(if)47
-b(s[x])g(then)f(s[x])h(=)h(s[x]+1)e(else)g(s[x])h(=)g(1)h(end)0
-3516 y Fp(and)30 b(to)h(remo)m(v)m(e)h(an)e(elemen)m(t:)0
-3704 y Fn(if)47 b(s[x])g(then)f(s[x])h(=)h(s[x]-1)e(end)0
-3817 y(if)h(s[x])g(==)g(0)g(then)g(s[x])g(=)g(nil)g(end)141
-4004 y Fp(Lisp-lik)m(e)41 b(lists)g(also)h(ha)m(v)m(e)i(an)e(easy)i
-(implemen)m(tation.)75 b(The)42 b(\\cons")i(of)f(t)m(w)m(o)g(elemen)m
-(ts)g Fn(x)g Fp(and)e Fn(y)i Fp(can)0 4117 y(b)s(e)32
-b(created)i(with)e(the)h(co)s(de)g Fn(l)48 b(=)f({car=x,)f(cdr=y})p
-Fp(.)h(The)32 b(expression)g Fn(l.car)g Fp(extracts)i(the)f(header,)h
-(while)0 4230 y Fn(l.cdr)27 b Fp(extracts)j(the)f(tail.)39
-b(An)28 b(alternativ)m(e)h(w)m(a)m(y)h(is)e(to)h(create)h(the)f(list)e
-(directly)g(with)h Fn(l={x,y})p Fp(,)f(and)h(then)g(to)0
-4343 y(extract)k(the)e(header)h(with)e Fn(l[1])g Fp(and)h(the)g(tail)g
-(with)f Fn(l[2])p Fp(.)0 4587 y Ff(8.2)112 b(The)38 b(F)-9
-b(unctions)37 b Fb(next)h Ff(and)h Fb(nextvar)0 4758
-y Fp(This)34 b(example)i(sho)m(ws)g(ho)m(w)g(to)h(use)f(the)g(function)
-f Fn(next)g Fp(to)i(iterate)f(o)m(v)m(er)i(the)e(\014elds)f(of)h(a)g
-(table.)58 b(F)-8 b(unction)0 4871 y Fn(clone)29 b Fp(receiv)m(es)i(an)
-m(y)g(table)f(and)g(returns)f(a)i(clone)f(of)h(it.)0
-5059 y Fn(function)46 b(clone)g(\(t\))524 b(--)47 b(t)h(is)f(a)g(table)
-95 5172 y(local)g(new_t)f(=)i({})524 b(--)47 b(create)f(a)i(new)f
-(table)95 5285 y(local)g(i,)g(v)g(=)h(next\(t,)e(nil\))94
-b(--)47 b(i)h(is)f(an)g(index)f(of)i(t,)f(v)g(=)h(t[i])1905
-5589 y Fp(24)p eop
-%%Page: 25 25
-25 24 bop 95 91 a Fn(while)47 b(i)g(do)191 204 y(new_t[i])e(=)j(v)191
-317 y(i,)f(v)h(=)f(next\(t,)f(i\))381 b(--)47 b(get)g(next)g(index)95
-430 y(end)95 543 y(return)g(new_t)0 656 y(end)141 825
-y Fp(The)30 b(next)h(example)f(prin)m(ts)e(the)j(names)f(of)h(all)e
-(global)h(v)-5 b(ariables)29 b(in)g(the)h(system)h(with)e(non)h(nil)e
-(v)-5 b(alues:)0 995 y Fn(function)46 b(printGlobalVariables)c(\(\))95
-1108 y(local)47 b(i,)g(v)g(=)h(nextvar\(nil\))95 1221
-y(while)f(i)g(do)191 1334 y(print\(i\))191 1447 y(i,)g(v)h(=)f
-(nextvar\(i\))95 1560 y(end)0 1672 y(end)0 1913 y Ff(8.3)112
-b(String)37 b(Manipulation)0 2084 y Fp(The)30 b(\014rst)f(example)i(is)
-e(a)i(function)e(to)i(trim)e(extra)i(white-spaces)g(at)g(the)f(b)s
-(eginning)e(and)i(end)f(of)i(a)g(string.)0 2254 y Fn(function)46
-b(trim\(s\))95 2367 y(local)h(_,)g(i)g(=)h(strfind\(s,)d('^)i(*'\))95
-2480 y(local)g(f,)g(__)g(=)h(strfind\(s,)d(')i(*$'\))95
-2592 y(return)g(strsub\(s,)e(i+1,)h(f-1\))0 2705 y(end)141
-2875 y Fp(The)30 b(second)g(example)h(sho)m(ws)f(a)g(function)f(that)i
-(eliminates)e(all)g(spaces)i(of)g(a)g(string.)0 3044
-y Fn(function)46 b(remove_blanks)e(\(s\))95 3157 y(return)j(gsub\(s,)e
-("\045s\045s*",)h(""\))0 3270 y(end)0 3510 y Ff(8.4)112
-b(V)-9 b(ariable)36 b(n)m(um)m(b)s(er)i(of)f(argumen)m(ts)0
-3682 y Fp(Lua)24 b(do)s(es)g(not)g(pro)m(vide)f(an)m(y)i(explicit)d
-(mec)m(hanism)i(to)g(deal)g(with)f(v)-5 b(ariable)23
-b(n)m(um)m(b)s(er)g(of)h(argumen)m(ts)g(in)f(function)0
-3795 y(calls.)38 b(Ho)m(w)m(ev)m(er,)28 b(one)d(can)g(use)f(table)h
-(constructors)g(to)g(sim)m(ulate)f(this)f(mec)m(hanism.)39
-b(As)24 b(an)h(example,)g(supp)s(ose)0 3908 y(a)31 b(function)e(to)i
-(concatenate)i(all)c(its)h(argumen)m(ts.)41 b(It)30 b(could)g(b)s(e)g
-(written)f(lik)m(e)0 4077 y Fn(function)46 b(concat)g(\(o\))95
-4190 y(local)h(i)g(=)h(1)95 4303 y(local)f(s)g(=)h('')95
-4416 y(while)f(o[i])f(do)191 4529 y(s)h(=)h(s)f(..)g(o[i])191
-4642 y(i)g(=)h(i+1)95 4755 y(end)95 4868 y(return)f(s)0
-4981 y(end)0 5150 y Fp(T)-8 b(o)31 b(call)f(it,)g(one)g(uses)g(a)h
-(table)f(constructor)h(to)g(join)f(all)f(argumen)m(ts:)95
-5320 y Fn(x)48 b(=)f(concat{"hello)e(",)i("john",)f(")h(and)g(",)g
-("mary"})1905 5589 y Fp(25)p eop
-%%Page: 26 26
-26 25 bop 0 91 a Ff(8.5)112 b(P)m(ersistence)0 263 y
-Fp(Because)41 b(of)e(its)g(re\015exiv)m(e)g(facilities,)h(p)s
-(ersistence)e(in)g(Lua)h(can)g(b)s(e)g(ac)m(hiev)m(ed)h(within)d(the)i
-(language.)68 b(This)0 376 y(section)24 b(sho)m(ws)g(some)g(w)m(a)m(ys)
-g(to)h(store)f(and)g(retriev)m(e)g(v)-5 b(alues)23 b(in)g(Lua,)i(using)
-d(a)i(text)h(\014le)e(written)g(in)f(the)j(language)0
-489 y(itself)k(as)i(the)f(storage)i(media.)141 602 y(T)-8
-b(o)31 b(store)g(a)g(single)e(v)-5 b(alue)30 b(with)f(a)h(name,)h(the)g
-(follo)m(wing)e(co)s(de)h(is)g(enough:)0 770 y Fn(function)46
-b(store)g(\(name,)g(value\))95 883 y(write\(format\('\\n\045s)d(=',)k
-(name\)\))95 996 y(write_value\(value\))0 1109 y(end)0
-1298 y(function)f(write_value)e(\(value\))95 1411 y(local)j(t)g(=)h
-(type\(value\))286 1524 y(if)g(t)f(==)g('nil')190 b(then)46
-b(write\('nil'\))95 1637 y(elseif)h(t)g(==)g('number')f(then)g
-(write\(value\))95 1750 y(elseif)h(t)g(==)g('string')f(then)g
-(write\(value,)f('q'\))95 1863 y(end)0 1976 y(end)0 2165
-y Fp(In)30 b(order)g(to)h(restore)g(this)e(v)-5 b(alue,)30
-b(a)h Fn(lua_dofile)c Fp(su\016ces.)141 2278 y(Storing)k(tables)h(is)f
-(a)i(little)e(more)h(complex.)45 b(Assuming)31 b(that)h(the)h(table)f
-(is)f(a)h(tree,)i(and)d(that)i(all)e(indices)0 2391 y(are)f(iden)m
-(ti\014ers)e(\(that)j(is,)f(the)g(tables)f(are)i(b)s(eing)d(used)i(as)g
-(records\),)g(then)g(its)f(v)-5 b(alue)30 b(can)g(b)s(e)f(written)g
-(directly)0 2504 y(with)g(table)h(constructors.)41 b(First,)30
-b(the)h(function)e Fn(write_value)e Fp(is)j(c)m(hanged)h(to)0
-2672 y Fn(function)46 b(write_value)e(\(value\))95 2785
-y(local)j(t)g(=)h(type\(value\))286 2898 y(if)g(t)f(==)g('nil')190
-b(then)46 b(write\('nil'\))95 3011 y(elseif)h(t)g(==)g('number')f(then)
-g(write\(value\))95 3124 y(elseif)h(t)g(==)g('string')f(then)g
-(write\(value,)f('q'\))95 3237 y(elseif)i(t)g(==)g('table')94
-b(then)46 b(write_record\(value\))95 3350 y(end)0 3463
-y(end)0 3631 y Fp(The)30 b(function)f Fn(write_record)e
-Fp(is:)0 3799 y Fn(function)46 b(write_record\(t\))95
-3912 y(local)h(i,)g(v)g(=)h(next\(t,)e(nil\))95 4025
-y(write\('{'\))93 b(--)47 b(starts)f(constructor)95 4138
-y(while)h(i)g(do)191 4251 y(store\(i,)e(v\))191 4364
-y(write\(',)g('\))191 4477 y(i,)i(v)h(=)f(next\(t,)f(i\))95
-4590 y(end)95 4703 y(write\('}'\))93 b(--)47 b(closes)f(constructor)0
-4816 y(end)0 5055 y Ff(8.6)112 b(Inheritance)0 5227 y
-Fp(The)29 b(fallbac)m(k)f(for)h(absen)m(t)h(indices)e(can)h(b)s(e)g
-(used)f(to)i(implemen)m(t)e(man)m(y)h(kinds)f(of)h(inheritance)f(in)g
-(Lua.)40 b(As)29 b(an)0 5340 y(example,)h(the)h(follo)m(wing)e(co)s(de)
-h(implemen)m(ts)f(single)g(inheritance:)1905 5589 y(26)p
-eop
-%%Page: 27 27
-27 26 bop 0 91 a Fn(function)46 b(Index)g(\(t,f\))95
-204 y(if)i(f)f(==)g('parent')f(then)94 b(--)47 b(to)h(avoid)e(loop)191
-317 y(return)g(OldIndex\(t,f\))95 430 y(end)95 543 y(local)h(p)g(=)h
-(t.parent)95 656 y(if)g(type\(p\))d(==)j('table')d(then)191
-769 y(return)h(p[f])95 882 y(else)191 995 y(return)g(OldIndex\(t,f\))95
-1108 y(end)0 1220 y(end)0 1446 y(OldIndex)g(=)h(setfallback\("index",)
-42 b(Index\))0 1634 y Fp(Whenev)m(er)30 b(Lua)e(attempts)i(to)f(access)
-i(an)d(absen)m(t)i(\014eld)d(in)h(a)h(table,)g(it)g(calls)f(the)h
-(fallbac)m(k)f(function)g Fn(Index)p Fp(.)38 b(If)0 1747
-y(the)27 b(table)f(has)g(a)h(\014eld)e Fn(parent)f Fp(with)h(a)i(table)
-f(v)-5 b(alue,)27 b(then)f(Lua)g(attempts)i(to)f(access)h(the)e
-(desired)f(\014eld)g(in)g(this)0 1860 y(paren)m(t)30
-b(ob)5 b(ject.)41 b(This)28 b(pro)s(cess)h(is)g(rep)s(eated)h(\\up)m(w)
-m(ards")g(un)m(til)d(a)k(v)-5 b(alue)29 b(for)g(the)h(\014eld)e(is)h
-(found)f(or)i(the)g(ob)5 b(ject)0 1973 y(has)30 b(no)g(paren)m(t.)41
-b(In)30 b(the)h(latter)f(case,)i(the)f(previous)d(fallbac)m(k)i(is)g
-(called)f(to)i(supply)d(a)j(v)-5 b(alue)30 b(for)g(the)h(\014eld.)141
-2086 y(When)c(b)s(etter)h(p)s(erformance)f(is)f(needed,)i(the)g(same)g
-(fallbac)m(k)f(ma)m(y)h(b)s(e)f(implemen)m(ted)f(in)g(C,)h(as)h
-(illustrated)0 2198 y(in)h(Figure)h(1.)41 b(This)29 b(co)s(de)h(m)m
-(ust)g(b)s(e)g(registered)g(with:)95 2386 y Fn
-(lua_pushstring\("parent"\);)95 2499 y(lockedParentName)44
-b(=)j(lua_ref\(1\);)95 2612 y(lua_pushobject\(lua_setfall)o(back)o
-(\("i)o(ndex)o(",)42 b(Index\)\);)95 2725 y(lockedOldIndex)i(=)k
-(lua_ref\(1\);)0 2912 y Fp(Notice)31 b(ho)m(w)g(the)f(string)g
-Fn("parent")e Fp(is)h(k)m(ept)i(lo)s(c)m(k)m(ed)g(in)e(Lua)h(for)g
-(optimal)g(p)s(erformance.)0 3156 y Ff(8.7)112 b(Programming)36
-b(with)g(Classes)0 3327 y Fp(There)f(are)h(man)m(y)f(di\013eren)m(t)g
-(w)m(a)m(ys)i(to)f(do)f(ob)5 b(ject-orien)m(ted)37 b(programming)d(in)g
-(Lua.)56 b(This)33 b(section)j(presen)m(ts)0 3440 y(one)e(p)s(ossible)e
-(w)m(a)m(y)j(to)g(implemen)m(t)e(classes,)j(using)c(the)j(inheritance)d
-(mec)m(hanism)i(presen)m(ted)g(ab)s(o)m(v)m(e.)53 b Fo(Ple)-5
-b(ase)0 3553 y(notic)g(e:)42 b(the)32 b(fol)5 b(lowing)33
-b(examples)g(only)g(work)f(with)h(the)f(index)g(fal)5
-b(lb)-5 b(ack)33 b(r)-5 b(e)g(de\014ne)g(d)33 b(ac)-5
-b(c)g(or)g(ding)34 b(to)f(Se)-5 b(ction)32 b(8.6)p Fp(.)141
-3666 y(As)d(one)g(could)e(exp)s(ect,)j(a)f(go)s(o)s(d)f(w)m(a)m(y)i(to)
-f(represen)m(t)g(a)g(class)f(is)g(with)f(a)i(table.)40
-b(This)27 b(table)h(will)e(con)m(tain)j(all)0 3779 y(instance)h(metho)s
-(ds)g(of)g(the)h(class,)f(plus)f(optional)h(default)f(v)-5
-b(alues)30 b(for)g(instance)g(v)-5 b(ariables.)40 b(An)30
-b(instance)g(of)h(a)0 3892 y(class)f(has)g(its)g Fn(parent)f
-Fp(\014eld)g(p)s(oin)m(ting)f(to)j(the)g(class,)f(and)g(so)h(it)f
-(\\inherits")f(all)g(metho)s(ds.)141 4005 y(F)-8 b(or)28
-b(instance,)f(a)g(class)g Fn(Point)e Fp(can)i(b)s(e)f(describ)s(ed)f
-(as)i(in)f(Figure)g(2.)40 b(F)-8 b(unction)26 b Fn(create)f
-Fp(helps)h(the)h(creation)0 4118 y(of)e(new)f(p)s(oin)m(ts,)h(adding)e
-(the)i(paren)m(t)g(\014eld.)37 b(F)-8 b(unction)24 b
-Fn(move)g Fp(is)g(an)g(example)g(of)h(an)g(instance)f(metho)s(d.)38
-b(Finally)-8 b(,)0 4231 y(a)38 b(sub)s(class)d(can)j(b)s(e)e(created)i
-(as)g(a)g(new)e(table,)j(with)d(the)i Fn(parent)d Fp(\014eld)h(p)s(oin)
-m(ting)f(to)j(its)f(sup)s(erclass.)60 b(It)37 b(is)0
-4344 y(in)m(teresting)c(to)h(notice)f(ho)m(w)g(the)h(use)f(of)g
-Fn(self)f Fp(in)g(metho)s(d)h Fn(create)e Fp(allo)m(ws)i(this)f(metho)s
-(d)h(to)h(w)m(ork)f(prop)s(erly)0 4457 y(ev)m(en)e(when)e(inherited)f
-(b)m(y)i(a)h(sub)s(class.)39 b(As)30 b(usual,)f(a)i(sub)s(class)d(ma)m
-(y)j(o)m(v)m(erwrite)g(an)m(y)g(inherited)d(metho)s(d)h(with)0
-4569 y(its)h(o)m(wn)g(v)m(ersion.)0 4813 y Ff(8.8)112
-b(Mo)s(dules)0 4985 y Fp(Here)33 b(w)m(e)f(explain)f(one)i(p)s(ossible)
-c(w)m(a)m(y)34 b(to)f(sim)m(ulate)e(mo)s(dules)f(in)h(Lua.)46
-b(The)32 b(main)f(idea)h(is)f(to)i(use)f(a)h(table)f(to)0
-5097 y(store)f(the)g(mo)s(dule)d(functions.)141 5210
-y(A)j(mo)s(dule)d(should)h(b)s(e)g(written)h(as)h(a)f(separate)i(c)m(h)
-m(unk,)e(starting)g(with:)1905 5589 y(27)p eop
-%%Page: 28 28
-28 27 bop 0 301 3900 12 v 0 489 a Fn(#include)46 b("lua.h")0
-715 y(int)h(lockedParentName;)91 b(/*)47 b(lock)g(index)f(for)h(the)g
-(string)f("parent")f(*/)0 828 y(int)i(lockedOldIndex;)187
-b(/*)47 b(previous)e(fallback)h(function)g(*/)0 1054
-y(void)h(callOldFallback)c(\(lua_Object)i(table,)h(lua_Object)f
-(index\))0 1167 y({)95 1279 y(lua_Object)g(oldIndex)h(=)h
-(lua_getref\(lockedOldIndex\))o(;)95 1392 y(lua_pushobject\(table\);)95
-1505 y(lua_pushobject\(index\);)95 1618 y(lua_callfunction\(oldIndex\))
-o(;)95 1731 y(if)h(\(lua_getresult\(1\))43 b(!=)k(LUA_NOOBJECT\))191
-1844 y(lua_pushobject\(lua_getre)o(sult)o(\(1\))o(\);)89
-b(/*)48 b(return)e(result)g(*/)0 1957 y(})0 2183 y(void)h(Index)f
-(\(void\))0 2296 y({)95 2409 y(lua_Object)f(table)i(=)g
-(lua_getparam\(1\);)95 2521 y(lua_Object)e(index)i(=)g
-(lua_getparam\(2\);)95 2634 y(lua_Object)e(parent;)95
-2747 y(if)j(\(lua_isstring\(index\))42 b(&&)47 b
-(strcmp\(lua_getstring\(inde)o(x\),)41 b("parent"\))k(==)j(0\))95
-2860 y({)191 2973 y(callOldFallback\(table,)42 b(index\);)191
-3086 y(return;)95 3199 y(})95 3312 y(lua_pushobject\(table\);)95
-3425 y(lua_pushref\(lockedParentNa)o(me\);)95 3538 y(parent)47
-b(=)g(lua_getsubscript\(\);)95 3651 y(if)h(\(lua_istable\(parent\)\))95
-3763 y({)191 3876 y(lua_pushobject\(parent\);)191 3989
-y(lua_pushobject\(index\);)191 4102 y(/*)f(return)f(result)g(from)h
-(getsubscript)d(*/)191 4215 y(lua_pushobject\(lua_getsu)o(bscr)o(ipt)o
-(\(\)\);)95 4328 y(})95 4441 y(else)191 4554 y(callOldFallback\(table,)
-e(index\);)0 4667 y(})1414 4937 y Fp(Figure)30 b(1:)41
-b(Inheritance)29 b(in)g(C.)p 0 5050 V 1905 5589 a(28)p
-eop
-%%Page: 29 29
-29 28 bop 0 1092 3900 12 v 0 1279 a Fn(Point)46 b(=)i({x)f(=)g(0,)h(y)f
-(=)h(0})0 1505 y(function)e(Point:create)e(\(o\))95 1618
-y(o.parent)i(=)h(self)95 1731 y(return)g(o)0 1844 y(end)0
-2070 y(function)f(Point:move)f(\(p\))95 2183 y(self.x)i(=)g(self.x)f(+)
-i(p.x)95 2296 y(self.y)f(=)g(self.y)f(+)i(p.y)0 2409
-y(end)0 2634 y(...)0 2860 y(--)0 2973 y(--)f(creating)f(points)0
-3086 y(--)0 3199 y(p1)h(=)h(Point:create{x)c(=)j(10,)g(y)g(=)h(20})0
-3312 y(p2)f(=)h(Point:create{x)c(=)j(10})95 b(--)47 b(y)g(will)g(be)g
-(inherited)e(until)i(it)g(is)g(set)0 3538 y(--)0 3651
-y(--)g(example)f(of)h(a)h(method)e(invocation)0 3763
-y(--)0 3876 y(p1:move\(p2\))1451 4147 y Fp(Figure)30
-b(2:)41 b(A)30 b(Class)f Fn(Point)p Fp(.)p 0 4260 V 1905
-5589 a(29)p eop
-%%Page: 30 30
-30 29 bop 0 12 3900 12 v 0 199 a Fn(function)46 b(open)g(\(mod\))95
-312 y(local)h(n,)g(f)g(=)h(next\(mod,)d(nil\))95 425
-y(while)i(n)g(do)191 538 y(setglobal\(n,)d(f\))191 651
-y(n,)j(f)h(=)f(next\(mod,)e(n\))95 764 y(end)0 877 y(end)1372
-1148 y Fp(Figure)30 b(3:)41 b(Op)s(ening)28 b(a)j(mo)s(dule.)p
-0 1260 V 0 1518 a Fn(if)47 b(modulename)e(then)i(return)f(end)95
-b(--)47 b(avoid)f(loading)g(twice)g(the)h(same)g(module)0
-1631 y(modulename)e(=)i({})95 b(--)48 b(create)e(a)h(table)f(to)i
-(represent)d(the)i(module)0 1818 y Fp(After)31 b(that,)g(functions)e
-(can)h(b)s(e)g(directly)f(de\014ned)g(with)g(the)i(syn)m(tax)0
-2006 y Fn(function)46 b(modulename.foo)d(\(...\))95 2119
-y(...)0 2232 y(end)141 2419 y Fp(An)m(y)28 b(co)s(de)f(that)h(needs)f
-(this)g(mo)s(dule)f(has)h(only)f(to)j(execute)f Fn
-(dofile\("filename"\))p Fp(,)c(where)j Fn(filename)e
-Fp(is)0 2532 y(the)31 b(\014le)e(where)h(the)g(mo)s(dule)f(is)h
-(written.)39 b(After)31 b(this,)f(an)m(y)g(function)f(can)i(b)s(e)f
-(called)f(with)0 2720 y Fn(modulename.foo\(...\))141
-2908 y Fp(If)i(a)h(mo)s(dule)e(function)g(is)g(going)h(to)i(b)s(e)d
-(used)h(man)m(y)g(times,)h(the)f(program)h(can)f(giv)m(e)h(a)g(lo)s
-(cal)f(name)g(to)h(it.)0 3021 y(Because)g(functions)d(are)h(v)-5
-b(alues,)30 b(it)g(is)g(enough)g(to)h(write)0 3208 y
-Fn(localname)45 b(=)j(modulename.foo)0 3396 y Fp(Finally)-8
-b(,)30 b(a)i(mo)s(dule)e(ma)m(y)i(b)s(e)f Fo(op)-5 b(ene)g(d)p
-Fp(,)34 b(giving)d(direct)g(access)h(to)h(all)d(its)h(functions,)g(as)h
-(sho)m(wn)e(in)h(the)g(co)s(de)h(in)0 3509 y(Figure)e(3.)0
-3752 y Ff(8.9)112 b(A)37 b(CF)-9 b(unction)0 3924 y Fp(A)35
-b(CF)-8 b(unction)34 b(to)h(compute)g(the)f(maxim)m(um)g(of)g(a)h(v)-5
-b(ariable)34 b(n)m(um)m(b)s(er)f(of)i(argumen)m(ts)g(is)e(sho)m(wn)h
-(in)f(Figure)h(4.)0 4037 y(After)d(registered)f(with)0
-4224 y Fn(lua_register)44 b(\("max",)i(math_max\);)0
-4412 y Fp(this)29 b(function)g(is)h(a)m(v)-5 b(ailable)29
-b(in)h(Lua,)g(as)g(follo)m(ws:)0 4600 y Fn(i)47 b(=)h(max\(4,)e(5,)h
-(10,)g(-34\))94 b(--)48 b(i)f(receives)f(10)0 4843 y
-Ff(8.10)112 b(Calling)36 b(Lua)i(F)-9 b(unctions)0 5015
-y Fp(This)31 b(example)i(illustrates)e(ho)m(w)i(a)g(C)g(function)e(can)
-i(call)g(the)g(Lua)f(function)g Fn(remove_blanks)d Fp(presen)m(ted)k
-(in)0 5128 y(Section)d(8.3.)1905 5589 y(30)p eop
-%%Page: 31 31
-31 30 bop 0 1148 3900 12 v 0 1336 a Fn(void)47 b(math_max)e(\(void\))0
-1449 y({)48 1562 y(int)i(i=1;)142 b(/*)47 b(number)f(of)h(arguments)e
-(*/)48 1675 y(double)h(d,)h(dmax;)48 1788 y(lua_Object)e(o;)48
-1900 y(/*)i(the)g(function)e(must)i(get)g(at)g(least)f(one)h(argument)f
-(*/)48 2013 y(if)h(\(\(o)g(=)g(lua_getparam\(i++\)\))c(==)k
-(LUA_NOOBJECT\))143 2126 y(lua_error)e(\("too)i(few)g(arguments)e(to)i
-(function)f(`max'"\);)48 2239 y(/*)h(and)g(this)f(argument)g(must)h(be)
-g(a)g(number)f(*/)48 2352 y(if)h(\(!lua_isnumber\(o\)\))143
-2465 y(lua_error)e(\("incorrect)g(argument)h(to)h(function)e(`max'"\);)
-48 2578 y(dmax)h(=)i(lua_getnumber)c(\(o\);)48 2691 y(/*)j(loops)f
-(until)h(there)f(is)h(no)g(more)g(arguments)e(*/)48 2804
-y(while)h(\(\(o)h(=)g(lua_getparam\(i++\)\))c(!=)k(LUA_NOOBJECT\))48
-2917 y({)95 3030 y(if)h(\(!lua_isnumber\(o\)\))191 3142
-y(lua_error)d(\("incorrect)g(argument)g(to)j(function)d(`max'"\);)95
-3255 y(d)j(=)f(lua_getnumber)e(\(o\);)95 3368 y(if)j(\(d)f(>)g(dmax\))g
-(dmax)f(=)i(d;)48 3481 y(})48 3594 y(/*)f(push)g(the)f(result)h(to)g
-(be)g(returned)e(*/)48 3707 y(lua_pushnumber)f(\(dmax\);)0
-3820 y(})1328 4091 y Fp(Figure)30 b(4:)41 b(C)30 b(function)f
-Fn(math)p 2376 4091 29 4 v 33 w(max)p Fp(.)p 0 4204 3900
-12 v 1905 5589 a(31)p eop
-%%Page: 32 32
-32 31 bop 0 91 a Fn(void)47 b(remove_blanks)d(\(char)i(*s\))0
-204 y({)95 317 y(lua_pushstring\(s\);)91 b(/*)47 b(prepare)f(parameter)
-f(*/)95 430 y(lua_call\("remove_blanks"\);)89 b(/*)47
-b(call)g(Lua)g(function)e(*/)95 543 y(strcpy\(s,)h
-(lua_getstring\(lua_getre)o(sult)o(\(1\)\))o(\);)89 b(/*)47
-b(copy)g(result)f(back)h(to)g('s')g(*/)0 656 y(})0 942
-y Fq(9)135 b(Lua)44 b(Stand-alone)0 1145 y Fp(Although)39
-b(Lua)g(has)h(b)s(een)f(designed)g(as)h(an)f(extension)h(language,)i
-(the)e(language)h(can)f(also)f(b)s(e)h(used)f(as)h(a)0
-1258 y(stand-alone)33 b(in)m(terpreter.)47 b(An)32 b(implemen)m(tation)
-f(of)i(suc)m(h)f(an)h(in)m(terpreter,)g(called)f(simply)e
-Fn(lua)p Fp(,)j(is)e(pro)m(vided)0 1371 y(with)38 b(the)h(standard)f
-(distribution.)63 b(This)37 b(program)h(can)i(b)s(e)e(called)g(with)g
-(an)m(y)h(sequence)g(of)g(the)g(follo)m(wing)0 1484 y(argumen)m(ts:)0
-1672 y Fn(-v)45 b Fp(prin)m(ts)29 b(v)m(ersion)h(information.)0
-1859 y Fn(-)45 b Fp(runs)29 b(in)m(teractiv)m(ely)-8
-b(,)31 b(accepting)g(commands)f(from)g(standard)g(input)e(un)m(til)h
-(an)h Fn(EOF)p Fp(.)0 2047 y Fn(-e)47 b(stat)e Fp(executes)31
-b Fn(stat)e Fp(as)i(a)g(Lua)f(c)m(h)m(unk.)0 2234 y Fn(var=exp)44
-b Fp(executes)31 b Fn(var=exp)e Fp(as)h(a)h(Lua)f(c)m(h)m(unk.)0
-2422 y Fn(filename)43 b Fp(executes)32 b(\014le)d Fn(filename)f
-Fp(as)j(a)g(Lua)f(c)m(h)m(unk.)0 2610 y(All)f(argumen)m(ts)i(are)f
-(handle)f(in)g(order.)41 b(F)-8 b(or)31 b(instance,)f(an)g(in)m(v)m(o)s
-(cation)h(lik)m(e)0 2797 y Fn($)47 b(lua)g(-)h(a=1)f(prog.lua)0
-2985 y Fp(will)25 b(\014rst)j(in)m(teract)g(with)f(the)h(user)g(un)m
-(til)e(an)i Fn(EOF)p Fp(,)f(then)h(will)d(set)k Fn(a)f
-Fp(to)g(1,)i(and)d(\014nally)f(will)f(run)i(\014le)g
-Fn(prog.lua)p Fp(.)141 3098 y(Please)32 b(notice)g(that)g(the)g(in)m
-(teraction)g(with)e(the)i(shell)e(ma)m(y)i(lead)f(to)i(unin)m(tended)c
-(results.)44 b(F)-8 b(or)32 b(instance,)0 3211 y(a)f(call)e(lik)m(e)0
-3398 y Fn($)47 b(lua)g(a="name")f(prog.lua)0 3586 y Fp(will)32
-b Fo(not)j Fp(set)f Fn(a)g Fp(to)h(the)g(string)e Fn("name")p
-Fp(.)51 b(Instead,)35 b(the)g(quotes)g(will)c(b)s(e)j(handled)e(b)m(y)i
-(the)h(shell,)f(lua)f(will)f(get)0 3699 y(only)d Fn(a=name)g
-Fp(to)i(run,)e(and)h Fn(a)g Fp(will)e(\014nish)g(with)h
-Fm(nil)p Fp(.)41 b(Instead,)30 b(one)h(should)d(write)0
-3887 y Fn($)47 b(lua)g('a="name"')e(prog.lua)0 4173 y
-Fq(Ac)l(kno)l(wledgmen)l(ts)0 4376 y Fp(The)28 b(authors)g(w)m(ould)f
-(lik)m(e)h(to)h(thank)g(CENPES/PETR)m(OBR)2191 4353 y(\023)2180
-4376 y(AS)e(whic)m(h,)h(join)m(tly)f(with)g Fa(T)-8 b(eC)3231
-4404 y(Graf)3395 4376 y Fp(,)29 b(used)f(exten-)0 4489
-y(siv)m(ely)35 b(early)g(v)m(ersions)f(of)i(this)e(system)i(and)f(ga)m
-(v)m(e)j(v)-5 b(aluable)34 b(commen)m(ts.)57 b(The)35
-b(authors)g(w)m(ould)f(also)h(lik)m(e)g(to)0 4602 y(thank)30
-b(Carlos)g(Henrique)f(Levy)-8 b(,)31 b(who)f(found)f(the)i(name)f(of)g
-(the)h(game.)42 b(Lua)30 b(means)g Fo(mo)-5 b(on)32 b
-Fp(in)d(P)m(ortuguese.)0 4888 y Fq(Incompatibilities)47
-b(with)f(Previous)f(V)-11 b(ersions)0 5091 y Fp(Although)29
-b(great)i(care)g(has)f(b)s(een)f(tak)m(en)i(to)g(a)m(v)m(oid)g
-(incompatibilities)26 b(with)i(the)j(previous)d(public)f(v)m(ersions)j
-(of)0 5204 y(Lua,)g(some)h(di\013erences)f(had)g(to)h(b)s(e)e(in)m(tro)
-s(duced.)40 b(Here)30 b(is)g(a)h(list)e(of)h(all)f(these)i
-(incompatibilities.)1905 5589 y(32)p eop
-%%Page: 33 33
-33 32 bop 0 91 a Ff(Incompatibilities)33 b(with)j(v)m(ersion)h(2.4)0
-263 y Fp(The)28 b(whole)f(I/O)i(facilities)d(ha)m(v)m(e)k(b)s(een)d
-(rewritten.)39 b(W)-8 b(e)30 b(strongly)e(encourage)h(programmers)f(to)
-h(addapt)f(their)0 376 y(co)s(de)c(to)g(this)e(new)g(v)m(ersion.)38
-b(Ho)m(w)m(ev)m(er,)27 b(w)m(e)d(are)g(k)m(eeping)f(the)g(old)g(v)m
-(ersion)g(of)g(the)g(libraries)e(in)h(the)h(distribution,)0
-489 y(to)31 b(allo)m(w)f(a)h(smo)s(oth)f(transition.)39
-b(The)30 b(incompatibilities)c(b)s(et)m(w)m(een)31 b(the)g(new)f(and)g
-(the)g(old)g(libraries)d(are:)136 676 y Fk(\017)46 b
-Fp(The)35 b(format)g(facilit)m(y)e(of)i(function)f Fn(write)f
-Fp(has)i(b)s(een)f(sup)s(ersed)e(b)m(y)j(function)e Fn(format)p
-Fp(;)j(therefore)f(this)227 789 y(facilit)m(y)30 b(has)g(b)s(een)g
-(dropp)s(ed.)136 977 y Fk(\017)46 b Fp(F)-8 b(unction)32
-b Fn(read)f Fp(no)m(w)h(uses)f Fo(r)-5 b(e)g(ad)36 b(p)-5
-b(atterns)34 b Fp(to)f(sp)s(ecify)e(what)g(to)i(read;)g(this)e(is)g
-(incompatible)f(with)h(the)227 1090 y(old)f(format)g(options.)136
-1277 y Fk(\017)46 b Fp(F)-8 b(unction)25 b Fn(strfind)f
-Fp(no)m(w)i(accepts)g(patterns,)h(so)f(it)f(ma)m(y)h(ha)m(v)m(e)h(a)f
-(di\013eren)m(t)f(b)s(eha)m(vior)g(when)f(the)i(pattern)227
-1390 y(includes)i(sp)s(ecial)h(c)m(haracteres.)0 1634
-y Ff(Incompatibilities)k(with)j(v)m(ersion)h(2.2)136
-1805 y Fk(\017)46 b Fp(F)-8 b(unctions)40 b Fn(date)g
-Fp(and)g Fn(time)f Fp(\(from)h Fn(iolib)p Fp(\))g(ha)m(v)m(e)h(b)s(een)
-f(sup)s(erseded)f(b)m(y)h(the)h(new,)i(more)d(p)s(o)m(w)m(erful)227
-1918 y(v)m(ersion)30 b(of)h(function)e Fn(date)p Fp(.)136
-2106 y Fk(\017)46 b Fp(F)-8 b(unction)35 b Fn(append)e
-Fp(\(from)h Fn(iolib)p Fp(\))g(no)m(w)h(returns)e(1)i(whenev)m(er)g(it)
-f(succeeds,)j(whether)d(the)h(\014le)f(is)f(new)227 2219
-y(or)e(not.)136 2407 y Fk(\017)46 b Fp(F)-8 b(unction)29
-b Fn(int2str)e Fp(\(from)i Fn(strlib)p Fp(\))f(has)h(b)s(een)f(sup)s
-(erseded)f(b)m(y)i(new)g(function)e Fn(format)p Fp(,)h(with)g(param-)
-227 2519 y(eter)j Fn("\045c")p Fp(.)136 2707 y Fk(\017)46
-b Fp(The)30 b(API)g(lo)s(c)m(k)g(mec)m(hanism)f(has)h(b)s(een)g(sup)s
-(erseded)e(b)m(y)i(the)g(reference)h(mec)m(hanism.)40
-b(Ho)m(w)m(ev)m(er,)32 b Fn(lua.h)227 2820 y Fp(pro)m(vides)e
-(compatibilit)m(y)e(macros,)j(so)g(there)f(is)g(no)g(need)g(to)h(c)m
-(hange)h(programs.)136 3008 y Fk(\017)46 b Fp(The)30
-b(API)g(function)f Fn(lua_pushliteral)e Fp(no)m(w)j(is)f(just)h(a)h
-(macro)g(to)g Fn(lua_pushstring)p Fp(.)0 3251 y Ff(Incompatibilities)i
-(with)j(v)m(ersion)h(2.1)136 3423 y Fk(\017)46 b Fp(The)25
-b(function)e Fn(type)h Fp(no)m(w)h(returns)f(the)h(string)f
-Fn("function")e Fp(b)s(oth)j(for)f(C)h(and)f(Lua)h(functions.)38
-b(Because)227 3536 y(Lua)e(functions)e(and)h(C)g(functions)g(are)h
-(compatible,)g(this)f(b)s(eha)m(vior)g(is)g(usually)e(more)j(useful.)55
-b(When)227 3648 y(needed,)37 b(the)f(second)g(result)f(of)h(function)f
-Fn(type)g Fp(ma)m(y)h(b)s(e)f(used)g(to)i(distinguish)32
-b(b)s(et)m(w)m(een)k(Lua)g(and)f(C)227 3761 y(functions.)136
-3949 y Fk(\017)46 b Fp(A)31 b(function)d(de\014nition)g(only)h(assigns)
-h(the)g(function)f(v)-5 b(alue)29 b(to)i(the)g(giv)m(en)f(v)-5
-b(ariable)29 b(at)i(execution)f(time.)0 4192 y Ff(Incompatibilities)j
-(with)j(v)m(ersion)h(1.1)136 4364 y Fk(\017)46 b Fp(The)30
-b(equalit)m(y)g(test)h(op)s(erator)g(no)m(w)f(is)g(denoted)g(b)m(y)h
-Fn(==)p Fp(,)f(instead)f(of)i Fn(=)p Fp(.)136 4552 y
-Fk(\017)46 b Fp(The)25 b(syn)m(tax)h(for)f(table)g(construction)g(has)h
-(b)s(een)e(greatly)i(simpli\014ed.)35 b(The)25 b(old)g
-Fn(@\(size\))e Fp(has)i(b)s(een)g(sub-)227 4665 y(stituted)31
-b(b)m(y)g Fn({})p Fp(.)43 b(The)31 b(list)f(constructor)i(\(formerly)e
-Fn(@[...])p Fp(\))g(and)h(the)h(record)f(constructor)h(\(formerly)227
-4778 y Fn(@{...})p Fp(\))d(no)m(w)g(are)h(b)s(oth)f(co)s(ded)g(lik)m(e)
-g Fn({...})p Fp(.)39 b(When)30 b(the)f(construction)g(in)m(v)m(olv)m
-(es)h(a)g(function)e(call,)i(lik)m(e)227 4890 y(in)f
-Fn(@func{...})p Fp(,)e(the)j(new)f(syn)m(tax)i(do)s(es)e(not)h(use)g
-(the)g Fn(@)p Fp(.)40 b(More)30 b(imp)s(ortan)m(t,)g
-Fo(a)i(c)-5 b(onstruction)34 b(function)227 5003 y(must)f(now)h
-(explicitly)f(r)-5 b(eturn)34 b(the)f(c)-5 b(onstructe)g(d)34
-b(table)p Fp(.)136 5191 y Fk(\017)46 b Fp(The)30 b(function)f
-Fn(lua_call)f Fp(no)j(longer)f(has)g(the)g(parameter)h
-Fn(nparam)p Fp(.)1905 5589 y(33)p eop
-%%Page: 34 34
-34 33 bop 136 91 a Fk(\017)46 b Fp(The)d(function)f Fn(lua_pop)f
-Fp(is)h(no)h(longer)g(a)m(v)-5 b(ailable,)46 b(since)c(it)h(could)f
-(lead)h(to)h(strange)g(b)s(eha)m(vior.)78 b(In)227 204
-y(particular,)39 b(to)g(access)g(results)e(returned)g(from)h(a)h(Lua)f
-(function,)h(the)f(new)g(macro)h Fn(lua_getresult)227
-317 y Fp(should)29 b(b)s(e)g(used.)136 505 y Fk(\017)46
-b Fp(The)30 b(old)g(functions)f Fn(lua_storefield)d Fp(and)k
-Fn(lua_storeindexed)c Fp(ha)m(v)m(e)31 b(b)s(een)f(replaced)g(b)m(y)227
-730 y Fn(int)47 b(lua_storesubscript)c(\(void\);)227
-955 y Fp(with)29 b(the)i(parameters)g(explicitly)d(pushed)g(on)i(the)h
-(stac)m(k.)136 1142 y Fk(\017)46 b Fp(The)23 b(functionalit)m(y)f(of)i
-(the)g(function)e Fn(lua_errorfunction)d Fp(has)24 b(b)s(een)e
-(replaced)i(b)m(y)f(the)h Fo(fal)5 b(lb)-5 b(ack)24 b
-Fp(mec)m(h-)227 1255 y(anism)29 b(\(see)j(Section)e(4.8\).)136
-1443 y Fk(\017)46 b Fp(When)31 b(calling)e(a)j(function)d(from)i(the)g
-(Lua)g(library)-8 b(,)29 b(parameters)i(passed)g(through)f(the)h(stac)m
-(k)i(m)m(ust)e(b)s(e)227 1556 y(pushed)36 b(just)h(b)s(efore)h(the)g
-(corresp)s(onding)d(call,)40 b(with)c(no)i(in)m(termediate)f(calls)g
-(to)i(Lua.)62 b(Sp)s(ecial)36 b(care)227 1669 y(should)29
-b(b)s(e)g(tak)m(en)j(with)d(macros)i(lik)m(e)e Fn(lua_getindexed)e
-Fp(and)j Fn(lua_getfield)p Fp(.)1905 5589 y(34)p eop
-%%Page: 35 35
-35 34 bop 0 220 a Fq(Index)0 401 y Fp(..)41 b(6)0 514
-y(abs)30 b(20)0 627 y(acos)h(20)0 740 y(Adjustmen)m(t)f(3)0
-853 y(and)g(6)0 966 y(app)s(endto)g(21)0 1079 y(argumen)m(ts)h(8)0
-1192 y(arithmetic)f(fallbac)m(k)g(9)0 1305 y(arithmetic)g(op)s(erators)
-g(5)0 1418 y(arra)m(ys)h(2)0 1530 y(ascii)f(18)0 1643
-y(asin)f(20)0 1756 y(assert)i(16)0 1869 y(Assignmen)m(t)f(4)0
-1982 y(asso)s(ciativ)m(e)h(arra)m(ys)g(2)0 2095 y(atan)g(20)0
-2208 y(atan2)h(20)0 2321 y(basic)e(t)m(yp)s(es)g(2)0
-2434 y(blo)s(c)m(k)g(4)0 2547 y(C)g(p)s(oin)m(ters)f(2)0
-2660 y(captures)h(20)0 2772 y(ceil)g(20)0 2885 y(CF)-8
-b(unction)30 b(2)0 2998 y(c)m(haracter)i(class)e(19)0
-3111 y(c)m(h)m(unk)g(2)0 3224 y(clone)g(24)0 3337 y(closing)f(a)i
-(\014le)f(21)0 3450 y(Co)s(ercion)g(3)0 3563 y(Commen)m(ts)h(3)0
-3676 y(concatenation)h(fallbac)m(k)e(9)0 3789 y(concatenation)i(6)0
-3902 y(condition)d(expression)g(4)0 4014 y(constructors)i(6)0
-4127 y(cos)g(20)0 4240 y(Data)h(Structures)d(24)0 4353
-y(date)i(22)0 4466 y(debug)f(pragma)g(10)0 4579 y(do\014le)f(15)0
-4692 y(dostring)g(15)0 4805 y(error)h(fallbac)m(k)g(10)0
-4918 y(error)g(16)0 5031 y(execute)i(22)0 5144 y(exit)e(22)0
-5256 y(exp)s(onen)m(tiation)g(5)2095 401 y(Expressions)f(5)2095
-514 y(fallbac)m(ks)h(9)2095 627 y(\015o)s(or)g(20)2095
-740 y(format)h(18)2095 853 y(function)e(call)h(7)2095
-966 y(F)-8 b(unction)30 b(De\014nitions)f(8)2095 1079
-y(function)g(fallbac)m(k)h(9)2095 1192 y(function)f(2)2095
-1305 y(functions)g(in)g(C)h(30)2095 1418 y(geten)m(v)i(22)2095
-1530 y(getglobal)f(17)2095 1643 y(gettable)h(fallbac)m(k)e(9)2095
-1756 y(global)g(en)m(vironmen)m(t)g(2)2095 1869 y(Global)g(v)-5
-b(ariables)29 b(2)2095 1982 y(gsub)h(18)2095 2095 y(Iden)m(ti\014ers)f
-(3)2095 2208 y(if-then-else)h(4)2095 2321 y(index)f(fallbac)m(k)h(9)
-2095 2434 y(index)f(getglobal)i(9)2095 2547 y(inheritance)e(26)2095
-2660 y(Literal)h(strings)f(3)2095 2772 y(Lo)s(cal)i(v)-5
-b(ariables)29 b(5)2095 2885 y(log10)j(20)2095 2998 y(log)f(20)2095
-3111 y(logical)f(op)s(erators)h(6)2095 3224 y(Lua)f(Stand-alone)g(32)
-2095 3337 y(luac)g(11)2095 3450 y(luac)g(2)2095 3563
-y(lua)p 2222 3563 28 4 v 32 w(call)g(13)2095 3676 y(lua)p
-2222 3676 V 32 w(callfunction)f(13)2095 3789 y(lua)p
-2222 3789 V 32 w(CF)-8 b(unction)30 b(14)2095 3902 y(lua)p
-2222 3902 V 32 w(createtable)i(13)2095 4014 y(lua)p 2222
-4014 V 32 w(do\014le)e(10)2095 4127 y(lua)p 2222 4127
-V 32 w(dostring)g(10)2095 4240 y(lua)p 2222 4240 V 32
-w(error)g(13)2095 4353 y(lua)p 2222 4353 V 32 w(getcfunction)h(11)2095
-4466 y(lua)p 2222 4466 V 32 w(getglobal)g(12)2095 4579
-y(lua)p 2222 4579 V 32 w(getn)m(um)m(b)s(er)g(11)2095
-4692 y(lua)p 2222 4692 V 32 w(getparam)h(14)2095 4805
-y(lua)p 2222 4805 V 32 w(getref)g(14)2095 4918 y(lua)p
-2222 4918 V 32 w(getresult)f(13)2095 5031 y(lua)p 2222
-5031 V 32 w(getstring)g(11)2095 5144 y(lua)p 2222 5144
-V 32 w(getsubscript)f(12)2095 5256 y(lua)p 2222 5256
-V 32 w(getuserdata)i(11)1905 5589 y(35)p eop
-%%Page: 36 36
-36 35 bop 0 91 a Fp(lua)p 127 91 28 4 v 32 w(iscfunction)29
-b(11)0 204 y(lua)p 127 204 V 32 w(isfunction)f(11)0 317
-y(lua)p 127 317 V 32 w(isnil)f(11)0 430 y(lua)p 127 430
-V 32 w(isn)m(um)m(b)s(er)h(11)0 543 y(lua)p 127 543 V
-32 w(isstring)g(11)0 656 y(lua)p 127 656 V 32 w(istable)h(11)0
-769 y(lua)p 127 769 V 32 w(isuserdata)g(11)0 882 y(LUA)p
-198 882 V 33 w(NOOBJECT)g(14)0 995 y(lua)p 127 995 V
-32 w(Ob)5 b(ject)30 b(11)0 1108 y(lua)p 127 1108 V 32
-w(pushcfunction)e(12)0 1220 y(lua)p 127 1220 V 32 w(pushnil)f(12)0
-1333 y(lua)p 127 1333 V 32 w(pushn)m(um)m(b)s(er)g(12)0
-1446 y(lua)p 127 1446 V 32 w(pushob)5 b(ject)30 b(12)0
-1559 y(lua)p 127 1559 V 32 w(pushref)e(14)0 1672 y(lua)p
-127 1672 V 32 w(pushstring)g(12)0 1785 y(lua)p 127 1785
-V 32 w(push)m(userdata)h(12)0 1898 y(lua)p 127 1898 V
-32 w(push)m(usertag)h(12)0 2011 y(lua)p 127 2011 V 32
-w(ref)g(14)0 2124 y(lua)p 127 2124 V 32 w(register)g(14)0
-2237 y(lua)p 127 2237 V 32 w(setfallbac)m(k)g(14)0 2350
-y(lua)p 127 2350 V 32 w(storeglobal)g(12)0 2462 y(lua)p
-127 2462 V 32 w(storesubscript)f(12)0 2575 y(lua)p 127
-2575 V 32 w(t)m(yp)s(e)h(11)0 2688 y(lua)p 127 2688 V
-32 w(unref)f(14)0 2801 y(max)h(20)0 2914 y(metho)s(ds)g(8)0
-3027 y(min)f(20)0 3140 y(mo)s(d)h(20)0 3253 y(Mo)s(dules)f(27)0
-3366 y(m)m(ultiple)f(assignmen)m(t)i(4)0 3479 y(next)h(15)0
-3592 y(next)g(24)0 3704 y(nextv)-5 b(ar)31 b(16)0 3817
-y(nextv)-5 b(ar)31 b(24)0 3930 y(nil)d(2)0 4043 y(not)j(6)0
-4156 y(n)m(um)m(b)s(er)e(2)0 4269 y(Numerical)g(constan)m(ts)j(3)0
-4382 y(Op)s(erator)e(precedence)h(6)0 4495 y(or)f(6)0
-4608 y(order)g(fallbac)m(k)g(9)0 4721 y(pattern)g(item)h(19)0
-4834 y(pattern)f(20)0 4946 y(P)m(ersistence)h(26)0 5059
-y(pip)s(ed)d(input)g(20)0 5172 y(pip)s(ed)g(output)i(21)0
-5285 y(p)s(op)s(en)f(20)2095 91 y(p)s(op)s(en)g(21)2095
-204 y(pre-compilation)g(2)2095 317 y(prede\014ned)g(functions)g(15)2095
-430 y(prin)m(t)g(16)2095 543 y(Programming)h(with)f(Classes)g(27)2095
-656 y(random)h(20)2095 769 y(randomseed)g(20)2095 882
-y(read)h(pattern)f(21)2095 995 y(read)h(21)2095 1108
-y(readfrom)f(20)2095 1220 y(records)g(2)2095 1333 y(reference)h(14)2095
-1446 y(re\015exivit)m(y)f(15)2095 1559 y(relational)g(op)s(erators)g(5)
-2095 1672 y(remo)m(v)m(e)i(21)2095 1785 y(rename)f(21)2095
-1898 y(rep)s(eat-un)m(til)e(4)2095 2011 y(reserv)m(ed)i(w)m(ords)f(3)
-2095 2124 y(return)g(statemen)m(t)i(5)2095 2237 y(return)e(4)2095
-2350 y(self)g(8)2095 2462 y(setfallbac)m(k)h(10)2095
-2575 y(setfallbac)m(k)g(17)2095 2688 y(setglobal)g(17)2095
-2801 y(settable)g(fallbac)m(k)f(9)2095 2914 y(short-cut)h(ev)-5
-b(aluation)30 b(6)2095 3027 y(Simple)e(Expressions)h(5)2095
-3140 y(sin)g(20)2095 3253 y(skips)g(21)2095 3366 y(sqrt)h(20)2095
-3479 y(statemen)m(ts)i(4)2095 3592 y(str\014nd)d(17)2095
-3704 y(string)h(2)2095 3817 y(strlen)g(17)2095 3930 y(strlo)m(w)m(er)h
-(17)2095 4043 y(strrep)f(18)2095 4156 y(strsub)f(17)2095
-4269 y(strupp)s(er)f(17)2095 4382 y(table)j(2)2095 4495
-y(tag)h(16)2095 4608 y(tan)f(20)2095 4721 y(tmpname)f(21)2095
-4834 y(tok)m(ens)i(3)2095 4946 y(ton)m(um)m(b)s(er)e(16)2095
-5059 y(tostring)g(16)2095 5172 y(t)m(yp)s(e)h(16)2095
-5285 y(T)m(yp)s(es)f(2)1905 5589 y(36)p eop
-%%Page: 37 37
-37 36 bop 0 91 a Fp(userdata)30 b(2)0 204 y(V)-8 b(ariable)30
-b(n)m(um)m(b)s(er)f(of)h(argumen)m(ts)h(25)0 317 y(v)m(ersion)f(1.1)h
-(33)0 430 y(v)m(ersion)f(2.1)h(33)0 543 y(v)m(ersion)f(2.2)h(33)0
-656 y(v)m(ersion)f(2.4)h(33)0 769 y(while-do)e(4)0 882
-y(write)h(22)0 995 y(writeto)g(20)1905 5589 y(37)p eop
-%%Page: 38 38
-38 37 bop 0 91 a Fq(Con)l(ten)l(ts)0 295 y Fm(1)84 b(In)m(tro)s
-(duction)3136 b(1)0 499 y(2)84 b(En)m(vironmen)m(t)35
-b(and)f(Ch)m(unks)2540 b(2)0 703 y(3)84 b(T)m(yp)s(es)3437
-b(2)0 907 y(4)84 b(The)35 b(Language)3065 b(3)136 1020
-y Fp(4.1)94 b(Lexical)30 b(Con)m(v)m(en)m(tions)83 b(.)45
-b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-131 b(3)136 1132 y(4.2)94 b(Co)s(ercion)33 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)131 b(3)136 1245 y(4.3)94 b(Adjustmen)m(t)58 b(.)46
-b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)f(.)131 b(3)136 1358 y(4.4)94 b(Statemen)m(ts)85
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(4)345 1471 y(4.4.1)106
-b(Blo)s(c)m(ks)47 b(.)f(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(4)345 1584
-y(4.4.2)106 b(Assignmen)m(t)57 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(4)345 1697
-y(4.4.3)106 b(Con)m(trol)30 b(Structures)59 b(.)46 b(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(4)345 1810
-y(4.4.4)106 b(F)-8 b(unction)30 b(Calls)f(as)i(Statemen)m(ts)64
-b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(5)345 1923
-y(4.4.5)106 b(Lo)s(cal)31 b(Declarations)60 b(.)46 b(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(5)136 2036
-y(4.5)94 b(Expressions)59 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131
-b(5)345 2149 y(4.5.1)106 b(Simple)28 b(Expressions)36
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131
-b(5)345 2262 y(4.5.2)106 b(Arithmetic)30 b(Op)s(erators)81
-b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131
-b(5)345 2374 y(4.5.3)106 b(Relational)30 b(Op)s(erators)38
-b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131
-b(5)345 2487 y(4.5.4)106 b(Logical)31 b(Op)s(erators)88
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131
-b(6)345 2600 y(4.5.5)106 b(Concatenation)84 b(.)46 b(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(6)345
-2713 y(4.5.6)106 b(Precedence)78 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(6)345
-2826 y(4.5.7)106 b(T)-8 b(able)30 b(Constructors)39 b(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131
-b(6)345 2939 y(4.5.8)106 b(F)-8 b(unction)30 b(Calls)80
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)131 b(7)136 3052 y(4.6)94 b(F)-8 b(unction)31 b(De\014nitions)69
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)131 b(8)136 3165 y(4.7)94 b(F)-8 b(allbac)m(ks)90
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)131 b(9)136 3278 y(4.8)94
-b(Error)30 b(Handling)60 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(10)0
-3482 y Fm(5)f(The)35 b(Application)g(Program)g(In)m(terface)2041
-b(10)136 3594 y Fp(5.1)94 b(Executing)30 b(Lua)h(Co)s(de)63
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)85 b(10)136 3707 y(5.2)94 b(Con)m(v)m(erting)31
-b(V)-8 b(alues)30 b(b)s(et)m(w)m(een)h(C)f(and)g(Lua)54
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(11)136 3820
-y(5.3)94 b(Manipulating)29 b(Lua)h(Ob)5 b(jects)39 b(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(12)136 3933 y(5.4)94 b(Calling)29 b(Lua)h(F)-8 b(unctions)67
-b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)85 b(13)136 4046 y(5.5)94 b(C)30 b(F)-8 b(unctions)44
-b(.)i(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)
-h(.)g(.)f(.)h(.)g(.)f(.)85 b(14)136 4159 y(5.6)94 b(References)31
-b(to)h(Lua)e(Ob)5 b(jects)42 b(.)k(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)f(.)85 b(14)0 4363 y Fm(6)f(Prede\014ned)36
-b(F)-9 b(unctions)36 b(and)e(Libraries)2051 b(15)136
-4476 y Fp(6.1)94 b(Prede\014ned)29 b(F)-8 b(unctions)43
-b(.)i(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-f(.)85 b(15)136 4589 y(6.2)94 b(String)29 b(Manipulation)72
-b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)85 b(17)136 4702 y(6.3)94 b(Mathematical)32 b(F)-8
-b(unctions)56 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)85 b(20)136 4814 y(6.4)94 b(I/O)31 b(F)-8
-b(acilities)66 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(20)1905 5589
-y(38)p eop
-%%Page: 39 39
-39 38 bop 0 91 a Fm(7)84 b(The)35 b(Debugger)h(In)m(terface)2566
-b(22)136 204 y Fp(7.1)94 b(Stac)m(k)32 b(and)e(F)-8 b(unction)30
-b(Information)e(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(22)136 317 y(7.2)94 b(Manipulating)29 b(Lo)s(cal)h(V)-8
-b(ariables)58 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)
-85 b(23)136 430 y(7.3)94 b(Ho)s(oks)69 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g
-(.)f(.)85 b(23)0 634 y Fm(8)f(Some)35 b(Examples)2939
-b(24)136 747 y Fp(8.1)94 b(Data)32 b(Structures)f(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f
-(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)f(.)85 b(24)136 860 y(8.2)94 b(The)30 b(F)-8
-b(unctions)30 b Fn(next)f Fp(and)h Fn(nextvar)38 b Fp(.)45
-b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(24)136
-973 y(8.3)94 b(String)29 b(Manipulation)72 b(.)45 b(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)
-g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(25)136
-1086 y(8.4)94 b(V)-8 b(ariable)30 b(n)m(um)m(b)s(er)f(of)i(argumen)m
-(ts)c(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)
-g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(25)136 1198 y(8.5)94 b(P)m(ersistence)87 b(.)46 b(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(26)136 1311 y(8.6)94 b(Inheritance)78 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)
-h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h
-(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(26)136 1424 y(8.7)94 b(Programming)30 b(with)f(Classes)e(.)46
-b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g
-(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)85
-b(27)136 1537 y(8.8)94 b(Mo)s(dules)50 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g
-(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)
-f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)85 b(27)136 1650 y(8.9)94 b(A)31 b(CF)-8 b(unction)82
-b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)
-g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h
-(.)g(.)f(.)h(.)g(.)f(.)85 b(30)136 1763 y(8.10)49 b(Calling)29
-b(Lua)h(F)-8 b(unctions)67 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f
-(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)
-f(.)h(.)g(.)f(.)h(.)g(.)f(.)85 b(30)0 1967 y Fm(9)f(Lua)35
-b(Stand-alone)2913 b(32)1905 5589 y Fp(39)p eop
-%%Trailer
-end
-userdict /end-hook known{end-hook}if
-%%EOF
diff --git a/include/Makefile b/include/Makefile
index e21de74d..6cd0c92d 100644
--- a/include/Makefile
+++ b/include/Makefile
@@ -4,7 +4,7 @@ LUA= ..
include $(LUA)/config
-SRCS= lua.h lualib.h luadebug.h
+SRCS= lua.h lualib.h luadebug.h auxlib.h
all:
diff --git a/include/auxlib.h b/include/auxlib.h
new file mode 100644
index 00000000..09020b46
--- /dev/null
+++ b/include/auxlib.h
@@ -0,0 +1,30 @@
+/*
+** $Id: auxlib.h,v 1.3 1997/04/07 14:48:53 roberto Exp $
+*/
+
+#ifndef auxlib_h
+#define auxlib_h
+
+#include "lua.h"
+
+struct luaL_reg {
+ char *name;
+ lua_CFunction func;
+};
+
+void luaL_openlib (struct luaL_reg *l, int n);
+void luaL_arg_check(int cond, int numarg, char *extramsg);
+char *luaL_check_string (int numArg);
+char *luaL_opt_string (int numArg, char *def);
+double luaL_check_number (int numArg);
+double luaL_opt_number (int numArg, double def);
+void luaL_verror (char *fmt, ...);
+
+
+
+/* -- private part (only for Lua modules */
+
+int luaI_findstring (char *name, char *list[]);
+
+
+#endif
diff --git a/include/lua.h b/include/lua.h
index 6a515d50..b0409d64 100644
--- a/include/lua.h
+++ b/include/lua.h
@@ -1,61 +1,50 @@
/*
-** LUA - Linguagem para Usuarios de Aplicacao
-** Grupo de Tecnologia em Computacao Grafica
-** TeCGraf - PUC-Rio
-** $Id: lua.h,v 3.32 1996/11/20 13:49:32 roberto Exp $
+** LUA - An Extensible Extension Language
+** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil
+** e-mail: lua@tecgraf.puc-rio.br
+** $Id: lua.h,v 4.11 1997/06/23 18:27:53 roberto Exp $
*/
#ifndef lua_h
#define lua_h
-#define LUA_VERSION "Lua 2.5.1"
-#define LUA_COPYRIGHT "Copyright (C) 1994-1996 TeCGraf"
+#define LUA_VERSION "Lua 3.0"
+#define LUA_COPYRIGHT "Copyright (C) 1994-1997 TeCGraf"
#define LUA_AUTHORS "W. Celes, R. Ierusalimschy & L. H. de Figueiredo"
-/* Private Part */
-
-typedef enum
-{
- LUA_T_NIL = -1,
- LUA_T_NUMBER = -2,
- LUA_T_STRING = -3,
- LUA_T_ARRAY = -4,
- LUA_T_FUNCTION = -5,
- LUA_T_CFUNCTION= -6,
- LUA_T_MARK = -7,
- LUA_T_CMARK = -8,
- LUA_T_LINE = -9,
- LUA_T_USERDATA = 0
-} lua_Type;
-
-
-/* Public Part */
-
#define LUA_NOOBJECT 0
+#define LUA_ANYTAG (-1)
+
typedef void (*lua_CFunction) (void);
typedef unsigned int lua_Object;
-lua_Object lua_setfallback (char *name, lua_CFunction fallback);
+lua_Object lua_settagmethod (int tag, char *event); /* In: new method */
+lua_Object lua_gettagmethod (int tag, char *event);
+lua_Object lua_seterrormethod (void); /* In: new method */
+
+int lua_newtag (void);
+void lua_settag (int tag); /* In: object */
void lua_error (char *s);
-int lua_dofile (char *filename);
-int lua_dostring (char *string);
-int lua_callfunction (lua_Object function);
-int lua_call (char *funcname);
+int lua_dofile (char *filename); /* Out: returns */
+int lua_dostring (char *string); /* Out: returns */
+int lua_callfunction (lua_Object f);
+ /* In: parameters; Out: returns */
void lua_beginblock (void);
void lua_endblock (void);
-lua_Object lua_getparam (int number);
-#define lua_getresult(_) lua_getparam(_)
+lua_Object lua_lua2C (int number);
+#define lua_getparam(_) lua_lua2C(_)
+#define lua_getresult(_) lua_lua2C(_)
-#define lua_isnil(_) (lua_type(_)==LUA_T_NIL)
-#define lua_istable(_) (lua_type(_)==LUA_T_ARRAY)
-#define lua_isuserdata(_) (lua_type(_)>=LUA_T_USERDATA)
-#define lua_iscfunction(_) (lua_type(_)==LUA_T_CFUNCTION)
+int lua_isnil (lua_Object object);
+int lua_istable (lua_Object object);
+int lua_isuserdata (lua_Object object);
+int lua_iscfunction (lua_Object object);
int lua_isnumber (lua_Object object);
int lua_isstring (lua_Object object);
int lua_isfunction (lua_Object object);
@@ -63,42 +52,73 @@ int lua_isfunction (lua_Object object);
float lua_getnumber (lua_Object object);
char *lua_getstring (lua_Object object);
lua_CFunction lua_getcfunction (lua_Object object);
-void *lua_getuserdata (lua_Object object);
+void *lua_getuserdata (lua_Object object);
+
void lua_pushnil (void);
void lua_pushnumber (float n);
void lua_pushstring (char *s);
void lua_pushcfunction (lua_CFunction fn);
-void lua_pushusertag (void *u, int tag);
+void lua_pushusertag (void *u, int tag);
void lua_pushobject (lua_Object object);
+lua_Object lua_pop (void);
+
lua_Object lua_getglobal (char *name);
-void lua_storeglobal (char *name);
+lua_Object lua_rawgetglobal (char *name);
+void lua_setglobal (char *name); /* In: value */
+void lua_rawsetglobal (char *name); /* In: value */
-void lua_storesubscript (void);
-lua_Object lua_getsubscript (void);
+void lua_settable (void); /* In: table, index, value */
+void lua_rawsettable (void); /* In: table, index, value */
+lua_Object lua_gettable (void); /* In: table, index */
+lua_Object lua_rawgettable (void); /* In: table, index */
-int lua_type (lua_Object object);
+int lua_tag (lua_Object object);
-int lua_ref (int lock);
+int lua_ref (int lock); /* In: value */
lua_Object lua_getref (int ref);
-void lua_pushref (int ref);
void lua_unref (int ref);
lua_Object lua_createtable (void);
+long lua_collectgarbage (long limit);
+
+/* =============================================================== */
/* some useful macros */
+#define lua_call(name) lua_callfunction(lua_getglobal(name))
+
+#define lua_pushref(ref) lua_pushobject(lua_getref(ref))
+
#define lua_refobject(o,l) (lua_pushobject(o), lua_ref(l))
-#define lua_register(n,f) (lua_pushcfunction(f), lua_storeglobal(n))
+#define lua_register(n,f) (lua_pushcfunction(f), lua_setglobal(n))
+
+#define lua_pushuserdata(u) lua_pushusertag(u, 0)
-#define lua_pushuserdata(u) lua_pushusertag(u, LUA_T_USERDATA)
-/* for compatibility with old versions. Avoid using these macros */
+
+/* ==========================================================================
+** for compatibility with old versions. Avoid using these macros/functions
+** If your program does not use any of these, define LUA_COMPAT2_5 to 0
+*/
+
+#ifndef LUA_COMPAT2_5
+#define LUA_COMPAT2_5 1
+#endif
+
+
+#if LUA_COMPAT2_5
+
+
+lua_Object lua_setfallback (char *event, lua_CFunction fallback);
+
+#define lua_storeglobal lua_setglobal
+#define lua_type lua_tag
#define lua_lockobject(o) lua_refobject(o,1)
#define lua_lock() lua_ref(1)
@@ -108,9 +128,14 @@ lua_Object lua_createtable (void);
#define lua_pushliteral(o) lua_pushstring(o)
-#define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_getsubscript())
-#define lua_getfield(o,f) (lua_pushobject(o), lua_pushliteral(f), lua_getsubscript())
+#define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_gettable())
+#define lua_getfield(o,f) (lua_pushobject(o), lua_pushstring(f), lua_gettable())
#define lua_copystring(o) (strdup(lua_getstring(o)))
+#define lua_getsubscript lua_gettable
+#define lua_storesubscript lua_settable
+
+#endif
+
#endif
diff --git a/include/lualib.h b/include/lualib.h
index 4fb0ed2d..38baf45e 100644
--- a/include/lualib.h
+++ b/include/lualib.h
@@ -2,7 +2,7 @@
** Libraries to be used in LUA programs
** Grupo de Tecnologia em Computacao Grafica
** TeCGraf - PUC-Rio
-** $Id: lualib.h,v 1.10 1996/08/05 20:55:24 roberto Exp $
+** $Id: lualib.h,v 1.13 1997/03/26 22:23:15 roberto Exp $
*/
#ifndef lualib_h
@@ -15,24 +15,15 @@ void strlib_open (void);
void mathlib_open (void);
+
/* auxiliar functions (private) */
-struct lua_reg {
- char *name;
- lua_CFunction func;
-};
-
-void luaI_openlib (struct lua_reg *l, int n);
-void lua_arg_check(int cond, char *funcname);
-char *lua_check_string (int numArg, char *funcname);
-char *lua_opt_string (int numArg, char *def, char *funcname);
-double lua_check_number (int numArg, char *funcname);
-long lua_opt_number (int numArg, long def, char *funcname);
char *luaI_addchar (int c);
+void luaI_emptybuff (void);
void luaI_addquoted (char *s);
-char *item_end (char *p);
-int singlematch (int c, char *p);
+char *luaL_item_end (char *p);
+int luaL_singlematch (int c, char *p);
#endif
diff --git a/src/Makefile b/src/Makefile
index 1ac2ab85..9fe13c83 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -4,19 +4,23 @@ LUA= ..
include $(LUA)/config
-OBJS= fallback.o\
+OBJS= auxlib.o\
+ fallback.o\
func.o\
hash.o\
inout.o\
lex.o\
- mem.o\
+ luamem.o\
opcode.o\
parser.o\
table.o\
tree.o\
- undump.o
+ undump.o\
+ zio.o
-SRCS= fallback.c\
+SRCS= auxlib.c\
+ auxlib.h\
+ fallback.c\
fallback.h\
func.c\
func.h\
@@ -26,8 +30,8 @@ SRCS= fallback.c\
inout.h\
lex.c\
lex.h\
- mem.c\
- mem.h\
+ luamem.c\
+ luamem.h\
opcode.c\
opcode.h\
parser.c\
@@ -39,6 +43,8 @@ SRCS= fallback.c\
types.h\
undump.c\
undump.h\
+ zio.c\
+ zio.h\
lua.stx
SLIB= $(LIB)/liblua.a
diff --git a/src/auxlib.c b/src/auxlib.c
new file mode 100644
index 00000000..e6f71f29
--- /dev/null
+++ b/src/auxlib.c
@@ -0,0 +1,81 @@
+char *rcs_auxlib="$Id: auxlib.c,v 1.5 1997/04/14 15:30:03 roberto Exp $";
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "lua.h"
+#include "auxlib.h"
+#include "luadebug.h"
+
+
+
+int luaI_findstring (char *name, char *list[])
+{
+ int i;
+ for (i=0; list[i]; i++)
+ if (strcmp(list[i], name) == 0)
+ return i;
+ return -1; /* name not found */
+}
+
+
+void luaL_arg_check(int cond, int numarg, char *extramsg)
+{
+ if (!cond) {
+ char *funcname;
+ lua_getobjname(lua_stackedfunction(0), &funcname);
+ if (funcname == NULL)
+ funcname = "???";
+ if (extramsg == NULL)
+ luaL_verror("bad argument #%d to function `%s'", numarg, funcname);
+ else
+ luaL_verror("bad argument #%d to function `%s' (%s)",
+ numarg, funcname, extramsg);
+ }
+}
+
+char *luaL_check_string (int numArg)
+{
+ lua_Object o = lua_getparam(numArg);
+ luaL_arg_check(lua_isstring(o), numArg, "string expected");
+ return lua_getstring(o);
+}
+
+char *luaL_opt_string (int numArg, char *def)
+{
+ return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
+ luaL_check_string(numArg);
+}
+
+double luaL_check_number (int numArg)
+{
+ lua_Object o = lua_getparam(numArg);
+ luaL_arg_check(lua_isnumber(o), numArg, "number expected");
+ return lua_getnumber(o);
+}
+
+
+double luaL_opt_number (int numArg, double def)
+{
+ return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
+ luaL_check_number(numArg);
+}
+
+void luaL_openlib (struct luaL_reg *l, int n)
+{
+ int i;
+ for (i=0; i<n; i++)
+ lua_register(l[i].name, l[i].func);
+}
+
+
+void luaL_verror (char *fmt, ...)
+{
+ char buff[1000];
+ va_list argp;
+ va_start(argp, fmt);
+ vsprintf(buff, fmt, argp);
+ va_end(argp);
+ lua_error(buff);
+}
diff --git a/src/auxlib.h b/src/auxlib.h
new file mode 100644
index 00000000..09020b46
--- /dev/null
+++ b/src/auxlib.h
@@ -0,0 +1,30 @@
+/*
+** $Id: auxlib.h,v 1.3 1997/04/07 14:48:53 roberto Exp $
+*/
+
+#ifndef auxlib_h
+#define auxlib_h
+
+#include "lua.h"
+
+struct luaL_reg {
+ char *name;
+ lua_CFunction func;
+};
+
+void luaL_openlib (struct luaL_reg *l, int n);
+void luaL_arg_check(int cond, int numarg, char *extramsg);
+char *luaL_check_string (int numArg);
+char *luaL_opt_string (int numArg, char *def);
+double luaL_check_number (int numArg);
+double luaL_opt_number (int numArg, double def);
+void luaL_verror (char *fmt, ...);
+
+
+
+/* -- private part (only for Lua modules */
+
+int luaI_findstring (char *name, char *list[]);
+
+
+#endif
diff --git a/src/fallback.c b/src/fallback.c
index 5718f5c1..5a0b5a5b 100644
--- a/src/fallback.c
+++ b/src/fallback.c
@@ -3,130 +3,37 @@
** TecCGraf - PUC-Rio
*/
-char *rcs_fallback="$Id: fallback.c,v 1.25 1996/04/25 14:10:00 roberto Exp $";
+char *rcs_fallback="$Id: fallback.c,v 2.9 1997/06/23 18:27:53 roberto Exp $";
#include <stdio.h>
#include <string.h>
-#include "mem.h"
+#include "auxlib.h"
+#include "luamem.h"
#include "fallback.h"
#include "opcode.h"
#include "lua.h"
#include "table.h"
+#include "tree.h"
+#include "hash.h"
-static void errorFB (void);
-static void indexFB (void);
-static void gettableFB (void);
-static void arithFB (void);
-static void concatFB (void);
-static void orderFB (void);
-static void GDFB (void);
-static void funcFB (void);
-
-/*
-** Warning: This list must be in the same order as the #define's
-*/
-struct FB luaI_fallBacks[] = {
-{"error", {LUA_T_CFUNCTION, {errorFB}}, 1, 0},
-{"index", {LUA_T_CFUNCTION, {indexFB}}, 2, 1},
-{"gettable", {LUA_T_CFUNCTION, {gettableFB}}, 2, 1},
-{"arith", {LUA_T_CFUNCTION, {arithFB}}, 3, 1},
-{"order", {LUA_T_CFUNCTION, {orderFB}}, 3, 1},
-{"concat", {LUA_T_CFUNCTION, {concatFB}}, 2, 1},
-{"settable", {LUA_T_CFUNCTION, {gettableFB}}, 3, 0},
-{"gc", {LUA_T_CFUNCTION, {GDFB}}, 1, 0},
-{"function", {LUA_T_CFUNCTION, {funcFB}}, -1, -1},
- /* no fixed number of params or results */
-{"getglobal", {LUA_T_CFUNCTION, {indexFB}}, 1, 1}
- /* same default behavior of index FB */
-};
-
-#define N_FB (sizeof(luaI_fallBacks)/sizeof(struct FB))
-
-void luaI_setfallback (void)
-{
- int i;
- char *name = lua_getstring(lua_getparam(1));
- lua_Object func = lua_getparam(2);
- if (name == NULL || !lua_isfunction(func))
- lua_error("incorrect argument to function `setfallback'");
- for (i=0; i<N_FB; i++)
- {
- if (strcmp(luaI_fallBacks[i].kind, name) == 0)
- {
- luaI_pushobject(&luaI_fallBacks[i].function);
- luaI_fallBacks[i].function = *luaI_Address(func);
- return;
- }
- }
- /* name not found */
- lua_error("incorrect argument to function `setfallback'");
-}
-
-
-static void errorFB (void)
-{
- lua_Object o = lua_getparam(1);
- if (lua_isstring(o))
- fprintf (stderr, "lua: %s\n", lua_getstring(o));
- else
- fprintf(stderr, "lua: unknown error\n");
-}
-
-
-static void indexFB (void)
-{
- lua_pushnil();
-}
-
-
-static void gettableFB (void)
-{
- lua_error("indexed expression not a table");
-}
-
-
-static void arithFB (void)
-{
- lua_error("unexpected type at conversion to number");
-}
-
-static void concatFB (void)
-{
- lua_error("unexpected type at conversion to string");
-}
-
-
-static void orderFB (void)
-{
- lua_error("unexpected type at comparison");
-}
-
-static void GDFB (void) { }
-
-static void funcFB (void)
-{
- lua_error("call expression not a function");
-}
-
-
-/*
+/* -------------------------------------------
** Reference routines
*/
static struct ref {
- Object o;
+ TObject o;
enum {LOCK, HOLD, FREE, COLLECTED} status;
} *refArray = NULL;
static int refSize = 0;
-int luaI_ref (Object *object, int lock)
+int luaI_ref (TObject *object, int lock)
{
int i;
int oldSize;
- if (tag(object) == LUA_T_NIL)
+ if (ttype(object) == LUA_T_NIL)
return -1; /* special ref for nil */
for (i=0; i<refSize; i++)
if (refArray[i].status == FREE)
@@ -151,9 +58,9 @@ void lua_unref (int ref)
}
-Object *luaI_getref (int ref)
+TObject *luaI_getref (int ref)
{
- static Object nul = {LUA_T_NIL, {0}};
+ static TObject nul = {LUA_T_NIL, {0}};
if (ref == -1)
return &nul;
if (ref >= 0 && ref < refSize &&
@@ -164,7 +71,7 @@ Object *luaI_getref (int ref)
}
-void luaI_travlock (int (*fn)(Object *))
+void luaI_travlock (int (*fn)(TObject *))
{
int i;
for (i=0; i<refSize; i++)
@@ -181,11 +88,281 @@ void luaI_invalidaterefs (void)
refArray[i].status = COLLECTED;
}
-char *luaI_travfallbacks (int (*fn)(Object *))
+
+/* -------------------------------------------
+* Internal Methods
+*/
+
+char *luaI_eventname[] = { /* ORDER IM */
+ "gettable", "settable", "index", "getglobal", "setglobal", "add",
+ "sub", "mul", "div", "pow", "unm", "lt", "le", "gt", "ge",
+ "concat", "gc", "function",
+ NULL
+};
+
+
+
+static int luaI_checkevent (char *name, char *list[])
+{
+ int e = luaI_findstring(name, list);
+ if (e < 0)
+ luaL_verror("`%s' is not a valid event name", name);
+ return e;
+}
+
+
+struct IM *luaI_IMtable = NULL;
+
+static int IMtable_size = 0;
+static int last_tag = LUA_T_NIL; /* ORDER LUA_T */
+
+
+/* events in LUA_T_LINE are all allowed, since this is used as a
+* 'placeholder' for "default" fallbacks
+*/
+static char validevents[NUM_TYPES][IM_N] = { /* ORDER LUA_T, ORDER IM */
+{1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* LUA_T_USERDATA */
+{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_LINE */
+{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_CMARK */
+{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_MARK */
+{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_CFUNCTION */
+{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_FUNCTION */
+{0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_ARRAY */
+{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_STRING */
+{1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_NUMBER */
+{1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* LUA_T_NIL */
+};
+
+static int validevent (lua_Type t, int e)
+{ /* ORDER LUA_T */
+ return (t < LUA_T_NIL) ? 1 : validevents[-t][e];
+}
+
+
+static void init_entry (int tag)
{
int i;
- for (i=0; i<N_FB; i++)
- if (fn(&luaI_fallBacks[i].function))
- return luaI_fallBacks[i].kind;
+ for (i=0; i<IM_N; i++)
+ ttype(luaI_getim(tag, i)) = LUA_T_NIL;
+}
+
+void luaI_initfallbacks (void)
+{
+ if (luaI_IMtable == NULL) {
+ int i;
+ IMtable_size = NUM_TYPES+10;
+ luaI_IMtable = newvector(IMtable_size, struct IM);
+ for (i=LUA_T_NIL; i<=LUA_T_USERDATA; i++)
+ init_entry(i);
+ }
+}
+
+int lua_newtag (void)
+{
+ --last_tag;
+ if ((-last_tag) >= IMtable_size) {
+ luaI_initfallbacks();
+ IMtable_size = growvector(&luaI_IMtable, IMtable_size,
+ struct IM, memEM, MAX_INT);
+ }
+ init_entry(last_tag);
+ return last_tag;
+}
+
+
+static void checktag (int tag)
+{
+ if (!(last_tag <= tag && tag <= 0))
+ luaL_verror("%d is not a valid tag", tag);
+}
+
+void luaI_realtag (int tag)
+{
+ if (!(last_tag <= tag && tag < LUA_T_NIL))
+ luaL_verror("tag %d is not result of `newtag'", tag);
+}
+
+
+void luaI_settag (int tag, TObject *o)
+{
+ luaI_realtag(tag);
+ switch (ttype(o)) {
+ case LUA_T_ARRAY:
+ o->value.a->htag = tag;
+ break;
+ case LUA_T_USERDATA:
+ o->value.ts->tag = tag;
+ break;
+ default:
+ luaL_verror("cannot change the tag of a %s", luaI_typenames[-ttype(o)]);
+ }
+}
+
+
+int luaI_efectivetag (TObject *o)
+{
+ lua_Type t = ttype(o);
+ if (t == LUA_T_USERDATA) {
+ int tag = o->value.ts->tag;
+ return (tag >= 0) ? LUA_T_USERDATA : tag;
+ }
+ else if (t == LUA_T_ARRAY)
+ return o->value.a->htag;
+ else return t;
+}
+
+
+void luaI_gettagmethod (void)
+{
+ int t = (int)luaL_check_number(1);
+ int e = luaI_checkevent(luaL_check_string(2), luaI_eventname);
+ checktag(t);
+ if (validevent(t, e))
+ luaI_pushobject(luaI_getim(t,e));
+}
+
+
+void luaI_settagmethod (void)
+{
+ int t = (int)luaL_check_number(1);
+ int e = luaI_checkevent(luaL_check_string(2), luaI_eventname);
+ lua_Object func = lua_getparam(3);
+ checktag(t);
+ if (!validevent(t, e))
+ luaL_verror("cannot change internal method `%s' for tag %d",
+ luaI_eventname[e], t);
+ luaL_arg_check(lua_isnil(func) || lua_isfunction(func),
+ 3, "function expected");
+ luaI_pushobject(luaI_getim(t,e));
+ *luaI_getim(t, e) = *luaI_Address(func);
+}
+
+
+static void stderrorim (void)
+{
+ lua_Object s = lua_getparam(1);
+ if (lua_isstring(s))
+ fprintf(stderr, "lua: %s\n", lua_getstring(s));
+}
+
+static TObject errorim = {LUA_T_CFUNCTION, {stderrorim}};
+
+
+TObject *luaI_geterrorim (void)
+{
+ return &errorim;
+}
+
+void luaI_seterrormethod (void)
+{
+ lua_Object func = lua_getparam(1);
+ luaL_arg_check(lua_isnil(func) || lua_isfunction(func),
+ 1, "function expected");
+ luaI_pushobject(&errorim);
+ errorim = *luaI_Address(func);
+}
+
+char *luaI_travfallbacks (int (*fn)(TObject *))
+{
+ int e;
+ if (fn(&errorim))
+ return "error";
+ for (e=IM_GETTABLE; e<=IM_FUNCTION; e++) { /* ORDER IM */
+ int t;
+ for (t=0; t>=last_tag; t--)
+ if (fn(luaI_getim(t,e)))
+ return luaI_eventname[e];
+ }
return NULL;
}
+
+
+/*
+* ===================================================================
+* compatibility with old fallback system
+*/
+#if LUA_COMPAT2_5
+
+static void errorFB (void)
+{
+ lua_Object o = lua_getparam(1);
+ if (lua_isstring(o))
+ fprintf (stderr, "lua: %s\n", lua_getstring(o));
+ else
+ fprintf(stderr, "lua: unknown error\n");
+}
+
+
+static void nilFB (void) { }
+
+
+static void typeFB (void)
+{
+ lua_error("unexpected type");
+}
+
+
+static void fillvalids (IMS e, TObject *func)
+{
+ int t;
+ for (t=LUA_T_NIL; t<=LUA_T_USERDATA; t++)
+ if (validevent(t, e))
+ *luaI_getim(t, e) = *func;
+}
+
+
+void luaI_setfallback (void)
+{
+ static char *oldnames [] = {"error", "getglobal", "arith", "order", NULL};
+ TObject oldfunc;
+ lua_CFunction replace;
+ char *name = luaL_check_string(1);
+ lua_Object func = lua_getparam(2);
+ luaI_initfallbacks();
+ luaL_arg_check(lua_isfunction(func), 2, "function expected");
+ switch (luaI_findstring(name, oldnames)) {
+ case 0: /* old error fallback */
+ oldfunc = errorim;
+ errorim = *luaI_Address(func);
+ replace = errorFB;
+ break;
+ case 1: /* old getglobal fallback */
+ oldfunc = *luaI_getim(LUA_T_NIL, IM_GETGLOBAL);
+ *luaI_getim(LUA_T_NIL, IM_GETGLOBAL) = *luaI_Address(func);
+ replace = nilFB;
+ break;
+ case 2: { /* old arith fallback */
+ int i;
+ oldfunc = *luaI_getim(LUA_T_NUMBER, IM_POW);
+ for (i=IM_ADD; i<=IM_UNM; i++) /* ORDER IM */
+ fillvalids(i, luaI_Address(func));
+ replace = typeFB;
+ break;
+ }
+ case 3: { /* old order fallback */
+ int i;
+ oldfunc = *luaI_getim(LUA_T_LINE, IM_LT);
+ for (i=IM_LT; i<=IM_GE; i++) /* ORDER IM */
+ fillvalids(i, luaI_Address(func));
+ replace = typeFB;
+ break;
+ }
+ default: {
+ int e;
+ if ((e = luaI_findstring(name, luaI_eventname)) >= 0) {
+ oldfunc = *luaI_getim(LUA_T_LINE, e);
+ fillvalids(e, luaI_Address(func));
+ replace = (e == IM_GC || e == IM_INDEX) ? nilFB : typeFB;
+ }
+ else {
+ luaL_verror("`%s' is not a valid fallback name", name);
+ replace = NULL; /* to avoid warnings */
+ }
+ }
+ }
+ if (oldfunc.ttype != LUA_T_NIL)
+ luaI_pushobject(&oldfunc);
+ else
+ lua_pushcfunction(replace);
+}
+#endif
diff --git a/src/fallback.h b/src/fallback.h
index 71f150f7..7e314c9f 100644
--- a/src/fallback.h
+++ b/src/fallback.h
@@ -1,5 +1,5 @@
/*
-** $Id: fallback.h,v 1.13 1996/04/25 14:10:00 roberto Exp $
+** $Id: fallback.h,v 1.23 1997/04/24 22:59:57 roberto Exp $
*/
#ifndef fallback_h
@@ -8,30 +8,58 @@
#include "lua.h"
#include "opcode.h"
-extern struct FB {
- char *kind;
- Object function;
- int nParams;
- int nResults;
-} luaI_fallBacks[];
-
-#define FB_ERROR 0
-#define FB_INDEX 1
-#define FB_GETTABLE 2
-#define FB_ARITH 3
-#define FB_ORDER 4
-#define FB_CONCAT 5
-#define FB_SETTABLE 6
-#define FB_GC 7
-#define FB_FUNCTION 8
-#define FB_GETGLOBAL 9
+/*
+* WARNING: if you change the order of this enumeration,
+* grep "ORDER IM"
+*/
+typedef enum {
+ IM_GETTABLE = 0,
+ IM_SETTABLE,
+ IM_INDEX,
+ IM_GETGLOBAL,
+ IM_SETGLOBAL,
+ IM_ADD,
+ IM_SUB,
+ IM_MUL,
+ IM_DIV,
+ IM_POW,
+ IM_UNM,
+ IM_LT,
+ IM_LE,
+ IM_GT,
+ IM_GE,
+ IM_CONCAT,
+ IM_GC,
+ IM_FUNCTION
+} IMS;
+
+#define IM_N 18
+
+
+extern struct IM {
+ TObject int_method[IM_N];
+} *luaI_IMtable;
+
+extern char *luaI_eventname[];
+
+#define luaI_getim(tag,event) (&luaI_IMtable[-(tag)].int_method[event])
+#define luaI_getimbyObj(o,e) (luaI_getim(luaI_efectivetag(o),(e)))
void luaI_setfallback (void);
-int luaI_ref (Object *object, int lock);
-Object *luaI_getref (int ref);
-void luaI_travlock (int (*fn)(Object *));
+int luaI_ref (TObject *object, int lock);
+TObject *luaI_getref (int ref);
+void luaI_travlock (int (*fn)(TObject *));
void luaI_invalidaterefs (void);
-char *luaI_travfallbacks (int (*fn)(Object *));
+char *luaI_travfallbacks (int (*fn)(TObject *));
+
+void luaI_settag (int tag, TObject *o);
+void luaI_realtag (int tag);
+TObject *luaI_geterrorim (void);
+int luaI_efectivetag (TObject *o);
+void luaI_settagmethod (void);
+void luaI_gettagmethod (void);
+void luaI_seterrormethod (void);
+void luaI_initfallbacks (void);
#endif
diff --git a/src/func.c b/src/func.c
index 0e15c2fc..36f7e19f 100644
--- a/src/func.c
+++ b/src/func.c
@@ -2,9 +2,10 @@
#include "luadebug.h"
#include "table.h"
-#include "mem.h"
+#include "luamem.h"
#include "func.h"
#include "opcode.h"
+#include "inout.h"
static TFunc *function_root = NULL;
@@ -23,7 +24,7 @@ void luaI_initTFunc (TFunc *f)
f->size = 0;
f->code = NULL;
f->lineDefined = 0;
- f->fileName = NULL;
+ f->fileName = lua_parsedfile;
f->locvars = NULL;
}
@@ -49,47 +50,56 @@ void luaI_freefunc (TFunc *f)
luaI_free (f);
}
+
+void luaI_funcfree (TFunc *l)
+{
+ while (l) {
+ TFunc *next = l->next;
+ luaI_freefunc(l);
+ l = next;
+ }
+}
+
/*
** Garbage collection function.
-** This function traverse the function list freeing unindexed functions
*/
-Long luaI_funccollector (void)
+TFunc *luaI_funccollector (long *acum)
{
TFunc *curr = function_root;
TFunc *prev = NULL;
- Long counter = 0;
- while (curr)
- {
+ TFunc *frees = NULL;
+ long counter = 0;
+ while (curr) {
TFunc *next = curr->next;
- if (!curr->marked)
- {
+ if (!curr->marked) {
if (prev == NULL)
function_root = next;
else
prev->next = next;
- luaI_freefunc (curr);
+ curr->next = frees;
+ frees = curr;
++counter;
}
- else
- {
+ else {
curr->marked = 0;
prev = curr;
}
curr = next;
}
- return counter;
+ *acum += counter;
+ return frees;
}
void lua_funcinfo (lua_Object func, char **filename, int *linedefined)
{
- Object *f = luaI_Address(func);
- if (f->tag == LUA_T_MARK || f->tag == LUA_T_FUNCTION)
+ TObject *f = luaI_Address(func);
+ if (f->ttype == LUA_T_MARK || f->ttype == LUA_T_FUNCTION)
{
*filename = f->value.tf->fileName;
*linedefined = f->value.tf->lineDefined;
}
- else if (f->tag == LUA_T_CMARK || f->tag == LUA_T_CFUNCTION)
+ else if (f->ttype == LUA_T_CMARK || f->ttype == LUA_T_CFUNCTION)
{
*filename = "(C)";
*linedefined = -1;
diff --git a/src/func.h b/src/func.h
index 2ee12103..c79bbb72 100644
--- a/src/func.h
+++ b/src/func.h
@@ -1,5 +1,5 @@
/*
-** $Id: func.h,v 1.8 1996/03/14 15:54:20 roberto Exp $
+** $Id: func.h,v 1.9 1997/05/14 18:38:29 roberto Exp $
*/
#ifndef func_h
@@ -30,7 +30,8 @@ typedef struct TFunc
LocVar *locvars;
} TFunc;
-Long luaI_funccollector (void);
+TFunc *luaI_funccollector (long *cont);
+void luaI_funcfree (TFunc *l);
void luaI_insertfunction (TFunc *f);
void luaI_initTFunc (TFunc *f);
diff --git a/src/hash.c b/src/hash.c
index 19ae7b12..b9276024 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -3,14 +3,15 @@
** hash manager for lua
*/
-char *rcs_hash="$Id: hash.c,v 2.32 1996/11/18 13:48:44 roberto Exp $";
+char *rcs_hash="$Id: hash.c,v 2.43 1997/05/14 18:38:29 roberto Exp $";
-#include "mem.h"
+#include "luamem.h"
#include "opcode.h"
#include "hash.h"
#include "table.h"
#include "lua.h"
+#include "auxlib.h"
#define nhash(t) ((t)->nhash)
@@ -24,13 +25,15 @@ char *rcs_hash="$Id: hash.c,v 2.32 1996/11/18 13:48:44 roberto Exp $";
#define REHASH_LIMIT 0.70 /* avoid more than this % full */
+#define TagDefault LUA_T_ARRAY;
+
static Hash *listhead = NULL;
/* hash dimensions values */
static Long dimensions[] =
- {3L, 5L, 7L, 11L, 23L, 47L, 97L, 197L, 397L, 797L, 1597L, 3203L, 6421L,
+ {5L, 11L, 23L, 47L, 97L, 197L, 397L, 797L, 1597L, 3203L, 6421L,
12853L, 25717L, 51437L, 102811L, 205619L, 411233L, 822433L,
1644817L, 3289613L, 6579211L, 13158023L, MAX_INT};
@@ -46,16 +49,32 @@ int luaI_redimension (int nhash)
return 0; /* to avoid warnings */
}
-static int hashindex (Hash *t, Object *ref) /* hash function */
+
+int lua_equalObj (TObject *t1, TObject *t2)
+{
+ if (ttype(t1) != ttype(t2)) return 0;
+ switch (ttype(t1))
+ {
+ case LUA_T_NIL: return 1;
+ case LUA_T_NUMBER: return nvalue(t1) == nvalue(t2);
+ case LUA_T_STRING: case LUA_T_USERDATA: return svalue(t1) == svalue(t2);
+ case LUA_T_ARRAY: return avalue(t1) == avalue(t2);
+ case LUA_T_FUNCTION: return t1->value.tf == t2->value.tf;
+ case LUA_T_CFUNCTION: return fvalue(t1) == fvalue(t2);
+ default:
+ lua_error("internal error in `lua_equalObj'");
+ return 0; /* UNREACHEABLE */
+ }
+}
+
+
+static long int hashindex (TObject *ref)
{
long int h;
- switch (tag(ref)) {
- case LUA_T_NIL:
- lua_error ("unexpected type to index table");
- h = 0; /* UNREACHEABLE */
+ switch (ttype(ref)) {
case LUA_T_NUMBER:
h = (long int)nvalue(ref); break;
- case LUA_T_STRING:
+ case LUA_T_STRING: case LUA_T_USERDATA:
h = tsvalue(ref)->hash; break;
case LUA_T_FUNCTION:
h = (IntPoint)ref->value.tf; break;
@@ -63,38 +82,29 @@ static int hashindex (Hash *t, Object *ref) /* hash function */
h = (IntPoint)fvalue(ref); break;
case LUA_T_ARRAY:
h = (IntPoint)avalue(ref); break;
- default: /* user data */
- h = (IntPoint)uvalue(ref); break;
+ default:
+ lua_error ("unexpected type to index table");
+ h = 0; /* UNREACHEABLE */
}
if (h < 0) h = -h;
- return h%nhash(t); /* make it a valid index */
+ return h;
}
-int lua_equalObj (Object *t1, Object *t2)
+
+static int present (Hash *t, TObject *key)
{
- if (tag(t1) != tag(t2)) return 0;
- switch (tag(t1))
- {
- case LUA_T_NIL: return 1;
- case LUA_T_NUMBER: return nvalue(t1) == nvalue(t2);
- case LUA_T_STRING: return svalue(t1) == svalue(t2);
- case LUA_T_ARRAY: return avalue(t1) == avalue(t2);
- case LUA_T_FUNCTION: return t1->value.tf == t2->value.tf;
- case LUA_T_CFUNCTION: return fvalue(t1) == fvalue(t2);
- default: return uvalue(t1) == uvalue(t2);
+ long int h = hashindex(key);
+ int tsize = nhash(t);
+ int h1 = h%tsize;
+ TObject *rf = ref(node(t, h1));
+ if (ttype(rf) != LUA_T_NIL && !lua_equalObj(key, rf)) {
+ int h2 = h%(tsize-2) + 1;
+ do {
+ h1 = (h1+h2)%tsize;
+ rf = ref(node(t, h1));
+ } while (ttype(rf) != LUA_T_NIL && !lua_equalObj(key, rf));
}
-}
-
-static int present (Hash *t, Object *ref)
-{
- int h = hashindex(t, ref);
- while (tag(ref(node(t, h))) != LUA_T_NIL)
- {
- if (lua_equalObj(ref, ref(node(t, h))))
- return h;
- h = (h+1) % nhash(t);
- }
- return h;
+ return h1;
}
@@ -106,7 +116,7 @@ static Node *hashnodecreate (int nhash)
int i;
Node *v = newvector (nhash, Node);
for (i=0; i<nhash; i++)
- tag(ref(&v[i])) = LUA_T_NIL;
+ ttype(ref(&v[i])) = LUA_T_NIL;
return v;
}
@@ -121,6 +131,7 @@ static Hash *hashcreate (int nhash)
nhash(t) = nhash;
nuse(t) = 0;
markarray(t) = 0;
+ t->htag = TagDefault;
return t;
}
@@ -146,7 +157,7 @@ void lua_hashmark (Hash *h)
for (i=0; i<nhash(h); i++)
{
Node *n = node(h,i);
- if (tag(ref(n)) != LUA_T_NIL)
+ if (ttype(ref(n)) != LUA_T_NIL)
{
lua_markobject(&n->ref);
lua_markobject(&n->val);
@@ -156,49 +167,50 @@ void lua_hashmark (Hash *h)
}
-static void call_fallbacks (void)
+void luaI_hashcallIM (Hash *l)
{
- Hash *curr_array;
- Object t;
- tag(&t) = LUA_T_ARRAY;
- for (curr_array = listhead; curr_array; curr_array = curr_array->next)
- if (markarray(curr_array) != 1)
- {
- avalue(&t) = curr_array;
- luaI_gcFB(&t);
- }
- tag(&t) = LUA_T_NIL;
- luaI_gcFB(&t); /* end of list */
+ TObject t;
+ ttype(&t) = LUA_T_ARRAY;
+ for (; l; l=l->next) {
+ avalue(&t) = l;
+ luaI_gcIM(&t);
+ }
}
-
-/*
-** Garbage collection to arrays
-** Delete all unmarked arrays.
-*/
-Long lua_hashcollector (void)
+
+void luaI_hashfree (Hash *frees)
{
- Hash *curr_array = listhead, *prev = NULL;
- Long counter = 0;
- call_fallbacks();
- while (curr_array != NULL)
- {
- Hash *next = curr_array->next;
- if (markarray(curr_array) != 1)
- {
- if (prev == NULL) listhead = next;
- else prev->next = next;
- hashdelete(curr_array);
- ++counter;
+ while (frees) {
+ Hash *next = frees->next;
+ hashdelete(frees);
+ frees = next;
}
- else
- {
- markarray(curr_array) = 0;
- prev = curr_array;
+}
+
+
+Hash *luaI_hashcollector (long *acum)
+{
+ Hash *curr_array = listhead, *prev = NULL, *frees = NULL;
+ long counter = 0;
+ while (curr_array != NULL) {
+ Hash *next = curr_array->next;
+ if (markarray(curr_array) != 1) {
+ if (prev == NULL)
+ listhead = next;
+ else
+ prev->next = next;
+ curr_array->next = frees;
+ frees = curr_array;
+ ++counter;
+ }
+ else {
+ markarray(curr_array) = 0;
+ prev = curr_array;
+ }
+ curr_array = next;
}
- curr_array = next;
- }
- return counter;
+ *acum += counter;
+ return frees;
}
@@ -220,32 +232,45 @@ Hash *lua_createarray (int nhash)
/*
-** Re-hash
+** Rehash:
+** Check if table has deleted slots. It it has, it does not need to
+** grow, since rehash will reuse them.
*/
+static int emptyslots (Hash *t)
+{
+ int i;
+ for (i=nhash(t)-1; i>=0; i--) {
+ Node *n = node(t, i);
+ if (ttype(ref(n)) != LUA_T_NIL && ttype(val(n)) == LUA_T_NIL)
+ return 1;
+ }
+ return 0;
+}
+
static void rehash (Hash *t)
{
- int i;
- int nold = nhash(t);
- Node *vold = nodevector(t);
- nhash(t) = luaI_redimension(nhash(t));
- nodevector(t) = hashnodecreate(nhash(t));
- for (i=0; i<nold; i++)
- {
- Node *n = vold+i;
- if (tag(ref(n)) != LUA_T_NIL && tag(val(n)) != LUA_T_NIL)
- *node(t, present(t, ref(n))) = *n; /* copy old node to new hahs */
- }
- luaI_free(vold);
+ int nold = nhash(t);
+ Node *vold = nodevector(t);
+ int i;
+ if (!emptyslots(t))
+ nhash(t) = luaI_redimension(nhash(t));
+ nodevector(t) = hashnodecreate(nhash(t));
+ for (i=0; i<nold; i++) {
+ Node *n = vold+i;
+ if (ttype(ref(n)) != LUA_T_NIL && ttype(val(n)) != LUA_T_NIL)
+ *node(t, present(t, ref(n))) = *n; /* copy old node to new hash */
+ }
+ luaI_free(vold);
}
/*
** If the hash node is present, return its pointer, otherwise return
** null.
*/
-Object *lua_hashget (Hash *t, Object *ref)
+TObject *lua_hashget (Hash *t, TObject *ref)
{
int h = present(t, ref);
- if (tag(ref(node(t, h))) != LUA_T_NIL) return val(node(t, h));
+ if (ttype(ref(node(t, h))) != LUA_T_NIL) return val(node(t, h));
else return NULL;
}
@@ -254,25 +279,19 @@ Object *lua_hashget (Hash *t, Object *ref)
** If the hash node is present, return its pointer, otherwise create a new
** node for the given reference and also return its pointer.
*/
-Object *lua_hashdefine (Hash *t, Object *ref)
+TObject *lua_hashdefine (Hash *t, TObject *ref)
{
- int h;
- Node *n;
- h = present(t, ref);
- n = node(t, h);
- if (tag(ref(n)) == LUA_T_NIL)
- {
- nuse(t)++;
- if ((float)nuse(t) > (float)nhash(t)*REHASH_LIMIT)
- {
- rehash(t);
- h = present(t, ref);
- n = node(t, h);
+ Node *n = node(t, present(t, ref));
+ if (ttype(ref(n)) == LUA_T_NIL) {
+ nuse(t)++;
+ if ((float)nuse(t) > (float)nhash(t)*REHASH_LIMIT) {
+ rehash(t);
+ n = node(t, present(t, ref));
+ }
+ *ref(n) = *ref;
+ ttype(val(n)) = LUA_T_NIL;
}
- *ref(n) = *ref;
- tag(val(n)) = LUA_T_NIL;
- }
- return (val(n));
+ return (val(n));
}
@@ -284,36 +303,30 @@ Object *lua_hashdefine (Hash *t, Object *ref)
*/
static void hashnext (Hash *t, int i)
{
- if (i >= nhash(t))
- return;
- while (tag(ref(node(t,i))) == LUA_T_NIL || tag(val(node(t,i))) == LUA_T_NIL)
- {
- if (++i >= nhash(t))
- return;
- }
- luaI_pushobject(ref(node(t,i)));
- luaI_pushobject(val(node(t,i)));
+ Node *n;
+ int tsize = nhash(t);
+ if (i >= tsize)
+ return;
+ n = node(t, i);
+ while (ttype(ref(n)) == LUA_T_NIL || ttype(val(n)) == LUA_T_NIL) {
+ if (++i >= tsize)
+ return;
+ n = node(t, i);
+ }
+ luaI_pushobject(ref(node(t,i)));
+ luaI_pushobject(val(node(t,i)));
}
void lua_next (void)
{
- Hash *t;
- lua_Object o = lua_getparam(1);
- lua_Object r = lua_getparam(2);
- if (o == LUA_NOOBJECT || r == LUA_NOOBJECT)
- lua_error ("too few arguments to function `next'");
- if (lua_getparam(3) != LUA_NOOBJECT)
- lua_error ("too many arguments to function `next'");
- if (!lua_istable(o))
- lua_error ("first argument of function `next' is not a table");
- t = avalue(luaI_Address(o));
- if (lua_isnil(r))
- {
- hashnext(t, 0);
- }
- else
- {
- int h = present (t, luaI_Address(r));
- hashnext(t, h+1);
- }
+ Hash *t;
+ lua_Object o = lua_getparam(1);
+ lua_Object r = lua_getparam(2);
+ luaL_arg_check(lua_istable(o), 1, "table expected");
+ luaL_arg_check(r != LUA_NOOBJECT, 2, "value expected");
+ t = avalue(luaI_Address(o));
+ if (lua_isnil(r))
+ hashnext(t, 0);
+ else
+ hashnext(t, present(t, luaI_Address(r))+1);
}
diff --git a/src/hash.h b/src/hash.h
index c2b52017..1bc758b7 100644
--- a/src/hash.h
+++ b/src/hash.h
@@ -1,7 +1,7 @@
/*
** hash.h
** hash manager for lua
-** $Id: hash.h,v 2.12 1996/05/06 14:30:27 roberto Exp $
+** $Id: hash.h,v 2.16 1997/05/14 18:38:29 roberto Exp $
*/
#ifndef hash_h
@@ -10,29 +10,30 @@
#include "types.h"
#include "opcode.h"
-typedef struct node
-{
- Object ref;
- Object val;
+typedef struct node {
+ TObject ref;
+ TObject val;
} Node;
-typedef struct Hash
-{
- struct Hash *next;
- Node *node;
- int nhash;
- int nuse;
- char mark;
+typedef struct Hash {
+ struct Hash *next;
+ Node *node;
+ int nhash;
+ int nuse;
+ int htag;
+ char mark;
} Hash;
-int lua_equalObj (Object *t1, Object *t2);
+int lua_equalObj (TObject *t1, TObject *t2);
int luaI_redimension (int nhash);
Hash *lua_createarray (int nhash);
void lua_hashmark (Hash *h);
-Long lua_hashcollector (void);
-Object *lua_hashget (Hash *t, Object *ref);
-Object *lua_hashdefine (Hash *t, Object *ref);
+Hash *luaI_hashcollector (long *count);
+void luaI_hashcallIM (Hash *l);
+void luaI_hashfree (Hash *frees);
+TObject *lua_hashget (Hash *t, TObject *ref);
+TObject *lua_hashdefine (Hash *t, TObject *ref);
void lua_next (void);
#endif
diff --git a/src/inout.c b/src/inout.c
index 0aa551c0..5d710610 100644
--- a/src/inout.c
+++ b/src/inout.c
@@ -5,18 +5,24 @@
** Also provides some predefined lua functions.
*/
-char *rcs_inout="$Id: inout.c,v 2.43 1996/09/25 12:57:22 roberto Exp $";
+char *rcs_inout="$Id: inout.c,v 2.69 1997/06/27 22:38:49 roberto Exp $";
#include <stdio.h>
#include <string.h>
+#include "auxlib.h"
+#include "fallback.h"
+#include "hash.h"
+#include "inout.h"
#include "lex.h"
+#include "lua.h"
+#include "luamem.h"
+#include "luamem.h"
#include "opcode.h"
-#include "inout.h"
#include "table.h"
#include "tree.h"
-#include "lua.h"
-#include "mem.h"
+#include "undump.h"
+#include "zio.h"
/* Exported variables */
@@ -24,92 +30,93 @@ Word lua_linenumber;
char *lua_parsedfile;
-static FILE *fp;
-static char *st;
+char *luaI_typenames[] = { /* ORDER LUA_T */
+ "userdata", "line", "cmark", "mark", "function",
+ "function", "table", "string", "number", "nil",
+ NULL
+};
-/*
-** Function to get the next character from the input file
-*/
-static int fileinput (void)
-{
- int c = fgetc(fp);
- return (c == EOF) ? 0 : c;
-}
-/*
-** Function to get the next character from the input string
-*/
-static int stringinput (void)
+
+void luaI_setparsedfile (char *name)
{
- return *st++;
+ lua_parsedfile = luaI_createfixedstring(name)->str;
}
-/*
-** Function to open a file to be input unit.
-** Return the file.
-*/
-FILE *lua_openfile (char *fn)
+
+int lua_doFILE (FILE *f, int bin)
{
- lua_setinput (fileinput);
- if (fn == NULL)
- {
- fp = stdin;
- fn = "(stdin)";
- }
- else
- fp = fopen (fn, "r");
- if (fp == NULL)
- return NULL;
- lua_parsedfile = luaI_createfixedstring(fn)->str;
- return fp;
-}
+ ZIO z;
+ luaZ_Fopen(&z, f);
+ if (bin)
+ return luaI_undump(&z);
+ else {
+ lua_setinput(&z);
+ return lua_domain();
+ }
+}
-/*
-** Function to close an opened file
-*/
-void lua_closefile (void)
+
+int lua_dofile (char *filename)
{
- if (fp != NULL && fp != stdin)
- {
- fclose (fp);
- fp = NULL;
- }
-}
+ int status;
+ int c;
+ FILE *f = (filename == NULL) ? stdin : fopen(filename, "r");
+ if (f == NULL)
+ return 2;
+ luaI_setparsedfile(filename?filename:"(stdin)");
+ c = fgetc(f);
+ ungetc(c, f);
+ if (c == ID_CHUNK) {
+ f = freopen(filename, "rb", f); /* set binary mode */
+ status = lua_doFILE(f, 1);
+ }
+ else {
+ if (c == '#')
+ while ((c=fgetc(f)) != '\n') /* skip first line */;
+ status = lua_doFILE(f, 0);
+ }
+ if (f != stdin)
+ fclose(f);
+ return status;
+}
+
+
-/*
-** Function to open a string to be input unit
-*/
#define SIZE_PREF 20 /* size of string prefix to appear in error messages */
-void lua_openstring (char *s)
-{
- char buff[SIZE_PREF+25];
- lua_setinput(stringinput);
- st = s;
- strcpy(buff, "(dostring) >> ");
- strncat(buff, s, SIZE_PREF);
- if (strlen(s) > SIZE_PREF) strcat(buff, "...");
- lua_parsedfile = luaI_createfixedstring(buff)->str;
-}
-/*
-** Function to close an opened string
-*/
-void lua_closestring (void)
+
+int lua_dobuffer (char *buff, int size)
{
+ int status;
+ ZIO z;
+ luaI_setparsedfile("(buffer)");
+ luaZ_mopen(&z, buff, size);
+ status = luaI_undump(&z);
+ return status;
}
-static void check_arg (int cond, char *func)
+int lua_dostring (char *str)
{
- if (!cond)
- {
- char buff[100];
- sprintf(buff, "incorrect argument to function `%s'", func);
- lua_error(buff);
- }
+ int status;
+ char buff[SIZE_PREF+25];
+ char *temp;
+ ZIO z;
+ if (str == NULL) return 1;
+ sprintf(buff, "(dostring) >> %.20s", str);
+ temp = strchr(buff, '\n');
+ if (temp) *temp = 0; /* end string after first line */
+ luaI_setparsedfile(buff);
+ luaZ_sopen(&z, str);
+ lua_setinput(&z);
+ status = lua_domain();
+ return status;
}
+
+
static int passresults (void)
{
int arg = 0;
@@ -118,30 +125,53 @@ static int passresults (void)
lua_pushobject(obj);
return arg-1;
}
+
+
+static void packresults (void)
+{
+ int arg = 0;
+ lua_Object obj;
+ lua_Object table = lua_createtable();
+ while ((obj = lua_getresult(++arg)) != LUA_NOOBJECT) {
+ lua_pushobject(table);
+ lua_pushnumber(arg);
+ lua_pushobject(obj);
+ lua_rawsettable();
+ }
+ lua_pushobject(table);
+ lua_pushstring("n");
+ lua_pushnumber(arg-1);
+ lua_rawsettable();
+ lua_pushobject(table); /* final result */
+}
/*
** Internal function: do a string
*/
-void lua_internaldostring (void)
+static void lua_internaldostring (void)
{
- lua_Object obj = lua_getparam (1);
- if (lua_isstring(obj) && lua_dostring(lua_getstring(obj)) == 0)
+ lua_Object err = lua_getparam(2);
+ if (err != LUA_NOOBJECT) { /* set new error method */
+ luaL_arg_check(lua_isnil(err) || lua_isfunction(err), 2,
+ "must be a valid error handler");
+ lua_pushobject(err);
+ err = lua_seterrormethod();
+ }
+ if (lua_dostring(luaL_check_string(1)) == 0)
if (passresults() == 0)
lua_pushuserdata(NULL); /* at least one result to signal no errors */
+ if (err != LUA_NOOBJECT) { /* restore old error method */
+ lua_pushobject(err);
+ lua_seterrormethod();
+ }
}
/*
** Internal function: do a file
*/
-void lua_internaldofile (void)
+static void lua_internaldofile (void)
{
- lua_Object obj = lua_getparam (1);
- char *fname = NULL;
- if (lua_isstring(obj))
- fname = lua_getstring(obj);
- else if (obj != LUA_NOOBJECT)
- lua_error("invalid argument to function `dofile'");
- /* else fname = NULL */
+ char *fname = luaL_opt_string(1, NULL);
if (lua_dofile(fname) == 0)
if (passresults() == 0)
lua_pushuserdata(NULL); /* at least one result to signal no errors */
@@ -150,36 +180,28 @@ void lua_internaldofile (void)
static char *tostring (lua_Object obj)
{
- char *buff = luaI_buffer(20);
- if (lua_isstring(obj)) /* get strings and numbers */
- return lua_getstring(obj);
- else switch(lua_type(obj))
- {
- case LUA_T_FUNCTION:
- sprintf(buff, "function: %p", (luaI_Address(obj))->value.tf);
- break;
- case LUA_T_CFUNCTION:
- sprintf(buff, "cfunction: %p", lua_getcfunction(obj));
- break;
- case LUA_T_ARRAY:
- sprintf(buff, "table: %p", avalue(luaI_Address(obj)));
- break;
- case LUA_T_NIL:
- sprintf(buff, "nil");
- break;
- default:
- sprintf(buff, "userdata: %p", lua_getuserdata(obj));
- break;
+ TObject *o = luaI_Address(obj);
+ switch (ttype(o)) {
+ case LUA_T_NUMBER: case LUA_T_STRING:
+ return lua_getstring(obj);
+ case LUA_T_ARRAY: case LUA_T_FUNCTION:
+ case LUA_T_CFUNCTION: case LUA_T_NIL:
+ return luaI_typenames[-ttype(o)];
+ case LUA_T_USERDATA: {
+ char *buff = luaI_buffer(30);
+ sprintf(buff, "userdata: %p", o->value.ts->u.v);
+ return buff;
+ }
+ default: return "<unknown object>";
}
- return buff;
}
-void luaI_tostring (void)
+static void luaI_tostring (void)
{
lua_pushstring(tostring(lua_getparam(1)));
}
-void luaI_print (void)
+static void luaI_print (void)
{
int i = 1;
lua_Object obj;
@@ -187,45 +209,18 @@ void luaI_print (void)
printf("%s\n", tostring(obj));
}
-/*
-** Internal function: return an object type.
-*/
-void luaI_type (void)
+static void luaI_type (void)
{
lua_Object o = lua_getparam(1);
- int t;
- if (o == LUA_NOOBJECT)
- lua_error("no parameter to function 'type'");
- t = lua_type(o);
- switch (t)
- {
- case LUA_T_NIL :
- lua_pushliteral("nil");
- break;
- case LUA_T_NUMBER :
- lua_pushliteral("number");
- break;
- case LUA_T_STRING :
- lua_pushliteral("string");
- break;
- case LUA_T_ARRAY :
- lua_pushliteral("table");
- break;
- case LUA_T_FUNCTION :
- case LUA_T_CFUNCTION :
- lua_pushliteral("function");
- break;
- default :
- lua_pushliteral("userdata");
- break;
- }
- lua_pushnumber(t);
+ luaL_arg_check(o != LUA_NOOBJECT, 1, "no argument");
+ lua_pushstring(luaI_typenames[-ttype(luaI_Address(o))]);
+ lua_pushnumber(lua_tag(o));
}
-
+
/*
** Internal function: convert an object to a number
*/
-void lua_obj2number (void)
+static void lua_obj2number (void)
{
lua_Object o = lua_getparam(1);
if (lua_isnumber(o))
@@ -233,68 +228,181 @@ void lua_obj2number (void)
}
-void luaI_error (void)
+static void luaI_error (void)
{
char *s = lua_getstring(lua_getparam(1));
if (s == NULL) s = "(no message)";
lua_error(s);
}
-void luaI_assert (void)
+static void luaI_assert (void)
{
lua_Object p = lua_getparam(1);
if (p == LUA_NOOBJECT || lua_isnil(p))
lua_error("assertion failed!");
}
-void luaI_setglobal (void)
+static void luaI_setglobal (void)
+{
+ lua_Object value = lua_getparam(2);
+ luaL_arg_check(value != LUA_NOOBJECT, 2, NULL);
+ lua_pushobject(value);
+ lua_setglobal(luaL_check_string(1));
+ lua_pushobject(value); /* return given value */
+}
+
+static void luaI_rawsetglobal (void)
{
- lua_Object name = lua_getparam(1);
lua_Object value = lua_getparam(2);
- check_arg(lua_isstring(name), "setglobal");
+ luaL_arg_check(value != LUA_NOOBJECT, 2, NULL);
lua_pushobject(value);
- lua_storeglobal(lua_getstring(name));
+ lua_rawsetglobal(luaL_check_string(1));
lua_pushobject(value); /* return given value */
}
-void luaI_getglobal (void)
+static void luaI_getglobal (void)
{
- lua_Object name = lua_getparam(1);
- check_arg(lua_isstring(name), "getglobal");
- lua_pushobject(lua_getglobal(lua_getstring(name)));
+ lua_pushobject(lua_getglobal(luaL_check_string(1)));
}
-#define MAXPARAMS 256
-void luaI_call (void)
+static void luaI_rawgetglobal (void)
+{
+ lua_pushobject(lua_rawgetglobal(luaL_check_string(1)));
+}
+
+static void luatag (void)
+{
+ lua_pushnumber(lua_tag(lua_getparam(1)));
+}
+
+
+static int getnarg (lua_Object table)
+{
+ lua_Object temp;
+ /* temp = table.n */
+ lua_pushobject(table); lua_pushstring("n"); temp = lua_gettable();
+ return (lua_isnumber(temp) ? lua_getnumber(temp) : MAX_WORD);
+}
+
+static void luaI_call (void)
{
lua_Object f = lua_getparam(1);
lua_Object arg = lua_getparam(2);
- lua_Object temp, params[MAXPARAMS];
+ int withtable = (strcmp(luaL_opt_string(3, ""), "pack") == 0);
int narg, i;
- check_arg(lua_istable(arg), "call");
- check_arg(lua_isfunction(f), "call");
- /* narg = arg.n */
- lua_pushobject(arg);
- lua_pushstring("n");
- temp = lua_getsubscript();
- narg = lua_isnumber(temp) ? lua_getnumber(temp) : MAXPARAMS+1;
- /* read arg[1...n] */
+ luaL_arg_check(lua_isfunction(f), 1, "function expected");
+ luaL_arg_check(lua_istable(arg), 2, "table expected");
+ narg = getnarg(arg);
+ /* push arg[1...n] */
for (i=0; i<narg; i++) {
- if (i>=MAXPARAMS)
- lua_error("argument list too long in function `call'");
- lua_pushobject(arg);
- lua_pushnumber(i+1);
- params[i] = lua_getsubscript();
- if (narg == MAXPARAMS+1 && lua_isnil(params[i])) {
- narg = i;
+ lua_Object temp;
+ /* temp = arg[i+1] */
+ lua_pushobject(arg); lua_pushnumber(i+1); temp = lua_gettable();
+ if (narg == MAX_WORD && lua_isnil(temp))
break;
- }
+ lua_pushobject(temp);
}
- /* push parameters and do the call */
- for (i=0; i<narg; i++)
- lua_pushobject(params[i]);
if (lua_callfunction(f))
lua_error(NULL);
+ else if (withtable)
+ packresults();
else
passresults();
}
+
+static void luaIl_settag (void)
+{
+ lua_Object o = lua_getparam(1);
+ luaL_arg_check(lua_istable(o), 1, "table expected");
+ lua_pushobject(o);
+ lua_settag(luaL_check_number(2));
+}
+
+static void luaIl_newtag (void)
+{
+ lua_pushnumber(lua_newtag());
+}
+
+static void rawgettable (void)
+{
+ lua_Object t = lua_getparam(1);
+ lua_Object i = lua_getparam(2);
+ luaL_arg_check(t != LUA_NOOBJECT, 1, NULL);
+ luaL_arg_check(i != LUA_NOOBJECT, 2, NULL);
+ lua_pushobject(t);
+ lua_pushobject(i);
+ lua_pushobject(lua_rawgettable());
+}
+
+static void rawsettable (void)
+{
+ lua_Object t = lua_getparam(1);
+ lua_Object i = lua_getparam(2);
+ lua_Object v = lua_getparam(3);
+ luaL_arg_check(t != LUA_NOOBJECT && i != LUA_NOOBJECT && v != LUA_NOOBJECT,
+ 0, NULL);
+ lua_pushobject(t);
+ lua_pushobject(i);
+ lua_pushobject(v);
+ lua_rawsettable();
+}
+
+
+static void luaI_collectgarbage (void)
+{
+ lua_pushnumber(lua_collectgarbage(luaL_opt_number(1, 0)));
+}
+
+
+/*
+** Internal functions
+*/
+static struct {
+ char *name;
+ lua_CFunction func;
+} int_funcs[] = {
+ {"assert", luaI_assert},
+ {"call", luaI_call},
+ {"collectgarbage", luaI_collectgarbage},
+ {"dofile", lua_internaldofile},
+ {"dostring", lua_internaldostring},
+ {"error", luaI_error},
+ {"getglobal", luaI_getglobal},
+ {"newtag", luaIl_newtag},
+ {"next", lua_next},
+ {"nextvar", luaI_nextvar},
+ {"print", luaI_print},
+ {"rawgetglobal", luaI_rawgetglobal},
+ {"rawgettable", rawgettable},
+ {"rawsetglobal", luaI_rawsetglobal},
+ {"rawsettable", rawsettable},
+ {"seterrormethod", luaI_seterrormethod},
+#if LUA_COMPAT2_5
+ {"setfallback", luaI_setfallback},
+#endif
+ {"setglobal", luaI_setglobal},
+ {"settagmethod", luaI_settagmethod},
+ {"gettagmethod", luaI_gettagmethod},
+ {"settag", luaIl_settag},
+ {"tonumber", lua_obj2number},
+ {"tostring", luaI_tostring},
+ {"tag", luatag},
+ {"type", luaI_type}
+};
+
+#define INTFUNCSIZE (sizeof(int_funcs)/sizeof(int_funcs[0]))
+
+
+void luaI_predefine (void)
+{
+ int i;
+ Word n;
+ for (i=0; i<INTFUNCSIZE; i++) {
+ n = luaI_findsymbolbyname(int_funcs[i].name);
+ s_ttype(n) = LUA_T_CFUNCTION; s_fvalue(n) = int_funcs[i].func;
+ }
+ n = luaI_findsymbolbyname("_VERSION");
+ s_ttype(n) = LUA_T_STRING; s_tsvalue(n) = lua_createstring(LUA_VERSION);
+}
+
+
diff --git a/src/inout.h b/src/inout.h
index a26f8e99..b2fb2cd2 100644
--- a/src/inout.h
+++ b/src/inout.h
@@ -1,5 +1,5 @@
/*
-** $Id: inout.h,v 1.16 1996/05/28 21:07:32 roberto Exp $
+** $Id: inout.h,v 1.20 1997/06/19 18:04:34 roberto Exp $
*/
@@ -14,21 +14,12 @@ extern Word lua_linenumber;
extern Word lua_debugline;
extern char *lua_parsedfile;
-FILE *lua_openfile (char *fn);
-void lua_closefile (void);
-void lua_openstring (char *s);
-void lua_closestring (void);
-
-void lua_internaldofile (void);
-void lua_internaldostring (void);
-void luaI_tostring (void);
-void luaI_print (void);
-void luaI_type (void);
-void lua_obj2number (void);
-void luaI_error (void);
-void luaI_assert (void);
-void luaI_setglobal (void);
-void luaI_getglobal (void);
-void luaI_call (void);
+void luaI_setparsedfile (char *name);
+
+void luaI_predefine (void);
+
+int lua_dobuffer (char *buff, int size);
+int lua_doFILE (FILE *f, int bin);
+
#endif
diff --git a/src/lex.c b/src/lex.c
index bd3233a0..5f19dd06 100644
--- a/src/lex.c
+++ b/src/lex.c
@@ -1,10 +1,11 @@
-char *rcs_lex = "$Id: lex.c,v 2.39 1996/11/08 19:08:30 roberto Exp $";
+char *rcs_lex = "$Id: lex.c,v 3.5 1997/06/16 16:50:22 roberto Exp $";
#include <ctype.h>
#include <string.h>
-#include "mem.h"
+#include "auxlib.h"
+#include "luamem.h"
#include "tree.h"
#include "table.h"
#include "lex.h"
@@ -12,33 +13,58 @@ char *rcs_lex = "$Id: lex.c,v 2.39 1996/11/08 19:08:30 roberto Exp $";
#include "luadebug.h"
#include "parser.h"
-#define MINBUFF 260
+#define MINBUFF 250
-#define next() (current = input())
+static int current; /* look ahead character */
+static ZIO *lex_z;
+
+
+#define next() (current = zgetc(lex_z))
#define save(x) (yytext[tokensize++] = (x))
#define save_and_next() (save(current), next())
-static int current; /* look ahead character */
-static Input input; /* input function */
+#define MAX_IFS 5
+
+/* "ifstate" keeps the state of each nested $if the lexical is dealing with. */
+
+static struct {
+ int elsepart; /* true if its in the $else part */
+ int condition; /* true if $if condition is true */
+ int skip; /* true if part must be skiped */
+} ifstate[MAX_IFS];
+
+static int iflevel; /* level of nested $if's */
-void lua_setinput (Input fn)
+void lua_setinput (ZIO *z)
{
current = '\n';
lua_linenumber = 0;
- input = fn;
+ iflevel = 0;
+ ifstate[0].skip = 0;
+ ifstate[0].elsepart = 1; /* to avoid a free $else */
+ lex_z = z;
}
-void luaI_syntaxerror (char *s)
+
+static void luaI_auxsyntaxerror (char *s)
+{
+ luaL_verror("%s;\n> at line %d in file %s",
+ s, lua_linenumber, lua_parsedfile);
+}
+
+static void luaI_auxsynterrbf (char *s, char *token)
{
- char msg[256];
- char *token = luaI_buffer(1);
if (token[0] == 0)
token = "<eof>";
- sprintf (msg,"%s;\n> last token read: \"%s\" at line %d in file %s",
+ luaL_verror("%s;\n> last token read: \"%s\" at line %d in file %s",
s, token, lua_linenumber, lua_parsedfile);
- lua_error (msg);
+}
+
+void luaI_syntaxerror (char *s)
+{
+ luaI_auxsynterrbf(s, luaI_buffer(1));
}
@@ -78,26 +104,122 @@ void luaI_addReserved (void)
}
}
-static int inclinenumber (int pragma_allowed)
+
+/*
+** Pragma handling
+*/
+
+#define PRAGMASIZE 20
+
+static void skipspace (void)
+{
+ while (current == ' ' || current == '\t') next();
+}
+
+
+static int checkcond (char *buff)
+{
+ static char *opts[] = {"nil", "1"};
+ int i = luaI_findstring(buff, opts);
+ if (i >= 0) return i;
+ else if (isalpha((unsigned char)buff[0]) || buff[0] == '_')
+ return luaI_globaldefined(buff);
+ else {
+ luaI_auxsynterrbf("invalid $if condition", buff);
+ return 0; /* to avoid warnings */
+ }
+}
+
+
+static void readname (char *buff)
+{
+ int i = 0;
+ skipspace();
+ while (isalnum((unsigned char)current) || current == '_') {
+ if (i >= PRAGMASIZE) {
+ buff[PRAGMASIZE] = 0;
+ luaI_auxsynterrbf("pragma too long", buff);
+ }
+ buff[i++] = current;
+ next();
+ }
+ buff[i] = 0;
+}
+
+
+static void inclinenumber (void);
+
+
+static void ifskip (void)
+{
+ while (ifstate[iflevel].skip) {
+ if (current == '\n')
+ inclinenumber();
+ else if (current == EOZ)
+ luaI_auxsyntaxerror("input ends inside a $if");
+ else next();
+ }
+}
+
+
+static void inclinenumber (void)
{
+ static char *pragmas [] =
+ {"debug", "nodebug", "endinput", "end", "ifnot", "if", "else", NULL};
+ next(); /* skip '\n' */
++lua_linenumber;
- if (pragma_allowed && current == '$') { /* is a pragma? */
- char *buff = luaI_buffer(MINBUFF+1);
- int i = 0;
+ if (current == '$') { /* is a pragma? */
+ char buff[PRAGMASIZE+1];
+ int ifnot = 0;
+ int skip = ifstate[iflevel].skip;
next(); /* skip $ */
- while (isalnum(current)) {
- if (i >= MINBUFF) luaI_syntaxerror("pragma too long");
- buff[i++] = current;
- next();
+ readname(buff);
+ switch (luaI_findstring(buff, pragmas)) {
+ case 0: /* debug */
+ if (!skip) lua_debug = 1;
+ break;
+ case 1: /* nodebug */
+ if (!skip) lua_debug = 0;
+ break;
+ case 2: /* endinput */
+ if (!skip) {
+ current = EOZ;
+ iflevel = 0; /* to allow $endinput inside a $if */
+ }
+ break;
+ case 3: /* end */
+ if (iflevel-- == 0)
+ luaI_auxsyntaxerror("unmatched $endif");
+ break;
+ case 4: /* ifnot */
+ ifnot = 1;
+ /* go through */
+ case 5: /* if */
+ if (iflevel == MAX_IFS-1)
+ luaI_auxsyntaxerror("too many nested `$ifs'");
+ readname(buff);
+ iflevel++;
+ ifstate[iflevel].elsepart = 0;
+ ifstate[iflevel].condition = checkcond(buff) ? !ifnot : ifnot;
+ ifstate[iflevel].skip = skip || !ifstate[iflevel].condition;
+ break;
+ case 6: /* else */
+ if (ifstate[iflevel].elsepart)
+ luaI_auxsyntaxerror("unmatched $else");
+ ifstate[iflevel].elsepart = 1;
+ ifstate[iflevel].skip =
+ ifstate[iflevel-1].skip || ifstate[iflevel].condition;
+ break;
+ default:
+ luaI_auxsynterrbf("invalid pragma", buff);
}
- buff[i] = 0;
- if (strcmp(buff, "debug") == 0)
- lua_debug = 1;
- else if (strcmp(buff, "nodebug") == 0)
- lua_debug = 0;
- else luaI_syntaxerror("invalid pragma");
+ skipspace();
+ if (current == '\n') /* pragma must end with a '\n' ... */
+ inclinenumber();
+ else if (current != EOZ) /* or eof */
+ luaI_auxsyntaxerror("invalid pragma format");
+ ifskip();
}
- return lua_linenumber;
}
static int read_long_string (char *yytext, int buffsize)
@@ -110,7 +232,7 @@ static int read_long_string (char *yytext, int buffsize)
yytext = luaI_buffer(buffsize *= 2);
switch (current)
{
- case 0:
+ case EOZ:
save(0);
return WRONGTOKEN;
case '[':
@@ -131,8 +253,8 @@ static int read_long_string (char *yytext, int buffsize)
}
continue;
case '\n':
- save_and_next();
- inclinenumber(0);
+ save('\n');
+ inclinenumber();
continue;
default:
save_and_next();
@@ -162,8 +284,8 @@ int luaY_lex (void)
switch (current)
{
case '\n':
- next();
- linelasttoken = inclinenumber(1);
+ inclinenumber();
+ linelasttoken = lua_linenumber;
continue;
case ' ': case '\t': case '\r': /* CR: to avoid problems with DOS */
@@ -173,7 +295,7 @@ int luaY_lex (void)
case '-':
save_and_next();
if (current != '-') return '-';
- do { next(); } while (current != '\n' && current != 0);
+ do { next(); } while (current != '\n' && current != EOZ);
continue;
case '[':
@@ -216,7 +338,7 @@ int luaY_lex (void)
yytext = luaI_buffer(buffsize *= 2);
switch (current)
{
- case 0:
+ case EOZ:
case '\n':
save(0);
return WRONGTOKEN;
@@ -227,7 +349,7 @@ int luaY_lex (void)
case 'n': save('\n'); next(); break;
case 't': save('\t'); next(); break;
case 'r': save('\r'); next(); break;
- case '\n': save_and_next(); inclinenumber(0); break;
+ case '\n': save('\n'); inclinenumber(); break;
default : save_and_next(); break;
}
break;
@@ -258,7 +380,9 @@ int luaY_lex (void)
case '_':
{
TaggedString *ts;
- do { save_and_next(); } while (isalnum(current) || current == '_');
+ do {
+ save_and_next();
+ } while (isalnum((unsigned char)current) || current == '_');
save(0);
ts = lua_createstring(yytext);
if (ts->marked > 2)
@@ -280,7 +404,7 @@ int luaY_lex (void)
}
else return CONC; /* .. */
}
- else if (!isdigit(current)) return '.';
+ else if (!isdigit((unsigned char)current)) return '.';
/* current is a digit: goes through to number */
a=0.0;
goto fraction;
@@ -291,7 +415,7 @@ int luaY_lex (void)
do {
a=10.0*a+(current-'0');
save_and_next();
- } while (isdigit(current));
+ } while (isdigit((unsigned char)current));
if (current == '.') {
save_and_next();
if (current == '.')
@@ -300,7 +424,7 @@ int luaY_lex (void)
}
fraction:
{ double da=0.1;
- while (isdigit(current))
+ while (isdigit((unsigned char)current))
{
a+=(current-'0')*da;
da/=10.0;
@@ -314,11 +438,12 @@ int luaY_lex (void)
save_and_next();
neg=(current=='-');
if (current == '+' || current == '-') save_and_next();
- if (!isdigit(current)) { save(0); return WRONGTOKEN; }
+ if (!isdigit((unsigned char)current)) {
+ save(0); return WRONGTOKEN; }
do {
e=10.0*e+(current-'0');
save_and_next();
- } while (isdigit(current));
+ } while (isdigit((unsigned char)current));
for (ea=neg?0.1:10.0; e>0; e>>=1)
{
if (e & 1) a*=ea;
@@ -330,11 +455,15 @@ int luaY_lex (void)
return NUMBER;
}
- default: /* also end of program (0) */
- {
+ case EOZ:
+ save(0);
+ if (iflevel > 0)
+ luaI_syntaxerror("missing $endif");
+ return 0;
+
+ default:
save_and_next();
return yytext[0];
- }
}
}
}
diff --git a/src/lex.h b/src/lex.h
index 5245d062..a942cf6d 100644
--- a/src/lex.h
+++ b/src/lex.h
@@ -1,16 +1,15 @@
/*
** lex.h
** TecCGraf - PUC-Rio
-** $Id: lex.h,v 1.3 1996/11/08 12:49:35 roberto Exp $
+** $Id: lex.h,v 1.4 1997/06/16 16:50:22 roberto Exp $
*/
#ifndef lex_h
#define lex_h
+#include "zio.h"
-typedef int (*Input) (void);
-
-void lua_setinput (Input fn);
+void lua_setinput (ZIO *z);
void luaI_syntaxerror (char *s);
int luaY_lex (void);
void luaI_addReserved (void);
diff --git a/src/lua.stx b/src/lua.stx
index 00752604..3a1bf62c 100644
--- a/src/lua.stx
+++ b/src/lua.stx
@@ -1,13 +1,13 @@
%{
-char *rcs_luastx = "$Id: lua.stx,v 3.41 1996/11/08 12:49:35 roberto Exp $";
+char *rcs_luastx = "$Id: lua.stx,v 3.47 1997/06/19 17:46:12 roberto Exp $";
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "luadebug.h"
-#include "mem.h"
+#include "luamem.h"
#include "lex.h"
#include "opcode.h"
#include "hash.h"
@@ -50,8 +50,6 @@ static TaggedString *localvar[MAXLOCALS]; /* store local variable names */
static int nlocalvar=0; /* number of local variables */
#define MAXFIELDS FIELDS_PER_FLUSH*2
-static Word fields[MAXFIELDS]; /* fieldnames to be flushed */
-static int nfields=0;
int lua_debug = 0;
@@ -103,22 +101,11 @@ static void code_word_at (Byte *p, int n)
memcpy(p, &w, sizeof(Word));
}
-static void push_field (Word name)
-{
- if (nfields < MAXFIELDS)
- fields[nfields++] = name;
- else
- yyerror ("too many fields in nested constructors");
-}
-
static void flush_record (int n)
{
- int i;
if (n == 0) return;
- code_byte(STORERECORD);
+ code_byte(STOREMAP);
code_byte(n);
- for (i=0; i<n; i++)
- code_word(fields[--nfields]);
}
static void flush_list (int m, int n)
@@ -161,11 +148,22 @@ static void add_varbuffer (Long var)
yyerror ("variable buffer overflow");
}
+static void code_string (Word w)
+{
+ code_byte(PUSHSTRING);
+ code_word(w);
+}
+
+static void code_constant (TaggedString *s)
+{
+ code_string(luaI_findconstant(s));
+}
+
static void code_number (float f)
{
- Word i = (Word)f;
- if (f == (float)i) /* f has an (short) integer value */
- {
+ Word i;
+ if (f >= 0 && f <= (float)MAX_WORD && (float)(i=(Word)f) == f) {
+ /* f has an (short) integer value */
if (i <= 2) code_byte(PUSH0 + i);
else if (i <= 255)
{
@@ -459,7 +457,7 @@ void lua_parse (TFunc *tf)
%% /* beginning of rules section */
-chunk : chunklist ret
+chunk : chunklist ret ;
chunklist : /* empty */
| chunklist stat sc
@@ -477,8 +475,7 @@ function : FUNCTION funcname body
funcname : var { $$ =$1; init_func(); }
| varexp ':' NAME
{
- code_byte(PUSHSTRING);
- code_word(luaI_findconstant($3));
+ code_constant($3);
$$ = 0; /* indexed variable */
init_func();
add_localvar(luaI_createfixedstring("self"));
@@ -492,7 +489,6 @@ body : '(' parlist ')' block END
luaI_initTFunc($$);
$$->size = pc;
$$->code = newvector(pc, Byte);
- $$->fileName = lua_parsedfile;
$$->lineDefined = $2;
memcpy($$->code, basepc, pc*sizeof(Byte));
if (lua_debug)
@@ -540,7 +536,7 @@ stat : IF expr1 THEN PrepJump block PrepJump elsepart END
lua_codeadjust (0);
}
}
- | functioncall
+ | functioncall {;}
| LOCAL localdeclist decinit
{ nlocalvar += $2;
adjust_mult_assign($2, $3, 0);
@@ -605,9 +601,8 @@ expr : '(' expr ')' { $$ = $2; }
| NUMBER { code_number($1); $$ = 0; }
| STRING
{
- code_byte(PUSHSTRING);
- code_word($1);
- $$ = 0;
+ code_string($1);
+ $$ = 0;
}
| NIL {code_byte(PUSHNIL); $$ = 0; }
| functioncall { $$ = $1; }
@@ -723,12 +718,13 @@ ffieldlist1 : ffield {$$=1;}
}
;
-ffield : NAME '=' expr1
- {
- push_field(luaI_findconstant($1));
- }
+ffield : ffieldkey '=' expr1
;
+ffieldkey : '[' expr1 ']'
+ | NAME { code_constant($1); }
+ ;
+
lfieldlist : /* empty */ { $$ = 0; }
| lfieldlist1 lastcomma { $$ = $1; }
;
@@ -762,9 +758,8 @@ var : singlevar { $$ = $1; }
}
| varexp '.' NAME
{
- code_byte(PUSHSTRING);
- code_word(luaI_findconstant($3));
- $$ = 0; /* indexed variable */
+ code_constant($3);
+ $$ = 0; /* indexed variable */
}
;
diff --git a/src/luac/dump.c b/src/luac/dump.c
index 656cc293..73839f38 100644
--- a/src/luac/dump.c
+++ b/src/luac/dump.c
@@ -3,15 +3,13 @@
** thread and save bytecodes to file
*/
-char* rcs_dump="$Id: dump.c,v 1.17 1996/11/18 11:18:29 lhf Exp $";
+char* rcs_dump="$Id: dump.c,v 1.20 1997/06/19 14:56:04 lhf Exp $";
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "luac.h"
-static TFunc* lastF=NULL; /* list of functions seen in code */
-
static int SawVar(int i, int at)
{
int old=VarLoc(i);
@@ -34,7 +32,7 @@ static void ThreadCode(Byte* code, Byte* end)
for (i=0; i<lua_nconstant; i++) StrLoc(i)=0;
for (p=code; p!=end;)
{
- OpCode op=(OpCode)*p;
+ int op=*p;
int at=p-code+1;
switch (op)
{
@@ -89,6 +87,8 @@ static void ThreadCode(Byte* code, Byte* end)
case STORELIST0:
case ADJUST:
case RETCODE:
+ case VARARGS:
+ case STOREMAP:
p+=2;
break;
case PUSHWORD:
@@ -107,8 +107,11 @@ static void ThreadCode(Byte* code, Byte* end)
case PUSHFLOAT:
p+=5; /* assumes sizeof(float)==4 */
break;
- case PUSHSELF:
+ case PUSHFUNCTION:
+ p+=sizeof(TFunc*)+1;
+ break;
case PUSHSTRING:
+ case PUSHSELF:
{
Word w;
p++;
@@ -117,16 +120,6 @@ static void ThreadCode(Byte* code, Byte* end)
memcpy(p-2,&w,sizeof(w));
break;
}
- case PUSHFUNCTION:
- {
- TFunc* tf;
- p++;
- get_code(tf,p);
- tf->marked=at;
- tf->next=NULL; /* TODO: remove? */
- lastF=lastF->next=tf;
- break;
- }
case PUSHGLOBAL:
case STOREGLOBAL:
{
@@ -151,8 +144,8 @@ static void ThreadCode(Byte* code, Byte* end)
}
break;
}
- default:
- fprintf(stderr,"luac: cannot happen: opcode=%d",*p);
+ default: /* cannot happen */
+ fprintf(stderr,"luac: bad opcode %d at %d\n",*p,(int)(p-code));
exit(1);
break;
}
@@ -186,7 +179,7 @@ static void DumpString(char* s, FILE* D)
int n=strlen(s)+1;
if ((Word)n != n)
{
- fprintf(stderr,"luac: string too long: \"%.32s...\"\n",s);
+ fprintf(stderr,"luac: string too long (%d bytes): \"%.32s...\"\n",n,s);
exit(1);
}
DumpWord(n,D);
@@ -220,7 +213,6 @@ static void DumpStrings(FILE* D)
void DumpFunction(TFunc* tf, FILE* D)
{
- lastF=tf;
ThreadCode(tf->code,tf->code+tf->size);
fputc(ID_FUN,D);
DumpSize(tf->size,D);
diff --git a/src/luac/luac.c b/src/luac/luac.c
index 7546c1bb..713da1fb 100644
--- a/src/luac/luac.c
+++ b/src/luac/luac.c
@@ -1,25 +1,39 @@
/*
** luac.c
-** lua compiler (saves bytecodes to files)
+** lua compiler (saves bytecodes to files; also list binary files)
*/
-char* rcs_luac="$Id: luac.c,v 1.18 1996/11/16 20:14:23 lhf Exp $";
+char* rcs_luac="$Id: luac.c,v 1.23 1997/06/20 20:34:04 lhf Exp $";
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "luac.h"
+#include "lex.h"
+#include "zio.h"
static void compile(char* filename);
+static void undump(char* filename);
static int listing=0; /* list bytecodes? */
static int dumping=1; /* dump bytecodes? */
+static int undumping=0; /* undump bytecodes? */
static FILE* D; /* output file */
static void usage(void)
{
- fprintf(stderr,"usage: luac [-dlpv] [-o output] file ...\n");
- exit(0);
+ fprintf(stderr,
+ "usage: luac [-c | -u] [-d] [-l] [-p] [-q] [-v] [-o output] file ...\n"
+ " -c\tcompile (default)\n"
+ " -u\tundump\n"
+ " -d\tgenerate debugging information\n"
+ " -l\tlist (default for -u)\n"
+ " -o\toutput file for -c (default \"luac.out\")\n"
+ " -p\tparse only\n"
+ " -q\tquiet (default for -c)\n"
+ " -v\tshow version information\n"
+ );
+ exit(1);
}
#define IS(s) (strcmp(argv[i],s)==0)
@@ -34,6 +48,11 @@ int main(int argc, char* argv[])
break;
else if (IS("-")) /* use stdin */
break;
+ else if (IS("-c")) /* compile (and dump) */
+ {
+ dumping=1;
+ undumping=0;
+ }
else if (IS("-d")) /* debug */
lua_debug=1;
else if (IS("-l")) /* list */
@@ -42,6 +61,14 @@ int main(int argc, char* argv[])
d=argv[++i];
else if (IS("-p")) /* parse only (for timing purposes) */
dumping=0;
+ else if (IS("-q")) /* quiet */
+ listing=0;
+ else if (IS("-u")) /* undump */
+ {
+ dumping=0;
+ undumping=1;
+ listing=1;
+ }
else if (IS("-v")) /* show version */
printf("%s %s\n(written by %s)\n\n",LUA_VERSION,LUA_COPYRIGHT,LUA_AUTHORS);
else /* unknown option */
@@ -50,56 +77,114 @@ int main(int argc, char* argv[])
--i; /* fake new argv[0] */
argc-=i;
argv+=i;
- if (argc<2) usage();
- for (i=1; i<argc; i++)
- if (IS(d))
+ if (dumping)
+ {
+ if (argc<2) usage();
+ for (i=1; i<argc; i++) /* play safe with output file */
+ if (IS(d))
+ {
+ fprintf(stderr,"luac: will not overwrite input file \"%s\"\n",d);
+ exit(1);
+ }
+ D=fopen(d,"wb"); /* must open in binary mode */
+ if (D==NULL)
{
- fprintf(stderr,"luac: will not overwrite input file \"%s\"\n",d);
+ fprintf(stderr,"luac: cannot open ");
+ perror(d);
exit(1);
}
- D=(dumping) ? fopen(d,"wb") : stdout; /* must open in binary mode */
- if (D==NULL)
+ for (i=1; i<argc; i++) compile(IS("-")? NULL : argv[i]);
+ fclose(D);
+ }
+ if (undumping)
{
- fprintf(stderr,"luac: cannot open ");
- perror(d);
- exit(1);
+ if (argc<2)
+ undump("luac.out");
+ else
+ for (i=1; i<argc; i++) undump(IS("-")? NULL : argv[i]);
}
- for (i=1; i<argc; i++) compile(IS("-")? NULL : argv[i]);
- fclose(D);
return 0;
}
-static void do_dump(TFunc* tf) /* only for tf==main */
+static void do_dump(TFunc* Main)
{
- if (dumping) DumpHeader(D);
- while (tf!=NULL)
+ TFunc* tf;
+ LinkFunctions(Main);
+ if (listing)
+ {
+ for (tf=Main; tf!=NULL; tf=tf->next) PrintFunction(tf,Main);
+ }
+ if (dumping)
{
- TFunc* nf;
- if (listing) PrintFunction(tf);
- if (dumping) DumpFunction(tf,D);
- nf=tf->next; /* list only built after first main */
+ DumpHeader(D);
+ for (tf=Main; tf!=NULL; tf=tf->next) DumpFunction(tf,D);
+ }
+ for (tf=Main; tf!=NULL; )
+ {
+ TFunc* nf=tf->next;
luaI_freefunc(tf);
tf=nf;
}
}
-static void do_compile(void)
+static void do_compile(ZIO* z)
{
TFunc* tf=new(TFunc);
+ lua_setinput(z);
luaI_initTFunc(tf);
- tf->fileName = lua_parsedfile;
+ tf->fileName=lua_parsedfile;
lua_parse(tf);
do_dump(tf);
}
static void compile(char* filename)
{
- if (lua_openfile(filename)==NULL)
+ FILE* f= (filename==NULL) ? stdin : fopen(filename, "r");
+ if (f==NULL)
+ {
+ fprintf(stderr,"luac: cannot open ");
+ perror(filename);
+ exit(1);
+ }
+ else
+ {
+ ZIO z;
+ zFopen(&z,f);
+ luaI_setparsedfile(filename?filename:"(stdin)");
+ do_compile(&z);
+ fclose(f);
+ }
+}
+
+static void do_undump(ZIO* z)
+{
+ TFunc* Main;
+ while ((Main=luaI_undump1(z)))
+ {
+ if (listing)
+ {
+ TFunc* tf;
+ for (tf=Main; tf!=NULL; tf=tf->next)
+ PrintFunction(tf,Main);
+ }
+ luaI_freefunc(Main); /* TODO: free others */
+ }
+}
+
+static void undump(char* filename)
+{
+ FILE* f= (filename==NULL) ? stdin : fopen(filename, "rb");
+ if (f==NULL)
{
fprintf(stderr,"luac: cannot open ");
perror(filename);
exit(1);
}
- do_compile();
- lua_closefile();
+ else
+ {
+ ZIO z;
+ zFopen(&z,f);
+ do_undump(&z);
+ fclose(f);
+ }
}
diff --git a/src/luac/luac.h b/src/luac/luac.h
index ceb311b8..815824ca 100644
--- a/src/luac/luac.h
+++ b/src/luac/luac.h
@@ -1,24 +1,25 @@
/*
** luac.h
** definitions for luac compiler
-** $Id: luac.h,v 1.5 1996/03/08 21:41:47 lhf Exp $
+** $Id: luac.h,v 1.8 1997/06/19 17:32:08 lhf Exp $
*/
#include "inout.h"
-#include "mem.h"
+#include "luamem.h"
#include "opcode.h"
#include "table.h"
#include "undump.h"
#define VarStr(i) (lua_table[i].varname->str)
-#define VarLoc(i) (lua_table[i].varname->varindex)
+#define VarLoc(i) (lua_table[i].varname->u.s.varindex)
#define StrStr(i) (lua_constant[i]->str)
-#define StrLoc(i) (lua_constant[i]->constindex)
+#define StrLoc(i) (lua_constant[i]->u.s.constindex)
extern Word lua_ntable;
extern Word lua_nconstant;
extern int lua_debug;
+void LinkFunctions(TFunc* tf);
+void PrintFunction(TFunc* tf, TFunc* Main);
void DumpHeader(FILE* D);
void DumpFunction(TFunc* tf, FILE* D);
-void PrintFunction(TFunc* tf);
diff --git a/src/luac/print.c b/src/luac/print.c
index 0e1d2569..fb7bf8a7 100644
--- a/src/luac/print.c
+++ b/src/luac/print.c
@@ -3,7 +3,7 @@
** print bytecodes
*/
-char* rcs_print="$Id: print.c,v 1.11 1996/11/18 11:24:16 lhf Exp $";
+char* rcs_print="$Id: print.c,v 1.17 1997/06/25 17:07:28 lhf Exp $";
#include <stdio.h>
#include <stdlib.h>
@@ -11,20 +11,134 @@ char* rcs_print="$Id: print.c,v 1.11 1996/11/18 11:24:16 lhf Exp $";
#include "luac.h"
#include "print.h"
-static LocVar* V=NULL;
-
-static char* LocStr(int i)
+void LinkFunctions(TFunc* m)
{
- if (V==NULL) return ""; else return V[i].varname->str;
+ static TFunc* lastF; /* list of functions seen in code */
+ Byte* code=m->code;
+ Byte* end=code+m->size;
+ Byte* p;
+ if (IsMain(m)) lastF=m;
+ for (p=code; p!=end;)
+ {
+ int op=*p;
+ int at=p-code+1;
+ switch (op)
+ {
+ case PUSHNIL:
+ case PUSH0:
+ case PUSH1:
+ case PUSH2:
+ case PUSHLOCAL0:
+ case PUSHLOCAL1:
+ case PUSHLOCAL2:
+ case PUSHLOCAL3:
+ case PUSHLOCAL4:
+ case PUSHLOCAL5:
+ case PUSHLOCAL6:
+ case PUSHLOCAL7:
+ case PUSHLOCAL8:
+ case PUSHLOCAL9:
+ case PUSHINDEXED:
+ case STORELOCAL0:
+ case STORELOCAL1:
+ case STORELOCAL2:
+ case STORELOCAL3:
+ case STORELOCAL4:
+ case STORELOCAL5:
+ case STORELOCAL6:
+ case STORELOCAL7:
+ case STORELOCAL8:
+ case STORELOCAL9:
+ case STOREINDEXED0:
+ case ADJUST0:
+ case EQOP:
+ case LTOP:
+ case LEOP:
+ case GTOP:
+ case GEOP:
+ case ADDOP:
+ case SUBOP:
+ case MULTOP:
+ case DIVOP:
+ case POWOP:
+ case CONCOP:
+ case MINUSOP:
+ case NOTOP:
+ case POP:
+ case RETCODE0:
+ p++;
+ break;
+ case PUSHBYTE:
+ case PUSHLOCAL:
+ case STORELOCAL:
+ case STOREINDEXED:
+ case STORELIST0:
+ case ADJUST:
+ case RETCODE:
+ case VARARGS:
+ case STOREMAP:
+ p+=2;
+ break;
+ case PUSHWORD:
+ case PUSHSTRING:
+ case PUSHGLOBAL:
+ case PUSHSELF:
+ case STOREGLOBAL:
+ case CREATEARRAY:
+ case ONTJMP:
+ case ONFJMP:
+ case JMP:
+ case UPJMP:
+ case IFFJMP:
+ case IFFUPJMP:
+ case CALLFUNC:
+ case SETLINE:
+ case STORELIST:
+ p+=3;
+ break;
+ case PUSHFLOAT:
+ p+=5; /* assumes sizeof(float)==4 */
+ break;
+ case PUSHFUNCTION:
+ {
+ TFunc* tf;
+ p++;
+ get_code(tf,p);
+ tf->marked=at;
+ tf->next=NULL; /* TODO: remove? */
+ lastF=lastF->next=tf;
+ break;
+ }
+ case STORERECORD:
+ {
+ int n=*++p;
+ p+=2*n+1;
+ break;
+ }
+ default: /* cannot happen */
+ fprintf(stderr,"luac: bad opcode %d at %d\n",*p,(int)(p-code));
+ exit(1);
+ break;
+ }
+ }
}
-static void PrintCode(Byte* code, Byte* end)
+#define LocStr(i) luaI_getlocalname(tf,i+1,line)
+
+static void PrintCode(TFunc* tf)
{
+ Byte* code=tf->code;
+ Byte* end=code+tf->size;
Byte* p;
+ int line=0;
for (p=code; p!=end;)
{
- OpCode op=(OpCode)*p;
- if (op>SETLINE) op=SETLINE+1;
+ int op=*p;
+ if (op>=NOPCODES)
+ {
+ fprintf(stderr,"luac: bad opcode %d at %d\n",op,(int)(p-code));
+ exit(1);
+ }
printf("%6d\t%s",(int)(p-code),OpCodeName[op]);
switch (op)
{
@@ -64,7 +178,7 @@ static void PrintCode(Byte* code, Byte* end)
case PUSHLOCAL9:
{
int i=op-PUSHLOCAL0;
- printf("\t%d\t; %s",i,LocStr(i));
+ if (tf->locvars) printf("\t\t; %s",LocStr(i));
p++;
break;
}
@@ -80,7 +194,7 @@ static void PrintCode(Byte* code, Byte* end)
case STORELOCAL9:
{
int i=op-STORELOCAL0;
- printf("\t%d\t; %s",i,LocStr(i));
+ if (tf->locvars) printf("\t\t; %s",LocStr(i));
p++;
break;
}
@@ -88,7 +202,7 @@ static void PrintCode(Byte* code, Byte* end)
case STORELOCAL:
{
int i=*(p+1);
- printf("\t%d\t; %s",i,LocStr(i));
+ if (tf->locvars) printf("\t%d\t; %s",i,LocStr(i));
p+=2;
break;
}
@@ -97,23 +211,40 @@ static void PrintCode(Byte* code, Byte* end)
case STORELIST0:
case ADJUST:
case RETCODE:
+ case VARARGS:
+ case STOREMAP:
printf("\t%d",*(p+1));
p+=2;
break;
case PUSHWORD:
case CREATEARRAY:
+ case SETLINE:
+ {
+ Word w;
+ p++;
+ get_word(w,p);
+ printf("\t%d",w);
+ if (op==SETLINE) line=w;
+ break;
+ }
case ONTJMP:
case ONFJMP:
case JMP:
- case UPJMP:
case IFFJMP:
+ { /* suggested by Norman Ramsey <nr@cs.virginia.edu> */
+ Word w;
+ p++;
+ get_word(w,p);
+ printf("\t%d\t\t; to %d",w,(int)(p-code)+w);
+ break;
+ }
+ case UPJMP:
case IFFUPJMP:
- case SETLINE:
- {
+ { /* suggested by Norman Ramsey <nr@cs.virginia.edu> */
Word w;
p++;
get_word(w,p);
- printf("\t%d",w);
+ printf("\t%d\t\t; to %d",w,(int)(p-code)-w);
break;
}
case PUSHFLOAT:
@@ -170,7 +301,8 @@ static void PrintCode(Byte* code, Byte* end)
break;
}
default:
- printf("\tcannot happen: opcode=%d",*p);
+ printf("\tcannot happen: opcode=%d\n",*p);
+ fprintf(stderr,"luac: bad opcode %d at %d\n",op,(int)(p-code));
exit(1);
break;
}
@@ -178,13 +310,74 @@ static void PrintCode(Byte* code, Byte* end)
}
}
-void PrintFunction(TFunc* tf)
+#undef LocStr
+
+static void PrintLocals(LocVar* v, int n)
{
+ int i=0;
+ if (v==NULL || v->varname==NULL) return;
+ if (n>0)
+ {
+ printf("parameters:");
+ for (i=0; i<n; v++,i++) printf(" %s[%d@%d]",v->varname->str,i,v->line);
+ printf("\n");
+ }
+ if (v->varname!=NULL)
+ {
+ printf("locals:");
+ for (; v->line>=0; v++)
+ {
+ if (v->varname==NULL)
+#if 0
+ printf(" %s[%d@%d]","*",--i,v->line);
+#else
+ --i;
+#endif
+ else
+ printf(" %s[%d@%d]",v->varname->str,i++,v->line);
+ }
+ printf("\n");
+ }
+}
+
+void PrintFunction(TFunc* tf, TFunc* Main)
+{
+ int n=0;
if (IsMain(tf))
printf("\nmain of \"%s\" (%d bytes at %p)\n",tf->fileName,tf->size,tf);
else
- printf("\nfunction \"%s\":%d (%d bytes at %p); used at main+%d\n",
+ {
+ Byte* p;
+ p=tf->code; /* get number of parameters */
+ while (*p==SETLINE) p+=3;
+ if (*p==ADJUST) n=p[1];
+ p=Main->code+tf->marked+sizeof(TFunc*);
+ printf("\nfunction ");
+ switch (*p) /* try to get name */
+ {
+ case STOREGLOBAL:
+ {
+ Word w;
+ p++; get_word(w,p); printf("%s defined at ",VarStr(w));
+ break;
+ }
+ case STOREINDEXED0: /* try method definition */
+ {
+ if (p[-11]==PUSHGLOBAL && p[-8]==PUSHSTRING)
+ {
+ Word w;
+ Byte* op=p;
+ int c=(tf->locvars && n>0 && strcmp(tf->locvars->varname->str,"self")==0)
+ ? ':' : '.';
+ p=op-11; p++; get_word(w,p); printf("%s%c",VarStr(w),c);
+ p=op-8; p++; get_word(w,p); printf("%s defined at ",StrStr(w));
+ }
+ break;
+ }
+ }
+ printf("\"%s\":%d (%d bytes at %p); used at main+%d\n",
tf->fileName,tf->lineDefined,tf->size,tf,tf->marked);
- V=tf->locvars;
- PrintCode(tf->code,tf->code+tf->size);
+ }
+ PrintLocals(tf->locvars,n);
+ PrintCode(tf);
}
diff --git a/src/luac/print.h b/src/luac/print.h
index 31e2bb89..00e344ca 100644
--- a/src/luac/print.h
+++ b/src/luac/print.h
@@ -1,10 +1,10 @@
/*
** print.h
** opcode names
-** $Id: print.h,v 1.1 1996/02/23 19:04:13 lhf Exp $
+** $Id: print.h,v 1.3 1997/04/14 14:42:50 lhf Exp $
*/
-static char* OpCodeName[]={ /* attention: same order as enum in opcode.h */
+static char* OpCodeName[]={ /* ATTENTION: same order as enum in opcode.h */
"PUSHNIL",
"PUSH0",
"PUSH1",
@@ -72,5 +72,8 @@ static char* OpCodeName[]={ /* attention: same order as enum in opcode.h */
"RETCODE0",
"RETCODE",
"SETLINE",
- ""
+ "VARARGS",
+ "STOREMAP"
};
+
+#define NOPCODES (sizeof(OpCodeName)/sizeof(OpCodeName[0]))
diff --git a/src/luamem.c b/src/luamem.c
new file mode 100644
index 00000000..e4cdd6d9
--- /dev/null
+++ b/src/luamem.c
@@ -0,0 +1,159 @@
+/*
+** mem.c
+** TecCGraf - PUC-Rio
+*/
+
+char *rcs_luamem = "$Id: luamem.c,v 1.16 1997/04/01 21:23:20 roberto Exp $";
+
+#include <stdlib.h>
+
+#include "luamem.h"
+#include "lua.h"
+
+
+#define DEBUG 0
+
+#if !DEBUG
+
+void luaI_free (void *block)
+{
+ if (block)
+ {
+ *((char *)block) = -1; /* to catch errors */
+ free(block);
+ }
+}
+
+
+void *luaI_realloc (void *oldblock, unsigned long size)
+{
+ void *block;
+ size_t s = (size_t)size;
+ if (s != size)
+ lua_error("Allocation Error: Block too big");
+ block = oldblock ? realloc(oldblock, s) : malloc(s);
+ if (block == NULL)
+ lua_error(memEM);
+ return block;
+}
+
+
+int luaI_growvector (void **block, unsigned long nelems, int size,
+ char *errormsg, unsigned long limit)
+{
+ if (nelems >= limit)
+ lua_error(errormsg);
+ nelems = (nelems == 0) ? 20 : nelems*2;
+ if (nelems > limit)
+ nelems = limit;
+ *block = luaI_realloc(*block, nelems*size);
+ return (int)nelems;
+}
+
+
+void* luaI_buffer (unsigned long size)
+{
+ static unsigned long buffsize = 0;
+ static char* buffer = NULL;
+ if (size > buffsize)
+ buffer = luaI_realloc(buffer, buffsize=size);
+ return buffer;
+}
+
+#else
+/* DEBUG */
+
+#include <stdio.h>
+
+# define assert(ex) {if (!(ex)){(void)fprintf(stderr, \
+ "Assertion failed: file \"%s\", line %d\n", __FILE__, __LINE__);exit(1);}}
+
+#define MARK 55
+
+static unsigned long numblocks = 0;
+static unsigned long totalmem = 0;
+
+
+static void message (void)
+{
+#define inrange(x,y) ((x) < (((y)*3)/2) && (x) > (((y)*2)/3))
+ static int count = 0;
+ static unsigned long lastnumblocks = 0;
+ static unsigned long lasttotalmem = 0;
+ if (!inrange(numblocks, lastnumblocks) || !inrange(totalmem, lasttotalmem)
+ || count++ >= 5000)
+ {
+ fprintf(stderr,"blocks = %lu mem = %luK\n", numblocks, totalmem/1000);
+ count = 0;
+ lastnumblocks = numblocks;
+ lasttotalmem = totalmem;
+ }
+}
+
+
+void luaI_free (void *block)
+{
+ if (block)
+ {
+ unsigned long *b = (unsigned long *)block - 1;
+ unsigned long size = *b;
+ assert(*(((char *)b)+size+sizeof(unsigned long)) == MARK);
+ numblocks--;
+ totalmem -= size;
+ free(b);
+ message();
+ }
+}
+
+
+void *luaI_realloc (void *oldblock, unsigned long size)
+{
+ unsigned long *block;
+ unsigned long realsize = sizeof(unsigned long)+size+sizeof(char);
+ if (realsize != (size_t)realsize)
+ lua_error("Allocation Error: Block too big");
+ if (oldblock)
+ {
+ unsigned long *b = (unsigned long *)oldblock - 1;
+ unsigned long oldsize = *b;
+ assert(*(((char *)b)+oldsize+sizeof(unsigned long)) == MARK);
+ totalmem -= oldsize;
+ numblocks--;
+ block = (unsigned long *)realloc(b, realsize);
+ }
+ else
+ block = (unsigned long *)malloc(realsize);
+ if (block == NULL)
+ lua_error("not enough memory");
+ totalmem += size;
+ numblocks++;
+ *block = size;
+ *(((char *)block)+size+sizeof(unsigned long)) = MARK;
+ message();
+ return block+1;
+}
+
+
+int luaI_growvector (void **block, unsigned long nelems, int size,
+ char *errormsg, unsigned long limit)
+{
+ if (nelems >= limit)
+ lua_error(errormsg);
+ nelems = (nelems == 0) ? 20 : nelems*2;
+ if (nelems > limit)
+ nelems = limit;
+ *block = luaI_realloc(*block, nelems*size);
+ return (int)nelems;
+}
+
+
+void* luaI_buffer (unsigned long size)
+{
+ static unsigned long buffsize = 0;
+ static char* buffer = NULL;
+ if (size > buffsize)
+ buffer = luaI_realloc(buffer, buffsize=size);
+ return buffer;
+}
+
+#endif
diff --git a/src/mem.h b/src/luamem.h
index 86f024fc..86b7c8f0 100644
--- a/src/mem.h
+++ b/src/luamem.h
@@ -1,11 +1,11 @@
/*
** mem.c
** memory manager for lua
-** $Id: mem.h,v 1.8 1996/05/24 14:31:10 roberto Exp $
+** $Id: luamem.h,v 1.9 1997/03/31 14:10:11 roberto Exp $
*/
-#ifndef mem_h
-#define mem_h
+#ifndef luamem_h
+#define luamem_h
#ifndef NULL
#define NULL 0
diff --git a/src/mem.c b/src/mem.c
deleted file mode 100644
index 4e3bcc52..00000000
--- a/src/mem.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-** mem.c
-** TecCGraf - PUC-Rio
-*/
-
-char *rcs_mem = "$Id: mem.c,v 1.13 1996/05/24 14:31:10 roberto Exp $";
-
-#include <stdlib.h>
-
-#include "mem.h"
-#include "lua.h"
-
-
-void luaI_free (void *block)
-{
- if (block)
- {
- *((int *)block) = -1; /* to catch errors */
- free(block);
- }
-}
-
-
-void *luaI_realloc (void *oldblock, unsigned long size)
-{
- void *block;
- size_t s = (size_t)size;
- if (s != size)
- lua_error("Allocation Error: Block too big");
- block = oldblock ? realloc(oldblock, s) : malloc(s);
- if (block == NULL)
- lua_error(memEM);
- return block;
-}
-
-
-int luaI_growvector (void **block, unsigned long nelems, int size,
- char *errormsg, unsigned long limit)
-{
- if (nelems >= limit)
- lua_error(errormsg);
- nelems = (nelems == 0) ? 20 : nelems*2;
- if (nelems > limit)
- nelems = limit;
- *block = luaI_realloc(*block, nelems*size);
- return (int)nelems;
-}
-
-
-void* luaI_buffer (unsigned long size)
-{
- static unsigned long buffsize = 0;
- static char* buffer = NULL;
- if (size > buffsize)
- buffer = luaI_realloc(buffer, buffsize=size);
- return buffer;
-}
-
diff --git a/src/opcode.c b/src/opcode.c
index c3bcf54c..ea18f9ea 100644
--- a/src/opcode.c
+++ b/src/opcode.c
@@ -3,7 +3,7 @@
** TecCGraf - PUC-Rio
*/
-char *rcs_opcode="$Id: opcode.c,v 3.77 1996/11/18 13:48:44 roberto Exp $";
+char *rcs_opcode="$Id: opcode.c,v 4.15 1997/06/26 21:40:57 roberto Exp $";
#include <setjmp.h>
#include <stdio.h>
@@ -11,17 +11,18 @@ char *rcs_opcode="$Id: opcode.c,v 3.77 1996/11/18 13:48:44 roberto Exp $";
#include <stdlib.h>
#include "luadebug.h"
-#include "mem.h"
+#include "luamem.h"
#include "opcode.h"
#include "hash.h"
#include "inout.h"
#include "table.h"
#include "lua.h"
#include "fallback.h"
-#include "undump.h"
+#include "auxlib.h"
+#include "lex.h"
-#define tonumber(o) ((tag(o) != LUA_T_NUMBER) && (lua_tonumber(o) != 0))
-#define tostring(o) ((tag(o) != LUA_T_STRING) && (lua_tostring(o) != 0))
+#define tonumber(o) ((ttype(o) != LUA_T_NUMBER) && (lua_tonumber(o) != 0))
+#define tostring(o) ((ttype(o) != LUA_T_STRING) && (lua_tostring(o) != 0))
#define STACK_SIZE 128
@@ -32,14 +33,14 @@ char *rcs_opcode="$Id: opcode.c,v 3.77 1996/11/18 13:48:44 roberto Exp $";
typedef int StkId; /* index to stack elements */
-static Object initial_stack;
+static TObject initial_stack;
-static Object *stackLimit = &initial_stack+1;
-static Object *stack = &initial_stack;
-static Object *top = &initial_stack;
+static TObject *stackLimit = &initial_stack+1;
+static TObject *stack = &initial_stack;
+static TObject *top = &initial_stack;
-/* macros to convert from lua_Object to (Object *) and back */
+/* macros to convert from lua_Object to (TObject *) and back */
#define Address(lo) ((lo)+stack-1)
#define Ref(st) ((st)-stack+1)
@@ -51,13 +52,13 @@ static Object *top = &initial_stack;
#define incr_top if (++top >= stackLimit) growstack()
struct C_Lua_Stack {
- StkId base; /* when Lua calls C or C calls Lua, points to */
- /* the first slot after the last parameter. */
- int num; /* when Lua calls C, has the number of parameters; */
- /* when C calls Lua, has the number of results. */
+ StkId base; /* when Lua calls C or C calls Lua, points to */
+ /* the first slot after the last parameter. */
+ StkId lua2C; /* points to first element of "array" lua2C */
+ int num; /* size of "array" lua2C */
};
-static struct C_Lua_Stack CLS_current = {0, 0};
+static struct C_Lua_Stack CLS_current = {0, 0, 0};
static jmp_buf *errorJmp = NULL; /* current error recover point */
@@ -72,7 +73,7 @@ static void do_call (StkId base, int nResults);
-Object *luaI_Address (lua_Object o)
+TObject *luaI_Address (lua_Object o)
{
return Address(o);
}
@@ -84,7 +85,7 @@ Object *luaI_Address (lua_Object o)
static void lua_initstack (void)
{
Long maxstack = STACK_SIZE;
- stack = newvector(maxstack, Object);
+ stack = newvector(maxstack, TObject);
stackLimit = stack+maxstack;
top = stack;
*(top++) = initial_stack;
@@ -105,7 +106,7 @@ static void growstack (void)
static int limit = STACK_LIMIT;
StkId t = top-stack;
Long stacksize = stackLimit - stack;
- stacksize = growvector(&stack, stacksize, Object, stackEM, limit+100);
+ stacksize = growvector(&stack, stacksize, TObject, stackEM, limit+100);
stackLimit = stack+stacksize;
top = stack + t;
if (stacksize >= limit)
@@ -134,16 +135,16 @@ static char *lua_strconc (char *l, char *r)
** Convert, if possible, to a number object.
** Return 0 if success, not 0 if error.
*/
-static int lua_tonumber (Object *obj)
+static int lua_tonumber (TObject *obj)
{
float t;
char c;
- if (tag(obj) != LUA_T_STRING)
+ if (ttype(obj) != LUA_T_STRING)
return 1;
else if (sscanf(svalue(obj), "%f %c",&t, &c) == 1)
{
nvalue(obj) = t;
- tag(obj) = LUA_T_NUMBER;
+ ttype(obj) = LUA_T_NUMBER;
return 0;
}
else
@@ -152,39 +153,54 @@ static int lua_tonumber (Object *obj)
/*
-** Convert, if possible, to a string tag
+** Convert, if possible, to a string ttype
** Return 0 in success or not 0 on error.
*/
-static int lua_tostring (Object *obj)
+static int lua_tostring (TObject *obj)
{
- char s[256];
- if (tag(obj) != LUA_T_NUMBER)
- return 1;
- if ((int) nvalue(obj) == nvalue(obj))
- sprintf (s, "%d", (int) nvalue(obj));
- else
- sprintf (s, "%g", nvalue(obj));
- tsvalue(obj) = lua_createstring(s);
- tag(obj) = LUA_T_STRING;
- return 0;
+ if (ttype(obj) != LUA_T_NUMBER)
+ return 1;
+ else {
+ char s[60];
+ real f = nvalue(obj);
+ int i;
+ if ((real)(-MAX_INT) <= f && f <= (real)MAX_INT && (real)(i=(int)f) == f)
+ sprintf (s, "%d", i);
+ else
+ sprintf (s, "%g", nvalue(obj));
+ tsvalue(obj) = lua_createstring(s);
+ ttype(obj) = LUA_T_STRING;
+ return 0;
+ }
}
/*
** Adjust stack. Set top to the given value, pushing NILs if needed.
*/
-static void adjust_top (StkId newtop)
+static void adjust_top_aux (StkId newtop)
{
- Object *nt;
+ TObject *nt;
lua_checkstack(stack+newtop);
nt = stack+newtop; /* warning: previous call may change stack */
- while (top < nt) tag(top++) = LUA_T_NIL;
- top = nt; /* top could be bigger than newtop */
+ while (top < nt) ttype(top++) = LUA_T_NIL;
}
+
+#define adjust_top(newtop) { if (newtop <= top-stack) \
+ top = stack+newtop; \
+ else adjust_top_aux(newtop); }
+
#define adjustC(nParams) adjust_top(CLS_current.base+nParams)
+static void checkCparams (int nParams)
+{
+ if (top-stack < CLS_current.base+nParams)
+ lua_error("API error - wrong number of arguments in C2lua stack");
+}
+
+
/*
** Open a hole below "nelems" from the top.
*/
@@ -197,13 +213,37 @@ static void open_stack (int nelems)
}
+static lua_Object put_luaObject (TObject *o)
+{
+ open_stack((top-stack)-CLS_current.base);
+ stack[CLS_current.base++] = *o;
+ return CLS_current.base; /* this is +1 real position (see Ref) */
+}
+
+
+static lua_Object put_luaObjectonTop (void)
+{
+ open_stack((top-stack)-CLS_current.base);
+ stack[CLS_current.base++] = *(--top);
+ return CLS_current.base; /* this is +1 real position (see Ref) */
+}
+
+
+lua_Object lua_pop (void)
+{
+ checkCparams(1);
+ return put_luaObjectonTop();
+}
+
+
+
/*
** call Line hook
*/
static void lineHook (int line)
{
struct C_Lua_Stack oldCLS = CLS_current;
- StkId old_top = CLS_current.base = top-stack;
+ StkId old_top = CLS_current.lua2C = CLS_current.base = top-stack;
CLS_current.num = 0;
(*lua_linehook)(line);
top = stack+old_top;
@@ -218,13 +258,13 @@ static void lineHook (int line)
static void callHook (StkId base, lua_Type type, int isreturn)
{
struct C_Lua_Stack oldCLS = CLS_current;
- StkId old_top = CLS_current.base = top-stack;
+ StkId old_top = CLS_current.lua2C = CLS_current.base = top-stack;
CLS_current.num = 0;
if (isreturn)
(*lua_callhook)(LUA_NOOBJECT, "(return)", 0);
else
{
- Object *f = stack+base-1;
+ TObject *f = stack+base-1;
if (type == LUA_T_MARK)
(*lua_callhook)(Ref(f), f->value.tf->fileName, f->value.tf->lineDefined);
else
@@ -246,6 +286,7 @@ static StkId callC (lua_CFunction func, StkId base)
StkId firstResult;
CLS_current.num = (top-stack) - base;
/* incorporate parameters on the stack */
+ CLS_current.lua2C = base;
CLS_current.base = base+CLS_current.num; /* == top-stack */
if (lua_callhook)
callHook(base, LUA_T_CMARK, 0);
@@ -257,15 +298,11 @@ static StkId callC (lua_CFunction func, StkId base)
return firstResult;
}
-/*
-** Call the specified fallback, putting it on the stack below its arguments
-*/
-static void callFB (int fb)
+static void callIM (TObject *f, int nParams, int nResults)
{
- int nParams = luaI_fallBacks[fb].nParams;
open_stack(nParams);
- *(top-nParams-1) = luaI_fallBacks[fb].function;
- do_call((top-stack)-nParams, luaI_fallBacks[fb].nResults);
+ *(top-nParams-1) = *f;
+ do_call((top-stack)-nParams, nResults);
}
@@ -278,28 +315,28 @@ static void callFB (int fb)
static void do_call (StkId base, int nResults)
{
StkId firstResult;
- Object *func = stack+base-1;
+ TObject *func = stack+base-1;
int i;
- if (tag(func) == LUA_T_CFUNCTION)
- {
- tag(func) = LUA_T_CMARK;
+ if (ttype(func) == LUA_T_CFUNCTION) {
+ ttype(func) = LUA_T_CMARK;
firstResult = callC(fvalue(func), base);
}
- else if (tag(func) == LUA_T_FUNCTION)
- {
- tag(func) = LUA_T_MARK;
+ else if (ttype(func) == LUA_T_FUNCTION) {
+ ttype(func) = LUA_T_MARK;
firstResult = lua_execute(func->value.tf->code, base);
}
- else
- { /* func is not a function */
- /* Call the fallback for invalid functions */
+ else { /* func is not a function */
+ /* Check the tag method for invalid functions */
+ TObject *im = luaI_getimbyObj(func, IM_FUNCTION);
+ if (ttype(im) == LUA_T_NIL)
+ lua_error("call expression not a function");
open_stack((top-stack)-(base-1));
- stack[base-1] = luaI_fallBacks[FB_FUNCTION].function;
+ stack[base-1] = *im;
do_call(base, nResults);
return;
}
/* adjust the number of results */
- if (nResults != MULT_RET && top - (stack+firstResult) != nResults)
+ if (nResults != MULT_RET)
adjust_top(firstResult+nResults);
/* move results to base-1 (to erase parameters and function) */
base--;
@@ -316,58 +353,110 @@ static void do_call (StkId base, int nResults)
*/
static void pushsubscript (void)
{
- if (tag(top-2) != LUA_T_ARRAY)
- callFB(FB_GETTABLE);
- else
- {
- Object *h = lua_hashget(avalue(top-2), top-1);
- if (h == NULL || tag(h) == LUA_T_NIL)
- callFB(FB_INDEX);
- else
- {
- --top;
- *(top-1) = *h;
+ TObject *im;
+ if (ttype(top-2) != LUA_T_ARRAY) /* not a table, get "gettable" method */
+ im = luaI_getimbyObj(top-2, IM_GETTABLE);
+ else { /* object is a table... */
+ int tg = (top-2)->value.a->htag;
+ im = luaI_getim(tg, IM_GETTABLE);
+ if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */
+ TObject *h = lua_hashget(avalue(top-2), top-1);
+ if (h != NULL && ttype(h) != LUA_T_NIL) {
+ --top;
+ *(top-1) = *h;
+ }
+ else if (ttype(im=luaI_getim(tg, IM_INDEX)) != LUA_T_NIL)
+ callIM(im, 2, 1);
+ else {
+ --top;
+ ttype(top-1) = LUA_T_NIL;
+ }
+ return;
}
+ /* else it has a "gettable" method, go through to next command */
+ }
+ /* object is not a table, or it has a "gettable" method */
+ if (ttype(im) != LUA_T_NIL)
+ callIM(im, 2, 1);
+ else
+ lua_error("indexed expression not a table");
+}
+
+
+lua_Object lua_rawgettable (void)
+{
+ checkCparams(2);
+ if (ttype(top-2) != LUA_T_ARRAY)
+ lua_error("indexed expression not a table in raw gettable");
+ else {
+ TObject *h = lua_hashget(avalue(top-2), top-1);
+ --top;
+ if (h != NULL)
+ *(top-1) = *h;
+ else
+ ttype(top-1) = LUA_T_NIL;
}
+ return put_luaObjectonTop();
}
/*
** Function to store indexed based on values at the top
+** mode = 0: raw store (without internal methods)
+** mode = 1: normal store (with internal methods)
+** mode = 2: "deep stack" store (with internal methods)
*/
-static void storesubscript (void)
+static void storesubscript (TObject *t, int mode)
{
- if (tag(top-3) != LUA_T_ARRAY)
- callFB(FB_SETTABLE);
- else
- {
- Object *h = lua_hashdefine (avalue(top-3), top-2);
- *h = *(top-1);
- top -= 3;
- }
+ TObject *im = (mode == 0) ? NULL : luaI_getimbyObj(t, IM_SETTABLE);
+ if (ttype(t) == LUA_T_ARRAY && (im == NULL || ttype(im) == LUA_T_NIL)) {
+ TObject *h = lua_hashdefine(avalue(t), t+1);
+ *h = *(top-1);
+ top -= (mode == 2) ? 1 : 3;
+ }
+ else { /* object is not a table, and/or has a specific "settable" method */
+ if (im && ttype(im) != LUA_T_NIL) {
+ if (mode == 2) {
+ lua_checkstack(top+2);
+ *(top+1) = *(top-1);
+ *(top) = *(t+1);
+ *(top-1) = *t;
+ top += 2;
+ }
+ callIM(im, 3, 0);
+ }
+ else
+ lua_error("indexed expression not a table");
+ }
}
static void getglobal (Word n)
{
- *top = lua_table[n].object;
- incr_top;
- if (tag(top-1) == LUA_T_NIL)
- { /* must call getglobal fallback */
- tag(top-1) = LUA_T_STRING;
- tsvalue(top-1) = lua_table[n].varname;
- callFB(FB_GETGLOBAL);
+ TObject *value = &lua_table[n].object;
+ TObject *im = luaI_getimbyObj(value, IM_GETGLOBAL);
+ if (ttype(im) == LUA_T_NIL) { /* default behavior */
+ *top = *value;
+ incr_top;
}
+ else {
+ ttype(top) = LUA_T_STRING;
+ tsvalue(top) = lua_table[n].varname;
+ incr_top;
+ *top = *value;
+ incr_top;
+ callIM(im, 2, 1);
+ }
}
/*
** Traverse all objects on stack
*/
-void lua_travstack (int (*fn)(Object *))
+void lua_travstack (int (*fn)(TObject *))
{
- Object *o;
- for (o = top-1; o >= stack; o--)
- fn (o);
+ StkId i;
+ for (i = (top-1)-stack; i>=0; i--)
+ fn (stack+i);
}
@@ -377,8 +466,11 @@ void lua_travstack (int (*fn)(Object *))
static void lua_message (char *s)
{
- lua_pushstring(s);
- callFB(FB_ERROR);
+ TObject *im = luaI_geterrorim();
+ if (ttype(im) != LUA_T_NIL) {
+ lua_pushstring(s);
+ callIM(im, 1, 0);
+ }
}
/*
@@ -399,25 +491,25 @@ void lua_error (char *s)
lua_Function lua_stackedfunction (int level)
{
- Object *p = top;
- while (--p >= stack)
- if (p->tag == LUA_T_MARK || p->tag == LUA_T_CMARK)
+ StkId i;
+ for (i = (top-1)-stack; i>=0; i--)
+ if (stack[i].ttype == LUA_T_MARK || stack[i].ttype == LUA_T_CMARK)
if (level-- == 0)
- return Ref(p);
+ return Ref(stack+i);
return LUA_NOOBJECT;
}
int lua_currentline (lua_Function func)
{
- Object *f = Address(func);
- return (f+1 < top && (f+1)->tag == LUA_T_LINE) ? (f+1)->value.i : -1;
+ TObject *f = Address(func);
+ return (f+1 < top && (f+1)->ttype == LUA_T_LINE) ? (f+1)->value.i : -1;
}
lua_Object lua_getlocal (lua_Function func, int local_number, char **name)
{
- Object *f = luaI_Address(func);
+ TObject *f = luaI_Address(func);
*name = luaI_getlocalname(f->value.tf, local_number, lua_currentline(func));
if (*name)
{
@@ -431,9 +523,9 @@ lua_Object lua_getlocal (lua_Function func, int local_number, char **name)
int lua_setlocal (lua_Function func, int local_number)
{
- Object *f = Address(func);
+ TObject *f = Address(func);
char *name = luaI_getlocalname(f->value.tf, local_number, lua_currentline(func));
- adjustC(1);
+ checkCparams(1);
--top;
if (name)
{
@@ -446,6 +538,29 @@ int lua_setlocal (lua_Function func, int local_number)
return 0;
}
+/*
+** Call the function at CLS_current.base, and incorporate results on
+** the Lua2C structure.
+*/
+static void do_callinc (int nResults)
+{
+ StkId base = CLS_current.base;
+ do_call(base+1, nResults);
+ CLS_current.lua2C = base; /* position of the new results */
+ CLS_current.num = (top-stack) - base; /* number of results */
+ CLS_current.base = base + CLS_current.num; /* incorporate results on stack */
+}
+
+
+static void do_unprotectedrun (lua_CFunction f, int nParams, int nResults)
+{
+ StkId base = (top-stack)-nParams;
+ open_stack(nParams);
+ stack[base].ttype = LUA_T_CFUNCTION;
+ stack[base].value.f = f;
+ do_call(base+1, nResults);
+}
+
/*
** Execute a protected call. Assumes that function is at CLS_current.base and
@@ -458,15 +573,11 @@ static int do_protectedrun (int nResults)
struct C_Lua_Stack oldCLS = CLS_current;
jmp_buf *oldErr = errorJmp;
errorJmp = &myErrorJmp;
- if (setjmp(myErrorJmp) == 0)
- {
- do_call(CLS_current.base+1, nResults);
- CLS_current.num = (top-stack) - CLS_current.base; /* number of results */
- CLS_current.base += CLS_current.num; /* incorporate results on the stack */
+ if (setjmp(myErrorJmp) == 0) {
+ do_callinc(nResults);
status = 0;
}
- else
- { /* an error occurred: restore CLS_current and top */
+ else { /* an error occurred: restore CLS_current and top */
CLS_current = oldCLS;
top = stack+CLS_current.base;
status = 1;
@@ -479,13 +590,14 @@ int luaI_dorun (TFunc *tf)
{
int status;
adjustC(1); /* one slot for the pseudo-function */
- stack[CLS_current.base].tag = LUA_T_FUNCTION;
+ stack[CLS_current.base].ttype = LUA_T_FUNCTION;
stack[CLS_current.base].value.tf = tf;
status = do_protectedrun(MULT_RET);
return status;
}
-static int do_protectedmain (void)
+
+int lua_domain (void)
{
TFunc tf;
int status;
@@ -493,23 +605,21 @@ static int do_protectedmain (void)
jmp_buf *oldErr = errorJmp;
errorJmp = &myErrorJmp;
luaI_initTFunc(&tf);
- tf.fileName = lua_parsedfile;
- if (setjmp(myErrorJmp) == 0)
- {
+ if (setjmp(myErrorJmp) == 0) {
lua_parse(&tf);
- status = luaI_dorun(&tf);
+ status = 0;
}
- else
- {
- status = 1;
+ else {
adjustC(0); /* erase extra slot */
+ status = 1;
}
+ if (status == 0)
+ status = luaI_dorun(&tf);
errorJmp = oldErr;
luaI_free(tf.code);
return status;
}
-
/*
** Execute the given lua function. Return 0 on success or 1 on error.
*/
@@ -526,71 +636,31 @@ int lua_callfunction (lua_Object function)
}
-int lua_call (char *funcname)
+lua_Object lua_gettagmethod (int tag, char *event)
{
- Word n = luaI_findsymbolbyname(funcname);
- open_stack((top-stack)-CLS_current.base);
- stack[CLS_current.base] = s_object(n);
- return do_protectedrun(MULT_RET);
+ lua_pushnumber(tag);
+ lua_pushstring(event);
+ do_unprotectedrun(luaI_gettagmethod, 2, 1);
+ return put_luaObjectonTop();
}
-
-/*
-** Open file, generate opcode and execute global statement. Return 0 on
-** success or non 0 on error.
-*/
-int lua_dofile (char *filename)
+lua_Object lua_settagmethod (int tag, char *event)
{
- int status;
- int c;
- FILE *f = lua_openfile(filename);
- if (f == NULL)
- return 2;
- c = fgetc(f);
- ungetc(c, f);
- if (c == ID_CHUNK) {
- f = freopen(filename, "rb", f); /* set binary mode */
- status = luaI_undump(f);
- }
- else {
- if (c == '#')
- while ((c=fgetc(f)) != '\n') /* skip first line */;
- status = do_protectedmain();
- }
- lua_closefile();
- return status;
+ TObject newmethod;
+ checkCparams(1);
+ newmethod = *(--top);
+ lua_pushnumber(tag);
+ lua_pushstring(event);
+ *top = newmethod; incr_top;
+ do_unprotectedrun(luaI_settagmethod, 3, 1);
+ return put_luaObjectonTop();
}
-/*
-** Generate opcode stored on string and execute global statement. Return 0 on
-** success or non 0 on error.
-*/
-int lua_dostring (char *str)
+lua_Object lua_seterrormethod (void)
{
- int status;
- if (str == NULL)
- return 1;
- lua_openstring(str);
- status = do_protectedmain();
- lua_closestring();
- return status;
-}
-
-
-/*
-** API: set a function as a fallback
-*/
-lua_Object lua_setfallback (char *name, lua_CFunction fallback)
-{
- adjustC(1); /* one slot for the pseudo-function */
- stack[CLS_current.base].tag = LUA_T_CFUNCTION;
- stack[CLS_current.base].value.f = luaI_setfallback;
- lua_pushstring(name);
- lua_pushcfunction(fallback);
- if (do_protectedrun(1) == 0)
- return (Ref(top-1));
- else
- return LUA_NOOBJECT;
+ checkCparams(1);
+ do_unprotectedrun(luaI_seterrormethod, 1, 1);
+ return put_luaObjectonTop();
}
@@ -598,12 +668,11 @@ lua_Object lua_setfallback (char *name, lua_CFunction fallback)
** API: receives on the stack the table and the index.
** returns the value.
*/
-lua_Object lua_getsubscript (void)
+lua_Object lua_gettable (void)
{
- adjustC(2);
+ checkCparams(2);
pushsubscript();
- CLS_current.base++; /* incorporate object in the stack */
- return (Ref(top-1));
+ return put_luaObjectonTop();
}
@@ -633,13 +702,25 @@ void lua_endblock (void)
adjustC(0);
}
+void lua_settag (int tag)
+{
+ checkCparams(1);
+ luaI_settag(tag, --top);
+}
+
/*
** API: receives on the stack the table, the index, and the new value.
*/
-void lua_storesubscript (void)
+void lua_settable (void)
{
- adjustC(3);
- storesubscript();
+ checkCparams(3);
+ storesubscript(top-3, 1);
+}
+
+void lua_rawsettable (void)
+{
+ checkCparams(3);
+ storesubscript(top-3, 0);
}
/*
@@ -647,40 +728,59 @@ void lua_storesubscript (void)
*/
lua_Object lua_createtable (void)
{
- adjustC(0);
- avalue(top) = lua_createarray(0);
- tag(top) = LUA_T_ARRAY;
- incr_top;
- CLS_current.base++; /* incorporate object in the stack */
- return Ref(top-1);
+ TObject o;
+ avalue(&o) = lua_createarray(0);
+ ttype(&o) = LUA_T_ARRAY;
+ return put_luaObject(&o);
}
/*
** Get a parameter, returning the object handle or LUA_NOOBJECT on error.
** 'number' must be 1 to get the first parameter.
*/
-lua_Object lua_getparam (int number)
+lua_Object lua_lua2C (int number)
+{
+ if (number <= 0 || number > CLS_current.num) return LUA_NOOBJECT;
+ /* Ref(stack+(CLS_current.lua2C+number-1)) ==
+ stack+(CLS_current.lua2C+number-1)-stack+1 == */
+ return CLS_current.lua2C+number;
+}
+
+int lua_isnil (lua_Object o)
+{
+ return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_NIL);
+}
+
+int lua_istable (lua_Object o)
+{
+ return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_ARRAY);
+}
+
+int lua_isuserdata (lua_Object o)
{
- if (number <= 0 || number > CLS_current.num) return LUA_NOOBJECT;
- /* Ref(stack+(CLS_current.base-CLS_current.num+number-1)) ==
- stack+(CLS_current.base-CLS_current.num+number-1)-stack+1 == */
- return CLS_current.base-CLS_current.num+number;
+ return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_USERDATA);
}
-int lua_isnumber (lua_Object object)
+int lua_iscfunction (lua_Object o)
{
- return (object != LUA_NOOBJECT) && (tonumber(Address(object)) == 0);
+ int t = lua_tag(o);
+ return (t == LUA_T_CMARK) || (t == LUA_T_CFUNCTION);
}
-int lua_isstring (lua_Object object)
+int lua_isnumber (lua_Object o)
{
- int t = lua_type(object);
+ return (o!= LUA_NOOBJECT) && (tonumber(Address(o)) == 0);
+}
+
+int lua_isstring (lua_Object o)
+{
+ int t = lua_tag(o);
return (t == LUA_T_STRING) || (t == LUA_T_NUMBER);
}
-int lua_isfunction (lua_Object object)
+int lua_isfunction (lua_Object o)
{
- int t = lua_type(object);
+ int t = lua_tag(o);
return (t == LUA_T_FUNCTION) || (t == LUA_T_CFUNCTION) ||
(t == LUA_T_MARK) || (t == LUA_T_CMARK);
}
@@ -700,57 +800,44 @@ real lua_getnumber (lua_Object object)
*/
char *lua_getstring (lua_Object object)
{
- if (object == LUA_NOOBJECT) return NULL;
- if (tostring (Address(object))) return NULL;
- else return (svalue(Address(object)));
+ if (object == LUA_NOOBJECT || tostring (Address(object)))
+ return NULL;
+ else return (svalue(Address(object)));
}
-/*
-** Given an object handle, return its cfuntion pointer. On error, return NULL.
-*/
-lua_CFunction lua_getcfunction (lua_Object object)
+
+void *lua_getuserdata (lua_Object object)
{
- if (object == LUA_NOOBJECT || ((tag(Address(object)) != LUA_T_CFUNCTION) &&
- (tag(Address(object)) != LUA_T_CMARK)))
- return NULL;
- else return (fvalue(Address(object)));
+ if (object == LUA_NOOBJECT || ttype(Address(object)) != LUA_T_USERDATA)
+ return NULL;
+ else return tsvalue(Address(object))->u.v;
}
+
/*
-** Given an object handle, return its user data. On error, return NULL.
+** Given an object handle, return its cfuntion pointer. On error, return NULL.
*/
-void *lua_getuserdata (lua_Object object)
+lua_CFunction lua_getcfunction (lua_Object object)
{
- if (object == LUA_NOOBJECT || tag(Address(object)) < LUA_T_USERDATA)
+ if (object == LUA_NOOBJECT || ((ttype(Address(object)) != LUA_T_CFUNCTION) &&
+ (ttype(Address(object)) != LUA_T_CMARK)))
return NULL;
- else return (uvalue(Address(object)));
+ else return (fvalue(Address(object)));
}
lua_Object lua_getref (int ref)
{
- Object *o = luaI_getref(ref);
+ TObject *o = luaI_getref(ref);
if (o == NULL)
return LUA_NOOBJECT;
- adjustC(0);
- luaI_pushobject(o);
- CLS_current.base++; /* incorporate object in the stack */
- return Ref(top-1);
-}
-
-
-void lua_pushref (int ref)
-{
- Object *o = luaI_getref(ref);
- if (o == NULL)
- lua_error("access to invalid (possibly garbage collected) reference");
- luaI_pushobject(o);
+ return put_luaObject(o);
}
int lua_ref (int lock)
{
- adjustC(1);
+ checkCparams(1);
return luaI_ref(--top, lock);
}
@@ -761,20 +848,50 @@ int lua_ref (int lock)
*/
lua_Object lua_getglobal (char *name)
{
- adjustC(0);
- getglobal(luaI_findsymbolbyname(name));
- CLS_current.base++; /* incorporate object in the stack */
- return Ref(top-1);
+ getglobal(luaI_findsymbolbyname(name));
+ return put_luaObjectonTop();
+}
+
+
+lua_Object lua_rawgetglobal (char *name)
+{
+ return put_luaObject(&lua_table[luaI_findsymbolbyname(name)].object);
}
+
/*
** Store top of the stack at a global variable array field.
*/
-void lua_storeglobal (char *name)
+static void setglobal (Word n)
+{
+ TObject *oldvalue = &lua_table[n].object;
+ TObject *im = luaI_getimbyObj(oldvalue, IM_SETGLOBAL);
+ if (ttype(im) == LUA_T_NIL) /* default behavior */
+ s_object(n) = *(--top);
+ else {
+ TObject newvalue = *(top-1);
+ ttype(top-1) = LUA_T_STRING;
+ tsvalue(top-1) = lua_table[n].varname;
+ *top = *oldvalue;
+ incr_top;
+ *top = newvalue;
+ incr_top;
+ callIM(im, 3, 0);
+ }
+}
+
+
+void lua_setglobal (char *name)
{
- Word n = luaI_findsymbolbyname(name);
- adjustC(1);
- s_object(n) = *(--top);
+ checkCparams(1);
+ setglobal(luaI_findsymbolbyname(name));
+}
+
+void lua_rawsetglobal (char *name)
+{
+ Word n = luaI_findsymbolbyname(name);
+ checkCparams(1);
+ s_object(n) = *(--top);
}
/*
@@ -782,60 +899,59 @@ void lua_storeglobal (char *name)
*/
void lua_pushnil (void)
{
- tag(top) = LUA_T_NIL;
- incr_top;
+ ttype(top) = LUA_T_NIL;
+ incr_top;
}
/*
-** Push an object (tag=number) to stack.
+** Push an object (ttype=number) to stack.
*/
void lua_pushnumber (real n)
{
- tag(top) = LUA_T_NUMBER; nvalue(top) = n;
+ ttype(top) = LUA_T_NUMBER; nvalue(top) = n;
incr_top;
}
/*
-** Push an object (tag=string) to stack.
+** Push an object (ttype=string) to stack.
*/
void lua_pushstring (char *s)
{
if (s == NULL)
- tag(top) = LUA_T_NIL;
+ ttype(top) = LUA_T_NIL;
else
{
tsvalue(top) = lua_createstring(s);
- tag(top) = LUA_T_STRING;
+ ttype(top) = LUA_T_STRING;
}
incr_top;
}
-/*>>>>>>>>>#undef lua_pushliteral
-void lua_pushliteral(char *s) { lua_pushstring(s); }*/
+
/*
-** Push an object (tag=cfunction) to stack.
+** Push an object (ttype=cfunction) to stack.
*/
void lua_pushcfunction (lua_CFunction fn)
{
- tag(top) = LUA_T_CFUNCTION; fvalue(top) = fn;
+ ttype(top) = LUA_T_CFUNCTION; fvalue(top) = fn;
incr_top;
}
-/*
-** Push an object (tag=userdata) to stack.
-*/
+
+
void lua_pushusertag (void *u, int tag)
{
- if (tag < LUA_T_USERDATA)
- lua_error("invalid tag in `lua_pushusertag'");
- tag(top) = tag; uvalue(top) = u;
- incr_top;
+ if (tag < 0 && tag != LUA_ANYTAG)
+ luaI_realtag(tag); /* error if tag is not valid */
+ tsvalue(top) = luaI_createudata(u, tag);
+ ttype(top) = LUA_T_USERDATA;
+ incr_top;
}
/*
** Push an object on the stack.
*/
-void luaI_pushobject (Object *o)
+void luaI_pushobject (TObject *o)
{
*top = *o;
incr_top;
@@ -847,78 +963,102 @@ void luaI_pushobject (Object *o)
void lua_pushobject (lua_Object o)
{
if (o == LUA_NOOBJECT)
- lua_error("attempt to push a NOOBJECT");
+ lua_error("API error - attempt to push a NOOBJECT");
*top = *Address(o);
- if (tag(top) == LUA_T_MARK) tag(top) = LUA_T_FUNCTION;
- else if (tag(top) == LUA_T_CMARK) tag(top) = LUA_T_CFUNCTION;
+ if (ttype(top) == LUA_T_MARK) ttype(top) = LUA_T_FUNCTION;
+ else if (ttype(top) == LUA_T_CMARK) ttype(top) = LUA_T_CFUNCTION;
incr_top;
}
-int lua_type (lua_Object o)
+int lua_tag (lua_Object lo)
{
- if (o == LUA_NOOBJECT)
- return LUA_T_NIL;
- else
- return tag(Address(o));
+ if (lo == LUA_NOOBJECT) return LUA_T_NIL;
+ else {
+ TObject *o = Address(lo);
+ lua_Type t = ttype(o);
+ if (t == LUA_T_USERDATA)
+ return o->value.ts->tag;
+ else if (t == LUA_T_ARRAY)
+ return o->value.a->htag;
+ else return t;
+ }
}
-void luaI_gcFB (Object *o)
+void luaI_gcIM (TObject *o)
{
- *top = *o;
- incr_top;
- callFB(FB_GC);
+ TObject *im = luaI_getimbyObj(o, IM_GC);
+ if (ttype(im) != LUA_T_NIL) {
+ *top = *o;
+ incr_top;
+ callIM(im, 1, 0);
+ }
+}
+
+
+static void call_binTM (IMS event, char *msg)
+{
+ TObject *im = luaI_getimbyObj(top-2, event); /* try first operand */
+ if (ttype(im) == LUA_T_NIL) {
+ im = luaI_getimbyObj(top-1, event); /* try second operand */
+ if (ttype(im) == LUA_T_NIL) {
+ im = luaI_getim(0, event); /* try a 'global' i.m. */
+ if (ttype(im) == LUA_T_NIL)
+ lua_error(msg);
+ }
+ }
+ lua_pushstring(luaI_eventname[event]);
+ callIM(im, 3, 1);
}
-static void call_arith (char *op)
+static void call_arith (IMS event)
{
- lua_pushstring(op);
- callFB(FB_ARITH);
+ call_binTM(event, "unexpected type at arithmetic operation");
}
-static void comparison (lua_Type tag_less, lua_Type tag_equal,
- lua_Type tag_great, char *op)
+
+static void comparison (lua_Type ttype_less, lua_Type ttype_equal,
+ lua_Type ttype_great, IMS op)
{
- Object *l = top-2;
- Object *r = top-1;
+ TObject *l = top-2;
+ TObject *r = top-1;
int result;
- if (tag(l) == LUA_T_NUMBER && tag(r) == LUA_T_NUMBER)
+ if (ttype(l) == LUA_T_NUMBER && ttype(r) == LUA_T_NUMBER)
result = (nvalue(l) < nvalue(r)) ? -1 : (nvalue(l) == nvalue(r)) ? 0 : 1;
- else if (tostring(l) || tostring(r))
- {
- lua_pushstring(op);
- callFB(FB_ORDER);
+ else if (ttype(l) == LUA_T_STRING && ttype(r) == LUA_T_STRING)
+ result = strcmp(svalue(l), svalue(r));
+ else {
+ call_binTM(op, "unexpected type at comparison");
return;
}
- else
- result = strcmp(svalue(l), svalue(r));
top--;
nvalue(top-1) = 1;
- tag(top-1) = (result < 0) ? tag_less : (result == 0) ? tag_equal : tag_great;
+ ttype(top-1) = (result < 0) ? ttype_less :
+ (result == 0) ? ttype_equal : ttype_great;
}
static void adjust_varargs (StkId first_extra_arg)
{
- Object arg;
- Object *firstelem = stack+first_extra_arg;
+ TObject arg;
+ TObject *firstelem = stack+first_extra_arg;
int nvararg = top-firstelem;
int i;
if (nvararg < 0) nvararg = 0;
avalue(&arg) = lua_createarray(nvararg+1); /* +1 for field 'n' */
- tag(&arg) = LUA_T_ARRAY;
+ ttype(&arg) = LUA_T_ARRAY;
for (i=0; i<nvararg; i++) {
- Object index;
- tag(&index) = LUA_T_NUMBER;
+ TObject index;
+ ttype(&index) = LUA_T_NUMBER;
nvalue(&index) = i+1;
*(lua_hashdefine(avalue(&arg), &index)) = *(firstelem+i);
}
/* store counter in field "n" */ {
- Object index, extra;
- tag(&index) = LUA_T_STRING;
+ TObject index, extra;
+ ttype(&index) = LUA_T_STRING;
tsvalue(&index) = lua_createstring("n");
- tag(&extra) = LUA_T_NUMBER;
+ ttype(&extra) = LUA_T_NUMBER;
nvalue(&extra) = nvararg;
*(lua_hashdefine(avalue(&arg), &index)) = extra;
}
@@ -942,22 +1082,22 @@ static StkId lua_execute (Byte *pc, StkId base)
OpCode opcode;
switch (opcode = (OpCode)*pc++)
{
- case PUSHNIL: tag(top) = LUA_T_NIL; incr_top; break;
+ case PUSHNIL: ttype(top) = LUA_T_NIL; incr_top; break;
case PUSH0: case PUSH1: case PUSH2:
- tag(top) = LUA_T_NUMBER;
+ ttype(top) = LUA_T_NUMBER;
nvalue(top) = opcode-PUSH0;
incr_top;
break;
case PUSHBYTE:
- tag(top) = LUA_T_NUMBER; nvalue(top) = *pc++; incr_top; break;
+ ttype(top) = LUA_T_NUMBER; nvalue(top) = *pc++; incr_top; break;
case PUSHWORD:
{
Word w;
get_word(w,pc);
- tag(top) = LUA_T_NUMBER; nvalue(top) = w;
+ ttype(top) = LUA_T_NUMBER; nvalue(top) = w;
incr_top;
}
break;
@@ -966,7 +1106,7 @@ static StkId lua_execute (Byte *pc, StkId base)
{
real num;
get_float(num,pc);
- tag(top) = LUA_T_NUMBER; nvalue(top) = num;
+ ttype(top) = LUA_T_NUMBER; nvalue(top) = num;
incr_top;
}
break;
@@ -975,7 +1115,7 @@ static StkId lua_execute (Byte *pc, StkId base)
{
Word w;
get_word(w,pc);
- tag(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
+ ttype(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
incr_top;
}
break;
@@ -985,7 +1125,7 @@ static StkId lua_execute (Byte *pc, StkId base)
TFunc *f;
get_code(f,pc);
luaI_insertfunction(f); /* may take part in GC */
- top->tag = LUA_T_FUNCTION;
+ top->ttype = LUA_T_FUNCTION;
top->value.tf = f;
incr_top;
}
@@ -1013,10 +1153,10 @@ static StkId lua_execute (Byte *pc, StkId base)
case PUSHSELF:
{
- Object receiver = *(top-1);
+ TObject receiver = *(top-1);
Word w;
get_word(w,pc);
- tag(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
+ ttype(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
incr_top;
pushsubscript();
*top = receiver;
@@ -1037,47 +1177,32 @@ static StkId lua_execute (Byte *pc, StkId base)
{
Word w;
get_word(w,pc);
- s_object(w) = *(--top);
+ setglobal(w);
}
break;
case STOREINDEXED0:
- storesubscript();
+ storesubscript(top-3, 1);
break;
- case STOREINDEXED:
- {
- int n = *pc++;
- if (tag(top-3-n) != LUA_T_ARRAY)
- {
- lua_checkstack(top+2);
- *(top+1) = *(top-1);
- *(top) = *(top-2-n);
- *(top-1) = *(top-3-n);
- top += 2;
- callFB(FB_SETTABLE);
- }
- else
- {
- Object *h = lua_hashdefine (avalue(top-3-n), top-2-n);
- *h = *(top-1);
- top--;
- }
+ case STOREINDEXED: {
+ int n = *pc++;
+ storesubscript(top-3-n, 2);
+ break;
}
- break;
case STORELIST0:
case STORELIST:
{
int m, n;
- Object *arr;
+ TObject *arr;
if (opcode == STORELIST0) m = 0;
else m = *(pc++) * FIELDS_PER_FLUSH;
n = *(pc++);
arr = top-n-1;
while (n)
{
- tag(top) = LUA_T_NUMBER; nvalue(top) = n+m;
+ ttype(top) = LUA_T_NUMBER; nvalue(top) = n+m;
*(lua_hashdefine (avalue(arr), top)) = *(top-1);
top--;
n--;
@@ -1085,15 +1210,15 @@ static StkId lua_execute (Byte *pc, StkId base)
}
break;
- case STORERECORD:
+ case STORERECORD: /* opcode obsolete: supersed by STOREMAP */
{
int n = *(pc++);
- Object *arr = top-n-1;
+ TObject *arr = top-n-1;
while (n)
{
Word w;
get_word(w,pc);
- tag(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
+ ttype(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
*(lua_hashdefine (avalue(arr), top)) = *(top-1);
top--;
n--;
@@ -1101,13 +1226,25 @@ static StkId lua_execute (Byte *pc, StkId base)
}
break;
+ case STOREMAP: {
+ int n = *(pc++);
+ TObject *arr = top-(2*n)-1;
+ while (n--) {
+ *(lua_hashdefine (avalue(arr), top-2)) = *(top-1);
+ top-=2;
+ }
+ }
+ break;
+
case ADJUST0:
adjust_top(base);
break;
- case ADJUST:
- adjust_top(base + *(pc++));
+ case ADJUST: {
+ StkId newtop = base + *(pc++);
+ adjust_top(newtop);
break;
+ }
case VARARGS:
adjust_varargs(base + *(pc++));
@@ -1118,7 +1255,7 @@ static StkId lua_execute (Byte *pc, StkId base)
Word size;
get_word(size,pc);
avalue(top) = lua_createarray(size);
- tag(top) = LUA_T_ARRAY;
+ ttype(top) = LUA_T_ARRAY;
incr_top;
}
break;
@@ -1127,33 +1264,33 @@ static StkId lua_execute (Byte *pc, StkId base)
{
int res = lua_equalObj(top-2, top-1);
--top;
- tag(top-1) = res ? LUA_T_NUMBER : LUA_T_NIL;
+ ttype(top-1) = res ? LUA_T_NUMBER : LUA_T_NIL;
nvalue(top-1) = 1;
}
break;
case LTOP:
- comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, "lt");
+ comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, IM_LT);
break;
case LEOP:
- comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, "le");
+ comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, IM_LE);
break;
case GTOP:
- comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, "gt");
+ comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, IM_GT);
break;
case GEOP:
- comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, "ge");
+ comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, IM_GE);
break;
case ADDOP:
{
- Object *l = top-2;
- Object *r = top-1;
+ TObject *l = top-2;
+ TObject *r = top-1;
if (tonumber(r) || tonumber(l))
- call_arith("add");
+ call_arith(IM_ADD);
else
{
nvalue(l) += nvalue(r);
@@ -1164,10 +1301,10 @@ static StkId lua_execute (Byte *pc, StkId base)
case SUBOP:
{
- Object *l = top-2;
- Object *r = top-1;
+ TObject *l = top-2;
+ TObject *r = top-1;
if (tonumber(r) || tonumber(l))
- call_arith("sub");
+ call_arith(IM_SUB);
else
{
nvalue(l) -= nvalue(r);
@@ -1178,10 +1315,10 @@ static StkId lua_execute (Byte *pc, StkId base)
case MULTOP:
{
- Object *l = top-2;
- Object *r = top-1;
+ TObject *l = top-2;
+ TObject *r = top-1;
if (tonumber(r) || tonumber(l))
- call_arith("mul");
+ call_arith(IM_MUL);
else
{
nvalue(l) *= nvalue(r);
@@ -1192,10 +1329,10 @@ static StkId lua_execute (Byte *pc, StkId base)
case DIVOP:
{
- Object *l = top-2;
- Object *r = top-1;
+ TObject *l = top-2;
+ TObject *r = top-1;
if (tonumber(r) || tonumber(l))
- call_arith("div");
+ call_arith(IM_DIV);
else
{
nvalue(l) /= nvalue(r);
@@ -1205,36 +1342,34 @@ static StkId lua_execute (Byte *pc, StkId base)
break;
case POWOP:
- call_arith("pow");
+ call_arith(IM_POW);
break;
- case CONCOP:
- {
- Object *l = top-2;
- Object *r = top-1;
- if (tostring(r) || tostring(l))
- callFB(FB_CONCAT);
- else
- {
- tsvalue(l) = lua_createstring (lua_strconc(svalue(l),svalue(r)));
- --top;
- }
+ case CONCOP: {
+ TObject *l = top-2;
+ TObject *r = top-1;
+ if (tostring(l) || tostring(r))
+ call_binTM(IM_CONCAT, "unexpected type for concatenation");
+ else {
+ tsvalue(l) = lua_createstring(lua_strconc(svalue(l),svalue(r)));
+ --top;
+ }
}
break;
case MINUSOP:
if (tonumber(top-1))
{
- tag(top) = LUA_T_NIL;
+ ttype(top) = LUA_T_NIL;
incr_top;
- call_arith("unm");
+ call_arith(IM_UNM);
}
else
nvalue(top-1) = - nvalue(top-1);
break;
case NOTOP:
- tag(top-1) = (tag(top-1) == LUA_T_NIL) ? LUA_T_NUMBER : LUA_T_NIL;
+ ttype(top-1) = (ttype(top-1) == LUA_T_NIL) ? LUA_T_NUMBER : LUA_T_NIL;
nvalue(top-1) = 1;
break;
@@ -1242,15 +1377,15 @@ static StkId lua_execute (Byte *pc, StkId base)
{
Word w;
get_word(w,pc);
- if (tag(top-1) != LUA_T_NIL) pc += w;
+ if (ttype(top-1) != LUA_T_NIL) pc += w;
}
break;
- case ONFJMP:
+ case ONFJMP:
{
Word w;
get_word(w,pc);
- if (tag(top-1) == LUA_T_NIL) pc += w;
+ if (ttype(top-1) == LUA_T_NIL) pc += w;
}
break;
@@ -1275,7 +1410,7 @@ static StkId lua_execute (Byte *pc, StkId base)
Word w;
get_word(w,pc);
top--;
- if (tag(top) == LUA_T_NIL) pc += w;
+ if (ttype(top) == LUA_T_NIL) pc += w;
}
break;
@@ -1284,7 +1419,7 @@ static StkId lua_execute (Byte *pc, StkId base)
Word w;
get_word(w,pc);
top--;
- if (tag(top) == LUA_T_NIL) pc -= w;
+ if (ttype(top) == LUA_T_NIL) pc -= w;
}
break;
@@ -1309,12 +1444,12 @@ static StkId lua_execute (Byte *pc, StkId base)
{
Word line;
get_word(line,pc);
- if ((stack+base-1)->tag != LUA_T_LINE)
+ if ((stack+base-1)->ttype != LUA_T_LINE)
{
/* open space for LINE value */
open_stack((top-stack)-base);
base++;
- (stack+base-1)->tag = LUA_T_LINE;
+ (stack+base-1)->ttype = LUA_T_LINE;
}
(stack+base-1)->value.i = line;
if (lua_linehook)
@@ -1328,3 +1463,16 @@ static StkId lua_execute (Byte *pc, StkId base)
}
}
+
+#if COMPAT2_5
+/*
+** API: set a function as a fallback
+*/
+lua_Object lua_setfallback (char *name, lua_CFunction fallback)
+{
+ lua_pushstring(name);
+ lua_pushcfunction(fallback);
+ do_unprotectedrun(luaI_setfallback, 2, 1);
+ return put_luaObjectonTop();
+}
+#endif
diff --git a/src/opcode.h b/src/opcode.h
index 381efbc8..0b63de96 100644
--- a/src/opcode.h
+++ b/src/opcode.h
@@ -1,6 +1,6 @@
/*
** TeCGraf - PUC-Rio
-** $Id: opcode.h,v 3.24 1996/11/01 12:46:59 roberto Exp $
+** $Id: opcode.h,v 3.34 1997/06/16 16:50:22 roberto Exp $
*/
#ifndef opcode_h
@@ -14,6 +14,28 @@
#define FIELDS_PER_FLUSH 40
+/*
+* WARNING: if you change the order of this enumeration,
+* grep "ORDER LUA_T"
+*/
+typedef enum
+{
+ LUA_T_NIL = -9,
+ LUA_T_NUMBER = -8,
+ LUA_T_STRING = -7,
+ LUA_T_ARRAY = -6, /* array==table */
+ LUA_T_FUNCTION = -5,
+ LUA_T_CFUNCTION= -4,
+ LUA_T_MARK = -3,
+ LUA_T_CMARK = -2,
+ LUA_T_LINE = -1,
+ LUA_T_USERDATA = 0
+} lua_Type;
+
+#define NUM_TYPES 10
+
+
+extern char *luaI_typenames[];
typedef enum {
/* name parm before after side effect
@@ -38,7 +60,7 @@ PUSHLOCAL6,/* - LOC[6] */
PUSHLOCAL7,/* - LOC[7] */
PUSHLOCAL8,/* - LOC[8] */
PUSHLOCAL9,/* - LOC[9] */
-PUSHLOCAL,/* w - LOC[w] */
+PUSHLOCAL,/* b - LOC[b] */
PUSHGLOBAL,/* w - VAR[w] */
PUSHINDEXED,/* i t t[i] */
PUSHSELF,/* w t t t[STR[w]] */
@@ -52,14 +74,14 @@ STORELOCAL6,/* x - LOC[6]=x */
STORELOCAL7,/* x - LOC[7]=x */
STORELOCAL8,/* x - LOC[8]=x */
STORELOCAL9,/* x - LOC[9]=x */
-STORELOCAL,/* w x - LOC[w]=x */
+STORELOCAL,/* b x - LOC[b]=x */
STOREGLOBAL,/* w x - VAR[w]=x */
STOREINDEXED0,/* v i t - t[i]=v */
STOREINDEXED,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */
-STORELIST0,/* w v_w...v_1 t - t[i]=v_i */
-STORELIST,/* w n v_w...v_1 t - t[i+n*FPF]=v_i */
-STORERECORD,/* n
- w_n...w_1 v_n...v_1 t - t[STR[w_i]]=v_i */
+STORELIST0,/* b v_b...v_1 t - t[i]=v_i */
+STORELIST,/* b c v_b...v_1 t - t[i+c*FPF]=v_i */
+STORERECORD,/* b
+ w_b...w_1 v_b...v_1 t - t[STR[w_i]]=v_i */
ADJUST0,/* - - TOP=BASE */
ADJUST,/* b - - TOP=BASE+b */
CREATEARRAY,/* w - newarray(size = w) */
@@ -76,19 +98,19 @@ POWOP,/* y x x^y */
CONCOP,/* y x x..y */
MINUSOP,/* x -x */
NOTOP,/* x (x==nil)? 1 : nil */
-ONTJMP,/* w x - (x!=nil)? PC+=w */
-ONFJMP,/* w x - (x==nil)? PC+=w */
+ONTJMP,/* w x - (x!=nil)? PC+=w */
+ONFJMP,/* w x - (x==nil)? PC+=w */
JMP,/* w - - PC+=w */
-UPJMP,/* w - - PC-=w */
-IFFJMP,/* w x - (x==nil)? PC+=w */
+UPJMP,/* w - - PC-=w */
+IFFJMP,/* w x - (x==nil)? PC+=w */
IFFUPJMP,/* w x - (x==nil)? PC-=w */
POP,/* x - */
-CALLFUNC,/* n m v_n...v_1 f r_m...r_1 f(v1,...,v_n) */
+CALLFUNC,/* b c v_b...v_1 f r_c...r_1 f(v1,...,v_b) */
RETCODE0,
RETCODE,/* b - - */
SETLINE,/* w - - LINE=w */
-VARARGS/* b v_n...v_1 {v_1...v_n;n=n} */
-
+VARARGS,/* b v_b...v_1 {v_1...v_b;n=b} */
+STOREMAP/* b v_b k_b ...v_1 k_1 t - t[k_i]=v_i */
} OpCode;
@@ -102,29 +124,27 @@ typedef union
TaggedString *ts;
TFunc *tf;
struct Hash *a;
- void *u;
int i;
} Value;
-typedef struct Object
+typedef struct TObject
{
- lua_Type tag;
+ lua_Type ttype;
Value value;
-} Object;
+} TObject;
/* Macros to access structure members */
-#define tag(o) ((o)->tag)
+#define ttype(o) ((o)->ttype)
#define nvalue(o) ((o)->value.n)
#define svalue(o) ((o)->value.ts->str)
#define tsvalue(o) ((o)->value.ts)
#define avalue(o) ((o)->value.a)
#define fvalue(o) ((o)->value.f)
-#define uvalue(o) ((o)->value.u)
/* Macros to access symbol table */
#define s_object(i) (lua_table[i].object)
-#define s_tag(i) (tag(&s_object(i)))
+#define s_ttype(i) (ttype(&s_object(i)))
#define s_nvalue(i) (nvalue(&s_object(i)))
#define s_svalue(i) (svalue(&s_object(i)))
#define s_tsvalue(i) (tsvalue(&s_object(i)))
@@ -141,10 +161,11 @@ typedef struct Object
/* Exported functions */
void lua_parse (TFunc *tf); /* from "lua.stx" module */
void luaI_codedebugline (int line); /* from "lua.stx" module */
-void lua_travstack (int (*fn)(Object *));
-Object *luaI_Address (lua_Object o);
-void luaI_pushobject (Object *o);
-void luaI_gcFB (Object *o);
+void lua_travstack (int (*fn)(TObject *));
+TObject *luaI_Address (lua_Object o);
+void luaI_pushobject (TObject *o);
+void luaI_gcIM (TObject *o);
int luaI_dorun (TFunc *tf);
+int lua_domain (void);
#endif
diff --git a/src/parser.c b/src/parser.c
index c91ee00e..ad5f8d68 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -10,14 +10,14 @@ static char luaY_sccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
#define YYPREFIX "luaY_"
#line 2 "lua.stx"
-char *rcs_luastx = "$Id: parser.c,v 1.1 1996/11/21 16:11:40 lhf Exp $";
+char *rcs_luastx = "$Id: parser.c,v 1.1 1997/06/30 18:59:03 lhf Exp $";
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "luadebug.h"
-#include "mem.h"
+#include "luamem.h"
#include "lex.h"
#include "opcode.h"
#include "hash.h"
@@ -60,8 +60,6 @@ static TaggedString *localvar[MAXLOCALS]; /* store local variable names */
static int nlocalvar=0; /* number of local variables */
#define MAXFIELDS FIELDS_PER_FLUSH*2
-static Word fields[MAXFIELDS]; /* fieldnames to be flushed */
-static int nfields=0;
int lua_debug = 0;
@@ -113,22 +111,11 @@ static void code_word_at (Byte *p, int n)
memcpy(p, &w, sizeof(Word));
}
-static void push_field (Word name)
-{
- if (nfields < MAXFIELDS)
- fields[nfields++] = name;
- else
- luaY_error ("too many fields in nested constructors");
-}
-
static void flush_record (int n)
{
- int i;
if (n == 0) return;
- code_byte(STORERECORD);
+ code_byte(STOREMAP);
code_byte(n);
- for (i=0; i<n; i++)
- code_word(fields[--nfields]);
}
static void flush_list (int m, int n)
@@ -171,11 +158,22 @@ static void add_varbuffer (Long var)
luaY_error ("variable buffer overflow");
}
+static void code_string (Word w)
+{
+ code_byte(PUSHSTRING);
+ code_word(w);
+}
+
+static void code_constant (TaggedString *s)
+{
+ code_string(luaI_findconstant(s));
+}
+
static void code_number (float f)
{
- Word i = (Word)f;
- if (f == (float)i) /* f has an (short) integer value */
- {
+ Word i;
+ if (f >= 0 && f <= (float)MAX_WORD && (float)(i=(Word)f) == f) {
+ /* f has an (short) integer value */
if (i <= 2) code_byte(PUSH0 + i);
else if (i <= 255)
{
@@ -418,7 +416,7 @@ void lua_parse (TFunc *tf)
}
-#line 414 "lua.stx"
+#line 412 "lua.stx"
typedef union
{
int vInt;
@@ -429,7 +427,7 @@ typedef union
TFunc *pFunc;
TaggedString *pTStr;
} YYSTYPE;
-#line 433 "y.tab.c"
+#line 431 "y.tab.c"
#define WRONGTOKEN 257
#define NIL 258
#define IF 259
@@ -467,8 +465,9 @@ short luaY_lhs[] = { -1,
38, 5, 39, 5, 40, 37, 4, 8, 8, 7,
7, 2, 2, 3, 41, 3, 17, 17, 18, 18,
19, 19, 42, 9, 9, 14, 14, 43, 43, 12,
- 12, 13, 13, 44, 15, 15, 16, 16, 6, 6,
- 20, 20, 20, 21, 29, 10, 10, 11, 11,
+ 12, 13, 13, 44, 45, 45, 15, 15, 16, 16,
+ 6, 6, 20, 20, 20, 21, 29, 10, 10, 11,
+ 11,
};
short luaY_len[] = { 2,
2, 0, 3, 2, 3, 1, 3, 5, 0, 3,
@@ -479,113 +478,114 @@ short luaY_len[] = { 2,
0, 5, 0, 5, 0, 4, 2, 1, 3, 3,
1, 0, 1, 1, 0, 4, 0, 1, 1, 3,
1, 1, 0, 3, 2, 0, 2, 0, 1, 0,
- 2, 1, 3, 3, 0, 2, 1, 3, 1, 3,
- 1, 4, 3, 1, 1, 1, 3, 0, 2,
+ 2, 1, 3, 3, 3, 1, 0, 2, 1, 3,
+ 1, 3, 1, 4, 3, 1, 1, 1, 3, 0,
+ 2,
};
short luaY_defred[] = { 2,
- 0, 0, 0, 14, 16, 0, 0, 0, 94, 19,
- 0, 0, 0, 91, 1, 0, 4, 0, 48, 46,
- 47, 0, 0, 0, 49, 29, 95, 0, 0, 44,
- 0, 0, 24, 0, 0, 0, 0, 96, 0, 0,
+ 0, 0, 0, 14, 16, 0, 0, 0, 96, 19,
+ 0, 0, 0, 93, 1, 0, 4, 0, 48, 46,
+ 47, 0, 0, 0, 49, 29, 97, 0, 0, 44,
+ 0, 0, 24, 0, 0, 0, 0, 98, 0, 0,
0, 0, 0, 0, 0, 57, 61, 12, 3, 0,
0, 0, 0, 0, 0, 28, 28, 28, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 9, 27, 65, 0, 0, 20, 0,
- 5, 0, 0, 0, 0, 0, 59, 0, 93, 30,
+ 5, 0, 0, 0, 0, 0, 59, 0, 95, 30,
24, 51, 53, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 73, 0,
- 0, 82, 28, 0, 0, 0, 0, 97, 72, 71,
- 0, 0, 69, 7, 60, 92, 28, 0, 0, 0,
- 56, 0, 75, 0, 0, 86, 24, 0, 25, 0,
- 0, 24, 0, 0, 0, 0, 0, 0, 83, 0,
- 74, 0, 28, 17, 10, 0, 70, 24, 0, 0,
- 77, 0, 0, 8, 22, 0, 13, 81, 15, 28,
- 24, 28, 0, 23,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
+ 0, 0, 82, 0, 28, 0, 0, 0, 0, 99,
+ 72, 71, 0, 0, 69, 7, 60, 94, 28, 0,
+ 0, 0, 56, 0, 75, 0, 0, 88, 0, 24,
+ 0, 25, 0, 0, 24, 0, 0, 0, 0, 85,
+ 86, 83, 0, 74, 0, 0, 28, 17, 10, 0,
+ 70, 24, 0, 0, 77, 0, 0, 8, 22, 0,
+ 13, 81, 15, 28, 24, 28, 0, 23,
};
short luaY_dgoto[] = { 1,
- 91, 34, 35, 25, 26, 11, 46, 12, 107, 39,
- 79, 161, 108, 151, 109, 110, 121, 122, 123, 27,
+ 91, 34, 35, 25, 26, 11, 46, 12, 108, 39,
+ 79, 165, 109, 154, 110, 111, 123, 124, 125, 27,
14, 41, 81, 2, 15, 16, 49, 17, 28, 73,
- 115, 37, 160, 32, 33, 74, 30, 128, 129, 31,
- 116, 134, 133, 112,
+ 117, 37, 164, 32, 33, 74, 30, 130, 131, 31,
+ 118, 136, 135, 113, 114,
};
short luaY_sindex[] = { 0,
- 0, 332, -38, 0, 0, -38, -239, -223, 0, 0,
- -23, 17, 0, 0, 0, 3, 0, 137, 0, 0,
- 0, -38, -38, -38, 0, 0, 0, 137, 547, 0,
- -25, -38, 0, 3, 45, 0, 212, 0, -22, 0,
- 52, 140, -38, -223, -38, 0, 0, 0, 0, -166,
- -38, -154, 40, 40, 102, 0, 0, 0, -38, -38,
- -38, -38, -38, -38, -38, -38, -38, -38, -38, -38,
- -34, 481, -130, 0, 0, 0, -38, -129, 0, -194,
- 0, -123, 45, 0, -17, 103, 0, 753, 0, 0,
- 0, 0, 0, -30, -30, -30, -30, -30, -30, 95,
- 11, 11, 40, 40, 40, 97, 41, 123, 0, 124,
- 212, 0, 0, -38, -59, -38, 45, 0, 0, 0,
- 128, 131, 0, 0, 0, 0, 0, -38, -38, -38,
- 0, -97, 0, 120, -38, 0, 0, 212, 0, 3,
- 0, 0, -194, -183, 118, 118, 212, 97, 0, -97,
- 0, 212, 0, 0, 0, -85, 0, 0, -38, -82,
- 0, 123, -80, 0, 0, 1105, 0, 0, 0, 0,
- 0, 0, -183, 0,
+ 0, 288, -34, 0, 0, -34, -238, -223, 0, 0,
+ -6, 22, 0, 0, 0, 14, 0, 150, 0, 0,
+ 0, -34, -34, -34, 0, 0, 0, 150, 547, 0,
+ -46, -34, 0, 14, 34, 0, 212, 0, -5, 0,
+ 39, 156, -34, -223, -34, 0, 0, 0, 0, -194,
+ -34, -193, -4, -4, 48, 0, 0, 0, -34, -34,
+ -34, -34, -34, -34, -34, -34, -34, -34, -34, -34,
+ -38, 481, -173, 0, 0, 0, -34, -146, 0, -234,
+ 0, -138, 34, 0, -15, 96, 0, 753, 0, 0,
+ 0, 0, 0, -30, -30, -30, -30, -30, -30, -20,
+ -12, -12, -4, -4, -4, 0, -34, 16, 95, 0,
+ 98, 212, 0, 82, 0, -34, 328, -34, 34, 0,
+ 0, 0, 103, 101, 0, 0, 0, 0, 0, -34,
+ -34, 1181, 0, -91, 0, 92, -34, 0, -34, 0,
+ 212, 0, 14, 0, 0, -234, -233, 118, 118, 0,
+ 0, 0, -91, 0, 212, 212, 0, 0, 0, -105,
+ 0, 0, -34, -103, 0, 95, -101, 0, 0, 1105,
+ 0, 0, 0, 0, 0, 0, -233, 0,
};
short luaY_rindex[] = { 0,
- 0, 191, 69, 0, 0, 173, 0, 0, 0, 0,
- 0, 69, 150, 0, 0, 146, 0, -36, 0, 0,
- 0, 69, 69, 69, 0, 0, 0, 1, 0, 0,
- 0, 69, 0, 47, 461, 436, 0, 0, 197, 130,
- 0, 0, 69, 0, -33, 0, 0, 0, 0, 0,
- 69, 0, 24, 59, 1181, 0, 0, 0, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
- -50, 0, 0, 0, 0, 0, 69, 0, 0, 152,
- 0, 0, 311, -21, 0, 0, 0, 0, 0, 0,
+ 0, 169, 52, 0, 0, 173, 0, 0, 0, 0,
+ 0, 52, 508, 0, 0, 146, 0, -36, 0, 0,
+ 0, 52, 52, 52, 0, 0, 0, 1, 0, 0,
+ 0, 52, 0, 47, 461, 436, 0, 0, 197, 76,
+ 0, 0, 52, 0, -32, 0, 0, 0, 0, 0,
+ 52, 0, 24, 59, 1195, 0, 0, 0, 52, 52,
+ 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
+ -27, 0, 0, 0, 0, 0, 52, 0, 0, 129,
+ 0, 0, 311, 142, 0, 0, 0, 0, 0, 0,
0, 0, 0, 746, 776, 799, 821, 844, 866, 505,
- 383, 410, 88, 112, 359, 1174, 0, 74, 0, -40,
- -26, 0, 0, 69, -230, 69, 921, 0, 0, 0,
- 0, 160, 0, 0, 0, 0, 0, 69, 69, 69,
- 0, 77, 0, 78, -9, 0, 0, 939, 0, 289,
- 474, 0, 0, -60, 894, 1137, -16, 0, 0, 89,
- 0, -10, 0, 0, 0, 0, 0, 0, 69, 0,
- 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -60, 0,
+ 383, 410, 88, 112, 359, 1174, 52, 0, 51, 0,
+ -40, -10, 0, 0, 0, 52, -153, 52, 921, 0,
+ 0, 0, 0, 144, 0, 0, 0, 0, 0, 52,
+ 52, 0, 0, 62, 0, 64, -26, 0, 52, 0,
+ 939, 0, 682, 474, 0, 0, -77, 894, 1137, 0,
+ 0, 0, 66, 0, 13, -18, 0, 0, 0, 0,
+ 0, 0, 52, 0, 0, 51, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -77, 0,
};
short luaY_gindex[] = { 0,
- -31, 171, 85, -2, 48, 0, 0, 0, 0, 0,
- 0, 0, 67, 0, 0, 0, 0, 0, 75, 8,
- 0, 0, 0, 0, 104, 107, -29, 0, 12, -61,
- 0, 1260, 50, 0, 0, 0, 213, 0, 0, 0,
- 0, 0, -107, 94,
+ 53, 147, -23, 3, 134, 0, 0, 0, 0, 0,
+ 0, 0, 40, 0, 0, 0, 0, 0, 49, 6,
+ 0, 0, 0, 0, 81, 83, -16, 0, 8, -70,
+ 0, 1445, 27, 0, 0, 0, 187, 0, 0, 0,
+ 0, 0, -108, 67, 0,
};
-#define YYTABLESIZE 1462
-short luaY_table[] = { 10,
- 45, 24, 136, 58, 75, 24, 22, 62, 85, 13,
- 22, 68, 66, 18, 67, 40, 69, 87, 78, 42,
- 44, 78, 90, 43, 95, 92, 93, 84, 52, 127,
- 26, 26, 87, 88, 38, 26, 26, 43, 77, 90,
- 58, 45, 45, 45, 45, 45, 11, 45, 88, 79,
- 9, 84, 68, 36, 168, 85, 45, 69, 50, 45,
- 45, 48, 45, 70, 43, 43, 43, 43, 43, 95,
- 43, 55, 55, 51, 85, 153, 119, 158, 159, 120,
- 156, 137, 43, 43, 78, 43, 58, 39, 76, 55,
- 36, 80, 36, 45, 45, 144, 165, 71, 87, 50,
- 50, 50, 50, 50, 70, 50, 154, 87, 84, 172,
- 155, 40, 10, 55, 88, 79, 43, 50, 50, 89,
- 50, 163, 13, 58, 36, 45, 18, 83, 39, 39,
- 39, 39, 39, 70, 39, 114, 68, 66, 171, 67,
- 173, 69, 90, 125, 118, 11, 39, 39, 43, 39,
- 124, 50, 40, 40, 40, 40, 40, 130, 40, 68,
- 66, 117, 67, 141, 69, 131, 132, 135, 142, 6,
- 40, 40, 62, 40, 143, 95, 148, 62, 150, 61,
- 39, 164, 52, 50, 167, 52, 169, 95, 70, 95,
- 26, 55, 67, 89, 50, 95, 98, 82, 78, 3,
- 68, 79, 76, 4, 40, 5, 21, 95, 6, 7,
- 89, 70, 39, 80, 9, 86, 162, 157, 139, 19,
- 95, 140, 174, 19, 47, 149, 0, 51, 0, 0,
- 51, 62, 0, 20, 21, 9, 40, 20, 21, 106,
- 95, 0, 0, 0, 23, 0, 0, 0, 23, 0,
- 65, 0, 0, 68, 66, 98, 67, 0, 69, 45,
+#define YYTABLESIZE 1608
+short luaY_table[] = { 107,
+ 45, 24, 138, 58, 10, 24, 22, 13, 62, 18,
+ 22, 68, 66, 40, 67, 42, 69, 75, 78, 83,
+ 129, 68, 66, 43, 67, 84, 69, 162, 163, 68,
+ 52, 87, 79, 89, 69, 38, 121, 44, 78, 122,
+ 58, 45, 45, 45, 45, 45, 11, 45, 89, 84,
+ 9, 85, 107, 119, 43, 77, 90, 172, 50, 45,
+ 45, 45, 45, 70, 43, 43, 43, 43, 43, 157,
+ 43, 90, 48, 70, 160, 51, 71, 76, 80, 87,
+ 89, 70, 43, 43, 78, 43, 58, 39, 90, 70,
+ 55, 169, 116, 45, 45, 55, 55, 87, 79, 50,
+ 50, 50, 50, 50, 176, 50, 84, 26, 26, 92,
+ 93, 40, 26, 26, 89, 6, 43, 50, 50, 10,
+ 50, 97, 13, 58, 18, 45, 159, 120, 39, 39,
+ 39, 39, 39, 97, 39, 126, 127, 90, 134, 36,
+ 133, 137, 139, 145, 146, 11, 39, 39, 43, 39,
+ 153, 50, 40, 40, 40, 40, 40, 55, 40, 68,
+ 66, 168, 67, 171, 69, 173, 97, 140, 26, 67,
+ 40, 40, 62, 40, 55, 78, 36, 62, 36, 61,
+ 39, 147, 151, 50, 68, 92, 79, 97, 76, 21,
+ 80, 86, 166, 158, 161, 52, 100, 142, 47, 143,
+ 152, 52, 92, 178, 40, 0, 0, 50, 0, 167,
+ 36, 70, 39, 82, 0, 0, 0, 0, 0, 19,
+ 0, 0, 0, 19, 0, 0, 175, 0, 177, 0,
+ 0, 62, 97, 20, 21, 106, 40, 20, 21, 9,
+ 51, 0, 0, 0, 23, 0, 51, 0, 23, 0,
+ 65, 144, 0, 68, 66, 100, 67, 0, 69, 45,
45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
- 45, 62, 95, 61, 45, 45, 45, 45, 45, 45,
+ 45, 62, 0, 61, 45, 45, 45, 45, 45, 45,
45, 45, 43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 0, 55, 0, 43, 43, 43,
43, 43, 43, 43, 43, 70, 0, 11, 11, 0,
@@ -603,25 +603,25 @@ short luaY_table[] = { 10,
41, 0, 0, 37, 0, 37, 37, 37, 0, 0,
0, 0, 0, 62, 62, 64, 0, 0, 62, 62,
0, 37, 37, 0, 37, 0, 0, 0, 0, 0,
- 38, 41, 38, 38, 38, 98, 0, 98, 98, 98,
- 63, 98, 98, 98, 98, 98, 98, 0, 38, 38,
- 98, 38, 0, 66, 0, 37, 64, 29, 29, 64,
+ 38, 41, 38, 38, 38, 100, 0, 100, 100, 100,
+ 63, 100, 100, 100, 100, 100, 100, 0, 38, 38,
+ 100, 38, 0, 66, 0, 37, 64, 29, 29, 64,
29, 0, 29, 41, 0, 0, 57, 58, 59, 60,
63, 64, 65, 0, 64, 29, 0, 29, 0, 0,
0, 63, 38, 0, 42, 0, 0, 37, 0, 0,
0, 0, 0, 0, 66, 29, 29, 66, 29, 63,
29, 0, 68, 66, 0, 67, 0, 69, 0, 29,
0, 0, 66, 29, 38, 29, 0, 0, 0, 0,
- 62, 0, 61, 0, 0, 42, 0, 11, 42, 11,
- 11, 11, 0, 11, 11, 11, 11, 11, 0, 0,
- 0, 0, 11, 42, 42, 0, 42, 29, 0, 18,
+ 62, 0, 61, 0, 0, 42, 3, 97, 42, 0,
+ 4, 91, 5, 97, 0, 6, 7, 8, 0, 0,
+ 0, 9, 0, 42, 42, 97, 42, 29, 91, 18,
0, 18, 18, 18, 70, 18, 18, 18, 18, 18,
- 18, 0, 0, 0, 18, 0, 0, 0, 68, 66,
- 3, 67, 0, 69, 4, 0, 5, 42, 0, 6,
- 7, 8, 0, 0, 0, 9, 62, 0, 61, 0,
+ 18, 0, 0, 0, 18, 0, 3, 0, 68, 66,
+ 4, 67, 5, 69, 0, 6, 7, 42, 97, 0,
+ 0, 9, 0, 0, 0, 0, 62, 0, 61, 0,
0, 0, 0, 0, 0, 0, 0, 41, 41, 41,
41, 41, 41, 41, 41, 41, 41, 41, 41, 42,
- 0, 0, 41, 41, 41, 41, 41, 41, 41, 41,
+ 97, 0, 41, 41, 41, 41, 41, 41, 41, 41,
70, 37, 37, 37, 37, 37, 37, 37, 37, 37,
37, 37, 37, 0, 0, 0, 37, 37, 37, 37,
37, 37, 37, 37, 0, 0, 0, 0, 38, 38,
@@ -632,7 +632,7 @@ short luaY_table[] = { 10,
29, 29, 29, 29, 29, 29, 29, 0, 0, 0,
0, 63, 63, 0, 0, 0, 63, 63, 0, 0,
0, 0, 66, 0, 66, 66, 66, 0, 66, 66,
- 66, 66, 66, 66, 113, 31, 0, 66, 29, 29,
+ 66, 66, 66, 66, 115, 31, 0, 66, 29, 29,
29, 29, 29, 29, 29, 57, 58, 59, 60, 63,
64, 65, 0, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 34, 0, 0, 42, 42,
@@ -642,7 +642,7 @@ short luaY_table[] = { 10,
0, 0, 62, 0, 61, 0, 34, 0, 0, 34,
32, 57, 58, 59, 60, 63, 64, 65, 0, 0,
0, 0, 0, 0, 34, 34, 0, 34, 31, 33,
- 0, 0, 33, 35, 0, 126, 70, 0, 0, 0,
+ 0, 0, 33, 35, 0, 128, 70, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 33, 33, 0,
33, 32, 0, 0, 32, 36, 0, 0, 34, 0,
31, 0, 0, 0, 0, 0, 0, 0, 0, 32,
@@ -650,12 +650,12 @@ short luaY_table[] = { 10,
0, 33, 0, 52, 0, 0, 0, 0, 0, 0,
34, 0, 35, 35, 0, 35, 36, 0, 0, 36,
0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 99, 0, 0, 33, 36, 36, 0, 36, 0, 0,
+ 101, 0, 0, 33, 36, 36, 0, 36, 0, 0,
0, 0, 0, 0, 52, 0, 35, 52, 28, 0,
- 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 52, 0, 0, 0, 0, 0, 36, 0,
+ 11, 0, 11, 11, 11, 32, 11, 11, 11, 11,
+ 11, 0, 52, 0, 0, 11, 0, 0, 36, 0,
0, 0, 0, 0, 0, 0, 0, 0, 35, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 101,
0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
36, 0, 0, 0, 0, 0, 0, 28, 0, 0,
0, 0, 0, 0, 31, 31, 31, 31, 31, 31,
@@ -675,66 +675,80 @@ short luaY_table[] = { 10,
36, 36, 36, 36, 36, 36, 68, 66, 0, 67,
0, 69, 52, 52, 52, 52, 52, 52, 52, 52,
52, 52, 52, 52, 62, 0, 61, 52, 52, 52,
- 0, 0, 0, 0, 0, 0, 0, 54, 0, 99,
- 54, 99, 99, 99, 0, 99, 99, 99, 99, 99,
- 99, 0, 0, 0, 99, 54, 0, 28, 70, 28,
+ 0, 0, 0, 0, 0, 0, 0, 54, 0, 101,
+ 54, 101, 101, 101, 0, 101, 101, 101, 101, 101,
+ 101, 0, 0, 0, 101, 54, 0, 28, 70, 28,
28, 28, 0, 28, 28, 28, 28, 28, 28, 0,
- 0, 0, 28, 94, 0, 94, 94, 94, 94, 94,
- 94, 0, 29, 29, 0, 29, 0, 29, 0, 54,
- 0, 94, 94, 94, 0, 94, 0, 0, 0, 0,
- 29, 0, 29, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 28, 96, 0, 96, 96, 96, 96, 96,
+ 96, 0, 68, 66, 0, 67, 0, 69, 0, 54,
+ 0, 96, 96, 96, 86, 96, 29, 29, 0, 29,
+ 62, 29, 61, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 29, 0, 29, 0, 0, 0,
+ 0, 54, 0, 0, 96, 0, 0, 96, 0, 0,
+ 0, 0, 0, 150, 70, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 29, 0,
+ 0, 0, 0, 0, 0, 0, 96, 0, 96, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 54, 29, 0, 94, 0, 0, 94, 0, 0,
- 0, 0, 0, 0, 29, 0, 0, 0, 0, 0,
- 0, 53, 54, 0, 0, 0, 0, 0, 0, 0,
- 0, 72, 0, 0, 0, 0, 94, 0, 94, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 88, 0, 0, 0, 0, 0, 0, 0, 94, 95,
- 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
- 111, 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, 170, 0, 0, 0, 0, 0,
- 0, 0, 0, 138, 0, 0, 0, 0, 0, 57,
- 58, 59, 60, 63, 64, 65, 0, 145, 146, 147,
- 0, 0, 0, 0, 152, 54, 54, 54, 54, 54,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 174, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
+ 58, 59, 60, 63, 64, 65, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 54, 54, 54, 54, 54,
54, 54, 54, 54, 54, 54, 54, 0, 0, 0,
- 54, 54, 54, 0, 0, 0, 0, 0, 166, 0,
+ 54, 54, 54, 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, 29, 96, 96,
+ 96, 96, 96, 96, 96, 57, 58, 59, 60, 63,
+ 64, 65, 0, 0, 0, 0, 53, 54, 0, 29,
+ 29, 29, 29, 29, 29, 29, 72, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 88, 0, 0, 0, 0,
+ 0, 0, 0, 94, 95, 96, 97, 98, 99, 100,
+ 101, 102, 103, 104, 105, 112, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 94, 94,
- 94, 94, 94, 94, 94, 29, 29, 29, 29, 29,
- 29, 29,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 132, 0, 0, 0, 0, 0, 0, 0, 0,
+ 141, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 148, 149, 0, 0, 0, 0,
+ 0, 155, 0, 156, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 170,
};
-short luaY_check[] = { 2,
- 0, 40, 110, 40, 34, 40, 45, 41, 59, 2,
- 45, 42, 43, 2, 45, 8, 47, 44, 59, 8,
- 44, 44, 44, 0, 46, 57, 58, 44, 46, 91,
- 261, 262, 59, 44, 274, 266, 267, 61, 61, 61,
- 40, 41, 42, 43, 44, 45, 0, 47, 59, 59,
- 274, 44, 42, 6, 162, 44, 40, 47, 0, 59,
- 60, 59, 62, 94, 41, 42, 43, 44, 45, 91,
- 47, 24, 123, 91, 125, 137, 271, 261, 262, 274,
- 142, 113, 59, 60, 125, 62, 123, 0, 44, 123,
- 43, 40, 45, 93, 94, 127, 158, 123, 125, 41,
- 42, 43, 44, 45, 94, 47, 138, 274, 125, 171,
- 140, 0, 115, 123, 125, 125, 93, 59, 60, 274,
- 62, 153, 115, 123, 77, 125, 115, 43, 41, 42,
- 43, 44, 45, 94, 47, 266, 42, 43, 170, 45,
- 172, 47, 41, 41, 274, 0, 59, 60, 125, 62,
- 274, 93, 41, 42, 43, 44, 45, 61, 47, 42,
- 43, 77, 45, 116, 47, 125, 44, 44, 41, 40,
- 59, 60, 0, 62, 44, 46, 274, 60, 59, 62,
- 93, 267, 46, 125, 267, 46, 267, 58, 94, 40,
- 0, 123, 41, 44, 58, 46, 0, 58, 125, 259,
- 41, 125, 125, 263, 93, 265, 267, 58, 268, 269,
- 61, 94, 125, 125, 274, 45, 150, 143, 115, 258,
- 91, 115, 173, 258, 12, 132, -1, 91, -1, -1,
- 91, 59, -1, 272, 273, 274, 125, 272, 273, 274,
- 91, -1, -1, -1, 283, -1, -1, -1, 283, -1,
- 281, -1, -1, 42, 43, 59, 45, -1, 47, 259,
+short luaY_check[] = { 91,
+ 0, 40, 111, 40, 2, 40, 45, 2, 41, 2,
+ 45, 42, 43, 8, 45, 8, 47, 34, 59, 43,
+ 91, 42, 43, 0, 45, 44, 47, 261, 262, 42,
+ 46, 59, 59, 44, 47, 274, 271, 44, 44, 274,
+ 40, 41, 42, 43, 44, 45, 0, 47, 59, 44,
+ 274, 44, 91, 77, 61, 61, 44, 166, 0, 59,
+ 60, 40, 62, 94, 41, 42, 43, 44, 45, 140,
+ 47, 59, 59, 94, 145, 91, 123, 44, 40, 274,
+ 274, 94, 59, 60, 125, 62, 123, 0, 41, 94,
+ 123, 162, 266, 93, 94, 123, 123, 125, 125, 41,
+ 42, 43, 44, 45, 175, 47, 125, 261, 262, 57,
+ 58, 0, 266, 267, 125, 40, 93, 59, 60, 117,
+ 62, 46, 117, 123, 117, 125, 143, 274, 41, 42,
+ 43, 44, 45, 58, 47, 274, 41, 125, 44, 6,
+ 125, 44, 61, 41, 44, 0, 59, 60, 125, 62,
+ 59, 93, 41, 42, 43, 44, 45, 24, 47, 42,
+ 43, 267, 45, 267, 47, 267, 91, 115, 0, 41,
+ 59, 60, 0, 62, 123, 125, 43, 60, 45, 62,
+ 93, 129, 274, 125, 41, 44, 125, 46, 125, 267,
+ 125, 45, 153, 141, 146, 46, 0, 117, 12, 117,
+ 134, 46, 61, 177, 93, -1, -1, 58, -1, 157,
+ 77, 94, 125, 58, -1, -1, -1, -1, -1, 258,
+ -1, -1, -1, 258, -1, -1, 174, -1, 176, -1,
+ -1, 59, 91, 272, 273, 274, 125, 272, 273, 274,
+ 91, -1, -1, -1, 283, -1, 91, -1, 283, -1,
+ 281, 118, -1, 42, 43, 59, 45, -1, 47, 259,
260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
- 270, 60, 123, 62, 274, 275, 276, 277, 278, 279,
+ 270, 60, -1, 62, 274, 275, 276, 277, 278, 279,
280, 281, 259, 260, 261, 262, 263, 264, 265, 266,
267, 268, 269, 270, -1, 123, -1, 274, 275, 276,
277, 278, 279, 280, 281, 94, -1, 261, 262, -1,
@@ -761,16 +775,16 @@ short luaY_check[] = { 2,
-1, -1, -1, -1, 41, 42, 43, 44, 45, 59,
47, -1, 42, 43, -1, 45, -1, 47, -1, 94,
-1, -1, 59, 60, 125, 62, -1, -1, -1, -1,
- 60, -1, 62, -1, -1, 41, -1, 259, 44, 261,
- 262, 263, -1, 265, 266, 267, 268, 269, -1, -1,
- -1, -1, 274, 59, 60, -1, 62, 94, -1, 259,
+ 60, -1, 62, -1, -1, 41, 259, 40, 44, -1,
+ 263, 44, 265, 46, -1, 268, 269, 270, -1, -1,
+ -1, 274, -1, 59, 60, 58, 62, 94, 61, 259,
-1, 261, 262, 263, 94, 265, 266, 267, 268, 269,
- 270, -1, -1, -1, 274, -1, -1, -1, 42, 43,
- 259, 45, -1, 47, 263, -1, 265, 93, -1, 268,
- 269, 270, -1, -1, -1, 274, 60, -1, 62, -1,
+ 270, -1, -1, -1, 274, -1, 259, -1, 42, 43,
+ 263, 45, 265, 47, -1, 268, 269, 93, 91, -1,
+ -1, 274, -1, -1, -1, -1, 60, -1, 62, -1,
-1, -1, -1, -1, -1, -1, -1, 259, 260, 261,
262, 263, 264, 265, 266, 267, 268, 269, 270, 125,
- -1, -1, 274, 275, 276, 277, 278, 279, 280, 281,
+ 123, -1, 274, 275, 276, 277, 278, 279, 280, 281,
94, 259, 260, 261, 262, 263, 264, 265, 266, 267,
268, 269, 270, -1, -1, -1, 274, 275, 276, 277,
278, 279, 280, 281, -1, -1, -1, -1, 259, 260,
@@ -801,8 +815,8 @@ short luaY_check[] = { 2,
-1, -1, -1, 93, -1, -1, -1, -1, -1, -1,
0, -1, -1, 125, 59, 60, -1, 62, -1, -1,
-1, -1, -1, -1, 41, -1, 93, 44, 0, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, -1, -1, -1, 93, -1,
+ 259, -1, 261, 262, 263, 125, 265, 266, 267, 268,
+ 269, -1, 59, -1, -1, 274, -1, -1, 93, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
-1, -1, -1, -1, -1, -1, 93, -1, -1, -1,
@@ -830,30 +844,44 @@ short luaY_check[] = { 2,
262, 263, -1, 265, 266, 267, 268, 269, 270, -1,
-1, -1, 274, 40, -1, 42, 43, 44, 45, 46,
47, -1, 42, 43, -1, 45, -1, 47, -1, 93,
- -1, 58, 59, 60, -1, 62, -1, -1, -1, -1,
- 60, -1, 62, -1, -1, -1, -1, -1, -1, -1,
+ -1, 58, 59, 60, 61, 62, 42, 43, -1, 45,
+ 60, 47, 62, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 60, -1, 62, -1, -1, -1,
+ -1, 125, -1, -1, 91, -1, -1, 94, -1, -1,
+ -1, -1, -1, 93, 94, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 94, -1,
+ -1, -1, -1, -1, -1, -1, 123, -1, 125, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, 3, -1, 91, -1, -1, 94, -1, -1,
- -1, -1, -1, -1, 94, -1, -1, -1, -1, -1,
- -1, 22, 23, -1, -1, -1, -1, -1, -1, -1,
- -1, 32, -1, -1, -1, -1, 123, -1, 125, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 51, -1, -1, -1, -1, -1, -1, -1, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 260, -1, -1, -1, -1, -1,
- -1, -1, -1, 114, -1, -1, -1, -1, -1, 275,
- 276, 277, 278, 279, 280, 281, -1, 128, 129, 130,
- -1, -1, -1, -1, 135, 259, 260, 261, 262, 263,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 275,
+ 276, 277, 278, 279, 280, 281, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 259, 260, 261, 262, 263,
264, 265, 266, 267, 268, 269, 270, -1, -1, -1,
- 274, 275, 276, -1, -1, -1, -1, -1, 159, -1,
+ 274, 275, 276, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 275, 276,
+ -1, -1, -1, -1, -1, -1, -1, 3, 275, 276,
277, 278, 279, 280, 281, 275, 276, 277, 278, 279,
- 280, 281,
+ 280, 281, -1, -1, -1, -1, 22, 23, -1, 275,
+ 276, 277, 278, 279, 280, 281, 32, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 51, -1, -1, -1, -1,
+ -1, -1, -1, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 107, -1, -1, -1, -1, -1, -1, -1, -1,
+ 116, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 130, 131, -1, -1, -1, -1,
+ -1, 137, -1, 139, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 163,
};
#define YYFINAL 1
#ifndef YYDEBUG
@@ -958,7 +986,9 @@ char *luaY_rule[] = {
"ffieldlist : ffieldlist1 lastcomma",
"ffieldlist1 : ffield",
"ffieldlist1 : ffieldlist1 ',' ffield",
-"ffield : NAME '=' expr1",
+"ffield : ffieldkey '=' expr1",
+"ffieldkey : '[' expr1 ']'",
+"ffieldkey : NAME",
"lfieldlist :",
"lfieldlist : lfieldlist1 lastcomma",
"lfieldlist1 : expr1",
@@ -1139,7 +1169,7 @@ luaY_reduce:
switch (luaY_n)
{
case 5:
-#line 470 "lua.stx"
+#line 468 "lua.stx"
{
code_byte(PUSHFUNCTION);
code_code(luaY_vsp[0].pFunc);
@@ -1147,28 +1177,26 @@ case 5:
}
break;
case 6:
-#line 477 "lua.stx"
+#line 475 "lua.stx"
{ luaY_val.vLong =luaY_vsp[0].vLong; init_func(); }
break;
case 7:
-#line 479 "lua.stx"
+#line 477 "lua.stx"
{
- code_byte(PUSHSTRING);
- code_word(luaI_findconstant(luaY_vsp[0].pTStr));
+ code_constant(luaY_vsp[0].pTStr);
luaY_val.vLong = 0; /* indexed variable */
init_func();
add_localvar(luaI_createfixedstring("self"));
}
break;
case 8:
-#line 489 "lua.stx"
+#line 486 "lua.stx"
{
codereturn();
luaY_val.pFunc = new(TFunc);
luaI_initTFunc(luaY_val.pFunc);
luaY_val.pFunc->size = pc;
luaY_val.pFunc->code = newvector(pc, Byte);
- luaY_val.pFunc->fileName = lua_parsedfile;
luaY_val.pFunc->lineDefined = luaY_vsp[-3].vInt;
memcpy(luaY_val.pFunc->code, basepc, pc*sizeof(Byte));
if (lua_debug)
@@ -1182,15 +1210,15 @@ case 8:
}
break;
case 13:
-#line 516 "lua.stx"
+#line 512 "lua.stx"
{ codeIf(luaY_vsp[-4].vLong, luaY_vsp[-2].vLong); }
break;
case 14:
-#line 518 "lua.stx"
+#line 514 "lua.stx"
{luaY_val.vLong=pc;}
break;
case 15:
-#line 519 "lua.stx"
+#line 515 "lua.stx"
{
basepc[luaY_vsp[-3].vLong] = IFFJMP;
code_word_at(basepc+luaY_vsp[-3].vLong+1, pc - (luaY_vsp[-3].vLong + sizeof(Word)+1));
@@ -1199,18 +1227,18 @@ case 15:
}
break;
case 16:
-#line 526 "lua.stx"
+#line 522 "lua.stx"
{luaY_val.vLong=pc;}
break;
case 17:
-#line 527 "lua.stx"
+#line 523 "lua.stx"
{
basepc[luaY_vsp[0].vLong] = IFFUPJMP;
code_word_at(basepc+luaY_vsp[0].vLong+1, pc - (luaY_vsp[-4].vLong));
}
break;
case 18:
-#line 533 "lua.stx"
+#line 529 "lua.stx"
{
{
int i;
@@ -1222,22 +1250,26 @@ case 18:
}
}
break;
+case 19:
+#line 539 "lua.stx"
+{;}
+break;
case 20:
-#line 545 "lua.stx"
+#line 541 "lua.stx"
{ nlocalvar += luaY_vsp[-1].vInt;
adjust_mult_assign(luaY_vsp[-1].vInt, luaY_vsp[0].vInt, 0);
}
break;
case 23:
-#line 553 "lua.stx"
+#line 549 "lua.stx"
{ codeIf(luaY_vsp[-3].vLong, luaY_vsp[-1].vLong); }
break;
case 24:
-#line 556 "lua.stx"
+#line 552 "lua.stx"
{luaY_val.vInt = nlocalvar;}
break;
case 25:
-#line 557 "lua.stx"
+#line 553 "lua.stx"
{
if (nlocalvar != luaY_vsp[-2].vInt)
{
@@ -1251,14 +1283,14 @@ case 25:
}
break;
case 27:
-#line 572 "lua.stx"
+#line 568 "lua.stx"
{
adjust_functioncall(luaY_vsp[-1].vLong, MULT_RET);
codereturn();
}
break;
case 28:
-#line 579 "lua.stx"
+#line 575 "lua.stx"
{
luaY_val.vLong = pc;
code_byte(0); /* open space */
@@ -1266,103 +1298,102 @@ case 28:
}
break;
case 29:
-#line 586 "lua.stx"
+#line 582 "lua.stx"
{ adjust_functioncall(luaY_vsp[0].vLong, 1); }
break;
case 30:
-#line 589 "lua.stx"
+#line 585 "lua.stx"
{ luaY_val.vLong = luaY_vsp[-1].vLong; }
break;
case 31:
-#line 590 "lua.stx"
+#line 586 "lua.stx"
{ code_byte(EQOP); luaY_val.vLong = 0; }
break;
case 32:
-#line 591 "lua.stx"
+#line 587 "lua.stx"
{ code_byte(LTOP); luaY_val.vLong = 0; }
break;
case 33:
-#line 592 "lua.stx"
+#line 588 "lua.stx"
{ code_byte(GTOP); luaY_val.vLong = 0; }
break;
case 34:
-#line 593 "lua.stx"
+#line 589 "lua.stx"
{ code_byte(EQOP); code_byte(NOTOP); luaY_val.vLong = 0; }
break;
case 35:
-#line 594 "lua.stx"
+#line 590 "lua.stx"
{ code_byte(LEOP); luaY_val.vLong = 0; }
break;
case 36:
-#line 595 "lua.stx"
+#line 591 "lua.stx"
{ code_byte(GEOP); luaY_val.vLong = 0; }
break;
case 37:
-#line 596 "lua.stx"
+#line 592 "lua.stx"
{ code_byte(ADDOP); luaY_val.vLong = 0; }
break;
case 38:
-#line 597 "lua.stx"
+#line 593 "lua.stx"
{ code_byte(SUBOP); luaY_val.vLong = 0; }
break;
case 39:
-#line 598 "lua.stx"
+#line 594 "lua.stx"
{ code_byte(MULTOP); luaY_val.vLong = 0; }
break;
case 40:
-#line 599 "lua.stx"
+#line 595 "lua.stx"
{ code_byte(DIVOP); luaY_val.vLong = 0; }
break;
case 41:
-#line 600 "lua.stx"
+#line 596 "lua.stx"
{ code_byte(POWOP); luaY_val.vLong = 0; }
break;
case 42:
-#line 601 "lua.stx"
+#line 597 "lua.stx"
{ code_byte(CONCOP); luaY_val.vLong = 0; }
break;
case 43:
-#line 602 "lua.stx"
+#line 598 "lua.stx"
{ code_byte(MINUSOP); luaY_val.vLong = 0;}
break;
case 44:
-#line 603 "lua.stx"
+#line 599 "lua.stx"
{ luaY_val.vLong = 0; }
break;
case 45:
-#line 604 "lua.stx"
+#line 600 "lua.stx"
{ luaY_val.vLong = 0;}
break;
case 46:
-#line 605 "lua.stx"
+#line 601 "lua.stx"
{ code_number(luaY_vsp[0].vFloat); luaY_val.vLong = 0; }
break;
case 47:
-#line 607 "lua.stx"
+#line 603 "lua.stx"
{
- code_byte(PUSHSTRING);
- code_word(luaY_vsp[0].vWord);
- luaY_val.vLong = 0;
+ code_string(luaY_vsp[0].vWord);
+ luaY_val.vLong = 0;
}
break;
case 48:
-#line 612 "lua.stx"
+#line 607 "lua.stx"
{code_byte(PUSHNIL); luaY_val.vLong = 0; }
break;
case 49:
-#line 613 "lua.stx"
+#line 608 "lua.stx"
{ luaY_val.vLong = luaY_vsp[0].vLong; }
break;
case 50:
-#line 614 "lua.stx"
+#line 609 "lua.stx"
{ code_byte(NOTOP); luaY_val.vLong = 0;}
break;
case 51:
-#line 615 "lua.stx"
+#line 610 "lua.stx"
{code_byte(POP); }
break;
case 52:
-#line 616 "lua.stx"
+#line 611 "lua.stx"
{
basepc[luaY_vsp[-2].vLong] = ONFJMP;
code_word_at(basepc+luaY_vsp[-2].vLong+1, pc - (luaY_vsp[-2].vLong + sizeof(Word)+1));
@@ -1370,11 +1401,11 @@ case 52:
}
break;
case 53:
-#line 621 "lua.stx"
+#line 616 "lua.stx"
{code_byte(POP); }
break;
case 54:
-#line 622 "lua.stx"
+#line 617 "lua.stx"
{
basepc[luaY_vsp[-2].vLong] = ONTJMP;
code_word_at(basepc+luaY_vsp[-2].vLong+1, pc - (luaY_vsp[-2].vLong + sizeof(Word)+1));
@@ -1382,20 +1413,20 @@ case 54:
}
break;
case 55:
-#line 630 "lua.stx"
+#line 625 "lua.stx"
{
code_byte(CREATEARRAY);
luaY_val.vLong = pc; code_word(0);
}
break;
case 56:
-#line 635 "lua.stx"
+#line 630 "lua.stx"
{
code_word_at(basepc+luaY_vsp[-3].vLong, luaY_vsp[-1].vInt);
}
break;
case 57:
-#line 641 "lua.stx"
+#line 636 "lua.stx"
{
code_byte(CALLFUNC);
code_byte(luaY_vsp[-1].vInt+luaY_vsp[0].vInt);
@@ -1404,11 +1435,11 @@ case 57:
}
break;
case 58:
-#line 649 "lua.stx"
+#line 644 "lua.stx"
{ luaY_val.vInt = 0; }
break;
case 59:
-#line 651 "lua.stx"
+#line 646 "lua.stx"
{
code_byte(PUSHSELF);
code_word(luaI_findconstant(luaY_vsp[0].pTStr));
@@ -1416,31 +1447,31 @@ case 59:
}
break;
case 60:
-#line 659 "lua.stx"
+#line 654 "lua.stx"
{ luaY_val.vInt = adjust_functioncall(luaY_vsp[-1].vLong, 1); }
break;
case 61:
-#line 660 "lua.stx"
+#line 655 "lua.stx"
{ luaY_val.vInt = 1; }
break;
case 62:
-#line 663 "lua.stx"
+#line 658 "lua.stx"
{ luaY_val.vLong = 0; }
break;
case 63:
-#line 664 "lua.stx"
+#line 659 "lua.stx"
{ luaY_val.vLong = luaY_vsp[0].vLong; }
break;
case 64:
-#line 667 "lua.stx"
+#line 662 "lua.stx"
{ if (luaY_vsp[0].vLong != 0) luaY_val.vLong = luaY_vsp[0].vLong; else luaY_val.vLong = -1; }
break;
case 65:
-#line 668 "lua.stx"
+#line 663 "lua.stx"
{ luaY_val.vLong = adjust_functioncall(luaY_vsp[-1].vLong, 1); }
break;
case 66:
-#line 669 "lua.stx"
+#line 664 "lua.stx"
{
if (luaY_vsp[0].vLong == 0) luaY_val.vLong = -(luaY_vsp[-1].vLong + 1); /* -length */
else
@@ -1451,19 +1482,19 @@ case 66:
}
break;
case 67:
-#line 679 "lua.stx"
+#line 674 "lua.stx"
{ luaY_val.vInt = close_parlist(0); }
break;
case 68:
-#line 680 "lua.stx"
+#line 675 "lua.stx"
{ luaY_val.vInt = close_parlist(luaY_vsp[0].vInt); }
break;
case 69:
-#line 683 "lua.stx"
+#line 678 "lua.stx"
{ luaY_val.vInt = luaY_vsp[0].vInt; }
break;
case 70:
-#line 685 "lua.stx"
+#line 680 "lua.stx"
{
if (luaY_vsp[-2].vInt)
lua_error("invalid parameter list");
@@ -1471,113 +1502,110 @@ case 70:
}
break;
case 71:
-#line 692 "lua.stx"
+#line 687 "lua.stx"
{ add_localvar(luaY_vsp[0].pTStr); luaY_val.vInt = 0; }
break;
case 72:
-#line 693 "lua.stx"
+#line 688 "lua.stx"
{ luaY_val.vInt = 1; }
break;
case 73:
-#line 697 "lua.stx"
+#line 692 "lua.stx"
{ flush_list(luaY_vsp[0].vInt/FIELDS_PER_FLUSH, luaY_vsp[0].vInt%FIELDS_PER_FLUSH); }
break;
case 74:
-#line 699 "lua.stx"
+#line 694 "lua.stx"
{ luaY_val.vInt = luaY_vsp[-2].vInt+luaY_vsp[0].vInt; }
break;
case 75:
-#line 701 "lua.stx"
+#line 696 "lua.stx"
{ luaY_val.vInt = luaY_vsp[-1].vInt; flush_record(luaY_vsp[-1].vInt%FIELDS_PER_FLUSH); }
break;
case 76:
-#line 705 "lua.stx"
+#line 700 "lua.stx"
{ luaY_val.vInt = 0; }
break;
case 77:
-#line 707 "lua.stx"
+#line 702 "lua.stx"
{ luaY_val.vInt = luaY_vsp[0].vInt; flush_record(luaY_vsp[0].vInt%FIELDS_PER_FLUSH); }
break;
case 80:
-#line 714 "lua.stx"
+#line 709 "lua.stx"
{ luaY_val.vInt = 0; }
break;
case 81:
-#line 715 "lua.stx"
+#line 710 "lua.stx"
{ luaY_val.vInt = luaY_vsp[-1].vInt; }
break;
case 82:
-#line 718 "lua.stx"
+#line 713 "lua.stx"
{luaY_val.vInt=1;}
break;
case 83:
-#line 720 "lua.stx"
+#line 715 "lua.stx"
{
luaY_val.vInt=luaY_vsp[-2].vInt+1;
if (luaY_val.vInt%FIELDS_PER_FLUSH == 0) flush_record(FIELDS_PER_FLUSH);
}
break;
-case 84:
-#line 727 "lua.stx"
-{
- push_field(luaI_findconstant(luaY_vsp[-2].pTStr));
- }
+case 86:
+#line 725 "lua.stx"
+{ code_constant(luaY_vsp[0].pTStr); }
break;
-case 85:
-#line 732 "lua.stx"
+case 87:
+#line 728 "lua.stx"
{ luaY_val.vInt = 0; }
break;
-case 86:
-#line 733 "lua.stx"
+case 88:
+#line 729 "lua.stx"
{ luaY_val.vInt = luaY_vsp[-1].vInt; }
break;
-case 87:
-#line 736 "lua.stx"
+case 89:
+#line 732 "lua.stx"
{luaY_val.vInt=1;}
break;
-case 88:
-#line 738 "lua.stx"
+case 90:
+#line 734 "lua.stx"
{
luaY_val.vInt=luaY_vsp[-2].vInt+1;
if (luaY_val.vInt%FIELDS_PER_FLUSH == 0)
flush_list(luaY_val.vInt/FIELDS_PER_FLUSH - 1, FIELDS_PER_FLUSH);
}
break;
-case 89:
-#line 746 "lua.stx"
+case 91:
+#line 742 "lua.stx"
{
nvarbuffer = 0;
add_varbuffer(luaY_vsp[0].vLong);
luaY_val.vInt = (luaY_vsp[0].vLong == 0) ? 1 : 0;
}
break;
-case 90:
-#line 752 "lua.stx"
+case 92:
+#line 748 "lua.stx"
{
add_varbuffer(luaY_vsp[0].vLong);
luaY_val.vInt = (luaY_vsp[0].vLong == 0) ? luaY_vsp[-2].vInt + 1 : luaY_vsp[-2].vInt;
}
break;
-case 91:
-#line 758 "lua.stx"
+case 93:
+#line 754 "lua.stx"
{ luaY_val.vLong = luaY_vsp[0].vLong; }
break;
-case 92:
-#line 760 "lua.stx"
+case 94:
+#line 756 "lua.stx"
{
luaY_val.vLong = 0; /* indexed variable */
}
break;
-case 93:
-#line 764 "lua.stx"
+case 95:
+#line 760 "lua.stx"
{
- code_byte(PUSHSTRING);
- code_word(luaI_findconstant(luaY_vsp[0].pTStr));
- luaY_val.vLong = 0; /* indexed variable */
+ code_constant(luaY_vsp[0].pTStr);
+ luaY_val.vLong = 0; /* indexed variable */
}
break;
-case 94:
-#line 772 "lua.stx"
+case 96:
+#line 767 "lua.stx"
{
int local = lua_localname(luaY_vsp[0].pTStr);
if (local == -1) /* global var */
@@ -1586,30 +1614,30 @@ case 94:
luaY_val.vLong = -(local+1); /* return negative value */
}
break;
-case 95:
-#line 781 "lua.stx"
+case 97:
+#line 776 "lua.stx"
{ lua_pushvar(luaY_vsp[0].vLong); }
break;
-case 96:
-#line 784 "lua.stx"
+case 98:
+#line 779 "lua.stx"
{store_localvar(luaY_vsp[0].pTStr, 0); luaY_val.vInt = 1;}
break;
-case 97:
-#line 786 "lua.stx"
+case 99:
+#line 781 "lua.stx"
{
store_localvar(luaY_vsp[0].pTStr, luaY_vsp[-2].vInt);
luaY_val.vInt = luaY_vsp[-2].vInt+1;
}
break;
-case 98:
-#line 792 "lua.stx"
+case 100:
+#line 787 "lua.stx"
{ luaY_val.vInt = 0; }
break;
-case 99:
-#line 793 "lua.stx"
+case 101:
+#line 788 "lua.stx"
{ luaY_val.vInt = luaY_vsp[0].vLong; }
break;
-#line 1613 "y.tab.c"
+#line 1641 "y.tab.c"
}
luaY_ssp -= luaY_m;
luaY_state = *luaY_ssp;
diff --git a/src/table.c b/src/table.c
index b2e60a35..6f24ca9b 100644
--- a/src/table.c
+++ b/src/table.c
@@ -3,9 +3,11 @@
** Module to control static tables
*/
-char *rcs_table="$Id: table.c,v 2.58 1996/11/01 12:47:45 roberto Exp $";
+char *rcs_table="$Id: table.c,v 2.72 1997/06/17 18:09:31 roberto Exp $";
-#include "mem.h"
+#include "luamem.h"
+#include "auxlib.h"
+#include "func.h"
#include "opcode.h"
#include "tree.h"
#include "hash.h"
@@ -27,49 +29,14 @@ Word lua_nconstant = 0;
static Long lua_maxconstant = 0;
-#define GARBAGE_BLOCK 50
-
-static void lua_nextvar (void);
-
-/*
-** Internal functions
-*/
-static struct {
- char *name;
- lua_CFunction func;
-} int_funcs[] = {
- {"assert", luaI_assert},
- {"call", luaI_call},
- {"dofile", lua_internaldofile},
- {"dostring", lua_internaldostring},
- {"error", luaI_error},
- {"getglobal", luaI_getglobal},
- {"next", lua_next},
- {"nextvar", lua_nextvar},
- {"print", luaI_print},
- {"setfallback", luaI_setfallback},
- {"setglobal", luaI_setglobal},
- {"tonumber", lua_obj2number},
- {"tostring", luaI_tostring},
- {"type", luaI_type}
-};
-
-#define INTFUNCSIZE (sizeof(int_funcs)/sizeof(int_funcs[0]))
+#define GARBAGE_BLOCK 100
void luaI_initsymbol (void)
{
- int i;
- Word n;
lua_maxsymbol = BUFFER_BLOCK;
lua_table = newvector(lua_maxsymbol, Symbol);
- for (i=0; i<INTFUNCSIZE; i++)
- {
- n = luaI_findsymbolbyname(int_funcs[i].name);
- s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = int_funcs[i].func;
- }
- n = luaI_findsymbolbyname("_VERSION_");
- s_tag(n) = LUA_T_STRING; s_tsvalue(n) = lua_createstring(LUA_VERSION);
+ luaI_predefine();
}
@@ -92,17 +59,17 @@ void luaI_initconstant (void)
*/
Word luaI_findsymbol (TaggedString *t)
{
- if (t->varindex == NOT_USED)
+ if (t->u.s.varindex == NOT_USED)
{
if (lua_ntable == lua_maxsymbol)
lua_maxsymbol = growvector(&lua_table, lua_maxsymbol, Symbol,
symbolEM, MAX_WORD);
- t->varindex = lua_ntable;
+ t->u.s.varindex = lua_ntable;
lua_table[lua_ntable].varname = t;
- s_tag(lua_ntable) = LUA_T_NIL;
+ s_ttype(lua_ntable) = LUA_T_NIL;
lua_ntable++;
}
- return t->varindex;
+ return t->u.s.varindex;
}
@@ -118,16 +85,16 @@ Word luaI_findsymbolbyname (char *name)
*/
Word luaI_findconstant (TaggedString *t)
{
- if (t->constindex == NOT_USED)
+ if (t->u.s.constindex == NOT_USED)
{
if (lua_nconstant == lua_maxconstant)
lua_maxconstant = growvector(&lua_constant, lua_maxconstant, TaggedString *,
constantEM, MAX_WORD);
- t->constindex = lua_nconstant;
+ t->u.s.constindex = lua_nconstant;
lua_constant[lua_nconstant] = t;
lua_nconstant++;
}
- return t->constindex;
+ return t->u.s.constindex;
}
@@ -145,10 +112,16 @@ TaggedString *luaI_createfixedstring (char *name)
}
+int luaI_globaldefined (char *name)
+{
+ return ttype(&lua_table[luaI_findsymbolbyname(name)].object) != LUA_T_NIL;
+}
+
+
/*
** Traverse symbol table objects
*/
-static char *lua_travsymbol (int (*fn)(Object *))
+static char *lua_travsymbol (int (*fn)(TObject *))
{
Word i;
for (i=0; i<lua_ntable; i++)
@@ -161,13 +134,14 @@ static char *lua_travsymbol (int (*fn)(Object *))
/*
** Mark an object if it is a string or a unmarked array.
*/
-int lua_markobject (Object *o)
+int lua_markobject (TObject *o)
{/* if already marked, does not change mark value */
- if (tag(o) == LUA_T_STRING && !tsvalue(o)->marked)
+ if (ttype(o) == LUA_T_USERDATA ||
+ (ttype(o) == LUA_T_STRING && !tsvalue(o)->marked))
tsvalue(o)->marked = 1;
- else if (tag(o) == LUA_T_ARRAY)
+ else if (ttype(o) == LUA_T_ARRAY)
lua_hashmark (avalue(o));
- else if ((o->tag == LUA_T_FUNCTION || o->tag == LUA_T_MARK)
+ else if ((o->ttype == LUA_T_FUNCTION || o->ttype == LUA_T_MARK)
&& !o->value.tf->marked)
o->value.tf->marked = 1;
return 0;
@@ -176,11 +150,11 @@ int lua_markobject (Object *o)
/*
* returns 0 if the object is going to be (garbage) collected
*/
-int luaI_ismarked (Object *o)
+int luaI_ismarked (TObject *o)
{
- switch (o->tag)
+ switch (o->ttype)
{
- case LUA_T_STRING:
+ case LUA_T_STRING: case LUA_T_USERDATA:
return o->value.ts->marked;
case LUA_T_FUNCTION:
return o->value.tf->marked;
@@ -192,76 +166,90 @@ int luaI_ismarked (Object *o)
}
+static void call_nilIM (void)
+{ /* signals end of garbage collection */
+ TObject t;
+ ttype(&t) = LUA_T_NIL;
+ luaI_gcIM(&t); /* end of list */
+}
+
/*
** Garbage collection.
** Delete all unused strings and arrays.
*/
-Long luaI_collectgarbage (void)
+static long gc_block = GARBAGE_BLOCK;
+static long gc_nentity = 0; /* total of strings, arrays, etc */
+
+static void markall (void)
{
- Long recovered = 0;
lua_travstack(lua_markobject); /* mark stack objects */
lua_travsymbol(lua_markobject); /* mark symbol table objects */
luaI_travlock(lua_markobject); /* mark locked objects */
luaI_travfallbacks(lua_markobject); /* mark fallbacks */
+}
+
+
+long lua_collectgarbage (long limit)
+{
+ long recovered = 0;
+ Hash *freetable;
+ TaggedString *freestr;
+ TFunc *freefunc;
+ markall();
luaI_invalidaterefs();
- recovered += lua_strcollector();
- recovered += lua_hashcollector();
- recovered += luaI_funccollector();
+ freetable = luaI_hashcollector(&recovered);
+ freestr = luaI_strcollector(&recovered);
+ freefunc = luaI_funccollector(&recovered);
+ gc_nentity -= recovered;
+ gc_block = (limit == 0) ? 2*(gc_block-recovered) : gc_nentity+limit;
+ luaI_hashcallIM(freetable);
+ luaI_strcallIM(freestr);
+ call_nilIM();
+ luaI_hashfree(freetable);
+ luaI_strfree(freestr);
+ luaI_funcfree(freefunc);
return recovered;
}
+
void lua_pack (void)
{
- static unsigned long block = GARBAGE_BLOCK;
- static unsigned long nentity = 0; /* total of strings, arrays, etc */
- unsigned long recovered = 0;
- if (nentity++ < block) return;
- recovered = luaI_collectgarbage();
- block = 2*(block-recovered);
- nentity -= recovered;
+ if (++gc_nentity >= gc_block)
+ lua_collectgarbage(0);
}
/*
** Internal function: return next global variable
*/
-static void lua_nextvar (void)
+void luaI_nextvar (void)
{
- Word next;
- lua_Object o = lua_getparam(1);
- if (o == LUA_NOOBJECT)
- lua_error("too few arguments to function `nextvar'");
- if (lua_getparam(2) != LUA_NOOBJECT)
- lua_error("too many arguments to function `nextvar'");
- if (lua_isnil(o))
- next = 0;
- else if (!lua_isstring(o))
- {
- lua_error("incorrect argument to function `nextvar'");
- return; /* to avoid warnings */
- }
- else
- next = luaI_findsymbolbyname(lua_getstring(o)) + 1;
- while (next < lua_ntable && s_tag(next) == LUA_T_NIL) next++;
- if (next < lua_ntable)
- {
- lua_pushstring(lua_table[next].varname->str);
- luaI_pushobject(&s_object(next));
- }
+ Word next;
+ if (lua_isnil(lua_getparam(1)))
+ next = 0;
+ else
+ next = luaI_findsymbolbyname(luaL_check_string(1)) + 1;
+ while (next < lua_ntable && s_ttype(next) == LUA_T_NIL)
+ next++;
+ if (next < lua_ntable) {
+ lua_pushstring(lua_table[next].varname->str);
+ luaI_pushobject(&s_object(next));
+ }
}
-static Object *functofind;
-static int checkfunc (Object *o)
+static TObject *functofind;
+static int checkfunc (TObject *o)
{
- if (o->tag == LUA_T_FUNCTION)
+ if (o->ttype == LUA_T_FUNCTION)
return
- ((functofind->tag == LUA_T_FUNCTION || functofind->tag == LUA_T_MARK)
+ ((functofind->ttype == LUA_T_FUNCTION || functofind->ttype == LUA_T_MARK)
&& (functofind->value.tf == o->value.tf));
- if (o->tag == LUA_T_CFUNCTION)
+ if (o->ttype == LUA_T_CFUNCTION)
return
- ((functofind->tag == LUA_T_CFUNCTION || functofind->tag == LUA_T_CMARK)
- && (functofind->value.f == o->value.f));
+ ((functofind->ttype == LUA_T_CFUNCTION ||
+ functofind->ttype == LUA_T_CMARK) &&
+ (functofind->value.f == o->value.f));
return 0;
}
@@ -270,7 +258,7 @@ char *lua_getobjname (lua_Object o, char **name)
{ /* try to find a name for given function */
functofind = luaI_Address(o);
if ((*name = luaI_travfallbacks(checkfunc)) != NULL)
- return "fallback";
+ return "tag-method";
else if ((*name = lua_travsymbol(checkfunc)) != NULL)
return "global";
else return "";
diff --git a/src/table.h b/src/table.h
index d7003c96..5a628526 100644
--- a/src/table.h
+++ b/src/table.h
@@ -1,7 +1,7 @@
/*
** Module to control static tables
** TeCGraf - PUC-Rio
-** $Id: table.h,v 2.21 1996/04/22 18:00:37 roberto Exp $
+** $Id: table.h,v 2.25 1997/05/26 14:42:36 roberto Exp $
*/
#ifndef table_h
@@ -12,7 +12,7 @@
typedef struct
{
- Object object;
+ TObject object;
TaggedString *varname;
} Symbol;
@@ -28,10 +28,11 @@ Word luaI_findsymbolbyname (char *name);
Word luaI_findsymbol (TaggedString *t);
Word luaI_findconstant (TaggedString *t);
Word luaI_findconstantbyname (char *name);
+int luaI_globaldefined (char *name);
+void luaI_nextvar (void);
TaggedString *luaI_createfixedstring (char *str);
-int lua_markobject (Object *o);
-int luaI_ismarked (Object *o);
-Long luaI_collectgarbage (void);
+int lua_markobject (TObject *o);
+int luaI_ismarked (TObject *o);
void lua_pack (void);
diff --git a/src/tree.c b/src/tree.c
index 8fbe4200..6f3f2d44 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -3,17 +3,18 @@
** TecCGraf - PUC-Rio
*/
-char *rcs_tree="$Id: tree.c,v 1.20 1996/03/14 15:56:26 roberto Exp $";
+char *rcs_tree="$Id: tree.c,v 1.28 1997/06/11 14:24:40 roberto Exp $";
#include <string.h>
-#include "mem.h"
+#include "luamem.h"
#include "lua.h"
#include "tree.h"
#include "lex.h"
#include "hash.h"
#include "table.h"
+#include "fallback.h"
#define NUM_HASHS 64
@@ -28,23 +29,43 @@ static int initialized = 0;
static stringtable string_root[NUM_HASHS];
-static TaggedString EMPTY = {NOT_USED, NOT_USED, 0, 2, {0}};
+static TaggedString EMPTY = {LUA_T_STRING, NULL, {{NOT_USED, NOT_USED}},
+ 0, 2, {0}};
-static unsigned long hash (char *str)
+static unsigned long hash (char *s, int tag)
{
- unsigned long h = 0;
- while (*str)
- h = ((h<<5)-h)^(unsigned char)*(str++);
+ unsigned long h;
+ if (tag != LUA_T_STRING)
+ h = (unsigned long)s;
+ else {
+ h = 0;
+ while (*s)
+ h = ((h<<5)-h)^(unsigned char)*(s++);
+ }
return h;
}
+
+static void luaI_inittree (void)
+{
+ int i;
+ for (i=0; i<NUM_HASHS; i++) {
+ string_root[i].size = 0;
+ string_root[i].nuse = 0;
+ string_root[i].hash = NULL;
+ }
+}
+
+
static void initialize (void)
{
initialized = 1;
+ luaI_inittree();
luaI_addReserved();
luaI_initsymbol();
luaI_initconstant();
+ luaI_initfallbacks();
}
@@ -58,8 +79,7 @@ static void grow (stringtable *tb)
/* rehash */
tb->nuse = 0;
for (i=0; i<tb->size; i++)
- if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY)
- {
+ if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY) {
int h = tb->hash[i]->hash%newsize;
while (newhash[h])
h = (h+1)%newsize;
@@ -71,10 +91,30 @@ static void grow (stringtable *tb)
tb->hash = newhash;
}
-static TaggedString *insert (char *str, stringtable *tb)
+
+static TaggedString *newone(char *buff, int tag, unsigned long h)
+{
+ TaggedString *ts;
+ if (tag == LUA_T_STRING) {
+ ts = (TaggedString *)luaI_malloc(sizeof(TaggedString)+strlen(buff));
+ strcpy(ts->str, buff);
+ ts->u.s.varindex = ts->u.s.constindex = NOT_USED;
+ ts->tag = LUA_T_STRING;
+ }
+ else {
+ ts = (TaggedString *)luaI_malloc(sizeof(TaggedString));
+ ts->u.v = buff;
+ ts->tag = tag == LUA_ANYTAG ? 0 : tag;
+ }
+ ts->marked = 0;
+ ts->hash = h;
+ return ts;
+}
+
+static TaggedString *insert (char *buff, int tag, stringtable *tb)
{
TaggedString *ts;
- unsigned long h = hash(str);
+ unsigned long h = hash(buff, tag);
int i;
int j = -1;
if ((Long)tb->nuse*3 >= (Long)tb->size*2)
@@ -84,12 +124,14 @@ static TaggedString *insert (char *str, stringtable *tb)
grow(tb);
}
i = h%tb->size;
- while (tb->hash[i])
+ while ((ts = tb->hash[i]) != NULL)
{
- if (tb->hash[i] == &EMPTY)
+ if (ts == &EMPTY)
j = i;
- else if (strcmp(str, tb->hash[i]->str) == 0)
- return tb->hash[i];
+ else if ((ts->tag == LUA_T_STRING) ?
+ (tag == LUA_T_STRING && (strcmp(buff, ts->str) == 0)) :
+ ((tag == ts->tag || tag == LUA_ANYTAG) && buff == ts->u.v))
+ return ts;
i = (i+1)%tb->size;
}
/* not found */
@@ -98,27 +140,49 @@ static TaggedString *insert (char *str, stringtable *tb)
i = j;
else
tb->nuse++;
- ts = tb->hash[i] = (TaggedString *)luaI_malloc(sizeof(TaggedString)+strlen(str));
- strcpy(ts->str, str);
- ts->marked = 0;
- ts->hash = h;
- ts->varindex = ts->constindex = NOT_USED;
+ ts = tb->hash[i] = newone(buff, tag, h);
return ts;
}
-TaggedString *lua_createstring (char *str)
+TaggedString *luaI_createudata (void *udata, int tag)
{
- return insert(str, &string_root[(unsigned)str[0]%NUM_HASHS]);
+ return insert(udata, tag, &string_root[(unsigned)udata%NUM_HASHS]);
+}
+
+TaggedString *lua_createstring (char *str)
+{
+ return insert(str, LUA_T_STRING, &string_root[(unsigned)str[0]%NUM_HASHS]);
+}
+
+
+void luaI_strcallIM (TaggedString *l)
+{
+ TObject o;
+ ttype(&o) = LUA_T_USERDATA;
+ for (; l; l=l->next) {
+ tsvalue(&o) = l;
+ luaI_gcIM(&o);
+ }
+}
+
+
+void luaI_strfree (TaggedString *l)
+{
+ while (l) {
+ TaggedString *next = l->next;
+ luaI_free(l);
+ l = next;
+ }
}
/*
** Garbage collection function.
-** This function traverse the string list freeing unindexed strings
*/
-Long lua_strcollector (void)
+TaggedString *luaI_strcollector (long *acum)
{
Long counter = 0;
+ TaggedString *frees = NULL;
int i;
for (i=0; i<NUM_HASHS; i++)
{
@@ -133,13 +197,15 @@ Long lua_strcollector (void)
t->marked = 0;
else
{
- luaI_free(t);
+ t->next = frees;
+ frees = t;
tb->hash[j] = &EMPTY;
counter++;
}
}
}
}
- return counter;
+ *acum += counter;
+ return frees;
}
diff --git a/src/tree.h b/src/tree.h
index f3af0a0a..22b81ae8 100644
--- a/src/tree.h
+++ b/src/tree.h
@@ -1,7 +1,7 @@
/*
** tree.h
** TecCGraf - PUC-Rio
-** $Id: tree.h,v 1.14 1996/02/26 17:07:49 roberto Exp $
+** $Id: tree.h,v 1.18 1997/06/09 17:28:14 roberto Exp $
*/
#ifndef tree_h
@@ -14,8 +14,15 @@
typedef struct TaggedString
{
- Word varindex; /* != NOT_USED if this is a symbol */
- Word constindex; /* != NOT_USED if this is a constant */
+ int tag; /* if != LUA_T_STRING, this is a userdata */
+ struct TaggedString *next;
+ union {
+ struct {
+ Word varindex; /* != NOT_USED if this is a symbol */
+ Word constindex; /* != NOT_USED if this is a constant */
+ } s;
+ void *v; /* if this is a userdata, here is its value */
+ } u;
unsigned long hash; /* 0 if not initialized */
int marked; /* for garbage collection; never collect (nor change) if > 1 */
char str[1]; /* \0 byte already reserved */
@@ -23,6 +30,9 @@ typedef struct TaggedString
TaggedString *lua_createstring (char *str);
-Long lua_strcollector (void);
+TaggedString *luaI_createudata (void *udata, int tag);
+TaggedString *luaI_strcollector (long *cont);
+void luaI_strfree (TaggedString *l);
+void luaI_strcallIM (TaggedString *l);
#endif
diff --git a/src/undump.c b/src/undump.c
index 2e6ee07f..1a00ef7f 100644
--- a/src/undump.c
+++ b/src/undump.c
@@ -3,33 +3,28 @@
** load bytecodes from files
*/
-char* rcs_undump="$Id: undump.c,v 1.21 1996/11/18 11:18:29 lhf Exp $";
+char* rcs_undump="$Id: undump.c,v 1.24 1997/06/17 18:19:17 roberto Exp $";
#include <stdio.h>
#include <string.h>
+#include "auxlib.h"
#include "opcode.h"
-#include "mem.h"
+#include "luamem.h"
#include "table.h"
#include "undump.h"
+#include "zio.h"
static int swapword=0;
static int swapfloat=0;
static TFunc* Main=NULL; /* functions in a chunk */
static TFunc* lastF=NULL;
-static void warn(char* s) /* TODO: remove */
-{
-#if 0
- fprintf(stderr,"undump: %s\n",s);
-#endif
-}
-
static void FixCode(Byte* code, Byte* end) /* swap words */
{
Byte* p;
for (p=code; p!=end;)
{
- OpCode op=(OpCode)*p;
+ int op=*p;
switch (op)
{
case PUSHNIL:
@@ -83,6 +78,8 @@ static void FixCode(Byte* code, Byte* end) /* swap words */
case STORELIST0:
case ADJUST:
case RETCODE:
+ case VARARGS:
+ case STOREMAP:
p+=2;
break;
case STORELIST:
@@ -132,7 +129,8 @@ static void FixCode(Byte* code, Byte* end) /* swap words */
break;
}
default:
- lua_error("corrupt binary file");
+ luaL_verror("corrupt binary file: bad opcode %d at %d\n",
+ op,(int)(p-code));
break;
}
}
@@ -150,149 +148,152 @@ static void Unthread(Byte* code, int i, int v)
}
}
-static int LoadWord(FILE* D)
+static int LoadWord(ZIO* Z)
{
Word w;
- fread(&w,sizeof(w),1,D);
+ zread(Z,&w,sizeof(w));
if (swapword)
{
- Byte* p=(Byte*)&w; /* TODO: need union? */
+ Byte* p=(Byte*)&w;
Byte t;
t=p[0]; p[0]=p[1]; p[1]=t;
}
return w;
}
-static int LoadSize(FILE* D)
+static int LoadSize(ZIO* Z)
{
- Word hi=LoadWord(D);
- Word lo=LoadWord(D);
+ Word hi=LoadWord(Z);
+ Word lo=LoadWord(Z);
int s=(hi<<16)|lo;
if ((Word)s != s) lua_error("code too long");
return s;
}
-static void* LoadBlock(int size, FILE* D)
+static void* LoadBlock(int size, ZIO* Z)
{
void* b=luaI_malloc(size);
- fread(b,size,1,D);
+ zread(Z,b,size);
return b;
}
-static char* LoadString(FILE* D)
+static char* LoadString(ZIO* Z)
{
- int size=LoadWord(D);
+ int size=LoadWord(Z);
char *b=luaI_buffer(size);
- fread(b,size,1,D);
+ zread(Z,b,size);
return b;
}
-static char* LoadNewString(FILE* D)
+static char* LoadNewString(ZIO* Z)
{
- return LoadBlock(LoadWord(D),D);
+ return LoadBlock(LoadWord(Z),Z);
}
-static void LoadFunction(FILE* D)
+static void LoadFunction(ZIO* Z)
{
TFunc* tf=new(TFunc);
tf->next=NULL;
tf->locvars=NULL;
- tf->size=LoadSize(D);
- tf->lineDefined=LoadWord(D);
+ tf->size=LoadSize(Z);
+ tf->lineDefined=LoadWord(Z);
if (IsMain(tf)) /* new main */
{
- tf->fileName=LoadNewString(D);
+ tf->fileName=LoadNewString(Z);
Main=lastF=tf;
}
else /* fix PUSHFUNCTION */
{
- tf->marked=LoadWord(D);
+ tf->marked=LoadWord(Z);
tf->fileName=Main->fileName;
memcpy(Main->code+tf->marked,&tf,sizeof(tf));
lastF=lastF->next=tf;
}
- tf->code=LoadBlock(tf->size,D);
+ tf->code=LoadBlock(tf->size,Z);
if (swapword || swapfloat) FixCode(tf->code,tf->code+tf->size);
while (1) /* unthread */
{
- int c=getc(D);
+ int c=zgetc(Z);
if (c==ID_VAR) /* global var */
{
- int i=LoadWord(D);
- char* s=LoadString(D);
+ int i=LoadWord(Z);
+ char* s=LoadString(Z);
int v=luaI_findsymbolbyname(s);
Unthread(tf->code,i,v);
}
else if (c==ID_STR) /* constant string */
{
- int i=LoadWord(D);
- char* s=LoadString(D);
+ int i=LoadWord(Z);
+ char* s=LoadString(Z);
int v=luaI_findconstantbyname(s);
Unthread(tf->code,i,v);
}
else
{
- ungetc(c,D);
+ zungetc(Z);
break;
}
}
}
-static void LoadSignature(FILE* D)
+static void LoadSignature(ZIO* Z)
{
char* s=SIGNATURE;
- while (*s!=0 && getc(D)==*s)
+ while (*s!=0 && zgetc(Z)==*s)
++s;
- if (*s!=0) lua_error("bad signature");
+ if (*s!=0) lua_error("cannot load binary file: bad signature");
}
-static void LoadHeader(FILE* D) /* TODO: error handling */
+static void LoadHeader(ZIO* Z)
{
Word w,tw=TEST_WORD;
float f,tf=TEST_FLOAT;
int version;
- LoadSignature(D);
- version=getc(D);
+ LoadSignature(Z);
+ version=zgetc(Z);
if (version>0x23) /* after 2.5 */
{
- int oldsizeofW=getc(D);
- int oldsizeofF=getc(D);
- int oldsizeofP=getc(D);
+ int oldsizeofW=zgetc(Z);
+ int oldsizeofF=zgetc(Z);
+ int oldsizeofP=zgetc(Z);
if (oldsizeofW!=2)
- lua_error("cannot load binary file created on machine with sizeof(Word)!=2");
+ luaL_verror(
+ "cannot load binary file created on machine with sizeof(Word)=%d; "
+ "expected 2",oldsizeofW);
if (oldsizeofF!=4)
- lua_error("cannot load binary file created on machine with sizeof(float)!=4. not an IEEE machine?");
- if (oldsizeofP!=sizeof(TFunc*)) /* TODO: pack */
- lua_error("cannot load binary file: different pointer sizes");
+ luaL_verror(
+ "cannot load binary file created on machine with sizeof(float)=%d; "
+ "expected 4\nnot an IEEE machine?",oldsizeofF);
+ if (oldsizeofP!=sizeof(TFunc*)) /* TODO: pack? */
+ luaL_verror(
+ "cannot load binary file created on machine with sizeof(TFunc*)=%d; "
+ "expected %d",oldsizeofP,(int)sizeof(TFunc*));
}
- fread(&w,sizeof(w),1,D); /* test word */
+ zread(Z,&w,sizeof(w)); /* test word */
if (w!=tw)
{
swapword=1;
- warn("different byte order");
}
- fread(&f,sizeof(f),1,D); /* test float */
+ zread(Z,&f,sizeof(f)); /* test float */
if (f!=tf)
{
- Byte* p=(Byte*)&f; /* TODO: need union? */
+ Byte* p=(Byte*)&f;
Byte t;
swapfloat=1;
t=p[0]; p[0]=p[3]; p[3]=t;
t=p[1]; p[1]=p[2]; p[2]=t;
if (f!=tf) /* TODO: try another perm? */
- lua_error("different float representation");
- else
- warn("different byte order in floats");
+ lua_error("cannot load binary file: unknown float representation");
}
}
-static void LoadChunk(FILE* D)
+static void LoadChunk(ZIO* Z)
{
- LoadHeader(D);
+ LoadHeader(Z);
while (1)
{
- int c=getc(D);
- if (c==ID_FUN) LoadFunction(D); else { ungetc(c,D); break; }
+ int c=zgetc(Z);
+ if (c==ID_FUN) LoadFunction(Z); else { zungetc(Z); break; }
}
}
@@ -300,30 +301,26 @@ static void LoadChunk(FILE* D)
** load one chunk from a file.
** return list of functions found, headed by main, or NULL at EOF.
*/
-TFunc* luaI_undump1(FILE* D)
+TFunc* luaI_undump1(ZIO* Z)
{
- while (1)
+ int c=zgetc(Z);
+ if (c==ID_CHUNK)
{
- int c=getc(D);
- if (c==ID_CHUNK)
- {
- LoadChunk(D);
- return Main;
- }
- else if (c==EOF)
- return NULL;
- else
- lua_error("not a lua binary file");
+ LoadChunk(Z);
+ return Main;
}
+ else if (c!=EOZ)
+ lua_error("not a lua binary file");
+ return NULL;
}
/*
** load and run all chunks in a file
*/
-int luaI_undump(FILE* D)
+int luaI_undump(ZIO* Z)
{
TFunc* m;
- while ((m=luaI_undump1(D)))
+ while ((m=luaI_undump1(Z)))
{
int status=luaI_dorun(m);
luaI_freefunc(m);
diff --git a/src/undump.h b/src/undump.h
index 8d757e36..39373583 100644
--- a/src/undump.h
+++ b/src/undump.h
@@ -1,10 +1,14 @@
/*
** undump.h
** definitions for lua decompiler
-** $Id: undump.h,v 1.3 1996/11/14 11:44:34 lhf Exp $
+** $Id: undump.h,v 1.6 1997/06/17 18:19:17 roberto Exp $
*/
+#ifndef undump_h
+#define undump_h
+
#include "func.h"
+#include "zio.h"
#define IsMain(f) (f->lineDefined==0)
@@ -15,9 +19,12 @@
#define ID_VAR 'V'
#define ID_STR 'S'
#define SIGNATURE "Lua"
-#define VERSION 0x25 /* 2.5 */
+#define VERSION 0x25 /* last format change was in 2.5 */
#define TEST_WORD 0x1234 /* a word for testing byte ordering */
#define TEST_FLOAT 0.123456789e-23 /* a float for testing representation */
-TFunc* luaI_undump1(FILE* D); /* load one chunk */
-int luaI_undump(FILE* D); /* load all chunks */
+
+TFunc* luaI_undump1(ZIO* Z);
+int luaI_undump(ZIO* Z); /* load all chunks */
+
+#endif
diff --git a/src/zio.c b/src/zio.c
new file mode 100644
index 00000000..2af49f42
--- /dev/null
+++ b/src/zio.c
@@ -0,0 +1,79 @@
+/*
+* zio.c
+* a generic input stream interface
+* $Id: zio.c,v 1.2 1997/06/20 19:25:54 roberto Exp $
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "zio.h"
+
+
+/* ----------------------------------------------------- memory buffers --- */
+
+static int zmfilbuf(ZIO* z)
+{
+ return EOZ;
+}
+
+ZIO* zmopen(ZIO* z, char* b, int size)
+{
+ if (b==NULL) return NULL;
+ z->n=size;
+ z->p= (unsigned char *)b;
+ z->filbuf=zmfilbuf;
+ z->u=NULL;
+ return z;
+}
+
+/* ------------------------------------------------------------ strings --- */
+
+ZIO* zsopen(ZIO* z, char* s)
+{
+ if (s==NULL) return NULL;
+ return zmopen(z,s,strlen(s));
+}
+
+/* -------------------------------------------------------------- FILEs --- */
+
+static int zffilbuf(ZIO* z)
+{
+ int n=fread(z->buffer,1,ZBSIZE,z->u);
+ if (n==0) return EOZ;
+ z->n=n-1;
+ z->p=z->buffer;
+ return *(z->p++);
+}
+
+
+ZIO* zFopen(ZIO* z, FILE* f)
+{
+ if (f==NULL) return NULL;
+ z->n=0;
+ z->p=z->buffer;
+ z->filbuf=zffilbuf;
+ z->u=f;
+ return z;
+}
+
+
+/* --------------------------------------------------------------- read --- */
+int zread(ZIO *z, void *b, int n)
+{
+ while (n) {
+ int m;
+ if (z->n == 0) {
+ if (z->filbuf(z) == EOZ)
+ return n; /* retorna quantos faltaram ler */
+ zungetc(z); /* poe o resultado de filbuf no buffer */
+ }
+ m = (n <= z->n) ? n : z->n; /* minimo de n e z->n */
+ memcpy(b, z->p, m);
+ z->n -= m;
+ z->p += m;
+ b = (char *)b + m;
+ n -= m;
+ }
+ return 0;
+}
diff --git a/src/zio.h b/src/zio.h
new file mode 100644
index 00000000..f0f36404
--- /dev/null
+++ b/src/zio.h
@@ -0,0 +1,48 @@
+/*
+* zio.h
+* a generic input stream interface
+* $Id: zio.h,v 1.5 1997/06/20 19:25:54 roberto Exp $
+*/
+
+#ifndef zio_h
+#define zio_h
+
+#include <stdio.h>
+
+
+
+/* For Lua only */
+#define zFopen luaZ_Fopen
+#define zsopen luaZ_sopen
+#define zmopen luaZ_mopen
+#define zread luaZ_read
+
+#define EOZ (-1) /* end of stream */
+
+typedef struct zio ZIO;
+
+ZIO* zFopen(ZIO* z, FILE* f); /* open FILEs */
+ZIO* zsopen(ZIO* z, char* s); /* string */
+ZIO* zmopen(ZIO* z, char* b, int size); /* memory */
+
+int zread(ZIO* z, void* b, int n); /* read next n bytes */
+
+#define zgetc(z) (--(z)->n>=0 ? ((int)*(z)->p++): (z)->filbuf(z))
+#define zungetc(z) (++(z)->n,--(z)->p)
+
+
+
+/* --------- Private Part ------------------ */
+
+#define ZBSIZE 256 /* buffer size */
+
+struct zio {
+ int n; /* bytes still unread */
+ unsigned char* p; /* current position in buffer */
+ int (*filbuf)(ZIO* z);
+ void* u; /* additional data */
+ unsigned char buffer[ZBSIZE]; /* buffer */
+};
+
+
+#endif
diff --git a/test/README b/test/README
index 625644d0..6f410ee4 100644
--- a/test/README
+++ b/test/README
@@ -1,7 +1,6 @@
These are simple tests for Lua. Some of them contain useful code.
They are meant to be run to make sure Lua is ok and also to be read, to see
how Lua programs can look like.
-In the directory examples/, there is more useful code, such as a library for
-complex arithmetic (a good example of fallbacks for overloading and redefinition
-of primitive functions), and a library for PostScript output. Both libraries
-include simple examples.
+
+In the directory examples/, there is more useful code: a library for PostScript
+output and a database for a fake web site.
diff --git a/test/array.lua b/test/array.lua
index 7caca888..48c28576 100644
--- a/test/array.lua
+++ b/test/array.lua
@@ -2,14 +2,14 @@ $debug
a = {}
-i=0
+local i=0
while i<10 do
a[i] = i*i
i=i+1
end
-r,v = next(a,nil)
+local r,v = next(a,nil)
while r ~= nil do
- print ("array["..r.."] = "..v)
+ write ("array[",r,"] = ",v,"\n")
r,v = next(a,r)
end
diff --git a/test/bisect.lua b/test/bisect.lua
index cfb1bbfd..8b720654 100644
--- a/test/bisect.lua
+++ b/test/bisect.lua
@@ -2,7 +2,7 @@ $debug
-- bisection method for solving non-linear equations
function bisect(f,a,b,fa,fb)
-print(n.." a="..a.." fa="..fa.." b="..b.." fb="..fb)
+ write(n," a=",a," fa=",fa," b=",b," fb=",fb,"\n")
local c=(a+b)/2
if abs(a-b)<delta then return c end
n=n+1
@@ -15,7 +15,7 @@ function solve(f,a,b)
delta=1e-6 -- tolerance
n=0
local z=bisect(f,a,b,f(a),f(b))
- print(format("after %d steps, root is %.10g",n,z))
+ write(format("after %d steps, root is %.10g\n",n,z))
end
-- our function
diff --git a/test/dump.lua b/test/dump.lua
index ad8d44a6..bcf51410 100644
--- a/test/dump.lua
+++ b/test/dump.lua
@@ -1,17 +1,19 @@
-- dump global environment
function savevar (n,v)
- if v == nil then return end;
- if type(v) == "number" then print(n.."="..v) return end
- if type(v) == "string" then print(n.."='"..v.."'") return end
- if type(v) == "table" then
+ if v == nil then return end
+ if type(v)=="userdata" or type(v)=="function" then return end
+ -- if type(v)=="userdata" or type(v)=="function" then write("\t-- ") end
+ write(n,"=")
+ if type(v) == "string" then write(format("%q",v))
+ elseif type(v) == "table" then
if v.__visited__ ~= nil then
- print(n .. "=" .. v.__visited__);
+ write(v.__visited__)
else
- print(n.."={}")
- v.__visited__ = n;
- local r,f;
- r,f = next(v,nil);
+ write("{}\n")
+ v.__visited__ = n
+ local r,f
+ r,f = next(v,nil)
while r ~= nil do
if r ~= "__visited__" then
if type(r) == 'string' then
@@ -23,13 +25,15 @@ function savevar (n,v)
r,f = next(v,r)
end
end
- end
+ else write(tostring(v)) end
+ write("\n")
end
function save ()
+ print("\n-- global environment")
local n,v = nextvar(nil)
while n ~= nil do
- savevar(n,v);
+ savevar(n,v)
n,v = nextvar(n)
end
end
diff --git a/test/examples/complex/complex.lua b/test/examples/complex/complex.lua
deleted file mode 100644
index a213a746..00000000
--- a/test/examples/complex/complex.lua
+++ /dev/null
@@ -1,82 +0,0 @@
--- complex.lua
--- complex arithmetic package for lua
--- Luiz Henrique de Figueiredo (lhf@csg.uwaterloo.ca)
--- 24 Oct 95
-$debug
-
-Complex={type="package"}
-
-function complex(x,y)
- return { re=x, im=y, type="complex" }
-end
-
-function Complex.conj(x,y)
- return complex(x.re,-x.im)
-end
-
-function Complex.norm2(x)
- local n=Complex.mul(x,Complex.conj(x))
- return n.re
-end
-
-function Complex.abs(x)
- return sqrt(Complex.norm2(x))
-end
-
-function Complex.add(x,y)
- return complex(x.re+y.re,x.im+y.im)
-end
-
-function Complex.sub(x,y)
- return complex(x.re-y.re,x.im-y.im)
-end
-
-function Complex.mul(x,y)
- return complex(x.re*y.re-x.im*y.im,x.re*y.im+x.im*y.re)
-end
-
-function Complex.div(x,y)
- local z=x*Complex.conj(y)
- local t=Complex.norm2(y)
- z.re=z.re/t
- z.im=z.im/t
- return z
-end
-
-function Complex.fallback(x,y,op)
- if type(x)=="number" then x=complex(x,0) end
- if type(y)=="number" then y=complex(y,0) end
- if type(x)=="complex" and type(y)=="complex" then
- return Complex[op](x,y)
- else
- return Complex.oldfallback(x,y)
- end
-end
-
-function Complex.newtype(x)
- local t=Complex.oldtype(x)
- if t=="table" and x.type then return x.type else return t end
-end
-
-function Complex.print(x)
- if type(x)~="complex" then
- Complex.oldprint(x)
- else
- local s
- if x.im>=0 then s="+" else s="" end
- Complex.oldprint(x.re..s..x.im.."I")
- end
-end
-
-function Complex.newabs(x)
- if type(x)~="complex" then
- return Complex.oldabs(x)
- else
- return Complex.abs(x)
- end
-end
-
-Complex.oldfallback=setfallback("arith",Complex.fallback)
-Complex.oldtype=type type=Complex.newtype
-Complex.oldprint=print print=Complex.print
-Complex.oldabs=abs abs=Complex.abs
diff --git a/test/examples/complex/mandel.lua b/test/examples/complex/mandel.lua
deleted file mode 100644
index 5e3d3eb6..00000000
--- a/test/examples/complex/mandel.lua
+++ /dev/null
@@ -1,25 +0,0 @@
-dofile("complex.lua")
-
-xmin=-2 xmax=2 ymin=-2 ymax=2
-d=.125
-
-function level(x,y)
- local c=complex(x,y)
- local l=0
- local z=c
- repeat
- z=z*z+c
- l=l+1
- until abs(z)>2 or l>255
- return l-1
-end
-
-x=xmin
-while x<xmax do
- y=ymin
- while y<ymax do
- print(level(x,y))
- y=y+d
- end
- x=x+d
-end
diff --git a/test/examples/www/README b/test/examples/www/README
new file mode 100644
index 00000000..0c249a43
--- /dev/null
+++ b/test/examples/www/README
@@ -0,0 +1,10 @@
+This directory contains a database for a fake web site.
+Standard web page for the persons listed in db.lua are
+creared automatically from template.html with staff.lua.
+(See http://www.cos.ufrj.br for a real web site was created in this way.)
+
+To run, type lua db.lua.
+
+This example is meant to show the power of gsub and Lua declarative constructs,
+which have been combined here into a "mail-merge" application.
+
diff --git a/test/examples/www/db.lua b/test/examples/www/db.lua
new file mode 100644
index 00000000..837afd29
--- /dev/null
+++ b/test/examples/www/db.lua
@@ -0,0 +1,46 @@
+dofile("staff.lua")
+
+global{
+ ROOT='http://www.tecgraf.puc-rio.br',
+ EMAIL="|LOGIN|@tecgraf.puc-rio.br",
+ WWW="|ROOT|/~|LOGIN|",
+ webmast='|ROOT|/webmaster.html',
+ TECGRAF='<A HREF="http://www.tecgraf.puc-rio.br">TeCGraf</A>',
+ CS='<A HREF="http://www.inf.puc-rio.br">Computer Science Department</A>',
+ PUCRIO='<A HREF="http://www.puc-rio.br">PUC-Rio</A>',
+}
+
+staff{
+DI="inf.puc-rio.br",
+ LOGIN="roberto",
+ NAME="Roberto Ierusalimschy",
+ TITLE="D.Sc., |PUCRIO|, 1990",
+ POSITION="Associate Professor, |CS|, |PUCRIO|",
+ AREAS="Programming Languages, Object Oriented Programming",
+ EMAIL="|LOGIN|@|DI|",
+ WWW="http://www.|DI|/~|LOGIN|",
+}
+
+staff{
+PCG="http://www.graphics.cornell.edu",
+ LOGIN="celes",
+ NAME="Waldemar Celes",
+ TITLE="D.Sc., |PUCRIO|, 1995",
+ POSITION="Postdoctoral Associate at "..
+'<A HREF="|PCG|">Program of Computer Graphics</A>, '..
+'<A HREF="http://www.cornell.edu">Cornell University</A>',
+ WWW="|PCG|/~celes/",
+ AREAS="Image segmentation and 3D reconstruction; "
+.."Physical simulation and educational software;"
+.."Geometric modeling and topological data structures;"
+.."Extension languages and customizable applications"
+}
+
+staff{
+ LOGIN="lhf",
+ NAME="Luiz Henrique de Figueiredo",
+ TITLE='D.Sc., <A HREF="http://www.impa.br">IMPA</A>, 1992',
+ POSITION='Visiting Research fellow at <A HREF="http://www.lncc.br">LNCC</A>; Consultant at |TECGRAF|',
+ AREAS="Geometric modeling; Software tools",
+ WWW="http://www2.lncc.br/~lhf/",
+}
diff --git a/test/examples/www/staff.lua b/test/examples/www/staff.lua
new file mode 100644
index 00000000..7fa5b810
--- /dev/null
+++ b/test/examples/www/staff.lua
@@ -0,0 +1,37 @@
+$debug
+
+readfrom("template.html")
+TEMPLATE=read(".*")
+readfrom()
+
+PAT="|(%a%a*)|"
+
+GLOBAL={
+ DATE=date("%d/%m/%Y %T"),
+}
+
+function get(i)
+ if LOCAL[i] then return LOCAL[i]
+ elseif GLOBAL[i] then return GLOBAL[i]
+ else return "<BLINK>?"..i.."?</BLINK>" end
+end
+
+function global(t)
+ local i,v=next(t,nil)
+ while i do
+ GLOBAL[i]=v
+ i,v=next(t,i)
+ end
+end
+
+function staff(t)
+ LOCAL=t
+ if t.AREAS then t.AREAS=gsub(t.AREAS,"[;,] *","\n<LI>") end
+ local p,n=TEMPLATE
+ if t.WWW=="" then p=gsub(p,'<A HREF="|WWW|">|NAME|</A>',"|NAME|") end
+ repeat p,n=gsub(p,PAT,get) until n==0
+ write(t.LOGIN,"\n")
+ writeto(t.LOGIN..".html")
+ write(p)
+ writeto()
+end
diff --git a/test/examples/www/template.html b/test/examples/www/template.html
new file mode 100644
index 00000000..c8494b76
--- /dev/null
+++ b/test/examples/www/template.html
@@ -0,0 +1,29 @@
+<HTML>
+<HEAD>
+<TITLE>
+Imaginary web site:Staff:|LOGIN|
+</TITLE>
+</HEAD>
+
+<BODY>
+<H1><A HREF="|WWW|">|NAME|</A></H1>
+<A HREF="mailto:|EMAIL|">|EMAIL|</A>
+<P>
+
+|POSITION|<BR>
+|TITLE|<P>
+
+<H2>Research areas</H2>
+<UL>
+<LI>|AREAS|
+</UL>
+<P>
+
+<HR>
+Last update in |DATE| by
+<A HREF="|webmast|">websmaster</A>.
+<P>
+
+</BODY>
+
+</HTML>
diff --git a/test/hello.lua b/test/hello.lua
index 639144b6..ea818b9a 100644
--- a/test/hello.lua
+++ b/test/hello.lua
@@ -1,3 +1,3 @@
-- the first program in every language
-print("hello world, from Lua!")
+write("hello world, from Lua!\n")
diff --git a/test/loop.lua b/test/loop.lua
deleted file mode 100644
index b464d09e..00000000
--- a/test/loop.lua
+++ /dev/null
@@ -1,6 +0,0 @@
-$debug
-i=0
-repeat
- print(i)
- i=i+1
-until i>10
diff --git a/test/lua b/test/lua
new file mode 120000
index 00000000..3b0b1a28
--- /dev/null
+++ b/test/lua
@@ -0,0 +1 @@
+../bin/lua \ No newline at end of file
diff --git a/test/luac b/test/luac
new file mode 120000
index 00000000..694bc0dc
--- /dev/null
+++ b/test/luac
@@ -0,0 +1 @@
+../bin/luac \ No newline at end of file
diff --git a/test/sort.lua b/test/sort.lua
index d665e96b..a5eb0956 100644
--- a/test/sort.lua
+++ b/test/sort.lua
@@ -28,7 +28,7 @@ function selectionsort(a,n)
end
function show(m,x)
- write(m.."\n\t")
+ write(m,"\n\t")
local i=0
while x[i] do
write(x[i])
diff --git a/test/split.lua b/test/split.lua
deleted file mode 100644
index 0f64c508..00000000
--- a/test/split.lua
+++ /dev/null
@@ -1,18 +0,0 @@
-function split (s)
- local n = 1
- local f = strfind(s,"/")
- while f do
- n = n+f
- f = strfind(strsub(s,n),"/")
- end
- return strsub(s,1,n-1), strsub(s,n)
-end
-
-
-function test(s)
- local path, filename = split(s)
- print(s .. "=[".. path.."]+["..filename.."]")
-end
-
-test("a:/lua/obj/lua.c")
-test("lua.lib")
diff --git a/test/type.lua b/test/type.lua
deleted file mode 100644
index 5bfc33e4..00000000
--- a/test/type.lua
+++ /dev/null
@@ -1,37 +0,0 @@
-$debug
-
-function check (object, class)
- local v = next(object,nil);
- while v ~= nil do
- if class[v] == nil then
- print("unknown field: " .. v)
- elseif type(object[v]) ~= class[v].type then
- print("wrong type for field " .. v)
- end
- v = next(object,v);
- end
- v = next(class,nil);
- while v ~= nil do
- if object[v] == nil then
- if class[v].default ~= nil then
- object[v] = class[v].default
- else
- print("field "..v.." not initialized")
- end
- end
- v = next(class,v);
- end
-end
-
-typeblock = {x = {default = 0, type = "number"},
- y = {default = 0, type = "number"},
- name = {type = "string"}
- }
-
-function block(t) check(t,typeblock) end
-
-block{ x = 7, name = "3"}
-block{ x = "7", name = "3"}
-block{ x = 7, name = 3}
-block{ x = 7}
-block{ x = 7, name = "3", bogus=3.14}