* compile.[ch]: support for lambda()
* PROTO.h, mymalloc.h: added #ifdefs for TURBOC and GNUC.
* allobjects.h: added #include "rangeobject.h"
* Grammar: added lambda_input; relaxed syntax for exec.
* bltinmodule.c: added bagof, map, reduce, lambda, xrange.
* tupleobject.[ch]: added resizetuple().
* rangeobject.[ch]: new object type to speed up range operations (not
  convinced this is needed!!!)
diff --git a/Grammar/Grammar b/Grammar/Grammar
index 1ba6b5c..22a48f7 100644
--- a/Grammar/Grammar
+++ b/Grammar/Grammar
@@ -2,6 +2,9 @@
 
 # Change log:
 
+# 25-Oct-93:
+#	Added lambda_input
+
 # 18-Oct-93:
 #	Use testlist instead of exprlist in expr_stmt
 #	Add exec statement
@@ -75,13 +78,14 @@
 #	single_input is a single interactive statement;
 #	file_input is a module or sequence of commands read from an input file;
 #	expr_input is the input for the input() function;
-#	eval_input is the input for the eval() function.
+#	eval_input is the input for the eval() function;
+#	lambda_input is the input for the proposed lambda() function.
 
 # NB: compound_stmt in single_input is followed by extra NEWLINE!
 single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE
 file_input: (NEWLINE | stmt)* ENDMARKER
-expr_input: testlist NEWLINE
 eval_input: testlist NEWLINE* ENDMARKER
+lambda_input: varargslist ':' testlist NEWLINE* ENDMARKER
 
 funcdef: 'def' NAME parameters ':' suite
 parameters: '(' [varargslist] ')'
@@ -108,7 +112,7 @@
 accesstype: NAME+
 # accesstype should be ('public' | 'protected' | 'private') ['read'] ['write']
 # but can't be because that would create undesirable reserved words!
-exec_stmt: 'exec' expr ['in' expr [',' expr]]
+exec_stmt: 'exec' expr ['in' test [',' test]]
 
 compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
 if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
diff --git a/Include/allobjects.h b/Include/allobjects.h
index 8f9091a..17d6dd2 100644
--- a/Include/allobjects.h
+++ b/Include/allobjects.h
@@ -46,6 +46,7 @@
 #include "intobject.h"
 #include "longobject.h"
 #include "floatobject.h"
+#include "rangeobject.h"
 #include "stringobject.h"
 #include "tupleobject.h"
 #include "listobject.h"
diff --git a/Include/compile.h b/Include/compile.h
index a23fea1..2b0b29e 100644
--- a/Include/compile.h
+++ b/Include/compile.h
@@ -54,10 +54,12 @@
 
 /* Public interface */
 struct _node; /* Declare the existence of this type */
-codeobject *compile PROTO((struct _node *, char *));
+codeobject *_compile PROTO((struct _node *, char *, int));
 codeobject *newcodeobject
 	PROTO((object *, object *, object *, object *, object *));
 
+#define compile(n,f)	(_compile((n),(f),0))
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/graminit.h b/Include/graminit.h
index 288e333..735838c 100644
--- a/Include/graminit.h
+++ b/Include/graminit.h
@@ -1,7 +1,7 @@
 #define single_input 256
 #define file_input 257
-#define expr_input 258
-#define eval_input 259
+#define eval_input 258
+#define lambda_input 259
 #define funcdef 260
 #define parameters 261
 #define varargslist 262
diff --git a/Include/mymalloc.h b/Include/mymalloc.h
index 959f296..24e2125 100644
--- a/Include/mymalloc.h
+++ b/Include/mymalloc.h
@@ -51,6 +51,16 @@
 #define HAVE_STDLIB
 #endif
 
+#ifdef __TURBOC__
+#define ANY void
+#define HAVE_STDLIB
+#endif
+
+#ifdef __GNUC__
+#define ANY void
+#define HAVE_STDLIB
+#endif
+
 #ifndef ANY
 #define ANY char
 #endif
diff --git a/Include/rangeobject.h b/Include/rangeobject.h
new file mode 100644
index 0000000..39d20c6
--- /dev/null
+++ b/Include/rangeobject.h
@@ -0,0 +1,41 @@
+/***********************************************************
+Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
+Amsterdam, The Netherlands.
+
+                        All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, 
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in 
+supporting documentation, and that the names of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+******************************************************************/
+
+/* Range object interface */
+
+/*
+123456789-123456789-123456789-123456789-123456789-123456789-123456789-12
+
+rangeobject represents an integer range.  This is an immutable object;
+a range cannot change its value after creation.
+
+Range objects behave like the corresponding tuple objects except that
+they are represented by a start, stop, and step datamembers.
+*/
+
+extern typeobject Rangetype;
+
+#define is_rangeobject(op) ((op)->ob_type == &Rangetype)
+
+extern object *newrangeobject PROTO((long, long, long, int));
diff --git a/Include/tupleobject.h b/Include/tupleobject.h
index b5f2230..8fe28a2 100644
--- a/Include/tupleobject.h
+++ b/Include/tupleobject.h
@@ -58,6 +58,7 @@
 extern object *gettupleitem PROTO((object *, int));
 extern int settupleitem PROTO((object *, int, object *));
 extern object *gettupleslice PROTO((object *, int, int));
+extern int resizetuple PROTO((object **, int));
 
 /* Macro, trading safety for speed */
 #define GETTUPLEITEM(op, i) ((op)->ob_item[i])
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
new file mode 100644
index 0000000..a68d317
--- /dev/null
+++ b/Objects/rangeobject.c
@@ -0,0 +1,205 @@
+/***********************************************************
+Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
+Amsterdam, The Netherlands.
+
+                        All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, 
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in 
+supporting documentation, and that the names of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+******************************************************************/
+
+/* Range object implementation */
+
+#include "allobjects.h"
+
+typedef struct {
+	OB_HEAD
+	long	start;
+	long	step;
+	long	len;
+	int	reps;
+} rangeobject;
+
+
+object *
+newrangeobject(start, len, step, reps)
+	long start, len, step;
+	int reps;
+{
+	rangeobject *obj = (rangeobject *) newobject(&Rangetype);
+
+	obj->start = start;
+	obj->len   = len;
+	obj->step  = step;
+	obj->reps  = reps;
+
+	return (object *) obj;
+}
+
+static void
+range_dealloc(r)
+	rangeobject *r;
+{
+	DEL(r);
+}
+
+static object *
+range_item(r, i)
+	rangeobject *r;
+	int i;
+{
+	if (i < 0 || i >= r->len * r->reps) {
+		err_setstr(IndexError, "range object index out of range");
+		return NULL;
+	}
+
+	return newintobject(r->start + (i % r->len) * r->step);
+}
+
+static int
+range_length(r)
+	rangeobject *r;
+{
+	return r->len * r->reps;
+}
+
+static object *
+range_repr(r)
+	rangeobject *r;
+{
+	char buf[80];
+	if (r->reps != 1)
+		sprintf(buf, "(xrange(%ld, %ld, %ld) * %d)",
+			r->start,
+			r->start + r->len * r->step,
+			r->step,
+			r->reps);
+	else
+		sprintf(buf, "xrange(%ld, %ld, %ld)",
+			r->start,
+			r->start + r->len * r->step,
+			r->step);
+	return newstringobject(buf);
+}
+
+object *
+range_concat(r, obj)
+	rangeobject *r;
+	object *obj;
+{
+	if (is_rangeobject(obj)) {
+		rangeobject *s = (rangeobject *)obj;
+		if (r->start == s->start && r->len == s->len &&
+		    r->step == s->step)
+			return newrangeobject(r->start, r->len, r->step,
+					      r->reps + s->reps);
+	}
+	err_setstr(TypeError, "cannot concatenate different range objects");
+	return NULL;
+}
+
+object *
+range_repeat(r, n)
+	rangeobject *r;
+	int n;
+{
+	if (n < 0)
+		return (object *) newrangeobject(0, 0, 1, 1);
+
+	else if (n == 1) {
+		INCREF(r);
+		return (object *) r;
+	}
+
+	else
+		return (object *) newrangeobject(
+						r->start,
+						r->len,
+						r->step,
+						r->reps * n);
+}
+
+static int
+range_compare(r1, r2)
+	rangeobject *r1, *r2;
+{
+	if (r1->start != r2->start)
+		return r1->start - r2->start;
+
+	else if (r1->step != r2->step)
+		return r1->step - r2->step;
+
+	else if (r1->len != r2->len)
+		return r1->len - r2->len;
+
+	else
+		return r1->reps - r2->reps;
+}
+
+static object *
+range_slice(r, low, high)
+	rangeobject *r;
+	int low, high;
+{
+	if (r->reps != 1) {
+		err_setstr(TypeError, "cannot slice a replicated range");
+		return NULL;
+	}
+	if (low < 0)
+		low = 0;
+	else if (low > r->len)
+		low = r->len;
+	if (high < 0)
+		high = 0;
+	if (high < low)
+		high = low;
+	else if (high > r->len)
+		high = r->len;
+
+	return (object *) newrangeobject(
+				low * r->step + r->start,
+				high - low,
+				r->step,
+				1);
+}
+
+static sequence_methods range_as_sequence = {
+	range_length,	/*sq_length*/
+	range_concat,	/*sq_concat*/
+	range_repeat,	/*sq_repeat*/
+	range_item,	/*sq_item*/
+	range_slice,	/*sq_slice*/
+	0,		/*sq_ass_item*/
+	0,		/*sq_ass_slice*/
+};
+
+typeobject Rangetype = {
+	OB_HEAD_INIT(&Typetype)
+	0,			/* Number of items for varobject */
+	"range",		/* Name of this type */
+	sizeof(rangeobject),	/* Basic object size */
+	0,			/* Item size for varobject */
+	range_dealloc,		/*tp_dealloc*/
+	0,			/*tp_print*/
+	0,			/*tp_getattr*/
+	0,			/*tp_setattr*/
+	range_compare,		/*tp_compare*/
+	range_repr,		/*tp_repr*/
+	0,			/*tp_as_number*/
+	&range_as_sequence,	/*tp_as_sequence*/
+	0,			/*tp_as_mapping*/
+};
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index bc68744..0047a09 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -123,21 +123,18 @@
 {
 	register object *olditem;
 	if (!is_tupleobject(op)) {
-		if (newitem != NULL)
-			DECREF(newitem);
+		XDECREF(newitem);
 		err_badcall();
 		return -1;
 	}
 	if (i < 0 || i >= ((tupleobject *)op) -> ob_size) {
-		if (newitem != NULL)
-			DECREF(newitem);
+		XDECREF(newitem);
 		err_setstr(IndexError, "tuple assignment index out of range");
 		return -1;
 	}
 	olditem = ((tupleobject *)op) -> ob_item[i];
 	((tupleobject *)op) -> ob_item[i] = newitem;
-	if (olditem != NULL)
-		DECREF(olditem);
+	XDECREF(olditem);
 	return 0;
 }
 
@@ -148,10 +145,8 @@
 	register tupleobject *op;
 {
 	register int i;
-	for (i = 0; i < op->ob_size; i++) {
-		if (op->ob_item[i] != NULL)
-			DECREF(op->ob_item[i]);
-	}
+	for (i = 0; i < op->ob_size; i++)
+		XDECREF(op->ob_item[i]);
 #if MAXSAVESIZE > 0
 	if (0 < op->ob_size && op->ob_size < MAXSAVESIZE) {
 		op->ob_item[0] = (object *) free_list[op->ob_size];
@@ -194,8 +189,7 @@
 			joinstring(&s, comma);
 		t = reprobject(v->ob_item[i]);
 		joinstring(&s, t);
-		if (t != NULL)
-			DECREF(t);
+		XDECREF(t);
 	}
 	DECREF(comma);
 	if (v->ob_size == 1) {
@@ -397,3 +391,42 @@
 	0,		/*tp_as_mapping*/
 	tuplehash,	/*tp_hash*/
 };
+
+/* The following function breaks the notion that tuples are immutable:
+   it changes the size of a tuple.  We get away with this only if there
+   is only one module referencing the object.  You can also think of it
+   as creating a new tuple object and destroying the old one, only
+   more efficiently.  In any case, don't use this if the tuple may
+   already be known to some other part of the code... */
+
+int
+resizetuple(pv, newsize)
+	object **pv;
+	int newsize;
+{
+	register object *v;
+	register tupleobject *sv;
+	v = *pv;
+	if (!is_tupleobject(v) || v->ob_refcnt != 1) {
+		*pv = 0;
+		DECREF(v);
+		err_badcall();
+		return -1;
+	}
+	/* XXX UNREF/NEWREF interface should be more symmetrical */
+#ifdef REF_DEBUG
+	--ref_total;
+#endif
+	UNREF(v);
+	*pv = (object *)
+		realloc((char *)v,
+			sizeof(tupleobject) + newsize * sizeof(object *));
+	if (*pv == NULL) {
+		DEL(v);
+		err_nomem();
+		return -1;
+	}
+	NEWREF(*pv);
+	((tupleobject *) *pv)->ob_size = newsize;
+	return 0;
+}
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 60208a0..b95c351 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -37,6 +37,11 @@
 #include "compile.h"
 #include "eval.h"
 
+/* Forward */
+static object *filterstring PROTO((object *, object *));
+static object *filtertuple  PROTO((object *, object *));
+static object *exec_eval PROTO((object *v, int start));
+
 static object *
 builtin_abs(self, v)
 	object *self;
@@ -62,6 +67,132 @@
 }
 
 static object *
+builtin_bagof(self, args)
+	object *self;
+	object *args;
+{
+	object *func, *seq, *arg, *result;
+	sequence_methods *sqf;
+	int len, newfunc = 0;
+	register int i,j;
+	static char bagof_err[] = "bagof() requires 1 or 2 args";
+
+	if (args == NULL) {
+		err_setstr(TypeError, bagof_err);
+		return NULL;
+	}
+
+	if (is_tupleobject(args)) {
+		if (gettuplesize(args) != 2) {
+			err_setstr(TypeError, bagof_err);
+			return NULL;
+		}
+
+		func = gettupleitem(args, 0);
+		seq  = gettupleitem(args, 1);
+
+		if (is_stringobject(func)) {
+			if ((func = exec_eval(func, lambda_input)) == NULL)
+				return NULL;
+			newfunc = 1;
+		}
+	}
+	else {
+		func = None;
+		seq  = args;
+	}
+
+	/* check for special cases; strings and tuples are returned as same */
+	if (is_stringobject(seq)) {
+		object *r = filterstring(func, seq);
+		if (newfunc)
+			DECREF(func);
+		return r;
+	}
+
+	else if (is_tupleobject(seq)) {
+		object *r = filtertuple(func, seq);
+		if (newfunc)
+			DECREF(func);
+		return r;
+	}
+
+	if (! (sqf = seq->ob_type->tp_as_sequence)) {
+		err_setstr(TypeError,
+			   "argument to bagof() must be a sequence type");
+		goto Fail_2;
+	}
+
+	if ((len = (*sqf->sq_length)(seq)) < 0)
+		goto Fail_2;
+
+	if (is_listobject(seq) && seq->ob_refcnt == 1) {
+		INCREF(seq);
+		result = seq;
+	}
+	else
+		if ((result = newlistobject(len)) == NULL)
+			goto Fail_2;
+
+	if ((arg = newtupleobject(1)) == NULL)
+		goto Fail_1;
+
+	for (i = j = 0; i < len; ++i) {
+		object *ele, *value;
+
+		if (arg->ob_refcnt > 1) {
+			DECREF(arg);
+			if ((arg = newtupleobject(1)) == NULL)
+				goto Fail_1;
+		}
+
+		if ((ele = (*sqf->sq_item)(seq, i)) == NULL)
+			goto Fail_0;
+
+		if (func == None)
+			value = ele;
+		else {
+			if (settupleitem(arg, 0, ele) < 0)
+				goto Fail_0;
+
+			if ((value = call_object(func, arg)) == NULL)
+				goto Fail_0;
+		}
+
+		if (testbool(value)) {
+			INCREF(ele);
+			if (setlistitem(result, j++, ele) < 0)
+				goto Fail_0;
+		}
+
+		DECREF(value);
+	}
+
+	/* list_ass_slice() expects the rest of the list to be non-null */
+	for (i = j; i < len; ++i) {
+		INCREF(None);
+		if (setlistitem(result, i, None) < 0)
+			goto Fail_0;
+	}
+
+	DECREF(arg);
+	if (newfunc)
+		DECREF(func);
+
+	(*result->ob_type->tp_as_sequence->sq_ass_slice)(result, j, len, NULL);
+	return result;
+
+Fail_0:
+	DECREF(arg);
+Fail_1:
+	DECREF(result);
+Fail_2:
+	if (newfunc)
+		DECREF(func);
+	return NULL;
+}
+
+static object *
 builtin_chr(self, args)
 	object *self;
 	object *args;
@@ -191,6 +322,7 @@
 	object *str = NULL, *globals = NULL, *locals = NULL;
 	char *s;
 	int n;
+	/* XXX This is a bit of a mess.  Should make it varargs */
 	if (v != NULL) {
 		if (is_tupleobject(v) &&
 				((n = gettuplesize(v)) == 2 || n == 3)) {
@@ -206,9 +338,10 @@
 			globals != NULL && !is_dictobject(globals) ||
 			locals != NULL && !is_dictobject(locals)) {
 		err_setstr(TypeError,
-		    "exec/eval arguments must be (string|code)[,dict[,dict]]");
+		  "eval/lambda arguments must be (string|code)[,dict[,dict]]");
 		return NULL;
 	}
+	/* XXX The following is only correct for eval(), not for lambda() */
 	if (is_codeobject(str))
 		return eval_code((codeobject *) str, globals, locals,
 				 (object *)NULL, (object *)NULL);
@@ -217,7 +350,7 @@
 		err_setstr(ValueError, "embedded '\\0' in string arg");
 		return NULL;
 	}
-	if (start == eval_input) {
+	if (start == eval_input || start == lambda_input) {
 		while (*s == ' ' || *s == '\t')
 			s++;
 	}
@@ -336,6 +469,136 @@
 }
 
 static object *
+builtin_map(self, args)
+	object *self;
+	object *args;
+{
+	typedef struct {
+		object *seq;
+		sequence_methods *sqf;
+		int len;
+	} sequence;
+
+	object *func, *result;
+	sequence *seqs = NULL, *sqp;
+	int n, len, newfunc = 0;
+	register int i, j;
+
+	if (args == NULL || !is_tupleobject(args)) {
+		err_setstr(TypeError, "map() requires at least two args");
+		return NULL;
+	}
+
+	func = gettupleitem(args, 0);
+	n    = gettuplesize(args) - 1;
+
+	if (is_stringobject(func)) {
+		if ((func = exec_eval(func, lambda_input)) == NULL)
+			return NULL;
+		newfunc = 1;
+	}
+
+	if ((seqs = (sequence *) malloc(n * sizeof(sequence))) == NULL)
+		return err_nomem();
+
+	for (len = -1, i = 0, sqp = seqs; i < n; ++i, ++sqp) {
+		int curlen;
+	
+		if ((sqp->seq = gettupleitem(args, i + 1)) == NULL)
+			goto Fail_2;
+
+		if (! (sqp->sqf = sqp->seq->ob_type->tp_as_sequence)) {
+			static char errmsg[] =
+			    "argument %d to map() must be a sequence object";
+			char errbuf[sizeof(errmsg) + 3];
+
+			sprintf(errbuf, errmsg, i+2);
+			err_setstr(TypeError, errbuf);
+			goto Fail_2;
+		}
+
+		if ((curlen = sqp->len = (*sqp->sqf->sq_length)(sqp->seq)) < 0)
+			goto Fail_2;
+
+		if (curlen > len)
+			len = curlen;
+	}
+
+	if ((result = (object *) newlistobject(len)) == NULL)
+		goto Fail_2;
+
+	if ((args = newtupleobject(n)) == NULL)
+		goto Fail_1;
+
+	for (i = 0; i < len; ++i) {
+		object *arg, *value;
+
+		if (args->ob_refcnt > 1) {
+			DECREF(args);
+			if ((args = newtupleobject(n)) == NULL)
+				goto Fail_1;
+		}
+
+		for (j = 0, sqp = seqs; j < n; ++j, ++sqp) {
+			if (i >= sqp->len) {
+				INCREF(None);
+				if (settupleitem(args, j, None) < 0)
+					goto Fail_0;
+				arg = None;
+			}
+
+			else {
+				if ((arg = (*sqp->sqf->sq_item)(sqp->seq, i)) == NULL)
+					goto Fail_0;
+
+				if (settupleitem(args, j, arg) < 0)
+					goto Fail_0;
+			}
+		}
+
+		if (func == None) {
+			if (n == 1)	{ /* avoid creating singleton */
+				INCREF(arg);
+				if (setlistitem(result, i, arg) < 0)
+					goto Fail_0;
+			}
+			else {
+				INCREF(args);
+				if (setlistitem(result, i, args) < 0)
+					goto Fail_0;
+			}
+		}
+		else {
+			if ((value = call_object(func, args)) == NULL)
+				goto Fail_0;
+
+			if (setlistitem((object *) result, i, value) < 0)
+				goto Fail_0;
+		}
+	}
+
+	if (seqs) free(seqs);
+
+	DECREF(args);
+	if (newfunc)
+		DECREF(func);
+
+	return result;
+
+Fail_0:
+	DECREF(args);
+Fail_1:
+	DECREF(result);
+Fail_2:
+	if (newfunc)
+		DECREF(func);
+
+	if (seqs) free(seqs);
+
+	return NULL;
+}
+
+static object *
 builtin_setattr(self, args)
 	object *self;
 	object *args;
@@ -414,6 +677,14 @@
 }
 
 static object *
+builtin_lambda(self, v)
+	object *self;
+	object *v;
+{
+	return exec_eval(v, lambda_input);
+}
+
+static object *
 builtin_len(self, v)
 	object *self;
 	object *v;
@@ -641,6 +912,58 @@
 }
 
 static object *
+builtin_xrange(self, v)
+	object *self;
+	object *v;
+{
+	static char *errmsg = "xrange() requires 1-3 int arguments";
+	int i, n;
+	long start, stop, step, len;
+	if (v != NULL && is_intobject(v))
+		start = 0, stop = getintvalue(v), step = 1;
+
+	else if (v == NULL || !is_tupleobject(v)) {
+		err_setstr(TypeError, errmsg);
+		return NULL;
+	}
+	else {
+		n = gettuplesize(v);
+		if (n < 1 || n > 3) {
+			err_setstr(TypeError, errmsg);
+			return NULL;
+		}
+		for (i = 0; i < n; i++) {
+			if (!is_intobject(gettupleitem(v, i))) {
+				err_setstr(TypeError, errmsg);
+				return NULL;
+			}
+		}
+		if (n == 3) {
+			step = getintvalue(gettupleitem(v, 2));
+			--n;
+		}
+		else
+			step = 1;
+		stop = getintvalue(gettupleitem(v, --n));
+		if (n > 0)
+			start = getintvalue(gettupleitem(v, 0));
+		else
+			start = 0;
+	}
+
+	if (step == 0) {
+		err_setstr(ValueError, "zero step for xrange()");
+		return NULL;
+	}
+
+	len = (stop - start + step + ((step > 0) ? -1 : 1)) / step;
+	if (len < 0)
+		len = 0;
+
+	return newrangeobject(start, len, step, 1);
+}
+
+static object *
 builtin_raw_input(self, v)
 	object *self;
 	object *v;
@@ -659,6 +982,103 @@
 }
 
 static object *
+builtin_reduce(self, args)
+	object *self;
+	object *args;
+{
+	object *seq, *func, *result;
+	sequence_methods *sqf;
+	static char reduce_err[] = "reduce() requires 2 or 3 args";
+	register int i;
+	int start = 0, newfunc = 0;
+	int len;
+
+	if (args == NULL || !is_tupleobject(args)) {
+		err_setstr(TypeError, reduce_err);
+		return NULL;
+	}
+
+	switch (gettuplesize(args)) {
+	case 2:
+		start = 1;		/* fall through */
+	case 3:
+		func = gettupleitem(args, 0);
+		seq  = gettupleitem(args, 1);
+		break;
+	default:
+		err_setstr(TypeError, reduce_err);
+	}
+
+	if ((sqf = seq->ob_type->tp_as_sequence) == NULL) {
+		err_setstr(TypeError,
+		    "2nd argument to reduce() must be a sequence object");
+		return NULL;
+	}
+
+	if (is_stringobject(func)) {
+		if ((func = exec_eval(func, lambda_input)) == NULL)
+			return NULL;
+		newfunc = 1;
+	}
+
+	if ((len = (*sqf->sq_length)(seq)) < 0)
+		goto Fail_2;
+
+	if (start == 1) {
+		if (len == 0) {
+			err_setstr(TypeError,
+			    "reduce of empty sequence with no initial value");
+			goto Fail_2;
+		}
+
+		if ((result = (*sqf->sq_item)(seq, 0)) == NULL)
+			goto Fail_2;
+	}
+	else {
+		result = gettupleitem(args, 2);
+		INCREF(result);
+	}
+
+	if ((args = newtupleobject(2)) == NULL)
+		goto Fail_1;
+
+	for (i = start; i < len; ++i) {
+		object *op2;
+
+		if (args->ob_refcnt > 1) {
+			DECREF(args);
+			if ((args = newtupleobject(2)) == NULL)
+				goto Fail_1;
+		}
+
+		if ((op2 = (*sqf->sq_item)(seq, i)) == NULL)
+			goto Fail_2;
+
+		settupleitem(args, 0, result);
+		settupleitem(args, 1, op2);
+		if ((result = call_object(func, args)) == NULL)
+			goto Fail_0;
+	}
+
+	DECREF(args);
+	if (newfunc)
+		DECREF(func);
+
+	return result;
+
+	/* XXX I hate goto's. I hate goto's. I hate goto's. I hate goto's. */
+Fail_0:
+	DECREF(args);
+	goto Fail_2;
+Fail_1:
+	DECREF(result);
+Fail_2:
+	if (newfunc)
+		DECREF(func);
+	return NULL;
+}
+
+static object *
 builtin_reload(self, v)
 	object *self;
 	object *v;
@@ -740,6 +1160,7 @@
 static struct methodlist builtin_methods[] = {
 	{"abs",		builtin_abs},
 	{"apply",	builtin_apply},
+	{"bagof",	builtin_bagof},
 	{"chr",		builtin_chr},
 	{"cmp",		builtin_cmp},
 	{"coerce",	builtin_coerce},
@@ -756,8 +1177,10 @@
 	{"id",		builtin_id},
 	{"input",	builtin_input},
 	{"int",		builtin_int},
+	{"lambda",	builtin_lambda},
 	{"len",		builtin_len},
 	{"long",	builtin_long},
+	{"map",		builtin_map},
 	{"max",		builtin_max},
 	{"min",		builtin_min},
 	{"oct",		builtin_oct},
@@ -766,12 +1189,14 @@
 	{"pow",		builtin_pow},
 	{"range",	builtin_range},
 	{"raw_input",	builtin_raw_input},
+	{"reduce",	builtin_reduce},
 	{"reload",	builtin_reload},
 	{"repr",	builtin_repr},
 	{"round",	builtin_round},
 	{"setattr",	builtin_setattr},
 	{"str",		builtin_str},
 	{"type",	builtin_type},
+	{"xrange",	builtin_xrange},
 	{NULL,		NULL},
 };
 
@@ -883,3 +1308,155 @@
 	err_setstr(TypeError, "number coercion failed");
 	return -1;
 }
+
+
+/* Filter a tuple through a function */
+
+static object *
+filtertuple(func, tuple)
+	object *func;
+	object *tuple;
+{
+	object *arg, *result;
+	register int i, j;
+	int len = gettuplesize(tuple), shared = 0;
+
+	if (tuple->ob_refcnt == 1) {
+		result = tuple;
+		shared = 1;
+		/* defer INCREF (resizetuple wants it to be one) */
+	}
+	else
+		if ((result = newtupleobject(len)) == NULL)
+			return NULL;
+
+	if ((arg = newtupleobject(1)) == NULL)
+		goto Fail_1;
+
+	for (i = j = 0; i < len; ++i) {
+		object *ele, *value;
+
+		if (arg->ob_refcnt > 1) {
+			DECREF(arg);
+			if ((arg = newtupleobject(1)) == NULL)
+				goto Fail_1;
+		}
+
+		if ((ele = gettupleitem(tuple, i)) == NULL)
+			goto Fail_0;
+		INCREF(ele);
+
+		if (func == None)
+			value = ele;
+		else {
+			if (settupleitem(arg, 0, ele) < 0)
+				goto Fail_0;
+
+			if ((value = call_object(func, arg)) == NULL)
+				goto Fail_0;
+		}
+
+		if (testbool(value)) {
+			INCREF(ele);
+			if (settupleitem(result, j++, ele) < 0)
+				goto Fail_0;
+		}
+
+		DECREF(value);
+	}
+
+	DECREF(arg);
+	if (resizetuple(&result, j) < 0)
+		return NULL;
+
+	if (shared)
+		INCREF(result);
+
+	return result;
+
+Fail_0:
+	DECREF(arg);
+Fail_1:
+	if (!shared)
+		DECREF(result);
+	return NULL;
+}
+
+
+/* Filter a string through a function */
+
+static object *
+filterstring(func, strobj)
+	object *func;
+	object *strobj;
+{
+	object *arg, *result;
+	register int i, j;
+	int len = getstringsize(strobj), shared = 0;
+
+	if (strobj->ob_refcnt == 1) {
+		result = strobj;
+		shared = 1;
+		/* defer INCREF (resizestring wants it to be one) */
+
+		if (func == None) {
+			INCREF(result);
+			return result;
+		}
+	}
+	else {
+		if ((result = newsizedstringobject(NULL, len)) == NULL)
+			return NULL;
+
+		if (func == None) {
+			strcpy(GETSTRINGVALUE((stringobject *)result),
+			       GETSTRINGVALUE((stringobject *)strobj));
+			return result;
+		}
+	}
+
+	if ((arg = newtupleobject(1)) == NULL)
+		goto Fail_1;
+
+	for (i = j = 0; i < len; ++i) {
+		object *ele, *value;
+
+		if (arg->ob_refcnt > 1) {
+			DECREF(arg);
+			if ((arg = newtupleobject(1)) == NULL)
+				goto Fail_1;
+		}
+
+		if ((ele = (*strobj->ob_type->tp_as_sequence->sq_item)
+		           (strobj, i)) == NULL)
+			goto Fail_0;
+
+		if (settupleitem(arg, 0, ele) < 0)
+			goto Fail_0;
+
+		if ((value = call_object(func, arg)) == NULL)
+			goto Fail_0;
+
+		if (testbool(value))
+			GETSTRINGVALUE((stringobject *)result)[j++] =
+				GETSTRINGVALUE((stringobject *)ele)[0];
+
+		DECREF(value);
+	}
+
+	DECREF(arg);
+	if (resizestring(&result, j) < 0)
+		return NULL;
+
+	if (shared)
+		INCREF(result);
+
+	return result;
+
+Fail_0:
+	DECREF(arg);
+Fail_1:
+	if (!shared)
+		DECREF(result);
+	return NULL;
+}
diff --git a/Python/compile.c b/Python/compile.c
index 685a806..3a6d181 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -164,6 +164,7 @@
 	int c_nexti;		/* index into c_code */
 	int c_errors;		/* counts errors occurred */
 	int c_infunction;	/* set when compiling a function */
+	int c_inlambda;		/* set when compiling an expression */
 	int c_loops;		/* counts nested loops */
 	int c_begin;		/* begin of current loop, for 'continue' */
 	int c_block[MAXBLOCKS];	/* stack of block types */
@@ -205,7 +206,7 @@
 
 /* Prototypes */
 
-static int com_init PROTO((struct compiling *, char *));
+static int com_init PROTO((struct compiling *, char *, int));
 static void com_free PROTO((struct compiling *));
 static void com_done PROTO((struct compiling *));
 static void com_node PROTO((struct compiling *, struct _node *));
@@ -221,9 +222,10 @@
 static void com_list PROTO((struct compiling *, node *, int));
 
 static int
-com_init(c, filename)
+com_init(c, filename, inlambda)
 	struct compiling *c;
 	char *filename;
+	int inlambda;
 {
 	if ((c->c_code = newsizedstringobject((char *)NULL, 1000)) == NULL)
 		goto fail_3;
@@ -236,6 +238,7 @@
 	c->c_nexti = 0;
 	c->c_errors = 0;
 	c->c_infunction = 0;
+	c->c_inlambda = inlambda;
 	c->c_loops = 0;
 	c->c_begin = 0;
 	c->c_nblocks = 0;
@@ -1792,7 +1795,7 @@
 {
 	object *v;
 	REQ(n, funcdef); /* funcdef: 'def' NAME parameters ':' suite */
-	v = (object *)compile(n, c->c_filename);
+	v = (object *)_compile(n, c->c_filename, 0);
 	if (v == NULL)
 		c->c_errors++;
 	else {
@@ -1805,6 +1808,25 @@
 }
 
 static void
+com_lambda(c, n)
+	struct compiling *c;
+	node *n;
+{
+	object *v;
+	REQ(n, lambda_input);
+	v = (object *)_compile(n, c->c_filename, 1);
+	if (v == NULL)
+		c->c_errors++;
+	else {
+		int i = com_addconst(c, v);
+		DECREF(v);
+		com_addoparg(c, LOAD_CONST, i);
+		com_addbyte(c, BUILD_FUNCTION);
+		com_addbyte(c, RETURN_VALUE);
+	}
+}
+
+static void
 com_bases(c, n)
 	struct compiling *c;
 	node *n;
@@ -1839,7 +1861,7 @@
 		com_addoparg(c, BUILD_TUPLE, 0);
 	else
 		com_bases(c, CHILD(n, 3));
-	v = (object *)compile(n, c->c_filename);
+	v = (object *)_compile(n, c->c_filename, 0);
 	if (v == NULL)
 		c->c_errors++;
 	else {
@@ -2097,6 +2119,17 @@
 }
 
 static void
+compile_lambda(c, n)
+	struct compiling *c;
+	node *n;
+{
+	REQ(n, lambda_input)
+	com_arglist(c, CHILD(n, 0));
+	com_node(c, CHILD(n, 2));
+	com_addbyte(c, RETURN_VALUE);
+}
+
+static void
 compile_node(c, n)
 	struct compiling *c;
 	node *n;
@@ -2120,12 +2153,11 @@
 		com_addbyte(c, RETURN_VALUE);
 		break;
 	
-	case expr_input: /* Built-in function eval() */
-		com_node(c, CHILD(n, 0));
-		com_addbyte(c, RETURN_VALUE);
+	case lambda_input: /* Built-in function lambda() */
+		(c->c_inlambda ? compile_lambda : com_lambda)(c, n);
 		break;
 	
-	case eval_input: /* Built-in function input() */
+	case eval_input: /* Built-in functions eval() and input() */
 		com_node(c, CHILD(n, 0));
 		com_addbyte(c, RETURN_VALUE);
 		break;
@@ -2285,13 +2317,14 @@
 }
 
 codeobject *
-compile(n, filename)
+_compile(n, filename, inlambda)
 	node *n;
 	char *filename;
+	int inlambda;
 {
 	struct compiling sc;
 	codeobject *co;
-	if (!com_init(&sc, filename))
+	if (!com_init(&sc, filename, inlambda))
 		return NULL;
 	compile_node(&sc, n);
 	com_done(&sc);
diff --git a/Python/graminit.c b/Python/graminit.c
index bce702d..b5af72b 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -64,138 +64,160 @@
 	{13, 2},
 };
 static arc arcs_4_2[1] = {
-	{14, 3},
+	{9, 3},
 };
-static arc arcs_4_3[1] = {
-	{15, 4},
+static arc arcs_4_3[2] = {
+	{2, 3},
+	{7, 4},
 };
 static arc arcs_4_4[1] = {
-	{16, 5},
+	{0, 4},
 };
-static arc arcs_4_5[1] = {
-	{0, 5},
-};
-static state states_4[6] = {
+static state states_4[5] = {
 	{1, arcs_4_0},
 	{1, arcs_4_1},
 	{1, arcs_4_2},
-	{1, arcs_4_3},
+	{2, arcs_4_3},
 	{1, arcs_4_4},
-	{1, arcs_4_5},
 };
 static arc arcs_5_0[1] = {
-	{17, 1},
+	{15, 1},
 };
-static arc arcs_5_1[2] = {
-	{18, 2},
-	{19, 3},
+static arc arcs_5_1[1] = {
+	{16, 2},
 };
 static arc arcs_5_2[1] = {
-	{19, 3},
+	{17, 3},
 };
 static arc arcs_5_3[1] = {
-	{0, 3},
-};
-static state states_5[4] = {
-	{1, arcs_5_0},
-	{2, arcs_5_1},
-	{1, arcs_5_2},
-	{1, arcs_5_3},
-};
-static arc arcs_6_0[2] = {
-	{20, 1},
-	{22, 2},
-};
-static arc arcs_6_1[2] = {
-	{21, 3},
-	{0, 1},
-};
-static arc arcs_6_2[1] = {
 	{13, 4},
 };
-static arc arcs_6_3[3] = {
-	{20, 1},
-	{22, 2},
+static arc arcs_5_4[1] = {
+	{18, 5},
+};
+static arc arcs_5_5[1] = {
+	{0, 5},
+};
+static state states_5[6] = {
+	{1, arcs_5_0},
+	{1, arcs_5_1},
+	{1, arcs_5_2},
+	{1, arcs_5_3},
+	{1, arcs_5_4},
+	{1, arcs_5_5},
+};
+static arc arcs_6_0[1] = {
+	{19, 1},
+};
+static arc arcs_6_1[2] = {
+	{12, 2},
+	{20, 3},
+};
+static arc arcs_6_2[1] = {
+	{20, 3},
+};
+static arc arcs_6_3[1] = {
 	{0, 3},
 };
-static arc arcs_6_4[1] = {
-	{0, 4},
-};
-static state states_6[5] = {
-	{2, arcs_6_0},
+static state states_6[4] = {
+	{1, arcs_6_0},
 	{2, arcs_6_1},
 	{1, arcs_6_2},
-	{3, arcs_6_3},
-	{1, arcs_6_4},
+	{1, arcs_6_3},
 };
 static arc arcs_7_0[2] = {
-	{13, 1},
-	{17, 2},
+	{21, 1},
+	{23, 2},
 };
-static arc arcs_7_1[1] = {
+static arc arcs_7_1[2] = {
+	{22, 3},
 	{0, 1},
 };
 static arc arcs_7_2[1] = {
-	{23, 3},
+	{16, 4},
 };
-static arc arcs_7_3[1] = {
-	{19, 1},
+static arc arcs_7_3[3] = {
+	{21, 1},
+	{23, 2},
+	{0, 3},
 };
-static state states_7[4] = {
+static arc arcs_7_4[1] = {
+	{0, 4},
+};
+static state states_7[5] = {
 	{2, arcs_7_0},
-	{1, arcs_7_1},
+	{2, arcs_7_1},
 	{1, arcs_7_2},
-	{1, arcs_7_3},
+	{3, arcs_7_3},
+	{1, arcs_7_4},
 };
-static arc arcs_8_0[1] = {
-	{20, 1},
+static arc arcs_8_0[2] = {
+	{16, 1},
+	{19, 2},
 };
-static arc arcs_8_1[2] = {
-	{21, 2},
+static arc arcs_8_1[1] = {
 	{0, 1},
 };
-static arc arcs_8_2[2] = {
+static arc arcs_8_2[1] = {
+	{24, 3},
+};
+static arc arcs_8_3[1] = {
 	{20, 1},
+};
+static state states_8[4] = {
+	{2, arcs_8_0},
+	{1, arcs_8_1},
+	{1, arcs_8_2},
+	{1, arcs_8_3},
+};
+static arc arcs_9_0[1] = {
+	{21, 1},
+};
+static arc arcs_9_1[2] = {
+	{22, 2},
+	{0, 1},
+};
+static arc arcs_9_2[2] = {
+	{21, 1},
 	{0, 2},
 };
-static state states_8[3] = {
-	{1, arcs_8_0},
-	{2, arcs_8_1},
-	{2, arcs_8_2},
+static state states_9[3] = {
+	{1, arcs_9_0},
+	{2, arcs_9_1},
+	{2, arcs_9_2},
 };
-static arc arcs_9_0[2] = {
+static arc arcs_10_0[2] = {
 	{3, 1},
 	{4, 1},
 };
-static arc arcs_9_1[1] = {
+static arc arcs_10_1[1] = {
 	{0, 1},
 };
-static state states_9[2] = {
-	{2, arcs_9_0},
-	{1, arcs_9_1},
+static state states_10[2] = {
+	{2, arcs_10_0},
+	{1, arcs_10_1},
 };
-static arc arcs_10_0[1] = {
-	{24, 1},
+static arc arcs_11_0[1] = {
+	{25, 1},
 };
-static arc arcs_10_1[2] = {
-	{25, 2},
+static arc arcs_11_1[2] = {
+	{26, 2},
 	{2, 3},
 };
-static arc arcs_10_2[2] = {
-	{24, 1},
+static arc arcs_11_2[2] = {
+	{25, 1},
 	{2, 3},
 };
-static arc arcs_10_3[1] = {
+static arc arcs_11_3[1] = {
 	{0, 3},
 };
-static state states_10[4] = {
-	{1, arcs_10_0},
-	{2, arcs_10_1},
-	{2, arcs_10_2},
-	{1, arcs_10_3},
+static state states_11[4] = {
+	{1, arcs_11_0},
+	{2, arcs_11_1},
+	{2, arcs_11_2},
+	{1, arcs_11_3},
 };
-static arc arcs_11_0[9] = {
-	{26, 1},
+static arc arcs_12_0[9] = {
 	{27, 1},
 	{28, 1},
 	{29, 1},
@@ -204,86 +226,77 @@
 	{32, 1},
 	{33, 1},
 	{34, 1},
+	{35, 1},
 };
-static arc arcs_11_1[1] = {
-	{0, 1},
-};
-static state states_11[2] = {
-	{9, arcs_11_0},
-	{1, arcs_11_1},
-};
-static arc arcs_12_0[1] = {
-	{9, 1},
-};
-static arc arcs_12_1[2] = {
-	{35, 0},
+static arc arcs_12_1[1] = {
 	{0, 1},
 };
 static state states_12[2] = {
-	{1, arcs_12_0},
-	{2, arcs_12_1},
+	{9, arcs_12_0},
+	{1, arcs_12_1},
 };
 static arc arcs_13_0[1] = {
-	{36, 1},
+	{9, 1},
 };
 static arc arcs_13_1[2] = {
-	{37, 2},
+	{36, 0},
 	{0, 1},
 };
-static arc arcs_13_2[2] = {
-	{21, 1},
-	{0, 2},
-};
-static state states_13[3] = {
+static state states_13[2] = {
 	{1, arcs_13_0},
 	{2, arcs_13_1},
-	{2, arcs_13_2},
 };
 static arc arcs_14_0[1] = {
-	{38, 1},
+	{37, 1},
 };
-static arc arcs_14_1[1] = {
-	{39, 2},
+static arc arcs_14_1[2] = {
+	{38, 2},
+	{0, 1},
 };
-static arc arcs_14_2[1] = {
+static arc arcs_14_2[2] = {
+	{22, 1},
 	{0, 2},
 };
 static state states_14[3] = {
 	{1, arcs_14_0},
-	{1, arcs_14_1},
-	{1, arcs_14_2},
+	{2, arcs_14_1},
+	{2, arcs_14_2},
 };
 static arc arcs_15_0[1] = {
-	{40, 1},
+	{39, 1},
 };
 static arc arcs_15_1[1] = {
-	{0, 1},
+	{40, 2},
 };
-static state states_15[2] = {
+static arc arcs_15_2[1] = {
+	{0, 2},
+};
+static state states_15[3] = {
 	{1, arcs_15_0},
 	{1, arcs_15_1},
+	{1, arcs_15_2},
 };
-static arc arcs_16_0[4] = {
+static arc arcs_16_0[1] = {
 	{41, 1},
-	{42, 1},
-	{43, 1},
-	{44, 1},
 };
 static arc arcs_16_1[1] = {
 	{0, 1},
 };
 static state states_16[2] = {
-	{4, arcs_16_0},
+	{1, arcs_16_0},
 	{1, arcs_16_1},
 };
-static arc arcs_17_0[1] = {
+static arc arcs_17_0[4] = {
+	{42, 1},
+	{43, 1},
+	{44, 1},
 	{45, 1},
 };
 static arc arcs_17_1[1] = {
 	{0, 1},
 };
 static state states_17[2] = {
-	{1, arcs_17_0},
+	{4, arcs_17_0},
 	{1, arcs_17_1},
 };
 static arc arcs_18_0[1] = {
@@ -299,246 +312,221 @@
 static arc arcs_19_0[1] = {
 	{47, 1},
 };
-static arc arcs_19_1[2] = {
-	{9, 2},
+static arc arcs_19_1[1] = {
 	{0, 1},
 };
-static arc arcs_19_2[1] = {
-	{0, 2},
-};
-static state states_19[3] = {
+static state states_19[2] = {
 	{1, arcs_19_0},
-	{2, arcs_19_1},
-	{1, arcs_19_2},
+	{1, arcs_19_1},
 };
 static arc arcs_20_0[1] = {
 	{48, 1},
 };
-static arc arcs_20_1[1] = {
-	{37, 2},
+static arc arcs_20_1[2] = {
+	{9, 2},
+	{0, 1},
 };
-static arc arcs_20_2[2] = {
-	{21, 3},
+static arc arcs_20_2[1] = {
 	{0, 2},
 };
-static arc arcs_20_3[1] = {
-	{37, 4},
-};
-static arc arcs_20_4[1] = {
-	{0, 4},
-};
-static state states_20[5] = {
+static state states_20[3] = {
 	{1, arcs_20_0},
-	{1, arcs_20_1},
-	{2, arcs_20_2},
-	{1, arcs_20_3},
-	{1, arcs_20_4},
+	{2, arcs_20_1},
+	{1, arcs_20_2},
 };
-static arc arcs_21_0[2] = {
+static arc arcs_21_0[1] = {
 	{49, 1},
-	{50, 2},
 };
 static arc arcs_21_1[1] = {
-	{13, 3},
+	{38, 2},
 };
-static arc arcs_21_2[1] = {
-	{13, 4},
-};
-static arc arcs_21_3[2] = {
-	{21, 1},
-	{0, 3},
-};
-static arc arcs_21_4[1] = {
-	{49, 5},
-};
-static arc arcs_21_5[2] = {
-	{22, 6},
-	{13, 7},
-};
-static arc arcs_21_6[1] = {
-	{0, 6},
-};
-static arc arcs_21_7[2] = {
-	{21, 8},
-	{0, 7},
-};
-static arc arcs_21_8[1] = {
-	{13, 7},
-};
-static state states_21[9] = {
-	{2, arcs_21_0},
-	{1, arcs_21_1},
-	{1, arcs_21_2},
-	{2, arcs_21_3},
-	{1, arcs_21_4},
-	{2, arcs_21_5},
-	{1, arcs_21_6},
-	{2, arcs_21_7},
-	{1, arcs_21_8},
-};
-static arc arcs_22_0[1] = {
-	{51, 1},
-};
-static arc arcs_22_1[1] = {
-	{13, 2},
-};
-static arc arcs_22_2[2] = {
-	{21, 1},
+static arc arcs_21_2[2] = {
+	{22, 3},
 	{0, 2},
 };
-static state states_22[3] = {
-	{1, arcs_22_0},
+static arc arcs_21_3[1] = {
+	{38, 4},
+};
+static arc arcs_21_4[1] = {
+	{0, 4},
+};
+static state states_21[5] = {
+	{1, arcs_21_0},
+	{1, arcs_21_1},
+	{2, arcs_21_2},
+	{1, arcs_21_3},
+	{1, arcs_21_4},
+};
+static arc arcs_22_0[2] = {
+	{50, 1},
+	{51, 2},
+};
+static arc arcs_22_1[1] = {
+	{16, 3},
+};
+static arc arcs_22_2[1] = {
+	{16, 4},
+};
+static arc arcs_22_3[2] = {
+	{22, 1},
+	{0, 3},
+};
+static arc arcs_22_4[1] = {
+	{50, 5},
+};
+static arc arcs_22_5[2] = {
+	{23, 6},
+	{16, 7},
+};
+static arc arcs_22_6[1] = {
+	{0, 6},
+};
+static arc arcs_22_7[2] = {
+	{22, 8},
+	{0, 7},
+};
+static arc arcs_22_8[1] = {
+	{16, 7},
+};
+static state states_22[9] = {
+	{2, arcs_22_0},
 	{1, arcs_22_1},
-	{2, arcs_22_2},
+	{1, arcs_22_2},
+	{2, arcs_22_3},
+	{1, arcs_22_4},
+	{2, arcs_22_5},
+	{1, arcs_22_6},
+	{2, arcs_22_7},
+	{1, arcs_22_8},
 };
 static arc arcs_23_0[1] = {
 	{52, 1},
 };
-static arc arcs_23_1[2] = {
-	{22, 2},
-	{13, 3},
+static arc arcs_23_1[1] = {
+	{16, 2},
 };
-static arc arcs_23_2[1] = {
-	{15, 4},
-};
-static arc arcs_23_3[2] = {
-	{21, 5},
-	{15, 4},
-};
-static arc arcs_23_4[1] = {
-	{53, 6},
-};
-static arc arcs_23_5[1] = {
-	{13, 3},
-};
-static arc arcs_23_6[2] = {
-	{21, 4},
-	{0, 6},
-};
-static state states_23[7] = {
-	{1, arcs_23_0},
-	{2, arcs_23_1},
-	{1, arcs_23_2},
-	{2, arcs_23_3},
-	{1, arcs_23_4},
-	{1, arcs_23_5},
-	{2, arcs_23_6},
-};
-static arc arcs_24_0[1] = {
-	{13, 1},
-};
-static arc arcs_24_1[2] = {
-	{13, 1},
-	{0, 1},
-};
-static state states_24[2] = {
-	{1, arcs_24_0},
-	{2, arcs_24_1},
-};
-static arc arcs_25_0[1] = {
-	{54, 1},
-};
-static arc arcs_25_1[1] = {
-	{37, 2},
-};
-static arc arcs_25_2[2] = {
-	{55, 3},
+static arc arcs_23_2[2] = {
+	{22, 1},
 	{0, 2},
 };
-static arc arcs_25_3[1] = {
-	{37, 4},
+static state states_23[3] = {
+	{1, arcs_23_0},
+	{1, arcs_23_1},
+	{2, arcs_23_2},
 };
-static arc arcs_25_4[2] = {
-	{21, 5},
-	{0, 4},
+static arc arcs_24_0[1] = {
+	{53, 1},
 };
-static arc arcs_25_5[1] = {
-	{37, 6},
+static arc arcs_24_1[2] = {
+	{23, 2},
+	{16, 3},
 };
-static arc arcs_25_6[1] = {
+static arc arcs_24_2[1] = {
+	{13, 4},
+};
+static arc arcs_24_3[2] = {
+	{22, 5},
+	{13, 4},
+};
+static arc arcs_24_4[1] = {
+	{54, 6},
+};
+static arc arcs_24_5[1] = {
+	{16, 3},
+};
+static arc arcs_24_6[2] = {
+	{22, 4},
 	{0, 6},
 };
-static state states_25[7] = {
-	{1, arcs_25_0},
-	{1, arcs_25_1},
-	{2, arcs_25_2},
-	{1, arcs_25_3},
-	{2, arcs_25_4},
-	{1, arcs_25_5},
-	{1, arcs_25_6},
+static state states_24[7] = {
+	{1, arcs_24_0},
+	{2, arcs_24_1},
+	{1, arcs_24_2},
+	{2, arcs_24_3},
+	{1, arcs_24_4},
+	{1, arcs_24_5},
+	{2, arcs_24_6},
 };
-static arc arcs_26_0[6] = {
-	{56, 1},
-	{57, 1},
-	{58, 1},
-	{59, 1},
-	{11, 1},
-	{60, 1},
+static arc arcs_25_0[1] = {
+	{16, 1},
 };
-static arc arcs_26_1[1] = {
+static arc arcs_25_1[2] = {
+	{16, 1},
 	{0, 1},
 };
-static state states_26[2] = {
-	{6, arcs_26_0},
-	{1, arcs_26_1},
+static state states_25[2] = {
+	{1, arcs_25_0},
+	{2, arcs_25_1},
 };
-static arc arcs_27_0[1] = {
-	{61, 1},
+static arc arcs_26_0[1] = {
+	{55, 1},
 };
-static arc arcs_27_1[1] = {
-	{37, 2},
+static arc arcs_26_1[1] = {
+	{56, 2},
 };
-static arc arcs_27_2[1] = {
-	{15, 3},
+static arc arcs_26_2[2] = {
+	{57, 3},
+	{0, 2},
 };
-static arc arcs_27_3[1] = {
-	{16, 4},
+static arc arcs_26_3[1] = {
+	{38, 4},
 };
-static arc arcs_27_4[3] = {
-	{62, 1},
-	{63, 5},
+static arc arcs_26_4[2] = {
+	{22, 5},
 	{0, 4},
 };
-static arc arcs_27_5[1] = {
-	{15, 6},
+static arc arcs_26_5[1] = {
+	{38, 6},
 };
-static arc arcs_27_6[1] = {
-	{16, 7},
+static arc arcs_26_6[1] = {
+	{0, 6},
 };
-static arc arcs_27_7[1] = {
-	{0, 7},
+static state states_26[7] = {
+	{1, arcs_26_0},
+	{1, arcs_26_1},
+	{2, arcs_26_2},
+	{1, arcs_26_3},
+	{2, arcs_26_4},
+	{1, arcs_26_5},
+	{1, arcs_26_6},
 };
-static state states_27[8] = {
-	{1, arcs_27_0},
+static arc arcs_27_0[6] = {
+	{58, 1},
+	{59, 1},
+	{60, 1},
+	{61, 1},
+	{14, 1},
+	{62, 1},
+};
+static arc arcs_27_1[1] = {
+	{0, 1},
+};
+static state states_27[2] = {
+	{6, arcs_27_0},
 	{1, arcs_27_1},
-	{1, arcs_27_2},
-	{1, arcs_27_3},
-	{3, arcs_27_4},
-	{1, arcs_27_5},
-	{1, arcs_27_6},
-	{1, arcs_27_7},
 };
 static arc arcs_28_0[1] = {
-	{64, 1},
+	{63, 1},
 };
 static arc arcs_28_1[1] = {
-	{37, 2},
+	{38, 2},
 };
 static arc arcs_28_2[1] = {
-	{15, 3},
+	{13, 3},
 };
 static arc arcs_28_3[1] = {
-	{16, 4},
+	{18, 4},
 };
-static arc arcs_28_4[2] = {
-	{63, 5},
+static arc arcs_28_4[3] = {
+	{64, 1},
+	{65, 5},
 	{0, 4},
 };
 static arc arcs_28_5[1] = {
-	{15, 6},
+	{13, 6},
 };
 static arc arcs_28_6[1] = {
-	{16, 7},
+	{18, 7},
 };
 static arc arcs_28_7[1] = {
 	{0, 7},
@@ -548,82 +536,73 @@
 	{1, arcs_28_1},
 	{1, arcs_28_2},
 	{1, arcs_28_3},
-	{2, arcs_28_4},
+	{3, arcs_28_4},
 	{1, arcs_28_5},
 	{1, arcs_28_6},
 	{1, arcs_28_7},
 };
 static arc arcs_29_0[1] = {
-	{65, 1},
+	{66, 1},
 };
 static arc arcs_29_1[1] = {
-	{39, 2},
+	{38, 2},
 };
 static arc arcs_29_2[1] = {
-	{55, 3},
+	{13, 3},
 };
 static arc arcs_29_3[1] = {
-	{9, 4},
+	{18, 4},
 };
-static arc arcs_29_4[1] = {
-	{15, 5},
+static arc arcs_29_4[2] = {
+	{65, 5},
+	{0, 4},
 };
 static arc arcs_29_5[1] = {
-	{16, 6},
+	{13, 6},
 };
-static arc arcs_29_6[2] = {
-	{63, 7},
-	{0, 6},
+static arc arcs_29_6[1] = {
+	{18, 7},
 };
 static arc arcs_29_7[1] = {
-	{15, 8},
+	{0, 7},
 };
-static arc arcs_29_8[1] = {
-	{16, 9},
-};
-static arc arcs_29_9[1] = {
-	{0, 9},
-};
-static state states_29[10] = {
+static state states_29[8] = {
 	{1, arcs_29_0},
 	{1, arcs_29_1},
 	{1, arcs_29_2},
 	{1, arcs_29_3},
-	{1, arcs_29_4},
+	{2, arcs_29_4},
 	{1, arcs_29_5},
-	{2, arcs_29_6},
+	{1, arcs_29_6},
 	{1, arcs_29_7},
-	{1, arcs_29_8},
-	{1, arcs_29_9},
 };
 static arc arcs_30_0[1] = {
-	{66, 1},
+	{67, 1},
 };
 static arc arcs_30_1[1] = {
-	{15, 2},
+	{40, 2},
 };
 static arc arcs_30_2[1] = {
-	{16, 3},
+	{57, 3},
 };
-static arc arcs_30_3[2] = {
-	{67, 4},
-	{68, 5},
+static arc arcs_30_3[1] = {
+	{9, 4},
 };
 static arc arcs_30_4[1] = {
-	{15, 6},
+	{13, 5},
 };
 static arc arcs_30_5[1] = {
-	{15, 7},
+	{18, 6},
 };
-static arc arcs_30_6[1] = {
-	{16, 8},
+static arc arcs_30_6[2] = {
+	{65, 7},
+	{0, 6},
 };
 static arc arcs_30_7[1] = {
-	{16, 9},
+	{13, 8},
 };
-static arc arcs_30_8[2] = {
-	{67, 4},
-	{0, 8},
+static arc arcs_30_8[1] = {
+	{18, 9},
 };
 static arc arcs_30_9[1] = {
 	{0, 9},
@@ -632,72 +611,105 @@
 	{1, arcs_30_0},
 	{1, arcs_30_1},
 	{1, arcs_30_2},
-	{2, arcs_30_3},
+	{1, arcs_30_3},
 	{1, arcs_30_4},
 	{1, arcs_30_5},
-	{1, arcs_30_6},
+	{2, arcs_30_6},
 	{1, arcs_30_7},
-	{2, arcs_30_8},
+	{1, arcs_30_8},
 	{1, arcs_30_9},
 };
 static arc arcs_31_0[1] = {
-	{69, 1},
+	{68, 1},
 };
-static arc arcs_31_1[2] = {
-	{37, 2},
-	{0, 1},
+static arc arcs_31_1[1] = {
+	{13, 2},
 };
-static arc arcs_31_2[2] = {
-	{21, 3},
-	{0, 2},
+static arc arcs_31_2[1] = {
+	{18, 3},
 };
-static arc arcs_31_3[1] = {
-	{37, 4},
+static arc arcs_31_3[2] = {
+	{69, 4},
+	{70, 5},
 };
 static arc arcs_31_4[1] = {
+	{13, 6},
+};
+static arc arcs_31_5[1] = {
+	{13, 7},
+};
+static arc arcs_31_6[1] = {
+	{18, 8},
+};
+static arc arcs_31_7[1] = {
+	{18, 9},
+};
+static arc arcs_31_8[2] = {
+	{69, 4},
+	{0, 8},
+};
+static arc arcs_31_9[1] = {
+	{0, 9},
+};
+static state states_31[10] = {
+	{1, arcs_31_0},
+	{1, arcs_31_1},
+	{1, arcs_31_2},
+	{2, arcs_31_3},
+	{1, arcs_31_4},
+	{1, arcs_31_5},
+	{1, arcs_31_6},
+	{1, arcs_31_7},
+	{2, arcs_31_8},
+	{1, arcs_31_9},
+};
+static arc arcs_32_0[1] = {
+	{71, 1},
+};
+static arc arcs_32_1[2] = {
+	{38, 2},
+	{0, 1},
+};
+static arc arcs_32_2[2] = {
+	{22, 3},
+	{0, 2},
+};
+static arc arcs_32_3[1] = {
+	{38, 4},
+};
+static arc arcs_32_4[1] = {
 	{0, 4},
 };
-static state states_31[5] = {
-	{1, arcs_31_0},
-	{2, arcs_31_1},
-	{2, arcs_31_2},
-	{1, arcs_31_3},
-	{1, arcs_31_4},
+static state states_32[5] = {
+	{1, arcs_32_0},
+	{2, arcs_32_1},
+	{2, arcs_32_2},
+	{1, arcs_32_3},
+	{1, arcs_32_4},
 };
-static arc arcs_32_0[2] = {
+static arc arcs_33_0[2] = {
 	{3, 1},
 	{2, 2},
 };
-static arc arcs_32_1[1] = {
+static arc arcs_33_1[1] = {
 	{0, 1},
 };
-static arc arcs_32_2[1] = {
-	{70, 3},
+static arc arcs_33_2[1] = {
+	{72, 3},
 };
-static arc arcs_32_3[1] = {
+static arc arcs_33_3[1] = {
 	{6, 4},
 };
-static arc arcs_32_4[2] = {
+static arc arcs_33_4[2] = {
 	{6, 4},
-	{71, 1},
+	{73, 1},
 };
-static state states_32[5] = {
-	{2, arcs_32_0},
-	{1, arcs_32_1},
-	{1, arcs_32_2},
-	{1, arcs_32_3},
-	{2, arcs_32_4},
-};
-static arc arcs_33_0[1] = {
-	{72, 1},
-};
-static arc arcs_33_1[2] = {
-	{73, 0},
-	{0, 1},
-};
-static state states_33[2] = {
-	{1, arcs_33_0},
-	{2, arcs_33_1},
+static state states_33[5] = {
+	{2, arcs_33_0},
+	{1, arcs_33_1},
+	{1, arcs_33_2},
+	{1, arcs_33_3},
+	{2, arcs_33_4},
 };
 static arc arcs_34_0[1] = {
 	{74, 1},
@@ -710,76 +722,76 @@
 	{1, arcs_34_0},
 	{2, arcs_34_1},
 };
-static arc arcs_35_0[2] = {
+static arc arcs_35_0[1] = {
 	{76, 1},
-	{77, 2},
 };
-static arc arcs_35_1[1] = {
-	{74, 2},
-};
-static arc arcs_35_2[1] = {
-	{0, 2},
-};
-static state states_35[3] = {
-	{2, arcs_35_0},
-	{1, arcs_35_1},
-	{1, arcs_35_2},
-};
-static arc arcs_36_0[1] = {
-	{78, 1},
-};
-static arc arcs_36_1[2] = {
-	{79, 0},
+static arc arcs_35_1[2] = {
+	{77, 0},
 	{0, 1},
 };
-static state states_36[2] = {
-	{1, arcs_36_0},
-	{2, arcs_36_1},
+static state states_35[2] = {
+	{1, arcs_35_0},
+	{2, arcs_35_1},
 };
-static arc arcs_37_0[10] = {
-	{80, 1},
+static arc arcs_36_0[2] = {
+	{78, 1},
+	{79, 2},
+};
+static arc arcs_36_1[1] = {
+	{76, 2},
+};
+static arc arcs_36_2[1] = {
+	{0, 2},
+};
+static state states_36[3] = {
+	{2, arcs_36_0},
+	{1, arcs_36_1},
+	{1, arcs_36_2},
+};
+static arc arcs_37_0[1] = {
+	{56, 1},
+};
+static arc arcs_37_1[2] = {
+	{80, 0},
+	{0, 1},
+};
+static state states_37[2] = {
+	{1, arcs_37_0},
+	{2, arcs_37_1},
+};
+static arc arcs_38_0[10] = {
 	{81, 1},
 	{82, 1},
 	{83, 1},
 	{84, 1},
 	{85, 1},
 	{86, 1},
-	{55, 1},
-	{76, 2},
-	{87, 3},
+	{87, 1},
+	{57, 1},
+	{78, 2},
+	{88, 3},
 };
-static arc arcs_37_1[1] = {
+static arc arcs_38_1[1] = {
 	{0, 1},
 };
-static arc arcs_37_2[1] = {
-	{55, 1},
+static arc arcs_38_2[1] = {
+	{57, 1},
 };
-static arc arcs_37_3[2] = {
-	{76, 1},
+static arc arcs_38_3[2] = {
+	{78, 1},
 	{0, 3},
 };
-static state states_37[4] = {
-	{10, arcs_37_0},
-	{1, arcs_37_1},
-	{1, arcs_37_2},
-	{2, arcs_37_3},
-};
-static arc arcs_38_0[1] = {
-	{88, 1},
-};
-static arc arcs_38_1[2] = {
-	{89, 0},
-	{0, 1},
-};
-static state states_38[2] = {
-	{1, arcs_38_0},
-	{2, arcs_38_1},
+static state states_38[4] = {
+	{10, arcs_38_0},
+	{1, arcs_38_1},
+	{1, arcs_38_2},
+	{2, arcs_38_3},
 };
 static arc arcs_39_0[1] = {
-	{90, 1},
+	{89, 1},
 };
 static arc arcs_39_1[2] = {
-	{91, 0},
+	{90, 0},
 	{0, 1},
 };
 static state states_39[2] = {
@@ -787,10 +799,10 @@
 	{2, arcs_39_1},
 };
 static arc arcs_40_0[1] = {
-	{92, 1},
+	{91, 1},
 };
 static arc arcs_40_1[2] = {
-	{93, 0},
+	{92, 0},
 	{0, 1},
 };
 static state states_40[2] = {
@@ -798,23 +810,22 @@
 	{2, arcs_40_1},
 };
 static arc arcs_41_0[1] = {
-	{94, 1},
+	{93, 1},
 };
-static arc arcs_41_1[3] = {
-	{95, 0},
-	{96, 0},
+static arc arcs_41_1[2] = {
+	{94, 0},
 	{0, 1},
 };
 static state states_41[2] = {
 	{1, arcs_41_0},
-	{3, arcs_41_1},
+	{2, arcs_41_1},
 };
 static arc arcs_42_0[1] = {
-	{97, 1},
+	{95, 1},
 };
 static arc arcs_42_1[3] = {
-	{98, 0},
-	{99, 0},
+	{96, 0},
+	{97, 0},
 	{0, 1},
 };
 static state states_42[2] = {
@@ -822,170 +833,166 @@
 	{3, arcs_42_1},
 };
 static arc arcs_43_0[1] = {
-	{100, 1},
+	{98, 1},
 };
-static arc arcs_43_1[4] = {
-	{22, 0},
-	{101, 0},
-	{102, 0},
+static arc arcs_43_1[3] = {
+	{99, 0},
+	{100, 0},
 	{0, 1},
 };
 static state states_43[2] = {
 	{1, arcs_43_0},
-	{4, arcs_43_1},
+	{3, arcs_43_1},
 };
-static arc arcs_44_0[4] = {
-	{98, 1},
+static arc arcs_44_0[1] = {
+	{101, 1},
+};
+static arc arcs_44_1[4] = {
+	{23, 0},
+	{102, 0},
+	{103, 0},
+	{0, 1},
+};
+static state states_44[2] = {
+	{1, arcs_44_0},
+	{4, arcs_44_1},
+};
+static arc arcs_45_0[4] = {
 	{99, 1},
-	{103, 1},
-	{104, 2},
-};
-static arc arcs_44_1[1] = {
-	{100, 3},
-};
-static arc arcs_44_2[2] = {
+	{100, 1},
+	{104, 1},
 	{105, 2},
-	{0, 2},
 };
-static arc arcs_44_3[1] = {
-	{0, 3},
-};
-static state states_44[4] = {
-	{4, arcs_44_0},
-	{1, arcs_44_1},
-	{2, arcs_44_2},
-	{1, arcs_44_3},
-};
-static arc arcs_45_0[7] = {
-	{17, 1},
-	{106, 2},
-	{108, 3},
-	{111, 4},
-	{13, 5},
-	{112, 5},
-	{113, 5},
-};
-static arc arcs_45_1[2] = {
-	{9, 6},
-	{19, 5},
+static arc arcs_45_1[1] = {
+	{101, 3},
 };
 static arc arcs_45_2[2] = {
-	{9, 7},
-	{107, 5},
-};
-static arc arcs_45_3[2] = {
-	{109, 8},
-	{110, 5},
-};
-static arc arcs_45_4[1] = {
-	{9, 9},
-};
-static arc arcs_45_5[1] = {
-	{0, 5},
-};
-static arc arcs_45_6[1] = {
-	{19, 5},
-};
-static arc arcs_45_7[1] = {
-	{107, 5},
-};
-static arc arcs_45_8[1] = {
-	{110, 5},
-};
-static arc arcs_45_9[1] = {
-	{111, 5},
-};
-static state states_45[10] = {
-	{7, arcs_45_0},
-	{2, arcs_45_1},
-	{2, arcs_45_2},
-	{2, arcs_45_3},
-	{1, arcs_45_4},
-	{1, arcs_45_5},
-	{1, arcs_45_6},
-	{1, arcs_45_7},
-	{1, arcs_45_8},
-	{1, arcs_45_9},
-};
-static arc arcs_46_0[3] = {
-	{17, 1},
 	{106, 2},
-	{115, 3},
+	{0, 2},
+};
+static arc arcs_45_3[1] = {
+	{0, 3},
+};
+static state states_45[4] = {
+	{4, arcs_45_0},
+	{1, arcs_45_1},
+	{2, arcs_45_2},
+	{1, arcs_45_3},
+};
+static arc arcs_46_0[7] = {
+	{19, 1},
+	{107, 2},
+	{109, 3},
+	{112, 4},
+	{16, 5},
+	{113, 5},
+	{114, 5},
 };
 static arc arcs_46_1[2] = {
-	{9, 4},
-	{19, 5},
+	{9, 6},
+	{20, 5},
 };
-static arc arcs_46_2[1] = {
-	{114, 6},
+static arc arcs_46_2[2] = {
+	{9, 7},
+	{108, 5},
 };
-static arc arcs_46_3[1] = {
-	{13, 5},
+static arc arcs_46_3[2] = {
+	{110, 8},
+	{111, 5},
 };
 static arc arcs_46_4[1] = {
-	{19, 5},
+	{9, 9},
 };
 static arc arcs_46_5[1] = {
 	{0, 5},
 };
 static arc arcs_46_6[1] = {
-	{107, 5},
+	{20, 5},
 };
-static state states_46[7] = {
-	{3, arcs_46_0},
+static arc arcs_46_7[1] = {
+	{108, 5},
+};
+static arc arcs_46_8[1] = {
+	{111, 5},
+};
+static arc arcs_46_9[1] = {
+	{112, 5},
+};
+static state states_46[10] = {
+	{7, arcs_46_0},
 	{2, arcs_46_1},
-	{1, arcs_46_2},
-	{1, arcs_46_3},
+	{2, arcs_46_2},
+	{2, arcs_46_3},
 	{1, arcs_46_4},
 	{1, arcs_46_5},
 	{1, arcs_46_6},
+	{1, arcs_46_7},
+	{1, arcs_46_8},
+	{1, arcs_46_9},
 };
-static arc arcs_47_0[2] = {
-	{37, 1},
-	{15, 2},
+static arc arcs_47_0[3] = {
+	{19, 1},
+	{107, 2},
+	{116, 3},
 };
 static arc arcs_47_1[2] = {
-	{15, 2},
-	{0, 1},
+	{9, 4},
+	{20, 5},
 };
-static arc arcs_47_2[2] = {
-	{37, 3},
-	{0, 2},
+static arc arcs_47_2[1] = {
+	{115, 6},
 };
 static arc arcs_47_3[1] = {
-	{0, 3},
+	{16, 5},
 };
-static state states_47[4] = {
-	{2, arcs_47_0},
+static arc arcs_47_4[1] = {
+	{20, 5},
+};
+static arc arcs_47_5[1] = {
+	{0, 5},
+};
+static arc arcs_47_6[1] = {
+	{108, 5},
+};
+static state states_47[7] = {
+	{3, arcs_47_0},
 	{2, arcs_47_1},
-	{2, arcs_47_2},
+	{1, arcs_47_2},
 	{1, arcs_47_3},
+	{1, arcs_47_4},
+	{1, arcs_47_5},
+	{1, arcs_47_6},
 };
-static arc arcs_48_0[1] = {
-	{78, 1},
+static arc arcs_48_0[2] = {
+	{38, 1},
+	{13, 2},
 };
 static arc arcs_48_1[2] = {
-	{21, 2},
+	{13, 2},
 	{0, 1},
 };
 static arc arcs_48_2[2] = {
-	{78, 1},
+	{38, 3},
 	{0, 2},
 };
-static state states_48[3] = {
-	{1, arcs_48_0},
+static arc arcs_48_3[1] = {
+	{0, 3},
+};
+static state states_48[4] = {
+	{2, arcs_48_0},
 	{2, arcs_48_1},
 	{2, arcs_48_2},
+	{1, arcs_48_3},
 };
 static arc arcs_49_0[1] = {
-	{37, 1},
+	{56, 1},
 };
 static arc arcs_49_1[2] = {
-	{21, 2},
+	{22, 2},
 	{0, 1},
 };
 static arc arcs_49_2[2] = {
-	{37, 1},
+	{56, 1},
 	{0, 2},
 };
 static state states_49[3] = {
@@ -994,216 +1001,235 @@
 	{2, arcs_49_2},
 };
 static arc arcs_50_0[1] = {
-	{37, 1},
+	{38, 1},
 };
-static arc arcs_50_1[1] = {
-	{15, 2},
+static arc arcs_50_1[2] = {
+	{22, 2},
+	{0, 1},
 };
-static arc arcs_50_2[1] = {
-	{37, 3},
+static arc arcs_50_2[2] = {
+	{38, 1},
+	{0, 2},
 };
-static arc arcs_50_3[2] = {
-	{21, 4},
-	{0, 3},
-};
-static arc arcs_50_4[2] = {
-	{37, 1},
-	{0, 4},
-};
-static state states_50[5] = {
+static state states_50[3] = {
 	{1, arcs_50_0},
-	{1, arcs_50_1},
-	{1, arcs_50_2},
-	{2, arcs_50_3},
-	{2, arcs_50_4},
+	{2, arcs_50_1},
+	{2, arcs_50_2},
 };
 static arc arcs_51_0[1] = {
-	{116, 1},
+	{38, 1},
 };
 static arc arcs_51_1[1] = {
 	{13, 2},
 };
-static arc arcs_51_2[2] = {
-	{17, 3},
-	{15, 4},
+static arc arcs_51_2[1] = {
+	{38, 3},
 };
-static arc arcs_51_3[1] = {
-	{9, 5},
+static arc arcs_51_3[2] = {
+	{22, 4},
+	{0, 3},
 };
-static arc arcs_51_4[1] = {
-	{16, 6},
+static arc arcs_51_4[2] = {
+	{38, 1},
+	{0, 4},
 };
-static arc arcs_51_5[1] = {
-	{19, 7},
-};
-static arc arcs_51_6[1] = {
-	{0, 6},
-};
-static arc arcs_51_7[1] = {
-	{15, 4},
-};
-static state states_51[8] = {
+static state states_51[5] = {
 	{1, arcs_51_0},
 	{1, arcs_51_1},
-	{2, arcs_51_2},
-	{1, arcs_51_3},
-	{1, arcs_51_4},
-	{1, arcs_51_5},
-	{1, arcs_51_6},
-	{1, arcs_51_7},
+	{1, arcs_51_2},
+	{2, arcs_51_3},
+	{2, arcs_51_4},
 };
-static dfa dfas[52] = {
+static arc arcs_52_0[1] = {
+	{117, 1},
+};
+static arc arcs_52_1[1] = {
+	{16, 2},
+};
+static arc arcs_52_2[2] = {
+	{19, 3},
+	{13, 4},
+};
+static arc arcs_52_3[1] = {
+	{9, 5},
+};
+static arc arcs_52_4[1] = {
+	{18, 6},
+};
+static arc arcs_52_5[1] = {
+	{20, 7},
+};
+static arc arcs_52_6[1] = {
+	{0, 6},
+};
+static arc arcs_52_7[1] = {
+	{13, 4},
+};
+static state states_52[8] = {
+	{1, arcs_52_0},
+	{1, arcs_52_1},
+	{2, arcs_52_2},
+	{1, arcs_52_3},
+	{1, arcs_52_4},
+	{1, arcs_52_5},
+	{1, arcs_52_6},
+	{1, arcs_52_7},
+};
+static dfa dfas[53] = {
 	{256, "single_input", 0, 3, states_0,
-	 "\004\060\002\000\120\341\137\040\007\020\000\000\214\224\023"},
+	 "\004\200\011\000\240\302\277\200\034\100\000\000\030\051\047"},
 	{257, "file_input", 0, 2, states_1,
-	 "\204\060\002\000\120\341\137\040\007\020\000\000\214\224\023"},
+	 "\204\200\011\000\240\302\277\200\034\100\000\000\030\051\047"},
 	{258, "expr_input", 0, 3, states_2,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
 	{259, "eval_input", 0, 3, states_3,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{260, "funcdef", 0, 6, states_4,
-	 "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{261, "parameters", 0, 4, states_5,
-	 "\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{262, "varargslist", 0, 5, states_6,
-	 "\000\040\102\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{263, "fpdef", 0, 4, states_7,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{264, "fplist", 0, 3, states_8,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{265, "stmt", 0, 2, states_9,
-	 "\000\060\002\000\120\341\137\040\007\020\000\000\214\224\023"},
-	{266, "simple_stmt", 0, 4, states_10,
-	 "\000\040\002\000\120\341\137\000\000\020\000\000\214\224\003"},
-	{267, "small_stmt", 0, 2, states_11,
-	 "\000\040\002\000\120\341\137\000\000\020\000\000\214\224\003"},
-	{268, "expr_stmt", 0, 2, states_12,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{269, "print_stmt", 0, 3, states_13,
-	 "\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
-	{270, "del_stmt", 0, 3, states_14,
-	 "\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000"},
-	{271, "pass_stmt", 0, 2, states_15,
-	 "\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
-	{272, "flow_stmt", 0, 2, states_16,
-	 "\000\000\000\000\000\340\001\000\000\000\000\000\000\000\000"},
-	{273, "break_stmt", 0, 2, states_17,
-	 "\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-	{274, "continue_stmt", 0, 2, states_18,
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{260, "exprfunc_input", 0, 5, states_4,
+	 "\000\000\211\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{261, "funcdef", 0, 6, states_5,
+	 "\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{262, "parameters", 0, 4, states_6,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{263, "varargslist", 0, 5, states_7,
+	 "\000\000\211\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{264, "fpdef", 0, 4, states_8,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{265, "fplist", 0, 3, states_9,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{266, "stmt", 0, 2, states_10,
+	 "\000\200\011\000\240\302\277\200\034\100\000\000\030\051\047"},
+	{267, "simple_stmt", 0, 4, states_11,
+	 "\000\000\011\000\240\302\277\000\000\100\000\000\030\051\007"},
+	{268, "small_stmt", 0, 2, states_12,
+	 "\000\000\011\000\240\302\277\000\000\100\000\000\030\051\007"},
+	{269, "expr_stmt", 0, 2, states_13,
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{270, "print_stmt", 0, 3, states_14,
+	 "\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"},
+	{271, "del_stmt", 0, 3, states_15,
+	 "\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
+	{272, "pass_stmt", 0, 2, states_16,
+	 "\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000"},
+	{273, "flow_stmt", 0, 2, states_17,
+	 "\000\000\000\000\000\300\003\000\000\000\000\000\000\000\000"},
+	{274, "break_stmt", 0, 2, states_18,
 	 "\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"},
-	{275, "return_stmt", 0, 3, states_19,
+	{275, "continue_stmt", 0, 2, states_19,
 	 "\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"},
-	{276, "raise_stmt", 0, 5, states_20,
+	{276, "return_stmt", 0, 3, states_20,
 	 "\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"},
-	{277, "import_stmt", 0, 9, states_21,
-	 "\000\000\000\000\000\000\006\000\000\000\000\000\000\000\000"},
-	{278, "global_stmt", 0, 3, states_22,
-	 "\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"},
-	{279, "access_stmt", 0, 7, states_23,
+	{277, "raise_stmt", 0, 5, states_21,
+	 "\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
+	{278, "import_stmt", 0, 9, states_22,
+	 "\000\000\000\000\000\000\014\000\000\000\000\000\000\000\000"},
+	{279, "global_stmt", 0, 3, states_23,
 	 "\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000"},
-	{280, "accesstype", 0, 2, states_24,
-	 "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-	{281, "exec_stmt", 0, 7, states_25,
-	 "\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000"},
-	{282, "compound_stmt", 0, 2, states_26,
-	 "\000\020\000\000\000\000\000\040\007\000\000\000\000\000\020"},
-	{283, "if_stmt", 0, 8, states_27,
-	 "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000"},
-	{284, "while_stmt", 0, 8, states_28,
-	 "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000"},
-	{285, "for_stmt", 0, 10, states_29,
-	 "\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000"},
-	{286, "try_stmt", 0, 10, states_30,
+	{280, "access_stmt", 0, 7, states_24,
+	 "\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
+	{281, "accesstype", 0, 2, states_25,
+	 "\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000"},
+	{282, "exec_stmt", 0, 7, states_26,
+	 "\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"},
+	{283, "compound_stmt", 0, 2, states_27,
+	 "\000\200\000\000\000\000\000\200\034\000\000\000\000\000\040"},
+	{284, "if_stmt", 0, 8, states_28,
+	 "\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000"},
+	{285, "while_stmt", 0, 8, states_29,
 	 "\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000"},
-	{287, "except_clause", 0, 5, states_31,
-	 "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000"},
-	{288, "suite", 0, 5, states_32,
-	 "\004\040\002\000\120\341\137\000\000\020\000\000\214\224\003"},
-	{289, "test", 0, 2, states_33,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{290, "and_test", 0, 2, states_34,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{291, "not_test", 0, 3, states_35,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{292, "comparison", 0, 2, states_36,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{293, "comp_op", 0, 4, states_37,
-	 "\000\000\000\000\000\000\200\000\000\020\377\000\000\000\000"},
-	{294, "expr", 0, 2, states_38,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{295, "xor_expr", 0, 2, states_39,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{296, "and_expr", 0, 2, states_40,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{297, "shift_expr", 0, 2, states_41,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{298, "arith_expr", 0, 2, states_42,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{299, "term", 0, 2, states_43,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{300, "factor", 0, 4, states_44,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{301, "atom", 0, 10, states_45,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\000\224\003"},
-	{302, "trailer", 0, 7, states_46,
-	 "\000\000\002\000\000\000\000\000\000\000\000\000\000\004\010"},
-	{303, "subscript", 0, 4, states_47,
-	 "\000\240\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{304, "exprlist", 0, 3, states_48,
-	 "\000\040\002\000\000\000\000\000\000\000\000\000\214\224\003"},
-	{305, "testlist", 0, 3, states_49,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{306, "dictmaker", 0, 5, states_50,
-	 "\000\040\002\000\000\000\000\000\000\020\000\000\214\224\003"},
-	{307, "classdef", 0, 8, states_51,
-	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020"},
+	{286, "for_stmt", 0, 10, states_30,
+	 "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000"},
+	{287, "try_stmt", 0, 10, states_31,
+	 "\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000"},
+	{288, "except_clause", 0, 5, states_32,
+	 "\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000"},
+	{289, "suite", 0, 5, states_33,
+	 "\004\000\011\000\240\302\277\000\000\100\000\000\030\051\007"},
+	{290, "test", 0, 2, states_34,
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{291, "and_test", 0, 2, states_35,
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{292, "not_test", 0, 3, states_36,
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{293, "comparison", 0, 2, states_37,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{294, "comp_op", 0, 4, states_38,
+	 "\000\000\000\000\000\000\000\002\000\100\376\001\000\000\000"},
+	{295, "expr", 0, 2, states_39,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{296, "xor_expr", 0, 2, states_40,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{297, "and_expr", 0, 2, states_41,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{298, "shift_expr", 0, 2, states_42,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{299, "arith_expr", 0, 2, states_43,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{300, "term", 0, 2, states_44,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{301, "factor", 0, 4, states_45,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{302, "atom", 0, 10, states_46,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\000\050\007"},
+	{303, "trailer", 0, 7, states_47,
+	 "\000\000\010\000\000\000\000\000\000\000\000\000\000\010\020"},
+	{304, "subscript", 0, 4, states_48,
+	 "\000\040\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{305, "exprlist", 0, 3, states_49,
+	 "\000\000\011\000\000\000\000\000\000\000\000\000\030\051\007"},
+	{306, "testlist", 0, 3, states_50,
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{307, "dictmaker", 0, 5, states_51,
+	 "\000\000\011\000\000\000\000\000\000\100\000\000\030\051\007"},
+	{308, "classdef", 0, 8, states_52,
+	 "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040"},
 };
-static label labels[117] = {
+static label labels[118] = {
 	{0, "EMPTY"},
 	{256, 0},
 	{4, 0},
-	{266, 0},
-	{282, 0},
+	{267, 0},
+	{283, 0},
 	{257, 0},
-	{265, 0},
+	{266, 0},
 	{0, 0},
 	{258, 0},
-	{305, 0},
+	{306, 0},
 	{259, 0},
 	{260, 0},
+	{263, 0},
+	{11, 0},
+	{261, 0},
 	{1, "def"},
 	{1, 0},
-	{261, 0},
-	{11, 0},
-	{288, 0},
-	{7, 0},
 	{262, 0},
+	{289, 0},
+	{7, 0},
 	{8, 0},
-	{263, 0},
+	{264, 0},
 	{12, 0},
 	{16, 0},
-	{264, 0},
-	{267, 0},
-	{13, 0},
+	{265, 0},
 	{268, 0},
+	{13, 0},
 	{269, 0},
 	{270, 0},
 	{271, 0},
 	{272, 0},
-	{277, 0},
+	{273, 0},
 	{278, 0},
 	{279, 0},
-	{281, 0},
+	{280, 0},
+	{282, 0},
 	{22, 0},
 	{1, "print"},
-	{289, 0},
+	{290, 0},
 	{1, "del"},
-	{304, 0},
+	{305, 0},
 	{1, "pass"},
-	{273, 0},
 	{274, 0},
 	{275, 0},
 	{276, 0},
+	{277, 0},
 	{1, "break"},
 	{1, "continue"},
 	{1, "return"},
@@ -1212,33 +1238,33 @@
 	{1, "from"},
 	{1, "global"},
 	{1, "access"},
-	{280, 0},
+	{281, 0},
 	{1, "exec"},
+	{295, 0},
 	{1, "in"},
-	{283, 0},
 	{284, 0},
 	{285, 0},
 	{286, 0},
-	{307, 0},
+	{287, 0},
+	{308, 0},
 	{1, "if"},
 	{1, "elif"},
 	{1, "else"},
 	{1, "while"},
 	{1, "for"},
 	{1, "try"},
-	{287, 0},
+	{288, 0},
 	{1, "finally"},
 	{1, "except"},
 	{5, 0},
 	{6, 0},
-	{290, 0},
-	{1, "or"},
 	{291, 0},
+	{1, "or"},
+	{292, 0},
 	{1, "and"},
 	{1, "not"},
-	{292, 0},
-	{294, 0},
 	{293, 0},
+	{294, 0},
 	{20, 0},
 	{21, 0},
 	{28, 0},
@@ -1247,39 +1273,39 @@
 	{29, 0},
 	{29, 0},
 	{1, "is"},
-	{295, 0},
-	{18, 0},
 	{296, 0},
-	{33, 0},
+	{18, 0},
 	{297, 0},
-	{19, 0},
+	{33, 0},
 	{298, 0},
+	{19, 0},
+	{299, 0},
 	{34, 0},
 	{35, 0},
-	{299, 0},
+	{300, 0},
 	{14, 0},
 	{15, 0},
-	{300, 0},
+	{301, 0},
 	{17, 0},
 	{24, 0},
 	{32, 0},
-	{301, 0},
 	{302, 0},
+	{303, 0},
 	{9, 0},
 	{10, 0},
 	{26, 0},
-	{306, 0},
+	{307, 0},
 	{27, 0},
 	{25, 0},
 	{2, 0},
 	{3, 0},
-	{303, 0},
+	{304, 0},
 	{23, 0},
 	{1, "class"},
 };
 grammar gram = {
-	52,
+	53,
 	dfas,
-	{117, labels},
+	{118, labels},
 	256
 };