From e3571e14833d73f55a639d7f643f31d89fe9f873 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 6 Feb 2006 17:28:01 +0000 Subject: [PATCH] 301.5 svn: r2142 --- src/mzscheme/include/scheme.h | 8 +- src/mzscheme/src/bool.c | 18 +- src/mzscheme/src/char.c | 10 +- src/mzscheme/src/cstartup.inc | 3577 +++++++++++++++-------------- src/mzscheme/src/eval.c | 6 +- src/mzscheme/src/fun.c | 339 ++- src/mzscheme/src/jit.c | 1320 ++++++++--- src/mzscheme/src/list.c | 42 +- src/mzscheme/src/mzmark.c | 2 + src/mzscheme/src/mzmarksrc.c | 1 + src/mzscheme/src/numarith.c | 30 +- src/mzscheme/src/numcomp.c | 74 +- src/mzscheme/src/print.c | 3 +- src/mzscheme/src/schemef.h | 2 +- src/mzscheme/src/schemex.h | 2 +- src/mzscheme/src/schpriv.h | 23 +- src/mzscheme/src/schvers.h | 4 +- src/mzscheme/src/setjmpup.c | 102 +- src/mzscheme/src/stxobj.c | 26 +- src/mzscheme/src/symbol.c | 11 +- src/mzscheme/src/vector.c | 17 +- src/wxcommon/PSDC.cxx | 30 + src/wxcommon/PSDC.h | 6 + src/wxcommon/Region.cxx | 40 +- src/wxmac/include/base/wb_dc.h | 6 + src/wxmac/include/mac/wx_dc.h | 23 +- src/wxmac/include/mac/wx_dccan.h | 6 + src/wxmac/src/mac/wx_dccan1.cc | 31 +- src/wxwindow/include/base/wb_dc.h | 6 + src/wxwindow/include/msw/wx_dc.h | 26 +- src/wxwindow/src/msw/wx_dc.cxx | 43 +- src/wxxt/src/DeviceContexts/DC.h | 12 + 32 files changed, 3467 insertions(+), 2379 deletions(-) diff --git a/src/mzscheme/include/scheme.h b/src/mzscheme/include/scheme.h index 58fe5d277a..2ea1e9b2fa 100644 --- a/src/mzscheme/include/scheme.h +++ b/src/mzscheme/include/scheme.h @@ -576,11 +576,14 @@ typedef void (*Scheme_Type_Printer)(Scheme_Object *v, int for_display, Scheme_Pr #define SCHEME_PRIM_IS_STRUCT_PRED 64 #define SCHEME_PRIM_IS_STRUCT_CONSTR 128 #define SCHEME_PRIM_IS_MULTI_RESULT 256 -#define SCHEME_PRIM_IS_GENERIC 512 +#define SCHEME_PRIM_IS_BINARY_INLINED 512 #define SCHEME_PRIM_IS_USER_PARAMETER 1024 #define SCHEME_PRIM_IS_METHOD 2048 #define SCHEME_PRIM_IS_POST_DATA 4096 #define SCHEME_PRIM_IS_NONCM 8192 +#define SCHEME_PRIM_IS_UNARY_INLINED 16384 + +#define SCHEME_PRIM_PROC_FLAGS(x) (((Scheme_Prim_Proc_Header *)x)->flags) typedef struct Scheme_Object * (Scheme_Prim)(int argc, struct Scheme_Object *argv[]); @@ -721,7 +724,6 @@ typedef struct { #define SCHEME_CONT_MARK_SETP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_cont_mark_set_type) #define SCHEME_PROC_STRUCTP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_proc_struct_type) #define SCHEME_STRUCT_PROCP(obj) (SCHEME_CLSD_PRIMP(obj) && (((Scheme_Closed_Primitive_Proc *)(obj))->pp.flags & SCHEME_PRIM_IS_STRUCT_PROC)) -#define SCHEME_GENERICP(obj) (SCHEME_CLSD_PRIMP(obj) && (((Scheme_Closed_Primitive_Proc *)(obj))->pp.flags & SCHEME_PRIM_IS_GENERIC)) #define SCHEME_CLOSUREP(obj) (SAME_TYPE(SCHEME_TYPE(obj), scheme_closure_type) || SAME_TYPE(SCHEME_TYPE(obj), scheme_case_closure_type)) #define SCHEME_PRIM(obj) (((Scheme_Primitive_Proc *)(obj))->prim_val) @@ -809,7 +811,7 @@ typedef struct { typedef struct Scheme_Jumpup_Buf { void *stack_from, *stack_copy; long stack_size, stack_max_size; - struct Scheme_Jumpup_Buf *cont; + struct Scheme_Cont *cont; /* for sharing continuation tails */ mz_jmp_buf buf; #ifdef MZ_PRECISE_GC void *gc_var_stack; diff --git a/src/mzscheme/src/bool.c b/src/mzscheme/src/bool.c index a7dd5a5560..2d53ac68fd 100644 --- a/src/mzscheme/src/bool.c +++ b/src/mzscheme/src/bool.c @@ -35,8 +35,8 @@ /* global_constants */ Scheme_Object scheme_true[1]; Scheme_Object scheme_false[1]; + Scheme_Object *scheme_not_prim; -Scheme_Object *scheme_eq_prim; /* locals */ static Scheme_Object *not_prim (int argc, Scheme_Object *argv[]); @@ -57,20 +57,26 @@ void scheme_init_true_false(void) void scheme_init_bool (Scheme_Env *env) { + Scheme_Object *p; + REGISTER_SO(scheme_not_prim); - REGISTER_SO(scheme_eq_prim); - scheme_not_prim = scheme_make_folding_prim(not_prim, "not", 1, 1, 1); + p = scheme_make_folding_prim(not_prim, "not", 1, 1, 1); + scheme_not_prim = p; + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + + scheme_add_global_constant("not", p, env); - scheme_add_global_constant("not", scheme_not_prim, env); scheme_add_global_constant("boolean?", scheme_make_folding_prim(boolean_p_prim, "boolean?", 1, 1, 1), env); - scheme_eq_prim = scheme_make_folding_prim(eq_prim, "eq?", 2, 2, 1); - scheme_add_global_constant("eq?", scheme_eq_prim, env); + p = scheme_make_folding_prim(eq_prim, "eq?", 2, 2, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant("eq?", p, env); + scheme_add_global_constant("eqv?", scheme_make_folding_prim(eqv_prim, "eqv?", diff --git a/src/mzscheme/src/char.c b/src/mzscheme/src/char.c index 47e095e724..259c9ad97a 100644 --- a/src/mzscheme/src/char.c +++ b/src/mzscheme/src/char.c @@ -68,6 +68,7 @@ void scheme_init_portable_case(void) void scheme_init_char (Scheme_Env *env) { + Scheme_Object *p; int i; REGISTER_SO(scheme_char_constants); @@ -84,11 +85,10 @@ void scheme_init_char (Scheme_Env *env) scheme_char_constants[i] = sc; } - scheme_add_global_constant("char?", - scheme_make_folding_prim(char_p, - "char?", - 1, 1, 1), - env); + p = scheme_make_folding_prim(char_p, "char?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("char?", p, env); + scheme_add_global_constant("char=?", scheme_make_folding_prim(char_eq, "char=?", diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index eb3bd5f90a..1901662bfb 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,37,252,205,4,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,37,252,205,4,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,65,35,37,115,116,120, 1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158,16,16,30,3,2, 2,71,105,100,101,110,116,105,102,105,101,114,63,4,254,1,30,5,2,2,69, @@ -62,12 +62,12 @@ EVAL_ONE_SIZED_STR((char *)expr, 1241); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,90,252,125,10,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,90,252,125,10,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,71,35,37,113,113,45, 97,110,100,45,111,114,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97, 158,16,1,30,3,2,2,69,113,113,45,97,112,112,101,110,100,4,254,1,16, -0,11,11,16,1,2,4,33,11,16,3,62,111,114,5,70,113,117,97,115,105, -113,117,111,116,101,6,63,97,110,100,7,16,3,11,11,11,16,3,2,5,2, +0,11,11,16,1,2,4,33,11,16,3,63,97,110,100,5,70,113,117,97,115, +105,113,117,111,116,101,6,62,111,114,7,16,3,11,11,11,16,3,2,5,2, 6,2,7,32,35,95,16,5,93,2,6,27,83,160,41,32,33,38,27,83,160, 41,33,34,38,27,83,160,41,34,35,38,89,162,32,33,48,9,226,3,0,1, 2,87,94,28,248,80,158,36,32,197,250,22,252,32,2,11,6,10,10,98,97, @@ -158,7 +158,7 @@ 108,50,70,3,1,7,101,110,118,50,51,51,48,71,9,18,16,2,105,63,98, 111,120,72,8,28,35,34,33,40,39,48,47,46,45,16,4,59,11,61,118,73, 3,1,7,101,110,118,50,51,51,49,74,16,4,58,11,62,113,118,75,3,1, -7,101,110,118,50,51,51,50,76,9,11,16,5,93,2,7,27,83,160,41,32, +7,101,110,118,50,51,51,50,76,9,11,16,5,93,2,5,27,83,160,41,32, 33,37,89,162,32,33,46,9,224,1,0,87,94,28,248,80,158,34,32,195,12, 250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,27, 248,80,158,35,33,196,28,248,80,158,35,34,193,83,160,41,33,34,37,28,28, @@ -170,8 +170,8 @@ 16,4,8,32,11,2,27,3,1,7,101,110,118,50,51,51,52,77,16,4,8, 31,11,2,43,3,1,7,101,110,118,50,51,51,53,78,16,4,8,30,11,61, 101,79,3,1,7,101,110,118,50,51,51,54,80,9,18,16,2,158,62,105,102, -81,8,33,9,18,16,2,158,2,7,8,33,9,18,16,2,158,11,8,33,9, -11,16,5,93,2,5,27,83,160,41,32,33,38,89,162,32,33,50,9,224,1, +81,8,33,9,18,16,2,158,2,5,8,33,9,18,16,2,158,11,8,33,9, +11,16,5,93,2,7,27,83,160,41,32,33,38,89,162,32,33,50,9,224,1, 0,87,94,28,248,80,158,34,32,195,250,22,252,32,2,11,6,10,10,98,97, 100,32,115,121,110,116,97,120,197,12,27,248,80,158,35,33,196,28,248,80,158, 35,34,193,83,160,41,33,34,38,28,28,248,80,158,35,35,193,248,80,158,35, @@ -187,14 +187,14 @@ 101,110,118,50,51,52,48,85,9,18,16,2,101,63,108,101,116,86,8,39,35, 34,33,8,36,8,35,8,34,16,4,8,38,11,63,116,109,112,87,3,1,7, 101,110,118,50,51,52,49,88,9,18,16,2,158,2,81,8,39,9,18,16,2, -158,2,5,8,39,9,11,93,83,159,32,93,80,158,32,32,89,162,32,34,37, +158,2,7,8,39,9,11,93,83,159,32,93,80,158,32,32,89,162,32,34,37, 2,4,222,28,248,22,57,193,249,22,64,194,195,250,22,252,33,2,2,13,6, 11,11,112,114,111,112,101,114,32,108,105,115,116,195,93,68,35,37,107,101,114, 110,101,108,89,94,2,15,2,89,0}; EVAL_ONE_SIZED_STR((char *)expr, 2697); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,58,252,142,5,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,58,252,142,5,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,66,35,37,99,111,110, 100,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158,16,0,16,0, 11,11,16,0,32,11,16,1,64,99,111,110,100,3,16,1,11,16,1,2,3, @@ -238,10 +238,10 @@ 120,45,114,111,116,97,116,101,42,20,2,7,69,115,116,120,45,108,105,115,116, 63,21,2,7,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116,22,2, 7,69,97,112,112,101,110,100,47,35,102,23,2,7,69,115,116,120,45,62,108, -105,115,116,24,2,7,62,111,114,25,71,35,37,113,113,45,97,110,100,45,111, -114,26,2,16,2,7,2,8,2,7,63,97,110,100,27,2,26,2,10,2,7, -71,115,116,120,45,118,101,99,116,111,114,63,28,2,7,2,12,2,7,67,99, -111,110,115,47,35,102,29,2,7,70,113,117,97,115,105,113,117,111,116,101,30, +105,115,116,24,2,7,63,97,110,100,25,71,35,37,113,113,45,97,110,100,45, +111,114,26,2,16,2,7,2,8,2,7,2,10,2,7,71,115,116,120,45,118, +101,99,116,111,114,63,27,2,7,2,12,2,7,67,99,111,110,115,47,35,102, +28,2,7,62,111,114,29,2,26,70,113,117,97,115,105,113,117,111,116,101,30, 2,26,71,115,116,120,45,110,117,108,108,47,35,102,31,2,7,74,115,116,120, 45,118,101,99,116,111,114,45,114,101,102,32,2,7,96,33,8,254,1,11,16, 0,9,18,16,2,158,93,102,64,118,111,105,100,33,43,35,34,33,16,4,42, @@ -266,7 +266,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1434); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,24,252,148,2,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,24,252,148,2,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,73,35,37,115,116,114, 117,99,116,45,105,110,102,111,1,29,2,11,11,10,10,10,32,80,158,32,32, 20,97,158,16,9,30,3,2,2,74,105,100,101,110,116,105,102,105,101,114,47, @@ -302,7 +302,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 672); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,27,252,153,3,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,27,252,153,3,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,71,35,37,100,115,45, 104,101,108,112,101,114,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97, 158,16,6,30,3,2,2,1,20,108,105,115,116,45,62,105,109,109,117,116,97, @@ -350,7 +350,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 933); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,121,252,230,12,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,121,252,230,12,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,74,35,37,100,101,102, 105,110,101,45,101,116,45,97,108,1,29,2,11,11,10,10,10,32,80,158,32, 32,20,97,158,16,0,16,0,11,11,16,0,32,11,16,6,66,117,110,108,101, @@ -375,24 +375,24 @@ 2,2,4,2,2,2,5,2,2,2,6,2,2,2,7,2,2,2,8,2,2, 97,34,10,33,11,16,54,1,24,115,116,114,117,99,116,45,105,110,102,111,45, 112,114,101,100,105,99,97,116,101,45,105,100,24,73,35,37,115,116,114,117,99, -116,45,105,110,102,111,25,63,97,110,100,26,2,19,71,115,116,120,45,118,101, -99,116,111,114,63,27,2,12,62,111,114,28,2,19,2,15,2,12,74,115,116, -120,45,118,101,99,116,111,114,45,114,101,102,29,2,12,2,13,2,12,79,115, -116,114,117,99,116,45,105,110,102,111,45,116,121,112,101,45,105,100,30,2,25, -70,115,116,120,45,114,111,116,97,116,101,31,2,12,73,115,116,120,45,99,104, -101,99,107,47,101,115,99,32,2,12,67,99,111,110,115,47,35,102,33,2,12, -71,115,116,120,45,114,111,116,97,116,101,42,34,2,12,74,115,112,108,105,116, -45,115,116,120,45,108,105,115,116,35,2,12,1,24,115,116,114,117,99,116,45, -105,110,102,111,45,97,99,99,101,115,115,111,114,45,105,100,115,36,2,25,64, -99,111,110,100,37,66,35,37,99,111,110,100,38,2,17,2,12,69,115,116,120, -45,112,97,105,114,63,39,2,12,69,115,116,120,45,110,117,108,108,63,40,2, -12,70,113,117,97,115,105,113,117,111,116,101,41,2,19,71,115,116,120,45,110, -117,108,108,47,35,102,42,2,12,1,23,115,116,114,117,99,116,45,105,110,102, -111,45,109,117,116,97,116,111,114,45,105,100,115,43,2,25,69,97,112,112,101, -110,100,47,35,102,44,2,12,69,115,116,120,45,108,105,115,116,63,45,2,12, -72,115,116,114,117,99,116,45,105,110,102,111,63,46,2,25,1,26,115,116,114, -117,99,116,45,105,110,102,111,45,99,111,110,115,116,114,117,99,116,111,114,45, -105,100,47,2,25,2,22,2,12,72,103,101,116,45,115,116,120,45,105,110,102, +116,45,105,110,102,111,25,71,115,116,120,45,118,101,99,116,111,114,63,26,2, +12,63,97,110,100,27,2,19,2,15,2,12,74,115,116,120,45,118,101,99,116, +111,114,45,114,101,102,28,2,12,2,13,2,12,79,115,116,114,117,99,116,45, +105,110,102,111,45,116,121,112,101,45,105,100,29,2,25,70,115,116,120,45,114, +111,116,97,116,101,30,2,12,62,111,114,31,2,19,67,99,111,110,115,47,35, +102,32,2,12,71,115,116,120,45,114,111,116,97,116,101,42,33,2,12,74,115, +112,108,105,116,45,115,116,120,45,108,105,115,116,34,2,12,1,24,115,116,114, +117,99,116,45,105,110,102,111,45,97,99,99,101,115,115,111,114,45,105,100,115, +35,2,25,64,99,111,110,100,36,66,35,37,99,111,110,100,37,2,17,2,12, +69,115,116,120,45,112,97,105,114,63,38,2,12,69,115,116,120,45,110,117,108, +108,63,39,2,12,70,113,117,97,115,105,113,117,111,116,101,40,2,19,71,115, +116,120,45,110,117,108,108,47,35,102,41,2,12,1,23,115,116,114,117,99,116, +45,105,110,102,111,45,109,117,116,97,116,111,114,45,105,100,115,42,2,25,69, +97,112,112,101,110,100,47,35,102,43,2,12,69,115,116,120,45,108,105,115,116, +63,44,2,12,72,115,116,114,117,99,116,45,105,110,102,111,63,45,2,25,1, +26,115,116,114,117,99,116,45,105,110,102,111,45,99,111,110,115,116,114,117,99, +116,111,114,45,105,100,46,2,25,73,115,116,120,45,99,104,101,99,107,47,101, +115,99,47,2,12,2,22,2,12,72,103,101,116,45,115,116,120,45,105,110,102, 111,48,71,35,37,100,115,45,104,101,108,112,101,114,49,96,33,8,254,1,11, 16,0,9,18,103,2,23,44,35,34,33,16,4,43,11,2,23,3,1,7,101, 110,118,50,51,56,51,50,16,4,42,11,64,98,97,115,101,51,3,1,7,101, @@ -493,7 +493,7 @@ 95,196,192,250,22,58,2,63,248,22,58,23,17,203,23,16,28,196,250,22,217, 195,75,100,105,115,97,112,112,101,97,114,101,100,45,117,115,101,100,248,22,252, 75,3,200,192,33,20,97,158,16,9,2,18,2,16,2,21,2,11,30,101,2, -12,2,45,8,30,102,2,12,2,39,11,2,14,30,103,2,12,2,40,10,30, +12,2,44,8,30,102,2,12,2,38,11,2,14,30,103,2,12,2,39,10,30, 104,2,49,2,48,0,16,2,18,16,2,158,93,101,77,99,117,114,114,101,110, 116,45,105,110,115,112,101,99,116,111,114,105,8,29,35,34,33,16,4,8,28, 11,2,78,3,1,7,101,110,118,50,52,48,49,106,16,4,59,11,63,115,116, @@ -507,27 +507,27 @@ 110,118,50,52,50,50,116,16,6,8,30,11,76,115,117,112,101,114,45,105,100, 47,115,116,114,117,99,116,58,117,68,115,116,120,45,105,110,102,111,118,3,1, 7,101,110,118,50,52,50,52,119,2,119,9,11,9,93,68,35,37,107,101,114, -110,101,108,120,98,2,120,2,12,2,19,2,38,2,25,2,49,0}; +110,101,108,120,98,2,120,2,12,2,19,2,37,2,25,2,49,0}; EVAL_ONE_SIZED_STR((char *)expr, 3314); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,18,252,4,1,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,18,252,4,1,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,74,35,37,115,109,97, 108,108,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,32,80,158,32, 32,20,97,158,16,0,16,0,11,11,16,0,32,11,16,10,66,117,110,108,101, -115,115,3,66,108,101,116,47,101,99,4,73,100,101,102,105,110,101,45,115,116, -114,117,99,116,5,67,45,100,101,102,105,110,101,6,64,99,111,110,100,7,63, -97,110,100,8,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,9,62, +115,115,3,66,108,101,116,47,101,99,4,67,45,100,101,102,105,110,101,5,64, +99,111,110,100,6,73,100,101,102,105,110,101,45,115,116,114,117,99,116,7,74, +45,100,101,102,105,110,101,45,115,121,110,116,97,120,8,63,97,110,100,9,62, 111,114,10,70,113,117,97,115,105,113,117,111,116,101,11,64,119,104,101,110,12, 16,10,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,13,2,13,2, -13,2,13,66,35,37,99,111,110,100,14,71,35,37,113,113,45,97,110,100,45, -111,114,15,2,13,2,15,2,15,2,13,16,10,2,3,2,4,2,5,2,6, +13,66,35,37,99,111,110,100,14,2,13,2,13,71,35,37,113,113,45,97,110, +100,45,111,114,15,2,15,2,15,2,13,16,10,2,3,2,4,2,5,2,6, 2,7,2,8,2,9,2,10,2,11,2,12,32,42,9,9,97,68,35,37,107, 101,114,110,101,108,16,65,35,37,115,116,120,17,2,15,2,14,2,13,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 272); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,190,252,235,31,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,190,252,235,31,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,64,35,37,115,99,1, 29,2,11,11,10,10,10,48,80,158,32,32,20,97,158,16,37,30,3,2,2, 64,46,46,46,63,4,254,1,30,5,2,2,68,115,116,120,45,109,101,109,113, @@ -570,27 +570,27 @@ 97,114,76,254,1,30,77,2,2,1,26,115,101,116,45,115,121,110,116,97,120, 45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,33,78,254,1,16,2, 18,98,63,46,46,46,79,38,97,36,10,32,11,16,114,2,64,2,2,2,8, -2,2,2,27,2,2,2,4,2,2,74,115,121,110,116,97,120,45,109,97,112, -112,105,110,103,80,2,2,2,60,2,2,67,99,111,110,115,47,35,102,81,2, -18,2,16,2,2,2,12,2,2,74,45,100,101,102,105,110,101,45,115,121,110, -116,97,120,82,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,83,2, -62,2,2,73,100,101,102,105,110,101,45,115,116,114,117,99,116,84,2,83,2, -29,2,2,2,68,2,2,2,78,2,2,2,37,2,18,2,19,2,18,67,45, -100,101,102,105,110,101,85,2,83,2,44,2,2,2,25,2,2,71,115,116,120, -45,110,117,108,108,47,35,102,86,2,18,64,99,111,110,100,87,66,35,37,99, -111,110,100,88,2,56,2,2,2,31,2,18,2,10,2,2,2,23,2,18,69, -115,116,120,45,108,105,115,116,63,89,2,18,2,70,2,2,2,76,2,2,69, -115,116,120,45,62,108,105,115,116,90,2,18,64,119,104,101,110,91,2,83,2, -14,2,2,66,117,110,108,101,115,115,92,2,83,66,108,101,116,47,101,99,93, -2,83,2,39,2,18,74,115,116,120,45,118,101,99,116,111,114,45,114,101,102, -94,2,18,2,74,2,2,69,97,112,112,101,110,100,47,35,102,95,2,18,2, -72,2,2,73,115,116,120,45,99,104,101,99,107,47,101,115,99,96,2,18,62, -111,114,97,2,41,70,115,116,120,45,114,111,116,97,116,101,98,2,18,74,115, -112,108,105,116,45,115,116,120,45,108,105,115,116,99,2,18,2,21,2,18,71, -115,116,120,45,114,111,116,97,116,101,42,100,2,18,70,113,117,97,115,105,113, -117,111,116,101,101,2,41,2,50,2,2,2,66,2,2,2,46,2,2,2,33, -2,2,63,97,110,100,102,2,41,2,48,2,2,2,58,2,2,2,35,2,2, -2,6,2,2,2,52,2,2,2,54,2,2,96,35,33,11,16,0,96,34,8, +2,2,2,27,2,2,2,16,2,2,2,4,2,2,74,115,121,110,116,97,120, +45,109,97,112,112,105,110,103,80,2,2,2,12,2,2,2,56,2,2,74,45, +100,101,102,105,110,101,45,115,121,110,116,97,120,81,74,35,37,100,101,102,105, +110,101,45,101,116,45,97,108,82,2,62,2,2,73,100,101,102,105,110,101,45, +115,116,114,117,99,116,83,2,82,2,29,2,2,2,37,2,18,2,19,2,18, +67,45,100,101,102,105,110,101,84,2,82,67,99,111,110,115,47,35,102,85,2, +18,2,25,2,2,71,115,116,120,45,110,117,108,108,47,35,102,86,2,18,64, +99,111,110,100,87,66,35,37,99,111,110,100,88,2,70,2,2,2,31,2,18, +2,10,2,2,2,23,2,18,69,115,116,120,45,108,105,115,116,63,89,2,18, +62,111,114,90,2,41,2,76,2,2,69,115,116,120,45,62,108,105,115,116,91, +2,18,64,119,104,101,110,92,2,82,2,14,2,2,66,117,110,108,101,115,115, +93,2,82,66,108,101,116,47,101,99,94,2,82,2,39,2,18,74,115,116,120, +45,118,101,99,116,111,114,45,114,101,102,95,2,18,2,74,2,2,69,97,112, +112,101,110,100,47,35,102,96,2,18,2,72,2,2,73,115,116,120,45,99,104, +101,99,107,47,101,115,99,97,2,18,63,97,110,100,98,2,41,70,115,116,120, +45,114,111,116,97,116,101,99,2,18,74,115,112,108,105,116,45,115,116,120,45, +108,105,115,116,100,2,18,2,21,2,18,71,115,116,120,45,114,111,116,97,116, +101,42,101,2,18,70,113,117,97,115,105,113,117,111,116,101,102,2,41,2,44, +2,2,2,66,2,2,2,46,2,2,2,50,2,2,2,48,2,2,2,58,2, +2,2,35,2,2,2,78,2,2,2,6,2,2,2,33,2,2,2,60,2,2, +2,52,2,2,2,54,2,2,2,68,2,2,96,35,33,11,16,0,96,34,8, 254,1,11,16,0,16,4,33,11,61,115,103,3,1,7,101,110,118,50,52,50, 57,104,18,103,2,79,45,36,35,34,16,10,44,11,61,112,105,67,112,114,111, 116,111,45,114,106,61,107,107,64,100,101,115,116,108,3,1,7,101,110,118,50, @@ -650,15 +650,15 @@ 2,22,58,200,11,11,27,249,80,158,45,43,198,89,162,40,33,33,9,222,10, 250,22,7,250,22,58,2,126,21,93,2,127,251,22,60,62,105,102,130,21,94, 2,89,2,127,27,248,80,158,55,44,205,28,249,22,252,7,2,194,21,94,64, -108,105,115,116,131,2,127,28,23,26,21,94,2,90,2,127,21,94,2,131,94, -2,90,2,127,28,248,22,56,204,250,22,60,66,97,110,100,109,97,112,132,250, -22,58,2,126,21,93,2,127,198,21,93,94,2,90,2,127,250,22,58,2,93, +108,105,115,116,131,2,127,28,23,26,21,94,2,91,2,127,21,94,2,131,94, +2,91,2,127,28,248,22,56,204,250,22,60,66,97,110,100,109,97,112,132,250, +22,58,2,126,21,93,2,127,198,21,93,94,2,91,2,127,250,22,58,2,94, 63,101,115,99,133,250,22,58,63,108,101,116,134,248,22,58,249,22,58,61,108, 135,250,22,60,63,109,97,112,136,250,22,58,2,126,21,93,2,127,250,22,60, -2,96,23,18,21,93,2,133,21,93,94,2,90,2,127,251,22,58,2,130,21, +2,97,23,18,21,93,2,133,21,93,94,2,91,2,127,251,22,58,2,130,21, 94,65,110,117,108,108,63,137,2,135,249,22,58,65,113,117,111,116,101,138,27, 249,22,2,89,97,40,33,33,9,222,23,26,28,23,39,249,22,1,22,60,194, -192,249,22,60,28,23,38,2,100,2,98,21,93,2,135,21,93,11,197,11,27, +192,249,22,60,28,23,38,2,101,2,99,21,93,2,135,21,93,11,197,11,27, 249,22,58,248,80,158,41,41,202,248,80,158,41,41,248,80,158,42,40,203,27, 248,80,158,40,40,248,80,158,41,40,202,91,159,34,11,90,161,34,32,11,249, 91,159,33,11,20,12,95,33,192,89,162,32,34,43,2,124,226,12,9,8,0, @@ -675,7 +675,7 @@ 23,17,250,22,7,249,22,64,203,200,11,11,250,22,7,250,22,58,2,126,21, 93,2,127,250,22,58,71,108,101,116,42,45,118,97,108,117,101,115,139,248,22, 58,249,22,58,21,95,69,112,114,101,45,105,116,101,109,115,140,70,112,111,115, -116,45,105,116,101,109,115,141,63,111,107,63,142,251,22,58,2,99,2,127,23, +116,45,105,116,101,109,115,141,63,111,107,63,142,251,22,58,2,100,2,127,23, 25,23,26,251,22,60,2,130,2,142,27,27,249,80,158,8,35,46,23,23,2, 140,27,249,80,158,8,36,46,23,21,2,141,28,23,23,249,80,158,8,36,47, 195,194,251,22,60,2,130,197,196,21,93,11,28,23,19,28,23,37,250,22,58, @@ -719,7 +719,7 @@ 2,39,2,127,205,23,17,21,93,11,201,91,159,35,11,90,161,35,32,11,27, 249,22,252,222,1,248,22,209,201,248,22,170,205,252,205,197,197,204,248,22,252, 3,2,23,17,11,250,198,248,22,170,205,28,205,205,196,27,249,80,158,46,46, -198,250,22,58,2,94,2,127,248,22,170,23,19,28,248,22,56,23,16,192,28, +198,250,22,58,2,95,2,127,248,22,170,23,19,28,248,22,56,23,16,192,28, 197,249,80,158,46,47,194,23,17,251,22,60,2,130,196,23,19,21,93,11,195, 248,22,252,3,2,23,15,9,91,159,35,11,90,161,35,32,11,252,201,200,23, 15,23,17,23,18,11,28,200,250,22,7,195,11,11,250,22,7,250,22,58,2, @@ -728,7 +728,7 @@ 121,110,116,97,120,45,101,150,2,127,21,93,11,196,11,28,196,250,22,7,9, 11,11,250,22,7,250,22,58,2,126,21,93,2,127,250,22,60,2,130,27,250, 22,60,66,101,113,117,97,108,63,151,248,22,209,23,20,21,93,94,2,150,2, -127,28,23,20,250,22,58,2,102,21,94,2,144,2,127,195,192,21,94,2,146, +127,28,23,20,250,22,58,2,98,21,94,2,144,2,127,195,192,21,94,2,146, 11,11,11,83,159,32,93,80,158,32,51,89,162,32,37,44,2,44,223,0,253, 80,158,38,37,199,200,201,202,11,203,83,159,32,93,80,158,32,52,89,162,32, 36,43,2,46,223,0,253,80,158,38,37,199,200,201,202,10,11,83,159,32,93, @@ -743,9 +743,9 @@ 11,11,249,22,58,2,131,196,249,22,58,195,196,249,22,58,194,195,83,159,32, 93,80,158,32,47,89,162,32,34,44,2,35,222,28,28,248,22,49,193,28,249, 22,252,5,2,248,22,51,195,2,131,28,248,22,49,248,22,52,194,248,22,56, -248,22,79,194,11,11,11,250,22,58,2,81,248,22,77,196,196,250,22,58,2, +248,22,79,194,11,11,11,250,22,58,2,85,248,22,77,196,196,250,22,58,2, 134,248,22,58,249,22,58,61,118,152,198,251,22,60,2,130,2,152,250,22,58, -2,95,2,152,203,21,93,11,83,159,32,93,80,158,32,53,89,162,32,36,8, +2,96,2,152,203,21,93,11,83,159,32,93,80,158,32,53,89,162,32,36,8, 50,2,48,223,0,91,159,34,10,90,161,33,32,10,195,90,161,33,33,10,89, 162,32,38,8,43,2,110,226,2,5,1,0,28,28,199,248,80,158,36,38,197, 11,91,159,38,11,90,161,33,32,11,248,80,158,42,41,203,90,161,35,33,11, @@ -801,7 +801,7 @@ 158,45,58,206,248,80,158,46,57,201,248,80,158,46,57,200,206,12,28,249,80, 158,37,49,198,11,27,253,215,248,22,252,224,1,248,22,209,205,204,203,206,23, 15,23,16,28,198,250,22,58,2,126,21,93,2,154,249,22,58,72,108,105,115, -116,45,62,118,101,99,116,111,114,163,249,22,58,2,90,248,80,158,44,57,200, +116,45,62,118,101,99,116,111,114,163,249,22,58,2,91,248,80,158,44,57,200, 12,28,248,80,158,36,48,197,28,249,80,158,37,33,198,196,28,197,250,22,58, 2,126,21,93,2,154,249,22,58,2,145,201,12,28,197,27,249,80,158,38,33, 199,200,28,192,250,22,58,2,126,21,93,2,154,250,80,158,42,56,2,154,249, @@ -819,7 +819,7 @@ 94,2,154,63,115,114,99,164,27,251,22,60,2,148,249,22,58,2,145,28,23, 18,250,22,208,23,21,2,108,11,11,248,80,158,45,57,201,21,93,2,164,28, 248,80,158,41,8,28,203,250,22,58,2,134,21,93,94,64,101,120,110,104,165, -11,248,22,58,250,22,58,2,93,2,133,251,22,60,72,100,121,110,97,109,105, +11,248,22,58,250,22,58,2,94,2,133,251,22,60,72,100,121,110,97,109,105, 99,45,119,105,110,100,166,251,22,58,2,126,9,21,95,64,115,101,116,33,167, 2,165,93,1,25,99,117,114,114,101,110,116,45,101,120,99,101,112,116,105,111, 110,45,104,97,110,100,108,101,114,168,249,22,58,2,168,250,22,58,2,126,21, @@ -910,7 +910,7 @@ 2,248,80,158,34,32,195,10,194,83,159,32,99,80,158,32,8,30,80,158,32, 8,31,80,158,32,8,32,80,158,32,8,33,80,158,32,8,34,80,158,32,8, 35,80,158,32,8,36,27,247,22,252,104,2,87,94,28,28,192,248,22,252,3, -2,248,22,252,103,2,194,11,250,22,252,33,2,2,84,6,15,15,105,110,115, +2,248,22,252,103,2,194,11,250,22,252,33,2,2,83,6,15,15,105,110,115, 112,101,99,116,111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37, 32,11,254,22,252,83,2,2,80,11,34,32,11,9,204,254,22,7,199,200,201, 250,22,252,85,2,205,32,65,100,101,112,116,104,186,250,22,252,86,2,206,32, @@ -920,7 +920,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 8183); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,155,252,154,16,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,155,252,154,16,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,69,35,37,115,116,120, 99,97,115,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158,16, 1,30,3,2,2,1,20,101,108,108,105,112,115,105,115,45,99,111,117,110,116, @@ -997,34 +997,34 @@ 109,97,116,99,104,45,118,97,114,115,29,0,30,30,2,28,74,109,97,107,101, 45,109,97,116,99,104,38,101,110,118,31,1,30,32,2,28,72,115,116,120,45, 109,101,109,113,45,112,111,115,33,5,16,29,18,101,63,97,114,103,34,41,97, -39,10,32,11,16,58,2,6,2,2,63,97,110,100,35,71,35,37,113,113,45, -97,110,100,45,111,114,36,71,115,116,120,45,118,101,99,116,111,114,63,37,2, -15,62,111,114,38,2,36,2,22,2,15,74,115,116,120,45,118,101,99,116,111, -114,45,114,101,102,39,2,15,2,5,2,2,2,26,2,15,70,115,116,120,45, -114,111,116,97,116,101,40,2,15,73,115,116,120,45,99,104,101,99,107,47,101, -115,99,41,2,15,67,99,111,110,115,47,35,102,42,2,15,71,115,116,120,45, -114,111,116,97,116,101,42,43,2,15,69,97,112,112,101,110,100,47,35,102,44, -2,15,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116,45,2,15,67, -45,100,101,102,105,110,101,46,74,35,37,100,101,102,105,110,101,45,101,116,45, -97,108,47,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,48,2,47, -64,99,111,110,100,49,66,35,37,99,111,110,100,50,2,20,2,15,2,4,2, -2,2,24,2,15,69,115,116,120,45,110,117,108,108,63,51,2,15,70,113,117, -97,115,105,113,117,111,116,101,52,2,36,71,115,116,120,45,110,117,108,108,47, -35,102,53,2,15,66,117,110,108,101,115,115,54,2,47,64,119,104,101,110,55, -2,47,73,100,101,102,105,110,101,45,115,116,114,117,99,116,56,2,47,2,16, -2,15,66,108,101,116,47,101,99,57,2,47,2,18,2,15,97,38,10,33,11, -16,70,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105,110, -103,58,2,28,2,35,2,36,2,37,2,15,2,38,2,36,2,22,2,15,2, -39,2,15,2,26,2,15,2,40,2,15,2,41,2,15,2,42,2,15,72,110, -111,45,101,108,108,105,112,115,101,115,63,59,2,28,2,43,2,15,2,44,2, -15,2,45,2,15,2,33,2,28,2,46,2,47,2,48,2,47,2,49,2,50, -2,20,2,15,2,31,2,28,2,24,2,15,2,51,2,15,2,52,2,36,1, +39,10,32,11,16,58,2,6,2,2,71,115,116,120,45,118,101,99,116,111,114, +63,35,2,15,63,97,110,100,36,71,35,37,113,113,45,97,110,100,45,111,114, +37,2,22,2,15,74,115,116,120,45,118,101,99,116,111,114,45,114,101,102,38, +2,15,2,5,2,2,2,26,2,15,70,115,116,120,45,114,111,116,97,116,101, +39,2,15,62,111,114,40,2,37,67,99,111,110,115,47,35,102,41,2,15,71, +115,116,120,45,114,111,116,97,116,101,42,42,2,15,69,97,112,112,101,110,100, +47,35,102,43,2,15,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116, +44,2,15,67,45,100,101,102,105,110,101,45,74,35,37,100,101,102,105,110,101, +45,101,116,45,97,108,46,74,45,100,101,102,105,110,101,45,115,121,110,116,97, +120,47,2,46,64,99,111,110,100,48,66,35,37,99,111,110,100,49,2,20,2, +15,2,4,2,2,73,100,101,102,105,110,101,45,115,116,114,117,99,116,50,2, +46,69,115,116,120,45,110,117,108,108,63,51,2,15,70,113,117,97,115,105,113, +117,111,116,101,52,2,37,71,115,116,120,45,110,117,108,108,47,35,102,53,2, +15,64,119,104,101,110,54,2,46,66,117,110,108,101,115,115,55,2,46,2,16, +2,15,66,108,101,116,47,101,99,56,2,46,73,115,116,120,45,99,104,101,99, +107,47,101,115,99,57,2,15,2,18,2,15,2,24,2,15,97,38,10,33,11, +16,70,2,35,2,15,2,36,2,37,2,22,2,15,2,38,2,15,2,29,2, +28,2,26,2,15,2,39,2,15,2,40,2,37,2,41,2,15,2,31,2,28, +72,110,111,45,101,108,108,105,112,115,101,115,63,58,2,28,2,42,2,15,2, +43,2,15,2,44,2,15,2,33,2,28,2,45,2,46,2,47,2,46,2,48, +2,49,2,20,2,15,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97, +112,112,105,110,103,59,2,28,2,50,2,46,2,51,2,15,2,52,2,37,1, 20,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,100,101,112,116,104, 60,2,28,2,53,2,15,72,109,97,107,101,45,112,101,120,112,97,110,100,61, -2,28,2,54,2,47,2,55,2,47,75,115,121,110,116,97,120,45,109,97,112, -112,105,110,103,63,62,2,28,1,21,115,121,110,116,97,120,45,109,97,112,112, -105,110,103,45,118,97,108,118,97,114,63,2,28,2,56,2,47,2,16,2,15, -2,57,2,47,2,29,2,28,2,18,2,15,96,37,8,254,1,11,16,0,16, +2,28,2,54,2,46,75,115,121,110,116,97,120,45,109,97,112,112,105,110,103, +63,62,2,28,1,21,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45, +118,97,108,118,97,114,63,2,28,2,55,2,46,2,16,2,15,2,56,2,46, +2,57,2,15,2,18,2,15,2,24,2,15,96,37,8,254,1,11,16,0,16, 4,36,11,61,120,64,3,1,7,101,110,118,50,54,48,53,65,16,4,35,11, 61,108,66,3,1,7,101,110,118,50,54,48,55,67,16,14,34,11,63,119,104, 111,68,71,97,114,103,45,105,115,45,115,116,120,63,69,64,101,120,112,114,70, @@ -1069,7 +1069,7 @@ 58,57,16,4,8,28,11,68,97,99,99,101,115,115,111,114,122,3,1,7,101, 110,118,50,54,51,57,123,18,158,68,108,105,115,116,45,114,101,102,124,8,29, 18,158,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,43,118, -97,108,117,101,115,125,56,18,109,2,58,8,31,39,38,37,36,35,34,33,46, +97,108,117,101,115,125,56,18,109,2,59,8,31,39,38,37,36,35,34,33,46, 49,48,53,52,51,55,16,8,8,30,11,2,109,78,117,110,102,108,97,116,45, 112,97,116,116,101,114,110,45,118,97,114,126,2,110,3,1,7,101,110,118,50, 54,52,48,127,2,127,2,127,18,158,2,85,8,31,18,158,2,107,56,18,108, @@ -1101,7 +1101,7 @@ 50,83,160,41,35,49,42,198,249,22,58,83,160,41,36,48,42,250,22,208,11, 66,115,114,99,116,97,103,129,23,20,197,32,20,97,158,16,10,2,23,2,25, 30,130,2,15,2,51,10,2,21,30,131,2,28,2,61,2,30,132,2,28,2, -62,8,30,133,2,28,2,59,4,30,134,2,28,2,60,6,30,135,2,28,2, +62,8,30,133,2,28,2,58,4,30,134,2,28,2,60,6,30,135,2,28,2, 63,7,2,19,16,5,18,100,2,7,8,37,39,38,37,16,4,8,36,11,2, 64,3,1,7,101,110,118,50,54,52,52,136,16,4,8,35,11,68,104,101,114, 101,45,115,116,120,137,3,1,7,101,110,118,50,54,52,54,138,16,4,8,34, @@ -1126,7 +1126,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 4262); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,71,252,7,7,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,71,252,7,7,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,68,35,37,115,116,120, 108,111,99,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158,16,2, 30,3,2,2,68,108,111,99,45,105,110,115,112,4,254,1,30,5,2,2,68, @@ -1141,10 +1141,10 @@ 196,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45,34,195,27,248, 80,158,46,35,196,28,248,80,158,46,36,193,248,80,158,46,37,193,11,11,11, 11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248, -22,89,197,27,248,22,88,198,27,252,22,60,201,199,200,202,198,27,83,160,41, +22,89,197,27,248,22,88,198,27,252,22,60,198,201,199,200,202,27,83,160,41, 32,40,38,250,22,208,83,160,41,33,43,38,250,22,208,83,160,41,34,46,38, -254,22,61,83,160,41,35,53,38,248,22,89,23,15,83,160,41,36,53,38,248, -22,51,23,15,248,22,86,23,15,248,22,77,23,15,248,22,88,23,15,83,160, +254,22,61,83,160,41,35,53,38,248,22,88,23,15,83,160,41,36,53,38,248, +22,77,23,15,248,22,89,23,15,248,22,86,23,15,248,22,51,23,15,83,160, 41,37,46,38,195,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110, 116,97,120,197,32,20,97,158,16,6,30,10,65,35,37,115,116,120,11,69,115, 116,120,45,112,97,105,114,63,12,11,30,13,2,11,67,99,111,110,115,47,35, @@ -1174,10 +1174,10 @@ 158,39,34,195,27,248,80,158,40,35,196,28,248,80,158,40,32,193,249,80,158, 41,33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,36, 193,248,80,158,43,37,193,11,11,11,11,28,192,27,248,22,51,194,27,248,22, -77,195,27,248,22,86,196,27,248,22,87,197,27,251,22,60,199,198,200,197,27, +77,195,27,248,22,86,196,27,248,22,87,197,27,251,22,60,199,197,198,200,27, 83,160,41,32,39,38,250,22,208,83,160,41,33,42,38,250,22,208,83,160,41, -34,45,38,254,22,61,83,160,41,35,52,38,248,22,86,23,15,83,160,41,36, -52,38,248,22,51,23,15,248,22,77,23,15,83,160,41,37,52,38,248,22,87, +34,45,38,254,22,61,83,160,41,35,52,38,248,22,87,23,15,83,160,41,36, +52,38,248,22,51,23,15,248,22,86,23,15,83,160,41,37,52,38,248,22,77, 23,15,83,160,41,38,45,38,195,250,22,252,32,2,11,6,10,10,98,97,100, 32,115,121,110,116,97,120,197,32,20,97,158,16,6,2,10,2,13,2,15,2, 17,2,19,2,21,16,7,18,16,2,95,2,23,42,93,8,252,78,7,95,9, @@ -1194,10 +1194,10 @@ 158,39,34,195,27,248,80,158,40,35,196,28,248,80,158,40,32,193,27,248,80, 158,41,34,194,28,192,249,80,158,42,36,194,248,80,158,43,37,248,80,158,44, 35,197,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22, -79,196,27,249,22,60,195,196,27,83,160,41,32,38,38,250,22,208,83,160,41, +79,196,27,249,22,60,196,195,27,83,160,41,32,38,38,250,22,208,83,160,41, 33,41,38,250,22,208,83,160,41,34,44,38,250,22,59,83,160,41,35,47,38, -248,22,52,203,250,22,208,83,160,41,36,50,38,249,22,59,83,160,41,37,52, -38,248,22,51,23,16,83,160,41,38,50,38,83,160,41,39,44,38,195,250,22, +248,22,51,203,250,22,208,83,160,41,36,50,38,249,22,59,83,160,41,37,52, +38,248,22,52,23,16,83,160,41,38,50,38,83,160,41,39,44,38,195,250,22, 252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,97, 158,16,6,2,10,2,13,2,15,2,17,30,58,2,11,69,97,112,112,101,110, 100,47,35,102,59,0,30,60,2,11,71,115,116,120,45,110,117,108,108,47,35, @@ -1216,7 +1216,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1811); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,115,252,60,10,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,115,252,74,10,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,70,35,37,119,105,116, 104,45,115,116,120,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158, 16,7,30,3,2,2,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97, @@ -1235,117 +1235,118 @@ 249,80,158,40,33,248,80,158,41,34,195,27,248,80,158,42,35,196,28,248,80, 158,42,37,193,248,80,158,42,38,193,11,11,11,11,11,28,192,27,248,22,51, 194,27,248,22,77,195,27,248,22,79,196,249,80,158,39,39,200,27,249,22,60, -198,197,27,83,160,41,33,41,44,250,22,208,83,160,41,34,44,44,250,22,208, -83,160,41,35,47,44,249,22,55,83,160,41,36,49,44,201,83,160,41,37,47, -44,195,27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197, -27,248,80,158,39,35,198,28,248,80,158,39,32,193,27,27,248,80,158,41,34, -195,28,248,80,158,41,37,193,248,22,8,89,162,32,33,39,9,224,9,1,27, -249,22,2,89,162,32,33,44,9,224,4,5,249,80,158,35,40,28,248,80,158, -36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200, -28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158, -41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,56, -193,21,94,9,9,248,80,158,35,41,193,11,28,192,249,80,158,41,42,194,27, -248,80,158,43,35,197,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158, -45,34,195,27,248,80,158,46,35,196,28,248,80,158,46,37,193,248,80,158,46, -38,193,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248, -22,86,196,27,248,22,89,197,27,248,22,88,198,27,248,22,215,27,83,160,41, -38,43,44,250,22,208,83,160,41,39,46,44,200,195,87,94,251,80,158,45,43, -201,206,27,83,160,41,40,46,44,250,22,208,83,160,41,41,49,44,204,195,9, -27,249,22,2,89,162,32,33,34,9,222,248,22,47,65,119,115,116,109,112,19, -195,27,249,22,2,89,162,32,33,36,9,222,250,22,208,195,64,104,101,114,101, -20,195,196,27,248,22,215,27,83,160,41,42,46,44,250,22,208,83,160,41,43, -49,44,204,195,250,22,208,83,160,41,44,47,44,250,22,58,63,108,101,116,21, -251,22,2,89,162,32,35,42,9,222,249,22,58,194,250,22,58,1,20,100,97, -116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,22,249,22, -58,72,113,117,111,116,101,45,115,121,110,116,97,120,23,200,199,204,203,205,249, -91,159,33,11,20,12,95,33,192,89,162,32,34,57,64,108,111,111,112,24,226, -21,13,14,0,28,248,22,56,197,27,249,22,60,196,197,27,83,160,41,45,37, -44,250,22,208,83,160,41,46,40,44,250,22,208,83,160,41,47,43,44,249,22, -55,83,160,41,48,45,44,201,83,160,41,49,43,44,195,26,8,22,58,73,115, -121,110,116,97,120,45,99,97,115,101,42,42,25,11,10,248,22,51,205,9,79, -109,111,100,117,108,101,45,105,100,101,110,116,105,102,105,101,114,61,63,26,249, -22,58,248,22,51,23,16,249,204,248,22,52,23,17,248,22,52,23,18,249,22, -58,65,95,101,108,115,101,27,249,22,58,2,4,249,22,58,2,23,250,22,208, -11,248,22,207,248,22,51,23,24,248,22,51,23,23,202,200,23,16,250,22,252, -32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,97,158, -16,12,30,28,2,12,69,115,116,120,45,112,97,105,114,63,29,11,30,30,2, -12,67,99,111,110,115,47,35,102,31,1,30,32,2,12,67,115,116,120,45,99, -97,114,33,5,30,34,2,12,67,115,116,120,45,99,100,114,35,6,30,36,2, -12,71,115,116,120,45,110,117,108,108,47,35,102,37,9,30,38,2,12,2,13, -8,30,39,2,12,2,15,4,30,40,68,35,37,115,116,120,108,111,99,41,68, -114,101,108,111,99,97,116,101,42,1,30,43,2,12,73,115,116,120,45,99,104, -101,99,107,47,101,115,99,44,7,30,45,2,12,70,115,116,120,45,114,111,116, -97,116,101,46,12,30,47,2,12,69,97,112,112,101,110,100,47,35,102,48,0, -30,49,64,35,37,115,99,50,74,103,101,116,45,109,97,116,99,104,45,118,97, -114,115,51,0,16,18,18,98,2,20,38,97,36,10,32,11,16,72,2,8,2, -2,2,18,2,2,66,115,121,110,116,97,120,52,69,35,37,115,116,120,99,97, -115,101,53,63,97,110,100,54,71,35,37,113,113,45,97,110,100,45,111,114,55, -71,115,116,120,45,118,101,99,116,111,114,63,56,2,12,62,111,114,57,2,55, -2,33,2,12,74,115,116,120,45,118,101,99,116,111,114,45,114,101,102,58,2, -12,2,25,2,53,2,35,2,12,2,46,2,12,2,44,2,12,2,31,2,12, -71,115,116,120,45,114,111,116,97,116,101,42,59,2,12,2,48,2,12,74,115, -112,108,105,116,45,115,116,120,45,108,105,115,116,60,2,12,71,115,121,110,116, -97,120,45,99,97,115,101,61,2,41,74,45,100,101,102,105,110,101,45,115,121, -110,116,97,120,62,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,63, -64,99,111,110,100,64,66,35,37,99,111,110,100,65,2,17,2,12,70,115,121, -110,116,97,120,47,108,111,99,66,2,41,2,29,2,12,2,6,2,2,69,115, -116,120,45,110,117,108,108,63,67,2,12,70,113,117,97,115,105,113,117,111,116, -101,68,2,55,2,37,2,12,66,117,110,108,101,115,115,69,2,63,64,119,104, -101,110,70,2,63,66,108,101,116,47,101,99,71,2,63,73,100,101,102,105,110, -101,45,115,116,114,117,99,116,72,2,63,2,13,2,12,67,45,100,101,102,105, -110,101,73,2,63,72,115,121,110,116,97,120,45,99,97,115,101,42,74,2,41, -2,10,2,2,2,15,2,12,2,4,2,2,97,35,10,33,11,16,36,72,115, -116,120,45,109,101,109,113,45,112,111,115,75,2,50,72,110,111,45,101,108,108, -105,112,115,101,115,63,76,2,50,2,51,2,50,2,74,2,41,2,61,2,41, -1,20,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,100,101,112,116, -104,77,2,50,2,52,2,53,2,64,2,65,2,54,2,55,75,115,121,110,116, -97,120,45,109,97,112,112,105,110,103,63,78,2,50,74,109,97,107,101,45,109, -97,116,99,104,38,101,110,118,79,2,50,1,21,115,121,110,116,97,120,45,109, -97,112,112,105,110,103,45,118,97,108,118,97,114,80,2,50,79,109,97,107,101, -45,115,121,110,116,97,120,45,109,97,112,112,105,110,103,81,2,50,2,57,2, -55,2,66,2,41,2,25,2,53,2,68,2,55,72,109,97,107,101,45,112,101, -120,112,97,110,100,82,2,50,96,34,8,254,1,11,16,0,16,4,33,11,61, -120,83,3,1,7,101,110,118,50,55,50,56,84,18,16,2,95,66,115,114,99, -116,97,103,85,39,93,8,252,121,7,95,9,8,252,121,7,2,53,18,100,64, -100,101,115,116,86,42,36,35,34,33,16,8,41,11,3,1,4,103,50,57,55, -87,3,1,4,103,50,57,56,88,3,1,4,103,50,57,57,89,3,1,7,101, -110,118,50,55,51,53,90,2,90,2,90,16,8,40,11,61,95,91,62,101,49, -92,62,101,50,93,3,1,7,101,110,118,50,55,51,54,94,2,94,2,94,18, -158,63,99,116,120,95,42,18,158,2,0,42,18,158,2,95,42,18,16,2,95, -2,85,43,93,8,252,123,7,95,9,8,252,123,7,2,53,18,100,2,86,46, -36,35,34,33,16,12,45,11,3,1,4,103,50,57,50,96,3,1,4,103,50, -57,51,97,3,1,4,103,50,57,52,98,3,1,4,103,50,57,53,99,3,1, -4,103,50,57,54,100,3,1,7,101,110,118,50,55,53,51,101,2,101,2,101, -2,101,2,101,16,12,44,11,2,91,63,111,117,116,102,62,105,110,103,2,92, -2,93,3,1,7,101,110,118,50,55,53,52,104,2,104,2,104,2,104,2,104, -18,16,2,95,2,85,47,93,8,252,139,7,95,9,8,252,139,7,2,53,18, -101,2,86,49,36,35,34,33,45,44,16,4,48,11,63,105,110,115,105,3,1, -7,101,110,118,50,55,54,48,106,18,16,2,95,2,85,50,93,8,252,140,7, -95,9,8,252,140,7,2,53,18,158,2,86,49,18,102,2,20,52,36,35,34, -33,45,44,48,16,8,51,11,64,116,109,112,115,107,65,104,101,114,101,115,108, -64,111,117,116,115,109,3,1,7,101,110,118,50,55,54,51,110,2,110,2,110, -18,16,2,95,2,85,53,93,8,252,145,7,95,9,8,252,145,7,2,53,18, -103,2,86,55,36,35,34,33,45,44,48,51,16,4,54,11,2,24,3,1,7, -101,110,118,50,55,54,56,111,18,158,2,95,55,18,158,2,0,55,18,158,2, -95,55,11,96,83,159,32,93,80,158,32,32,89,162,32,33,36,2,4,222,250, -22,252,32,2,2,18,6,20,20,98,105,110,100,105,110,103,32,109,97,116,99, -104,32,102,97,105,108,101,100,195,83,159,32,93,80,158,32,33,32,83,159,32, -93,80,158,32,34,89,162,32,33,38,2,8,223,0,87,94,83,160,34,11,80, -158,32,33,248,22,169,80,158,33,33,248,22,41,250,22,252,179,1,6,4,4, -126,97,126,115,197,80,158,36,33,83,159,32,93,80,158,32,35,89,162,32,33, -37,2,10,223,0,87,94,28,248,80,158,33,36,194,12,250,22,252,33,2,2, -10,6,11,11,115,121,110,116,97,120,32,112,97,105,114,196,27,248,80,158,34, -37,195,249,22,2,89,162,32,33,39,9,223,3,248,247,22,252,76,3,28,248, -22,40,195,249,22,208,11,248,80,158,36,34,197,28,248,22,252,135,1,195,249, -22,208,11,248,80,158,36,34,197,28,248,80,158,34,38,195,249,22,208,11,248, -80,158,36,34,248,22,209,198,249,22,208,11,248,80,158,36,34,64,116,101,109, -112,112,194,97,68,35,37,107,101,114,110,101,108,113,2,12,2,41,74,35,37, -115,109,97,108,108,45,115,99,104,101,109,101,114,2,53,98,2,113,2,53,2, -41,2,50,2,55,2,65,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2632); +197,198,27,83,160,41,33,41,44,250,22,208,83,160,41,34,44,44,250,22,208, +83,160,41,35,47,44,250,22,61,83,160,41,36,50,44,248,22,52,203,248,22, +51,203,83,160,41,37,47,44,195,27,28,248,80,158,36,32,195,249,80,158,37, +33,248,80,158,38,34,197,27,248,80,158,39,35,198,28,248,80,158,39,32,193, +27,27,248,80,158,41,34,195,28,248,80,158,41,37,193,248,22,8,89,162,32, +33,39,9,224,9,1,27,249,22,2,89,162,32,33,44,9,224,4,5,249,80, +158,35,40,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199, +27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80, +158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158, +37,38,196,28,248,22,56,193,21,94,9,9,248,80,158,35,41,193,11,28,192, +249,80,158,41,42,194,27,248,80,158,43,35,197,28,248,80,158,43,32,193,249, +80,158,44,33,248,80,158,45,34,195,27,248,80,158,46,35,196,28,248,80,158, +46,37,193,248,80,158,46,38,193,11,11,11,11,11,28,192,27,248,22,51,194, +27,248,22,77,195,27,248,22,86,196,27,248,22,89,197,27,248,22,88,198,27, +248,22,215,27,83,160,41,38,43,44,250,22,208,83,160,41,39,46,44,200,195, +87,94,251,80,158,45,43,201,206,27,83,160,41,40,46,44,250,22,208,83,160, +41,41,49,44,204,195,9,27,249,22,2,89,162,32,33,34,9,222,248,22,47, +65,119,115,116,109,112,19,195,27,249,22,2,89,162,32,33,36,9,222,250,22, +208,195,64,104,101,114,101,20,195,196,27,248,22,215,27,83,160,41,42,46,44, +250,22,208,83,160,41,43,49,44,204,195,250,22,208,83,160,41,44,47,44,250, +22,58,63,108,101,116,21,251,22,2,89,162,32,35,42,9,222,249,22,58,194, +250,22,58,1,20,100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98, +106,101,99,116,22,249,22,58,72,113,117,111,116,101,45,115,121,110,116,97,120, +23,200,199,204,203,205,249,91,159,33,11,20,12,95,33,192,89,162,32,34,57, +64,108,111,111,112,24,226,21,13,14,0,28,248,22,56,197,27,249,22,60,197, +196,27,83,160,41,45,37,44,250,22,208,83,160,41,46,40,44,250,22,208,83, +160,41,47,43,44,250,22,61,83,160,41,48,46,44,248,22,52,203,248,22,51, +203,83,160,41,49,43,44,195,26,8,22,58,73,115,121,110,116,97,120,45,99, +97,115,101,42,42,25,11,10,248,22,51,205,9,79,109,111,100,117,108,101,45, +105,100,101,110,116,105,102,105,101,114,61,63,26,249,22,58,248,22,51,23,16, +249,204,248,22,52,23,17,248,22,52,23,18,249,22,58,65,95,101,108,115,101, +27,249,22,58,2,4,249,22,58,2,23,250,22,208,11,248,22,207,248,22,51, +23,24,248,22,51,23,23,202,200,23,16,250,22,252,32,2,11,6,10,10,98, +97,100,32,115,121,110,116,97,120,197,32,20,97,158,16,12,30,28,2,12,69, +115,116,120,45,112,97,105,114,63,29,11,30,30,2,12,67,99,111,110,115,47, +35,102,31,1,30,32,2,12,67,115,116,120,45,99,97,114,33,5,30,34,2, +12,67,115,116,120,45,99,100,114,35,6,30,36,2,12,71,115,116,120,45,110, +117,108,108,47,35,102,37,9,30,38,2,12,2,13,8,30,39,2,12,2,15, +4,30,40,68,35,37,115,116,120,108,111,99,41,68,114,101,108,111,99,97,116, +101,42,1,30,43,2,12,73,115,116,120,45,99,104,101,99,107,47,101,115,99, +44,7,30,45,2,12,70,115,116,120,45,114,111,116,97,116,101,46,12,30,47, +2,12,69,97,112,112,101,110,100,47,35,102,48,0,30,49,64,35,37,115,99, +50,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115,51,0,16,18,18, +98,2,20,38,97,36,10,32,11,16,72,2,8,2,2,2,18,2,2,66,115, +121,110,116,97,120,52,69,35,37,115,116,120,99,97,115,101,53,2,4,2,2, +71,115,116,120,45,118,101,99,116,111,114,63,54,2,12,2,10,2,2,63,97, +110,100,55,71,35,37,113,113,45,97,110,100,45,111,114,56,2,6,2,2,2, +33,2,12,74,115,116,120,45,118,101,99,116,111,114,45,114,101,102,57,2,12, +2,25,2,53,2,35,2,12,2,46,2,12,62,111,114,58,2,56,2,31,2, +12,71,115,116,120,45,114,111,116,97,116,101,42,59,2,12,2,48,2,12,74, +115,112,108,105,116,45,115,116,120,45,108,105,115,116,60,2,12,71,115,121,110, +116,97,120,45,99,97,115,101,61,2,41,74,45,100,101,102,105,110,101,45,115, +121,110,116,97,120,62,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108, +63,64,99,111,110,100,64,66,35,37,99,111,110,100,65,2,17,2,12,70,115, +121,110,116,97,120,47,108,111,99,66,2,41,2,29,2,12,69,115,116,120,45, +110,117,108,108,63,67,2,12,70,113,117,97,115,105,113,117,111,116,101,68,2, +56,2,37,2,12,66,117,110,108,101,115,115,69,2,63,64,119,104,101,110,70, +2,63,66,108,101,116,47,101,99,71,2,63,73,100,101,102,105,110,101,45,115, +116,114,117,99,116,72,2,63,2,13,2,12,67,45,100,101,102,105,110,101,73, +2,63,72,115,121,110,116,97,120,45,99,97,115,101,42,74,2,41,2,44,2, +12,2,15,2,12,97,35,10,33,11,16,36,72,115,116,120,45,109,101,109,113, +45,112,111,115,75,2,50,72,110,111,45,101,108,108,105,112,115,101,115,63,76, +2,50,2,51,2,50,2,74,2,41,2,61,2,41,1,20,115,121,110,116,97, +120,45,109,97,112,112,105,110,103,45,100,101,112,116,104,77,2,50,2,52,2, +53,2,64,2,65,75,115,121,110,116,97,120,45,109,97,112,112,105,110,103,63, +78,2,50,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105, +110,103,79,2,50,74,109,97,107,101,45,109,97,116,99,104,38,101,110,118,80, +2,50,1,21,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,118,97, +108,118,97,114,81,2,50,2,55,2,56,2,66,2,41,2,25,2,53,2,58, +2,56,2,68,2,56,72,109,97,107,101,45,112,101,120,112,97,110,100,82,2, +50,96,34,8,254,1,11,16,0,16,4,33,11,61,120,83,3,1,7,101,110, +118,50,55,50,56,84,18,16,2,95,66,115,114,99,116,97,103,85,39,93,8, +252,121,7,95,9,8,252,121,7,2,53,18,100,64,100,101,115,116,86,42,36, +35,34,33,16,8,41,11,3,1,4,103,50,57,55,87,3,1,4,103,50,57, +56,88,3,1,4,103,50,57,57,89,3,1,7,101,110,118,50,55,51,53,90, +2,90,2,90,16,8,40,11,61,95,91,62,101,49,92,62,101,50,93,3,1, +7,101,110,118,50,55,51,54,94,2,94,2,94,18,158,63,99,116,120,95,42, +18,158,2,0,42,18,158,2,95,42,18,16,2,95,2,85,43,93,8,252,123, +7,95,9,8,252,123,7,2,53,18,100,2,86,46,36,35,34,33,16,12,45, +11,3,1,4,103,50,57,50,96,3,1,4,103,50,57,51,97,3,1,4,103, +50,57,52,98,3,1,4,103,50,57,53,99,3,1,4,103,50,57,54,100,3, +1,7,101,110,118,50,55,53,51,101,2,101,2,101,2,101,2,101,16,12,44, +11,2,91,63,111,117,116,102,62,105,110,103,2,92,2,93,3,1,7,101,110, +118,50,55,53,52,104,2,104,2,104,2,104,2,104,18,16,2,95,2,85,47, +93,8,252,139,7,95,9,8,252,139,7,2,53,18,101,2,86,49,36,35,34, +33,45,44,16,4,48,11,63,105,110,115,105,3,1,7,101,110,118,50,55,54, +48,106,18,16,2,95,2,85,50,93,8,252,140,7,95,9,8,252,140,7,2, +53,18,158,2,86,49,18,102,2,20,52,36,35,34,33,45,44,48,16,8,51, +11,64,116,109,112,115,107,65,104,101,114,101,115,108,64,111,117,116,115,109,3, +1,7,101,110,118,50,55,54,51,110,2,110,2,110,18,16,2,95,2,85,53, +93,8,252,145,7,95,9,8,252,145,7,2,53,18,103,2,86,55,36,35,34, +33,45,44,48,51,16,4,54,11,2,24,3,1,7,101,110,118,50,55,54,56, +111,18,158,2,95,55,18,158,2,0,55,18,158,2,95,55,11,96,83,159,32, +93,80,158,32,32,89,162,32,33,36,2,4,222,250,22,252,32,2,2,18,6, +20,20,98,105,110,100,105,110,103,32,109,97,116,99,104,32,102,97,105,108,101, +100,195,83,159,32,93,80,158,32,33,32,83,159,32,93,80,158,32,34,89,162, +32,33,38,2,8,223,0,87,94,83,160,34,11,80,158,32,33,248,22,169,80, +158,33,33,248,22,41,250,22,252,179,1,6,4,4,126,97,126,115,197,80,158, +36,33,83,159,32,93,80,158,32,35,89,162,32,33,37,2,10,223,0,87,94, +28,248,80,158,33,36,194,12,250,22,252,33,2,2,10,6,11,11,115,121,110, +116,97,120,32,112,97,105,114,196,27,248,80,158,34,37,195,249,22,2,89,162, +32,33,39,9,223,3,248,247,22,252,76,3,28,248,22,40,195,249,22,208,11, +248,80,158,36,34,197,28,248,22,252,135,1,195,249,22,208,11,248,80,158,36, +34,197,28,248,80,158,34,38,195,249,22,208,11,248,80,158,36,34,248,22,209, +198,249,22,208,11,248,80,158,36,34,64,116,101,109,112,112,194,97,68,35,37, +107,101,114,110,101,108,113,2,12,2,41,74,35,37,115,109,97,108,108,45,115, +99,104,101,109,101,114,2,53,98,2,113,2,53,2,41,2,50,2,56,2,65, +0}; + EVAL_ONE_SIZED_STR((char *)expr, 2646); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,192,252,53,32,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,192,252,99,32,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,76,35,37,115,116,120, 99,97,115,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,32,80, 158,32,32,20,97,158,16,2,30,3,2,2,1,26,99,104,101,99,107,45,100, @@ -1356,22 +1357,22 @@ 45,115,121,110,116,97,120,101,115,9,74,45,100,101,102,105,110,101,45,115,121, 110,116,97,120,10,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115, 11,73,100,101,102,105,110,101,45,115,116,114,117,99,116,12,72,115,121,110,116, -97,120,45,114,117,108,101,115,13,63,97,110,100,14,66,115,121,110,116,97,120, -15,66,108,101,116,47,101,99,16,70,108,101,116,45,115,121,110,116,97,120,17, -71,119,105,116,104,45,115,121,110,116,97,120,18,71,115,121,110,116,97,120,45, -99,97,115,101,19,66,117,110,108,101,115,115,20,64,99,111,110,100,21,75,108, -101,116,114,101,99,45,115,121,110,116,97,120,101,115,22,62,111,114,23,70,115, -121,110,116,97,120,47,108,111,99,24,67,45,100,101,102,105,110,101,25,72,115, +97,120,45,114,117,108,101,115,13,67,45,100,101,102,105,110,101,14,66,115,121, +110,116,97,120,15,66,108,101,116,47,101,99,16,70,108,101,116,45,115,121,110, +116,97,120,17,62,111,114,18,71,119,105,116,104,45,115,121,110,116,97,120,19, +71,115,121,110,116,97,120,45,99,97,115,101,20,66,117,110,108,101,115,115,21, +64,99,111,110,100,22,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101, +115,23,63,97,110,100,24,70,115,121,110,116,97,120,47,108,111,99,25,72,115, 121,110,116,97,120,45,99,97,115,101,42,26,73,108,101,116,114,101,99,45,115, 121,110,116,97,120,27,70,113,117,97,115,105,113,117,111,116,101,28,64,119,104, 101,110,29,16,23,11,70,35,37,119,105,116,104,45,115,116,120,30,11,74,35, -37,100,101,102,105,110,101,45,101,116,45,97,108,31,11,2,31,11,71,35,37, -113,113,45,97,110,100,45,111,114,32,69,35,37,115,116,120,99,97,115,101,33, -2,31,11,2,30,68,35,37,115,116,120,108,111,99,34,2,31,66,35,37,99, -111,110,100,35,11,2,32,2,34,2,31,2,34,11,2,32,2,31,16,23,2, +37,100,101,102,105,110,101,45,101,116,45,97,108,31,11,2,31,11,2,31,69, +35,37,115,116,120,99,97,115,101,32,2,31,11,71,35,37,113,113,45,97,110, +100,45,111,114,33,2,30,68,35,37,115,116,120,108,111,99,34,2,31,66,35, +37,99,111,110,100,35,11,2,33,2,34,2,34,11,2,33,2,31,16,23,2, 4,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17, 2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2, -28,2,29,34,55,98,16,5,93,2,22,89,162,32,33,49,9,223,0,27,249, +28,2,29,34,55,98,16,5,93,2,23,89,162,32,33,49,9,223,0,27,249, 22,208,83,160,41,32,35,44,196,27,28,248,80,158,35,32,194,249,80,158,36, 33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193, 27,27,248,80,158,40,34,195,28,248,80,158,40,36,193,248,22,8,89,162,32, @@ -1385,7 +1386,7 @@ 193,249,80,158,43,33,248,80,158,44,34,195,27,248,80,158,45,35,196,28,248, 80,158,45,36,193,248,80,158,45,38,193,11,11,11,11,11,28,192,27,248,22, 51,194,27,248,22,77,195,27,248,22,86,196,27,248,22,89,197,27,248,22,88, -198,249,80,158,41,42,202,27,251,22,60,199,202,200,201,27,83,160,41,33,43, +198,249,80,158,41,42,202,27,251,22,60,199,201,200,202,27,83,160,41,33,43, 44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89, 162,32,33,40,9,226,13,2,3,1,250,22,31,89,162,32,32,36,9,225,6, 3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33, @@ -1397,7 +1398,7 @@ 32,32,51,9,225,6,5,4,27,250,22,208,83,160,41,35,38,44,250,22,208, 83,160,41,36,41,44,252,22,61,83,160,41,37,46,44,250,22,2,89,162,33, 33,41,9,223,17,250,22,208,83,160,41,38,35,44,249,22,59,248,22,51,199, -248,22,77,199,83,160,41,39,35,44,248,22,77,23,16,248,22,87,23,16,83, +248,22,77,199,83,160,41,39,35,44,248,22,87,23,16,248,22,77,23,16,83, 160,41,40,46,44,248,22,86,205,248,22,51,205,83,160,41,41,41,44,197,89, 162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2, 208,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196, @@ -1409,35 +1410,35 @@ 115,116,120,45,62,108,105,115,116,55,4,30,56,2,6,69,97,112,112,101,110, 100,47,35,102,57,0,30,58,2,6,71,115,116,120,45,110,117,108,108,47,35, 102,59,9,30,60,2,6,70,115,116,120,45,114,111,116,97,116,101,61,12,30, -62,2,34,68,114,101,108,111,99,97,116,101,63,1,30,64,2,33,1,20,101, +62,2,34,68,114,101,108,111,99,97,116,101,63,1,30,64,2,32,1,20,101, 108,108,105,112,115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,65,0, 16,10,18,98,64,104,101,114,101,66,38,97,36,10,32,11,16,80,2,11,2, -2,2,17,2,2,2,18,2,30,2,15,2,33,2,14,2,32,71,115,116,120, -45,118,101,99,116,111,114,63,67,2,6,2,23,2,32,2,47,2,6,74,115, +2,2,17,2,2,2,19,2,30,2,15,2,32,71,115,116,120,45,118,101,99, +116,111,114,63,67,2,6,2,8,2,30,2,24,2,33,2,47,2,6,74,115, 116,120,45,118,101,99,116,111,114,45,114,101,102,68,2,6,73,115,121,110,116, -97,120,45,99,97,115,101,42,42,69,2,33,2,49,2,6,2,61,2,6,2, -53,2,6,2,45,2,6,2,4,2,2,71,115,116,120,45,114,111,116,97,116, +97,120,45,99,97,115,101,42,42,69,2,32,2,49,2,6,2,61,2,6,2, +18,2,33,2,45,2,6,2,4,2,2,71,115,116,120,45,114,111,116,97,116, 101,42,70,2,6,2,57,2,6,74,115,112,108,105,116,45,115,116,120,45,108, -105,115,116,71,2,6,2,25,2,31,2,10,2,31,2,21,2,35,2,7,2, -6,2,24,2,34,2,12,2,31,69,115,116,120,45,110,117,108,108,63,72,2, -6,2,22,2,2,2,28,2,32,2,59,2,6,2,27,2,2,2,13,2,2, -2,29,2,31,2,26,2,34,2,9,2,2,2,20,2,31,2,51,2,6,2, -19,2,34,2,16,2,31,2,8,2,30,2,55,2,6,2,43,2,6,97,35, -10,33,11,16,66,2,18,2,30,2,15,2,33,2,14,2,32,2,67,2,6, -2,23,2,32,2,47,2,6,2,68,2,6,2,69,2,33,2,49,2,6,2, -61,2,6,2,53,2,6,2,45,2,6,2,70,2,6,2,57,2,6,2,71, -2,6,2,25,2,31,2,10,2,31,2,21,2,35,2,7,2,6,2,24,2, -34,2,12,2,31,2,72,2,6,2,28,2,32,2,59,2,6,2,29,2,31, -2,26,2,34,2,20,2,31,2,51,2,6,2,19,2,34,2,16,2,31,2, -8,2,30,2,55,2,6,2,43,2,6,96,34,8,254,1,11,16,0,16,4, +105,115,116,71,2,6,2,14,2,31,2,10,2,31,2,22,2,35,2,7,2, +6,2,25,2,34,2,12,2,31,69,115,116,120,45,110,117,108,108,63,72,2, +6,2,23,2,2,2,28,2,33,2,59,2,6,2,27,2,2,2,13,2,2, +2,29,2,31,2,26,2,34,2,9,2,2,2,21,2,31,2,51,2,6,2, +20,2,34,2,16,2,31,2,53,2,6,2,55,2,6,2,43,2,6,97,35, +10,33,11,16,66,2,19,2,30,2,15,2,32,2,67,2,6,2,8,2,30, +2,24,2,33,2,47,2,6,2,68,2,6,2,69,2,32,2,49,2,6,2, +61,2,6,2,18,2,33,2,45,2,6,2,70,2,6,2,57,2,6,2,71, +2,6,2,14,2,31,2,10,2,31,2,22,2,35,2,7,2,6,2,25,2, +34,2,12,2,31,2,72,2,6,2,28,2,33,2,59,2,6,2,29,2,31, +2,26,2,34,2,21,2,31,2,51,2,6,2,20,2,34,2,16,2,31,2, +53,2,6,2,55,2,6,2,43,2,6,96,34,8,254,1,11,16,0,16,4, 33,11,63,115,116,120,73,3,1,7,101,110,118,50,55,56,50,74,18,16,2, 95,66,115,114,99,116,97,103,75,39,93,8,252,181,7,95,9,8,252,181,7, -2,33,18,16,2,99,2,38,44,93,8,252,181,7,16,6,43,11,61,114,76, +2,32,18,16,2,99,2,38,44,93,8,252,181,7,16,6,43,11,61,114,76, 63,115,114,99,77,3,1,7,101,110,118,50,56,48,53,78,2,78,16,4,42, 11,64,101,120,110,104,79,3,1,7,101,110,118,50,56,48,54,80,16,4,41, 11,63,101,115,99,81,3,1,7,101,110,118,50,56,48,55,82,16,4,40,11, 63,101,120,110,83,3,1,7,101,110,118,50,56,48,57,84,95,9,8,252,181, -7,2,33,18,100,64,100,101,115,116,85,47,36,35,34,33,16,12,46,11,3, +7,2,32,18,100,64,100,101,115,116,85,47,36,35,34,33,16,12,46,11,3, 1,4,103,51,48,48,86,3,1,4,103,51,48,49,87,3,1,4,103,51,48, 50,88,3,1,4,103,51,48,51,89,3,1,4,103,51,48,52,90,3,1,7, 101,110,118,50,55,57,55,91,2,91,2,91,2,91,2,91,16,12,45,11,61, @@ -1457,7 +1458,7 @@ 44,34,195,27,248,80,158,45,35,196,28,248,80,158,45,36,193,248,80,158,45, 39,193,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248, 22,86,196,27,248,22,89,197,27,248,22,88,198,249,80,158,41,42,202,27,251, -22,60,199,202,200,201,27,83,160,41,33,43,44,91,159,33,11,90,161,33,32, +22,60,199,201,200,202,27,83,160,41,33,43,44,91,159,33,11,90,161,33,32, 11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,13,2,3, 1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22, 252,175,2,248,22,252,175,2,89,162,32,33,36,9,224,3,1,248,193,89,162, @@ -1467,19 +1468,19 @@ 22,208,83,160,41,35,38,44,250,22,208,83,160,41,36,41,44,252,22,61,83, 160,41,37,46,44,250,22,2,89,162,33,33,45,9,223,17,250,22,208,83,160, 41,38,35,44,249,22,59,250,22,208,83,160,41,39,40,44,248,22,59,248,22, -51,203,83,160,41,40,40,44,248,22,77,199,83,160,41,41,35,44,248,22,77, -23,16,248,22,87,23,16,83,160,41,42,46,44,248,22,86,205,248,22,51,205, +51,203,83,160,41,40,40,44,248,22,77,199,83,160,41,41,35,44,248,22,87, +23,16,248,22,77,23,16,83,160,41,42,46,44,248,22,86,205,248,22,51,205, 83,160,41,43,41,44,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, 9,223,3,248,22,252,175,2,208,250,22,252,32,2,11,6,10,10,98,97,100, 32,115,121,110,116,97,120,196,32,20,97,158,16,12,2,42,2,44,2,46,2, 48,2,50,2,52,2,58,2,54,2,60,2,56,2,62,2,64,16,12,18,98, 2,66,49,36,35,34,16,4,48,11,2,73,3,1,7,101,110,118,50,56,49, 56,95,18,16,2,95,2,75,50,93,8,252,196,7,95,9,8,252,196,7,2, -33,18,16,2,99,2,38,55,93,8,252,196,7,16,6,54,11,2,76,2,77, +32,18,16,2,99,2,38,55,93,8,252,196,7,16,6,54,11,2,76,2,77, 3,1,7,101,110,118,50,56,51,57,96,2,96,16,4,53,11,2,79,3,1, 7,101,110,118,50,56,52,48,97,16,4,52,11,2,81,3,1,7,101,110,118, 50,56,52,49,98,16,4,51,11,2,83,3,1,7,101,110,118,50,56,52,51, -99,95,9,8,252,196,7,2,33,18,100,2,85,58,36,35,34,48,16,12,57, +99,95,9,8,252,196,7,2,32,18,100,2,85,58,36,35,34,48,16,12,57, 11,3,1,4,103,51,48,53,100,3,1,4,103,51,48,54,101,3,1,4,103, 51,48,55,102,3,1,4,103,51,48,56,103,3,1,4,103,51,48,57,104,3, 1,7,101,110,118,50,56,51,49,105,2,105,2,105,2,105,2,105,16,12,56, @@ -1506,7 +1507,7 @@ 2,89,162,32,33,39,9,224,4,5,249,80,158,35,37,28,248,80,158,36,36, 197,248,22,58,248,80,158,37,38,198,11,194,248,80,158,37,38,196,28,248,22, 56,193,9,248,80,158,35,43,193,11,28,192,249,80,158,43,44,204,27,252,22, -60,205,203,202,200,204,27,83,160,41,36,45,47,91,159,33,11,90,161,33,32, +60,204,205,203,202,200,27,83,160,41,36,45,47,91,159,33,11,90,161,33,32, 11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2,3, 1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22, 252,175,2,248,22,252,175,2,89,162,32,33,36,9,224,3,1,248,193,89,162, @@ -1519,7 +1520,7 @@ 32,32,58,9,225,6,5,4,27,250,22,208,83,160,41,38,38,47,250,22,208, 83,160,41,39,41,47,251,22,59,83,160,41,40,45,47,250,22,2,89,162,33, 33,41,9,223,16,250,22,208,83,160,41,41,35,47,249,22,59,248,22,51,199, -248,22,77,199,83,160,41,42,35,47,248,22,89,23,15,248,22,88,23,15,83, +248,22,77,199,83,160,41,42,35,47,248,22,88,23,15,248,22,51,23,15,83, 160,41,43,45,47,250,22,208,83,160,41,44,48,47,252,22,61,83,160,41,45, 53,47,250,22,2,89,162,33,33,48,9,223,24,250,22,208,83,160,41,46,35, 47,249,22,59,248,22,51,199,250,22,208,83,160,41,47,40,47,249,22,55,83, @@ -1527,8 +1528,8 @@ 41,49,35,47,249,22,59,83,160,41,50,37,47,250,22,208,83,160,41,51,40, 47,249,22,59,83,160,41,52,42,47,248,22,51,204,83,160,41,53,40,47,83, 160,41,54,35,47,248,22,77,206,83,160,41,55,40,47,83,160,41,56,35,47, -248,22,51,23,23,248,22,89,23,23,83,160,41,57,53,47,248,22,77,23,20, -248,22,86,23,20,83,160,41,58,48,47,83,160,41,59,41,47,197,89,162,32, +248,22,77,23,23,248,22,88,23,23,83,160,41,57,53,47,248,22,86,23,20, +248,22,89,23,20,83,160,41,58,48,47,83,160,41,59,41,47,197,89,162,32, 32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208,248, 80,158,42,46,83,160,41,8,28,42,47,250,22,252,32,2,11,6,10,10,98, 97,100,32,115,121,110,116,97,120,196,32,20,97,158,16,15,2,42,2,44,2, @@ -1542,13 +1543,13 @@ 54,55,121,2,121,2,121,2,121,2,121,16,12,8,29,11,2,92,2,37,2, 39,2,40,2,41,3,1,7,101,110,118,50,56,54,56,122,2,122,2,122,2, 122,2,122,18,16,2,95,2,75,8,32,93,8,252,212,7,95,9,8,252,212, -7,2,33,18,158,2,85,8,31,18,16,2,95,2,75,8,33,93,8,252,218, -7,95,9,8,252,218,7,2,33,18,16,2,99,2,38,8,38,93,8,252,218, +7,2,32,18,158,2,85,8,31,18,16,2,95,2,75,8,33,93,8,252,218, +7,95,9,8,252,218,7,2,32,18,16,2,99,2,38,8,38,93,8,252,218, 7,16,6,8,37,11,2,76,2,77,3,1,7,101,110,118,50,56,56,55,123, 2,123,16,4,8,36,11,2,79,3,1,7,101,110,118,50,56,56,56,124,16, 4,8,35,11,2,81,3,1,7,101,110,118,50,56,56,57,125,16,4,8,34, 11,2,83,3,1,7,101,110,118,50,56,57,49,126,95,9,8,252,218,7,2, -33,18,102,2,85,8,41,36,35,34,59,8,30,8,29,16,4,8,40,11,3, +32,18,102,2,85,8,41,36,35,34,59,8,30,8,29,16,4,8,40,11,3, 1,4,103,51,49,55,127,3,1,7,101,110,118,50,56,56,51,128,16,4,8, 39,11,2,107,3,1,7,101,110,118,50,56,56,52,129,18,158,2,94,8,41, 18,158,2,36,8,41,18,158,2,94,8,41,18,158,2,94,8,41,18,158,9, @@ -1575,7 +1576,7 @@ 28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27,248,80, 158,45,35,196,28,248,80,158,45,36,193,248,80,158,45,39,193,11,11,11,11, 11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248,22, -89,197,27,248,22,88,198,249,80,158,41,42,202,27,251,22,60,199,202,200,201, +89,197,27,248,22,88,198,249,80,158,41,42,202,27,251,22,60,199,201,200,202, 27,83,160,41,33,43,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33, 11,247,248,22,8,89,162,32,33,40,9,226,13,2,3,1,250,22,31,89,162, 32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252, @@ -1586,19 +1587,19 @@ 44,250,22,208,83,160,41,36,41,44,251,22,61,83,160,41,37,45,44,250,22, 2,89,162,33,33,45,9,223,16,250,22,208,83,160,41,38,35,44,249,22,59, 250,22,208,83,160,41,39,40,44,248,22,59,248,22,51,203,83,160,41,40,40, -44,248,22,77,199,83,160,41,41,35,44,248,22,77,23,15,248,22,87,23,15, +44,248,22,77,199,83,160,41,41,35,44,248,22,87,23,15,248,22,77,23,15, 248,22,86,204,248,22,51,204,83,160,41,42,41,44,197,89,162,32,32,33,9, 223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208,250,22,252,32, 2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,32,20,97,158,16, 12,2,42,2,44,2,46,2,48,2,50,2,52,2,58,2,54,2,60,2,56, 2,62,2,64,16,11,18,98,2,66,8,47,36,35,34,16,4,8,46,11,2, 73,3,1,7,101,110,118,50,57,48,56,136,18,16,2,95,2,75,8,48,93, -8,252,234,7,95,9,8,252,234,7,2,33,18,16,2,99,2,38,8,53,93, +8,252,234,7,95,9,8,252,234,7,2,32,18,16,2,99,2,38,8,53,93, 8,252,234,7,16,6,8,52,11,2,76,2,77,3,1,7,101,110,118,50,57, 50,57,137,2,137,16,4,8,51,11,2,79,3,1,7,101,110,118,50,57,51, 48,138,16,4,8,50,11,2,81,3,1,7,101,110,118,50,57,51,49,139,16, 4,8,49,11,2,83,3,1,7,101,110,118,50,57,51,51,140,95,9,8,252, -234,7,2,33,18,100,2,85,8,56,36,35,34,8,46,16,12,8,55,11,3, +234,7,2,32,18,100,2,85,8,56,36,35,34,8,46,16,12,8,55,11,3, 1,4,103,51,49,56,141,3,1,4,103,51,49,57,142,3,1,4,103,51,50, 48,143,3,1,4,103,51,50,49,144,3,1,4,103,51,50,50,145,3,1,7, 101,110,118,50,57,50,49,146,2,146,2,146,2,146,2,146,16,12,8,54,11, @@ -1625,7 +1626,7 @@ 42,46,249,22,2,89,162,32,33,36,9,222,248,22,42,248,22,43,248,22,209, 195,248,22,215,27,83,160,41,35,46,46,250,22,208,83,160,41,36,49,46,204, 195,27,28,248,80,158,42,36,194,248,80,158,42,37,194,11,28,192,249,80,158, -43,43,204,27,252,22,60,203,206,202,205,200,27,83,160,41,37,45,46,91,159, +43,43,204,27,252,22,60,203,206,205,200,202,27,83,160,41,37,45,46,91,159, 33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33, 40,9,226,15,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90, 161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9,224, @@ -1633,129 +1634,131 @@ 22,252,177,2,193,249,80,158,35,44,21,95,66,108,97,109,98,100,97,149,93, 61,120,150,100,2,69,2,92,10,2,150,94,61,107,151,2,38,79,109,111,100, 117,108,101,45,105,100,101,110,116,105,102,105,101,114,61,63,152,94,158,65,100, -117,109,109,121,153,67,112,97,116,116,101,114,110,154,95,2,24,2,150,68,116, +117,109,109,121,153,67,112,97,116,116,101,114,110,154,95,2,25,2,150,68,116, 101,109,112,108,97,116,101,155,2,38,83,160,41,38,35,46,89,162,32,32,8, 28,9,225,6,5,4,27,250,22,208,83,160,41,39,38,46,250,22,208,83,160, 41,40,41,46,250,22,59,83,160,41,41,44,46,83,160,41,42,44,46,250,22, 208,83,160,41,43,47,46,254,22,61,83,160,41,44,54,46,248,22,77,23,21, -83,160,41,45,54,46,83,160,41,46,54,46,248,22,89,23,21,83,160,41,47, +83,160,41,45,54,46,83,160,41,46,54,46,248,22,86,23,21,83,160,41,47, 54,46,251,22,2,89,162,33,33,47,9,223,26,250,22,208,83,160,41,48,35, 46,249,22,59,250,22,208,83,160,41,49,40,46,249,22,55,248,22,51,204,248, 22,77,204,83,160,41,50,40,46,250,22,208,83,160,41,51,40,46,250,22,59, 83,160,41,52,43,46,83,160,41,53,43,46,248,22,86,205,83,160,41,54,40, -46,83,160,41,55,35,46,248,22,88,23,25,248,22,51,23,25,248,22,86,23, +46,83,160,41,55,35,46,248,22,89,23,25,248,22,51,23,25,248,22,88,23, 25,83,160,41,56,47,46,83,160,41,57,41,46,197,89,162,32,32,33,9,223, 0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208,248,80,158,42,45, 83,160,41,58,42,46,247,198,247,193,32,20,97,158,16,14,2,42,2,44,2, 46,2,48,2,50,2,54,2,56,2,52,2,58,2,112,30,156,2,6,2,7, 2,2,62,2,64,2,113,16,27,18,16,2,95,2,75,8,57,93,8,252,249, -7,95,9,8,252,249,7,2,33,18,100,2,85,8,61,36,35,34,16,4,8, +7,95,9,8,252,249,7,2,32,18,100,2,85,8,61,36,35,34,16,4,8, 60,11,2,150,3,1,7,101,110,118,50,57,52,50,157,16,12,8,59,11,3, 1,4,103,51,50,51,158,3,1,4,103,51,50,52,159,3,1,4,103,51,50, 53,160,3,1,4,103,51,50,54,161,3,1,4,103,51,50,55,162,3,1,7, 101,110,118,50,57,54,48,163,2,163,2,163,2,163,2,163,16,12,8,58,11, 2,92,2,151,67,107,101,121,119,111,114,100,164,2,154,2,155,3,1,7,101, 110,118,50,57,54,49,165,2,165,2,165,2,165,2,165,18,158,2,66,8,61, -18,16,2,95,2,75,8,62,93,8,252,251,7,95,9,8,252,251,7,2,33, +18,16,2,95,2,75,8,62,93,8,252,251,7,95,9,8,252,251,7,2,32, 18,158,2,85,8,61,18,16,2,95,2,75,8,63,93,8,252,254,7,95,9, -8,252,254,7,2,33,18,16,2,99,2,38,8,68,93,8,252,254,7,16,6, +8,252,254,7,2,32,18,16,2,99,2,38,8,68,93,8,252,254,7,16,6, 8,67,11,2,76,2,77,3,1,7,101,110,118,50,57,55,56,166,2,166,16, 4,8,66,11,2,79,3,1,7,101,110,118,50,57,55,57,167,16,4,8,65, 11,2,81,3,1,7,101,110,118,50,57,56,48,168,16,4,8,64,11,2,83, -3,1,7,101,110,118,50,57,56,50,169,95,9,8,252,254,7,2,33,18,102, -2,85,8,71,36,35,34,8,60,8,59,8,58,16,4,8,70,11,3,1,4, -103,51,51,48,170,3,1,7,101,110,118,50,57,55,52,171,16,4,8,69,11, -2,153,3,1,7,101,110,118,50,57,55,53,172,18,158,2,94,8,71,18,158, -2,149,8,71,18,158,93,16,2,158,2,150,8,71,9,8,71,18,158,2,94, -8,71,18,158,2,69,8,71,18,158,10,8,71,18,158,2,150,8,71,18,158, -2,152,8,71,18,158,2,94,8,71,18,158,2,94,8,71,18,158,2,94,8, -71,18,158,2,94,8,71,18,158,2,24,8,71,18,158,2,150,8,71,18,158, -2,94,8,71,18,158,2,94,8,71,18,158,2,94,8,71,18,158,2,94,8, -71,18,16,2,158,94,16,2,98,2,153,8,75,93,8,252,250,7,16,4,8, -74,11,3,1,8,119,115,116,109,112,51,50,56,173,3,1,7,101,110,118,50, -57,54,56,174,16,4,8,73,11,3,1,4,103,51,50,57,175,3,1,7,101, -110,118,50,57,57,49,176,16,4,8,72,11,2,134,3,1,7,101,110,118,50, -57,57,50,177,9,16,2,158,2,38,8,75,9,8,75,95,9,8,252,250,7, -2,30,11,16,5,93,2,11,89,162,32,33,49,9,223,0,27,89,162,32,32, -36,2,148,223,2,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110, -116,97,120,195,27,28,248,80,158,35,32,196,249,80,158,36,33,248,80,158,37, -34,198,27,248,80,158,38,35,199,28,248,80,158,38,32,193,27,27,248,80,158, -40,34,195,28,248,80,158,40,36,193,248,22,58,248,80,158,41,37,194,11,28, -192,249,80,158,40,38,194,27,248,80,158,42,35,197,28,248,80,158,42,36,193, -248,22,8,89,162,32,33,39,9,224,10,1,27,249,22,2,89,162,32,33,44, -9,224,4,5,249,80,158,35,39,28,248,80,158,36,32,197,249,80,158,37,33, -248,80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158,39,32,193,249, -80,158,40,33,248,80,158,41,34,195,248,80,158,41,40,248,80,158,42,35,196, -11,11,194,248,80,158,37,37,196,28,248,22,56,193,21,93,9,248,80,158,35, -41,193,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22, -86,196,27,248,22,87,197,28,249,22,4,80,158,40,42,248,22,215,27,83,160, -41,32,42,45,250,22,208,83,160,41,33,45,45,201,195,249,80,158,40,43,201, -27,251,22,60,200,202,199,201,27,83,160,41,34,42,45,91,159,33,11,90,161, -33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,12, -2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10, -247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9,224,3,1,248,193, -89,162,32,32,36,9,224,2,3,28,248,22,252,172,2,193,248,22,252,177,2, -193,249,80,158,35,44,21,94,1,21,109,97,107,101,45,115,101,116,33,45,116, -114,97,110,115,102,111,114,109,101,114,178,95,2,149,93,2,150,100,2,69,2, -92,10,2,150,94,2,151,2,38,2,152,94,2,154,95,2,24,2,150,2,155, -2,38,83,160,41,35,35,45,89,162,32,32,8,32,9,225,6,5,4,27,250, -22,208,83,160,41,36,38,45,250,22,208,83,160,41,37,41,45,249,22,59,83, -160,41,38,43,45,250,22,208,83,160,41,39,46,45,250,22,59,83,160,41,40, -49,45,83,160,41,41,49,45,250,22,208,83,160,41,42,52,45,254,22,61,83, -160,41,43,59,45,248,22,77,23,26,83,160,41,44,59,45,83,160,41,45,59, -45,248,22,87,23,26,83,160,41,46,59,45,250,22,2,89,162,33,33,47,9, -223,30,250,22,208,83,160,41,47,35,45,249,22,59,248,22,51,199,250,22,208, -83,160,41,48,40,45,250,22,59,83,160,41,49,43,45,83,160,41,50,43,45, -248,22,77,205,83,160,41,51,40,45,83,160,41,52,35,45,248,22,51,23,29, -248,22,86,23,29,83,160,41,53,52,45,83,160,41,54,46,45,83,160,41,55, -41,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248, -22,252,175,2,208,247,197,247,193,32,20,97,158,16,13,2,42,2,44,2,46, -2,48,2,50,2,54,2,56,2,52,2,58,2,112,2,156,2,62,2,64,16, -24,18,16,2,95,2,75,8,76,93,8,252,12,8,95,9,8,252,12,8,2, -33,18,100,2,85,8,80,36,35,34,16,4,8,79,11,2,150,3,1,7,101, -110,118,50,57,57,53,179,16,10,8,78,11,3,1,4,103,51,51,49,180,3, -1,4,103,51,51,50,181,3,1,4,103,51,51,51,182,3,1,4,103,51,51, -52,183,3,1,7,101,110,118,51,48,48,57,184,2,184,2,184,2,184,16,10, -8,77,11,2,92,2,151,2,154,2,155,3,1,7,101,110,118,51,48,49,48, -185,2,185,2,185,2,185,18,16,2,95,2,75,8,81,93,8,252,14,8,95, -9,8,252,14,8,2,33,18,16,2,99,2,38,8,86,93,8,252,14,8,16, -6,8,85,11,2,76,2,77,3,1,7,101,110,118,51,48,49,54,186,2,186, -16,4,8,84,11,2,79,3,1,7,101,110,118,51,48,49,55,187,16,4,8, -83,11,2,81,3,1,7,101,110,118,51,48,49,56,188,16,4,8,82,11,2, -83,3,1,7,101,110,118,51,48,50,48,189,95,9,8,252,14,8,2,33,18, -158,2,85,8,80,18,158,2,94,8,80,18,158,2,178,8,80,18,158,2,94, -8,80,18,158,2,149,8,80,18,158,93,16,2,158,2,150,8,80,9,8,80, -18,158,2,94,8,80,18,158,2,69,8,80,18,158,10,8,80,18,158,2,150, -8,80,18,158,2,152,8,80,18,158,2,94,8,80,18,158,2,94,8,80,18, -158,2,24,8,80,18,158,2,150,8,80,18,158,2,94,8,80,18,158,2,94, -8,80,18,158,2,94,8,80,18,158,2,94,8,80,18,158,2,94,8,80,11, -93,83,159,32,93,80,158,32,32,89,162,32,33,35,2,4,223,0,248,22,8, -89,162,32,33,38,9,224,1,2,27,247,22,109,87,94,249,22,3,89,162,32, -33,43,9,226,4,3,5,2,87,94,28,248,80,158,36,33,197,12,250,22,252, -33,2,2,4,6,19,19,108,105,115,116,32,111,102,32,105,100,101,110,116,105, -102,105,101,114,115,197,27,250,22,115,196,248,22,209,201,89,97,40,32,32,9, -222,87,94,28,249,22,5,89,162,32,33,36,9,223,7,249,22,220,195,194,194, -248,195,198,12,250,22,114,196,248,22,209,201,249,22,50,202,197,195,11,98,68, -35,37,107,101,114,110,101,108,190,74,35,37,115,109,97,108,108,45,115,99,104, -101,109,101,191,2,6,2,33,2,30,2,34,98,2,190,2,191,2,6,2,33, -2,30,2,34,0}; - EVAL_ONE_SIZED_STR((char *)expr, 8257); +3,1,7,101,110,118,50,57,56,50,169,95,9,8,252,254,7,2,32,18,102, +2,85,8,73,36,35,34,8,60,16,12,8,72,11,2,158,2,159,2,160,2, +161,2,162,2,163,2,163,2,163,2,163,2,163,16,12,8,71,11,2,92,2, +151,2,164,2,154,2,155,2,165,2,165,2,165,2,165,2,165,16,4,8,70, +11,3,1,4,103,51,51,48,170,3,1,7,101,110,118,50,57,55,52,171,16, +4,8,69,11,2,153,3,1,7,101,110,118,50,57,55,53,172,18,158,2,94, +8,73,18,158,2,149,8,73,18,158,93,16,2,158,2,150,8,73,9,8,73, +18,158,2,94,8,73,18,158,2,69,8,73,18,158,10,8,73,18,158,2,150, +8,73,18,158,2,152,8,73,18,158,2,94,8,73,18,158,2,94,8,73,18, +158,2,94,8,73,18,158,2,94,8,73,18,158,2,25,8,73,18,158,2,150, +8,73,18,158,2,94,8,73,18,158,2,94,8,73,18,158,2,94,8,73,18, +158,2,94,8,73,18,16,2,158,94,16,2,98,2,153,8,77,93,8,252,250, +7,16,4,8,76,11,3,1,8,119,115,116,109,112,51,50,56,173,3,1,7, +101,110,118,50,57,54,56,174,16,4,8,75,11,3,1,4,103,51,50,57,175, +3,1,7,101,110,118,50,57,57,49,176,16,4,8,74,11,2,134,3,1,7, +101,110,118,50,57,57,50,177,9,16,2,158,2,38,8,77,9,8,77,95,9, +8,252,250,7,2,30,11,16,5,93,2,11,89,162,32,33,49,9,223,0,27, +89,162,32,32,36,2,148,223,2,250,22,252,32,2,11,6,10,10,98,97,100, +32,115,121,110,116,97,120,195,27,28,248,80,158,35,32,196,249,80,158,36,33, +248,80,158,37,34,198,27,248,80,158,38,35,199,28,248,80,158,38,32,193,27, +27,248,80,158,40,34,195,28,248,80,158,40,36,193,248,22,58,248,80,158,41, +37,194,11,28,192,249,80,158,40,38,194,27,248,80,158,42,35,197,28,248,80, +158,42,36,193,248,22,8,89,162,32,33,39,9,224,10,1,27,249,22,2,89, +162,32,33,44,9,224,4,5,249,80,158,35,39,28,248,80,158,36,32,197,249, +80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158, +39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158,41,40,248,80, +158,42,35,196,11,11,194,248,80,158,37,37,196,28,248,22,56,193,21,93,9, +248,80,158,35,41,193,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77, +195,27,248,22,86,196,27,248,22,87,197,28,249,22,4,80,158,40,42,248,22, +215,27,83,160,41,32,42,45,250,22,208,83,160,41,33,45,45,201,195,249,80, +158,40,43,201,27,251,22,60,199,200,201,202,27,83,160,41,34,42,45,91,159, +33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33, +40,9,226,12,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90, +161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9,224, +3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,172,2,193,248, +22,252,177,2,193,249,80,158,35,44,21,94,1,21,109,97,107,101,45,115,101, +116,33,45,116,114,97,110,115,102,111,114,109,101,114,178,95,2,149,93,2,150, +100,2,69,2,92,10,2,150,94,2,151,2,38,2,152,94,2,154,95,2,25, +2,150,2,155,2,38,83,160,41,35,35,45,89,162,32,32,8,32,9,225,6, +5,4,27,250,22,208,83,160,41,36,38,45,250,22,208,83,160,41,37,41,45, +249,22,59,83,160,41,38,43,45,250,22,208,83,160,41,39,46,45,250,22,59, +83,160,41,40,49,45,83,160,41,41,49,45,250,22,208,83,160,41,42,52,45, +254,22,61,83,160,41,43,59,45,248,22,87,23,26,83,160,41,44,59,45,83, +160,41,45,59,45,248,22,86,23,26,83,160,41,46,59,45,250,22,2,89,162, +33,33,47,9,223,30,250,22,208,83,160,41,47,35,45,249,22,59,248,22,51, +199,250,22,208,83,160,41,48,40,45,250,22,59,83,160,41,49,43,45,83,160, +41,50,43,45,248,22,77,205,83,160,41,51,40,45,83,160,41,52,35,45,248, +22,77,23,29,248,22,51,23,29,83,160,41,53,52,45,83,160,41,54,46,45, +83,160,41,55,41,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, +9,223,3,248,22,252,175,2,208,247,197,247,193,32,20,97,158,16,13,2,42, +2,44,2,46,2,48,2,50,2,54,2,56,2,52,2,58,2,112,2,156,2, +62,2,64,16,24,18,16,2,95,2,75,8,78,93,8,252,12,8,95,9,8, +252,12,8,2,32,18,100,2,85,8,82,36,35,34,16,4,8,81,11,2,150, +3,1,7,101,110,118,50,57,57,53,179,16,10,8,80,11,3,1,4,103,51, +51,49,180,3,1,4,103,51,51,50,181,3,1,4,103,51,51,51,182,3,1, +4,103,51,51,52,183,3,1,7,101,110,118,51,48,48,57,184,2,184,2,184, +2,184,16,10,8,79,11,2,92,2,151,2,154,2,155,3,1,7,101,110,118, +51,48,49,48,185,2,185,2,185,2,185,18,16,2,95,2,75,8,83,93,8, +252,14,8,95,9,8,252,14,8,2,32,18,16,2,99,2,38,8,88,93,8, +252,14,8,16,6,8,87,11,2,76,2,77,3,1,7,101,110,118,51,48,49, +54,186,2,186,16,4,8,86,11,2,79,3,1,7,101,110,118,51,48,49,55, +187,16,4,8,85,11,2,81,3,1,7,101,110,118,51,48,49,56,188,16,4, +8,84,11,2,83,3,1,7,101,110,118,51,48,50,48,189,95,9,8,252,14, +8,2,32,18,158,2,85,8,82,18,158,2,94,8,82,18,158,2,178,8,82, +18,158,2,94,8,82,18,158,2,149,8,82,18,158,93,16,2,158,2,150,8, +82,9,8,82,18,158,2,94,8,82,18,158,2,69,8,82,18,158,10,8,82, +18,158,2,150,8,82,18,158,2,152,8,82,18,158,2,94,8,82,18,158,2, +94,8,82,18,158,2,25,8,82,18,158,2,150,8,82,18,158,2,94,8,82, +18,158,2,94,8,82,18,158,2,94,8,82,18,158,2,94,8,82,18,158,2, +94,8,82,11,93,83,159,32,93,80,158,32,32,89,162,32,33,35,2,4,223, +0,248,22,8,89,162,32,33,38,9,224,1,2,27,247,22,109,87,94,249,22, +3,89,162,32,33,43,9,226,4,3,5,2,87,94,28,248,80,158,36,33,197, +12,250,22,252,33,2,2,4,6,19,19,108,105,115,116,32,111,102,32,105,100, +101,110,116,105,102,105,101,114,115,197,27,250,22,115,196,248,22,209,201,89,97, +40,32,32,9,222,87,94,28,249,22,5,89,162,32,33,36,9,223,7,249,22, +220,195,194,194,248,195,198,12,250,22,114,196,248,22,209,201,249,22,50,202,197, +195,11,98,68,35,37,107,101,114,110,101,108,190,74,35,37,115,109,97,108,108, +45,115,99,104,101,109,101,191,2,6,2,32,2,30,2,34,98,2,190,2,191, +2,6,2,32,2,30,2,34,0}; + EVAL_ONE_SIZED_STR((char *)expr, 8303); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,134,252,9,15,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,134,252,9,15,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,67,35,37,113,113,115, 116,120,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158,16,2,30, 3,2,2,79,99,104,101,99,107,45,115,112,108,105,99,105,110,103,45,108,105, 115,116,4,254,1,30,5,65,35,37,115,116,120,6,69,115,116,120,45,108,105, -115,116,63,7,8,16,0,11,11,16,1,2,4,33,11,16,4,75,113,117,97, -115,105,115,121,110,116,97,120,47,108,111,99,8,77,117,110,115,121,110,116,97, -120,45,115,112,108,105,99,105,110,103,9,68,117,110,115,121,110,116,97,120,10, +115,116,63,7,8,16,0,11,11,16,1,2,4,33,11,16,4,68,117,110,115, +121,110,116,97,120,8,77,117,110,115,121,110,116,97,120,45,115,112,108,105,99, +105,110,103,9,75,113,117,97,115,105,115,121,110,116,97,120,47,108,111,99,10, 71,113,117,97,115,105,115,121,110,116,97,120,11,16,4,11,11,11,11,16,4, -2,8,2,9,2,10,2,11,32,36,94,16,5,94,2,10,2,9,27,89,162, +2,8,2,9,2,10,2,11,32,36,94,16,5,94,2,8,2,9,27,89,162, 32,33,36,61,102,12,222,250,22,252,32,2,11,6,30,30,105,108,108,101,103, 97,108,32,111,117,116,115,105,100,101,32,111,102,32,113,117,97,115,105,115,121, 110,116,97,120,195,249,22,7,194,194,35,20,97,158,16,0,16,0,11,16,5, -94,2,11,2,8,27,89,162,32,35,42,62,113,113,13,223,1,27,83,160,41, +94,2,11,2,10,27,89,162,32,35,42,62,113,113,13,223,1,27,83,160,41, 32,33,40,251,91,159,33,11,20,12,95,33,192,89,162,32,36,57,64,108,111, 111,112,14,226,6,7,5,0,27,249,22,208,83,160,41,33,38,40,199,27,28, 248,80,158,38,32,194,28,27,248,80,158,39,33,195,28,248,80,158,39,34,193, @@ -1778,12 +1781,12 @@ 45,107,16,226,10,14,11,2,27,249,22,208,83,160,41,37,38,40,248,22,51, 248,80,158,40,38,21,93,63,117,113,115,17,27,249,22,208,83,160,41,38,39, 40,250,22,208,199,63,99,116,120,18,199,249,198,250,22,208,200,250,22,60,201, -83,160,41,39,45,40,206,200,249,22,50,27,250,22,60,200,201,202,27,83,160, +83,160,41,39,45,40,206,200,249,22,50,27,250,22,60,202,201,200,27,83,160, 41,40,43,40,250,22,208,83,160,41,41,46,40,250,22,208,83,160,41,42,49, 40,249,22,59,250,22,208,83,160,41,43,54,40,249,22,59,248,22,77,23,15, 83,160,41,44,56,40,83,160,41,45,54,40,250,22,208,83,160,41,46,54,40, -250,22,59,83,160,41,47,57,40,248,22,79,23,16,250,22,208,83,160,41,48, -8,28,40,249,22,59,83,160,41,49,8,30,40,248,22,51,23,21,83,160,41, +250,22,59,83,160,41,47,57,40,248,22,51,23,16,250,22,208,83,160,41,48, +8,28,40,249,22,59,83,160,41,49,8,30,40,248,22,79,23,21,83,160,41, 50,8,28,40,83,160,41,51,54,40,83,160,41,52,49,40,195,203,251,203,197, 23,16,89,162,32,32,36,9,224,5,4,249,194,195,9,196,27,89,162,32,34, 36,74,109,107,45,114,101,115,116,45,100,111,110,101,45,107,19,224,14,11,89, @@ -1848,45 +1851,45 @@ 110,116,97,120,45,105,100,45,114,117,108,101,115,41,76,35,37,115,116,120,99, 97,115,101,45,115,99,104,101,109,101,42,70,108,101,116,45,115,121,110,116,97, 120,43,2,42,71,119,105,116,104,45,115,121,110,116,97,120,44,2,36,66,115, -121,110,116,97,120,45,69,35,37,115,116,120,99,97,115,101,46,63,97,110,100, -47,71,35,37,113,113,45,97,110,100,45,111,114,48,71,115,116,120,45,118,101, -99,116,111,114,63,49,2,6,62,111,114,50,2,48,71,115,121,110,116,97,120, -45,99,97,115,101,51,68,35,37,115,116,120,108,111,99,52,74,115,116,120,45, -118,101,99,116,111,114,45,114,101,102,53,2,6,73,115,116,120,45,99,104,101, -99,107,47,101,115,99,54,2,6,2,30,2,6,2,26,2,6,70,115,116,120, -45,114,111,116,97,116,101,55,2,6,2,37,2,36,2,39,2,6,71,115,116, -120,45,114,111,116,97,116,101,42,56,2,6,2,32,2,6,2,34,2,6,2, -4,2,2,67,45,100,101,102,105,110,101,57,74,35,37,100,101,102,105,110,101, -45,101,116,45,97,108,58,74,45,100,101,102,105,110,101,45,115,121,110,116,97, -120,59,2,58,64,99,111,110,100,60,66,35,37,99,111,110,100,61,2,8,2, -2,2,28,2,6,73,100,101,102,105,110,101,45,115,116,114,117,99,116,62,2, -58,2,9,2,2,2,10,2,2,69,115,116,120,45,110,117,108,108,63,63,2, -6,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,64,2,42,70, -113,117,97,115,105,113,117,111,116,101,65,2,48,70,115,121,110,116,97,120,47, -108,111,99,66,2,52,2,7,2,6,73,108,101,116,114,101,99,45,115,121,110, -116,97,120,67,2,42,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116, -68,2,6,64,119,104,101,110,69,2,58,2,11,2,2,72,108,101,116,45,115, -121,110,116,97,120,101,115,70,2,42,66,117,110,108,101,115,115,71,2,58,72, -115,121,110,116,97,120,45,99,97,115,101,42,72,2,52,1,26,99,104,101,99, -107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101, -114,73,2,42,66,108,101,116,47,101,99,74,2,58,72,115,121,110,116,97,120, +121,110,116,97,120,45,69,35,37,115,116,120,99,97,115,101,46,71,115,116,120, +45,118,101,99,116,111,114,63,47,2,6,63,97,110,100,48,71,35,37,113,113, +45,97,110,100,45,111,114,49,71,115,121,110,116,97,120,45,99,97,115,101,50, +68,35,37,115,116,120,108,111,99,51,62,111,114,52,2,49,73,115,116,120,45, +99,104,101,99,107,47,101,115,99,53,2,6,2,30,2,6,2,26,2,6,70, +115,116,120,45,114,111,116,97,116,101,54,2,6,2,37,2,36,2,39,2,6, +71,115,116,120,45,114,111,116,97,116,101,42,55,2,6,74,115,116,120,45,118, +101,99,116,111,114,45,114,101,102,56,2,6,2,34,2,6,2,4,2,2,67, +45,100,101,102,105,110,101,57,74,35,37,100,101,102,105,110,101,45,101,116,45, +97,108,58,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,59,2,58, +64,99,111,110,100,60,66,35,37,99,111,110,100,61,2,28,2,6,2,32,2, +6,73,100,101,102,105,110,101,45,115,116,114,117,99,116,62,2,58,2,9,2, +2,2,8,2,2,69,115,116,120,45,110,117,108,108,63,63,2,6,75,108,101, +116,114,101,99,45,115,121,110,116,97,120,101,115,64,2,42,70,113,117,97,115, +105,113,117,111,116,101,65,2,49,70,115,121,110,116,97,120,47,108,111,99,66, +2,51,2,7,2,6,73,108,101,116,114,101,99,45,115,121,110,116,97,120,67, +2,42,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116,68,2,6,64, +119,104,101,110,69,2,58,2,11,2,2,72,108,101,116,45,115,121,110,116,97, +120,101,115,70,2,42,66,117,110,108,101,115,115,71,2,58,66,108,101,116,47, +101,99,72,2,58,2,10,2,2,1,26,99,104,101,99,107,45,100,117,112,108, +105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,73,2,42,72,115, +121,110,116,97,120,45,99,97,115,101,42,74,2,51,72,115,121,110,116,97,120, 45,114,117,108,101,115,75,2,42,69,115,116,120,45,62,108,105,115,116,76,2, 6,2,24,2,6,97,35,10,33,11,16,78,2,41,2,42,2,43,2,42,2, -44,2,36,2,45,2,46,2,47,2,48,2,49,2,6,2,50,2,48,2,51, -2,52,2,53,2,6,2,54,2,6,2,30,2,6,2,26,2,6,2,55,2, -6,2,37,2,36,2,39,2,6,2,56,2,6,2,32,2,6,2,34,2,6, -2,57,2,58,2,59,2,58,2,60,2,61,2,28,2,6,2,62,2,58,2, -63,2,6,2,64,2,42,2,65,2,48,2,66,2,52,2,7,2,6,2,67, +44,2,36,2,45,2,46,2,47,2,6,2,48,2,49,2,50,2,51,2,52, +2,49,2,53,2,6,2,30,2,6,2,26,2,6,2,54,2,6,2,37,2, +36,2,39,2,6,2,55,2,6,2,56,2,6,2,34,2,6,2,57,2,58, +2,59,2,58,2,60,2,61,2,28,2,6,2,32,2,6,2,62,2,58,2, +63,2,6,2,64,2,42,2,65,2,49,2,66,2,51,2,7,2,6,2,67, 2,42,2,68,2,6,2,69,2,58,2,70,2,42,2,71,2,58,2,72,2, -52,2,73,2,42,2,74,2,58,2,75,2,42,2,76,2,6,2,24,2,6, +58,2,73,2,42,2,74,2,51,2,75,2,42,2,76,2,6,2,24,2,6, 96,34,8,254,1,11,16,0,16,8,33,11,68,111,114,105,103,45,115,116,120, 77,64,98,111,100,121,78,68,109,107,45,102,105,110,97,108,79,3,1,7,101, 110,118,51,48,52,51,80,2,80,2,80,18,101,2,40,42,36,35,34,33,16, 4,41,11,68,104,101,114,101,45,115,116,120,81,3,1,7,101,110,118,51,48, 52,52,82,16,4,40,11,2,14,3,1,7,101,110,118,51,48,52,53,83,16, 10,39,11,63,115,116,120,84,65,100,101,112,116,104,85,2,22,2,21,3,1, -7,101,110,118,51,48,52,54,86,2,86,2,86,2,86,18,158,2,10,42,18, -158,2,10,42,18,158,2,9,42,18,104,2,40,46,36,35,34,33,41,40,39, +7,101,110,118,51,48,52,54,86,2,86,2,86,2,86,18,158,2,8,42,18, +158,2,8,42,18,158,2,9,42,18,104,2,40,46,36,35,34,33,41,40,39, 16,6,45,11,3,1,4,103,51,51,55,87,3,1,4,103,51,51,56,88,3, 1,7,101,110,118,51,48,54,57,89,2,89,16,6,44,11,61,120,90,64,114, 101,115,116,91,3,1,7,101,110,118,51,48,55,48,92,2,92,16,6,43,11, @@ -1902,7 +1905,7 @@ 158,2,18,51,18,158,2,18,51,18,158,2,4,51,18,158,2,18,51,18,158, 72,113,117,111,116,101,45,115,121,110,116,97,120,106,51,18,158,2,18,51,18, 158,2,18,51,18,158,2,18,51,18,158,2,9,42,18,158,2,11,42,18,106, -2,10,58,36,35,34,33,41,40,39,16,4,57,11,3,1,4,103,51,51,53, +2,8,58,36,35,34,33,41,40,39,16,4,57,11,3,1,4,103,51,51,53, 107,3,1,7,101,110,118,51,49,49,55,108,16,4,56,11,65,95,101,108,115, 101,109,3,1,7,101,110,118,51,49,49,56,110,16,4,55,11,2,20,3,1, 7,101,110,118,51,49,50,49,111,16,4,54,11,61,108,112,3,1,7,101,110, @@ -1929,14 +1932,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 3861); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,207,252,210,29,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,207,252,203,29,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,68,35,37,100,101,102, 105,110,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158,16,0, -16,0,11,11,16,0,32,11,16,4,66,100,101,102,105,110,101,3,73,100,101, -102,105,110,101,45,115,121,110,116,97,120,4,76,98,101,103,105,110,45,102,111, +16,0,11,11,16,0,32,11,16,4,73,100,101,102,105,110,101,45,115,121,110, +116,97,120,3,66,100,101,102,105,110,101,4,76,98,101,103,105,110,45,102,111, 114,45,115,121,110,116,97,120,5,77,100,101,102,105,110,101,45,102,111,114,45, 115,121,110,116,97,120,6,16,4,11,11,11,11,16,4,2,3,2,4,2,5, -2,6,32,36,94,16,5,95,2,3,2,4,2,6,27,89,162,32,33,34,62, +2,6,32,36,94,16,5,95,2,4,2,3,2,6,27,89,162,32,33,34,62, 109,107,7,223,1,89,162,32,33,8,31,9,224,0,1,87,94,28,249,22,70, 247,22,252,72,3,21,93,70,101,120,112,114,101,115,115,105,111,110,8,250,22, 252,32,2,11,6,36,36,110,111,116,32,97,108,108,111,119,101,100,32,105,110, @@ -1954,350 +1957,349 @@ 28,248,80,158,38,32,194,249,80,158,39,33,248,80,158,40,34,196,27,248,80, 158,41,35,197,28,248,80,158,41,36,193,248,80,158,41,37,193,11,11,28,192, 27,248,22,51,194,27,248,22,52,195,249,22,7,248,22,215,27,83,160,41,34, -43,45,250,22,208,83,160,41,35,46,45,199,195,89,162,32,33,54,9,225,9, +43,45,250,22,208,83,160,41,35,46,45,199,195,89,162,32,33,52,9,225,9, 8,2,27,249,22,208,83,160,41,36,37,45,198,249,80,158,37,38,196,27,249, -22,60,197,198,27,83,160,41,37,39,45,250,22,208,83,160,41,38,42,45,250, -22,208,83,160,41,39,45,45,250,22,61,83,160,41,40,48,45,248,22,52,203, -248,22,51,203,83,160,41,41,45,45,195,27,28,248,80,158,39,32,195,249,80, -158,40,33,248,80,158,41,34,197,27,248,80,158,42,35,198,91,159,35,11,90, -161,35,32,11,250,80,158,47,39,198,33,11,28,194,27,28,248,22,205,197,196, -201,27,28,248,80,158,47,36,195,248,22,58,248,80,158,48,37,196,11,28,192, -249,80,158,48,40,194,250,22,208,198,200,198,11,11,11,28,192,27,248,22,51, -194,27,248,22,77,195,27,248,22,79,196,249,22,7,248,22,215,27,249,22,60, -198,199,27,83,160,41,42,46,45,250,22,208,83,160,41,43,49,45,249,22,64, -248,22,52,199,248,22,59,248,22,51,200,195,89,162,32,33,57,9,226,11,10, -2,3,27,249,22,208,83,160,41,44,38,45,199,249,80,158,38,38,197,27,250, -22,60,200,198,199,27,83,160,41,45,40,45,250,22,208,83,160,41,46,43,45, -250,22,208,83,160,41,47,46,45,250,22,61,83,160,41,48,49,45,249,22,64, -248,22,79,205,248,22,51,205,248,22,77,203,83,160,41,49,46,45,195,250,22, -252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,87,95,249, -22,3,89,162,32,33,39,9,224,5,4,28,248,80,158,34,41,195,12,251,22, -252,32,2,11,6,40,40,110,111,116,32,97,110,32,105,100,101,110,116,105,102, -105,101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,97,114,103, -117,109,101,110,116,196,198,194,27,248,80,158,37,42,194,28,192,251,22,252,32, -2,11,6,29,29,100,117,112,108,105,99,97,116,101,32,97,114,103,117,109,101, -110,116,32,105,100,101,110,116,105,102,105,101,114,199,196,12,193,89,162,32,33, -48,73,103,101,110,101,114,97,108,45,112,114,111,116,111,11,226,11,9,1,0, -27,249,22,208,83,160,41,50,38,45,199,27,89,162,32,32,53,2,9,228,5, -4,3,2,6,1,27,28,248,80,158,39,32,194,27,27,248,80,158,41,34,196, -28,248,80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195,27,248,80, -158,44,35,196,248,22,58,250,22,208,199,196,199,11,28,192,249,80,158,41,40, -194,27,248,80,158,43,35,198,250,22,208,200,195,200,11,11,28,192,27,248,22, -51,194,27,248,22,77,195,27,248,22,79,196,91,159,34,11,90,161,34,32,11, -248,202,27,249,22,60,200,199,27,83,160,41,51,46,45,250,22,208,83,160,41, -52,49,45,250,22,208,83,160,41,53,52,45,199,83,160,41,54,52,45,195,27, -248,202,201,249,22,7,195,89,162,32,33,38,9,224,4,2,248,194,248,22,58, -248,195,197,27,28,248,80,158,40,32,195,249,80,158,41,33,248,80,158,42,34, -197,27,248,80,158,43,35,198,250,22,208,200,195,200,11,28,192,27,248,22,51, -194,27,248,22,52,195,251,22,252,32,2,11,6,82,82,98,97,100,32,115,121, -110,116,97,120,32,40,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105, -101,114,32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,110,97,109,101, -44,32,97,110,100,32,110,111,116,32,97,32,110,101,115,116,101,100,32,112,114, -111,99,101,100,117,114,101,32,102,111,114,109,41,204,197,250,22,252,32,2,11, -6,10,10,98,97,100,32,115,121,110,116,97,120,197,27,28,248,80,158,39,32, -195,249,80,158,40,33,248,80,158,41,34,197,27,248,80,158,42,35,198,250,22, -208,200,195,200,11,28,192,27,248,22,51,194,27,248,22,52,195,28,248,80,158, -41,41,194,249,22,7,195,248,200,204,247,195,247,193,87,95,28,248,80,158,42, -36,195,12,250,22,252,32,2,11,6,50,50,98,97,100,32,115,121,110,116,97, -120,32,40,105,108,108,101,103,97,108,32,117,115,101,32,111,102,32,96,46,39, -32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,98,111,100,121,41,202, -28,248,80,158,42,43,195,250,22,252,32,2,11,6,46,46,98,97,100,32,115, -121,110,116,97,120,32,40,110,111,32,101,120,112,114,101,115,115,105,111,110,115, -32,102,111,114,32,112,114,111,99,101,100,117,114,101,32,98,111,100,121,41,202, -12,27,249,22,208,83,160,41,55,44,45,203,27,249,22,208,83,160,41,56,45, -45,196,27,249,22,208,83,160,41,57,46,45,248,199,200,249,80,158,46,38,204, -27,250,22,60,199,198,200,27,83,160,41,58,48,45,250,22,208,83,160,41,59, -51,45,250,22,208,83,160,41,8,28,54,45,250,22,59,248,22,79,203,250,22, -208,83,160,41,8,29,8,28,45,248,22,59,248,22,51,23,15,83,160,41,8, -30,8,28,45,248,22,77,203,83,160,41,8,31,54,45,195,250,22,252,32,2, -11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,27,28,248,80,158,38, -32,195,249,80,158,39,33,248,80,158,40,34,197,27,248,80,158,41,35,198,28, -248,80,158,41,32,193,27,28,248,22,205,194,193,198,249,80,158,43,33,248,80, -158,44,34,196,27,248,80,158,45,35,197,250,22,208,198,195,198,11,11,28,192, -27,248,22,51,194,27,248,22,77,195,27,248,22,79,196,28,248,80,158,41,32, -194,247,196,251,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97, -120,202,197,247,193,27,28,248,80,158,38,32,195,249,80,158,39,33,248,80,158, -40,34,197,27,248,80,158,41,35,198,28,248,80,158,41,32,193,27,28,248,22, -205,194,193,198,249,80,158,43,33,248,80,158,44,34,196,27,248,80,158,45,35, -197,250,22,208,198,195,198,11,11,28,192,27,248,22,51,194,27,248,22,77,195, -27,248,22,79,196,28,248,80,158,41,41,194,250,22,252,32,2,11,27,249,22, -208,83,160,41,8,32,46,45,204,27,28,248,80,158,46,32,194,249,80,158,47, -33,248,80,158,48,34,196,27,248,80,158,49,35,197,28,248,80,158,49,32,193, -249,80,158,50,33,248,80,158,51,34,195,27,248,80,158,52,35,196,28,248,80, -158,52,36,193,248,80,158,52,37,193,11,11,11,28,192,27,248,22,51,194,27, -248,22,77,195,27,248,22,79,196,6,50,50,98,97,100,32,115,121,110,116,97, -120,32,40,109,117,108,116,105,112,108,101,32,101,120,112,114,101,115,115,105,111, -110,115,32,97,102,116,101,114,32,105,100,101,110,116,105,102,105,101,114,41,27, -28,248,80,158,47,32,195,249,80,158,48,33,248,80,158,49,34,197,27,248,80, -158,50,35,198,28,248,80,158,50,32,193,27,248,80,158,51,34,194,28,192,249, -80,158,52,40,194,248,80,158,53,44,248,80,158,54,35,197,11,11,11,28,192, -27,248,22,51,194,27,248,22,52,195,6,46,46,98,97,100,32,115,121,110,116, -97,120,32,40,122,101,114,111,32,101,120,112,114,101,115,115,105,111,110,115,32, -97,102,116,101,114,32,105,100,101,110,116,105,102,105,101,114,41,27,28,248,80, -158,48,32,196,249,80,158,49,33,248,80,158,50,34,198,27,248,80,158,51,35, -199,28,248,80,158,51,32,193,27,28,248,22,205,194,193,199,249,80,158,53,33, -248,80,158,54,34,196,27,248,80,158,55,35,197,250,22,208,198,195,198,11,11, -28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,79,196,6,31,31,98, -97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103,97,108,32,117,115, -101,32,111,102,32,96,46,39,41,250,22,252,32,2,11,6,10,10,98,97,100, -32,115,121,110,116,97,120,198,201,247,196,247,193,27,28,248,80,158,37,32,195, -249,80,158,38,33,248,80,158,39,34,197,27,248,80,158,40,35,198,28,248,80, -158,40,32,193,249,80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35, -196,28,248,80,158,43,32,193,27,248,80,158,44,34,194,28,192,249,80,158,45, -40,194,248,80,158,46,44,248,80,158,47,35,197,11,11,11,11,28,192,27,248, -22,51,194,27,248,22,77,195,27,248,22,79,196,28,248,80,158,40,41,194,27, -249,22,208,83,160,41,8,33,42,45,201,249,80,158,42,38,203,27,250,22,60, -198,200,199,27,83,160,41,8,34,44,45,250,22,208,83,160,41,8,35,47,45, -250,22,208,83,160,41,8,36,50,45,250,22,59,248,22,51,203,250,22,208,83, -160,41,8,37,56,45,248,22,59,248,22,77,23,15,83,160,41,8,38,56,45, -248,22,79,203,83,160,41,8,39,50,45,195,247,196,247,193,250,22,7,248,196, -83,160,41,8,40,37,45,248,196,83,160,41,8,41,37,45,248,196,83,160,41, -8,42,37,45,37,20,97,158,16,13,30,12,65,35,37,115,116,120,13,69,115, -116,120,45,112,97,105,114,63,14,11,30,15,2,13,67,99,111,110,115,47,35, -102,16,1,30,17,2,13,67,115,116,120,45,99,97,114,18,5,30,19,2,13, -67,115,116,120,45,99,100,114,20,6,30,21,2,13,69,115,116,120,45,108,105, -115,116,63,22,8,30,23,2,13,69,115,116,120,45,62,108,105,115,116,24,4, -30,25,68,35,37,115,116,120,108,111,99,26,68,114,101,108,111,99,97,116,101, -27,1,30,28,2,13,74,115,112,108,105,116,45,115,116,120,45,108,105,115,116, -29,3,30,30,2,13,69,97,112,112,101,110,100,47,35,102,31,0,30,32,2, -13,71,105,100,101,110,116,105,102,105,101,114,63,33,2,30,34,76,35,37,115, -116,120,99,97,115,101,45,115,99,104,101,109,101,35,1,26,99,104,101,99,107, -45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114, -36,0,30,37,2,13,69,115,116,120,45,110,117,108,108,63,38,10,30,39,2, -13,71,115,116,120,45,110,117,108,108,47,35,102,40,9,16,43,18,99,64,104, -101,114,101,41,39,97,37,10,32,11,16,8,2,3,2,2,2,4,2,2,2, -5,2,2,2,6,2,2,97,36,10,33,11,16,86,75,115,121,110,116,97,120, -45,105,100,45,114,117,108,101,115,42,2,35,70,108,101,116,45,115,121,110,116, -97,120,43,2,35,71,119,105,116,104,45,115,121,110,116,97,120,44,70,35,37, -119,105,116,104,45,115,116,120,45,66,115,121,110,116,97,120,46,69,35,37,115, -116,120,99,97,115,101,47,63,97,110,100,48,71,35,37,113,113,45,97,110,100, -45,111,114,49,71,115,116,120,45,118,101,99,116,111,114,63,50,2,13,62,111, -114,51,2,49,71,115,121,110,116,97,120,45,99,97,115,101,52,2,26,74,115, -116,120,45,118,101,99,116,111,114,45,114,101,102,53,2,13,73,115,116,120,45, -99,104,101,99,107,47,101,115,99,54,2,13,2,20,2,13,2,18,2,13,70, -115,116,120,45,114,111,116,97,116,101,55,2,13,1,20,103,101,110,101,114,97, -116,101,45,116,101,109,112,111,114,97,114,105,101,115,56,2,45,2,16,2,13, -71,115,116,120,45,114,111,116,97,116,101,42,57,2,13,2,31,2,13,2,40, -2,13,67,45,100,101,102,105,110,101,58,74,35,37,100,101,102,105,110,101,45, -101,116,45,97,108,59,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120, -60,2,59,64,99,111,110,100,61,66,35,37,99,111,110,100,62,75,113,117,97, -115,105,115,121,110,116,97,120,47,108,111,99,63,67,35,37,113,113,115,116,120, -64,2,33,2,13,73,100,101,102,105,110,101,45,115,116,114,117,99,116,65,2, -59,77,117,110,115,121,110,116,97,120,45,115,112,108,105,99,105,110,103,66,2, -64,68,117,110,115,121,110,116,97,120,67,2,64,2,38,2,13,75,108,101,116, -114,101,99,45,115,121,110,116,97,120,101,115,68,2,35,70,113,117,97,115,105, -113,117,111,116,101,69,2,49,70,115,121,110,116,97,120,47,108,111,99,70,2, -26,2,22,2,13,73,108,101,116,114,101,99,45,115,121,110,116,97,120,71,2, -35,2,29,2,13,64,119,104,101,110,72,2,59,71,113,117,97,115,105,115,121, -110,116,97,120,73,2,64,72,108,101,116,45,115,121,110,116,97,120,101,115,74, -2,35,66,117,110,108,101,115,115,75,2,59,72,115,121,110,116,97,120,45,99, -97,115,101,42,76,2,26,2,36,2,35,66,108,101,116,47,101,99,77,2,59, -72,115,121,110,116,97,120,45,114,117,108,101,115,78,2,35,2,24,2,13,2, -14,2,13,96,35,8,254,1,11,16,0,16,4,34,11,77,100,101,102,105,110, -101,45,118,97,108,117,101,115,45,115,116,120,79,3,1,7,101,110,118,51,49, -54,53,80,16,4,33,11,63,115,116,120,81,3,1,7,101,110,118,51,49,54, -54,82,18,102,2,41,43,37,36,35,34,33,16,8,42,11,3,1,4,103,51, -53,49,83,3,1,4,103,51,53,50,84,3,1,4,103,51,53,51,85,3,1, -7,101,110,118,51,49,56,49,86,2,86,2,86,16,8,41,11,61,95,87,65, -112,114,111,116,111,88,64,98,111,100,121,89,3,1,7,101,110,118,51,49,56, -50,90,2,90,2,90,16,6,40,11,2,10,2,11,3,1,7,101,110,118,51, -49,56,55,91,2,91,18,16,2,95,66,115,114,99,116,97,103,92,44,93,8, -252,134,8,95,9,8,252,134,8,2,47,18,104,64,100,101,115,116,93,48,37, -36,35,34,33,42,41,16,6,47,11,2,10,2,11,2,91,2,91,16,6,46, -11,3,1,4,103,51,54,54,94,3,1,4,103,51,54,55,95,3,1,7,101, -110,118,51,49,57,52,96,2,96,16,6,45,11,62,105,100,97,63,97,114,103, -98,3,1,7,101,110,118,51,49,57,53,99,2,99,18,158,2,41,48,18,16, -2,95,2,92,49,93,8,252,140,8,95,9,8,252,140,8,2,47,18,158,2, -93,48,18,158,63,99,116,120,100,48,18,158,66,108,97,109,98,100,97,101,48, -18,158,2,100,48,18,16,2,95,2,92,50,93,8,252,141,8,95,9,8,252, -141,8,2,47,18,104,2,93,53,37,36,35,34,33,42,41,47,16,8,52,11, -3,1,4,103,51,54,51,102,3,1,4,103,51,54,52,103,3,1,4,103,51, -54,53,104,3,1,7,101,110,118,51,50,50,49,105,2,105,2,105,16,8,51, -11,2,97,2,98,64,114,101,115,116,106,3,1,7,101,110,118,51,50,50,50, -107,2,107,2,107,18,158,2,41,53,18,16,2,95,2,92,54,93,8,252,147, -8,95,9,8,252,147,8,2,47,18,158,2,93,53,18,158,2,100,53,18,158, -2,101,53,18,158,2,100,53,18,158,2,41,43,18,16,2,95,2,92,55,93, -8,252,159,8,95,9,8,252,159,8,2,47,18,104,2,93,58,37,36,35,34, -33,42,41,40,16,8,57,11,3,1,4,103,51,55,54,108,3,1,4,103,51, -55,55,109,3,1,4,103,51,55,56,110,3,1,7,101,110,118,51,50,53,52, -111,2,111,2,111,16,8,56,11,69,115,111,109,101,116,104,105,110,103,112,64, -109,111,114,101,113,2,106,3,1,7,101,110,118,51,50,53,53,114,2,114,2, -114,18,158,2,100,58,18,158,2,100,58,18,102,2,41,8,28,37,36,35,34, -33,42,41,16,6,59,11,2,97,66,109,107,45,114,104,115,115,3,1,7,101, -110,118,51,49,56,54,116,2,116,18,158,2,41,8,28,18,158,2,41,8,28, -18,16,2,95,2,92,8,29,93,8,252,178,8,95,9,8,252,178,8,2,47, -18,158,2,93,8,28,18,158,2,100,8,28,18,158,2,100,8,28,18,158,2, -100,8,28,18,158,2,100,8,28,18,101,2,41,8,32,37,36,35,34,33,16, -8,8,31,11,3,1,4,103,51,53,55,117,3,1,4,103,51,53,56,118,3, -1,4,103,51,53,57,119,3,1,7,101,110,118,51,51,50,57,120,2,120,2, -120,16,8,8,30,11,2,87,2,97,2,106,3,1,7,101,110,118,51,51,51, -48,121,2,121,2,121,18,101,2,41,8,35,37,36,35,34,33,16,8,8,34, -11,3,1,4,103,51,54,48,122,3,1,4,103,51,54,49,123,3,1,4,103, -51,54,50,124,3,1,7,101,110,118,51,51,54,56,125,2,125,2,125,16,8, -8,33,11,2,87,2,97,64,101,120,112,114,126,3,1,7,101,110,118,51,51, -54,57,127,2,127,2,127,18,16,2,95,2,92,8,36,93,8,252,202,8,95, -9,8,252,202,8,2,47,18,158,2,93,8,35,18,158,2,100,8,35,18,158, -2,100,8,35,18,158,2,100,8,35,18,158,2,100,8,35,18,98,73,100,101, -102,105,110,101,45,118,97,108,117,101,115,128,8,38,37,36,35,16,4,8,37, -11,2,7,3,1,7,101,110,118,51,49,54,52,129,18,158,75,100,101,102,105, -110,101,45,115,121,110,116,97,120,101,115,130,8,38,18,158,1,24,100,101,102, -105,110,101,45,118,97,108,117,101,115,45,102,111,114,45,115,121,110,116,97,120, -131,8,38,11,16,5,93,2,5,89,162,32,33,8,35,9,223,0,27,247,22, -252,72,3,87,94,28,249,22,70,194,21,95,66,109,111,100,117,108,101,132,72, -109,111,100,117,108,101,45,98,101,103,105,110,133,69,116,111,112,45,108,101,118, -101,108,134,12,250,22,252,32,2,11,6,51,51,97,108,108,111,119,101,100,32, -111,110,108,121,32,97,116,32,116,104,101,32,116,111,112,45,108,101,118,101,108, -32,111,114,32,97,32,109,111,100,117,108,101,32,116,111,112,45,108,101,118,101, -108,197,27,249,22,208,83,160,41,32,36,42,197,27,28,248,80,158,36,32,194, -27,248,80,158,37,33,195,28,192,249,80,158,38,34,194,248,80,158,39,35,248, -80,158,40,36,198,11,11,28,192,83,160,41,33,35,42,27,89,162,32,32,52, -2,9,225,4,5,2,27,28,248,80,158,36,32,194,249,80,158,37,37,248,80, -158,38,33,196,27,248,80,158,39,36,197,28,248,80,158,39,38,193,248,80,158, -39,39,193,11,11,28,192,27,248,22,51,194,27,248,22,52,195,249,80,158,39, -40,198,27,83,160,41,34,40,42,250,22,208,83,160,41,35,43,42,250,22,208, -83,160,41,36,46,42,249,22,55,83,160,41,37,48,42,249,22,2,89,162,33, -33,41,9,223,18,250,22,208,83,160,41,38,35,42,249,22,59,83,160,41,39, -37,42,248,22,51,199,83,160,41,40,35,42,205,83,160,41,41,46,42,195,250, -22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,27,28, -248,80,158,38,32,196,249,80,158,39,37,248,80,158,40,33,198,27,248,80,158, -41,36,199,28,248,80,158,41,32,193,27,248,80,158,42,33,194,28,192,249,80, -158,43,34,194,248,80,158,44,35,248,80,158,45,36,197,11,11,11,28,192,27, -248,22,51,194,27,248,22,52,195,28,249,22,252,5,2,200,2,133,247,195,27, -250,22,252,19,2,196,202,248,22,215,83,160,41,42,44,42,27,249,22,208,83, -160,41,43,43,42,195,27,27,22,223,28,248,80,158,44,32,195,28,27,248,80, -158,45,33,196,28,248,80,158,45,41,193,28,249,195,194,83,160,41,44,46,42, -9,11,11,27,248,80,158,45,36,196,28,248,80,158,45,38,193,248,80,158,45, -39,193,11,11,11,28,192,27,83,160,41,45,43,42,250,22,208,83,160,41,46, -46,42,250,22,208,83,160,41,47,49,42,249,22,55,83,160,41,48,51,42,201, -83,160,41,49,49,42,195,27,27,22,223,28,248,80,158,45,32,196,28,27,248, -80,158,46,33,197,28,248,80,158,46,41,193,28,249,195,194,83,160,41,50,47, -42,9,11,11,27,248,80,158,46,36,197,28,248,80,158,46,32,193,27,27,248, -80,158,48,33,195,28,248,80,158,48,38,193,248,22,58,248,80,158,49,39,194, -11,28,192,249,80,158,48,34,194,27,248,80,158,50,36,197,28,248,80,158,50, -32,193,27,248,80,158,51,33,194,28,192,249,80,158,52,34,194,248,80,158,53, -35,248,80,158,54,36,197,11,11,11,11,11,11,28,192,27,248,22,51,194,27, -248,22,52,195,27,249,22,60,196,195,27,83,160,41,51,47,42,250,22,208,83, -160,41,52,50,42,250,22,208,83,160,41,53,53,42,250,22,59,83,160,41,54, -56,42,248,22,51,203,248,22,52,203,83,160,41,55,53,42,195,27,27,22,223, -28,248,80,158,46,32,197,28,27,248,80,158,47,33,198,28,248,80,158,47,41, -193,28,249,195,194,83,160,41,56,48,42,9,11,11,27,248,80,158,47,36,198, -28,248,80,158,47,38,193,248,80,158,47,39,193,11,11,11,28,192,27,83,160, -41,57,45,42,250,22,208,83,160,41,58,48,42,250,22,208,83,160,41,59,51, -42,249,22,55,83,160,41,8,28,53,42,201,83,160,41,8,29,51,42,195,27, -27,22,223,28,248,80,158,47,32,198,28,27,248,80,158,48,33,199,28,248,80, -158,48,41,193,28,249,195,194,83,160,41,8,30,49,42,9,11,11,27,248,80, -158,48,36,199,28,248,80,158,48,38,193,248,80,158,48,39,193,11,11,11,28, -192,27,83,160,41,8,31,46,42,250,22,208,83,160,41,8,32,49,42,250,22, -208,83,160,41,8,33,52,42,249,22,55,83,160,41,8,34,54,42,201,83,160, -41,8,35,52,42,195,27,27,22,223,28,248,80,158,48,32,199,28,27,248,80, -158,49,33,200,28,248,80,158,49,41,193,28,249,195,194,83,160,41,8,36,50, -42,9,11,11,27,248,80,158,49,36,200,28,248,80,158,49,32,193,27,27,248, -80,158,51,33,195,28,248,80,158,51,38,193,248,22,58,248,80,158,52,39,194, -11,28,192,249,80,158,51,34,194,27,248,80,158,53,36,197,28,248,80,158,53, -32,193,27,248,80,158,54,33,194,28,192,249,80,158,55,34,194,248,80,158,56, -35,248,80,158,57,36,197,11,11,11,11,11,11,28,192,27,248,22,51,194,27, -248,22,52,195,250,22,252,32,2,11,6,54,54,115,121,110,116,97,120,32,100, -101,102,105,110,105,116,105,111,110,115,32,110,111,116,32,97,108,108,111,119,101, -100,32,119,105,116,104,105,110,32,98,101,103,105,110,45,102,111,114,45,115,121, -110,116,97,120,204,27,83,160,41,8,37,47,42,250,22,208,83,160,41,8,38, -50,42,250,22,208,83,160,41,8,39,53,42,250,22,59,83,160,41,8,40,56, -42,83,160,41,8,41,56,42,250,22,208,83,160,41,8,42,59,42,250,22,61, -83,160,41,8,43,8,30,42,23,21,83,160,41,8,44,8,30,42,83,160,41, -8,45,59,42,83,160,41,8,46,53,42,195,247,193,32,20,97,158,16,10,2, -12,2,17,2,30,2,39,2,19,2,15,2,21,2,23,2,25,2,32,16,47, -18,99,2,41,8,41,37,36,35,16,4,8,40,11,2,81,3,1,7,101,110, -118,51,51,56,54,135,16,4,8,39,11,2,100,3,1,7,101,110,118,51,51, -56,55,136,18,158,93,16,2,101,2,0,8,44,37,36,35,8,40,8,39,16, -4,8,43,11,3,1,4,103,52,48,53,137,3,1,7,101,110,118,51,51,57, -51,138,16,4,8,42,11,2,87,3,1,7,101,110,118,51,51,57,52,139,9, -8,44,18,16,2,95,2,92,8,45,93,8,252,216,8,95,9,8,252,216,8, -2,47,18,101,2,93,8,48,37,36,35,8,40,8,39,16,6,8,47,11,3, -1,4,103,52,48,49,140,3,1,4,103,52,48,50,141,3,1,7,101,110,118, -51,52,48,50,142,2,142,16,6,8,46,11,2,87,64,101,108,101,109,143,3, -1,7,101,110,118,51,52,48,51,144,2,144,18,158,2,100,8,48,18,158,2, -0,8,48,18,158,2,100,8,48,18,158,2,5,8,48,18,158,2,100,8,48, -18,158,2,100,8,48,18,158,110,16,2,101,2,0,8,51,37,36,35,8,40, -8,39,16,6,8,50,11,3,1,4,103,52,48,51,145,3,1,4,103,52,48, -52,146,3,1,7,101,110,118,51,52,49,52,147,2,147,16,6,8,49,11,2, -87,2,143,3,1,7,101,110,118,51,52,49,53,148,2,148,9,16,2,158,2, -128,8,51,9,16,2,158,2,130,8,51,9,16,2,158,2,131,8,51,9,16, -2,158,64,115,101,116,33,149,8,51,9,16,2,158,70,108,101,116,45,118,97, -108,117,101,115,150,8,51,9,16,2,158,71,108,101,116,42,45,118,97,108,117, -101,115,151,8,51,9,16,2,158,73,108,101,116,114,101,99,45,118,97,108,117, -101,115,152,8,51,9,16,2,158,2,101,8,51,9,16,2,158,71,99,97,115, -101,45,108,97,109,98,100,97,153,8,51,9,16,2,158,62,105,102,154,8,51, -9,16,2,158,65,113,117,111,116,101,155,8,51,9,16,2,158,1,22,108,101, -116,114,101,99,45,115,121,110,116,97,120,101,115,43,118,97,108,117,101,115,156, -8,51,9,16,2,158,76,102,108,117,105,100,45,108,101,116,45,115,121,110,116, -97,120,157,8,51,9,16,2,158,1,22,119,105,116,104,45,99,111,110,116,105, -110,117,97,116,105,111,110,45,109,97,114,107,158,8,51,9,16,2,158,65,35, -37,97,112,112,159,8,51,9,16,2,158,65,35,37,116,111,112,160,8,51,9, -16,2,158,67,35,37,100,97,116,117,109,161,8,51,9,8,51,18,102,2,41, -8,53,37,36,35,8,40,8,39,8,50,8,49,16,4,8,52,11,61,101,162, -3,1,7,101,110,118,51,52,49,56,163,18,158,2,0,8,53,18,16,2,95, -2,92,8,54,93,8,252,233,8,95,9,8,252,233,8,2,47,18,104,2,93, -8,57,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,56,11,3, -1,4,103,52,49,51,164,3,1,7,101,110,118,51,52,50,52,165,16,4,8, -55,11,61,118,166,3,1,7,101,110,118,51,52,50,53,167,18,158,2,100,8, -57,18,158,2,5,8,57,18,158,2,100,8,57,18,158,2,128,8,53,18,16, -2,95,2,92,8,58,93,8,252,234,8,95,9,8,252,234,8,2,47,18,104, -2,93,8,61,37,36,35,8,40,8,39,8,50,8,49,8,52,16,6,8,60, -11,3,1,4,103,52,49,49,168,3,1,4,103,52,49,50,169,3,1,7,101, -110,118,51,52,51,55,170,2,170,16,6,8,59,11,2,97,2,126,3,1,7, -101,110,118,51,52,51,56,171,2,171,18,158,2,100,8,61,18,158,2,131,8, -61,18,158,2,100,8,61,18,158,67,114,101,113,117,105,114,101,172,8,53,18, -16,2,95,2,92,8,62,93,8,252,235,8,95,9,8,252,235,8,2,47,18, -104,2,93,8,65,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8, -64,11,3,1,4,103,52,49,48,173,3,1,7,101,110,118,51,52,52,55,174, -16,4,8,63,11,2,166,3,1,7,101,110,118,51,52,52,56,175,18,158,2, -100,8,65,18,158,78,114,101,113,117,105,114,101,45,102,111,114,45,115,121,110, -116,97,120,176,8,65,18,158,2,100,8,65,18,158,1,20,114,101,113,117,105, -114,101,45,102,111,114,45,116,101,109,112,108,97,116,101,177,8,53,18,16,2, -95,2,92,8,66,93,8,252,236,8,95,9,8,252,236,8,2,47,18,104,2, -93,8,69,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,68,11, -3,1,4,103,52,48,57,178,3,1,7,101,110,118,51,52,53,54,179,16,4, -8,67,11,2,166,3,1,7,101,110,118,51,52,53,55,180,18,158,2,100,8, -69,18,158,2,172,8,69,18,158,2,100,8,69,18,158,2,130,8,53,18,16, -2,95,2,92,8,70,93,8,252,238,8,95,9,8,252,238,8,2,47,18,104, -2,93,8,73,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4,8,72, -11,3,1,4,103,52,48,54,181,3,1,7,101,110,118,51,52,55,52,182,16, -4,8,71,11,65,111,116,104,101,114,183,3,1,7,101,110,118,51,52,55,53, -184,18,158,2,100,8,73,18,158,2,131,8,73,18,158,9,8,73,18,158,2, -100,8,73,18,158,2,0,8,73,18,16,2,103,93,16,2,158,93,16,2,158, -66,118,97,108,117,101,115,185,8,73,9,8,73,9,8,81,97,8,80,10,32, -11,16,58,2,46,29,186,11,11,2,48,2,49,2,50,2,13,2,51,2,49, -2,18,2,13,2,53,2,13,73,115,121,110,116,97,120,45,99,97,115,101,42, -42,187,2,186,2,20,2,13,2,55,2,13,2,54,2,13,2,16,2,13,2, -57,2,13,2,31,2,13,2,29,2,13,2,58,2,59,2,60,2,59,2,61, -2,62,2,33,2,13,1,20,101,108,108,105,112,115,105,115,45,99,111,117,110, -116,45,101,114,114,111,114,188,2,186,2,14,2,13,2,38,2,13,2,69,2, -49,2,40,2,13,2,75,2,59,2,72,2,59,2,65,2,59,2,22,2,13, -2,77,2,59,2,24,2,13,97,8,79,10,33,11,16,70,79,109,97,107,101, -45,115,121,110,116,97,120,45,109,97,112,112,105,110,103,189,64,35,37,115,99, -190,2,48,2,49,2,50,2,13,2,51,2,49,2,18,2,13,2,53,2,13, -2,20,2,13,2,55,2,13,2,54,2,13,2,16,2,13,72,110,111,45,101, -108,108,105,112,115,101,115,63,191,2,190,2,57,2,13,2,31,2,13,2,29, -2,13,72,115,116,120,45,109,101,109,113,45,112,111,115,192,2,190,2,58,2, -59,2,60,2,59,2,61,2,62,2,33,2,13,74,109,97,107,101,45,109,97, -116,99,104,38,101,110,118,193,2,190,2,14,2,13,2,38,2,13,2,69,2, -49,1,20,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,100,101,112, -116,104,194,2,190,2,40,2,13,72,109,97,107,101,45,112,101,120,112,97,110, -100,195,2,190,2,75,2,59,2,72,2,59,75,115,121,110,116,97,120,45,109, -97,112,112,105,110,103,63,196,2,190,1,21,115,121,110,116,97,120,45,109,97, -112,112,105,110,103,45,118,97,108,118,97,114,197,2,190,2,65,2,59,2,22, -2,13,2,77,2,59,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115, -198,2,190,2,24,2,13,96,8,78,8,254,1,11,16,0,16,4,8,77,11, -61,120,199,3,1,6,101,110,118,51,56,48,200,16,4,8,76,11,68,104,101, -114,101,45,115,116,120,201,3,1,6,101,110,118,51,56,50,202,16,4,8,75, -11,2,201,2,202,13,16,3,33,2,186,2,47,93,8,252,238,8,16,6,8, -74,11,61,114,203,63,115,114,99,204,3,1,7,101,110,118,51,52,55,56,205, -2,205,95,9,8,252,238,8,2,47,18,158,2,100,8,73,18,158,2,100,8, -73,11,9,93,68,35,37,107,101,114,110,101,108,206,96,2,206,2,35,2,13, -2,64,0}; - EVAL_ONE_SIZED_STR((char *)expr, 7646); +22,60,198,197,27,83,160,41,37,39,45,250,22,208,83,160,41,38,42,45,250, +22,208,83,160,41,39,45,45,249,22,55,83,160,41,40,47,45,201,83,160,41, +41,45,45,195,27,28,248,80,158,39,32,195,249,80,158,40,33,248,80,158,41, +34,197,27,248,80,158,42,35,198,91,159,35,11,90,161,35,32,11,250,80,158, +47,39,198,33,11,28,194,27,28,248,22,205,197,196,201,27,28,248,80,158,47, +36,195,248,22,58,248,80,158,48,37,196,11,28,192,249,80,158,48,40,194,250, +22,208,198,200,198,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27, +248,22,79,196,249,22,7,248,22,215,27,249,22,60,198,199,27,83,160,41,42, +46,45,250,22,208,83,160,41,43,49,45,249,22,64,248,22,52,199,248,22,59, +248,22,51,200,195,89,162,32,33,57,9,226,11,10,2,3,27,249,22,208,83, +160,41,44,38,45,199,249,80,158,38,38,197,27,250,22,60,200,199,198,27,83, +160,41,45,40,45,250,22,208,83,160,41,46,43,45,250,22,208,83,160,41,47, +46,45,250,22,61,83,160,41,48,49,45,249,22,64,248,22,77,205,248,22,51, +205,248,22,79,203,83,160,41,49,46,45,195,250,22,252,32,2,11,6,10,10, +98,97,100,32,115,121,110,116,97,120,197,87,95,249,22,3,89,162,32,33,39, +9,224,5,4,28,248,80,158,34,41,195,12,251,22,252,32,2,11,6,40,40, +110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,102,111,114, +32,112,114,111,99,101,100,117,114,101,32,97,114,103,117,109,101,110,116,196,198, +194,27,248,80,158,37,42,194,28,192,251,22,252,32,2,11,6,29,29,100,117, +112,108,105,99,97,116,101,32,97,114,103,117,109,101,110,116,32,105,100,101,110, +116,105,102,105,101,114,199,196,12,193,89,162,32,33,48,73,103,101,110,101,114, +97,108,45,112,114,111,116,111,11,226,11,9,1,0,27,249,22,208,83,160,41, +50,38,45,199,27,89,162,32,32,53,2,9,228,5,4,3,2,6,1,27,28, +248,80,158,39,32,194,27,27,248,80,158,41,34,196,28,248,80,158,41,32,193, +249,80,158,42,33,248,80,158,43,34,195,27,248,80,158,44,35,196,248,22,58, +250,22,208,199,196,199,11,28,192,249,80,158,41,40,194,27,248,80,158,43,35, +198,250,22,208,200,195,200,11,11,28,192,27,248,22,51,194,27,248,22,77,195, +27,248,22,79,196,91,159,34,11,90,161,34,32,11,248,202,27,249,22,60,200, +199,27,83,160,41,51,46,45,250,22,208,83,160,41,52,49,45,250,22,208,83, +160,41,53,52,45,199,83,160,41,54,52,45,195,27,248,202,201,249,22,7,195, +89,162,32,33,38,9,224,4,2,248,194,248,22,58,248,195,197,27,28,248,80, +158,40,32,195,249,80,158,41,33,248,80,158,42,34,197,27,248,80,158,43,35, +198,250,22,208,200,195,200,11,28,192,27,248,22,51,194,27,248,22,52,195,251, +22,252,32,2,11,6,82,82,98,97,100,32,115,121,110,116,97,120,32,40,110, +111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,102,111,114,32, +112,114,111,99,101,100,117,114,101,32,110,97,109,101,44,32,97,110,100,32,110, +111,116,32,97,32,110,101,115,116,101,100,32,112,114,111,99,101,100,117,114,101, +32,102,111,114,109,41,204,197,250,22,252,32,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,197,27,28,248,80,158,39,32,195,249,80,158,40,33,248, +80,158,41,34,197,27,248,80,158,42,35,198,250,22,208,200,195,200,11,28,192, +27,248,22,51,194,27,248,22,52,195,28,248,80,158,41,41,194,249,22,7,195, +248,200,204,247,195,247,193,87,95,28,248,80,158,42,36,195,12,250,22,252,32, +2,11,6,50,50,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101, +103,97,108,32,117,115,101,32,111,102,32,96,46,39,32,102,111,114,32,112,114, +111,99,101,100,117,114,101,32,98,111,100,121,41,202,28,248,80,158,42,43,195, +250,22,252,32,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40, +110,111,32,101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114, +111,99,101,100,117,114,101,32,98,111,100,121,41,202,12,27,249,22,208,83,160, +41,55,44,45,203,27,249,22,208,83,160,41,56,45,45,196,27,249,22,208,83, +160,41,57,46,45,248,199,200,249,80,158,46,38,204,27,250,22,60,198,199,200, +27,83,160,41,58,48,45,250,22,208,83,160,41,59,51,45,250,22,208,83,160, +41,8,28,54,45,250,22,59,248,22,79,203,250,22,208,83,160,41,8,29,8, +28,45,248,22,59,248,22,77,23,15,83,160,41,8,30,8,28,45,248,22,51, +203,83,160,41,8,31,54,45,195,250,22,252,32,2,11,6,10,10,98,97,100, +32,115,121,110,116,97,120,196,27,28,248,80,158,38,32,195,249,80,158,39,33, +248,80,158,40,34,197,27,248,80,158,41,35,198,28,248,80,158,41,32,193,27, +28,248,22,205,194,193,198,249,80,158,43,33,248,80,158,44,34,196,27,248,80, +158,45,35,197,250,22,208,198,195,198,11,11,28,192,27,248,22,51,194,27,248, +22,77,195,27,248,22,79,196,28,248,80,158,41,32,194,247,196,251,22,252,32, +2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,202,197,247,193,27,28, +248,80,158,38,32,195,249,80,158,39,33,248,80,158,40,34,197,27,248,80,158, +41,35,198,28,248,80,158,41,32,193,27,28,248,22,205,194,193,198,249,80,158, +43,33,248,80,158,44,34,196,27,248,80,158,45,35,197,250,22,208,198,195,198, +11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,79,196,28,248, +80,158,41,41,194,250,22,252,32,2,11,27,249,22,208,83,160,41,8,32,46, +45,204,27,28,248,80,158,46,32,194,249,80,158,47,33,248,80,158,48,34,196, +27,248,80,158,49,35,197,28,248,80,158,49,32,193,249,80,158,50,33,248,80, +158,51,34,195,27,248,80,158,52,35,196,28,248,80,158,52,36,193,248,80,158, +52,37,193,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22, +79,196,6,50,50,98,97,100,32,115,121,110,116,97,120,32,40,109,117,108,116, +105,112,108,101,32,101,120,112,114,101,115,115,105,111,110,115,32,97,102,116,101, +114,32,105,100,101,110,116,105,102,105,101,114,41,27,28,248,80,158,47,32,195, +249,80,158,48,33,248,80,158,49,34,197,27,248,80,158,50,35,198,28,248,80, +158,50,32,193,27,248,80,158,51,34,194,28,192,249,80,158,52,40,194,248,80, +158,53,44,248,80,158,54,35,197,11,11,11,28,192,27,248,22,51,194,27,248, +22,52,195,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40,122,101,114, +111,32,101,120,112,114,101,115,115,105,111,110,115,32,97,102,116,101,114,32,105, +100,101,110,116,105,102,105,101,114,41,27,28,248,80,158,48,32,196,249,80,158, +49,33,248,80,158,50,34,198,27,248,80,158,51,35,199,28,248,80,158,51,32, +193,27,28,248,22,205,194,193,199,249,80,158,53,33,248,80,158,54,34,196,27, +248,80,158,55,35,197,250,22,208,198,195,198,11,11,28,192,27,248,22,51,194, +27,248,22,77,195,27,248,22,79,196,6,31,31,98,97,100,32,115,121,110,116, +97,120,32,40,105,108,108,101,103,97,108,32,117,115,101,32,111,102,32,96,46, +39,41,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120, +198,201,247,196,247,193,27,28,248,80,158,37,32,195,249,80,158,38,33,248,80, +158,39,34,197,27,248,80,158,40,35,198,28,248,80,158,40,32,193,249,80,158, +41,33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,32, +193,27,248,80,158,44,34,194,28,192,249,80,158,45,40,194,248,80,158,46,44, +248,80,158,47,35,197,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77, +195,27,248,22,79,196,28,248,80,158,40,41,194,27,249,22,208,83,160,41,8, +33,42,45,201,249,80,158,42,38,203,27,250,22,60,199,200,198,27,83,160,41, +8,34,44,45,250,22,208,83,160,41,8,35,47,45,250,22,208,83,160,41,8, +36,50,45,250,22,59,248,22,79,203,250,22,208,83,160,41,8,37,56,45,248, +22,59,248,22,77,23,15,83,160,41,8,38,56,45,248,22,51,203,83,160,41, +8,39,50,45,195,247,196,247,193,250,22,7,248,196,83,160,41,8,40,37,45, +248,196,83,160,41,8,41,37,45,248,196,83,160,41,8,42,37,45,37,20,97, +158,16,13,30,12,65,35,37,115,116,120,13,69,115,116,120,45,112,97,105,114, +63,14,11,30,15,2,13,67,99,111,110,115,47,35,102,16,1,30,17,2,13, +67,115,116,120,45,99,97,114,18,5,30,19,2,13,67,115,116,120,45,99,100, +114,20,6,30,21,2,13,69,115,116,120,45,108,105,115,116,63,22,8,30,23, +2,13,69,115,116,120,45,62,108,105,115,116,24,4,30,25,68,35,37,115,116, +120,108,111,99,26,68,114,101,108,111,99,97,116,101,27,1,30,28,2,13,74, +115,112,108,105,116,45,115,116,120,45,108,105,115,116,29,3,30,30,2,13,69, +97,112,112,101,110,100,47,35,102,31,0,30,32,2,13,71,105,100,101,110,116, +105,102,105,101,114,63,33,2,30,34,76,35,37,115,116,120,99,97,115,101,45, +115,99,104,101,109,101,35,1,26,99,104,101,99,107,45,100,117,112,108,105,99, +97,116,101,45,105,100,101,110,116,105,102,105,101,114,36,0,30,37,2,13,69, +115,116,120,45,110,117,108,108,63,38,10,30,39,2,13,71,115,116,120,45,110, +117,108,108,47,35,102,40,9,16,43,18,99,64,104,101,114,101,41,39,97,37, +10,32,11,16,8,2,3,2,2,2,4,2,2,2,5,2,2,2,6,2,2, +97,36,10,33,11,16,86,75,115,121,110,116,97,120,45,105,100,45,114,117,108, +101,115,42,2,35,70,108,101,116,45,115,121,110,116,97,120,43,2,35,71,119, +105,116,104,45,115,121,110,116,97,120,44,70,35,37,119,105,116,104,45,115,116, +120,45,66,115,121,110,116,97,120,46,69,35,37,115,116,120,99,97,115,101,47, +71,115,116,120,45,118,101,99,116,111,114,63,48,2,13,63,97,110,100,49,71, +35,37,113,113,45,97,110,100,45,111,114,50,71,115,121,110,116,97,120,45,99, +97,115,101,51,2,26,62,111,114,52,2,50,73,115,116,120,45,99,104,101,99, +107,47,101,115,99,53,2,13,2,20,2,13,2,18,2,13,70,115,116,120,45, +114,111,116,97,116,101,54,2,13,1,20,103,101,110,101,114,97,116,101,45,116, +101,109,112,111,114,97,114,105,101,115,55,2,45,2,16,2,13,71,115,116,120, +45,114,111,116,97,116,101,42,56,2,13,74,115,116,120,45,118,101,99,116,111, +114,45,114,101,102,57,2,13,2,40,2,13,67,45,100,101,102,105,110,101,58, +74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,59,74,45,100,101,102, +105,110,101,45,115,121,110,116,97,120,60,2,59,64,99,111,110,100,61,66,35, +37,99,111,110,100,62,2,33,2,13,2,31,2,13,73,100,101,102,105,110,101, +45,115,116,114,117,99,116,63,2,59,77,117,110,115,121,110,116,97,120,45,115, +112,108,105,99,105,110,103,64,67,35,37,113,113,115,116,120,65,68,117,110,115, +121,110,116,97,120,66,2,65,2,38,2,13,75,108,101,116,114,101,99,45,115, +121,110,116,97,120,101,115,67,2,35,70,113,117,97,115,105,113,117,111,116,101, +68,2,50,70,115,121,110,116,97,120,47,108,111,99,69,2,26,2,22,2,13, +73,108,101,116,114,101,99,45,115,121,110,116,97,120,70,2,35,2,29,2,13, +64,119,104,101,110,71,2,59,71,113,117,97,115,105,115,121,110,116,97,120,72, +2,65,72,108,101,116,45,115,121,110,116,97,120,101,115,73,2,35,66,117,110, +108,101,115,115,74,2,59,66,108,101,116,47,101,99,75,2,59,75,113,117,97, +115,105,115,121,110,116,97,120,47,108,111,99,76,2,65,2,36,2,35,72,115, +121,110,116,97,120,45,99,97,115,101,42,77,2,26,72,115,121,110,116,97,120, +45,114,117,108,101,115,78,2,35,2,24,2,13,2,14,2,13,96,35,8,254, +1,11,16,0,16,4,34,11,77,100,101,102,105,110,101,45,118,97,108,117,101, +115,45,115,116,120,79,3,1,7,101,110,118,51,49,54,53,80,16,4,33,11, +63,115,116,120,81,3,1,7,101,110,118,51,49,54,54,82,18,102,2,41,43, +37,36,35,34,33,16,8,42,11,3,1,4,103,51,53,49,83,3,1,4,103, +51,53,50,84,3,1,4,103,51,53,51,85,3,1,7,101,110,118,51,49,56, +49,86,2,86,2,86,16,8,41,11,61,95,87,65,112,114,111,116,111,88,64, +98,111,100,121,89,3,1,7,101,110,118,51,49,56,50,90,2,90,2,90,16, +6,40,11,2,10,2,11,3,1,7,101,110,118,51,49,56,55,91,2,91,18, +16,2,95,66,115,114,99,116,97,103,92,44,93,8,252,134,8,95,9,8,252, +134,8,2,47,18,104,64,100,101,115,116,93,47,37,36,35,34,33,42,41,40, +16,6,46,11,3,1,4,103,51,54,54,94,3,1,4,103,51,54,55,95,3, +1,7,101,110,118,51,49,57,52,96,2,96,16,6,45,11,62,105,100,97,63, +97,114,103,98,3,1,7,101,110,118,51,49,57,53,99,2,99,18,158,2,41, +47,18,16,2,95,2,92,48,93,8,252,140,8,95,9,8,252,140,8,2,47, +18,158,2,93,47,18,158,63,99,116,120,100,47,18,158,66,108,97,109,98,100, +97,101,47,18,158,2,100,47,18,16,2,95,2,92,49,93,8,252,141,8,95, +9,8,252,141,8,2,47,18,104,2,93,52,37,36,35,34,33,42,41,40,16, +8,51,11,3,1,4,103,51,54,51,102,3,1,4,103,51,54,52,103,3,1, +4,103,51,54,53,104,3,1,7,101,110,118,51,50,50,49,105,2,105,2,105, +16,8,50,11,2,97,2,98,64,114,101,115,116,106,3,1,7,101,110,118,51, +50,50,50,107,2,107,2,107,18,158,2,41,52,18,16,2,95,2,92,53,93, +8,252,147,8,95,9,8,252,147,8,2,47,18,158,2,93,52,18,158,2,100, +52,18,158,2,101,52,18,158,2,100,52,18,158,2,41,43,18,16,2,95,2, +92,54,93,8,252,159,8,95,9,8,252,159,8,2,47,18,104,2,93,58,37, +36,35,34,33,42,41,16,6,57,11,2,10,2,11,2,91,2,91,16,8,56, +11,3,1,4,103,51,55,54,108,3,1,4,103,51,55,55,109,3,1,4,103, +51,55,56,110,3,1,7,101,110,118,51,50,53,52,111,2,111,2,111,16,8, +55,11,69,115,111,109,101,116,104,105,110,103,112,64,109,111,114,101,113,2,106, +3,1,7,101,110,118,51,50,53,53,114,2,114,2,114,18,158,2,100,58,18, +158,2,100,58,18,102,2,41,8,28,37,36,35,34,33,42,41,16,6,59,11, +2,97,66,109,107,45,114,104,115,115,3,1,7,101,110,118,51,49,56,54,116, +2,116,18,158,2,41,8,28,18,158,2,41,8,28,18,16,2,95,2,92,8, +29,93,8,252,178,8,95,9,8,252,178,8,2,47,18,158,2,93,8,28,18, +158,2,100,8,28,18,158,2,100,8,28,18,158,2,100,8,28,18,158,2,100, +8,28,18,101,2,41,8,32,37,36,35,34,33,16,8,8,31,11,3,1,4, +103,51,53,55,117,3,1,4,103,51,53,56,118,3,1,4,103,51,53,57,119, +3,1,7,101,110,118,51,51,50,57,120,2,120,2,120,16,8,8,30,11,2, +87,2,97,2,106,3,1,7,101,110,118,51,51,51,48,121,2,121,2,121,18, +101,2,41,8,35,37,36,35,34,33,16,8,8,34,11,3,1,4,103,51,54, +48,122,3,1,4,103,51,54,49,123,3,1,4,103,51,54,50,124,3,1,7, +101,110,118,51,51,54,56,125,2,125,2,125,16,8,8,33,11,2,87,2,97, +64,101,120,112,114,126,3,1,7,101,110,118,51,51,54,57,127,2,127,2,127, +18,16,2,95,2,92,8,36,93,8,252,202,8,95,9,8,252,202,8,2,47, +18,158,2,93,8,35,18,158,2,100,8,35,18,158,2,100,8,35,18,158,2, +100,8,35,18,158,2,100,8,35,18,98,73,100,101,102,105,110,101,45,118,97, +108,117,101,115,128,8,38,37,36,35,16,4,8,37,11,2,7,3,1,7,101, +110,118,51,49,54,52,129,18,158,75,100,101,102,105,110,101,45,115,121,110,116, +97,120,101,115,130,8,38,18,158,1,24,100,101,102,105,110,101,45,118,97,108, +117,101,115,45,102,111,114,45,115,121,110,116,97,120,131,8,38,11,16,5,93, +2,5,89,162,32,33,8,35,9,223,0,27,247,22,252,72,3,87,94,28,249, +22,70,194,21,95,66,109,111,100,117,108,101,132,72,109,111,100,117,108,101,45, +98,101,103,105,110,133,69,116,111,112,45,108,101,118,101,108,134,12,250,22,252, +32,2,11,6,51,51,97,108,108,111,119,101,100,32,111,110,108,121,32,97,116, +32,116,104,101,32,116,111,112,45,108,101,118,101,108,32,111,114,32,97,32,109, +111,100,117,108,101,32,116,111,112,45,108,101,118,101,108,197,27,249,22,208,83, +160,41,32,36,42,197,27,28,248,80,158,36,32,194,27,248,80,158,37,33,195, +28,192,249,80,158,38,34,194,248,80,158,39,35,248,80,158,40,36,198,11,11, +28,192,83,160,41,33,35,42,27,89,162,32,32,52,2,9,225,4,5,2,27, +28,248,80,158,36,32,194,249,80,158,37,37,248,80,158,38,33,196,27,248,80, +158,39,36,197,28,248,80,158,39,38,193,248,80,158,39,39,193,11,11,28,192, +27,248,22,51,194,27,248,22,52,195,249,80,158,39,40,198,27,83,160,41,34, +40,42,250,22,208,83,160,41,35,43,42,250,22,208,83,160,41,36,46,42,249, +22,55,83,160,41,37,48,42,249,22,2,89,162,33,33,41,9,223,18,250,22, +208,83,160,41,38,35,42,249,22,59,83,160,41,39,37,42,248,22,51,199,83, +160,41,40,35,42,205,83,160,41,41,46,42,195,250,22,252,32,2,11,6,10, +10,98,97,100,32,115,121,110,116,97,120,196,27,28,248,80,158,38,32,196,249, +80,158,39,37,248,80,158,40,33,198,27,248,80,158,41,36,199,28,248,80,158, +41,32,193,27,248,80,158,42,33,194,28,192,249,80,158,43,34,194,248,80,158, +44,35,248,80,158,45,36,197,11,11,11,28,192,27,248,22,51,194,27,248,22, +52,195,28,249,22,252,5,2,200,2,133,247,195,27,250,22,252,19,2,196,202, +248,22,215,83,160,41,42,44,42,27,249,22,208,83,160,41,43,43,42,195,27, +27,22,223,28,248,80,158,44,32,195,28,27,248,80,158,45,33,196,28,248,80, +158,45,41,193,28,249,195,194,83,160,41,44,46,42,9,11,11,27,248,80,158, +45,36,196,28,248,80,158,45,38,193,248,80,158,45,39,193,11,11,11,28,192, +27,83,160,41,45,43,42,250,22,208,83,160,41,46,46,42,250,22,208,83,160, +41,47,49,42,249,22,55,83,160,41,48,51,42,201,83,160,41,49,49,42,195, +27,27,22,223,28,248,80,158,45,32,196,28,27,248,80,158,46,33,197,28,248, +80,158,46,41,193,28,249,195,194,83,160,41,50,47,42,9,11,11,27,248,80, +158,46,36,197,28,248,80,158,46,32,193,27,27,248,80,158,48,33,195,28,248, +80,158,48,38,193,248,22,58,248,80,158,49,39,194,11,28,192,249,80,158,48, +34,194,27,248,80,158,50,36,197,28,248,80,158,50,32,193,27,248,80,158,51, +33,194,28,192,249,80,158,52,34,194,248,80,158,53,35,248,80,158,54,36,197, +11,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,52,195,27,249,22, +60,195,196,27,83,160,41,51,47,42,250,22,208,83,160,41,52,50,42,250,22, +208,83,160,41,53,53,42,250,22,59,83,160,41,54,56,42,248,22,52,203,248, +22,51,203,83,160,41,55,53,42,195,27,27,22,223,28,248,80,158,46,32,197, +28,27,248,80,158,47,33,198,28,248,80,158,47,41,193,28,249,195,194,83,160, +41,56,48,42,9,11,11,27,248,80,158,47,36,198,28,248,80,158,47,38,193, +248,80,158,47,39,193,11,11,11,28,192,27,83,160,41,57,45,42,250,22,208, +83,160,41,58,48,42,250,22,208,83,160,41,59,51,42,249,22,55,83,160,41, +8,28,53,42,201,83,160,41,8,29,51,42,195,27,27,22,223,28,248,80,158, +47,32,198,28,27,248,80,158,48,33,199,28,248,80,158,48,41,193,28,249,195, +194,83,160,41,8,30,49,42,9,11,11,27,248,80,158,48,36,199,28,248,80, +158,48,38,193,248,80,158,48,39,193,11,11,11,28,192,27,83,160,41,8,31, +46,42,250,22,208,83,160,41,8,32,49,42,250,22,208,83,160,41,8,33,52, +42,249,22,55,83,160,41,8,34,54,42,201,83,160,41,8,35,52,42,195,27, +27,22,223,28,248,80,158,48,32,199,28,27,248,80,158,49,33,200,28,248,80, +158,49,41,193,28,249,195,194,83,160,41,8,36,50,42,9,11,11,27,248,80, +158,49,36,200,28,248,80,158,49,32,193,27,27,248,80,158,51,33,195,28,248, +80,158,51,38,193,248,22,58,248,80,158,52,39,194,11,28,192,249,80,158,51, +34,194,27,248,80,158,53,36,197,28,248,80,158,53,32,193,27,248,80,158,54, +33,194,28,192,249,80,158,55,34,194,248,80,158,56,35,248,80,158,57,36,197, +11,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,52,195,250,22,252, +32,2,11,6,54,54,115,121,110,116,97,120,32,100,101,102,105,110,105,116,105, +111,110,115,32,110,111,116,32,97,108,108,111,119,101,100,32,119,105,116,104,105, +110,32,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120,204,27,83, +160,41,8,37,47,42,250,22,208,83,160,41,8,38,50,42,250,22,208,83,160, +41,8,39,53,42,250,22,59,83,160,41,8,40,56,42,83,160,41,8,41,56, +42,250,22,208,83,160,41,8,42,59,42,250,22,61,83,160,41,8,43,8,30, +42,23,21,83,160,41,8,44,8,30,42,83,160,41,8,45,59,42,83,160,41, +8,46,53,42,195,247,193,32,20,97,158,16,10,2,12,2,17,2,30,2,39, +2,19,2,15,2,21,2,23,2,25,2,32,16,47,18,99,2,41,8,41,37, +36,35,16,4,8,40,11,2,81,3,1,7,101,110,118,51,51,56,54,135,16, +4,8,39,11,2,100,3,1,7,101,110,118,51,51,56,55,136,18,158,93,16, +2,101,2,0,8,44,37,36,35,8,40,8,39,16,4,8,43,11,3,1,4, +103,52,48,53,137,3,1,7,101,110,118,51,51,57,51,138,16,4,8,42,11, +2,87,3,1,7,101,110,118,51,51,57,52,139,9,8,44,18,16,2,95,2, +92,8,45,93,8,252,216,8,95,9,8,252,216,8,2,47,18,101,2,93,8, +48,37,36,35,8,40,8,39,16,6,8,47,11,3,1,4,103,52,48,49,140, +3,1,4,103,52,48,50,141,3,1,7,101,110,118,51,52,48,50,142,2,142, +16,6,8,46,11,2,87,64,101,108,101,109,143,3,1,7,101,110,118,51,52, +48,51,144,2,144,18,158,2,100,8,48,18,158,2,0,8,48,18,158,2,100, +8,48,18,158,2,5,8,48,18,158,2,100,8,48,18,158,2,100,8,48,18, +158,110,16,2,101,2,0,8,51,37,36,35,8,40,8,39,16,6,8,50,11, +3,1,4,103,52,48,51,145,3,1,4,103,52,48,52,146,3,1,7,101,110, +118,51,52,49,52,147,2,147,16,6,8,49,11,2,87,2,143,3,1,7,101, +110,118,51,52,49,53,148,2,148,9,16,2,158,2,128,8,51,9,16,2,158, +2,130,8,51,9,16,2,158,2,131,8,51,9,16,2,158,64,115,101,116,33, +149,8,51,9,16,2,158,70,108,101,116,45,118,97,108,117,101,115,150,8,51, +9,16,2,158,71,108,101,116,42,45,118,97,108,117,101,115,151,8,51,9,16, +2,158,73,108,101,116,114,101,99,45,118,97,108,117,101,115,152,8,51,9,16, +2,158,2,101,8,51,9,16,2,158,71,99,97,115,101,45,108,97,109,98,100, +97,153,8,51,9,16,2,158,62,105,102,154,8,51,9,16,2,158,65,113,117, +111,116,101,155,8,51,9,16,2,158,1,22,108,101,116,114,101,99,45,115,121, +110,116,97,120,101,115,43,118,97,108,117,101,115,156,8,51,9,16,2,158,76, +102,108,117,105,100,45,108,101,116,45,115,121,110,116,97,120,157,8,51,9,16, +2,158,1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110, +45,109,97,114,107,158,8,51,9,16,2,158,65,35,37,97,112,112,159,8,51, +9,16,2,158,65,35,37,116,111,112,160,8,51,9,16,2,158,67,35,37,100, +97,116,117,109,161,8,51,9,8,51,18,102,2,41,8,53,37,36,35,8,40, +8,39,8,50,8,49,16,4,8,52,11,61,101,162,3,1,7,101,110,118,51, +52,49,56,163,18,158,2,0,8,53,18,16,2,95,2,92,8,54,93,8,252, +233,8,95,9,8,252,233,8,2,47,18,104,2,93,8,57,37,36,35,8,40, +8,39,8,50,8,49,8,52,16,4,8,56,11,3,1,4,103,52,49,51,164, +3,1,7,101,110,118,51,52,50,52,165,16,4,8,55,11,61,118,166,3,1, +7,101,110,118,51,52,50,53,167,18,158,2,100,8,57,18,158,2,5,8,57, +18,158,2,100,8,57,18,158,2,128,8,53,18,16,2,95,2,92,8,58,93, +8,252,234,8,95,9,8,252,234,8,2,47,18,104,2,93,8,61,37,36,35, +8,40,8,39,8,50,8,49,8,52,16,6,8,60,11,3,1,4,103,52,49, +49,168,3,1,4,103,52,49,50,169,3,1,7,101,110,118,51,52,51,55,170, +2,170,16,6,8,59,11,2,97,2,126,3,1,7,101,110,118,51,52,51,56, +171,2,171,18,158,2,100,8,61,18,158,2,131,8,61,18,158,2,100,8,61, +18,158,67,114,101,113,117,105,114,101,172,8,53,18,16,2,95,2,92,8,62, +93,8,252,235,8,95,9,8,252,235,8,2,47,18,104,2,93,8,65,37,36, +35,8,40,8,39,8,50,8,49,8,52,16,4,8,64,11,3,1,4,103,52, +49,48,173,3,1,7,101,110,118,51,52,52,55,174,16,4,8,63,11,2,166, +3,1,7,101,110,118,51,52,52,56,175,18,158,2,100,8,65,18,158,78,114, +101,113,117,105,114,101,45,102,111,114,45,115,121,110,116,97,120,176,8,65,18, +158,2,100,8,65,18,158,1,20,114,101,113,117,105,114,101,45,102,111,114,45, +116,101,109,112,108,97,116,101,177,8,53,18,16,2,95,2,92,8,66,93,8, +252,236,8,95,9,8,252,236,8,2,47,18,104,2,93,8,69,37,36,35,8, +40,8,39,8,50,8,49,8,52,16,4,8,68,11,3,1,4,103,52,48,57, +178,3,1,7,101,110,118,51,52,53,54,179,16,4,8,67,11,2,166,3,1, +7,101,110,118,51,52,53,55,180,18,158,2,100,8,69,18,158,2,172,8,69, +18,158,2,100,8,69,18,158,2,130,8,53,18,16,2,95,2,92,8,70,93, +8,252,238,8,95,9,8,252,238,8,2,47,18,104,2,93,8,73,37,36,35, +8,40,8,39,8,50,8,49,8,52,16,4,8,72,11,3,1,4,103,52,48, +54,181,3,1,7,101,110,118,51,52,55,52,182,16,4,8,71,11,65,111,116, +104,101,114,183,3,1,7,101,110,118,51,52,55,53,184,18,158,2,100,8,73, +18,158,2,131,8,73,18,158,9,8,73,18,158,2,100,8,73,18,158,2,0, +8,73,18,16,2,103,93,16,2,158,93,16,2,158,66,118,97,108,117,101,115, +185,8,73,9,8,73,9,8,81,97,8,80,10,32,11,16,58,2,46,29,186, +11,11,2,48,2,13,2,49,2,50,2,18,2,13,2,57,2,13,73,115,121, +110,116,97,120,45,99,97,115,101,42,42,187,2,186,2,20,2,13,2,54,2, +13,2,52,2,50,2,16,2,13,2,56,2,13,2,31,2,13,2,29,2,13, +2,58,2,59,2,60,2,59,2,61,2,62,2,33,2,13,1,20,101,108,108, +105,112,115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,188,2,186,2, +63,2,59,2,38,2,13,2,68,2,50,2,40,2,13,2,71,2,59,2,74, +2,59,2,22,2,13,2,75,2,59,2,53,2,13,2,24,2,13,2,14,2, +13,97,8,79,10,33,11,16,70,2,48,2,13,2,49,2,50,2,18,2,13, +2,57,2,13,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115,189,64, +35,37,115,99,190,2,20,2,13,2,54,2,13,2,52,2,50,2,16,2,13, +74,109,97,107,101,45,109,97,116,99,104,38,101,110,118,191,2,190,72,110,111, +45,101,108,108,105,112,115,101,115,63,192,2,190,2,56,2,13,2,31,2,13, +2,29,2,13,72,115,116,120,45,109,101,109,113,45,112,111,115,193,2,190,2, +58,2,59,2,60,2,59,2,61,2,62,2,33,2,13,79,109,97,107,101,45, +115,121,110,116,97,120,45,109,97,112,112,105,110,103,194,2,190,2,63,2,59, +2,38,2,13,2,68,2,50,1,20,115,121,110,116,97,120,45,109,97,112,112, +105,110,103,45,100,101,112,116,104,195,2,190,2,40,2,13,72,109,97,107,101, +45,112,101,120,112,97,110,100,196,2,190,2,71,2,59,75,115,121,110,116,97, +120,45,109,97,112,112,105,110,103,63,197,2,190,1,21,115,121,110,116,97,120, +45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,198,2,190,2,74,2, +59,2,22,2,13,2,75,2,59,2,53,2,13,2,24,2,13,2,14,2,13, +96,8,78,8,254,1,11,16,0,16,4,8,77,11,61,120,199,3,1,6,101, +110,118,51,56,48,200,16,4,8,76,11,68,104,101,114,101,45,115,116,120,201, +3,1,6,101,110,118,51,56,50,202,16,4,8,75,11,2,201,2,202,13,16, +3,33,2,186,2,47,93,8,252,238,8,16,6,8,74,11,61,114,203,63,115, +114,99,204,3,1,7,101,110,118,51,52,55,56,205,2,205,95,9,8,252,238, +8,2,47,18,158,2,100,8,73,18,158,2,100,8,73,11,9,93,68,35,37, +107,101,114,110,101,108,206,96,2,206,2,35,2,13,2,65,0}; + EVAL_ONE_SIZED_STR((char *)expr, 7639); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,252,211,1,252,200,91,159,32,20,97,158,16,1, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,252,211,1,252,222,91,159,32,20,97,158,16,1, 20,23,65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,73,35,37,109, 111,114,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,46,80,158, 32,32,20,97,158,16,24,30,3,2,2,74,115,116,114,117,99,116,58,112,114, @@ -2335,13 +2337,13 @@ 99,107,45,102,111,114,45,98,114,101,97,107,51,254,1,16,0,11,11,16,14, 2,41,2,39,2,31,2,33,2,29,2,37,2,27,2,6,2,10,2,43,2, 12,2,35,2,25,2,4,46,11,16,18,2,49,2,23,2,45,2,16,2,14, -2,8,74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,52,69,102,108, -117,105,100,45,108,101,116,53,64,116,105,109,101,54,65,100,101,108,97,121,55, -64,99,97,115,101,56,66,108,101,116,47,99,99,57,72,112,97,114,97,109,101, -116,101,114,105,122,101,58,78,112,97,114,97,109,101,116,101,114,105,122,101,45, -98,114,101,97,107,59,71,115,101,116,33,45,118,97,108,117,101,115,60,73,119, -105,116,104,45,104,97,110,100,108,101,114,115,61,70,108,101,116,45,115,116,114, -117,99,116,62,62,100,111,63,16,18,11,11,11,11,11,11,11,11,11,11,11, +2,8,64,116,105,109,101,52,69,102,108,117,105,100,45,108,101,116,53,71,115, +101,116,33,45,118,97,108,117,101,115,54,78,112,97,114,97,109,101,116,101,114, +105,122,101,45,98,114,101,97,107,55,72,112,97,114,97,109,101,116,101,114,105, +122,101,56,65,100,101,108,97,121,57,73,119,105,116,104,45,104,97,110,100,108, +101,114,115,58,66,108,101,116,47,99,99,59,62,100,111,60,74,119,105,116,104, +45,104,97,110,100,108,101,114,115,42,61,64,99,97,115,101,62,70,108,101,116, +45,115,116,114,117,99,116,63,16,18,11,11,11,11,11,11,11,11,11,11,11, 11,11,11,11,11,11,11,16,18,2,49,2,23,2,45,2,16,2,14,2,8, 2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2, 62,2,63,38,50,106,16,5,93,69,99,97,115,101,45,116,101,115,116,64,89, @@ -2353,13 +2355,13 @@ 194,248,80,158,46,37,248,80,158,47,35,197,11,11,28,192,249,80,158,43,36, 194,248,80,158,44,37,248,80,158,45,35,197,11,11,11,11,28,192,27,248,22, 51,194,27,248,22,77,195,27,248,22,79,196,28,248,22,40,248,22,209,194,27, -249,22,60,195,196,27,83,160,41,33,39,40,250,22,208,83,160,41,34,42,40, -250,22,208,83,160,41,35,45,40,250,22,59,83,160,41,36,48,40,248,22,52, +249,22,60,196,195,27,83,160,41,33,39,40,250,22,208,83,160,41,34,42,40, +250,22,208,83,160,41,35,45,40,250,22,59,83,160,41,36,48,40,248,22,51, 203,250,22,208,83,160,41,37,51,40,249,22,59,83,160,41,38,53,40,248,22, -51,23,16,83,160,41,39,51,40,83,160,41,40,45,40,195,27,249,22,60,195, -196,27,83,160,41,41,39,40,250,22,208,83,160,41,42,42,40,250,22,208,83, -160,41,43,45,40,250,22,59,83,160,41,44,48,40,248,22,52,203,250,22,208, -83,160,41,45,51,40,249,22,59,83,160,41,46,53,40,248,22,51,23,16,83, +52,23,16,83,160,41,39,51,40,83,160,41,40,45,40,195,27,249,22,60,196, +195,27,83,160,41,41,39,40,250,22,208,83,160,41,42,42,40,250,22,208,83, +160,41,43,45,40,250,22,59,83,160,41,44,48,40,248,22,51,203,250,22,208, +83,160,41,45,51,40,249,22,59,83,160,41,46,53,40,248,22,52,23,16,83, 160,41,47,51,40,83,160,41,48,45,40,195,27,28,248,80,158,36,32,195,249, 80,158,37,33,248,80,158,38,34,197,27,248,80,158,39,35,198,28,248,80,158, 39,32,193,249,80,158,40,33,248,80,158,41,34,195,27,248,80,158,42,35,196, @@ -2378,51 +2380,51 @@ 75,0,30,76,2,66,71,115,116,120,45,110,117,108,108,47,35,102,77,9,30, 78,2,66,69,115,116,120,45,108,105,115,116,63,79,8,30,80,2,66,69,115, 116,120,45,62,108,105,115,116,81,4,16,25,18,98,64,104,101,114,101,82,38, -97,36,10,32,11,16,106,2,62,2,2,77,100,101,102,105,110,101,45,102,111, -114,45,115,121,110,116,97,120,83,68,35,37,100,101,102,105,110,101,84,74,45, -100,101,102,105,110,101,45,115,121,110,116,97,120,85,74,35,37,100,101,102,105, -110,101,45,101,116,45,97,108,86,76,98,101,103,105,110,45,102,111,114,45,115, -121,110,116,97,120,87,2,84,2,41,2,2,73,100,101,102,105,110,101,45,115, -116,114,117,99,116,88,2,86,2,37,2,2,2,56,2,2,67,45,100,101,102, -105,110,101,89,2,86,2,27,2,2,2,4,2,2,2,8,2,2,63,97,110, -100,90,71,35,37,113,113,45,97,110,100,45,111,114,91,62,111,114,92,2,91, -2,63,2,2,2,10,2,2,64,119,104,101,110,93,2,86,2,55,2,2,2, -29,2,2,2,33,2,2,66,117,110,108,101,115,115,94,2,86,2,25,2,2, -2,59,2,2,2,60,2,2,66,108,101,116,47,101,99,95,2,86,2,14,2, -2,2,54,2,2,2,47,2,18,73,100,101,102,105,110,101,45,115,121,110,116, -97,120,96,2,84,2,43,2,2,2,53,2,2,2,31,2,2,2,6,2,2, -70,113,117,97,115,105,113,117,111,116,101,97,2,91,2,61,2,2,2,49,2, -2,1,22,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97, -116,105,111,110,98,2,2,2,52,2,2,2,57,2,2,2,16,2,2,66,100, -101,102,105,110,101,99,2,84,2,51,2,18,2,12,2,2,2,23,2,2,2, -39,2,2,2,58,2,2,2,21,2,18,2,45,2,2,67,112,114,111,109,105, -115,101,100,2,2,2,64,2,2,2,19,2,18,64,99,111,110,100,101,66,35, +97,36,10,32,11,16,106,2,57,2,2,67,112,114,111,109,105,115,101,83,2, +2,2,63,2,2,2,14,2,2,2,37,2,2,2,55,2,2,74,45,100,101, +102,105,110,101,45,115,121,110,116,97,120,84,74,35,37,100,101,102,105,110,101, +45,101,116,45,97,108,85,2,41,2,2,73,100,101,102,105,110,101,45,115,116, +114,117,99,116,86,2,85,2,60,2,2,67,45,100,101,102,105,110,101,87,2, +85,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120,88,68, +35,37,100,101,102,105,110,101,89,2,4,2,2,2,8,2,2,76,98,101,103, +105,110,45,102,111,114,45,115,121,110,116,97,120,90,2,89,63,97,110,100,91, +71,35,37,113,113,45,97,110,100,45,111,114,92,2,52,2,2,2,27,2,2, +2,10,2,2,64,119,104,101,110,93,2,85,2,31,2,2,66,117,110,108,101, +115,115,94,2,85,2,54,2,2,66,108,101,116,47,101,99,95,2,85,66,100, +101,102,105,110,101,96,2,89,2,33,2,2,2,25,2,2,2,47,2,18,73, +100,101,102,105,110,101,45,115,121,110,116,97,120,97,2,89,2,56,2,2,2, +43,2,2,2,53,2,2,2,29,2,2,62,111,114,98,2,92,70,113,117,97, +115,105,113,117,111,116,101,99,2,92,2,61,2,2,2,49,2,2,1,22,98, +114,101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, +100,2,2,2,12,2,2,2,16,2,2,2,51,2,18,2,23,2,2,2,62, +2,2,2,39,2,2,2,6,2,2,2,21,2,18,2,45,2,2,2,59,2, +2,2,58,2,2,2,64,2,2,2,19,2,18,64,99,111,110,100,101,66,35, 37,99,111,110,100,102,2,35,2,2,97,35,10,33,11,16,86,75,115,121,110, 116,97,120,45,105,100,45,114,117,108,101,115,103,76,35,37,115,116,120,99,97, 115,101,45,115,99,104,101,109,101,104,70,108,101,116,45,115,121,110,116,97,120, 105,2,104,71,119,105,116,104,45,115,121,110,116,97,120,106,70,35,37,119,105, 116,104,45,115,116,120,107,66,115,121,110,116,97,120,108,69,35,37,115,116,120, -99,97,115,101,109,2,90,2,91,71,115,116,120,45,118,101,99,116,111,114,63, -110,2,66,2,88,2,86,2,92,2,91,2,71,2,66,74,115,116,120,45,118, -101,99,116,111,114,45,114,101,102,111,2,66,1,20,103,101,110,101,114,97,116, -101,45,116,101,109,112,111,114,97,114,105,101,115,112,2,107,2,73,2,66,70, -115,116,120,45,114,111,116,97,116,101,113,2,66,73,115,116,120,45,99,104,101, -99,107,47,101,115,99,114,2,66,2,69,2,66,1,26,99,104,101,99,107,45, -100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,115, -2,104,71,115,116,120,45,114,111,116,97,116,101,42,116,2,66,2,75,2,66, -74,115,112,108,105,116,45,115,116,120,45,108,105,115,116,117,2,66,2,89,2, -86,2,85,2,86,2,101,2,102,75,113,117,97,115,105,115,121,110,116,97,120, -47,108,111,99,118,67,35,37,113,113,115,116,120,119,71,105,100,101,110,116,105, -102,105,101,114,63,120,2,66,70,115,121,110,116,97,120,47,108,111,99,121,68, -35,37,115,116,120,108,111,99,122,2,67,2,66,77,117,110,115,121,110,116,97, -120,45,115,112,108,105,99,105,110,103,123,2,119,68,117,110,115,121,110,116,97, -120,124,2,119,69,115,116,120,45,110,117,108,108,63,125,2,66,75,108,101,116, -114,101,99,45,115,121,110,116,97,120,101,115,126,2,104,2,97,2,91,2,77, -2,66,71,113,117,97,115,105,115,121,110,116,97,120,127,2,119,73,108,101,116, -114,101,99,45,115,121,110,116,97,120,128,2,104,2,93,2,86,2,95,2,86, -72,108,101,116,45,115,121,110,116,97,120,101,115,129,2,104,2,94,2,86,2, -79,2,66,71,115,121,110,116,97,120,45,99,97,115,101,130,2,122,72,115,121, -110,116,97,120,45,99,97,115,101,42,131,2,122,72,115,121,110,116,97,120,45, +99,97,115,101,109,71,115,116,120,45,118,101,99,116,111,114,63,110,2,66,2, +86,2,85,2,91,2,92,2,71,2,66,74,115,116,120,45,118,101,99,116,111, +114,45,114,101,102,111,2,66,1,20,103,101,110,101,114,97,116,101,45,116,101, +109,112,111,114,97,114,105,101,115,112,2,107,2,73,2,66,70,115,116,120,45, +114,111,116,97,116,101,113,2,66,73,115,116,120,45,99,104,101,99,107,47,101, +115,99,114,2,66,2,69,2,66,1,26,99,104,101,99,107,45,100,117,112,108, +105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,115,2,104,71,115, +116,120,45,114,111,116,97,116,101,42,116,2,66,2,75,2,66,74,115,112,108, +105,116,45,115,116,120,45,108,105,115,116,117,2,66,71,115,121,110,116,97,120, +45,99,97,115,101,118,68,35,37,115,116,120,108,111,99,119,2,84,2,85,2, +101,2,102,71,105,100,101,110,116,105,102,105,101,114,63,120,2,66,70,115,121, +110,116,97,120,47,108,111,99,121,2,119,2,67,2,66,2,98,2,92,68,117, +110,115,121,110,116,97,120,122,67,35,37,113,113,115,116,120,123,69,115,116,120, +45,110,117,108,108,63,124,2,66,75,108,101,116,114,101,99,45,115,121,110,116, +97,120,101,115,125,2,104,2,99,2,92,77,117,110,115,121,110,116,97,120,45, +115,112,108,105,99,105,110,103,126,2,123,2,77,2,66,71,113,117,97,115,105, +115,121,110,116,97,120,127,2,123,73,108,101,116,114,101,99,45,115,121,110,116, +97,120,128,2,104,2,93,2,85,2,95,2,85,72,108,101,116,45,115,121,110, +116,97,120,101,115,129,2,104,2,94,2,85,2,79,2,66,75,113,117,97,115, +105,115,121,110,116,97,120,47,108,111,99,130,2,123,2,87,2,85,72,115,121, +110,116,97,120,45,99,97,115,101,42,131,2,119,72,115,121,110,116,97,120,45, 114,117,108,101,115,132,2,104,2,81,2,66,96,34,8,254,1,11,16,0,16, 4,33,11,61,120,133,3,1,7,101,110,118,51,52,56,48,134,18,16,2,95, 66,115,114,99,116,97,103,135,39,93,8,252,12,9,95,9,8,252,12,9,2, @@ -2440,7 +2442,7 @@ 4,103,52,49,54,150,3,1,7,101,110,118,51,53,48,50,151,2,151,2,151, 16,6,45,11,2,141,2,142,3,1,7,101,110,118,51,53,48,51,152,2,152, 18,158,2,144,47,18,158,64,109,101,109,118,153,47,18,158,2,144,47,18,158, -2,146,47,18,158,2,144,47,18,158,2,144,47,11,16,5,93,2,56,89,162, +2,146,47,18,158,2,144,47,18,158,2,144,47,11,16,5,93,2,62,89,162, 32,33,8,28,9,223,0,27,249,22,208,83,160,41,32,35,43,196,27,28,248, 80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38, 35,197,28,248,80,158,38,32,193,27,248,80,158,39,34,194,28,192,249,80,158, @@ -2457,9 +2459,9 @@ 196,28,248,80,158,48,39,193,248,80,158,48,40,193,11,11,11,11,28,192,249, 80,158,44,36,194,248,80,158,45,37,248,80,158,46,35,197,11,11,11,11,28, 192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248,22,87,197, -249,80,158,41,41,202,27,250,22,60,199,198,200,27,83,160,41,40,43,43,250, +249,80,158,41,41,202,27,250,22,60,200,198,199,27,83,160,41,40,43,43,250, 22,208,83,160,41,41,46,43,250,22,208,83,160,41,42,49,43,251,22,61,83, -160,41,43,53,43,248,22,79,204,248,22,51,204,248,22,77,204,83,160,41,44, +160,41,43,53,43,248,22,51,204,248,22,79,204,248,22,77,204,83,160,41,44, 49,43,195,27,28,248,80,158,37,32,196,249,80,158,38,33,248,80,158,39,34, 198,27,248,80,158,40,35,199,28,248,80,158,40,32,193,249,80,158,41,33,248, 80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,32,193,27,27, @@ -2470,7 +2472,7 @@ 193,248,80,158,52,40,193,11,11,11,11,28,192,249,80,158,45,36,194,248,80, 158,46,37,248,80,158,47,35,197,11,11,11,11,28,192,27,248,22,51,194,27, 248,22,77,195,27,248,22,86,196,27,248,22,89,197,27,248,22,88,198,249,80, -158,43,41,204,27,251,22,60,202,199,201,200,27,83,160,41,45,45,43,91,159, +158,43,41,204,27,251,22,60,202,199,200,201,27,83,160,41,45,45,43,91,159, 33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33, 40,9,226,15,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90, 161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9,224, @@ -2480,8 +2482,8 @@ 156,83,160,41,46,35,43,89,162,32,32,52,9,225,6,5,4,27,250,22,208, 83,160,41,47,38,43,250,22,208,83,160,41,48,41,43,250,22,59,83,160,41, 49,44,43,250,22,208,83,160,41,50,47,43,250,22,59,83,160,41,51,50,43, -248,22,51,23,17,248,22,86,23,17,83,160,41,52,47,43,250,22,208,83,160, -41,53,47,43,250,22,61,83,160,41,54,50,43,248,22,87,23,17,248,22,77, +248,22,51,23,17,248,22,87,23,17,83,160,41,52,47,43,250,22,208,83,160, +41,53,47,43,250,22,61,83,160,41,54,50,43,248,22,86,23,17,248,22,77, 23,17,83,160,41,55,47,43,83,160,41,56,41,43,197,89,162,32,32,33,9, 223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208,27,28,248,80, 158,38,32,197,249,80,158,39,33,248,80,158,40,34,199,27,248,80,158,41,35, @@ -2496,26 +2498,26 @@ 80,158,51,35,196,28,248,80,158,51,39,193,248,80,158,51,40,193,11,11,11, 11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27, 248,22,89,197,27,249,22,69,199,36,27,249,22,69,200,37,27,249,22,68,201, -38,249,80,158,46,41,23,15,27,253,22,60,206,202,204,203,205,201,27,83,160, +38,249,80,158,46,41,23,15,27,253,22,60,206,202,201,204,203,205,27,83,160, 41,57,48,43,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248, 22,8,89,162,32,33,40,9,226,18,2,3,1,250,22,31,89,162,32,32,36, 9,225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89, 162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248, 22,252,172,2,193,248,22,252,177,2,193,249,80,158,35,42,21,95,63,108,101, 116,159,93,94,2,133,2,155,96,2,154,95,2,64,2,133,94,2,142,2,156, -96,2,0,2,157,2,158,2,156,97,2,56,2,133,62,99,49,160,62,99,50, -161,2,156,83,160,41,58,35,43,89,162,32,32,8,29,9,225,6,5,4,27, +96,2,0,2,157,2,158,2,156,97,2,62,2,133,62,99,49,160,62,99,50, +161,2,156,83,160,41,58,35,43,89,162,32,32,8,28,9,225,6,5,4,27, 250,22,208,83,160,41,59,38,43,250,22,208,83,160,41,8,28,41,43,250,22, 59,83,160,41,8,29,44,43,250,22,208,83,160,41,8,30,47,43,248,22,59, 250,22,208,83,160,41,8,31,51,43,249,22,59,83,160,41,8,32,53,43,248, 22,51,23,20,83,160,41,8,33,51,43,83,160,41,8,34,47,43,250,22,208, 83,160,41,8,35,47,43,251,22,59,83,160,41,8,36,51,43,250,22,208,83, 160,41,8,37,54,43,250,22,59,83,160,41,8,38,57,43,83,160,41,8,39, -57,43,249,22,69,23,25,36,83,160,41,8,40,54,43,250,22,208,83,160,41, -8,41,54,43,250,22,61,83,160,41,8,42,57,43,248,22,86,23,24,248,22, -89,23,24,83,160,41,8,43,54,43,250,22,208,83,160,41,8,44,54,43,251, -22,61,83,160,41,8,45,58,43,83,160,41,8,46,58,43,248,22,77,23,25, -249,22,68,23,26,37,83,160,41,8,47,54,43,83,160,41,8,48,47,43,83, +57,43,249,22,68,23,25,37,83,160,41,8,40,54,43,250,22,208,83,160,41, +8,41,54,43,250,22,61,83,160,41,8,42,57,43,248,22,89,23,24,249,22, +69,23,25,36,83,160,41,8,43,54,43,250,22,208,83,160,41,8,44,54,43, +251,22,61,83,160,41,8,45,58,43,83,160,41,8,46,58,43,248,22,77,23, +25,248,22,86,23,25,83,160,41,8,47,54,43,83,160,41,8,48,47,43,83, 160,41,8,49,41,43,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, 9,223,3,248,22,252,175,2,208,27,28,248,80,158,39,32,198,249,80,158,40, 33,248,80,158,41,34,200,27,248,80,158,42,35,201,28,248,80,158,42,32,193, @@ -2546,7 +2548,7 @@ 252,32,2,11,6,31,31,98,97,100,32,115,121,110,116,97,120,32,40,105,108, 108,101,103,97,108,32,117,115,101,32,111,102,32,96,46,39,41,23,15,247,193, 32,20,97,158,16,11,2,65,2,68,2,70,2,72,2,74,2,76,30,163,2, -66,2,120,2,2,78,2,80,30,164,2,122,68,114,101,108,111,99,97,116,101, +66,2,120,2,2,78,2,80,30,164,2,119,68,114,101,108,111,99,97,116,101, 165,1,30,166,2,109,1,20,101,108,108,105,112,115,105,115,45,99,111,117,110, 116,45,101,114,114,111,114,167,0,16,50,18,98,2,82,49,36,35,34,16,4, 48,11,2,133,3,1,7,101,110,118,51,53,49,48,168,18,16,2,95,2,135, @@ -2555,27 +2557,27 @@ 170,3,1,7,101,110,118,51,53,49,54,171,2,171,16,6,51,11,2,141,2, 155,3,1,7,101,110,118,51,53,49,55,172,2,172,18,158,2,144,53,18,158, 2,0,53,18,16,2,103,93,16,2,158,93,16,2,158,2,101,53,9,53,9, -8,29,97,8,28,10,32,11,16,58,2,108,29,173,11,11,2,90,2,91,2, -110,2,66,2,92,2,91,2,71,2,66,2,111,2,66,73,115,121,110,116,97, -120,45,99,97,115,101,42,42,174,2,173,2,73,2,66,2,113,2,66,2,114, -2,66,2,69,2,66,2,116,2,66,2,75,2,66,2,117,2,66,2,89,2, -86,2,85,2,86,2,101,2,102,2,120,2,66,2,167,2,173,2,67,2,66, -2,125,2,66,2,97,2,91,2,77,2,66,2,94,2,86,2,93,2,86,2, -88,2,86,2,79,2,66,2,95,2,86,2,81,2,66,97,59,10,33,11,16, -70,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105,110,103, -175,64,35,37,115,99,176,2,90,2,91,2,110,2,66,2,92,2,91,2,71, -2,66,2,111,2,66,2,73,2,66,2,113,2,66,2,114,2,66,2,69,2, -66,72,110,111,45,101,108,108,105,112,115,101,115,63,177,2,176,2,116,2,66, -2,75,2,66,2,117,2,66,72,115,116,120,45,109,101,109,113,45,112,111,115, -178,2,176,2,89,2,86,2,85,2,86,2,101,2,102,2,120,2,66,74,109, -97,107,101,45,109,97,116,99,104,38,101,110,118,179,2,176,2,67,2,66,2, -125,2,66,2,97,2,91,1,20,115,121,110,116,97,120,45,109,97,112,112,105, -110,103,45,100,101,112,116,104,180,2,176,2,77,2,66,72,109,97,107,101,45, -112,101,120,112,97,110,100,181,2,176,2,94,2,86,2,93,2,86,75,115,121, -110,116,97,120,45,109,97,112,112,105,110,103,63,182,2,176,1,21,115,121,110, -116,97,120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,183,2,176, -2,88,2,86,2,79,2,66,2,95,2,86,74,103,101,116,45,109,97,116,99, -104,45,118,97,114,115,184,2,176,2,81,2,66,96,58,8,254,1,11,16,0, +8,29,97,8,28,10,32,11,16,58,2,108,29,173,11,11,2,110,2,66,2, +91,2,92,2,71,2,66,2,111,2,66,73,115,121,110,116,97,120,45,99,97, +115,101,42,42,174,2,173,2,73,2,66,2,113,2,66,2,98,2,92,2,69, +2,66,2,116,2,66,2,75,2,66,2,117,2,66,2,87,2,85,2,84,2, +85,2,101,2,102,2,120,2,66,2,167,2,173,2,86,2,85,2,124,2,66, +2,99,2,92,2,77,2,66,2,93,2,85,2,94,2,85,2,79,2,66,2, +95,2,85,2,114,2,66,2,81,2,66,2,67,2,66,97,59,10,33,11,16, +70,2,110,2,66,2,91,2,92,2,71,2,66,2,111,2,66,74,103,101,116, +45,109,97,116,99,104,45,118,97,114,115,175,64,35,37,115,99,176,2,73,2, +66,2,113,2,66,2,98,2,92,2,69,2,66,74,109,97,107,101,45,109,97, +116,99,104,38,101,110,118,177,2,176,72,110,111,45,101,108,108,105,112,115,101, +115,63,178,2,176,2,116,2,66,2,75,2,66,2,117,2,66,72,115,116,120, +45,109,101,109,113,45,112,111,115,179,2,176,2,87,2,85,2,84,2,85,2, +101,2,102,2,120,2,66,79,109,97,107,101,45,115,121,110,116,97,120,45,109, +97,112,112,105,110,103,180,2,176,2,86,2,85,2,124,2,66,2,99,2,92, +1,20,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,100,101,112,116, +104,181,2,176,2,77,2,66,72,109,97,107,101,45,112,101,120,112,97,110,100, +182,2,176,2,93,2,85,75,115,121,110,116,97,120,45,109,97,112,112,105,110, +103,63,183,2,176,1,21,115,121,110,116,97,120,45,109,97,112,112,105,110,103, +45,118,97,108,118,97,114,184,2,176,2,94,2,85,2,79,2,66,2,95,2, +85,2,114,2,66,2,81,2,66,2,67,2,66,96,58,8,254,1,11,16,0, 16,4,57,11,2,133,3,1,6,101,110,118,51,56,48,185,16,4,56,11,68, 104,101,114,101,45,115,116,120,186,3,1,6,101,110,118,51,56,50,187,16,4, 55,11,2,186,2,187,13,16,3,33,2,173,2,109,93,8,252,59,9,16,6, @@ -2618,8 +2620,8 @@ 8,51,18,158,2,144,8,51,18,158,2,144,8,51,18,158,2,154,8,51,18, 158,2,144,8,51,18,158,2,64,8,51,18,158,2,133,8,51,18,158,2,144, 8,51,18,158,2,144,8,51,18,158,2,0,8,51,18,158,2,144,8,51,18, -158,2,144,8,51,18,158,2,56,8,51,18,158,2,133,8,51,18,158,2,144, -8,51,18,158,2,144,8,51,18,158,2,144,8,51,11,16,5,93,2,63,89, +158,2,144,8,51,18,158,2,62,8,51,18,158,2,133,8,51,18,158,2,144, +8,51,18,158,2,144,8,51,18,158,2,144,8,51,11,16,5,93,2,60,89, 162,32,33,8,31,9,223,0,27,249,22,208,83,160,41,32,35,45,196,27,28, 248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158, 38,35,197,28,248,80,158,38,32,193,27,27,248,80,158,40,34,195,28,248,80, @@ -2646,7 +2648,7 @@ 83,160,41,38,52,45,206,195,27,28,248,80,158,44,36,194,248,80,158,44,38, 194,11,28,192,27,249,22,208,83,160,41,39,46,45,27,83,160,41,40,47,45, 250,22,208,83,160,41,41,50,45,202,195,27,248,80,158,46,41,194,28,192,249, -80,158,47,42,23,16,27,252,22,60,202,23,17,206,204,23,16,27,83,160,41, +80,158,47,42,23,16,27,252,22,60,23,16,202,23,17,206,204,27,83,160,41, 42,49,45,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22, 8,89,162,32,33,40,9,226,19,2,3,1,250,22,31,89,162,32,32,36,9, 225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162, @@ -2658,19 +2660,19 @@ 8,34,9,225,6,5,4,27,250,22,208,83,160,41,44,38,45,250,22,208,83, 160,41,45,41,45,251,22,59,83,160,41,46,45,45,83,160,41,47,45,45,250, 22,2,89,162,33,33,41,9,223,16,250,22,208,83,160,41,48,35,45,249,22, -59,248,22,51,199,248,22,77,199,83,160,41,49,35,45,248,22,77,23,15,248, -22,88,23,15,250,22,208,83,160,41,50,48,45,250,22,59,83,160,41,51,51, +59,248,22,51,199,248,22,77,199,83,160,41,49,35,45,248,22,86,23,15,248, +22,51,23,15,250,22,208,83,160,41,50,48,45,250,22,59,83,160,41,51,51, 45,250,22,208,83,160,41,52,54,45,249,22,59,83,160,41,53,56,45,248,22, -86,23,23,83,160,41,54,54,45,250,22,208,83,160,41,55,54,45,249,22,55, -83,160,41,56,56,45,249,22,64,248,22,89,23,25,248,22,59,250,22,208,83, -160,41,57,8,30,45,249,22,55,83,160,41,58,8,32,45,248,22,51,23,31, +89,23,23,83,160,41,54,54,45,250,22,208,83,160,41,55,54,45,249,22,55, +83,160,41,56,56,45,249,22,64,248,22,88,23,25,248,22,59,250,22,208,83, +160,41,57,8,30,45,249,22,55,83,160,41,58,8,32,45,248,22,77,23,31, 83,160,41,59,8,30,45,83,160,41,8,28,54,45,83,160,41,8,29,48,45, 83,160,41,8,30,41,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32, 34,9,223,3,248,22,252,175,2,208,27,28,248,80,158,47,32,195,249,80,158, 48,33,248,80,158,49,34,197,27,248,80,158,50,35,198,28,248,80,158,50,36, 193,248,80,158,50,38,193,11,11,28,192,27,248,22,51,194,27,248,22,52,195, -249,80,158,50,42,23,19,27,254,22,60,23,15,23,22,202,23,19,23,17,23, -21,203,27,83,160,41,8,31,52,45,91,159,33,11,90,161,33,32,11,83,160, +249,80,158,50,42,23,19,27,254,22,60,23,21,202,23,15,23,22,203,23,19, +23,17,27,83,160,41,8,31,52,45,91,159,33,11,90,161,33,32,11,83,160, 38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,22,2,3,1,250,22, 31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,175,2, 248,22,252,175,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36, @@ -2681,13 +2683,13 @@ 22,208,83,160,41,8,33,38,45,250,22,208,83,160,41,8,34,41,45,251,22, 59,83,160,41,8,35,45,45,83,160,41,8,36,45,45,250,22,2,89,162,33, 33,41,9,223,16,250,22,208,83,160,41,8,37,35,45,249,22,59,248,22,51, -199,248,22,77,199,83,160,41,8,38,35,45,248,22,77,23,15,249,22,69,23, -16,37,250,22,208,83,160,41,8,39,48,45,251,22,59,83,160,41,8,40,52, -45,248,22,89,23,19,250,22,208,83,160,41,8,41,55,45,250,22,61,83,160, -41,8,42,58,45,249,22,68,23,26,38,248,22,86,23,25,83,160,41,8,43, +199,248,22,77,199,83,160,41,8,38,35,45,248,22,89,23,15,248,22,51,23, +15,250,22,208,83,160,41,8,39,48,45,251,22,59,83,160,41,8,40,52,45, +249,22,69,23,20,37,250,22,208,83,160,41,8,41,55,45,250,22,61,83,160, +41,8,42,58,45,249,22,69,23,26,36,248,22,77,23,25,83,160,41,8,43, 55,45,250,22,208,83,160,41,8,44,55,45,249,22,55,83,160,41,8,45,57, -45,249,22,64,249,22,69,23,27,36,248,22,59,250,22,208,83,160,41,8,46, -8,31,45,249,22,55,83,160,41,8,47,8,33,45,248,22,51,23,32,83,160, +45,249,22,64,249,22,68,23,27,38,248,22,59,250,22,208,83,160,41,8,46, +8,31,45,249,22,55,83,160,41,8,47,8,33,45,248,22,86,23,32,83,160, 41,8,48,8,31,45,83,160,41,8,49,55,45,83,160,41,8,50,48,45,83, 160,41,8,51,41,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, 9,223,3,248,22,252,175,2,208,250,22,252,32,2,11,6,10,10,98,97,100, @@ -2744,7 +2746,7 @@ 3,1,7,101,110,118,51,55,51,56,252,10,1,16,4,8,79,11,65,95,101, 108,115,101,252,11,1,3,1,7,101,110,118,51,55,51,57,252,12,1,9,16, 2,158,2,156,8,82,9,8,82,95,9,8,252,84,9,2,107,11,16,5,93, -2,55,89,162,32,33,56,9,223,0,27,249,22,208,83,160,41,32,35,39,196, +2,57,89,162,32,33,56,9,223,0,27,249,22,208,83,160,41,32,35,39,196, 27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248, 80,158,38,35,197,28,248,80,158,38,32,193,27,248,80,158,39,34,194,28,192, 249,80,158,40,36,194,248,80,158,41,37,248,80,158,42,35,197,11,11,11,28, @@ -2759,668 +2761,669 @@ 85,93,8,252,108,9,95,9,8,252,108,9,2,109,18,100,2,136,8,88,36, 35,34,8,83,16,6,8,87,11,3,1,4,103,52,54,52,252,14,1,3,1, 4,103,52,54,53,252,15,1,3,1,7,101,110,118,51,55,52,56,252,16,1, -2,252,16,1,16,6,8,86,11,2,55,63,101,120,112,252,17,1,3,1,7, +2,252,16,1,16,6,8,86,11,2,57,63,101,120,112,252,17,1,3,1,7, 101,110,118,51,55,52,57,252,18,1,2,252,18,1,18,158,2,144,8,88,18, 158,2,6,8,88,18,158,2,144,8,88,18,158,66,108,97,109,98,100,97,252, 19,1,8,88,18,158,9,8,88,18,158,2,144,8,88,18,158,2,144,8,88, -11,16,5,93,2,100,253,22,59,248,247,22,252,77,3,83,160,41,32,39,32, +11,16,5,93,2,83,253,22,59,248,247,22,252,77,3,83,160,41,32,39,32, 248,247,22,252,77,3,83,160,41,33,39,32,248,247,22,252,77,3,83,160,41, 34,39,32,248,22,59,248,247,22,252,77,3,83,160,41,35,40,32,248,22,59, 248,247,22,252,77,3,83,160,41,36,40,32,10,40,20,97,158,16,0,16,5, 18,97,2,4,8,89,36,35,34,18,158,2,6,8,89,18,158,2,8,8,89, -18,158,2,10,8,89,18,158,2,12,8,89,11,16,5,93,2,58,89,162,32, +18,158,2,10,8,89,18,158,2,12,8,89,11,16,5,93,2,56,89,162,32, 33,56,9,223,0,27,249,22,208,83,160,41,32,35,45,196,27,28,248,80,158, 35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197, 28,248,80,158,38,32,193,28,248,80,158,38,36,248,80,158,39,34,194,27,248, 80,158,39,35,194,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41, 34,195,27,248,80,158,42,35,196,28,248,80,158,42,37,193,248,80,158,42,38, 193,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22, -79,196,27,249,22,60,196,195,27,83,160,41,33,39,45,250,22,208,83,160,41, -34,42,45,250,22,208,83,160,41,35,45,45,250,22,61,83,160,41,36,48,45, -83,160,41,37,48,45,202,83,160,41,38,45,45,195,27,28,248,80,158,36,32, -195,249,80,158,37,33,248,80,158,38,34,197,27,248,80,158,39,35,198,28,248, -80,158,39,32,193,27,27,248,80,158,41,34,195,28,248,80,158,41,37,193,248, -22,8,89,162,32,33,39,9,224,9,1,27,249,22,2,89,162,32,33,44,9, -224,4,5,249,80,158,35,39,28,248,80,158,36,32,197,249,80,158,37,33,248, -80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80, -158,40,33,248,80,158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11, -11,194,248,80,158,37,38,196,28,248,22,56,193,21,94,9,9,248,80,158,35, -40,193,11,28,192,249,80,158,41,41,194,27,248,80,158,43,35,197,28,248,80, -158,43,32,193,249,80,158,44,33,248,80,158,45,34,195,27,248,80,158,46,35, -196,28,248,80,158,46,37,193,248,80,158,46,38,193,11,11,11,11,11,28,192, -27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248,22,89,197,27, -248,22,88,198,27,249,22,208,83,160,41,39,43,45,249,22,1,22,64,250,22, -2,22,58,248,22,215,27,83,160,41,40,50,45,250,22,208,83,160,41,41,53, -45,23,16,195,248,22,215,27,83,160,41,42,50,45,250,22,208,83,160,41,43, -53,45,23,15,195,27,28,248,80,158,43,37,194,248,80,158,43,38,194,11,28, -192,249,80,158,44,42,205,27,250,22,60,198,200,201,27,83,160,41,44,46,45, -91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162, -32,33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3, -7,90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36, -9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,172,2, -193,248,22,252,177,2,193,249,80,158,35,43,21,96,1,22,119,105,116,104,45, -99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,252,20,1,2, -21,96,2,19,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109, -97,114,107,45,115,101,116,45,102,105,114,115,116,252,21,1,11,2,21,63,112, -47,118,252,22,1,2,156,97,2,159,9,65,101,120,112,114,49,252,23,1,64, -101,120,112,114,252,24,1,2,156,83,160,41,45,35,45,89,162,32,32,54,9, -225,6,5,4,27,250,22,208,83,160,41,46,38,45,250,22,208,83,160,41,47, -41,45,251,22,59,83,160,41,48,45,45,83,160,41,49,45,45,250,22,208,83, -160,41,50,48,45,250,22,61,83,160,41,51,51,45,83,160,41,52,51,45,248, -22,51,23,18,83,160,41,53,48,45,250,22,208,83,160,41,54,48,45,251,22, -61,83,160,41,55,52,45,83,160,41,56,52,45,248,22,79,23,19,248,22,77, -23,19,83,160,41,57,48,45,83,160,41,58,41,45,197,89,162,32,32,33,9, -223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208,248,80,158,43, -44,83,160,41,59,43,45,250,22,252,32,2,11,6,10,10,98,97,100,32,115, -121,110,116,97,120,197,32,20,97,158,16,13,2,65,2,68,2,70,2,72,2, -76,2,78,2,80,2,232,2,233,2,74,2,164,2,166,2,234,16,28,18,98, -2,82,8,91,36,35,34,16,4,8,90,11,63,115,116,120,252,25,1,3,1, -7,101,110,118,51,55,53,54,252,26,1,18,16,2,95,2,135,8,92,93,8, -252,138,9,95,9,8,252,138,9,2,109,18,100,2,136,8,95,36,35,34,8, -90,16,8,8,94,11,3,1,4,103,52,55,49,252,27,1,3,1,4,103,52, -55,50,252,28,1,3,1,4,103,52,55,51,252,29,1,3,1,7,101,110,118, -51,55,54,51,252,30,1,2,252,30,1,2,252,30,1,16,8,8,93,11,2, -141,2,252,23,1,2,252,24,1,3,1,7,101,110,118,51,55,54,52,252,31, -1,2,252,31,1,2,252,31,1,18,158,2,144,8,95,18,158,2,159,8,95, -18,158,9,8,95,18,158,2,144,8,95,18,100,2,82,8,98,36,35,34,8, -90,16,12,8,97,11,3,1,4,103,52,54,54,252,32,1,3,1,4,103,52, -54,55,252,33,1,3,1,4,103,52,54,56,252,34,1,3,1,4,103,52,54, -57,252,35,1,3,1,4,103,52,55,48,252,36,1,3,1,7,101,110,118,51, -55,56,49,252,37,1,2,252,37,1,2,252,37,1,2,252,37,1,2,252,37, -1,16,12,8,96,11,2,141,65,112,97,114,97,109,252,38,1,63,118,97,108, -252,39,1,2,252,23,1,2,252,24,1,3,1,7,101,110,118,51,55,56,50, -252,40,1,2,252,40,1,2,252,40,1,2,252,40,1,2,252,40,1,18,16, -2,95,2,135,8,99,93,8,252,141,9,95,9,8,252,141,9,2,109,18,158, -2,136,8,98,18,16,2,95,2,135,8,100,93,8,252,142,9,95,9,8,252, -142,9,2,109,18,158,2,136,8,98,18,16,2,95,2,135,8,101,93,8,252, -145,9,95,9,8,252,145,9,2,109,18,16,2,99,2,156,8,106,93,8,252, -145,9,16,6,8,105,11,2,188,2,189,3,1,7,101,110,118,51,55,57,57, -252,41,1,2,252,41,1,16,4,8,104,11,2,199,3,1,7,101,110,118,51, -56,48,48,252,42,1,16,4,8,103,11,2,201,3,1,7,101,110,118,51,56, -48,49,252,43,1,16,4,8,102,11,2,203,3,1,7,101,110,118,51,56,48, -51,252,44,1,95,9,8,252,145,9,2,109,18,102,2,136,8,109,36,35,34, -8,90,8,97,8,96,16,4,8,108,11,3,1,4,103,52,55,54,252,45,1, -3,1,7,101,110,118,51,55,57,53,252,46,1,16,4,8,107,11,2,252,22, -1,3,1,7,101,110,118,51,55,57,54,252,47,1,18,158,2,144,8,109,18, -158,2,252,20,1,8,109,18,158,2,21,8,109,18,158,2,144,8,109,18,158, -2,19,8,109,18,158,95,16,2,158,2,252,21,1,8,109,9,16,2,158,11, -8,109,9,16,2,158,2,21,8,109,9,8,109,18,158,2,144,8,109,18,158, -2,144,8,109,18,158,2,159,8,109,18,158,9,8,109,18,158,2,144,8,109, -18,158,2,144,8,109,18,16,2,158,94,16,2,98,2,252,22,1,8,113,93, -8,252,140,9,16,4,8,112,11,3,1,8,119,115,116,109,112,52,55,52,252, -48,1,3,1,7,101,110,118,51,55,56,57,252,49,1,16,4,8,111,11,3, -1,4,103,52,55,53,252,50,1,3,1,7,101,110,118,51,56,49,48,252,51, -1,16,4,8,110,11,2,252,11,1,3,1,7,101,110,118,51,56,49,49,252, -52,1,9,16,2,158,2,156,8,113,9,8,113,95,9,8,252,140,9,2,107, -11,16,5,93,2,59,89,162,32,33,8,36,9,223,0,27,249,22,208,83,160, -41,32,35,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158, -37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39, -33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41,32,193, -249,80,158,42,33,248,80,158,43,34,195,27,248,80,158,44,35,196,28,248,80, -158,44,36,193,248,80,158,44,37,193,11,11,11,11,28,192,27,248,22,51,194, -27,248,22,77,195,27,248,22,86,196,27,248,22,87,197,249,80,158,40,38,201, -27,250,22,60,200,199,198,27,83,160,41,33,42,39,250,22,208,83,160,41,34, -45,39,250,22,208,83,160,41,35,48,39,251,22,59,83,160,41,36,52,39,83, -160,41,37,52,39,250,22,208,83,160,41,38,55,39,249,22,59,83,160,41,39, -57,39,250,22,208,83,160,41,40,8,28,39,250,22,61,83,160,41,41,8,31, -39,248,22,51,23,23,83,160,41,42,8,31,39,83,160,41,43,8,28,39,83, -160,41,44,55,39,250,22,208,83,160,41,45,55,39,250,22,59,83,160,41,46, -58,39,83,160,41,47,58,39,250,22,208,83,160,41,48,8,29,39,251,22,61, -83,160,41,49,8,33,39,83,160,41,50,8,33,39,248,22,77,23,25,248,22, -79,23,25,83,160,41,51,8,29,39,83,160,41,52,55,39,83,160,41,53,48, -39,195,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120, -196,32,20,97,158,16,7,2,65,2,68,2,70,2,72,2,78,2,80,2,164, -16,22,18,98,2,82,8,115,36,35,34,16,4,8,114,11,2,252,25,1,3, -1,7,101,110,118,51,56,49,52,252,53,1,18,16,2,95,2,135,8,116,93, -8,252,158,9,95,9,8,252,158,9,2,109,18,100,2,136,8,119,36,35,34, -8,114,16,10,8,118,11,3,1,4,103,52,55,55,252,54,1,3,1,4,103, -52,55,56,252,55,1,3,1,4,103,52,55,57,252,56,1,3,1,4,103,52, -56,48,252,57,1,3,1,7,101,110,118,51,56,50,49,252,58,1,2,252,58, -1,2,252,58,1,2,252,58,1,16,10,8,117,11,2,141,69,98,111,111,108, -45,101,120,112,114,252,59,1,2,252,23,1,2,252,24,1,3,1,7,101,110, -118,51,56,50,50,252,60,1,2,252,60,1,2,252,60,1,2,252,60,1,18, -158,2,144,8,119,18,158,2,252,20,1,8,119,18,158,2,47,8,119,18,158, -2,144,8,119,18,158,76,109,97,107,101,45,116,104,114,101,97,100,45,99,101, -108,108,252,61,1,8,119,18,158,2,144,8,119,18,158,2,90,8,119,18,16, -2,103,93,16,2,158,10,8,119,9,8,121,8,28,59,58,57,56,55,13,16, -3,33,2,173,2,109,93,8,252,158,9,16,6,8,120,11,2,188,2,189,3, -1,7,101,110,118,51,56,50,56,252,62,1,2,252,62,1,95,9,8,252,158, -9,2,109,18,158,2,144,8,119,18,158,2,144,8,119,18,158,2,144,8,119, -18,158,2,0,8,119,18,158,93,16,2,158,2,51,8,119,9,8,119,18,158, -2,144,8,119,18,158,2,159,8,119,18,158,9,8,119,18,158,2,144,8,119, -18,158,2,144,8,119,18,158,2,144,8,119,11,16,5,93,2,98,253,22,59, -248,247,22,252,77,3,83,160,41,32,39,32,248,247,22,252,77,3,83,160,41, -33,39,32,248,247,22,252,77,3,83,160,41,34,39,32,248,22,59,248,247,22, -252,77,3,83,160,41,35,40,32,248,22,59,248,247,22,252,77,3,83,160,41, -36,40,32,10,40,20,97,158,16,0,16,5,18,158,2,35,8,89,18,158,2, -37,8,89,18,158,2,39,8,89,18,158,2,41,8,89,18,158,2,43,8,89, -11,16,5,94,2,61,2,52,27,89,162,32,33,34,62,119,104,252,63,1,223, -1,89,162,32,33,56,9,224,0,1,27,249,22,208,83,160,41,32,36,44,197, -27,28,248,80,158,36,32,194,249,80,158,37,33,248,80,158,38,34,196,27,248, -80,158,39,35,197,28,248,80,158,39,32,193,28,248,80,158,39,36,248,80,158, -40,34,194,27,248,80,158,40,35,194,28,248,80,158,40,32,193,249,80,158,41, -33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,37,193, -248,80,158,43,38,193,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22, -77,195,27,248,22,79,196,249,80,158,40,39,201,27,249,22,60,198,197,27,83, -160,41,33,42,44,250,22,208,83,160,41,34,45,44,250,22,208,83,160,41,35, -48,44,250,22,61,83,160,41,36,51,44,83,160,41,37,51,44,202,83,160,41, -38,48,44,195,27,28,248,80,158,37,32,195,249,80,158,38,33,248,80,158,39, -34,197,27,248,80,158,40,35,198,28,248,80,158,40,32,193,27,27,248,80,158, -42,34,195,28,248,80,158,42,37,193,248,22,8,89,162,32,33,39,9,224,10, -1,27,249,22,2,89,162,32,33,44,9,224,4,5,249,80,158,35,40,28,248, -80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39, -35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248, -80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248, -22,56,193,21,94,9,9,248,80,158,35,41,193,11,28,192,249,80,158,42,42, -194,27,248,80,158,44,35,197,28,248,80,158,44,32,193,249,80,158,45,33,248, -80,158,46,34,195,27,248,80,158,47,35,196,28,248,80,158,47,37,193,248,80, -158,47,38,193,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195, -27,248,22,86,196,27,248,22,89,197,27,248,22,88,198,27,249,22,208,83,160, -41,39,44,44,28,203,83,160,41,40,44,44,83,160,41,41,44,44,249,80,158, -44,39,205,27,252,22,60,204,202,201,203,200,27,83,160,41,42,46,44,91,159, -33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33, -40,9,226,16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90, -161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9,224, -3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,172,2,193,248, -22,252,177,2,193,249,80,158,35,43,21,95,2,159,94,94,61,108,252,64,1, -95,64,108,105,115,116,252,65,1,95,64,99,111,110,115,252,66,1,64,112,114, -101,100,252,67,1,67,104,97,110,100,108,101,114,252,68,1,2,156,94,64,98, -111,100,121,252,69,1,97,2,252,19,1,9,2,252,23,1,2,252,24,1,2, -156,95,2,159,93,94,63,98,112,122,252,70,1,95,2,252,21,1,11,2,47, -96,2,252,20,1,2,47,94,2,252,61,1,11,93,94,67,99,97,108,108,47, -101,99,252,71,1,95,2,252,19,1,93,2,142,96,2,252,20,1,2,47,2, -252,70,1,95,2,58,93,94,1,25,99,117,114,114,101,110,116,45,101,120,99, -101,112,116,105,111,110,45,104,97,110,100,108,101,114,252,72,1,95,2,252,19, -1,93,61,101,252,73,1,94,2,142,95,2,252,19,1,9,96,2,159,64,108, -111,111,112,252,74,1,93,94,2,252,64,1,2,252,64,1,96,2,101,94,94, -65,110,117,108,108,63,252,75,1,2,252,64,1,94,65,114,97,105,115,101,252, -76,1,2,252,73,1,94,94,94,64,99,97,97,114,252,77,1,2,252,64,1, -2,252,73,1,63,117,113,49,252,78,1,94,2,191,94,2,252,74,1,94,63, -99,100,114,252,79,1,2,252,64,1,95,76,99,97,108,108,45,119,105,116,104, -45,118,97,108,117,101,115,252,80,1,2,252,69,1,95,2,252,19,1,64,97, -114,103,115,252,81,1,95,2,252,19,1,9,95,65,97,112,112,108,121,252,82, -1,66,118,97,108,117,101,115,252,83,1,2,252,81,1,83,160,41,43,35,44, -89,162,32,32,8,100,9,225,6,5,4,27,250,22,208,83,160,41,44,38,44, -250,22,208,83,160,41,45,41,44,250,22,59,83,160,41,46,44,44,250,22,208, -83,160,41,47,47,44,249,22,59,250,22,208,83,160,41,48,52,44,249,22,59, -83,160,41,49,54,44,250,22,208,83,160,41,50,57,44,249,22,55,83,160,41, -51,59,44,250,22,2,89,162,33,33,42,9,223,30,250,22,208,83,160,41,52, -35,44,250,22,59,83,160,41,53,38,44,248,22,51,200,248,22,77,200,83,160, -41,54,35,44,248,22,51,23,29,248,22,89,23,29,83,160,41,55,57,44,83, -160,41,56,52,44,250,22,208,83,160,41,57,52,44,249,22,59,83,160,41,58, -54,44,250,22,208,83,160,41,59,57,44,251,22,61,83,160,41,8,28,8,29, -44,83,160,41,8,29,8,29,44,248,22,77,23,28,248,22,86,23,28,83,160, -41,8,30,57,44,83,160,41,8,31,52,44,83,160,41,8,32,47,44,250,22, -208,83,160,41,8,33,47,44,250,22,59,83,160,41,8,34,50,44,83,160,41, -8,35,50,44,250,22,208,83,160,41,8,36,53,44,251,22,59,83,160,41,8, -37,57,44,83,160,41,8,38,57,44,83,160,41,8,39,57,44,250,22,208,83, -160,41,8,40,8,28,44,248,22,59,250,22,208,83,160,41,8,41,8,32,44, -249,22,59,83,160,41,8,42,8,34,44,250,22,208,83,160,41,8,43,8,37, -44,250,22,59,83,160,41,8,44,8,40,44,83,160,41,8,45,8,40,44,250, -22,208,83,160,41,8,46,8,43,44,251,22,59,83,160,41,8,47,8,47,44, -83,160,41,8,48,8,47,44,83,160,41,8,49,8,47,44,250,22,208,83,160, -41,8,50,8,50,44,250,22,61,83,160,41,8,51,8,53,44,250,22,208,83, -160,41,8,52,8,56,44,248,22,59,250,22,208,83,160,41,8,53,8,60,44, -249,22,59,83,160,41,8,54,8,62,44,250,22,208,83,160,41,8,55,8,65, -44,250,22,59,83,160,41,8,56,8,68,44,83,160,41,8,57,8,68,44,250, -22,208,83,160,41,8,58,8,71,44,249,22,59,83,160,41,8,59,8,73,44, -250,22,208,83,160,41,8,60,8,76,44,250,22,59,83,160,41,8,61,8,79, -44,83,160,41,8,62,8,79,44,250,22,208,83,160,41,8,63,8,82,44,251, -22,59,83,160,41,8,64,8,86,44,83,160,41,8,65,8,86,44,83,160,41, -8,66,8,86,44,250,22,208,83,160,41,8,67,8,89,44,251,22,61,83,160, -41,8,68,8,93,44,83,160,41,8,69,8,93,44,250,22,208,83,160,41,8, -70,8,96,44,249,22,59,83,160,41,8,71,8,98,44,248,22,88,23,97,83, -160,41,8,72,8,96,44,83,160,41,8,73,8,93,44,83,160,41,8,74,8, -89,44,83,160,41,8,75,8,82,44,83,160,41,8,76,8,76,44,83,160,41, -8,77,8,71,44,83,160,41,8,78,8,65,44,83,160,41,8,79,8,60,44, -83,160,41,8,80,8,56,44,83,160,41,8,81,8,53,44,83,160,41,8,82, -8,50,44,83,160,41,8,83,8,43,44,83,160,41,8,84,8,37,44,83,160, -41,8,85,8,32,44,83,160,41,8,86,8,28,44,83,160,41,8,87,53,44, -83,160,41,8,88,47,44,83,160,41,8,89,41,44,197,89,162,32,32,33,9, -223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208,250,22,252,32, -2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,249,22,7,248,195, -10,248,195,11,36,20,97,158,16,12,2,65,2,68,2,70,2,72,2,76,2, -78,2,80,2,164,2,232,2,233,2,74,2,166,16,90,18,99,2,82,8,124, -36,35,34,16,4,8,123,11,74,100,105,115,97,98,108,101,45,98,114,101,97, -107,63,252,84,1,3,1,7,101,110,118,51,56,51,50,252,85,1,16,4,8, -122,11,2,252,25,1,3,1,7,101,110,118,51,56,51,51,252,86,1,18,16, -2,95,2,135,8,125,93,8,252,189,9,95,9,8,252,189,9,2,109,18,101, -2,136,8,128,36,35,34,8,123,8,122,16,8,8,127,11,3,1,4,103,52, -56,54,252,87,1,3,1,4,103,52,56,55,252,88,1,3,1,4,103,52,56, -56,252,89,1,3,1,7,101,110,118,51,56,52,48,252,90,1,2,252,90,1, -2,252,90,1,16,8,8,126,11,2,141,2,252,23,1,2,252,24,1,3,1, -7,101,110,118,51,56,52,49,252,91,1,2,252,91,1,2,252,91,1,18,158, -2,144,8,128,18,158,2,159,8,128,18,158,9,8,128,18,158,2,144,8,128, -18,101,2,82,8,131,36,35,34,8,123,8,122,16,12,8,130,11,3,1,4, -103,52,56,49,252,92,1,3,1,4,103,52,56,50,252,93,1,3,1,4,103, -52,56,51,252,94,1,3,1,4,103,52,56,52,252,95,1,3,1,4,103,52, -56,53,252,96,1,3,1,7,101,110,118,51,56,53,56,252,97,1,2,252,97, -1,2,252,97,1,2,252,97,1,2,252,97,1,16,12,8,129,11,2,141,2, -252,67,1,2,252,68,1,2,252,23,1,2,252,24,1,3,1,7,101,110,118, -51,56,53,57,252,98,1,2,252,98,1,2,252,98,1,2,252,98,1,2,252, -98,1,18,158,95,16,2,158,66,98,101,103,105,110,48,252,99,1,8,131,9, -16,2,158,94,16,2,158,94,16,2,158,64,99,100,97,114,252,100,1,8,131, -9,16,2,158,2,252,64,1,8,131,9,8,131,9,16,2,158,2,252,73,1, -8,131,9,8,131,9,16,2,158,96,16,2,158,2,252,20,1,8,131,9,16, -2,158,2,47,8,131,9,16,2,158,2,252,70,1,8,131,9,16,2,158,93, -16,2,158,2,51,8,131,9,8,131,9,8,131,9,8,131,18,158,96,16,2, -158,2,252,20,1,8,131,9,16,2,158,2,47,8,131,9,16,2,158,2,252, -70,1,8,131,9,16,2,158,95,16,2,158,2,0,8,131,9,16,2,158,93, -16,2,158,2,51,8,131,9,8,131,9,16,2,158,94,16,2,158,94,16,2, -158,2,252,100,1,8,131,9,16,2,158,2,252,64,1,8,131,9,8,131,9, -16,2,158,2,252,73,1,8,131,9,8,131,9,8,131,9,8,131,18,16,2, -95,2,135,8,132,93,8,252,198,9,95,9,8,252,198,9,2,109,18,16,2, -99,2,156,8,137,93,8,252,198,9,16,6,8,136,11,2,188,2,189,3,1, -7,101,110,118,51,56,55,55,252,101,1,2,252,101,1,16,4,8,135,11,2, -199,3,1,7,101,110,118,51,56,55,56,252,102,1,16,4,8,134,11,2,201, -3,1,7,101,110,118,51,56,55,57,252,103,1,16,4,8,133,11,2,203,3, -1,7,101,110,118,51,56,56,49,252,104,1,95,9,8,252,198,9,2,109,18, -158,2,136,8,131,18,158,2,144,8,131,18,158,2,159,8,131,18,158,2,144, -8,131,18,158,2,144,8,131,18,158,2,252,64,1,8,131,18,158,2,144,8, -131,18,158,2,252,65,1,8,131,18,158,2,144,8,131,18,158,2,252,66,1, -8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18, -158,2,144,8,131,18,158,2,252,69,1,8,131,18,158,2,144,8,131,18,158, -2,252,19,1,8,131,18,158,9,8,131,18,158,2,144,8,131,18,158,2,144, -8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,159,8,131,18, -158,93,16,2,158,94,16,2,158,2,252,70,1,8,131,9,16,2,158,95,16, -2,158,2,252,21,1,8,131,9,16,2,158,11,8,131,9,16,2,158,2,47, -8,131,9,8,131,9,8,131,9,8,131,18,158,2,144,8,131,18,158,2,252, -20,1,8,131,18,158,2,47,8,131,18,158,94,16,2,158,2,252,61,1,8, -131,9,16,2,158,11,8,131,9,8,131,18,158,2,144,8,131,18,158,2,144, -8,131,18,158,2,252,71,1,8,131,18,158,2,144,8,131,18,158,2,252,19, -1,8,131,18,158,93,16,2,158,2,142,8,131,9,8,131,18,158,2,144,8, -131,18,158,2,252,20,1,8,131,18,158,2,47,8,131,18,158,2,252,70,1, -8,131,18,158,2,144,8,131,18,158,2,58,8,131,18,158,2,144,8,131,18, -158,2,144,8,131,18,158,2,252,72,1,8,131,18,158,2,144,8,131,18,158, -2,252,19,1,8,131,18,158,93,16,2,158,2,252,73,1,8,131,9,8,131, -18,158,2,144,8,131,18,158,2,142,8,131,18,158,2,144,8,131,18,158,2, -252,19,1,8,131,18,158,9,8,131,18,158,2,144,8,131,18,158,2,159,8, -131,18,158,2,252,74,1,8,131,18,158,93,16,2,158,94,16,2,158,2,252, -64,1,8,131,9,16,2,158,2,252,64,1,8,131,9,8,131,9,8,131,18, -158,2,144,8,131,18,158,2,101,8,131,18,158,94,16,2,158,94,16,2,158, -2,252,75,1,8,131,9,16,2,158,2,252,64,1,8,131,9,8,131,9,16, -2,158,94,16,2,158,2,252,76,1,8,131,9,16,2,158,2,252,73,1,8, -131,9,8,131,9,8,131,18,158,2,144,8,131,18,158,94,16,2,158,94,16, -2,158,2,252,77,1,8,131,9,16,2,158,2,252,64,1,8,131,9,8,131, -9,16,2,158,2,252,73,1,8,131,9,8,131,18,158,2,144,8,131,18,16, -2,105,93,16,2,158,94,16,2,158,2,191,8,131,9,16,2,158,94,16,2, -158,2,252,74,1,8,131,9,16,2,158,94,16,2,158,2,252,79,1,8,131, -9,16,2,158,2,252,64,1,8,131,9,8,131,9,8,131,9,8,131,9,8, -141,8,28,59,58,57,56,55,13,16,3,33,2,173,2,109,93,8,252,198,9, -16,6,8,140,11,2,188,2,189,2,252,101,1,2,252,101,1,16,4,8,139, -11,2,199,2,252,102,1,16,4,8,138,11,2,201,2,252,103,1,95,9,8, -252,198,9,2,109,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144, -8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18, -158,2,144,8,131,18,16,2,158,93,16,2,158,95,16,2,158,2,252,80,1, -8,131,9,16,2,158,2,252,69,1,8,131,9,16,2,158,95,16,2,158,2, -252,19,1,8,131,9,16,2,158,2,252,81,1,8,131,9,16,2,158,95,16, -2,158,2,252,19,1,8,131,9,16,2,158,9,8,131,9,16,2,158,95,16, -2,158,2,252,82,1,8,131,9,16,2,158,2,252,83,1,8,131,9,16,2, -158,2,252,81,1,8,131,9,8,131,9,8,131,9,8,131,9,8,131,9,8, -141,95,9,8,252,198,9,2,109,18,158,2,144,8,131,18,158,2,144,8,131, -18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2, -144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,11,16,5,93,2,60, -89,162,32,33,58,9,223,0,27,249,22,208,83,160,41,32,35,46,196,27,28, -248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158, -38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80,158,39,34, -194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,27,248,80,158,40,34, -194,28,192,249,80,158,41,37,194,248,80,158,42,36,248,80,158,43,35,197,11, -11,11,11,11,28,192,27,248,22,51,194,27,248,22,52,195,27,83,160,41,33, -37,46,250,22,208,83,160,41,34,40,46,250,22,208,83,160,41,35,43,46,250, -22,61,83,160,41,36,46,46,250,22,208,83,160,41,37,49,46,248,22,59,250, -22,208,83,160,41,38,53,46,249,22,59,83,160,41,39,55,46,23,19,83,160, -41,40,53,46,83,160,41,41,49,46,83,160,41,42,46,46,83,160,41,43,43, -46,195,27,89,162,32,32,51,2,162,225,3,4,2,27,89,162,32,32,36,2, -162,223,1,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97, -120,195,27,28,248,80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197, -27,248,80,158,40,35,198,28,248,80,158,40,32,193,27,27,248,80,158,42,34, -195,28,248,80,158,42,38,193,248,22,58,248,80,158,43,39,194,11,28,192,249, -80,158,42,37,194,27,248,80,158,44,35,197,28,248,80,158,44,32,193,27,248, -80,158,45,34,194,28,192,249,80,158,46,37,194,248,80,158,47,36,248,80,158, -48,35,197,11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27, -248,22,79,196,28,27,248,80,158,41,39,27,83,160,41,44,42,46,250,22,208, -83,160,41,45,45,46,199,195,87,94,249,22,3,89,162,32,33,39,9,224,10, -9,28,248,80,158,34,40,195,12,251,22,252,32,2,11,6,17,17,110,111,116, -32,97,110,32,105,100,101,110,116,105,102,105,101,114,196,198,194,27,248,80,158, -42,41,194,28,192,251,22,252,32,2,11,6,20,20,100,117,112,108,105,99,97, -116,101,32,105,100,101,110,116,105,102,105,101,114,204,196,12,27,249,22,208,83, -160,41,46,42,46,248,80,158,43,42,27,83,160,41,47,44,46,250,22,208,83, -160,41,48,47,46,201,195,27,28,248,80,158,42,38,194,248,80,158,42,39,194, -11,28,192,249,80,158,43,43,202,27,250,22,60,198,201,200,27,83,160,41,49, -45,46,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8, -89,162,32,33,40,9,226,15,2,3,1,250,22,31,89,162,32,32,36,9,225, -6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32, -33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252, -172,2,193,248,22,252,177,2,193,249,80,158,35,44,21,96,70,108,101,116,45, -118,97,108,117,101,115,252,105,1,93,94,94,64,116,101,109,112,252,106,1,2, -156,2,252,24,1,95,64,115,101,116,33,252,107,1,62,105,100,252,108,1,2, -252,106,1,2,156,83,160,41,50,35,46,89,162,32,32,55,9,225,6,5,4, -27,250,22,208,83,160,41,51,38,46,250,22,208,83,160,41,52,41,46,250,22, -61,83,160,41,53,44,46,250,22,208,83,160,41,54,47,46,248,22,59,250,22, -208,83,160,41,55,51,46,249,22,59,248,22,51,23,20,248,22,79,23,20,83, -160,41,56,51,46,83,160,41,57,47,46,250,22,2,89,162,33,33,42,9,223, -15,250,22,208,83,160,41,58,35,46,250,22,59,83,160,41,59,38,46,248,22, -51,200,248,22,77,200,83,160,41,8,28,35,46,248,22,77,206,248,22,51,206, -83,160,41,8,29,41,46,197,89,162,32,32,33,9,223,0,192,89,162,32,32, -34,9,223,3,248,22,252,175,2,208,248,80,158,42,45,83,160,41,8,30,42, -46,247,196,247,193,27,28,248,80,158,37,32,196,249,80,158,38,33,248,80,158, -39,34,198,27,248,80,158,40,35,199,28,248,80,158,40,32,193,27,27,248,80, -158,42,34,195,28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34, -195,248,80,158,44,36,248,80,158,45,35,196,11,28,192,249,80,158,42,37,194, -27,248,80,158,44,35,197,28,248,80,158,44,32,193,27,248,80,158,45,34,194, -28,192,249,80,158,46,37,194,248,80,158,47,36,248,80,158,48,35,197,11,11, -11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,79,196,28, -248,80,158,40,40,194,27,249,22,60,196,195,27,83,160,41,8,31,41,46,250, -22,208,83,160,41,8,32,44,46,250,22,208,83,160,41,8,33,47,46,250,22, -59,83,160,41,8,34,50,46,248,22,51,203,248,22,52,203,83,160,41,8,35, -47,46,195,247,196,247,193,32,20,97,158,16,14,2,65,2,68,2,70,2,72, -2,76,2,74,2,78,2,80,2,163,30,252,109,1,2,104,2,115,0,30,252, -110,1,2,107,2,112,0,2,164,2,166,2,234,16,36,18,98,2,82,8,143, -36,35,34,16,4,8,142,11,2,252,25,1,3,1,7,101,110,118,51,56,57, -48,252,111,1,18,16,2,95,2,135,8,144,93,8,252,222,9,95,9,8,252, -222,9,2,109,18,100,2,136,8,147,36,35,34,8,142,16,6,8,146,11,3, -1,4,103,52,57,56,252,112,1,3,1,4,103,52,57,57,252,113,1,3,1, -7,101,110,118,51,56,57,55,252,114,1,2,252,114,1,16,6,8,145,11,2, -141,2,252,24,1,3,1,7,101,110,118,51,56,57,56,252,115,1,2,252,115, -1,18,158,2,144,8,147,18,158,2,252,105,1,8,147,18,158,2,144,8,147, -18,158,2,144,8,147,18,158,9,8,147,18,158,2,144,8,147,18,158,2,144, -8,147,18,16,2,103,93,16,2,158,93,16,2,158,64,118,111,105,100,252,116, -1,8,147,9,8,147,9,8,149,8,28,59,58,57,56,55,13,16,3,33,2, -173,2,109,93,8,252,222,9,16,6,8,148,11,2,188,2,189,3,1,7,101, -110,118,51,57,48,50,252,117,1,2,252,117,1,95,9,8,252,222,9,2,109, -18,158,2,144,8,147,18,16,2,95,2,135,8,150,93,8,252,223,9,95,9, -8,252,223,9,2,109,18,100,2,136,8,153,36,35,34,8,142,16,8,8,152, -11,3,1,4,103,52,57,50,252,118,1,3,1,4,103,52,57,51,252,119,1, -3,1,4,103,52,57,52,252,120,1,3,1,7,101,110,118,51,57,49,52,252, -121,1,2,252,121,1,2,252,121,1,16,8,8,151,11,2,141,2,252,108,1, -2,252,24,1,3,1,7,101,110,118,51,57,49,53,252,122,1,2,252,122,1, -2,252,122,1,18,158,2,82,8,153,18,16,2,95,2,135,8,154,93,8,252, -227,9,95,9,8,252,227,9,2,109,18,158,2,136,8,153,18,16,2,95,2, -135,8,155,93,8,252,230,9,95,9,8,252,230,9,2,109,18,16,2,99,2, -156,8,160,93,8,252,230,9,16,6,8,159,11,2,188,2,189,3,1,7,101, -110,118,51,57,51,50,252,123,1,2,252,123,1,16,4,8,158,11,2,199,3, -1,7,101,110,118,51,57,51,51,252,124,1,16,4,8,157,11,2,201,3,1, -7,101,110,118,51,57,51,52,252,125,1,16,4,8,156,11,2,203,3,1,7, -101,110,118,51,57,51,54,252,126,1,95,9,8,252,230,9,2,109,18,102,2, -136,8,163,36,35,34,8,142,8,152,8,151,16,4,8,162,11,3,1,4,103, -53,48,50,252,127,1,3,1,7,101,110,118,51,57,50,56,252,128,1,16,4, -8,161,11,2,252,106,1,3,1,7,101,110,118,51,57,50,57,252,129,1,18, -158,2,144,8,163,18,158,2,252,105,1,8,163,18,158,2,144,8,163,18,158, -2,144,8,163,18,158,2,144,8,163,18,158,2,144,8,163,18,158,2,144,8, -163,18,158,2,252,107,1,8,163,18,158,2,144,8,163,18,158,2,144,8,163, -18,16,2,158,94,16,2,98,2,252,106,1,8,167,93,8,252,226,9,16,4, -8,166,11,3,1,8,119,115,116,109,112,53,48,48,252,130,1,3,1,7,101, -110,118,51,57,50,51,252,131,1,16,4,8,165,11,3,1,4,103,53,48,49, -252,132,1,3,1,7,101,110,118,51,57,52,53,252,133,1,16,4,8,164,11, -2,252,11,1,3,1,7,101,110,118,51,57,52,54,252,134,1,9,16,2,158, -2,156,8,167,9,8,167,95,9,8,252,226,9,2,107,18,16,2,95,2,135, -8,168,93,8,252,233,9,95,9,8,252,233,9,2,109,18,100,2,136,8,171, -36,35,34,8,142,16,8,8,170,11,3,1,4,103,52,57,53,252,135,1,3, -1,4,103,52,57,54,252,136,1,3,1,4,103,52,57,55,252,137,1,3,1, -7,101,110,118,51,57,53,53,252,138,1,2,252,138,1,2,252,138,1,16,8, -8,169,11,2,141,2,252,108,1,2,252,24,1,3,1,7,101,110,118,51,57, -53,54,252,139,1,2,252,139,1,2,252,139,1,18,158,2,144,8,171,18,158, -2,252,107,1,8,171,18,158,2,144,8,171,11,16,5,93,2,57,89,162,32, -33,8,32,9,223,0,27,249,22,208,83,160,41,32,35,39,196,27,28,248,80, -158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35, -197,28,248,80,158,38,32,193,249,80,158,39,33,248,80,158,40,34,195,27,248, -80,158,41,35,196,28,248,80,158,41,32,193,249,80,158,42,33,248,80,158,43, -34,195,27,248,80,158,44,35,196,28,248,80,158,44,36,193,248,80,158,44,37, -193,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86, -196,27,248,22,87,197,249,80,158,40,38,201,27,250,22,60,198,199,200,27,83, -160,41,33,42,39,250,22,208,83,160,41,34,45,39,250,22,208,83,160,41,35, -48,39,249,22,59,83,160,41,36,50,39,250,22,208,83,160,41,37,53,39,251, -22,61,83,160,41,38,57,39,250,22,208,83,160,41,39,8,28,39,248,22,59, -248,22,79,23,21,83,160,41,40,8,28,39,248,22,77,23,17,248,22,51,23, -17,83,160,41,41,53,39,83,160,41,42,48,39,195,250,22,252,32,2,11,6, -10,10,98,97,100,32,115,121,110,116,97,120,196,32,20,97,158,16,7,2,65, -2,68,2,70,2,72,2,78,2,80,2,164,16,11,18,98,2,82,8,173,36, -35,34,16,4,8,172,11,2,252,25,1,3,1,7,101,110,118,51,57,54,50, -252,140,1,18,16,2,95,2,135,8,174,93,8,252,243,9,95,9,8,252,243, -9,2,109,18,100,2,136,8,177,36,35,34,8,172,16,10,8,176,11,3,1, -4,103,53,48,51,252,141,1,3,1,4,103,53,48,52,252,142,1,3,1,4, -103,53,48,53,252,143,1,3,1,4,103,53,48,54,252,144,1,3,1,7,101, -110,118,51,57,54,57,252,145,1,2,252,145,1,2,252,145,1,2,252,145,1, -16,10,8,175,11,2,141,2,226,65,98,111,100,121,49,252,146,1,2,252,69, -1,3,1,7,101,110,118,51,57,55,48,252,147,1,2,252,147,1,2,252,147, -1,2,252,147,1,18,158,2,144,8,177,18,158,67,99,97,108,108,47,99,99, -252,148,1,8,177,18,158,2,144,8,177,18,158,2,252,19,1,8,177,18,158, -2,144,8,177,18,158,2,144,8,177,18,158,2,144,8,177,18,158,2,144,8, -177,11,16,5,93,2,62,89,162,32,33,51,9,223,0,27,249,22,208,83,160, -41,32,35,41,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158, -37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39, -33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41,32,193, -27,27,248,80,158,43,34,195,28,248,80,158,43,36,193,248,22,58,248,80,158, -44,37,194,11,28,192,249,80,158,43,38,194,27,248,80,158,45,35,197,28,248, -80,158,45,32,193,249,80,158,46,33,248,80,158,47,34,195,27,248,80,158,48, -35,196,28,248,80,158,48,36,193,248,80,158,48,37,193,11,11,11,11,11,11, -28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248,22,89, -197,27,248,22,88,198,249,80,158,41,39,202,27,251,22,60,202,200,199,201,27, -83,160,41,33,43,41,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11, -247,248,22,8,89,162,32,33,40,9,226,13,2,3,1,250,22,31,89,162,32, -32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175, -2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3, -28,248,22,252,172,2,193,248,22,252,177,2,193,249,80,158,35,40,21,98,2, -159,9,95,2,88,64,98,97,115,101,252,149,1,94,65,102,105,101,108,100,252, -150,1,2,156,2,252,146,1,2,252,69,1,2,156,83,160,41,34,35,41,89, -162,32,32,54,9,225,6,5,4,27,250,22,208,83,160,41,35,38,41,250,22, -208,83,160,41,36,41,41,252,22,61,83,160,41,37,46,41,83,160,41,38,46, -41,250,22,208,83,160,41,39,49,41,250,22,59,83,160,41,40,52,41,248,22, -51,23,19,248,22,87,23,19,83,160,41,41,49,41,248,22,77,205,248,22,86, -205,83,160,41,42,41,41,197,89,162,32,32,33,9,223,0,192,89,162,32,32, +79,196,27,249,22,60,195,196,27,83,160,41,33,39,45,250,22,208,83,160,41, +34,42,45,250,22,208,83,160,41,35,45,45,251,22,61,83,160,41,36,49,45, +83,160,41,37,49,45,248,22,52,204,248,22,51,204,83,160,41,38,45,45,195, +27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197,27,248, +80,158,39,35,198,28,248,80,158,39,32,193,27,27,248,80,158,41,34,195,28, +248,80,158,41,37,193,248,22,8,89,162,32,33,39,9,224,9,1,27,249,22, +2,89,162,32,33,44,9,224,4,5,249,80,158,35,39,28,248,80,158,36,32, +197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200,28,248, +80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158,41,36, +248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,56,193,21, +94,9,9,248,80,158,35,40,193,11,28,192,249,80,158,41,41,194,27,248,80, +158,43,35,197,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45,34, +195,27,248,80,158,46,35,196,28,248,80,158,46,37,193,248,80,158,46,38,193, +11,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86, +196,27,248,22,89,197,27,248,22,88,198,27,249,22,208,83,160,41,39,43,45, +249,22,1,22,64,250,22,2,22,58,248,22,215,27,83,160,41,40,50,45,250, +22,208,83,160,41,41,53,45,23,16,195,248,22,215,27,83,160,41,42,50,45, +250,22,208,83,160,41,43,53,45,23,15,195,27,28,248,80,158,43,37,194,248, +80,158,43,38,194,11,28,192,249,80,158,44,42,205,27,250,22,60,198,200,201, +27,83,160,41,44,46,45,91,159,33,11,90,161,33,32,11,83,160,38,32,33, +11,247,248,22,8,89,162,32,33,40,9,226,16,2,3,1,250,22,31,89,162, +32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252, +175,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2, +3,28,248,22,252,172,2,193,248,22,252,177,2,193,249,80,158,35,43,21,96, +1,22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109, +97,114,107,252,20,1,2,21,96,2,19,95,1,27,99,111,110,116,105,110,117, +97,116,105,111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,252, +21,1,11,2,21,63,112,47,118,252,22,1,2,156,97,2,159,9,65,101,120, +112,114,49,252,23,1,64,101,120,112,114,252,24,1,2,156,83,160,41,45,35, +45,89,162,32,32,54,9,225,6,5,4,27,250,22,208,83,160,41,46,38,45, +250,22,208,83,160,41,47,41,45,251,22,59,83,160,41,48,45,45,83,160,41, +49,45,45,250,22,208,83,160,41,50,48,45,250,22,61,83,160,41,51,51,45, +83,160,41,52,51,45,248,22,51,23,18,83,160,41,53,48,45,250,22,208,83, +160,41,54,48,45,251,22,61,83,160,41,55,52,45,83,160,41,56,52,45,248, +22,79,23,19,248,22,77,23,19,83,160,41,57,48,45,83,160,41,58,41,45, +197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252, +175,2,208,248,80,158,43,44,83,160,41,59,43,45,250,22,252,32,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,97,158,16,13,2,65, +2,68,2,70,2,72,2,76,2,78,2,80,2,232,2,233,2,74,2,164,2, +166,2,234,16,28,18,98,2,82,8,91,36,35,34,16,4,8,90,11,63,115, +116,120,252,25,1,3,1,7,101,110,118,51,55,53,54,252,26,1,18,16,2, +95,2,135,8,92,93,8,252,138,9,95,9,8,252,138,9,2,109,18,100,2, +136,8,95,36,35,34,8,90,16,8,8,94,11,3,1,4,103,52,55,49,252, +27,1,3,1,4,103,52,55,50,252,28,1,3,1,4,103,52,55,51,252,29, +1,3,1,7,101,110,118,51,55,54,51,252,30,1,2,252,30,1,2,252,30, +1,16,8,8,93,11,2,141,2,252,23,1,2,252,24,1,3,1,7,101,110, +118,51,55,54,52,252,31,1,2,252,31,1,2,252,31,1,18,158,2,144,8, +95,18,158,2,159,8,95,18,158,9,8,95,18,158,2,144,8,95,18,100,2, +82,8,98,36,35,34,8,90,16,12,8,97,11,3,1,4,103,52,54,54,252, +32,1,3,1,4,103,52,54,55,252,33,1,3,1,4,103,52,54,56,252,34, +1,3,1,4,103,52,54,57,252,35,1,3,1,4,103,52,55,48,252,36,1, +3,1,7,101,110,118,51,55,56,49,252,37,1,2,252,37,1,2,252,37,1, +2,252,37,1,2,252,37,1,16,12,8,96,11,2,141,65,112,97,114,97,109, +252,38,1,63,118,97,108,252,39,1,2,252,23,1,2,252,24,1,3,1,7, +101,110,118,51,55,56,50,252,40,1,2,252,40,1,2,252,40,1,2,252,40, +1,2,252,40,1,18,16,2,95,2,135,8,99,93,8,252,141,9,95,9,8, +252,141,9,2,109,18,158,2,136,8,98,18,16,2,95,2,135,8,100,93,8, +252,142,9,95,9,8,252,142,9,2,109,18,158,2,136,8,98,18,16,2,95, +2,135,8,101,93,8,252,145,9,95,9,8,252,145,9,2,109,18,16,2,99, +2,156,8,106,93,8,252,145,9,16,6,8,105,11,2,188,2,189,3,1,7, +101,110,118,51,55,57,57,252,41,1,2,252,41,1,16,4,8,104,11,2,199, +3,1,7,101,110,118,51,56,48,48,252,42,1,16,4,8,103,11,2,201,3, +1,7,101,110,118,51,56,48,49,252,43,1,16,4,8,102,11,2,203,3,1, +7,101,110,118,51,56,48,51,252,44,1,95,9,8,252,145,9,2,109,18,102, +2,136,8,109,36,35,34,8,90,8,97,8,96,16,4,8,108,11,3,1,4, +103,52,55,54,252,45,1,3,1,7,101,110,118,51,55,57,53,252,46,1,16, +4,8,107,11,2,252,22,1,3,1,7,101,110,118,51,55,57,54,252,47,1, +18,158,2,144,8,109,18,158,2,252,20,1,8,109,18,158,2,21,8,109,18, +158,2,144,8,109,18,158,2,19,8,109,18,158,95,16,2,158,2,252,21,1, +8,109,9,16,2,158,11,8,109,9,16,2,158,2,21,8,109,9,8,109,18, +158,2,144,8,109,18,158,2,144,8,109,18,158,2,159,8,109,18,158,9,8, +109,18,158,2,144,8,109,18,158,2,144,8,109,18,16,2,158,94,16,2,98, +2,252,22,1,8,113,93,8,252,140,9,16,4,8,112,11,3,1,8,119,115, +116,109,112,52,55,52,252,48,1,3,1,7,101,110,118,51,55,56,57,252,49, +1,16,4,8,111,11,3,1,4,103,52,55,53,252,50,1,3,1,7,101,110, +118,51,56,49,48,252,51,1,16,4,8,110,11,2,252,11,1,3,1,7,101, +110,118,51,56,49,49,252,52,1,9,16,2,158,2,156,8,113,9,8,113,95, +9,8,252,140,9,2,107,11,16,5,93,2,55,89,162,32,33,8,36,9,223, +0,27,249,22,208,83,160,41,32,35,39,196,27,28,248,80,158,35,32,194,249, +80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158, +38,32,193,249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196, +28,248,80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195,27,248,80, +158,44,35,196,28,248,80,158,44,36,193,248,80,158,44,37,193,11,11,11,11, +28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248,22,87, +197,249,80,158,40,38,201,27,250,22,60,198,200,199,27,83,160,41,33,42,39, +250,22,208,83,160,41,34,45,39,250,22,208,83,160,41,35,48,39,251,22,59, +83,160,41,36,52,39,83,160,41,37,52,39,250,22,208,83,160,41,38,55,39, +249,22,59,83,160,41,39,57,39,250,22,208,83,160,41,40,8,28,39,250,22, +61,83,160,41,41,8,31,39,248,22,77,23,23,83,160,41,42,8,31,39,83, +160,41,43,8,28,39,83,160,41,44,55,39,250,22,208,83,160,41,45,55,39, +250,22,59,83,160,41,46,58,39,83,160,41,47,58,39,250,22,208,83,160,41, +48,8,29,39,251,22,61,83,160,41,49,8,33,39,83,160,41,50,8,33,39, +248,22,79,23,25,248,22,51,23,25,83,160,41,51,8,29,39,83,160,41,52, +55,39,83,160,41,53,48,39,195,250,22,252,32,2,11,6,10,10,98,97,100, +32,115,121,110,116,97,120,196,32,20,97,158,16,7,2,65,2,68,2,70,2, +72,2,78,2,80,2,164,16,22,18,98,2,82,8,115,36,35,34,16,4,8, +114,11,2,252,25,1,3,1,7,101,110,118,51,56,49,52,252,53,1,18,16, +2,95,2,135,8,116,93,8,252,158,9,95,9,8,252,158,9,2,109,18,100, +2,136,8,119,36,35,34,8,114,16,10,8,118,11,3,1,4,103,52,55,55, +252,54,1,3,1,4,103,52,55,56,252,55,1,3,1,4,103,52,55,57,252, +56,1,3,1,4,103,52,56,48,252,57,1,3,1,7,101,110,118,51,56,50, +49,252,58,1,2,252,58,1,2,252,58,1,2,252,58,1,16,10,8,117,11, +2,141,69,98,111,111,108,45,101,120,112,114,252,59,1,2,252,23,1,2,252, +24,1,3,1,7,101,110,118,51,56,50,50,252,60,1,2,252,60,1,2,252, +60,1,2,252,60,1,18,158,2,144,8,119,18,158,2,252,20,1,8,119,18, +158,2,47,8,119,18,158,2,144,8,119,18,158,76,109,97,107,101,45,116,104, +114,101,97,100,45,99,101,108,108,252,61,1,8,119,18,158,2,144,8,119,18, +158,2,91,8,119,18,16,2,103,93,16,2,158,10,8,119,9,8,121,8,28, +59,58,57,56,55,13,16,3,33,2,173,2,109,93,8,252,158,9,16,6,8, +120,11,2,188,2,189,3,1,7,101,110,118,51,56,50,56,252,62,1,2,252, +62,1,95,9,8,252,158,9,2,109,18,158,2,144,8,119,18,158,2,144,8, +119,18,158,2,144,8,119,18,158,2,0,8,119,18,158,93,16,2,158,2,51, +8,119,9,8,119,18,158,2,144,8,119,18,158,2,159,8,119,18,158,9,8, +119,18,158,2,144,8,119,18,158,2,144,8,119,18,158,2,144,8,119,11,16, +5,93,2,100,253,22,59,248,247,22,252,77,3,83,160,41,32,39,32,248,247, +22,252,77,3,83,160,41,33,39,32,248,247,22,252,77,3,83,160,41,34,39, +32,248,22,59,248,247,22,252,77,3,83,160,41,35,40,32,248,22,59,248,247, +22,252,77,3,83,160,41,36,40,32,10,40,20,97,158,16,0,16,5,18,158, +2,35,8,89,18,158,2,37,8,89,18,158,2,39,8,89,18,158,2,41,8, +89,18,158,2,43,8,89,11,16,5,94,2,58,2,61,27,89,162,32,33,34, +62,119,104,252,63,1,223,1,89,162,32,33,56,9,224,0,1,27,249,22,208, +83,160,41,32,36,44,197,27,28,248,80,158,36,32,194,249,80,158,37,33,248, +80,158,38,34,196,27,248,80,158,39,35,197,28,248,80,158,39,32,193,28,248, +80,158,39,36,248,80,158,40,34,194,27,248,80,158,40,35,194,28,248,80,158, +40,32,193,249,80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35,196, +28,248,80,158,43,37,193,248,80,158,43,38,193,11,11,11,11,11,28,192,27, +248,22,51,194,27,248,22,77,195,27,248,22,79,196,249,80,158,40,39,201,27, +249,22,60,197,198,27,83,160,41,33,42,44,250,22,208,83,160,41,34,45,44, +250,22,208,83,160,41,35,48,44,251,22,61,83,160,41,36,52,44,83,160,41, +37,52,44,248,22,52,204,248,22,51,204,83,160,41,38,48,44,195,27,28,248, +80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197,27,248,80,158,40, +35,198,28,248,80,158,40,32,193,27,27,248,80,158,42,34,195,28,248,80,158, +42,37,193,248,22,8,89,162,32,33,39,9,224,10,1,27,249,22,2,89,162, +32,33,44,9,224,4,5,249,80,158,35,40,28,248,80,158,36,32,197,249,80, +158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158,39, +32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158,41,36,248,80,158, +42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,56,193,21,94,9,9, +248,80,158,35,41,193,11,28,192,249,80,158,42,42,194,27,248,80,158,44,35, +197,28,248,80,158,44,32,193,249,80,158,45,33,248,80,158,46,34,195,27,248, +80,158,47,35,196,28,248,80,158,47,37,193,248,80,158,47,38,193,11,11,11, +11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248, +22,89,197,27,248,22,88,198,27,249,22,208,83,160,41,39,44,44,28,203,83, +160,41,40,44,44,83,160,41,41,44,44,249,80,158,44,39,205,27,252,22,60, +204,201,202,200,203,27,83,160,41,42,46,44,91,159,33,11,90,161,33,32,11, +83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,16,2,3,1, +250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252, +175,2,248,22,252,175,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32, +32,36,9,224,2,3,28,248,22,252,172,2,193,248,22,252,177,2,193,249,80, +158,35,43,21,95,2,159,94,94,61,108,252,64,1,95,64,108,105,115,116,252, +65,1,95,64,99,111,110,115,252,66,1,64,112,114,101,100,252,67,1,67,104, +97,110,100,108,101,114,252,68,1,2,156,94,64,98,111,100,121,252,69,1,97, +2,252,19,1,9,2,252,23,1,2,252,24,1,2,156,95,2,159,93,94,63, +98,112,122,252,70,1,95,2,252,21,1,11,2,47,96,2,252,20,1,2,47, +94,2,252,61,1,11,93,94,67,99,97,108,108,47,101,99,252,71,1,95,2, +252,19,1,93,2,142,96,2,252,20,1,2,47,2,252,70,1,95,2,56,93, +94,1,25,99,117,114,114,101,110,116,45,101,120,99,101,112,116,105,111,110,45, +104,97,110,100,108,101,114,252,72,1,95,2,252,19,1,93,61,101,252,73,1, +94,2,142,95,2,252,19,1,9,96,2,159,64,108,111,111,112,252,74,1,93, +94,2,252,64,1,2,252,64,1,96,2,101,94,94,65,110,117,108,108,63,252, +75,1,2,252,64,1,94,65,114,97,105,115,101,252,76,1,2,252,73,1,94, +94,94,64,99,97,97,114,252,77,1,2,252,64,1,2,252,73,1,63,117,113, +49,252,78,1,94,2,191,94,2,252,74,1,94,63,99,100,114,252,79,1,2, +252,64,1,95,76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101,115, +252,80,1,2,252,69,1,95,2,252,19,1,64,97,114,103,115,252,81,1,95, +2,252,19,1,9,95,65,97,112,112,108,121,252,82,1,66,118,97,108,117,101, +115,252,83,1,2,252,81,1,83,160,41,43,35,44,89,162,32,32,8,100,9, +225,6,5,4,27,250,22,208,83,160,41,44,38,44,250,22,208,83,160,41,45, +41,44,250,22,59,83,160,41,46,44,44,250,22,208,83,160,41,47,47,44,249, +22,59,250,22,208,83,160,41,48,52,44,249,22,59,83,160,41,49,54,44,250, +22,208,83,160,41,50,57,44,249,22,55,83,160,41,51,59,44,250,22,2,89, +162,33,33,42,9,223,30,250,22,208,83,160,41,52,35,44,250,22,59,83,160, +41,53,38,44,248,22,51,200,248,22,77,200,83,160,41,54,35,44,248,22,51, +23,29,248,22,88,23,29,83,160,41,55,57,44,83,160,41,56,52,44,250,22, +208,83,160,41,57,52,44,249,22,59,83,160,41,58,54,44,250,22,208,83,160, +41,59,57,44,251,22,61,83,160,41,8,28,8,29,44,83,160,41,8,29,8, +29,44,248,22,86,23,28,248,22,77,23,28,83,160,41,8,30,57,44,83,160, +41,8,31,52,44,83,160,41,8,32,47,44,250,22,208,83,160,41,8,33,47, +44,250,22,59,83,160,41,8,34,50,44,83,160,41,8,35,50,44,250,22,208, +83,160,41,8,36,53,44,251,22,59,83,160,41,8,37,57,44,83,160,41,8, +38,57,44,83,160,41,8,39,57,44,250,22,208,83,160,41,8,40,8,28,44, +248,22,59,250,22,208,83,160,41,8,41,8,32,44,249,22,59,83,160,41,8, +42,8,34,44,250,22,208,83,160,41,8,43,8,37,44,250,22,59,83,160,41, +8,44,8,40,44,83,160,41,8,45,8,40,44,250,22,208,83,160,41,8,46, +8,43,44,251,22,59,83,160,41,8,47,8,47,44,83,160,41,8,48,8,47, +44,83,160,41,8,49,8,47,44,250,22,208,83,160,41,8,50,8,50,44,250, +22,61,83,160,41,8,51,8,53,44,250,22,208,83,160,41,8,52,8,56,44, +248,22,59,250,22,208,83,160,41,8,53,8,60,44,249,22,59,83,160,41,8, +54,8,62,44,250,22,208,83,160,41,8,55,8,65,44,250,22,59,83,160,41, +8,56,8,68,44,83,160,41,8,57,8,68,44,250,22,208,83,160,41,8,58, +8,71,44,249,22,59,83,160,41,8,59,8,73,44,250,22,208,83,160,41,8, +60,8,76,44,250,22,59,83,160,41,8,61,8,79,44,83,160,41,8,62,8, +79,44,250,22,208,83,160,41,8,63,8,82,44,251,22,59,83,160,41,8,64, +8,86,44,83,160,41,8,65,8,86,44,83,160,41,8,66,8,86,44,250,22, +208,83,160,41,8,67,8,89,44,251,22,61,83,160,41,8,68,8,93,44,83, +160,41,8,69,8,93,44,250,22,208,83,160,41,8,70,8,96,44,249,22,59, +83,160,41,8,71,8,98,44,248,22,89,23,97,83,160,41,8,72,8,96,44, +83,160,41,8,73,8,93,44,83,160,41,8,74,8,89,44,83,160,41,8,75, +8,82,44,83,160,41,8,76,8,76,44,83,160,41,8,77,8,71,44,83,160, +41,8,78,8,65,44,83,160,41,8,79,8,60,44,83,160,41,8,80,8,56, +44,83,160,41,8,81,8,53,44,83,160,41,8,82,8,50,44,83,160,41,8, +83,8,43,44,83,160,41,8,84,8,37,44,83,160,41,8,85,8,32,44,83, +160,41,8,86,8,28,44,83,160,41,8,87,53,44,83,160,41,8,88,47,44, +83,160,41,8,89,41,44,197,89,162,32,32,33,9,223,0,192,89,162,32,32, 34,9,223,3,248,22,252,175,2,208,250,22,252,32,2,11,6,10,10,98,97, -100,32,115,121,110,116,97,120,196,32,20,97,158,16,9,2,65,2,68,2,70, -2,72,2,78,2,80,2,74,2,164,2,166,16,11,18,98,2,82,8,179,36, -35,34,16,4,8,178,11,2,252,25,1,3,1,7,101,110,118,51,57,55,56, -252,151,1,18,16,2,95,2,135,8,180,93,8,252,0,10,95,9,8,252,0, -10,2,109,18,16,2,99,2,156,8,185,93,8,252,0,10,16,6,8,184,11, -2,188,2,189,3,1,7,101,110,118,51,57,57,54,252,152,1,2,252,152,1, -16,4,8,183,11,2,199,3,1,7,101,110,118,51,57,57,55,252,153,1,16, -4,8,182,11,2,201,3,1,7,101,110,118,51,57,57,56,252,154,1,16,4, -8,181,11,2,203,3,1,7,101,110,118,52,48,48,48,252,155,1,95,9,8, -252,0,10,2,109,18,100,2,136,8,188,36,35,34,8,178,16,12,8,187,11, -3,1,4,103,53,48,55,252,156,1,3,1,4,103,53,48,56,252,157,1,3, -1,4,103,53,48,57,252,158,1,3,1,4,103,53,49,48,252,159,1,3,1, -4,103,53,49,49,252,160,1,3,1,7,101,110,118,51,57,56,56,252,161,1, -2,252,161,1,2,252,161,1,2,252,161,1,2,252,161,1,16,12,8,186,11, -2,141,2,252,149,1,2,252,150,1,2,252,146,1,2,252,69,1,3,1,7, -101,110,118,51,57,56,57,252,162,1,2,252,162,1,2,252,162,1,2,252,162, -1,2,252,162,1,18,158,2,144,8,188,18,158,2,159,8,188,18,158,9,8, -188,18,158,2,144,8,188,18,158,2,88,8,188,18,158,2,144,8,188,18,158, -2,144,8,188,11,16,5,93,2,53,89,162,32,33,55,9,223,0,27,249,22, -208,83,160,41,32,35,46,196,27,28,248,80,158,35,32,194,249,80,158,36,33, -248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,28, -248,80,158,38,36,248,80,158,39,34,194,27,248,80,158,39,35,194,28,248,80, -158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,27,248,80,158,42,35, -196,28,248,80,158,42,37,193,248,80,158,42,38,193,11,11,11,11,11,28,192, -27,248,22,51,194,27,248,22,77,195,27,248,22,79,196,249,80,158,39,39,200, -27,249,22,60,197,198,27,83,160,41,33,41,46,250,22,208,83,160,41,34,44, -46,250,22,208,83,160,41,35,47,46,251,22,61,83,160,41,36,51,46,83,160, -41,37,51,46,248,22,52,204,248,22,51,204,83,160,41,38,47,46,195,27,28, -248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197,27,248,80,158, -39,35,198,28,248,80,158,39,32,193,27,27,248,80,158,41,34,195,28,248,80, -158,41,37,193,248,22,8,89,162,32,33,39,9,224,9,1,27,249,22,2,89, -162,32,33,44,9,224,4,5,249,80,158,35,40,28,248,80,158,36,32,197,249, -80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158, -39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158,41,36,248,80, -158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,56,193,21,94,9, -9,248,80,158,35,41,193,11,28,192,249,80,158,41,42,194,27,248,80,158,43, -35,197,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45,34,195,27, -248,80,158,46,35,196,28,248,80,158,46,37,193,248,80,158,46,38,193,11,11, -11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27, -248,22,89,197,27,248,22,88,198,27,249,22,208,83,160,41,39,43,46,248,80, -158,44,43,27,83,160,41,40,45,46,250,22,208,83,160,41,41,48,46,203,195, -27,28,248,80,158,43,37,194,248,80,158,43,38,194,11,28,192,249,80,158,44, -39,205,27,252,22,60,205,203,202,200,204,27,83,160,41,42,46,46,91,159,33, -11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40, -9,226,16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161, -33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9,224,3, -1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,172,2,193,248,22, -252,177,2,193,249,80,158,35,44,21,95,2,159,94,94,63,116,109,112,252,163, -1,2,252,39,1,2,156,95,2,159,93,94,64,115,119,97,112,252,164,1,96, -2,252,19,1,9,96,2,159,93,94,2,247,2,252,163,1,95,2,252,107,1, -2,252,163,1,64,110,97,109,101,252,165,1,95,2,252,107,1,2,252,165,1, -2,247,2,156,96,72,100,121,110,97,109,105,99,45,119,105,110,100,252,166,1, -2,252,164,1,97,2,252,19,1,9,2,252,146,1,2,252,69,1,2,156,2, -252,164,1,83,160,41,43,35,46,89,162,32,32,8,40,9,225,6,5,4,27, -250,22,208,83,160,41,44,38,46,250,22,208,83,160,41,45,41,46,250,22,59, -83,160,41,46,44,46,250,22,2,89,162,33,33,41,9,223,15,250,22,208,83, -160,41,47,35,46,249,22,59,248,22,51,199,248,22,77,199,83,160,41,48,35, -46,248,22,89,206,248,22,88,206,250,22,208,83,160,41,49,47,46,250,22,59, -83,160,41,50,50,46,250,22,208,83,160,41,51,53,46,248,22,59,250,22,208, -83,160,41,52,57,46,249,22,59,83,160,41,53,59,46,250,22,208,83,160,41, -54,8,30,46,250,22,61,83,160,41,55,8,33,46,83,160,41,56,8,33,46, -252,22,2,89,162,33,33,52,9,223,38,250,22,208,83,160,41,57,35,46,251, -22,59,83,160,41,58,39,46,250,22,208,83,160,41,59,42,46,248,22,59,250, -22,208,83,160,41,8,28,46,46,249,22,59,83,160,41,8,29,48,46,248,22, -51,23,18,83,160,41,8,30,46,46,83,160,41,8,31,42,46,250,22,208,83, -160,41,8,32,42,46,250,22,59,83,160,41,8,33,45,46,248,22,51,23,15, -248,22,86,23,15,83,160,41,8,34,42,46,250,22,208,83,160,41,8,35,42, -46,250,22,61,83,160,41,8,36,45,46,248,22,86,23,15,83,160,41,8,37, -45,46,83,160,41,8,38,42,46,83,160,41,8,39,35,46,248,22,89,23,37, -248,22,89,23,37,248,22,51,23,37,248,22,51,23,37,83,160,41,8,40,8, -30,46,83,160,41,8,41,57,46,83,160,41,8,42,53,46,250,22,208,83,160, -41,8,43,53,46,251,22,61,83,160,41,8,44,57,46,83,160,41,8,45,57, -46,250,22,208,83,160,41,8,46,8,28,46,251,22,61,83,160,41,8,47,8, -32,46,83,160,41,8,48,8,32,46,248,22,77,23,31,248,22,86,23,31,83, -160,41,8,49,8,28,46,83,160,41,8,50,57,46,83,160,41,8,51,53,46, -83,160,41,8,52,47,46,83,160,41,8,53,41,46,197,89,162,32,32,33,9, -223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208,248,80,158,43, -45,83,160,41,8,54,43,46,250,22,252,32,2,11,6,10,10,98,97,100,32, -115,121,110,116,97,120,197,32,20,97,158,16,14,2,65,2,68,2,70,2,72, -2,76,2,78,2,80,2,164,2,232,2,233,2,74,2,252,110,1,2,166,2, -234,16,55,18,98,2,82,8,190,36,35,34,16,4,8,189,11,2,252,25,1, -3,1,7,101,110,118,52,48,48,55,252,167,1,18,16,2,95,2,135,8,191, -93,8,252,19,10,95,9,8,252,19,10,2,109,18,100,2,136,8,194,36,35, -34,8,189,16,8,8,193,11,3,1,4,103,53,49,55,252,168,1,3,1,4, -103,53,49,56,252,169,1,3,1,4,103,53,49,57,252,170,1,3,1,7,101, -110,118,52,48,49,52,252,171,1,2,252,171,1,2,252,171,1,16,8,8,192, -11,2,141,2,252,146,1,2,252,69,1,3,1,7,101,110,118,52,48,49,53, -252,172,1,2,252,172,1,2,252,172,1,18,158,2,144,8,194,18,158,2,159, -8,194,18,158,9,8,194,18,158,2,144,8,194,18,100,2,82,8,197,36,35, -34,8,189,16,12,8,196,11,3,1,4,103,53,49,50,252,173,1,3,1,4, -103,53,49,51,252,174,1,3,1,4,103,53,49,52,252,175,1,3,1,4,103, -53,49,53,252,176,1,3,1,4,103,53,49,54,252,177,1,3,1,7,101,110, -118,52,48,51,50,252,178,1,2,252,178,1,2,252,178,1,2,252,178,1,2, -252,178,1,16,12,8,195,11,2,141,2,252,165,1,2,252,39,1,2,252,146, -1,2,252,69,1,3,1,7,101,110,118,52,48,51,51,252,179,1,2,252,179, -1,2,252,179,1,2,252,179,1,2,252,179,1,18,16,2,95,2,135,8,198, -93,8,252,22,10,95,9,8,252,22,10,2,109,18,158,2,136,8,197,18,16, -2,95,2,135,8,199,93,8,252,25,10,95,9,8,252,25,10,2,109,18,16, -2,99,2,156,8,204,93,8,252,25,10,16,6,8,203,11,2,188,2,189,3, -1,7,101,110,118,52,48,52,57,252,180,1,2,252,180,1,16,4,8,202,11, -2,199,3,1,7,101,110,118,52,48,53,48,252,181,1,16,4,8,201,11,2, -201,3,1,7,101,110,118,52,48,53,49,252,182,1,16,4,8,200,11,2,203, -3,1,7,101,110,118,52,48,53,51,252,183,1,95,9,8,252,25,10,2,109, -18,102,2,136,8,207,36,35,34,8,189,8,196,8,195,16,4,8,206,11,3, -1,4,103,53,50,50,252,184,1,3,1,7,101,110,118,52,48,52,53,252,185, -1,16,4,8,205,11,2,252,163,1,3,1,7,101,110,118,52,48,52,54,252, -186,1,18,158,2,144,8,207,18,158,2,159,8,207,18,158,2,144,8,207,18, -158,2,144,8,207,18,158,2,144,8,207,18,158,2,159,8,207,18,158,2,144, -8,207,18,158,2,144,8,207,18,158,2,252,164,1,8,207,18,158,2,144,8, -207,18,158,2,252,19,1,8,207,18,158,9,8,207,18,158,2,144,8,207,18, -158,2,159,8,207,18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,247, -8,207,18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,144,8,207,18, -158,2,252,107,1,8,207,18,158,2,144,8,207,18,158,2,144,8,207,18,158, -2,252,107,1,8,207,18,16,2,106,93,16,2,158,2,247,8,207,9,8,212, -8,28,59,58,57,56,55,13,16,3,33,2,173,2,109,93,8,252,25,10,16, -6,8,211,11,2,188,2,189,2,252,180,1,2,252,180,1,16,4,8,210,11, -2,199,2,252,181,1,16,4,8,209,11,2,201,2,252,182,1,16,4,8,208, -11,64,118,97,108,115,252,187,1,3,1,7,101,110,118,52,48,53,57,252,188, -1,95,9,8,252,25,10,2,109,18,158,2,144,8,207,18,158,2,144,8,207, -18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,144,8,207,18,158,2, -144,8,207,18,158,2,252,166,1,8,207,18,158,2,252,164,1,8,207,18,158, -2,144,8,207,18,158,2,252,19,1,8,207,18,158,9,8,207,18,158,2,144, -8,207,18,16,2,105,93,16,2,158,2,252,164,1,8,207,9,8,213,8,28, -59,58,57,56,55,13,16,3,33,2,173,2,109,93,8,252,25,10,8,211,8, -210,8,209,95,9,8,252,25,10,2,109,18,158,2,144,8,207,18,158,2,144, -8,207,18,158,2,144,8,207,18,16,2,158,94,16,2,98,2,252,163,1,8, -217,93,8,252,21,10,16,4,8,216,11,3,1,8,119,115,116,109,112,53,50, -48,252,189,1,3,1,7,101,110,118,52,48,52,48,252,190,1,16,4,8,215, -11,3,1,4,103,53,50,49,252,191,1,3,1,7,101,110,118,52,48,54,52, -252,192,1,16,4,8,214,11,2,252,11,1,3,1,7,101,110,118,52,48,54, -53,252,193,1,9,16,2,158,2,156,8,217,9,8,217,95,9,8,252,21,10, -2,107,11,16,5,93,2,54,89,162,32,33,8,41,9,223,0,27,249,22,208, -83,160,41,32,35,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248, -80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80, -158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41, -36,193,248,80,158,41,37,193,11,11,11,28,192,27,248,22,51,194,27,248,22, -77,195,27,248,22,79,196,249,80,158,39,38,200,27,249,22,60,198,197,27,83, -160,41,33,41,39,250,22,208,83,160,41,34,44,39,250,22,208,83,160,41,35, -47,39,250,22,61,83,160,41,36,50,39,250,22,208,83,160,41,37,53,39,248, -22,59,250,22,208,83,160,41,38,57,39,249,22,59,83,160,41,39,59,39,250, -22,208,83,160,41,40,8,30,39,250,22,61,83,160,41,41,8,33,39,250,22, -208,83,160,41,42,8,36,39,250,22,61,83,160,41,43,8,39,39,83,160,41, -44,8,39,39,23,31,83,160,41,45,8,36,39,83,160,41,46,8,33,39,83, -160,41,47,8,30,39,83,160,41,48,57,39,83,160,41,49,53,39,83,160,41, -50,50,39,83,160,41,51,47,39,195,250,22,252,32,2,11,6,10,10,98,97, -100,32,115,121,110,116,97,120,196,32,20,97,158,16,7,2,65,2,68,2,70, -2,72,2,78,2,80,2,164,16,20,18,98,2,82,8,219,36,35,34,16,4, -8,218,11,2,252,25,1,3,1,7,101,110,118,52,48,54,56,252,194,1,18, -16,2,95,2,135,8,220,93,8,252,36,10,95,9,8,252,36,10,2,109,18, -100,2,136,8,223,36,35,34,8,218,16,8,8,222,11,3,1,4,103,53,50, -51,252,195,1,3,1,4,103,53,50,52,252,196,1,3,1,4,103,53,50,53, -252,197,1,3,1,7,101,110,118,52,48,55,52,252,198,1,2,252,198,1,2, -252,198,1,16,8,8,221,11,2,141,2,252,23,1,2,252,24,1,3,1,7, -101,110,118,52,48,55,53,252,199,1,2,252,199,1,2,252,199,1,18,158,2, -144,8,223,18,158,2,252,105,1,8,223,18,158,2,144,8,223,18,158,2,144, -8,223,18,158,96,16,2,158,2,155,8,223,9,16,2,158,63,99,112,117,252, -200,1,8,223,9,16,2,158,64,117,115,101,114,252,201,1,8,223,9,16,2, -158,62,103,99,252,202,1,8,223,9,8,223,18,158,2,144,8,223,18,158,70, -116,105,109,101,45,97,112,112,108,121,252,203,1,8,223,18,158,2,144,8,223, -18,158,2,252,19,1,8,223,18,158,9,8,223,18,158,2,144,8,223,18,16, -2,103,93,16,2,158,64,110,117,108,108,252,204,1,8,223,9,8,225,8,28, -59,58,57,56,55,13,16,3,33,2,173,2,109,93,8,252,36,10,16,6,8, -224,11,2,188,2,189,3,1,7,101,110,118,52,48,56,48,252,205,1,2,252, -205,1,95,9,8,252,36,10,2,109,18,158,2,144,8,223,18,158,2,144,8, -223,18,158,2,144,8,223,18,16,2,158,94,16,2,158,97,16,2,158,66,112, -114,105,110,116,102,252,206,1,8,223,9,16,2,158,6,40,40,99,112,117,32, -116,105,109,101,58,32,126,115,32,114,101,97,108,32,116,105,109,101,58,32,126, -115,32,103,99,32,116,105,109,101,58,32,126,115,126,110,8,223,9,16,2,158, -2,252,200,1,8,223,9,16,2,158,2,252,201,1,8,223,9,16,2,158,2, -252,202,1,8,223,9,8,223,9,16,2,158,95,16,2,158,2,252,82,1,8, -223,9,16,2,158,2,252,83,1,8,223,9,16,2,158,2,155,8,223,9,8, -223,9,8,225,95,9,8,252,36,10,2,109,18,158,2,144,8,223,11,100,83, -159,32,97,80,158,32,32,80,158,32,33,80,158,32,34,80,158,32,35,80,158, -32,36,27,247,22,252,104,2,87,94,28,28,192,248,22,252,3,2,248,22,252, -103,2,194,11,250,22,252,33,2,2,88,6,15,15,105,110,115,112,101,99,116, -111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37,32,11,254,22, -252,83,2,2,100,11,33,32,11,9,204,252,22,7,197,198,199,250,22,252,85, -2,203,32,61,112,252,207,1,250,22,252,86,2,204,32,2,252,207,1,83,159, -32,93,80,158,32,37,89,162,32,33,39,2,14,223,0,87,94,28,248,80,158, -33,34,194,12,250,22,252,33,2,2,14,6,7,7,112,114,111,109,105,115,101, -196,27,248,80,158,34,35,195,28,248,22,0,193,27,249,22,6,195,22,58,87, -94,28,248,22,0,248,80,158,36,35,197,249,80,158,36,36,197,194,12,249,22, -1,22,7,248,80,158,37,35,198,249,22,1,22,7,194,83,159,32,93,80,158, -32,38,89,162,32,32,36,2,16,223,0,248,80,158,33,39,249,22,19,11,80, -158,35,40,83,159,32,93,80,158,32,41,89,162,32,34,40,2,23,223,0,87, -95,28,248,22,252,213,2,194,12,252,22,252,33,2,2,23,6,16,16,112,97, -114,97,109,101,116,101,114,105,122,97,116,105,111,110,32,198,199,28,28,248,22, -0,195,249,22,34,196,32,11,12,252,22,252,33,2,2,23,6,19,19,112,114, -111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41,33,198,199,20, -14,159,80,158,32,40,193,247,194,83,159,32,97,80,158,32,42,80,158,32,43, -80,158,32,44,80,158,32,45,80,158,32,46,252,22,252,83,2,2,98,11,33, -32,11,83,159,32,97,80,158,32,47,80,158,32,48,80,158,32,49,80,158,32, -50,80,158,32,51,27,247,22,252,104,2,87,94,28,28,192,248,22,252,3,2, -248,22,252,103,2,194,11,250,22,252,33,2,2,88,6,15,15,105,110,115,112, -101,99,116,111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37,32, -11,254,22,252,83,2,2,98,11,33,32,11,9,204,252,22,7,197,198,199,250, -22,252,85,2,203,32,64,99,101,108,108,252,208,1,250,22,252,86,2,204,32, -2,252,208,1,83,159,32,93,80,158,32,52,89,162,32,32,36,2,45,223,0, -248,80,158,33,43,249,22,19,11,80,158,35,53,83,159,32,93,80,158,32,54, -89,162,32,34,40,2,49,223,0,87,95,28,248,80,158,33,44,194,12,252,22, -252,33,2,2,49,6,22,22,98,114,101,97,107,32,112,97,114,97,109,101,116, -101,114,105,122,97,116,105,111,110,32,198,199,28,28,248,22,0,195,249,22,34, -196,32,11,12,252,22,252,33,2,2,23,6,19,19,112,114,111,99,101,100,117, -114,101,32,40,97,114,105,116,121,32,48,41,33,198,199,83,158,36,20,92,94, -20,14,159,80,158,32,53,249,80,158,34,45,195,32,87,94,247,80,158,32,55, -247,194,247,80,158,32,55,96,68,35,37,107,101,114,110,101,108,252,209,1,74, -35,37,115,109,97,108,108,45,115,99,104,101,109,101,252,210,1,2,84,2,18, -96,2,252,209,1,2,66,2,104,2,119,0}; - EVAL_ONE_SIZED_STR((char *)expr, 23510); +100,32,115,121,110,116,97,120,197,249,22,7,248,195,10,248,195,11,36,20,97, +158,16,12,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2,164,2,232, +2,233,2,74,2,166,16,90,18,99,2,82,8,124,36,35,34,16,4,8,123, +11,74,100,105,115,97,98,108,101,45,98,114,101,97,107,63,252,84,1,3,1, +7,101,110,118,51,56,51,50,252,85,1,16,4,8,122,11,2,252,25,1,3, +1,7,101,110,118,51,56,51,51,252,86,1,18,16,2,95,2,135,8,125,93, +8,252,189,9,95,9,8,252,189,9,2,109,18,101,2,136,8,128,36,35,34, +8,123,8,122,16,8,8,127,11,3,1,4,103,52,56,54,252,87,1,3,1, +4,103,52,56,55,252,88,1,3,1,4,103,52,56,56,252,89,1,3,1,7, +101,110,118,51,56,52,48,252,90,1,2,252,90,1,2,252,90,1,16,8,8, +126,11,2,141,2,252,23,1,2,252,24,1,3,1,7,101,110,118,51,56,52, +49,252,91,1,2,252,91,1,2,252,91,1,18,158,2,144,8,128,18,158,2, +159,8,128,18,158,9,8,128,18,158,2,144,8,128,18,101,2,82,8,131,36, +35,34,8,123,8,122,16,12,8,130,11,3,1,4,103,52,56,49,252,92,1, +3,1,4,103,52,56,50,252,93,1,3,1,4,103,52,56,51,252,94,1,3, +1,4,103,52,56,52,252,95,1,3,1,4,103,52,56,53,252,96,1,3,1, +7,101,110,118,51,56,53,56,252,97,1,2,252,97,1,2,252,97,1,2,252, +97,1,2,252,97,1,16,12,8,129,11,2,141,2,252,67,1,2,252,68,1, +2,252,23,1,2,252,24,1,3,1,7,101,110,118,51,56,53,57,252,98,1, +2,252,98,1,2,252,98,1,2,252,98,1,2,252,98,1,18,158,95,16,2, +158,66,98,101,103,105,110,48,252,99,1,8,131,9,16,2,158,94,16,2,158, +94,16,2,158,64,99,100,97,114,252,100,1,8,131,9,16,2,158,2,252,64, +1,8,131,9,8,131,9,16,2,158,2,252,73,1,8,131,9,8,131,9,16, +2,158,96,16,2,158,2,252,20,1,8,131,9,16,2,158,2,47,8,131,9, +16,2,158,2,252,70,1,8,131,9,16,2,158,93,16,2,158,2,51,8,131, +9,8,131,9,8,131,9,8,131,18,158,96,16,2,158,2,252,20,1,8,131, +9,16,2,158,2,47,8,131,9,16,2,158,2,252,70,1,8,131,9,16,2, +158,95,16,2,158,2,0,8,131,9,16,2,158,93,16,2,158,2,51,8,131, +9,8,131,9,16,2,158,94,16,2,158,94,16,2,158,2,252,100,1,8,131, +9,16,2,158,2,252,64,1,8,131,9,8,131,9,16,2,158,2,252,73,1, +8,131,9,8,131,9,8,131,9,8,131,18,16,2,95,2,135,8,132,93,8, +252,198,9,95,9,8,252,198,9,2,109,18,16,2,99,2,156,8,137,93,8, +252,198,9,16,6,8,136,11,2,188,2,189,3,1,7,101,110,118,51,56,55, +55,252,101,1,2,252,101,1,16,4,8,135,11,2,199,3,1,7,101,110,118, +51,56,55,56,252,102,1,16,4,8,134,11,2,201,3,1,7,101,110,118,51, +56,55,57,252,103,1,16,4,8,133,11,2,203,3,1,7,101,110,118,51,56, +56,49,252,104,1,95,9,8,252,198,9,2,109,18,158,2,136,8,131,18,158, +2,144,8,131,18,158,2,159,8,131,18,158,2,144,8,131,18,158,2,144,8, +131,18,158,2,252,64,1,8,131,18,158,2,144,8,131,18,158,2,252,65,1, +8,131,18,158,2,144,8,131,18,158,2,252,66,1,8,131,18,158,2,144,8, +131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158, +2,252,69,1,8,131,18,158,2,144,8,131,18,158,2,252,19,1,8,131,18, +158,9,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8, +131,18,158,2,144,8,131,18,158,2,159,8,131,18,158,93,16,2,158,94,16, +2,158,2,252,70,1,8,131,9,16,2,158,95,16,2,158,2,252,21,1,8, +131,9,16,2,158,11,8,131,9,16,2,158,2,47,8,131,9,8,131,9,8, +131,9,8,131,18,158,2,144,8,131,18,158,2,252,20,1,8,131,18,158,2, +47,8,131,18,158,94,16,2,158,2,252,61,1,8,131,9,16,2,158,11,8, +131,9,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,252,71, +1,8,131,18,158,2,144,8,131,18,158,2,252,19,1,8,131,18,158,93,16, +2,158,2,142,8,131,9,8,131,18,158,2,144,8,131,18,158,2,252,20,1, +8,131,18,158,2,47,8,131,18,158,2,252,70,1,8,131,18,158,2,144,8, +131,18,158,2,56,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158, +2,252,72,1,8,131,18,158,2,144,8,131,18,158,2,252,19,1,8,131,18, +158,93,16,2,158,2,252,73,1,8,131,9,8,131,18,158,2,144,8,131,18, +158,2,142,8,131,18,158,2,144,8,131,18,158,2,252,19,1,8,131,18,158, +9,8,131,18,158,2,144,8,131,18,158,2,159,8,131,18,158,2,252,74,1, +8,131,18,158,93,16,2,158,94,16,2,158,2,252,64,1,8,131,9,16,2, +158,2,252,64,1,8,131,9,8,131,9,8,131,18,158,2,144,8,131,18,158, +2,101,8,131,18,158,94,16,2,158,94,16,2,158,2,252,75,1,8,131,9, +16,2,158,2,252,64,1,8,131,9,8,131,9,16,2,158,94,16,2,158,2, +252,76,1,8,131,9,16,2,158,2,252,73,1,8,131,9,8,131,9,8,131, +18,158,2,144,8,131,18,158,94,16,2,158,94,16,2,158,2,252,77,1,8, +131,9,16,2,158,2,252,64,1,8,131,9,8,131,9,16,2,158,2,252,73, +1,8,131,9,8,131,18,158,2,144,8,131,18,16,2,105,93,16,2,158,94, +16,2,158,2,191,8,131,9,16,2,158,94,16,2,158,2,252,74,1,8,131, +9,16,2,158,94,16,2,158,2,252,79,1,8,131,9,16,2,158,2,252,64, +1,8,131,9,8,131,9,8,131,9,8,131,9,8,141,8,28,59,58,57,56, +55,13,16,3,33,2,173,2,109,93,8,252,198,9,16,6,8,140,11,2,188, +2,189,2,252,101,1,2,252,101,1,16,4,8,139,11,2,199,2,252,102,1, +16,4,8,138,11,2,201,2,252,103,1,95,9,8,252,198,9,2,109,18,158, +2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8, +131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,16, +2,158,93,16,2,158,95,16,2,158,2,252,80,1,8,131,9,16,2,158,2, +252,69,1,8,131,9,16,2,158,95,16,2,158,2,252,19,1,8,131,9,16, +2,158,2,252,81,1,8,131,9,16,2,158,95,16,2,158,2,252,19,1,8, +131,9,16,2,158,9,8,131,9,16,2,158,95,16,2,158,2,252,82,1,8, +131,9,16,2,158,2,252,83,1,8,131,9,16,2,158,2,252,81,1,8,131, +9,8,131,9,8,131,9,8,131,9,8,131,9,8,141,95,9,8,252,198,9, +2,109,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18, +158,2,144,8,131,18,158,2,144,8,131,18,158,2,144,8,131,18,158,2,144, +8,131,18,158,2,144,8,131,11,16,5,93,2,54,89,162,32,33,58,9,223, +0,27,249,22,208,83,160,41,32,35,46,196,27,28,248,80,158,35,32,194,249, +80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158, +38,32,193,28,248,80,158,38,36,248,80,158,39,34,194,27,248,80,158,39,35, +194,28,248,80,158,39,32,193,27,248,80,158,40,34,194,28,192,249,80,158,41, +37,194,248,80,158,42,36,248,80,158,43,35,197,11,11,11,11,11,28,192,27, +248,22,51,194,27,248,22,52,195,27,83,160,41,33,37,46,250,22,208,83,160, +41,34,40,46,250,22,208,83,160,41,35,43,46,250,22,61,83,160,41,36,46, +46,250,22,208,83,160,41,37,49,46,248,22,59,250,22,208,83,160,41,38,53, +46,249,22,59,83,160,41,39,55,46,23,19,83,160,41,40,53,46,83,160,41, +41,49,46,83,160,41,42,46,46,83,160,41,43,43,46,195,27,89,162,32,32, +51,2,162,225,3,4,2,27,89,162,32,32,36,2,162,223,1,250,22,252,32, +2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,195,27,28,248,80,158, +37,32,195,249,80,158,38,33,248,80,158,39,34,197,27,248,80,158,40,35,198, +28,248,80,158,40,32,193,27,27,248,80,158,42,34,195,28,248,80,158,42,38, +193,248,22,58,248,80,158,43,39,194,11,28,192,249,80,158,42,37,194,27,248, +80,158,44,35,197,28,248,80,158,44,32,193,27,248,80,158,45,34,194,28,192, +249,80,158,46,37,194,248,80,158,47,36,248,80,158,48,35,197,11,11,11,11, +11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,79,196,28,27,248, +80,158,41,39,27,83,160,41,44,42,46,250,22,208,83,160,41,45,45,46,199, +195,87,94,249,22,3,89,162,32,33,39,9,224,10,9,28,248,80,158,34,40, +195,12,251,22,252,32,2,11,6,17,17,110,111,116,32,97,110,32,105,100,101, +110,116,105,102,105,101,114,196,198,194,27,248,80,158,42,41,194,28,192,251,22, +252,32,2,11,6,20,20,100,117,112,108,105,99,97,116,101,32,105,100,101,110, +116,105,102,105,101,114,204,196,12,27,249,22,208,83,160,41,46,42,46,248,80, +158,43,42,27,83,160,41,47,44,46,250,22,208,83,160,41,48,47,46,201,195, +27,28,248,80,158,42,38,194,248,80,158,42,39,194,11,28,192,249,80,158,43, +43,202,27,250,22,60,198,200,201,27,83,160,41,49,45,46,91,159,33,11,90, +161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226, +15,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33, +10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9,224,3,1,248, +193,89,162,32,32,36,9,224,2,3,28,248,22,252,172,2,193,248,22,252,177, +2,193,249,80,158,35,44,21,96,70,108,101,116,45,118,97,108,117,101,115,252, +105,1,93,94,94,64,116,101,109,112,252,106,1,2,156,2,252,24,1,95,64, +115,101,116,33,252,107,1,62,105,100,252,108,1,2,252,106,1,2,156,83,160, +41,50,35,46,89,162,32,32,55,9,225,6,5,4,27,250,22,208,83,160,41, +51,38,46,250,22,208,83,160,41,52,41,46,250,22,61,83,160,41,53,44,46, +250,22,208,83,160,41,54,47,46,248,22,59,250,22,208,83,160,41,55,51,46, +249,22,59,248,22,51,23,20,248,22,77,23,20,83,160,41,56,51,46,83,160, +41,57,47,46,250,22,2,89,162,33,33,42,9,223,15,250,22,208,83,160,41, +58,35,46,250,22,59,83,160,41,59,38,46,248,22,51,200,248,22,77,200,83, +160,41,8,28,35,46,248,22,79,206,248,22,51,206,83,160,41,8,29,41,46, +197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252, +175,2,208,248,80,158,42,45,83,160,41,8,30,42,46,247,196,247,193,27,28, +248,80,158,37,32,196,249,80,158,38,33,248,80,158,39,34,198,27,248,80,158, +40,35,199,28,248,80,158,40,32,193,27,27,248,80,158,42,34,195,28,248,80, +158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,248,80,158,44,36,248, +80,158,45,35,196,11,28,192,249,80,158,42,37,194,27,248,80,158,44,35,197, +28,248,80,158,44,32,193,27,248,80,158,45,34,194,28,192,249,80,158,46,37, +194,248,80,158,47,36,248,80,158,48,35,197,11,11,11,11,11,28,192,27,248, +22,51,194,27,248,22,77,195,27,248,22,79,196,28,248,80,158,40,40,194,27, +249,22,60,195,196,27,83,160,41,8,31,41,46,250,22,208,83,160,41,8,32, +44,46,250,22,208,83,160,41,8,33,47,46,250,22,59,83,160,41,8,34,50, +46,248,22,52,203,248,22,51,203,83,160,41,8,35,47,46,195,247,196,247,193, +32,20,97,158,16,14,2,65,2,68,2,70,2,72,2,76,2,74,2,78,2, +80,2,163,30,252,109,1,2,104,2,115,0,30,252,110,1,2,107,2,112,0, +2,164,2,166,2,234,16,36,18,98,2,82,8,143,36,35,34,16,4,8,142, +11,2,252,25,1,3,1,7,101,110,118,51,56,57,48,252,111,1,18,16,2, +95,2,135,8,144,93,8,252,222,9,95,9,8,252,222,9,2,109,18,100,2, +136,8,147,36,35,34,8,142,16,6,8,146,11,3,1,4,103,52,57,56,252, +112,1,3,1,4,103,52,57,57,252,113,1,3,1,7,101,110,118,51,56,57, +55,252,114,1,2,252,114,1,16,6,8,145,11,2,141,2,252,24,1,3,1, +7,101,110,118,51,56,57,56,252,115,1,2,252,115,1,18,158,2,144,8,147, +18,158,2,252,105,1,8,147,18,158,2,144,8,147,18,158,2,144,8,147,18, +158,9,8,147,18,158,2,144,8,147,18,158,2,144,8,147,18,16,2,103,93, +16,2,158,93,16,2,158,64,118,111,105,100,252,116,1,8,147,9,8,147,9, +8,149,8,28,59,58,57,56,55,13,16,3,33,2,173,2,109,93,8,252,222, +9,16,6,8,148,11,2,188,2,189,3,1,7,101,110,118,51,57,48,50,252, +117,1,2,252,117,1,95,9,8,252,222,9,2,109,18,158,2,144,8,147,18, +16,2,95,2,135,8,150,93,8,252,223,9,95,9,8,252,223,9,2,109,18, +100,2,136,8,153,36,35,34,8,142,16,8,8,152,11,3,1,4,103,52,57, +50,252,118,1,3,1,4,103,52,57,51,252,119,1,3,1,4,103,52,57,52, +252,120,1,3,1,7,101,110,118,51,57,49,52,252,121,1,2,252,121,1,2, +252,121,1,16,8,8,151,11,2,141,2,252,108,1,2,252,24,1,3,1,7, +101,110,118,51,57,49,53,252,122,1,2,252,122,1,2,252,122,1,18,158,2, +82,8,153,18,16,2,95,2,135,8,154,93,8,252,227,9,95,9,8,252,227, +9,2,109,18,158,2,136,8,153,18,16,2,95,2,135,8,155,93,8,252,230, +9,95,9,8,252,230,9,2,109,18,16,2,99,2,156,8,160,93,8,252,230, +9,16,6,8,159,11,2,188,2,189,3,1,7,101,110,118,51,57,51,50,252, +123,1,2,252,123,1,16,4,8,158,11,2,199,3,1,7,101,110,118,51,57, +51,51,252,124,1,16,4,8,157,11,2,201,3,1,7,101,110,118,51,57,51, +52,252,125,1,16,4,8,156,11,2,203,3,1,7,101,110,118,51,57,51,54, +252,126,1,95,9,8,252,230,9,2,109,18,102,2,136,8,163,36,35,34,8, +142,8,152,8,151,16,4,8,162,11,3,1,4,103,53,48,50,252,127,1,3, +1,7,101,110,118,51,57,50,56,252,128,1,16,4,8,161,11,2,252,106,1, +3,1,7,101,110,118,51,57,50,57,252,129,1,18,158,2,144,8,163,18,158, +2,252,105,1,8,163,18,158,2,144,8,163,18,158,2,144,8,163,18,158,2, +144,8,163,18,158,2,144,8,163,18,158,2,144,8,163,18,158,2,252,107,1, +8,163,18,158,2,144,8,163,18,158,2,144,8,163,18,16,2,158,94,16,2, +98,2,252,106,1,8,167,93,8,252,226,9,16,4,8,166,11,3,1,8,119, +115,116,109,112,53,48,48,252,130,1,3,1,7,101,110,118,51,57,50,51,252, +131,1,16,4,8,165,11,3,1,4,103,53,48,49,252,132,1,3,1,7,101, +110,118,51,57,52,53,252,133,1,16,4,8,164,11,2,252,11,1,3,1,7, +101,110,118,51,57,52,54,252,134,1,9,16,2,158,2,156,8,167,9,8,167, +95,9,8,252,226,9,2,107,18,16,2,95,2,135,8,168,93,8,252,233,9, +95,9,8,252,233,9,2,109,18,100,2,136,8,171,36,35,34,8,142,16,8, +8,170,11,3,1,4,103,52,57,53,252,135,1,3,1,4,103,52,57,54,252, +136,1,3,1,4,103,52,57,55,252,137,1,3,1,7,101,110,118,51,57,53, +53,252,138,1,2,252,138,1,2,252,138,1,16,8,8,169,11,2,141,2,252, +108,1,2,252,24,1,3,1,7,101,110,118,51,57,53,54,252,139,1,2,252, +139,1,2,252,139,1,18,158,2,144,8,171,18,158,2,252,107,1,8,171,18, +158,2,144,8,171,11,16,5,93,2,59,89,162,32,33,8,32,9,223,0,27, +249,22,208,83,160,41,32,35,39,196,27,28,248,80,158,35,32,194,249,80,158, +36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32, +193,249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248, +80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195,27,248,80,158,44, +35,196,28,248,80,158,44,36,193,248,80,158,44,37,193,11,11,11,11,28,192, +27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27,248,22,87,197,249, +80,158,40,38,201,27,250,22,60,200,199,198,27,83,160,41,33,42,39,250,22, +208,83,160,41,34,45,39,250,22,208,83,160,41,35,48,39,249,22,59,83,160, +41,36,50,39,250,22,208,83,160,41,37,53,39,251,22,61,83,160,41,38,57, +39,250,22,208,83,160,41,39,8,28,39,248,22,59,248,22,51,23,21,83,160, +41,40,8,28,39,248,22,77,23,17,248,22,79,23,17,83,160,41,41,53,39, +83,160,41,42,48,39,195,250,22,252,32,2,11,6,10,10,98,97,100,32,115, +121,110,116,97,120,196,32,20,97,158,16,7,2,65,2,68,2,70,2,72,2, +78,2,80,2,164,16,11,18,98,2,82,8,173,36,35,34,16,4,8,172,11, +2,252,25,1,3,1,7,101,110,118,51,57,54,50,252,140,1,18,16,2,95, +2,135,8,174,93,8,252,243,9,95,9,8,252,243,9,2,109,18,100,2,136, +8,177,36,35,34,8,172,16,10,8,176,11,3,1,4,103,53,48,51,252,141, +1,3,1,4,103,53,48,52,252,142,1,3,1,4,103,53,48,53,252,143,1, +3,1,4,103,53,48,54,252,144,1,3,1,7,101,110,118,51,57,54,57,252, +145,1,2,252,145,1,2,252,145,1,2,252,145,1,16,10,8,175,11,2,141, +2,226,65,98,111,100,121,49,252,146,1,2,252,69,1,3,1,7,101,110,118, +51,57,55,48,252,147,1,2,252,147,1,2,252,147,1,2,252,147,1,18,158, +2,144,8,177,18,158,67,99,97,108,108,47,99,99,252,148,1,8,177,18,158, +2,144,8,177,18,158,2,252,19,1,8,177,18,158,2,144,8,177,18,158,2, +144,8,177,18,158,2,144,8,177,18,158,2,144,8,177,11,16,5,93,2,63, +89,162,32,33,51,9,223,0,27,249,22,208,83,160,41,32,35,41,196,27,28, +248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158, +38,35,197,28,248,80,158,38,32,193,249,80,158,39,33,248,80,158,40,34,195, +27,248,80,158,41,35,196,28,248,80,158,41,32,193,27,27,248,80,158,43,34, +195,28,248,80,158,43,36,193,248,22,58,248,80,158,44,37,194,11,28,192,249, +80,158,43,38,194,27,248,80,158,45,35,197,28,248,80,158,45,32,193,249,80, +158,46,33,248,80,158,47,34,195,27,248,80,158,48,35,196,28,248,80,158,48, +36,193,248,80,158,48,37,193,11,11,11,11,11,11,28,192,27,248,22,51,194, +27,248,22,77,195,27,248,22,86,196,27,248,22,89,197,27,248,22,88,198,249, +80,158,41,39,202,27,251,22,60,202,200,199,201,27,83,160,41,33,43,41,91, +159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32, +33,40,9,226,13,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7, +90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162,32,33,36,9, +224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,172,2,193, +248,22,252,177,2,193,249,80,158,35,40,21,98,2,159,9,95,2,86,64,98, +97,115,101,252,149,1,94,65,102,105,101,108,100,252,150,1,2,156,2,252,146, +1,2,252,69,1,2,156,83,160,41,34,35,41,89,162,32,32,54,9,225,6, +5,4,27,250,22,208,83,160,41,35,38,41,250,22,208,83,160,41,36,41,41, +252,22,61,83,160,41,37,46,41,83,160,41,38,46,41,250,22,208,83,160,41, +39,49,41,250,22,59,83,160,41,40,52,41,248,22,51,23,19,248,22,87,23, +19,83,160,41,41,49,41,248,22,77,205,248,22,86,205,83,160,41,42,41,41, +197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252, +175,2,208,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97, +120,196,32,20,97,158,16,9,2,65,2,68,2,70,2,72,2,78,2,80,2, +74,2,164,2,166,16,11,18,98,2,82,8,179,36,35,34,16,4,8,178,11, +2,252,25,1,3,1,7,101,110,118,51,57,55,56,252,151,1,18,16,2,95, +2,135,8,180,93,8,252,0,10,95,9,8,252,0,10,2,109,18,16,2,99, +2,156,8,185,93,8,252,0,10,16,6,8,184,11,2,188,2,189,3,1,7, +101,110,118,51,57,57,54,252,152,1,2,252,152,1,16,4,8,183,11,2,199, +3,1,7,101,110,118,51,57,57,55,252,153,1,16,4,8,182,11,2,201,3, +1,7,101,110,118,51,57,57,56,252,154,1,16,4,8,181,11,2,203,3,1, +7,101,110,118,52,48,48,48,252,155,1,95,9,8,252,0,10,2,109,18,100, +2,136,8,188,36,35,34,8,178,16,12,8,187,11,3,1,4,103,53,48,55, +252,156,1,3,1,4,103,53,48,56,252,157,1,3,1,4,103,53,48,57,252, +158,1,3,1,4,103,53,49,48,252,159,1,3,1,4,103,53,49,49,252,160, +1,3,1,7,101,110,118,51,57,56,56,252,161,1,2,252,161,1,2,252,161, +1,2,252,161,1,2,252,161,1,16,12,8,186,11,2,141,2,252,149,1,2, +252,150,1,2,252,146,1,2,252,69,1,3,1,7,101,110,118,51,57,56,57, +252,162,1,2,252,162,1,2,252,162,1,2,252,162,1,2,252,162,1,18,158, +2,144,8,188,18,158,2,159,8,188,18,158,9,8,188,18,158,2,144,8,188, +18,158,2,86,8,188,18,158,2,144,8,188,18,158,2,144,8,188,11,16,5, +93,2,53,89,162,32,33,55,9,223,0,27,249,22,208,83,160,41,32,35,46, +196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27, +248,80,158,38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80, +158,39,34,194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,249,80,158, +40,33,248,80,158,41,34,195,27,248,80,158,42,35,196,28,248,80,158,42,37, +193,248,80,158,42,38,193,11,11,11,11,11,28,192,27,248,22,51,194,27,248, +22,77,195,27,248,22,79,196,249,80,158,39,39,200,27,249,22,60,197,198,27, +83,160,41,33,41,46,250,22,208,83,160,41,34,44,46,250,22,208,83,160,41, +35,47,46,251,22,61,83,160,41,36,51,46,83,160,41,37,51,46,248,22,52, +204,248,22,51,204,83,160,41,38,47,46,195,27,28,248,80,158,36,32,195,249, +80,158,37,33,248,80,158,38,34,197,27,248,80,158,39,35,198,28,248,80,158, +39,32,193,27,27,248,80,158,41,34,195,28,248,80,158,41,37,193,248,22,8, +89,162,32,33,39,9,224,9,1,27,249,22,2,89,162,32,33,44,9,224,4, +5,249,80,158,35,40,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158, +38,34,199,27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80,158,40, +33,248,80,158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11,194, +248,80,158,37,38,196,28,248,22,56,193,21,94,9,9,248,80,158,35,41,193, +11,28,192,249,80,158,41,42,194,27,248,80,158,43,35,197,28,248,80,158,43, +32,193,249,80,158,44,33,248,80,158,45,34,195,27,248,80,158,46,35,196,28, +248,80,158,46,37,193,248,80,158,46,38,193,11,11,11,11,11,28,192,27,248, +22,51,194,27,248,22,77,195,27,248,22,86,196,27,248,22,89,197,27,248,22, +88,198,27,249,22,208,83,160,41,39,43,46,248,80,158,44,43,27,83,160,41, +40,45,46,250,22,208,83,160,41,41,48,46,203,195,27,28,248,80,158,43,37, +194,248,80,158,43,38,194,11,28,192,249,80,158,44,39,205,27,252,22,60,204, +205,203,202,200,27,83,160,41,42,46,46,91,159,33,11,90,161,33,32,11,83, +160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,16,2,3,1,250, +22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,175, +2,248,22,252,175,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32, +36,9,224,2,3,28,248,22,252,172,2,193,248,22,252,177,2,193,249,80,158, +35,44,21,95,2,159,94,94,63,116,109,112,252,163,1,2,252,39,1,2,156, +95,2,159,93,94,64,115,119,97,112,252,164,1,96,2,252,19,1,9,96,2, +159,93,94,2,247,2,252,163,1,95,2,252,107,1,2,252,163,1,64,110,97, +109,101,252,165,1,95,2,252,107,1,2,252,165,1,2,247,2,156,96,72,100, +121,110,97,109,105,99,45,119,105,110,100,252,166,1,2,252,164,1,97,2,252, +19,1,9,2,252,146,1,2,252,69,1,2,156,2,252,164,1,83,160,41,43, +35,46,89,162,32,32,8,40,9,225,6,5,4,27,250,22,208,83,160,41,44, +38,46,250,22,208,83,160,41,45,41,46,250,22,59,83,160,41,46,44,46,250, +22,2,89,162,33,33,41,9,223,15,250,22,208,83,160,41,47,35,46,249,22, +59,248,22,51,199,248,22,77,199,83,160,41,48,35,46,248,22,88,206,248,22, +51,206,250,22,208,83,160,41,49,47,46,250,22,59,83,160,41,50,50,46,250, +22,208,83,160,41,51,53,46,248,22,59,250,22,208,83,160,41,52,57,46,249, +22,59,83,160,41,53,59,46,250,22,208,83,160,41,54,8,30,46,250,22,61, +83,160,41,55,8,33,46,83,160,41,56,8,33,46,252,22,2,89,162,33,33, +52,9,223,38,250,22,208,83,160,41,57,35,46,251,22,59,83,160,41,58,39, +46,250,22,208,83,160,41,59,42,46,248,22,59,250,22,208,83,160,41,8,28, +46,46,249,22,59,83,160,41,8,29,48,46,248,22,51,23,18,83,160,41,8, +30,46,46,83,160,41,8,31,42,46,250,22,208,83,160,41,8,32,42,46,250, +22,59,83,160,41,8,33,45,46,248,22,51,23,15,248,22,86,23,15,83,160, +41,8,34,42,46,250,22,208,83,160,41,8,35,42,46,250,22,61,83,160,41, +8,36,45,46,248,22,86,23,15,83,160,41,8,37,45,46,83,160,41,8,38, +42,46,83,160,41,8,39,35,46,248,22,88,23,37,248,22,88,23,37,248,22, +77,23,37,248,22,77,23,37,83,160,41,8,40,8,30,46,83,160,41,8,41, +57,46,83,160,41,8,42,53,46,250,22,208,83,160,41,8,43,53,46,251,22, +61,83,160,41,8,44,57,46,83,160,41,8,45,57,46,250,22,208,83,160,41, +8,46,8,28,46,251,22,61,83,160,41,8,47,8,32,46,83,160,41,8,48, +8,32,46,248,22,86,23,31,248,22,89,23,31,83,160,41,8,49,8,28,46, +83,160,41,8,50,57,46,83,160,41,8,51,53,46,83,160,41,8,52,47,46, +83,160,41,8,53,41,46,197,89,162,32,32,33,9,223,0,192,89,162,32,32, +34,9,223,3,248,22,252,175,2,208,248,80,158,43,45,83,160,41,8,54,43, +46,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197, +32,20,97,158,16,14,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2, +164,2,232,2,233,2,74,2,252,110,1,2,166,2,234,16,55,18,98,2,82, +8,190,36,35,34,16,4,8,189,11,2,252,25,1,3,1,7,101,110,118,52, +48,48,55,252,167,1,18,16,2,95,2,135,8,191,93,8,252,19,10,95,9, +8,252,19,10,2,109,18,100,2,136,8,194,36,35,34,8,189,16,8,8,193, +11,3,1,4,103,53,49,55,252,168,1,3,1,4,103,53,49,56,252,169,1, +3,1,4,103,53,49,57,252,170,1,3,1,7,101,110,118,52,48,49,52,252, +171,1,2,252,171,1,2,252,171,1,16,8,8,192,11,2,141,2,252,146,1, +2,252,69,1,3,1,7,101,110,118,52,48,49,53,252,172,1,2,252,172,1, +2,252,172,1,18,158,2,144,8,194,18,158,2,159,8,194,18,158,9,8,194, +18,158,2,144,8,194,18,100,2,82,8,197,36,35,34,8,189,16,12,8,196, +11,3,1,4,103,53,49,50,252,173,1,3,1,4,103,53,49,51,252,174,1, +3,1,4,103,53,49,52,252,175,1,3,1,4,103,53,49,53,252,176,1,3, +1,4,103,53,49,54,252,177,1,3,1,7,101,110,118,52,48,51,50,252,178, +1,2,252,178,1,2,252,178,1,2,252,178,1,2,252,178,1,16,12,8,195, +11,2,141,2,252,165,1,2,252,39,1,2,252,146,1,2,252,69,1,3,1, +7,101,110,118,52,48,51,51,252,179,1,2,252,179,1,2,252,179,1,2,252, +179,1,2,252,179,1,18,16,2,95,2,135,8,198,93,8,252,22,10,95,9, +8,252,22,10,2,109,18,158,2,136,8,197,18,16,2,95,2,135,8,199,93, +8,252,25,10,95,9,8,252,25,10,2,109,18,16,2,99,2,156,8,204,93, +8,252,25,10,16,6,8,203,11,2,188,2,189,3,1,7,101,110,118,52,48, +52,57,252,180,1,2,252,180,1,16,4,8,202,11,2,199,3,1,7,101,110, +118,52,48,53,48,252,181,1,16,4,8,201,11,2,201,3,1,7,101,110,118, +52,48,53,49,252,182,1,16,4,8,200,11,2,203,3,1,7,101,110,118,52, +48,53,51,252,183,1,95,9,8,252,25,10,2,109,18,102,2,136,8,207,36, +35,34,8,189,8,196,8,195,16,4,8,206,11,3,1,4,103,53,50,50,252, +184,1,3,1,7,101,110,118,52,48,52,53,252,185,1,16,4,8,205,11,2, +252,163,1,3,1,7,101,110,118,52,48,52,54,252,186,1,18,158,2,144,8, +207,18,158,2,159,8,207,18,158,2,144,8,207,18,158,2,144,8,207,18,158, +2,144,8,207,18,158,2,159,8,207,18,158,2,144,8,207,18,158,2,144,8, +207,18,158,2,252,164,1,8,207,18,158,2,144,8,207,18,158,2,252,19,1, +8,207,18,158,9,8,207,18,158,2,144,8,207,18,158,2,159,8,207,18,158, +2,144,8,207,18,158,2,144,8,207,18,158,2,247,8,207,18,158,2,144,8, +207,18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,252,107,1,8,207, +18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,252,107,1,8,207,18, +16,2,106,93,16,2,158,2,247,8,207,9,8,212,8,28,59,58,57,56,55, +13,16,3,33,2,173,2,109,93,8,252,25,10,16,6,8,211,11,2,188,2, +189,2,252,180,1,2,252,180,1,16,4,8,210,11,2,199,2,252,181,1,16, +4,8,209,11,2,201,2,252,182,1,16,4,8,208,11,64,118,97,108,115,252, +187,1,3,1,7,101,110,118,52,48,53,57,252,188,1,95,9,8,252,25,10, +2,109,18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,144,8,207,18, +158,2,144,8,207,18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,252, +166,1,8,207,18,158,2,252,164,1,8,207,18,158,2,144,8,207,18,158,2, +252,19,1,8,207,18,158,9,8,207,18,158,2,144,8,207,18,16,2,105,93, +16,2,158,2,252,164,1,8,207,9,8,213,8,28,59,58,57,56,55,13,16, +3,33,2,173,2,109,93,8,252,25,10,8,211,8,210,8,209,95,9,8,252, +25,10,2,109,18,158,2,144,8,207,18,158,2,144,8,207,18,158,2,144,8, +207,18,16,2,158,94,16,2,98,2,252,163,1,8,217,93,8,252,21,10,16, +4,8,216,11,3,1,8,119,115,116,109,112,53,50,48,252,189,1,3,1,7, +101,110,118,52,48,52,48,252,190,1,16,4,8,215,11,3,1,4,103,53,50, +49,252,191,1,3,1,7,101,110,118,52,48,54,52,252,192,1,16,4,8,214, +11,2,252,11,1,3,1,7,101,110,118,52,48,54,53,252,193,1,9,16,2, +158,2,156,8,217,9,8,217,95,9,8,252,21,10,2,107,11,16,5,93,2, +52,89,162,32,33,8,43,9,223,0,27,249,22,208,83,160,41,32,35,39,196, +27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248, +80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,33,248,80,158,40, +34,195,27,248,80,158,41,35,196,28,248,80,158,41,36,193,248,80,158,41,37, +193,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,79,196, +249,80,158,39,38,200,27,249,22,60,197,198,27,83,160,41,33,41,39,250,22, +208,83,160,41,34,44,39,250,22,208,83,160,41,35,47,39,250,22,61,83,160, +41,36,50,39,250,22,208,83,160,41,37,53,39,248,22,59,250,22,208,83,160, +41,38,57,39,249,22,59,83,160,41,39,59,39,250,22,208,83,160,41,40,8, +30,39,250,22,61,83,160,41,41,8,33,39,250,22,208,83,160,41,42,8,36, +39,251,22,61,83,160,41,43,8,40,39,83,160,41,44,8,40,39,248,22,52, +23,33,248,22,51,23,33,83,160,41,45,8,36,39,83,160,41,46,8,33,39, +83,160,41,47,8,30,39,83,160,41,48,57,39,83,160,41,49,53,39,83,160, +41,50,50,39,83,160,41,51,47,39,195,250,22,252,32,2,11,6,10,10,98, +97,100,32,115,121,110,116,97,120,196,32,20,97,158,16,7,2,65,2,68,2, +70,2,72,2,78,2,80,2,164,16,20,18,98,2,82,8,219,36,35,34,16, +4,8,218,11,2,252,25,1,3,1,7,101,110,118,52,48,54,56,252,194,1, +18,16,2,95,2,135,8,220,93,8,252,36,10,95,9,8,252,36,10,2,109, +18,100,2,136,8,223,36,35,34,8,218,16,8,8,222,11,3,1,4,103,53, +50,51,252,195,1,3,1,4,103,53,50,52,252,196,1,3,1,4,103,53,50, +53,252,197,1,3,1,7,101,110,118,52,48,55,52,252,198,1,2,252,198,1, +2,252,198,1,16,8,8,221,11,2,141,2,252,23,1,2,252,24,1,3,1, +7,101,110,118,52,48,55,53,252,199,1,2,252,199,1,2,252,199,1,18,158, +2,144,8,223,18,158,2,252,105,1,8,223,18,158,2,144,8,223,18,158,2, +144,8,223,18,158,96,16,2,158,2,155,8,223,9,16,2,158,63,99,112,117, +252,200,1,8,223,9,16,2,158,64,117,115,101,114,252,201,1,8,223,9,16, +2,158,62,103,99,252,202,1,8,223,9,8,223,18,158,2,144,8,223,18,158, +70,116,105,109,101,45,97,112,112,108,121,252,203,1,8,223,18,158,2,144,8, +223,18,158,2,252,19,1,8,223,18,158,9,8,223,18,158,2,144,8,223,18, +16,2,103,93,16,2,158,64,110,117,108,108,252,204,1,8,223,9,8,225,8, +28,59,58,57,56,55,13,16,3,33,2,173,2,109,93,8,252,36,10,16,6, +8,224,11,2,188,2,189,3,1,7,101,110,118,52,48,56,48,252,205,1,2, +252,205,1,95,9,8,252,36,10,2,109,18,158,2,144,8,223,18,158,2,144, +8,223,18,158,2,144,8,223,18,16,2,158,94,16,2,158,97,16,2,158,66, +112,114,105,110,116,102,252,206,1,8,223,9,16,2,158,6,40,40,99,112,117, +32,116,105,109,101,58,32,126,115,32,114,101,97,108,32,116,105,109,101,58,32, +126,115,32,103,99,32,116,105,109,101,58,32,126,115,126,110,8,223,9,16,2, +158,2,252,200,1,8,223,9,16,2,158,2,252,201,1,8,223,9,16,2,158, +2,252,202,1,8,223,9,8,223,9,16,2,158,95,16,2,158,2,252,82,1, +8,223,9,16,2,158,2,252,83,1,8,223,9,16,2,158,2,155,8,223,9, +8,223,9,8,225,95,9,8,252,36,10,2,109,18,158,2,144,8,223,11,100, +83,159,32,97,80,158,32,32,80,158,32,33,80,158,32,34,80,158,32,35,80, +158,32,36,27,247,22,252,104,2,87,94,28,28,192,248,22,252,3,2,248,22, +252,103,2,194,11,250,22,252,33,2,2,86,6,15,15,105,110,115,112,101,99, +116,111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37,32,11,254, +22,252,83,2,2,83,11,33,32,11,9,204,252,22,7,197,198,199,250,22,252, +85,2,203,32,61,112,252,207,1,250,22,252,86,2,204,32,2,252,207,1,83, +159,32,93,80,158,32,37,89,162,32,33,39,2,14,223,0,87,94,28,248,80, +158,33,34,194,12,250,22,252,33,2,2,14,6,7,7,112,114,111,109,105,115, +101,196,27,248,80,158,34,35,195,28,248,22,0,193,27,249,22,6,195,22,58, +87,94,28,248,22,0,248,80,158,36,35,197,249,80,158,36,36,197,194,12,249, +22,1,22,7,248,80,158,37,35,198,249,22,1,22,7,194,83,159,32,93,80, +158,32,38,89,162,32,32,36,2,16,223,0,248,80,158,33,39,249,22,19,11, +80,158,35,40,83,159,32,93,80,158,32,41,89,162,32,34,40,2,23,223,0, +87,95,28,248,22,252,213,2,194,12,252,22,252,33,2,2,23,6,16,16,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,32,198,199,28,28,248, +22,0,195,249,22,34,196,32,11,12,252,22,252,33,2,2,23,6,19,19,112, +114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41,33,198,199, +20,14,159,80,158,32,40,193,247,194,83,159,32,97,80,158,32,42,80,158,32, +43,80,158,32,44,80,158,32,45,80,158,32,46,252,22,252,83,2,2,100,11, +33,32,11,83,159,32,97,80,158,32,47,80,158,32,48,80,158,32,49,80,158, +32,50,80,158,32,51,27,247,22,252,104,2,87,94,28,28,192,248,22,252,3, +2,248,22,252,103,2,194,11,250,22,252,33,2,2,86,6,15,15,105,110,115, +112,101,99,116,111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37, +32,11,254,22,252,83,2,2,100,11,33,32,11,9,204,252,22,7,197,198,199, +250,22,252,85,2,203,32,64,99,101,108,108,252,208,1,250,22,252,86,2,204, +32,2,252,208,1,83,159,32,93,80,158,32,52,89,162,32,32,36,2,45,223, +0,248,80,158,33,43,249,22,19,11,80,158,35,53,83,159,32,93,80,158,32, +54,89,162,32,34,40,2,49,223,0,87,95,28,248,80,158,33,44,194,12,252, +22,252,33,2,2,49,6,22,22,98,114,101,97,107,32,112,97,114,97,109,101, +116,101,114,105,122,97,116,105,111,110,32,198,199,28,28,248,22,0,195,249,22, +34,196,32,11,12,252,22,252,33,2,2,23,6,19,19,112,114,111,99,101,100, +117,114,101,32,40,97,114,105,116,121,32,48,41,33,198,199,83,158,36,20,92, +94,20,14,159,80,158,32,53,249,80,158,34,45,195,32,87,94,247,80,158,32, +55,247,194,247,80,158,32,55,96,68,35,37,107,101,114,110,101,108,252,209,1, +74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,252,210,1,2,89,2, +18,96,2,252,209,1,2,66,2,104,2,123,0}; + EVAL_ONE_SIZED_STR((char *)expr, 23532); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,252,216,1,252,144,53,159,32,20,97,158,16,1, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,252,216,1,252,144,53,159,32,20,97,158,16,1, 20,23,65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,66,35,37,109, 105,115,99,1,29,2,11,11,10,10,10,44,80,158,32,32,20,97,158,16,47, 30,3,2,2,72,112,97,116,104,45,115,116,114,105,110,103,63,4,254,1,30, @@ -3491,25 +3494,25 @@ 248,80,158,41,37,193,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195, 27,248,22,79,196,27,249,22,208,83,160,41,33,40,38,249,22,208,203,247,22, 47,27,249,22,208,83,160,41,34,41,38,249,22,208,204,247,22,47,27,249,22, -208,83,160,41,35,42,38,249,22,208,205,247,22,47,27,252,22,60,201,199,200, -202,198,27,83,160,41,36,42,38,250,22,208,83,160,41,37,45,38,250,22,208, +208,83,160,41,35,42,38,249,22,208,205,247,22,47,27,252,22,60,201,199,198, +202,200,27,83,160,41,36,42,38,250,22,208,83,160,41,37,45,38,250,22,208, 83,160,41,38,48,38,250,22,59,83,160,41,39,51,38,250,22,208,83,160,41, -40,54,38,248,22,59,250,22,208,83,160,41,41,58,38,249,22,55,248,22,86, +40,54,38,248,22,59,250,22,208,83,160,41,41,58,38,249,22,55,248,22,88, 23,20,83,160,41,42,8,28,38,83,160,41,43,58,38,83,160,41,44,54,38, 250,22,208,83,160,41,45,54,38,251,22,59,83,160,41,46,58,38,250,22,208, 83,160,41,47,8,29,38,248,22,59,250,22,208,83,160,41,48,8,33,38,249, 22,59,248,22,77,23,27,250,22,208,83,160,41,49,8,38,38,250,22,59,83, 160,41,50,8,41,38,248,22,89,23,33,250,22,208,83,160,41,51,8,44,38, 250,22,59,83,160,41,52,8,47,38,250,22,208,83,160,41,53,8,50,38,248, -22,59,250,22,208,83,160,41,54,8,54,38,249,22,59,248,22,88,23,48,250, +22,59,250,22,208,83,160,41,54,8,54,38,249,22,59,248,22,86,23,48,250, 22,208,83,160,41,55,8,59,38,249,22,59,83,160,41,56,8,61,38,248,22, -86,23,53,83,160,41,57,8,59,38,83,160,41,58,8,54,38,83,160,41,59, +88,23,53,83,160,41,57,8,59,38,83,160,41,58,8,54,38,83,160,41,59, 8,50,38,250,22,208,83,160,41,8,28,8,50,38,251,22,61,83,160,41,8, -29,8,54,38,83,160,41,8,30,8,54,38,248,22,88,23,46,248,22,51,23, +29,8,54,38,83,160,41,8,30,8,54,38,248,22,86,23,46,248,22,51,23, 46,83,160,41,8,31,8,50,38,83,160,41,8,32,8,44,38,83,160,41,8, 33,8,38,38,83,160,41,8,34,8,33,38,83,160,41,8,35,8,29,38,250, 22,208,83,160,41,8,36,8,29,38,250,22,59,83,160,41,8,37,8,32,38, -248,22,86,23,24,250,22,208,83,160,41,8,38,8,35,38,249,22,59,83,160, +248,22,88,23,24,250,22,208,83,160,41,8,38,8,35,38,249,22,59,83,160, 41,8,39,8,37,38,248,22,77,23,29,83,160,41,8,40,8,35,38,83,160, 41,8,41,8,29,38,248,22,77,23,18,83,160,41,8,42,54,38,83,160,41, 8,43,48,38,195,250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110, @@ -3518,70 +3521,70 @@ 102,103,1,30,104,2,100,67,115,116,120,45,99,97,114,105,5,30,106,2,100, 67,115,116,120,45,99,100,114,107,6,30,108,2,100,69,115,116,120,45,108,105, 115,116,63,109,8,30,110,2,100,69,115,116,120,45,62,108,105,115,116,111,4, -16,44,18,98,64,104,101,114,101,112,38,97,36,10,32,11,16,162,2,69,2, -2,2,28,2,2,1,30,110,101,119,45,109,101,109,116,114,97,99,101,45,116, -114,97,99,107,105,110,103,45,102,117,110,99,116,105,111,110,113,70,35,37,109, -101,109,116,114,97,99,101,114,2,71,2,2,77,100,101,102,105,110,101,45,102, -111,114,45,115,121,110,116,97,120,115,68,35,37,100,101,102,105,110,101,116,74, -45,100,101,102,105,110,101,45,115,121,110,116,97,120,117,74,35,37,100,101,102, -105,110,101,45,101,116,45,97,108,118,2,79,2,2,1,31,117,110,105,111,110, -101,100,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103,45, -118,97,108,117,101,119,2,114,2,4,2,2,2,34,2,2,73,100,101,102,105, -110,101,45,115,116,114,117,99,116,120,2,118,2,55,2,2,2,20,2,2,2, -14,2,2,2,51,2,2,76,98,101,103,105,110,45,102,111,114,45,115,121,110, -116,97,120,121,2,116,64,99,97,115,101,122,73,35,37,109,111,114,101,45,115, -99,104,101,109,101,123,2,18,2,2,2,22,2,2,67,45,100,101,102,105,110, -101,124,2,118,2,38,2,2,2,67,2,2,2,97,2,2,2,26,2,2,68, -112,114,111,109,105,115,101,63,125,2,123,2,30,2,2,63,97,110,100,126,71, -35,37,113,113,45,97,110,100,45,111,114,127,2,81,2,2,62,111,114,128,2, -127,2,47,2,2,2,40,2,2,1,24,99,117,114,114,101,110,116,45,112,97, -114,97,109,101,116,101,114,105,122,97,116,105,111,110,129,2,123,2,75,2,2, -64,119,104,101,110,130,2,118,65,100,101,108,97,121,131,2,123,66,117,110,108, -101,115,115,132,2,118,78,112,97,114,97,109,101,116,101,114,105,122,101,45,98, -114,101,97,107,133,2,123,71,115,101,116,33,45,118,97,108,117,101,115,134,2, -123,66,108,101,116,47,101,99,135,2,118,65,102,111,114,99,101,136,2,123,64, -116,105,109,101,137,2,123,2,53,2,2,70,108,101,116,45,115,116,114,117,99, -116,138,2,123,73,100,101,102,105,110,101,45,115,121,110,116,97,120,139,2,116, -2,59,2,2,69,102,108,117,105,100,45,108,101,116,140,2,123,2,57,2,2, -2,10,2,2,62,100,111,141,2,123,70,113,117,97,115,105,113,117,111,116,101, -142,2,127,2,6,2,2,2,98,2,2,2,49,2,2,73,119,105,116,104,45, -104,97,110,100,108,101,114,115,143,2,123,1,32,99,97,108,108,45,119,105,116, -104,45,98,114,101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97,116, -105,111,110,144,2,123,2,36,2,2,2,65,2,2,74,119,105,116,104,45,104, -97,110,100,108,101,114,115,42,145,2,123,2,91,2,2,2,77,2,2,66,108, -101,116,47,99,99,146,2,123,1,26,99,97,108,108,45,119,105,116,104,45,112, -97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,147,2,123,66,100,101, -102,105,110,101,148,2,116,2,32,2,2,2,61,2,2,2,83,2,2,2,12, -2,2,2,85,2,2,72,112,97,114,97,109,101,116,101,114,105,122,101,149,2, -123,1,30,99,117,114,114,101,110,116,45,98,114,101,97,107,45,112,97,114,97, -109,101,116,101,114,105,122,97,116,105,111,110,150,2,123,2,63,2,2,2,89, -2,2,2,16,2,2,2,93,2,2,2,8,2,2,2,73,2,2,2,95,2, +16,44,18,98,64,104,101,114,101,112,38,97,36,10,32,11,16,162,65,100,101, +108,97,121,113,73,35,37,109,111,114,101,45,115,99,104,101,109,101,114,2,63, +2,2,2,28,2,2,1,30,110,101,119,45,109,101,109,116,114,97,99,101,45, +116,114,97,99,107,105,110,103,45,102,117,110,99,116,105,111,110,115,70,35,37, +109,101,109,116,114,97,99,101,116,65,102,111,114,99,101,117,2,114,2,47,2, +2,2,77,2,2,2,18,2,2,74,45,100,101,102,105,110,101,45,115,121,110, +116,97,120,118,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,119,1, +31,117,110,105,111,110,101,100,45,109,101,109,116,114,97,99,101,45,116,114,97, +99,107,105,110,103,45,118,97,108,117,101,120,2,116,2,4,2,2,73,100,101, +102,105,110,101,45,115,116,114,117,99,116,121,2,119,2,34,2,2,2,36,2, +2,2,32,2,2,2,98,2,2,2,22,2,2,62,100,111,122,2,114,2,59, +2,2,67,45,100,101,102,105,110,101,123,2,119,77,100,101,102,105,110,101,45, +102,111,114,45,115,121,110,116,97,120,124,68,35,37,100,101,102,105,110,101,125, +66,108,101,116,47,99,99,126,2,114,2,26,2,2,68,112,114,111,109,105,115, +101,63,127,2,114,76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97, +120,128,2,125,2,30,2,2,2,38,2,2,2,93,2,2,2,14,2,2,63, +97,110,100,129,71,35,37,113,113,45,97,110,100,45,111,114,130,64,116,105,109, +101,131,2,114,2,40,2,2,78,112,97,114,97,109,101,116,101,114,105,122,101, +45,98,114,101,97,107,132,2,114,2,85,2,2,64,119,104,101,110,133,2,119, +2,61,2,2,66,117,110,108,101,115,115,134,2,119,2,95,2,2,2,89,2, +2,71,115,101,116,33,45,118,97,108,117,101,115,135,2,114,66,108,101,116,47, +101,99,136,2,119,66,100,101,102,105,110,101,137,2,125,2,55,2,2,70,108, +101,116,45,115,116,114,117,99,116,138,2,114,73,100,101,102,105,110,101,45,115, +121,110,116,97,120,139,2,125,72,112,97,114,97,109,101,116,101,114,105,122,101, +140,2,114,69,102,108,117,105,100,45,108,101,116,141,2,114,2,6,2,2,2, +75,2,2,2,69,2,2,2,10,2,2,62,111,114,142,2,130,2,67,2,2, +70,113,117,97,115,105,113,117,111,116,101,143,2,130,2,51,2,2,2,49,2, +2,74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,144,2,114,1,32, +99,97,108,108,45,119,105,116,104,45,98,114,101,97,107,45,112,97,114,97,109, +101,116,101,114,105,122,97,116,105,111,110,145,2,114,2,12,2,2,2,65,2, +2,2,8,2,2,2,91,2,2,2,20,2,2,1,24,99,117,114,114,101,110, +116,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,146,2,114, +2,57,2,2,2,79,2,2,1,26,99,97,108,108,45,119,105,116,104,45,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,147,2,114,64,99,97, +115,101,148,2,114,2,81,2,2,1,30,99,117,114,114,101,110,116,45,98,114, +101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,149, +2,114,2,53,2,2,2,83,2,2,2,16,2,2,2,97,2,2,73,119,105, +116,104,45,104,97,110,100,108,101,114,115,150,2,114,2,73,2,2,2,71,2, 2,2,24,2,2,1,30,109,101,109,111,114,121,45,116,114,97,99,101,45,99, -111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,151,2,114,64,99, +111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,151,2,116,64,99, 111,110,100,152,66,35,37,99,111,110,100,153,2,87,2,2,97,35,10,33,11, 16,78,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,154,76,35, 37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,155,70,108,101,116,45, 115,121,110,116,97,120,156,2,155,71,119,105,116,104,45,115,121,110,116,97,120, 157,70,35,37,119,105,116,104,45,115,116,120,158,66,115,121,110,116,97,120,159, -69,35,37,115,116,120,99,97,115,101,160,2,126,2,127,71,115,116,120,45,118, -101,99,116,111,114,63,161,2,100,2,120,2,118,2,128,2,127,2,105,2,100, -74,115,116,120,45,118,101,99,116,111,114,45,114,101,102,162,2,100,1,20,103, -101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,163,2, -158,2,107,2,100,70,115,116,120,45,114,111,116,97,116,101,164,2,100,73,115, -116,120,45,99,104,101,99,107,47,101,115,99,165,2,100,2,103,2,100,1,26, -99,104,101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116, -105,102,105,101,114,166,2,155,71,115,116,120,45,114,111,116,97,116,101,42,167, -2,100,69,97,112,112,101,110,100,47,35,102,168,2,100,74,115,112,108,105,116, -45,115,116,120,45,108,105,115,116,169,2,100,2,124,2,118,2,117,2,118,2, -152,2,153,71,105,100,101,110,116,105,102,105,101,114,63,170,2,100,70,115,121, -110,116,97,120,47,108,111,99,171,68,35,37,115,116,120,108,111,99,172,2,101, -2,100,69,115,116,120,45,110,117,108,108,63,173,2,100,75,108,101,116,114,101, -99,45,115,121,110,116,97,120,101,115,174,2,155,2,142,2,127,71,115,116,120, -45,110,117,108,108,47,35,102,175,2,100,73,108,101,116,114,101,99,45,115,121, -110,116,97,120,176,2,155,2,130,2,118,2,135,2,118,72,108,101,116,45,115, -121,110,116,97,120,101,115,177,2,155,2,132,2,118,2,109,2,100,71,115,121, -110,116,97,120,45,99,97,115,101,178,2,172,72,115,121,110,116,97,120,45,99, -97,115,101,42,179,2,172,72,115,121,110,116,97,120,45,114,117,108,101,115,180, +69,35,37,115,116,120,99,97,115,101,160,71,115,116,120,45,118,101,99,116,111, +114,63,161,2,100,2,121,2,119,2,129,2,130,2,105,2,100,74,115,116,120, +45,118,101,99,116,111,114,45,114,101,102,162,2,100,1,20,103,101,110,101,114, +97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,163,2,158,2,107,2, +100,70,115,116,120,45,114,111,116,97,116,101,164,2,100,73,115,116,120,45,99, +104,101,99,107,47,101,115,99,165,2,100,2,103,2,100,1,26,99,104,101,99, +107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101, +114,166,2,155,71,115,116,120,45,114,111,116,97,116,101,42,167,2,100,69,97, +112,112,101,110,100,47,35,102,168,2,100,74,115,112,108,105,116,45,115,116,120, +45,108,105,115,116,169,2,100,71,115,121,110,116,97,120,45,99,97,115,101,170, +68,35,37,115,116,120,108,111,99,171,2,118,2,119,2,152,2,153,71,105,100, +101,110,116,105,102,105,101,114,63,172,2,100,70,115,121,110,116,97,120,47,108, +111,99,173,2,171,2,101,2,100,2,142,2,130,69,115,116,120,45,110,117,108, +108,63,174,2,100,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115, +175,2,155,2,143,2,130,71,115,116,120,45,110,117,108,108,47,35,102,176,2, +100,73,108,101,116,114,101,99,45,115,121,110,116,97,120,177,2,155,2,133,2, +119,2,136,2,119,72,108,101,116,45,115,121,110,116,97,120,101,115,178,2,155, +2,134,2,119,2,109,2,100,2,123,2,119,72,115,121,110,116,97,120,45,99, +97,115,101,42,179,2,171,72,115,121,110,116,97,120,45,114,117,108,101,115,180, 2,155,2,111,2,100,96,34,8,254,1,11,16,0,16,4,33,11,61,120,181, 3,1,7,101,110,118,52,49,48,53,182,18,100,2,112,41,36,35,34,33,16, 8,40,11,3,1,4,103,53,50,54,183,3,1,4,103,53,50,55,184,3,1, @@ -3599,27 +3602,27 @@ 114,107,203,3,1,7,101,110,118,52,49,52,53,204,18,158,63,99,116,120,205, 49,18,158,63,108,101,116,206,49,18,158,2,205,49,18,158,2,205,49,18,16, 2,103,93,16,2,158,11,49,9,57,97,56,10,32,11,16,58,2,159,29,207, -11,11,2,126,2,127,2,161,2,100,2,128,2,127,2,105,2,100,2,162,2, -100,73,115,121,110,116,97,120,45,99,97,115,101,42,42,208,2,207,2,107,2, -100,2,164,2,100,2,165,2,100,2,103,2,100,2,167,2,100,2,168,2,100, -2,169,2,100,2,124,2,118,2,117,2,118,2,152,2,153,2,170,2,100,1, -20,101,108,108,105,112,115,105,115,45,99,111,117,110,116,45,101,114,114,111,114, -209,2,207,2,101,2,100,2,173,2,100,2,142,2,127,2,175,2,100,2,132, -2,118,2,130,2,118,2,120,2,118,2,109,2,100,2,135,2,118,2,111,2, -100,97,55,10,33,11,16,70,79,109,97,107,101,45,115,121,110,116,97,120,45, -109,97,112,112,105,110,103,210,64,35,37,115,99,211,2,126,2,127,2,161,2, -100,2,128,2,127,2,105,2,100,2,162,2,100,2,107,2,100,2,164,2,100, -2,165,2,100,2,103,2,100,72,110,111,45,101,108,108,105,112,115,101,115,63, -212,2,211,2,167,2,100,2,168,2,100,2,169,2,100,72,115,116,120,45,109, -101,109,113,45,112,111,115,213,2,211,2,124,2,118,2,117,2,118,2,152,2, -153,2,170,2,100,74,109,97,107,101,45,109,97,116,99,104,38,101,110,118,214, -2,211,2,101,2,100,2,173,2,100,2,142,2,127,1,20,115,121,110,116,97, -120,45,109,97,112,112,105,110,103,45,100,101,112,116,104,215,2,211,2,175,2, -100,72,109,97,107,101,45,112,101,120,112,97,110,100,216,2,211,2,132,2,118, -2,130,2,118,75,115,121,110,116,97,120,45,109,97,112,112,105,110,103,63,217, -2,211,1,21,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,118,97, -108,118,97,114,218,2,211,2,120,2,118,2,109,2,100,2,135,2,118,74,103, -101,116,45,109,97,116,99,104,45,118,97,114,115,219,2,211,2,111,2,100,96, +11,11,2,161,2,100,2,129,2,130,2,105,2,100,2,162,2,100,73,115,121, +110,116,97,120,45,99,97,115,101,42,42,208,2,207,2,107,2,100,2,164,2, +100,2,142,2,130,2,103,2,100,2,167,2,100,2,168,2,100,2,169,2,100, +2,123,2,119,2,118,2,119,2,152,2,153,2,172,2,100,1,20,101,108,108, +105,112,115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,209,2,207,2, +121,2,119,2,174,2,100,2,143,2,130,2,176,2,100,2,133,2,119,2,134, +2,119,2,109,2,100,2,136,2,119,2,165,2,100,2,111,2,100,2,101,2, +100,97,55,10,33,11,16,70,2,161,2,100,2,129,2,130,2,105,2,100,2, +162,2,100,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115,210,64,35, +37,115,99,211,2,107,2,100,2,164,2,100,2,142,2,130,2,103,2,100,74, +109,97,107,101,45,109,97,116,99,104,38,101,110,118,212,2,211,72,110,111,45, +101,108,108,105,112,115,101,115,63,213,2,211,2,167,2,100,2,168,2,100,2, +169,2,100,72,115,116,120,45,109,101,109,113,45,112,111,115,214,2,211,2,123, +2,119,2,118,2,119,2,152,2,153,2,172,2,100,79,109,97,107,101,45,115, +121,110,116,97,120,45,109,97,112,112,105,110,103,215,2,211,2,121,2,119,2, +174,2,100,2,143,2,130,1,20,115,121,110,116,97,120,45,109,97,112,112,105, +110,103,45,100,101,112,116,104,216,2,211,2,176,2,100,72,109,97,107,101,45, +112,101,120,112,97,110,100,217,2,211,2,133,2,119,75,115,121,110,116,97,120, +45,109,97,112,112,105,110,103,63,218,2,211,1,21,115,121,110,116,97,120,45, +109,97,112,112,105,110,103,45,118,97,108,118,97,114,219,2,211,2,134,2,119, +2,109,2,100,2,136,2,119,2,165,2,100,2,111,2,100,2,101,2,100,96, 54,8,254,1,11,16,0,16,4,53,11,2,181,3,1,6,101,110,118,51,56, 48,220,16,4,52,11,68,104,101,114,101,45,115,116,120,221,3,1,6,101,110, 118,51,56,50,222,16,4,51,11,2,221,2,222,13,16,3,33,2,207,2,160, @@ -3628,12 +3631,12 @@ 49,18,158,2,205,49,18,158,2,205,49,18,158,2,206,49,18,158,2,205,49, 18,158,2,205,49,18,158,2,205,49,18,158,66,108,97,109,98,100,97,226,49, 18,158,2,205,49,18,158,2,206,49,18,158,2,205,49,18,158,2,205,49,18, -158,2,205,49,18,158,2,119,49,18,158,2,205,49,18,158,2,205,49,18,158, +158,2,205,49,18,158,2,120,49,18,158,2,205,49,18,158,2,205,49,18,158, 2,205,49,18,158,2,205,49,18,158,1,22,119,105,116,104,45,99,111,110,116, 105,110,117,97,116,105,111,110,45,109,97,114,107,227,49,18,158,2,151,49,18, 158,2,205,49,18,158,2,205,49,18,158,2,205,49,18,158,2,205,49,18,158, 2,205,49,18,158,2,205,49,18,158,64,115,101,116,33,228,49,18,158,2,205, -49,18,158,2,113,49,18,158,2,205,49,18,158,2,205,49,18,158,2,205,49, +49,18,158,2,115,49,18,158,2,205,49,18,158,2,205,49,18,158,2,205,49, 18,158,2,205,49,11,134,83,159,32,93,80,158,32,32,89,162,32,33,36,2, 4,222,27,248,22,252,14,3,194,28,192,192,28,248,22,252,135,1,194,27,248, 22,252,27,3,195,28,192,192,248,22,252,28,3,195,11,83,159,32,93,80,158, @@ -4068,16 +4071,16 @@ 114,45,99,105,60,61,63,252,204,1,70,99,104,97,114,45,99,105,62,61,63, 252,205,1,71,99,104,97,114,45,117,112,99,97,115,101,252,206,1,68,98,111, 111,108,101,97,110,63,252,207,1,64,101,113,118,63,252,208,1,66,101,113,117, -97,108,63,252,209,1,2,136,76,99,97,108,108,45,119,105,116,104,45,118,97, +97,108,63,252,209,1,2,117,76,99,97,108,108,45,119,105,116,104,45,118,97, 108,117,101,115,252,210,1,66,118,97,108,117,101,115,252,211,1,64,101,118,97, 108,252,212,1,2,71,2,93,2,97,2,91,72,100,121,110,97,109,105,99,45, 119,105,110,100,252,213,1,9,193,97,68,35,37,107,101,114,110,101,108,252,214, -1,2,123,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,252,215,1, -2,114,2,116,95,2,252,214,1,2,100,2,155,0}; +1,2,114,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,252,215,1, +2,116,2,125,95,2,252,214,1,2,100,2,155,0}; EVAL_ONE_SIZED_STR((char *)expr, 13726); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,66,252,59,4,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,66,252,59,4,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,72,35,37,115,116,120, 109,122,45,98,111,100,121,1,29,2,11,11,18,95,11,35,97,33,10,32,11, 16,58,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,3,76,35, @@ -4085,27 +4088,27 @@ 115,121,110,116,97,120,5,2,4,71,119,105,116,104,45,115,121,110,116,97,120, 6,70,35,37,119,105,116,104,45,115,116,120,7,66,115,121,110,116,97,120,8, 69,35,37,115,116,120,99,97,115,101,9,63,97,110,100,10,71,35,37,113,113, -45,97,110,100,45,111,114,11,62,111,114,12,2,11,71,115,121,110,116,97,120, -45,99,97,115,101,13,68,35,37,115,116,120,108,111,99,14,73,100,101,102,105, -110,101,45,115,121,110,116,97,120,15,68,35,37,100,101,102,105,110,101,16,1, -20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115, -17,2,7,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120, -18,2,16,67,45,100,101,102,105,110,101,19,74,35,37,100,101,102,105,110,101, -45,101,116,45,97,108,20,74,45,100,101,102,105,110,101,45,115,121,110,116,97, -120,21,2,20,64,99,111,110,100,22,66,35,37,99,111,110,100,23,73,100,101, -102,105,110,101,45,115,116,114,117,99,116,24,2,20,75,108,101,116,114,101,99, -45,115,121,110,116,97,120,101,115,25,2,4,70,113,117,97,115,105,113,117,111, -116,101,26,2,11,1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101, -45,98,101,103,105,110,27,158,68,35,37,107,101,114,110,101,108,28,74,35,37, -109,111,100,117,108,101,45,98,101,103,105,110,29,76,98,101,103,105,110,45,102, -111,114,45,115,121,110,116,97,120,30,2,16,70,115,121,110,116,97,120,47,108, -111,99,31,2,14,66,100,101,102,105,110,101,32,2,16,73,108,101,116,114,101, -99,45,115,121,110,116,97,120,33,2,4,64,119,104,101,110,34,2,20,72,108, -101,116,45,115,121,110,116,97,120,101,115,35,2,4,66,117,110,108,101,115,115, -36,2,20,72,115,121,110,116,97,120,45,99,97,115,101,42,37,2,14,1,26, -99,104,101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116, -105,102,105,101,114,38,2,4,66,108,101,116,47,101,99,39,2,20,72,115,121, -110,116,97,120,45,114,117,108,101,115,40,2,4,1,28,109,122,115,99,104,101, +45,97,110,100,45,111,114,11,71,115,121,110,116,97,120,45,99,97,115,101,12, +68,35,37,115,116,120,108,111,99,13,62,111,114,14,2,11,66,100,101,102,105, +110,101,15,68,35,37,100,101,102,105,110,101,16,1,20,103,101,110,101,114,97, +116,101,45,116,101,109,112,111,114,97,114,105,101,115,17,2,7,67,45,100,101, +102,105,110,101,18,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,19, +74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,20,2,19,64,99,111, +110,100,21,66,35,37,99,111,110,100,22,1,20,35,37,112,108,97,105,110,45, +109,111,100,117,108,101,45,98,101,103,105,110,23,158,68,35,37,107,101,114,110, +101,108,24,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,25,73,100, +101,102,105,110,101,45,115,116,114,117,99,116,26,2,19,75,108,101,116,114,101, +99,45,115,121,110,116,97,120,101,115,27,2,4,70,113,117,97,115,105,113,117, +111,116,101,28,2,11,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110, +116,97,120,29,2,16,70,115,121,110,116,97,120,47,108,111,99,30,2,13,73, +108,101,116,114,101,99,45,115,121,110,116,97,120,31,2,4,64,119,104,101,110, +32,2,19,76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120,33, +2,16,72,108,101,116,45,115,121,110,116,97,120,101,115,34,2,4,66,117,110, +108,101,115,115,35,2,19,66,108,101,116,47,101,99,36,2,19,1,26,99,104, +101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102, +105,101,114,37,2,4,72,115,121,110,116,97,120,45,99,97,115,101,42,38,2, +13,72,115,121,110,116,97,120,45,114,117,108,101,115,39,2,4,73,100,101,102, +105,110,101,45,115,121,110,116,97,120,40,2,16,1,28,109,122,115,99,104,101, 109,101,45,105,110,45,115,116,120,45,109,111,100,117,108,101,45,98,101,103,105, 110,41,2,2,10,10,32,80,158,32,32,20,97,158,16,0,16,0,11,11,16, 0,32,11,16,1,2,41,16,1,11,16,1,2,41,32,33,93,16,5,93,2, @@ -4127,13 +4130,13 @@ 35,102,60,2,44,71,115,116,120,45,110,117,108,108,47,35,102,61,2,44,74, 115,116,120,45,118,101,99,116,111,114,45,114,101,102,62,2,44,96,37,8,254, 1,11,16,0,16,4,36,11,63,115,116,120,63,3,1,7,101,110,118,52,51, -57,57,64,18,158,2,27,39,18,158,78,114,101,113,117,105,114,101,45,102,111, -114,45,115,121,110,116,97,120,65,39,11,9,95,2,28,2,4,2,16,94,2, -28,2,44,0}; +57,57,64,18,158,2,23,39,18,158,78,114,101,113,117,105,114,101,45,102,111, +114,45,115,121,110,116,97,120,65,39,11,9,95,2,24,2,4,2,16,94,2, +24,2,44,0}; EVAL_ONE_SIZED_STR((char *)expr, 1095); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,91,252,159,6,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,91,252,159,6,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,68,109,122,115,99,104, 101,109,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,97,158,16,0, 16,0,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,3,10,16,0, @@ -4167,79 +4170,79 @@ 71,114,97,116,105,111,110,97,108,105,122,101,32,1,20,114,101,97,100,45,101, 118,97,108,45,112,114,105,110,116,45,108,111,111,112,33,1,25,115,99,104,101, 109,101,45,114,101,112,111,114,116,45,101,110,118,105,114,111,110,109,101,110,116, -34,73,100,101,102,105,110,101,45,115,121,110,116,97,120,35,64,99,97,115,101, -36,66,108,101,116,47,99,99,37,66,100,101,102,105,110,101,38,65,100,101,108, -97,121,39,64,116,105,109,101,40,78,112,97,114,97,109,101,116,101,114,105,122, -101,45,98,114,101,97,107,41,77,117,110,115,121,110,116,97,120,45,115,112,108, -105,99,105,110,103,42,70,108,101,116,45,115,116,114,117,99,116,43,62,100,111, -44,71,119,105,116,104,45,115,121,110,116,97,120,45,64,99,111,110,100,46,64, -119,104,101,110,47,66,117,110,108,101,115,115,48,66,108,101,116,47,101,99,49, -66,115,121,110,116,97,120,50,70,108,101,116,45,115,121,110,116,97,120,51,70, -113,117,97,115,105,113,117,111,116,101,52,71,115,121,110,116,97,120,45,99,97, -115,101,53,70,115,121,110,116,97,120,47,108,111,99,54,69,102,108,117,105,100, -45,108,101,116,55,2,3,1,28,109,122,115,99,104,101,109,101,45,105,110,45, -115,116,120,45,109,111,100,117,108,101,45,98,101,103,105,110,56,63,97,110,100, -57,62,111,114,58,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116, -97,120,59,71,115,101,116,33,45,118,97,108,117,101,115,60,76,98,101,103,105, -110,45,102,111,114,45,115,121,110,116,97,120,61,73,100,101,102,105,110,101,45, -115,116,114,117,99,116,62,68,117,110,115,121,110,116,97,120,63,71,113,117,97, -115,105,115,121,110,116,97,120,64,72,112,97,114,97,109,101,116,101,114,105,122, -101,65,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,66,73,108, -101,116,114,101,99,45,115,121,110,116,97,120,67,72,108,101,116,45,115,121,110, -116,97,120,101,115,68,72,115,121,110,116,97,120,45,114,117,108,101,115,69,75, -115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,70,79,109,101,109,111, -114,121,45,116,114,97,99,101,45,108,97,109,98,100,97,71,75,113,117,97,115, -105,115,121,110,116,97,120,47,108,111,99,72,73,119,105,116,104,45,104,97,110, -100,108,101,114,115,73,74,119,105,116,104,45,104,97,110,100,108,101,114,115,42, +34,73,100,101,102,105,110,101,45,115,121,110,116,97,120,35,78,112,97,114,97, +109,101,116,101,114,105,122,101,45,98,114,101,97,107,36,66,100,101,102,105,110, +101,37,64,116,105,109,101,38,77,117,110,115,121,110,116,97,120,45,115,112,108, +105,99,105,110,103,39,79,109,101,109,111,114,121,45,116,114,97,99,101,45,108, +97,109,98,100,97,40,70,108,101,116,45,115,116,114,117,99,116,41,71,119,105, +116,104,45,115,121,110,116,97,120,42,65,100,101,108,97,121,43,66,108,101,116, +47,99,99,44,70,115,121,110,116,97,120,47,108,111,99,45,64,99,111,110,100, +46,64,119,104,101,110,47,66,117,110,108,101,115,115,48,66,108,101,116,47,101, +99,49,66,115,121,110,116,97,120,50,70,108,101,116,45,115,121,110,116,97,120, +51,70,113,117,97,115,105,113,117,111,116,101,52,71,115,121,110,116,97,120,45, +99,97,115,101,53,2,3,1,28,109,122,115,99,104,101,109,101,45,105,110,45, +115,116,120,45,109,111,100,117,108,101,45,98,101,103,105,110,54,63,97,110,100, +55,62,111,114,56,71,115,101,116,33,45,118,97,108,117,101,115,57,69,102,108, +117,105,100,45,108,101,116,58,73,100,101,102,105,110,101,45,115,116,114,117,99, +116,59,68,117,110,115,121,110,116,97,120,60,71,113,117,97,115,105,115,121,110, +116,97,120,61,64,99,97,115,101,62,77,100,101,102,105,110,101,45,102,111,114, +45,115,121,110,116,97,120,63,76,98,101,103,105,110,45,102,111,114,45,115,121, +110,116,97,120,64,75,113,117,97,115,105,115,121,110,116,97,120,47,108,111,99, +65,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,66,73,108,101, +116,114,101,99,45,115,121,110,116,97,120,67,72,108,101,116,45,115,121,110,116, +97,120,101,115,68,72,115,121,110,116,97,120,45,114,117,108,101,115,69,75,115, +121,110,116,97,120,45,105,100,45,114,117,108,101,115,70,72,112,97,114,97,109, +101,116,101,114,105,122,101,71,73,119,105,116,104,45,104,97,110,100,108,101,114, +115,72,74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,73,62,100,111, 74,72,115,121,110,116,97,120,45,99,97,115,101,42,75,16,73,73,35,37,109, 111,114,101,45,115,99,104,101,109,101,76,2,76,66,35,37,109,105,115,99,77, 2,77,2,77,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101, 78,2,77,2,76,2,77,2,76,2,77,2,77,2,76,70,35,37,119,105,116, 104,45,115,116,120,79,2,77,65,35,37,115,116,120,80,2,77,2,77,2,77, 2,77,2,77,2,77,2,77,2,77,2,77,2,77,2,77,2,76,2,77,2, -77,2,77,68,35,37,100,101,102,105,110,101,81,2,76,2,76,2,81,2,76, -2,76,2,76,67,35,37,113,113,115,116,120,82,2,76,2,76,2,79,66,35, -37,99,111,110,100,83,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108, -84,2,84,2,84,69,35,37,115,116,120,99,97,115,101,85,2,78,71,35,37, -113,113,45,97,110,100,45,111,114,86,68,35,37,115,116,120,108,111,99,87,2, -87,2,76,68,35,37,107,101,114,110,101,108,88,72,35,37,115,116,120,109,122, -45,98,111,100,121,89,2,86,2,86,2,81,2,76,2,81,2,84,2,82,2, -82,2,76,2,78,2,78,2,78,2,78,2,78,2,77,2,82,2,76,2,76, -2,87,16,73,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2, +77,2,77,68,35,37,100,101,102,105,110,101,81,2,76,2,81,2,76,67,35, +37,113,113,115,116,120,82,2,77,2,76,2,79,2,76,2,76,68,35,37,115, +116,120,108,111,99,83,66,35,37,99,111,110,100,84,74,35,37,100,101,102,105, +110,101,45,101,116,45,97,108,85,2,85,2,85,69,35,37,115,116,120,99,97, +115,101,86,2,78,71,35,37,113,113,45,97,110,100,45,111,114,87,2,83,68, +35,37,107,101,114,110,101,108,88,72,35,37,115,116,120,109,122,45,98,111,100, +121,89,2,87,2,87,2,76,2,76,2,85,2,82,2,82,2,76,2,81,2, +81,2,82,2,78,2,78,2,78,2,78,2,78,2,76,2,76,2,76,2,76, +2,83,16,73,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2, 12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22, 2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2, 33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43, -2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,2, -54,2,55,1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98, -101,103,105,110,90,2,3,2,57,2,58,2,59,2,60,2,61,2,62,2,63, +2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,1, +20,35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98,101,103,105,110, +90,2,3,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63, 2,64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,2,72,2,73,2, 74,2,75,8,31,8,73,9,9,100,2,88,2,76,2,77,2,78,2,80,2, 89,2,82,2,81,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 1707); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,203,252,109,23,159,32,20,97,158,16,1,20,23, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,203,252,109,23,159,32,20,97,158,16,1,20,23, 65,98,101,103,105,110,0,16,0,83,158,39,20,94,114,66,35,37,114,53,114, 115,1,29,2,11,11,10,10,10,33,80,158,32,32,20,97,158,16,1,30,3, 2,2,69,117,110,100,101,102,105,110,101,100,4,254,1,16,0,11,11,16,1, 2,4,33,11,16,24,70,108,101,116,45,115,121,110,116,97,120,5,65,35,37, -116,111,112,6,63,97,110,100,7,62,111,114,8,63,108,101,116,9,64,99,111, -110,100,10,64,108,101,116,42,11,71,114,53,114,115,58,108,101,116,114,101,99, -12,66,108,97,109,98,100,97,13,65,113,117,111,116,101,14,73,108,101,116,114, -101,99,45,115,121,110,116,97,120,15,64,115,101,116,33,16,73,100,101,102,105, -110,101,45,115,121,110,116,97,120,17,2,0,64,99,97,115,101,18,67,117,110, -113,117,111,116,101,19,70,113,117,97,115,105,113,117,111,116,101,20,66,100,101, -102,105,110,101,21,62,100,111,22,76,117,110,113,117,111,116,101,45,115,112,108, -105,99,105,110,103,23,62,105,102,24,65,35,37,97,112,112,25,67,35,37,100, -97,116,117,109,26,65,100,101,108,97,121,27,16,24,76,35,37,115,116,120,99, +116,111,112,6,64,99,97,115,101,7,63,97,110,100,8,62,111,114,9,71,114, +53,114,115,58,108,101,116,114,101,99,10,66,100,101,102,105,110,101,11,63,108, +101,116,12,64,108,101,116,42,13,66,108,97,109,98,100,97,14,62,105,102,15, +65,113,117,111,116,101,16,65,100,101,108,97,121,17,64,115,101,116,33,18,73, +100,101,102,105,110,101,45,115,121,110,116,97,120,19,2,0,67,117,110,113,117, +111,116,101,20,70,113,117,97,115,105,113,117,111,116,101,21,73,108,101,116,114, +101,99,45,115,121,110,116,97,120,22,76,117,110,113,117,111,116,101,45,115,112, +108,105,99,105,110,103,23,62,100,111,24,65,35,37,97,112,112,25,64,99,111, +110,100,26,67,35,37,100,97,116,117,109,27,16,24,76,35,37,115,116,120,99, 97,115,101,45,115,99,104,101,109,101,28,68,35,37,107,101,114,110,101,108,29, -71,35,37,113,113,45,97,110,100,45,111,114,30,2,30,2,29,66,35,37,99, -111,110,100,31,2,29,11,2,29,2,29,2,28,2,29,68,35,37,100,101,102, -105,110,101,32,2,29,73,35,37,109,111,114,101,45,115,99,104,101,109,101,33, -2,29,2,30,2,32,2,33,2,29,2,29,2,29,2,29,2,33,16,24,2, -5,2,6,2,7,2,8,2,9,2,10,2,11,66,108,101,116,114,101,99,34, -2,13,2,14,2,15,2,16,2,17,2,0,2,18,2,19,2,20,2,21,2, -22,2,23,2,24,2,25,2,26,2,27,32,56,93,16,5,93,2,12,89,162, +73,35,37,109,111,114,101,45,115,99,104,101,109,101,30,71,35,37,113,113,45, +97,110,100,45,111,114,31,2,31,11,68,35,37,100,101,102,105,110,101,32,2, +29,2,29,2,29,2,29,2,29,2,30,2,29,2,32,2,29,2,29,2,31, +2,28,2,29,2,30,2,29,66,35,37,99,111,110,100,33,2,29,16,24,2, +5,2,6,2,7,2,8,2,9,66,108,101,116,114,101,99,34,2,11,2,12, +2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,0,2,20,2,21,2, +22,2,23,2,24,2,25,2,26,2,27,32,56,93,16,5,93,2,10,89,162, 32,33,56,9,223,0,27,28,248,80,158,34,32,195,249,80,158,35,33,248,80, 158,36,34,197,27,248,80,158,37,35,198,28,248,80,158,37,32,193,27,27,248, 80,158,39,34,195,28,248,80,158,39,36,193,248,22,8,89,162,32,33,39,9, @@ -4250,20 +4253,20 @@ 28,248,22,56,193,21,94,9,9,248,80,158,35,40,193,11,28,192,249,80,158, 39,41,194,27,248,80,158,41,35,197,28,248,80,158,41,36,193,248,80,158,41, 39,193,11,11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22, -86,196,27,248,22,87,197,249,80,158,39,42,200,27,250,22,60,198,200,199,27, +86,196,27,248,22,87,197,249,80,158,39,42,200,27,250,22,60,198,199,200,27, 83,160,41,32,41,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11, 247,248,22,8,89,162,32,33,40,9,226,11,2,3,1,250,22,31,89,162,32, 32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175, 2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3, 28,248,22,252,172,2,193,248,22,252,177,2,193,249,80,158,35,43,21,99,2, -12,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109, +10,6,19,19,103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109, 101,115,94,64,118,97,114,49,35,63,46,46,46,36,9,94,94,2,35,65,105, 110,105,116,49,37,2,36,64,98,111,100,121,38,2,36,83,160,41,33,35,44, 89,162,32,32,52,9,225,6,5,4,27,250,22,208,83,160,41,34,38,44,250, 22,208,83,160,41,35,41,44,253,22,61,83,160,41,36,47,44,83,160,41,37, -47,44,248,22,77,206,83,160,41,38,47,44,250,22,2,89,162,33,33,41,9, +47,44,248,22,79,206,83,160,41,38,47,44,250,22,2,89,162,33,33,41,9, 223,18,250,22,208,83,160,41,39,35,44,249,22,59,248,22,51,199,248,22,77, -199,83,160,41,40,35,44,248,22,77,23,17,248,22,79,23,17,248,22,51,206, +199,83,160,41,40,35,44,248,22,79,23,17,248,22,77,23,17,248,22,51,206, 83,160,41,41,41,44,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, 9,223,3,248,22,252,175,2,208,27,28,248,80,158,35,32,196,249,80,158,36, 33,248,80,158,37,34,198,27,248,80,158,38,35,199,28,248,80,158,38,32,193, @@ -4287,9 +4290,9 @@ 8,89,162,32,33,40,9,226,13,2,3,1,250,22,31,89,162,32,32,36,9, 225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162, 32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22, -252,172,2,193,248,22,252,177,2,193,249,80,158,35,43,21,95,2,9,94,94, -2,35,2,4,2,36,97,2,9,94,94,65,116,101,109,112,49,39,2,37,2, -36,95,2,16,2,35,2,39,2,36,96,2,9,9,2,38,2,36,83,160,41, +252,172,2,193,248,22,252,177,2,193,249,80,158,35,43,21,95,2,12,94,94, +2,35,2,4,2,36,97,2,12,94,94,65,116,101,109,112,49,39,2,37,2, +36,95,2,18,2,35,2,39,2,36,96,2,12,9,2,38,2,36,83,160,41, 43,35,44,89,162,32,32,8,29,9,225,6,5,4,27,250,22,208,83,160,41, 44,38,44,250,22,208,83,160,41,45,41,44,250,22,59,83,160,41,46,44,44, 249,22,2,89,162,33,33,41,9,223,14,250,22,208,83,160,41,47,35,44,249, @@ -4323,22 +4326,22 @@ 197,28,248,80,158,52,36,193,248,80,158,52,39,193,11,11,11,11,11,11,11, 11,11,11,28,192,27,248,22,51,194,27,248,22,77,195,27,248,22,86,196,27, 248,22,89,197,27,249,22,69,199,36,27,249,22,69,200,37,27,249,22,68,201, -38,249,80,158,44,42,205,27,252,22,60,204,202,200,201,203,27,83,160,41,8, +38,249,80,158,44,42,205,27,252,22,60,204,203,202,200,201,27,83,160,41,8, 31,46,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22, 8,89,162,32,33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36,9, 225,6,3,7,90,161,33,33,10,247,22,252,175,2,248,22,252,175,2,89,162, 32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22, -252,172,2,193,248,22,252,177,2,193,249,80,158,35,43,21,99,2,12,6,19, +252,172,2,193,248,22,252,177,2,193,249,80,158,35,43,21,99,2,10,6,19, 19,103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,94, 61,121,40,2,36,95,67,110,101,119,116,101,109,112,41,64,116,101,109,112,42, 2,36,94,94,2,35,2,37,2,36,2,38,2,36,83,160,41,8,32,35,44, 89,162,32,32,54,9,225,6,5,4,27,250,22,208,83,160,41,8,33,38,44, 250,22,208,83,160,41,8,34,41,44,253,22,61,83,160,41,8,35,47,44,83, 160,41,8,36,47,44,248,22,51,206,250,22,208,83,160,41,8,37,50,44,249, -22,55,83,160,41,8,38,52,44,248,22,88,23,19,83,160,41,8,39,50,44, +22,55,83,160,41,8,38,52,44,248,22,77,23,19,83,160,41,8,39,50,44, 250,22,2,89,162,33,33,41,9,223,18,250,22,208,83,160,41,8,40,35,44, -249,22,59,248,22,51,199,248,22,77,199,83,160,41,8,41,35,44,248,22,77, -23,17,248,22,89,23,17,248,22,86,206,83,160,41,8,42,41,44,197,89,162, +249,22,59,248,22,51,199,248,22,77,199,83,160,41,8,41,35,44,248,22,86, +23,17,248,22,88,23,17,248,22,89,206,83,160,41,8,42,41,44,197,89,162, 32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,175,2,208, 250,22,252,32,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,199,32, 20,97,158,16,12,30,43,65,35,37,115,116,120,44,69,115,116,120,45,112,97, @@ -4359,88 +4362,88 @@ 49,75,16,4,36,11,63,101,115,99,76,3,1,7,101,110,118,52,52,50,50, 77,16,4,35,11,63,101,120,110,78,3,1,7,101,110,118,52,52,50,52,79, 95,9,8,252,76,11,2,68,18,99,64,100,101,115,116,80,45,97,44,10,32, -11,16,150,1,29,102,105,110,100,45,108,105,98,114,97,114,121,45,99,111,108, -108,101,99,116,105,111,110,45,112,97,116,104,115,81,66,35,37,109,105,115,99, -82,1,20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105, -101,115,83,70,35,37,119,105,116,104,45,115,116,120,84,1,20,102,105,110,100, -45,101,120,101,99,117,116,97,98,108,101,45,112,97,116,104,85,2,82,65,112, -111,114,116,63,86,2,82,77,100,101,102,105,110,101,45,102,111,114,45,115,121, -110,116,97,120,87,2,32,67,108,111,97,100,47,99,100,88,2,82,74,35,37, -109,111,100,117,108,101,45,98,101,103,105,110,89,158,72,35,37,115,116,120,109, -122,45,98,111,100,121,90,1,28,109,122,115,99,104,101,109,101,45,105,110,45, -115,116,120,45,109,111,100,117,108,101,45,98,101,103,105,110,91,1,32,99,97, -108,108,45,119,105,116,104,45,98,114,101,97,107,45,112,97,114,97,109,101,116, -101,114,105,122,97,116,105,111,110,92,2,33,72,112,97,116,104,45,115,116,114, -105,110,103,63,93,2,82,75,108,101,116,114,101,99,45,115,121,110,116,97,120, -101,115,94,2,28,73,100,101,102,105,110,101,45,115,116,114,117,99,116,95,74, -35,37,100,101,102,105,110,101,45,101,116,45,97,108,96,71,114,97,116,105,111, -110,97,108,105,122,101,97,2,82,2,15,2,28,2,18,2,33,71,105,100,101, -110,116,105,102,105,101,114,63,98,2,44,73,108,111,97,100,45,114,101,108,97, -116,105,118,101,99,2,82,72,108,101,116,45,115,121,110,116,97,120,101,115,100, -2,28,2,4,2,2,76,98,101,103,105,110,45,102,111,114,45,115,121,110,116, -97,120,101,2,32,72,115,121,110,116,97,120,45,114,117,108,101,115,102,2,28, -1,27,112,97,116,104,45,108,105,115,116,45,115,116,114,105,110,103,45,62,112, -97,116,104,45,108,105,115,116,103,2,82,2,10,2,31,77,108,111,97,100,47, -117,115,101,45,99,111,109,112,105,108,101,100,104,2,82,75,115,121,110,116,97, -120,45,105,100,45,114,117,108,101,115,105,2,28,2,7,2,30,76,110,117,108, -108,45,101,110,118,105,114,111,110,109,101,110,116,106,2,82,2,8,2,30,2, -5,2,28,1,25,99,117,114,114,101,110,116,45,108,111,97,100,47,117,115,101, -45,99,111,109,112,105,108,101,100,107,2,82,77,117,110,115,121,110,116,97,120, -45,115,112,108,105,99,105,110,103,108,67,35,37,113,113,115,116,120,109,64,119, -104,101,110,110,2,96,2,27,2,33,66,117,110,108,101,115,115,111,2,96,75, -99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,112,2,82,78,112,97, -114,97,109,101,116,101,114,105,122,101,45,98,114,101,97,107,113,2,33,71,115, -101,116,33,45,118,97,108,117,101,115,114,2,33,66,108,101,116,47,101,99,115, -2,96,65,102,111,114,99,101,116,2,33,64,116,105,109,101,117,2,33,70,108, -101,116,45,115,116,114,117,99,116,118,2,33,2,17,2,32,1,20,35,37,112, -108,97,105,110,45,109,111,100,117,108,101,45,98,101,103,105,110,119,158,2,29, -2,89,69,102,108,117,105,100,45,108,101,116,120,2,33,66,115,121,110,116,97, -120,121,2,68,1,25,115,99,104,101,109,101,45,114,101,112,111,114,116,45,101, -110,118,105,114,111,110,109,101,110,116,122,2,82,75,113,117,97,115,105,115,121, -110,116,97,120,47,108,111,99,123,2,109,2,22,2,33,1,26,99,97,108,108, -45,119,105,116,104,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, -110,124,2,33,2,20,2,30,79,109,101,109,111,114,121,45,116,114,97,99,101, -45,108,97,109,98,100,97,125,2,82,68,117,110,115,121,110,116,97,120,126,2, -109,73,119,105,116,104,45,104,97,110,100,108,101,114,115,127,2,33,1,26,99, -104,101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105, -102,105,101,114,128,2,28,70,115,121,110,116,97,120,47,108,111,99,129,2,65, -71,113,117,97,115,105,115,121,110,116,97,120,130,2,109,74,119,105,116,104,45, -104,97,110,100,108,101,114,115,42,131,2,33,1,23,105,110,116,101,114,97,99, -116,105,111,110,45,101,110,118,105,114,111,110,109,101,110,116,132,2,82,66,108, -101,116,47,99,99,133,2,33,1,24,99,117,114,114,101,110,116,45,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,134,2,33,72,115,121,110,116, -97,120,45,99,97,115,101,42,135,2,65,2,21,2,32,72,112,97,114,97,109, -101,116,101,114,105,122,101,136,2,33,69,103,117,97,114,100,45,101,118,116,137, -2,82,76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,138,2, -82,71,99,104,97,110,110,101,108,45,103,101,116,139,2,82,71,115,121,110,116, -97,120,45,99,97,115,101,140,2,65,1,30,99,117,114,114,101,110,116,45,98, +11,16,150,2,17,2,30,1,29,102,105,110,100,45,108,105,98,114,97,114,121, +45,99,111,108,108,101,99,116,105,111,110,45,112,97,116,104,115,81,66,35,37, +109,105,115,99,82,1,20,102,105,110,100,45,101,120,101,99,117,116,97,98,108, +101,45,112,97,116,104,83,2,82,76,110,111,114,109,97,108,45,99,97,115,101, +45,112,97,116,104,84,2,82,65,102,111,114,99,101,85,2,30,75,99,111,108, +108,101,99,116,105,111,110,45,112,97,116,104,86,2,82,67,108,111,97,100,47, +99,100,87,2,82,2,10,2,2,74,35,37,109,111,100,117,108,101,45,98,101, +103,105,110,88,158,72,35,37,115,116,120,109,122,45,98,111,100,121,89,1,28, +109,122,115,99,104,101,109,101,45,105,110,45,115,116,120,45,109,111,100,117,108, +101,45,98,101,103,105,110,90,1,32,99,97,108,108,45,119,105,116,104,45,98, 114,101,97,107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110, -141,2,33,71,99,104,97,110,110,101,108,45,112,117,116,142,2,82,71,119,105, -116,104,45,115,121,110,116,97,120,143,2,84,1,20,114,101,97,100,45,101,118, -97,108,45,112,114,105,110,116,45,108,111,111,112,144,2,82,79,112,97,116,104, -45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,145,2,82,2,12,2, -2,1,23,108,111,97,100,45,114,101,108,97,116,105,118,101,45,101,120,116,101, -110,115,105,111,110,146,2,82,68,112,114,111,109,105,115,101,63,147,2,33,75, +91,2,30,72,112,97,116,104,45,115,116,114,105,110,103,63,92,2,82,75,108, +101,116,114,101,99,45,115,121,110,116,97,120,101,115,93,2,28,73,100,101,102, +105,110,101,45,115,116,114,117,99,116,94,74,35,37,100,101,102,105,110,101,45, +101,116,45,97,108,95,2,22,2,28,71,105,100,101,110,116,105,102,105,101,114, +63,96,2,44,2,4,2,2,79,109,101,109,111,114,121,45,116,114,97,99,101, +45,108,97,109,98,100,97,97,2,82,73,108,111,97,100,45,114,101,108,97,116, +105,118,101,98,2,82,72,108,101,116,45,115,121,110,116,97,120,101,115,99,2, +28,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120,100,2, +32,66,108,101,116,47,99,99,101,2,30,72,115,121,110,116,97,120,45,114,117, +108,101,115,102,2,28,1,27,112,97,116,104,45,108,105,115,116,45,115,116,114, +105,110,103,45,62,112,97,116,104,45,108,105,115,116,103,2,82,2,26,2,33, +76,98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120,104,2,32,75, +115,121,110,116,97,120,45,105,100,45,114,117,108,101,115,105,2,28,1,20,103, +101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,106,70, +35,37,119,105,116,104,45,115,116,120,107,1,26,99,104,101,99,107,45,100,117, +112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,108,2,28, +2,24,2,30,64,116,105,109,101,109,2,30,1,25,99,117,114,114,101,110,116, +45,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,101,100,110,2,82, +78,112,97,114,97,109,101,116,101,114,105,122,101,45,98,114,101,97,107,111,2, +30,77,117,110,115,121,110,116,97,120,45,115,112,108,105,99,105,110,103,112,67, +35,37,113,113,115,116,120,113,64,119,104,101,110,114,2,95,66,117,110,108,101, +115,115,115,2,95,71,99,104,97,110,110,101,108,45,112,117,116,116,2,82,71, +115,101,116,33,45,118,97,108,117,101,115,117,2,30,66,108,101,116,47,101,99, +118,2,95,2,11,2,32,77,108,111,97,100,47,117,115,101,45,99,111,109,112, +105,108,101,100,119,2,82,70,108,101,116,45,115,116,114,117,99,116,120,2,30, +2,19,2,32,72,112,97,114,97,109,101,116,101,114,105,122,101,121,2,30,1, +20,35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98,101,103,105,110, +122,158,2,29,2,88,69,102,108,117,105,100,45,108,101,116,123,2,30,2,8, +2,31,1,25,115,99,104,101,109,101,45,114,101,112,111,114,116,45,101,110,118, +105,114,111,110,109,101,110,116,124,2,82,71,115,121,110,116,97,120,45,99,97, +115,101,125,2,65,2,9,2,31,2,21,2,31,68,112,114,111,109,105,115,101, +63,126,2,30,68,117,110,115,121,110,116,97,120,127,2,113,74,119,105,116,104, +45,104,97,110,100,108,101,114,115,42,128,2,30,71,114,97,116,105,111,110,97, +108,105,122,101,129,2,82,70,115,121,110,116,97,120,47,108,111,99,130,2,65, +71,113,117,97,115,105,115,121,110,116,97,120,131,2,113,79,112,97,116,104,45, +114,101,112,108,97,99,101,45,115,117,102,102,105,120,132,2,82,1,23,105,110, +116,101,114,97,99,116,105,111,110,45,101,110,118,105,114,111,110,109,101,110,116, +133,2,82,1,24,99,117,114,114,101,110,116,45,112,97,114,97,109,101,116,101, +114,105,122,97,116,105,111,110,134,2,30,72,115,121,110,116,97,120,45,99,97, +115,101,42,135,2,65,2,5,2,28,75,113,117,97,115,105,115,121,110,116,97, +120,47,108,111,99,136,2,113,1,26,99,97,108,108,45,119,105,116,104,45,112, +97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,137,2,30,2,7,2, +30,1,30,99,117,114,114,101,110,116,45,98,114,101,97,107,45,112,97,114,97, +109,101,116,101,114,105,122,97,116,105,111,110,138,2,30,71,99,104,97,110,110, +101,108,45,103,101,116,139,2,82,69,103,117,97,114,100,45,101,118,116,140,2, +82,71,119,105,116,104,45,115,121,110,116,97,120,141,2,107,1,20,114,101,97, +100,45,101,118,97,108,45,112,114,105,110,116,45,108,111,111,112,142,2,82,73, +119,105,116,104,45,104,97,110,100,108,101,114,115,143,2,30,65,112,111,114,116, +63,144,2,82,76,110,117,108,108,45,101,110,118,105,114,111,110,109,101,110,116, +145,2,82,1,23,108,111,97,100,45,114,101,108,97,116,105,118,101,45,101,120, +116,101,110,115,105,111,110,146,2,82,66,115,121,110,116,97,120,147,2,68,75, 99,104,97,110,110,101,108,45,116,114,121,45,103,101,116,148,2,82,97,43,10, -33,11,16,146,2,81,2,82,2,83,2,84,2,85,2,82,2,86,2,82,2, -87,2,32,2,88,2,82,2,89,158,2,90,2,91,2,92,2,33,2,93,2, -82,2,94,2,28,2,95,2,96,2,97,2,82,2,15,2,28,2,18,2,33, -2,98,2,44,2,99,2,82,2,100,2,28,2,101,2,32,2,102,2,28,2, -103,2,82,2,10,2,31,2,104,2,82,2,105,2,28,2,7,2,30,2,106, -2,82,2,8,2,30,2,5,2,28,2,107,2,82,2,108,2,109,2,110,2, -96,2,27,2,33,2,111,2,96,2,112,2,82,2,113,2,33,2,114,2,33, -2,115,2,96,2,116,2,33,2,117,2,33,2,118,2,33,2,17,2,32,2, -119,158,2,29,2,89,2,120,2,33,2,121,2,68,2,122,2,82,2,123,2, -109,2,22,2,33,2,124,2,33,2,20,2,30,2,125,2,82,2,126,2,109, -2,127,2,33,2,128,2,28,2,129,2,65,2,130,2,109,2,131,2,33,2, -132,2,82,2,133,2,33,2,134,2,33,2,135,2,65,2,21,2,32,2,136, -2,33,2,137,2,82,2,138,2,82,2,139,2,82,2,140,2,65,2,141,2, -33,2,142,2,82,2,143,2,84,2,144,2,82,2,145,2,82,2,146,2,82, -2,147,2,33,2,148,2,82,96,42,8,254,1,11,16,0,16,8,41,11,3, +33,11,16,146,2,17,2,30,2,81,2,82,2,83,2,82,2,84,2,82,2, +85,2,30,2,86,2,82,2,87,2,82,2,88,158,2,89,2,90,2,91,2, +30,2,92,2,82,2,93,2,28,2,94,2,95,2,22,2,28,2,96,2,44, +2,97,2,82,2,98,2,82,2,99,2,28,2,100,2,32,2,101,2,30,2, +102,2,28,2,103,2,82,2,26,2,33,2,104,2,32,2,105,2,28,2,106, +2,107,2,108,2,28,2,24,2,30,2,109,2,30,2,110,2,82,2,111,2, +30,2,112,2,113,2,114,2,95,2,115,2,95,2,116,2,82,2,117,2,30, +2,118,2,95,2,11,2,32,2,119,2,82,2,120,2,30,2,19,2,32,2, +121,2,30,2,122,158,2,29,2,88,2,123,2,30,2,8,2,31,2,124,2, +82,2,125,2,65,2,9,2,31,2,21,2,31,2,126,2,30,2,127,2,113, +2,128,2,30,2,129,2,82,2,130,2,65,2,131,2,113,2,132,2,82,2, +133,2,82,2,134,2,30,2,135,2,65,2,5,2,28,2,136,2,113,2,137, +2,30,2,7,2,30,2,138,2,30,2,139,2,82,2,140,2,82,2,141,2, +107,2,142,2,82,2,143,2,30,2,144,2,82,2,145,2,82,2,146,2,82, +2,147,2,68,2,148,2,82,96,42,8,254,1,11,16,0,16,8,41,11,3, 1,4,103,53,53,53,149,3,1,4,103,53,53,54,150,3,1,4,103,53,53, 55,151,3,1,7,101,110,118,52,52,49,51,152,2,152,2,152,16,8,40,11, 2,35,2,37,2,38,3,1,7,101,110,118,52,52,49,52,153,2,153,2,153, -18,158,63,99,116,120,154,45,18,158,2,12,45,18,158,6,19,19,103,101,110, +18,158,63,99,116,120,154,45,18,158,2,10,45,18,158,6,19,19,103,101,110, 101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,45,18,158,9,45, 18,158,2,154,45,18,158,2,154,45,18,158,2,154,45,18,16,2,95,2,70, 46,93,8,252,80,11,95,9,8,252,80,11,2,68,18,16,2,99,2,36,51, @@ -4452,41 +4455,41 @@ 3,1,4,103,53,53,49,160,3,1,4,103,53,53,50,161,3,1,4,103,53, 53,51,162,3,1,7,101,110,118,52,52,52,56,163,2,163,2,163,2,163,16, 10,52,11,2,39,2,35,2,37,2,38,3,1,7,101,110,118,52,52,52,57, -164,2,164,2,164,2,164,18,158,2,154,54,18,158,2,9,54,18,158,2,154, +164,2,164,2,164,2,164,18,158,2,154,54,18,158,2,12,54,18,158,2,154, 54,18,16,2,106,93,16,2,158,2,4,54,9,8,33,97,8,32,10,32,11, -16,58,2,121,29,165,11,11,2,7,2,30,71,115,116,120,45,118,101,99,116, -111,114,63,166,2,44,2,8,2,30,2,49,2,44,74,115,116,120,45,118,101, -99,116,111,114,45,114,101,102,167,2,44,73,115,121,110,116,97,120,45,99,97, -115,101,42,42,168,2,165,2,51,2,44,2,61,2,44,2,55,2,44,2,47, -2,44,71,115,116,120,45,114,111,116,97,116,101,42,169,2,44,2,63,2,44, -74,115,112,108,105,116,45,115,116,120,45,108,105,115,116,170,2,44,67,45,100, -101,102,105,110,101,171,2,96,74,45,100,101,102,105,110,101,45,115,121,110,116, -97,120,172,2,96,2,10,2,31,2,98,2,44,2,69,2,165,2,45,2,44, -69,115,116,120,45,110,117,108,108,63,173,2,44,2,20,2,30,2,57,2,44, -2,111,2,96,2,110,2,96,2,95,2,96,2,53,2,44,2,115,2,96,2, -59,2,44,97,8,31,10,33,11,16,70,79,109,97,107,101,45,115,121,110,116, -97,120,45,109,97,112,112,105,110,103,174,64,35,37,115,99,175,2,7,2,30, -2,166,2,44,2,8,2,30,2,49,2,44,2,167,2,44,2,51,2,44,2, -61,2,44,2,55,2,44,2,47,2,44,72,110,111,45,101,108,108,105,112,115, -101,115,63,176,2,175,2,169,2,44,2,63,2,44,2,170,2,44,72,115,116, -120,45,109,101,109,113,45,112,111,115,177,2,175,2,171,2,96,2,172,2,96, -2,10,2,31,2,98,2,44,74,109,97,107,101,45,109,97,116,99,104,38,101, -110,118,178,2,175,2,45,2,44,2,173,2,44,2,20,2,30,1,20,115,121, -110,116,97,120,45,109,97,112,112,105,110,103,45,100,101,112,116,104,179,2,175, -2,57,2,44,72,109,97,107,101,45,112,101,120,112,97,110,100,180,2,175,2, -111,2,96,2,110,2,96,75,115,121,110,116,97,120,45,109,97,112,112,105,110, -103,63,181,2,175,1,21,115,121,110,116,97,120,45,109,97,112,112,105,110,103, -45,118,97,108,118,97,114,182,2,175,2,95,2,96,2,53,2,44,2,115,2, -96,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115,183,2,175,2,59, +16,58,2,147,29,165,11,11,71,115,116,120,45,118,101,99,116,111,114,63,166, +2,44,2,8,2,31,2,49,2,44,74,115,116,120,45,118,101,99,116,111,114, +45,114,101,102,167,2,44,73,115,121,110,116,97,120,45,99,97,115,101,42,42, +168,2,165,2,51,2,44,2,61,2,44,2,9,2,31,2,47,2,44,71,115, +116,120,45,114,111,116,97,116,101,42,169,2,44,2,63,2,44,74,115,112,108, +105,116,45,115,116,120,45,108,105,115,116,170,2,44,67,45,100,101,102,105,110, +101,171,2,95,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,172,2, +95,2,26,2,33,2,96,2,44,2,69,2,165,2,94,2,95,69,115,116,120, +45,110,117,108,108,63,173,2,44,2,21,2,31,2,57,2,44,2,114,2,95, +2,115,2,95,2,53,2,44,2,118,2,95,2,55,2,44,2,59,2,44,2, +45,2,44,97,8,31,10,33,11,16,70,2,166,2,44,2,8,2,31,2,49, +2,44,2,167,2,44,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115, +174,64,35,37,115,99,175,2,51,2,44,2,61,2,44,2,9,2,31,2,47, +2,44,74,109,97,107,101,45,109,97,116,99,104,38,101,110,118,176,2,175,72, +110,111,45,101,108,108,105,112,115,101,115,63,177,2,175,2,169,2,44,2,63, +2,44,2,170,2,44,72,115,116,120,45,109,101,109,113,45,112,111,115,178,2, +175,2,171,2,95,2,172,2,95,2,26,2,33,2,96,2,44,79,109,97,107, +101,45,115,121,110,116,97,120,45,109,97,112,112,105,110,103,179,2,175,2,94, +2,95,2,173,2,44,2,21,2,31,1,20,115,121,110,116,97,120,45,109,97, +112,112,105,110,103,45,100,101,112,116,104,180,2,175,2,57,2,44,72,109,97, +107,101,45,112,101,120,112,97,110,100,181,2,175,2,114,2,95,75,115,121,110, +116,97,120,45,109,97,112,112,105,110,103,63,182,2,175,1,21,115,121,110,116, +97,120,45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,183,2,175,2, +115,2,95,2,53,2,44,2,118,2,95,2,55,2,44,2,59,2,44,2,45, 2,44,96,8,30,8,254,1,11,16,0,16,4,8,29,11,61,120,184,3,1, 6,101,110,118,51,56,48,185,16,4,8,28,11,68,104,101,114,101,45,115,116, 120,186,3,1,6,101,110,118,51,56,50,187,16,4,59,11,2,186,2,187,13, 16,3,33,2,165,2,68,93,8,252,80,11,16,6,58,11,2,71,2,72,2, 155,2,155,16,4,57,11,2,74,2,156,16,4,56,11,2,76,2,157,16,4, 55,11,64,118,97,108,115,188,3,1,7,101,110,118,52,52,54,52,189,95,9, -8,252,80,11,2,68,18,158,2,154,54,18,158,2,154,54,18,158,2,9,54, -18,158,2,154,54,18,158,2,154,54,18,158,2,154,54,18,158,2,16,54,18, -158,2,154,54,18,158,2,154,54,18,158,2,9,54,18,158,9,54,18,158,2, +8,252,80,11,2,68,18,158,2,154,54,18,158,2,154,54,18,158,2,12,54, +18,158,2,154,54,18,158,2,154,54,18,158,2,154,54,18,158,2,18,54,18, +158,2,154,54,18,158,2,154,54,18,158,2,12,54,18,158,9,54,18,158,2, 154,54,18,158,2,154,54,18,158,2,154,54,18,16,2,95,2,70,8,34,93, 8,252,85,11,95,9,8,252,85,11,2,68,18,16,2,99,2,36,8,39,93, 8,252,85,11,16,6,8,38,11,2,71,2,72,3,1,7,101,110,118,52,53, @@ -4499,7 +4502,7 @@ 52,56,199,3,1,7,101,110,118,52,52,57,49,200,2,200,2,200,2,200,2, 200,2,200,16,14,8,40,11,2,184,2,40,2,42,2,35,2,37,2,38,3, 1,7,101,110,118,52,52,57,50,201,2,201,2,201,2,201,2,201,2,201,18, -158,2,154,8,42,18,158,2,12,8,42,18,158,6,19,19,103,101,110,101,114, +158,2,154,8,42,18,158,2,10,8,42,18,158,6,19,19,103,101,110,101,114, 97,116,101,95,116,101,109,112,95,110,97,109,101,115,8,42,18,158,2,154,8, 42,18,158,2,41,8,42,18,158,2,154,8,42,18,158,2,154,8,42,18,158, 2,154,8,42,18,158,2,154,8,42,11,93,83,159,32,93,80,158,32,32,91, @@ -4508,7 +4511,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 6009); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,5,93,159,32,20,97,158,16,1,20,23,65,98, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,5,93,159,32,20,97,158,16,1,20,23,65,98, 101,103,105,110,0,16,0,83,160,40,80,158,32,32,32,18,158,94,96,67,114, 101,113,117,105,114,101,1,34,10,11,158,95,158,64,111,110,108,121,2,34,158, 68,109,122,115,99,104,101,109,101,3,34,158,1,22,110,97,109,101,115,112,97, @@ -4516,14 +4519,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 103); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,3,73,159,33,20,97,158,16,1,20,23,65,98, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,3,73,159,33,20,97,158,16,1,20,23,65,98, 101,103,105,110,0,16,0,87,94,248,22,240,68,109,122,115,99,104,101,109,101, 1,83,160,40,80,158,32,32,33,18,158,94,96,78,114,101,113,117,105,114,101, 45,102,111,114,45,115,121,110,116,97,120,2,34,10,11,158,2,1,34,34,0}; EVAL_ONE_SIZED_STR((char *)expr, 83); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,52,2,66,159,36,20,97,158,16,0,16,0,248,22, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,48,49,46,53,2,66,159,36,20,97,158,16,0,16,0,248,22, 232,248,249,22,234,66,35,37,109,105,115,99,0,1,34,109,97,107,101,45,115, 116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114, 101,115,111,108,118,101,114,1,247,22,252,202,2,0}; diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index d5407c7034..ff1db230b1 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -1699,7 +1699,7 @@ static Scheme_Object *jit_letrec(Scheme_Object *o) lr2->procs = procs2; for (i = 0; i < count; i++) { - v = scheme_jit_expr(procs[i]); + v = scheme_jit_closure(procs[i], lr2); procs2[i] = v; } @@ -1763,7 +1763,7 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr) case scheme_with_cont_mark_type: return jit_wcm(expr); case scheme_unclosed_procedure_type: - return scheme_jit_closure(expr); + return scheme_jit_closure(expr, NULL); case scheme_let_value_type: return jit_let_value(expr); case scheme_let_void_type: @@ -1777,7 +1777,7 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr) Scheme_Closure *c = (Scheme_Closure *)expr; if (ZERO_SIZED_CLOSUREP(c)) { /* JIT the closure body, producing a native closure: */ - return scheme_jit_closure((Scheme_Object *)c->code); + return scheme_jit_closure((Scheme_Object *)c->code, NULL); } else return expr; } diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index a4b872bcbf..d78c9d7c66 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -80,7 +80,7 @@ int scheme_cont_capture_count; static Scheme_Object *certify_mode_symbol, *transparent_symbol, *transparent_binding_symbol, *opaque_symbol; -static Scheme_Object *null_val_key; +static Scheme_Object *null_val_key, *cont_key; /* locals */ static Scheme_Object *procedure_p (int argc, Scheme_Object *argv[]); @@ -90,6 +90,7 @@ static Scheme_Object *for_each (int argc, Scheme_Object *argv[]); static Scheme_Object *andmap (int argc, Scheme_Object *argv[]); static Scheme_Object *ormap (int argc, Scheme_Object *argv[]); static Scheme_Object *call_cc (int argc, Scheme_Object *argv[]); +static Scheme_Object *internal_call_cc (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_continuation_barrier (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_sema (int argc, Scheme_Object *argv[]); static Scheme_Object *call_with_sema_enable_break (int argc, Scheme_Object *argv[]); @@ -151,6 +152,8 @@ typedef void (*DW_PrePost_Proc)(void *); static void register_traversers(void); #endif +static Scheme_Object *internal_call_cc_prim; + /* See call_cc: */ typedef struct Scheme_Dynamic_Wind_List { MZTAG_IF_REQUIRED @@ -240,6 +243,12 @@ scheme_init_fun (Scheme_Env *env) scheme_add_global_constant("call-with-escape-continuation", o, env); scheme_add_global_constant("call/ec", o, env); + REGISTER_SO(internal_call_cc_prim); + internal_call_cc_prim = scheme_make_prim_w_arity2(internal_call_cc, + "call-with-current-continuation", + 1, 1, + 0, -1); + o = scheme_make_prim_w_arity2(call_cc, "call-with-current-continuation", 1, 1, @@ -411,8 +420,10 @@ scheme_init_fun (Scheme_Env *env) REGISTER_SO(is_method_symbol); REGISTER_SO(scheme_inferred_name_symbol); + REGISTER_SO(cont_key); is_method_symbol = scheme_intern_symbol("method-arity-error"); scheme_inferred_name_symbol = scheme_intern_symbol("inferred-name"); + cont_key = scheme_make_symbol("k"); /* uninterned */ } Scheme_Object * @@ -649,17 +660,21 @@ scheme_make_closure(Scheme_Thread *p, Scheme_Object *code, int close) return (Scheme_Object *)closure; } -Scheme_Object *scheme_jit_closure(Scheme_Object *code) +Scheme_Object *scheme_jit_closure(Scheme_Object *code, Scheme_Letrec *lr) + /* If lr is supplied as a letrec binding this closure, it may be used + for JIT compilation. */ { +#ifdef MZ_USE_JIT Scheme_Closure_Data *data = (Scheme_Closure_Data *)code; -#ifdef MZ_USE_JIT if (!data->native_code) { Scheme_Native_Closure_Data *ndata; data = MALLOC_ONE_TAGGED(Scheme_Closure_Data); memcpy(data, code, sizeof(Scheme_Closure_Data)); + data->context = (Scheme_Object *)lr; + ndata = scheme_generate_lambda(data, 1, NULL); data->native_code = ndata; @@ -1314,6 +1329,30 @@ scheme_force_one_value(Scheme_Object *obj) return force_values(obj, 0); } +Scheme_Object * +scheme_force_value_same_mark(Scheme_Object *obj) +{ + Scheme_Object *v; + + MZ_CONT_MARK_POS -= 2; + v = force_values(obj, 1); + MZ_CONT_MARK_POS += 2; + + return v; +} + +Scheme_Object * +scheme_force_one_value_same_mark(Scheme_Object *obj) +{ + Scheme_Object *v; + + MZ_CONT_MARK_POS -= 2; + v = force_values(obj, 0); + MZ_CONT_MARK_POS += 2; + + return v; +} + static void *apply_k(void) { Scheme_Thread *p = scheme_current_thread; @@ -2711,62 +2750,89 @@ call_with_sema_enable_break(int argc, Scheme_Object *argv[]) static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p, Scheme_Object **runstack, - Scheme_Object **runstack_start) + Scheme_Object **runstack_start, + Scheme_Cont *share_from) { - Scheme_Saved_Stack *saved, *isaved, *csaved; + Scheme_Saved_Stack *saved, *isaved, *csaved, *share_saved, *ss; + Scheme_Object **start; long size; - /* Copy out stack: */ + /* Copy out current runstack: */ saved = MALLOC_ONE_RT(Scheme_Saved_Stack); #ifdef MZTAG_REQUIRED saved->type = scheme_rt_saved_stack; #endif - size = p->runstack_size - (runstack XFORM_OK_MINUS runstack_start); - saved->runstack_size = size; - { - Scheme_Object **start; - start = MALLOC_N(Scheme_Object*, size); - saved->runstack_start = start; + if (share_from && (share_from->ss.runstack_start == runstack_start)) { + /* Copy just the difference between share_from's runstack and current runstack */ + size = (share_from->ss.runstack XFORM_OK_MINUS runstack); + } else { + size = p->runstack_size - (runstack XFORM_OK_MINUS runstack_start); } + + saved->runstack_size = size; + start = MALLOC_N(Scheme_Object*, size); + saved->runstack_start = start; memcpy(saved->runstack_start, runstack, size * sizeof(Scheme_Object *)); + + /* Copy saved runstacks: */ isaved = saved; + share_saved = NULL; + if (share_from) { + /* We can share all saved runstacks */ + share_saved = share_from->ss.runstack_saved; + } for (csaved = p->runstack_saved; csaved; csaved = csaved->prev) { - { - Scheme_Saved_Stack *ss; - ss = MALLOC_ONE_RT(Scheme_Saved_Stack); -#ifdef MZTAG_REQUIRED - ss->type = scheme_rt_saved_stack; -#endif - isaved->prev = ss; + if (share_saved && (csaved->runstack_start == share_saved->runstack_start)) { + /* Share */ + isaved->prev = share_saved; + break; } - isaved = isaved->prev; + + ss = MALLOC_ONE_RT(Scheme_Saved_Stack); +#ifdef MZTAG_REQUIRED + ss->type = scheme_rt_saved_stack; +#endif + isaved->prev = ss; + isaved = ss; + size = csaved->runstack_size - (csaved->runstack XFORM_OK_MINUS csaved->runstack_start); isaved->runstack_size = size; - { - Scheme_Object **start; - start = MALLOC_N(Scheme_Object*, size); - isaved->runstack_start = start; - } + + start = MALLOC_N(Scheme_Object*, size); + isaved->runstack_start = start; memcpy(isaved->runstack_start, csaved->runstack, size * sizeof(Scheme_Object *)); } - isaved->prev = NULL; return saved; } static Scheme_Cont_Mark *copy_out_mark_stack(Scheme_Thread *p, - MZ_MARK_POS_TYPE pos) + MZ_MARK_STACK_TYPE pos, + Scheme_Cont *sub_cont, + long *_offset) { - long cmcount; + long cmcount, offset = 0; Scheme_Cont_Mark *cont_mark_stack_copied; /* Copy cont mark stack: */ cmcount = (long)pos; + offset = 0; + + if (sub_cont) { + /* Rely on copy of marks in a tail of this continuation. */ + long sub_count = sub_cont->cont_mark_shareable; + cmcount -= sub_count; + offset += sub_count; + } + + if (_offset) *_offset = offset; + if (cmcount) { cont_mark_stack_copied = MALLOC_N(Scheme_Cont_Mark, cmcount); while (cmcount--) { - Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[cmcount >> SCHEME_LOG_MARK_SEGMENT_SIZE]; - long pos = cmcount & SCHEME_MARK_SEGMENT_MASK; + int cms = cmcount + offset; + Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[cms >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + long pos = cms & SCHEME_MARK_SEGMENT_MASK; Scheme_Cont_Mark *cm = seg + pos; memcpy(cont_mark_stack_copied + cmcount, cm, sizeof(Scheme_Cont_Mark)); @@ -2777,13 +2843,15 @@ static Scheme_Cont_Mark *copy_out_mark_stack(Scheme_Thread *p, return NULL; } -static void copy_in_runstack(Scheme_Thread *p, Scheme_Saved_Stack *isaved) +static void copy_in_runstack(Scheme_Thread *p, Scheme_Saved_Stack *isaved, int set_runstack) { Scheme_Saved_Stack *csaved; long size; size = isaved->runstack_size; - MZ_RUNSTACK = MZ_RUNSTACK_START + (p->runstack_size - size); + if (set_runstack) { + MZ_RUNSTACK = MZ_RUNSTACK_START + (p->runstack_size - size); + } memcpy(MZ_RUNSTACK, isaved->runstack_start, size * sizeof(Scheme_Object *)); for (csaved = p->runstack_saved; csaved; csaved = csaved->prev) { isaved = isaved->prev; @@ -2794,13 +2862,16 @@ static void copy_in_runstack(Scheme_Thread *p, Scheme_Saved_Stack *isaved) } static void copy_in_mark_stack(Scheme_Thread *p, Scheme_Cont_Mark *cont_mark_stack_copied, - MZ_MARK_STACK_TYPE cms, MZ_MARK_STACK_TYPE base_cms) + MZ_MARK_STACK_TYPE cms, MZ_MARK_STACK_TYPE base_cms, + long copied_offset, Scheme_Object **_sub_conts) /* Copies in the mark stack up to depth cms, but assumes that the stack up to depth base_cms is already in place (probably in place for a dynamic-wind context in an continuation restoration.) */ { - long cmcount, base_cmcount; + long cmcount, base_cmcount, cmoffset; + Scheme_Cont_Mark *cm_src; + Scheme_Cont *sub_cont = NULL; cmcount = (long)cms; base_cmcount = (long)base_cms; @@ -2834,27 +2905,130 @@ static void copy_in_mark_stack(Scheme_Thread *p, Scheme_Cont_Mark *cont_mark_sta p->cont_mark_stack_segments = segs; } } - while (cmcount-- > base_cmcount) { - Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[cmcount >> SCHEME_LOG_MARK_SEGMENT_SIZE]; - long pos = cmcount & SCHEME_MARK_SEGMENT_MASK; + + if (_sub_conts) { + if (*_sub_conts) { + sub_cont = (Scheme_Cont *)SCHEME_CAR(*_sub_conts); + } + } + + while (base_cmcount < cmcount) { + Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[base_cmcount >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + long pos = base_cmcount & SCHEME_MARK_SEGMENT_MASK; Scheme_Cont_Mark *cm = seg + pos; - memcpy(cm, cont_mark_stack_copied + cmcount, sizeof(Scheme_Cont_Mark)); + cm_src = cont_mark_stack_copied; + cmoffset = base_cmcount - copied_offset; + + if (sub_cont) { + while (base_cmcount >= sub_cont->cont_mark_shareable) { + *_sub_conts = SCHEME_CDR(*_sub_conts); + if (*_sub_conts) { + sub_cont = (Scheme_Cont *)SCHEME_CAR(*_sub_conts); + } else { + sub_cont = NULL; + break; + } + } + if (sub_cont) { + cm_src = sub_cont->cont_mark_stack_copied; + cmoffset = base_cmcount - sub_cont->cont_mark_offset; + } + } + + memcpy(cm, cm_src + cmoffset, sizeof(Scheme_Cont_Mark)); + + base_cmcount++; } } +static MZ_MARK_STACK_TYPE find_sharable_marks() +{ + Scheme_Thread *p = scheme_current_thread; + long cmcount, delta = 0; + + cmcount = (long)MZ_CONT_MARK_STACK; + + while (cmcount--) { + Scheme_Cont_Mark *seg = p->cont_mark_stack_segments[cmcount >> SCHEME_LOG_MARK_SEGMENT_SIZE]; + long pos = cmcount & SCHEME_MARK_SEGMENT_MASK; + + if (seg[pos].pos < MZ_CONT_MARK_POS) + break; + if (SAME_OBJ(seg[pos].key, cont_key)) + delta = 1; + else + delta = 0; + } + + return cmcount + 1 + delta; +} + +static Scheme_Cont_Mark **copy_out_segment_array(Scheme_Cont *sub_cont) +{ + long cnt; + Scheme_Cont_Mark **orig; + + if (!MZ_CONT_MARK_STACK) + cnt = 0; + else + cnt = (((long)MZ_CONT_MARK_STACK - 1) >> SCHEME_LOG_MARK_SEGMENT_SIZE) + 1; + + if (sub_cont) { + /* Already saved this set? */ + int scnt; + if (!sub_cont->ss.cont_mark_stack) + scnt = 0; + else + scnt = (((long)(sub_cont->ss.cont_mark_stack) - 1) >> SCHEME_LOG_MARK_SEGMENT_SIZE) + 1; + if (scnt == cnt) { + return sub_cont->orig_mark_segments; + } + } + + orig = (Scheme_Cont_Mark **)scheme_malloc(cnt * sizeof(Scheme_Cont_Mark*)); + memcpy(orig, scheme_current_thread->cont_mark_stack_segments, cnt * sizeof(Scheme_Cont_Mark*)); + return orig; +} + static Scheme_Object * call_cc (int argc, Scheme_Object *argv[]) +{ + scheme_check_proc_arity("call-with-current-continuation", 1, + 0, argc, argv); + + /* Trampoline to internal_call_cc. This trampoline ensures that + the runstack is flushed before we try to grab the continuation. */ + return _scheme_tail_apply(internal_call_cc_prim, argc, argv); +} + +static Scheme_Object * +internal_call_cc (int argc, Scheme_Object *argv[]) { Scheme_Object *ret; Scheme_Cont * volatile cont; + Scheme_Cont *sub_cont; Scheme_Dynamic_Wind *dw; Scheme_Thread *p = scheme_current_thread; Scheme_Saved_Stack *saved; Scheme_Cont_Mark *msaved; - scheme_check_proc_arity("call-with-current-continuation", 1, - 0, argc, argv); + sub_cont = (Scheme_Cont *)scheme_extract_one_cc_mark(NULL, cont_key); + if (sub_cont && (sub_cont->save_overflow != p->overflow)) + sub_cont = NULL; + if (sub_cont && (sub_cont->ss.cont_mark_pos == MZ_CONT_MARK_POS)) { + /* Old cont is the same as this one, except that it may + have different marks --- not counting cont_key! */ + if ((sub_cont->cont_mark_shareable == (long)sub_cont->ss.cont_mark_stack) + && (find_sharable_marks() == MZ_CONT_MARK_STACK)) { + /* Just use this one. */ + Scheme_Object *argv2[1]; + argv2[0] = (Scheme_Object *)sub_cont; + return _scheme_tail_apply(argv[0], 1, argv2); + } else { + sub_cont = sub_cont->buf.cont; + } + } cont = MALLOC_ONE_TAGGED(Scheme_Cont); cont->so.type = scheme_cont_type; @@ -2896,25 +3070,21 @@ call_cc (int argc, Scheme_Object *argv[]) } } - /* Hide call/cc's arg off of stack */ - p->ku.k.p1 = argv[0]; - argv[0] = NULL; - - saved = copy_out_runstack(p, MZ_RUNSTACK, MZ_RUNSTACK_START); + saved = copy_out_runstack(p, MZ_RUNSTACK, MZ_RUNSTACK_START, sub_cont); cont->runstack_copied = saved; - msaved = copy_out_mark_stack(p, MZ_CONT_MARK_STACK); - cont->cont_mark_stack_copied = msaved; + { + long offset; + msaved = copy_out_mark_stack(p, cont->ss.cont_mark_stack, sub_cont, &offset); + cont->cont_mark_stack_copied = msaved; + cont->cont_mark_offset = offset; + offset = find_sharable_marks(); + cont->cont_mark_shareable = offset; + } /* Remember the original mark-stack segments. */ { - long cnt; Scheme_Cont_Mark **orig; - if (!MZ_CONT_MARK_STACK) - cnt = 0; - else - cnt = (((long)MZ_CONT_MARK_STACK - 1) >> SCHEME_LOG_MARK_SEGMENT_SIZE) + 1; - orig = (Scheme_Cont_Mark **)scheme_malloc(cnt * sizeof(Scheme_Cont_Mark*)); - memcpy(orig, p->cont_mark_stack_segments, cnt * sizeof(Scheme_Cont_Mark*)); + orig = copy_out_segment_array(sub_cont); cont->orig_mark_segments = orig; } @@ -2930,10 +3100,12 @@ call_cc (int argc, Scheme_Object *argv[]) scheme_flatten_config(scheme_current_config()); - if (scheme_setjmpup(&cont->buf, cont, p->next ? p->stack_start : p->o_start)) { + scheme_set_cont_mark(cont_key, (Scheme_Object *)cont); + + if (scheme_setjmpup_relative(&cont->buf, cont, p->next ? p->stack_start : p->o_start, sub_cont)) { /* We arrive here when the continuation is applied */ MZ_MARK_STACK_TYPE copied_cms = 0; - Scheme_Object *result, **mv; + Scheme_Object *result, **mv, *sub_conts = NULL; int mc; result = cont->value; @@ -2975,16 +3147,34 @@ call_cc (int argc, Scheme_Object *argv[]) Scheme_Thread *op; op = *p->runstack_owner; if (op) { - saved = copy_out_runstack(op, op->runstack, op->runstack_start); + saved = copy_out_runstack(op, op->runstack, op->runstack_start, NULL); op->runstack_swapped = saved; } *p->runstack_owner = p; } - /* Copy stack back in: (p->runstack and p->runstack_saved arrays + /* Copy stack back in: p->runstack and p->runstack_saved arrays are already restored, so the shape is certainly the same as - when cont->runstack_copied was made) */ - copy_in_runstack(p, cont->runstack_copied); + when cont->runstack_copied was made. If we have a derived + continuation, then we're sharing it's base runstack. */ + copy_in_runstack(p, cont->runstack_copied, 0); + { + long done = cont->runstack_copied->runstack_size, size; + sub_cont = cont; + while (sub_cont) { + if (sub_cont->buf.cont + && (sub_cont->ss.runstack_start == sub_cont->buf.cont->ss.runstack_start)) { + /* Copy shared part in: */ + sub_cont = sub_cont->buf.cont; + size = sub_cont->runstack_copied->runstack_size; + memcpy(MZ_RUNSTACK XFORM_OK_PLUS done, + sub_cont->runstack_copied->runstack_start, + size * sizeof(Scheme_Object *)); + done += size; + } else + break; + } + } if (p->cont_mark_stack_owner && (*p->cont_mark_stack_owner == p)) @@ -2996,13 +3186,19 @@ call_cc (int argc, Scheme_Object *argv[]) Scheme_Thread *op; op = *p->cont_mark_stack_owner; if (op) { - msaved = copy_out_mark_stack(op, op->cont_mark_stack); + msaved = copy_out_mark_stack(op, op->cont_mark_stack, NULL, NULL); op->cont_mark_stack_swapped = msaved; } *p->cont_mark_stack_owner = p; /* In case there's a GC before we copy in marks: */ MZ_CONT_MARK_STACK = 0; } + + /* For copying cont marks back in, we need a list of sub_conts, + deepest to shallowest: */ + for (sub_cont = cont->buf.cont; sub_cont; sub_cont = sub_cont->buf.cont) { + sub_conts = scheme_make_pair((Scheme_Object *)sub_cont, sub_conts); + } /* For dynamic-winds after the "common" intersection (see eval.c), execute the pre thunks. Make a list @@ -3032,7 +3228,9 @@ call_cc (int argc, Scheme_Object *argv[]) MZ_CONT_MARK_POS = dwl->dw->envss.cont_mark_pos; MZ_CONT_MARK_STACK = dwl->dw->envss.cont_mark_stack; copy_in_mark_stack(p, cont->cont_mark_stack_copied, - MZ_CONT_MARK_STACK, copied_cms); + MZ_CONT_MARK_STACK, copied_cms, + cont->cont_mark_offset, &sub_conts); + copied_cms = MZ_CONT_MARK_STACK; p->dw = dwl->dw->prev; pre(dwl->dw->data); @@ -3049,8 +3247,8 @@ call_cc (int argc, Scheme_Object *argv[]) MZ_CONT_MARK_POS = cont->ss.cont_mark_pos; MZ_CONT_MARK_STACK = cont->ss.cont_mark_stack; copy_in_mark_stack(p, cont->cont_mark_stack_copied, - MZ_CONT_MARK_STACK, copied_cms); - + MZ_CONT_MARK_STACK, copied_cms, + cont->cont_mark_offset, &sub_conts); /* If any mark-stack segment is different now than before, then set the cache field of the *original* mark segment. Setting the @@ -3092,11 +3290,6 @@ call_cc (int argc, Scheme_Object *argv[]) } else { Scheme_Object *argv2[1]; - /* Restore call/cc's arg to stack. */ - /* (We aren't actually allowed to modify argv! :) */ - argv[0] = p->ku.k.p1; - p->ku.k.p1 = NULL; - argv2[0] = (Scheme_Object *)cont; ret = _scheme_tail_apply(argv[0], 1, argv2); return ret; @@ -3115,11 +3308,11 @@ void scheme_takeover_stacks(Scheme_Thread *p) Scheme_Saved_Stack *swapped; op = *p->runstack_owner; if (op) { - swapped = copy_out_runstack(op, op->runstack, op->runstack_start); + swapped = copy_out_runstack(op, op->runstack, op->runstack_start, NULL); op->runstack_swapped = swapped; } *(p->runstack_owner) = p; - copy_in_runstack(p, p->runstack_swapped); + copy_in_runstack(p, p->runstack_swapped, 1); p->runstack_swapped = NULL; } @@ -3128,11 +3321,11 @@ void scheme_takeover_stacks(Scheme_Thread *p) Scheme_Cont_Mark *swapped; op = *p->cont_mark_stack_owner; if (op) { - swapped = copy_out_mark_stack(op, op->cont_mark_stack); + swapped = copy_out_mark_stack(op, op->cont_mark_stack, NULL, NULL); op->cont_mark_stack_swapped = swapped; } *(p->cont_mark_stack_owner) = p; - copy_in_mark_stack(p, p->cont_mark_stack_swapped, MZ_CONT_MARK_STACK, 0); + copy_in_mark_stack(p, p->cont_mark_stack_swapped, MZ_CONT_MARK_STACK, 0, 0, NULL); p->cont_mark_stack_swapped = NULL; } } diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index f54d14e683..989068d405 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -38,20 +38,26 @@ Fix me! See use. #endif #define MAX_SHARED_CALL_RANDS 25 -static void *shared_tail_code[2][MAX_SHARED_CALL_RANDS]; -static void *shared_non_tail_code[2][MAX_SHARED_CALL_RANDS][2]; +static void *shared_tail_code[3][MAX_SHARED_CALL_RANDS]; +static void *shared_non_tail_code[3][MAX_SHARED_CALL_RANDS][2]; #define MAX_SHARED_ARITY_CHECK 25 static void *shared_arity_check[MAX_SHARED_ARITY_CHECK][2][2]; static void *jump_to_native_code; +static void *jump_to_native_arity_code; static void *bad_result_arity_code; static void *unbound_global_code; static void *quote_syntax_code; -static void *call_original_code; -static void *call_original_reversed_code; -static void *call_original_single_code; +static void *call_original_unary_arith_code; +static void *call_original_binary_arith_code; +static void *call_original_binary_rev_arith_code; +static void *call_original_unary_arith_for_branch_code; +static void *call_original_binary_arith_for_branch_code; +static void *call_original_binary_rev_arith_for_branch_code; static void *bad_car_code, *bad_cdr_code; +static void *vector_ref_code, *vector_ref_check_index_code; +static void *syntax_e_code; static void *on_demand_jit_code; static void *on_demand_jit_arity_code; static void *get_stack_pointer_code; @@ -62,12 +68,19 @@ typedef struct { char *limit; int extra_pushed, max_extra_pushed; int depth, max_depth; - int *mappings; /* low bit indicates mode: orig pushed (0) or new pushed (1); - new pushed can be native; zero marks a save point */ + int *mappings; /* For each element, + case 0x1 bit: + . 0 -> case 0x2 bit: + . 0 -> case rest bits: + . 0 -> save point + . 1 -> shift >>2 to get orig pushed count + . 1 -> shift >>2 to get arity for single orig pushed + . 1 -> shift >>1 to get new (native) pushed */ int num_mappings, mappings_size; int retained; int need_set_rs; void **retain_start; + int log_depth; } mz_jit_state; typedef int (*Native_Check_Arity_Proc)(Scheme_Object *o, int argc); @@ -122,6 +135,8 @@ typedef struct { static Stack_Cache_Elem stack_cache_stack[STACK_CACHE_SIZE]; int stack_cache_stack_pos = 0; +#define IS_NAMED_PRIM(p, nm) (!strcmp(((Scheme_Primitive_Proc *)p)->name, nm)) + #include "codetab.inc" /*========================================================================*/ @@ -283,6 +298,21 @@ static void *generate_one(mz_jit_state *old_jitter, } } +#if 0 +# define FOR_LOG(x) x +# define LOG_IT(args) if (jitter->retain_start) { emit_indentation(jitter); printf args; } +static void emit_indentation(mz_jit_state *jitter) +{ + int i = jitter->log_depth; + while (i--) { + printf(" "); + } +} +#else +# define FOR_LOG(x) /* empty */ +# define LOG_IT(args) /* empty */ +#endif + /*========================================================================*/ /* run time */ /*========================================================================*/ @@ -451,10 +481,20 @@ static void mz_runstack_pushed(mz_jit_state *jitter, int n) if (jitter->depth > jitter->max_depth) jitter->max_depth = jitter->depth; if (!jitter->mappings[jitter->num_mappings] - || (jitter->mappings[jitter->num_mappings] & 0x1)) { + || (jitter->mappings[jitter->num_mappings] & 0x3)) { new_mapping(jitter); } - jitter->mappings[jitter->num_mappings] += (n << 1); + jitter->mappings[jitter->num_mappings] += (n << 2); + jitter->need_set_rs = 1; +} + +static void mz_runstack_closure_pushed(mz_jit_state *jitter, int a) +{ + jitter->depth += 1; + if (jitter->depth > jitter->max_depth) + jitter->max_depth = jitter->depth; + new_mapping(jitter); + jitter->mappings[jitter->num_mappings] = (a << 2) | 0x2; jitter->need_set_rs = 1; } @@ -462,12 +502,12 @@ static void mz_runstack_popped(mz_jit_state *jitter, int n) { int v; jitter->depth -= n; - v = (jitter->mappings[jitter->num_mappings]) >> 1; + v = (jitter->mappings[jitter->num_mappings]) >> 2; v -= n; if (!v) --jitter->num_mappings; else - jitter->mappings[jitter->num_mappings] = (v << 1); + jitter->mappings[jitter->num_mappings] = (v << 2); jitter->need_set_rs = 1; } @@ -486,8 +526,10 @@ static int mz_runstack_restored(mz_jit_state *jitter) c >>= 1; if (c > 0) amt += c; + } else if (c & 0x2) { + amt++; } else - amt += (c >> 1); + amt += (c >> 2); --jitter->num_mappings; } --jitter->num_mappings; @@ -507,14 +549,39 @@ static int mz_remap_it(mz_jit_state *jitter, int i) i += c; if (c < 0) j += c; + } else if (c & 0x2) { + j--; } else { - j -= (c >> 1); + j -= (c >> 2); } --p; } return i; } +static int mz_is_closure(mz_jit_state *jitter, int i, int arity) +{ + int j = i, p = jitter->num_mappings, c; + while (p && (j >= 0)) { + c = jitter->mappings[p]; + if (c & 0x1) { + c >>= 1; + if (c < 0) + j += c; + } else if (c & 0x2) { + if (!j) { + if (arity == (c >> 2)) + return 1; + } + j--; + } else { + j -= (c >> 2); + } + --p; + } + return 0; +} + #define mz_pushr_p(x) mz_pushr_p_it(jitter, x) #define mz_popr_p(x) mz_popr_p_it(jitter, x) @@ -658,31 +725,14 @@ static int is_short(Scheme_Object *obj, int fuel) static int inlined_unary_prim(Scheme_Object *o, Scheme_Object *_app) { - return (SAME_OBJ(o, scheme_not_prim) - || SAME_OBJ(o, scheme_null_p_prim) - || SAME_OBJ(o, scheme_pair_p_prim) - || SAME_OBJ(o, scheme_car_prim) - || SAME_OBJ(o, scheme_cdr_prim) - || SAME_OBJ(o, scheme_add1_prim) - || SAME_OBJ(o, scheme_sub1_prim)); + return (SCHEME_PRIMP(o) + && (SCHEME_PRIM_PROC_FLAGS(o) & SCHEME_PRIM_IS_UNARY_INLINED)); } static int inlined_binary_prim(Scheme_Object *o, Scheme_Object *_app) { - if (SAME_OBJ(o, scheme_plus_prim)) { - Scheme_App3_Rec *app = (Scheme_App3_Rec *)_app; - if (SCHEME_INTP(app->rand1) - || SCHEME_INTP(app->rand2)) - return 1; - } - - if (SAME_OBJ(o, scheme_minus_prim)) { - Scheme_App3_Rec *app = (Scheme_App3_Rec *)_app; - if (SCHEME_INTP(app->rand2)) - return 1; - } - - return (SAME_OBJ(o, scheme_eq_prim)); + return (SCHEME_PRIMP(o) + && (SCHEME_PRIM_PROC_FLAGS(o) & SCHEME_PRIM_IS_BINARY_INLINED)); } static int is_noncm(Scheme_Object *a) @@ -807,7 +857,7 @@ static int generate_direct_prim_tail_call(mz_jit_state *jitter, int num_rands) return 1; } -static int generate_tail_call(mz_jit_state *jitter, int num_rands, int need_set_rs) +static int generate_tail_call(mz_jit_state *jitter, int num_rands, int direct_native, int need_set_rs) { int i; GC_CAN_IGNORE jit_insn *ref, *ref2, *ref4, *ref5; @@ -815,10 +865,14 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int need_set_ __START_SHORT_JUMPS__(num_rands < 100); /* First, try fast direct jump to native code: */ - ref = jit_bmsi_ul(jit_forward(), JIT_V1, 0x1); - jit_ldr_s(JIT_R1, JIT_V1); - ref2 = jit_bnei_p(jit_forward(), JIT_R1, scheme_native_closure_type); - CHECK_LIMIT(); + if (!direct_native) { + ref = jit_bmsi_ul(jit_forward(), JIT_V1, 0x1); + jit_ldr_s(JIT_R1, JIT_V1); + ref2 = jit_bnei_p(jit_forward(), JIT_R1, scheme_native_closure_type); + CHECK_LIMIT(); + } else { + ref = ref2 = NULL; + } /* Right kind of function. Extract data and check stack depth: */ jit_ldxi_p(JIT_R0, JIT_V1, &((Scheme_Native_Closure *)0x0)->code); jit_ldxi_i(JIT_R2, JIT_R0, &((Scheme_Native_Closure_Data *)0x0)->max_let_depth); @@ -832,8 +886,8 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int need_set_ /* Check for thread swap: */ (void)jit_movi_p(JIT_R1, &scheme_fuel_counter); - jit_ldr_i(JIT_R1, JIT_R1); - ref5 = jit_bgti_i(jit_forward(), JIT_R1, 0); + jit_ldr_i(JIT_R2, JIT_R1); + ref5 = jit_bgti_i(jit_forward(), JIT_R2, 0); if (need_set_rs) { JIT_UPDATE_THREAD_RSPTR(); } @@ -842,6 +896,10 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int need_set_ (void)jit_calli(thread_block); mz_pop_local_p(JIT_R0, JIT_LOCAL2); mz_patch_branch(ref5); +#ifndef FUEL_AUTODECEREMENTS + jit_subi_p(JIT_R2, JIT_R2, 0x1); + jit_str_i(JIT_R1, JIT_R2); +#endif /* Copy args to runstack base: */ jit_subi_p(JIT_R2, JIT_RUNSTACK_BASE, WORDS_TO_BYTES(num_rands)); @@ -854,7 +912,11 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int need_set_ /* Extract function and data: */ jit_movr_p(JIT_R2, JIT_V1); - jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Native_Closure_Data *)0x0)->arity_code); + if (direct_native) { + jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Native_Closure_Data *)0x0)->u.tail_code); + } else { + jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Native_Closure_Data *)0x0)->arity_code); + } /* Set up arguments; JIT_RUNSTACK and JIT_RUNSTACK_BASE must also be ready */ jit_movr_p(JIT_R0, JIT_R2); jit_movi_i(JIT_R1, num_rands); @@ -865,8 +927,10 @@ static int generate_tail_call(mz_jit_state *jitter, int num_rands, int need_set_ /* The slow way: */ /* JIT_R0, JIT_V1, and JIT_RUNSTACK must be intact! */ - mz_patch_branch(ref); - mz_patch_branch(ref2); + if (!direct_native) { + mz_patch_branch(ref); + mz_patch_branch(ref2); + } mz_patch_branch(ref4); CHECK_LIMIT(); if (need_set_rs) { @@ -925,9 +989,9 @@ static int generate_direct_prim_non_tail_call(mz_jit_state *jitter, int num_rand mz_prepare(1); jit_pusharg_p(JIT_R0); if (multi_ok) { - (void)mz_finish(scheme_force_value); + (void)mz_finish(scheme_force_value_same_mark); } else { - (void)mz_finish(scheme_force_one_value); + (void)mz_finish(scheme_force_one_value_same_mark); } jit_retval(JIT_R0); mz_patch_branch(ref); @@ -944,7 +1008,8 @@ static int generate_direct_prim_non_tail_call(mz_jit_state *jitter, int num_rand return 1; } -static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int need_set_rs, int multi_ok, int pop_and_jump) +static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int direct_native, int need_set_rs, + int multi_ok, int pop_and_jump) { /* Non-tail call: */ GC_CAN_IGNORE jit_insn *ref, *ref2, *ref4, *ref5, *ref6, *ref7, *ref8, *ref9; @@ -957,10 +1022,14 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int need_ } /* Check for inlined prim types */ - ref = jit_bmsi_ul(jit_forward(), JIT_V1, 0x1); - jit_ldr_s(JIT_R1, JIT_V1); - ref2 = jit_bnei_i(jit_forward(), JIT_R1, scheme_native_closure_type); - CHECK_LIMIT(); + if (!direct_native) { + ref = jit_bmsi_ul(jit_forward(), JIT_V1, 0x1); + jit_ldr_s(JIT_R1, JIT_V1); + ref2 = jit_bnei_i(jit_forward(), JIT_R1, scheme_native_closure_type); + CHECK_LIMIT(); + } else { + ref = ref2 = NULL; + } /* Before inlined native, check max let depth */ jit_ldxi_p(JIT_R0, JIT_V1, &((Scheme_Native_Closure *)0x0)->code); @@ -975,7 +1044,7 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int need_ jit_ldr_i(JIT_R1, JIT_R1); ref9 = jit_bltr_ul(jit_forward(), JIT_STACK, JIT_R1); CHECK_LIMIT(); - + /* Fast inlined-native jump ok (proc will check argc); */ /* extract function and data: */ mz_prepare(3); @@ -983,7 +1052,11 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int need_ jit_movi_i(JIT_R1, num_rands); jit_pusharg_i(JIT_R1); jit_pusharg_p(JIT_V1); - (void)mz_finish(jump_to_native_code); + if (direct_native) { + (void)mz_finish(jump_to_native_code); + } else { + (void)mz_finish(jump_to_native_arity_code); + } CHECK_LIMIT(); jit_retval(JIT_R0); if (!multi_ok) { @@ -1000,53 +1073,59 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int need_ mz_prepare(1); jit_pusharg_p(JIT_R0); if (multi_ok) { - (void)mz_finish(scheme_force_value); + (void)mz_finish(scheme_force_value_same_mark); } else { - (void)mz_finish(scheme_force_one_value); + (void)mz_finish(scheme_force_one_value_same_mark); } ref5 = jit_jmpi(jit_forward()); CHECK_LIMIT(); /* Maybe it's a prim? */ - mz_patch_branch(ref2); - ref2 = jit_bnei_i(jit_forward(), JIT_R1, scheme_prim_type); - /* It's a prim. Arity check... fast path when exactly equal to min, only: */ - jit_ldxi_i(JIT_R0, JIT_V1, &((Scheme_Primitive_Proc *)0x0)->mina); - ref7 = jit_bnei_i(jit_forward(), JIT_R0, num_rands); - /* Fast prim application */ - jit_ldxi_p(JIT_V1, JIT_V1, &((Scheme_Primitive_Proc *)0x0)->prim_val); - if (need_set_rs) { - JIT_UPDATE_THREAD_RSPTR(); - } - mz_prepare(2); - jit_pusharg_p(JIT_RUNSTACK); - jit_pusharg_i(JIT_R0); - (void)mz_finishr(JIT_V1); - CHECK_LIMIT(); - jit_retval(JIT_R0); - if (!multi_ok) { - jit_insn *refm; - __END_SHORT_JUMPS__(num_rands < 100); - refm = jit_beqi_p(jit_forward(), JIT_R0, SCHEME_MULTIPLE_VALUES); - mz_patch_branch_at(refm, bad_result_arity_code); - __START_SHORT_JUMPS__(num_rands < 100); - } - ref10 = jit_bnei_p(jit_forward(), JIT_R0, SCHEME_TAIL_CALL_WAITING); - mz_prepare(1); - jit_pusharg_p(JIT_R0); - if (multi_ok) { - (void)mz_finish(scheme_force_value); + if (!direct_native) { + mz_patch_branch(ref2); + ref2 = jit_bnei_i(jit_forward(), JIT_R1, scheme_prim_type); + /* It's a prim. Arity check... fast path when exactly equal to min, only: */ + jit_ldxi_i(JIT_R0, JIT_V1, &((Scheme_Primitive_Proc *)0x0)->mina); + ref7 = jit_bnei_i(jit_forward(), JIT_R0, num_rands); + /* Fast prim application */ + jit_ldxi_p(JIT_V1, JIT_V1, &((Scheme_Primitive_Proc *)0x0)->prim_val); + if (need_set_rs) { + JIT_UPDATE_THREAD_RSPTR(); + } + mz_prepare(2); + jit_pusharg_p(JIT_RUNSTACK); + jit_pusharg_i(JIT_R0); + (void)mz_finishr(JIT_V1); + CHECK_LIMIT(); + jit_retval(JIT_R0); + if (!multi_ok) { + jit_insn *refm; + __END_SHORT_JUMPS__(num_rands < 100); + refm = jit_beqi_p(jit_forward(), JIT_R0, SCHEME_MULTIPLE_VALUES); + mz_patch_branch_at(refm, bad_result_arity_code); + __START_SHORT_JUMPS__(num_rands < 100); + } + ref10 = jit_bnei_p(jit_forward(), JIT_R0, SCHEME_TAIL_CALL_WAITING); + mz_prepare(1); + jit_pusharg_p(JIT_R0); + if (multi_ok) { + (void)mz_finish(scheme_force_value_same_mark); + } else { + (void)mz_finish(scheme_force_one_value_same_mark); + } + CHECK_LIMIT(); + ref8 = jit_jmpi(jit_forward()); } else { - (void)mz_finish(scheme_force_one_value); + ref2 = ref7 = ref8 = ref10 = NULL; } - CHECK_LIMIT(); - ref8 = jit_jmpi(jit_forward()); /* The slow way: */ - mz_patch_branch(ref); - mz_patch_branch(ref2); + if (!direct_native) { + mz_patch_branch(ref); + mz_patch_branch(ref2); + mz_patch_branch(ref7); + } mz_patch_branch(ref4); - mz_patch_branch(ref7); mz_patch_branch(ref9); if (need_set_rs) { JIT_UPDATE_THREAD_RSPTR(); @@ -1063,10 +1142,14 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int need_ (void)mz_finish(_scheme_apply_from_native); } mz_patch_ucbranch(ref5); - mz_patch_ucbranch(ref8); + if (!direct_native) { + mz_patch_ucbranch(ref8); + } jit_retval(JIT_R0); mz_patch_branch(ref6); - mz_patch_branch(ref10); + if (!direct_native) { + mz_patch_branch(ref10); + } if (pop_and_jump) { mz_epilog(JIT_V1); } @@ -1081,7 +1164,7 @@ typedef struct { mz_jit_state *old_jitter; int multi_ok; int is_tail; - int direct_prim; + int direct_prim, direct_native; } Generate_Call_Data; int do_generate_shared_call(mz_jit_state *jitter, void *_data) @@ -1096,7 +1179,7 @@ int do_generate_shared_call(mz_jit_state *jitter, void *_data) if (data->direct_prim) return generate_direct_prim_tail_call(jitter, data->num_rands); else - return generate_tail_call(jitter, data->num_rands, 1); + return generate_tail_call(jitter, data->num_rands, data->direct_native, 1); } else { int ok; void *code, *code_end; @@ -1106,7 +1189,7 @@ int do_generate_shared_call(mz_jit_state *jitter, void *_data) if (data->direct_prim) ok = generate_direct_prim_non_tail_call(jitter, data->num_rands, data->multi_ok, 1); else - ok = generate_non_tail_call(jitter, data->num_rands, 1, data->multi_ok, 1); + ok = generate_non_tail_call(jitter, data->num_rands, data->direct_native, 1, data->multi_ok, 1); code_end = jit_get_ip().ptr; if (jitter->retain_start) @@ -1117,7 +1200,7 @@ int do_generate_shared_call(mz_jit_state *jitter, void *_data) } static void *generate_shared_call(int num_rands, mz_jit_state *old_jitter, int multi_ok, int is_tail, - int direct_prim) + int direct_prim, int direct_native) { Generate_Call_Data data; @@ -1126,6 +1209,7 @@ static void *generate_shared_call(int num_rands, mz_jit_state *old_jitter, int m data.multi_ok = multi_ok; data.is_tail = is_tail; data.direct_prim = direct_prim; + data.direct_native = direct_native; return generate_one(old_jitter, do_generate_shared_call, &data, 0, NULL); } @@ -1133,7 +1217,7 @@ static void *generate_shared_call(int num_rands, mz_jit_state *old_jitter, int m static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_rands, mz_jit_state *jitter, int is_tail, int multi_ok) { - int i, direct_prim = 0, need_non_tail = 0, offset; + int i, direct_prim = 0, need_non_tail = 0, direct_native = 0, offset; Scheme_Object *rator, *v; int reorder_ok = 0; START_JIT_DATA(); @@ -1217,6 +1301,7 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_ } else { JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); } + LOG_IT(("direct: %s\n", ((Scheme_Primitive_Proc *)rator)->name)); } if (reorder_ok) { @@ -1227,26 +1312,32 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_ END_JIT_DATA(20); + if (SAME_TYPE(SCHEME_TYPE(rator), scheme_local_type)) { + if (mz_is_closure(jitter, SCHEME_LOCAL_POS(rator), num_rands)) { + direct_native = 1; + } + } + if (num_rands >= MAX_SHARED_CALL_RANDS) { if (is_tail) { if (direct_prim) generate_direct_prim_tail_call(jitter, num_rands); else - generate_tail_call(jitter, num_rands, jitter->need_set_rs); + generate_tail_call(jitter, num_rands, direct_native, jitter->need_set_rs); } else { if (direct_prim) generate_direct_prim_non_tail_call(jitter, num_rands, multi_ok, 0); else - generate_non_tail_call(jitter, num_rands, jitter->need_set_rs, multi_ok, 0); + generate_non_tail_call(jitter, num_rands, direct_native, jitter->need_set_rs, multi_ok, 0); } } else { /* Jump to code to implement a tail call for num_rands arguments */ void *code; - int dp = (direct_prim ? 1 : 0); + int dp = (direct_prim ? 1 : (direct_native ? 2 : 0)); if (is_tail) { jit_insn *refm; if (!shared_tail_code[dp][num_rands]) { - code = generate_shared_call(num_rands, jitter, multi_ok, is_tail, direct_prim); + code = generate_shared_call(num_rands, jitter, multi_ok, is_tail, direct_prim, direct_native); shared_tail_code[dp][num_rands] = code; } code = shared_tail_code[dp][num_rands]; @@ -1256,7 +1347,7 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_ int mo = (multi_ok ? 1 : 0); if (!shared_non_tail_code[dp][num_rands][mo]) { - code = generate_shared_call(num_rands, jitter, multi_ok, is_tail, direct_prim); + code = generate_shared_call(num_rands, jitter, multi_ok, is_tail, direct_prim, direct_native); shared_non_tail_code[dp][num_rands][mo] = code; } code = shared_non_tail_code[dp][num_rands][mo]; @@ -1274,172 +1365,434 @@ static int generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_ return is_tail ? 2 : 1; } -static int generate_add(mz_jit_state *jitter, Scheme_Object *v, long delta, int orig_args, - Scheme_Object *orig_prim, int single, int negate, int reversed) +static void generate_arith_slow_path(mz_jit_state *jitter, Scheme_Object *rator, + jit_insn **_ref, jit_insn **_ref4, + jit_insn **for_branch, + int orig_args, int reversed, int use_v, int v) { - GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3; + jit_insn *ref, *ref4; - mz_runstack_skipped(jitter, orig_args); + (void)jit_movi_p(JIT_R2, ((Scheme_Primitive_Proc *)rator)->prim_val); + if (for_branch) { + ref4 = jit_movi_p(JIT_V1, jit_forward()); + mz_push_local_p(JIT_V1, JIT_LOCAL2); + } else + ref4 = NULL; + ref = jit_movi_p(JIT_V1, jit_forward()); - generate_non_tail(v, jitter, 0, 1); - CHECK_LIMIT(); - - mz_runstack_unskipped(jitter, orig_args); - - __START_SHORT_JUMPS__(1); - - jit_movr_p(JIT_R1, JIT_R0); /* save it in case of overflow... */ - ref = jit_bmci_ul(jit_forward(), JIT_R0, 0x1); - ref3 = jit_boaddi_i(jit_forward(), JIT_R0, delta << 1); - ref2 = jit_jmpi(jit_forward()); - CHECK_LIMIT(); - - /* Fixnum fast path failed; call original primitive */ - mz_patch_branch(ref); - mz_patch_branch(ref3); - __END_SHORT_JUMPS__(1); - if (negate) - delta = -delta; - if (!single) { - (void)jit_movi_p(JIT_R0, scheme_make_integer(delta)); - } - (void)jit_movi_p(JIT_R2, ((Scheme_Primitive_Proc *)orig_prim)->prim_val); - if (single) { - (void)jit_calli(call_original_single_code); - } else if (reversed) { - (void)jit_calli(call_original_reversed_code); + if (orig_args == 1) { + if (for_branch) { + (void)jit_jmpi(call_original_unary_arith_for_branch_code); + } else { + (void)jit_jmpi(call_original_unary_arith_code); + } } else { - (void)jit_calli(call_original_code); + if (use_v) { + (void)jit_movi_p(JIT_R1, scheme_make_integer(v)); + reversed = !reversed; + } + + if (for_branch) { + if (reversed) { + (void)jit_jmpi(call_original_binary_rev_arith_for_branch_code); + } else { + (void)jit_jmpi(call_original_binary_arith_for_branch_code); + } + } else { + if (reversed) { + (void)jit_jmpi(call_original_binary_rev_arith_code); + } else { + (void)jit_jmpi(call_original_binary_arith_code); + } + } } - __START_SHORT_JUMPS__(1); - mz_patch_ucbranch(ref2); - __END_SHORT_JUMPS__(1); + *_ref = ref; + *_ref4 = ref4; +} + +static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Object *rand, Scheme_Object *rand2, + int orig_args, int arith, int cmp, int v, jit_insn **for_branch, int branch_short) +{ + GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3, *ref4, *refslow; + int skipped, simple_rand, reversed = 0; + + LOG_IT(("inlined %s\n", ((Scheme_Primitive_Proc *)rator)->name)); + + if (rand2) { + if (SCHEME_INTP(rand2)) { + v = SCHEME_INT_VAL(rand2); + rand2 = NULL; + } else if (SCHEME_INTP(rand) && (arith != -1)) { + v = SCHEME_INT_VAL(rand); + cmp = -cmp; + rand = rand2; + rand2 = NULL; + reversed = 1; + } else if ((arith != -1) + && SAME_TYPE(SCHEME_TYPE(rand2), scheme_local_type) + && !SAME_TYPE(SCHEME_TYPE(rand), scheme_local_type)) { + Scheme_Object *t = rand2; + rand2 = rand; + rand = t; + cmp = -cmp; + reversed = 1; + } + } + + if (rand2) { + simple_rand = SAME_TYPE(SCHEME_TYPE(rand), scheme_local_type); + } else + simple_rand = 0; + + if (rand2 && !simple_rand) + skipped = orig_args - 1; + else + skipped = orig_args; + + mz_runstack_skipped(jitter, skipped); + + if (rand2 && !simple_rand) { + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + mz_runstack_pushed(jitter, 1); + generate_non_tail(rand, jitter, 0, 1); + CHECK_LIMIT(); + jit_str_p(JIT_RUNSTACK, JIT_R0); + } + + generate_non_tail(rand2 ? rand2 : rand, jitter, 0, 1); + CHECK_LIMIT(); + + if (simple_rand) { + int pos; + pos = mz_remap(SCHEME_LOCAL_POS(rand)); + jit_ldxi_p(JIT_R1, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); + + jit_andr_ul(JIT_R2, JIT_R0, JIT_R1); + __START_SHORT_JUMPS__(1); + ref2 = jit_bmsi_ul(jit_forward(), JIT_R2, 0x1); + __END_SHORT_JUMPS__(1); + + /* Slow path */ + refslow = _jit.x.pc; + generate_arith_slow_path(jitter, rator, &ref, &ref4, for_branch, orig_args, reversed, 0, 0); + + __START_SHORT_JUMPS__(1); + mz_patch_branch(ref2); + __END_SHORT_JUMPS__(1); + CHECK_LIMIT(); + } else if (rand2) { + jit_ldr_p(JIT_R1, JIT_RUNSTACK); + jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + mz_runstack_popped(jitter, 1); + + jit_andr_ul(JIT_R2, JIT_R0, JIT_R1); + __START_SHORT_JUMPS__(1); + ref2 = jit_bmsi_ul(jit_forward(), JIT_R2, 0x1); + __END_SHORT_JUMPS__(1); + + /* Slow path */ + refslow = _jit.x.pc; + generate_arith_slow_path(jitter, rator, &ref, &ref4, for_branch, orig_args, reversed, 0, 0); + + __START_SHORT_JUMPS__(1); + mz_patch_branch(ref2); + __END_SHORT_JUMPS__(1); + CHECK_LIMIT(); + } else { + __START_SHORT_JUMPS__(1); + ref2 = jit_bmsi_ul(jit_forward(), JIT_R0, 0x1); + __END_SHORT_JUMPS__(1); + + /* Slow path */ + refslow = _jit.x.pc; + generate_arith_slow_path(jitter, rator, &ref, &ref4, for_branch, orig_args, reversed, 1, v); + + __START_SHORT_JUMPS__(1); + mz_patch_branch(ref2); + __END_SHORT_JUMPS__(1); + } + + mz_runstack_unskipped(jitter, skipped); + + __START_SHORT_JUMPS__(branch_short); + + if (arith) { + if (rand2) { + if (arith > 0) { + jit_andi_ul(JIT_R2, JIT_R1, (~0x1)); + (void)jit_boaddr_i(refslow, JIT_R2, JIT_R0); + jit_movr_p(JIT_R0, JIT_R2); + } else { + jit_movr_p(JIT_R2, JIT_R1); + (void)jit_bosubr_i(refslow, JIT_R2, JIT_R0); + jit_ori_ul(JIT_R0, JIT_R2, 0x1); + } + } else { + jit_movr_p(JIT_R2, JIT_R0); + if (arith > 0) { + (void)jit_boaddi_i(refslow, JIT_R2, v << 1); + } else { + (void)jit_bosubi_i(refslow, JIT_R2, v << 1); + } + jit_movr_p(JIT_R0, JIT_R2); + } + jit_patch_movi(ref, (_jit.x.pc)); + } else { + switch (cmp) { + case -2: + if (rand2) { + ref3 = jit_bger_i(jit_forward(), JIT_R1, JIT_R0); + } else { + ref3 = jit_bgei_i(jit_forward(), JIT_R0, scheme_make_integer(v)); + } + break; + case -1: + if (rand2) { + ref3 = jit_bgtr_i(jit_forward(), JIT_R1, JIT_R0); + } else { + ref3 = jit_bgti_i(jit_forward(), JIT_R0, scheme_make_integer(v)); + } + break; + case 0: + if (rand2) { + ref3 = jit_bner_i(jit_forward(), JIT_R1, JIT_R0); + } else { + ref3 = jit_bnei_i(jit_forward(), JIT_R0, scheme_make_integer(v)); + } + break; + case 1: + if (rand2) { + ref3 = jit_bltr_i(jit_forward(), JIT_R1, JIT_R0); + } else { + ref3 = jit_blti_i(jit_forward(), JIT_R0, scheme_make_integer(v)); + } + break; + case 2: + default: + if (rand2) { + ref3 = jit_bler_i(jit_forward(), JIT_R1, JIT_R0); + } else { + ref3 = jit_blei_i(jit_forward(), JIT_R0, scheme_make_integer(v)); + } + break; + } + + if (for_branch) { + for_branch[0] = ref3; + for_branch[2] = ref; + jit_patch_movi(ref4, (_jit.x.pc)); + } else { + (void)jit_movi_p(JIT_R0, scheme_true); + ref2 = jit_jmpi(jit_forward()); + mz_patch_branch(ref3); + (void)jit_movi_p(JIT_R0, scheme_false); + mz_patch_ucbranch(ref2); + jit_patch_movi(ref, (_jit.x.pc)); + } + } + + __END_SHORT_JUMPS__(branch_short); + + return 1; +} + +static int generate_inlined_constant_test(mz_jit_state *jitter, Scheme_App2_Rec *app, + Scheme_Object *cnst, jit_insn **for_branch, int branch_short) +{ + GC_CAN_IGNORE jit_insn *ref, *ref2; + + LOG_IT(("inlined %s\n", ((Scheme_Primitive_Proc *)app->rator)->name)); + + mz_runstack_skipped(jitter, 1); + + generate_non_tail(app->rand, jitter, 0, 1); + CHECK_LIMIT(); + + mz_runstack_unskipped(jitter, 1); + + __START_SHORT_JUMPS__(branch_short); + + ref = jit_bnei_p(jit_forward(), JIT_R0, cnst); + if (for_branch) { + for_branch[0] = ref; + } else { + (void)jit_movi_p(JIT_R0, scheme_true); + ref2 = jit_jmpi(jit_forward()); + mz_patch_branch(ref); + (void)jit_movi_p(JIT_R0, scheme_false); + mz_patch_ucbranch(ref2); + } + + __END_SHORT_JUMPS__(branch_short); return 1; } -static int generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, int is_tail, int multi_ok) +static int generate_inlined_type_test(mz_jit_state *jitter, Scheme_App2_Rec *app, + Scheme_Type ty, jit_insn **for_branch, int branch_short) +{ + GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3; + + LOG_IT(("inlined %s\n", ((Scheme_Primitive_Proc *)app->rator)->name)); + + mz_runstack_skipped(jitter, 1); + + generate_non_tail(app->rand, jitter, 0, 1); + CHECK_LIMIT(); + + mz_runstack_unskipped(jitter, 1); + + __START_SHORT_JUMPS__(branch_short); + + ref = jit_bmsi_ul(jit_forward(), JIT_R0, 0x1); + jit_ldxi_s(JIT_R0, JIT_R0, &((Scheme_Object *)0x0)->type); + ref3 = jit_bnei_p(jit_forward(), JIT_R0, ty); + if (for_branch) { + for_branch[0] = ref; + for_branch[1] = ref3; + } else { + (void)jit_movi_p(JIT_R0, scheme_true); + ref2 = jit_jmpi(jit_forward()); + mz_patch_branch(ref); + mz_patch_branch(ref3); + (void)jit_movi_p(JIT_R0, scheme_false); + mz_patch_ucbranch(ref2); + } + + __END_SHORT_JUMPS__(branch_short); + + return 1; +} + +static int generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, int is_tail, int multi_ok, + jit_insn **for_branch, int branch_short) { Scheme_Object *rator = app->rator; - if (SAME_OBJ(rator, scheme_not_prim) - || SAME_OBJ(rator, scheme_null_p_prim)) { - GC_CAN_IGNORE jit_insn *ref, *ref2; - Scheme_Object *cnst; + if (!SCHEME_PRIMP(rator)) + return 0; - if (SAME_OBJ(rator, scheme_not_prim)) { - cnst = scheme_false; - } else { - cnst = scheme_null; + if (!(SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_UNARY_INLINED)) + return 0; + + if (IS_NAMED_PRIM(rator, "not")) { + generate_inlined_constant_test(jitter, app, scheme_false, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "null?")) { + generate_inlined_constant_test(jitter, app, scheme_null, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "pair?")) { + generate_inlined_type_test(jitter, app, scheme_pair_type, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "symbol?")) { + generate_inlined_type_test(jitter, app, scheme_symbol_type, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "syntax?")) { + generate_inlined_type_test(jitter, app, scheme_stx_type, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "char?")) { + generate_inlined_type_test(jitter, app, scheme_char_type, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "zero?")) { + generate_arith(jitter, rator, app->rand, NULL, 1, 0, 0, 0, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "negative?")) { + generate_arith(jitter, rator, app->rand, NULL, 1, 0, -2, 0, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "positive?")) { + generate_arith(jitter, rator, app->rand, NULL, 1, 0, 2, 0, for_branch, branch_short); + return 1; + } else if (!for_branch) { + if (IS_NAMED_PRIM(rator, "car") + || IS_NAMED_PRIM(rator, "cdr")) { + GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3; + int is_car; + + LOG_IT(("inlined %s\n", ((Scheme_Primitive_Proc *)rator)->name)); + + is_car = IS_NAMED_PRIM(rator, "car"); + + mz_runstack_skipped(jitter, 1); + + generate_non_tail(app->rand, jitter, 0, 1); + CHECK_LIMIT(); + + mz_runstack_unskipped(jitter, 1); + + __START_SHORT_JUMPS__(1); + + ref = jit_bmsi_ul(jit_forward(), JIT_R0, 0x1); + jit_ldxi_s(JIT_R1, JIT_R0, &((Scheme_Object *)0x0)->type); + ref3 = jit_bnei_p(jit_forward(), JIT_R1, scheme_pair_type); + if (is_car) { + (void)jit_ldxi_p(JIT_R0, JIT_R0, &((Scheme_Simple_Object *)0x0)->u.pair_val.car); + } else { + (void)jit_ldxi_p(JIT_R0, JIT_R0, &((Scheme_Simple_Object *)0x0)->u.pair_val.cdr); + } + ref2 = jit_jmpi(jit_forward()); + mz_patch_branch(ref); + mz_patch_branch(ref3); + __END_SHORT_JUMPS__(1); + + if (is_car) { + (void)jit_jmpi(bad_car_code); + } else { + (void)jit_jmpi(bad_cdr_code); + } + + __START_SHORT_JUMPS__(1); + mz_patch_ucbranch(ref2); + __END_SHORT_JUMPS__(1); + + return 1; + } else if (IS_NAMED_PRIM(rator, "syntax-e")) { + LOG_IT(("inlined syntax-e\n")); + + mz_runstack_skipped(jitter, 1); + + generate_non_tail(app->rand, jitter, 0, 1); + CHECK_LIMIT(); + + mz_runstack_unskipped(jitter, 1); + + (void)jit_calli(syntax_e_code); + + return 1; + } else if (IS_NAMED_PRIM(rator, "add1")) { + generate_arith(jitter, rator, app->rand, NULL, 1, 1, 0, 1, NULL, 1); + return 1; + } else if (IS_NAMED_PRIM(rator, "sub1")) { + generate_arith(jitter, rator, app->rand, NULL, 1, -1, 0, 1, NULL, 1); + return 1; } + } - mz_runstack_skipped(jitter, 1); - - generate_non_tail(app->rand, jitter, 0, 1); - CHECK_LIMIT(); - - mz_runstack_unskipped(jitter, 1); - - __START_SHORT_JUMPS__(1); - - ref = jit_beqi_p(jit_forward(), JIT_R0, cnst); - (void)jit_movi_p(JIT_R0, scheme_false); - ref2 = jit_jmpi(jit_forward()); - mz_patch_branch(ref); - (void)jit_movi_p(JIT_R0, scheme_true); - mz_patch_ucbranch(ref2); - - __END_SHORT_JUMPS__(1); - - return 1; - } else if (SAME_OBJ(rator, scheme_pair_p_prim)) { - GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3; - Scheme_Type ty; - - ty = scheme_pair_type; - - mz_runstack_skipped(jitter, 1); - - generate_non_tail(app->rand, jitter, 0, 1); - CHECK_LIMIT(); - - mz_runstack_unskipped(jitter, 1); - - __START_SHORT_JUMPS__(1); - - ref = jit_bmsi_ul(jit_forward(), JIT_R0, 0x1); - jit_ldxi_s(JIT_R0, JIT_R0, &((Scheme_Object *)0x0)->type); - ref3 = jit_bnei_p(jit_forward(), JIT_R0, ty); - (void)jit_movi_p(JIT_R0, scheme_true); - ref2 = jit_jmpi(jit_forward()); - mz_patch_branch(ref); - mz_patch_branch(ref3); - (void)jit_movi_p(JIT_R0, scheme_false); - mz_patch_ucbranch(ref2); - - __END_SHORT_JUMPS__(1); - - return 1; - } else if (SAME_OBJ(rator, scheme_car_prim) - || SAME_OBJ(rator, scheme_cdr_prim)) { - GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3; - int is_car; - - is_car = SAME_OBJ(rator, scheme_car_prim); - - mz_runstack_skipped(jitter, 1); - - generate_non_tail(app->rand, jitter, 0, 1); - CHECK_LIMIT(); - - mz_runstack_unskipped(jitter, 1); - - __START_SHORT_JUMPS__(1); - - ref = jit_bmsi_ul(jit_forward(), JIT_R0, 0x1); - jit_ldxi_s(JIT_R1, JIT_R0, &((Scheme_Object *)0x0)->type); - ref3 = jit_bnei_p(jit_forward(), JIT_R1, scheme_pair_type); - if (is_car) { - (void)jit_ldxi_p(JIT_R0, JIT_R0, &((Scheme_Simple_Object *)0x0)->u.pair_val.car); - } else { - (void)jit_ldxi_p(JIT_R0, JIT_R0, &((Scheme_Simple_Object *)0x0)->u.pair_val.cdr); - } - ref2 = jit_jmpi(jit_forward()); - mz_patch_branch(ref); - mz_patch_branch(ref3); - __END_SHORT_JUMPS__(1); - - if (is_car) { - (void)jit_jmpi(bad_car_code); - } else { - (void)jit_jmpi(bad_cdr_code); - } - - __START_SHORT_JUMPS__(1); - mz_patch_ucbranch(ref2); - __END_SHORT_JUMPS__(1); - - return 1; - } else if (SAME_OBJ(rator, scheme_add1_prim)) { - generate_add(jitter, app->rand, 1, 1, rator, 1, 0, 0); - return 1; - } else if (SAME_OBJ(rator, scheme_sub1_prim)) { - generate_add(jitter, app->rand, -1, 1, rator, 1, 0, 0); - return 1; + if (!for_branch) { + scheme_console_printf("Inlining expected.\n"); + abort(); } return 0; } -static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, int is_tail, int multi_ok) +static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, int is_tail, int multi_ok, + jit_insn **for_branch, int branch_short) { Scheme_Object *rator = app->rator; - if (SAME_OBJ(rator, scheme_eq_prim)) { + if (!SCHEME_PRIMP(rator)) + return 0; + + if (!(SCHEME_PRIM_PROC_FLAGS(rator) & SCHEME_PRIM_IS_BINARY_INLINED)) + return 0; + + if (IS_NAMED_PRIM(rator, "eq?")) { Scheme_Object *a1, *a2; GC_CAN_IGNORE jit_insn *ref, *ref2; + LOG_IT(("inlined eq?\n")); + a1 = app->rand1; if (SCHEME_TYPE(a1) > _scheme_values_types_) { a2 = app->rand2; @@ -1456,18 +1809,24 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i CHECK_LIMIT(); mz_runstack_unskipped(jitter, 2); + + if (!SCHEME_INTP(a1)) + mz_retain(a1); - __START_SHORT_JUMPS__(1); + __START_SHORT_JUMPS__(branch_short); - mz_retain(a1); - ref = jit_beqi_p(jit_forward(), JIT_R0, a1); - (void)jit_movi_p(JIT_R0, scheme_false); - ref2 = jit_jmpi(jit_forward()); - mz_patch_branch(ref); - (void)jit_movi_p(JIT_R0, scheme_true); - mz_patch_ucbranch(ref2); + ref = jit_bnei_p(jit_forward(), JIT_R0, a1); + if (for_branch) { + for_branch[0] = ref; + } else { + (void)jit_movi_p(JIT_R0, scheme_true); + ref2 = jit_jmpi(jit_forward()); + mz_patch_branch(ref); + (void)jit_movi_p(JIT_R0, scheme_false); + mz_patch_ucbranch(ref2); + } - __END_SHORT_JUMPS__(1); + __END_SHORT_JUMPS__(branch_short); } else { /* Two complex expressions: */ mz_runstack_skipped(jitter, 1); @@ -1487,51 +1846,118 @@ static int generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i mz_runstack_unskipped(jitter, 1); - __START_SHORT_JUMPS__(1); + __START_SHORT_JUMPS__(branch_short); - ref = jit_beqr_p(jit_forward(), JIT_R0, JIT_R1); - (void)jit_movi_p(JIT_R0, scheme_false); - ref2 = jit_jmpi(jit_forward()); - mz_patch_branch(ref); - (void)jit_movi_p(JIT_R0, scheme_true); - mz_patch_ucbranch(ref2); + ref = jit_bner_p(jit_forward(), JIT_R0, JIT_R1); + if (for_branch) { + for_branch[0] = ref; + } else { + (void)jit_movi_p(JIT_R0, scheme_true); + ref2 = jit_jmpi(jit_forward()); + mz_patch_branch(ref); + (void)jit_movi_p(JIT_R0, scheme_false); + mz_patch_ucbranch(ref2); + } - __END_SHORT_JUMPS__(1); + __END_SHORT_JUMPS__(branch_short); } return 1; - } else if (SAME_OBJ(rator, scheme_plus_prim) - || SAME_OBJ(rator, scheme_minus_prim)) { - Scheme_Object *c, *v; - int reversed = 0, negative = 0; + } else if (IS_NAMED_PRIM(rator, "=")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, 0, 0, 0, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "<=")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, 0, -1, 0, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, "<")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, 0, -2, 0, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, ">=")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, 0, 1, 0, for_branch, branch_short); + return 1; + } else if (IS_NAMED_PRIM(rator, ">")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, 0, 2, 0, for_branch, branch_short); + return 1; + } else if (!for_branch) { + if (IS_NAMED_PRIM(rator, "+")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, 1, 0, 0, NULL, 1); + return 1; + } else if (IS_NAMED_PRIM(rator, "-")) { + generate_arith(jitter, rator, app->rand1, app->rand2, 2, -1, 0, 0, NULL, 1); + return 1; + } else if (IS_NAMED_PRIM(rator, "vector-ref")) { + int simple; - c = app->rand1; - if (SAME_OBJ(rator, scheme_plus_prim) && SCHEME_INTP(c)) { - v = app->rand2; - } else { - c = app->rand2; - v = app->rand1; - reversed = 1; - if (SAME_OBJ(rator, scheme_minus_prim)) - negative = 1; - } + LOG_IT(("inlined vector-ref?\n")); - if (SCHEME_INTP(c)) { - long delta = SCHEME_INT_VAL(c); - if (negative) { - long d2; - d2 = -delta; - delta = d2; - } - generate_add(jitter, v, delta, 2, rator, 0, negative, reversed); + simple = (SCHEME_INTP(app->rand2) + && (SCHEME_INT_VAL(app->rand2) >= 0)); + if (simple) + mz_runstack_skipped(jitter, 2); + else + mz_runstack_skipped(jitter, 1); + + if (!simple) { + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + mz_runstack_pushed(jitter, 1); + } + + generate_non_tail(app->rand1, jitter, 0, 1); + CHECK_LIMIT(); + + if (!simple) { + jit_str_p(JIT_RUNSTACK, JIT_R0); + + generate_non_tail(app->rand2, jitter, 0, 1); + CHECK_LIMIT(); + + jit_movr_p(JIT_R1, JIT_R0); + jit_ldr_p(JIT_R0, JIT_RUNSTACK); + + jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + mz_runstack_popped(jitter, 1); + + (void)jit_calli(vector_ref_check_index_code); + } else { + int offset; + offset = SCHEME_INT_VAL(app->rand2); + (void)jit_movi_p(JIT_R1, offset); + offset = ((int)&SCHEME_VEC_ELS(0x0)) + WORDS_TO_BYTES(SCHEME_INT_VAL(app->rand2)); + jit_movi_i(JIT_V1, offset); + (void)jit_calli(vector_ref_code); + } + + if (simple) + mz_runstack_unskipped(jitter, 2); + else + mz_runstack_unskipped(jitter, 1); + return 1; } } + if (!for_branch) { + scheme_console_printf("Inlining expected.\n"); + abort(); + } + return 0; } +int generate_inlined_test(mz_jit_state *jitter, Scheme_Object *obj, int branch_short, jit_insn **refs) +{ + switch (SCHEME_TYPE(obj)) { + case scheme_application2_type: + return generate_inlined_unary(jitter, (Scheme_App2_Rec *)obj, 0, 0, refs, branch_short); + case scheme_application3_type: + return generate_inlined_binary(jitter, (Scheme_App3_Rec *)obj, 0, 0, refs, branch_short); + } + + return 0; +} + + /*========================================================================*/ /* lambda codegen */ /*========================================================================*/ @@ -1702,7 +2128,11 @@ static int generate_non_tail(Scheme_Object *obj, mz_jit_state *jitter, int multi { if (is_simple(obj, INIT_SIMPLE_DEPTH, 0)) { /* Simple; doesn't change the stack or set marks: */ - return generate(obj, jitter, 0, multi_ok); + int v; + FOR_LOG(jitter->log_depth++); + v = generate(obj, jitter, 0, multi_ok); + FOR_LOG(--jitter->log_depth); + return v; } { @@ -1723,7 +2153,11 @@ static int generate_non_tail(Scheme_Object *obj, mz_jit_state *jitter, int multi CHECK_LIMIT(); PAUSE_JIT_DATA(); + FOR_LOG(jitter->log_depth++); + generate(obj, jitter, 0, multi_ok); + + FOR_LOG(--jitter->log_depth); RESUME_JIT_DATA(); CHECK_LIMIT(); @@ -1799,6 +2233,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m { int pos; START_JIT_DATA(); + LOG_IT(("top-level\n")); /* Load global array: */ pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(obj)); jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); @@ -1817,6 +2252,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m { int pos; START_JIT_DATA(); + LOG_IT(("local\n")); pos = mz_remap(SCHEME_LOCAL_POS(obj)); jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); END_JIT_DATA(2); @@ -1826,6 +2262,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m { int pos; START_JIT_DATA(); + LOG_IT(("unbox local\n")); pos = mz_remap(SCHEME_LOCAL_POS(obj)); jit_ldxi_p(JIT_R0, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); @@ -1842,6 +2279,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m case CASE_LAMBDA_EXPD: { START_JIT_DATA(); + LOG_IT(("case-lambda\n")); /* case-lambda */ generate_case_lambda(SCHEME_IPTR_VAL(obj), jitter); END_JIT_DATA(5); @@ -1854,6 +2292,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int i; START_JIT_DATA(); + LOG_IT(("begin0\n")); + seq = (Scheme_Sequence *)SCHEME_IPTR_VAL(obj); /* Evaluate first expression, and for consistency with bytecode @@ -1925,6 +2365,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int pos, set_undef; START_JIT_DATA(); + LOG_IT(("set!\n")); + p = SCHEME_IPTR_VAL(obj); v = SCHEME_CAR(p); set_undef = SCHEME_TRUEP(v); @@ -1965,6 +2407,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int pos; START_JIT_DATA(); + LOG_IT(("boxenv\n")); + JIT_UPDATE_THREAD_RSPTR_IF_NEEDED(); p = (Scheme_Object *)SCHEME_IPTR_VAL(obj); @@ -1991,6 +2435,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int pos, cnt; START_JIT_DATA(); + LOG_IT(("boxval\n")); + p = (Scheme_Object *)SCHEME_IPTR_VAL(obj); v = SCHEME_CAR(p); pos = SCHEME_INT_VAL(v); @@ -2056,6 +2502,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int i, c, p; START_JIT_DATA(); + LOG_IT(("quote-syntax\n")); + obj = SCHEME_IPTR_VAL(obj); i = SCHEME_INT_VAL(SCHEME_CAR(obj)); c = mz_remap(SCHEME_INT_VAL(SCHEME_CADR(obj))); @@ -2088,6 +2536,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m { Scheme_App_Rec *app = (Scheme_App_Rec *)obj; + LOG_IT(("app %d\n", app->num_args)); + return generate_app(app, NULL, app->num_args, jitter, is_tail, multi_ok); } case scheme_application2_type: @@ -2096,10 +2546,12 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m Scheme_Object *args[2]; int r; - r = generate_inlined_unary(jitter, app, is_tail, multi_ok); + r = generate_inlined_unary(jitter, app, is_tail, multi_ok, NULL, 1); if (r) return r; + LOG_IT(("app 2\n")); + CHECK_LIMIT(); args[0] = app->rator; @@ -2113,10 +2565,12 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m Scheme_Object *args[3]; int r; - r = generate_inlined_binary(jitter, app, is_tail, multi_ok); + r = generate_inlined_binary(jitter, app, is_tail, multi_ok, NULL, 1); if (r) return r; + LOG_IT(("app 3\n")); + CHECK_LIMIT(); args[0] = app->rator; @@ -2131,6 +2585,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int cnt = seq->count, i; START_JIT_DATA(); + LOG_IT(("begin\n")); + for (i = 0; i < cnt - 1; i++) { generate_non_tail(seq->array[i], jitter, 1, 1); CHECK_LIMIT(); @@ -2143,11 +2599,16 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m case scheme_branch_type: { Scheme_Branch_Rec *branch = (Scheme_Branch_Rec *)obj; - jit_insn *ref, *ref2; + jit_insn *refs[3], *ref2; int nsrs, nsrs1, g1, g2, amt; - START_JIT_DATA(); #ifdef MZ_USE_JIT_PPC int then_short_ok, else_short_ok; +#else + int then_short_ok = 1; +#endif + START_JIT_DATA(); + +#ifdef MZ_USE_JIT_PPC /* It's possible that the code for a then or else branch will be so large that we might need a long jump. Conservatively analyze the @@ -2156,16 +2617,26 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m else_short_ok = (is_short(branch->fbranch, 32) > 0); #endif - generate_non_tail(branch->test, jitter, 0, 1); + LOG_IT(("if...\n")); + + refs[1] = NULL; + refs[2] = NULL; + + if (!generate_inlined_test(jitter, branch->test, then_short_ok, refs)) { + CHECK_LIMIT(); + generate_non_tail(branch->test, jitter, 0, 1); + CHECK_LIMIT(); + __START_SHORT_JUMPS__(then_short_ok); + refs[0] = jit_beqi_p(jit_forward(), JIT_R0, scheme_false); + __END_SHORT_JUMPS__(then_short_ok); + } CHECK_LIMIT(); - __START_SHORT_JUMPS__(then_short_ok); - ref = jit_beqi_p(jit_forward(), JIT_R0, scheme_false); - __END_SHORT_JUMPS__(then_short_ok); /* True branch */ mz_runstack_saved(jitter); nsrs = jitter->need_set_rs; PAUSE_JIT_DATA(); + LOG_IT(("...then...\n")); g1 = generate(branch->tbranch, jitter, is_tail, multi_ok); RESUME_JIT_DATA(); CHECK_LIMIT(); @@ -2187,9 +2658,16 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m /* False branch */ mz_runstack_saved(jitter); __START_SHORT_JUMPS__(then_short_ok); - mz_patch_branch(ref); + mz_patch_branch(refs[0]); + if (refs[1]) { + mz_patch_branch(refs[1]); + } + if (refs[2]) { + jit_patch_movi(refs[2], (_jit.x.pc)); + } __END_SHORT_JUMPS__(then_short_ok); PAUSE_JIT_DATA(); + LOG_IT(("...else\n")); g2 = generate(branch->fbranch, jitter, is_tail, multi_ok); RESUME_JIT_DATA(); CHECK_LIMIT(); @@ -2224,6 +2702,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m Scheme_Closure_Data *data = (Scheme_Closure_Data *)obj; START_JIT_DATA(); + LOG_IT(("lambda\n")); + /* Allocate closure */ generate_closure(data, jitter); CHECK_LIMIT(); @@ -2239,6 +2719,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int ab = SCHEME_LET_AUTOBOX(lv), i, pos; START_JIT_DATA(); + LOG_IT(("let...\n")); + if (lv->count == 1) { /* Expect one result: */ generate_non_tail(lv->value, jitter, 0, 1); @@ -2315,6 +2797,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m END_JIT_DATA(14); + LOG_IT(("...in\n")); + return generate(lv->body, jitter, is_tail, multi_ok); } case scheme_let_void_type: @@ -2323,6 +2807,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int c = lv->count; START_JIT_DATA(); + LOG_IT(("letv...\n")); + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(c)); mz_runstack_pushed(jitter, c); @@ -2343,6 +2829,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m END_JIT_DATA(15); + LOG_IT(("...in\n")); + return generate(lv->body, jitter, is_tail, multi_ok); } case scheme_letrec_type: @@ -2351,8 +2839,11 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m int i; START_JIT_DATA(); + LOG_IT(("letrec...\n")); + /* Create unfinished closures */ for (i = 0; i < l->count; i++) { + ((Scheme_Closure_Data *)l->procs[i])->context = (Scheme_Object *)l; generate_closure((Scheme_Closure_Data *)l->procs[i], jitter); CHECK_LIMIT(); jit_stxi_p(WORDS_TO_BYTES(i), JIT_RUNSTACK, JIT_R0); @@ -2370,6 +2861,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m END_JIT_DATA(16); + LOG_IT(("...in\n")); + return generate(l->body, jitter, is_tail, multi_ok); } case scheme_let_one_type: @@ -2377,6 +2870,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m Scheme_Let_One *lv = (Scheme_Let_One *)obj; START_JIT_DATA(); + LOG_IT(("leto...\n")); + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); mz_runstack_pushed(jitter, 1); @@ -2388,6 +2883,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m END_JIT_DATA(17); + LOG_IT(("...in\n")); + return generate(lv->body, jitter, is_tail, multi_ok); } case scheme_with_cont_mark_type: @@ -2395,6 +2892,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m Scheme_With_Continuation_Mark *wcm = (Scheme_With_Continuation_Mark *)obj; START_JIT_DATA(); + LOG_IT(("wcm...\n")); + /* Key: */ generate_non_tail(wcm->key, jitter, 0, 1); CHECK_LIMIT(); @@ -2418,6 +2917,8 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m CHECK_LIMIT(); END_JIT_DATA(18); + + LOG_IT(("...in\n")); return generate(wcm->body, jitter, is_tail, multi_ok); } @@ -2426,13 +2927,15 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m Scheme_Type type = SCHEME_TYPE(obj); START_JIT_DATA(); + LOG_IT(("const\n")); + /* Avoid compiling closures multiple times: */ if (jitter->retain_start) { if (type == scheme_closure_type) { /* Empty closure? If so, compile the code and get a native closure: */ Scheme_Closure *c = (Scheme_Closure *)obj; if (ZERO_SIZED_CLOSUREP(c)) - obj = scheme_jit_closure((Scheme_Object *)c->code); + obj = scheme_jit_closure((Scheme_Object *)c->code, NULL); } else if (type == scheme_case_closure_type) { /* Empty case closure? Turn in into a JITted empty case closure. */ obj = scheme_unclose_case_lambda(obj, 1); @@ -2534,24 +3037,33 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) int in, i; GC_CAN_IGNORE jit_insn *ref, *ref2; - /* *** jump_to_native_code *** */ + /* *** jump_to_native_[arity_]code *** */ /* Called as a function: */ - jump_to_native_code = jit_get_ip().ptr; - jit_prolog(3); - in = jit_arg_p(); - jit_getarg_p(JIT_R0, in); /* closure */ - in = jit_arg_p(); - jit_getarg_i(JIT_R1, in); /* argc */ - in = jit_arg_p(); - jit_getarg_i(JIT_R2, in); /* argv */ - CHECK_LIMIT(); - jit_movr_p(JIT_RUNSTACK, JIT_R2); - jit_movr_p(JIT_RUNSTACK_BASE, JIT_R2); - mz_push_local_p(JIT_RUNSTACK, JIT_LOCAL1); - jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Native_Closure *)0x0)->code); - jit_ldxi_p(JIT_V1, JIT_V1, &((Scheme_Native_Closure_Data *)0x0)->arity_code); - jit_jmpr(JIT_V1); - CHECK_LIMIT(); + for (i = 0; i < 2; i++) { + if (!i) + jump_to_native_code = jit_get_ip().ptr; + else + jump_to_native_arity_code = jit_get_ip().ptr; + jit_prolog(3); + in = jit_arg_p(); + jit_getarg_p(JIT_R0, in); /* closure */ + in = jit_arg_p(); + jit_getarg_i(JIT_R1, in); /* argc */ + in = jit_arg_p(); + jit_getarg_i(JIT_R2, in); /* argv */ + CHECK_LIMIT(); + jit_movr_p(JIT_RUNSTACK, JIT_R2); + jit_movr_p(JIT_RUNSTACK_BASE, JIT_R2); + mz_push_local_p(JIT_RUNSTACK, JIT_LOCAL1); + jit_ldxi_p(JIT_V1, JIT_R0, &((Scheme_Native_Closure *)0x0)->code); + if (!i) { + jit_ldxi_p(JIT_V1, JIT_V1, &((Scheme_Native_Closure_Data *)0x0)->u.tail_code); + } else { + jit_ldxi_p(JIT_V1, JIT_V1, &((Scheme_Native_Closure_Data *)0x0)->arity_code); + } + jit_jmpr(JIT_V1); + CHECK_LIMIT(); + } /* *** check_arity_code *** */ /* Called as a function: */ @@ -2667,53 +3179,68 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) jit_pusharg_p(JIT_RUNSTACK); jit_pusharg_i(JIT_R1); if (!i) { - (void)jit_finish(((Scheme_Primitive_Proc *)scheme_car_prim)->prim_val); + (void)jit_finish(scheme_checked_car); } else { - (void)jit_finish(((Scheme_Primitive_Proc *)scheme_cdr_prim)->prim_val); + (void)jit_finish(scheme_checked_cdr); } CHECK_LIMIT(); } - /* *** call_original_[{reversed,single}_]code *** */ - /* R0 is constant arg, R1 is arg, R2 is code pointer */ - { - int cnt; - for (i = 0; i < 3; i++) { + /* *** call_original_unary_arith_code *** */ + /* R0 is arg, R2 is code pointer, V1 is return address */ + for (i = 0; i < 3; i++) { + int argc, j; + for (j = 0; j < 2; j++) { if (!i) { - call_original_code = jit_get_ip().ptr; - cnt = 2; + if (!j) + call_original_unary_arith_code = jit_get_ip().ptr; + else + call_original_unary_arith_for_branch_code = jit_get_ip().ptr; + argc = 1; } else if (i == 1) { - call_original_reversed_code = jit_get_ip().ptr; - cnt = 2; + if (!j) + call_original_binary_arith_code = jit_get_ip().ptr; + else + call_original_binary_arith_for_branch_code = jit_get_ip().ptr; + argc = 2; } else { - call_original_single_code = jit_get_ip().ptr; - cnt = 1; + if (!j) + call_original_binary_rev_arith_code = jit_get_ip().ptr; + else + call_original_binary_rev_arith_for_branch_code = jit_get_ip().ptr; + argc = 2; } - - mz_prolog(JIT_V1); - jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(cnt)); - if (!i) { + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(argc)); + if (i == 2) { jit_str_p(JIT_RUNSTACK, JIT_R0); jit_stxi_p(WORDS_TO_BYTES(1), JIT_RUNSTACK, JIT_R1); } else if (i == 1) { jit_str_p(JIT_RUNSTACK, JIT_R1); jit_stxi_p(WORDS_TO_BYTES(1), JIT_RUNSTACK, JIT_R0); } else { - jit_str_p(JIT_RUNSTACK, JIT_R1); + jit_str_p(JIT_RUNSTACK, JIT_R0); } - CHECK_LIMIT(); - JIT_UPDATE_THREAD_RSPTR(); - jit_movi_i(JIT_R1, cnt); - CHECK_LIMIT(); + jit_movi_i(JIT_R1, argc); mz_prepare(2); jit_pusharg_p(JIT_RUNSTACK); jit_pusharg_p(JIT_R1); (void)mz_finishr(JIT_R2); CHECK_LIMIT(); jit_retval(JIT_R0); - jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(cnt)); + jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(argc)); JIT_UPDATE_THREAD_RSPTR(); - mz_epilog(JIT_V1); + if (!j) { + jit_jmpr(JIT_V1); + } else { + /* In for_branch mode, V1 is target for false, LOCAL2 is target for true */ + mz_pop_local_p(JIT_R1, JIT_LOCAL2); + __START_SHORT_JUMPS__(1); + ref = jit_beqi_p(jit_forward(), JIT_R0, scheme_true); + jit_jmpr(JIT_V1); + mz_patch_branch(ref); + jit_jmpr(JIT_R1); + __END_SHORT_JUMPS__(1); + } CHECK_LIMIT(); } } @@ -2824,6 +3351,112 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) jit_jmpr(JIT_R2); CHECK_LIMIT(); + /* *** vector_ref_[check_index_]code *** */ + /* R0 is vector, R1 is index (Scheme number in check-index mode), + V1 is vector offset in non-check-index mode */ + for (i = 0; i < 2; i++) { + jit_insn *ref, *reffail; + + if (!i) { + vector_ref_code = jit_get_ip().ptr; + } else { + vector_ref_check_index_code = jit_get_ip().ptr; + } + + __START_SHORT_JUMPS__(1); + + mz_prolog(JIT_R2); + + ref = jit_bmci_ul(jit_forward(), JIT_R0, 0x1); + CHECK_LIMIT(); + + reffail = _jit.x.pc; + if (!i) { + jit_lshi_ul(JIT_R1, JIT_R1, 1); + jit_ori_ul(JIT_R1, JIT_R1, 0x1); + } + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(2)); + jit_str_p(JIT_RUNSTACK, JIT_R0); + jit_stxi_p(WORDS_TO_BYTES(1), JIT_RUNSTACK, JIT_R1); + jit_movi_i(JIT_R1, 2); + JIT_UPDATE_THREAD_RSPTR(); + jit_prepare(2); + jit_pusharg_p(JIT_RUNSTACK); + jit_pusharg_i(JIT_R1); + (void)jit_finish(scheme_checked_vector_ref); + CHECK_LIMIT(); + + mz_patch_branch(ref); + if (i) { + (void)jit_bmci_ul(reffail, JIT_R1, 0x1); + (void)jit_blei_l(reffail, JIT_R1, 0x0); + } + jit_ldxi_s(JIT_R2, JIT_R0, &((Scheme_Object *)0x0)->type); + (void)jit_bnei_p(reffail, JIT_R2, scheme_vector_type); + jit_ldxi_i(JIT_R2, JIT_R0, &SCHEME_VEC_SIZE(0x0)); + if (i) { + jit_rshi_ul(JIT_R1, JIT_R1, 1); + } + (void)jit_bler_ul(reffail, JIT_R2, JIT_R1); + if (i) { + jit_lshi_ul(JIT_V1, JIT_R1, JIT_LOG_WORD_SIZE); + jit_addi_p(JIT_V1, JIT_V1, ((int)&SCHEME_VEC_ELS(0x0))); + } + jit_ldxr_p(JIT_R0, JIT_R0, JIT_V1); + mz_epilog(JIT_R2); + CHECK_LIMIT(); + + __END_SHORT_JUMPS__(1); + } + + /* *** syntax_ecode *** */ + /* R0 is (potential) syntax object */ + { + jit_insn *ref, *reffail; + syntax_e_code = jit_get_ip().ptr; + __START_SHORT_JUMPS__(1); + mz_prolog(JIT_R2); + + ref = jit_bmci_ul(jit_forward(), JIT_R0, 0x1); + + reffail = _jit.x.pc; + jit_subi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + jit_str_p(JIT_RUNSTACK, JIT_R0); + jit_movi_i(JIT_R1, 1); + JIT_UPDATE_THREAD_RSPTR(); + CHECK_LIMIT(); + jit_prepare(2); + jit_pusharg_p(JIT_RUNSTACK); + jit_pusharg_i(JIT_R1); + (void)jit_finish(scheme_checked_syntax_e); + jit_retval(JIT_R0); + jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + mz_epilog(JIT_R2); + CHECK_LIMIT(); + + /* It's not a fixnum... */ + mz_patch_branch(ref); + jit_ldxi_s(JIT_R2, JIT_R0, &((Scheme_Object *)0x0)->type); + (void)jit_bnei_p(reffail, JIT_R2, scheme_stx_type); + + /* It's a syntax object... needs to propagate? */ + jit_ldxi_l(JIT_R2, JIT_R0, &((Scheme_Stx *)0x0)->u.lazy_prefix); + ref = jit_beqi_l(jit_forward(), JIT_R2, 0x0); + CHECK_LIMIT(); + + /* Maybe needs to propagate; check STX_SUBSTX_FLAG flag */ + jit_ldxi_s(JIT_R2, JIT_R0, &MZ_OPT_HASH_KEY(&((Scheme_Stx *)0x0)->iso)); + (void)jit_bmsi_ul(reffail, JIT_R2, STX_SUBSTX_FLAG); + + /* No propagations. Extract value. */ + mz_patch_branch(ref); + jit_ldxi_p(JIT_R0, JIT_R0, &((Scheme_Stx *)0x0)->val); + + mz_epilog(JIT_R2); + CHECK_LIMIT(); + __END_SHORT_JUMPS__(1); + } + return 1; } @@ -2921,6 +3554,26 @@ static int do_generate_closure(mz_jit_state *jitter, void *_data) CHECK_LIMIT(); } } + + /* If we have a letrec context, record arities */ + if (data->context && SAME_TYPE(SCHEME_TYPE(data->context), scheme_letrec_type)) { + Scheme_Letrec *lr = (Scheme_Letrec *)data->context; + int pos; + for (i = data->closure_size; i--; ) { + pos = data->closure_map[i]; + if (pos < lr->count) { + Scheme_Closure_Data *data2 = (Scheme_Closure_Data *)lr->procs[pos]; + mz_runstack_closure_pushed(jitter, (data2->num_params + - ((SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_HAS_REST) + ? 1 + : 0))); + } else + mz_runstack_pushed(jitter, 1); + } + } + + LOG_IT(("PROC: %s\n", (data->name ? scheme_format_utf8("~s", 2, 1, &data->name, NULL) : "???"))); + FOR_LOG(jitter->log_depth++); /* Generate code for the body: */ jitter->need_set_rs = 1; @@ -2994,6 +3647,7 @@ static void on_demand_generate_top(Scheme_Native_Closure_Data *ndata) if (ndata->max_let_depth & 0x1) { data->code = NULL; } + data->context = NULL; if (ndata->max_let_depth & 0x2) { Scheme_Native_Closure_Data *case_lam; case_lam = ((Scheme_Native_Closure_Data_Plus_Case *)ndata)->case_lam; @@ -3536,10 +4190,6 @@ Scheme_Object *scheme_native_stack_trace(void) --stack_cache_stack_pos; } - if (((void **)p)[RETURN_ADDRESS_OFFSET] == stack_cache_pop_code) { - *(long *)0x0 = 1; - } - pos = ++stack_cache_stack_pos; stack_cache_stack[pos].orig_return_address = ((void **)p)[RETURN_ADDRESS_OFFSET]; stack_cache_stack[pos].stack_frame = (void *)(((void **)p) + RETURN_ADDRESS_OFFSET); diff --git a/src/mzscheme/src/list.c b/src/mzscheme/src/list.c index 0976f5dc5b..38414e96c3 100644 --- a/src/mzscheme/src/list.c +++ b/src/mzscheme/src/list.c @@ -26,16 +26,10 @@ /* globals */ Scheme_Object scheme_null[1]; -Scheme_Object *scheme_null_p_prim; -Scheme_Object *scheme_pair_p_prim; -Scheme_Object *scheme_car_prim; -Scheme_Object *scheme_cdr_prim; /* locals */ static Scheme_Object *pair_p_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *cons_prim (int argc, Scheme_Object *argv[]); -static Scheme_Object *car_prim (int argc, Scheme_Object *argv[]); -static Scheme_Object *cdr_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *set_car_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *set_cdr_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *cons_immutable (int argc, Scheme_Object *argv[]); @@ -126,28 +120,29 @@ static Scheme_Object *weak_symbol, *equal_symbol; void scheme_init_list (Scheme_Env *env) { - REGISTER_SO(scheme_null_p_prim); - REGISTER_SO(scheme_pair_p_prim); - REGISTER_SO(scheme_car_prim); - REGISTER_SO(scheme_cdr_prim); - + Scheme_Object *p; + scheme_null->type = scheme_null_type; scheme_add_global_constant ("null", scheme_null, env); - scheme_pair_p_prim = scheme_make_folding_prim(pair_p_prim, "pair?", 1, 1, 1); - scheme_add_global_constant ("pair?", scheme_pair_p_prim, env); + p = scheme_make_folding_prim(pair_p_prim, "pair?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant ("pair?", p, env); scheme_add_global_constant ("cons", scheme_make_prim_w_arity(cons_prim, "cons", 2, 2), env); - scheme_car_prim = scheme_make_noncm_prim(car_prim, "car", 1, 1); - scheme_add_global_constant ("car", scheme_car_prim, env); - scheme_cdr_prim = scheme_make_noncm_prim(cdr_prim, "cdr", 1, 1); - scheme_add_global_constant ("cdr", scheme_cdr_prim, env); + p = scheme_make_noncm_prim(scheme_checked_car, "car", 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant ("car", p, env); + + p = scheme_make_noncm_prim(scheme_checked_cdr, "cdr", 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant ("cdr", p, env); scheme_add_global_constant ("set-car!", scheme_make_noncm_prim(set_car_prim, @@ -165,8 +160,9 @@ scheme_init_list (Scheme_Env *env) 2, 2), env); - scheme_null_p_prim = scheme_make_folding_prim(null_p_prim, "null?", 1, 1, 1); - scheme_add_global_constant ("null?", scheme_null_p_prim, env); + p = scheme_make_folding_prim(null_p_prim, "null?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant ("null?", p, env); scheme_add_global_constant ("list?", scheme_make_noncm_prim(list_p_prim, @@ -733,16 +729,16 @@ cons_immutable (int argc, Scheme_Object *argv[]) return (cons); } -static Scheme_Object * -car_prim (int argc, Scheme_Object *argv[]) +Scheme_Object * +scheme_checked_car (int argc, Scheme_Object *argv[]) { if (!SCHEME_PAIRP(argv[0])) scheme_wrong_type("car", "pair", 0, argc, argv); return (SCHEME_CAR (argv[0])); } -static Scheme_Object * -cdr_prim (int argc, Scheme_Object *argv[]) +Scheme_Object * +scheme_checked_cdr (int argc, Scheme_Object *argv[]) { if (!SCHEME_PAIRP(argv[0])) scheme_wrong_type("cdr", "pair", 0, argc, argv); diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index 4e997a39a3..81737ce65d 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -1475,6 +1475,7 @@ int thread_val_MARK(void *p) { gcMARK(pr->runstack_saved); gcMARK(pr->runstack_owner); gcMARK(pr->runstack_swapped); + pr->spare_runstack = NULL; /* just in case */ gcMARK(pr->cont_mark_stack_segments); gcMARK(pr->cont_mark_stack_owner); @@ -1561,6 +1562,7 @@ int thread_val_FIXUP(void *p) { gcFIXUP(pr->runstack_saved); gcFIXUP(pr->runstack_owner); gcFIXUP(pr->runstack_swapped); + pr->spare_runstack = NULL; /* just in case */ gcFIXUP(pr->cont_mark_stack_segments); gcFIXUP(pr->cont_mark_stack_owner); diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index 6f6b83c8bf..d8d8956a20 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -570,6 +570,7 @@ thread_val { gcMARK(pr->runstack_saved); gcMARK(pr->runstack_owner); gcMARK(pr->runstack_swapped); + pr->spare_runstack = NULL; /* just in case */ gcMARK(pr->cont_mark_stack_segments); gcMARK(pr->cont_mark_stack_owner); diff --git a/src/mzscheme/src/numarith.c b/src/mzscheme/src/numarith.c index 55d687f291..c235504420 100644 --- a/src/mzscheme/src/numarith.c +++ b/src/mzscheme/src/numarith.c @@ -26,11 +26,6 @@ #include "nummacs.h" #include -Scheme_Object *scheme_add1_prim; -Scheme_Object *scheme_sub1_prim; -Scheme_Object *scheme_plus_prim; -Scheme_Object *scheme_minus_prim; - static Scheme_Object *plus (int argc, Scheme_Object *argv[]); static Scheme_Object *minus (int argc, Scheme_Object *argv[]); static Scheme_Object *mult (int argc, Scheme_Object *argv[]); @@ -43,22 +38,23 @@ static Scheme_Object *quotient_remainder (int argc, Scheme_Object *argv[]); void scheme_init_numarith(Scheme_Env *env) { - REGISTER_SO(scheme_add1_prim); - REGISTER_SO(scheme_sub1_prim); - REGISTER_SO(scheme_plus_prim); - REGISTER_SO(scheme_minus_prim); + Scheme_Object *p; - scheme_add1_prim = scheme_make_folding_prim(scheme_add1, "add1", 1, 1, 1); - scheme_add_global_constant("add1", scheme_add1_prim, env); + p = scheme_make_folding_prim(scheme_add1, "add1", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("add1", p, env); - scheme_sub1_prim = scheme_make_folding_prim(scheme_sub1, "sub1", 1, 1, 1); - scheme_add_global_constant("sub1", scheme_sub1_prim, env); + p = scheme_make_folding_prim(scheme_sub1, "sub1", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("sub1", p, env); - scheme_plus_prim = scheme_make_folding_prim(plus, "+", 0, -1, 1); - scheme_add_global_constant("+", scheme_plus_prim, env); + p = scheme_make_folding_prim(plus, "+", 0, -1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant("+", p, env); - scheme_minus_prim = scheme_make_folding_prim(minus, "-", 1, -1, 1); - scheme_add_global_constant("-", scheme_minus_prim, env); + p = scheme_make_folding_prim(minus, "-", 1, -1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant("-", p, env); scheme_add_global_constant("*", scheme_make_folding_prim(mult, diff --git a/src/mzscheme/src/numcomp.c b/src/mzscheme/src/numcomp.c index f96ff9c8ad..9d4cc452f1 100644 --- a/src/mzscheme/src/numcomp.c +++ b/src/mzscheme/src/numcomp.c @@ -38,46 +38,40 @@ static Scheme_Object *sch_min (int argc, Scheme_Object *argv[]); void scheme_init_numcomp(Scheme_Env *env) { - scheme_add_global_constant("=", - scheme_make_folding_prim(eq, - "=", - 2, -1, 1), - env); - scheme_add_global_constant("<", - scheme_make_folding_prim(lt, - "<", - 2, -1, 1), - env); - scheme_add_global_constant(">", - scheme_make_folding_prim(gt, - ">", - 2, -1, 1), - env); - scheme_add_global_constant("<=", - scheme_make_folding_prim(lt_eq, - "<=", - 2, -1, 1), - env); - scheme_add_global_constant(">=", - scheme_make_folding_prim(gt_eq, - ">=", - 2, -1, 1), - env); - scheme_add_global_constant("zero?", - scheme_make_folding_prim(scheme_zero_p, - "zero?", - 1, 1, 1), - env); - scheme_add_global_constant("positive?", - scheme_make_folding_prim(scheme_positive_p, - "positive?", - 1, 1, 1), - env); - scheme_add_global_constant("negative?", - scheme_make_folding_prim(scheme_negative_p, - "negative?", - 1, 1, 1), - env); + Scheme_Object *p; + + p = scheme_make_folding_prim(eq, "=", 2, -1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant("=", p, env); + + p = scheme_make_folding_prim(lt, "<", 2, -1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant("<", p, env); + + p = scheme_make_folding_prim(gt, ">", 2, -1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant(">", p, env); + + p = scheme_make_folding_prim(lt_eq, "<=", 2, -1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant("<=", p, env); + + p = scheme_make_folding_prim(gt_eq, ">=", 2, -1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; + scheme_add_global_constant(">=", p, env); + + p = scheme_make_folding_prim(scheme_zero_p, "zero?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("zero?", p, env); + + p = scheme_make_folding_prim(scheme_positive_p, "positive?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("positive?", p, env); + + p = scheme_make_folding_prim(scheme_negative_p, "negative?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("negative?", p, env); + scheme_add_global_constant("max", scheme_make_folding_prim(sch_max, "max", diff --git a/src/mzscheme/src/print.c b/src/mzscheme/src/print.c index 39fd759bb1..bd22d4d5a0 100644 --- a/src/mzscheme/src/print.c +++ b/src/mzscheme/src/print.c @@ -1653,8 +1653,7 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht, -1, pp); } else { print_utf8_string(pp, "#<", 0, 2); - print_string_in_angle(pp, ((Scheme_Closed_Primitive_Proc *)obj)->name, - SCHEME_GENERICP(obj) ? "" : "primitive:", -1); + print_string_in_angle(pp, ((Scheme_Closed_Primitive_Proc *)obj)->name, "primitive:", -1); PRINTADDRESS(pp, obj); print_utf8_string(pp, ">", 0, 1); } diff --git a/src/mzscheme/src/schemef.h b/src/mzscheme/src/schemef.h index 525f41b540..dec9fbf89b 100644 --- a/src/mzscheme/src/schemef.h +++ b/src/mzscheme/src/schemef.h @@ -30,7 +30,7 @@ MZ_EXTERN void scheme_init_jmpup_buf(Scheme_Jumpup_Buf *b); MZ_EXTERN int scheme_setjmpup_relative(Scheme_Jumpup_Buf *b, void *base, - void * volatile start, Scheme_Jumpup_Buf *cont); + void * volatile start, struct Scheme_Cont *cont); MZ_EXTERN void scheme_longjmpup(Scheme_Jumpup_Buf *b); MZ_EXTERN void scheme_reset_jmpup_buf(Scheme_Jumpup_Buf *b); diff --git a/src/mzscheme/src/schemex.h b/src/mzscheme/src/schemex.h index 49c506e1cb..8265901d0a 100644 --- a/src/mzscheme/src/schemex.h +++ b/src/mzscheme/src/schemex.h @@ -28,7 +28,7 @@ typedef struct { /*========================================================================*/ void (*scheme_init_jmpup_buf)(Scheme_Jumpup_Buf *b); int (*scheme_setjmpup_relative)(Scheme_Jumpup_Buf *b, void *base, - void * volatile start, Scheme_Jumpup_Buf *cont); + void * volatile start, struct Scheme_Cont *cont); void (*scheme_longjmpup)(Scheme_Jumpup_Buf *b); void (*scheme_reset_jmpup_buf)(Scheme_Jumpup_Buf *b); #ifdef USE_MZ_SETJMP diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 7cb7d22634..f2568723b0 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -216,20 +216,11 @@ void scheme_do_add_global_symbol(Scheme_Env *env, Scheme_Object *sym, extern Scheme_Object *scheme_values_func; extern Scheme_Object *scheme_void_proc; -extern Scheme_Object *scheme_not_prim; -extern Scheme_Object *scheme_eq_prim; -extern Scheme_Object *scheme_null_p_prim; -extern Scheme_Object *scheme_pair_p_prim; -extern Scheme_Object *scheme_car_prim; -extern Scheme_Object *scheme_cdr_prim; extern Scheme_Object *scheme_define_values_syntax, *scheme_define_syntaxes_syntax; extern Scheme_Object *scheme_lambda_syntax; extern Scheme_Object *scheme_begin_syntax; -extern Scheme_Object *scheme_add1_prim; -extern Scheme_Object *scheme_sub1_prim; -extern Scheme_Object *scheme_plus_prim; -extern Scheme_Object *scheme_minus_prim; +extern Scheme_Object *scheme_not_prim; extern Scheme_Object *scheme_def_exit_proc; @@ -916,6 +907,7 @@ typedef struct Scheme_Cont { Scheme_Cont_Mark *cont_mark_stack_copied; Scheme_Thread **cont_mark_stack_owner; Scheme_Cont_Mark **orig_mark_segments; + long cont_mark_shareable, cont_mark_offset; void *stack_start; void *o_start; Scheme_Config *init_config; @@ -1415,6 +1407,9 @@ Scheme_Object *_scheme_tail_apply_from_native(Scheme_Object *rator, int argc, Scheme_Object **argv); +Scheme_Object *scheme_force_value_same_mark(Scheme_Object *); +Scheme_Object *scheme_force_one_value_same_mark(Scheme_Object *); + void scheme_flush_stack_cache(); /*========================================================================*/ @@ -1535,6 +1530,7 @@ typedef struct Scheme_Closure_Data Scheme_Object *name; #ifdef MZ_USE_JIT struct Scheme_Native_Closure_Data *native_code; /* generated by lightning */ + Scheme_Object *context; /* e.g., a letrec that binds the closure */ #endif } Scheme_Closure_Data; @@ -1777,7 +1773,7 @@ Scheme_App_Rec *scheme_malloc_application(int n); void scheme_finish_application(Scheme_App_Rec *app); Scheme_Object *scheme_jit_expr(Scheme_Object *); -Scheme_Object *scheme_jit_closure(Scheme_Object *); +Scheme_Object *scheme_jit_closure(Scheme_Object *, Scheme_Letrec *lr); #define SCHEME_SYNTAX(obj) SCHEME_PTR1_VAL(obj) #define SCHEME_SYNTAX_EXP(obj) SCHEME_PTR2_VAL(obj) @@ -2361,6 +2357,11 @@ void scheme_count_generic(Scheme_Object *o, long *s, long *e, Scheme_Hash_Table /* miscellaneous */ /*========================================================================*/ +Scheme_Object *scheme_checked_car(int argc, Scheme_Object **argv); +Scheme_Object *scheme_checked_cdr(int argc, Scheme_Object **argv); +Scheme_Object *scheme_checked_vector_ref(int argc, Scheme_Object **argv); +Scheme_Object *scheme_checked_syntax_e(int argc, Scheme_Object **argv); + void scheme_set_root_param(int p, Scheme_Object *v); Scheme_Object *scheme_intern_exact_parallel_symbol(const char *name, unsigned int len); diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index d6d6cd25b7..496260877d 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -9,6 +9,6 @@ #define MZSCHEME_VERSION_MAJOR 301 -#define MZSCHEME_VERSION_MINOR 4 +#define MZSCHEME_VERSION_MINOR 5 -#define MZSCHEME_VERSION "301.4" _MZ_SPECIAL_TAG +#define MZSCHEME_VERSION "301.5" _MZ_SPECIAL_TAG diff --git a/src/mzscheme/src/setjmpup.c b/src/mzscheme/src/setjmpup.c index 9b56a2d4a3..efc45072a0 100644 --- a/src/mzscheme/src/setjmpup.c +++ b/src/mzscheme/src/setjmpup.c @@ -339,6 +339,8 @@ void scheme_copy_stack(Scheme_Jumpup_Buf *b, void *base, void *start GC_VAR_STAC static void uncopy_stack(int ok, Scheme_Jumpup_Buf *b, long *prev) { Scheme_Jumpup_Buf *c; + long top_delta = 0, bottom_delta = 0, size; + void *cfrom, *cto; if (!ok) { unsigned long z; @@ -361,10 +363,26 @@ static void uncopy_stack(int ok, Scheme_Jumpup_Buf *b, long *prev) START_XFORM_SKIP; c = b; while (c) { - memcpy(c->stack_from, - get_copy(c->stack_copy), - c->stack_size); - c = c->cont; + size = c->stack_size - top_delta; + cto = (char *)c->stack_from + bottom_delta; + cfrom = (char *)get_copy(c->stack_copy) + bottom_delta; + + memcpy(cto, cfrom, size); + + if (c->cont) { + if (scheme_stack_grows_up) { + top_delta = ((unsigned long)c->stack_from + - ((unsigned long)c->cont->buf.stack_from + + c->cont->buf.stack_size)); + } else { + bottom_delta = ((unsigned long)c->stack_from + + c->stack_size + - (unsigned long)c->cont->buf.stack_from); + top_delta = bottom_delta; + } + c = &c->cont->buf; + } else + c = NULL; } END_XFORM_SKIP; @@ -377,8 +395,58 @@ static void uncopy_stack(int ok, Scheme_Jumpup_Buf *b, long *prev) scheme_longjmp(b->buf, 1); } +#ifdef MZ_PRECISE_GC +START_XFORM_SKIP; +#endif + +static long find_same(char *p, char *low, long max_size) +{ + long cnt = 0; + + /* We assume a max possible amount of the current stack that should + not be shared with the saved stack. This is ok (or not) in the same + sense as assuming that STACK_SAFETY_MARGIN is enough wiggle room to + prevent stack overflow. */ +# define MAX_STACK_DIFF 4096 + + if (max_size > MAX_STACK_DIFF) { + cnt = max_size - MAX_STACK_DIFF; + max_size = MAX_STACK_DIFF; + } + + if (scheme_stack_grows_up) { + while (max_size--) { + if (p[cnt] != low[cnt]) + break; + cnt++; + } + } else { + while (max_size--) { + if (p[max_size] != low[max_size]) + break; + cnt++; + } + } + + return cnt; +} + +#ifdef MZ_PRECISE_GC +static void *align_var_stack(void **vs, void *s) +{ + while (STK_COMP((unsigned long)vs, (unsigned long)s)) { + vs = (void **)(*vs); + } + return (void *)vs; +} +#define ALIGN_VAR_STACK(vs, s) s = align_var_stack(vs, s) +END_XFORM_SKIP; +#else +# define ALIGN_VAR_STACK(vs, s) /* empty */ +#endif + int scheme_setjmpup_relative(Scheme_Jumpup_Buf *b, void *base, - void * volatile start, Scheme_Jumpup_Buf *c) + void * volatile start, struct Scheme_Cont *c) { int local; long disguised_b; @@ -394,12 +462,32 @@ int scheme_setjmpup_relative(Scheme_Jumpup_Buf *b, void *base, if (!(local = scheme_setjmp(b->buf))) { if (c) { + /* We'd like to re-use the stack copied for a continuation + that encloses the current one --- but we dont' know exactly + how much the stack is supposed to be shared, since call/cc + is implemented with a trampoline; certainly, the shallowest + bit of the old continuation is not right for this one. So, + we just start from the deepest part of the stack and find + how many bytes match (using find_same) + For chains of continuations C1 < C2 < C3, we assume that the + discovered-safe part of C1 to be used for C2 is also valid + for C3, so checking for C3 starts with the fresh part in C2, + and that's where asymptotic benefits start to kick in. + Unfortunately, I can't quite convince myself that this + assumption is definitely correct. I think it's likely correct, + but watch out. */ + long same_size; + START_XFORM_SKIP; + same_size = find_same(get_copy(c->buf.stack_copy), c->buf.stack_from, c->buf.stack_size); b->cont = c; if (scheme_stack_grows_up) { - start = (void *)((char *)c->stack_from + c->stack_size); + start = (void *)((char *)c->buf.stack_from + same_size); } else { - start = c->stack_from; + start = (void *)((char *)c->buf.stack_from + (c->buf.stack_size - same_size)); } + /* In 3m-mode, we need to copy on a var-stack boundary: */ + ALIGN_VAR_STACK(__gc_var_stack__, start); + END_XFORM_SKIP; } else b->cont = NULL; diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index f87da8285b..63304ecc0e 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -33,7 +33,6 @@ static Scheme_Object *graph_syntax_p(int argc, Scheme_Object **argv); static Scheme_Object *syntax_to_datum(int argc, Scheme_Object **argv); static Scheme_Object *datum_to_syntax(int argc, Scheme_Object **argv); -static Scheme_Object *syntax_e(int argc, Scheme_Object **argv); static Scheme_Object *syntax_line(int argc, Scheme_Object **argv); static Scheme_Object *syntax_col(int argc, Scheme_Object **argv); static Scheme_Object *syntax_pos(int argc, Scheme_Object **argv); @@ -317,15 +316,16 @@ static void DO_WRAP_POS_REVINIT(Wrap_Pos *w, Scheme_Object *k) void scheme_init_stx(Scheme_Env *env) { + Scheme_Object *p; + #ifdef MZ_PRECISE_GC register_traversers(); #endif - scheme_add_global_constant("syntax?", - scheme_make_folding_prim(syntax_p, - "syntax?", - 1, 1, 1), - env); + p = scheme_make_folding_prim(syntax_p, "syntax?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("syntax?", p, env); + scheme_add_global_constant("syntax-graph?", scheme_make_folding_prim(graph_syntax_p, "syntax-graph?", @@ -346,11 +346,11 @@ void scheme_init_stx(Scheme_Env *env) scheme_datum_to_syntax_proc, env); - scheme_add_global_constant("syntax-e", - scheme_make_folding_prim(syntax_e, - "syntax-e", - 1, 1, 1), - env); + + p = scheme_make_folding_prim(scheme_checked_syntax_e, "syntax-e", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("syntax-e", p, env); + scheme_add_global_constant("syntax-line", scheme_make_folding_prim(syntax_line, "syntax-line", @@ -1957,6 +1957,8 @@ Scheme_Object *scheme_stx_content(Scheme_Object *o) { Scheme_Stx *stx = (Scheme_Stx *)o; + /* The fast-past tests are duplicated in jit.c. */ + if ((STX_KEY(stx) & STX_SUBSTX_FLAG) && stx->u.lazy_prefix) { Scheme_Object *v = stx->val, *result; Scheme_Object *here_wraps; @@ -4947,7 +4949,7 @@ static Scheme_Object *datum_to_syntax(int argc, Scheme_Object **argv) } -static Scheme_Object *syntax_e(int argc, Scheme_Object **argv) +Scheme_Object *scheme_checked_syntax_e(int argc, Scheme_Object **argv) { if (!SCHEME_STXP(argv[0])) scheme_wrong_type("syntax-e", "syntax", 0, argc, argv); diff --git a/src/mzscheme/src/symbol.c b/src/mzscheme/src/symbol.c index 1006c1fbd2..9b9ae74e39 100644 --- a/src/mzscheme/src/symbol.c +++ b/src/mzscheme/src/symbol.c @@ -280,11 +280,12 @@ scheme_init_symbol_type (Scheme_Env *env) void scheme_init_symbol (Scheme_Env *env) { - scheme_add_global_constant("symbol?", - scheme_make_folding_prim(symbol_p_prim, - "symbol?", - 1, 1, 1), - env); + Scheme_Object *p; + + p = scheme_make_folding_prim(symbol_p_prim, "symbol?", 1, 1, 1); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED; + scheme_add_global_constant("symbol?", p, env); + scheme_add_global_constant("string->symbol", scheme_make_noncm_prim(string_to_symbol_prim, "string->symbol", diff --git a/src/mzscheme/src/vector.c b/src/mzscheme/src/vector.c index 4d4e5850c9..9057e1fe31 100644 --- a/src/mzscheme/src/vector.c +++ b/src/mzscheme/src/vector.c @@ -30,7 +30,6 @@ static Scheme_Object *make_vector (int argc, Scheme_Object *argv[]); static Scheme_Object *vector (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_immutable (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_length (int argc, Scheme_Object *argv[]); -static Scheme_Object *vector_ref (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_set (int argc, Scheme_Object *argv[]); static Scheme_Object *vector_to_list (int argc, Scheme_Object *argv[]); static Scheme_Object *list_to_vector (int argc, Scheme_Object *argv[]); @@ -42,6 +41,8 @@ static Scheme_Object *zero_length_vector; void scheme_init_vector (Scheme_Env *env) { + Scheme_Object *p; + REGISTER_SO(zero_length_vector); zero_length_vector = (Scheme_Object *)scheme_malloc_tagged(sizeof(Scheme_Vector) - sizeof(Scheme_Object *)); @@ -73,11 +74,15 @@ scheme_init_vector (Scheme_Env *env) "vector-length", 1, 1, 1), env); + + p = scheme_make_noncm_prim(scheme_checked_vector_ref, + "vector-ref", + 2, 2); + SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_BINARY_INLINED; scheme_add_global_constant("vector-ref", - scheme_make_noncm_prim(vector_ref, - "vector-ref", - 2, 2), + p, env); + scheme_add_global_constant("vector-set!", scheme_make_noncm_prim(vector_set, "vector-set!", @@ -229,8 +234,8 @@ bad_index(char *name, Scheme_Object *i, Scheme_Object *vec) return NULL; } -static Scheme_Object * -vector_ref (int argc, Scheme_Object *argv[]) +Scheme_Object * +scheme_checked_vector_ref (int argc, Scheme_Object *argv[]) { long i, len; diff --git a/src/wxcommon/PSDC.cxx b/src/wxcommon/PSDC.cxx index 3bb0b10d3c..bde8779a41 100644 --- a/src/wxcommon/PSDC.cxx +++ b/src/wxcommon/PSDC.cxx @@ -2016,6 +2016,11 @@ double wxPostScriptDC::DeviceToLogicalXRel(int x) return x / user_scale_x; } +double wxPostScriptDC::UnscrolledDeviceToLogicalX(int x) +{ + return DeviceToLogicalX(x); +} + double wxPostScriptDC::DeviceToLogicalY(int y) { double y2 = -(y - paper_h); @@ -2027,6 +2032,11 @@ double wxPostScriptDC::DeviceToLogicalYRel(int y) return y / user_scale_y; } +double wxPostScriptDC::UnscrolledDeviceToLogicalY(int y) +{ + return DeviceToLogicalY(y); +} + int wxPostScriptDC::LogicalToDeviceX(double x) { return (int)floor(XSCALE(x)); @@ -2037,6 +2047,11 @@ int wxPostScriptDC::LogicalToDeviceXRel(double x) return (int)floor(XSCALEREL(x)); } +int wxPostScriptDC::LogicalToUnscrolledDeviceX(double x) +{ + return LogicalToDeviceX(x); +} + int wxPostScriptDC::LogicalToDeviceY(double y) { return (int)floor(YSCALE(y)); @@ -2047,6 +2062,11 @@ int wxPostScriptDC::LogicalToDeviceYRel(double y) return (int)floor(YSCALEREL(y)); } +int wxPostScriptDC::LogicalToUnscrolledDeviceY(double y) +{ + return LogicalToDeviceY(y); +} + double wxPostScriptDC::FLogicalToDeviceX(double x) { return XSCALE(x); @@ -2057,6 +2077,11 @@ double wxPostScriptDC::FLogicalToDeviceXRel(double x) return XSCALEREL(x); } +double wxPostScriptDC::FLogicalToUnscrolledDeviceX(double x) +{ + return FLogicalToDeviceX(x); +} + double wxPostScriptDC::FLogicalToDeviceY(double y) { return YSCALE(y); @@ -2067,6 +2092,11 @@ double wxPostScriptDC::FLogicalToDeviceYRel(double y) return YSCALEREL(y); } +double wxPostScriptDC::FLogicalToUnscrolledDeviceY(double y) +{ + return FLogicalToDeviceY(y); +} + double wxPostScriptDC::FsLogicalToDeviceX(double x, double device_origin_x, double user_scale_x) { /* Intentional capture of arguments by macro! */ diff --git a/src/wxcommon/PSDC.h b/src/wxcommon/PSDC.h index 6d1a177271..713b9188fb 100644 --- a/src/wxcommon/PSDC.h +++ b/src/wxcommon/PSDC.h @@ -136,14 +136,20 @@ class wxPostScriptDC: public wxDC double DeviceToLogicalY(int y); double DeviceToLogicalXRel(int x); double DeviceToLogicalYRel(int y); + double UnscrolledDeviceToLogicalX(int x); + double UnscrolledDeviceToLogicalY(int y); int LogicalToDeviceX(double x); int LogicalToDeviceY(double y); int LogicalToDeviceXRel(double x); int LogicalToDeviceYRel(double y); + int LogicalToUnscrolledDeviceX(double x); + int LogicalToUnscrolledDeviceY(double y); double FLogicalToDeviceX(double x); double FLogicalToDeviceY(double y); double FLogicalToDeviceXRel(double x); double FLogicalToDeviceYRel(double y); + double FLogicalToUnscrolledDeviceX(double x); + double FLogicalToUnscrolledDeviceY(double y); double FsLogicalToDeviceX(double x, double o, double s); double FsLogicalToDeviceY(double y, double o, double s); diff --git a/src/wxcommon/Region.cxx b/src/wxcommon/Region.cxx index 858b4c389c..f21463051b 100644 --- a/src/wxcommon/Region.cxx +++ b/src/wxcommon/Region.cxx @@ -101,11 +101,11 @@ void wxRegion::SetRectangle(double x, double y, double width, double height) xw = x + width; yh = y + height; - x = dc->FLogicalToDeviceX(x); - y = dc->FLogicalToDeviceY(y); - xw = dc->FLogicalToDeviceX(xw); + x = dc->FLogicalToUnscrolledDeviceX(x); + y = dc->FLogicalToUnscrolledDeviceY(y); + xw = dc->FLogicalToUnscrolledDeviceX(xw); width = xw - x; - yh = dc->FLogicalToDeviceY(yh); + yh = dc->FLogicalToUnscrolledDeviceY(yh); height = yh - y; if (is_ps) { @@ -198,10 +198,10 @@ void wxRegion::SetRoundedRectangle(double x, double y, double width, double heig /* Windows and Mac */ xw = x + width; yh = y + height; - x = dc->FLogicalToDeviceX(x); - y = dc->FLogicalToDeviceY(y); - width = dc->FLogicalToDeviceX(xw) - x; - height = dc->FLogicalToDeviceY(yh) - y; + x = dc->FLogicalToUnscrolledDeviceX(x); + y = dc->FLogicalToUnscrolledDeviceY(y); + width = dc->FLogicalToUnscrolledDeviceX(xw) - x; + height = dc->FLogicalToUnscrolledDeviceY(yh) - y; xradius = (int)(dc->FLogicalToDeviceXRel(radius)); yradius = (int)(dc->FLogicalToDeviceYRel(radius)); @@ -271,10 +271,10 @@ void wxRegion::SetEllipse(double x, double y, double width, double height) xw = x + width; yh = y + height; - x = dc->FLogicalToDeviceX(x); - y = dc->FLogicalToDeviceY(y); - width = dc->FLogicalToDeviceX(xw) - x; - height = dc->FLogicalToDeviceY(yh) - y; + x = dc->FLogicalToUnscrolledDeviceX(x); + y = dc->FLogicalToUnscrolledDeviceY(y); + width = dc->FLogicalToUnscrolledDeviceX(xw) - x; + height = dc->FLogicalToUnscrolledDeviceY(yh) - y; if (is_ps) { /* So bitmap-based region is right */ @@ -355,14 +355,14 @@ void wxRegion::SetPolygon(int n, wxPoint points[], double xoffset, double yoffse cpoints = new POINT[n]; fpoints = (is_ps ? new FPoint[n] : (FPoint *)NULL); for (i = 0; i < n; i++) { - v = dc->LogicalToDeviceX(points[i+delta].x + xoffset); + v = dc->LogicalToUnscrolledDeviceX(points[i+delta].x + xoffset); cpoints[i].x = v; - v = dc->LogicalToDeviceY(points[i+delta].y + yoffset); + v = dc->LogicalToUnscrolledDeviceY(points[i+delta].y + yoffset); cpoints[i].y = v; if (fpoints) { - vf = dc->FLogicalToDeviceX(points[i+delta].x + xoffset); + vf = dc->FLogicalToUnscrolledDeviceX(points[i+delta].x + xoffset); fpoints[i].x = vf; - vf = dc->FLogicalToDeviceY(points[i+delta].y + yoffset); + vf = dc->FLogicalToUnscrolledDeviceY(points[i+delta].y + yoffset); fpoints[i].y = vf; } } @@ -811,9 +811,9 @@ void wxRegion::BoundingBox(double *x, double *y, double *w, double *h) *y = -(*y); } - v = dc->DeviceToLogicalX((int)*x); + v = dc->UnscrolledDeviceToLogicalX((int)*x); *x = v; - v = dc->DeviceToLogicalY((int)*y); + v = dc->UnscrolledDeviceToLogicalY((int)*y); *y = v; v = dc->DeviceToLogicalXRel((int)*w); *w = v; @@ -851,8 +851,8 @@ Bool wxRegion::IsInRegion(double x, double y) if (!rgn) return FALSE; - x = dc->FLogicalToDeviceX(x); - y = dc->FLogicalToDeviceY(y); + x = dc->FLogicalToUnscrolledDeviceX(x); + y = dc->FLogicalToUnscrolledDeviceY(y); ix = (int)floor(x); diff --git a/src/wxmac/include/base/wb_dc.h b/src/wxmac/include/base/wb_dc.h index 3afa8b553a..914b25ce14 100644 --- a/src/wxmac/include/base/wb_dc.h +++ b/src/wxmac/include/base/wb_dc.h @@ -180,14 +180,20 @@ class wxbDC: public wxObject virtual double DeviceToLogicalY(int y) = 0; virtual double DeviceToLogicalXRel(int x) = 0; virtual double DeviceToLogicalYRel(int y) = 0; + virtual double UnscrolledDeviceToLogicalX(int x) = 0; + virtual double UnscrolledDeviceToLogicalY(int y) = 0; virtual int LogicalToDeviceX(double x) = 0; virtual int LogicalToDeviceY(double y) = 0; virtual int LogicalToDeviceXRel(double x) = 0; virtual int LogicalToDeviceYRel(double y) = 0; + virtual int LogicalToUnscrolledDeviceX(double x) = 0; + virtual int LogicalToUnscrolledDeviceY(double y) = 0; virtual double FLogicalToDeviceX(double x) = 0; virtual double FLogicalToDeviceY(double y) = 0; virtual double FLogicalToDeviceXRel(double x) = 0; virtual double FLogicalToDeviceYRel(double y) = 0; + virtual double FLogicalToUnscrolledDeviceX(double x) = 0; + virtual double FLogicalToUnscrolledDeviceY(double y) = 0; // Only works for PostScript *after* you've printed an image. // Gives width and height of image. virtual void GetSize(double *width, double *height); diff --git a/src/wxmac/include/mac/wx_dc.h b/src/wxmac/include/mac/wx_dc.h index a2521da029..e76f584130 100644 --- a/src/wxmac/include/mac/wx_dc.h +++ b/src/wxmac/include/mac/wx_dc.h @@ -56,12 +56,18 @@ extern "C" { // Logical to device // Absolute -#define XLOG2DEV(x) (int)floor(((x) - logical_origin_x)*logical_scale_x*user_scale_x + device_origin_x) -#define YLOG2DEV(y) (int)floor(((y) - logical_origin_y)*logical_scale_y*user_scale_y + device_origin_y) +#define _XLOG2DEV(x,dox) (int)floor(((x) - logical_origin_x)*logical_scale_x*user_scale_x + dox) +#define _YLOG2DEV(y,doy) (int)floor(((y) - logical_origin_y)*logical_scale_y*user_scale_y + doy) + +#define XLOG2DEV(x) _XLOG2DEV(x, device_origin_x) +#define YLOG2DEV(y) _YLOG2DEV(y, device_origin_y) + +#define XLOG2UDEV(x) _XLOG2DEV(x, (device_origin_x - auto_device_origin_x)) +#define YLOG2UDEV(y) _YLOG2DEV(y, (device_origin_y - auto_device_origin_y)) // Logical to device without the device translation -#define XLOG2DEV_2(x) (int)floor(((x) - logical_origin_x)*logical_scale_x*user_scale_x) -#define YLOG2DEV_2(y) (int)floor(((y) - logical_origin_y)*logical_scale_y*user_scale_y) +#define XLOG2DEV_2(x) _XLOG2DEV(x, 0) +#define YLOG2DEV_2(y) _YLOG2DEV(y, 0) // Relative #define XLOG2DEVREL(x) (int)floor((x)*logical_scale_x*user_scale_x) @@ -69,9 +75,14 @@ extern "C" { // Device to logical // Absolute -#define XDEV2LOG(x) (((x) - device_origin_x)/(logical_scale_x*user_scale_x) + logical_origin_x) +#define _XDEV2LOG(x, dox) (((x) - dox)/(logical_scale_x*user_scale_x) + logical_origin_x) +#define _YDEV2LOG(y, doy) (((y) - doy)/(logical_scale_y*user_scale_y) + logical_origin_y) -#define YDEV2LOG(y) (((y) - device_origin_y)/(logical_scale_y*user_scale_y) + logical_origin_y) +#define XDEV2LOG(x) _XDEV2LOG(x, device_origin_x) +#define YDEV2LOG(y) _YDEV2LOG(y, device_origin_y) + +#define XUDEV2LOG(x) _XDEV2LOG(x, (device_origin_x - auto_device_origin_x)) +#define YUDEV2LOG(y) _YDEV2LOG(y, (device_origin_y - auto_device_origin_y)) // Relative #define XDEV2LOGREL(x) ((x)/(logical_scale_x*user_scale_x)) diff --git a/src/wxmac/include/mac/wx_dccan.h b/src/wxmac/include/mac/wx_dccan.h index 900ea8c0fa..dae14f822d 100644 --- a/src/wxmac/include/mac/wx_dccan.h +++ b/src/wxmac/include/mac/wx_dccan.h @@ -134,14 +134,20 @@ class wxCanvasDC: public wxbCanvasDC double DeviceToLogicalY(int y); double DeviceToLogicalXRel(int x); double DeviceToLogicalYRel(int y); + double UnscrolledDeviceToLogicalX(int x); + double UnscrolledDeviceToLogicalY(int y); int LogicalToDeviceX(double x); int LogicalToDeviceY(double y); int LogicalToDeviceXRel(double x); int LogicalToDeviceYRel(double y); + int LogicalToUnscrolledDeviceX(double x); + int LogicalToUnscrolledDeviceY(double y); double FLogicalToDeviceX(double x); double FLogicalToDeviceY(double y); double FLogicalToDeviceXRel(double x); double FLogicalToDeviceYRel(double y); + double FLogicalToUnscrolledDeviceX(double x); + double FLogicalToUnscrolledDeviceY(double y); Bool Blit(double xdest, double ydest, double width, double height, wxBitmap* source, double xsrc, double ysrc, int rop = wxSOLID, wxColour *c = NULL, diff --git a/src/wxmac/src/mac/wx_dccan1.cc b/src/wxmac/src/mac/wx_dccan1.cc index 5b397ec6c9..735ef65f15 100644 --- a/src/wxmac/src/mac/wx_dccan1.cc +++ b/src/wxmac/src/mac/wx_dccan1.cc @@ -291,10 +291,12 @@ void wxCanvasDC::SetCanvasClipping(void) current_reg = ::NewRgn(); CheckMemOK(current_reg); } - } else if (onpaint_reg && clipping) { - ::SectRgn(clipping->rgn, onpaint_reg, current_reg) ; } else if (clipping) { - ::CopyRgn(clipping->rgn, current_reg) ; + ::CopyRgn(clipping->rgn, current_reg); + ::OffsetRgn(current_reg, auto_device_origin_x, auto_device_origin_y); + if (onpaint_reg) { + ::SectRgn(current_reg, onpaint_reg, current_reg) ; + } } else if (onpaint_reg) { ::CopyRgn(onpaint_reg, current_reg); } @@ -564,36 +566,54 @@ double wxCanvasDC::DeviceToLogicalX(int x) { return XDEV2LOG(x); } //----------------------------------------------------------------------------- double wxCanvasDC::DeviceToLogicalXRel(int x) { return XDEV2LOGREL(x); } +//----------------------------------------------------------------------------- +double wxCanvasDC::UnscrolledDeviceToLogicalX(int x) { return XUDEV2LOG(x); } + //----------------------------------------------------------------------------- double wxCanvasDC::DeviceToLogicalY(int y) { return YDEV2LOG(y); } //----------------------------------------------------------------------------- double wxCanvasDC::DeviceToLogicalYRel(int y) { return YDEV2LOGREL(y); } +//----------------------------------------------------------------------------- +double wxCanvasDC::UnscrolledDeviceToLogicalY(int y) { return YUDEV2LOG(y); } + //----------------------------------------------------------------------------- int wxCanvasDC::LogicalToDeviceX(double x) { return XLOG2DEV(x); } //----------------------------------------------------------------------------- int wxCanvasDC::LogicalToDeviceXRel(double x) { return XLOG2DEVREL(x); } +//----------------------------------------------------------------------------- +int wxCanvasDC::LogicalToUnscrolledDeviceX(double x) { return XLOG2UDEV(x); } + //----------------------------------------------------------------------------- int wxCanvasDC::LogicalToDeviceY(double y) { return YLOG2DEV(y); } //----------------------------------------------------------------------------- int wxCanvasDC::LogicalToDeviceYRel(double y) { return YLOG2DEVREL(y); } +//----------------------------------------------------------------------------- +int wxCanvasDC::LogicalToUnscrolledDeviceY(double y) { return YLOG2UDEV(y); } + //----------------------------------------------------------------------------- double wxCanvasDC::FLogicalToDeviceX(double x) { return XLOG2DEV(x); } //----------------------------------------------------------------------------- double wxCanvasDC::FLogicalToDeviceXRel(double x) { return XLOG2DEVREL(x); } +//----------------------------------------------------------------------------- +double wxCanvasDC::FLogicalToUnscrolledDeviceX(double x) { return XLOG2UDEV(x); } + //----------------------------------------------------------------------------- double wxCanvasDC::FLogicalToDeviceY(double y) { return YLOG2DEV(y); } //----------------------------------------------------------------------------- double wxCanvasDC::FLogicalToDeviceYRel(double y) { return YLOG2DEVREL(y); } +//----------------------------------------------------------------------------- +double wxCanvasDC::FLogicalToUnscrolledDeviceY(double y) { return YLOG2UDEV(y); } + //----------------------------------------------------------------------------- void wxCanvasDC::wxMacSetClip(void) { @@ -959,8 +979,11 @@ CGContextRef wxCanvasDC::GetCG() CGContextTranslateCTM(cg, gdx, (float)(portRect.bottom - portRect.top - gdy)); CGContextScaleCTM(cg, 1.0, -1.0 ); - if (clipping) + if (clipping) { + CGContextTranslateCTM(cg, auto_device_origin_x, auto_device_origin_y); clipping->Install((long)cg, AlignSmoothing()); + CGContextTranslateCTM(cg, -auto_device_origin_x, -auto_device_origin_y); + } if (!AlignSmoothing()) { CGContextTranslateCTM(cg, device_origin_x, device_origin_y); diff --git a/src/wxwindow/include/base/wb_dc.h b/src/wxwindow/include/base/wb_dc.h index 54fa18abd9..b35e079563 100644 --- a/src/wxwindow/include/base/wb_dc.h +++ b/src/wxwindow/include/base/wb_dc.h @@ -174,14 +174,20 @@ class wxbDC: public wxObject virtual double DeviceToLogicalY(int y) = 0; virtual double DeviceToLogicalXRel(int x) = 0; virtual double DeviceToLogicalYRel(int y) = 0; + virtual double UnscrolledDeviceToLogicalX(int x) = 0; + virtual double UnscrolledDeviceToLogicalY(int y) = 0; virtual int LogicalToDeviceX(double x) = 0; virtual int LogicalToDeviceY(double y) = 0; virtual int LogicalToDeviceXRel(double x) = 0; virtual int LogicalToDeviceYRel(double y) = 0; + virtual int LogicalToUnscrolledDeviceX(double x) = 0; + virtual int LogicalToUnscrolledDeviceY(double y) = 0; virtual double FLogicalToDeviceX(double x) = 0; virtual double FLogicalToDeviceY(double y) = 0; virtual double FLogicalToDeviceXRel(double x) = 0; virtual double FLogicalToDeviceYRel(double y) = 0; + virtual double FLogicalToUnscrolledDeviceX(double x) = 0; + virtual double FLogicalToUnscrolledDeviceY(double y) = 0; // Only works for PostScript *after* you've printed an image. // Gives width and height of image. virtual void GetSize(double *width, double *height); diff --git a/src/wxwindow/include/msw/wx_dc.h b/src/wxwindow/include/msw/wx_dc.h index 7cb27c79bb..07d98b8a01 100644 --- a/src/wxwindow/include/msw/wx_dc.h +++ b/src/wxwindow/include/msw/wx_dc.h @@ -138,14 +138,20 @@ class wxDC: public wxbDC double DeviceToLogicalY(int y); double DeviceToLogicalXRel(int x); double DeviceToLogicalYRel(int y); + double UnscrolledDeviceToLogicalX(int x); + double UnscrolledDeviceToLogicalY(int y); int LogicalToDeviceX(double x); int LogicalToDeviceY(double y); int LogicalToDeviceXRel(double x); int LogicalToDeviceYRel(double y); + int LogicalToUnscrolledDeviceX(double x); + int LogicalToUnscrolledDeviceY(double y); double FLogicalToDeviceX(double x); double FLogicalToDeviceY(double y); double FLogicalToDeviceXRel(double x); double FLogicalToDeviceYRel(double y); + double FLogicalToUnscrolledDeviceX(double x); + double FLogicalToUnscrolledDeviceY(double y); Bool GlyphAvailable(int c, wxFont *f = NULL); @@ -214,8 +220,14 @@ HDC wxGetPrinterDC(void); // Logical to device // Absolute -#define MS_XLOG2DEV(x) ((int)floor((x)*logical_scale_x*user_scale_x + (device_origin_x+canvas_scroll_dx)*logical_scale_x)) -#define MS_YLOG2DEV(y) ((int)floor((y)*logical_scale_y*user_scale_y + (device_origin_y+canvas_scroll_dy)*logical_scale_y)) +#define _MS_XLOG2DEV(x, cdx) ((int)floor((x)*logical_scale_x*user_scale_x + (device_origin_x+cdx)*logical_scale_x)) +#define _MS_YLOG2DEV(y, cdy) ((int)floor((y)*logical_scale_y*user_scale_y + (device_origin_y+cdy)*logical_scale_y)) + +#define MS_XLOG2DEV(x) _MS_XLOG2DEV(x, canvas_scroll_dx) +#define MS_YLOG2DEV(y) _MS_YLOG2DEV(y, canvas_scroll_dy) + +#define MS_XLOG2UDEV(x) _MS_XLOG2DEV(x, 0) +#define MS_YLOG2UDEV(y) _MS_YLOG2DEV(y, 0) // Logical to device #define XLOG2DEV(x) MS_XLOG2DEV(x) @@ -227,8 +239,14 @@ HDC wxGetPrinterDC(void); // Device to logical // Absolute -#define MS_XDEV2LOG(x) (((x)/(logical_scale_x*user_scale_x)) - (device_origin_x + canvas_scroll_dx)/logical_scale_x) -#define MS_YDEV2LOG(y) (((y)/(logical_scale_y*user_scale_y)) - (device_origin_y + canvas_scroll_dy)/logical_scale_y) +#define _MS_XDEV2LOG(x, cdx) ((((x) - (device_origin_x + cdx)/logical_scale_x)/(logical_scale_x*user_scale_x))) +#define _MS_YDEV2LOG(y, cdy) ((((y) - (device_origin_y + cdy)/logical_scale_y)/(logical_scale_y*user_scale_y))) + +#define MS_XDEV2LOG(x) _MS_XDEV2LOG(x, canvas_scroll_dx) +#define MS_YDEV2LOG(y) _MS_YDEV2LOG(y, canvas_scroll_dy) + +#define MS_XUDEV2LOG(x) _MS_XDEV2LOG(x, 0) +#define MS_YUDEV2LOG(y) _MS_YDEV2LOG(y, 0) // Relative #define MS_XDEV2LOGREL(x) ((x)/(logical_scale_x*user_scale_x)) diff --git a/src/wxwindow/src/msw/wx_dc.cxx b/src/wxwindow/src/msw/wx_dc.cxx index 1c8d8e13cf..3d102821e8 100644 --- a/src/wxwindow/src/msw/wx_dc.cxx +++ b/src/wxwindow/src/msw/wx_dc.cxx @@ -434,9 +434,10 @@ static HRGN empty_rgn; void wxDC::DoClipping(HDC dc) { if (clipping) { - if (clipping->rgn) + if (clipping->rgn) { SelectClipRgn(dc, clipping->rgn); - else { + OffsetClipRgn(dc, canvas_scroll_dx, canvas_scroll_dy); + } else { if (!empty_rgn) empty_rgn = CreateRectRgn(0, 0, 0, 0); SelectClipRgn(dc, empty_rgn); @@ -800,8 +801,8 @@ static void FillWithStipple(wxDC *dc, wxRegion *r, wxBrush *brush) bw = bm->GetWidth(); bh = bm->GetHeight(); - x = dc->LogicalToDeviceX(x); - y = dc->LogicalToDeviceY(y); + x = dc->LogicalToUnscrolledDeviceX(x); + y = dc->LogicalToUnscrolledDeviceY(y); w = dc->LogicalToDeviceXRel(w); h = dc->LogicalToDeviceYRel(h); @@ -815,8 +816,8 @@ static void FillWithStipple(wxDC *dc, wxRegion *r, wxBrush *brush) for (i = xstart; i < xend; i++) { for (j = ystart; j < yend; j++) { - dc->Blit(dc->DeviceToLogicalX(i * bw), - dc->DeviceToLogicalY(j * bh), + dc->Blit(dc->UnscrolledDeviceToLogicalX(i * bw), + dc->UnscrolledDeviceToLogicalY(j * bh), dc->DeviceToLogicalXRel(bw), dc->DeviceToLogicalYRel(bh), bm, 0, 0, style, c); @@ -2350,6 +2351,11 @@ double wxDC::DeviceToLogicalXRel(int x) return (double)MS_XDEV2LOGREL(x); } +double wxDC::UnscrolledDeviceToLogicalX(int x) +{ + return (double)MS_XUDEV2LOG(x); +} + double wxDC::DeviceToLogicalY(int y) { return (double)MS_YDEV2LOG(y); @@ -2360,6 +2366,11 @@ double wxDC::DeviceToLogicalYRel(int y) return (double)MS_YDEV2LOGREL(y); } +double wxDC::UnscrolledDeviceToLogicalY(int y) +{ + return (double)MS_YUDEV2LOG(y); +} + int wxDC::LogicalToDeviceX(double x) { return MS_XLOG2DEV(x); @@ -2370,6 +2381,11 @@ int wxDC::LogicalToDeviceXRel(double x) return MS_XLOG2DEVREL(x); } +int wxDC::LogicalToUnscrolledDeviceX(double x) +{ + return MS_XLOG2UDEV(x); +} + int wxDC::LogicalToDeviceY(double y) { return MS_YLOG2DEV(y); @@ -2380,6 +2396,11 @@ int wxDC::LogicalToDeviceYRel(double y) return MS_YLOG2DEVREL(y); } +int wxDC::LogicalToUnscrolledDeviceY(double y) +{ + return MS_YLOG2UDEV(y); +} + double wxDC::FLogicalToDeviceX(double x) { return MS_XLOG2DEV(x); @@ -2390,6 +2411,11 @@ double wxDC::FLogicalToDeviceXRel(double x) return MS_XLOG2DEVREL(x); } +double wxDC::FLogicalToUnscrolledDeviceX(double x) +{ + return MS_XLOG2UDEV(x); +} + double wxDC::FLogicalToDeviceY(double y) { return MS_YLOG2DEV(y); @@ -2400,6 +2426,11 @@ double wxDC::FLogicalToDeviceYRel(double y) return MS_YLOG2DEVREL(y); } +double wxDC::FLogicalToUnscrolledDeviceY(double y) +{ + return MS_YLOG2UDEV(y); +} + #define wxKEEPDEST (DWORD)0x00AA0029 typedef BOOL (WINAPI *wxALPHA_BLEND)(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION); diff --git a/src/wxxt/src/DeviceContexts/DC.h b/src/wxxt/src/DeviceContexts/DC.h index c0901c69e1..3ce2143f67 100644 --- a/src/wxxt/src/DeviceContexts/DC.h +++ b/src/wxxt/src/DeviceContexts/DC.h @@ -135,10 +135,14 @@ public: { return XDEV2LOG(x); } virtual double DeviceToLogicalXRel(int x) { return XDEV2LOGREL(x); } + virtual double UnscrolledDeviceToLogicalX(int x) + { return XDEV2LOG(x); } virtual double DeviceToLogicalY(int y) { return YDEV2LOG(y); } virtual double DeviceToLogicalYRel(int y) { return YDEV2LOGREL(y); } + virtual double UnscrolledDeviceToLogicalY(int y) + { return YDEV2LOG(y); } void DrawSpline(int n, wxPoint pts[]); void DrawSpline(wxList *pts); virtual void DrawSpline(double x1,double y1, double x2,double y2, double x3,double y3); @@ -172,18 +176,26 @@ public: { return XLOG2DEV(x); } virtual int LogicalToDeviceXRel(double x) { return XLOG2DEVREL(x); } + virtual int LogicalToUnscrolledDeviceX(double x) + { return XLOG2DEV(x); } virtual int LogicalToDeviceY(double y) { return YLOG2DEV(y); } virtual int LogicalToDeviceYRel(double y) { return YLOG2DEVREL(y); } + virtual int LogicalToUnscrolledDeviceY(double y) + { return YLOG2DEV(y); } virtual double FLogicalToDeviceX(double x) { return XLOG2DEV(x); } virtual double FLogicalToDeviceXRel(double x) { return XLOG2DEVREL(x); } + virtual double FLogicalToUnscrolledDeviceX(double x) + { return XLOG2DEV(x); } virtual double FLogicalToDeviceY(double y) { return YLOG2DEV(y); } virtual double FLogicalToDeviceYRel(double y) { return YLOG2DEVREL(y); } + virtual double FLogicalToUnscrolledDeviceY(double y) + { return YLOG2DEV(y); } virtual Bool Ok(void) { return ok; } void SetBackgroundMode(int mode)