Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 8535 → Rev 8534

/programs/develop/tinypy/std_modules/random/tests.py
File deleted
/programs/develop/tinypy/std_modules/random/random.c
File deleted
/programs/develop/tinypy/std_modules/random/init.c
File deleted
/programs/develop/tinypy/std_modules/pygame/init.c
File deleted
/programs/develop/tinypy/std_modules/re/testsuite.py
File deleted
/programs/develop/tinypy/std_modules/re/regexpr.h
File deleted
/programs/develop/tinypy/std_modules/re/init.c
File deleted
/programs/develop/tinypy/std_modules/re/tests.py
File deleted
/programs/develop/tinypy/std_modules/re/regexpr.c
File deleted
/programs/develop/tinypy/std_modules/bitwise/bitwise.c
File deleted
/programs/develop/tinypy/std_modules/bitwise/init.c
File deleted
Property changes:
Deleted: svn:executable
-*
\ No newline at end of property
/programs/develop/tinypy/std_modules/ksys/init.c
File deleted
Property changes:
Deleted: svn:executable
-*
\ No newline at end of property
/programs/develop/tinypy/std_modules/ksys/net.c
File deleted
/programs/develop/tinypy/std_modules/ksys/fs.c
File deleted
Property changes:
Deleted: svn:executable
-*
\ No newline at end of property
/programs/develop/tinypy/std_modules/ksys/syscalls.c
File deleted
/programs/develop/tinypy/std_modules/math/math.c
File deleted
/programs/develop/tinypy/std_modules/math/init.c
File deleted
/programs/develop/tinypy/std_modules/math/tests.py
File deleted
/programs/develop/tinypy/std_modules/modules.c
File deleted
/programs/develop/tinypy/tinypy/tinypy.c
File deleted
/programs/develop/tinypy/tinypy/tinypy.h
File deleted
/programs/develop/tinypy/tinypy/conio.c
File deleted
/programs/develop/tinypy/tinypy/bcgen.py
File deleted
/programs/develop/tinypy/tinypy/core/tokenize.py
File deleted
/programs/develop/tinypy/tinypy/core/parse.py
File deleted
/programs/develop/tinypy/tinypy/core/encode.py
File deleted
/programs/develop/tinypy/tinypy/core/build.py
File deleted
/programs/develop/tinypy/tinypy/core/py2bc.py
File deleted
/programs/develop/tinypy/tinypy/core/asm.py
File deleted
/programs/develop/tinypy/tinypy/core/disasm.py
File deleted
/programs/develop/tinypy/tinypy/core/tests.py
File deleted
/programs/develop/tinypy/tinypy/core/boot.py
File deleted
/programs/develop/tinypy/tinypy/Makefile
2,31 → 2,35
CC = kos32-gcc
LD = kos32-ld
 
SDK_DIR:= $(abspath ../../../../contrib/sdk)
 
LDFLAGS = -static -nostdlib -T $(SDK_DIR)/sources/newlib/app.lds \
--image-base 0 -lgcc -lSDLn -lc.dll -lsound
--image-base 0 -lgcc -lc.dll
 
SDL_DIR = $(SDK_DIR)/sources/SDL-1.2.2_newlib
CFLAGS = -U_Win32 -U_WIN32 -U__MINGW32__ -mpreferred-stack-boundary=2 \
-mincoming-stack-boundary=2 -fno-builtin -fno-common
CFLAGS = -DCONIO -U_Win32 -U_WIN32 -U__MINGW32__ -mpreferred-stack-boundary=2 \
-mincoming-stack-boundary=2 -fno-builtin -fno-common -O3
INCLUDES= -I. -I$(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib
 
INCLUDES= -I. -I$(SDK_DIR)/sources/newlib/libc/include -I$(SDL_DIR)/include
LIBPATH:= -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib -L.
MODULES_DIR = $(abspath ../modules)
 
STD_MODULES= ../std_modules/modules.o
MODULES_OBJ = $(MODULES_DIR)/kolibri/init.o \
$(MODULES_DIR)/kolibri/fs.o \
$(MODULES_DIR)/kolibri/net.o \
$(MODULES_DIR)/kolibri/gui.o \
$(MODULES_DIR)/kolibri/debug.o
OBJECTS = tpmain.o $(STD_MODULES)
OBJECTS = tpmain.o $(MODULES_OBJ)
 
all:$(NAME)
 
$(NAME): $(OBJECTS)
$(LD) $(LIBPATH) --subsystem native -o $@ $(OBJECTS) $(LDFLAGS) -n -Map $(NAME).map
strip -S $(NAME)
kos32-objcopy $@ -O binary
kpack $@
$(LD) $(LIBPATH) --subsystem native -o $@ $(OBJECTS) $(LDFLAGS) -n # -Map $(NAME).map
objcopy $@ -O binary
 
%.o : %.c Makefile
$(CC) -c $(INCLUDES) $(CFLAGS) -o $@ $<
 
clean:
rm -f $(NAME).map $(OBJECTS) *.o core/*.tpc core/*.pyc
rm -f *.o $(NAME).map $(MODULES_OBJ)
/programs/develop/tinypy/tinypy/koconsole.c
0,0 → 1,68
#include "kolibri.h"
/*
#define __stdcall __attribute__((stdcall))
#define _cdecl __attribute__((cdecl))
#define _stdcall __attribute__((stdcall))
*/
void (* _stdcall con_init)(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t);
int (* _cdecl con_printf)(const char* format,...);
void (* _stdcall con_exit)(char bCloseWindow);
void (* __stdcall con_gets)(char* str, int n);
void (* _stdcall con_set_title)(const char* title);
 
void CONSOLE_INIT(const char title[])
{
kol_struct_import *imp;
 
if (!(imp = kol_cofflib_load("/sys/lib/console.obj")) ||
!(con_init = ( _stdcall void (*)(unsigned, unsigned, unsigned, unsigned, const char*))
kol_cofflib_procload (imp, "con_init")) ||
!(con_printf = ( _cdecl int (*)(const char*,...))
kol_cofflib_procload (imp, "con_printf"))||
!(con_gets = ( __stdcall void (*)(char*, int))
kol_cofflib_procload (imp, "con_gets"))||
!(con_exit = ( _stdcall void (*)(char))
kol_cofflib_procload (imp, "con_exit")) ||
!(con_set_title = ( _stdcall void (*)(const char*))
kol_cofflib_procload (imp, "con_set_title")))
{
kol_exit();
}
con_init(-1, -1, -1, -1, title);
}
kol_struct_import* kol_cofflib_load(char *name)
{
kol_struct_import* result;
asm ("int $0x40":"=a"(result):"a"(68), "b"(19), "c"(name));
return result;
}
 
void* kol_cofflib_procload (kol_struct_import *imp, char *name)
{
int i;
for (i=0;;i++)
{
if ( NULL == ((imp+i) -> name))
break;
else
if ( 0 == strcmp(name, (imp+i)->name) )
return (imp+i)->data;
}
return NULL;
}
 
void kol_board_puts(char *s)
{
unsigned i;
i = 0;
while (*(s+i))
{
asm ("int $0x40"::"a"(63), "b"(1), "c"(*(s+i)));
i++;
}
}
 
void kol_exit()
{
asm ("int $0x40"::"a"(-1));
}
/programs/develop/tinypy/tinypy/test.py
0,0 → 1,21
import kolibri
 
def onshow():
print("Show window")
 
def onkey():
print("Key pressed")
 
def onbtn():
print("Button pressed")
 
 
kolibri.debug_print("Debug test line\n")
w = kolibri.window(10,10,400, 400, False)
w.on_show = onshow
w.on_key = onkey
w.on_button = onbtn
w.show()
print("running")
w.run()
print("Exit")
/programs/develop/tinypy/tinypy/tpmain.c
1,24 → 1,22
#include "tinypy.c"
/* INCLUDE */
#include "tp.c"
 
extern void init_std_modules(TP);
const char header[] = "TinyPy for KolibriOS";
 
int main(int argc, char *argv[]) {
int main(int argc, const char *argv[]) {
/* INIT */
tp_vm *tp = tp_init(argc,argv);
#ifdef CONIO
console_load();
#endif
init_std_modules(tp);
tp_ez_call(tp,"py2bc","tinypy",tp_None);
kolibri_init(tp);
CONSOLE_INIT(header);
tp_call(tp,"py2bc","tinypy",tp_None);
// con_printf("Done");
tp_deinit(tp);
#ifdef CONIO
if(con_enabled==1){
// Exit console
con_exit(0);
}
#endif
return(0);
// Exit program
return 0;
}
 
/**/
/programs/develop/tinypy/tinypy/kolibri.h
0,0 → 1,98
#ifndef NULL
#define NULL ((void*)0)
#endif
 
#pragma pack(push,1)
typedef struct
{
unsigned p00;
unsigned p04;
char *p08;
unsigned p12;
unsigned p16;
char p20;
char *p21;
} kol_struct70;
#pragma pack(pop)
 
 
#pragma pack(push,1)
typedef struct
{
unsigned p00;
char p04;
char p05[3];
unsigned p08;
unsigned p12;
unsigned p16;
unsigned p20;
unsigned p24;
unsigned p28;
unsigned long long p32;
unsigned p40;
} kol_struct_BDVK;
#pragma pack(pop)
 
#pragma pack(push,1)
typedef struct
{
char *name;
void *data;
} kol_struct_import;
#pragma pack(pop)
 
void kol_exit();
void kol_sleep(unsigned d);
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
void kol_wnd_move(unsigned x, unsigned y);
void kol_wnd_caption(char *s);
void kol_event_mask(unsigned e);
unsigned kol_event_wait();
unsigned kol_event_wait_time(unsigned time);
unsigned kol_event_check();
void kol_paint_start();
void kol_paint_end();
void kol_paint_pixel(unsigned x, unsigned y, unsigned c);
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c);
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c);
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d);
void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette);
unsigned kol_key_get();
unsigned kol_key_control();
void kol_key_lang_set(unsigned lang);
unsigned kol_key_lang_get();
void kol_key_mode_set(unsigned mode);
unsigned kol_key_mode_get();
void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c);
unsigned kol_btn_get();
void kol_btn_type(unsigned t);
unsigned kol_mouse_pos();
unsigned kol_mouse_posw();
unsigned kol_mouse_btn();
void kol_board_putc(char c);
void kol_board_puts(char *s);
void kol_board_puti(int n);
int kol_file_70(kol_struct70 *k);
kol_struct_import* kol_cofflib_load(char *name);
void* kol_cofflib_procload (kol_struct_import *imp, char *name);
unsigned kol_cofflib_procnum (kol_struct_import *imp);
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n);
unsigned kol_system_end(unsigned param);
unsigned kol_system_cpufreq();
unsigned kol_system_mem();
unsigned kol_system_memfree();
unsigned kol_system_time_get();
unsigned kol_system_date_get();
void kol_path_file2dir(char *dir, char *fname);
void kol_path_full(char *full, char *fname);
void kol_screen_wait_rr();
void kol_screen_get_size(unsigned *w, unsigned *h);
unsigned kol_skin_height();
unsigned kol_thread_start(unsigned start, unsigned stack);
unsigned kol_time_tick();
unsigned kol_sound_speaker(char data[]);
unsigned kol_process_info(unsigned slot, char buf1k[]);
int kol_process_kill_pid(unsigned process);
void kol_get_kernel_ver(char buff16b[]);
int kol_kill_process(unsigned process);
/programs/develop/tinypy/tinypy/builtins.c
0,0 → 1,209
tp_obj tp_print(TP) {
int n = 0;
tp_obj e;
TP_LOOP(e)
if (n) { con_printf(" "); }
con_printf("%s",TP_CSTR(e));
n += 1;
TP_END;
con_printf("\n");
return tp_None;
}
 
#define BUF_SIZE 2048
tp_obj tp_raw_input(TP) {
tp_obj prompt;
char *buf = malloc(BUF_SIZE);
if (tp->params.list.val->len)
{
prompt = TP_OBJ();
con_printf("%s", TP_CSTR(prompt));
}
con_gets(buf, BUF_SIZE);
return tp_string(buf);
}
 
tp_obj tp_bind(TP) {
tp_obj r = TP_OBJ();
tp_obj self = TP_OBJ();
return tp_fnc_new(tp,r.fnc.ftype|2,r.fnc.val,self,r.fnc.info->globals);
}
 
tp_obj tp_min(TP) {
tp_obj r = TP_OBJ();
tp_obj e;
TP_LOOP(e)
if (tp_cmp(tp,r,e) > 0) { r = e; }
TP_END;
return r;
}
 
tp_obj tp_syscall(TP) {
tp_obj r = TP_OBJ();
int result;
asm("int $0x40":"=a"(result):
"a"((int)tp_get(tp, r, tp_string_n("eax", 3)).number.val),
"b"((int)tp_get(tp, r, tp_string_n("ebx", 3)).number.val),
"c"((int)tp_get(tp, r, tp_string_n("ecx", 3)).number.val),
"d"((int)tp_get(tp, r, tp_string_n("edx", 3)).number.val));
return tp_number(result);
}
 
tp_obj tp_max(TP) {
tp_obj r = TP_OBJ();
tp_obj e;
TP_LOOP(e)
if (tp_cmp(tp,r,e) < 0) { r = e; }
TP_END;
return r;
}
 
tp_obj tp_copy(TP) {
tp_obj r = TP_OBJ();
int type = r.type;
if (type == TP_LIST) {
return _tp_list_copy(tp,r);
} else if (type == TP_DICT) {
return _tp_dict_copy(tp,r);
}
tp_raise(tp_None,"tp_copy(%s)",TP_CSTR(r));
}
 
 
tp_obj tp_len_(TP) {
tp_obj e = TP_OBJ();
return tp_len(tp,e);
}
 
 
tp_obj tp_assert(TP) {
int a = TP_NUM();
if (a) { return tp_None; }
tp_raise(tp_None,"%s","assert failed");
}
 
tp_obj tp_range(TP) {
int a,b,c,i;
tp_obj r = tp_list(tp);
switch (tp->params.list.val->len) {
case 1: a = 0; b = TP_NUM(); c = 1; break;
case 2:
case 3: a = TP_NUM(); b = TP_NUM(); c = TP_DEFAULT(tp_number(1)).number.val; break;
default: return r;
}
if (c != 0) {
for (i=a; (c>0) ? i<b : i>b; i+=c) {
_tp_list_append(tp,r.list.val,tp_number(i));
}
}
return r;
}
 
 
tp_obj tp_system(TP) {
char const *s = TP_STR();
int r = system(s);
return tp_number(r);
}
 
tp_obj tp_istype(TP) {
tp_obj v = TP_OBJ();
char const *t = TP_STR();
if (strcmp("string",t) == 0) { return tp_number(v.type == TP_STRING); }
if (strcmp("list",t) == 0) { return tp_number(v.type == TP_LIST); }
if (strcmp("dict",t) == 0) { return tp_number(v.type == TP_DICT); }
if (strcmp("number",t) == 0) { return tp_number(v.type == TP_NUMBER); }
tp_raise(tp_None,"is_type(%s,%s)",TP_CSTR(v),t);
}
 
 
tp_obj tp_float(TP) {
tp_obj v = TP_OBJ();
int ord = TP_DEFAULT(tp_number(0)).number.val;
int type = v.type;
if (type == TP_NUMBER) { return v; }
if (type == TP_STRING) {
if (strchr(TP_CSTR(v),'.')) { return tp_number(atof(TP_CSTR(v))); }
return(tp_number(strtol(TP_CSTR(v),0,ord)));
}
tp_raise(tp_None,"tp_float(%s)",TP_CSTR(v));
}
 
 
tp_obj tp_save(TP) {
char const *fname = TP_STR();
tp_obj v = TP_OBJ();
FILE *f;
f = fopen(fname,"wb");
if (!f) { tp_raise(tp_None,"tp_save(%s,...)",fname); }
fwrite(v.string.val,v.string.len,1,f);
fclose(f);
return tp_None;
}
 
#define READ_BLK 1024
tp_obj tp_load(TP) {
FILE *f;
long l = 0;
tp_obj r;
char *s;
char const *fname = TP_STR();
long rd = 0;
long allocated = 32 * READ_BLK;
 
 
if (!(f = fopen(fname, "rb"))) {
tp_raise(tp_None,"tp_load(%s)",fname);
}
if (!(s = malloc(allocated)))
tp_raise(tp_None, "tp_load(%s): out of memory", fname);
rd = 0;
do {
if (l + READ_BLK < allocated) {
allocated += READ_BLK;
if (!(s = realloc(s, allocated))) {
tp_raise(tp_None, "tp_load(%s): out of memory", fname);
}
}
rd = fread(s + l, 1, READ_BLK, f);
l += rd;
} while (rd == READ_BLK);
r = tp_string_n(s, l);
fclose(f);
return tp_track(tp,r);
}
 
 
tp_obj tp_fpack(TP) {
tp_num v = TP_NUM();
tp_obj r = tp_string_t(tp,sizeof(tp_num));
*(tp_num*)r.string.val = v;
return tp_track(tp,r);
}
 
tp_obj tp_abs(TP) {
return tp_number(fabs(tp_float(tp).number.val));
}
tp_obj tp_int(TP) {
return tp_number((long)tp_float(tp).number.val);
}
tp_num _roundf(tp_num v) {
tp_num av = fabs(v); tp_num iv = (long)av;
av = (av-iv < 0.5?iv:iv+1);
return (v<0?-av:av);
}
tp_obj tp_round(TP) {
return tp_number(_roundf(tp_float(tp).number.val));
}
 
tp_obj tp_exists(TP) {
char const *s = TP_STR();
struct stat stbuf;
return tp_number(!stat(s,&stbuf));
}
tp_obj tp_mtime(TP) {
char const *s = TP_STR();
struct stat stbuf;
if (!stat(s,&stbuf)) { return tp_number(stbuf.st_mtime); }
tp_raise(tp_None,"tp_mtime(%s)",s);
}
/programs/develop/tinypy/tinypy/vm.c
0,0 → 1,380
 
tp_vm *_tp_init(void) {
int i;
tp_vm *tp = (tp_vm*)tp_malloc(sizeof(tp_vm));
tp->cur = 0;
tp->jmp = 0;
tp->ex = tp_None;
tp->root = tp_list(0);
for (i=0; i<256; i++) { tp->chars[i][0]=i; }
tp_gc_init(tp);
tp->_regs = tp_list(tp);
for (i=0; i<TP_REGS; i++) { tp_set(tp,tp->_regs,tp_None,tp_None); }
tp->builtins = tp_dict(tp);
tp->modules = tp_dict(tp);
tp->_params = tp_list(tp);
for (i=0; i<TP_FRAMES; i++) { tp_set(tp,tp->_params,tp_None,tp_list(tp)); }
tp_set(tp,tp->root,tp_None,tp->builtins);
tp_set(tp,tp->root,tp_None,tp->modules);
tp_set(tp,tp->root,tp_None,tp->_regs);
tp_set(tp,tp->root,tp_None,tp->_params);
tp_set(tp,tp->builtins,tp_string("MODULES"),tp->modules);
tp_set(tp,tp->modules,tp_string("BUILTINS"),tp->builtins);
tp_set(tp,tp->builtins,tp_string("BUILTINS"),tp->builtins);
tp->regs = tp->_regs.list.val->items;
tp_full(tp);
return tp;
}
 
void tp_deinit(TP) {
while (tp->root.list.val->len) {
_tp_list_pop(tp,tp->root.list.val,0,"tp_deinit");
}
tp_full(tp); tp_full(tp);
tp_delete(tp,tp->root);
tp_gc_deinit(tp);
tp_free(tp);
}
 
 
/* tp_frame_*/
void tp_frame(TP,tp_obj globals,tp_code *codes,tp_obj *ret_dest) {
tp_frame_ f;
f.globals = globals;
f.codes = codes;
f.cur = f.codes;
f.jmp = 0;
/* fprintf(stderr,"tp->cur: %d\n",tp->cur);*/
f.regs = (tp->cur <= 0?tp->regs:tp->frames[tp->cur].regs+tp->frames[tp->cur].cregs);
f.ret_dest = ret_dest;
f.lineno = 0;
f.line = tp_string("");
f.name = tp_string("?");
f.fname = tp_string("?");
f.cregs = 0;
/* return f;*/
if (f.regs+256 >= tp->regs+TP_REGS || tp->cur >= TP_FRAMES-1) { tp_raise(,"tp_frame: stack overflow %d",tp->cur); }
tp->cur += 1;
tp->frames[tp->cur] = f;
}
 
void _tp_raise(TP,tp_obj e) {
if (!tp || !tp->jmp) {
con_printf("\nException:\n%s\n",TP_CSTR(e));
exit(-1);
return;
}
if (e.type != TP_NONE) { tp->ex = e; }
tp_grey(tp,e);
longjmp(tp->buf,1);
}
 
void tp_print_stack(TP) {
int i;
con_printf("\n");
for (i=0; i<=tp->cur; i++) {
if (!tp->frames[i].lineno) { continue; }
con_printf("File \"%s\", line %d, in %s\n %s\n",
TP_CSTR(tp->frames[i].fname),tp->frames[i].lineno,
TP_CSTR(tp->frames[i].name),TP_CSTR(tp->frames[i].line));
}
con_printf("\nException:\n%s\n",TP_CSTR(tp->ex));
}
 
 
 
void tp_handle(TP) {
int i;
for (i=tp->cur; i>=0; i--) {
if (tp->frames[i].jmp) { break; }
}
if (i >= 0) {
tp->cur = i;
tp->frames[i].cur = tp->frames[i].jmp;
tp->frames[i].jmp = 0;
return;
}
tp_print_stack(tp);
exit(-1);
}
 
void _tp_call(TP,tp_obj *dest, tp_obj fnc, tp_obj params) {
/*con_printf("_tp_call %s %s\n",TP_CSTR(fnc), TP_CSTR(params));*/
if (fnc.type == TP_DICT) {
_tp_call(tp,dest,tp_get(tp,fnc,tp_string("__call__")),params);
return;
}
if (fnc.type == TP_FNC && !(fnc.fnc.ftype&1)) {
*dest = _tp_tcall(tp,fnc);
tp_grey(tp,*dest);
return;
}
if (fnc.type == TP_FNC) {
tp_frame(tp,fnc.fnc.info->globals,(tp_code*)fnc.fnc.val,dest);
if ((fnc.fnc.ftype&2)) {
tp->frames[tp->cur].regs[0] = params;
_tp_list_insert(tp,params.list.val,0,fnc.fnc.info->self);
} else {
tp->frames[tp->cur].regs[0] = params;
}
return;
}
tp_params_v(tp,1,fnc); tp_print(tp);
tp_raise(,"tp_call: %s is not callable",TP_CSTR(fnc));
}
 
 
void tp_return(TP, tp_obj v) {
tp_obj *dest = tp->frames[tp->cur].ret_dest;
if (dest) { *dest = v; tp_grey(tp,v); }
/* memset(tp->frames[tp->cur].regs,0,TP_REGS_PER_FRAME*sizeof(tp_obj));
fprintf(stderr,"regs:%d\n",(tp->frames[tp->cur].cregs+1));*/
memset(tp->frames[tp->cur].regs,0,tp->frames[tp->cur].cregs*sizeof(tp_obj));
tp->cur -= 1;
}
 
enum {
TP_IEOF,TP_IADD,TP_ISUB,TP_IMUL,TP_IDIV,TP_IPOW,TP_IAND,TP_IOR,TP_ICMP,TP_IGET,TP_ISET,
TP_INUMBER,TP_ISTRING,TP_IGGET,TP_IGSET,TP_IMOVE,TP_IDEF,TP_IPASS,TP_IJUMP,TP_ICALL,
TP_IRETURN,TP_IIF,TP_IDEBUG,TP_IEQ,TP_ILE,TP_ILT,TP_IDICT,TP_ILIST,TP_INONE,TP_ILEN,
TP_ILINE,TP_IPARAMS,TP_IIGET,TP_IFILE,TP_INAME,TP_INE,TP_IHAS,TP_IRAISE,TP_ISETJMP,
TP_IMOD,TP_ILSH,TP_IRSH,TP_IITER,TP_IDEL,TP_IREGS,
TP_ITOTAL
};
 
/* char *tp_strings[TP_ITOTAL] = {
"EOF","ADD","SUB","MUL","DIV","POW","AND","OR","CMP","GET","SET","NUM",
"STR","GGET","GSET","MOVE","DEF","PASS","JUMP","CALL","RETURN","IF","DEBUG",
"EQ","LE","LT","DICT","LIST","NONE","LEN","LINE","PARAMS","IGET","FILE",
"NAME","NE","HAS","RAISE","SETJMP","MOD","LSH","RSH","ITER","DEL","REGS",
};*/
 
#define VA ((int)e.regs.a)
#define VB ((int)e.regs.b)
#define VC ((int)e.regs.c)
#define RA regs[e.regs.a]
#define RB regs[e.regs.b]
#define RC regs[e.regs.c]
#define UVBC (unsigned short)(((VB<<8)+VC))
#define SVBC (short)(((VB<<8)+VC))
#define GA tp_grey(tp,RA)
#define SR(v) f->cur = cur; return(v);
 
int tp_step(TP) {
tp_frame_ *f = &tp->frames[tp->cur];
tp_obj *regs = f->regs;
tp_code *cur = f->cur;
while(1) {
tp_code e = *cur;
/* fprintf(stderr,"%2d.%4d: %-6s %3d %3d %3d\n",tp->cur,cur-f->codes,tp_strings[e.i],VA,VB,VC);
int i; for(i=0;i<16;i++) { fprintf(stderr,"%d: %s\n",i,TP_CSTR(regs[i])); }*/
switch (e.i) {
case TP_IEOF: tp_return(tp,tp_None); SR(0); break;
case TP_IADD: RA = tp_add(tp,RB,RC); break;
case TP_ISUB: RA = tp_sub(tp,RB,RC); break;
case TP_IMUL: RA = tp_mul(tp,RB,RC); break;
case TP_IDIV: RA = tp_div(tp,RB,RC); break;
case TP_IPOW: RA = tp_pow(tp,RB,RC); break;
case TP_IAND: RA = tp_and(tp,RB,RC); break;
case TP_IOR: RA = tp_or(tp,RB,RC); break;
case TP_IMOD: RA = tp_mod(tp,RB,RC); break;
case TP_ILSH: RA = tp_lsh(tp,RB,RC); break;
case TP_IRSH: RA = tp_rsh(tp,RB,RC); break;
case TP_ICMP: RA = tp_number(tp_cmp(tp,RB,RC)); break;
case TP_INE: RA = tp_number(tp_cmp(tp,RB,RC)!=0); break;
case TP_IEQ: RA = tp_number(tp_cmp(tp,RB,RC)==0); break;
case TP_ILE: RA = tp_number(tp_cmp(tp,RB,RC)<=0); break;
case TP_ILT: RA = tp_number(tp_cmp(tp,RB,RC)<0); break;
case TP_IPASS: break;
case TP_IIF: if (tp_bool(tp,RA)) { cur += 1; } break;
case TP_IGET: RA = tp_get(tp,RB,RC); GA; break;
case TP_IITER:
if (RC.number.val < tp_len(tp,RB).number.val) {
RA = tp_iter(tp,RB,RC); GA;
RC.number.val += 1;
cur += 1;
}
break;
case TP_IHAS: RA = tp_has(tp,RB,RC); break;
case TP_IIGET: tp_iget(tp,&RA,RB,RC); break;
case TP_ISET: tp_set(tp,RA,RB,RC); break;
case TP_IDEL: tp_del(tp,RA,RB); break;
case TP_IMOVE: RA = RB; break;
case TP_INUMBER:
RA = tp_number(*(tp_num*)(*++cur).string.val);
cur += sizeof(tp_num)/4;
continue;
case TP_ISTRING:
RA = tp_string_n((*(cur+1)).string.val,UVBC);
cur += (UVBC/4)+1;
break;
case TP_IDICT: RA = tp_dict_n(tp,VC/2,&RB); break;
case TP_ILIST: RA = tp_list_n(tp,VC,&RB); break;
case TP_IPARAMS: RA = tp_params_n(tp,VC,&RB); break;
case TP_ILEN: RA = tp_len(tp,RB); break;
case TP_IJUMP: cur += SVBC; continue; break;
case TP_ISETJMP: f->jmp = cur+SVBC; break;
case TP_ICALL: _tp_call(tp,&RA,RB,RC); cur++; SR(0); break;
case TP_IGGET:
if (!tp_iget(tp,&RA,f->globals,RB)) {
RA = tp_get(tp,tp->builtins,RB); GA;
}
break;
case TP_IGSET: tp_set(tp,f->globals,RA,RB); break;
case TP_IDEF:
RA = tp_def(tp,(*(cur+1)).string.val,f->globals);
cur += SVBC; continue;
break;
case TP_IRETURN: tp_return(tp,RA); SR(0); break;
case TP_IRAISE: _tp_raise(tp,RA); SR(0); break;
case TP_IDEBUG:
tp_params_v(tp,3,tp_string("DEBUG:"),tp_number(VA),RA); tp_print(tp);
break;
case TP_INONE: RA = tp_None; break;
case TP_ILINE:
f->line = tp_string_n((*(cur+1)).string.val,VA*4-1);
/* fprintf(stderr,"%7d: %s\n",UVBC,f->line.string.val);*/
cur += VA; f->lineno = UVBC;
break;
case TP_IFILE: f->fname = RA; break;
case TP_INAME: f->name = RA; break;
case TP_IREGS: f->cregs = VA; break;
default: tp_raise(0,"tp_step: invalid instruction %d",e.i); break;
}
cur += 1;
}
SR(0);
}
 
void tp_run(TP,int cur) {
if (tp->jmp) {
tp_raise(,"tp_run(%d) called recusively",cur);
}
tp->jmp = 1;
if (setjmp(tp->buf))
{
tp_handle(tp);
}
while (tp->cur >= cur && tp_step(tp) != -1);
tp->cur = cur-1;
tp->jmp = 0;
}
 
 
tp_obj tp_call(TP, const char *mod, const char *fnc, tp_obj params) {
tp_obj tmp;
tp_obj r = tp_None;
tmp = tp_get(tp,tp->modules,tp_string(mod));
tmp = tp_get(tp,tmp,tp_string(fnc));
_tp_call(tp,&r,tmp,params);
tp_run(tp,tp->cur);
return r;
}
 
tp_obj tp_import(TP, char const *fname, char const *name, void *codes) {
tp_obj code = tp_None;
tp_obj g;
if (!((fname && strstr(fname,".tpc")) || codes)) {
return tp_call(tp,"py2bc","import_fname",tp_params_v(tp,2,tp_string(fname),tp_string(name)));
}
if (!codes) {
tp_params_v(tp,1,tp_string(fname));
code = tp_load(tp);
/* We cast away the constness. */
codes = (void *)code.string.val;
} else {
code = tp_data(tp,0,codes);
}
 
g = tp_dict(tp);
tp_set(tp,g,tp_string("__name__"),tp_string(name));
tp_set(tp,g,tp_string("__code__"),code);
tp_set(tp,g,tp_string("__dict__"),g);
tp_frame(tp,g,(tp_code*)codes,0);
tp_set(tp,tp->modules,tp_string(name),g);
if (!tp->jmp) {
tp_run(tp,tp->cur);
}
 
return g;
}
 
 
 
tp_obj tp_exec_(TP) {
tp_obj code = TP_OBJ();
tp_obj globals = TP_OBJ();
tp_frame(tp,globals,(tp_code*)code.string.val,0);
return tp_None;
}
 
 
tp_obj tp_import_(TP) {
tp_obj mod = TP_OBJ();
char const *s;
tp_obj r;
 
if (tp_has(tp,tp->modules,mod).number.val) {
return tp_get(tp,tp->modules,mod);
}
 
s = TP_CSTR(mod);
r = tp_import(tp,TP_CSTR(tp_add(tp,mod,tp_string(".tpc"))),s,0);
return r;
}
 
void tp_builtins(TP) {
struct {const char *s;void *f;} b[] = {
{"print",tp_print}, {"range",tp_range}, {"raw_input", tp_raw_input},
{"min",tp_min}, {"max",tp_max}, {"bind",tp_bind}, {"copy",tp_copy},
{"import",tp_import_}, {"len",tp_len_}, {"assert",tp_assert},
{"str",tp_str2}, {"float",tp_float}, {"system",tp_system},
{"istype",tp_istype}, {"chr",tp_chr}, {"save",tp_save},
{"load",tp_load}, {"fpack",tp_fpack}, {"abs",tp_abs},
{"int",tp_int}, {"exec",tp_exec_}, {"exists",tp_exists},
{"mtime",tp_mtime}, {"number",tp_float}, {"round",tp_round},
{"ord",tp_ord}, {"merge",tp_merge}, {"syscall", tp_syscall}, {0,0},
};
int i; for(i=0; b[i].s; i++) {
tp_set(tp,tp->builtins,tp_string(b[i].s),tp_fnc(tp,(tp_obj (*)(tp_vm *))b[i].f));
}
}
 
 
void tp_args(TP,int argc, char *argv[]) {
tp_obj self = tp_list(tp);
int i;
for (i=1; i<argc; i++) { _tp_list_append(tp,self.list.val,tp_string(argv[i])); }
tp_set(tp,tp->builtins,tp_string("ARGV"),self);
}
 
 
tp_obj tp_main(TP,char *fname, void *code) {
return tp_import(tp,fname,"__main__",code);
}
tp_obj tp_compile(TP, tp_obj text, tp_obj fname) {
return tp_call(tp,"BUILTINS","compile",tp_params_v(tp,2,text,fname));
}
 
tp_obj tp_exec(TP,tp_obj code, tp_obj globals) {
tp_obj r=tp_None;
tp_frame(tp,globals,(tp_code*)code.string.val,&r);
tp_run(tp,tp->cur);
return r;
}
 
tp_obj tp_eval(TP, char *text, tp_obj globals) {
tp_obj code = tp_compile(tp,tp_string(text),tp_string("<eval>"));
return tp_exec(tp,code,globals);
}
 
tp_vm *tp_init(int argc, char *argv[]) {
tp_vm *tp = _tp_init();
tp_builtins(tp);
tp_args(tp,argc,argv);
tp_compiler(tp);
return tp;
}
 
 
/**/
/programs/develop/tinypy/tinypy/py2bc.py
0,0 → 1,53
print("Starting py2bc")
if not (str(1.0) == "1"):
from boot import *
 
import tokenize,parse,encode
 
def _compile(s,fname):
tokens = tokenize.tokenize(s)
t = parse.parse(s,tokens)
r = encode.encode(fname,s,t)
return r
 
def _import(name):
if name in MODULES:
return MODULES[name]
py = name+".py"
tpc = name+".tpc"
if exists(py):
if not exists(tpc) or mtime(py) > mtime(tpc):
s = load(py)
code = _compile(s,py)
save(tpc,code)
if not exists(tpc): raise
code = load(tpc)
g = {'__name__':name,'__code__':code}
g['__dict__'] = g
MODULES[name] = g
exec(code,g)
return g
def _init():
BUILTINS['compile'] = _compile
BUILTINS['import'] = _import
 
def import_fname(fname,name):
g = {}
g['__name__'] = name
MODULES[name] = g
s = load(fname)
code = _compile(s,fname)
g['__code__'] = code
exec(code,g)
return g
 
def tinypy():
return import_fname(ARGV[0],'__main__')
 
def main(src,dest):
s = load(src)
r = _compile(s,src)
save(dest,r)
 
if __name__ == '__main__':
main(ARGV[1],ARGV[2])
/programs/develop/tinypy/tinypy/ops.c
0,0 → 1,274
tp_obj tp_str(TP,tp_obj self) {
int type = self.type;
if (type == TP_STRING) {
return self;
}
if (type == TP_NUMBER) {
tp_num v = self.number.val;
if ((fabs(v)-fabs((long)v)) < 0.000001) { return tp_printf(tp,"%ld",(long)v); }
return tp_printf(tp,"%f",v);
} else if(type == TP_DICT) {
return tp_printf(tp,"<dict 0x%x>",self.dict.val);
} else if(type == TP_LIST) {
return tp_printf(tp,"<list 0x%x>",self.list.val);
} else if (type == TP_NONE) {
return tp_string("None");
} else if (type == TP_DATA) {
return tp_printf(tp,"<data 0x%x>",self.data.val);
} else if (type == TP_FNC) {
return tp_printf(tp,"<fnc 0x%x>",self.fnc.info);
}
return tp_string("<?>");
}
 
int tp_bool(TP,tp_obj v) {
switch(v.type) {
case TP_NUMBER: return v.number.val != 0;
case TP_NONE: return 0;
case TP_STRING: return v.string.len != 0;
case TP_LIST: return v.list.val->len != 0;
case TP_DICT: return v.dict.val->len != 0;
}
return 1;
}
 
 
tp_obj tp_has(TP,tp_obj self, tp_obj k) {
int type = self.type;
if (type == TP_DICT) {
if (_tp_dict_find(tp,self.dict.val,k) != -1) { return tp_True; }
return tp_False;
} else if (type == TP_STRING && k.type == TP_STRING) {
char *p = strstr(TP_CSTR(self),TP_CSTR(k));
return tp_number(p != 0);
} else if (type == TP_LIST) {
return tp_number(_tp_list_find(tp,self.list.val,k)!=-1);
}
tp_raise(tp_None,"tp_has(%s,%s)",TP_CSTR(self),TP_CSTR(k));
}
 
void tp_del(TP,tp_obj self, tp_obj k) {
int type = self.type;
if (type == TP_DICT) {
_tp_dict_del(tp,self.dict.val,k,"tp_del");
return;
}
tp_raise(,"tp_del(%s,%s)",TP_CSTR(self),TP_CSTR(k));
}
 
 
tp_obj tp_iter(TP,tp_obj self, tp_obj k) {
int type = self.type;
if (type == TP_LIST || type == TP_STRING) { return tp_get(tp,self,k); }
if (type == TP_DICT && k.type == TP_NUMBER) {
return self.dict.val->items[_tp_dict_next(tp,self.dict.val)].key;
}
tp_raise(tp_None,"tp_iter(%s,%s)",TP_CSTR(self),TP_CSTR(k));
}
 
tp_obj tp_get(TP,tp_obj self, tp_obj k) {
int type = self.type;
tp_obj r;
 
if (type == TP_DICT) {
return _tp_dict_get(tp,self.dict.val,k,"tp_get");
} else if (type == TP_LIST) {
if (k.type == TP_NUMBER) {
int l = tp_len(tp,self).number.val;
int n = k.number.val;
n = (n<0?l+n:n);
return _tp_list_get(tp,self.list.val,n,"tp_get");
} else if (k.type == TP_STRING) {
if (strcmp("append",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_append);
} else if (strcmp("pop",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_pop);
} else if (strcmp("index",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_index);
} else if (strcmp("sort",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_sort);
} else if (strcmp("extend",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_extend);
} else if (strcmp("*",TP_CSTR(k)) == 0) {
tp_params_v(tp,1,self);
r = tp_copy(tp);
self.list.val->len=0;
return r;
}
} else if (k.type == TP_NONE) {
return _tp_list_pop(tp,self.list.val,0,"tp_get");
}
} else if (type == TP_STRING) {
if (k.type == TP_NUMBER) {
int l = self.string.len;
int n = k.number.val;
n = (n<0?l+n:n);
if (n >= 0 && n < l) { return tp_string_n(tp->chars[(unsigned char)self.string.val[n]],1); }
} else if (k.type == TP_STRING) {
if (strcmp("join",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_join);
} else if (strcmp("split",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_split);
} else if (strcmp("index",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_str_index);
} else if (strcmp("strip",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_strip);
} else if (strcmp("replace",TP_CSTR(k)) == 0) {
return tp_method(tp,self,tp_replace);
}
}
}
 
if (k.type == TP_LIST) {
int a,b,l;
tp_obj tmp;
l = tp_len(tp,self).number.val;
tmp = tp_get(tp,k,tp_number(0));
if (tmp.type == TP_NUMBER) { a = tmp.number.val; }
else if(tmp.type == TP_NONE) { a = 0; }
else { tp_raise(tp_None,"%s is not a number",TP_CSTR(tmp)); }
tmp = tp_get(tp,k,tp_number(1));
if (tmp.type == TP_NUMBER) { b = tmp.number.val; }
else if(tmp.type == TP_NONE) { b = l; }
else { tp_raise(tp_None,"%s is not a number",TP_CSTR(tmp)); }
a = _tp_max(0,(a<0?l+a:a)); b = _tp_min(l,(b<0?l+b:b));
if (type == TP_LIST) {
return tp_list_n(tp,b-a,&self.list.val->items[a]);
} else if (type == TP_STRING) {
tp_obj r = tp_string_t(tp,b-a);
char *ptr = r.string.info->s;
memcpy(ptr,self.string.val+a,b-a); ptr[b-a]=0;
return tp_track(tp,r);
}
}
 
tp_raise(tp_None,"tp_get(%s,%s)",TP_CSTR(self),TP_CSTR(k));
}
 
int tp_iget(TP,tp_obj *r, tp_obj self, tp_obj k) {
if (self.type == TP_DICT) {
int n = _tp_dict_find(tp,self.dict.val,k);
if (n == -1) { return 0; }
*r = self.dict.val->items[n].val;
tp_grey(tp,*r);
return 1;
}
if (self.type == TP_LIST && !self.list.val->len) { return 0; }
*r = tp_get(tp,self,k); tp_grey(tp,*r);
return 1;
}
 
void tp_set(TP,tp_obj self, tp_obj k, tp_obj v) {
int type;
 
type = self.type;
if (type == TP_DICT) {
_tp_dict_set(tp,self.dict.val,k,v);
return;
} else if (type == TP_LIST) {
if (k.type == TP_NUMBER) {
_tp_list_set(tp,self.list.val,k.number.val,v,"tp_set");
return;
} else if (k.type == TP_NONE) {
_tp_list_append(tp,self.list.val,v);
return;
} else if (k.type == TP_STRING) {
if (strcmp("*",TP_CSTR(k)) == 0) {
tp_params_v(tp,2,self,v); tp_extend(tp);
return;
}
}
}
tp_raise(,"tp_set(%s,%s,%s)",TP_CSTR(self),TP_CSTR(k),TP_CSTR(v));
}
 
tp_obj tp_add(TP,tp_obj a, tp_obj b) {
if (a.type == TP_NUMBER && a.type == b.type) {
return tp_number(a.number.val+b.number.val);
} else if (a.type == TP_STRING && a.type == b.type) {
int al = a.string.len, bl = b.string.len;
tp_obj r = tp_string_t(tp,al+bl);
char *s = r.string.info->s;
memcpy(s,a.string.val,al); memcpy(s+al,b.string.val,bl);
return tp_track(tp,r);
} else if (a.type == TP_LIST && a.type == b.type) {
tp_obj r;
tp_params_v(tp,1,a);
r = tp_copy(tp);
tp_params_v(tp,2,r,b);
tp_extend(tp);
return r;
}
tp_raise(tp_None,"tp_add(%s,%s)",TP_CSTR(a),TP_CSTR(b));
}
 
tp_obj tp_mul(TP,tp_obj a, tp_obj b) {
if (a.type == TP_NUMBER && a.type == b.type) {
return tp_number(a.number.val*b.number.val);
} else if (a.type == TP_STRING && b.type == TP_NUMBER) {
int al = a.string.len; int n = b.number.val;
tp_obj r = tp_string_t(tp,al*n);
char *s = r.string.info->s;
int i; for (i=0; i<n; i++) { memcpy(s+al*i,a.string.val,al); }
return tp_track(tp,r);
}
tp_raise(tp_None,"tp_mul(%s,%s)",TP_CSTR(a),TP_CSTR(b));
}
 
 
tp_obj tp_len(TP,tp_obj self) {
int type = self.type;
if (type == TP_STRING) {
return tp_number(self.string.len);
} else if (type == TP_DICT) {
return tp_number(self.dict.val->len);
} else if (type == TP_LIST) {
return tp_number(self.list.val->len);
}
tp_raise(tp_None,"tp_len(%s)",TP_CSTR(self));
}
 
int tp_cmp(TP,tp_obj a, tp_obj b) {
if (a.type != b.type) { return a.type-b.type; }
switch(a.type) {
case TP_NONE: return 0;
case TP_NUMBER: return _tp_sign(a.number.val-b.number.val);
case TP_STRING: {
int v = memcmp(a.string.val,b.string.val,_tp_min(a.string.len,b.string.len));
if (v == 0) { v = a.string.len-b.string.len; }
return v;
}
case TP_LIST: {
int n,v; for(n=0;n<_tp_min(a.list.val->len,b.list.val->len);n++) {
tp_obj aa = a.list.val->items[n]; tp_obj bb = b.list.val->items[n];
if (aa.type == TP_LIST && bb.type == TP_LIST) { v = aa.list.val-bb.list.val; } else { v = tp_cmp(tp,aa,bb); }
if (v) { return v; } }
return a.list.val->len-b.list.val->len;
}
case TP_DICT: return a.dict.val - b.dict.val;
case TP_FNC: return a.fnc.info - b.fnc.info;
case TP_DATA: return (char*)a.data.val - (char*)b.data.val;
}
tp_raise(0,"tp_cmp(%s,%s)",TP_CSTR(a),TP_CSTR(b));
}
 
#define TP_OP(name,expr) \
tp_obj name(TP,tp_obj _a,tp_obj _b) { \
if (_a.type == TP_NUMBER && _a.type == _b.type) { \
tp_num a = _a.number.val; tp_num b = _b.number.val; \
return tp_number(expr); \
} \
tp_raise(tp_None,"%s(%s,%s)",#name,TP_CSTR(_a),TP_CSTR(_b)); \
}
 
TP_OP(tp_and,((long)a)&((long)b));
TP_OP(tp_or,((long)a)|((long)b));
TP_OP(tp_mod,((long)a)%((long)b));
TP_OP(tp_lsh,((long)a)<<((long)b));
TP_OP(tp_rsh,((long)a)>>((long)b));
TP_OP(tp_sub,a-b);
TP_OP(tp_div,a/b);
TP_OP(tp_pow,pow(a,b));
 
 
/**/
/programs/develop/tinypy/tinypy/bc.c
1,594 → 1,365
unsigned char tp_tokenize[] = {
44,67,0,0,30,4,0,1,99,108,97,115,115,32,84,111,
107,101,110,58,0,0,0,0,12,0,0,16,99,111,114,101,
47,116,111,107,101,110,105,122,101,46,112,121,0,0,0,0,
33,0,0,0,12,0,0,1,63,0,0,0,34,0,0,0,
26,0,0,0,12,1,0,5,84,111,107,101,110,0,0,0,
14,1,0,0,12,3,0,7,115,101,116,109,101,116,97,0,
13,2,3,0,15,3,0,0,12,5,0,6,111,98,106,101,
99,116,0,0,13,4,5,0,31,1,3,2,19,1,2,1,
16,1,0,91,44,11,0,0,30,17,0,2,32,32,32,32,
100,101,102,32,95,95,105,110,105,116,95,95,40,115,101,108,
102,44,112,111,115,61,40,48,44,48,41,44,116,121,112,101,
61,39,115,121,109,98,111,108,39,44,118,97,108,61,78,111,
110,101,44,105,116,101,109,115,61,78,111,110,101,41,58,0,
12,1,0,16,99,111,114,101,47,116,111,107,101,110,105,122,
101,46,112,121,0,0,0,0,33,1,0,0,12,1,0,8,
95,95,105,110,105,116,95,95,0,0,0,0,34,1,0,0,
44,65,0,0,26,0,0,0,12,1,0,5,84,111,107,101,
110,0,0,0,14,1,0,0,16,1,0,43,44,11,0,0,
28,2,0,0,9,1,0,2,11,3,0,0,0,0,0,0,
0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,
27,2,3,2,28,3,0,0,32,2,0,3,12,3,0,6,
115,121,109,98,111,108,0,0,28,4,0,0,32,3,0,4,
28,4,0,0,28,5,0,0,32,4,0,5,28,5,0,0,
28,6,0,0,32,5,0,6,30,17,0,3,32,32,32,32,
32,32,32,32,115,101,108,102,46,112,111,115,44,115,101,108,
102,46,116,121,112,101,44,115,101,108,102,46,118,97,108,44,
115,101,108,102,46,105,116,101,109,115,61,112,111,115,44,116,
121,112,101,44,118,97,108,44,105,116,101,109,115,0,0,0,
15,6,2,0,15,7,3,0,15,8,4,0,15,9,5,0,
12,10,0,3,112,111,115,0,10,1,10,6,12,6,0,4,
116,121,112,101,0,0,0,0,10,1,6,7,12,6,0,3,
118,97,108,0,10,1,6,8,12,6,0,5,105,116,101,109,
115,0,0,0,10,1,6,9,0,0,0,0,12,2,0,8,
95,95,105,110,105,116,95,95,0,0,0,0,10,0,2,1,
30,6,0,5,100,101,102,32,117,95,101,114,114,111,114,40,
99,116,120,44,115,44,105,41,58,0,0,0,16,0,0,177,
44,12,0,0,30,6,0,5,100,101,102,32,117,95,101,114,
114,111,114,40,99,116,120,44,115,44,105,41,58,0,0,0,
12,1,0,16,99,111,114,101,47,116,111,107,101,110,105,122,
101,46,112,121,0,0,0,0,33,1,0,0,12,1,0,7,
117,95,101,114,114,111,114,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,30,3,0,6,32,32,32,32,121,44,120,32,
61,32,105,0,11,6,0,0,0,0,0,0,0,0,0,0,
9,5,3,6,15,4,5,0,11,7,0,0,0,0,0,0,
0,0,240,63,9,6,3,7,15,5,6,0,30,8,0,7,
32,32,32,32,108,105,110,101,32,61,32,115,46,115,112,108,
105,116,40,39,92,110,39,41,91,121,45,49,93,0,0,0,
12,8,0,5,115,112,108,105,116,0,0,0,9,7,2,8,
12,8,0,1,10,0,0,0,31,6,8,1,19,6,7,6,
11,8,0,0,0,0,0,0,0,0,240,63,2,7,4,8,
9,6,6,7,15,3,6,0,30,3,0,8,32,32,32,32,
112,32,61,32,39,39,0,0,12,7,0,0,0,0,0,0,
15,6,7,0,30,6,0,9,32,32,32,32,105,102,32,121,
32,60,32,49,48,58,32,112,32,43,61,32,39,32,39,0,
11,8,0,0,0,0,0,0,0,0,36,64,25,7,4,8,
21,7,0,0,18,0,0,6,12,8,0,1,32,0,0,0,
1,7,6,8,15,6,7,0,18,0,0,1,30,7,0,10,
32,32,32,32,105,102,32,121,32,60,32,49,48,48,58,32,
112,32,43,61,32,39,32,32,39,0,0,0,11,8,0,0,
0,0,0,0,0,0,89,64,25,7,4,8,21,7,0,0,
18,0,0,6,12,8,0,2,32,32,0,0,1,7,6,8,
15,6,7,0,18,0,0,1,30,10,0,11,32,32,32,32,
114,32,61,32,112,32,43,32,115,116,114,40,121,41,32,43,
32,34,58,32,34,32,43,32,108,105,110,101,32,43,32,34,
92,110,34,0,12,11,0,3,115,116,114,0,13,10,11,0,
15,11,4,0,31,9,11,1,19,9,10,9,1,8,6,9,
12,9,0,2,58,32,0,0,1,8,8,9,1,8,8,3,
12,9,0,1,10,0,0,0,1,8,8,9,15,7,8,0,
30,9,0,12,32,32,32,32,114,32,43,61,32,34,32,32,
32,32,32,34,43,34,32,34,42,120,43,34,94,34,32,43,
39,92,110,39,0,0,0,0,12,9,0,5,32,32,32,32,
32,0,0,0,12,10,0,1,32,0,0,0,3,10,10,5,
1,9,9,10,12,10,0,1,94,0,0,0,1,9,9,10,
12,10,0,1,10,0,0,0,1,9,9,10,1,8,7,9,
15,7,8,0,30,8,0,13,32,32,32,32,114,97,105,115,
101,32,39,101,114,114,111,114,58,32,39,43,99,116,120,43,
39,92,110,39,43,114,0,0,12,8,0,7,101,114,114,111,
28,6,0,0,32,5,0,6,15,6,2,0,15,7,3,0,
15,8,4,0,15,9,5,0,12,10,0,3,112,111,115,0,
10,1,10,6,12,6,0,4,116,121,112,101,0,0,0,0,
10,1,6,7,12,6,0,3,118,97,108,0,10,1,6,8,
12,6,0,5,105,116,101,109,115,0,0,0,10,1,6,9,
0,0,0,0,12,2,0,8,95,95,105,110,105,116,95,95,
0,0,0,0,10,0,2,1,16,2,0,26,44,7,0,0,
28,2,0,0,9,1,0,2,12,4,0,4,98,105,110,100,
0,0,0,0,13,3,4,0,12,6,0,5,84,111,107,101,
110,0,0,0,13,4,6,0,12,6,0,8,95,95,105,110,
105,116,95,95,0,0,0,0,9,4,4,6,15,5,1,0,
31,2,4,2,19,2,3,2,12,3,0,8,95,95,105,110,
105,116,95,95,0,0,0,0,10,1,3,2,0,0,0,0,
12,3,0,7,95,95,110,101,119,95,95,0,10,0,3,2,
16,3,0,22,44,5,0,0,26,1,0,0,12,4,0,5,
84,111,107,101,110,0,0,0,13,3,4,0,12,4,0,7,
95,95,110,101,119,95,95,0,9,3,3,4,15,4,1,0,
31,2,4,1,19,2,3,2,12,3,0,8,95,95,105,110,
105,116,95,95,0,0,0,0,9,2,1,3,19,4,2,0,
20,1,0,0,0,0,0,0,12,4,0,8,95,95,99,97,
108,108,95,95,0,0,0,0,10,0,4,3,16,0,0,97,
44,12,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,11,6,0,0,
0,0,0,0,0,0,0,0,9,5,3,6,15,4,5,0,
11,7,0,0,0,0,0,0,0,0,240,63,9,6,3,7,
15,5,6,0,12,8,0,5,115,112,108,105,116,0,0,0,
9,7,2,8,12,8,0,1,10,0,0,0,31,6,8,1,
19,6,7,6,11,8,0,0,0,0,0,0,0,0,240,63,
2,7,4,8,9,6,6,7,15,3,6,0,12,7,0,0,
0,0,0,0,15,6,7,0,11,8,0,0,0,0,0,0,
0,0,36,64,25,7,4,8,21,7,0,0,18,0,0,6,
12,8,0,1,32,0,0,0,1,7,6,8,15,6,7,0,
18,0,0,1,11,8,0,0,0,0,0,0,0,0,89,64,
25,7,4,8,21,7,0,0,18,0,0,6,12,8,0,2,
32,32,0,0,1,7,6,8,15,6,7,0,18,0,0,1,
12,11,0,3,115,116,114,0,13,10,11,0,15,11,4,0,
31,9,11,1,19,9,10,9,1,8,6,9,12,9,0,2,
58,32,0,0,1,8,8,9,1,8,8,3,12,9,0,1,
10,0,0,0,1,8,8,9,15,7,8,0,12,9,0,5,
32,32,32,32,32,0,0,0,12,10,0,1,32,0,0,0,
3,10,10,5,1,9,9,10,12,10,0,1,94,0,0,0,
1,9,9,10,12,10,0,1,10,0,0,0,1,9,9,10,
1,8,7,9,15,7,8,0,12,8,0,7,101,114,114,111,
114,58,32,0,1,8,8,1,12,9,0,1,10,0,0,0,
1,8,8,9,1,8,8,7,37,8,0,0,0,0,0,0,
12,2,0,7,117,95,101,114,114,111,114,0,14,2,0,0,
30,11,0,15,73,83,89,77,66,79,76,83,32,61,32,39,
96,45,61,91,93,59,44,46,47,126,33,64,36,37,94,38,
42,40,41,43,123,125,58,60,62,63,124,39,0,0,0,0,
12,2,0,8,73,83,89,77,66,79,76,83,0,0,0,0,
12,3,0,27,96,45,61,91,93,59,44,46,47,126,33,64,
36,37,94,38,42,40,41,43,123,125,58,60,62,63,124,0,
14,2,3,0,30,3,0,16,83,89,77,66,79,76,83,32,
61,32,91,0,12,2,0,7,83,89,77,66,79,76,83,0,
30,19,0,17,32,32,32,32,39,100,101,102,39,44,39,99,
108,97,115,115,39,44,39,121,105,101,108,100,39,44,39,114,
101,116,117,114,110,39,44,39,112,97,115,115,39,44,39,97,
110,100,39,44,39,111,114,39,44,39,110,111,116,39,44,39,
105,110,39,44,39,105,109,112,111,114,116,39,44,0,0,0,
12,4,0,3,100,101,102,0,12,5,0,5,99,108,97,115,
115,0,0,0,12,6,0,5,121,105,101,108,100,0,0,0,
12,7,0,6,114,101,116,117,114,110,0,0,12,8,0,4,
112,97,115,115,0,0,0,0,12,9,0,3,97,110,100,0,
12,10,0,2,111,114,0,0,12,11,0,3,110,111,116,0,
12,12,0,2,105,110,0,0,12,13,0,6,105,109,112,111,
114,116,0,0,30,17,0,18,32,32,32,32,39,105,115,39,
44,39,119,104,105,108,101,39,44,39,98,114,101,97,107,39,
44,39,102,111,114,39,44,39,99,111,110,116,105,110,117,101,
39,44,39,105,102,39,44,39,101,108,115,101,39,44,39,101,
108,105,102,39,44,39,116,114,121,39,44,0,12,14,0,2,
105,115,0,0,12,15,0,5,119,104,105,108,101,0,0,0,
12,16,0,5,98,114,101,97,107,0,0,0,12,17,0,3,
102,111,114,0,12,18,0,8,99,111,110,116,105,110,117,101,
0,0,0,0,12,19,0,2,105,102,0,0,12,20,0,4,
101,108,115,101,0,0,0,0,12,21,0,4,101,108,105,102,
0,0,0,0,12,22,0,3,116,114,121,0,30,17,0,19,
32,32,32,32,39,101,120,99,101,112,116,39,44,39,114,97,
105,115,101,39,44,39,84,114,117,101,39,44,39,70,97,108,
115,101,39,44,39,78,111,110,101,39,44,39,103,108,111,98,
97,108,39,44,39,100,101,108,39,44,39,102,114,111,109,39,
44,0,0,0,12,23,0,6,101,120,99,101,112,116,0,0,
12,24,0,5,114,97,105,115,101,0,0,0,12,25,0,4,
84,114,117,101,0,0,0,0,12,26,0,5,70,97,108,115,
101,0,0,0,12,27,0,4,78,111,110,101,0,0,0,0,
12,28,0,6,103,108,111,98,97,108,0,0,12,29,0,3,
100,101,108,0,12,30,0,4,102,114,111,109,0,0,0,0,
30,10,0,20,32,32,32,32,39,45,39,44,39,43,39,44,
39,42,39,44,39,42,42,39,44,39,47,39,44,39,37,39,
44,39,60,60,39,44,39,62,62,39,44,0,12,31,0,1,
45,0,0,0,12,32,0,1,43,0,0,0,12,33,0,1,
42,0,0,0,12,34,0,2,42,42,0,0,12,35,0,1,
47,0,0,0,12,36,0,1,37,0,0,0,12,37,0,2,
60,60,0,0,12,38,0,2,62,62,0,0,30,17,0,21,
32,32,32,32,39,45,61,39,44,39,43,61,39,44,39,42,
61,39,44,39,47,61,39,44,39,61,39,44,39,61,61,39,
44,39,33,61,39,44,39,60,39,44,39,62,39,44,32,39,
124,61,39,44,32,39,38,61,39,44,32,39,94,61,39,44,
0,0,0,0,12,39,0,2,45,61,0,0,12,40,0,2,
43,61,0,0,12,41,0,2,42,61,0,0,12,42,0,2,
47,61,0,0,12,43,0,1,61,0,0,0,12,44,0,2,
61,61,0,0,12,45,0,2,33,61,0,0,12,46,0,1,
60,0,0,0,12,47,0,1,62,0,0,0,12,48,0,2,
124,61,0,0,12,49,0,2,38,61,0,0,12,50,0,2,
94,61,0,0,30,18,0,22,32,32,32,32,39,60,61,39,
44,39,62,61,39,44,39,91,39,44,39,93,39,44,39,123,
39,44,39,125,39,44,39,40,39,44,39,41,39,44,39,46,
39,44,39,58,39,44,39,44,39,44,39,59,39,44,39,38,
39,44,39,124,39,44,39,33,39,44,32,39,94,39,0,0,
12,51,0,2,60,61,0,0,12,52,0,2,62,61,0,0,
12,53,0,1,91,0,0,0,12,54,0,1,93,0,0,0,
12,55,0,1,123,0,0,0,12,56,0,1,125,0,0,0,
12,57,0,1,40,0,0,0,12,58,0,1,41,0,0,0,
12,59,0,1,46,0,0,0,12,60,0,1,58,0,0,0,
12,61,0,1,44,0,0,0,12,62,0,1,59,0,0,0,
12,63,0,1,38,0,0,0,12,64,0,1,124,0,0,0,
12,65,0,1,33,0,0,0,12,66,0,1,94,0,0,0,
27,3,4,63,14,2,3,0,30,11,0,24,66,95,66,69,
71,73,78,44,66,95,69,78,68,32,61,32,91,39,91,39,
44,39,40,39,44,39,123,39,93,44,91,39,93,39,44,39,
41,39,44,39,125,39,93,0,12,4,0,1,91,0,0,0,
12,5,0,1,40,0,0,0,12,6,0,1,123,0,0,0,
27,3,4,3,15,2,3,0,12,5,0,1,93,0,0,0,
12,6,0,1,41,0,0,0,12,7,0,1,125,0,0,0,
27,4,5,3,15,3,4,0,12,4,0,7,66,95,66,69,
71,73,78,0,14,4,2,0,12,2,0,5,66,95,69,78,
68,0,0,0,14,2,3,0,30,4,0,26,99,108,97,115,
115,32,84,68,97,116,97,58,0,0,0,0,26,2,0,0,
12,3,0,5,84,68,97,116,97,0,0,0,14,3,2,0,
12,5,0,7,115,101,116,109,101,116,97,0,13,4,5,0,
15,5,2,0,12,7,0,6,111,98,106,101,99,116,0,0,
13,6,7,0,31,3,5,2,19,3,4,3,16,3,0,93,
44,6,0,0,30,6,0,27,32,32,32,32,100,101,102,32,
95,95,105,110,105,116,95,95,40,115,101,108,102,41,58,0,
12,1,0,16,99,111,114,101,47,116,111,107,101,110,105,122,
101,46,112,121,0,0,0,0,33,1,0,0,12,1,0,8,
95,95,105,110,105,116,95,95,0,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,11,0,28,32,32,32,32,
32,32,32,32,115,101,108,102,46,121,44,115,101,108,102,46,
121,105,44,115,101,108,102,46,110,108,32,61,32,49,44,48,
44,84,114,117,101,0,0,0,11,3,0,0,0,0,0,0,
0,0,240,63,15,2,3,0,11,4,0,0,0,0,0,0,
0,0,0,0,15,3,4,0,11,5,0,0,0,0,0,0,
0,0,240,63,15,4,5,0,12,5,0,1,121,0,0,0,
10,1,5,2,12,2,0,2,121,105,0,0,10,1,2,3,
12,2,0,2,110,108,0,0,10,1,2,4,30,13,0,29,
32,32,32,32,32,32,32,32,115,101,108,102,46,114,101,115,
44,115,101,108,102,46,105,110,100,101,110,116,44,115,101,108,
102,46,98,114,97,99,101,115,32,61,32,91,93,44,91,48,
93,44,48,0,27,3,0,0,15,2,3,0,11,5,0,0,
0,0,0,0,0,0,0,0,27,4,5,1,15,3,4,0,
11,5,0,0,0,0,0,0,0,0,0,0,15,4,5,0,
12,5,0,3,114,101,115,0,10,1,5,2,12,2,0,6,
105,110,100,101,110,116,0,0,10,1,2,3,12,2,0,6,
98,114,97,99,101,115,0,0,10,1,2,4,0,0,0,0,
12,4,0,8,95,95,105,110,105,116,95,95,0,0,0,0,
10,2,4,3,16,4,0,55,44,12,0,0,30,15,0,30,
32,32,32,32,100,101,102,32,97,100,100,40,115,101,108,102,
44,116,44,118,41,58,32,115,101,108,102,46,114,101,115,46,
97,112,112,101,110,100,40,84,111,107,101,110,40,115,101,108,
102,46,102,44,116,44,118,41,41,0,0,0,12,1,0,16,
99,111,114,101,47,116,111,107,101,110,105,122,101,46,112,121,
0,0,0,0,33,1,0,0,12,1,0,3,97,100,100,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,12,6,0,3,
114,101,115,0,9,5,1,6,12,6,0,6,97,112,112,101,
110,100,0,0,9,5,5,6,12,8,0,5,84,111,107,101,
110,0,0,0,13,7,8,0,12,11,0,1,102,0,0,0,
9,8,1,11,15,9,2,0,15,10,3,0,31,6,8,3,
19,6,7,6,31,4,6,1,19,4,5,4,0,0,0,0,
12,5,0,3,97,100,100,0,10,2,5,4,30,4,0,32,
100,101,102,32,99,108,101,97,110,40,115,41,58,0,0,0,
16,2,0,67,44,6,0,0,30,4,0,32,100,101,102,32,
99,108,101,97,110,40,115,41,58,0,0,0,12,1,0,16,
99,111,114,101,47,116,111,107,101,110,105,122,101,46,112,121,
0,0,0,0,33,1,0,0,12,1,0,5,99,108,101,97,
110,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,8,0,33,32,32,32,32,115,32,61,32,115,46,114,101,
112,108,97,99,101,40,39,92,114,92,110,39,44,39,92,110,
39,41,0,0,12,4,0,7,114,101,112,108,97,99,101,0,
9,3,1,4,12,4,0,2,13,10,0,0,12,5,0,1,
10,0,0,0,31,2,4,2,19,2,3,2,15,1,2,0,
30,8,0,34,32,32,32,32,115,32,61,32,115,46,114,101,
112,108,97,99,101,40,39,92,114,39,44,39,92,110,39,41,
0,0,0,0,12,4,0,7,114,101,112,108,97,99,101,0,
12,4,0,7,117,95,101,114,114,111,114,0,14,4,0,0,
12,4,0,8,73,83,89,77,66,79,76,83,0,0,0,0,
12,5,0,26,96,45,61,91,93,59,44,46,47,126,33,64,
36,37,94,38,42,40,41,43,123,125,58,60,62,63,0,0,
14,4,5,0,12,4,0,7,83,89,77,66,79,76,83,0,
12,6,0,3,100,101,102,0,12,7,0,5,99,108,97,115,
115,0,0,0,12,8,0,5,121,105,101,108,100,0,0,0,
12,9,0,6,114,101,116,117,114,110,0,0,12,10,0,4,
112,97,115,115,0,0,0,0,12,11,0,3,97,110,100,0,
12,12,0,2,111,114,0,0,12,13,0,3,110,111,116,0,
12,14,0,2,105,110,0,0,12,15,0,6,105,109,112,111,
114,116,0,0,12,16,0,2,105,115,0,0,12,17,0,5,
119,104,105,108,101,0,0,0,12,18,0,5,98,114,101,97,
107,0,0,0,12,19,0,3,102,111,114,0,12,20,0,8,
99,111,110,116,105,110,117,101,0,0,0,0,12,21,0,2,
105,102,0,0,12,22,0,4,101,108,115,101,0,0,0,0,
12,23,0,4,101,108,105,102,0,0,0,0,12,24,0,3,
116,114,121,0,12,25,0,6,101,120,99,101,112,116,0,0,
12,26,0,5,114,97,105,115,101,0,0,0,12,27,0,4,
84,114,117,101,0,0,0,0,12,28,0,5,70,97,108,115,
101,0,0,0,12,29,0,4,78,111,110,101,0,0,0,0,
12,30,0,6,103,108,111,98,97,108,0,0,12,31,0,3,
100,101,108,0,12,32,0,4,102,114,111,109,0,0,0,0,
12,33,0,1,45,0,0,0,12,34,0,1,43,0,0,0,
12,35,0,1,42,0,0,0,12,36,0,2,42,42,0,0,
12,37,0,1,47,0,0,0,12,38,0,1,37,0,0,0,
12,39,0,2,60,60,0,0,12,40,0,2,62,62,0,0,
12,41,0,2,45,61,0,0,12,42,0,2,43,61,0,0,
12,43,0,2,42,61,0,0,12,44,0,2,47,61,0,0,
12,45,0,1,61,0,0,0,12,46,0,2,61,61,0,0,
12,47,0,2,33,61,0,0,12,48,0,1,60,0,0,0,
12,49,0,1,62,0,0,0,12,50,0,2,60,61,0,0,
12,51,0,2,62,61,0,0,12,52,0,1,91,0,0,0,
12,53,0,1,93,0,0,0,12,54,0,1,123,0,0,0,
12,55,0,1,125,0,0,0,12,56,0,1,40,0,0,0,
12,57,0,1,41,0,0,0,12,58,0,1,46,0,0,0,
12,59,0,1,58,0,0,0,12,60,0,1,44,0,0,0,
12,61,0,1,59,0,0,0,12,62,0,1,38,0,0,0,
12,63,0,1,124,0,0,0,12,64,0,1,33,0,0,0,
27,5,6,59,14,4,5,0,12,6,0,1,91,0,0,0,
12,7,0,1,40,0,0,0,12,8,0,1,123,0,0,0,
27,5,6,3,15,4,5,0,12,7,0,1,93,0,0,0,
12,8,0,1,41,0,0,0,12,9,0,1,125,0,0,0,
27,6,7,3,15,5,6,0,12,6,0,7,66,95,66,69,
71,73,78,0,14,6,4,0,12,4,0,5,66,95,69,78,
68,0,0,0,14,4,5,0,26,4,0,0,12,5,0,5,
84,68,97,116,97,0,0,0,14,5,4,0,16,5,0,48,
44,6,0,0,28,2,0,0,9,1,0,2,11,3,0,0,
0,0,0,0,0,0,240,63,15,2,3,0,11,4,0,0,
0,0,0,0,0,0,0,0,15,3,4,0,11,5,0,0,
0,0,0,0,0,0,240,63,15,4,5,0,12,5,0,1,
121,0,0,0,10,1,5,2,12,2,0,2,121,105,0,0,
10,1,2,3,12,2,0,2,110,108,0,0,10,1,2,4,
27,3,0,0,15,2,3,0,11,5,0,0,0,0,0,0,
0,0,0,0,27,4,5,1,15,3,4,0,11,5,0,0,
0,0,0,0,0,0,0,0,15,4,5,0,12,5,0,3,
114,101,115,0,10,1,5,2,12,2,0,6,105,110,100,101,
110,116,0,0,10,1,2,3,12,2,0,6,98,114,97,99,
101,115,0,0,10,1,2,4,0,0,0,0,12,6,0,8,
95,95,105,110,105,116,95,95,0,0,0,0,10,4,6,5,
16,6,0,29,44,12,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,28,4,0,0,9,3,0,4,
12,6,0,3,114,101,115,0,9,5,1,6,12,6,0,6,
97,112,112,101,110,100,0,0,9,5,5,6,12,8,0,5,
84,111,107,101,110,0,0,0,13,7,8,0,12,11,0,1,
102,0,0,0,9,8,1,11,15,9,2,0,15,10,3,0,
31,6,8,3,19,6,7,6,31,4,6,1,19,4,5,4,
0,0,0,0,12,7,0,3,97,100,100,0,10,4,7,6,
16,7,0,43,44,7,0,0,28,2,0,0,9,1,0,2,
12,4,0,4,98,105,110,100,0,0,0,0,13,3,4,0,
12,6,0,5,84,68,97,116,97,0,0,0,13,4,6,0,
12,6,0,8,95,95,105,110,105,116,95,95,0,0,0,0,
9,4,4,6,15,5,1,0,31,2,4,2,19,2,3,2,
12,3,0,8,95,95,105,110,105,116,95,95,0,0,0,0,
10,1,3,2,12,4,0,4,98,105,110,100,0,0,0,0,
13,3,4,0,12,6,0,5,84,68,97,116,97,0,0,0,
13,4,6,0,12,6,0,3,97,100,100,0,9,4,4,6,
15,5,1,0,31,2,4,2,19,2,3,2,12,3,0,3,
97,100,100,0,10,1,3,2,0,0,0,0,12,8,0,7,
95,95,110,101,119,95,95,0,10,4,8,7,16,8,0,22,
44,5,0,0,26,1,0,0,12,4,0,5,84,68,97,116,
97,0,0,0,13,3,4,0,12,4,0,7,95,95,110,101,
119,95,95,0,9,3,3,4,15,4,1,0,31,2,4,1,
19,2,3,2,12,3,0,8,95,95,105,110,105,116,95,95,
0,0,0,0,9,2,1,3,19,4,2,0,20,1,0,0,
0,0,0,0,12,9,0,8,95,95,99,97,108,108,95,95,
0,0,0,0,10,4,9,8,16,4,0,28,44,6,0,0,
28,2,0,0,9,1,0,2,12,4,0,7,114,101,112,108,
97,99,101,0,9,3,1,4,12,4,0,2,13,10,0,0,
12,5,0,1,10,0,0,0,31,2,4,2,19,2,3,2,
15,1,2,0,12,4,0,7,114,101,112,108,97,99,101,0,
9,3,1,4,12,4,0,1,13,0,0,0,12,5,0,1,
10,0,0,0,31,2,4,2,19,2,3,2,15,1,2,0,
30,4,0,35,32,32,32,32,114,101,116,117,114,110,32,115,
0,0,0,0,20,1,0,0,0,0,0,0,12,5,0,5,
99,108,101,97,110,0,0,0,14,5,2,0,30,5,0,37,
100,101,102,32,116,111,107,101,110,105,122,101,40,115,41,58,
0,0,0,0,16,5,0,126,44,10,0,0,30,5,0,37,
100,101,102,32,116,111,107,101,110,105,122,101,40,115,41,58,
0,0,0,0,12,1,0,16,99,111,114,101,47,116,111,107,
101,110,105,122,101,46,112,121,0,0,0,0,33,1,0,0,
12,1,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,4,0,38,
32,32,32,32,103,108,111,98,97,108,32,84,0,0,0,0,
30,5,0,39,32,32,32,32,115,32,61,32,99,108,101,97,
110,40,115,41,0,0,0,0,12,4,0,5,99,108,101,97,
20,1,0,0,0,0,0,0,12,9,0,5,99,108,101,97,
110,0,0,0,14,9,4,0,16,9,0,41,44,8,0,0,
28,2,0,0,9,1,0,2,12,4,0,5,99,108,101,97,
110,0,0,0,13,3,4,0,15,4,1,0,31,2,4,1,
19,2,3,2,15,1,2,0,30,8,0,40,32,32,32,32,
84,44,105,44,108,32,61,32,84,68,97,116,97,40,41,44,
48,44,108,101,110,40,115,41,0,0,0,0,12,5,0,5,
84,68,97,116,97,0,0,0,13,4,5,0,31,3,0,0,
19,3,4,3,15,2,3,0,11,4,0,0,0,0,0,0,
0,0,0,0,15,3,4,0,12,7,0,3,108,101,110,0,
13,6,7,0,15,7,1,0,31,5,7,1,19,5,6,5,
15,4,5,0,12,5,0,1,84,0,0,0,14,5,2,0,
15,2,3,0,15,3,4,0,30,9,0,41,32,32,32,32,
116,114,121,58,32,114,101,116,117,114,110,32,100,111,95,116,
111,107,101,110,105,122,101,40,115,44,105,44,108,41,0,0,
38,0,0,14,12,6,0,11,100,111,95,116,111,107,101,110,
105,122,101,0,13,5,6,0,15,6,1,0,15,7,2,0,
15,8,3,0,31,4,6,3,19,4,5,4,20,4,0,0,
38,0,0,0,18,0,0,29,30,10,0,42,32,32,32,32,
101,120,99,101,112,116,58,32,117,95,101,114,114,111,114,40,
39,116,111,107,101,110,105,122,101,39,44,115,44,84,46,102,
41,0,0,0,12,6,0,7,117,95,101,114,114,111,114,0,
13,5,6,0,12,6,0,8,116,111,107,101,110,105,122,101,
0,0,0,0,15,7,1,0,12,9,0,1,84,0,0,0,
13,8,9,0,12,9,0,1,102,0,0,0,9,8,8,9,
31,4,6,3,19,4,5,4,0,0,0,0,12,6,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,14,6,5,0,
30,6,0,44,100,101,102,32,100,111,95,116,111,107,101,110,
105,122,101,40,115,44,105,44,108,41,58,0,16,6,2,57,
44,11,0,0,30,6,0,44,100,101,102,32,100,111,95,116,
111,107,101,110,105,122,101,40,115,44,105,44,108,41,58,0,
12,1,0,16,99,111,114,101,47,116,111,107,101,110,105,122,
101,46,112,121,0,0,0,0,33,1,0,0,12,1,0,11,
100,111,95,116,111,107,101,110,105,122,101,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
28,4,0,0,9,3,0,4,30,4,0,45,32,32,32,32,
103,108,111,98,97,108,32,84,0,0,0,0,30,7,0,46,
32,32,32,32,84,46,102,32,61,32,40,84,46,121,44,105,
45,84,46,121,105,43,49,41,0,0,0,0,12,5,0,1,
19,2,3,2,15,1,2,0,38,0,0,11,12,4,0,11,
100,111,95,116,111,107,101,110,105,122,101,0,13,3,4,0,
15,4,1,0,31,2,4,1,19,2,3,2,20,2,0,0,
18,0,0,18,12,4,0,7,117,95,101,114,114,111,114,0,
13,3,4,0,12,4,0,8,116,111,107,101,110,105,122,101,
0,0,0,0,15,5,1,0,12,7,0,1,84,0,0,0,
13,6,7,0,12,7,0,1,102,0,0,0,9,6,6,7,
31,2,4,3,19,2,3,2,0,0,0,0,12,10,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,14,10,9,0,
16,10,1,128,44,13,0,0,28,2,0,0,9,1,0,2,
12,5,0,5,84,68,97,116,97,0,0,0,13,4,5,0,
31,3,0,0,19,3,4,3,15,2,3,0,11,4,0,0,
0,0,0,0,0,0,0,0,15,3,4,0,12,7,0,3,
108,101,110,0,13,6,7,0,15,7,1,0,31,5,7,1,
19,5,6,5,15,4,5,0,12,5,0,1,84,0,0,0,
14,5,2,0,15,2,3,0,15,3,4,0,12,5,0,1,
84,0,0,0,13,4,5,0,12,8,0,1,84,0,0,0,
13,6,8,0,12,8,0,1,121,0,0,0,9,6,6,8,
12,9,0,1,84,0,0,0,13,8,9,0,12,9,0,2,
121,105,0,0,9,8,8,9,2,7,2,8,11,8,0,0,
0,0,0,0,0,0,240,63,1,7,7,8,27,5,6,2,
12,6,0,1,102,0,0,0,10,4,6,5,30,5,0,47,
32,32,32,32,119,104,105,108,101,32,105,32,60,32,108,58,
0,0,0,0,25,4,2,3,21,4,0,0,18,0,1,202,
30,10,0,48,32,32,32,32,32,32,32,32,99,32,61,32,
115,91,105,93,59,32,84,46,102,32,61,32,40,84,46,121,
44,105,45,84,46,121,105,43,49,41,0,0,9,5,1,2,
15,4,5,0,12,6,0,1,84,0,0,0,13,5,6,0,
12,9,0,1,84,0,0,0,13,7,9,0,12,9,0,1,
121,0,0,0,9,7,7,9,12,10,0,1,84,0,0,0,
13,9,10,0,12,10,0,2,121,105,0,0,9,9,9,10,
2,8,2,9,11,9,0,0,0,0,0,0,0,0,240,63,
1,8,8,9,27,6,7,2,12,7,0,1,102,0,0,0,
10,5,7,6,30,13,0,49,32,32,32,32,32,32,32,32,
105,102,32,84,46,110,108,58,32,84,46,110,108,32,61,32,
70,97,108,115,101,59,32,105,32,61,32,100,111,95,105,110,
100,101,110,116,40,115,44,105,44,108,41,0,12,6,0,1,
84,0,0,0,13,5,6,0,12,6,0,2,110,108,0,0,
9,5,5,6,21,5,0,0,18,0,0,22,12,6,0,1,
84,0,0,0,13,5,6,0,11,6,0,0,0,0,0,0,
0,0,0,0,12,7,0,2,110,108,0,0,10,5,7,6,
12,7,0,9,100,111,95,105,110,100,101,110,116,0,0,0,
12,6,0,1,102,0,0,0,10,4,6,5,25,4,2,3,
21,4,0,0,18,0,1,53,9,5,1,2,15,4,5,0,
12,6,0,1,84,0,0,0,13,5,6,0,12,9,0,1,
84,0,0,0,13,7,9,0,12,9,0,1,121,0,0,0,
9,7,7,9,12,10,0,1,84,0,0,0,13,9,10,0,
12,10,0,2,121,105,0,0,9,9,9,10,2,8,2,9,
11,9,0,0,0,0,0,0,0,0,240,63,1,8,8,9,
27,6,7,2,12,7,0,1,102,0,0,0,10,5,7,6,
12,6,0,1,84,0,0,0,13,5,6,0,12,6,0,2,
110,108,0,0,9,5,5,6,21,5,0,0,18,0,0,22,
12,6,0,1,84,0,0,0,13,5,6,0,11,6,0,0,
0,0,0,0,0,0,0,0,12,7,0,2,110,108,0,0,
10,5,7,6,12,7,0,9,100,111,95,105,110,100,101,110,
116,0,0,0,13,6,7,0,15,7,1,0,15,8,2,0,
15,9,3,0,31,5,7,3,19,5,6,5,15,2,5,0,
18,0,0,253,12,6,0,1,10,0,0,0,23,5,4,6,
21,5,0,0,18,0,0,12,12,7,0,5,100,111,95,110,
108,0,0,0,13,6,7,0,15,7,1,0,15,8,2,0,
15,9,3,0,31,5,7,3,19,5,6,5,15,2,5,0,
18,0,0,237,12,6,0,8,73,83,89,77,66,79,76,83,
0,0,0,0,13,5,6,0,36,5,5,4,21,5,0,0,
18,0,0,13,12,7,0,9,100,111,95,115,121,109,98,111,
108,0,0,0,13,6,7,0,15,7,1,0,15,8,2,0,
15,9,3,0,31,5,7,3,19,5,6,5,15,2,5,0,
18,0,0,217,11,7,0,0,0,0,0,0,0,0,0,0,
12,5,0,1,48,0,0,0,24,5,5,4,23,6,5,7,
21,6,0,0,18,0,0,2,18,0,0,4,12,8,0,1,
57,0,0,0,24,5,4,8,21,5,0,0,18,0,0,13,
12,7,0,9,100,111,95,110,117,109,98,101,114,0,0,0,
13,6,7,0,15,7,1,0,15,8,2,0,15,9,3,0,
31,5,7,3,19,5,6,5,15,2,5,0,18,0,1,121,
30,11,0,50,32,32,32,32,32,32,32,32,101,108,105,102,
32,99,32,61,61,32,39,92,110,39,58,32,105,32,61,32,
100,111,95,110,108,40,115,44,105,44,108,41,0,0,0,0,
12,6,0,1,10,0,0,0,23,5,4,6,21,5,0,0,
18,0,0,12,12,7,0,5,100,111,95,110,108,0,0,0,
31,5,7,3,19,5,6,5,15,2,5,0,18,0,0,190,
11,7,0,0,0,0,0,0,0,0,240,63,11,9,0,0,
0,0,0,0,0,0,240,63,11,11,0,0,0,0,0,0,
0,0,0,0,12,5,0,1,97,0,0,0,24,5,5,4,
23,10,5,11,21,10,0,0,18,0,0,2,18,0,0,4,
12,12,0,1,122,0,0,0,24,5,4,12,23,8,5,9,
21,8,0,0,18,0,0,2,18,0,0,14,11,11,0,0,
0,0,0,0,0,0,0,0,12,5,0,1,65,0,0,0,
24,5,5,4,23,10,5,11,21,10,0,0,18,0,0,2,
18,0,0,4,12,12,0,1,90,0,0,0,24,5,4,12,
23,6,5,7,21,6,0,0,18,0,0,2,18,0,0,4,
12,8,0,1,95,0,0,0,23,5,4,8,21,5,0,0,
18,0,0,12,12,7,0,7,100,111,95,110,97,109,101,0,
13,6,7,0,15,7,1,0,15,8,2,0,15,9,3,0,
31,5,7,3,19,5,6,5,15,2,5,0,18,0,1,93,
30,13,0,51,32,32,32,32,32,32,32,32,101,108,105,102,
32,99,32,105,110,32,73,83,89,77,66,79,76,83,58,32,
105,32,61,32,100,111,95,115,121,109,98,111,108,40,115,44,
105,44,108,41,0,0,0,0,12,6,0,8,73,83,89,77,
66,79,76,83,0,0,0,0,13,5,6,0,36,5,5,4,
21,5,0,0,18,0,0,13,12,7,0,9,100,111,95,115,
121,109,98,111,108,0,0,0,13,6,7,0,15,7,1,0,
15,8,2,0,15,9,3,0,31,5,7,3,19,5,6,5,
15,2,5,0,18,0,1,59,30,15,0,52,32,32,32,32,
32,32,32,32,101,108,105,102,32,99,32,62,61,32,39,48,
39,32,97,110,100,32,99,32,60,61,32,39,57,39,58,32,
105,32,61,32,100,111,95,110,117,109,98,101,114,40,115,44,
105,44,108,41,0,0,0,0,12,5,0,1,48,0,0,0,
24,5,5,4,21,5,0,0,18,0,0,4,12,6,0,1,
57,0,0,0,24,5,4,6,21,5,0,0,18,0,0,13,
12,7,0,9,100,111,95,110,117,109,98,101,114,0,0,0,
31,5,7,3,19,5,6,5,15,2,5,0,18,0,0,134,
11,7,0,0,0,0,0,0,0,0,240,63,12,8,0,1,
34,0,0,0,23,5,4,8,23,6,5,7,21,6,0,0,
18,0,0,2,18,0,0,4,12,8,0,1,39,0,0,0,
23,5,4,8,21,5,0,0,18,0,0,13,12,7,0,9,
100,111,95,115,116,114,105,110,103,0,0,0,13,6,7,0,
15,7,1,0,15,8,2,0,15,9,3,0,31,5,7,3,
19,5,6,5,15,2,5,0,18,0,0,107,12,6,0,1,
35,0,0,0,23,5,4,6,21,5,0,0,18,0,0,13,
12,7,0,10,100,111,95,99,111,109,109,101,110,116,0,0,
13,6,7,0,15,7,1,0,15,8,2,0,15,9,3,0,
31,5,7,3,19,5,6,5,15,2,5,0,18,0,1,21,
30,18,0,54,32,32,32,32,32,32,32,32,32,32,32,32,
40,99,32,62,61,32,39,65,39,32,97,110,100,32,99,32,
60,61,32,39,90,39,41,32,111,114,32,99,32,61,61,32,
39,95,39,58,32,32,105,32,61,32,100,111,95,110,97,109,
101,40,115,44,105,44,108,41,0,0,0,0,30,11,0,53,
32,32,32,32,32,32,32,32,101,108,105,102,32,40,99,32,
62,61,32,39,97,39,32,97,110,100,32,99,32,60,61,32,
39,122,39,41,32,111,114,32,92,0,0,0,12,5,0,1,
97,0,0,0,24,5,5,4,21,5,0,0,18,0,0,4,
12,6,0,1,122,0,0,0,24,5,4,6,46,5,0,0,
18,0,0,28,30,18,0,54,32,32,32,32,32,32,32,32,
32,32,32,32,40,99,32,62,61,32,39,65,39,32,97,110,
100,32,99,32,60,61,32,39,90,39,41,32,111,114,32,99,
32,61,61,32,39,95,39,58,32,32,105,32,61,32,100,111,
95,110,97,109,101,40,115,44,105,44,108,41,0,0,0,0,
12,5,0,1,65,0,0,0,24,5,5,4,21,5,0,0,
18,0,0,4,12,6,0,1,90,0,0,0,24,5,4,6,
46,5,0,0,18,0,0,4,12,6,0,1,95,0,0,0,
23,5,4,6,21,5,0,0,18,0,0,12,12,7,0,7,
100,111,95,110,97,109,101,0,13,6,7,0,15,7,1,0,
15,8,2,0,15,9,3,0,31,5,7,3,19,5,6,5,
15,2,5,0,18,0,0,191,30,13,0,55,32,32,32,32,
32,32,32,32,101,108,105,102,32,99,61,61,39,34,39,32,
111,114,32,99,61,61,34,39,34,58,32,105,32,61,32,100,
111,95,115,116,114,105,110,103,40,115,44,105,44,108,41,0,
12,6,0,1,34,0,0,0,23,5,4,6,46,5,0,0,
18,0,0,4,12,6,0,1,39,0,0,0,23,5,4,6,
21,5,0,0,18,0,0,13,12,7,0,9,100,111,95,115,
116,114,105,110,103,0,0,0,13,6,7,0,15,7,1,0,
15,8,2,0,15,9,3,0,31,5,7,3,19,5,6,5,
15,2,5,0,18,0,0,155,30,11,0,56,32,32,32,32,
32,32,32,32,101,108,105,102,32,99,61,61,39,35,39,58,
32,105,32,61,32,100,111,95,99,111,109,109,101,110,116,40,
115,44,105,44,108,41,0,0,12,6,0,1,35,0,0,0,
23,5,4,6,21,5,0,0,18,0,0,13,12,7,0,10,
100,111,95,99,111,109,109,101,110,116,0,0,13,6,7,0,
15,7,1,0,15,8,2,0,15,9,3,0,31,5,7,3,
19,5,6,5,15,2,5,0,18,0,0,126,30,11,0,57,
32,32,32,32,32,32,32,32,101,108,105,102,32,99,32,61,
61,32,39,92,92,39,32,97,110,100,32,115,91,105,43,49,
93,32,61,61,32,39,92,110,39,58,0,0,12,6,0,1,
92,0,0,0,23,5,4,6,21,5,0,0,18,0,0,9,
11,7,0,0,0,0,0,0,0,0,240,63,1,6,2,7,
9,5,1,6,12,6,0,1,10,0,0,0,23,5,5,6,
21,5,0,0,18,0,0,42,30,10,0,58,32,32,32,32,
32,32,32,32,32,32,32,32,105,32,43,61,32,50,59,32,
84,46,121,44,84,46,121,105,32,61,32,84,46,121,43,49,
44,105,0,0,11,6,0,0,0,0,0,0,0,0,0,64,
1,5,2,6,15,2,5,0,12,7,0,1,84,0,0,0,
13,6,7,0,12,7,0,1,121,0,0,0,9,6,6,7,
11,7,0,0,0,0,0,0,0,0,240,63,1,6,6,7,
15,5,6,0,15,6,2,0,12,8,0,1,84,0,0,0,
13,7,8,0,12,8,0,1,121,0,0,0,10,7,8,5,
12,7,0,1,84,0,0,0,13,5,7,0,12,7,0,2,
121,105,0,0,10,5,7,6,18,0,0,58,30,11,0,59,
32,32,32,32,32,32,32,32,101,108,105,102,32,99,32,61,
61,32,39,32,39,32,111,114,32,99,32,61,61,32,39,92,
116,39,58,32,105,32,43,61,32,49,0,0,12,6,0,1,
32,0,0,0,23,5,4,6,46,5,0,0,18,0,0,4,
12,6,0,1,9,0,0,0,23,5,4,6,21,5,0,0,
31,5,7,3,19,5,6,5,15,2,5,0,18,0,0,90,
11,7,0,0,0,0,0,0,0,0,0,0,12,8,0,1,
92,0,0,0,23,5,4,8,23,6,5,7,21,6,0,0,
18,0,0,2,18,0,0,9,11,9,0,0,0,0,0,0,
0,0,240,63,1,8,2,9,9,5,1,8,12,8,0,1,
10,0,0,0,23,5,5,8,21,5,0,0,18,0,0,31,
11,6,0,0,0,0,0,0,0,0,0,64,1,5,2,6,
15,2,5,0,12,7,0,1,84,0,0,0,13,6,7,0,
12,7,0,1,121,0,0,0,9,6,6,7,11,7,0,0,
0,0,0,0,0,0,240,63,1,6,6,7,15,5,6,0,
15,6,2,0,12,8,0,1,84,0,0,0,13,7,8,0,
12,8,0,1,121,0,0,0,10,7,8,5,12,7,0,1,
84,0,0,0,13,5,7,0,12,7,0,2,121,105,0,0,
10,5,7,6,18,0,0,40,11,7,0,0,0,0,0,0,
0,0,240,63,12,8,0,1,32,0,0,0,23,5,4,8,
23,6,5,7,21,6,0,0,18,0,0,2,18,0,0,4,
12,8,0,1,9,0,0,0,23,5,4,8,21,5,0,0,
18,0,0,7,11,6,0,0,0,0,0,0,0,0,240,63,
1,5,2,6,15,2,5,0,18,0,0,30,30,10,0,60,
32,32,32,32,32,32,32,32,101,108,115,101,58,32,117,95,
101,114,114,111,114,40,39,116,111,107,101,110,105,122,101,39,
44,115,44,84,46,102,41,0,12,7,0,7,117,95,101,114,
114,111,114,0,13,6,7,0,12,7,0,8,116,111,107,101,
110,105,122,101,0,0,0,0,15,8,1,0,12,10,0,1,
84,0,0,0,13,9,10,0,12,10,0,1,102,0,0,0,
9,9,9,10,31,5,7,3,19,5,6,5,18,0,0,1,
18,0,254,53,30,4,0,61,32,32,32,32,105,110,100,101,
110,116,40,48,41,0,0,0,12,7,0,6,105,110,100,101,
1,5,2,6,15,2,5,0,18,0,0,19,12,7,0,7,
117,95,101,114,114,111,114,0,13,6,7,0,12,7,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,15,8,1,0,
12,10,0,1,84,0,0,0,13,9,10,0,12,10,0,1,
102,0,0,0,9,9,9,10,31,5,7,3,19,5,6,5,
18,0,0,1,18,0,254,202,12,7,0,6,105,110,100,101,
110,116,0,0,13,6,7,0,11,7,0,0,0,0,0,0,
0,0,0,0,31,5,7,1,19,5,6,5,30,6,0,62,
32,32,32,32,114,32,61,32,84,46,114,101,115,59,32,84,
32,61,32,78,111,110,101,0,12,7,0,1,84,0,0,0,
13,6,7,0,12,7,0,3,114,101,115,0,9,6,6,7,
15,5,6,0,12,6,0,1,84,0,0,0,28,7,0,0,
14,6,7,0,30,4,0,65,32,32,32,32,114,101,116,117,
114,110,32,114,0,0,0,0,20,5,0,0,0,0,0,0,
12,7,0,11,100,111,95,116,111,107,101,110,105,122,101,0,
14,7,6,0,30,5,0,67,100,101,102,32,100,111,95,110,
108,40,115,44,105,44,108,41,58,0,0,0,16,7,0,123,
44,8,0,0,30,5,0,67,100,101,102,32,100,111,95,110,
108,40,115,44,105,44,108,41,58,0,0,0,12,1,0,16,
99,111,114,101,47,116,111,107,101,110,105,122,101,46,112,121,
0,0,0,0,33,1,0,0,12,1,0,5,100,111,95,110,
108,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
0,0,0,0,31,5,7,1,19,5,6,5,12,7,0,1,
84,0,0,0,13,6,7,0,12,7,0,3,114,101,115,0,
9,6,6,7,15,5,6,0,12,6,0,1,84,0,0,0,
28,7,0,0,14,6,7,0,20,5,0,0,0,0,0,0,
12,11,0,11,100,111,95,116,111,107,101,110,105,122,101,0,
14,11,10,0,16,11,0,75,44,8,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,11,4,0,0,0,0,0,0,0,0,0,0,
12,6,0,1,84,0,0,0,13,5,6,0,12,6,0,6,
98,114,97,99,101,115,0,0,9,5,5,6,23,4,4,5,
21,4,0,0,18,0,0,13,12,6,0,1,84,0,0,0,
13,5,6,0,12,6,0,3,97,100,100,0,9,5,5,6,
12,6,0,2,110,108,0,0,28,7,0,0,31,4,6,2,
19,4,5,4,18,0,0,1,11,6,0,0,0,0,0,0,
0,0,240,63,1,5,2,6,15,4,5,0,11,6,0,0,
0,0,0,0,0,0,240,63,15,5,6,0,15,2,4,0,
12,6,0,1,84,0,0,0,13,4,6,0,12,6,0,2,
110,108,0,0,10,4,6,5,12,6,0,1,84,0,0,0,
13,5,6,0,12,6,0,1,121,0,0,0,9,5,5,6,
11,6,0,0,0,0,0,0,0,0,240,63,1,5,5,6,
15,4,5,0,15,5,2,0,12,7,0,1,84,0,0,0,
13,6,7,0,12,7,0,1,121,0,0,0,10,6,7,4,
12,6,0,1,84,0,0,0,13,4,6,0,12,6,0,2,
121,105,0,0,10,4,6,5,20,2,0,0,0,0,0,0,
12,12,0,5,100,111,95,110,108,0,0,0,14,12,11,0,
16,12,0,90,44,12,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,28,4,0,0,9,3,0,4,
30,6,0,68,32,32,32,32,105,102,32,110,111,116,32,84,
46,98,114,97,99,101,115,58,0,0,0,0,12,6,0,1,
84,0,0,0,13,5,6,0,12,6,0,6,98,114,97,99,
101,115,0,0,9,5,5,6,47,4,5,0,21,4,0,0,
18,0,0,21,30,7,0,69,32,32,32,32,32,32,32,32,
84,46,97,100,100,40,39,110,108,39,44,78,111,110,101,41,
0,0,0,0,12,6,0,1,84,0,0,0,13,5,6,0,
12,6,0,3,97,100,100,0,9,5,5,6,12,6,0,2,
110,108,0,0,28,7,0,0,31,4,6,2,19,4,5,4,
18,0,0,1,30,6,0,70,32,32,32,32,105,44,84,46,
110,108,32,61,32,105,43,49,44,84,114,117,101,0,0,0,
11,6,0,0,0,0,0,0,0,0,240,63,1,5,2,6,
15,4,5,0,11,6,0,0,0,0,0,0,0,0,240,63,
15,5,6,0,15,2,4,0,12,6,0,1,84,0,0,0,
13,4,6,0,12,6,0,2,110,108,0,0,10,4,6,5,
30,6,0,71,32,32,32,32,84,46,121,44,84,46,121,105,
32,61,32,84,46,121,43,49,44,105,0,0,12,6,0,1,
84,0,0,0,13,5,6,0,12,6,0,1,121,0,0,0,
9,5,5,6,11,6,0,0,0,0,0,0,0,0,240,63,
1,5,5,6,15,4,5,0,15,5,2,0,12,7,0,1,
84,0,0,0,13,6,7,0,12,7,0,1,121,0,0,0,
10,6,7,4,12,6,0,1,84,0,0,0,13,4,6,0,
12,6,0,2,121,105,0,0,10,4,6,5,30,4,0,72,
32,32,32,32,114,101,116,117,114,110,32,105,0,0,0,0,
20,2,0,0,0,0,0,0,12,8,0,5,100,111,95,110,
108,0,0,0,14,8,7,0,30,6,0,74,100,101,102,32,
100,111,95,105,110,100,101,110,116,40,115,44,105,44,108,41,
58,0,0,0,16,8,0,146,44,10,0,0,30,6,0,74,
100,101,102,32,100,111,95,105,110,100,101,110,116,40,115,44,
105,44,108,41,58,0,0,0,12,1,0,16,99,111,114,101,
47,116,111,107,101,110,105,122,101,46,112,121,0,0,0,0,
33,1,0,0,12,1,0,9,100,111,95,105,110,100,101,110,
116,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,28,4,0,0,9,3,0,4,
30,3,0,75,32,32,32,32,118,32,61,32,48,0,0,0,
11,5,0,0,0,0,0,0,0,0,0,0,15,4,5,0,
30,4,0,76,32,32,32,32,119,104,105,108,101,32,105,60,
108,58,0,0,25,5,2,3,21,5,0,0,18,0,0,53,
30,5,0,77,32,32,32,32,32,32,32,32,99,32,61,32,
115,91,105,93,0,0,0,0,9,6,1,2,15,5,6,0,
30,11,0,78,32,32,32,32,32,32,32,32,105,102,32,99,
32,33,61,32,39,32,39,32,97,110,100,32,99,32,33,61,
32,39,92,116,39,58,32,98,114,101,97,107,0,0,0,0,
12,7,0,1,32,0,0,0,35,6,5,7,21,6,0,0,
18,0,0,4,12,7,0,1,9,0,0,0,35,6,5,7,
21,6,0,0,18,0,0,3,18,0,0,22,18,0,0,1,
30,6,0,79,32,32,32,32,32,32,32,32,105,44,118,32,
61,32,105,43,49,44,118,43,49,0,0,0,11,8,0,0,
0,0,0,0,0,0,240,63,1,7,2,8,15,6,7,0,
11,9,0,0,0,0,0,0,0,0,240,63,1,8,4,9,
15,7,8,0,15,2,6,0,15,4,7,0,18,0,255,202,
30,15,0,80,32,32,32,32,105,102,32,99,32,33,61,32,
39,92,110,39,32,97,110,100,32,99,32,33,61,32,39,35,
39,32,97,110,100,32,110,111,116,32,84,46,98,114,97,99,
101,115,58,32,105,110,100,101,110,116,40,118,41,0,0,0,
12,7,0,1,10,0,0,0,35,6,5,7,21,6,0,0,
18,0,0,4,12,7,0,1,35,0,0,0,35,6,5,7,
21,6,0,0,18,0,0,9,12,8,0,1,84,0,0,0,
13,7,8,0,12,8,0,6,98,114,97,99,101,115,0,0,
9,7,7,8,47,6,7,0,21,6,0,0,18,0,0,9,
25,5,2,3,21,5,0,0,18,0,0,33,9,6,1,2,
15,5,6,0,11,8,0,0,0,0,0,0,0,0,0,0,
12,9,0,1,32,0,0,0,35,6,5,9,23,7,6,8,
21,7,0,0,18,0,0,2,18,0,0,4,12,9,0,1,
9,0,0,0,35,6,5,9,21,6,0,0,18,0,0,3,
18,0,0,15,18,0,0,1,11,8,0,0,0,0,0,0,
0,0,240,63,1,7,2,8,15,6,7,0,11,9,0,0,
0,0,0,0,0,0,240,63,1,8,4,9,15,7,8,0,
15,2,6,0,15,4,7,0,18,0,255,222,11,8,0,0,
0,0,0,0,0,0,0,0,11,10,0,0,0,0,0,0,
0,0,0,0,12,11,0,1,10,0,0,0,35,6,5,11,
23,9,6,10,21,9,0,0,18,0,0,2,18,0,0,4,
12,11,0,1,35,0,0,0,35,6,5,11,23,7,6,8,
21,7,0,0,18,0,0,2,18,0,0,12,11,6,0,0,
0,0,0,0,0,0,0,0,12,10,0,1,84,0,0,0,
13,9,10,0,12,10,0,6,98,114,97,99,101,115,0,0,
9,9,9,10,23,6,6,9,21,6,0,0,18,0,0,9,
12,8,0,6,105,110,100,101,110,116,0,0,13,7,8,0,
15,8,4,0,31,6,8,1,19,6,7,6,18,0,0,1,
30,4,0,81,32,32,32,32,114,101,116,117,114,110,32,105,
0,0,0,0,20,2,0,0,0,0,0,0,12,9,0,9,
100,111,95,105,110,100,101,110,116,0,0,0,14,9,8,0,
30,4,0,83,100,101,102,32,105,110,100,101,110,116,40,118,
41,58,0,0,16,9,0,231,44,8,0,0,30,4,0,83,
100,101,102,32,105,110,100,101,110,116,40,118,41,58,0,0,
12,1,0,16,99,111,114,101,47,116,111,107,101,110,105,122,
101,46,112,121,0,0,0,0,33,1,0,0,12,1,0,6,
105,110,100,101,110,116,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,8,0,84,32,32,32,32,105,102,32,118,
32,61,61,32,84,46,105,110,100,101,110,116,91,45,49,93,
58,32,112,97,115,115,0,0,12,4,0,1,84,0,0,0,
13,3,4,0,12,4,0,6,105,110,100,101,110,116,0,0,
9,3,3,4,11,4,0,0,0,0,0,0,0,0,240,191,
9,3,3,4,23,2,1,3,21,2,0,0,18,0,0,3,
17,0,0,0,18,0,0,186,30,7,0,85,32,32,32,32,
101,108,105,102,32,118,32,62,32,84,46,105,110,100,101,110,
116,91,45,49,93,58,0,0,12,3,0,1,84,0,0,0,
13,2,3,0,12,3,0,6,105,110,100,101,110,116,0,0,
9,2,2,3,11,3,0,0,0,0,0,0,0,0,240,191,
9,2,2,3,25,2,2,1,21,2,0,0,18,0,0,44,
30,7,0,86,32,32,32,32,32,32,32,32,84,46,105,110,
100,101,110,116,46,97,112,112,101,110,100,40,118,41,0,0,
12,4,0,1,84,0,0,0,13,3,4,0,12,4,0,6,
105,110,100,101,110,116,0,0,9,3,3,4,12,4,0,6,
97,112,112,101,110,100,0,0,9,3,3,4,15,4,1,0,
31,2,4,1,19,2,3,2,30,7,0,87,32,32,32,32,
32,32,32,32,84,46,97,100,100,40,39,105,110,100,101,110,
116,39,44,118,41,0,0,0,12,4,0,1,84,0,0,0,
13,3,4,0,12,4,0,3,97,100,100,0,9,3,3,4,
12,4,0,6,105,110,100,101,110,116,0,0,15,5,1,0,
31,2,4,2,19,2,3,2,18,0,0,121,30,7,0,88,
32,32,32,32,101,108,105,102,32,118,32,60,32,84,46,105,
110,100,101,110,116,91,45,49,93,58,0,0,12,4,0,1,
20,2,0,0,0,0,0,0,12,13,0,9,100,111,95,105,
110,100,101,110,116,0,0,0,14,13,12,0,16,13,0,137,
44,8,0,0,28,2,0,0,9,1,0,2,12,4,0,1,
84,0,0,0,13,3,4,0,12,4,0,6,105,110,100,101,
110,116,0,0,9,3,3,4,11,4,0,0,0,0,0,0,
0,0,240,191,9,3,3,4,25,2,1,3,21,2,0,0,
18,0,0,99,30,8,0,89,32,32,32,32,32,32,32,32,
110,32,61,32,84,46,105,110,100,101,110,116,46,105,110,100,
101,120,40,118,41,0,0,0,12,5,0,1,84,0,0,0,
0,0,240,191,9,3,3,4,23,2,1,3,21,2,0,0,
18,0,0,3,17,0,0,0,18,0,0,117,12,3,0,1,
84,0,0,0,13,2,3,0,12,3,0,6,105,110,100,101,
110,116,0,0,9,2,2,3,11,3,0,0,0,0,0,0,
0,0,240,191,9,2,2,3,25,2,2,1,21,2,0,0,
18,0,0,28,12,4,0,1,84,0,0,0,13,3,4,0,
12,4,0,6,105,110,100,101,110,116,0,0,9,3,3,4,
12,4,0,6,97,112,112,101,110,100,0,0,9,3,3,4,
15,4,1,0,31,2,4,1,19,2,3,2,12,4,0,1,
84,0,0,0,13,3,4,0,12,4,0,3,97,100,100,0,
9,3,3,4,12,4,0,6,105,110,100,101,110,116,0,0,
15,5,1,0,31,2,4,2,19,2,3,2,18,0,0,76,
12,4,0,1,84,0,0,0,13,3,4,0,12,4,0,6,
105,110,100,101,110,116,0,0,9,3,3,4,11,4,0,0,
0,0,0,0,0,0,240,191,9,3,3,4,25,2,1,3,
21,2,0,0,18,0,0,62,12,5,0,1,84,0,0,0,
13,4,5,0,12,5,0,6,105,110,100,101,110,116,0,0,
9,4,4,5,12,5,0,5,105,110,100,101,120,0,0,0,
9,4,4,5,15,5,1,0,31,3,5,1,19,3,4,3,
15,2,3,0,30,9,0,90,32,32,32,32,32,32,32,32,
119,104,105,108,101,32,108,101,110,40,84,46,105,110,100,101,
110,116,41,32,62,32,110,43,49,58,0,0,11,4,0,0,
0,0,0,0,0,0,240,63,1,3,2,4,12,6,0,3,
108,101,110,0,13,5,6,0,12,7,0,1,84,0,0,0,
13,6,7,0,12,7,0,6,105,110,100,101,110,116,0,0,
9,6,6,7,31,4,6,1,19,4,5,4,25,3,3,4,
21,3,0,0,18,0,0,45,30,8,0,91,32,32,32,32,
32,32,32,32,32,32,32,32,118,32,61,32,84,46,105,110,
100,101,110,116,46,112,111,112,40,41,0,0,12,5,0,1,
84,0,0,0,13,4,5,0,12,5,0,6,105,110,100,101,
110,116,0,0,9,4,4,5,12,5,0,3,112,111,112,0,
9,4,4,5,31,3,0,0,19,3,4,3,15,1,3,0,
30,8,0,92,32,32,32,32,32,32,32,32,32,32,32,32,
84,46,97,100,100,40,39,100,101,100,101,110,116,39,44,118,
41,0,0,0,12,5,0,1,84,0,0,0,13,4,5,0,
15,2,3,0,11,4,0,0,0,0,0,0,0,0,240,63,
1,3,2,4,12,6,0,3,108,101,110,0,13,5,6,0,
12,7,0,1,84,0,0,0,13,6,7,0,12,7,0,6,
105,110,100,101,110,116,0,0,9,6,6,7,31,4,6,1,
19,4,5,4,25,3,3,4,21,3,0,0,18,0,0,27,
12,5,0,1,84,0,0,0,13,4,5,0,12,5,0,6,
105,110,100,101,110,116,0,0,9,4,4,5,12,5,0,3,
112,111,112,0,9,4,4,5,31,3,0,0,19,3,4,3,
15,1,3,0,12,5,0,1,84,0,0,0,13,4,5,0,
12,5,0,3,97,100,100,0,9,4,4,5,12,5,0,6,
100,101,100,101,110,116,0,0,15,6,1,0,31,3,5,2,
19,3,4,3,18,0,255,194,18,0,0,1,0,0,0,0,
12,10,0,6,105,110,100,101,110,116,0,0,14,10,9,0,
30,6,0,94,100,101,102,32,100,111,95,115,121,109,98,111,
108,40,115,44,105,44,108,41,58,0,0,0,16,10,1,29,
44,13,0,0,30,6,0,94,100,101,102,32,100,111,95,115,
121,109,98,111,108,40,115,44,105,44,108,41,58,0,0,0,
12,1,0,16,99,111,114,101,47,116,111,107,101,110,105,122,
101,46,112,121,0,0,0,0,33,1,0,0,12,1,0,9,
100,111,95,115,121,109,98,111,108,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
28,4,0,0,9,3,0,4,30,5,0,95,32,32,32,32,
115,121,109,98,111,108,115,32,61,32,91,93,0,0,0,0,
27,5,0,0,15,4,5,0,30,6,0,96,32,32,32,32,
118,44,102,44,105,32,61,32,115,91,105,93,44,105,44,105,
43,49,0,0,9,6,1,2,15,5,6,0,15,6,2,0,
11,9,0,0,0,0,0,0,0,0,240,63,1,8,2,9,
15,7,8,0,15,8,5,0,15,5,6,0,15,2,7,0,
30,10,0,97,32,32,32,32,105,102,32,118,32,105,110,32,
83,89,77,66,79,76,83,58,32,115,121,109,98,111,108,115,
46,97,112,112,101,110,100,40,118,41,0,0,12,7,0,7,
83,89,77,66,79,76,83,0,13,6,7,0,36,6,6,8,
21,6,0,0,18,0,0,9,12,9,0,6,97,112,112,101,
110,100,0,0,9,7,4,9,15,9,8,0,31,6,9,1,
19,6,7,6,18,0,0,1,30,4,0,98,32,32,32,32,
119,104,105,108,101,32,105,60,108,58,0,0,25,6,2,3,
21,6,0,0,18,0,0,74,30,5,0,99,32,32,32,32,
32,32,32,32,99,32,61,32,115,91,105,93,0,0,0,0,
9,7,1,2,15,6,7,0,30,9,0,100,32,32,32,32,
32,32,32,32,105,102,32,110,111,116,32,99,32,105,110,32,
73,83,89,77,66,79,76,83,58,32,98,114,101,97,107,0,
19,3,4,3,18,0,255,212,18,0,0,1,0,0,0,0,
12,14,0,6,105,110,100,101,110,116,0,0,14,14,13,0,
16,14,0,161,44,13,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,28,4,0,0,9,3,0,4,
27,5,0,0,15,4,5,0,9,6,1,2,15,5,6,0,
15,6,2,0,11,9,0,0,0,0,0,0,0,0,240,63,
1,8,2,9,15,7,8,0,15,8,5,0,15,5,6,0,
15,2,7,0,12,7,0,7,83,89,77,66,79,76,83,0,
13,6,7,0,36,6,6,8,21,6,0,0,18,0,0,9,
12,9,0,6,97,112,112,101,110,100,0,0,9,7,4,9,
15,9,8,0,31,6,9,1,19,6,7,6,18,0,0,1,
25,6,2,3,21,6,0,0,18,0,0,42,9,7,1,2,
15,6,7,0,11,7,0,0,0,0,0,0,0,0,0,0,
12,10,0,8,73,83,89,77,66,79,76,83,0,0,0,0,
13,9,10,0,36,9,9,6,47,7,9,0,21,7,0,0,
18,0,0,3,18,0,0,46,18,0,0,1,30,6,0,101,
32,32,32,32,32,32,32,32,118,44,105,32,61,32,118,43,
99,44,105,43,49,0,0,0,1,9,8,6,15,7,9,0,
11,11,0,0,0,0,0,0,0,0,240,63,1,10,2,11,
15,9,10,0,15,8,7,0,15,2,9,0,30,11,0,102,
32,32,32,32,32,32,32,32,105,102,32,118,32,105,110,32,
83,89,77,66,79,76,83,58,32,115,121,109,98,111,108,115,
46,97,112,112,101,110,100,40,118,41,0,0,12,9,0,7,
83,89,77,66,79,76,83,0,13,7,9,0,36,7,7,8,
21,7,0,0,18,0,0,9,12,10,0,6,97,112,112,101,
110,100,0,0,9,9,4,10,15,10,8,0,31,7,10,1,
19,7,9,7,18,0,0,1,18,0,255,181,30,11,0,103,
32,32,32,32,118,32,61,32,115,121,109,98,111,108,115,46,
112,111,112,40,41,59,32,110,32,61,32,108,101,110,40,118,
41,59,32,105,32,61,32,102,43,110,0,0,12,10,0,3,
112,111,112,0,9,9,4,10,31,7,0,0,19,7,9,7,
15,8,7,0,12,11,0,3,108,101,110,0,13,10,11,0,
15,11,8,0,31,9,11,1,19,9,10,9,15,7,9,0,
1,9,5,7,15,2,9,0,30,6,0,104,32,32,32,32,
84,46,97,100,100,40,39,115,121,109,98,111,108,39,44,118,
41,0,0,0,12,11,0,1,84,0,0,0,13,10,11,0,
12,11,0,3,97,100,100,0,9,10,10,11,12,11,0,6,
115,121,109,98,111,108,0,0,15,12,8,0,31,9,11,2,
19,9,10,9,30,9,0,105,32,32,32,32,105,102,32,118,
32,105,110,32,66,95,66,69,71,73,78,58,32,84,46,98,
114,97,99,101,115,32,43,61,32,49,0,0,12,10,0,7,
13,9,10,0,36,9,9,6,23,7,7,9,21,7,0,0,
18,0,0,3,18,0,0,27,18,0,0,1,1,9,8,6,
15,7,9,0,11,11,0,0,0,0,0,0,0,0,240,63,
1,10,2,11,15,9,10,0,15,8,7,0,15,2,9,0,
12,9,0,7,83,89,77,66,79,76,83,0,13,7,9,0,
36,7,7,8,21,7,0,0,18,0,0,9,12,10,0,6,
97,112,112,101,110,100,0,0,9,9,4,10,15,10,8,0,
31,7,10,1,19,7,9,7,18,0,0,1,18,0,255,213,
12,10,0,3,112,111,112,0,9,9,4,10,31,7,0,0,
19,7,9,7,15,8,7,0,12,11,0,3,108,101,110,0,
13,10,11,0,15,11,8,0,31,9,11,1,19,9,10,9,
15,7,9,0,1,9,5,7,15,2,9,0,12,11,0,1,
84,0,0,0,13,10,11,0,12,11,0,3,97,100,100,0,
9,10,10,11,12,11,0,6,115,121,109,98,111,108,0,0,
15,12,8,0,31,9,11,2,19,9,10,9,12,10,0,7,
66,95,66,69,71,73,78,0,13,9,10,0,36,9,9,8,
21,9,0,0,18,0,0,20,12,10,0,1,84,0,0,0,
13,9,10,0,12,11,0,1,84,0,0,0,13,10,11,0,
595,193 → 366,117
12,11,0,6,98,114,97,99,101,115,0,0,9,10,10,11,
11,11,0,0,0,0,0,0,0,0,240,63,1,10,10,11,
12,11,0,6,98,114,97,99,101,115,0,0,10,9,11,10,
18,0,0,1,30,9,0,106,32,32,32,32,105,102,32,118,
32,105,110,32,66,95,69,78,68,58,32,84,46,98,114,97,
99,101,115,32,45,61,32,49,0,0,0,0,12,10,0,5,
66,95,69,78,68,0,0,0,13,9,10,0,36,9,9,8,
21,9,0,0,18,0,0,20,12,10,0,1,84,0,0,0,
13,9,10,0,12,11,0,1,84,0,0,0,13,10,11,0,
12,11,0,6,98,114,97,99,101,115,0,0,9,10,10,11,
11,11,0,0,0,0,0,0,0,0,240,63,2,10,10,11,
12,11,0,6,98,114,97,99,101,115,0,0,10,9,11,10,
18,0,0,1,30,4,0,107,32,32,32,32,114,101,116,117,
114,110,32,105,0,0,0,0,20,2,0,0,0,0,0,0,
12,11,0,9,100,111,95,115,121,109,98,111,108,0,0,0,
14,11,10,0,30,6,0,109,100,101,102,32,100,111,95,110,
117,109,98,101,114,40,115,44,105,44,108,41,58,0,0,0,
16,11,0,242,44,10,0,0,30,6,0,109,100,101,102,32,
100,111,95,110,117,109,98,101,114,40,115,44,105,44,108,41,
58,0,0,0,12,1,0,16,99,111,114,101,47,116,111,107,
101,110,105,122,101,46,112,121,0,0,0,0,33,1,0,0,
12,1,0,9,100,111,95,110,117,109,98,101,114,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,30,7,0,110,
32,32,32,32,118,44,105,44,99,32,61,115,91,105,93,44,
105,43,49,44,115,91,105,93,0,0,0,0,9,5,1,2,
15,4,5,0,11,7,0,0,0,0,0,0,0,0,240,63,
1,6,2,7,15,5,6,0,9,7,1,2,15,6,7,0,
15,7,4,0,15,2,5,0,15,4,6,0,30,4,0,111,
32,32,32,32,119,104,105,108,101,32,105,60,108,58,0,0,
25,5,2,3,21,5,0,0,18,0,0,74,30,5,0,112,
32,32,32,32,32,32,32,32,99,32,61,32,115,91,105,93,
0,0,0,0,9,5,1,2,15,4,5,0,30,20,0,113,
32,32,32,32,32,32,32,32,105,102,32,40,99,32,60,32,
39,48,39,32,111,114,32,99,32,62,32,39,57,39,41,32,
97,110,100,32,40,99,32,60,32,39,97,39,32,111,114,32,
99,32,62,32,39,102,39,41,32,97,110,100,32,99,32,33,
61,32,39,120,39,58,32,98,114,101,97,107,0,0,0,0,
12,6,0,1,48,0,0,0,25,5,4,6,46,5,0,0,
18,0,0,4,12,5,0,1,57,0,0,0,25,5,5,4,
21,5,0,0,18,0,0,9,12,6,0,1,97,0,0,0,
25,5,4,6,46,5,0,0,18,0,0,4,12,5,0,1,
102,0,0,0,25,5,5,4,21,5,0,0,18,0,0,4,
12,6,0,1,120,0,0,0,35,5,4,6,21,5,0,0,
18,0,0,3,18,0,0,19,18,0,0,1,30,6,0,114,
32,32,32,32,32,32,32,32,118,44,105,32,61,32,118,43,
99,44,105,43,49,0,0,0,1,6,7,4,15,5,6,0,
18,0,0,1,12,10,0,5,66,95,69,78,68,0,0,0,
13,9,10,0,36,9,9,8,21,9,0,0,18,0,0,20,
12,10,0,1,84,0,0,0,13,9,10,0,12,11,0,1,
84,0,0,0,13,10,11,0,12,11,0,6,98,114,97,99,
101,115,0,0,9,10,10,11,11,11,0,0,0,0,0,0,
0,0,240,63,2,10,10,11,12,11,0,6,98,114,97,99,
101,115,0,0,10,9,11,10,18,0,0,1,20,2,0,0,
0,0,0,0,12,15,0,9,100,111,95,115,121,109,98,111,
108,0,0,0,14,15,14,0,16,15,0,143,44,14,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
28,4,0,0,9,3,0,4,9,5,1,2,15,4,5,0,
11,7,0,0,0,0,0,0,0,0,240,63,1,6,2,7,
15,5,6,0,9,7,1,2,15,6,7,0,15,7,4,0,
15,2,5,0,15,4,6,0,25,5,2,3,21,5,0,0,
18,0,0,60,9,5,1,2,15,4,5,0,11,8,0,0,
0,0,0,0,0,0,0,0,11,10,0,0,0,0,0,0,
0,0,0,0,11,12,0,0,0,0,0,0,0,0,240,63,
12,13,0,1,48,0,0,0,25,5,4,13,23,11,5,12,
21,11,0,0,18,0,0,2,18,0,0,4,12,5,0,1,
57,0,0,0,25,5,5,4,23,9,5,10,21,9,0,0,
18,0,0,2,18,0,0,14,11,12,0,0,0,0,0,0,
0,0,240,63,12,13,0,1,97,0,0,0,25,5,4,13,
23,11,5,12,21,11,0,0,18,0,0,2,18,0,0,4,
12,5,0,1,102,0,0,0,25,5,5,4,23,6,5,8,
21,6,0,0,18,0,0,2,18,0,0,4,12,9,0,1,
120,0,0,0,35,5,4,9,21,5,0,0,18,0,0,3,
18,0,0,12,18,0,0,1,1,6,7,4,15,5,6,0,
11,9,0,0,0,0,0,0,0,0,240,63,1,8,2,9,
15,6,8,0,15,7,5,0,15,2,6,0,18,0,255,181,
30,5,0,115,32,32,32,32,105,102,32,99,32,61,61,32,
39,46,39,58,0,0,0,0,12,6,0,1,46,0,0,0,
23,5,4,6,21,5,0,0,18,0,0,78,30,6,0,116,
32,32,32,32,32,32,32,32,118,44,105,32,61,32,118,43,
99,44,105,43,49,0,0,0,1,6,7,4,15,5,6,0,
11,9,0,0,0,0,0,0,0,0,240,63,1,8,2,9,
15,6,8,0,15,7,5,0,15,2,6,0,30,5,0,117,
32,32,32,32,32,32,32,32,119,104,105,108,101,32,105,60,
108,58,0,0,25,5,2,3,21,5,0,0,18,0,0,52,
30,6,0,118,32,32,32,32,32,32,32,32,32,32,32,32,
99,32,61,32,115,91,105,93,0,0,0,0,9,5,1,2,
15,4,5,0,30,11,0,119,32,32,32,32,32,32,32,32,
32,32,32,32,105,102,32,99,32,60,32,39,48,39,32,111,
114,32,99,32,62,32,39,57,39,58,32,98,114,101,97,107,
0,0,0,0,12,6,0,1,48,0,0,0,25,5,4,6,
46,5,0,0,18,0,0,4,12,5,0,1,57,0,0,0,
25,5,5,4,21,5,0,0,18,0,0,3,18,0,0,20,
18,0,0,1,30,7,0,120,32,32,32,32,32,32,32,32,
32,32,32,32,118,44,105,32,61,32,118,43,99,44,105,43,
49,0,0,0,1,6,7,4,15,5,6,0,11,9,0,0,
15,6,8,0,15,7,5,0,15,2,6,0,18,0,255,195,
12,6,0,1,46,0,0,0,23,5,4,6,21,5,0,0,
18,0,0,43,1,6,7,4,15,5,6,0,11,9,0,0,
0,0,0,0,0,0,240,63,1,8,2,9,15,6,8,0,
15,7,5,0,15,2,6,0,18,0,255,203,18,0,0,1,
30,6,0,121,32,32,32,32,84,46,97,100,100,40,39,110,
117,109,98,101,114,39,44,118,41,0,0,0,12,8,0,1,
15,7,5,0,15,2,6,0,25,5,2,3,21,5,0,0,
18,0,0,30,9,5,1,2,15,4,5,0,11,8,0,0,
0,0,0,0,0,0,240,63,12,9,0,1,48,0,0,0,
25,5,4,9,23,6,5,8,21,6,0,0,18,0,0,2,
18,0,0,4,12,5,0,1,57,0,0,0,25,5,5,4,
21,5,0,0,18,0,0,3,18,0,0,12,18,0,0,1,
1,6,7,4,15,5,6,0,11,9,0,0,0,0,0,0,
0,0,240,63,1,8,2,9,15,6,8,0,15,7,5,0,
15,2,6,0,18,0,255,225,18,0,0,1,12,8,0,1,
84,0,0,0,13,6,8,0,12,8,0,3,97,100,100,0,
9,6,6,8,12,8,0,6,110,117,109,98,101,114,0,0,
15,9,7,0,31,5,8,2,19,5,6,5,30,4,0,122,
32,32,32,32,114,101,116,117,114,110,32,105,0,0,0,0,
20,2,0,0,0,0,0,0,12,12,0,9,100,111,95,110,
117,109,98,101,114,0,0,0,14,12,11,0,30,5,0,124,
100,101,102,32,100,111,95,110,97,109,101,40,115,44,105,44,
108,41,58,0,16,12,0,196,44,10,0,0,30,5,0,124,
100,101,102,32,100,111,95,110,97,109,101,40,115,44,105,44,
108,41,58,0,12,1,0,16,99,111,114,101,47,116,111,107,
101,110,105,122,101,46,112,121,0,0,0,0,33,1,0,0,
12,1,0,7,100,111,95,110,97,109,101,0,34,1,0,0,
15,9,7,0,31,5,8,2,19,5,6,5,20,2,0,0,
0,0,0,0,12,16,0,9,100,111,95,110,117,109,98,101,
114,0,0,0,14,16,15,0,16,16,0,134,44,16,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
28,4,0,0,9,3,0,4,30,5,0,125,32,32,32,32,
118,44,105,32,61,115,91,105,93,44,105,43,49,0,0,0,
9,5,1,2,15,4,5,0,11,7,0,0,0,0,0,0,
0,0,240,63,1,6,2,7,15,5,6,0,15,6,4,0,
15,2,5,0,30,4,0,126,32,32,32,32,119,104,105,108,
101,32,105,60,108,58,0,0,25,4,2,3,21,4,0,0,
18,0,0,90,30,5,0,127,32,32,32,32,32,32,32,32,
99,32,61,32,115,91,105,93,0,0,0,0,9,5,1,2,
15,4,5,0,30,26,0,128,32,32,32,32,32,32,32,32,
105,102,32,40,99,32,60,32,39,97,39,32,111,114,32,99,
32,62,32,39,122,39,41,32,97,110,100,32,40,99,32,60,
32,39,65,39,32,111,114,32,99,32,62,32,39,90,39,41,
32,97,110,100,32,40,99,32,60,32,39,48,39,32,111,114,
32,99,32,62,32,39,57,39,41,32,97,110,100,32,99,32,
33,61,32,39,95,39,58,32,98,114,101,97,107,0,0,0,
12,7,0,1,97,0,0,0,25,5,4,7,46,5,0,0,
18,0,0,4,12,5,0,1,122,0,0,0,25,5,5,4,
21,5,0,0,18,0,0,9,12,7,0,1,65,0,0,0,
25,5,4,7,46,5,0,0,18,0,0,4,12,5,0,1,
90,0,0,0,25,5,5,4,21,5,0,0,18,0,0,9,
12,7,0,1,48,0,0,0,25,5,4,7,46,5,0,0,
28,4,0,0,9,3,0,4,9,5,1,2,15,4,5,0,
11,7,0,0,0,0,0,0,0,0,240,63,1,6,2,7,
15,5,6,0,15,6,4,0,15,2,5,0,25,4,2,3,
21,4,0,0,18,0,0,80,9,5,1,2,15,4,5,0,
11,8,0,0,0,0,0,0,0,0,0,0,11,10,0,0,
0,0,0,0,0,0,0,0,11,12,0,0,0,0,0,0,
0,0,0,0,11,14,0,0,0,0,0,0,0,0,240,63,
12,15,0,1,97,0,0,0,25,5,4,15,23,13,5,14,
21,13,0,0,18,0,0,2,18,0,0,4,12,5,0,1,
122,0,0,0,25,5,5,4,23,11,5,12,21,11,0,0,
18,0,0,2,18,0,0,14,11,14,0,0,0,0,0,0,
0,0,240,63,12,15,0,1,65,0,0,0,25,5,4,15,
23,13,5,14,21,13,0,0,18,0,0,2,18,0,0,4,
12,5,0,1,90,0,0,0,25,5,5,4,23,9,5,10,
21,9,0,0,18,0,0,2,18,0,0,14,11,12,0,0,
0,0,0,0,0,0,240,63,12,13,0,1,48,0,0,0,
25,5,4,13,23,11,5,12,21,11,0,0,18,0,0,2,
18,0,0,4,12,5,0,1,57,0,0,0,25,5,5,4,
21,5,0,0,18,0,0,4,12,7,0,1,95,0,0,0,
35,5,4,7,21,5,0,0,18,0,0,3,18,0,0,19,
18,0,0,1,30,6,0,129,32,32,32,32,32,32,32,32,
118,44,105,32,61,32,118,43,99,44,105,43,49,0,0,0,
1,7,6,4,15,5,7,0,11,9,0,0,0,0,0,0,
0,0,240,63,1,8,2,9,15,7,8,0,15,6,5,0,
15,2,7,0,18,0,255,165,30,10,0,130,32,32,32,32,
105,102,32,118,32,105,110,32,83,89,77,66,79,76,83,58,
32,84,46,97,100,100,40,39,115,121,109,98,111,108,39,44,
118,41,0,0,12,7,0,7,83,89,77,66,79,76,83,0,
23,7,5,8,21,7,0,0,18,0,0,2,18,0,0,4,
12,9,0,1,95,0,0,0,35,5,4,9,21,5,0,0,
18,0,0,3,18,0,0,12,18,0,0,1,1,7,6,4,
15,5,7,0,11,9,0,0,0,0,0,0,0,0,240,63,
1,8,2,9,15,7,8,0,15,6,5,0,15,2,7,0,
18,0,255,175,12,7,0,7,83,89,77,66,79,76,83,0,
13,5,7,0,36,5,5,6,21,5,0,0,18,0,0,14,
12,8,0,1,84,0,0,0,13,7,8,0,12,8,0,3,
97,100,100,0,9,7,7,8,12,8,0,6,115,121,109,98,
111,108,0,0,15,9,6,0,31,5,8,2,19,5,7,5,
18,0,0,22,30,7,0,131,32,32,32,32,101,108,115,101,
58,32,84,46,97,100,100,40,39,110,97,109,101,39,44,118,
41,0,0,0,12,8,0,1,84,0,0,0,13,7,8,0,
18,0,0,14,12,8,0,1,84,0,0,0,13,7,8,0,
12,8,0,3,97,100,100,0,9,7,7,8,12,8,0,4,
110,97,109,101,0,0,0,0,15,9,6,0,31,5,8,2,
19,5,7,5,18,0,0,1,30,4,0,132,32,32,32,32,
114,101,116,117,114,110,32,105,0,0,0,0,20,2,0,0,
0,0,0,0,12,13,0,7,100,111,95,110,97,109,101,0,
14,13,12,0,30,6,0,134,100,101,102,32,100,111,95,115,
116,114,105,110,103,40,115,44,105,44,108,41,58,0,0,0,
16,13,1,242,44,11,0,0,30,6,0,134,100,101,102,32,
100,111,95,115,116,114,105,110,103,40,115,44,105,44,108,41,
58,0,0,0,12,1,0,16,99,111,114,101,47,116,111,107,
101,110,105,122,101,46,112,121,0,0,0,0,33,1,0,0,
12,1,0,9,100,111,95,115,116,114,105,110,103,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,30,6,0,135,
32,32,32,32,118,44,113,44,105,32,61,32,39,39,44,115,
91,105,93,44,105,43,49,0,12,5,0,0,0,0,0,0,
15,4,5,0,9,6,1,2,15,5,6,0,11,8,0,0,
0,0,0,0,0,0,240,63,1,7,2,8,15,6,7,0,
15,7,4,0,15,4,5,0,15,2,6,0,30,14,0,136,
32,32,32,32,105,102,32,40,108,45,105,41,32,62,61,32,
53,32,97,110,100,32,115,91,105,93,32,61,61,32,113,32,
97,110,100,32,115,91,105,43,49,93,32,61,61,32,113,58,
32,35,32,34,34,34,0,0,11,5,0,0,0,0,0,0,
0,0,20,64,2,6,3,2,24,5,5,6,21,5,0,0,
18,0,0,3,9,5,1,2,23,5,5,4,21,5,0,0,
18,0,0,7,11,8,0,0,0,0,0,0,0,0,240,63,
1,6,2,8,9,5,1,6,23,5,5,4,21,5,0,0,
18,0,0,182,30,4,0,137,32,32,32,32,32,32,32,32,
105,32,43,61,32,50,0,0,11,6,0,0,0,0,0,0,
0,0,0,64,1,5,2,6,15,2,5,0,30,6,0,138,
32,32,32,32,32,32,32,32,119,104,105,108,101,32,105,60,
108,45,50,58,0,0,0,0,11,8,0,0,0,0,0,0,
0,0,0,64,2,6,3,8,25,5,2,6,21,5,0,0,
18,0,0,157,30,6,0,139,32,32,32,32,32,32,32,32,
32,32,32,32,99,32,61,32,115,91,105,93,0,0,0,0,
9,6,1,2,15,5,6,0,30,14,0,140,32,32,32,32,
32,32,32,32,32,32,32,32,105,102,32,99,32,61,61,32,
113,32,97,110,100,32,115,91,105,43,49,93,32,61,61,32,
113,32,97,110,100,32,115,91,105,43,50,93,32,61,61,32,
113,58,0,0,23,6,5,4,21,6,0,0,18,0,0,7,
11,9,0,0,0,0,0,0,0,0,240,63,1,8,2,9,
9,6,1,8,23,6,6,4,21,6,0,0,18,0,0,7,
11,9,0,0,0,0,0,0,0,0,0,64,1,8,2,9,
9,6,1,8,23,6,6,4,21,6,0,0,18,0,0,44,
30,6,0,141,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,105,32,43,61,32,51,0,0,11,8,0,0,
0,0,0,0,0,0,8,64,1,6,2,8,15,2,6,0,
30,9,0,142,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,84,46,97,100,100,40,39,115,116,114,105,110,
103,39,44,118,41,0,0,0,12,9,0,1,84,0,0,0,
19,5,7,5,18,0,0,1,20,2,0,0,0,0,0,0,
12,17,0,7,100,111,95,110,97,109,101,0,14,17,16,0,
16,17,1,3,44,14,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,28,4,0,0,9,3,0,4,
12,5,0,0,0,0,0,0,15,4,5,0,9,6,1,2,
15,5,6,0,11,8,0,0,0,0,0,0,0,0,240,63,
1,7,2,8,15,6,7,0,15,7,4,0,15,4,5,0,
15,2,6,0,11,8,0,0,0,0,0,0,0,0,0,0,
11,10,0,0,0,0,0,0,0,0,0,0,11,5,0,0,
0,0,0,0,0,0,20,64,2,11,3,2,24,5,5,11,
23,9,5,10,21,9,0,0,18,0,0,2,18,0,0,3,
9,5,1,2,23,5,5,4,23,6,5,8,21,6,0,0,
18,0,0,2,18,0,0,7,11,10,0,0,0,0,0,0,
0,0,240,63,1,9,2,10,9,5,1,9,23,5,5,4,
21,5,0,0,18,0,0,105,11,6,0,0,0,0,0,0,
0,0,0,64,1,5,2,6,15,2,5,0,11,8,0,0,
0,0,0,0,0,0,0,64,2,6,3,8,25,5,2,6,
21,5,0,0,18,0,0,92,9,6,1,2,15,5,6,0,
11,9,0,0,0,0,0,0,0,0,0,0,11,11,0,0,
0,0,0,0,0,0,0,0,23,6,5,4,23,10,6,11,
21,10,0,0,18,0,0,2,18,0,0,7,11,13,0,0,
0,0,0,0,0,0,240,63,1,12,2,13,9,6,1,12,
23,6,6,4,23,8,6,9,21,8,0,0,18,0,0,2,
18,0,0,7,11,11,0,0,0,0,0,0,0,0,0,64,
1,10,2,11,9,6,1,10,23,6,6,4,21,6,0,0,
18,0,0,20,11,8,0,0,0,0,0,0,0,0,8,64,
1,6,2,8,15,2,6,0,12,9,0,1,84,0,0,0,
13,8,9,0,12,9,0,3,97,100,100,0,9,8,8,9,
12,9,0,6,115,116,114,105,110,103,0,0,15,10,7,0,
31,6,9,2,19,6,8,6,30,6,0,143,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,98,114,101,97,
107,0,0,0,18,0,0,72,18,0,0,70,30,5,0,144,
32,32,32,32,32,32,32,32,32,32,32,32,101,108,115,101,
58,0,0,0,30,8,0,145,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,118,44,105,32,61,32,118,43,
99,44,105,43,49,0,0,0,1,8,7,5,15,6,8,0,
11,10,0,0,0,0,0,0,0,0,240,63,1,9,2,10,
15,8,9,0,15,7,6,0,15,2,8,0,30,13,0,146,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
105,102,32,99,32,61,61,32,39,92,110,39,58,32,84,46,
121,44,84,46,121,105,32,61,32,84,46,121,43,49,44,105,
0,0,0,0,12,8,0,1,10,0,0,0,23,6,5,8,
31,6,9,2,19,6,8,6,18,0,0,43,18,0,0,41,
1,8,7,5,15,6,8,0,11,10,0,0,0,0,0,0,
0,0,240,63,1,9,2,10,15,8,9,0,15,7,6,0,
15,2,8,0,12,8,0,1,10,0,0,0,23,6,5,8,
21,6,0,0,18,0,0,26,12,9,0,1,84,0,0,0,
13,8,9,0,12,9,0,1,121,0,0,0,9,8,8,9,
11,9,0,0,0,0,0,0,0,0,240,63,1,8,8,9,
789,728 → 484,340
13,9,10,0,12,10,0,1,121,0,0,0,10,9,10,6,
12,9,0,1,84,0,0,0,13,6,9,0,12,9,0,2,
121,105,0,0,10,6,9,8,18,0,0,1,18,0,0,1,
18,0,255,94,18,0,0,230,30,5,0,148,32,32,32,32,
32,32,32,32,119,104,105,108,101,32,105,60,108,58,0,0,
25,6,2,3,21,6,0,0,18,0,0,220,30,6,0,149,
32,32,32,32,32,32,32,32,32,32,32,32,99,32,61,32,
115,91,105,93,0,0,0,0,9,6,1,2,15,5,6,0,
30,7,0,150,32,32,32,32,32,32,32,32,32,32,32,32,
105,102,32,99,32,61,61,32,34,92,92,34,58,0,0,0,
12,8,0,1,92,0,0,0,23,6,5,8,21,6,0,0,
18,0,0,124,30,9,0,151,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,105,32,61,32,105,43,49,59,
32,99,32,61,32,115,91,105,93,0,0,0,11,8,0,0,
0,0,0,0,0,0,240,63,1,6,2,8,15,2,6,0,
9,6,1,2,15,5,6,0,30,10,0,152,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,99,
32,61,61,32,34,110,34,58,32,99,32,61,32,39,92,110,
39,0,0,0,12,8,0,1,110,0,0,0,23,6,5,8,
21,6,0,0,18,0,0,5,12,6,0,1,10,0,0,0,
15,5,6,0,18,0,0,1,30,11,0,153,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,105,102,32,99,
32,61,61,32,34,114,34,58,32,99,32,61,32,99,104,114,
40,49,51,41,0,0,0,0,12,8,0,1,114,0,0,0,
23,6,5,8,21,6,0,0,18,0,0,11,12,9,0,3,
99,104,114,0,13,8,9,0,11,9,0,0,0,0,0,0,
0,0,42,64,31,6,9,1,19,6,8,6,15,5,6,0,
18,0,0,1,30,10,0,154,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,105,102,32,99,32,61,61,32,
34,116,34,58,32,99,32,61,32,34,92,116,34,0,0,0,
12,8,0,1,116,0,0,0,23,6,5,8,21,6,0,0,
18,0,0,5,12,6,0,1,9,0,0,0,15,5,6,0,
18,0,0,1,30,10,0,155,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,105,102,32,99,32,61,61,32,
34,48,34,58,32,99,32,61,32,34,92,48,34,0,0,0,
18,0,255,159,18,0,0,104,25,6,2,3,21,6,0,0,
18,0,0,100,9,6,1,2,15,5,6,0,12,8,0,1,
92,0,0,0,23,6,5,8,21,6,0,0,18,0,0,60,
11,8,0,0,0,0,0,0,0,0,240,63,1,6,2,8,
15,2,6,0,9,6,1,2,15,5,6,0,12,8,0,1,
110,0,0,0,23,6,5,8,21,6,0,0,18,0,0,5,
12,6,0,1,10,0,0,0,15,5,6,0,18,0,0,1,
12,8,0,1,114,0,0,0,23,6,5,8,21,6,0,0,
18,0,0,11,12,9,0,3,99,104,114,0,13,8,9,0,
11,9,0,0,0,0,0,0,0,0,42,64,31,6,9,1,
19,6,8,6,15,5,6,0,18,0,0,1,12,8,0,1,
116,0,0,0,23,6,5,8,21,6,0,0,18,0,0,5,
12,6,0,1,9,0,0,0,15,5,6,0,18,0,0,1,
12,8,0,1,48,0,0,0,23,6,5,8,21,6,0,0,
18,0,0,5,12,6,0,1,0,0,0,0,15,5,6,0,
18,0,0,1,30,8,0,156,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,118,44,105,32,61,32,118,43,
99,44,105,43,49,0,0,0,1,8,7,5,15,6,8,0,
11,10,0,0,0,0,0,0,0,0,240,63,1,9,2,10,
15,8,9,0,15,7,6,0,15,2,8,0,18,0,0,74,
30,7,0,157,32,32,32,32,32,32,32,32,32,32,32,32,
101,108,105,102,32,99,32,61,61,32,113,58,0,0,0,0,
23,6,5,4,21,6,0,0,18,0,0,44,30,6,0,158,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
105,32,43,61,32,49,0,0,11,8,0,0,0,0,0,0,
0,0,240,63,1,6,2,8,15,2,6,0,30,9,0,159,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
84,46,97,100,100,40,39,115,116,114,105,110,103,39,44,118,
41,0,0,0,12,9,0,1,84,0,0,0,13,8,9,0,
12,9,0,3,97,100,100,0,9,8,8,9,12,9,0,6,
115,116,114,105,110,103,0,0,15,10,7,0,31,6,9,2,
19,6,8,6,30,6,0,160,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,98,114,101,97,107,0,0,0,
18,0,0,22,18,0,0,20,30,8,0,162,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,118,44,105,32,
61,32,118,43,99,44,105,43,49,0,0,0,1,8,7,5,
15,6,8,0,11,10,0,0,0,0,0,0,0,0,240,63,
1,9,2,10,15,8,9,0,15,7,6,0,15,2,8,0,
18,0,0,1,18,0,255,35,18,0,0,1,30,4,0,163,
32,32,32,32,114,101,116,117,114,110,32,105,0,0,0,0,
20,2,0,0,0,0,0,0,12,14,0,9,100,111,95,115,
116,114,105,110,103,0,0,0,14,14,13,0,30,6,0,165,
100,101,102,32,100,111,95,99,111,109,109,101,110,116,40,115,
44,105,44,108,41,58,0,0,16,14,0,85,44,7,0,0,
30,6,0,165,100,101,102,32,100,111,95,99,111,109,109,101,
110,116,40,115,44,105,44,108,41,58,0,0,12,1,0,16,
99,111,114,101,47,116,111,107,101,110,105,122,101,46,112,121,
0,0,0,0,33,1,0,0,12,1,0,10,100,111,95,99,
111,109,109,101,110,116,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,30,3,0,166,32,32,32,32,105,32,43,61,
32,49,0,0,11,5,0,0,0,0,0,0,0,0,240,63,
1,4,2,5,15,2,4,0,30,4,0,167,32,32,32,32,
119,104,105,108,101,32,105,60,108,58,0,0,25,4,2,3,
21,4,0,0,18,0,0,35,30,5,0,168,32,32,32,32,
32,32,32,32,99,32,61,32,115,91,105,93,0,0,0,0,
9,5,1,2,15,4,5,0,30,7,0,169,32,32,32,32,
32,32,32,32,105,102,32,99,32,61,61,32,39,92,110,39,
58,32,98,114,101,97,107,0,12,6,0,1,10,0,0,0,
23,5,4,6,21,5,0,0,18,0,0,3,18,0,0,13,
18,0,0,1,30,4,0,170,32,32,32,32,32,32,32,32,
105,32,43,61,32,49,0,0,11,6,0,0,0,0,0,0,
0,0,240,63,1,5,2,6,15,2,5,0,18,0,255,220,
30,4,0,171,32,32,32,32,114,101,116,117,114,110,32,105,
0,0,0,0,20,2,0,0,0,0,0,0,12,15,0,10,
100,111,95,99,111,109,109,101,110,116,0,0,14,15,14,0,
0,0,0,0,
18,0,0,1,1,8,7,5,15,6,8,0,11,10,0,0,
0,0,0,0,0,0,240,63,1,9,2,10,15,8,9,0,
15,7,6,0,15,2,8,0,18,0,0,33,23,6,5,4,
21,6,0,0,18,0,0,20,11,8,0,0,0,0,0,0,
0,0,240,63,1,6,2,8,15,2,6,0,12,9,0,1,
84,0,0,0,13,8,9,0,12,9,0,3,97,100,100,0,
9,8,8,9,12,9,0,6,115,116,114,105,110,103,0,0,
15,10,7,0,31,6,9,2,19,6,8,6,18,0,0,13,
18,0,0,11,1,8,7,5,15,6,8,0,11,10,0,0,
0,0,0,0,0,0,240,63,1,9,2,10,15,8,9,0,
15,7,6,0,15,2,8,0,18,0,0,1,18,0,255,155,
18,0,0,1,20,2,0,0,0,0,0,0,12,18,0,9,
100,111,95,115,116,114,105,110,103,0,0,0,14,18,17,0,
16,18,0,33,44,7,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,28,4,0,0,9,3,0,4,
11,5,0,0,0,0,0,0,0,0,240,63,1,4,2,5,
15,2,4,0,25,4,2,3,21,4,0,0,18,0,0,16,
9,5,1,2,15,4,5,0,12,6,0,1,10,0,0,0,
23,5,4,6,21,5,0,0,18,0,0,3,18,0,0,8,
18,0,0,1,11,6,0,0,0,0,0,0,0,0,240,63,
1,5,2,6,15,2,5,0,18,0,255,239,20,2,0,0,
0,0,0,0,12,19,0,10,100,111,95,99,111,109,109,101,
110,116,0,0,14,19,18,0,0,0,0,0,
};
unsigned char tp_parse[] = {
44,114,0,0,30,6,0,1,105,109,112,111,114,116,32,116,
111,107,101,110,105,122,101,44,32,115,121,115,0,0,0,0,
12,0,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,0,0,0,12,0,0,1,63,0,0,0,
34,0,0,0,12,2,0,6,105,109,112,111,114,116,0,0,
44,114,0,0,12,2,0,6,105,109,112,111,114,116,0,0,
13,1,2,0,12,2,0,8,116,111,107,101,110,105,122,101,
0,0,0,0,31,0,2,1,19,0,1,0,12,1,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,14,1,0,0,
12,2,0,6,105,109,112,111,114,116,0,0,13,1,2,0,
12,2,0,3,115,121,115,0,31,0,2,1,19,0,1,0,
12,1,0,3,115,121,115,0,14,1,0,0,30,7,0,2,
102,114,111,109,32,116,111,107,101,110,105,122,101,32,105,109,
112,111,114,116,32,84,111,107,101,110,0,0,12,2,0,6,
105,109,112,111,114,116,0,0,13,1,2,0,12,2,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,31,0,2,1,
19,0,1,0,12,2,0,8,95,95,100,105,99,116,95,95,
0,0,0,0,13,1,2,0,12,3,0,5,84,111,107,101,
110,0,0,0,9,2,0,3,12,0,0,5,84,111,107,101,
110,0,0,0,10,1,0,2,30,8,0,3,105,102,32,110,
111,116,32,34,116,105,110,121,112,121,34,32,105,110,32,115,
121,115,46,118,101,114,115,105,111,110,58,0,12,2,0,3,
115,121,115,0,13,1,2,0,12,2,0,7,118,101,114,115,
105,111,110,0,9,1,1,2,12,2,0,6,116,105,110,121,
112,121,0,0,36,1,1,2,47,0,1,0,21,0,0,0,
18,0,0,30,30,6,0,4,32,32,32,32,102,114,111,109,
32,98,111,111,116,32,105,109,112,111,114,116,32,42,0,0,
12,2,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
31,0,2,1,19,0,1,0,12,2,0,8,95,95,100,105,
99,116,95,95,0,0,0,0,13,1,2,0,12,3,0,5,
84,111,107,101,110,0,0,0,9,2,0,3,12,0,0,5,
84,111,107,101,110,0,0,0,10,1,0,2,12,2,0,3,
115,116,114,0,13,1,2,0,11,2,0,0,0,0,0,0,
0,0,240,63,31,0,2,1,19,0,1,0,12,1,0,1,
46,0,0,0,36,0,0,1,21,0,0,0,18,0,0,23,
12,2,0,6,105,109,112,111,114,116,0,0,13,1,2,0,
12,2,0,4,98,111,111,116,0,0,0,0,31,0,2,1,
19,0,1,0,12,3,0,5,109,101,114,103,101,0,0,0,
13,2,3,0,12,5,0,8,95,95,100,105,99,116,95,95,
0,0,0,0,13,3,5,0,15,4,0,0,31,1,3,2,
19,1,2,1,18,0,0,1,30,5,0,6,100,101,102,32,
99,104,101,99,107,40,116,44,42,118,115,41,58,0,0,0,
16,0,0,115,44,6,0,0,30,5,0,6,100,101,102,32,
99,104,101,99,107,40,116,44,42,118,115,41,58,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,5,99,104,101,99,
107,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
12,3,0,1,42,0,0,0,9,2,0,3,30,9,0,7,
32,32,32,32,105,102,32,118,115,91,48,93,32,61,61,32,
78,111,110,101,58,32,114,101,116,117,114,110,32,84,114,117,
101,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,
19,1,2,1,18,0,0,1,16,0,0,63,44,8,0,0,
28,2,0,0,9,1,0,2,12,3,0,1,42,0,0,0,
9,2,0,3,11,4,0,0,0,0,0,0,0,0,0,0,
9,3,2,4,28,4,0,0,23,3,3,4,21,3,0,0,
18,0,0,6,11,3,0,0,0,0,0,0,0,0,240,63,
20,3,0,0,18,0,0,1,30,9,0,8,32,32,32,32,
105,102,32,116,46,116,121,112,101,32,105,110,32,118,115,58,
32,114,101,116,117,114,110,32,84,114,117,101,0,0,0,0,
12,5,0,4,116,121,112,101,0,0,0,0,9,4,1,5,
36,3,2,4,21,3,0,0,18,0,0,6,11,3,0,0,
20,3,0,0,18,0,0,1,12,5,0,4,116,121,112,101,
0,0,0,0,9,4,1,5,36,3,2,4,21,3,0,0,
18,0,0,6,11,3,0,0,0,0,0,0,0,0,240,63,
20,3,0,0,18,0,0,1,11,5,0,0,0,0,0,0,
0,0,0,0,12,6,0,4,116,121,112,101,0,0,0,0,
9,3,1,6,12,6,0,6,115,121,109,98,111,108,0,0,
23,3,3,6,23,4,3,5,21,4,0,0,18,0,0,2,
18,0,0,5,12,7,0,3,118,97,108,0,9,6,1,7,
36,3,2,6,21,3,0,0,18,0,0,6,11,3,0,0,
0,0,0,0,0,0,240,63,20,3,0,0,18,0,0,1,
30,14,0,9,32,32,32,32,105,102,32,116,46,116,121,112,
101,32,61,61,32,39,115,121,109,98,111,108,39,32,97,110,
100,32,116,46,118,97,108,32,105,110,32,118,115,58,32,114,
101,116,117,114,110,32,84,114,117,101,0,0,12,4,0,4,
116,121,112,101,0,0,0,0,9,3,1,4,12,4,0,6,
115,121,109,98,111,108,0,0,23,3,3,4,21,3,0,0,
18,0,0,5,12,5,0,3,118,97,108,0,9,4,1,5,
36,3,2,4,21,3,0,0,18,0,0,6,11,3,0,0,
0,0,0,0,0,0,240,63,20,3,0,0,18,0,0,1,
30,5,0,10,32,32,32,32,114,101,116,117,114,110,32,70,
97,108,115,101,0,0,0,0,11,3,0,0,0,0,0,0,
0,0,0,0,20,3,0,0,0,0,0,0,12,1,0,5,
99,104,101,99,107,0,0,0,14,1,0,0,30,4,0,12,
100,101,102,32,116,119,101,97,107,40,107,44,118,41,58,0,
16,1,0,102,44,10,0,0,30,4,0,12,100,101,102,32,
116,119,101,97,107,40,107,44,118,41,58,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,5,116,119,101,97,107,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,30,8,0,13,32,32,32,32,80,46,115,116,
97,99,107,46,97,112,112,101,110,100,40,40,107,44,100,109,
97,112,91,107,93,41,41,0,12,5,0,1,80,0,0,0,
13,4,5,0,12,5,0,5,115,116,97,99,107,0,0,0,
9,4,4,5,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,4,5,15,6,1,0,12,8,0,4,100,109,97,112,
0,0,0,0,13,7,8,0,9,7,7,1,27,5,6,2,
31,3,5,1,19,3,4,3,30,7,0,14,32,32,32,32,
105,102,32,118,58,32,100,109,97,112,91,107,93,32,61,32,
111,109,97,112,91,107,93,0,21,2,0,0,18,0,0,12,
11,3,0,0,0,0,0,0,0,0,0,0,20,3,0,0,
0,0,0,0,12,1,0,5,99,104,101,99,107,0,0,0,
14,1,0,0,16,1,0,58,44,10,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,12,5,0,1,
80,0,0,0,13,4,5,0,12,5,0,5,115,116,97,99,
107,0,0,0,9,4,4,5,12,5,0,6,97,112,112,101,
110,100,0,0,9,4,4,5,15,6,1,0,12,8,0,4,
100,109,97,112,0,0,0,0,13,7,8,0,9,7,7,1,
27,5,6,2,31,3,5,1,19,3,4,3,21,2,0,0,
18,0,0,12,12,4,0,4,100,109,97,112,0,0,0,0,
13,3,4,0,12,5,0,4,111,109,97,112,0,0,0,0,
13,4,5,0,9,4,4,1,10,3,1,4,18,0,0,19,
12,4,0,4,100,109,97,112,0,0,0,0,13,3,4,0,
12,5,0,4,111,109,97,112,0,0,0,0,13,4,5,0,
9,4,4,1,10,3,1,4,18,0,0,31,30,11,0,15,
32,32,32,32,101,108,115,101,58,32,100,109,97,112,91,107,
93,32,61,32,123,39,108,98,112,39,58,48,44,39,110,117,
100,39,58,105,116,115,101,108,102,125,0,0,12,4,0,4,
100,109,97,112,0,0,0,0,13,3,4,0,12,5,0,3,
108,98,112,0,11,6,0,0,0,0,0,0,0,0,0,0,
12,7,0,3,110,117,100,0,12,9,0,6,105,116,115,101,
108,102,0,0,13,8,9,0,26,4,5,4,10,3,1,4,
18,0,0,1,0,0,0,0,12,2,0,5,116,119,101,97,
107,0,0,0,14,2,1,0,30,4,0,16,100,101,102,32,
114,101,115,116,111,114,101,40,41,58,0,0,16,2,0,57,
44,6,0,0,30,4,0,16,100,101,102,32,114,101,115,116,
111,114,101,40,41,58,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,7,114,101,115,116,111,114,101,0,34,1,0,0,
30,6,0,17,32,32,32,32,107,44,118,32,61,32,80,46,
115,116,97,99,107,46,112,111,112,40,41,0,12,3,0,1,
80,0,0,0,13,2,3,0,12,3,0,5,115,116,97,99,
107,0,0,0,9,2,2,3,12,3,0,3,112,111,112,0,
9,2,2,3,31,1,0,0,19,1,2,1,11,4,0,0,
0,0,0,0,0,0,0,0,9,3,1,4,15,2,3,0,
11,5,0,0,0,0,0,0,0,0,240,63,9,4,1,5,
15,3,4,0,30,4,0,18,32,32,32,32,100,109,97,112,
91,107,93,32,61,32,118,0,12,4,0,4,100,109,97,112,
0,0,0,0,13,1,4,0,10,1,2,3,0,0,0,0,
12,3,0,7,114,101,115,116,111,114,101,0,14,3,2,0,
30,3,0,20,100,101,102,32,99,112,121,40,100,41,58,0,
16,3,0,46,44,6,0,0,30,3,0,20,100,101,102,32,
99,112,121,40,100,41,58,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,3,99,112,121,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,3,0,21,32,32,32,32,114,32,61,32,
123,125,0,0,26,3,0,0,15,2,3,0,30,7,0,22,
32,32,32,32,102,111,114,32,107,32,105,110,32,100,58,32,
114,91,107,93,32,61,32,100,91,107,93,0,11,4,0,0,
12,5,0,3,108,98,112,0,11,6,0,0,0,0,0,0,
0,0,0,0,12,7,0,3,110,117,100,0,12,9,0,6,
105,116,115,101,108,102,0,0,13,8,9,0,26,4,5,4,
10,3,1,4,18,0,0,1,0,0,0,0,12,2,0,5,
116,119,101,97,107,0,0,0,14,2,1,0,16,2,0,30,
44,6,0,0,12,3,0,1,80,0,0,0,13,2,3,0,
12,3,0,5,115,116,97,99,107,0,0,0,9,2,2,3,
12,3,0,3,112,111,112,0,9,2,2,3,31,1,0,0,
19,1,2,1,11,4,0,0,0,0,0,0,0,0,0,0,
9,3,1,4,15,2,3,0,11,5,0,0,0,0,0,0,
0,0,240,63,9,4,1,5,15,3,4,0,12,4,0,4,
100,109,97,112,0,0,0,0,13,1,4,0,10,1,2,3,
0,0,0,0,12,3,0,7,114,101,115,116,111,114,101,0,
14,3,2,0,16,3,0,16,44,6,0,0,28,2,0,0,
9,1,0,2,26,3,0,0,15,2,3,0,11,4,0,0,
0,0,0,0,0,0,0,0,42,3,1,4,18,0,0,4,
9,5,1,3,10,2,3,5,18,0,255,252,30,4,0,23,
32,32,32,32,114,101,116,117,114,110,32,114,0,0,0,0,
20,2,0,0,0,0,0,0,12,4,0,3,99,112,121,0,
14,4,3,0,30,4,0,25,99,108,97,115,115,32,80,68,
97,116,97,58,0,0,0,0,26,4,0,0,12,5,0,5,
80,68,97,116,97,0,0,0,14,5,4,0,12,7,0,7,
115,101,116,109,101,116,97,0,13,6,7,0,15,7,4,0,
12,9,0,6,111,98,106,101,99,116,0,0,13,8,9,0,
31,5,7,2,19,5,6,5,16,5,0,106,44,6,0,0,
30,9,0,26,32,32,32,32,100,101,102,32,95,95,105,110,
105,116,95,95,40,115,101,108,102,44,115,44,116,111,107,101,
110,115,41,58,0,0,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,8,95,95,105,110,105,116,95,95,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,30,5,0,27,
32,32,32,32,32,32,32,32,115,101,108,102,46,115,32,61,
32,115,0,0,12,4,0,1,115,0,0,0,10,1,4,2,
30,8,0,28,32,32,32,32,32,32,32,32,115,101,108,102,
46,116,111,107,101,110,115,32,61,32,116,111,107,101,110,115,
0,0,0,0,12,4,0,6,116,111,107,101,110,115,0,0,
10,1,4,3,30,6,0,29,32,32,32,32,32,32,32,32,
115,101,108,102,46,112,111,115,32,61,32,48,0,0,0,0,
9,5,1,3,10,2,3,5,18,0,255,252,20,2,0,0,
0,0,0,0,12,4,0,3,99,112,121,0,14,4,3,0,
26,4,0,0,12,5,0,5,80,68,97,116,97,0,0,0,
14,5,4,0,16,5,0,32,44,6,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,12,4,0,1,115,0,0,0,10,1,4,2,
12,4,0,6,116,111,107,101,110,115,0,0,10,1,4,3,
11,4,0,0,0,0,0,0,0,0,0,0,12,5,0,3,
112,111,115,0,10,1,5,4,30,7,0,30,32,32,32,32,
32,32,32,32,115,101,108,102,46,116,111,107,101,110,32,61,
32,78,111,110,101,0,0,0,28,4,0,0,12,5,0,5,
116,111,107,101,110,0,0,0,10,1,5,4,30,6,0,31,
32,32,32,32,32,32,32,32,115,101,108,102,46,115,116,97,
99,107,32,61,32,91,93,0,27,4,0,0,12,5,0,5,
115,116,97,99,107,0,0,0,10,1,5,4,30,7,0,32,
32,32,32,32,32,32,32,32,115,101,108,102,46,95,116,101,
114,109,105,110,97,108,32,61,32,48,0,0,11,4,0,0,
0,0,0,0,0,0,0,0,12,5,0,9,95,116,101,114,
109,105,110,97,108,0,0,0,10,1,5,4,0,0,0,0,
12,6,0,8,95,95,105,110,105,116,95,95,0,0,0,0,
10,4,6,5,16,6,0,88,44,7,0,0,30,5,0,33,
32,32,32,32,100,101,102,32,105,110,105,116,40,115,101,108,
102,41,58,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,4,
105,110,105,116,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,7,0,34,32,32,32,32,32,32,32,32,
103,108,111,98,97,108,32,111,109,97,112,44,100,109,97,112,
0,0,0,0,30,8,0,35,32,32,32,32,32,32,32,32,
111,109,97,112,32,61,32,99,112,121,40,98,97,115,101,95,
100,109,97,112,41,0,0,0,12,2,0,4,111,109,97,112,
112,111,115,0,10,1,5,4,28,4,0,0,12,5,0,5,
116,111,107,101,110,0,0,0,10,1,5,4,27,4,0,0,
12,5,0,5,115,116,97,99,107,0,0,0,10,1,5,4,
0,0,0,0,12,6,0,8,95,95,105,110,105,116,95,95,
0,0,0,0,10,4,6,5,16,6,0,39,44,7,0,0,
28,2,0,0,9,1,0,2,12,2,0,4,111,109,97,112,
0,0,0,0,12,5,0,3,99,112,121,0,13,4,5,0,
12,6,0,9,98,97,115,101,95,100,109,97,112,0,0,0,
13,5,6,0,31,3,5,1,19,3,4,3,14,2,3,0,
30,8,0,36,32,32,32,32,32,32,32,32,100,109,97,112,
32,61,32,99,112,121,40,98,97,115,101,95,100,109,97,112,
41,0,0,0,12,2,0,4,100,109,97,112,0,0,0,0,
12,5,0,3,99,112,121,0,13,4,5,0,12,6,0,9,
98,97,115,101,95,100,109,97,112,0,0,0,13,5,6,0,
31,3,5,1,19,3,4,3,14,2,3,0,30,6,0,37,
32,32,32,32,32,32,32,32,115,101,108,102,46,97,100,118,
97,110,99,101,40,41,0,0,12,4,0,7,97,100,118,97,
12,2,0,4,100,109,97,112,0,0,0,0,12,5,0,3,
99,112,121,0,13,4,5,0,12,6,0,9,98,97,115,101,
95,100,109,97,112,0,0,0,13,5,6,0,31,3,5,1,
19,3,4,3,14,2,3,0,12,4,0,7,97,100,118,97,
110,99,101,0,9,3,1,4,31,2,0,0,19,2,3,2,
0,0,0,0,12,7,0,4,105,110,105,116,0,0,0,0,
10,4,7,6,16,7,1,22,44,12,0,0,30,8,0,38,
32,32,32,32,100,101,102,32,97,100,118,97,110,99,101,40,
115,101,108,102,44,118,97,108,61,78,111,110,101,41,58,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,7,97,100,118,97,
110,99,101,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,30,10,0,39,
32,32,32,32,32,32,32,32,105,102,32,110,111,116,32,99,
104,101,99,107,40,115,101,108,102,46,116,111,107,101,110,44,
118,97,108,41,58,0,0,0,12,6,0,5,99,104,101,99,
107,0,0,0,13,5,6,0,12,8,0,5,116,111,107,101,
110,0,0,0,9,6,1,8,15,7,2,0,31,4,6,2,
19,4,5,4,47,3,4,0,21,3,0,0,18,0,0,30,
30,12,0,40,32,32,32,32,32,32,32,32,32,32,32,32,
101,114,114,111,114,40,39,101,120,112,101,99,116,101,100,32,
39,43,118,97,108,44,115,101,108,102,46,116,111,107,101,110,
41,0,0,0,12,5,0,5,101,114,114,111,114,0,0,0,
10,4,7,6,16,7,0,106,44,11,0,0,28,2,0,0,
9,1,0,2,28,2,0,0,28,3,0,0,32,2,0,3,
11,3,0,0,0,0,0,0,0,0,0,0,12,6,0,5,
99,104,101,99,107,0,0,0,13,5,6,0,12,8,0,5,
116,111,107,101,110,0,0,0,9,6,1,8,15,7,2,0,
31,4,6,2,19,4,5,4,23,3,3,4,21,3,0,0,
18,0,0,17,12,5,0,5,101,114,114,111,114,0,0,0,
13,4,5,0,12,5,0,9,101,120,112,101,99,116,101,100,
32,0,0,0,1,5,5,2,12,7,0,5,116,111,107,101,
110,0,0,0,9,6,1,7,31,3,5,2,19,3,4,3,
18,0,0,1,30,10,0,41,32,32,32,32,32,32,32,32,
105,102,32,115,101,108,102,46,112,111,115,32,60,32,108,101,
110,40,115,101,108,102,46,116,111,107,101,110,115,41,58,0,
12,4,0,3,112,111,115,0,9,3,1,4,12,6,0,3,
108,101,110,0,13,5,6,0,12,7,0,6,116,111,107,101,
110,115,0,0,9,6,1,7,31,4,6,1,19,4,5,4,
25,3,3,4,21,3,0,0,18,0,0,40,30,10,0,42,
32,32,32,32,32,32,32,32,32,32,32,32,116,32,61,32,
115,101,108,102,46,116,111,107,101,110,115,91,115,101,108,102,
46,112,111,115,93,0,0,0,12,5,0,6,116,111,107,101,
110,115,0,0,9,4,1,5,12,6,0,3,112,111,115,0,
9,5,1,6,9,4,4,5,15,3,4,0,30,7,0,43,
32,32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,
46,112,111,115,32,43,61,32,49,0,0,0,12,5,0,3,
112,111,115,0,9,4,1,5,11,5,0,0,0,0,0,0,
0,0,240,63,1,4,4,5,12,5,0,3,112,111,115,0,
10,1,5,4,18,0,0,32,30,11,0,45,32,32,32,32,
32,32,32,32,32,32,32,32,116,32,61,32,84,111,107,101,
110,40,40,48,44,48,41,44,39,101,111,102,39,44,39,101,
111,102,39,41,0,0,0,0,12,6,0,5,84,111,107,101,
110,0,0,0,13,5,6,0,11,9,0,0,0,0,0,0,
0,0,0,0,11,10,0,0,0,0,0,0,0,0,0,0,
27,6,9,2,12,7,0,3,101,111,102,0,12,8,0,3,
101,111,102,0,31,4,6,3,19,4,5,4,15,3,4,0,
18,0,0,1,30,7,0,46,32,32,32,32,32,32,32,32,
115,101,108,102,46,116,111,107,101,110,32,61,32,100,111,40,
116,41,0,0,12,6,0,2,100,111,0,0,13,5,6,0,
15,6,3,0,31,4,6,1,19,4,5,4,12,5,0,5,
116,111,107,101,110,0,0,0,10,1,5,4,30,7,0,48,
32,32,32,32,32,32,32,32,115,101,108,102,46,95,116,101,
114,109,105,110,97,108,32,43,61,32,49,0,12,5,0,9,
95,116,101,114,109,105,110,97,108,0,0,0,9,4,1,5,
18,0,0,1,12,4,0,3,112,111,115,0,9,3,1,4,
12,6,0,3,108,101,110,0,13,5,6,0,12,7,0,6,
116,111,107,101,110,115,0,0,9,6,1,7,31,4,6,1,
19,4,5,4,25,3,3,4,21,3,0,0,18,0,0,21,
12,5,0,6,116,111,107,101,110,115,0,0,9,4,1,5,
12,6,0,3,112,111,115,0,9,5,1,6,9,4,4,5,
15,3,4,0,12,5,0,3,112,111,115,0,9,4,1,5,
11,5,0,0,0,0,0,0,0,0,240,63,1,4,4,5,
12,5,0,9,95,116,101,114,109,105,110,97,108,0,0,0,
10,1,5,4,30,14,0,49,32,32,32,32,32,32,32,32,
105,102,32,99,104,101,99,107,40,115,101,108,102,46,116,111,
107,101,110,44,39,110,108,39,44,39,101,111,102,39,44,39,
59,39,44,39,100,101,100,101,110,116,39,41,58,0,0,0,
12,6,0,5,99,104,101,99,107,0,0,0,13,5,6,0,
12,11,0,5,116,111,107,101,110,0,0,0,9,6,1,11,
12,7,0,2,110,108,0,0,12,8,0,3,101,111,102,0,
12,9,0,1,59,0,0,0,12,10,0,6,100,101,100,101,
110,116,0,0,31,4,6,5,19,4,5,4,21,4,0,0,
18,0,0,19,30,8,0,50,32,32,32,32,32,32,32,32,
32,32,32,32,115,101,108,102,46,95,116,101,114,109,105,110,
97,108,32,61,32,48,0,0,11,4,0,0,0,0,0,0,
0,0,0,0,12,5,0,9,95,116,101,114,109,105,110,97,
108,0,0,0,10,1,5,4,18,0,0,1,30,5,0,51,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,3,0,0,0,0,0,0,12,8,0,7,
97,100,118,97,110,99,101,0,10,4,8,7,16,8,0,74,
44,7,0,0,30,6,0,53,32,32,32,32,100,101,102,32,
116,101,114,109,105,110,97,108,40,115,101,108,102,41,58,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,8,116,101,114,109,
105,110,97,108,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,8,0,54,32,32,32,32,32,32,32,32,
105,102,32,115,101,108,102,46,95,116,101,114,109,105,110,97,
108,32,62,32,49,58,0,0,11,2,0,0,0,0,0,0,
0,0,240,63,12,4,0,9,95,116,101,114,109,105,110,97,
108,0,0,0,9,3,1,4,25,2,2,3,21,2,0,0,
18,0,0,32,30,13,0,55,32,32,32,32,32,32,32,32,
32,32,32,32,101,114,114,111,114,40,39,105,110,118,97,108,
105,100,32,115,116,97,116,101,109,101,110,116,39,44,115,101,
108,102,46,116,111,107,101,110,41,0,0,0,12,4,0,5,
101,114,114,111,114,0,0,0,13,3,4,0,12,4,0,17,
105,110,118,97,108,105,100,32,115,116,97,116,101,109,101,110,
116,0,0,0,12,6,0,5,116,111,107,101,110,0,0,0,
9,5,1,6,31,2,4,2,19,2,3,2,18,0,0,1,
0,0,0,0,12,9,0,8,116,101,114,109,105,110,97,108,
0,0,0,0,10,4,9,8,30,5,0,57,100,101,102,32,
101,114,114,111,114,40,99,116,120,44,116,41,58,0,0,0,
16,4,0,54,44,9,0,0,30,5,0,57,100,101,102,32,
101,114,114,111,114,40,99,116,120,44,116,41,58,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,5,101,114,114,111,
114,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,30,9,0,58,32,32,32,32,
116,111,107,101,110,105,122,101,46,117,95,101,114,114,111,114,
40,99,116,120,44,80,46,115,44,116,46,112,111,115,41,0,
12,5,0,3,112,111,115,0,10,1,5,4,18,0,0,20,
12,6,0,5,84,111,107,101,110,0,0,0,13,5,6,0,
11,9,0,0,0,0,0,0,0,0,0,0,11,10,0,0,
0,0,0,0,0,0,0,0,27,6,9,2,12,7,0,3,
101,111,102,0,12,8,0,3,101,111,102,0,31,4,6,3,
19,4,5,4,15,3,4,0,18,0,0,1,12,6,0,2,
100,111,0,0,13,5,6,0,15,6,3,0,31,4,6,1,
19,4,5,4,12,5,0,5,116,111,107,101,110,0,0,0,
10,1,5,4,20,3,0,0,0,0,0,0,12,8,0,7,
97,100,118,97,110,99,101,0,10,4,8,7,16,8,0,64,
44,7,0,0,28,2,0,0,9,1,0,2,12,4,0,4,
98,105,110,100,0,0,0,0,13,3,4,0,12,6,0,5,
80,68,97,116,97,0,0,0,13,4,6,0,12,6,0,8,
95,95,105,110,105,116,95,95,0,0,0,0,9,4,4,6,
15,5,1,0,31,2,4,2,19,2,3,2,12,3,0,8,
95,95,105,110,105,116,95,95,0,0,0,0,10,1,3,2,
12,4,0,4,98,105,110,100,0,0,0,0,13,3,4,0,
12,6,0,5,80,68,97,116,97,0,0,0,13,4,6,0,
12,6,0,4,105,110,105,116,0,0,0,0,9,4,4,6,
15,5,1,0,31,2,4,2,19,2,3,2,12,3,0,4,
105,110,105,116,0,0,0,0,10,1,3,2,12,4,0,4,
98,105,110,100,0,0,0,0,13,3,4,0,12,6,0,5,
80,68,97,116,97,0,0,0,13,4,6,0,12,6,0,7,
97,100,118,97,110,99,101,0,9,4,4,6,15,5,1,0,
31,2,4,2,19,2,3,2,12,3,0,7,97,100,118,97,
110,99,101,0,10,1,3,2,0,0,0,0,12,9,0,7,
95,95,110,101,119,95,95,0,10,4,9,8,16,9,0,22,
44,5,0,0,26,1,0,0,12,4,0,5,80,68,97,116,
97,0,0,0,13,3,4,0,12,4,0,7,95,95,110,101,
119,95,95,0,9,3,3,4,15,4,1,0,31,2,4,1,
19,2,3,2,12,3,0,8,95,95,105,110,105,116,95,95,
0,0,0,0,9,2,1,3,19,4,2,0,20,1,0,0,
0,0,0,0,12,10,0,8,95,95,99,97,108,108,95,95,
0,0,0,0,10,4,10,9,16,4,0,32,44,9,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
12,4,0,5,112,114,105,110,116,0,0,0,13,3,4,0,
12,5,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
13,4,5,0,12,5,0,7,117,95,101,114,114,111,114,0,
9,4,4,5,15,5,1,0,12,8,0,1,80,0,0,0,
13,6,8,0,12,8,0,1,115,0,0,0,9,6,6,8,
12,8,0,3,112,111,115,0,9,7,2,8,31,3,5,3,
19,3,4,3,0,0,0,0,12,9,0,5,101,114,114,111,
114,0,0,0,14,9,4,0,30,3,0,60,100,101,102,32,
110,117,100,40,116,41,58,0,16,9,0,31,44,5,0,0,
30,3,0,60,100,101,102,32,110,117,100,40,116,41,58,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,3,110,117,100,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,5,0,63,
32,32,32,32,114,101,116,117,114,110,32,116,46,110,117,100,
40,116,41,0,12,4,0,3,110,117,100,0,9,3,1,4,
15,4,1,0,31,2,4,1,19,2,3,2,20,2,0,0,
0,0,0,0,12,10,0,3,110,117,100,0,14,10,9,0,
30,5,0,64,100,101,102,32,108,101,100,40,116,44,108,101,
102,116,41,58,0,0,0,0,16,10,0,38,44,7,0,0,
30,5,0,64,100,101,102,32,108,101,100,40,116,44,108,101,
102,116,41,58,0,0,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,3,108,101,100,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,30,7,0,67,
32,32,32,32,114,101,116,117,114,110,32,116,46,108,101,100,
40,116,44,108,101,102,116,41,0,0,0,0,12,5,0,3,
19,3,4,3,0,0,0,0,12,10,0,5,101,114,114,111,
114,0,0,0,14,10,4,0,16,10,0,12,44,5,0,0,
28,2,0,0,9,1,0,2,12,4,0,3,110,117,100,0,
9,3,1,4,15,4,1,0,31,2,4,1,19,2,3,2,
20,2,0,0,0,0,0,0,12,11,0,3,110,117,100,0,
14,11,10,0,16,11,0,15,44,7,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,12,5,0,3,
108,101,100,0,9,4,1,5,15,5,1,0,15,6,2,0,
31,3,5,2,19,3,4,3,20,3,0,0,0,0,0,0,
12,11,0,3,108,101,100,0,14,11,10,0,30,4,0,68,
100,101,102,32,103,101,116,95,108,98,112,40,116,41,58,0,
16,11,0,30,44,4,0,0,30,4,0,68,100,101,102,32,
103,101,116,95,108,98,112,40,116,41,58,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,7,103,101,116,95,108,98,112,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,5,0,71,
32,32,32,32,114,101,116,117,114,110,32,116,46,108,98,112,
0,0,0,0,12,3,0,3,108,98,112,0,9,2,1,3,
20,2,0,0,0,0,0,0,12,12,0,7,103,101,116,95,
108,98,112,0,14,12,11,0,30,5,0,72,100,101,102,32,
103,101,116,95,105,116,101,109,115,40,116,41,58,0,0,0,
16,12,0,33,44,4,0,0,30,5,0,72,100,101,102,32,
103,101,116,95,105,116,101,109,115,40,116,41,58,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,9,103,101,116,95,
105,116,101,109,115,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,5,0,75,32,32,32,32,114,101,116,117,
114,110,32,116,46,105,116,101,109,115,0,0,12,3,0,5,
105,116,101,109,115,0,0,0,9,2,1,3,20,2,0,0,
0,0,0,0,12,13,0,9,103,101,116,95,105,116,101,109,
115,0,0,0,14,13,12,0,30,6,0,77,100,101,102,32,
101,120,112,114,101,115,115,105,111,110,40,114,98,112,41,58,
0,0,0,0,16,13,0,135,44,9,0,0,30,6,0,77,
100,101,102,32,101,120,112,114,101,115,115,105,111,110,40,114,
98,112,41,58,0,0,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,4,0,78,
32,32,32,32,116,32,61,32,80,46,116,111,107,101,110,0,
12,4,0,1,80,0,0,0,13,3,4,0,12,4,0,5,
116,111,107,101,110,0,0,0,9,3,3,4,15,2,3,0,
30,4,0,79,32,32,32,32,97,100,118,97,110,99,101,40,
41,0,0,0,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,31,3,0,0,19,3,4,3,30,5,0,80,
32,32,32,32,108,101,102,116,32,61,32,110,117,100,40,116,
41,0,0,0,12,6,0,3,110,117,100,0,13,5,6,0,
12,12,0,3,108,101,100,0,14,12,11,0,16,12,0,9,
44,4,0,0,28,2,0,0,9,1,0,2,12,3,0,3,
108,98,112,0,9,2,1,3,20,2,0,0,0,0,0,0,
12,13,0,7,103,101,116,95,108,98,112,0,14,13,12,0,
16,13,0,10,44,4,0,0,28,2,0,0,9,1,0,2,
12,3,0,5,105,116,101,109,115,0,0,0,9,2,1,3,
20,2,0,0,0,0,0,0,12,14,0,9,103,101,116,95,
105,116,101,109,115,0,0,0,14,14,13,0,16,14,0,66,
44,9,0,0,28,2,0,0,9,1,0,2,12,4,0,1,
80,0,0,0,13,3,4,0,12,4,0,5,116,111,107,101,
110,0,0,0,9,3,3,4,15,2,3,0,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,31,3,0,0,
19,3,4,3,12,6,0,3,110,117,100,0,13,5,6,0,
15,6,2,0,31,4,6,1,19,4,5,4,15,3,4,0,
30,9,0,81,32,32,32,32,119,104,105,108,101,32,114,98,
112,32,60,32,103,101,116,95,108,98,112,40,80,46,116,111,
107,101,110,41,58,0,0,0,12,7,0,7,103,101,116,95,
108,98,112,0,13,6,7,0,12,8,0,1,80,0,0,0,
13,7,8,0,12,8,0,5,116,111,107,101,110,0,0,0,
9,7,7,8,31,5,7,1,19,5,6,5,25,4,1,5,
21,4,0,0,18,0,0,44,30,5,0,82,32,32,32,32,
32,32,32,32,116,32,61,32,80,46,116,111,107,101,110,0,
12,7,0,7,103,101,116,95,108,98,112,0,13,6,7,0,
12,8,0,1,80,0,0,0,13,7,8,0,12,8,0,5,
116,111,107,101,110,0,0,0,9,7,7,8,31,5,7,1,
19,5,6,5,25,4,1,5,21,4,0,0,18,0,0,24,
12,5,0,1,80,0,0,0,13,4,5,0,12,5,0,5,
116,111,107,101,110,0,0,0,9,4,4,5,15,2,4,0,
30,5,0,83,32,32,32,32,32,32,32,32,97,100,118,97,
110,99,101,40,41,0,0,0,12,6,0,7,97,100,118,97,
110,99,101,0,13,5,6,0,31,4,0,0,19,4,5,4,
30,7,0,84,32,32,32,32,32,32,32,32,108,101,102,116,
32,61,32,108,101,100,40,116,44,108,101,102,116,41,0,0,
12,6,0,3,108,101,100,0,13,5,6,0,15,6,2,0,
15,7,3,0,31,4,6,2,19,4,5,4,15,3,4,0,
18,0,255,198,30,4,0,85,32,32,32,32,114,101,116,117,
114,110,32,108,101,102,116,0,20,3,0,0,0,0,0,0,
12,14,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
14,14,13,0,30,6,0,87,100,101,102,32,105,110,102,105,
120,95,108,101,100,40,116,44,108,101,102,116,41,58,0,0,
16,14,0,58,44,9,0,0,30,6,0,87,100,101,102,32,
105,110,102,105,120,95,108,101,100,40,116,44,108,101,102,116,
41,58,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,9,
105,110,102,105,120,95,108,101,100,0,0,0,34,1,0,0,
12,6,0,7,97,100,118,97,110,99,101,0,13,5,6,0,
31,4,0,0,19,4,5,4,12,6,0,3,108,101,100,0,
13,5,6,0,15,6,2,0,15,7,3,0,31,4,6,2,
19,4,5,4,15,3,4,0,18,0,255,218,20,3,0,0,
0,0,0,0,12,15,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,14,15,14,0,16,15,0,24,44,9,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
30,10,0,88,32,32,32,32,116,46,105,116,101,109,115,32,
61,32,91,108,101,102,116,44,101,120,112,114,101,115,115,105,
111,110,40,116,46,98,112,41,93,0,0,0,15,4,2,0,
12,7,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
13,6,7,0,12,8,0,2,98,112,0,0,9,7,1,8,
31,5,7,1,19,5,6,5,27,3,4,2,12,4,0,5,
105,116,101,109,115,0,0,0,10,1,4,3,30,4,0,89,
32,32,32,32,114,101,116,117,114,110,32,116,0,0,0,0,
20,1,0,0,0,0,0,0,12,15,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,14,15,14,0,30,6,0,90,
100,101,102,32,105,110,102,105,120,95,105,115,40,116,44,108,
101,102,116,41,58,0,0,0,16,15,0,113,44,9,0,0,
30,6,0,90,100,101,102,32,105,110,102,105,120,95,105,115,
40,116,44,108,101,102,116,41,58,0,0,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,8,105,110,102,105,120,95,105,115,
0,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,30,8,0,91,32,32,32,32,
105,102,32,99,104,101,99,107,40,80,46,116,111,107,101,110,
44,39,110,111,116,39,41,58,0,0,0,0,12,5,0,5,
99,104,101,99,107,0,0,0,13,4,5,0,12,7,0,1,
80,0,0,0,13,5,7,0,12,7,0,5,116,111,107,101,
110,0,0,0,9,5,5,7,12,6,0,3,110,111,116,0,
31,3,5,2,19,3,4,3,21,3,0,0,18,0,0,30,
30,6,0,92,32,32,32,32,32,32,32,32,116,46,118,97,
108,32,61,32,39,105,115,110,111,116,39,0,12,3,0,5,
105,115,110,111,116,0,0,0,12,4,0,3,118,97,108,0,
10,1,4,3,30,6,0,93,32,32,32,32,32,32,32,32,
97,100,118,97,110,99,101,40,39,110,111,116,39,41,0,0,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
12,5,0,3,110,111,116,0,31,3,5,1,19,3,4,3,
18,0,0,1,30,10,0,94,32,32,32,32,116,46,105,116,
101,109,115,32,61,32,91,108,101,102,116,44,101,120,112,114,
101,115,115,105,111,110,40,116,46,98,112,41,93,0,0,0,
15,4,2,0,12,7,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,6,7,0,12,8,0,2,98,112,0,0,
9,7,1,8,31,5,7,1,19,5,6,5,27,3,4,2,
12,4,0,5,105,116,101,109,115,0,0,0,10,1,4,3,
30,4,0,95,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,1,0,0,0,0,0,0,12,16,0,8,
105,110,102,105,120,95,105,115,0,0,0,0,14,16,15,0,
30,6,0,96,100,101,102,32,105,110,102,105,120,95,110,111,
116,40,116,44,108,101,102,116,41,58,0,0,16,16,0,84,
44,9,0,0,30,6,0,96,100,101,102,32,105,110,102,105,
120,95,110,111,116,40,116,44,108,101,102,116,41,58,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,9,105,110,102,105,
120,95,110,111,116,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,30,5,0,97,
32,32,32,32,97,100,118,97,110,99,101,40,39,105,110,39,
41,0,0,0,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,12,5,0,2,105,110,0,0,31,3,5,1,
19,3,4,3,30,5,0,98,32,32,32,32,116,46,118,97,
108,32,61,32,39,110,111,116,105,110,39,0,12,3,0,5,
110,111,116,105,110,0,0,0,12,4,0,3,118,97,108,0,
10,1,4,3,30,10,0,99,32,32,32,32,116,46,105,116,
101,109,115,32,61,32,91,108,101,102,116,44,101,120,112,114,
101,115,115,105,111,110,40,116,46,98,112,41,93,0,0,0,
20,1,0,0,0,0,0,0,12,16,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,14,16,15,0,16,16,0,56,
44,9,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,12,5,0,5,99,104,101,99,107,0,0,0,
13,4,5,0,12,7,0,1,80,0,0,0,13,5,7,0,
12,7,0,5,116,111,107,101,110,0,0,0,9,5,5,7,
12,6,0,3,110,111,116,0,31,3,5,2,19,3,4,3,
21,3,0,0,18,0,0,16,12,3,0,5,105,115,110,111,
116,0,0,0,12,4,0,3,118,97,108,0,10,1,4,3,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
12,5,0,3,110,111,116,0,31,3,5,1,19,3,4,3,
18,0,0,1,15,4,2,0,12,7,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,6,7,0,12,8,0,2,
98,112,0,0,9,7,1,8,31,5,7,1,19,5,6,5,
27,3,4,2,12,4,0,5,105,116,101,109,115,0,0,0,
10,1,4,3,20,1,0,0,0,0,0,0,12,17,0,8,
105,110,102,105,120,95,105,115,0,0,0,0,14,17,16,0,
16,17,0,38,44,9,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,12,5,0,7,97,100,118,97,
110,99,101,0,13,4,5,0,12,5,0,2,105,110,0,0,
31,3,5,1,19,3,4,3,12,3,0,5,110,111,116,105,
110,0,0,0,12,4,0,3,118,97,108,0,10,1,4,3,
15,4,2,0,12,7,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,6,7,0,12,8,0,2,98,112,0,0,
9,7,1,8,31,5,7,1,19,5,6,5,27,3,4,2,
12,4,0,5,105,116,101,109,115,0,0,0,10,1,4,3,
30,4,0,100,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,1,0,0,0,0,0,0,12,17,0,9,
105,110,102,105,120,95,110,111,116,0,0,0,14,17,16,0,
30,7,0,101,100,101,102,32,105,110,102,105,120,95,116,117,
112,108,101,40,116,44,108,101,102,116,41,58,0,0,0,0,
16,17,0,122,44,8,0,0,30,7,0,101,100,101,102,32,
105,110,102,105,120,95,116,117,112,108,101,40,116,44,108,101,
102,116,41,58,0,0,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,11,105,110,102,105,120,95,116,117,112,108,101,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,30,7,0,102,32,32,32,32,114,32,61,32,
101,120,112,114,101,115,115,105,111,110,40,116,46,98,112,41,
0,0,0,0,12,6,0,10,101,120,112,114,101,115,115,105,
20,1,0,0,0,0,0,0,12,18,0,9,105,110,102,105,
120,95,110,111,116,0,0,0,14,18,17,0,16,18,0,54,
44,8,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,12,6,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,5,6,0,12,7,0,2,98,112,0,0,
9,6,1,7,31,4,6,1,19,4,5,4,15,3,4,0,
30,6,0,103,32,32,32,32,105,102,32,108,101,102,116,46,
118,97,108,32,61,61,32,39,44,39,58,0,12,5,0,3,
118,97,108,0,9,4,2,5,12,5,0,1,44,0,0,0,
23,4,4,5,21,4,0,0,18,0,0,29,30,8,0,104,
32,32,32,32,32,32,32,32,108,101,102,116,46,105,116,101,
109,115,46,97,112,112,101,110,100,40,114,41,0,0,0,0,
12,5,0,3,118,97,108,0,9,4,2,5,12,5,0,1,
44,0,0,0,23,4,4,5,21,4,0,0,18,0,0,14,
12,6,0,5,105,116,101,109,115,0,0,0,9,5,2,6,
12,6,0,6,97,112,112,101,110,100,0,0,9,5,5,6,
15,6,3,0,31,4,6,1,19,4,5,4,30,5,0,105,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,
101,102,116,0,20,2,0,0,18,0,0,1,30,6,0,106,
32,32,32,32,116,46,105,116,101,109,115,32,61,32,91,108,
101,102,116,44,114,93,0,0,15,5,2,0,15,6,3,0,
27,4,5,2,12,5,0,5,105,116,101,109,115,0,0,0,
10,1,5,4,30,6,0,107,32,32,32,32,116,46,116,121,
112,101,32,61,32,39,116,117,112,108,101,39,0,0,0,0,
15,6,3,0,31,4,6,1,19,4,5,4,20,2,0,0,
18,0,0,1,15,5,2,0,15,6,3,0,27,4,5,2,
12,5,0,5,105,116,101,109,115,0,0,0,10,1,5,4,
12,4,0,5,116,117,112,108,101,0,0,0,12,5,0,4,
116,121,112,101,0,0,0,0,10,1,5,4,30,4,0,108,
32,32,32,32,114,101,116,117,114,110,32,116,0,0,0,0,
20,1,0,0,0,0,0,0,12,18,0,11,105,110,102,105,
120,95,116,117,112,108,101,0,14,18,17,0,30,3,0,109,
100,101,102,32,108,115,116,40,116,41,58,0,16,18,0,89,
44,8,0,0,30,3,0,109,100,101,102,32,108,115,116,40,
116,41,58,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,3,
108,115,116,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,7,0,110,32,32,32,32,105,102,32,116,32,61,61,32,
78,111,110,101,58,32,114,101,116,117,114,110,32,91,93,0,
28,3,0,0,23,2,1,3,21,2,0,0,18,0,0,4,
27,2,0,0,20,2,0,0,18,0,0,1,30,11,0,111,
32,32,32,32,105,102,32,99,104,101,99,107,40,116,44,39,
44,39,44,39,116,117,112,108,101,39,44,39,115,116,97,116,
101,109,101,110,116,115,39,41,58,0,0,0,12,4,0,5,
99,104,101,99,107,0,0,0,13,3,4,0,15,4,1,0,
12,5,0,1,44,0,0,0,12,6,0,5,116,117,112,108,
101,0,0,0,12,7,0,10,115,116,97,116,101,109,101,110,
116,115,0,0,31,2,4,4,19,2,3,2,21,2,0,0,
18,0,0,19,30,7,0,112,32,32,32,32,32,32,32,32,
114,101,116,117,114,110,32,103,101,116,95,105,116,101,109,115,
40,116,41,0,12,4,0,9,103,101,116,95,105,116,101,109,
115,0,0,0,13,3,4,0,15,4,1,0,31,2,4,1,
19,2,3,2,20,2,0,0,18,0,0,1,30,4,0,113,
32,32,32,32,114,101,116,117,114,110,32,91,116,93,0,0,
15,3,1,0,27,2,3,1,20,2,0,0,0,0,0,0,
12,19,0,3,108,115,116,0,14,19,18,0,30,5,0,114,
100,101,102,32,105,108,115,116,40,116,121,112,44,116,41,58,
0,0,0,0,16,19,0,52,44,11,0,0,30,5,0,114,
100,101,102,32,105,108,115,116,40,116,121,112,44,116,41,58,
0,0,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,4,
105,108,115,116,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,30,10,0,115,
32,32,32,32,114,101,116,117,114,110,32,84,111,107,101,110,
40,116,46,112,111,115,44,116,121,112,44,116,121,112,44,108,
115,116,40,116,41,41,0,0,12,5,0,5,84,111,107,101,
116,121,112,101,0,0,0,0,10,1,5,4,20,1,0,0,
0,0,0,0,12,19,0,11,105,110,102,105,120,95,116,117,
112,108,101,0,14,19,18,0,16,19,0,43,44,8,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,23,2,1,3,
21,2,0,0,18,0,0,4,27,2,0,0,20,2,0,0,
18,0,0,1,12,4,0,5,99,104,101,99,107,0,0,0,
13,3,4,0,15,4,1,0,12,5,0,1,44,0,0,0,
12,6,0,5,116,117,112,108,101,0,0,0,12,7,0,10,
115,116,97,116,101,109,101,110,116,115,0,0,31,2,4,4,
19,2,3,2,21,2,0,0,18,0,0,11,12,4,0,9,
103,101,116,95,105,116,101,109,115,0,0,0,13,3,4,0,
15,4,1,0,31,2,4,1,19,2,3,2,20,2,0,0,
18,0,0,1,15,3,1,0,27,2,3,1,20,2,0,0,
0,0,0,0,12,20,0,3,108,115,116,0,14,20,19,0,
16,20,0,25,44,11,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,12,5,0,5,84,111,107,101,
110,0,0,0,13,4,5,0,12,9,0,3,112,111,115,0,
9,5,2,9,15,6,1,0,15,7,1,0,12,10,0,3,
108,115,116,0,13,9,10,0,15,10,2,0,31,8,10,1,
19,8,9,8,31,3,5,4,19,3,4,3,20,3,0,0,
0,0,0,0,12,20,0,4,105,108,115,116,0,0,0,0,
14,20,19,0,30,6,0,117,100,101,102,32,99,97,108,108,
95,108,101,100,40,116,44,108,101,102,116,41,58,0,0,0,
16,20,0,199,44,11,0,0,30,6,0,117,100,101,102,32,
99,97,108,108,95,108,101,100,40,116,44,108,101,102,116,41,
58,0,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,8,
99,97,108,108,95,108,101,100,0,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
30,10,0,118,32,32,32,32,114,32,61,32,84,111,107,101,
110,40,116,46,112,111,115,44,39,99,97,108,108,39,44,39,
36,39,44,91,108,101,102,116,93,41,0,0,12,6,0,5,
0,0,0,0,12,21,0,4,105,108,115,116,0,0,0,0,
14,21,20,0,16,21,0,116,44,11,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,12,6,0,5,
84,111,107,101,110,0,0,0,13,5,6,0,12,10,0,3,
112,111,115,0,9,6,1,10,12,7,0,4,99,97,108,108,
0,0,0,0,12,8,0,1,36,0,0,0,15,10,2,0,
27,9,10,1,31,4,6,4,19,4,5,4,15,3,4,0,
30,9,0,119,32,32,32,32,119,104,105,108,101,32,110,111,
116,32,99,104,101,99,107,40,80,46,116,111,107,101,110,44,
39,41,39,41,58,0,0,0,12,7,0,5,99,104,101,99,
107,0,0,0,13,6,7,0,12,9,0,1,80,0,0,0,
13,7,9,0,12,9,0,5,116,111,107,101,110,0,0,0,
9,7,7,9,12,8,0,1,41,0,0,0,31,5,7,2,
19,5,6,5,47,4,5,0,21,4,0,0,18,0,0,99,
30,6,0,120,32,32,32,32,32,32,32,32,116,119,101,97,
107,40,39,44,39,44,48,41,0,0,0,0,12,6,0,5,
116,119,101,97,107,0,0,0,13,5,6,0,12,6,0,1,
44,0,0,0,11,7,0,0,0,0,0,0,0,0,0,0,
31,4,6,2,19,4,5,4,30,10,0,121,32,32,32,32,
32,32,32,32,114,46,105,116,101,109,115,46,97,112,112,101,
110,100,40,101,120,112,114,101,115,115,105,111,110,40,48,41,
41,0,0,0,12,6,0,5,105,116,101,109,115,0,0,0,
9,5,3,6,12,6,0,6,97,112,112,101,110,100,0,0,
9,5,5,6,12,8,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,7,8,0,11,8,0,0,0,0,0,0,
0,0,0,0,31,6,8,1,19,6,7,6,31,4,6,1,
19,4,5,4,30,11,0,122,32,32,32,32,32,32,32,32,
105,102,32,80,46,116,111,107,101,110,46,118,97,108,32,61,
61,32,39,44,39,58,32,97,100,118,97,110,99,101,40,39,
44,39,41,0,12,5,0,1,80,0,0,0,13,4,5,0,
12,5,0,5,116,111,107,101,110,0,0,0,9,4,4,5,
12,5,0,3,118,97,108,0,9,4,4,5,12,5,0,1,
44,0,0,0,23,4,4,5,21,4,0,0,18,0,0,10,
12,6,0,7,97,100,118,97,110,99,101,0,13,5,6,0,
12,6,0,1,44,0,0,0,31,4,6,1,19,4,5,4,
18,0,0,1,30,5,0,123,32,32,32,32,32,32,32,32,
114,101,115,116,111,114,101,40,41,0,0,0,12,6,0,7,
114,101,115,116,111,114,101,0,13,5,6,0,31,4,0,0,
19,4,5,4,18,0,255,141,30,5,0,124,32,32,32,32,
97,100,118,97,110,99,101,40,34,41,34,41,0,0,0,0,
12,6,0,7,97,100,118,97,110,99,101,0,13,5,6,0,
12,6,0,1,41,0,0,0,31,4,6,1,19,4,5,4,
30,4,0,125,32,32,32,32,114,101,116,117,114,110,32,114,
0,0,0,0,20,3,0,0,0,0,0,0,12,21,0,8,
99,97,108,108,95,108,101,100,0,0,0,0,14,21,20,0,
30,6,0,126,100,101,102,32,103,101,116,95,108,101,100,40,
116,44,108,101,102,116,41,58,0,0,0,0,16,21,1,149,
44,17,0,0,30,6,0,126,100,101,102,32,103,101,116,95,
108,101,100,40,116,44,108,101,102,116,41,58,0,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,7,103,101,116,95,
108,101,100,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,30,10,0,127,32,32,32,32,
114,32,61,32,84,111,107,101,110,40,116,46,112,111,115,44,
39,103,101,116,39,44,39,46,39,44,91,108,101,102,116,93,
41,0,0,0,12,6,0,5,84,111,107,101,110,0,0,0,
13,5,6,0,12,10,0,3,112,111,115,0,9,6,1,10,
12,7,0,3,103,101,116,0,12,8,0,1,46,0,0,0,
15,10,2,0,27,9,10,1,31,4,6,4,19,4,5,4,
15,3,4,0,30,5,0,128,32,32,32,32,105,116,101,109,
115,32,61,32,32,91,108,101,102,116,93,0,15,6,2,0,
27,5,6,1,15,4,5,0,30,5,0,129,32,32,32,32,
109,111,114,101,32,61,32,70,97,108,115,101,0,0,0,0,
11,6,0,0,0,0,0,0,0,0,0,0,15,5,6,0,
30,9,0,130,32,32,32,32,119,104,105,108,101,32,110,111,
116,32,99,104,101,99,107,40,80,46,116,111,107,101,110,44,
39,93,39,41,58,0,0,0,12,9,0,5,99,104,101,99,
11,4,0,0,0,0,0,0,0,0,0,0,12,7,0,5,
99,104,101,99,107,0,0,0,13,6,7,0,12,9,0,1,
80,0,0,0,13,7,9,0,12,9,0,5,116,111,107,101,
110,0,0,0,9,7,7,9,12,8,0,1,41,0,0,0,
31,5,7,2,19,5,6,5,23,4,4,5,21,4,0,0,
18,0,0,63,12,6,0,5,116,119,101,97,107,0,0,0,
13,5,6,0,12,6,0,1,44,0,0,0,11,7,0,0,
0,0,0,0,0,0,0,0,31,4,6,2,19,4,5,4,
12,6,0,5,105,116,101,109,115,0,0,0,9,5,3,6,
12,6,0,6,97,112,112,101,110,100,0,0,9,5,5,6,
12,8,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
13,7,8,0,11,8,0,0,0,0,0,0,0,0,0,0,
31,6,8,1,19,6,7,6,31,4,6,1,19,4,5,4,
12,5,0,1,80,0,0,0,13,4,5,0,12,5,0,5,
116,111,107,101,110,0,0,0,9,4,4,5,12,5,0,3,
118,97,108,0,9,4,4,5,12,5,0,1,44,0,0,0,
23,4,4,5,21,4,0,0,18,0,0,10,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,1,
44,0,0,0,31,4,6,1,19,4,5,4,18,0,0,1,
12,6,0,7,114,101,115,116,111,114,101,0,13,5,6,0,
31,4,0,0,19,4,5,4,18,0,255,174,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,1,
41,0,0,0,31,4,6,1,19,4,5,4,20,3,0,0,
0,0,0,0,12,22,0,8,99,97,108,108,95,108,101,100,
0,0,0,0,14,22,21,0,16,22,0,229,44,17,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
12,6,0,5,84,111,107,101,110,0,0,0,13,5,6,0,
12,10,0,3,112,111,115,0,9,6,1,10,12,7,0,3,
103,101,116,0,12,8,0,1,46,0,0,0,15,10,2,0,
27,9,10,1,31,4,6,4,19,4,5,4,15,3,4,0,
15,6,2,0,27,5,6,1,15,4,5,0,11,6,0,0,
0,0,0,0,0,0,0,0,15,5,6,0,11,6,0,0,
0,0,0,0,0,0,0,0,12,9,0,5,99,104,101,99,
107,0,0,0,13,8,9,0,12,11,0,1,80,0,0,0,
13,9,11,0,12,11,0,5,116,111,107,101,110,0,0,0,
9,9,9,11,12,10,0,1,93,0,0,0,31,7,9,2,
19,7,8,7,47,6,7,0,21,6,0,0,18,0,0,167,
30,6,0,131,32,32,32,32,32,32,32,32,109,111,114,101,
32,61,32,70,97,108,115,101,0,0,0,0,11,6,0,0,
0,0,0,0,0,0,0,0,15,5,6,0,30,8,0,132,
32,32,32,32,32,32,32,32,105,102,32,99,104,101,99,107,
40,80,46,116,111,107,101,110,44,39,58,39,41,58,0,0,
19,7,8,7,23,6,6,7,21,6,0,0,18,0,0,99,
11,6,0,0,0,0,0,0,0,0,0,0,15,5,6,0,
12,8,0,5,99,104,101,99,107,0,0,0,13,7,8,0,
12,10,0,1,80,0,0,0,13,8,10,0,12,10,0,5,
116,111,107,101,110,0,0,0,9,8,8,10,12,9,0,1,
58,0,0,0,31,6,8,2,19,6,7,6,21,6,0,0,
18,0,0,47,30,16,0,133,32,32,32,32,32,32,32,32,
32,32,32,32,105,116,101,109,115,46,97,112,112,101,110,100,
40,84,111,107,101,110,40,80,46,116,111,107,101,110,46,112,
111,115,44,39,115,121,109,98,111,108,39,44,39,78,111,110,
101,39,41,41,0,0,0,0,12,8,0,6,97,112,112,101,
110,100,0,0,9,7,4,8,12,10,0,5,84,111,107,101,
110,0,0,0,13,9,10,0,12,13,0,1,80,0,0,0,
13,10,13,0,12,13,0,5,116,111,107,101,110,0,0,0,
9,10,10,13,12,13,0,3,112,111,115,0,9,10,10,13,
12,11,0,6,115,121,109,98,111,108,0,0,12,12,0,4,
78,111,110,101,0,0,0,0,31,8,10,3,19,8,9,8,
31,6,8,1,19,6,7,6,18,0,0,29,30,10,0,135,
32,32,32,32,32,32,32,32,32,32,32,32,105,116,101,109,
115,46,97,112,112,101,110,100,40,101,120,112,114,101,115,115,
105,111,110,40,48,41,41,0,12,8,0,6,97,112,112,101,
110,100,0,0,9,7,4,8,12,10,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,9,10,0,11,10,0,0,
0,0,0,0,0,0,0,0,31,8,10,1,19,8,9,8,
31,6,8,1,19,6,7,6,18,0,0,1,30,8,0,136,
32,32,32,32,32,32,32,32,105,102,32,99,104,101,99,107,
40,80,46,116,111,107,101,110,44,39,58,39,41,58,0,0,
12,8,0,5,99,104,101,99,107,0,0,0,13,7,8,0,
12,10,0,1,80,0,0,0,13,8,10,0,12,10,0,5,
116,111,107,101,110,0,0,0,9,8,8,10,12,9,0,1,
58,0,0,0,31,6,8,2,19,6,7,6,21,6,0,0,
18,0,0,29,30,7,0,137,32,32,32,32,32,32,32,32,
32,32,32,32,97,100,118,97,110,99,101,40,39,58,39,41,
0,0,0,0,12,8,0,7,97,100,118,97,110,99,101,0,
13,7,8,0,12,8,0,1,58,0,0,0,31,6,8,1,
19,6,7,6,30,6,0,138,32,32,32,32,32,32,32,32,
32,32,32,32,109,111,114,101,32,61,32,84,114,117,101,0,
11,6,0,0,0,0,0,0,0,0,240,63,15,5,6,0,
18,0,0,1,18,0,255,73,30,4,0,139,32,32,32,32,
105,102,32,109,111,114,101,58,0,0,0,0,21,5,0,0,
18,0,0,46,30,15,0,140,32,32,32,32,32,32,32,32,
105,116,101,109,115,46,97,112,112,101,110,100,40,84,111,107,
101,110,40,80,46,116,111,107,101,110,46,112,111,115,44,39,
115,121,109,98,111,108,39,44,39,78,111,110,101,39,41,41,
0,0,0,0,12,8,0,6,97,112,112,101,110,100,0,0,
18,0,0,30,12,8,0,6,97,112,112,101,110,100,0,0,
9,7,4,8,12,10,0,5,84,111,107,101,110,0,0,0,
13,9,10,0,12,13,0,1,80,0,0,0,13,10,13,0,
12,13,0,5,116,111,107,101,110,0,0,0,9,10,10,13,
1517,322 → 824,159
12,13,0,3,112,111,115,0,9,10,10,13,12,11,0,6,
115,121,109,98,111,108,0,0,12,12,0,4,78,111,110,101,
0,0,0,0,31,8,10,3,19,8,9,8,31,6,8,1,
19,6,7,6,18,0,0,1,30,6,0,141,32,32,32,32,
105,102,32,108,101,110,40,105,116,101,109,115,41,32,62,32,
50,58,0,0,11,6,0,0,0,0,0,0,0,0,0,64,
19,6,7,6,18,0,0,18,12,8,0,6,97,112,112,101,
110,100,0,0,9,7,4,8,12,10,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,9,10,0,11,10,0,0,
0,0,0,0,0,0,0,0,31,8,10,1,19,8,9,8,
31,6,8,1,19,6,7,6,18,0,0,1,12,8,0,5,
99,104,101,99,107,0,0,0,13,7,8,0,12,10,0,1,
80,0,0,0,13,8,10,0,12,10,0,5,116,111,107,101,
110,0,0,0,9,8,8,10,12,9,0,1,58,0,0,0,
31,6,8,2,19,6,7,6,21,6,0,0,18,0,0,14,
12,8,0,7,97,100,118,97,110,99,101,0,13,7,8,0,
12,8,0,1,58,0,0,0,31,6,8,1,19,6,7,6,
11,6,0,0,0,0,0,0,0,0,240,63,15,5,6,0,
18,0,0,1,18,0,255,138,21,5,0,0,18,0,0,30,
12,8,0,6,97,112,112,101,110,100,0,0,9,7,4,8,
12,10,0,5,84,111,107,101,110,0,0,0,13,9,10,0,
12,13,0,1,80,0,0,0,13,10,13,0,12,13,0,5,
116,111,107,101,110,0,0,0,9,10,10,13,12,13,0,3,
112,111,115,0,9,10,10,13,12,11,0,6,115,121,109,98,
111,108,0,0,12,12,0,4,78,111,110,101,0,0,0,0,
31,8,10,3,19,8,9,8,31,6,8,1,19,6,7,6,
18,0,0,1,11,6,0,0,0,0,0,0,0,0,0,64,
12,9,0,3,108,101,110,0,13,8,9,0,15,9,4,0,
31,7,9,1,19,7,8,7,25,6,6,7,21,6,0,0,
18,0,0,41,30,15,0,142,32,32,32,32,32,32,32,32,
105,116,101,109,115,32,61,32,91,108,101,102,116,44,84,111,
107,101,110,40,116,46,112,111,115,44,39,115,108,105,99,101,
39,44,39,58,39,44,105,116,101,109,115,91,49,58,93,41,
93,0,0,0,15,7,2,0,12,10,0,5,84,111,107,101,
18,0,0,25,15,7,2,0,12,10,0,5,84,111,107,101,
110,0,0,0,13,9,10,0,12,14,0,3,112,111,115,0,
9,10,1,14,12,11,0,5,115,108,105,99,101,0,0,0,
12,12,0,1,58,0,0,0,11,15,0,0,0,0,0,0,
0,0,240,63,28,16,0,0,27,14,15,2,9,13,4,14,
31,8,10,4,19,8,9,8,27,6,7,2,15,4,6,0,
18,0,0,1,30,5,0,143,32,32,32,32,114,46,105,116,
101,109,115,32,61,32,105,116,101,109,115,0,12,6,0,5,
105,116,101,109,115,0,0,0,10,3,6,4,30,5,0,144,
32,32,32,32,97,100,118,97,110,99,101,40,34,93,34,41,
0,0,0,0,12,8,0,7,97,100,118,97,110,99,101,0,
18,0,0,1,12,6,0,5,105,116,101,109,115,0,0,0,
10,3,6,4,12,8,0,7,97,100,118,97,110,99,101,0,
13,7,8,0,12,8,0,1,93,0,0,0,31,6,8,1,
19,6,7,6,30,4,0,145,32,32,32,32,114,101,116,117,
114,110,32,114,0,0,0,0,20,3,0,0,0,0,0,0,
12,22,0,7,103,101,116,95,108,101,100,0,14,22,21,0,
30,6,0,146,100,101,102,32,100,111,116,95,108,101,100,40,
116,44,108,101,102,116,41,58,0,0,0,0,16,22,0,77,
44,8,0,0,30,6,0,146,100,101,102,32,100,111,116,95,
108,101,100,40,116,44,108,101,102,116,41,58,0,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,7,100,111,116,95,
108,101,100,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,30,7,0,147,32,32,32,32,
114,32,61,32,101,120,112,114,101,115,115,105,111,110,40,116,
46,98,112,41,0,0,0,0,12,6,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,5,6,0,12,7,0,2,
98,112,0,0,9,6,1,7,31,4,6,1,19,4,5,4,
15,3,4,0,30,6,0,148,32,32,32,32,114,46,116,121,
112,101,32,61,32,39,115,116,114,105,110,103,39,0,0,0,
19,6,7,6,20,3,0,0,0,0,0,0,12,23,0,7,
103,101,116,95,108,101,100,0,14,23,22,0,16,23,0,33,
44,8,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,12,6,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,5,6,0,12,7,0,2,98,112,0,0,
9,6,1,7,31,4,6,1,19,4,5,4,15,3,4,0,
12,4,0,6,115,116,114,105,110,103,0,0,12,5,0,4,
116,121,112,101,0,0,0,0,10,3,5,4,30,6,0,149,
32,32,32,32,116,46,105,116,101,109,115,32,61,32,91,108,
101,102,116,44,114,93,0,0,15,5,2,0,15,6,3,0,
27,4,5,2,12,5,0,5,105,116,101,109,115,0,0,0,
10,1,5,4,30,4,0,150,32,32,32,32,114,101,116,117,
114,110,32,116,0,0,0,0,20,1,0,0,0,0,0,0,
12,23,0,7,100,111,116,95,108,101,100,0,14,23,22,0,
30,4,0,152,100,101,102,32,105,116,115,101,108,102,40,116,
41,58,0,0,16,23,0,26,44,3,0,0,30,4,0,152,
100,101,102,32,105,116,115,101,108,102,40,116,41,58,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,6,105,116,115,101,
108,102,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,4,0,153,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,1,0,0,0,0,0,0,12,24,0,6,
105,116,115,101,108,102,0,0,14,24,23,0,30,5,0,154,
100,101,102,32,112,97,114,101,110,95,110,117,100,40,116,41,
58,0,0,0,16,24,0,88,44,6,0,0,30,5,0,154,
100,101,102,32,112,97,114,101,110,95,110,117,100,40,116,41,
58,0,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,9,
112,97,114,101,110,95,110,117,100,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,5,0,155,32,32,32,32,
116,119,101,97,107,40,39,44,39,44,49,41,0,0,0,0,
12,4,0,5,116,119,101,97,107,0,0,0,13,3,4,0,
12,4,0,1,44,0,0,0,11,5,0,0,0,0,0,0,
0,0,240,63,31,2,4,2,19,2,3,2,30,6,0,156,
32,32,32,32,114,32,61,32,101,120,112,114,101,115,115,105,
111,110,40,48,41,0,0,0,12,5,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,4,5,0,11,5,0,0,
0,0,0,0,0,0,0,0,31,3,5,1,19,3,4,3,
15,2,3,0,30,4,0,157,32,32,32,32,114,101,115,116,
111,114,101,40,41,0,0,0,12,5,0,7,114,101,115,116,
111,114,101,0,13,4,5,0,31,3,0,0,19,3,4,3,
30,5,0,158,32,32,32,32,97,100,118,97,110,99,101,40,
39,41,39,41,0,0,0,0,12,5,0,7,97,100,118,97,
116,121,112,101,0,0,0,0,10,3,5,4,15,5,2,0,
15,6,3,0,27,4,5,2,12,5,0,5,105,116,101,109,
115,0,0,0,10,1,5,4,20,1,0,0,0,0,0,0,
12,24,0,7,100,111,116,95,108,101,100,0,14,24,23,0,
16,24,0,6,44,3,0,0,28,2,0,0,9,1,0,2,
20,1,0,0,0,0,0,0,12,25,0,6,105,116,115,101,
108,102,0,0,14,25,24,0,16,25,0,42,44,6,0,0,
28,2,0,0,9,1,0,2,12,4,0,5,116,119,101,97,
107,0,0,0,13,3,4,0,12,4,0,1,44,0,0,0,
11,5,0,0,0,0,0,0,0,0,240,63,31,2,4,2,
19,2,3,2,12,5,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,4,5,0,11,5,0,0,0,0,0,0,
0,0,0,0,31,3,5,1,19,3,4,3,15,2,3,0,
12,5,0,7,114,101,115,116,111,114,101,0,13,4,5,0,
31,3,0,0,19,3,4,3,12,5,0,7,97,100,118,97,
110,99,101,0,13,4,5,0,12,5,0,1,41,0,0,0,
31,3,5,1,19,3,4,3,30,4,0,159,32,32,32,32,
114,101,116,117,114,110,32,114,0,0,0,0,20,2,0,0,
0,0,0,0,12,25,0,9,112,97,114,101,110,95,110,117,
100,0,0,0,14,25,24,0,30,5,0,160,100,101,102,32,
108,105,115,116,95,110,117,100,40,116,41,58,0,0,0,0,
16,25,1,132,44,10,0,0,30,5,0,160,100,101,102,32,
108,105,115,116,95,110,117,100,40,116,41,58,0,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,8,108,105,115,116,
95,110,117,100,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,5,0,161,32,32,32,32,116,46,116,121,
112,101,32,61,32,39,108,105,115,116,39,0,12,2,0,4,
108,105,115,116,0,0,0,0,12,3,0,4,116,121,112,101,
0,0,0,0,10,1,3,2,30,5,0,162,32,32,32,32,
116,46,118,97,108,32,61,32,39,91,93,39,0,0,0,0,
31,3,5,1,19,3,4,3,20,2,0,0,0,0,0,0,
12,26,0,9,112,97,114,101,110,95,110,117,100,0,0,0,
14,26,25,0,16,26,0,224,44,10,0,0,28,2,0,0,
9,1,0,2,12,2,0,4,108,105,115,116,0,0,0,0,
12,3,0,4,116,121,112,101,0,0,0,0,10,1,3,2,
12,2,0,2,91,93,0,0,12,3,0,3,118,97,108,0,
10,1,3,2,30,5,0,163,32,32,32,32,116,46,105,116,
101,109,115,32,61,32,91,93,0,0,0,0,27,2,0,0,
12,3,0,5,105,116,101,109,115,0,0,0,10,1,3,2,
30,5,0,164,32,32,32,32,110,101,120,116,32,61,32,80,
46,116,111,107,101,110,0,0,12,4,0,1,80,0,0,0,
10,1,3,2,27,2,0,0,12,3,0,5,105,116,101,109,
115,0,0,0,10,1,3,2,12,4,0,1,80,0,0,0,
13,3,4,0,12,4,0,5,116,111,107,101,110,0,0,0,
9,3,3,4,15,2,3,0,30,5,0,165,32,32,32,32,
116,119,101,97,107,40,39,44,39,44,48,41,0,0,0,0,
12,5,0,5,116,119,101,97,107,0,0,0,13,4,5,0,
12,5,0,1,44,0,0,0,11,6,0,0,0,0,0,0,
0,0,0,0,31,3,5,2,19,3,4,3,30,10,0,166,
32,32,32,32,119,104,105,108,101,32,110,111,116,32,99,104,
101,99,107,40,80,46,116,111,107,101,110,44,39,102,111,114,
39,44,39,93,39,41,58,0,12,6,0,5,99,104,101,99,
107,0,0,0,13,5,6,0,12,9,0,1,80,0,0,0,
13,6,9,0,12,9,0,5,116,111,107,101,110,0,0,0,
9,6,6,9,12,7,0,3,102,111,114,0,12,8,0,1,
93,0,0,0,31,4,6,3,19,4,5,4,47,3,4,0,
21,3,0,0,18,0,0,76,30,7,0,167,32,32,32,32,
32,32,32,32,114,32,61,32,101,120,112,114,101,115,115,105,
111,110,40,48,41,0,0,0,12,6,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,5,6,0,11,6,0,0,
0,0,0,0,0,0,0,0,31,4,6,1,19,4,5,4,
15,3,4,0,30,7,0,168,32,32,32,32,32,32,32,32,
116,46,105,116,101,109,115,46,97,112,112,101,110,100,40,114,
41,0,0,0,12,6,0,5,105,116,101,109,115,0,0,0,
9,5,1,6,12,6,0,6,97,112,112,101,110,100,0,0,
9,5,5,6,15,6,3,0,31,4,6,1,19,4,5,4,
30,11,0,169,32,32,32,32,32,32,32,32,105,102,32,80,
46,116,111,107,101,110,46,118,97,108,32,61,61,32,39,44,
39,58,32,97,100,118,97,110,99,101,40,39,44,39,41,0,
12,5,0,1,80,0,0,0,13,4,5,0,12,5,0,5,
116,111,107,101,110,0,0,0,9,4,4,5,12,5,0,3,
118,97,108,0,9,4,4,5,12,5,0,1,44,0,0,0,
23,4,4,5,21,4,0,0,18,0,0,10,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,1,
44,0,0,0,31,4,6,1,19,4,5,4,18,0,0,1,
18,0,255,162,30,8,0,170,32,32,32,32,105,102,32,99,
104,101,99,107,40,80,46,116,111,107,101,110,44,39,102,111,
114,39,41,58,0,0,0,0,12,6,0,5,99,104,101,99,
107,0,0,0,13,5,6,0,12,8,0,1,80,0,0,0,
13,6,8,0,12,8,0,5,116,111,107,101,110,0,0,0,
9,6,6,8,12,7,0,3,102,111,114,0,31,4,6,2,
19,4,5,4,21,4,0,0,18,0,0,138,30,6,0,171,
32,32,32,32,32,32,32,32,116,46,116,121,112,101,32,61,
32,39,99,111,109,112,39,0,12,4,0,4,99,111,109,112,
0,0,0,0,12,5,0,4,116,121,112,101,0,0,0,0,
10,1,5,4,30,6,0,172,32,32,32,32,32,32,32,32,
97,100,118,97,110,99,101,40,39,102,111,114,39,41,0,0,
12,6,0,7,97,100,118,97,110,99,101,0,13,5,6,0,
12,6,0,3,102,111,114,0,31,4,6,1,19,4,5,4,
30,6,0,173,32,32,32,32,32,32,32,32,116,119,101,97,
107,40,39,105,110,39,44,48,41,0,0,0,12,6,0,5,
9,3,3,4,15,2,3,0,12,5,0,5,116,119,101,97,
107,0,0,0,13,4,5,0,12,5,0,1,44,0,0,0,
11,6,0,0,0,0,0,0,0,0,0,0,31,3,5,2,
19,3,4,3,11,3,0,0,0,0,0,0,0,0,0,0,
12,6,0,5,99,104,101,99,107,0,0,0,13,5,6,0,
12,9,0,1,80,0,0,0,13,6,9,0,12,9,0,5,
116,111,107,101,110,0,0,0,9,6,6,9,12,7,0,3,
102,111,114,0,12,8,0,1,93,0,0,0,31,4,6,3,
19,4,5,4,23,3,3,4,21,3,0,0,18,0,0,48,
12,6,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
13,5,6,0,11,6,0,0,0,0,0,0,0,0,0,0,
31,4,6,1,19,4,5,4,15,3,4,0,12,6,0,5,
105,116,101,109,115,0,0,0,9,5,1,6,12,6,0,6,
97,112,112,101,110,100,0,0,9,5,5,6,15,6,3,0,
31,4,6,1,19,4,5,4,12,5,0,1,80,0,0,0,
13,4,5,0,12,5,0,5,116,111,107,101,110,0,0,0,
9,4,4,5,12,5,0,3,118,97,108,0,9,4,4,5,
12,5,0,1,44,0,0,0,23,4,4,5,21,4,0,0,
18,0,0,10,12,6,0,7,97,100,118,97,110,99,101,0,
13,5,6,0,12,6,0,1,44,0,0,0,31,4,6,1,
19,4,5,4,18,0,0,1,18,0,255,187,12,6,0,5,
99,104,101,99,107,0,0,0,13,5,6,0,12,8,0,1,
80,0,0,0,13,6,8,0,12,8,0,5,116,111,107,101,
110,0,0,0,9,6,6,8,12,7,0,3,102,111,114,0,
31,4,6,2,19,4,5,4,21,4,0,0,18,0,0,82,
12,4,0,4,99,111,109,112,0,0,0,0,12,5,0,4,
116,121,112,101,0,0,0,0,10,1,5,4,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,3,
102,111,114,0,31,4,6,1,19,4,5,4,12,6,0,5,
116,119,101,97,107,0,0,0,13,5,6,0,12,6,0,2,
105,110,0,0,11,7,0,0,0,0,0,0,0,0,0,0,
31,4,6,2,19,4,5,4,30,10,0,174,32,32,32,32,
32,32,32,32,116,46,105,116,101,109,115,46,97,112,112,101,
110,100,40,101,120,112,114,101,115,115,105,111,110,40,48,41,
41,0,0,0,12,6,0,5,105,116,101,109,115,0,0,0,
9,5,1,6,12,6,0,6,97,112,112,101,110,100,0,0,
9,5,5,6,12,8,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,7,8,0,11,8,0,0,0,0,0,0,
0,0,0,0,31,6,8,1,19,6,7,6,31,4,6,1,
19,4,5,4,30,6,0,175,32,32,32,32,32,32,32,32,
97,100,118,97,110,99,101,40,39,105,110,39,41,0,0,0,
12,6,0,7,97,100,118,97,110,99,101,0,13,5,6,0,
12,6,0,2,105,110,0,0,31,4,6,1,19,4,5,4,
30,10,0,176,32,32,32,32,32,32,32,32,116,46,105,116,
101,109,115,46,97,112,112,101,110,100,40,101,120,112,114,101,
115,115,105,111,110,40,48,41,41,0,0,0,12,6,0,5,
105,116,101,109,115,0,0,0,9,5,1,6,12,6,0,6,
97,112,112,101,110,100,0,0,9,5,5,6,12,8,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,7,8,0,
11,8,0,0,0,0,0,0,0,0,0,0,31,6,8,1,
19,6,7,6,31,4,6,1,19,4,5,4,30,5,0,177,
32,32,32,32,32,32,32,32,114,101,115,116,111,114,101,40,
41,0,0,0,12,6,0,7,114,101,115,116,111,114,101,0,
13,5,6,0,31,4,0,0,19,4,5,4,18,0,0,1,
30,4,0,178,32,32,32,32,114,101,115,116,111,114,101,40,
41,0,0,0,12,6,0,7,114,101,115,116,111,114,101,0,
13,5,6,0,31,4,0,0,19,4,5,4,30,5,0,179,
32,32,32,32,97,100,118,97,110,99,101,40,39,93,39,41,
0,0,0,0,12,6,0,7,97,100,118,97,110,99,101,0,
13,5,6,0,12,6,0,1,93,0,0,0,31,4,6,1,
19,4,5,4,30,4,0,180,32,32,32,32,114,101,116,117,
114,110,32,116,0,0,0,0,20,1,0,0,0,0,0,0,
12,26,0,8,108,105,115,116,95,110,117,100,0,0,0,0,
14,26,25,0,30,5,0,181,100,101,102,32,100,105,99,116,
95,110,117,100,40,116,41,58,0,0,0,0,16,26,0,204,
44,8,0,0,30,5,0,181,100,101,102,32,100,105,99,116,
95,110,117,100,40,116,41,58,0,0,0,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,8,100,105,99,116,95,110,117,100,
0,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,5,0,182,32,32,32,32,116,46,116,121,112,101,61,39,
100,105,99,116,39,0,0,0,12,2,0,4,100,105,99,116,
31,4,6,2,19,4,5,4,12,6,0,5,105,116,101,109,
115,0,0,0,9,5,1,6,12,6,0,6,97,112,112,101,
110,100,0,0,9,5,5,6,12,8,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,7,8,0,11,8,0,0,
0,0,0,0,0,0,0,0,31,6,8,1,19,6,7,6,
31,4,6,1,19,4,5,4,12,6,0,7,97,100,118,97,
110,99,101,0,13,5,6,0,12,6,0,2,105,110,0,0,
31,4,6,1,19,4,5,4,12,6,0,5,105,116,101,109,
115,0,0,0,9,5,1,6,12,6,0,6,97,112,112,101,
110,100,0,0,9,5,5,6,12,8,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,7,8,0,11,8,0,0,
0,0,0,0,0,0,0,0,31,6,8,1,19,6,7,6,
31,4,6,1,19,4,5,4,12,6,0,7,114,101,115,116,
111,114,101,0,13,5,6,0,31,4,0,0,19,4,5,4,
18,0,0,1,12,6,0,7,114,101,115,116,111,114,101,0,
13,5,6,0,31,4,0,0,19,4,5,4,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,1,
93,0,0,0,31,4,6,1,19,4,5,4,20,1,0,0,
0,0,0,0,12,27,0,8,108,105,115,116,95,110,117,100,
0,0,0,0,14,27,26,0,16,27,0,116,44,8,0,0,
28,2,0,0,9,1,0,2,12,2,0,4,100,105,99,116,
0,0,0,0,12,3,0,4,116,121,112,101,0,0,0,0,
10,1,3,2,30,5,0,183,32,32,32,32,116,46,118,97,
108,32,61,32,39,123,125,39,0,0,0,0,12,2,0,2,
123,125,0,0,12,3,0,3,118,97,108,0,10,1,3,2,
30,5,0,184,32,32,32,32,116,46,105,116,101,109,115,32,
61,32,91,93,0,0,0,0,27,2,0,0,12,3,0,5,
105,116,101,109,115,0,0,0,10,1,3,2,30,5,0,185,
32,32,32,32,116,119,101,97,107,40,39,44,39,44,48,41,
0,0,0,0,12,4,0,5,116,119,101,97,107,0,0,0,
13,3,4,0,12,4,0,1,44,0,0,0,11,5,0,0,
0,0,0,0,0,0,0,0,31,2,4,2,19,2,3,2,
30,9,0,186,32,32,32,32,119,104,105,108,101,32,110,111,
116,32,99,104,101,99,107,40,80,46,116,111,107,101,110,44,
39,125,39,41,58,0,0,0,12,5,0,5,99,104,101,99,
107,0,0,0,13,4,5,0,12,7,0,1,80,0,0,0,
13,5,7,0,12,7,0,5,116,111,107,101,110,0,0,0,
9,5,5,7,12,6,0,1,125,0,0,0,31,3,5,2,
19,3,4,3,47,2,3,0,21,2,0,0,18,0,0,72,
30,10,0,187,32,32,32,32,32,32,32,32,116,46,105,116,
101,109,115,46,97,112,112,101,110,100,40,101,120,112,114,101,
115,115,105,111,110,40,48,41,41,0,0,0,12,4,0,5,
10,1,3,2,12,2,0,2,123,125,0,0,12,3,0,3,
118,97,108,0,10,1,3,2,27,2,0,0,12,3,0,5,
105,116,101,109,115,0,0,0,10,1,3,2,12,4,0,5,
116,119,101,97,107,0,0,0,13,3,4,0,12,4,0,1,
44,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,
31,2,4,2,19,2,3,2,11,2,0,0,0,0,0,0,
0,0,0,0,12,5,0,5,99,104,101,99,107,0,0,0,
13,4,5,0,12,7,0,1,80,0,0,0,13,5,7,0,
12,7,0,5,116,111,107,101,110,0,0,0,9,5,5,7,
12,6,0,1,125,0,0,0,31,3,5,2,19,3,4,3,
23,2,2,3,21,2,0,0,18,0,0,48,12,4,0,5,
105,116,101,109,115,0,0,0,9,3,1,4,12,4,0,6,
97,112,112,101,110,100,0,0,9,3,3,4,12,6,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,5,6,0,
11,6,0,0,0,0,0,0,0,0,0,0,31,4,6,1,
19,4,5,4,31,2,4,1,19,2,3,2,30,12,0,188,
32,32,32,32,32,32,32,32,105,102,32,99,104,101,99,107,
40,80,46,116,111,107,101,110,44,39,58,39,44,39,44,39,
41,58,32,97,100,118,97,110,99,101,40,41,0,0,0,0,
12,4,0,5,99,104,101,99,107,0,0,0,13,3,4,0,
12,7,0,1,80,0,0,0,13,4,7,0,12,7,0,5,
116,111,107,101,110,0,0,0,9,4,4,7,12,5,0,1,
58,0,0,0,12,6,0,1,44,0,0,0,31,2,4,3,
19,2,3,2,21,2,0,0,18,0,0,8,12,4,0,7,
97,100,118,97,110,99,101,0,13,3,4,0,31,2,0,0,
19,2,3,2,18,0,0,1,18,0,255,168,30,4,0,189,
32,32,32,32,114,101,115,116,111,114,101,40,41,0,0,0,
12,4,0,7,114,101,115,116,111,114,101,0,13,3,4,0,
31,2,0,0,19,2,3,2,30,5,0,190,32,32,32,32,
97,100,118,97,110,99,101,40,39,125,39,41,0,0,0,0,
19,4,5,4,31,2,4,1,19,2,3,2,12,4,0,5,
99,104,101,99,107,0,0,0,13,3,4,0,12,7,0,1,
80,0,0,0,13,4,7,0,12,7,0,5,116,111,107,101,
110,0,0,0,9,4,4,7,12,5,0,1,58,0,0,0,
12,6,0,1,44,0,0,0,31,2,4,3,19,2,3,2,
21,2,0,0,18,0,0,8,12,4,0,7,97,100,118,97,
110,99,101,0,13,3,4,0,31,2,0,0,19,2,3,2,
18,0,0,1,18,0,255,189,12,4,0,7,114,101,115,116,
111,114,101,0,13,3,4,0,31,2,0,0,19,2,3,2,
12,4,0,7,97,100,118,97,110,99,101,0,13,3,4,0,
12,4,0,1,125,0,0,0,31,2,4,1,19,2,3,2,
30,4,0,191,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,1,0,0,0,0,0,0,12,27,0,8,
100,105,99,116,95,110,117,100,0,0,0,0,14,27,26,0,
30,6,0,193,100,101,102,32,97,100,118,97,110,99,101,40,
116,61,78,111,110,101,41,58,0,0,0,0,16,27,0,41,
44,5,0,0,30,6,0,193,100,101,102,32,97,100,118,97,
110,99,101,40,116,61,78,111,110,101,41,58,0,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,7,97,100,118,97,
110,99,101,0,34,1,0,0,28,1,0,0,28,2,0,0,
32,1,0,2,30,6,0,194,32,32,32,32,114,101,116,117,
114,110,32,80,46,97,100,118,97,110,99,101,40,116,41,0,
20,1,0,0,0,0,0,0,12,28,0,8,100,105,99,116,
95,110,117,100,0,0,0,0,14,28,27,0,16,28,0,17,
44,5,0,0,28,1,0,0,28,2,0,0,32,1,0,2,
12,4,0,1,80,0,0,0,13,3,4,0,12,4,0,7,
97,100,118,97,110,99,101,0,9,3,3,4,15,4,1,0,
31,2,4,1,19,2,3,2,20,2,0,0,0,0,0,0,
12,28,0,7,97,100,118,97,110,99,101,0,14,28,27,0,
30,5,0,196,100,101,102,32,105,98,108,111,99,107,40,105,
116,101,109,115,41,58,0,0,16,28,0,189,44,8,0,0,
30,5,0,196,100,101,102,32,105,98,108,111,99,107,40,105,
116,101,109,115,41,58,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,6,105,98,108,111,99,107,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,12,0,197,32,32,32,32,
119,104,105,108,101,32,99,104,101,99,107,40,80,46,116,111,
107,101,110,44,39,110,108,39,44,39,59,39,41,58,32,97,
100,118,97,110,99,101,40,41,0,0,0,0,12,4,0,5,
99,104,101,99,107,0,0,0,13,3,4,0,12,7,0,1,
80,0,0,0,13,4,7,0,12,7,0,5,116,111,107,101,
110,0,0,0,9,4,4,7,12,5,0,2,110,108,0,0,
12,6,0,1,59,0,0,0,31,2,4,3,19,2,3,2,
21,2,0,0,18,0,0,8,12,4,0,7,97,100,118,97,
110,99,101,0,13,3,4,0,31,2,0,0,19,2,3,2,
18,0,255,231,30,4,0,198,32,32,32,32,119,104,105,108,
101,32,84,114,117,101,58,0,11,2,0,0,0,0,0,0,
0,0,240,63,21,2,0,0,18,0,0,120,30,9,0,199,
32,32,32,32,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,101,120,112,114,101,115,115,105,111,110,40,
48,41,41,0,12,4,0,6,97,112,112,101,110,100,0,0,
9,3,1,4,12,6,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,5,6,0,11,6,0,0,0,0,0,0,
0,0,0,0,31,4,6,1,19,4,5,4,31,2,4,1,
19,2,3,2,30,6,0,200,32,32,32,32,32,32,32,32,
80,46,116,101,114,109,105,110,97,108,40,41,0,0,0,0,
12,4,0,1,80,0,0,0,13,3,4,0,12,4,0,8,
116,101,114,109,105,110,97,108,0,0,0,0,9,3,3,4,
31,2,0,0,19,2,3,2,30,13,0,201,32,32,32,32,
32,32,32,32,119,104,105,108,101,32,99,104,101,99,107,40,
80,46,116,111,107,101,110,44,39,110,108,39,44,39,59,39,
41,58,32,97,100,118,97,110,99,101,40,41,0,0,0,0,
12,4,0,5,99,104,101,99,107,0,0,0,13,3,4,0,
12,7,0,1,80,0,0,0,13,4,7,0,12,7,0,5,
116,111,107,101,110,0,0,0,9,4,4,7,12,5,0,2,
110,108,0,0,12,6,0,1,59,0,0,0,31,2,4,3,
19,2,3,2,21,2,0,0,18,0,0,8,12,4,0,7,
97,100,118,97,110,99,101,0,13,3,4,0,31,2,0,0,
19,2,3,2,18,0,255,231,30,12,0,202,32,32,32,32,
32,32,32,32,105,102,32,99,104,101,99,107,40,80,46,116,
111,107,101,110,44,39,100,101,100,101,110,116,39,44,39,101,
111,102,39,41,58,32,98,114,101,97,107,0,12,4,0,5,
99,104,101,99,107,0,0,0,13,3,4,0,12,7,0,1,
80,0,0,0,13,4,7,0,12,7,0,5,116,111,107,101,
110,0,0,0,9,4,4,7,12,5,0,6,100,101,100,101,
110,116,0,0,12,6,0,3,101,111,102,0,31,2,4,3,
19,2,3,2,21,2,0,0,18,0,0,3,18,0,0,3,
18,0,0,1,18,0,255,133,0,0,0,0,12,29,0,6,
105,98,108,111,99,107,0,0,14,29,28,0,30,4,0,204,
100,101,102,32,98,108,111,99,107,40,41,58,0,0,0,0,
16,29,1,114,44,10,0,0,30,4,0,204,100,101,102,32,
98,108,111,99,107,40,41,58,0,0,0,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,5,98,108,111,99,107,0,0,0,
34,1,0,0,30,4,0,205,32,32,32,32,105,116,101,109,
115,32,61,32,91,93,0,0,27,2,0,0,15,1,2,0,
30,5,0,206,32,32,32,32,116,111,107,32,61,32,80,46,
116,111,107,101,110,0,0,0,12,4,0,1,80,0,0,0,
13,3,4,0,12,4,0,5,116,111,107,101,110,0,0,0,
9,3,3,4,15,2,3,0,30,7,0,208,32,32,32,32,
105,102,32,99,104,101,99,107,40,80,46,116,111,107,101,110,
44,39,110,108,39,41,58,0,12,5,0,5,99,104,101,99,
107,0,0,0,13,4,5,0,12,7,0,1,80,0,0,0,
13,5,7,0,12,7,0,5,116,111,107,101,110,0,0,0,
9,5,5,7,12,6,0,2,110,108,0,0,31,3,5,2,
19,3,4,3,21,3,0,0,18,0,0,87,30,12,0,209,
32,32,32,32,32,32,32,32,119,104,105,108,101,32,99,104,
101,99,107,40,80,46,116,111,107,101,110,44,39,110,108,39,
41,58,32,97,100,118,97,110,99,101,40,41,0,0,0,0,
12,29,0,7,97,100,118,97,110,99,101,0,14,29,28,0,
16,29,1,2,44,10,0,0,27,2,0,0,15,1,2,0,
12,4,0,1,80,0,0,0,13,3,4,0,12,4,0,5,
116,111,107,101,110,0,0,0,9,3,3,4,15,2,3,0,
12,5,0,5,99,104,101,99,107,0,0,0,13,4,5,0,
12,7,0,1,80,0,0,0,13,5,7,0,12,7,0,5,
116,111,107,101,110,0,0,0,9,5,5,7,12,6,0,2,
1839,345 → 983,204
110,108,0,0,31,3,5,2,19,3,4,3,21,3,0,0,
18,0,0,8,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,31,3,0,0,19,3,4,3,18,0,255,233,
30,7,0,210,32,32,32,32,32,32,32,32,97,100,118,97,
110,99,101,40,39,105,110,100,101,110,116,39,41,0,0,0,
12,5,0,5,99,104,101,99,107,0,0,0,13,4,5,0,
12,7,0,1,80,0,0,0,13,5,7,0,12,7,0,5,
116,111,107,101,110,0,0,0,9,5,5,7,12,6,0,6,
105,110,100,101,110,116,0,0,31,3,5,2,19,3,4,3,
21,3,0,0,18,0,0,85,12,5,0,7,97,100,118,97,
110,99,101,0,13,4,5,0,12,5,0,6,105,110,100,101,
110,116,0,0,31,3,5,1,19,3,4,3,11,3,0,0,
0,0,0,0,0,0,0,0,12,6,0,5,99,104,101,99,
107,0,0,0,13,5,6,0,12,8,0,1,80,0,0,0,
13,6,8,0,12,8,0,5,116,111,107,101,110,0,0,0,
9,6,6,8,12,7,0,6,100,101,100,101,110,116,0,0,
31,4,6,2,19,4,5,4,23,3,3,4,21,3,0,0,
18,0,0,44,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,1,5,12,7,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,6,7,0,11,7,0,0,0,0,0,0,
0,0,0,0,31,5,7,1,19,5,6,5,31,3,5,1,
19,3,4,3,12,5,0,5,99,104,101,99,107,0,0,0,
13,4,5,0,12,8,0,1,80,0,0,0,13,5,8,0,
12,8,0,5,116,111,107,101,110,0,0,0,9,5,5,8,
12,6,0,1,59,0,0,0,12,7,0,2,110,108,0,0,
31,3,5,3,19,3,4,3,21,3,0,0,18,0,0,8,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
12,5,0,6,105,110,100,101,110,116,0,0,31,3,5,1,
19,3,4,3,30,6,0,211,32,32,32,32,32,32,32,32,
105,98,108,111,99,107,40,105,116,101,109,115,41,0,0,0,
12,5,0,6,105,98,108,111,99,107,0,0,13,4,5,0,
15,5,1,0,31,3,5,1,19,3,4,3,30,7,0,212,
32,32,32,32,32,32,32,32,97,100,118,97,110,99,101,40,
39,100,101,100,101,110,116,39,41,0,0,0,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,6,
100,101,100,101,110,116,0,0,31,3,5,1,19,3,4,3,
18,0,0,120,30,3,0,213,32,32,32,32,101,108,115,101,
58,0,0,0,30,9,0,214,32,32,32,32,32,32,32,32,
105,116,101,109,115,46,97,112,112,101,110,100,40,101,120,112,
114,101,115,115,105,111,110,40,48,41,41,0,12,5,0,6,
31,3,0,0,19,3,4,3,18,0,255,231,18,0,255,192,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
12,5,0,6,100,101,100,101,110,116,0,0,31,3,5,1,
19,3,4,3,18,0,0,60,12,5,0,6,97,112,112,101,
110,100,0,0,9,4,1,5,12,7,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,6,7,0,11,7,0,0,
0,0,0,0,0,0,0,0,31,5,7,1,19,5,6,5,
31,3,5,1,19,3,4,3,12,5,0,5,99,104,101,99,
107,0,0,0,13,4,5,0,12,7,0,1,80,0,0,0,
13,5,7,0,12,7,0,5,116,111,107,101,110,0,0,0,
9,5,5,7,12,6,0,1,59,0,0,0,31,3,5,2,
19,3,4,3,21,3,0,0,18,0,0,26,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,1,
59,0,0,0,31,3,5,1,19,3,4,3,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,1,5,12,7,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,6,7,0,
11,7,0,0,0,0,0,0,0,0,0,0,31,5,7,1,
19,5,6,5,31,3,5,1,19,3,4,3,30,9,0,215,
32,32,32,32,32,32,32,32,119,104,105,108,101,32,99,104,
101,99,107,40,80,46,116,111,107,101,110,44,39,59,39,41,
58,0,0,0,12,5,0,5,99,104,101,99,107,0,0,0,
19,5,6,5,31,3,5,1,19,3,4,3,18,0,255,215,
18,0,0,1,12,5,0,5,99,104,101,99,107,0,0,0,
13,4,5,0,12,7,0,1,80,0,0,0,13,5,7,0,
12,7,0,5,116,111,107,101,110,0,0,0,9,5,5,7,
12,6,0,1,59,0,0,0,31,3,5,2,19,3,4,3,
21,3,0,0,18,0,0,45,30,7,0,216,32,32,32,32,
32,32,32,32,32,32,32,32,97,100,118,97,110,99,101,40,
39,59,39,41,0,0,0,0,12,5,0,7,97,100,118,97,
110,99,101,0,13,4,5,0,12,5,0,1,59,0,0,0,
31,3,5,1,19,3,4,3,30,10,0,217,32,32,32,32,
32,32,32,32,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,101,120,112,114,101,115,115,105,111,110,40,
48,41,41,0,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,1,5,12,7,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,6,7,0,11,7,0,0,0,0,0,0,
0,0,0,0,31,5,7,1,19,5,6,5,31,3,5,1,
19,3,4,3,18,0,255,196,30,6,0,218,32,32,32,32,
32,32,32,32,80,46,116,101,114,109,105,110,97,108,40,41,
0,0,0,0,12,5,0,1,80,0,0,0,13,4,5,0,
12,5,0,8,116,101,114,109,105,110,97,108,0,0,0,0,
9,4,4,5,31,3,0,0,19,3,4,3,18,0,0,1,
30,11,0,219,32,32,32,32,119,104,105,108,101,32,99,104,
101,99,107,40,80,46,116,111,107,101,110,44,39,110,108,39,
41,58,32,97,100,118,97,110,99,101,40,41,0,0,0,0,
12,5,0,5,99,104,101,99,107,0,0,0,13,4,5,0,
12,7,0,1,80,0,0,0,13,5,7,0,12,7,0,5,
116,111,107,101,110,0,0,0,9,5,5,7,12,6,0,2,
110,108,0,0,31,3,5,2,19,3,4,3,21,3,0,0,
18,0,0,8,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,31,3,0,0,19,3,4,3,18,0,255,233,
30,6,0,221,32,32,32,32,105,102,32,108,101,110,40,105,
116,101,109,115,41,32,62,32,49,58,0,0,11,3,0,0,
0,0,0,0,0,0,240,63,12,6,0,3,108,101,110,0,
13,5,6,0,15,6,1,0,31,4,6,1,19,4,5,4,
25,3,3,4,21,3,0,0,18,0,0,34,30,14,0,222,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,84,
111,107,101,110,40,116,111,107,46,112,111,115,44,39,115,116,
97,116,101,109,101,110,116,115,39,44,39,59,39,44,105,116,
101,109,115,41,0,0,0,0,12,5,0,5,84,111,107,101,
110,0,0,0,13,4,5,0,12,9,0,3,112,111,115,0,
9,5,2,9,12,6,0,10,115,116,97,116,101,109,101,110,
116,115,0,0,12,7,0,1,59,0,0,0,15,8,1,0,
31,3,5,4,19,3,4,3,20,3,0,0,18,0,0,1,
30,6,0,223,32,32,32,32,114,101,116,117,114,110,32,105,
116,101,109,115,46,112,111,112,40,41,0,0,12,5,0,3,
12,6,0,2,110,108,0,0,31,3,5,2,19,3,4,3,
21,3,0,0,18,0,0,8,12,5,0,7,97,100,118,97,
110,99,101,0,13,4,5,0,31,3,0,0,19,3,4,3,
18,0,255,233,11,3,0,0,0,0,0,0,0,0,240,63,
12,6,0,3,108,101,110,0,13,5,6,0,15,6,1,0,
31,4,6,1,19,4,5,4,25,3,3,4,21,3,0,0,
18,0,0,19,12,5,0,5,84,111,107,101,110,0,0,0,
13,4,5,0,12,9,0,3,112,111,115,0,9,5,2,9,
12,6,0,10,115,116,97,116,101,109,101,110,116,115,0,0,
12,7,0,1,59,0,0,0,15,8,1,0,31,3,5,4,
19,3,4,3,20,3,0,0,18,0,0,1,12,5,0,3,
112,111,112,0,9,4,1,5,31,3,0,0,19,3,4,3,
20,3,0,0,0,0,0,0,12,30,0,5,98,108,111,99,
107,0,0,0,14,30,29,0,30,4,0,225,100,101,102,32,
100,101,102,95,110,117,100,40,116,41,58,0,16,30,1,44,
44,11,0,0,30,4,0,225,100,101,102,32,100,101,102,95,
110,117,100,40,116,41,58,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,7,100,101,102,95,110,117,100,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,7,0,226,32,32,32,32,
105,116,101,109,115,32,61,32,116,46,105,116,101,109,115,32,
61,32,91,93,0,0,0,0,27,3,0,0,12,4,0,5,
107,0,0,0,14,30,29,0,16,30,0,175,44,11,0,0,
28,2,0,0,9,1,0,2,27,3,0,0,12,4,0,5,
105,116,101,109,115,0,0,0,10,1,4,3,15,2,3,0,
30,10,0,227,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,80,46,116,111,107,101,110,41,59,32,97,
100,118,97,110,99,101,40,41,0,0,0,0,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,6,0,1,
80,0,0,0,13,5,6,0,12,6,0,5,116,111,107,101,
110,0,0,0,9,5,5,6,31,3,5,1,19,3,4,3,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
31,3,0,0,19,3,4,3,30,5,0,228,32,32,32,32,
97,100,118,97,110,99,101,40,39,40,39,41,0,0,0,0,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
12,5,0,1,40,0,0,0,31,3,5,1,19,3,4,3,
30,10,0,229,32,32,32,32,114,32,61,32,84,111,107,101,
110,40,116,46,112,111,115,44,39,115,121,109,98,111,108,39,
44,39,40,41,58,39,44,91,93,41,0,0,12,6,0,5,
12,5,0,6,97,112,112,101,110,100,0,0,9,4,2,5,
12,6,0,1,80,0,0,0,13,5,6,0,12,6,0,5,
116,111,107,101,110,0,0,0,9,5,5,6,31,3,5,1,
19,3,4,3,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,31,3,0,0,19,3,4,3,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,1,
40,0,0,0,31,3,5,1,19,3,4,3,12,6,0,5,
84,111,107,101,110,0,0,0,13,5,6,0,12,10,0,3,
112,111,115,0,9,6,1,10,12,7,0,6,115,121,109,98,
111,108,0,0,12,8,0,3,40,41,58,0,27,9,0,0,
31,4,6,4,19,4,5,4,15,3,4,0,30,5,0,230,
32,32,32,32,105,116,101,109,115,46,97,112,112,101,110,100,
40,114,41,0,12,6,0,6,97,112,112,101,110,100,0,0,
9,5,2,6,15,6,3,0,31,4,6,1,19,4,5,4,
30,9,0,231,32,32,32,32,119,104,105,108,101,32,110,111,
116,32,99,104,101,99,107,40,80,46,116,111,107,101,110,44,
39,41,39,41,58,0,0,0,12,7,0,5,99,104,101,99,
107,0,0,0,13,6,7,0,12,9,0,1,80,0,0,0,
13,7,9,0,12,9,0,5,116,111,107,101,110,0,0,0,
9,7,7,9,12,8,0,1,41,0,0,0,31,5,7,2,
19,5,6,5,47,4,5,0,21,4,0,0,18,0,0,101,
30,6,0,232,32,32,32,32,32,32,32,32,116,119,101,97,
107,40,39,44,39,44,48,41,0,0,0,0,12,6,0,5,
31,4,6,4,19,4,5,4,15,3,4,0,12,6,0,6,
97,112,112,101,110,100,0,0,9,5,2,6,15,6,3,0,
31,4,6,1,19,4,5,4,11,4,0,0,0,0,0,0,
0,0,0,0,12,7,0,5,99,104,101,99,107,0,0,0,
13,6,7,0,12,9,0,1,80,0,0,0,13,7,9,0,
12,9,0,5,116,111,107,101,110,0,0,0,9,7,7,9,
12,8,0,1,41,0,0,0,31,5,7,2,19,5,6,5,
23,4,4,5,21,4,0,0,18,0,0,65,12,6,0,5,
116,119,101,97,107,0,0,0,13,5,6,0,12,6,0,1,
44,0,0,0,11,7,0,0,0,0,0,0,0,0,0,0,
31,4,6,2,19,4,5,4,30,10,0,233,32,32,32,32,
32,32,32,32,114,46,105,116,101,109,115,46,97,112,112,101,
110,100,40,101,120,112,114,101,115,115,105,111,110,40,48,41,
41,0,0,0,12,6,0,5,105,116,101,109,115,0,0,0,
9,5,3,6,12,6,0,6,97,112,112,101,110,100,0,0,
9,5,5,6,12,8,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,7,8,0,11,8,0,0,0,0,0,0,
0,0,0,0,31,6,8,1,19,6,7,6,31,4,6,1,
19,4,5,4,30,11,0,234,32,32,32,32,32,32,32,32,
105,102,32,99,104,101,99,107,40,80,46,116,111,107,101,110,
44,39,44,39,41,58,32,97,100,118,97,110,99,101,40,39,
44,39,41,0,12,6,0,5,99,104,101,99,107,0,0,0,
13,5,6,0,12,8,0,1,80,0,0,0,13,6,8,0,
12,8,0,5,116,111,107,101,110,0,0,0,9,6,6,8,
12,7,0,1,44,0,0,0,31,4,6,2,19,4,5,4,
21,4,0,0,18,0,0,10,12,6,0,7,97,100,118,97,
110,99,101,0,13,5,6,0,12,6,0,1,44,0,0,0,
31,4,6,1,19,4,5,4,18,0,0,1,30,5,0,235,
32,32,32,32,32,32,32,32,114,101,115,116,111,114,101,40,
41,0,0,0,12,6,0,7,114,101,115,116,111,114,101,0,
13,5,6,0,31,4,0,0,19,4,5,4,18,0,255,139,
30,5,0,236,32,32,32,32,97,100,118,97,110,99,101,40,
39,41,39,41,0,0,0,0,12,6,0,7,97,100,118,97,
110,99,101,0,13,5,6,0,12,6,0,1,41,0,0,0,
31,4,6,1,19,4,5,4,30,5,0,237,32,32,32,32,
97,100,118,97,110,99,101,40,39,58,39,41,0,0,0,0,
12,6,0,7,97,100,118,97,110,99,101,0,13,5,6,0,
12,6,0,1,58,0,0,0,31,4,6,1,19,4,5,4,
30,7,0,238,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,98,108,111,99,107,40,41,41,0,0,0,
12,6,0,6,97,112,112,101,110,100,0,0,9,5,2,6,
12,8,0,5,98,108,111,99,107,0,0,0,13,7,8,0,
31,6,0,0,19,6,7,6,31,4,6,1,19,4,5,4,
30,4,0,239,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,1,0,0,0,0,0,0,12,31,0,7,
100,101,102,95,110,117,100,0,14,31,30,0,30,5,0,242,
100,101,102,32,119,104,105,108,101,95,110,117,100,40,116,41,
58,0,0,0,16,31,0,101,44,8,0,0,30,5,0,242,
100,101,102,32,119,104,105,108,101,95,110,117,100,40,116,41,
58,0,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,9,
119,104,105,108,101,95,110,117,100,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,7,0,243,32,32,32,32,
105,116,101,109,115,32,61,32,116,46,105,116,101,109,115,32,
61,32,91,93,0,0,0,0,27,3,0,0,12,4,0,5,
105,116,101,109,115,0,0,0,10,1,4,3,15,2,3,0,
30,8,0,244,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,101,120,112,114,101,115,115,105,111,110,40,
48,41,41,0,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,2,5,12,7,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,6,7,0,11,7,0,0,0,0,0,0,
0,0,0,0,31,5,7,1,19,5,6,5,31,3,5,1,
19,3,4,3,30,5,0,245,32,32,32,32,97,100,118,97,
110,99,101,40,39,58,39,41,0,0,0,0,12,5,0,7,
31,4,6,2,19,4,5,4,12,6,0,5,105,116,101,109,
115,0,0,0,9,5,3,6,12,6,0,6,97,112,112,101,
110,100,0,0,9,5,5,6,12,8,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,7,8,0,11,8,0,0,
0,0,0,0,0,0,0,0,31,6,8,1,19,6,7,6,
31,4,6,1,19,4,5,4,12,6,0,5,99,104,101,99,
107,0,0,0,13,5,6,0,12,8,0,1,80,0,0,0,
13,6,8,0,12,8,0,5,116,111,107,101,110,0,0,0,
9,6,6,8,12,7,0,1,44,0,0,0,31,4,6,2,
19,4,5,4,21,4,0,0,18,0,0,10,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,1,
44,0,0,0,31,4,6,1,19,4,5,4,18,0,0,1,
12,6,0,7,114,101,115,116,111,114,101,0,13,5,6,0,
31,4,0,0,19,4,5,4,18,0,255,172,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,1,
41,0,0,0,31,4,6,1,19,4,5,4,12,6,0,7,
97,100,118,97,110,99,101,0,13,5,6,0,12,6,0,1,
58,0,0,0,31,4,6,1,19,4,5,4,12,6,0,6,
97,112,112,101,110,100,0,0,9,5,2,6,12,8,0,5,
98,108,111,99,107,0,0,0,13,7,8,0,31,6,0,0,
19,6,7,6,31,4,6,1,19,4,5,4,20,1,0,0,
0,0,0,0,12,31,0,7,100,101,102,95,110,117,100,0,
14,31,30,0,16,31,0,48,44,8,0,0,28,2,0,0,
9,1,0,2,27,3,0,0,12,4,0,5,105,116,101,109,
115,0,0,0,10,1,4,3,15,2,3,0,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,7,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,6,7,0,
11,7,0,0,0,0,0,0,0,0,0,0,31,5,7,1,
19,5,6,5,31,3,5,1,19,3,4,3,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,1,
58,0,0,0,31,3,5,1,19,3,4,3,30,7,0,246,
32,32,32,32,105,116,101,109,115,46,97,112,112,101,110,100,
40,98,108,111,99,107,40,41,41,0,0,0,12,5,0,6,
58,0,0,0,31,3,5,1,19,3,4,3,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,7,0,5,
98,108,111,99,107,0,0,0,13,6,7,0,31,5,0,0,
19,5,6,5,31,3,5,1,19,3,4,3,30,4,0,247,
32,32,32,32,114,101,116,117,114,110,32,116,0,0,0,0,
20,1,0,0,0,0,0,0,12,32,0,9,119,104,105,108,
101,95,110,117,100,0,0,0,14,32,31,0,30,5,0,248,
100,101,102,32,99,108,97,115,115,95,110,117,100,40,116,41,
58,0,0,0,16,32,0,114,44,11,0,0,30,5,0,248,
100,101,102,32,99,108,97,115,115,95,110,117,100,40,116,41,
58,0,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,9,
99,108,97,115,115,95,110,117,100,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,7,0,249,32,32,32,32,
105,116,101,109,115,32,61,32,116,46,105,116,101,109,115,32,
61,32,91,93,0,0,0,0,27,3,0,0,12,4,0,5,
19,5,6,5,31,3,5,1,19,3,4,3,20,1,0,0,
0,0,0,0,12,32,0,9,119,104,105,108,101,95,110,117,
100,0,0,0,14,32,31,0,16,32,0,57,44,11,0,0,
28,2,0,0,9,1,0,2,27,3,0,0,12,4,0,5,
105,116,101,109,115,0,0,0,10,1,4,3,15,2,3,0,
30,8,0,250,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,101,120,112,114,101,115,115,105,111,110,40,
48,41,41,0,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,2,5,12,7,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,6,7,0,11,7,0,0,0,0,0,0,
0,0,0,0,31,5,7,1,19,5,6,5,31,3,5,1,
19,3,4,3,30,5,0,251,32,32,32,32,97,100,118,97,
110,99,101,40,39,58,39,41,0,0,0,0,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,1,
58,0,0,0,31,3,5,1,19,3,4,3,30,11,0,252,
32,32,32,32,105,116,101,109,115,46,97,112,112,101,110,100,
40,105,108,115,116,40,39,109,101,116,104,111,100,115,39,44,
98,108,111,99,107,40,41,41,41,0,0,0,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,7,0,4,
105,108,115,116,0,0,0,0,13,6,7,0,12,7,0,7,
109,101,116,104,111,100,115,0,12,10,0,5,98,108,111,99,
107,0,0,0,13,9,10,0,31,8,0,0,19,8,9,8,
31,5,7,2,19,5,6,5,31,3,5,1,19,3,4,3,
30,4,0,253,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,1,0,0,0,0,0,0,12,33,0,9,
12,5,0,6,97,112,112,101,110,100,0,0,9,4,2,5,
12,7,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
13,6,7,0,11,7,0,0,0,0,0,0,0,0,0,0,
31,5,7,1,19,5,6,5,31,3,5,1,19,3,4,3,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
12,5,0,1,58,0,0,0,31,3,5,1,19,3,4,3,
12,5,0,6,97,112,112,101,110,100,0,0,9,4,2,5,
12,7,0,4,105,108,115,116,0,0,0,0,13,6,7,0,
12,7,0,7,109,101,116,104,111,100,115,0,12,10,0,5,
98,108,111,99,107,0,0,0,13,9,10,0,31,8,0,0,
19,8,9,8,31,5,7,2,19,5,6,5,31,3,5,1,
19,3,4,3,20,1,0,0,0,0,0,0,12,33,0,9,
99,108,97,115,115,95,110,117,100,0,0,0,14,33,32,0,
30,5,0,255,100,101,102,32,102,114,111,109,95,110,117,100,
40,116,41,58,0,0,0,0,16,33,0,108,44,8,0,0,
30,5,0,255,100,101,102,32,102,114,111,109,95,110,117,100,
40,116,41,58,0,0,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,8,102,114,111,109,95,110,117,100,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,7,1,0,
32,32,32,32,105,116,101,109,115,32,61,32,116,46,105,116,
101,109,115,32,61,32,91,93,0,0,0,0,27,3,0,0,
12,4,0,5,105,116,101,109,115,0,0,0,10,1,4,3,
15,2,3,0,30,8,1,1,32,32,32,32,105,116,101,109,
115,46,97,112,112,101,110,100,40,101,120,112,114,101,115,115,
105,111,110,40,48,41,41,0,12,5,0,6,97,112,112,101,
16,33,0,53,44,8,0,0,28,2,0,0,9,1,0,2,
27,3,0,0,12,4,0,5,105,116,101,109,115,0,0,0,
10,1,4,3,15,2,3,0,12,5,0,6,97,112,112,101,
110,100,0,0,9,4,2,5,12,7,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,6,7,0,11,7,0,0,
0,0,0,0,0,0,0,0,31,5,7,1,19,5,6,5,
31,3,5,1,19,3,4,3,30,6,1,2,32,32,32,32,
97,100,118,97,110,99,101,40,39,105,109,112,111,114,116,39,
41,0,0,0,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,12,5,0,6,105,109,112,111,114,116,0,0,
31,3,5,1,19,3,4,3,30,8,1,3,32,32,32,32,
105,116,101,109,115,46,97,112,112,101,110,100,40,101,120,112,
114,101,115,115,105,111,110,40,48,41,41,0,12,5,0,6,
31,3,5,1,19,3,4,3,12,5,0,7,97,100,118,97,
110,99,101,0,13,4,5,0,12,5,0,6,105,109,112,111,
114,116,0,0,31,3,5,1,19,3,4,3,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,7,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,6,7,0,
11,7,0,0,0,0,0,0,0,0,0,0,31,5,7,1,
19,5,6,5,31,3,5,1,19,3,4,3,30,4,1,4,
32,32,32,32,114,101,116,117,114,110,32,116,0,0,0,0,
20,1,0,0,0,0,0,0,12,34,0,8,102,114,111,109,
95,110,117,100,0,0,0,0,14,34,33,0,30,4,1,6,
100,101,102,32,102,111,114,95,110,117,100,40,116,41,58,0,
16,34,0,166,44,8,0,0,30,4,1,6,100,101,102,32,
102,111,114,95,110,117,100,40,116,41,58,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,7,102,111,114,95,110,117,100,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,7,1,7,
32,32,32,32,105,116,101,109,115,32,61,32,116,46,105,116,
101,109,115,32,61,32,91,93,0,0,0,0,27,3,0,0,
12,4,0,5,105,116,101,109,115,0,0,0,10,1,4,3,
15,2,3,0,30,5,1,8,32,32,32,32,116,119,101,97,
107,40,39,105,110,39,44,48,41,0,0,0,12,5,0,5,
116,119,101,97,107,0,0,0,13,4,5,0,12,5,0,2,
105,110,0,0,11,6,0,0,0,0,0,0,0,0,0,0,
31,3,5,2,19,3,4,3,30,8,1,9,32,32,32,32,
105,116,101,109,115,46,97,112,112,101,110,100,40,101,120,112,
114,101,115,115,105,111,110,40,48,41,41,0,12,5,0,6,
19,5,6,5,31,3,5,1,19,3,4,3,20,1,0,0,
0,0,0,0,12,34,0,8,102,114,111,109,95,110,117,100,
0,0,0,0,14,34,33,0,16,34,0,89,44,8,0,0,
28,2,0,0,9,1,0,2,27,3,0,0,12,4,0,5,
105,116,101,109,115,0,0,0,10,1,4,3,15,2,3,0,
12,5,0,5,116,119,101,97,107,0,0,0,13,4,5,0,
12,5,0,2,105,110,0,0,11,6,0,0,0,0,0,0,
0,0,0,0,31,3,5,2,19,3,4,3,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,7,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,6,7,0,
11,7,0,0,0,0,0,0,0,0,0,0,31,5,7,1,
19,5,6,5,31,3,5,1,19,3,4,3,30,5,1,10,
32,32,32,32,97,100,118,97,110,99,101,40,39,105,110,39,
41,0,0,0,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,12,5,0,2,105,110,0,0,31,3,5,1,
19,3,4,3,30,8,1,11,32,32,32,32,105,116,101,109,
115,46,97,112,112,101,110,100,40,101,120,112,114,101,115,115,
105,111,110,40,48,41,41,0,12,5,0,6,97,112,112,101,
110,100,0,0,9,4,2,5,12,7,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,6,7,0,11,7,0,0,
0,0,0,0,0,0,0,0,31,5,7,1,19,5,6,5,
31,3,5,1,19,3,4,3,30,4,1,12,32,32,32,32,
114,101,115,116,111,114,101,40,41,0,0,0,12,5,0,7,
19,5,6,5,31,3,5,1,19,3,4,3,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,2,
105,110,0,0,31,3,5,1,19,3,4,3,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,7,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,6,7,0,
11,7,0,0,0,0,0,0,0,0,0,0,31,5,7,1,
19,5,6,5,31,3,5,1,19,3,4,3,12,5,0,7,
114,101,115,116,111,114,101,0,13,4,5,0,31,3,0,0,
19,3,4,3,30,5,1,13,32,32,32,32,97,100,118,97,
110,99,101,40,39,58,39,41,0,0,0,0,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,1,
58,0,0,0,31,3,5,1,19,3,4,3,30,7,1,14,
32,32,32,32,105,116,101,109,115,46,97,112,112,101,110,100,
40,98,108,111,99,107,40,41,41,0,0,0,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,2,5,12,7,0,5,
98,108,111,99,107,0,0,0,13,6,7,0,31,5,0,0,
19,5,6,5,31,3,5,1,19,3,4,3,30,4,1,15,
32,32,32,32,114,101,116,117,114,110,32,116,0,0,0,0,
20,1,0,0,0,0,0,0,12,35,0,7,102,111,114,95,
110,117,100,0,14,35,34,0,30,4,1,16,100,101,102,32,
105,102,95,110,117,100,40,116,41,58,0,0,16,35,1,138,
44,16,0,0,30,4,1,16,100,101,102,32,105,102,95,110,
117,100,40,116,41,58,0,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,6,105,102,95,110,117,100,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,7,1,17,32,32,32,32,
105,116,101,109,115,32,61,32,116,46,105,116,101,109,115,32,
61,32,91,93,0,0,0,0,27,3,0,0,12,4,0,5,
105,116,101,109,115,0,0,0,10,1,4,3,15,2,3,0,
30,6,1,18,32,32,32,32,97,32,61,32,101,120,112,114,
101,115,115,105,111,110,40,48,41,0,0,0,12,6,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,5,6,0,
11,6,0,0,0,0,0,0,0,0,0,0,31,4,6,1,
19,4,5,4,15,3,4,0,30,5,1,19,32,32,32,32,
97,100,118,97,110,99,101,40,39,58,39,41,0,0,0,0,
19,3,4,3,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,12,5,0,1,58,0,0,0,31,3,5,1,
19,3,4,3,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,2,5,12,7,0,5,98,108,111,99,107,0,0,0,
13,6,7,0,31,5,0,0,19,5,6,5,31,3,5,1,
19,3,4,3,20,1,0,0,0,0,0,0,12,35,0,7,
102,111,114,95,110,117,100,0,14,35,34,0,16,35,0,222,
44,16,0,0,28,2,0,0,9,1,0,2,27,3,0,0,
12,4,0,5,105,116,101,109,115,0,0,0,10,1,4,3,
15,2,3,0,12,6,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,5,6,0,11,6,0,0,0,0,0,0,
0,0,0,0,31,4,6,1,19,4,5,4,15,3,4,0,
12,6,0,7,97,100,118,97,110,99,101,0,13,5,6,0,
12,6,0,1,58,0,0,0,31,4,6,1,19,4,5,4,
30,4,1,20,32,32,32,32,98,32,61,32,98,108,111,99,
107,40,41,0,12,7,0,5,98,108,111,99,107,0,0,0,
13,6,7,0,31,5,0,0,19,5,6,5,15,4,5,0,
30,13,1,21,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,84,111,107,101,110,40,116,46,112,111,115,
44,39,101,108,105,102,39,44,39,101,108,105,102,39,44,91,
97,44,98,93,41,41,0,0,12,7,0,6,97,112,112,101,
110,100,0,0,9,6,2,7,12,9,0,5,84,111,107,101,
110,0,0,0,13,8,9,0,12,13,0,3,112,111,115,0,
9,9,1,13,12,10,0,4,101,108,105,102,0,0,0,0,
12,11,0,4,101,108,105,102,0,0,0,0,15,13,3,0,
15,14,4,0,27,12,13,2,31,7,9,4,19,7,8,7,
31,5,7,1,19,5,6,5,30,9,1,22,32,32,32,32,
119,104,105,108,101,32,99,104,101,99,107,40,80,46,116,111,
107,101,110,44,39,101,108,105,102,39,41,58,0,0,0,0,
12,7,0,5,99,104,101,99,107,0,0,0,13,6,7,0,
12,9,0,1,80,0,0,0,13,7,9,0,12,9,0,5,
116,111,107,101,110,0,0,0,9,7,7,9,12,8,0,4,
101,108,105,102,0,0,0,0,31,5,7,2,19,5,6,5,
21,5,0,0,18,0,0,120,30,6,1,23,32,32,32,32,
32,32,32,32,116,111,107,32,61,32,80,46,116,111,107,101,
110,0,0,0,12,7,0,1,80,0,0,0,13,6,7,0,
12,7,0,5,98,108,111,99,107,0,0,0,13,6,7,0,
31,5,0,0,19,5,6,5,15,4,5,0,12,7,0,6,
97,112,112,101,110,100,0,0,9,6,2,7,12,9,0,5,
84,111,107,101,110,0,0,0,13,8,9,0,12,13,0,3,
112,111,115,0,9,9,1,13,12,10,0,4,101,108,105,102,
0,0,0,0,12,11,0,4,101,108,105,102,0,0,0,0,
15,13,3,0,15,14,4,0,27,12,13,2,31,7,9,4,
19,7,8,7,31,5,7,1,19,5,6,5,12,7,0,5,
99,104,101,99,107,0,0,0,13,6,7,0,12,9,0,1,
80,0,0,0,13,7,9,0,12,9,0,5,116,111,107,101,
110,0,0,0,9,7,7,9,12,8,0,4,101,108,105,102,
0,0,0,0,31,5,7,2,19,5,6,5,21,5,0,0,
18,0,0,69,12,7,0,1,80,0,0,0,13,6,7,0,
12,7,0,5,116,111,107,101,110,0,0,0,9,6,6,7,
15,5,6,0,30,6,1,24,32,32,32,32,32,32,32,32,
97,100,118,97,110,99,101,40,39,101,108,105,102,39,41,0,
12,8,0,7,97,100,118,97,110,99,101,0,13,7,8,0,
12,8,0,4,101,108,105,102,0,0,0,0,31,6,8,1,
19,6,7,6,30,7,1,25,32,32,32,32,32,32,32,32,
97,32,61,32,101,120,112,114,101,115,115,105,111,110,40,48,
41,0,0,0,12,8,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,7,8,0,11,8,0,0,0,0,0,0,
0,0,0,0,31,6,8,1,19,6,7,6,15,3,6,0,
30,6,1,26,32,32,32,32,32,32,32,32,97,100,118,97,
110,99,101,40,39,58,39,41,0,0,0,0,12,8,0,7,
97,100,118,97,110,99,101,0,13,7,8,0,12,8,0,1,
58,0,0,0,31,6,8,1,19,6,7,6,30,5,1,27,
32,32,32,32,32,32,32,32,98,32,61,32,98,108,111,99,
107,40,41,0,12,8,0,5,98,108,111,99,107,0,0,0,
15,5,6,0,12,8,0,7,97,100,118,97,110,99,101,0,
13,7,8,0,12,8,0,4,101,108,105,102,0,0,0,0,
31,6,8,1,19,6,7,6,12,8,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,7,8,0,11,8,0,0,
0,0,0,0,0,0,0,0,31,6,8,1,19,6,7,6,
15,3,6,0,12,8,0,7,97,100,118,97,110,99,101,0,
13,7,8,0,12,8,0,1,58,0,0,0,31,6,8,1,
19,6,7,6,12,8,0,5,98,108,111,99,107,0,0,0,
13,7,8,0,31,6,0,0,19,6,7,6,15,4,6,0,
30,15,1,28,32,32,32,32,32,32,32,32,105,116,101,109,
115,46,97,112,112,101,110,100,40,84,111,107,101,110,40,116,
111,107,46,112,111,115,44,39,101,108,105,102,39,44,39,101,
108,105,102,39,44,91,97,44,98,93,41,41,0,0,0,0,
12,8,0,6,97,112,112,101,110,100,0,0,9,7,2,8,
12,10,0,5,84,111,107,101,110,0,0,0,13,9,10,0,
12,14,0,3,112,111,115,0,9,10,5,14,12,11,0,4,
2184,947 → 1187,555
101,108,105,102,0,0,0,0,12,12,0,4,101,108,105,102,
0,0,0,0,15,14,3,0,15,15,4,0,27,13,14,2,
31,8,10,4,19,8,9,8,31,6,8,1,19,6,7,6,
18,0,255,120,30,8,1,29,32,32,32,32,105,102,32,99,
104,101,99,107,40,80,46,116,111,107,101,110,44,39,101,108,
115,101,39,41,58,0,0,0,12,8,0,5,99,104,101,99,
107,0,0,0,13,7,8,0,12,10,0,1,80,0,0,0,
13,8,10,0,12,10,0,5,116,111,107,101,110,0,0,0,
9,8,8,10,12,9,0,4,101,108,115,101,0,0,0,0,
31,6,8,2,19,6,7,6,21,6,0,0,18,0,0,99,
30,6,1,30,32,32,32,32,32,32,32,32,116,111,107,32,
61,32,80,46,116,111,107,101,110,0,0,0,12,7,0,1,
18,0,255,171,12,8,0,5,99,104,101,99,107,0,0,0,
13,7,8,0,12,10,0,1,80,0,0,0,13,8,10,0,
12,10,0,5,116,111,107,101,110,0,0,0,9,8,8,10,
12,9,0,4,101,108,115,101,0,0,0,0,31,6,8,2,
19,6,7,6,21,6,0,0,18,0,0,57,12,7,0,1,
80,0,0,0,13,6,7,0,12,7,0,5,116,111,107,101,
110,0,0,0,9,6,6,7,15,5,6,0,30,6,1,31,
32,32,32,32,32,32,32,32,97,100,118,97,110,99,101,40,
39,101,108,115,101,39,41,0,12,8,0,7,97,100,118,97,
110,99,101,0,13,7,8,0,12,8,0,4,101,108,115,101,
0,0,0,0,31,6,8,1,19,6,7,6,30,6,1,32,
32,32,32,32,32,32,32,32,97,100,118,97,110,99,101,40,
39,58,39,41,0,0,0,0,12,8,0,7,97,100,118,97,
110,99,101,0,13,7,8,0,12,8,0,1,58,0,0,0,
31,6,8,1,19,6,7,6,30,5,1,33,32,32,32,32,
32,32,32,32,98,32,61,32,98,108,111,99,107,40,41,0,
110,0,0,0,9,6,6,7,15,5,6,0,12,8,0,7,
97,100,118,97,110,99,101,0,13,7,8,0,12,8,0,4,
101,108,115,101,0,0,0,0,31,6,8,1,19,6,7,6,
12,8,0,7,97,100,118,97,110,99,101,0,13,7,8,0,
12,8,0,1,58,0,0,0,31,6,8,1,19,6,7,6,
12,8,0,5,98,108,111,99,107,0,0,0,13,7,8,0,
31,6,0,0,19,6,7,6,15,4,6,0,30,14,1,34,
32,32,32,32,32,32,32,32,105,116,101,109,115,46,97,112,
112,101,110,100,40,84,111,107,101,110,40,116,111,107,46,112,
111,115,44,39,101,108,115,101,39,44,39,101,108,115,101,39,
44,91,98,93,41,41,0,0,12,8,0,6,97,112,112,101,
110,100,0,0,9,7,2,8,12,10,0,5,84,111,107,101,
110,0,0,0,13,9,10,0,12,14,0,3,112,111,115,0,
9,10,5,14,12,11,0,4,101,108,115,101,0,0,0,0,
12,12,0,4,101,108,115,101,0,0,0,0,15,14,4,0,
27,13,14,1,31,8,10,4,19,8,9,8,31,6,8,1,
19,6,7,6,18,0,0,1,30,4,1,35,32,32,32,32,
114,101,116,117,114,110,32,116,0,0,0,0,20,1,0,0,
31,6,0,0,19,6,7,6,15,4,6,0,12,8,0,6,
97,112,112,101,110,100,0,0,9,7,2,8,12,10,0,5,
84,111,107,101,110,0,0,0,13,9,10,0,12,14,0,3,
112,111,115,0,9,10,5,14,12,11,0,4,101,108,115,101,
0,0,0,0,12,12,0,4,101,108,115,101,0,0,0,0,
15,14,4,0,27,13,14,1,31,8,10,4,19,8,9,8,
31,6,8,1,19,6,7,6,18,0,0,1,20,1,0,0,
0,0,0,0,12,36,0,6,105,102,95,110,117,100,0,0,
14,36,35,0,30,4,1,36,100,101,102,32,116,114,121,95,
110,117,100,40,116,41,58,0,16,36,1,29,44,16,0,0,
30,4,1,36,100,101,102,32,116,114,121,95,110,117,100,40,
116,41,58,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,7,
116,114,121,95,110,117,100,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,7,1,37,32,32,32,32,105,116,101,109,
115,32,61,32,116,46,105,116,101,109,115,32,61,32,91,93,
0,0,0,0,27,3,0,0,12,4,0,5,105,116,101,109,
115,0,0,0,10,1,4,3,15,2,3,0,30,5,1,38,
32,32,32,32,97,100,118,97,110,99,101,40,39,58,39,41,
0,0,0,0,12,5,0,7,97,100,118,97,110,99,101,0,
13,4,5,0,12,5,0,1,58,0,0,0,31,3,5,1,
19,3,4,3,30,4,1,39,32,32,32,32,98,32,61,32,
98,108,111,99,107,40,41,0,12,6,0,5,98,108,111,99,
107,0,0,0,13,5,6,0,31,4,0,0,19,4,5,4,
15,3,4,0,30,5,1,40,32,32,32,32,105,116,101,109,
115,46,97,112,112,101,110,100,40,98,41,0,12,6,0,6,
97,112,112,101,110,100,0,0,9,5,2,6,15,6,3,0,
31,4,6,1,19,4,5,4,30,9,1,41,32,32,32,32,
119,104,105,108,101,32,99,104,101,99,107,40,80,46,116,111,
107,101,110,44,39,101,120,99,101,112,116,39,41,58,0,0,
12,6,0,5,99,104,101,99,107,0,0,0,13,5,6,0,
12,8,0,1,80,0,0,0,13,6,8,0,12,8,0,5,
116,111,107,101,110,0,0,0,9,6,6,8,12,7,0,6,
101,120,99,101,112,116,0,0,31,4,6,2,19,4,5,4,
21,4,0,0,18,0,0,179,30,6,1,42,32,32,32,32,
32,32,32,32,116,111,107,32,61,32,80,46,116,111,107,101,
110,0,0,0,12,6,0,1,80,0,0,0,13,5,6,0,
12,6,0,5,116,111,107,101,110,0,0,0,9,5,5,6,
15,4,5,0,30,7,1,43,32,32,32,32,32,32,32,32,
97,100,118,97,110,99,101,40,39,101,120,99,101,112,116,39,
41,0,0,0,12,7,0,7,97,100,118,97,110,99,101,0,
13,6,7,0,12,7,0,6,101,120,99,101,112,116,0,0,
31,5,7,1,19,5,6,5,30,14,1,44,32,32,32,32,
32,32,32,32,105,102,32,110,111,116,32,99,104,101,99,107,
40,80,46,116,111,107,101,110,44,39,58,39,41,58,32,97,
32,61,32,101,120,112,114,101,115,115,105,111,110,40,48,41,
0,0,0,0,12,8,0,5,99,104,101,99,107,0,0,0,
13,7,8,0,12,10,0,1,80,0,0,0,13,8,10,0,
12,10,0,5,116,111,107,101,110,0,0,0,9,8,8,10,
12,9,0,1,58,0,0,0,31,6,8,2,19,6,7,6,
47,5,6,0,21,5,0,0,18,0,0,13,12,8,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,7,8,0,
11,8,0,0,0,0,0,0,0,0,0,0,31,6,8,1,
19,6,7,6,15,5,6,0,18,0,0,32,30,13,1,45,
32,32,32,32,32,32,32,32,101,108,115,101,58,32,97,32,
61,32,84,111,107,101,110,40,116,111,107,46,112,111,115,44,
39,115,121,109,98,111,108,39,44,39,78,111,110,101,39,41,
0,0,0,0,12,8,0,5,84,111,107,101,110,0,0,0,
14,36,35,0,16,36,0,233,44,16,0,0,28,2,0,0,
9,1,0,2,27,3,0,0,12,4,0,5,105,116,101,109,
115,0,0,0,10,1,4,3,15,2,3,0,12,5,0,7,
97,100,118,97,110,99,101,0,13,4,5,0,12,5,0,1,
58,0,0,0,31,3,5,1,19,3,4,3,12,6,0,5,
98,108,111,99,107,0,0,0,13,5,6,0,31,4,0,0,
19,4,5,4,15,3,4,0,12,6,0,6,97,112,112,101,
110,100,0,0,9,5,2,6,15,6,3,0,31,4,6,1,
19,4,5,4,12,6,0,5,99,104,101,99,107,0,0,0,
13,5,6,0,12,8,0,1,80,0,0,0,13,6,8,0,
12,8,0,5,116,111,107,101,110,0,0,0,9,6,6,8,
12,7,0,6,101,120,99,101,112,116,0,0,31,4,6,2,
19,4,5,4,21,4,0,0,18,0,0,108,12,6,0,1,
80,0,0,0,13,5,6,0,12,6,0,5,116,111,107,101,
110,0,0,0,9,5,5,6,15,4,5,0,12,7,0,7,
97,100,118,97,110,99,101,0,13,6,7,0,12,7,0,6,
101,120,99,101,112,116,0,0,31,5,7,1,19,5,6,5,
11,5,0,0,0,0,0,0,0,0,0,0,12,8,0,5,
99,104,101,99,107,0,0,0,13,7,8,0,12,10,0,1,
80,0,0,0,13,8,10,0,12,10,0,5,116,111,107,101,
110,0,0,0,9,8,8,10,12,9,0,1,58,0,0,0,
31,6,8,2,19,6,7,6,23,5,5,6,21,5,0,0,
18,0,0,13,12,8,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,7,8,0,11,8,0,0,0,0,0,0,
0,0,0,0,31,6,8,1,19,6,7,6,15,5,6,0,
18,0,0,18,12,8,0,5,84,111,107,101,110,0,0,0,
13,7,8,0,12,11,0,3,112,111,115,0,9,8,4,11,
12,9,0,6,115,121,109,98,111,108,0,0,12,10,0,4,
78,111,110,101,0,0,0,0,31,6,8,3,19,6,7,6,
15,5,6,0,18,0,0,1,30,6,1,46,32,32,32,32,
32,32,32,32,97,100,118,97,110,99,101,40,39,58,39,41,
0,0,0,0,12,8,0,7,97,100,118,97,110,99,101,0,
15,5,6,0,18,0,0,1,12,8,0,7,97,100,118,97,
110,99,101,0,13,7,8,0,12,8,0,1,58,0,0,0,
31,6,8,1,19,6,7,6,12,8,0,5,98,108,111,99,
107,0,0,0,13,7,8,0,31,6,0,0,19,6,7,6,
15,3,6,0,12,8,0,6,97,112,112,101,110,100,0,0,
9,7,2,8,12,10,0,5,84,111,107,101,110,0,0,0,
13,9,10,0,12,14,0,3,112,111,115,0,9,10,4,14,
12,11,0,6,101,120,99,101,112,116,0,0,12,12,0,6,
101,120,99,101,112,116,0,0,15,14,5,0,15,15,3,0,
27,13,14,2,31,8,10,4,19,8,9,8,31,6,8,1,
19,6,7,6,18,0,255,132,12,8,0,5,99,104,101,99,
107,0,0,0,13,7,8,0,12,10,0,1,80,0,0,0,
13,8,10,0,12,10,0,5,116,111,107,101,110,0,0,0,
9,8,8,10,12,9,0,4,101,108,115,101,0,0,0,0,
31,6,8,2,19,6,7,6,21,6,0,0,18,0,0,57,
12,7,0,1,80,0,0,0,13,6,7,0,12,7,0,5,
116,111,107,101,110,0,0,0,9,6,6,7,15,4,6,0,
12,8,0,7,97,100,118,97,110,99,101,0,13,7,8,0,
12,8,0,4,101,108,115,101,0,0,0,0,31,6,8,1,
19,6,7,6,12,8,0,7,97,100,118,97,110,99,101,0,
13,7,8,0,12,8,0,1,58,0,0,0,31,6,8,1,
19,6,7,6,30,5,1,47,32,32,32,32,32,32,32,32,
98,32,61,32,98,108,111,99,107,40,41,0,12,8,0,5,
98,108,111,99,107,0,0,0,13,7,8,0,31,6,0,0,
19,6,7,6,15,3,6,0,30,16,1,48,32,32,32,32,
32,32,32,32,105,116,101,109,115,46,97,112,112,101,110,100,
40,84,111,107,101,110,40,116,111,107,46,112,111,115,44,39,
101,120,99,101,112,116,39,44,39,101,120,99,101,112,116,39,
44,91,97,44,98,93,41,41,0,0,0,0,12,8,0,6,
97,112,112,101,110,100,0,0,9,7,2,8,12,10,0,5,
84,111,107,101,110,0,0,0,13,9,10,0,12,14,0,3,
112,111,115,0,9,10,4,14,12,11,0,6,101,120,99,101,
112,116,0,0,12,12,0,6,101,120,99,101,112,116,0,0,
15,14,5,0,15,15,3,0,27,13,14,2,31,8,10,4,
19,8,9,8,31,6,8,1,19,6,7,6,18,0,255,61,
30,4,1,56,32,32,32,32,114,101,116,117,114,110,32,116,
0,0,0,0,20,1,0,0,0,0,0,0,12,37,0,7,
116,114,121,95,110,117,100,0,14,37,36,0,30,5,1,57,
100,101,102,32,112,114,101,102,105,120,95,110,117,100,40,116,
41,58,0,0,16,37,0,59,44,7,0,0,30,5,1,57,
100,101,102,32,112,114,101,102,105,120,95,110,117,100,40,116,
41,58,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,10,
112,114,101,102,105,120,95,110,117,100,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,4,1,60,32,32,32,32,
98,112,32,61,32,116,46,98,112,0,0,0,12,4,0,2,
98,112,0,0,9,3,1,4,15,2,3,0,30,8,1,61,
32,32,32,32,116,46,105,116,101,109,115,32,61,32,91,101,
120,112,114,101,115,115,105,111,110,40,98,112,41,93,0,0,
12,6,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
13,5,6,0,15,6,2,0,31,4,6,1,19,4,5,4,
27,3,4,1,12,4,0,5,105,116,101,109,115,0,0,0,
10,1,4,3,30,4,1,62,32,32,32,32,114,101,116,117,
114,110,32,116,0,0,0,0,20,1,0,0,0,0,0,0,
12,38,0,10,112,114,101,102,105,120,95,110,117,100,0,0,
14,38,37,0,30,5,1,63,100,101,102,32,112,114,101,102,
105,120,95,110,117,100,48,40,116,41,58,0,16,38,0,80,
44,10,0,0,30,5,1,63,100,101,102,32,112,114,101,102,
105,120,95,110,117,100,48,40,116,41,58,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,11,112,114,101,102,105,120,95,110,
117,100,48,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,14,1,64,32,32,32,32,105,102,32,99,104,101,99,107,
40,80,46,116,111,107,101,110,44,39,110,108,39,44,39,59,
39,44,39,101,111,102,39,44,39,100,101,100,101,110,116,39,
41,58,32,114,101,116,117,114,110,32,116,0,12,4,0,5,
99,104,101,99,107,0,0,0,13,3,4,0,12,9,0,1,
80,0,0,0,13,4,9,0,12,9,0,5,116,111,107,101,
110,0,0,0,9,4,4,9,12,5,0,2,110,108,0,0,
12,6,0,1,59,0,0,0,12,7,0,3,101,111,102,0,
12,8,0,6,100,101,100,101,110,116,0,0,31,2,4,5,
19,2,3,2,21,2,0,0,18,0,0,3,20,1,0,0,
18,0,0,1,30,7,1,65,32,32,32,32,114,101,116,117,
114,110,32,112,114,101,102,105,120,95,110,117,100,40,116,41,
0,0,0,0,12,4,0,10,112,114,101,102,105,120,95,110,
117,100,0,0,13,3,4,0,15,4,1,0,31,2,4,1,
19,2,3,2,20,2,0,0,0,0,0,0,12,39,0,11,
112,114,101,102,105,120,95,110,117,100,48,0,14,39,38,0,
30,5,1,66,100,101,102,32,112,114,101,102,105,120,95,110,
117,100,115,40,116,41,58,0,16,39,0,60,44,8,0,0,
30,5,1,66,100,101,102,32,112,114,101,102,105,120,95,110,
117,100,115,40,116,41,58,0,12,1,0,13,99,111,114,101,
47,112,97,114,115,101,46,112,121,0,0,0,33,1,0,0,
12,1,0,11,112,114,101,102,105,120,95,110,117,100,115,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,6,1,67,
32,32,32,32,114,32,61,32,101,120,112,114,101,115,115,105,
111,110,40,48,41,0,0,0,12,5,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,4,5,0,11,5,0,0,
0,0,0,0,0,0,0,0,31,3,5,1,19,3,4,3,
15,2,3,0,30,7,1,68,32,32,32,32,114,101,116,117,
114,110,32,105,108,115,116,40,116,46,116,121,112,101,44,114,
41,0,0,0,12,5,0,4,105,108,115,116,0,0,0,0,
13,4,5,0,12,7,0,4,116,121,112,101,0,0,0,0,
9,5,1,7,15,6,2,0,31,3,5,2,19,3,4,3,
20,3,0,0,0,0,0,0,12,40,0,11,112,114,101,102,
105,120,95,110,117,100,115,0,14,40,39,0,30,5,1,70,
100,101,102,32,112,114,101,102,105,120,95,110,101,103,40,116,
41,58,0,0,16,40,0,135,44,11,0,0,30,5,1,70,
100,101,102,32,112,114,101,102,105,120,95,110,101,103,40,116,
41,58,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,10,
112,114,101,102,105,120,95,110,101,103,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,6,1,71,32,32,32,32,
114,32,61,32,101,120,112,114,101,115,115,105,111,110,40,53,
48,41,0,0,12,5,0,10,101,120,112,114,101,115,115,105,
111,110,0,0,13,4,5,0,11,5,0,0,0,0,0,0,
0,0,73,64,31,3,5,1,19,3,4,3,15,2,3,0,
30,7,1,72,32,32,32,32,105,102,32,114,46,116,121,112,
101,32,61,61,32,39,110,117,109,98,101,114,39,58,0,0,
12,4,0,4,116,121,112,101,0,0,0,0,9,3,2,4,
12,4,0,6,110,117,109,98,101,114,0,0,23,3,3,4,
21,3,0,0,18,0,0,40,30,9,1,73,32,32,32,32,
32,32,32,32,114,46,118,97,108,32,61,32,115,116,114,40,
45,102,108,111,97,116,40,114,46,118,97,108,41,41,0,0,
12,5,0,3,115,116,114,0,13,4,5,0,11,5,0,0,
0,0,0,0,0,0,0,0,12,8,0,5,102,108,111,97,
116,0,0,0,13,7,8,0,12,9,0,3,118,97,108,0,
9,8,2,9,31,6,8,1,19,6,7,6,2,5,5,6,
31,3,5,1,19,3,4,3,12,4,0,3,118,97,108,0,
10,2,4,3,30,5,1,74,32,32,32,32,32,32,32,32,
114,101,116,117,114,110,32,114,0,0,0,0,20,2,0,0,
18,0,0,1,30,11,1,75,32,32,32,32,116,46,105,116,
101,109,115,32,61,32,91,84,111,107,101,110,40,116,46,112,
111,115,44,39,110,117,109,98,101,114,39,44,39,48,39,41,
44,114,93,0,12,7,0,5,84,111,107,101,110,0,0,0,
13,6,7,0,12,10,0,3,112,111,115,0,9,7,1,10,
12,8,0,6,110,117,109,98,101,114,0,0,12,9,0,1,
48,0,0,0,31,4,7,3,19,4,6,4,15,5,2,0,
27,3,4,2,12,4,0,5,105,116,101,109,115,0,0,0,
10,1,4,3,30,4,1,76,32,32,32,32,114,101,116,117,
114,110,32,116,0,0,0,0,20,1,0,0,0,0,0,0,
12,41,0,10,112,114,101,102,105,120,95,110,101,103,0,0,
14,41,40,0,30,5,1,77,100,101,102,32,118,97,114,103,
115,95,110,117,100,40,116,41,58,0,0,0,16,41,0,67,
44,6,0,0,30,5,1,77,100,101,102,32,118,97,114,103,
115,95,110,117,100,40,116,41,58,0,0,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,9,118,97,114,103,115,95,110,117,
100,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,6,1,78,32,32,32,32,114,32,61,32,112,114,101,102,
105,120,95,110,117,100,40,116,41,0,0,0,12,5,0,10,
19,6,7,6,12,8,0,5,98,108,111,99,107,0,0,0,
13,7,8,0,31,6,0,0,19,6,7,6,15,3,6,0,
12,8,0,6,97,112,112,101,110,100,0,0,9,7,2,8,
12,10,0,5,84,111,107,101,110,0,0,0,13,9,10,0,
12,14,0,3,112,111,115,0,9,10,4,14,12,11,0,4,
101,108,115,101,0,0,0,0,12,12,0,4,101,108,115,101,
0,0,0,0,15,14,3,0,27,13,14,1,31,8,10,4,
19,8,9,8,31,6,8,1,19,6,7,6,18,0,0,1,
20,1,0,0,0,0,0,0,12,37,0,7,116,114,121,95,
110,117,100,0,14,37,36,0,16,37,0,23,44,7,0,0,
28,2,0,0,9,1,0,2,12,4,0,2,98,112,0,0,
9,3,1,4,15,2,3,0,12,6,0,10,101,120,112,114,
101,115,115,105,111,110,0,0,13,5,6,0,15,6,2,0,
31,4,6,1,19,4,5,4,27,3,4,1,12,4,0,5,
105,116,101,109,115,0,0,0,10,1,4,3,20,1,0,0,
0,0,0,0,12,38,0,10,112,114,101,102,105,120,95,110,
117,100,0,0,14,38,37,0,16,38,0,40,44,10,0,0,
28,2,0,0,9,1,0,2,12,4,0,5,99,104,101,99,
107,0,0,0,13,3,4,0,12,9,0,1,80,0,0,0,
13,4,9,0,12,9,0,5,116,111,107,101,110,0,0,0,
9,4,4,9,12,5,0,2,110,108,0,0,12,6,0,1,
59,0,0,0,12,7,0,3,101,111,102,0,12,8,0,6,
100,101,100,101,110,116,0,0,31,2,4,5,19,2,3,2,
21,2,0,0,18,0,0,3,20,1,0,0,18,0,0,1,
12,4,0,10,112,114,101,102,105,120,95,110,117,100,0,0,
13,3,4,0,15,4,1,0,31,2,4,1,19,2,3,2,
20,2,0,0,0,0,0,0,12,39,0,11,112,114,101,102,
105,120,95,110,117,100,48,0,14,39,38,0,16,39,0,28,
44,8,0,0,28,2,0,0,9,1,0,2,12,5,0,10,
101,120,112,114,101,115,115,105,111,110,0,0,13,4,5,0,
11,5,0,0,0,0,0,0,0,0,0,0,31,3,5,1,
19,3,4,3,15,2,3,0,12,5,0,4,105,108,115,116,
0,0,0,0,13,4,5,0,12,7,0,4,116,121,112,101,
0,0,0,0,9,5,1,7,15,6,2,0,31,3,5,2,
19,3,4,3,20,3,0,0,0,0,0,0,12,40,0,11,
112,114,101,102,105,120,95,110,117,100,115,0,14,40,39,0,
16,40,0,70,44,11,0,0,28,2,0,0,9,1,0,2,
12,5,0,10,101,120,112,114,101,115,115,105,111,110,0,0,
13,4,5,0,11,5,0,0,0,0,0,0,0,0,73,64,
31,3,5,1,19,3,4,3,15,2,3,0,12,4,0,4,
116,121,112,101,0,0,0,0,9,3,2,4,12,4,0,6,
110,117,109,98,101,114,0,0,23,3,3,4,21,3,0,0,
18,0,0,24,12,5,0,3,115,116,114,0,13,4,5,0,
11,5,0,0,0,0,0,0,0,0,0,0,12,8,0,5,
102,108,111,97,116,0,0,0,13,7,8,0,12,9,0,3,
118,97,108,0,9,8,2,9,31,6,8,1,19,6,7,6,
2,5,5,6,31,3,5,1,19,3,4,3,12,4,0,3,
118,97,108,0,10,2,4,3,20,2,0,0,18,0,0,1,
12,7,0,5,84,111,107,101,110,0,0,0,13,6,7,0,
12,10,0,3,112,111,115,0,9,7,1,10,12,8,0,6,
110,117,109,98,101,114,0,0,12,9,0,1,48,0,0,0,
31,4,7,3,19,4,6,4,15,5,2,0,27,3,4,2,
12,4,0,5,105,116,101,109,115,0,0,0,10,1,4,3,
20,1,0,0,0,0,0,0,12,41,0,10,112,114,101,102,
105,120,95,110,101,103,0,0,14,41,40,0,16,41,0,27,
44,6,0,0,28,2,0,0,9,1,0,2,12,5,0,10,
112,114,101,102,105,120,95,110,117,100,0,0,13,4,5,0,
15,5,1,0,31,3,5,1,19,3,4,3,15,2,3,0,
30,5,1,79,32,32,32,32,116,46,116,121,112,101,32,61,
32,39,97,114,103,115,39,0,12,3,0,4,97,114,103,115,
0,0,0,0,12,4,0,4,116,121,112,101,0,0,0,0,
10,1,4,3,30,4,1,80,32,32,32,32,116,46,118,97,
108,32,61,32,39,42,39,0,12,3,0,1,42,0,0,0,
12,4,0,3,118,97,108,0,10,1,4,3,30,4,1,81,
32,32,32,32,114,101,116,117,114,110,32,116,0,0,0,0,
12,3,0,4,97,114,103,115,0,0,0,0,12,4,0,4,
116,121,112,101,0,0,0,0,10,1,4,3,12,3,0,1,
42,0,0,0,12,4,0,3,118,97,108,0,10,1,4,3,
20,1,0,0,0,0,0,0,12,42,0,9,118,97,114,103,
115,95,110,117,100,0,0,0,14,42,41,0,30,5,1,82,
100,101,102,32,110,97,114,103,115,95,110,117,100,40,116,41,
58,0,0,0,16,42,0,69,44,6,0,0,30,5,1,82,
100,101,102,32,110,97,114,103,115,95,110,117,100,40,116,41,
58,0,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,9,
110,97,114,103,115,95,110,117,100,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,6,1,83,32,32,32,32,
114,32,61,32,112,114,101,102,105,120,95,110,117,100,40,116,
41,0,0,0,12,5,0,10,112,114,101,102,105,120,95,110,
117,100,0,0,13,4,5,0,15,5,1,0,31,3,5,1,
19,3,4,3,15,2,3,0,30,6,1,84,32,32,32,32,
116,46,116,121,112,101,32,61,32,39,110,97,114,103,115,39,
0,0,0,0,12,3,0,5,110,97,114,103,115,0,0,0,
12,4,0,4,116,121,112,101,0,0,0,0,10,1,4,3,
30,5,1,85,32,32,32,32,116,46,118,97,108,32,61,32,
39,42,42,39,0,0,0,0,12,3,0,2,42,42,0,0,
12,4,0,3,118,97,108,0,10,1,4,3,30,4,1,86,
32,32,32,32,114,101,116,117,114,110,32,116,0,0,0,0,
115,95,110,117,100,0,0,0,14,42,41,0,16,42,0,27,
44,6,0,0,28,2,0,0,9,1,0,2,12,5,0,10,
112,114,101,102,105,120,95,110,117,100,0,0,13,4,5,0,
15,5,1,0,31,3,5,1,19,3,4,3,15,2,3,0,
12,3,0,5,110,97,114,103,115,0,0,0,12,4,0,4,
116,121,112,101,0,0,0,0,10,1,4,3,12,3,0,2,
42,42,0,0,12,4,0,3,118,97,108,0,10,1,4,3,
20,1,0,0,0,0,0,0,12,43,0,9,110,97,114,103,
115,95,110,117,100,0,0,0,14,43,42,0,30,4,1,89,
98,97,115,101,95,100,109,97,112,32,61,32,123,0,0,0,
12,43,0,9,98,97,115,101,95,100,109,97,112,0,0,0,
30,12,1,90,32,32,32,32,39,44,39,58,123,39,108,98,
112,39,58,50,48,44,39,98,112,39,58,50,48,44,39,108,
101,100,39,58,105,110,102,105,120,95,116,117,112,108,101,125,
44,0,0,0,12,45,0,1,44,0,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,52,64,
12,105,0,2,98,112,0,0,11,106,0,0,0,0,0,0,
0,0,52,64,12,107,0,3,108,101,100,0,12,109,0,11,
105,110,102,105,120,95,116,117,112,108,101,0,13,108,109,0,
26,46,103,6,30,11,1,91,32,32,32,32,39,43,39,58,
123,39,108,98,112,39,58,53,48,44,39,98,112,39,58,53,
48,44,39,108,101,100,39,58,105,110,102,105,120,95,108,101,
100,125,44,0,12,47,0,1,43,0,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,73,64,
12,105,0,2,98,112,0,0,11,106,0,0,0,0,0,0,
0,0,73,64,12,107,0,3,108,101,100,0,12,109,0,9,
105,110,102,105,120,95,108,101,100,0,0,0,13,108,109,0,
26,48,103,6,30,9,1,92,32,32,32,32,39,45,39,58,
123,39,108,98,112,39,58,53,48,44,39,110,117,100,39,58,
112,114,101,102,105,120,95,110,101,103,44,0,12,49,0,1,
115,95,110,117,100,0,0,0,14,43,42,0,12,43,0,9,
98,97,115,101,95,100,109,97,112,0,0,0,12,45,0,1,
44,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,52,64,12,105,0,2,98,112,0,0,
11,106,0,0,0,0,0,0,0,0,52,64,12,107,0,3,
108,101,100,0,12,109,0,11,105,110,102,105,120,95,116,117,
112,108,101,0,13,108,109,0,26,46,103,6,12,47,0,1,
43,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,73,64,12,105,0,2,98,112,0,0,
11,106,0,0,0,0,0,0,0,0,73,64,12,107,0,3,
108,101,100,0,12,109,0,9,105,110,102,105,120,95,108,101,
100,0,0,0,13,108,109,0,26,48,103,6,12,49,0,1,
45,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,73,64,12,105,0,3,110,117,100,0,
12,111,0,10,112,114,101,102,105,120,95,110,101,103,0,0,
13,106,111,0,30,9,1,93,32,32,32,32,32,32,32,32,
39,98,112,39,58,53,48,44,39,108,101,100,39,58,105,110,
102,105,120,95,108,101,100,125,44,0,0,0,12,107,0,2,
98,112,0,0,11,108,0,0,0,0,0,0,0,0,73,64,
12,109,0,3,108,101,100,0,12,111,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,13,110,111,0,26,50,103,8,
30,12,1,94,32,32,32,32,39,110,111,116,39,58,123,39,
108,98,112,39,58,51,53,44,39,110,117,100,39,58,112,114,
101,102,105,120,95,110,117,100,44,39,98,112,39,58,51,53,
44,0,0,0,12,51,0,3,110,111,116,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,128,65,64,
12,105,0,3,110,117,100,0,12,113,0,10,112,114,101,102,
105,120,95,110,117,100,0,0,13,106,113,0,12,107,0,2,
98,112,0,0,11,108,0,0,0,0,0,0,0,128,65,64,
30,9,1,95,32,32,32,32,32,32,32,32,39,98,112,39,
58,51,53,44,39,108,101,100,39,58,105,110,102,105,120,95,
110,111,116,32,125,44,0,0,12,109,0,2,98,112,0,0,
11,110,0,0,0,0,0,0,0,128,65,64,12,111,0,3,
108,101,100,0,12,113,0,9,105,110,102,105,120,95,110,111,
116,0,0,0,13,112,113,0,26,52,103,10,30,11,1,96,
32,32,32,32,39,37,39,58,123,39,108,98,112,39,58,54,
48,44,39,98,112,39,58,54,48,44,39,108,101,100,39,58,
105,110,102,105,120,95,108,101,100,125,44,0,12,53,0,1,
37,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,78,64,12,105,0,2,98,112,0,0,
11,106,0,0,0,0,0,0,0,0,78,64,12,107,0,3,
108,101,100,0,12,109,0,9,105,110,102,105,120,95,108,101,
100,0,0,0,13,108,109,0,26,54,103,6,30,9,1,97,
32,32,32,32,39,42,39,58,123,39,108,98,112,39,58,54,
48,44,39,110,117,100,39,58,118,97,114,103,115,95,110,117,
100,44,0,0,12,55,0,1,42,0,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,78,64,
12,105,0,3,110,117,100,0,12,111,0,9,118,97,114,103,
115,95,110,117,100,0,0,0,13,106,111,0,30,9,1,98,
32,32,32,32,32,32,32,32,39,98,112,39,58,54,48,44,
39,108,101,100,39,58,105,110,102,105,120,95,108,101,100,44,
125,44,0,0,12,107,0,2,98,112,0,0,11,108,0,0,
0,0,0,0,0,0,78,64,12,109,0,3,108,101,100,0,
13,106,111,0,12,107,0,2,98,112,0,0,11,108,0,0,
0,0,0,0,0,0,73,64,12,109,0,3,108,101,100,0,
12,111,0,9,105,110,102,105,120,95,108,101,100,0,0,0,
13,110,111,0,26,56,103,8,30,10,1,99,32,32,32,32,
39,42,42,39,58,32,123,39,108,98,112,39,58,54,53,44,
39,110,117,100,39,58,110,97,114,103,115,95,110,117,100,44,
0,0,0,0,12,57,0,2,42,42,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,64,80,64,
12,105,0,3,110,117,100,0,12,111,0,9,110,97,114,103,
115,95,110,117,100,0,0,0,13,106,111,0,30,9,1,100,
32,32,32,32,32,32,32,32,39,98,112,39,58,54,53,44,
39,108,101,100,39,58,105,110,102,105,120,95,108,101,100,44,
125,44,0,0,12,107,0,2,98,112,0,0,11,108,0,0,
0,0,0,0,0,64,80,64,12,109,0,3,108,101,100,0,
12,111,0,9,105,110,102,105,120,95,108,101,100,0,0,0,
13,110,111,0,26,58,103,8,30,11,1,101,32,32,32,32,
39,47,39,58,123,39,108,98,112,39,58,54,48,44,39,98,
112,39,58,54,48,44,39,108,101,100,39,58,105,110,102,105,
120,95,108,101,100,125,44,0,12,59,0,1,47,0,0,0,
13,110,111,0,26,50,103,8,12,51,0,3,110,111,116,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,128,65,64,12,105,0,3,110,117,100,0,12,113,0,10,
112,114,101,102,105,120,95,110,117,100,0,0,13,106,113,0,
12,107,0,2,98,112,0,0,11,108,0,0,0,0,0,0,
0,128,65,64,12,109,0,2,98,112,0,0,11,110,0,0,
0,0,0,0,0,128,65,64,12,111,0,3,108,101,100,0,
12,113,0,9,105,110,102,105,120,95,110,111,116,0,0,0,
13,112,113,0,26,52,103,10,12,53,0,1,37,0,0,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,78,64,12,105,0,2,98,112,0,0,11,106,0,0,
0,0,0,0,0,0,78,64,12,107,0,3,108,101,100,0,
12,109,0,9,105,110,102,105,120,95,108,101,100,0,0,0,
13,108,109,0,26,60,103,6,30,9,1,102,32,32,32,32,
39,40,39,58,123,39,108,98,112,39,58,55,48,44,39,110,
117,100,39,58,112,97,114,101,110,95,110,117,100,44,0,0,
13,108,109,0,26,54,103,6,12,55,0,1,42,0,0,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,78,64,12,105,0,3,110,117,100,0,12,111,0,9,
118,97,114,103,115,95,110,117,100,0,0,0,13,106,111,0,
12,107,0,2,98,112,0,0,11,108,0,0,0,0,0,0,
0,0,78,64,12,109,0,3,108,101,100,0,12,111,0,9,
105,110,102,105,120,95,108,101,100,0,0,0,13,110,111,0,
26,56,103,8,12,57,0,2,42,42,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,64,80,64,
12,105,0,3,110,117,100,0,12,111,0,9,110,97,114,103,
115,95,110,117,100,0,0,0,13,106,111,0,12,107,0,2,
98,112,0,0,11,108,0,0,0,0,0,0,0,64,80,64,
12,109,0,3,108,101,100,0,12,111,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,13,110,111,0,26,58,103,8,
12,59,0,1,47,0,0,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,0,78,64,12,105,0,2,
98,112,0,0,11,106,0,0,0,0,0,0,0,0,78,64,
12,107,0,3,108,101,100,0,12,109,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,13,108,109,0,26,60,103,6,
12,61,0,1,40,0,0,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,128,81,64,12,105,0,3,
110,117,100,0,12,111,0,9,112,97,114,101,110,95,110,117,
100,0,0,0,13,106,111,0,30,9,1,103,32,32,32,32,
32,32,32,32,39,98,112,39,58,56,48,44,39,108,101,100,
39,58,99,97,108,108,95,108,101,100,44,125,44,0,0,0,
12,107,0,2,98,112,0,0,11,108,0,0,0,0,0,0,
0,0,84,64,12,109,0,3,108,101,100,0,12,111,0,8,
99,97,108,108,95,108,101,100,0,0,0,0,13,110,111,0,
26,62,103,8,30,9,1,104,32,32,32,32,39,91,39,58,
123,39,108,98,112,39,58,55,48,44,39,110,117,100,39,58,
108,105,115,116,95,110,117,100,44,0,0,0,12,63,0,1,
100,0,0,0,13,106,111,0,12,107,0,2,98,112,0,0,
11,108,0,0,0,0,0,0,0,0,84,64,12,109,0,3,
108,101,100,0,12,111,0,8,99,97,108,108,95,108,101,100,
0,0,0,0,13,110,111,0,26,62,103,8,12,63,0,1,
91,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,128,81,64,12,105,0,3,110,117,100,0,
12,111,0,8,108,105,115,116,95,110,117,100,0,0,0,0,
13,106,111,0,30,9,1,105,32,32,32,32,32,32,32,32,
39,98,112,39,58,56,48,44,39,108,101,100,39,58,103,101,
116,95,108,101,100,44,125,44,0,0,0,0,12,107,0,2,
98,112,0,0,11,108,0,0,0,0,0,0,0,0,84,64,
12,109,0,3,108,101,100,0,12,111,0,7,103,101,116,95,
108,101,100,0,13,110,111,0,26,64,103,8,30,9,1,106,
32,32,32,32,39,123,39,58,123,39,108,98,112,39,58,48,
44,39,110,117,100,39,58,100,105,99,116,95,110,117,100,44,
125,44,0,0,12,65,0,1,123,0,0,0,12,103,0,3,
13,106,111,0,12,107,0,2,98,112,0,0,11,108,0,0,
0,0,0,0,0,0,84,64,12,109,0,3,108,101,100,0,
12,111,0,7,103,101,116,95,108,101,100,0,13,110,111,0,
26,64,103,8,12,65,0,1,123,0,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,0,0,
12,105,0,3,110,117,100,0,12,107,0,8,100,105,99,116,
95,110,117,100,0,0,0,0,13,106,107,0,26,66,103,4,
30,14,1,107,32,32,32,32,39,46,39,58,123,39,108,98,
112,39,58,56,48,44,39,98,112,39,58,56,48,44,39,108,
101,100,39,58,100,111,116,95,108,101,100,44,39,116,121,112,
101,39,58,39,103,101,116,39,44,125,44,0,12,67,0,1,
46,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,84,64,12,105,0,2,98,112,0,0,
11,106,0,0,0,0,0,0,0,0,84,64,12,107,0,3,
108,101,100,0,12,111,0,7,100,111,116,95,108,101,100,0,
13,108,111,0,12,109,0,4,116,121,112,101,0,0,0,0,
12,110,0,3,103,101,116,0,26,68,103,8,30,13,1,108,
32,32,32,32,39,98,114,101,97,107,39,58,123,39,108,98,
112,39,58,48,44,39,110,117,100,39,58,105,116,115,101,108,
102,44,39,116,121,112,101,39,58,39,98,114,101,97,107,39,
125,44,0,0,12,69,0,5,98,114,101,97,107,0,0,0,
12,67,0,1,46,0,0,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,0,84,64,12,105,0,2,
98,112,0,0,11,106,0,0,0,0,0,0,0,0,84,64,
12,107,0,3,108,101,100,0,12,111,0,7,100,111,116,95,
108,101,100,0,13,108,111,0,12,109,0,4,116,121,112,101,
0,0,0,0,12,110,0,3,103,101,116,0,26,68,103,8,
12,69,0,5,98,114,101,97,107,0,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,0,0,
12,105,0,3,110,117,100,0,12,109,0,6,105,116,115,101,
108,102,0,0,13,106,109,0,12,107,0,4,116,121,112,101,
0,0,0,0,12,108,0,5,98,114,101,97,107,0,0,0,
26,70,103,6,12,71,0,4,112,97,115,115,0,0,0,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,109,0,6,
105,116,115,101,108,102,0,0,13,106,109,0,12,107,0,4,
116,121,112,101,0,0,0,0,12,108,0,5,98,114,101,97,
107,0,0,0,26,70,103,6,30,13,1,109,32,32,32,32,
39,112,97,115,115,39,58,123,39,108,98,112,39,58,48,44,
39,110,117,100,39,58,105,116,115,101,108,102,44,39,116,121,
112,101,39,58,39,112,97,115,115,39,125,44,0,0,0,0,
12,71,0,4,112,97,115,115,0,0,0,0,12,103,0,3,
116,121,112,101,0,0,0,0,12,108,0,4,112,97,115,115,
0,0,0,0,26,72,103,6,12,73,0,8,99,111,110,116,
105,110,117,101,0,0,0,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,0,0,0,12,105,0,3,
110,117,100,0,12,109,0,6,105,116,115,101,108,102,0,0,
13,106,109,0,12,107,0,4,116,121,112,101,0,0,0,0,
12,108,0,8,99,111,110,116,105,110,117,101,0,0,0,0,
26,74,103,6,12,75,0,3,101,111,102,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,0,0,
12,105,0,3,110,117,100,0,12,109,0,6,105,116,115,101,
108,102,0,0,13,106,109,0,12,107,0,4,116,121,112,101,
0,0,0,0,12,108,0,4,112,97,115,115,0,0,0,0,
26,72,103,6,30,15,1,110,32,32,32,32,39,99,111,110,
116,105,110,117,101,39,58,123,39,108,98,112,39,58,48,44,
39,110,117,100,39,58,105,116,115,101,108,102,44,39,116,121,
112,101,39,58,39,99,111,110,116,105,110,117,101,39,125,44,
0,0,0,0,12,73,0,8,99,111,110,116,105,110,117,101,
0,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,0,0,12,105,0,3,110,117,100,0,
12,109,0,6,105,116,115,101,108,102,0,0,13,106,109,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,8,
99,111,110,116,105,110,117,101,0,0,0,0,26,74,103,6,
30,12,1,111,32,32,32,32,39,101,111,102,39,58,123,39,
108,98,112,39,58,48,44,39,116,121,112,101,39,58,39,101,
111,102,39,44,39,118,97,108,39,58,39,101,111,102,39,125,
44,0,0,0,12,75,0,3,101,111,102,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,0,0,
12,105,0,4,116,121,112,101,0,0,0,0,12,106,0,3,
101,111,102,0,12,107,0,3,118,97,108,0,12,108,0,3,
101,111,102,0,26,76,103,6,30,13,1,112,32,32,32,32,
39,100,101,102,39,58,123,39,108,98,112,39,58,48,44,39,
110,117,100,39,58,100,101,102,95,110,117,100,44,39,116,121,
112,101,39,58,39,100,101,102,39,44,125,44,0,0,0,0,
12,77,0,3,100,101,102,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,0,0,0,12,105,0,3,
110,117,100,0,12,109,0,7,100,101,102,95,110,117,100,0,
13,106,109,0,12,107,0,4,116,121,112,101,0,0,0,0,
12,108,0,3,100,101,102,0,26,78,103,6,30,14,1,113,
32,32,32,32,39,119,104,105,108,101,39,58,123,39,108,98,
112,39,58,48,44,39,110,117,100,39,58,119,104,105,108,101,
95,110,117,100,44,39,116,121,112,101,39,58,39,119,104,105,
108,101,39,44,125,44,0,0,12,79,0,5,119,104,105,108,
101,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,0,0,12,105,0,3,110,117,100,0,
12,109,0,9,119,104,105,108,101,95,110,117,100,0,0,0,
13,106,109,0,12,107,0,4,116,121,112,101,0,0,0,0,
12,108,0,5,119,104,105,108,101,0,0,0,26,80,103,6,
30,13,1,114,32,32,32,32,39,102,111,114,39,58,123,39,
108,98,112,39,58,48,44,39,110,117,100,39,58,102,111,114,
95,110,117,100,44,39,116,121,112,101,39,58,39,102,111,114,
39,44,125,44,0,0,0,0,12,81,0,3,102,111,114,0,
101,111,102,0,26,76,103,6,12,77,0,3,100,101,102,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,109,0,7,
102,111,114,95,110,117,100,0,13,106,109,0,12,107,0,4,
116,121,112,101,0,0,0,0,12,108,0,3,102,111,114,0,
26,82,103,6,30,13,1,115,32,32,32,32,39,116,114,121,
39,58,123,39,108,98,112,39,58,48,44,39,110,117,100,39,
58,116,114,121,95,110,117,100,44,39,116,121,112,101,39,58,
39,116,114,121,39,44,125,44,0,0,0,0,12,83,0,3,
116,114,121,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,0,0,12,105,0,3,110,117,100,0,
12,109,0,7,116,114,121,95,110,117,100,0,13,106,109,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,3,
116,114,121,0,26,84,103,6,30,12,1,116,32,32,32,32,
39,105,102,39,58,123,39,108,98,112,39,58,48,44,39,110,
117,100,39,58,105,102,95,110,117,100,44,39,116,121,112,101,
39,58,39,105,102,39,44,125,44,0,0,0,12,85,0,2,
105,102,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,0,0,12,105,0,3,110,117,100,0,
12,109,0,6,105,102,95,110,117,100,0,0,13,106,109,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,2,
105,102,0,0,26,86,103,6,30,14,1,117,32,32,32,32,
39,99,108,97,115,115,39,58,123,39,108,98,112,39,58,48,
44,39,110,117,100,39,58,99,108,97,115,115,95,110,117,100,
44,39,116,121,112,101,39,58,39,99,108,97,115,115,39,44,
125,44,0,0,12,87,0,5,99,108,97,115,115,0,0,0,
100,101,102,95,110,117,100,0,13,106,109,0,12,107,0,4,
116,121,112,101,0,0,0,0,12,108,0,3,100,101,102,0,
26,78,103,6,12,79,0,5,119,104,105,108,101,0,0,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,109,0,9,
99,108,97,115,115,95,110,117,100,0,0,0,13,106,109,0,
119,104,105,108,101,95,110,117,100,0,0,0,13,106,109,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,5,
99,108,97,115,115,0,0,0,26,88,103,6,30,17,1,118,
32,32,32,32,39,114,97,105,115,101,39,58,123,39,108,98,
112,39,58,48,44,39,110,117,100,39,58,112,114,101,102,105,
120,95,110,117,100,48,44,39,116,121,112,101,39,58,39,114,
97,105,115,101,39,44,39,98,112,39,58,50,48,44,125,44,
0,0,0,0,12,89,0,5,114,97,105,115,101,0,0,0,
119,104,105,108,101,0,0,0,26,80,103,6,12,81,0,3,
102,111,114,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,0,0,12,105,0,3,110,117,100,0,
12,109,0,7,102,111,114,95,110,117,100,0,13,106,109,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,3,
102,111,114,0,26,82,103,6,12,83,0,3,116,114,121,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,111,0,11,
112,114,101,102,105,120,95,110,117,100,48,0,13,106,111,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,5,
114,97,105,115,101,0,0,0,12,109,0,2,98,112,0,0,
11,110,0,0,0,0,0,0,0,0,52,64,26,90,103,8,
30,17,1,119,32,32,32,32,39,114,101,116,117,114,110,39,
58,123,39,108,98,112,39,58,48,44,39,110,117,100,39,58,
112,114,101,102,105,120,95,110,117,100,48,44,39,116,121,112,
101,39,58,39,114,101,116,117,114,110,39,44,39,98,112,39,
58,49,48,44,125,44,0,0,12,91,0,6,114,101,116,117,
114,110,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,109,0,7,
116,114,121,95,110,117,100,0,13,106,109,0,12,107,0,4,
116,121,112,101,0,0,0,0,12,108,0,3,116,114,121,0,
26,84,103,6,12,85,0,2,105,102,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,0,0,
12,105,0,3,110,117,100,0,12,109,0,6,105,102,95,110,
117,100,0,0,13,106,109,0,12,107,0,4,116,121,112,101,
0,0,0,0,12,108,0,2,105,102,0,0,26,86,103,6,
12,87,0,5,99,108,97,115,115,0,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,0,0,
12,105,0,3,110,117,100,0,12,109,0,9,99,108,97,115,
115,95,110,117,100,0,0,0,13,106,109,0,12,107,0,4,
116,121,112,101,0,0,0,0,12,108,0,5,99,108,97,115,
115,0,0,0,26,88,103,6,12,89,0,5,114,97,105,115,
101,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,0,0,12,105,0,3,110,117,100,0,
12,111,0,11,112,114,101,102,105,120,95,110,117,100,48,0,
13,106,111,0,12,107,0,4,116,121,112,101,0,0,0,0,
12,108,0,6,114,101,116,117,114,110,0,0,12,109,0,2,
98,112,0,0,11,110,0,0,0,0,0,0,0,0,36,64,
26,92,103,8,30,17,1,120,32,32,32,32,39,105,109,112,
111,114,116,39,58,123,39,108,98,112,39,58,48,44,39,110,
117,100,39,58,112,114,101,102,105,120,95,110,117,100,115,44,
39,116,121,112,101,39,58,39,105,109,112,111,114,116,39,44,
39,98,112,39,58,50,48,44,125,44,0,0,12,93,0,6,
105,109,112,111,114,116,0,0,12,103,0,3,108,98,112,0,
12,108,0,5,114,97,105,115,101,0,0,0,12,109,0,2,
98,112,0,0,11,110,0,0,0,0,0,0,0,0,52,64,
26,90,103,8,12,91,0,6,114,101,116,117,114,110,0,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,111,0,11,
112,114,101,102,105,120,95,110,117,100,48,0,13,106,111,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,6,
114,101,116,117,114,110,0,0,12,109,0,2,98,112,0,0,
11,110,0,0,0,0,0,0,0,0,36,64,26,92,103,8,
12,93,0,6,105,109,112,111,114,116,0,0,12,103,0,3,
108,98,112,0,11,104,0,0,0,0,0,0,0,0,0,0,
12,105,0,3,110,117,100,0,12,111,0,11,112,114,101,102,
105,120,95,110,117,100,115,0,13,106,111,0,12,107,0,4,
116,121,112,101,0,0,0,0,12,108,0,6,105,109,112,111,
114,116,0,0,12,109,0,2,98,112,0,0,11,110,0,0,
0,0,0,0,0,0,52,64,26,94,103,8,12,95,0,4,
102,114,111,109,0,0,0,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,0,0,0,12,105,0,3,
110,117,100,0,12,111,0,11,112,114,101,102,105,120,95,110,
117,100,115,0,13,106,111,0,12,107,0,4,116,121,112,101,
0,0,0,0,12,108,0,6,105,109,112,111,114,116,0,0,
110,117,100,0,12,111,0,8,102,114,111,109,95,110,117,100,
0,0,0,0,13,106,111,0,12,107,0,4,116,121,112,101,
0,0,0,0,12,108,0,4,102,114,111,109,0,0,0,0,
12,109,0,2,98,112,0,0,11,110,0,0,0,0,0,0,
0,0,52,64,26,94,103,8,30,15,1,121,32,32,32,32,
39,102,114,111,109,39,58,123,39,108,98,112,39,58,48,44,
39,110,117,100,39,58,102,114,111,109,95,110,117,100,44,39,
116,121,112,101,39,58,39,102,114,111,109,39,44,39,98,112,
39,58,50,48,44,125,44,0,12,95,0,4,102,114,111,109,
0,0,0,0,12,103,0,3,108,98,112,0,11,104,0,0,
0,0,0,0,0,0,0,0,12,105,0,3,110,117,100,0,
12,111,0,8,102,114,111,109,95,110,117,100,0,0,0,0,
13,106,111,0,12,107,0,4,116,121,112,101,0,0,0,0,
12,108,0,4,102,114,111,109,0,0,0,0,12,109,0,2,
98,112,0,0,11,110,0,0,0,0,0,0,0,0,52,64,
26,96,103,8,30,16,1,122,32,32,32,32,39,100,101,108,
39,58,123,39,108,98,112,39,58,48,44,39,110,117,100,39,
58,112,114,101,102,105,120,95,110,117,100,115,44,39,116,121,
112,101,39,58,39,100,101,108,39,44,39,98,112,39,58,49,
48,44,125,44,0,0,0,0,12,97,0,3,100,101,108,0,
0,0,52,64,26,96,103,8,12,97,0,3,100,101,108,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,111,0,11,
112,114,101,102,105,120,95,110,117,100,115,0,13,106,111,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,3,
100,101,108,0,12,109,0,2,98,112,0,0,11,110,0,0,
0,0,0,0,0,0,36,64,26,98,103,8,30,17,1,123,
32,32,32,32,39,103,108,111,98,97,108,39,58,123,39,108,
98,112,39,58,48,44,39,110,117,100,39,58,112,114,101,102,
105,120,95,110,117,100,115,44,39,116,121,112,101,39,58,39,
103,108,111,98,97,108,115,39,44,39,98,112,39,58,50,48,
44,125,44,0,12,99,0,6,103,108,111,98,97,108,0,0,
0,0,0,0,0,0,36,64,26,98,103,8,12,99,0,6,
103,108,111,98,97,108,0,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,0,0,0,12,105,0,3,
110,117,100,0,12,111,0,11,112,114,101,102,105,120,95,110,
117,100,115,0,13,106,111,0,12,107,0,4,116,121,112,101,
0,0,0,0,12,108,0,7,103,108,111,98,97,108,115,0,
12,109,0,2,98,112,0,0,11,110,0,0,0,0,0,0,
0,0,52,64,26,100,103,8,12,101,0,1,61,0,0,0,
12,103,0,3,108,98,112,0,11,104,0,0,0,0,0,0,
0,0,0,0,12,105,0,3,110,117,100,0,12,111,0,11,
112,114,101,102,105,120,95,110,117,100,115,0,13,106,111,0,
12,107,0,4,116,121,112,101,0,0,0,0,12,108,0,7,
103,108,111,98,97,108,115,0,12,109,0,2,98,112,0,0,
11,110,0,0,0,0,0,0,0,0,52,64,26,100,103,8,
30,3,1,125,32,32,32,32,39,61,39,58,123,0,0,0,
12,101,0,1,61,0,0,0,30,11,1,126,32,32,32,32,
32,32,32,32,39,108,98,112,39,58,49,48,44,39,98,112,
39,58,57,44,39,108,101,100,39,58,105,110,102,105,120,95,
108,101,100,44,0,0,0,0,12,103,0,3,108,98,112,0,
11,104,0,0,0,0,0,0,0,0,36,64,12,105,0,2,
98,112,0,0,11,106,0,0,0,0,0,0,0,0,34,64,
12,107,0,3,108,101,100,0,12,109,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,13,108,109,0,26,102,103,6,
26,44,45,58,14,43,44,0,30,7,1,130,100,101,102,32,
105,95,105,110,102,105,120,40,98,112,44,108,101,100,44,42,
118,115,41,58,0,0,0,0,16,43,0,67,44,14,0,0,
30,7,1,130,100,101,102,32,105,95,105,110,102,105,120,40,
98,112,44,108,101,100,44,42,118,115,41,58,0,0,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,7,105,95,105,110,
102,105,120,0,34,1,0,0,28,2,0,0,9,1,0,2,
0,0,36,64,12,105,0,2,98,112,0,0,11,106,0,0,
0,0,0,0,0,0,34,64,12,107,0,3,108,101,100,0,
12,109,0,9,105,110,102,105,120,95,108,101,100,0,0,0,
13,108,109,0,26,102,103,6,26,44,45,58,14,43,44,0,
16,43,0,32,44,14,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,12,4,0,1,42,0,0,0,
9,3,0,4,30,16,1,131,32,32,32,32,102,111,114,32,
118,32,105,110,32,118,115,58,32,98,97,115,101,95,100,109,
97,112,91,118,93,32,61,32,123,39,108,98,112,39,58,98,
112,44,39,98,112,39,58,98,112,44,39,108,101,100,39,58,
108,101,100,125,0,0,0,0,11,5,0,0,0,0,0,0,
0,0,0,0,42,4,3,5,18,0,0,18,12,7,0,9,
98,97,115,101,95,100,109,97,112,0,0,0,13,6,7,0,
12,8,0,3,108,98,112,0,15,9,1,0,12,10,0,2,
98,112,0,0,15,11,1,0,12,12,0,3,108,101,100,0,
15,13,2,0,26,7,8,6,10,6,4,7,18,0,255,238,
0,0,0,0,12,44,0,7,105,95,105,110,102,105,120,0,
14,44,43,0,30,13,1,132,105,95,105,110,102,105,120,40,
52,48,44,105,110,102,105,120,95,108,101,100,44,39,60,39,
44,39,62,39,44,39,60,61,39,44,39,62,61,39,44,39,
33,61,39,44,39,61,61,39,41,0,0,0,12,46,0,7,
105,95,105,110,102,105,120,0,13,45,46,0,11,46,0,0,
0,0,0,0,0,0,68,64,12,54,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,13,47,54,0,12,48,0,1,
60,0,0,0,12,49,0,1,62,0,0,0,12,50,0,2,
60,61,0,0,12,51,0,2,62,61,0,0,12,52,0,2,
33,61,0,0,12,53,0,2,61,61,0,0,31,44,46,8,
19,44,45,44,30,8,1,133,105,95,105,110,102,105,120,40,
52,48,44,105,110,102,105,120,95,105,115,44,39,105,115,39,
44,39,105,110,39,41,0,0,12,46,0,7,105,95,105,110,
9,3,0,4,11,5,0,0,0,0,0,0,0,0,0,0,
42,4,3,5,18,0,0,18,12,7,0,9,98,97,115,101,
95,100,109,97,112,0,0,0,13,6,7,0,12,8,0,3,
108,98,112,0,15,9,1,0,12,10,0,2,98,112,0,0,
15,11,1,0,12,12,0,3,108,101,100,0,15,13,2,0,
26,7,8,6,10,6,4,7,18,0,255,238,0,0,0,0,
12,44,0,7,105,95,105,110,102,105,120,0,14,44,43,0,
12,46,0,7,105,95,105,110,102,105,120,0,13,45,46,0,
11,46,0,0,0,0,0,0,0,0,68,64,12,54,0,9,
105,110,102,105,120,95,108,101,100,0,0,0,13,47,54,0,
12,48,0,1,60,0,0,0,12,49,0,1,62,0,0,0,
12,50,0,2,60,61,0,0,12,51,0,2,62,61,0,0,
12,52,0,2,33,61,0,0,12,53,0,2,61,61,0,0,
31,44,46,8,19,44,45,44,12,46,0,7,105,95,105,110,
102,105,120,0,13,45,46,0,11,46,0,0,0,0,0,0,
0,0,68,64,12,50,0,8,105,110,102,105,120,95,105,115,
0,0,0,0,13,47,50,0,12,48,0,2,105,115,0,0,
12,49,0,2,105,110,0,0,31,44,46,4,19,44,45,44,
30,15,1,134,105,95,105,110,102,105,120,40,49,48,44,105,
110,102,105,120,95,108,101,100,44,39,43,61,39,44,39,45,
61,39,44,39,42,61,39,44,39,47,61,39,44,32,39,38,
61,39,44,32,39,124,61,39,44,32,39,94,61,39,41,0,
12,46,0,7,105,95,105,110,102,105,120,0,13,45,46,0,
11,46,0,0,0,0,0,0,0,0,36,64,12,55,0,9,
105,110,102,105,120,95,108,101,100,0,0,0,13,47,55,0,
11,46,0,0,0,0,0,0,0,0,36,64,12,52,0,9,
105,110,102,105,120,95,108,101,100,0,0,0,13,47,52,0,
12,48,0,2,43,61,0,0,12,49,0,2,45,61,0,0,
12,50,0,2,42,61,0,0,12,51,0,2,47,61,0,0,
12,52,0,2,38,61,0,0,12,53,0,2,124,61,0,0,
12,54,0,2,94,61,0,0,31,44,46,9,19,44,45,44,
30,8,1,135,105,95,105,110,102,105,120,40,51,50,44,105,
110,102,105,120,95,108,101,100,44,39,97,110,100,39,44,39,
38,39,41,0,12,46,0,7,105,95,105,110,102,105,120,0,
13,45,46,0,11,46,0,0,0,0,0,0,0,0,64,64,
12,50,0,9,105,110,102,105,120,95,108,101,100,0,0,0,
13,47,50,0,12,48,0,3,97,110,100,0,12,49,0,1,
38,0,0,0,31,44,46,4,19,44,45,44,30,7,1,136,
105,95,105,110,102,105,120,40,51,49,44,105,110,102,105,120,
95,108,101,100,44,39,94,39,41,0,0,0,12,46,0,7,
105,95,105,110,102,105,120,0,13,45,46,0,11,46,0,0,
0,0,0,0,0,0,63,64,12,49,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,13,47,49,0,12,48,0,1,
94,0,0,0,31,44,46,3,19,44,45,44,30,8,1,137,
105,95,105,110,102,105,120,40,51,48,44,105,110,102,105,120,
95,108,101,100,44,39,111,114,39,44,39,124,39,41,0,0,
31,44,46,6,19,44,45,44,12,46,0,7,105,95,105,110,
102,105,120,0,13,45,46,0,11,46,0,0,0,0,0,0,
0,0,63,64,12,50,0,9,105,110,102,105,120,95,108,101,
100,0,0,0,13,47,50,0,12,48,0,3,97,110,100,0,
12,49,0,1,38,0,0,0,31,44,46,4,19,44,45,44,
12,46,0,7,105,95,105,110,102,105,120,0,13,45,46,0,
11,46,0,0,0,0,0,0,0,0,62,64,12,50,0,9,
105,110,102,105,120,95,108,101,100,0,0,0,13,47,50,0,
12,48,0,2,111,114,0,0,12,49,0,1,124,0,0,0,
31,44,46,4,19,44,45,44,30,8,1,138,105,95,105,110,
102,105,120,40,51,54,44,105,110,102,105,120,95,108,101,100,
44,39,60,60,39,44,39,62,62,39,41,0,12,46,0,7,
105,95,105,110,102,105,120,0,13,45,46,0,11,46,0,0,
0,0,0,0,0,0,66,64,12,50,0,9,105,110,102,105,
120,95,108,101,100,0,0,0,13,47,50,0,12,48,0,2,
60,60,0,0,12,49,0,2,62,62,0,0,31,44,46,4,
19,44,45,44,30,5,1,139,100,101,102,32,105,95,116,101,
114,109,115,40,42,118,115,41,58,0,0,0,16,44,0,61,
44,11,0,0,30,5,1,139,100,101,102,32,105,95,116,101,
114,109,115,40,42,118,115,41,58,0,0,0,12,1,0,13,
99,111,114,101,47,112,97,114,115,101,46,112,121,0,0,0,
33,1,0,0,12,1,0,7,105,95,116,101,114,109,115,0,
34,1,0,0,12,2,0,1,42,0,0,0,9,1,0,2,
30,14,1,140,32,32,32,32,102,111,114,32,118,32,105,110,
32,118,115,58,32,98,97,115,101,95,100,109,97,112,91,118,
93,32,61,32,123,39,108,98,112,39,58,48,44,39,110,117,
100,39,58,105,116,115,101,108,102,125,0,0,11,3,0,0,
0,0,0,0,0,0,0,0,42,2,1,3,18,0,0,20,
12,5,0,9,98,97,115,101,95,100,109,97,112,0,0,0,
13,4,5,0,12,6,0,3,108,98,112,0,11,7,0,0,
0,0,0,0,0,0,0,0,12,8,0,3,110,117,100,0,
12,10,0,6,105,116,115,101,108,102,0,0,13,9,10,0,
26,5,6,4,10,4,2,5,18,0,255,236,0,0,0,0,
12,45,0,7,105,95,116,101,114,109,115,0,14,45,44,0,
30,31,1,141,105,95,116,101,114,109,115,40,39,41,39,44,
39,125,39,44,39,93,39,44,39,59,39,44,39,58,39,44,
39,110,108,39,44,39,101,108,105,102,39,44,39,101,108,115,
101,39,44,39,84,114,117,101,39,44,39,70,97,108,115,101,
39,44,39,78,111,110,101,39,44,39,110,97,109,101,39,44,
39,115,116,114,105,110,103,39,44,39,110,117,109,98,101,114,
39,44,39,105,110,100,101,110,116,39,44,39,100,101,100,101,
110,116,39,44,39,101,120,99,101,112,116,39,41,0,0,0,
12,47,0,7,105,95,116,101,114,109,115,0,13,46,47,0,
12,47,0,1,41,0,0,0,12,48,0,1,125,0,0,0,
12,49,0,1,93,0,0,0,12,50,0,1,59,0,0,0,
12,51,0,1,58,0,0,0,12,52,0,2,110,108,0,0,
12,53,0,4,101,108,105,102,0,0,0,0,12,54,0,4,
101,108,115,101,0,0,0,0,12,55,0,4,84,114,117,101,
0,0,0,0,12,56,0,5,70,97,108,115,101,0,0,0,
12,57,0,4,78,111,110,101,0,0,0,0,12,58,0,4,
110,97,109,101,0,0,0,0,12,59,0,6,115,116,114,105,
110,103,0,0,12,60,0,6,110,117,109,98,101,114,0,0,
12,61,0,6,105,110,100,101,110,116,0,0,12,62,0,6,
100,101,100,101,110,116,0,0,12,63,0,6,101,120,99,101,
112,116,0,0,31,45,47,17,19,45,46,45,30,8,1,142,
98,97,115,101,95,100,109,97,112,91,39,110,108,39,93,91,
39,118,97,108,39,93,32,61,32,39,110,108,39,0,0,0,
12,46,0,9,98,97,115,101,95,100,109,97,112,0,0,0,
13,45,46,0,12,46,0,2,110,108,0,0,9,45,45,46,
12,46,0,2,110,108,0,0,12,47,0,3,118,97,108,0,
10,45,47,46,30,4,1,144,100,101,102,32,103,109,97,112,
40,116,44,118,41,58,0,0,16,45,0,76,44,7,0,0,
30,4,1,144,100,101,102,32,103,109,97,112,40,116,44,118,
41,58,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,4,
103,109,97,112,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,30,6,1,145,
32,32,32,32,105,102,32,118,32,110,111,116,32,105,110,32,
100,109,97,112,58,0,0,0,12,4,0,4,100,109,97,112,
0,0,0,0,13,3,4,0,36,3,3,2,11,4,0,0,
0,0,0,0,0,0,0,0,23,3,3,4,21,3,0,0,
18,0,0,25,30,9,1,146,32,32,32,32,32,32,32,32,
101,114,114,111,114,40,39,117,110,107,110,111,119,110,32,34,
37,115,34,39,37,118,44,116,41,0,0,0,12,5,0,5,
31,44,46,4,19,44,45,44,12,46,0,7,105,95,105,110,
102,105,120,0,13,45,46,0,11,46,0,0,0,0,0,0,
0,0,66,64,12,50,0,9,105,110,102,105,120,95,108,101,
100,0,0,0,13,47,50,0,12,48,0,2,60,60,0,0,
12,49,0,2,62,62,0,0,31,44,46,4,19,44,45,44,
16,44,0,30,44,11,0,0,12,2,0,1,42,0,0,0,
9,1,0,2,11,3,0,0,0,0,0,0,0,0,0,0,
42,2,1,3,18,0,0,20,12,5,0,9,98,97,115,101,
95,100,109,97,112,0,0,0,13,4,5,0,12,6,0,3,
108,98,112,0,11,7,0,0,0,0,0,0,0,0,0,0,
12,8,0,3,110,117,100,0,12,10,0,6,105,116,115,101,
108,102,0,0,13,9,10,0,26,5,6,4,10,4,2,5,
18,0,255,236,0,0,0,0,12,45,0,7,105,95,116,101,
114,109,115,0,14,45,44,0,12,47,0,7,105,95,116,101,
114,109,115,0,13,46,47,0,12,47,0,1,41,0,0,0,
12,48,0,1,125,0,0,0,12,49,0,1,93,0,0,0,
12,50,0,1,59,0,0,0,12,51,0,1,58,0,0,0,
12,52,0,2,110,108,0,0,12,53,0,4,101,108,105,102,
0,0,0,0,12,54,0,4,101,108,115,101,0,0,0,0,
12,55,0,4,84,114,117,101,0,0,0,0,12,56,0,5,
70,97,108,115,101,0,0,0,12,57,0,4,78,111,110,101,
0,0,0,0,12,58,0,4,110,97,109,101,0,0,0,0,
12,59,0,6,115,116,114,105,110,103,0,0,12,60,0,6,
110,117,109,98,101,114,0,0,12,61,0,6,105,110,100,101,
110,116,0,0,12,62,0,6,100,101,100,101,110,116,0,0,
12,63,0,6,101,120,99,101,112,116,0,0,31,45,47,17,
19,45,46,45,12,46,0,9,98,97,115,101,95,100,109,97,
112,0,0,0,13,45,46,0,12,46,0,2,110,108,0,0,
9,45,45,46,12,46,0,2,110,108,0,0,12,47,0,3,
118,97,108,0,10,45,47,46,16,45,0,38,44,7,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
12,4,0,4,100,109,97,112,0,0,0,0,13,3,4,0,
36,3,3,2,11,4,0,0,0,0,0,0,0,0,0,0,
23,3,3,4,21,3,0,0,18,0,0,15,12,5,0,5,
101,114,114,111,114,0,0,0,13,4,5,0,12,5,0,12,
117,110,107,110,111,119,110,32,34,37,115,34,0,0,0,0,
39,5,5,2,15,6,1,0,31,3,5,2,19,3,4,3,
18,0,0,1,30,5,1,147,32,32,32,32,114,101,116,117,
114,110,32,100,109,97,112,91,118,93,0,0,12,4,0,4,
100,109,97,112,0,0,0,0,13,3,4,0,9,3,3,2,
20,3,0,0,0,0,0,0,12,46,0,4,103,109,97,112,
0,0,0,0,14,46,45,0,30,3,1,149,100,101,102,32,
100,111,40,116,41,58,0,0,16,46,0,94,44,8,0,0,
30,3,1,149,100,101,102,32,100,111,40,116,41,58,0,0,
12,1,0,13,99,111,114,101,47,112,97,114,115,101,46,112,
121,0,0,0,33,1,0,0,12,1,0,2,100,111,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,12,1,150,
32,32,32,32,105,102,32,116,46,116,121,112,101,32,61,61,
32,39,115,121,109,98,111,108,39,58,32,114,32,61,32,103,
109,97,112,40,116,44,116,46,118,97,108,41,0,0,0,0,
18,0,0,1,12,4,0,4,100,109,97,112,0,0,0,0,
13,3,4,0,9,3,3,2,20,3,0,0,0,0,0,0,
12,46,0,4,103,109,97,112,0,0,0,0,14,46,45,0,
16,46,0,49,44,8,0,0,28,2,0,0,9,1,0,2,
12,3,0,4,116,121,112,101,0,0,0,0,9,2,1,3,
12,3,0,6,115,121,109,98,111,108,0,0,23,2,2,3,
21,2,0,0,18,0,0,13,12,5,0,4,103,109,97,112,
0,0,0,0,13,4,5,0,15,5,1,0,12,7,0,3,
118,97,108,0,9,6,1,7,31,3,5,2,19,3,4,3,
15,2,3,0,18,0,0,23,30,8,1,151,32,32,32,32,
101,108,115,101,58,32,114,32,61,32,103,109,97,112,40,116,
44,116,46,116,121,112,101,41,0,0,0,0,12,5,0,4,
103,109,97,112,0,0,0,0,13,4,5,0,15,5,1,0,
12,7,0,4,116,121,112,101,0,0,0,0,9,6,1,7,
31,3,5,2,19,3,4,3,15,2,3,0,18,0,0,1,
30,4,1,152,32,32,32,32,109,101,114,103,101,40,116,44,
114,41,0,0,12,5,0,5,109,101,114,103,101,0,0,0,
13,4,5,0,15,5,1,0,15,6,2,0,31,3,5,2,
19,3,4,3,30,4,1,153,32,32,32,32,114,101,116,117,
114,110,32,116,0,0,0,0,20,1,0,0,0,0,0,0,
12,47,0,2,100,111,0,0,14,47,46,0,30,5,1,154,
100,101,102,32,100,111,95,109,111,100,117,108,101,40,41,58,
0,0,0,0,16,47,0,133,44,10,0,0,30,5,1,154,
100,101,102,32,100,111,95,109,111,100,117,108,101,40,41,58,
0,0,0,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,9,
100,111,95,109,111,100,117,108,101,0,0,0,34,1,0,0,
30,5,1,155,32,32,32,32,116,111,107,32,61,32,80,46,
116,111,107,101,110,0,0,0,12,3,0,1,80,0,0,0,
15,2,3,0,18,0,0,14,12,5,0,4,103,109,97,112,
0,0,0,0,13,4,5,0,15,5,1,0,12,7,0,4,
116,121,112,101,0,0,0,0,9,6,1,7,31,3,5,2,
19,3,4,3,15,2,3,0,18,0,0,1,12,5,0,5,
109,101,114,103,101,0,0,0,13,4,5,0,15,5,1,0,
15,6,2,0,31,3,5,2,19,3,4,3,20,1,0,0,
0,0,0,0,12,47,0,2,100,111,0,0,14,47,46,0,
16,47,0,83,44,10,0,0,12,3,0,1,80,0,0,0,
13,2,3,0,12,3,0,5,116,111,107,101,110,0,0,0,
9,2,2,3,15,1,2,0,30,4,1,156,32,32,32,32,
105,116,101,109,115,32,61,32,91,93,0,0,27,3,0,0,
15,2,3,0,30,5,1,157,32,32,32,32,105,98,108,111,
99,107,40,105,116,101,109,115,41,0,0,0,12,5,0,6,
105,98,108,111,99,107,0,0,13,4,5,0,15,5,2,0,
31,3,5,1,19,3,4,3,30,5,1,158,32,32,32,32,
97,100,118,97,110,99,101,40,39,101,111,102,39,41,0,0,
12,5,0,7,97,100,118,97,110,99,101,0,13,4,5,0,
12,5,0,3,101,111,102,0,31,3,5,1,19,3,4,3,
30,6,1,159,32,32,32,32,105,102,32,108,101,110,40,105,
116,101,109,115,41,32,62,32,49,58,0,0,11,3,0,0,
0,0,0,0,0,0,240,63,12,6,0,3,108,101,110,0,
13,5,6,0,15,6,2,0,31,4,6,1,19,4,5,4,
25,3,3,4,21,3,0,0,18,0,0,34,30,14,1,160,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,84,
111,107,101,110,40,116,111,107,46,112,111,115,44,39,115,116,
97,116,101,109,101,110,116,115,39,44,39,59,39,44,105,116,
101,109,115,41,0,0,0,0,12,5,0,5,84,111,107,101,
9,2,2,3,15,1,2,0,27,3,0,0,15,2,3,0,
11,3,0,0,0,0,0,0,0,0,0,0,12,6,0,5,
99,104,101,99,107,0,0,0,13,5,6,0,12,8,0,1,
80,0,0,0,13,6,8,0,12,8,0,5,116,111,107,101,
110,0,0,0,9,6,6,8,12,7,0,3,101,111,102,0,
31,4,6,2,19,4,5,4,23,3,3,4,21,3,0,0,
18,0,0,14,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,2,5,12,7,0,5,98,108,111,99,107,0,0,0,
13,6,7,0,31,5,0,0,19,5,6,5,31,3,5,1,
19,3,4,3,18,0,255,223,11,3,0,0,0,0,0,0,
0,0,240,63,12,6,0,3,108,101,110,0,13,5,6,0,
15,6,2,0,31,4,6,1,19,4,5,4,25,3,3,4,
21,3,0,0,18,0,0,19,12,5,0,5,84,111,107,101,
110,0,0,0,13,4,5,0,12,9,0,3,112,111,115,0,
9,5,1,9,12,6,0,10,115,116,97,116,101,109,101,110,
116,115,0,0,12,7,0,1,59,0,0,0,15,8,2,0,
31,3,5,4,19,3,4,3,20,3,0,0,18,0,0,1,
30,6,1,161,32,32,32,32,114,101,116,117,114,110,32,105,
116,101,109,115,46,112,111,112,40,41,0,0,12,5,0,3,
112,111,112,0,9,4,2,5,31,3,0,0,19,3,4,3,
20,3,0,0,0,0,0,0,12,48,0,9,100,111,95,109,
111,100,117,108,101,0,0,0,14,48,47,0,30,7,1,163,
100,101,102,32,112,97,114,115,101,40,115,44,116,111,107,101,
110,115,44,119,114,97,112,61,48,41,58,0,16,48,0,114,
44,9,0,0,30,7,1,163,100,101,102,32,112,97,114,115,
101,40,115,44,116,111,107,101,110,115,44,119,114,97,112,61,
48,41,58,0,12,1,0,13,99,111,114,101,47,112,97,114,
115,101,46,112,121,0,0,0,33,1,0,0,12,1,0,5,
112,97,114,115,101,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,11,3,0,0,
0,0,0,0,0,0,0,0,28,4,0,0,32,3,0,4,
30,4,1,164,32,32,32,32,103,108,111,98,97,108,32,80,
0,0,0,0,30,7,1,165,32,32,32,32,115,32,61,32,
116,111,107,101,110,105,122,101,46,99,108,101,97,110,40,115,
41,0,0,0,12,6,0,8,116,111,107,101,110,105,122,101,
0,0,0,0,13,5,6,0,12,6,0,5,99,108,101,97,
110,0,0,0,9,5,5,6,15,6,1,0,31,4,6,1,
19,4,5,4,15,1,4,0,30,8,1,166,32,32,32,32,
80,61,80,68,97,116,97,40,115,44,116,111,107,101,110,115,
41,59,32,80,46,105,110,105,116,40,41,0,12,4,0,1,
80,0,0,0,12,7,0,5,80,68,97,116,97,0,0,0,
13,6,7,0,15,7,1,0,15,8,2,0,31,5,7,2,
19,5,6,5,14,4,5,0,12,6,0,1,80,0,0,0,
13,5,6,0,12,6,0,4,105,110,105,116,0,0,0,0,
9,5,5,6,31,4,0,0,19,4,5,4,30,5,1,167,
32,32,32,32,114,32,61,32,100,111,95,109,111,100,117,108,
101,40,41,0,12,7,0,9,100,111,95,109,111,100,117,108,
101,0,0,0,13,6,7,0,31,5,0,0,19,5,6,5,
15,4,5,0,30,4,1,168,32,32,32,32,80,32,61,32,
78,111,110,101,0,0,0,0,12,5,0,1,80,0,0,0,
28,6,0,0,14,5,6,0,30,4,1,169,32,32,32,32,
114,101,116,117,114,110,32,114,0,0,0,0,20,4,0,0,
0,0,0,0,12,49,0,5,112,97,114,115,101,0,0,0,
14,49,48,0,0,0,0,0,
12,5,0,3,112,111,112,0,9,4,2,5,31,3,0,0,
19,3,4,3,20,3,0,0,0,0,0,0,12,48,0,9,
100,111,95,109,111,100,117,108,101,0,0,0,14,48,47,0,
16,48,0,58,44,9,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,11,3,0,0,0,0,0,0,
0,0,0,0,28,4,0,0,32,3,0,4,12,6,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,13,5,6,0,
12,6,0,5,99,108,101,97,110,0,0,0,9,5,5,6,
15,6,1,0,31,4,6,1,19,4,5,4,15,1,4,0,
12,4,0,1,80,0,0,0,12,7,0,5,80,68,97,116,
97,0,0,0,13,6,7,0,15,7,1,0,15,8,2,0,
31,5,7,2,19,5,6,5,14,4,5,0,12,6,0,1,
80,0,0,0,13,5,6,0,12,6,0,4,105,110,105,116,
0,0,0,0,9,5,5,6,31,4,0,0,19,4,5,4,
12,7,0,9,100,111,95,109,111,100,117,108,101,0,0,0,
13,6,7,0,31,5,0,0,19,5,6,5,15,4,5,0,
12,5,0,1,80,0,0,0,28,6,0,0,14,5,6,0,
20,4,0,0,0,0,0,0,12,49,0,5,112,97,114,115,
101,0,0,0,14,49,48,0,0,0,0,0,
};
unsigned char tp_encode[] = {
44,104,0,0,30,6,0,1,105,109,112,111,114,116,32,116,
111,107,101,110,105,122,101,44,32,115,121,115,0,0,0,0,
12,0,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,0,0,0,12,0,0,1,63,0,0,0,
34,0,0,0,12,2,0,6,105,109,112,111,114,116,0,0,
44,104,0,0,12,2,0,6,105,109,112,111,114,116,0,0,
13,1,2,0,12,2,0,8,116,111,107,101,110,105,122,101,
0,0,0,0,31,0,2,1,19,0,1,0,12,1,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,14,1,0,0,
12,2,0,6,105,109,112,111,114,116,0,0,13,1,2,0,
12,2,0,3,115,121,115,0,31,0,2,1,19,0,1,0,
12,1,0,3,115,121,115,0,14,1,0,0,30,7,0,2,
102,114,111,109,32,116,111,107,101,110,105,122,101,32,105,109,
112,111,114,116,32,84,111,107,101,110,0,0,12,2,0,6,
105,109,112,111,114,116,0,0,13,1,2,0,12,2,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,31,0,2,1,
19,0,1,0,12,2,0,8,95,95,100,105,99,116,95,95,
0,0,0,0,13,1,2,0,12,3,0,5,84,111,107,101,
110,0,0,0,9,2,0,3,12,0,0,5,84,111,107,101,
110,0,0,0,10,1,0,2,30,8,0,3,105,102,32,110,
111,116,32,34,116,105,110,121,112,121,34,32,105,110,32,115,
121,115,46,118,101,114,115,105,111,110,58,0,12,2,0,3,
115,121,115,0,13,1,2,0,12,2,0,7,118,101,114,115,
105,111,110,0,9,1,1,2,12,2,0,6,116,105,110,121,
112,121,0,0,36,1,1,2,47,0,1,0,21,0,0,0,
18,0,0,30,30,6,0,4,32,32,32,32,102,114,111,109,
32,98,111,111,116,32,105,109,112,111,114,116,32,42,0,0,
12,2,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
31,0,2,1,19,0,1,0,12,2,0,8,95,95,100,105,
99,116,95,95,0,0,0,0,13,1,2,0,12,3,0,5,
84,111,107,101,110,0,0,0,9,2,0,3,12,0,0,5,
84,111,107,101,110,0,0,0,10,1,0,2,12,2,0,3,
115,116,114,0,13,1,2,0,11,2,0,0,0,0,0,0,
0,0,240,63,31,0,2,1,19,0,1,0,12,1,0,1,
46,0,0,0,36,0,0,1,21,0,0,0,18,0,0,23,
12,2,0,6,105,109,112,111,114,116,0,0,13,1,2,0,
12,2,0,4,98,111,111,116,0,0,0,0,31,0,2,1,
19,0,1,0,12,3,0,5,109,101,114,103,101,0,0,0,
13,2,3,0,12,5,0,8,95,95,100,105,99,116,95,95,
0,0,0,0,13,3,5,0,15,4,0,0,31,1,3,2,
19,1,2,1,18,0,0,1,30,94,0,6,69,79,70,44,
65,68,68,44,83,85,66,44,77,85,76,44,68,73,86,44,
80,79,87,44,66,73,84,65,78,68,44,66,73,84,79,82,
44,67,77,80,44,71,69,84,44,83,69,84,44,78,85,77,
66,69,82,44,83,84,82,73,78,71,44,71,71,69,84,44,
71,83,69,84,44,77,79,86,69,44,68,69,70,44,80,65,
83,83,44,74,85,77,80,44,67,65,76,76,44,82,69,84,
85,82,78,44,73,70,44,68,69,66,85,71,44,69,81,44,
76,69,44,76,84,44,68,73,67,84,44,76,73,83,84,44,
78,79,78,69,44,76,69,78,44,80,79,83,44,80,65,82,
65,77,83,44,73,71,69,84,44,70,73,76,69,44,78,65,
77,69,44,78,69,44,72,65,83,44,82,65,73,83,69,44,
83,69,84,74,77,80,44,77,79,68,44,76,83,72,44,82,
83,72,44,73,84,69,82,44,68,69,76,44,82,69,71,83,
44,66,73,84,88,79,82,44,73,70,78,44,78,79,84,44,
66,73,84,78,79,84,32,61,32,48,44,49,44,50,44,51,
44,52,44,53,44,54,44,55,44,56,44,57,44,49,48,44,
49,49,44,49,50,44,49,51,44,49,52,44,49,53,44,49,
54,44,49,55,44,49,56,44,49,57,44,50,48,44,50,49,
44,50,50,44,50,51,44,50,52,44,50,53,44,50,54,44,
50,55,44,50,56,44,50,57,44,51,48,44,51,49,44,51,
50,44,51,51,44,51,52,44,51,53,44,51,54,44,51,55,
44,51,56,44,51,57,44,52,48,44,52,49,44,52,50,44,
52,51,44,52,52,44,52,53,44,52,54,44,52,55,44,52,
56,0,0,0,11,1,0,0,0,0,0,0,0,0,0,0,
15,0,1,0,11,2,0,0,0,0,0,0,0,0,240,63,
15,1,2,0,11,3,0,0,0,0,0,0,0,0,0,64,
15,2,3,0,11,4,0,0,0,0,0,0,0,0,8,64,
15,3,4,0,11,5,0,0,0,0,0,0,0,0,16,64,
15,4,5,0,11,6,0,0,0,0,0,0,0,0,20,64,
15,5,6,0,11,7,0,0,0,0,0,0,0,0,24,64,
15,6,7,0,11,8,0,0,0,0,0,0,0,0,28,64,
15,7,8,0,11,9,0,0,0,0,0,0,0,0,32,64,
15,8,9,0,11,10,0,0,0,0,0,0,0,0,34,64,
15,9,10,0,11,11,0,0,0,0,0,0,0,0,36,64,
15,10,11,0,11,12,0,0,0,0,0,0,0,0,38,64,
15,11,12,0,11,13,0,0,0,0,0,0,0,0,40,64,
15,12,13,0,11,14,0,0,0,0,0,0,0,0,42,64,
15,13,14,0,11,15,0,0,0,0,0,0,0,0,44,64,
15,14,15,0,11,16,0,0,0,0,0,0,0,0,46,64,
15,15,16,0,11,17,0,0,0,0,0,0,0,0,48,64,
15,16,17,0,11,18,0,0,0,0,0,0,0,0,49,64,
15,17,18,0,11,19,0,0,0,0,0,0,0,0,50,64,
15,18,19,0,11,20,0,0,0,0,0,0,0,0,51,64,
15,19,20,0,11,21,0,0,0,0,0,0,0,0,52,64,
15,20,21,0,11,22,0,0,0,0,0,0,0,0,53,64,
15,21,22,0,11,23,0,0,0,0,0,0,0,0,54,64,
15,22,23,0,11,24,0,0,0,0,0,0,0,0,55,64,
15,23,24,0,11,25,0,0,0,0,0,0,0,0,56,64,
15,24,25,0,11,26,0,0,0,0,0,0,0,0,57,64,
15,25,26,0,11,27,0,0,0,0,0,0,0,0,58,64,
15,26,27,0,11,28,0,0,0,0,0,0,0,0,59,64,
15,27,28,0,11,29,0,0,0,0,0,0,0,0,60,64,
15,28,29,0,11,30,0,0,0,0,0,0,0,0,61,64,
15,29,30,0,11,31,0,0,0,0,0,0,0,0,62,64,
15,30,31,0,11,32,0,0,0,0,0,0,0,0,63,64,
15,31,32,0,11,33,0,0,0,0,0,0,0,0,64,64,
15,32,33,0,11,34,0,0,0,0,0,0,0,128,64,64,
15,33,34,0,11,35,0,0,0,0,0,0,0,0,65,64,
15,34,35,0,11,36,0,0,0,0,0,0,0,128,65,64,
15,35,36,0,11,37,0,0,0,0,0,0,0,0,66,64,
15,36,37,0,11,38,0,0,0,0,0,0,0,128,66,64,
15,37,38,0,11,39,0,0,0,0,0,0,0,0,67,64,
15,38,39,0,11,40,0,0,0,0,0,0,0,128,67,64,
15,39,40,0,11,41,0,0,0,0,0,0,0,0,68,64,
15,40,41,0,11,42,0,0,0,0,0,0,0,128,68,64,
15,41,42,0,11,43,0,0,0,0,0,0,0,0,69,64,
15,42,43,0,11,44,0,0,0,0,0,0,0,128,69,64,
15,43,44,0,11,45,0,0,0,0,0,0,0,0,70,64,
15,44,45,0,11,46,0,0,0,0,0,0,0,128,70,64,
15,45,46,0,11,47,0,0,0,0,0,0,0,0,71,64,
15,46,47,0,11,48,0,0,0,0,0,0,0,128,71,64,
15,47,48,0,11,49,0,0,0,0,0,0,0,0,72,64,
15,48,49,0,12,49,0,3,69,79,70,0,14,49,0,0,
12,0,0,3,65,68,68,0,14,0,1,0,12,0,0,3,
83,85,66,0,14,0,2,0,12,0,0,3,77,85,76,0,
14,0,3,0,12,0,0,3,68,73,86,0,14,0,4,0,
12,0,0,3,80,79,87,0,14,0,5,0,12,0,0,6,
66,73,84,65,78,68,0,0,14,0,6,0,12,0,0,5,
66,73,84,79,82,0,0,0,14,0,7,0,12,0,0,3,
67,77,80,0,14,0,8,0,12,0,0,3,71,69,84,0,
14,0,9,0,12,0,0,3,83,69,84,0,14,0,10,0,
12,0,0,6,78,85,77,66,69,82,0,0,14,0,11,0,
12,0,0,6,83,84,82,73,78,71,0,0,14,0,12,0,
12,0,0,4,71,71,69,84,0,0,0,0,14,0,13,0,
12,0,0,4,71,83,69,84,0,0,0,0,14,0,14,0,
12,0,0,4,77,79,86,69,0,0,0,0,14,0,15,0,
12,0,0,3,68,69,70,0,14,0,16,0,12,0,0,4,
80,65,83,83,0,0,0,0,14,0,17,0,12,0,0,4,
74,85,77,80,0,0,0,0,14,0,18,0,12,0,0,4,
67,65,76,76,0,0,0,0,14,0,19,0,12,0,0,6,
82,69,84,85,82,78,0,0,14,0,20,0,12,0,0,2,
73,70,0,0,14,0,21,0,12,0,0,5,68,69,66,85,
71,0,0,0,14,0,22,0,12,0,0,2,69,81,0,0,
14,0,23,0,12,0,0,2,76,69,0,0,14,0,24,0,
12,0,0,2,76,84,0,0,14,0,25,0,12,0,0,4,
68,73,67,84,0,0,0,0,14,0,26,0,12,0,0,4,
76,73,83,84,0,0,0,0,14,0,27,0,12,0,0,4,
78,79,78,69,0,0,0,0,14,0,28,0,12,0,0,3,
76,69,78,0,14,0,29,0,12,0,0,3,80,79,83,0,
14,0,30,0,12,0,0,6,80,65,82,65,77,83,0,0,
14,0,31,0,12,0,0,4,73,71,69,84,0,0,0,0,
14,0,32,0,12,0,0,4,70,73,76,69,0,0,0,0,
14,0,33,0,12,0,0,4,78,65,77,69,0,0,0,0,
14,0,34,0,12,0,0,2,78,69,0,0,14,0,35,0,
12,0,0,3,72,65,83,0,14,0,36,0,12,0,0,5,
82,65,73,83,69,0,0,0,14,0,37,0,12,0,0,6,
83,69,84,74,77,80,0,0,14,0,38,0,12,0,0,3,
77,79,68,0,14,0,39,0,12,0,0,3,76,83,72,0,
14,0,40,0,12,0,0,3,82,83,72,0,14,0,41,0,
12,0,0,4,73,84,69,82,0,0,0,0,14,0,42,0,
12,0,0,3,68,69,76,0,14,0,43,0,12,0,0,4,
82,69,71,83,0,0,0,0,14,0,44,0,12,0,0,6,
66,73,84,88,79,82,0,0,14,0,45,0,12,0,0,3,
73,70,78,0,14,0,46,0,12,0,0,3,78,79,84,0,
14,0,47,0,12,0,0,6,66,73,84,78,79,84,0,0,
14,0,48,0,30,4,0,8,99,108,97,115,115,32,68,83,
116,97,116,101,58,0,0,0,26,0,0,0,12,1,0,6,
68,83,116,97,116,101,0,0,14,1,0,0,12,3,0,7,
115,101,116,109,101,116,97,0,13,2,3,0,15,3,0,0,
12,5,0,6,111,98,106,101,99,116,0,0,13,4,5,0,
31,1,3,2,19,1,2,1,16,1,0,167,44,11,0,0,
30,9,0,9,32,32,32,32,100,101,102,32,95,95,105,110,
105,116,95,95,40,115,101,108,102,44,99,111,100,101,44,102,
110,97,109,101,41,58,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,8,95,95,105,110,105,116,95,95,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,30,11,0,10,
32,32,32,32,32,32,32,32,115,101,108,102,46,99,111,100,
101,44,32,115,101,108,102,46,102,110,97,109,101,32,61,32,
99,111,100,101,44,102,110,97,109,101,0,0,15,4,2,0,
19,1,2,1,18,0,0,1,11,1,0,0,0,0,0,0,
0,0,0,0,15,0,1,0,11,2,0,0,0,0,0,0,
0,0,240,63,15,1,2,0,11,3,0,0,0,0,0,0,
0,0,0,64,15,2,3,0,11,4,0,0,0,0,0,0,
0,0,8,64,15,3,4,0,11,5,0,0,0,0,0,0,
0,0,16,64,15,4,5,0,11,6,0,0,0,0,0,0,
0,0,20,64,15,5,6,0,11,7,0,0,0,0,0,0,
0,0,24,64,15,6,7,0,11,8,0,0,0,0,0,0,
0,0,28,64,15,7,8,0,11,9,0,0,0,0,0,0,
0,0,32,64,15,8,9,0,11,10,0,0,0,0,0,0,
0,0,34,64,15,9,10,0,11,11,0,0,0,0,0,0,
0,0,36,64,15,10,11,0,11,12,0,0,0,0,0,0,
0,0,38,64,15,11,12,0,11,13,0,0,0,0,0,0,
0,0,40,64,15,12,13,0,11,14,0,0,0,0,0,0,
0,0,42,64,15,13,14,0,11,15,0,0,0,0,0,0,
0,0,44,64,15,14,15,0,11,16,0,0,0,0,0,0,
0,0,46,64,15,15,16,0,11,17,0,0,0,0,0,0,
0,0,48,64,15,16,17,0,11,18,0,0,0,0,0,0,
0,0,49,64,15,17,18,0,11,19,0,0,0,0,0,0,
0,0,50,64,15,18,19,0,11,20,0,0,0,0,0,0,
0,0,51,64,15,19,20,0,11,21,0,0,0,0,0,0,
0,0,52,64,15,20,21,0,11,22,0,0,0,0,0,0,
0,0,53,64,15,21,22,0,11,23,0,0,0,0,0,0,
0,0,54,64,15,22,23,0,11,24,0,0,0,0,0,0,
0,0,55,64,15,23,24,0,11,25,0,0,0,0,0,0,
0,0,56,64,15,24,25,0,11,26,0,0,0,0,0,0,
0,0,57,64,15,25,26,0,11,27,0,0,0,0,0,0,
0,0,58,64,15,26,27,0,11,28,0,0,0,0,0,0,
0,0,59,64,15,27,28,0,11,29,0,0,0,0,0,0,
0,0,60,64,15,28,29,0,11,30,0,0,0,0,0,0,
0,0,61,64,15,29,30,0,11,31,0,0,0,0,0,0,
0,0,62,64,15,30,31,0,11,32,0,0,0,0,0,0,
0,0,63,64,15,31,32,0,11,33,0,0,0,0,0,0,
0,0,64,64,15,32,33,0,11,34,0,0,0,0,0,0,
0,128,64,64,15,33,34,0,11,35,0,0,0,0,0,0,
0,0,65,64,15,34,35,0,11,36,0,0,0,0,0,0,
0,128,65,64,15,35,36,0,11,37,0,0,0,0,0,0,
0,0,66,64,15,36,37,0,11,38,0,0,0,0,0,0,
0,128,66,64,15,37,38,0,11,39,0,0,0,0,0,0,
0,0,67,64,15,38,39,0,11,40,0,0,0,0,0,0,
0,128,67,64,15,39,40,0,11,41,0,0,0,0,0,0,
0,0,68,64,15,40,41,0,11,42,0,0,0,0,0,0,
0,128,68,64,15,41,42,0,11,43,0,0,0,0,0,0,
0,0,69,64,15,42,43,0,11,44,0,0,0,0,0,0,
0,128,69,64,15,43,44,0,11,45,0,0,0,0,0,0,
0,0,70,64,15,44,45,0,12,45,0,3,69,79,70,0,
14,45,0,0,12,0,0,3,65,68,68,0,14,0,1,0,
12,0,0,3,83,85,66,0,14,0,2,0,12,0,0,3,
77,85,76,0,14,0,3,0,12,0,0,3,68,73,86,0,
14,0,4,0,12,0,0,3,80,79,87,0,14,0,5,0,
12,0,0,3,65,78,68,0,14,0,6,0,12,0,0,2,
79,82,0,0,14,0,7,0,12,0,0,3,67,77,80,0,
14,0,8,0,12,0,0,3,71,69,84,0,14,0,9,0,
12,0,0,3,83,69,84,0,14,0,10,0,12,0,0,6,
78,85,77,66,69,82,0,0,14,0,11,0,12,0,0,6,
83,84,82,73,78,71,0,0,14,0,12,0,12,0,0,4,
71,71,69,84,0,0,0,0,14,0,13,0,12,0,0,4,
71,83,69,84,0,0,0,0,14,0,14,0,12,0,0,4,
77,79,86,69,0,0,0,0,14,0,15,0,12,0,0,3,
68,69,70,0,14,0,16,0,12,0,0,4,80,65,83,83,
0,0,0,0,14,0,17,0,12,0,0,4,74,85,77,80,
0,0,0,0,14,0,18,0,12,0,0,4,67,65,76,76,
0,0,0,0,14,0,19,0,12,0,0,6,82,69,84,85,
82,78,0,0,14,0,20,0,12,0,0,2,73,70,0,0,
14,0,21,0,12,0,0,5,68,69,66,85,71,0,0,0,
14,0,22,0,12,0,0,2,69,81,0,0,14,0,23,0,
12,0,0,2,76,69,0,0,14,0,24,0,12,0,0,2,
76,84,0,0,14,0,25,0,12,0,0,4,68,73,67,84,
0,0,0,0,14,0,26,0,12,0,0,4,76,73,83,84,
0,0,0,0,14,0,27,0,12,0,0,4,78,79,78,69,
0,0,0,0,14,0,28,0,12,0,0,3,76,69,78,0,
14,0,29,0,12,0,0,3,80,79,83,0,14,0,30,0,
12,0,0,6,80,65,82,65,77,83,0,0,14,0,31,0,
12,0,0,4,73,71,69,84,0,0,0,0,14,0,32,0,
12,0,0,4,70,73,76,69,0,0,0,0,14,0,33,0,
12,0,0,4,78,65,77,69,0,0,0,0,14,0,34,0,
12,0,0,2,78,69,0,0,14,0,35,0,12,0,0,3,
72,65,83,0,14,0,36,0,12,0,0,5,82,65,73,83,
69,0,0,0,14,0,37,0,12,0,0,6,83,69,84,74,
77,80,0,0,14,0,38,0,12,0,0,3,77,79,68,0,
14,0,39,0,12,0,0,3,76,83,72,0,14,0,40,0,
12,0,0,3,82,83,72,0,14,0,41,0,12,0,0,4,
73,84,69,82,0,0,0,0,14,0,42,0,12,0,0,3,
68,69,76,0,14,0,43,0,12,0,0,4,82,69,71,83,
0,0,0,0,14,0,44,0,26,0,0,0,12,1,0,6,
68,83,116,97,116,101,0,0,14,1,0,0,16,1,0,86,
44,11,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,15,4,2,0,
15,5,3,0,12,6,0,4,99,111,100,101,0,0,0,0,
10,1,6,4,12,4,0,5,102,110,97,109,101,0,0,0,
10,1,4,5,30,11,0,11,32,32,32,32,32,32,32,32,
115,101,108,102,46,108,105,110,101,115,32,61,32,115,101,108,
102,46,99,111,100,101,46,115,112,108,105,116,40,39,92,110,
39,41,0,0,12,6,0,4,99,111,100,101,0,0,0,0,
10,1,4,5,12,6,0,4,99,111,100,101,0,0,0,0,
9,5,1,6,12,6,0,5,115,112,108,105,116,0,0,0,
9,5,5,6,12,6,0,1,10,0,0,0,31,4,6,1,
19,4,5,4,12,5,0,5,108,105,110,101,115,0,0,0,
10,1,5,4,30,27,0,13,32,32,32,32,32,32,32,32,
115,101,108,102,46,115,116,97,99,107,44,115,101,108,102,46,
111,117,116,44,115,101,108,102,46,95,115,99,111,112,101,105,
44,115,101,108,102,46,116,115,116,97,99,107,44,115,101,108,
102,46,95,116,97,103,105,44,115,101,108,102,46,100,97,116,
97,32,61,32,91,93,44,91,40,39,116,97,103,39,44,39,
69,79,70,39,41,93,44,48,44,91,93,44,48,44,123,125,
0,0,0,0,27,5,0,0,15,4,5,0,12,8,0,3,
10,1,5,4,27,5,0,0,15,4,5,0,12,8,0,3,
116,97,103,0,12,9,0,3,69,79,70,0,27,7,8,2,
27,6,7,1,15,5,6,0,11,7,0,0,0,0,0,0,
0,0,0,0,15,6,7,0,27,8,0,0,15,7,8,0,
3135,554 → 1746,306
10,1,4,6,12,4,0,6,116,115,116,97,99,107,0,0,
10,1,4,7,12,4,0,5,95,116,97,103,105,0,0,0,
10,1,4,8,12,4,0,4,100,97,116,97,0,0,0,0,
10,1,4,9,30,7,0,14,32,32,32,32,32,32,32,32,
115,101,108,102,46,101,114,114,111,114,32,61,32,70,97,108,
115,101,0,0,11,4,0,0,0,0,0,0,0,0,0,0,
10,1,4,9,11,4,0,0,0,0,0,0,0,0,0,0,
12,5,0,5,101,114,114,111,114,0,0,0,10,1,5,4,
0,0,0,0,12,2,0,8,95,95,105,110,105,116,95,95,
0,0,0,0,10,0,2,1,16,2,1,93,44,19,0,0,
30,8,0,15,32,32,32,32,100,101,102,32,98,101,103,105,
110,40,115,101,108,102,44,103,98,108,61,70,97,108,115,101,
41,58,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,5,
98,101,103,105,110,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,11,2,0,0,0,0,0,0,0,0,0,0,
28,3,0,0,32,2,0,3,30,46,0,16,32,32,32,32,
32,32,32,32,105,102,32,108,101,110,40,115,101,108,102,46,
115,116,97,99,107,41,58,32,115,101,108,102,46,115,116,97,
99,107,46,97,112,112,101,110,100,40,40,115,101,108,102,46,
118,97,114,115,44,115,101,108,102,46,114,50,110,44,115,101,
108,102,46,110,50,114,44,115,101,108,102,46,95,116,109,112,
105,44,115,101,108,102,46,109,114,101,103,44,115,101,108,102,
46,115,110,117,109,44,115,101,108,102,46,95,103,108,111,98,
97,108,115,44,115,101,108,102,46,108,105,110,101,110,111,44,
115,101,108,102,46,103,108,111,98,97,108,115,44,115,101,108,
102,46,114,103,108,111,98,97,108,115,44,115,101,108,102,46,
99,114,101,103,115,44,115,101,108,102,46,116,109,112,99,41,
41,0,0,0,12,5,0,3,108,101,110,0,13,4,5,0,
12,6,0,5,115,116,97,99,107,0,0,0,9,5,1,6,
31,3,5,1,19,3,4,3,21,3,0,0,18,0,0,61,
12,5,0,5,115,116,97,99,107,0,0,0,9,4,1,5,
12,5,0,6,97,112,112,101,110,100,0,0,9,4,4,5,
12,18,0,4,118,97,114,115,0,0,0,0,9,6,1,18,
12,18,0,3,114,50,110,0,9,7,1,18,12,18,0,3,
110,50,114,0,9,8,1,18,12,18,0,5,95,116,109,112,
105,0,0,0,9,9,1,18,12,18,0,4,109,114,101,103,
0,0,0,0,9,10,1,18,12,18,0,4,115,110,117,109,
0,0,0,0,9,11,1,18,12,18,0,8,95,103,108,111,
98,97,108,115,0,0,0,0,9,12,1,18,12,18,0,6,
108,105,110,101,110,111,0,0,9,13,1,18,12,18,0,7,
103,108,111,98,97,108,115,0,9,14,1,18,12,18,0,8,
114,103,108,111,98,97,108,115,0,0,0,0,9,15,1,18,
12,18,0,5,99,114,101,103,115,0,0,0,9,16,1,18,
12,18,0,4,116,109,112,99,0,0,0,0,9,17,1,18,
27,5,6,12,31,3,5,1,19,3,4,3,18,0,0,24,
30,10,0,17,32,32,32,32,32,32,32,32,101,108,115,101,
58,32,115,101,108,102,46,115,116,97,99,107,46,97,112,112,
101,110,100,40,78,111,110,101,41,0,0,0,12,5,0,5,
115,116,97,99,107,0,0,0,9,4,1,5,12,5,0,6,
97,112,112,101,110,100,0,0,9,4,4,5,28,5,0,0,
31,3,5,1,19,3,4,3,18,0,0,1,30,50,0,18,
32,32,32,32,32,32,32,32,115,101,108,102,46,118,97,114,
115,44,115,101,108,102,46,114,50,110,44,115,101,108,102,46,
110,50,114,44,115,101,108,102,46,95,116,109,112,105,44,115,
101,108,102,46,109,114,101,103,44,115,101,108,102,46,115,110,
117,109,44,115,101,108,102,46,95,103,108,111,98,97,108,115,
44,115,101,108,102,46,108,105,110,101,110,111,44,115,101,108,
102,46,103,108,111,98,97,108,115,44,115,101,108,102,46,114,
103,108,111,98,97,108,115,44,115,101,108,102,46,99,114,101,
103,115,44,115,101,108,102,46,116,109,112,99,32,61,32,91,
93,44,123,125,44,123,125,44,48,44,48,44,115,116,114,40,
115,101,108,102,46,95,115,99,111,112,101,105,41,44,103,98,
108,44,45,49,44,91,93,44,91,93,44,91,39,114,101,103,
115,39,93,44,48,0,0,0,27,4,0,0,15,3,4,0,
26,5,0,0,15,4,5,0,26,6,0,0,15,5,6,0,
11,7,0,0,0,0,0,0,0,0,0,0,15,6,7,0,
11,8,0,0,0,0,0,0,0,0,0,0,15,7,8,0,
12,11,0,3,115,116,114,0,13,10,11,0,12,12,0,7,
95,115,99,111,112,101,105,0,9,11,1,12,31,9,11,1,
19,9,10,9,15,8,9,0,15,9,2,0,11,11,0,0,
0,0,0,0,0,0,240,191,15,10,11,0,27,12,0,0,
15,11,12,0,27,13,0,0,15,12,13,0,12,15,0,4,
114,101,103,115,0,0,0,0,27,14,15,1,15,13,14,0,
11,15,0,0,0,0,0,0,0,0,0,0,15,14,15,0,
12,15,0,4,118,97,114,115,0,0,0,0,10,1,15,3,
12,3,0,3,114,50,110,0,10,1,3,4,12,3,0,3,
110,50,114,0,10,1,3,5,12,3,0,5,95,116,109,112,
105,0,0,0,10,1,3,6,12,3,0,4,109,114,101,103,
0,0,0,0,10,1,3,7,12,3,0,4,115,110,117,109,
0,0,0,0,10,1,3,8,12,3,0,8,95,103,108,111,
98,97,108,115,0,0,0,0,10,1,3,9,12,3,0,6,
108,105,110,101,110,111,0,0,10,1,3,10,12,3,0,7,
103,108,111,98,97,108,115,0,10,1,3,11,12,3,0,8,
114,103,108,111,98,97,108,115,0,0,0,0,10,1,3,12,
12,3,0,5,99,114,101,103,115,0,0,0,10,1,3,13,
12,3,0,4,116,109,112,99,0,0,0,0,10,1,3,14,
30,7,0,19,32,32,32,32,32,32,32,32,115,101,108,102,
46,95,115,99,111,112,101,105,32,43,61,32,49,0,0,0,
0,0,0,0,10,0,2,1,16,2,0,193,44,18,0,0,
28,2,0,0,9,1,0,2,11,2,0,0,0,0,0,0,
0,0,0,0,28,3,0,0,32,2,0,3,12,5,0,3,
108,101,110,0,13,4,5,0,12,6,0,5,115,116,97,99,
107,0,0,0,9,5,1,6,31,3,5,1,19,3,4,3,
21,3,0,0,18,0,0,56,12,5,0,5,115,116,97,99,
107,0,0,0,9,4,1,5,12,5,0,6,97,112,112,101,
110,100,0,0,9,4,4,5,12,17,0,4,118,97,114,115,
0,0,0,0,9,6,1,17,12,17,0,3,114,50,110,0,
9,7,1,17,12,17,0,3,110,50,114,0,9,8,1,17,
12,17,0,5,95,116,109,112,105,0,0,0,9,9,1,17,
12,17,0,4,109,114,101,103,0,0,0,0,9,10,1,17,
12,17,0,4,115,110,117,109,0,0,0,0,9,11,1,17,
12,17,0,8,95,103,108,111,98,97,108,115,0,0,0,0,
9,12,1,17,12,17,0,6,108,105,110,101,110,111,0,0,
9,13,1,17,12,17,0,7,103,108,111,98,97,108,115,0,
9,14,1,17,12,17,0,5,99,114,101,103,115,0,0,0,
9,15,1,17,12,17,0,4,116,109,112,99,0,0,0,0,
9,16,1,17,27,5,6,11,31,3,5,1,19,3,4,3,
18,0,0,13,12,5,0,5,115,116,97,99,107,0,0,0,
9,4,1,5,12,5,0,6,97,112,112,101,110,100,0,0,
9,4,4,5,28,5,0,0,31,3,5,1,19,3,4,3,
18,0,0,1,27,4,0,0,15,3,4,0,26,5,0,0,
15,4,5,0,26,6,0,0,15,5,6,0,11,7,0,0,
0,0,0,0,0,0,0,0,15,6,7,0,11,8,0,0,
0,0,0,0,0,0,0,0,15,7,8,0,12,11,0,3,
115,116,114,0,13,10,11,0,12,12,0,7,95,115,99,111,
112,101,105,0,9,11,1,12,31,9,11,1,19,9,10,9,
15,8,9,0,15,9,2,0,11,11,0,0,0,0,0,0,
0,0,240,191,15,10,11,0,27,12,0,0,15,11,12,0,
12,14,0,4,114,101,103,115,0,0,0,0,27,13,14,1,
15,12,13,0,11,14,0,0,0,0,0,0,0,0,0,0,
15,13,14,0,12,14,0,4,118,97,114,115,0,0,0,0,
10,1,14,3,12,3,0,3,114,50,110,0,10,1,3,4,
12,3,0,3,110,50,114,0,10,1,3,5,12,3,0,5,
95,116,109,112,105,0,0,0,10,1,3,6,12,3,0,4,
109,114,101,103,0,0,0,0,10,1,3,7,12,3,0,4,
115,110,117,109,0,0,0,0,10,1,3,8,12,3,0,8,
95,103,108,111,98,97,108,115,0,0,0,0,10,1,3,9,
12,3,0,6,108,105,110,101,110,111,0,0,10,1,3,10,
12,3,0,7,103,108,111,98,97,108,115,0,10,1,3,11,
12,3,0,5,99,114,101,103,115,0,0,0,10,1,3,12,
12,3,0,4,116,109,112,99,0,0,0,0,10,1,3,13,
12,4,0,7,95,115,99,111,112,101,105,0,9,3,1,4,
11,4,0,0,0,0,0,0,0,0,240,63,1,3,3,4,
12,4,0,7,95,115,99,111,112,101,105,0,10,1,4,3,
30,7,0,20,32,32,32,32,32,32,32,32,105,110,115,101,
114,116,40,115,101,108,102,46,99,114,101,103,115,41,0,0,
12,5,0,6,105,110,115,101,114,116,0,0,13,4,5,0,
12,6,0,5,99,114,101,103,115,0,0,0,9,5,1,6,
31,3,5,1,19,3,4,3,0,0,0,0,12,3,0,5,
98,101,103,105,110,0,0,0,10,0,3,2,16,3,1,51,
44,7,0,0,30,5,0,21,32,32,32,32,100,101,102,32,
101,110,100,40,115,101,108,102,41,58,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,3,101,110,100,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,10,0,22,32,32,32,32,
32,32,32,32,115,101,108,102,46,99,114,101,103,115,46,97,
112,112,101,110,100,40,115,101,108,102,46,109,114,101,103,41,
0,0,0,0,12,4,0,5,99,114,101,103,115,0,0,0,
9,3,1,4,12,4,0,6,97,112,112,101,110,100,0,0,
9,3,3,4,12,5,0,4,109,114,101,103,0,0,0,0,
9,4,1,5,31,2,4,1,19,2,3,2,30,5,0,23,
32,32,32,32,32,32,32,32,99,111,100,101,40,69,79,70,
41,0,0,0,12,4,0,4,99,111,100,101,0,0,0,0,
98,101,103,105,110,0,0,0,10,0,3,2,16,3,0,164,
44,7,0,0,28,2,0,0,9,1,0,2,12,4,0,5,
99,114,101,103,115,0,0,0,9,3,1,4,12,4,0,6,
97,112,112,101,110,100,0,0,9,3,3,4,12,5,0,4,
109,114,101,103,0,0,0,0,9,4,1,5,31,2,4,1,
19,2,3,2,12,4,0,4,99,111,100,101,0,0,0,0,
13,3,4,0,12,5,0,3,69,79,70,0,13,4,5,0,
31,2,4,1,19,2,3,2,30,7,0,29,32,32,32,32,
32,32,32,32,105,102,32,115,101,108,102,46,116,109,112,99,
32,33,61,32,48,58,0,0,12,3,0,4,116,109,112,99,
0,0,0,0,9,2,1,3,11,3,0,0,0,0,0,0,
0,0,0,0,35,2,2,3,21,2,0,0,18,0,0,39,
30,17,0,30,32,32,32,32,32,32,32,32,32,32,32,32,
112,114,105,110,116,40,34,87,97,114,110,105,110,103,58,92,
110,101,110,99,111,100,101,46,112,121,32,99,111,110,116,97,
105,110,115,32,97,32,114,101,103,105,115,116,101,114,32,108,
101,97,107,92,110,34,41,0,12,4,0,5,112,114,105,110,
116,0,0,0,13,3,4,0,12,4,0,44,87,97,114,110,
105,110,103,58,10,101,110,99,111,100,101,46,112,121,32,99,
111,110,116,97,105,110,115,32,97,32,114,101,103,105,115,116,
101,114,32,108,101,97,107,10,0,0,0,0,31,2,4,1,
19,2,3,2,18,0,0,1,30,8,0,32,32,32,32,32,
32,32,32,32,105,102,32,108,101,110,40,115,101,108,102,46,
115,116,97,99,107,41,32,62,32,49,58,0,11,2,0,0,
0,0,0,0,0,0,240,63,12,5,0,3,108,101,110,0,
13,4,5,0,12,6,0,5,115,116,97,99,107,0,0,0,
9,5,1,6,31,3,5,1,19,3,4,3,25,2,2,3,
21,2,0,0,18,0,0,149,30,41,0,33,32,32,32,32,
32,32,32,32,32,32,32,32,115,101,108,102,46,118,97,114,
115,44,115,101,108,102,46,114,50,110,44,115,101,108,102,46,
110,50,114,44,115,101,108,102,46,95,116,109,112,105,44,115,
101,108,102,46,109,114,101,103,44,115,101,108,102,46,115,110,
117,109,44,115,101,108,102,46,95,103,108,111,98,97,108,115,
44,115,101,108,102,46,108,105,110,101,110,111,44,115,101,108,
102,46,103,108,111,98,97,108,115,44,115,101,108,102,46,114,
103,108,111,98,97,108,115,44,115,101,108,102,46,99,114,101,
103,115,44,115,101,108,102,46,116,109,112,99,32,61,32,115,
101,108,102,46,115,116,97,99,107,46,112,111,112,40,41,0,
31,2,4,1,19,2,3,2,12,4,0,6,97,115,115,101,
114,116,0,0,13,3,4,0,12,5,0,4,116,109,112,99,
0,0,0,0,9,4,1,5,11,5,0,0,0,0,0,0,
0,0,0,0,23,4,4,5,31,2,4,1,19,2,3,2,
11,2,0,0,0,0,0,0,0,0,240,63,12,5,0,3,
108,101,110,0,13,4,5,0,12,6,0,5,115,116,97,99,
107,0,0,0,9,5,1,6,31,3,5,1,19,3,4,3,
25,2,2,3,21,2,0,0,18,0,0,98,12,4,0,5,
115,116,97,99,107,0,0,0,9,3,1,4,12,4,0,3,
112,111,112,0,9,3,3,4,31,2,0,0,19,2,3,2,
11,4,0,0,0,0,0,0,0,0,0,0,9,3,2,4,
12,4,0,4,118,97,114,115,0,0,0,0,10,1,4,3,
11,4,0,0,0,0,0,0,0,0,240,63,9,3,2,4,
12,4,0,3,114,50,110,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,0,64,9,3,2,4,12,4,0,3,
110,50,114,0,10,1,4,3,11,4,0,0,0,0,0,0,
0,0,8,64,9,3,2,4,12,4,0,5,95,116,109,112,
105,0,0,0,10,1,4,3,11,4,0,0,0,0,0,0,
0,0,16,64,9,3,2,4,12,4,0,4,109,114,101,103,
0,0,0,0,10,1,4,3,11,4,0,0,0,0,0,0,
0,0,20,64,9,3,2,4,12,4,0,4,115,110,117,109,
0,0,0,0,10,1,4,3,11,4,0,0,0,0,0,0,
0,0,24,64,9,3,2,4,12,4,0,8,95,103,108,111,
98,97,108,115,0,0,0,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,28,64,9,3,2,4,12,4,0,6,
108,105,110,101,110,111,0,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,32,64,9,3,2,4,12,4,0,7,
103,108,111,98,97,108,115,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,34,64,9,3,2,4,12,4,0,5,
99,114,101,103,115,0,0,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,36,64,9,3,2,4,12,4,0,4,
116,109,112,99,0,0,0,0,10,1,4,3,18,0,0,11,
12,4,0,5,115,116,97,99,107,0,0,0,9,3,1,4,
12,4,0,3,112,111,112,0,9,3,3,4,31,2,0,0,
19,2,3,2,11,4,0,0,0,0,0,0,0,0,0,0,
9,3,2,4,12,4,0,4,118,97,114,115,0,0,0,0,
10,1,4,3,11,4,0,0,0,0,0,0,0,0,240,63,
9,3,2,4,12,4,0,3,114,50,110,0,10,1,4,3,
11,4,0,0,0,0,0,0,0,0,0,64,9,3,2,4,
12,4,0,3,110,50,114,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,8,64,9,3,2,4,12,4,0,5,
95,116,109,112,105,0,0,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,16,64,9,3,2,4,12,4,0,4,
109,114,101,103,0,0,0,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,20,64,9,3,2,4,12,4,0,4,
115,110,117,109,0,0,0,0,10,1,4,3,11,4,0,0,
0,0,0,0,0,0,24,64,9,3,2,4,12,4,0,8,
95,103,108,111,98,97,108,115,0,0,0,0,10,1,4,3,
11,4,0,0,0,0,0,0,0,0,28,64,9,3,2,4,
12,4,0,6,108,105,110,101,110,111,0,0,10,1,4,3,
11,4,0,0,0,0,0,0,0,0,32,64,9,3,2,4,
12,4,0,7,103,108,111,98,97,108,115,0,10,1,4,3,
11,4,0,0,0,0,0,0,0,0,34,64,9,3,2,4,
12,4,0,8,114,103,108,111,98,97,108,115,0,0,0,0,
10,1,4,3,11,4,0,0,0,0,0,0,0,0,36,64,
9,3,2,4,12,4,0,5,99,114,101,103,115,0,0,0,
10,1,4,3,11,4,0,0,0,0,0,0,0,0,38,64,
9,3,2,4,12,4,0,4,116,109,112,99,0,0,0,0,
10,1,4,3,18,0,0,20,30,8,0,34,32,32,32,32,
32,32,32,32,101,108,115,101,58,32,115,101,108,102,46,115,
116,97,99,107,46,112,111,112,40,41,0,0,12,4,0,5,
115,116,97,99,107,0,0,0,9,3,1,4,12,4,0,3,
112,111,112,0,9,3,3,4,31,2,0,0,19,2,3,2,
18,0,0,1,0,0,0,0,12,4,0,3,101,110,100,0,
10,0,4,3,30,8,0,37,100,101,102,32,105,110,115,101,
114,116,40,118,41,58,32,68,46,111,117,116,46,97,112,112,
101,110,100,40,118,41,0,0,16,0,0,37,44,5,0,0,
30,8,0,37,100,101,102,32,105,110,115,101,114,116,40,118,
41,58,32,68,46,111,117,116,46,97,112,112,101,110,100,40,
118,41,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,6,
105,110,115,101,114,116,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,3,111,117,116,0,9,3,3,4,12,4,0,6,
97,112,112,101,110,100,0,0,9,3,3,4,15,4,1,0,
31,2,4,1,19,2,3,2,0,0,0,0,12,4,0,6,
105,110,115,101,114,116,0,0,14,4,0,0,30,4,0,38,
100,101,102,32,119,114,105,116,101,40,118,41,58,0,0,0,
16,4,0,121,44,14,0,0,30,4,0,38,100,101,102,32,
119,114,105,116,101,40,118,41,58,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,5,119,114,105,116,101,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,7,0,39,
32,32,32,32,105,102,32,105,115,116,121,112,101,40,118,44,
39,108,105,115,116,39,41,58,0,0,0,0,12,4,0,6,
105,115,116,121,112,101,0,0,13,3,4,0,15,4,1,0,
12,5,0,4,108,105,115,116,0,0,0,0,31,2,4,2,
19,2,3,2,21,2,0,0,18,0,0,22,30,5,0,40,
32,32,32,32,32,32,32,32,105,110,115,101,114,116,40,118,
41,0,0,0,12,4,0,6,105,110,115,101,114,116,0,0,
19,2,3,2,18,0,0,1,0,0,0,0,12,4,0,3,
101,110,100,0,10,0,4,3,16,4,0,62,44,7,0,0,
28,2,0,0,9,1,0,2,12,4,0,4,98,105,110,100,
0,0,0,0,13,3,4,0,12,6,0,6,68,83,116,97,
116,101,0,0,13,4,6,0,12,6,0,8,95,95,105,110,
105,116,95,95,0,0,0,0,9,4,4,6,15,5,1,0,
31,2,4,2,19,2,3,2,12,3,0,8,95,95,105,110,
105,116,95,95,0,0,0,0,10,1,3,2,12,4,0,4,
98,105,110,100,0,0,0,0,13,3,4,0,12,6,0,6,
68,83,116,97,116,101,0,0,13,4,6,0,12,6,0,5,
98,101,103,105,110,0,0,0,9,4,4,6,15,5,1,0,
31,2,4,2,19,2,3,2,12,3,0,5,98,101,103,105,
110,0,0,0,10,1,3,2,12,4,0,4,98,105,110,100,
0,0,0,0,13,3,4,0,12,6,0,6,68,83,116,97,
116,101,0,0,13,4,6,0,12,6,0,3,101,110,100,0,
9,4,4,6,15,5,1,0,31,2,4,2,19,2,3,2,
12,3,0,3,101,110,100,0,10,1,3,2,0,0,0,0,
12,5,0,7,95,95,110,101,119,95,95,0,10,0,5,4,
16,5,0,22,44,5,0,0,26,1,0,0,12,4,0,6,
68,83,116,97,116,101,0,0,13,3,4,0,12,4,0,7,
95,95,110,101,119,95,95,0,9,3,3,4,15,4,1,0,
31,2,4,1,19,2,3,2,12,3,0,8,95,95,105,110,
105,116,95,95,0,0,0,0,9,2,1,3,19,4,2,0,
20,1,0,0,0,0,0,0,12,6,0,8,95,95,99,97,
108,108,95,95,0,0,0,0,10,0,6,5,16,0,0,18,
44,5,0,0,28,2,0,0,9,1,0,2,12,4,0,1,
68,0,0,0,13,3,4,0,12,4,0,3,111,117,116,0,
9,3,3,4,12,4,0,6,97,112,112,101,110,100,0,0,
9,3,3,4,15,4,1,0,31,2,4,1,19,2,3,2,
0,0,0,0,12,6,0,6,105,110,115,101,114,116,0,0,
14,6,0,0,16,6,0,68,44,14,0,0,28,2,0,0,
9,1,0,2,12,4,0,6,105,115,116,121,112,101,0,0,
13,3,4,0,15,4,1,0,12,5,0,4,108,105,115,116,
0,0,0,0,31,2,4,2,19,2,3,2,21,2,0,0,
18,0,0,11,12,4,0,6,105,110,115,101,114,116,0,0,
13,3,4,0,15,4,1,0,31,2,4,1,19,2,3,2,
30,4,0,41,32,32,32,32,32,32,32,32,114,101,116,117,
114,110,0,0,28,2,0,0,20,2,0,0,18,0,0,1,
30,8,0,42,32,32,32,32,102,111,114,32,110,32,105,110,
32,114,97,110,103,101,40,48,44,108,101,110,40,118,41,44,
52,41,58,0,12,5,0,5,114,97,110,103,101,0,0,0,
13,4,5,0,11,5,0,0,0,0,0,0,0,0,0,0,
12,9,0,3,108,101,110,0,13,8,9,0,15,9,1,0,
31,6,9,1,19,6,8,6,11,7,0,0,0,0,0,0,
0,0,16,64,31,3,5,3,19,3,4,3,11,4,0,0,
0,0,0,0,0,0,0,0,42,2,3,4,18,0,0,29,
30,9,0,43,32,32,32,32,32,32,32,32,105,110,115,101,
114,116,40,40,39,100,97,116,97,39,44,118,91,110,58,110,
43,52,93,41,41,0,0,0,12,7,0,6,105,110,115,101,
28,2,0,0,20,2,0,0,18,0,0,1,12,5,0,5,
114,97,110,103,101,0,0,0,13,4,5,0,11,5,0,0,
0,0,0,0,0,0,0,0,12,9,0,3,108,101,110,0,
13,8,9,0,15,9,1,0,31,6,9,1,19,6,8,6,
11,7,0,0,0,0,0,0,0,0,16,64,31,3,5,3,
19,3,4,3,11,4,0,0,0,0,0,0,0,0,0,0,
42,2,3,4,18,0,0,19,12,7,0,6,105,110,115,101,
114,116,0,0,13,6,7,0,12,8,0,4,100,97,116,97,
0,0,0,0,15,11,2,0,11,13,0,0,0,0,0,0,
0,0,16,64,1,12,2,13,27,10,11,2,9,9,1,10,
27,7,8,2,31,5,7,1,19,5,6,5,18,0,255,227,
0,0,0,0,12,5,0,5,119,114,105,116,101,0,0,0,
14,5,4,0,30,4,0,44,100,101,102,32,115,101,116,112,
111,115,40,118,41,58,0,0,16,5,0,185,44,12,0,0,
30,4,0,44,100,101,102,32,115,101,116,112,111,115,40,118,
41,58,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,6,
115,101,116,112,111,115,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,8,0,45,32,32,32,32,105,102,32,39,
45,110,111,112,111,115,39,32,105,110,32,65,82,71,86,58,
32,114,101,116,117,114,110,0,12,3,0,4,65,82,71,86,
0,0,0,0,13,2,3,0,12,3,0,6,45,110,111,112,
111,115,0,0,36,2,2,3,21,2,0,0,18,0,0,4,
28,2,0,0,20,2,0,0,18,0,0,1,30,4,0,46,
32,32,32,32,108,105,110,101,44,120,32,61,32,118,0,0,
11,4,0,0,0,0,0,0,0,0,0,0,9,3,1,4,
15,2,3,0,11,5,0,0,0,0,0,0,0,0,240,63,
9,4,1,5,15,3,4,0,30,8,0,47,32,32,32,32,
105,102,32,108,105,110,101,32,61,61,32,68,46,108,105,110,
101,110,111,58,32,114,101,116,117,114,110,0,12,5,0,1,
68,0,0,0,13,4,5,0,12,5,0,6,108,105,110,101,
110,111,0,0,9,4,4,5,23,1,2,4,21,1,0,0,
18,0,0,4,28,1,0,0,20,1,0,0,18,0,0,1,
30,7,0,48,32,32,32,32,116,101,120,116,32,61,32,68,
46,108,105,110,101,115,91,108,105,110,101,45,49,93,0,0,
12,5,0,1,68,0,0,0,13,4,5,0,12,5,0,5,
108,105,110,101,115,0,0,0,9,4,4,5,11,6,0,0,
0,0,0,0,0,0,240,63,2,5,2,6,9,4,4,5,
15,1,4,0,30,5,0,49,32,32,32,32,68,46,108,105,
110,101,110,111,32,61,32,108,105,110,101,0,12,5,0,1,
68,0,0,0,13,4,5,0,12,5,0,6,108,105,110,101,
110,111,0,0,10,4,5,2,30,10,0,50,32,32,32,32,
118,97,108,32,61,32,116,101,120,116,32,43,32,34,92,48,
34,42,40,52,45,108,101,110,40,116,101,120,116,41,37,52,
41,0,0,0,12,6,0,1,0,0,0,0,11,7,0,0,
27,7,8,2,31,5,7,1,19,5,6,5,18,0,255,237,
0,0,0,0,12,7,0,5,119,114,105,116,101,0,0,0,
14,7,6,0,16,7,0,107,44,12,0,0,28,2,0,0,
9,1,0,2,12,3,0,4,65,82,71,86,0,0,0,0,
13,2,3,0,12,3,0,6,45,110,111,112,111,115,0,0,
36,2,2,3,21,2,0,0,18,0,0,4,28,2,0,0,
20,2,0,0,18,0,0,1,11,4,0,0,0,0,0,0,
0,0,0,0,9,3,1,4,15,2,3,0,11,5,0,0,
0,0,0,0,0,0,240,63,9,4,1,5,15,3,4,0,
12,5,0,1,68,0,0,0,13,4,5,0,12,5,0,6,
108,105,110,101,110,111,0,0,9,4,4,5,23,1,2,4,
21,1,0,0,18,0,0,4,28,1,0,0,20,1,0,0,
18,0,0,1,12,5,0,1,68,0,0,0,13,4,5,0,
12,5,0,5,108,105,110,101,115,0,0,0,9,4,4,5,
11,6,0,0,0,0,0,0,0,0,240,63,2,5,2,6,
9,4,4,5,15,1,4,0,12,5,0,1,68,0,0,0,
13,4,5,0,12,5,0,6,108,105,110,101,110,111,0,0,
10,4,5,2,12,6,0,1,0,0,0,0,11,7,0,0,
0,0,0,0,0,0,16,64,12,10,0,3,108,101,110,0,
13,9,10,0,15,10,1,0,31,8,10,1,19,8,9,8,
11,9,0,0,0,0,0,0,0,0,16,64,39,8,8,9,
2,7,7,8,3,6,6,7,1,5,1,6,15,4,5,0,
30,9,0,51,32,32,32,32,99,111,100,101,95,49,54,40,
80,79,83,44,108,101,110,40,118,97,108,41,47,52,44,108,
105,110,101,41,0,0,0,0,12,7,0,7,99,111,100,101,
95,49,54,0,13,6,7,0,12,10,0,3,80,79,83,0,
13,7,10,0,12,11,0,3,108,101,110,0,13,10,11,0,
15,11,4,0,31,8,11,1,19,8,10,8,11,10,0,0,
0,0,0,0,0,0,16,64,4,8,8,10,15,9,2,0,
31,5,7,3,19,5,6,5,30,4,0,52,32,32,32,32,
119,114,105,116,101,40,118,97,108,41,0,0,12,7,0,5,
119,114,105,116,101,0,0,0,13,6,7,0,15,7,4,0,
31,5,7,1,19,5,6,5,0,0,0,0,12,6,0,6,
115,101,116,112,111,115,0,0,14,6,5,0,30,7,0,53,
100,101,102,32,99,111,100,101,40,105,44,97,61,48,44,98,
61,48,44,99,61,48,41,58,0,0,0,0,16,6,0,168,
44,13,0,0,30,7,0,53,100,101,102,32,99,111,100,101,
40,105,44,97,61,48,44,98,61,48,44,99,61,48,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,4,
99,111,100,101,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,11,2,0,0,0,0,0,0,0,0,0,0,
28,3,0,0,32,2,0,3,11,3,0,0,0,0,0,0,
0,0,0,0,28,4,0,0,32,3,0,4,11,4,0,0,
0,0,0,0,0,0,0,0,28,5,0,0,32,4,0,5,
30,10,0,54,32,32,32,32,105,102,32,110,111,116,32,105,
115,116,121,112,101,40,105,44,39,110,117,109,98,101,114,39,
41,58,32,114,97,105,115,101,0,0,0,0,12,8,0,6,
105,115,116,121,112,101,0,0,13,7,8,0,15,8,1,0,
12,9,0,6,110,117,109,98,101,114,0,0,31,6,8,2,
19,6,7,6,47,5,6,0,21,5,0,0,18,0,0,4,
28,5,0,0,37,5,0,0,18,0,0,1,30,10,0,55,
32,32,32,32,105,102,32,110,111,116,32,105,115,116,121,112,
101,40,97,44,39,110,117,109,98,101,114,39,41,58,32,114,
97,105,115,101,0,0,0,0,12,8,0,6,105,115,116,121,
112,101,0,0,13,7,8,0,15,8,2,0,12,9,0,6,
12,7,0,7,99,111,100,101,95,49,54,0,13,6,7,0,
12,10,0,3,80,79,83,0,13,7,10,0,12,11,0,3,
108,101,110,0,13,10,11,0,15,11,4,0,31,8,11,1,
19,8,10,8,11,10,0,0,0,0,0,0,0,0,16,64,
4,8,8,10,15,9,2,0,31,5,7,3,19,5,6,5,
12,7,0,5,119,114,105,116,101,0,0,0,13,6,7,0,
15,7,4,0,31,5,7,1,19,5,6,5,0,0,0,0,
12,8,0,6,115,101,116,112,111,115,0,0,14,8,7,0,
16,8,0,110,44,13,0,0,28,2,0,0,9,1,0,2,
11,2,0,0,0,0,0,0,0,0,0,0,28,3,0,0,
32,2,0,3,11,3,0,0,0,0,0,0,0,0,0,0,
28,4,0,0,32,3,0,4,11,4,0,0,0,0,0,0,
0,0,0,0,28,5,0,0,32,4,0,5,11,5,0,0,
0,0,0,0,0,0,0,0,12,8,0,6,105,115,116,121,
112,101,0,0,13,7,8,0,15,8,1,0,12,9,0,6,
110,117,109,98,101,114,0,0,31,6,8,2,19,6,7,6,
47,5,6,0,21,5,0,0,18,0,0,4,28,5,0,0,
37,5,0,0,18,0,0,1,30,10,0,56,32,32,32,32,
105,102,32,110,111,116,32,105,115,116,121,112,101,40,98,44,
39,110,117,109,98,101,114,39,41,58,32,114,97,105,115,101,
23,5,5,6,21,5,0,0,18,0,0,4,28,5,0,0,
37,5,0,0,18,0,0,1,11,5,0,0,0,0,0,0,
0,0,0,0,12,8,0,6,105,115,116,121,112,101,0,0,
13,7,8,0,15,8,3,0,12,9,0,6,110,117,109,98,
101,114,0,0,31,6,8,2,19,6,7,6,47,5,6,0,
13,7,8,0,15,8,2,0,12,9,0,6,110,117,109,98,
101,114,0,0,31,6,8,2,19,6,7,6,23,5,5,6,
21,5,0,0,18,0,0,4,28,5,0,0,37,5,0,0,
18,0,0,1,30,10,0,57,32,32,32,32,105,102,32,110,
111,116,32,105,115,116,121,112,101,40,99,44,39,110,117,109,
98,101,114,39,41,58,32,114,97,105,115,101,0,0,0,0,
18,0,0,1,11,5,0,0,0,0,0,0,0,0,0,0,
12,8,0,6,105,115,116,121,112,101,0,0,13,7,8,0,
15,8,4,0,12,9,0,6,110,117,109,98,101,114,0,0,
31,6,8,2,19,6,7,6,47,5,6,0,21,5,0,0,
15,8,3,0,12,9,0,6,110,117,109,98,101,114,0,0,
31,6,8,2,19,6,7,6,23,5,5,6,21,5,0,0,
18,0,0,4,28,5,0,0,37,5,0,0,18,0,0,1,
30,7,0,58,32,32,32,32,119,114,105,116,101,40,40,39,
99,111,100,101,39,44,105,44,97,44,98,44,99,41,41,0,
12,7,0,5,119,114,105,116,101,0,0,0,13,6,7,0,
12,8,0,4,99,111,100,101,0,0,0,0,15,9,1,0,
15,10,2,0,15,11,3,0,15,12,4,0,27,7,8,5,
31,5,7,1,19,5,6,5,0,0,0,0,12,7,0,4,
99,111,100,101,0,0,0,0,14,7,6,0,30,5,0,59,
100,101,102,32,99,111,100,101,95,49,54,40,105,44,97,44,
98,41,58,0,16,7,0,80,44,11,0,0,30,5,0,59,
100,101,102,32,99,111,100,101,95,49,54,40,105,44,97,44,
98,41,58,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,7,
99,111,100,101,95,49,54,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,30,7,0,60,32,32,32,32,105,102,32,98,
32,60,32,48,58,32,98,32,43,61,32,48,120,56,48,48,
48,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,
25,4,3,5,21,4,0,0,18,0,0,7,11,5,0,0,
0,0,0,0,0,0,224,64,1,4,3,5,15,3,4,0,
18,0,0,1,30,10,0,61,32,32,32,32,99,111,100,101,
40,105,44,97,44,40,98,38,48,120,102,102,48,48,41,62,
62,56,44,40,98,38,48,120,102,102,41,62,62,48,41,0,
12,6,0,4,99,111,100,101,0,0,0,0,13,5,6,0,
15,6,1,0,15,7,2,0,11,10,0,0,0,0,0,0,
0,224,239,64,6,8,3,10,11,10,0,0,0,0,0,0,
0,0,32,64,41,8,8,10,11,10,0,0,0,0,0,0,
0,224,111,64,6,9,3,10,11,10,0,0,0,0,0,0,
0,0,0,0,41,9,9,10,31,4,6,4,19,4,5,4,
0,0,0,0,12,8,0,7,99,111,100,101,95,49,54,0,
14,8,7,0,30,6,0,62,100,101,102,32,103,101,116,95,
99,111,100,101,49,54,40,105,44,97,44,98,41,58,0,0,
16,8,0,64,44,11,0,0,30,6,0,62,100,101,102,32,
103,101,116,95,99,111,100,101,49,54,40,105,44,97,44,98,
41,58,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,10,
103,101,116,95,99,111,100,101,49,54,0,0,34,1,0,0,
11,5,0,0,0,0,0,0,0,0,0,0,12,8,0,6,
105,115,116,121,112,101,0,0,13,7,8,0,15,8,4,0,
12,9,0,6,110,117,109,98,101,114,0,0,31,6,8,2,
19,6,7,6,23,5,5,6,21,5,0,0,18,0,0,4,
28,5,0,0,37,5,0,0,18,0,0,1,12,7,0,5,
119,114,105,116,101,0,0,0,13,6,7,0,12,8,0,4,
99,111,100,101,0,0,0,0,15,9,1,0,15,10,2,0,
15,11,3,0,15,12,4,0,27,7,8,5,31,5,7,1,
19,5,6,5,0,0,0,0,12,9,0,4,99,111,100,101,
0,0,0,0,14,9,8,0,16,9,0,45,44,11,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
28,4,0,0,9,3,0,4,30,13,0,63,32,32,32,32,
114,101,116,117,114,110,32,40,39,99,111,100,101,39,44,105,
44,97,44,40,98,38,48,120,102,102,48,48,41,62,62,56,
44,40,98,38,48,120,102,102,41,62,62,48,41,0,0,0,
12,5,0,4,99,111,100,101,0,0,0,0,15,6,1,0,
15,7,2,0,11,10,0,0,0,0,0,0,0,224,239,64,
6,8,3,10,11,10,0,0,0,0,0,0,0,0,32,64,
41,8,8,10,11,10,0,0,0,0,0,0,0,224,111,64,
6,9,3,10,11,10,0,0,0,0,0,0,0,0,0,0,
41,9,9,10,27,4,5,5,20,4,0,0,0,0,0,0,
12,9,0,10,103,101,116,95,99,111,100,101,49,54,0,0,
14,9,8,0,30,7,0,65,100,101,102,32,95,100,111,95,
115,116,114,105,110,103,40,118,44,114,61,78,111,110,101,41,
58,0,0,0,16,9,0,113,44,11,0,0,30,7,0,65,
100,101,102,32,95,100,111,95,115,116,114,105,110,103,40,118,
44,114,61,78,111,110,101,41,58,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,10,95,100,111,95,115,116,114,105,
110,103,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,30,5,0,66,
32,32,32,32,114,32,61,32,103,101,116,95,116,109,112,40,
114,41,0,0,12,5,0,7,103,101,116,95,116,109,112,0,
13,4,5,0,15,5,2,0,31,3,5,1,19,3,4,3,
15,2,3,0,30,8,0,67,32,32,32,32,118,97,108,32,
61,32,118,32,43,32,34,92,48,34,42,40,52,45,108,101,
110,40,118,41,37,52,41,0,12,5,0,1,0,0,0,0,
11,6,0,0,0,0,0,0,0,0,16,64,12,9,0,3,
108,101,110,0,13,8,9,0,15,9,1,0,31,7,9,1,
19,7,8,7,11,8,0,0,0,0,0,0,0,0,16,64,
39,7,7,8,2,6,6,7,3,5,5,6,1,4,1,5,
15,3,4,0,30,8,0,68,32,32,32,32,99,111,100,101,
95,49,54,40,83,84,82,73,78,71,44,114,44,108,101,110,
40,118,41,41,0,0,0,0,12,6,0,7,99,111,100,101,
28,4,0,0,9,3,0,4,11,5,0,0,0,0,0,0,
0,0,0,0,25,4,3,5,21,4,0,0,18,0,0,7,
11,5,0,0,0,0,0,0,0,0,224,64,1,4,3,5,
15,3,4,0,18,0,0,1,12,6,0,4,99,111,100,101,
0,0,0,0,13,5,6,0,15,6,1,0,15,7,2,0,
11,10,0,0,0,0,0,0,0,224,239,64,6,8,3,10,
11,10,0,0,0,0,0,0,0,0,32,64,41,8,8,10,
11,10,0,0,0,0,0,0,0,224,111,64,6,9,3,10,
11,10,0,0,0,0,0,0,0,0,0,0,41,9,9,10,
31,4,6,4,19,4,5,4,0,0,0,0,12,10,0,7,
99,111,100,101,95,49,54,0,14,10,9,0,16,10,0,32,
44,11,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,12,5,0,4,
99,111,100,101,0,0,0,0,15,6,1,0,15,7,2,0,
11,10,0,0,0,0,0,0,0,224,239,64,6,8,3,10,
11,10,0,0,0,0,0,0,0,0,32,64,41,8,8,10,
11,10,0,0,0,0,0,0,0,224,111,64,6,9,3,10,
11,10,0,0,0,0,0,0,0,0,0,0,41,9,9,10,
27,4,5,5,20,4,0,0,0,0,0,0,12,11,0,10,
103,101,116,95,99,111,100,101,49,54,0,0,14,11,10,0,
16,11,0,60,44,11,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,12,5,0,7,
103,101,116,95,116,109,112,0,13,4,5,0,15,5,2,0,
31,3,5,1,19,3,4,3,15,2,3,0,12,5,0,1,
0,0,0,0,11,6,0,0,0,0,0,0,0,0,16,64,
12,9,0,3,108,101,110,0,13,8,9,0,15,9,1,0,
31,7,9,1,19,7,8,7,11,8,0,0,0,0,0,0,
0,0,16,64,39,7,7,8,2,6,6,7,3,5,5,6,
1,4,1,5,15,3,4,0,12,6,0,7,99,111,100,101,
95,49,54,0,13,5,6,0,12,9,0,6,83,84,82,73,
78,71,0,0,13,6,9,0,15,7,2,0,12,10,0,3,
108,101,110,0,13,9,10,0,15,10,1,0,31,8,10,1,
19,8,9,8,31,4,6,3,19,4,5,4,30,4,0,69,
32,32,32,32,119,114,105,116,101,40,118,97,108,41,0,0,
12,6,0,5,119,114,105,116,101,0,0,0,13,5,6,0,
15,6,3,0,31,4,6,1,19,4,5,4,30,4,0,70,
32,32,32,32,114,101,116,117,114,110,32,114,0,0,0,0,
20,2,0,0,0,0,0,0,12,10,0,10,95,100,111,95,
115,116,114,105,110,103,0,0,14,10,9,0,30,7,0,71,
100,101,102,32,100,111,95,115,116,114,105,110,103,40,116,44,
114,61,78,111,110,101,41,58,0,0,0,0,16,10,0,48,
44,8,0,0,30,7,0,71,100,101,102,32,100,111,95,115,
116,114,105,110,103,40,116,44,114,61,78,111,110,101,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,9,
100,111,95,115,116,114,105,110,103,0,0,0,34,1,0,0,
19,8,9,8,31,4,6,3,19,4,5,4,12,6,0,5,
119,114,105,116,101,0,0,0,13,5,6,0,15,6,3,0,
31,4,6,1,19,4,5,4,20,2,0,0,0,0,0,0,
12,12,0,10,95,100,111,95,115,116,114,105,110,103,0,0,
14,12,11,0,16,12,0,20,44,8,0,0,28,2,0,0,
9,1,0,2,28,2,0,0,28,3,0,0,32,2,0,3,
12,5,0,10,95,100,111,95,115,116,114,105,110,103,0,0,
13,4,5,0,12,7,0,3,118,97,108,0,9,5,1,7,
15,6,2,0,31,3,5,2,19,3,4,3,20,3,0,0,
0,0,0,0,12,13,0,9,100,111,95,115,116,114,105,110,
103,0,0,0,14,13,12,0,16,13,0,53,44,10,0,0,
28,2,0,0,9,1,0,2,28,2,0,0,28,3,0,0,
32,2,0,3,30,8,0,72,32,32,32,32,114,101,116,117,
114,110,32,95,100,111,95,115,116,114,105,110,103,40,116,46,
118,97,108,44,114,41,0,0,12,5,0,10,95,100,111,95,
115,116,114,105,110,103,0,0,13,4,5,0,12,7,0,3,
118,97,108,0,9,5,1,7,15,6,2,0,31,3,5,2,
19,3,4,3,20,3,0,0,0,0,0,0,12,11,0,9,
100,111,95,115,116,114,105,110,103,0,0,0,14,11,10,0,
30,7,0,74,100,101,102,32,95,100,111,95,110,117,109,98,
101,114,40,118,44,114,61,78,111,110,101,41,58,0,0,0,
16,11,0,98,44,10,0,0,30,7,0,74,100,101,102,32,
95,100,111,95,110,117,109,98,101,114,40,118,44,114,61,78,
111,110,101,41,58,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,10,95,100,111,95,110,117,109,98,101,114,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,2,0,0,
28,3,0,0,32,2,0,3,30,5,0,75,32,32,32,32,
114,32,61,32,103,101,116,95,116,109,112,40,114,41,0,0,
12,5,0,7,103,101,116,95,116,109,112,0,13,4,5,0,
15,5,2,0,31,3,5,1,19,3,4,3,15,2,3,0,
30,6,0,76,32,32,32,32,99,111,100,101,40,78,85,77,
66,69,82,44,114,44,48,44,48,41,0,0,12,5,0,4,
99,111,100,101,0,0,0,0,13,4,5,0,12,9,0,6,
78,85,77,66,69,82,0,0,13,5,9,0,15,6,2,0,
11,7,0,0,0,0,0,0,0,0,0,0,11,8,0,0,
0,0,0,0,0,0,0,0,31,3,5,4,19,3,4,3,
30,7,0,77,32,32,32,32,119,114,105,116,101,40,102,112,
97,99,107,40,110,117,109,98,101,114,40,118,41,41,41,0,
12,5,0,5,119,114,105,116,101,0,0,0,13,4,5,0,
12,7,0,5,102,112,97,99,107,0,0,0,13,6,7,0,
12,9,0,6,110,117,109,98,101,114,0,0,13,8,9,0,
15,9,1,0,31,7,9,1,19,7,8,7,31,5,7,1,
19,5,6,5,31,3,5,1,19,3,4,3,30,4,0,78,
32,32,32,32,114,101,116,117,114,110,32,114,0,0,0,0,
20,2,0,0,0,0,0,0,12,12,0,10,95,100,111,95,
110,117,109,98,101,114,0,0,14,12,11,0,30,7,0,79,
100,101,102,32,100,111,95,110,117,109,98,101,114,40,116,44,
114,61,78,111,110,101,41,58,0,0,0,0,16,12,0,48,
44,8,0,0,30,7,0,79,100,101,102,32,100,111,95,110,
117,109,98,101,114,40,116,44,114,61,78,111,110,101,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,9,
100,111,95,110,117,109,98,101,114,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,2,0,0,28,3,0,0,
32,2,0,3,30,8,0,80,32,32,32,32,114,101,116,117,
114,110,32,95,100,111,95,110,117,109,98,101,114,40,116,46,
118,97,108,44,114,41,0,0,12,5,0,10,95,100,111,95,
110,117,109,98,101,114,0,0,13,4,5,0,12,7,0,3,
118,97,108,0,9,5,1,7,15,6,2,0,31,3,5,2,
19,3,4,3,20,3,0,0,0,0,0,0,12,13,0,9,
100,111,95,110,117,109,98,101,114,0,0,0,14,13,12,0,
30,4,0,82,100,101,102,32,103,101,116,95,116,97,103,40,
41,58,0,0,16,13,0,68,44,6,0,0,30,4,0,82,
100,101,102,32,103,101,116,95,116,97,103,40,41,58,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,7,103,101,116,95,
116,97,103,0,34,1,0,0,30,6,0,83,32,32,32,32,
107,32,61,32,115,116,114,40,68,46,95,116,97,103,105,41,
0,0,0,0,12,4,0,3,115,116,114,0,13,3,4,0,
12,5,0,1,68,0,0,0,13,4,5,0,12,5,0,5,
95,116,97,103,105,0,0,0,9,4,4,5,31,2,4,1,
19,2,3,2,15,1,2,0,30,5,0,84,32,32,32,32,
68,46,95,116,97,103,105,32,43,61,32,49,0,0,0,0,
32,2,0,3,12,5,0,7,103,101,116,95,116,109,112,0,
13,4,5,0,15,5,2,0,31,3,5,1,19,3,4,3,
15,2,3,0,12,5,0,4,99,111,100,101,0,0,0,0,
13,4,5,0,12,9,0,6,78,85,77,66,69,82,0,0,
13,5,9,0,15,6,2,0,11,7,0,0,0,0,0,0,
0,0,0,0,11,8,0,0,0,0,0,0,0,0,0,0,
31,3,5,4,19,3,4,3,12,5,0,5,119,114,105,116,
101,0,0,0,13,4,5,0,12,7,0,5,102,112,97,99,
107,0,0,0,13,6,7,0,12,9,0,6,110,117,109,98,
101,114,0,0,13,8,9,0,15,9,1,0,31,7,9,1,
19,7,8,7,31,5,7,1,19,5,6,5,31,3,5,1,
19,3,4,3,20,2,0,0,0,0,0,0,12,14,0,10,
95,100,111,95,110,117,109,98,101,114,0,0,14,14,13,0,
16,14,0,20,44,8,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,12,5,0,10,
95,100,111,95,110,117,109,98,101,114,0,0,13,4,5,0,
12,7,0,3,118,97,108,0,9,5,1,7,15,6,2,0,
31,3,5,2,19,3,4,3,20,3,0,0,0,0,0,0,
12,15,0,9,100,111,95,110,117,109,98,101,114,0,0,0,
14,15,14,0,16,15,0,35,44,6,0,0,12,4,0,3,
115,116,114,0,13,3,4,0,12,5,0,1,68,0,0,0,
13,4,5,0,12,5,0,5,95,116,97,103,105,0,0,0,
9,4,4,5,31,2,4,1,19,2,3,2,15,1,2,0,
12,3,0,1,68,0,0,0,13,2,3,0,12,4,0,1,
68,0,0,0,13,3,4,0,12,4,0,5,95,116,97,103,
105,0,0,0,9,3,3,4,11,4,0,0,0,0,0,0,
0,0,240,63,1,3,3,4,12,4,0,5,95,116,97,103,
105,0,0,0,10,2,4,3,30,4,0,85,32,32,32,32,
114,101,116,117,114,110,32,107,0,0,0,0,20,1,0,0,
0,0,0,0,12,14,0,7,103,101,116,95,116,97,103,0,
14,14,13,0,30,5,0,86,100,101,102,32,115,116,97,99,
107,95,116,97,103,40,41,58,0,0,0,0,16,14,0,60,
44,5,0,0,30,5,0,86,100,101,102,32,115,116,97,99,
107,95,116,97,103,40,41,58,0,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,9,115,116,97,99,107,95,116,97,
103,0,0,0,34,1,0,0,30,5,0,87,32,32,32,32,
107,32,61,32,103,101,116,95,116,97,103,40,41,0,0,0,
12,4,0,7,103,101,116,95,116,97,103,0,13,3,4,0,
31,2,0,0,19,2,3,2,15,1,2,0,30,6,0,88,
32,32,32,32,68,46,116,115,116,97,99,107,46,97,112,112,
101,110,100,40,107,41,0,0,12,4,0,1,68,0,0,0,
13,3,4,0,12,4,0,6,116,115,116,97,99,107,0,0,
9,3,3,4,12,4,0,6,97,112,112,101,110,100,0,0,
9,3,3,4,15,4,1,0,31,2,4,1,19,2,3,2,
30,4,0,89,32,32,32,32,114,101,116,117,114,110,32,107,
0,0,0,0,20,1,0,0,0,0,0,0,12,15,0,9,
115,116,97,99,107,95,116,97,103,0,0,0,14,15,14,0,
30,4,0,90,100,101,102,32,112,111,112,95,116,97,103,40,
41,58,0,0,16,15,0,36,44,4,0,0,30,4,0,90,
100,101,102,32,112,111,112,95,116,97,103,40,41,58,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,7,112,111,112,95,
116,97,103,0,34,1,0,0,30,5,0,91,32,32,32,32,
68,46,116,115,116,97,99,107,46,112,111,112,40,41,0,0,
105,0,0,0,10,2,4,3,20,1,0,0,0,0,0,0,
12,16,0,7,103,101,116,95,116,97,103,0,14,16,15,0,
16,16,0,25,44,5,0,0,12,4,0,7,103,101,116,95,
116,97,103,0,13,3,4,0,31,2,0,0,19,2,3,2,
15,1,2,0,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,6,116,115,116,97,99,107,0,0,9,3,3,4,
12,4,0,6,97,112,112,101,110,100,0,0,9,3,3,4,
15,4,1,0,31,2,4,1,19,2,3,2,20,1,0,0,
0,0,0,0,12,17,0,9,115,116,97,99,107,95,116,97,
103,0,0,0,14,17,16,0,16,17,0,15,44,4,0,0,
12,3,0,1,68,0,0,0,13,2,3,0,12,3,0,6,
116,115,116,97,99,107,0,0,9,2,2,3,12,3,0,3,
112,111,112,0,9,2,2,3,31,1,0,0,19,1,2,1,
0,0,0,0,12,16,0,7,112,111,112,95,116,97,103,0,
14,16,15,0,30,4,0,93,100,101,102,32,116,97,103,40,
42,116,41,58,0,0,0,0,16,16,0,87,44,12,0,0,
30,4,0,93,100,101,102,32,116,97,103,40,42,116,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,3,
116,97,103,0,34,1,0,0,12,2,0,1,42,0,0,0,
9,1,0,2,30,13,0,94,32,32,32,32,116,32,61,32,
68,46,115,110,117,109,43,39,58,39,43,39,58,39,46,106,
111,105,110,40,91,115,116,114,40,118,41,32,102,111,114,32,
118,32,105,110,32,116,93,41,0,0,0,0,12,3,0,1,
68,0,0,0,13,2,3,0,12,3,0,4,115,110,117,109,
0,0,0,0,9,2,2,3,12,3,0,1,58,0,0,0,
1,2,2,3,12,4,0,1,58,0,0,0,12,5,0,4,
106,111,105,110,0,0,0,0,9,4,4,5,27,6,0,0,
11,8,0,0,0,0,0,0,0,0,0,0,42,7,1,8,
18,0,0,10,12,11,0,3,115,116,114,0,13,10,11,0,
15,11,7,0,31,9,11,1,19,9,10,9,28,10,0,0,
10,6,10,9,18,0,255,246,15,5,6,0,31,3,5,1,
19,3,4,3,1,2,2,3,15,1,2,0,30,6,0,95,
32,32,32,32,105,110,115,101,114,116,40,40,39,116,97,103,
39,44,116,41,41,0,0,0,12,4,0,6,105,110,115,101,
0,0,0,0,12,18,0,7,112,111,112,95,116,97,103,0,
14,18,17,0,16,18,0,52,44,12,0,0,12,2,0,1,
42,0,0,0,9,1,0,2,12,3,0,1,68,0,0,0,
13,2,3,0,12,3,0,4,115,110,117,109,0,0,0,0,
9,2,2,3,12,3,0,1,58,0,0,0,1,2,2,3,
12,4,0,1,58,0,0,0,12,5,0,4,106,111,105,110,
0,0,0,0,9,4,4,5,27,6,0,0,11,8,0,0,
0,0,0,0,0,0,0,0,42,7,1,8,18,0,0,10,
12,11,0,3,115,116,114,0,13,10,11,0,15,11,7,0,
31,9,11,1,19,9,10,9,28,10,0,0,10,6,10,9,
18,0,255,246,15,5,6,0,31,3,5,1,19,3,4,3,
1,2,2,3,15,1,2,0,12,4,0,6,105,110,115,101,
114,116,0,0,13,3,4,0,12,8,0,3,116,97,103,0,
15,9,1,0,27,4,8,2,31,2,4,1,19,2,3,2,
0,0,0,0,12,17,0,3,116,97,103,0,14,17,16,0,
30,4,0,96,100,101,102,32,106,117,109,112,40,42,116,41,
58,0,0,0,16,17,0,89,44,12,0,0,30,4,0,96,
100,101,102,32,106,117,109,112,40,42,116,41,58,0,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,4,106,117,109,112,
0,0,0,0,34,1,0,0,12,2,0,1,42,0,0,0,
9,1,0,2,30,13,0,97,32,32,32,32,116,32,61,32,
68,46,115,110,117,109,43,39,58,39,43,39,58,39,46,106,
111,105,110,40,91,115,116,114,40,118,41,32,102,111,114,32,
118,32,105,110,32,116,93,41,0,0,0,0,12,3,0,1,
68,0,0,0,13,2,3,0,12,3,0,4,115,110,117,109,
0,0,0,0,9,2,2,3,12,3,0,1,58,0,0,0,
1,2,2,3,12,4,0,1,58,0,0,0,12,5,0,4,
106,111,105,110,0,0,0,0,9,4,4,5,27,6,0,0,
11,8,0,0,0,0,0,0,0,0,0,0,42,7,1,8,
18,0,0,10,12,11,0,3,115,116,114,0,13,10,11,0,
15,11,7,0,31,9,11,1,19,9,10,9,28,10,0,0,
10,6,10,9,18,0,255,246,15,5,6,0,31,3,5,1,
19,3,4,3,1,2,2,3,15,1,2,0,30,6,0,98,
32,32,32,32,105,110,115,101,114,116,40,40,39,106,117,109,
112,39,44,116,41,41,0,0,12,4,0,6,105,110,115,101,
114,116,0,0,13,3,4,0,12,8,0,4,106,117,109,112,
0,0,0,0,15,9,1,0,27,4,8,2,31,2,4,1,
19,2,3,2,0,0,0,0,12,18,0,4,106,117,109,112,
0,0,0,0,14,18,17,0,30,4,0,99,100,101,102,32,
115,101,116,106,109,112,40,42,116,41,58,0,16,18,0,90,
44,12,0,0,30,4,0,99,100,101,102,32,115,101,116,106,
109,112,40,42,116,41,58,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,6,115,101,116,106,109,112,0,0,34,1,0,0,
12,2,0,1,42,0,0,0,9,1,0,2,30,13,0,100,
32,32,32,32,116,32,61,32,68,46,115,110,117,109,43,39,
58,39,43,39,58,39,46,106,111,105,110,40,91,115,116,114,
40,118,41,32,102,111,114,32,118,32,105,110,32,116,93,41,
0,0,0,0,12,3,0,1,68,0,0,0,13,2,3,0,
0,0,0,0,12,19,0,3,116,97,103,0,14,19,18,0,
16,19,0,53,44,12,0,0,12,2,0,1,42,0,0,0,
9,1,0,2,12,3,0,1,68,0,0,0,13,2,3,0,
12,3,0,4,115,110,117,109,0,0,0,0,9,2,2,3,
12,3,0,1,58,0,0,0,1,2,2,3,12,4,0,1,
58,0,0,0,12,5,0,4,106,111,105,110,0,0,0,0,
3691,22 → 2054,26
115,116,114,0,13,10,11,0,15,11,7,0,31,9,11,1,
19,9,10,9,28,10,0,0,10,6,10,9,18,0,255,246,
15,5,6,0,31,3,5,1,19,3,4,3,1,2,2,3,
15,1,2,0,30,7,0,101,32,32,32,32,105,110,115,101,
114,116,40,40,39,115,101,116,106,109,112,39,44,116,41,41,
0,0,0,0,12,4,0,6,105,110,115,101,114,116,0,0,
13,3,4,0,12,8,0,6,115,101,116,106,109,112,0,0,
15,1,2,0,12,4,0,6,105,110,115,101,114,116,0,0,
13,3,4,0,12,8,0,4,106,117,109,112,0,0,0,0,
15,9,1,0,27,4,8,2,31,2,4,1,19,2,3,2,
0,0,0,0,12,19,0,6,115,101,116,106,109,112,0,0,
14,19,18,0,30,4,0,102,100,101,102,32,102,110,99,40,
42,116,41,58,0,0,0,0,16,19,0,108,44,12,0,0,
30,4,0,102,100,101,102,32,102,110,99,40,42,116,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,3,
102,110,99,0,34,1,0,0,12,2,0,1,42,0,0,0,
9,1,0,2,30,13,0,103,32,32,32,32,116,32,61,32,
68,46,115,110,117,109,43,39,58,39,43,39,58,39,46,106,
111,105,110,40,91,115,116,114,40,118,41,32,102,111,114,32,
118,32,105,110,32,116,93,41,0,0,0,0,12,3,0,1,
0,0,0,0,12,20,0,4,106,117,109,112,0,0,0,0,
14,20,19,0,16,20,0,53,44,12,0,0,12,2,0,1,
42,0,0,0,9,1,0,2,12,3,0,1,68,0,0,0,
13,2,3,0,12,3,0,4,115,110,117,109,0,0,0,0,
9,2,2,3,12,3,0,1,58,0,0,0,1,2,2,3,
12,4,0,1,58,0,0,0,12,5,0,4,106,111,105,110,
0,0,0,0,9,4,4,5,27,6,0,0,11,8,0,0,
0,0,0,0,0,0,0,0,42,7,1,8,18,0,0,10,
12,11,0,3,115,116,114,0,13,10,11,0,15,11,7,0,
31,9,11,1,19,9,10,9,28,10,0,0,10,6,10,9,
18,0,255,246,15,5,6,0,31,3,5,1,19,3,4,3,
1,2,2,3,15,1,2,0,12,4,0,6,105,110,115,101,
114,116,0,0,13,3,4,0,12,8,0,6,115,101,116,106,
109,112,0,0,15,9,1,0,27,4,8,2,31,2,4,1,
19,2,3,2,0,0,0,0,12,21,0,6,115,101,116,106,
109,112,0,0,14,21,20,0,16,21,0,62,44,12,0,0,
12,2,0,1,42,0,0,0,9,1,0,2,12,3,0,1,
68,0,0,0,13,2,3,0,12,3,0,4,115,110,117,109,
0,0,0,0,9,2,2,3,12,3,0,1,58,0,0,0,
1,2,2,3,12,4,0,1,58,0,0,0,12,5,0,4,
3715,157 → 2082,84
18,0,0,10,12,11,0,3,115,116,114,0,13,10,11,0,
15,11,7,0,31,9,11,1,19,9,10,9,28,10,0,0,
10,6,10,9,18,0,255,246,15,5,6,0,31,3,5,1,
19,3,4,3,1,2,2,3,15,1,2,0,30,5,0,104,
32,32,32,32,114,32,61,32,103,101,116,95,114,101,103,40,
116,41,0,0,12,5,0,7,103,101,116,95,114,101,103,0,
13,4,5,0,15,5,1,0,31,3,5,1,19,3,4,3,
15,2,3,0,30,6,0,105,32,32,32,32,105,110,115,101,
114,116,40,40,39,102,110,99,39,44,114,44,116,41,41,0,
12,5,0,6,105,110,115,101,114,116,0,0,13,4,5,0,
12,8,0,3,102,110,99,0,15,9,2,0,15,10,1,0,
27,5,8,3,31,3,5,1,19,3,4,3,30,4,0,106,
32,32,32,32,114,101,116,117,114,110,32,114,0,0,0,0,
20,2,0,0,0,0,0,0,12,20,0,3,102,110,99,0,
14,20,19,0,30,4,0,108,100,101,102,32,109,97,112,95,
116,97,103,115,40,41,58,0,16,20,2,176,44,17,0,0,
30,4,0,108,100,101,102,32,109,97,112,95,116,97,103,115,
40,41,58,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,8,
109,97,112,95,116,97,103,115,0,0,0,0,34,1,0,0,
30,4,0,109,32,32,32,32,116,97,103,115,32,61,32,123,
125,0,0,0,26,2,0,0,15,1,2,0,30,4,0,110,
32,32,32,32,111,117,116,32,61,32,91,93,0,0,0,0,
27,3,0,0,15,2,3,0,30,3,0,111,32,32,32,32,
110,32,61,32,48,0,0,0,11,4,0,0,0,0,0,0,
0,0,0,0,15,3,4,0,30,6,0,112,32,32,32,32,
102,111,114,32,105,116,101,109,32,105,110,32,68,46,111,117,
116,58,0,0,12,6,0,1,68,0,0,0,13,5,6,0,
19,3,4,3,1,2,2,3,15,1,2,0,12,5,0,7,
103,101,116,95,114,101,103,0,13,4,5,0,15,5,1,0,
31,3,5,1,19,3,4,3,15,2,3,0,12,5,0,6,
105,110,115,101,114,116,0,0,13,4,5,0,12,8,0,3,
102,110,99,0,15,9,2,0,15,10,1,0,27,5,8,3,
31,3,5,1,19,3,4,3,20,2,0,0,0,0,0,0,
12,22,0,3,102,110,99,0,14,22,21,0,16,22,1,119,
44,17,0,0,26,2,0,0,15,1,2,0,27,3,0,0,
15,2,3,0,11,4,0,0,0,0,0,0,0,0,0,0,
15,3,4,0,12,6,0,1,68,0,0,0,13,5,6,0,
12,6,0,3,111,117,116,0,9,5,5,6,11,6,0,0,
0,0,0,0,0,0,0,0,42,4,5,6,18,0,0,145,
30,8,0,113,32,32,32,32,32,32,32,32,105,102,32,105,
116,101,109,91,48,93,32,61,61,32,39,116,97,103,39,58,
0,0,0,0,11,8,0,0,0,0,0,0,0,0,0,0,
9,7,4,8,12,8,0,3,116,97,103,0,23,7,7,8,
21,7,0,0,18,0,0,24,30,8,0,114,32,32,32,32,
32,32,32,32,32,32,32,32,116,97,103,115,91,105,116,101,
109,91,49,93,93,32,61,32,110,0,0,0,11,8,0,0,
0,0,0,0,0,0,240,63,9,7,4,8,10,1,7,3,
30,6,0,115,32,32,32,32,32,32,32,32,32,32,32,32,
99,111,110,116,105,110,117,101,0,0,0,0,18,0,255,215,
18,0,0,1,30,8,0,116,32,32,32,32,32,32,32,32,
105,102,32,105,116,101,109,91,48,93,32,61,61,32,39,114,
101,103,115,39,58,0,0,0,11,8,0,0,0,0,0,0,
0,0,0,0,9,7,4,8,12,8,0,4,114,101,103,115,
0,0,0,0,23,7,7,8,21,7,0,0,18,0,0,59,
30,13,0,117,32,32,32,32,32,32,32,32,32,32,32,32,
111,117,116,46,97,112,112,101,110,100,40,103,101,116,95,99,
111,100,101,49,54,40,82,69,71,83,44,105,116,101,109,91,
49,93,44,48,41,41,0,0,12,9,0,6,97,112,112,101,
0,0,0,0,0,0,0,0,42,4,5,6,18,0,0,71,
11,8,0,0,0,0,0,0,0,0,0,0,9,7,4,8,
12,8,0,3,116,97,103,0,23,7,7,8,21,7,0,0,
18,0,0,8,11,8,0,0,0,0,0,0,0,0,240,63,
9,7,4,8,10,1,7,3,18,0,255,240,18,0,0,1,
11,8,0,0,0,0,0,0,0,0,0,0,9,7,4,8,
12,8,0,4,114,101,103,115,0,0,0,0,23,7,7,8,
21,7,0,0,18,0,0,32,12,9,0,6,97,112,112,101,
110,100,0,0,9,8,2,9,12,11,0,10,103,101,116,95,
99,111,100,101,49,54,0,0,13,10,11,0,12,14,0,4,
82,69,71,83,0,0,0,0,13,11,14,0,11,14,0,0,
0,0,0,0,0,0,240,63,9,12,4,14,11,13,0,0,
0,0,0,0,0,0,0,0,31,9,11,3,19,9,10,9,
31,7,9,1,19,7,8,7,30,5,0,118,32,32,32,32,
32,32,32,32,32,32,32,32,110,32,43,61,32,49,0,0,
31,7,9,1,19,7,8,7,11,8,0,0,0,0,0,0,
0,0,240,63,1,7,3,8,15,3,7,0,18,0,255,199,
18,0,0,1,12,9,0,6,97,112,112,101,110,100,0,0,
9,8,2,9,15,9,4,0,31,7,9,1,19,7,8,7,
11,8,0,0,0,0,0,0,0,0,240,63,1,7,3,8,
15,3,7,0,30,6,0,119,32,32,32,32,32,32,32,32,
32,32,32,32,99,111,110,116,105,110,117,101,0,0,0,0,
18,0,255,138,18,0,0,1,30,7,0,120,32,32,32,32,
32,32,32,32,111,117,116,46,97,112,112,101,110,100,40,105,
116,101,109,41,0,0,0,0,12,9,0,6,97,112,112,101,
110,100,0,0,9,8,2,9,15,9,4,0,31,7,9,1,
19,7,8,7,30,4,0,121,32,32,32,32,32,32,32,32,
110,32,43,61,32,49,0,0,11,8,0,0,0,0,0,0,
0,0,240,63,1,7,3,8,15,3,7,0,18,0,255,111,
30,8,0,122,32,32,32,32,102,111,114,32,110,32,105,110,
32,114,97,110,103,101,40,48,44,108,101,110,40,111,117,116,
41,41,58,0,12,7,0,5,114,97,110,103,101,0,0,0,
13,6,7,0,11,7,0,0,0,0,0,0,0,0,0,0,
12,10,0,3,108,101,110,0,13,9,10,0,15,10,2,0,
31,8,10,1,19,8,9,8,31,5,7,2,19,5,6,5,
11,6,0,0,0,0,0,0,0,0,0,0,42,3,5,6,
18,0,0,182,30,6,0,123,32,32,32,32,32,32,32,32,
105,116,101,109,32,61,32,111,117,116,91,110,93,0,0,0,
9,7,2,3,15,4,7,0,30,8,0,124,32,32,32,32,
32,32,32,32,105,102,32,105,116,101,109,91,48,93,32,61,
61,32,39,106,117,109,112,39,58,0,0,0,11,8,0,0,
0,0,0,0,0,0,0,0,9,7,4,8,12,8,0,4,
106,117,109,112,0,0,0,0,23,7,7,8,21,7,0,0,
18,0,0,38,30,14,0,125,32,32,32,32,32,32,32,32,
32,32,32,32,111,117,116,91,110,93,32,61,32,103,101,116,
95,99,111,100,101,49,54,40,74,85,77,80,44,48,44,116,
97,103,115,91,105,116,101,109,91,49,93,93,45,110,41,0,
12,9,0,10,103,101,116,95,99,111,100,101,49,54,0,0,
13,8,9,0,12,12,0,4,74,85,77,80,0,0,0,0,
13,9,12,0,11,10,0,0,0,0,0,0,0,0,0,0,
11,13,0,0,0,0,0,0,0,0,240,63,9,12,4,13,
9,11,1,12,2,11,11,3,31,7,9,3,19,7,8,7,
10,2,3,7,18,0,0,116,30,9,0,126,32,32,32,32,
32,32,32,32,101,108,105,102,32,105,116,101,109,91,48,93,
32,61,61,32,39,115,101,116,106,109,112,39,58,0,0,0,
15,3,7,0,18,0,255,185,12,7,0,5,114,97,110,103,
101,0,0,0,13,6,7,0,11,7,0,0,0,0,0,0,
0,0,0,0,12,10,0,3,108,101,110,0,13,9,10,0,
15,10,2,0,31,8,10,1,19,8,9,8,31,5,7,2,
19,5,6,5,11,6,0,0,0,0,0,0,0,0,0,0,
42,3,5,6,18,0,0,99,9,7,2,3,15,4,7,0,
11,8,0,0,0,0,0,0,0,0,0,0,9,7,4,8,
12,8,0,4,106,117,109,112,0,0,0,0,23,7,7,8,
21,7,0,0,18,0,0,23,12,9,0,10,103,101,116,95,
99,111,100,101,49,54,0,0,13,8,9,0,12,12,0,4,
74,85,77,80,0,0,0,0,13,9,12,0,11,10,0,0,
0,0,0,0,0,0,0,0,11,13,0,0,0,0,0,0,
0,0,240,63,9,12,4,13,9,11,1,12,2,11,11,3,
31,7,9,3,19,7,8,7,10,2,3,7,18,0,0,64,
11,8,0,0,0,0,0,0,0,0,0,0,9,7,4,8,
12,8,0,6,115,101,116,106,109,112,0,0,23,7,7,8,
21,7,0,0,18,0,0,39,30,15,0,127,32,32,32,32,
32,32,32,32,32,32,32,32,111,117,116,91,110,93,32,61,
32,103,101,116,95,99,111,100,101,49,54,40,83,69,84,74,
77,80,44,48,44,116,97,103,115,91,105,116,101,109,91,49,
93,93,45,110,41,0,0,0,12,9,0,10,103,101,116,95,
21,7,0,0,18,0,0,23,12,9,0,10,103,101,116,95,
99,111,100,101,49,54,0,0,13,8,9,0,12,12,0,6,
83,69,84,74,77,80,0,0,13,9,12,0,11,10,0,0,
0,0,0,0,0,0,0,0,11,13,0,0,0,0,0,0,
0,0,240,63,9,12,4,13,9,11,1,12,2,11,11,3,
31,7,9,3,19,7,8,7,10,2,3,7,18,0,0,58,
30,8,0,128,32,32,32,32,32,32,32,32,101,108,105,102,
32,105,116,101,109,91,48,93,32,61,61,32,39,102,110,99,
39,58,0,0,11,8,0,0,0,0,0,0,0,0,0,0,
9,7,4,8,12,8,0,3,102,110,99,0,23,7,7,8,
21,7,0,0,18,0,0,40,30,16,0,129,32,32,32,32,
32,32,32,32,32,32,32,32,111,117,116,91,110,93,32,61,
32,103,101,116,95,99,111,100,101,49,54,40,68,69,70,44,
105,116,101,109,91,49,93,44,116,97,103,115,91,105,116,101,
109,91,50,93,93,45,110,41,0,0,0,0,12,9,0,10,
103,101,116,95,99,111,100,101,49,54,0,0,13,8,9,0,
12,12,0,3,68,69,70,0,13,9,12,0,11,12,0,0,
0,0,0,0,0,0,240,63,9,10,4,12,11,13,0,0,
0,0,0,0,0,0,0,64,9,12,4,13,9,11,1,12,
2,11,11,3,31,7,9,3,19,7,8,7,10,2,3,7,
18,0,0,1,18,0,255,74,30,8,0,130,32,32,32,32,
102,111,114,32,110,32,105,110,32,114,97,110,103,101,40,48,
44,108,101,110,40,111,117,116,41,41,58,0,12,7,0,5,
114,97,110,103,101,0,0,0,13,6,7,0,11,7,0,0,
0,0,0,0,0,0,0,0,12,10,0,3,108,101,110,0,
13,9,10,0,15,10,2,0,31,8,10,1,19,8,9,8,
31,5,7,2,19,5,6,5,11,6,0,0,0,0,0,0,
0,0,0,0,42,3,5,6,18,0,0,236,30,6,0,131,
32,32,32,32,32,32,32,32,105,116,101,109,32,61,32,111,
117,116,91,110,93,0,0,0,9,7,2,3,15,4,7,0,
30,8,0,132,32,32,32,32,32,32,32,32,105,102,32,105,
116,101,109,91,48,93,32,61,61,32,39,100,97,116,97,39,
58,0,0,0,11,8,0,0,0,0,0,0,0,0,0,0,
9,7,4,8,12,8,0,4,100,97,116,97,0,0,0,0,
23,7,7,8,21,7,0,0,18,0,0,16,30,8,0,133,
32,32,32,32,32,32,32,32,32,32,32,32,111,117,116,91,
110,93,32,61,32,105,116,101,109,91,49,93,0,0,0,0,
31,7,9,3,19,7,8,7,10,2,3,7,18,0,0,32,
11,8,0,0,0,0,0,0,0,0,0,0,9,7,4,8,
12,8,0,3,102,110,99,0,23,7,7,8,21,7,0,0,
18,0,0,23,12,9,0,10,103,101,116,95,99,111,100,101,
49,54,0,0,13,8,9,0,12,12,0,3,68,69,70,0,
13,9,12,0,11,12,0,0,0,0,0,0,0,0,240,63,
9,10,4,12,11,13,0,0,0,0,0,0,0,0,0,64,
9,12,4,13,9,11,1,12,2,11,11,3,31,7,9,3,
19,7,8,7,10,2,3,7,18,0,0,1,18,0,255,157,
12,7,0,5,114,97,110,103,101,0,0,0,13,6,7,0,
11,7,0,0,0,0,0,0,0,0,0,0,12,10,0,3,
108,101,110,0,13,9,10,0,15,10,2,0,31,8,10,1,
19,8,9,8,31,5,7,2,19,5,6,5,11,6,0,0,
0,0,0,0,0,0,0,0,42,3,5,6,18,0,0,140,
9,7,2,3,15,4,7,0,11,8,0,0,0,0,0,0,
0,0,0,0,9,7,4,8,12,8,0,4,100,97,116,97,
0,0,0,0,23,7,7,8,21,7,0,0,18,0,0,7,
11,8,0,0,0,0,0,0,0,0,240,63,9,7,4,8,
10,2,3,7,18,0,0,121,30,8,0,134,32,32,32,32,
32,32,32,32,101,108,105,102,32,105,116,101,109,91,48,93,
32,61,61,32,39,99,111,100,101,39,58,0,11,8,0,0,
0,0,0,0,0,0,0,0,9,7,4,8,12,8,0,4,
99,111,100,101,0,0,0,0,23,7,7,8,21,7,0,0,
18,0,0,79,30,8,0,135,32,32,32,32,32,32,32,32,
32,32,32,32,105,44,97,44,98,44,99,32,61,32,105,116,
101,109,91,49,58,93,0,0,11,9,0,0,0,0,0,0,
0,0,240,63,28,10,0,0,27,8,9,2,9,7,4,8,
11,10,0,0,0,0,0,0,0,0,0,0,9,9,7,10,
15,8,9,0,11,11,0,0,0,0,0,0,0,0,240,63,
9,10,7,11,15,9,10,0,11,12,0,0,0,0,0,0,
0,0,0,64,9,11,7,12,15,10,11,0,11,13,0,0,
0,0,0,0,0,0,8,64,9,12,7,13,15,11,12,0,
30,13,0,136,32,32,32,32,32,32,32,32,32,32,32,32,
111,117,116,91,110,93,32,61,32,99,104,114,40,105,41,43,
99,104,114,40,97,41,43,99,104,114,40,98,41,43,99,104,
114,40,99,41,0,0,0,0,12,13,0,3,99,104,114,0,
10,2,3,7,18,0,0,78,11,8,0,0,0,0,0,0,
0,0,0,0,9,7,4,8,12,8,0,4,99,111,100,101,
0,0,0,0,23,7,7,8,21,7,0,0,18,0,0,56,
11,9,0,0,0,0,0,0,0,0,240,63,28,10,0,0,
27,8,9,2,9,7,4,8,11,10,0,0,0,0,0,0,
0,0,0,0,9,9,7,10,15,8,9,0,11,11,0,0,
0,0,0,0,0,0,240,63,9,10,7,11,15,9,10,0,
11,12,0,0,0,0,0,0,0,0,0,64,9,11,7,12,
15,10,11,0,11,13,0,0,0,0,0,0,0,0,8,64,
9,12,7,13,15,11,12,0,12,13,0,3,99,104,114,0,
13,12,13,0,15,13,8,0,31,7,13,1,19,7,12,7,
12,14,0,3,99,104,114,0,13,13,14,0,15,14,9,0,
31,12,14,1,19,12,13,12,1,7,7,12,12,14,0,3,
3872,226 → 2166,119
99,104,114,0,13,13,14,0,15,14,10,0,31,12,14,1,
19,12,13,12,1,7,7,12,12,14,0,3,99,104,114,0,
13,13,14,0,15,14,11,0,31,12,14,1,19,12,13,12,
1,7,7,12,10,2,3,7,18,0,0,24,30,10,0,138,
32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,
101,32,115,116,114,40,40,39,104,117,104,63,39,44,105,116,
101,109,41,41,0,0,0,0,12,13,0,3,115,116,114,0,
13,12,13,0,12,14,0,4,104,117,104,63,0,0,0,0,
15,15,4,0,27,13,14,2,31,7,13,1,19,7,12,7,
37,7,0,0,18,0,0,1,30,8,0,139,32,32,32,32,
32,32,32,32,105,102,32,108,101,110,40,111,117,116,91,110,
93,41,32,33,61,32,52,58,0,0,0,0,12,13,0,3,
1,7,7,12,10,2,3,7,18,0,0,13,12,13,0,3,
115,116,114,0,13,12,13,0,12,14,0,4,104,117,104,63,
0,0,0,0,15,15,4,0,27,13,14,2,31,7,13,1,
19,7,12,7,37,7,0,0,18,0,0,1,12,13,0,3,
108,101,110,0,13,12,13,0,9,13,2,3,31,7,13,1,
19,7,12,7,11,12,0,0,0,0,0,0,0,0,16,64,
35,7,7,12,21,7,0,0,18,0,0,51,30,18,0,140,
32,32,32,32,32,32,32,32,32,32,32,32,114,97,105,115,
101,32,40,39,99,111,100,101,32,39,43,115,116,114,40,110,
41,43,39,32,105,115,32,119,114,111,110,103,32,108,101,110,
103,116,104,32,39,43,115,116,114,40,108,101,110,40,111,117,
116,91,110,93,41,41,41,0,12,7,0,5,99,111,100,101,
32,0,0,0,12,14,0,3,115,116,114,0,13,13,14,0,
15,14,3,0,31,12,14,1,19,12,13,12,1,7,7,12,
12,12,0,17,32,105,115,32,119,114,111,110,103,32,108,101,
110,103,116,104,32,0,0,0,1,7,7,12,12,14,0,3,
115,116,114,0,13,13,14,0,12,16,0,3,108,101,110,0,
13,15,16,0,9,16,2,3,31,14,16,1,19,14,15,14,
31,12,14,1,19,12,13,12,1,7,7,12,37,7,0,0,
18,0,0,1,18,0,255,20,30,4,0,141,32,32,32,32,
68,46,111,117,116,32,61,32,111,117,116,0,12,6,0,1,
35,7,7,12,21,7,0,0,18,0,0,32,12,7,0,5,
99,111,100,101,32,0,0,0,12,14,0,3,115,116,114,0,
13,13,14,0,15,14,3,0,31,12,14,1,19,12,13,12,
1,7,7,12,12,12,0,17,32,105,115,32,119,114,111,110,
103,32,108,101,110,103,116,104,32,0,0,0,1,7,7,12,
12,14,0,3,115,116,114,0,13,13,14,0,12,16,0,3,
108,101,110,0,13,15,16,0,9,16,2,3,31,14,16,1,
19,14,15,14,31,12,14,1,19,12,13,12,1,7,7,12,
37,7,0,0,18,0,0,1,18,0,255,116,12,6,0,1,
68,0,0,0,13,5,6,0,12,6,0,3,111,117,116,0,
10,5,6,2,0,0,0,0,12,21,0,8,109,97,112,95,
116,97,103,115,0,0,0,0,14,21,20,0,30,6,0,143,
100,101,102,32,103,101,116,95,116,109,112,40,114,61,78,111,
110,101,41,58,0,0,0,0,16,21,0,60,44,5,0,0,
30,6,0,143,100,101,102,32,103,101,116,95,116,109,112,40,
114,61,78,111,110,101,41,58,0,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,7,103,101,116,95,116,109,112,0,
34,1,0,0,28,1,0,0,28,2,0,0,32,1,0,2,
30,7,0,144,32,32,32,32,105,102,32,114,32,33,61,32,
78,111,110,101,58,32,114,101,116,117,114,110,32,114,0,0,
10,5,6,2,0,0,0,0,12,23,0,8,109,97,112,95,
116,97,103,115,0,0,0,0,14,23,22,0,16,23,0,27,
44,5,0,0,28,1,0,0,28,2,0,0,32,1,0,2,
28,3,0,0,35,2,1,3,21,2,0,0,18,0,0,3,
20,1,0,0,18,0,0,1,30,7,0,145,32,32,32,32,
114,101,116,117,114,110,32,103,101,116,95,116,109,112,115,40,
49,41,91,48,93,0,0,0,12,4,0,8,103,101,116,95,
20,1,0,0,18,0,0,1,12,4,0,8,103,101,116,95,
116,109,112,115,0,0,0,0,13,3,4,0,11,4,0,0,
0,0,0,0,0,0,240,63,31,2,4,1,19,2,3,2,
11,3,0,0,0,0,0,0,0,0,0,0,9,2,2,3,
20,2,0,0,0,0,0,0,12,22,0,7,103,101,116,95,
116,109,112,0,14,22,21,0,30,5,0,146,100,101,102,32,
103,101,116,95,116,109,112,115,40,116,41,58,0,0,0,0,
16,22,0,150,44,14,0,0,30,5,0,146,100,101,102,32,
103,101,116,95,116,109,112,115,40,116,41,58,0,0,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,8,103,101,116,95,
116,109,112,115,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,5,0,147,32,32,32,32,114,115,32,61,
32,97,108,108,111,99,40,116,41,0,0,0,12,5,0,5,
97,108,108,111,99,0,0,0,13,4,5,0,15,5,1,0,
31,3,5,1,19,3,4,3,15,2,3,0,30,7,0,148,
32,32,32,32,114,101,103,115,32,61,32,114,97,110,103,101,
40,114,115,44,114,115,43,116,41,0,0,0,12,6,0,5,
114,97,110,103,101,0,0,0,13,5,6,0,15,6,2,0,
1,7,2,1,31,4,6,2,19,4,5,4,15,3,4,0,
30,5,0,149,32,32,32,32,102,111,114,32,114,32,105,110,
32,114,101,103,115,58,0,0,11,5,0,0,0,0,0,0,
0,0,0,0,42,4,3,5,18,0,0,59,30,9,0,150,
32,32,32,32,32,32,32,32,115,101,116,95,114,101,103,40,
114,44,34,36,34,43,115,116,114,40,68,46,95,116,109,112,
105,41,41,0,12,8,0,7,115,101,116,95,114,101,103,0,
13,7,8,0,15,8,4,0,12,9,0,1,36,0,0,0,
12,12,0,3,115,116,114,0,13,11,12,0,12,13,0,1,
68,0,0,0,13,12,13,0,12,13,0,5,95,116,109,112,
105,0,0,0,9,12,12,13,31,10,12,1,19,10,11,10,
1,9,9,10,31,6,8,2,19,6,7,6,30,6,0,151,
32,32,32,32,32,32,32,32,68,46,95,116,109,112,105,32,
43,61,32,49,0,0,0,0,12,7,0,1,68,0,0,0,
20,2,0,0,0,0,0,0,12,24,0,7,103,101,116,95,
116,109,112,0,14,24,23,0,16,24,0,84,44,14,0,0,
28,2,0,0,9,1,0,2,12,5,0,5,97,108,108,111,
99,0,0,0,13,4,5,0,15,5,1,0,31,3,5,1,
19,3,4,3,15,2,3,0,12,6,0,5,114,97,110,103,
101,0,0,0,13,5,6,0,15,6,2,0,1,7,2,1,
31,4,6,2,19,4,5,4,15,3,4,0,11,5,0,0,
0,0,0,0,0,0,0,0,42,4,3,5,18,0,0,42,
12,8,0,7,115,101,116,95,114,101,103,0,13,7,8,0,
15,8,4,0,12,9,0,1,36,0,0,0,12,12,0,3,
115,116,114,0,13,11,12,0,12,13,0,1,68,0,0,0,
13,12,13,0,12,13,0,5,95,116,109,112,105,0,0,0,
9,12,12,13,31,10,12,1,19,10,11,10,1,9,9,10,
31,6,8,2,19,6,7,6,12,7,0,1,68,0,0,0,
13,6,7,0,12,8,0,1,68,0,0,0,13,7,8,0,
12,8,0,5,95,116,109,112,105,0,0,0,9,7,7,8,
11,8,0,0,0,0,0,0,0,0,240,63,1,7,7,8,
12,8,0,5,95,116,109,112,105,0,0,0,10,6,8,7,
18,0,255,197,30,6,0,152,32,32,32,32,68,46,116,109,
112,99,32,43,61,32,116,32,35,82,69,71,0,0,0,0,
12,6,0,1,68,0,0,0,13,5,6,0,12,7,0,1,
68,0,0,0,13,6,7,0,12,7,0,4,116,109,112,99,
0,0,0,0,9,6,6,7,1,6,6,1,12,7,0,4,
116,109,112,99,0,0,0,0,10,5,7,6,30,4,0,153,
32,32,32,32,114,101,116,117,114,110,32,114,101,103,115,0,
20,3,0,0,0,0,0,0,12,23,0,8,103,101,116,95,
116,109,112,115,0,0,0,0,14,23,22,0,30,4,0,154,
100,101,102,32,97,108,108,111,99,40,116,41,58,0,0,0,
16,23,0,111,44,16,0,0,30,4,0,154,100,101,102,32,
97,108,108,111,99,40,116,41,58,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,5,97,108,108,111,99,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,18,0,155,
32,32,32,32,115,32,61,32,39,39,46,106,111,105,110,40,
91,34,48,49,34,91,114,32,105,110,32,68,46,114,50,110,
93,32,102,111,114,32,114,32,105,110,32,114,97,110,103,101,
40,48,44,109,105,110,40,50,53,54,44,68,46,109,114,101,
103,43,116,41,41,93,41,0,12,4,0,0,0,0,0,0,
12,5,0,4,106,111,105,110,0,0,0,0,9,4,4,5,
27,6,0,0,12,10,0,5,114,97,110,103,101,0,0,0,
13,9,10,0,11,10,0,0,0,0,0,0,0,0,0,0,
12,13,0,3,109,105,110,0,13,12,13,0,11,13,0,0,
0,0,0,0,0,0,112,64,12,15,0,1,68,0,0,0,
13,14,15,0,12,15,0,4,109,114,101,103,0,0,0,0,
9,14,14,15,1,14,14,1,31,11,13,2,19,11,12,11,
31,8,10,2,19,8,9,8,11,9,0,0,0,0,0,0,
0,0,0,0,42,7,8,9,18,0,0,14,12,10,0,2,
48,49,0,0,12,12,0,1,68,0,0,0,13,11,12,0,
12,12,0,3,114,50,110,0,9,11,11,12,36,11,11,7,
9,10,10,11,28,11,0,0,10,6,11,10,18,0,255,242,
15,5,6,0,31,3,5,1,19,3,4,3,15,2,3,0,
30,7,0,156,32,32,32,32,114,101,116,117,114,110,32,115,
46,105,110,100,101,120,40,39,48,39,42,116,41,0,0,0,
12,5,0,5,105,110,100,101,120,0,0,0,9,4,2,5,
12,5,0,1,48,0,0,0,3,5,5,1,31,3,5,1,
19,3,4,3,20,3,0,0,0,0,0,0,12,24,0,5,
97,108,108,111,99,0,0,0,14,24,23,0,30,4,0,157,
100,101,102,32,105,115,95,116,109,112,40,114,41,58,0,0,
16,24,0,62,44,4,0,0,30,4,0,157,100,101,102,32,
105,115,95,116,109,112,40,114,41,58,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,6,105,115,95,116,109,112,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,8,0,158,
32,32,32,32,105,102,32,114,32,105,115,32,78,111,110,101,
58,32,114,101,116,117,114,110,32,70,97,108,115,101,0,0,
18,0,255,214,12,6,0,1,68,0,0,0,13,5,6,0,
12,7,0,1,68,0,0,0,13,6,7,0,12,7,0,4,
116,109,112,99,0,0,0,0,9,6,6,7,1,6,6,1,
12,7,0,4,116,109,112,99,0,0,0,0,10,5,7,6,
20,3,0,0,0,0,0,0,12,25,0,8,103,101,116,95,
116,109,112,115,0,0,0,0,14,25,24,0,16,25,0,69,
44,16,0,0,28,2,0,0,9,1,0,2,12,4,0,0,
0,0,0,0,12,5,0,4,106,111,105,110,0,0,0,0,
9,4,4,5,27,6,0,0,12,10,0,5,114,97,110,103,
101,0,0,0,13,9,10,0,11,10,0,0,0,0,0,0,
0,0,0,0,12,13,0,3,109,105,110,0,13,12,13,0,
11,13,0,0,0,0,0,0,0,0,112,64,12,15,0,1,
68,0,0,0,13,14,15,0,12,15,0,4,109,114,101,103,
0,0,0,0,9,14,14,15,1,14,14,1,31,11,13,2,
19,11,12,11,31,8,10,2,19,8,9,8,11,9,0,0,
0,0,0,0,0,0,0,0,42,7,8,9,18,0,0,14,
12,10,0,2,48,49,0,0,12,12,0,1,68,0,0,0,
13,11,12,0,12,12,0,3,114,50,110,0,9,11,11,12,
36,11,11,7,9,10,10,11,28,11,0,0,10,6,11,10,
18,0,255,242,15,5,6,0,31,3,5,1,19,3,4,3,
15,2,3,0,12,5,0,5,105,110,100,101,120,0,0,0,
9,4,2,5,12,5,0,1,48,0,0,0,3,5,5,1,
31,3,5,1,19,3,4,3,20,3,0,0,0,0,0,0,
12,26,0,5,97,108,108,111,99,0,0,0,14,26,25,0,
16,26,0,29,44,4,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,23,2,1,3,21,2,0,0,18,0,0,6,
11,2,0,0,0,0,0,0,0,0,0,0,20,2,0,0,
18,0,0,1,30,8,0,159,32,32,32,32,114,101,116,117,
114,110,32,40,68,46,114,50,110,91,114,93,91,48,93,32,
61,61,32,39,36,39,41,0,12,3,0,1,68,0,0,0,
13,2,3,0,12,3,0,3,114,50,110,0,9,2,2,3,
9,2,2,1,11,3,0,0,0,0,0,0,0,0,0,0,
9,2,2,3,12,3,0,1,36,0,0,0,23,2,2,3,
20,2,0,0,0,0,0,0,12,25,0,6,105,115,95,116,
109,112,0,0,14,25,24,0,30,4,0,160,100,101,102,32,
117,110,95,116,109,112,40,114,41,58,0,0,16,25,0,64,
44,7,0,0,30,4,0,160,100,101,102,32,117,110,95,116,
109,112,40,114,41,58,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,6,117,110,95,116,109,112,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,5,0,161,32,32,32,32,
110,32,61,32,68,46,114,50,110,91,114,93,0,0,0,0,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,3,
114,50,110,0,9,3,3,4,9,3,3,1,15,2,3,0,
30,4,0,162,32,32,32,32,102,114,101,101,95,114,101,103,
40,114,41,0,12,5,0,8,102,114,101,101,95,114,101,103,
18,0,0,1,12,3,0,1,68,0,0,0,13,2,3,0,
12,3,0,3,114,50,110,0,9,2,2,3,9,2,2,1,
11,3,0,0,0,0,0,0,0,0,0,0,9,2,2,3,
12,3,0,1,36,0,0,0,23,2,2,3,20,2,0,0,
0,0,0,0,12,27,0,6,105,115,95,116,109,112,0,0,
14,27,26,0,16,27,0,31,44,7,0,0,28,2,0,0,
9,1,0,2,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,3,114,50,110,0,9,3,3,4,9,3,3,1,
15,2,3,0,12,5,0,8,102,114,101,101,95,114,101,103,
0,0,0,0,13,4,5,0,15,5,1,0,31,3,5,1,
19,3,4,3,30,6,0,163,32,32,32,32,115,101,116,95,
114,101,103,40,114,44,39,42,39,43,110,41,0,0,0,0,
12,5,0,7,115,101,116,95,114,101,103,0,13,4,5,0,
15,5,1,0,12,6,0,1,42,0,0,0,1,6,6,2,
31,3,5,2,19,3,4,3,0,0,0,0,12,26,0,6,
117,110,95,116,109,112,0,0,14,26,25,0,30,5,0,164,
100,101,102,32,102,114,101,101,95,116,109,112,40,114,41,58,
0,0,0,0,16,26,0,55,44,5,0,0,30,5,0,164,
100,101,102,32,102,114,101,101,95,116,109,112,40,114,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,8,0,165,32,32,32,32,
105,102,32,105,115,95,116,109,112,40,114,41,58,32,102,114,
101,101,95,114,101,103,40,114,41,0,0,0,12,4,0,6,
105,115,95,116,109,112,0,0,13,3,4,0,15,4,1,0,
31,2,4,1,19,2,3,2,21,2,0,0,18,0,0,10,
12,4,0,8,102,114,101,101,95,114,101,103,0,0,0,0,
13,3,4,0,15,4,1,0,31,2,4,1,19,2,3,2,
18,0,0,1,30,4,0,166,32,32,32,32,114,101,116,117,
114,110,32,114,0,0,0,0,20,1,0,0,0,0,0,0,
12,27,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
14,27,26,0,30,5,0,167,100,101,102,32,102,114,101,101,
95,116,109,112,115,40,114,41,58,0,0,0,16,27,0,44,
44,7,0,0,30,5,0,167,100,101,102,32,102,114,101,101,
95,116,109,112,115,40,114,41,58,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,9,102,114,101,101,95,116,109,112,
115,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,7,0,168,32,32,32,32,102,111,114,32,107,32,105,110,
32,114,58,32,102,114,101,101,95,116,109,112,40,107,41,0,
11,3,0,0,0,0,0,0,0,0,0,0,42,2,1,3,
18,0,0,10,12,6,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,5,6,0,15,6,2,0,31,4,6,1,
19,4,5,4,18,0,255,246,0,0,0,0,12,28,0,9,
102,114,101,101,95,116,109,112,115,0,0,0,14,28,27,0,
30,4,0,169,100,101,102,32,103,101,116,95,114,101,103,40,
110,41,58,0,16,28,0,79,44,8,0,0,30,4,0,169,
100,101,102,32,103,101,116,95,114,101,103,40,110,41,58,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,7,103,101,116,95,
114,101,103,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,6,0,170,32,32,32,32,105,102,32,110,32,110,111,116,
32,105,110,32,68,46,110,50,114,58,0,0,12,3,0,1,
19,3,4,3,12,5,0,7,115,101,116,95,114,101,103,0,
13,4,5,0,15,5,1,0,12,6,0,1,42,0,0,0,
1,6,6,2,31,3,5,2,19,3,4,3,0,0,0,0,
12,28,0,6,117,110,95,116,109,112,0,0,14,28,27,0,
16,28,0,24,44,5,0,0,28,2,0,0,9,1,0,2,
12,4,0,6,105,115,95,116,109,112,0,0,13,3,4,0,
15,4,1,0,31,2,4,1,19,2,3,2,21,2,0,0,
18,0,0,10,12,4,0,8,102,114,101,101,95,114,101,103,
0,0,0,0,13,3,4,0,15,4,1,0,31,2,4,1,
19,2,3,2,18,0,0,1,20,1,0,0,0,0,0,0,
12,29,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
14,29,28,0,16,29,0,19,44,7,0,0,28,2,0,0,
9,1,0,2,11,3,0,0,0,0,0,0,0,0,0,0,
42,2,1,3,18,0,0,10,12,6,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,5,6,0,15,6,2,0,
31,4,6,1,19,4,5,4,18,0,255,246,0,0,0,0,
12,30,0,9,102,114,101,101,95,116,109,112,115,0,0,0,
14,30,29,0,16,30,0,43,44,8,0,0,28,2,0,0,
9,1,0,2,12,3,0,1,68,0,0,0,13,2,3,0,
12,3,0,3,110,50,114,0,9,2,2,3,36,2,2,1,
11,3,0,0,0,0,0,0,0,0,0,0,23,2,2,3,
21,2,0,0,18,0,0,18,12,4,0,7,115,101,116,95,
114,101,103,0,13,3,4,0,12,7,0,5,97,108,108,111,
99,0,0,0,13,6,7,0,11,7,0,0,0,0,0,0,
0,0,240,63,31,4,7,1,19,4,6,4,15,5,1,0,
31,2,4,2,19,2,3,2,18,0,0,1,12,3,0,1,
68,0,0,0,13,2,3,0,12,3,0,3,110,50,114,0,
9,2,2,3,36,2,2,1,11,3,0,0,0,0,0,0,
0,0,0,0,23,2,2,3,21,2,0,0,18,0,0,26,
30,7,0,171,32,32,32,32,32,32,32,32,115,101,116,95,
114,101,103,40,97,108,108,111,99,40,49,41,44,110,41,0,
12,4,0,7,115,101,116,95,114,101,103,0,13,3,4,0,
12,7,0,5,97,108,108,111,99,0,0,0,13,6,7,0,
11,7,0,0,0,0,0,0,0,0,240,63,31,4,7,1,
19,4,6,4,15,5,1,0,31,2,4,2,19,2,3,2,
18,0,0,1,30,5,0,172,32,32,32,32,114,101,116,117,
114,110,32,68,46,110,50,114,91,110,93,0,12,3,0,1,
68,0,0,0,13,2,3,0,12,3,0,3,110,50,114,0,
9,2,2,3,9,2,2,1,20,2,0,0,0,0,0,0,
12,29,0,7,103,101,116,95,114,101,103,0,14,29,28,0,
30,5,0,177,100,101,102,32,115,101,116,95,114,101,103,40,
114,44,110,41,58,0,0,0,16,29,0,78,44,9,0,0,
30,5,0,177,100,101,102,32,115,101,116,95,114,101,103,40,
114,44,110,41,58,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,7,115,101,116,95,114,101,103,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
30,8,0,178,32,32,32,32,68,46,110,50,114,91,110,93,
32,61,32,114,59,32,68,46,114,50,110,91,114,93,32,61,
32,110,0,0,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,3,110,50,114,0,9,3,3,4,10,3,2,1,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,3,
114,50,110,0,9,3,3,4,10,3,1,2,30,8,0,179,
32,32,32,32,68,46,109,114,101,103,32,61,32,109,97,120,
40,68,46,109,114,101,103,44,114,43,49,41,0,0,0,0,
12,31,0,7,103,101,116,95,114,101,103,0,14,31,30,0,
16,31,0,44,44,9,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,12,4,0,1,68,0,0,0,
13,3,4,0,12,4,0,3,110,50,114,0,9,3,3,4,
10,3,2,1,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,3,114,50,110,0,9,3,3,4,10,3,1,2,
12,4,0,1,68,0,0,0,13,3,4,0,12,6,0,3,
109,97,120,0,13,5,6,0,12,8,0,1,68,0,0,0,
13,6,8,0,12,8,0,4,109,114,101,103,0,0,0,0,
4098,16 → 2285,8
9,6,6,8,11,8,0,0,0,0,0,0,0,0,240,63,
1,7,1,8,31,4,6,2,19,4,5,4,12,5,0,4,
109,114,101,103,0,0,0,0,10,3,5,4,0,0,0,0,
12,30,0,7,115,101,116,95,114,101,103,0,14,30,29,0,
30,5,0,180,100,101,102,32,102,114,101,101,95,114,101,103,
40,114,41,58,0,0,0,0,16,30,0,94,44,5,0,0,
30,5,0,180,100,101,102,32,102,114,101,101,95,114,101,103,
40,114,41,58,0,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,8,102,114,101,101,95,114,101,103,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,8,0,181,
32,32,32,32,105,102,32,105,115,95,116,109,112,40,114,41,
58,32,68,46,116,109,112,99,32,45,61,32,49,0,0,0,
12,32,0,7,115,101,116,95,114,101,103,0,14,32,31,0,
16,32,0,55,44,5,0,0,28,2,0,0,9,1,0,2,
12,4,0,6,105,115,95,116,109,112,0,0,13,3,4,0,
15,4,1,0,31,2,4,1,19,2,3,2,21,2,0,0,
18,0,0,20,12,3,0,1,68,0,0,0,13,2,3,0,
4115,1087 → 2294,592
116,109,112,99,0,0,0,0,9,3,3,4,11,4,0,0,
0,0,0,0,0,0,240,63,2,3,3,4,12,4,0,4,
116,109,112,99,0,0,0,0,10,2,4,3,18,0,0,1,
30,12,0,182,32,32,32,32,110,32,61,32,68,46,114,50,
110,91,114,93,59,32,100,101,108,32,68,46,114,50,110,91,
114,93,59,32,100,101,108,32,68,46,110,50,114,91,110,93,
0,0,0,0,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,3,114,50,110,0,9,3,3,4,9,3,3,1,
15,2,3,0,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,3,114,50,110,0,9,3,3,4,43,3,1,0,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,3,
110,50,114,0,9,3,3,4,43,3,2,0,0,0,0,0,
12,31,0,8,102,114,101,101,95,114,101,103,0,0,0,0,
14,31,30,0,30,6,0,184,100,101,102,32,105,109,97,110,
97,103,101,40,111,114,105,103,44,102,110,99,41,58,0,0,
16,31,0,103,44,14,0,0,30,6,0,184,100,101,102,32,
105,109,97,110,97,103,101,40,111,114,105,103,44,102,110,99,
41,58,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,7,
105,109,97,110,97,103,101,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,30,6,0,185,
32,32,32,32,105,116,101,109,115,32,61,32,111,114,105,103,
46,105,116,101,109,115,0,0,12,5,0,5,105,116,101,109,
115,0,0,0,9,4,1,5,15,3,4,0,30,8,0,186,
32,32,32,32,111,114,105,103,46,118,97,108,32,61,32,111,
114,105,103,46,118,97,108,91,58,45,49,93,0,0,0,0,
12,5,0,3,118,97,108,0,9,4,1,5,28,6,0,0,
11,7,0,0,0,0,0,0,0,0,240,191,27,5,6,2,
9,4,4,5,12,5,0,3,118,97,108,0,10,1,5,4,
30,14,0,187,32,32,32,32,116,32,61,32,84,111,107,101,
110,40,111,114,105,103,46,112,111,115,44,39,115,121,109,98,
111,108,39,44,39,61,39,44,91,105,116,101,109,115,91,48,
93,44,111,114,105,103,93,41,0,0,0,0,12,7,0,5,
114,50,110,0,9,3,3,4,9,3,3,1,15,2,3,0,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,3,
114,50,110,0,9,3,3,4,43,3,1,0,12,4,0,1,
68,0,0,0,13,3,4,0,12,4,0,3,110,50,114,0,
9,3,3,4,43,3,2,0,0,0,0,0,12,33,0,8,
102,114,101,101,95,114,101,103,0,0,0,0,14,33,32,0,
16,33,0,49,44,14,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,12,5,0,5,105,116,101,109,
115,0,0,0,9,4,1,5,15,3,4,0,12,5,0,3,
118,97,108,0,9,4,1,5,28,6,0,0,11,7,0,0,
0,0,0,0,0,0,240,191,27,5,6,2,9,4,4,5,
12,5,0,3,118,97,108,0,10,1,5,4,12,7,0,5,
84,111,107,101,110,0,0,0,13,6,7,0,12,11,0,3,
112,111,115,0,9,7,1,11,12,8,0,6,115,121,109,98,
111,108,0,0,12,9,0,1,61,0,0,0,11,13,0,0,
0,0,0,0,0,0,0,0,9,11,3,13,15,12,1,0,
27,10,11,2,31,5,7,4,19,5,6,5,15,4,5,0,
30,5,0,188,32,32,32,32,114,101,116,117,114,110,32,102,
110,99,40,116,41,0,0,0,15,6,4,0,31,5,6,1,
19,5,2,5,20,5,0,0,0,0,0,0,12,32,0,7,
105,109,97,110,97,103,101,0,14,32,31,0,30,6,0,190,
100,101,102,32,117,110,97,114,121,40,105,44,116,98,44,114,
61,78,111,110,101,41,58,0,16,32,0,93,44,10,0,0,
30,6,0,190,100,101,102,32,117,110,97,114,121,40,105,44,
116,98,44,114,61,78,111,110,101,41,58,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,5,117,110,97,114,121,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,3,0,0,28,4,0,0,32,3,0,4,
30,5,0,191,32,32,32,32,114,32,61,32,103,101,116,95,
116,109,112,40,114,41,0,0,12,6,0,7,103,101,116,95,
116,109,112,0,13,5,6,0,15,6,3,0,31,4,6,1,
19,4,5,4,15,3,4,0,30,4,0,192,32,32,32,32,
98,32,61,32,100,111,40,116,98,41,0,0,12,7,0,2,
100,111,0,0,13,6,7,0,15,7,2,0,31,5,7,1,
19,5,6,5,15,4,5,0,30,4,0,193,32,32,32,32,
99,111,100,101,40,105,44,114,44,98,41,0,12,7,0,4,
99,111,100,101,0,0,0,0,13,6,7,0,15,7,1,0,
15,8,3,0,15,9,4,0,31,5,7,3,19,5,6,5,
30,7,0,194,32,32,32,32,105,102,32,114,32,33,61,32,
98,58,32,102,114,101,101,95,116,109,112,40,98,41,0,0,
35,5,3,4,21,5,0,0,18,0,0,10,12,7,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,6,7,0,
15,7,4,0,31,5,7,1,19,5,6,5,18,0,0,1,
30,4,0,195,32,32,32,32,114,101,116,117,114,110,32,114,
0,0,0,0,20,3,0,0,0,0,0,0,12,33,0,5,
117,110,97,114,121,0,0,0,14,33,32,0,30,7,0,196,
100,101,102,32,105,110,102,105,120,40,105,44,116,98,44,116,
99,44,114,61,78,111,110,101,41,58,0,0,16,33,0,124,
44,13,0,0,30,7,0,196,100,101,102,32,105,110,102,105,
120,40,105,44,116,98,44,116,99,44,114,61,78,111,110,101,
41,58,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,5,
105,110,102,105,120,0,0,0,34,1,0,0,28,2,0,0,
15,6,4,0,31,5,6,1,19,5,2,5,20,5,0,0,
0,0,0,0,12,34,0,7,105,109,97,110,97,103,101,0,
14,34,33,0,16,34,0,68,44,13,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,28,4,0,0,28,5,0,0,32,4,0,5,
30,5,0,197,32,32,32,32,114,32,61,32,103,101,116,95,
116,109,112,40,114,41,0,0,12,7,0,7,103,101,116,95,
116,109,112,0,13,6,7,0,15,7,4,0,31,5,7,1,
19,5,6,5,15,4,5,0,30,7,0,198,32,32,32,32,
98,44,99,32,61,32,100,111,40,116,98,44,114,41,44,100,
111,40,116,99,41,0,0,0,12,8,0,2,100,111,0,0,
13,7,8,0,15,8,2,0,15,9,4,0,31,6,8,2,
19,6,7,6,15,5,6,0,12,9,0,2,100,111,0,0,
13,8,9,0,15,9,3,0,31,7,9,1,19,7,8,7,
15,6,7,0,15,7,5,0,15,5,6,0,30,5,0,199,
32,32,32,32,99,111,100,101,40,105,44,114,44,98,44,99,
41,0,0,0,12,9,0,4,99,111,100,101,0,0,0,0,
12,7,0,7,103,101,116,95,116,109,112,0,13,6,7,0,
15,7,4,0,31,5,7,1,19,5,6,5,15,4,5,0,
12,8,0,2,100,111,0,0,13,7,8,0,15,8,2,0,
15,9,4,0,31,6,8,2,19,6,7,6,15,5,6,0,
12,9,0,2,100,111,0,0,13,8,9,0,15,9,3,0,
31,7,9,1,19,7,8,7,15,6,7,0,15,7,5,0,
15,5,6,0,12,9,0,4,99,111,100,101,0,0,0,0,
13,8,9,0,15,9,1,0,15,10,4,0,15,11,7,0,
15,12,5,0,31,6,9,4,19,6,8,6,30,7,0,200,
32,32,32,32,105,102,32,114,32,33,61,32,98,58,32,102,
114,101,101,95,116,109,112,40,98,41,0,0,35,6,4,7,
15,12,5,0,31,6,9,4,19,6,8,6,35,6,4,7,
21,6,0,0,18,0,0,10,12,9,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,8,9,0,15,9,7,0,
31,6,9,1,19,6,8,6,18,0,0,1,30,4,0,201,
32,32,32,32,102,114,101,101,95,116,109,112,40,99,41,0,
12,9,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,8,9,0,15,9,5,0,31,6,9,1,19,6,8,6,
30,4,0,202,32,32,32,32,114,101,116,117,114,110,32,114,
0,0,0,0,20,4,0,0,0,0,0,0,12,34,0,5,
105,110,102,105,120,0,0,0,14,34,33,0,30,10,0,203,
100,101,102,32,108,111,103,105,99,95,105,110,102,105,120,40,
111,112,44,32,116,98,44,32,116,99,44,32,95,114,61,78,
111,110,101,41,58,0,0,0,16,34,0,211,44,12,0,0,
30,10,0,203,100,101,102,32,108,111,103,105,99,95,105,110,
102,105,120,40,111,112,44,32,116,98,44,32,116,99,44,32,
95,114,61,78,111,110,101,41,58,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,11,108,111,103,105,99,95,105,110,
102,105,120,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,28,4,0,0,9,3,0,4,
28,4,0,0,28,5,0,0,32,4,0,5,30,5,0,204,
32,32,32,32,116,32,61,32,103,101,116,95,116,97,103,40,
41,32,0,0,12,8,0,7,103,101,116,95,116,97,103,0,
13,7,8,0,31,6,0,0,19,6,7,6,15,5,6,0,
30,5,0,205,32,32,32,32,114,32,61,32,100,111,40,116,
98,44,32,95,114,41,0,0,12,9,0,2,100,111,0,0,
13,8,9,0,15,9,2,0,15,10,4,0,31,7,9,2,
19,7,8,7,15,6,7,0,30,9,0,206,32,32,32,32,
105,102,32,95,114,32,33,61,32,114,58,32,102,114,101,101,
95,116,109,112,40,95,114,41,32,35,82,69,71,0,0,0,
35,7,4,6,21,7,0,0,18,0,0,10,12,9,0,8,
31,6,9,1,19,6,8,6,18,0,0,1,12,9,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,8,9,0,
15,9,4,0,31,7,9,1,19,7,8,7,18,0,0,1,
30,9,0,207,32,32,32,32,105,102,32,111,112,32,61,61,
32,39,97,110,100,39,58,32,32,32,99,111,100,101,40,73,
70,44,32,114,41,0,0,0,12,8,0,3,97,110,100,0,
23,7,1,8,21,7,0,0,18,0,0,12,12,9,0,4,
99,111,100,101,0,0,0,0,13,8,9,0,12,11,0,2,
73,70,0,0,13,9,11,0,15,10,6,0,31,7,9,2,
19,7,8,7,18,0,0,27,30,9,0,208,32,32,32,32,
101,108,105,102,32,111,112,32,61,61,32,39,111,114,39,58,
32,32,99,111,100,101,40,73,70,78,44,32,114,41,0,0,
12,8,0,2,111,114,0,0,23,7,1,8,21,7,0,0,
18,0,0,12,12,9,0,4,99,111,100,101,0,0,0,0,
13,8,9,0,12,11,0,3,73,70,78,0,13,9,11,0,
15,10,6,0,31,7,9,2,19,7,8,7,18,0,0,1,
30,5,0,209,32,32,32,32,106,117,109,112,40,116,44,32,
39,101,110,100,39,41,0,0,12,9,0,4,106,117,109,112,
0,0,0,0,13,8,9,0,15,9,5,0,12,10,0,3,
101,110,100,0,31,7,9,2,19,7,8,7,30,3,0,210,
32,32,32,32,95,114,32,61,32,114,0,0,15,4,6,0,
30,5,0,211,32,32,32,32,114,32,61,32,100,111,40,116,
99,44,32,95,114,41,0,0,12,9,0,2,100,111,0,0,
13,8,9,0,15,9,3,0,15,10,4,0,31,7,9,2,
19,7,8,7,15,6,7,0,30,9,0,212,32,32,32,32,
105,102,32,95,114,32,33,61,32,114,58,32,102,114,101,101,
95,116,109,112,40,95,114,41,32,35,82,69,71,0,0,0,
35,7,4,6,21,7,0,0,18,0,0,10,12,9,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,8,9,0,
15,9,4,0,31,7,9,1,19,7,8,7,18,0,0,1,
30,5,0,213,32,32,32,32,116,97,103,40,116,44,32,39,
101,110,100,39,41,0,0,0,12,9,0,3,116,97,103,0,
13,8,9,0,15,9,5,0,12,10,0,3,101,110,100,0,
31,7,9,2,19,7,8,7,30,4,0,214,32,32,32,32,
114,101,116,117,114,110,32,114,0,0,0,0,20,6,0,0,
0,0,0,0,12,35,0,11,108,111,103,105,99,95,105,110,
102,105,120,0,14,35,34,0,30,6,0,216,100,101,102,32,
95,100,111,95,110,111,110,101,40,114,61,78,111,110,101,41,
58,0,0,0,16,35,0,61,44,7,0,0,30,6,0,216,
100,101,102,32,95,100,111,95,110,111,110,101,40,114,61,78,
111,110,101,41,58,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,8,95,100,111,95,110,111,110,101,0,0,0,0,
34,1,0,0,28,1,0,0,28,2,0,0,32,1,0,2,
30,5,0,217,32,32,32,32,114,32,61,32,103,101,116,95,
116,109,112,40,114,41,0,0,12,4,0,7,103,101,116,95,
116,109,112,0,13,3,4,0,15,4,1,0,31,2,4,1,
19,2,3,2,15,1,2,0,30,5,0,218,32,32,32,32,
99,111,100,101,40,78,79,78,69,44,114,41,0,0,0,0,
12,4,0,4,99,111,100,101,0,0,0,0,13,3,4,0,
12,6,0,4,78,79,78,69,0,0,0,0,13,4,6,0,
15,5,1,0,31,2,4,2,19,2,3,2,30,4,0,219,
32,32,32,32,114,101,116,117,114,110,32,114,0,0,0,0,
20,1,0,0,0,0,0,0,12,36,0,8,95,100,111,95,
110,111,110,101,0,0,0,0,14,36,35,0,30,7,0,221,
100,101,102,32,100,111,95,115,121,109,98,111,108,40,116,44,
114,61,78,111,110,101,41,58,0,0,0,0,16,36,3,192,
44,31,0,0,30,7,0,221,100,101,102,32,100,111,95,115,
121,109,98,111,108,40,116,44,114,61,78,111,110,101,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,9,
100,111,95,115,121,109,98,111,108,0,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,2,0,0,28,3,0,0,
32,2,0,3,30,5,0,222,32,32,32,32,115,101,116,115,
32,61,32,91,39,61,39,93,0,0,0,0,12,5,0,1,
61,0,0,0,27,4,5,1,15,3,4,0,30,13,0,223,
32,32,32,32,105,115,101,116,115,32,61,32,91,39,43,61,
39,44,39,45,61,39,44,39,42,61,39,44,39,47,61,39,
44,32,39,124,61,39,44,32,39,38,61,39,44,32,39,94,
61,39,93,0,12,6,0,2,43,61,0,0,12,7,0,2,
45,61,0,0,12,8,0,2,42,61,0,0,12,9,0,2,
47,61,0,0,12,10,0,2,124,61,0,0,12,11,0,2,
38,61,0,0,12,12,0,2,94,61,0,0,27,5,6,7,
15,4,5,0,30,11,0,224,32,32,32,32,99,109,112,115,
32,61,32,91,39,60,39,44,39,62,39,44,39,60,61,39,
44,39,62,61,39,44,39,61,61,39,44,39,33,61,39,93,
0,0,0,0,12,7,0,1,60,0,0,0,12,8,0,1,
62,0,0,0,12,9,0,2,60,61,0,0,12,10,0,2,
62,61,0,0,12,11,0,2,61,61,0,0,12,12,0,2,
33,61,0,0,27,6,7,6,15,5,6,0,30,4,0,225,
32,32,32,32,109,101,116,97,115,32,61,32,123,0,0,0,
30,11,0,226,32,32,32,32,32,32,32,32,39,43,39,58,
65,68,68,44,39,42,39,58,77,85,76,44,39,47,39,58,
68,73,86,44,39,42,42,39,58,80,79,87,44,0,0,0,
12,8,0,1,43,0,0,0,12,30,0,3,65,68,68,0,
13,9,30,0,12,10,0,1,42,0,0,0,12,30,0,3,
77,85,76,0,13,11,30,0,12,12,0,1,47,0,0,0,
12,30,0,3,68,73,86,0,13,13,30,0,12,14,0,2,
42,42,0,0,12,30,0,3,80,79,87,0,13,15,30,0,
30,5,0,227,32,32,32,32,32,32,32,32,39,45,39,58,
83,85,66,44,0,0,0,0,12,16,0,1,45,0,0,0,
12,30,0,3,83,85,66,0,13,17,30,0,30,9,0,228,
32,32,32,32,32,32,32,32,39,37,39,58,77,79,68,44,
39,62,62,39,58,82,83,72,44,39,60,60,39,58,76,83,
72,44,0,0,12,18,0,1,37,0,0,0,12,30,0,3,
77,79,68,0,13,19,30,0,12,20,0,2,62,62,0,0,
12,30,0,3,82,83,72,0,13,21,30,0,12,22,0,2,
60,60,0,0,12,30,0,3,76,83,72,0,13,23,30,0,
30,11,0,229,32,32,32,32,32,32,32,32,39,38,39,58,
66,73,84,65,78,68,44,39,124,39,58,66,73,84,79,82,
44,39,94,39,58,66,73,84,88,79,82,44,0,0,0,0,
12,24,0,1,38,0,0,0,12,30,0,6,66,73,84,65,
78,68,0,0,13,25,30,0,12,26,0,1,124,0,0,0,
12,30,0,5,66,73,84,79,82,0,0,0,13,27,30,0,
12,28,0,1,94,0,0,0,12,30,0,6,66,73,84,88,
79,82,0,0,13,29,30,0,26,7,8,22,15,6,7,0,
30,11,0,231,32,32,32,32,105,102,32,116,46,118,97,108,
32,61,61,32,39,78,111,110,101,39,58,32,114,101,116,117,
114,110,32,95,100,111,95,110,111,110,101,40,114,41,0,0,
12,8,0,3,118,97,108,0,9,7,1,8,12,8,0,4,
78,111,110,101,0,0,0,0,23,7,7,8,21,7,0,0,
18,0,0,11,12,9,0,8,95,100,111,95,110,111,110,101,
0,0,0,0,13,8,9,0,15,9,2,0,31,7,9,1,
19,7,8,7,20,7,0,0,18,0,0,1,30,6,0,232,
32,32,32,32,105,102,32,116,46,118,97,108,32,61,61,32,
39,84,114,117,101,39,58,0,12,8,0,3,118,97,108,0,
9,7,1,8,12,8,0,4,84,114,117,101,0,0,0,0,
23,7,7,8,21,7,0,0,18,0,0,23,30,9,0,233,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,95,
100,111,95,110,117,109,98,101,114,40,39,49,39,44,114,41,
0,0,0,0,12,9,0,10,95,100,111,95,110,117,109,98,
101,114,0,0,13,8,9,0,12,9,0,1,49,0,0,0,
15,10,2,0,31,7,9,2,19,7,8,7,20,7,0,0,
18,0,0,1,30,7,0,234,32,32,32,32,105,102,32,116,
46,118,97,108,32,61,61,32,39,70,97,108,115,101,39,58,
0,0,0,0,12,8,0,3,118,97,108,0,9,7,1,8,
12,8,0,5,70,97,108,115,101,0,0,0,23,7,7,8,
21,7,0,0,18,0,0,23,30,9,0,235,32,32,32,32,
32,32,32,32,114,101,116,117,114,110,32,95,100,111,95,110,
117,109,98,101,114,40,39,48,39,44,114,41,0,0,0,0,
12,9,0,10,95,100,111,95,110,117,109,98,101,114,0,0,
13,8,9,0,12,9,0,1,48,0,0,0,15,10,2,0,
31,7,9,2,19,7,8,7,20,7,0,0,18,0,0,1,
30,5,0,236,32,32,32,32,105,116,101,109,115,32,61,32,
116,46,105,116,101,109,115,0,12,9,0,5,105,116,101,109,
115,0,0,0,9,8,1,9,15,7,8,0,30,8,0,238,
32,32,32,32,105,102,32,116,46,118,97,108,32,105,110,32,
91,39,97,110,100,39,44,39,111,114,39,93,58,0,0,0,
15,9,5,0,31,6,9,1,19,6,8,6,20,4,0,0,
0,0,0,0,12,35,0,5,105,110,102,105,120,0,0,0,
14,35,34,0,16,35,0,136,44,15,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,28,5,0,0,9,4,0,5,28,5,0,0,
28,6,0,0,32,5,0,6,12,8,0,7,103,101,116,95,
116,109,112,0,13,7,8,0,15,8,5,0,31,6,8,1,
19,6,7,6,15,5,6,0,12,9,0,7,103,101,116,95,
116,109,112,0,13,8,9,0,31,7,0,0,19,7,8,7,
15,6,7,0,12,9,0,10,95,100,111,95,110,117,109,98,
101,114,0,0,13,8,9,0,15,9,1,0,31,7,9,1,
19,7,8,7,15,1,7,0,12,10,0,7,103,101,116,95,
116,97,103,0,13,9,10,0,31,8,0,0,19,8,9,8,
15,7,8,0,12,10,0,2,100,111,0,0,13,9,10,0,
15,10,3,0,15,11,5,0,31,8,10,2,19,8,9,8,
15,5,8,0,12,10,0,4,99,111,100,101,0,0,0,0,
13,9,10,0,12,14,0,2,69,81,0,0,13,10,14,0,
15,11,6,0,15,12,5,0,15,13,1,0,31,8,10,4,
19,8,9,8,12,10,0,4,99,111,100,101,0,0,0,0,
13,9,10,0,12,12,0,2,73,70,0,0,13,10,12,0,
15,11,6,0,31,8,10,2,19,8,9,8,12,10,0,4,
106,117,109,112,0,0,0,0,13,9,10,0,15,10,7,0,
12,11,0,4,101,108,115,101,0,0,0,0,31,8,10,2,
19,8,9,8,12,10,0,4,106,117,109,112,0,0,0,0,
13,9,10,0,15,10,7,0,12,11,0,3,101,110,100,0,
31,8,10,2,19,8,9,8,12,10,0,3,116,97,103,0,
13,9,10,0,15,10,7,0,12,11,0,4,101,108,115,101,
0,0,0,0,31,8,10,2,19,8,9,8,12,10,0,2,
100,111,0,0,13,9,10,0,15,10,4,0,15,11,5,0,
31,8,10,2,19,8,9,8,15,5,8,0,12,10,0,3,
116,97,103,0,13,9,10,0,15,10,7,0,12,11,0,3,
101,110,100,0,31,8,10,2,19,8,9,8,12,10,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,9,10,0,
15,10,6,0,31,8,10,1,19,8,9,8,12,10,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,9,10,0,
15,10,1,0,31,8,10,1,19,8,9,8,20,5,0,0,
0,0,0,0,12,36,0,8,115,115,95,105,110,102,105,120,
0,0,0,0,14,36,35,0,16,36,0,26,44,7,0,0,
28,1,0,0,28,2,0,0,32,1,0,2,12,4,0,7,
103,101,116,95,116,109,112,0,13,3,4,0,15,4,1,0,
31,2,4,1,19,2,3,2,15,1,2,0,12,4,0,4,
99,111,100,101,0,0,0,0,13,3,4,0,12,6,0,4,
78,79,78,69,0,0,0,0,13,4,6,0,15,5,1,0,
31,2,4,2,19,2,3,2,20,1,0,0,0,0,0,0,
12,37,0,8,95,100,111,95,110,111,110,101,0,0,0,0,
14,37,36,0,16,37,2,41,44,33,0,0,28,2,0,0,
9,1,0,2,28,2,0,0,28,3,0,0,32,2,0,3,
12,5,0,1,61,0,0,0,27,4,5,1,15,3,4,0,
12,6,0,2,43,61,0,0,12,7,0,2,45,61,0,0,
12,8,0,2,42,61,0,0,12,9,0,2,47,61,0,0,
27,5,6,4,15,4,5,0,12,7,0,1,60,0,0,0,
12,8,0,1,62,0,0,0,12,9,0,2,60,61,0,0,
12,10,0,2,62,61,0,0,12,11,0,2,61,61,0,0,
12,12,0,2,33,61,0,0,27,6,7,6,15,5,6,0,
12,8,0,1,43,0,0,0,12,32,0,3,65,68,68,0,
13,9,32,0,12,10,0,1,42,0,0,0,12,32,0,3,
77,85,76,0,13,11,32,0,12,12,0,1,47,0,0,0,
12,32,0,3,68,73,86,0,13,13,32,0,12,14,0,2,
42,42,0,0,12,32,0,3,80,79,87,0,13,15,32,0,
12,16,0,1,45,0,0,0,12,32,0,3,83,85,66,0,
13,17,32,0,12,18,0,3,97,110,100,0,12,32,0,3,
65,78,68,0,13,19,32,0,12,20,0,2,111,114,0,0,
12,32,0,2,79,82,0,0,13,21,32,0,12,22,0,1,
37,0,0,0,12,32,0,3,77,79,68,0,13,23,32,0,
12,24,0,2,62,62,0,0,12,32,0,3,82,83,72,0,
13,25,32,0,12,26,0,2,60,60,0,0,12,32,0,3,
76,83,72,0,13,27,32,0,12,28,0,1,38,0,0,0,
12,32,0,3,65,78,68,0,13,29,32,0,12,30,0,1,
124,0,0,0,12,32,0,2,79,82,0,0,13,31,32,0,
26,7,8,24,15,6,7,0,12,8,0,3,118,97,108,0,
9,7,1,8,12,8,0,4,78,111,110,101,0,0,0,0,
23,7,7,8,21,7,0,0,18,0,0,11,12,9,0,8,
95,100,111,95,110,111,110,101,0,0,0,0,13,8,9,0,
15,9,2,0,31,7,9,1,19,7,8,7,20,7,0,0,
18,0,0,1,12,8,0,3,118,97,108,0,9,7,1,8,
12,8,0,4,84,114,117,101,0,0,0,0,23,7,7,8,
21,7,0,0,18,0,0,13,12,9,0,10,95,100,111,95,
110,117,109,98,101,114,0,0,13,8,9,0,12,9,0,1,
49,0,0,0,15,10,2,0,31,7,9,2,19,7,8,7,
20,7,0,0,18,0,0,1,12,8,0,3,118,97,108,0,
9,7,1,8,12,8,0,5,70,97,108,115,101,0,0,0,
23,7,7,8,21,7,0,0,18,0,0,13,12,9,0,10,
95,100,111,95,110,117,109,98,101,114,0,0,13,8,9,0,
12,9,0,1,48,0,0,0,15,10,2,0,31,7,9,2,
19,7,8,7,20,7,0,0,18,0,0,1,12,9,0,5,
105,116,101,109,115,0,0,0,9,8,1,9,15,7,8,0,
12,9,0,3,97,110,100,0,12,10,0,2,111,114,0,0,
27,8,9,2,12,10,0,3,118,97,108,0,9,9,1,10,
36,8,8,9,21,8,0,0,18,0,0,38,30,15,0,239,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,
111,103,105,99,95,105,110,102,105,120,40,116,46,118,97,108,
44,32,105,116,101,109,115,91,48,93,44,32,105,116,101,109,
115,91,49,93,44,32,114,41,0,0,0,0,12,10,0,11,
108,111,103,105,99,95,105,110,102,105,120,0,13,9,10,0,
12,14,0,3,118,97,108,0,9,10,1,14,11,14,0,0,
0,0,0,0,0,0,0,0,9,11,7,14,11,14,0,0,
0,0,0,0,0,0,240,63,9,12,7,14,15,13,2,0,
31,8,10,4,19,8,9,8,20,8,0,0,18,0,0,1,
30,6,0,240,32,32,32,32,105,102,32,116,46,118,97,108,
32,105,110,32,105,115,101,116,115,58,0,0,12,10,0,3,
118,97,108,0,9,9,1,10,36,8,4,9,21,8,0,0,
18,0,0,25,30,9,0,241,32,32,32,32,32,32,32,32,
114,101,116,117,114,110,32,105,109,97,110,97,103,101,40,116,
44,100,111,95,115,121,109,98,111,108,41,0,12,10,0,7,
105,109,97,110,97,103,101,0,13,9,10,0,15,10,1,0,
12,12,0,9,100,111,95,115,121,109,98,111,108,0,0,0,
13,11,12,0,31,8,10,2,19,8,9,8,20,8,0,0,
18,0,0,1,30,6,0,242,32,32,32,32,105,102,32,116,
46,118,97,108,32,61,61,32,39,105,115,39,58,0,0,0,
12,9,0,3,118,97,108,0,9,8,1,9,12,9,0,2,
105,115,0,0,23,8,8,9,21,8,0,0,18,0,0,34,
30,12,0,243,32,32,32,32,32,32,32,32,114,101,116,117,
114,110,32,105,110,102,105,120,40,69,81,44,105,116,101,109,
115,91,48,93,44,105,116,101,109,115,91,49,93,44,114,41,
0,0,0,0,12,10,0,5,105,110,102,105,120,0,0,0,
13,9,10,0,12,14,0,2,69,81,0,0,13,10,14,0,
11,14,0,0,0,0,0,0,0,0,0,0,9,11,7,14,
11,14,0,0,0,0,0,0,0,0,240,63,9,12,7,14,
15,13,2,0,31,8,10,4,19,8,9,8,20,8,0,0,
18,0,0,1,30,7,0,244,32,32,32,32,105,102,32,116,
46,118,97,108,32,61,61,32,39,105,115,110,111,116,39,58,
0,0,0,0,12,9,0,3,118,97,108,0,9,8,1,9,
12,9,0,5,105,115,110,111,116,0,0,0,23,8,8,9,
21,8,0,0,18,0,0,34,30,12,0,245,32,32,32,32,
32,32,32,32,114,101,116,117,114,110,32,105,110,102,105,120,
40,67,77,80,44,105,116,101,109,115,91,48,93,44,105,116,
101,109,115,91,49,93,44,114,41,0,0,0,12,10,0,5,
105,110,102,105,120,0,0,0,13,9,10,0,12,14,0,3,
67,77,80,0,13,10,14,0,11,14,0,0,0,0,0,0,
0,0,0,0,9,11,7,14,11,14,0,0,0,0,0,0,
0,0,240,63,9,12,7,14,15,13,2,0,31,8,10,4,
19,8,9,8,20,8,0,0,18,0,0,1,30,6,0,246,
32,32,32,32,105,102,32,116,46,118,97,108,32,61,61,32,
39,110,111,116,39,58,0,0,12,9,0,3,118,97,108,0,
9,8,1,9,12,9,0,3,110,111,116,0,23,8,8,9,
21,8,0,0,18,0,0,28,30,10,0,247,32,32,32,32,
32,32,32,32,114,101,116,117,114,110,32,117,110,97,114,121,
40,78,79,84,44,32,105,116,101,109,115,91,48,93,44,32,
114,41,0,0,12,10,0,5,117,110,97,114,121,0,0,0,
13,9,10,0,12,13,0,3,78,79,84,0,13,10,13,0,
11,13,0,0,0,0,0,0,0,0,0,0,9,11,7,13,
15,12,2,0,31,8,10,3,19,8,9,8,20,8,0,0,
18,0,0,1,30,6,0,248,32,32,32,32,105,102,32,116,
46,118,97,108,32,61,61,32,39,105,110,39,58,0,0,0,
12,9,0,3,118,97,108,0,9,8,1,9,12,9,0,2,
105,110,0,0,23,8,8,9,21,8,0,0,18,0,0,34,
30,12,0,249,32,32,32,32,32,32,32,32,114,101,116,117,
114,110,32,105,110,102,105,120,40,72,65,83,44,105,116,101,
109,115,91,49,93,44,105,116,101,109,115,91,48,93,44,114,
41,0,0,0,12,10,0,5,105,110,102,105,120,0,0,0,
13,9,10,0,12,14,0,3,72,65,83,0,13,10,14,0,
11,14,0,0,0,0,0,0,0,0,240,63,9,11,7,14,
36,8,8,9,21,8,0,0,18,0,0,36,12,11,0,3,
105,110,116,0,13,10,11,0,12,12,0,3,118,97,108,0,
9,11,1,12,12,12,0,2,111,114,0,0,23,11,11,12,
31,9,11,1,19,9,10,9,15,8,9,0,12,11,0,8,
115,115,95,105,110,102,105,120,0,0,0,0,13,10,11,0,
15,11,8,0,12,17,0,3,118,97,108,0,9,16,1,17,
9,12,6,16,11,16,0,0,0,0,0,0,0,0,0,0,
9,13,7,16,11,16,0,0,0,0,0,0,0,0,240,63,
9,14,7,16,15,15,2,0,31,9,11,5,19,9,10,9,
20,9,0,0,18,0,0,1,12,11,0,3,118,97,108,0,
9,10,1,11,36,9,4,10,21,9,0,0,18,0,0,15,
12,11,0,7,105,109,97,110,97,103,101,0,13,10,11,0,
15,11,1,0,12,13,0,9,100,111,95,115,121,109,98,111,
108,0,0,0,13,12,13,0,31,9,11,2,19,9,10,9,
20,9,0,0,18,0,0,1,12,10,0,3,118,97,108,0,
9,9,1,10,12,10,0,2,105,115,0,0,23,9,9,10,
21,9,0,0,18,0,0,21,12,11,0,5,105,110,102,105,
120,0,0,0,13,10,11,0,12,15,0,2,69,81,0,0,
13,11,15,0,11,15,0,0,0,0,0,0,0,0,0,0,
9,12,7,15,11,15,0,0,0,0,0,0,0,0,240,63,
9,13,7,15,15,14,2,0,31,9,11,4,19,9,10,9,
20,9,0,0,18,0,0,1,12,10,0,3,118,97,108,0,
9,9,1,10,12,10,0,5,105,115,110,111,116,0,0,0,
23,9,9,10,21,9,0,0,18,0,0,21,12,11,0,5,
105,110,102,105,120,0,0,0,13,10,11,0,12,15,0,3,
67,77,80,0,13,11,15,0,11,15,0,0,0,0,0,0,
0,0,0,0,9,12,7,15,11,15,0,0,0,0,0,0,
0,0,240,63,9,13,7,15,15,14,2,0,31,9,11,4,
19,9,10,9,20,9,0,0,18,0,0,1,12,10,0,3,
118,97,108,0,9,9,1,10,12,10,0,3,110,111,116,0,
23,9,9,10,21,9,0,0,18,0,0,32,12,11,0,5,
105,110,102,105,120,0,0,0,13,10,11,0,12,15,0,2,
69,81,0,0,13,11,15,0,12,16,0,5,84,111,107,101,
110,0,0,0,13,15,16,0,12,19,0,3,112,111,115,0,
9,16,1,19,12,17,0,6,110,117,109,98,101,114,0,0,
11,18,0,0,0,0,0,0,0,0,0,0,31,12,16,3,
19,12,15,12,11,15,0,0,0,0,0,0,0,0,0,0,
9,13,7,15,15,14,2,0,31,9,11,4,19,9,10,9,
20,9,0,0,18,0,0,1,12,10,0,3,118,97,108,0,
9,9,1,10,12,10,0,2,105,110,0,0,23,9,9,10,
21,9,0,0,18,0,0,21,12,11,0,5,105,110,102,105,
120,0,0,0,13,10,11,0,12,15,0,3,72,65,83,0,
13,11,15,0,11,15,0,0,0,0,0,0,0,0,240,63,
9,12,7,15,11,15,0,0,0,0,0,0,0,0,0,0,
9,13,7,15,15,14,2,0,31,9,11,4,19,9,10,9,
20,9,0,0,18,0,0,1,12,10,0,3,118,97,108,0,
9,9,1,10,12,10,0,5,110,111,116,105,110,0,0,0,
23,9,9,10,21,9,0,0,18,0,0,51,12,11,0,5,
105,110,102,105,120,0,0,0,13,10,11,0,12,15,0,3,
72,65,83,0,13,11,15,0,11,15,0,0,0,0,0,0,
0,0,240,63,9,12,7,15,11,15,0,0,0,0,0,0,
0,0,0,0,9,13,7,15,15,14,2,0,31,9,11,4,
19,9,10,9,15,2,9,0,12,12,0,10,95,100,111,95,
110,117,109,98,101,114,0,0,13,11,12,0,12,12,0,1,
48,0,0,0,31,10,12,1,19,10,11,10,15,9,10,0,
12,12,0,4,99,111,100,101,0,0,0,0,13,11,12,0,
12,16,0,2,69,81,0,0,13,12,16,0,15,13,2,0,
15,14,2,0,12,17,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,16,17,0,15,17,9,0,31,15,17,1,
19,15,16,15,31,10,12,4,19,10,11,10,20,2,0,0,
18,0,0,1,12,12,0,3,118,97,108,0,9,11,1,12,
36,10,3,11,21,10,0,0,18,0,0,18,12,12,0,10,
100,111,95,115,101,116,95,99,116,120,0,0,13,11,12,0,
11,14,0,0,0,0,0,0,0,0,0,0,9,12,7,14,
15,13,2,0,31,8,10,4,19,8,9,8,20,8,0,0,
18,0,0,1,30,7,0,250,32,32,32,32,105,102,32,116,
46,118,97,108,32,61,61,32,39,110,111,116,105,110,39,58,
0,0,0,0,12,9,0,3,118,97,108,0,9,8,1,9,
12,9,0,5,110,111,116,105,110,0,0,0,23,8,8,9,
21,8,0,0,18,0,0,88,30,11,0,251,32,32,32,32,
32,32,32,32,114,32,61,32,105,110,102,105,120,40,72,65,
83,44,105,116,101,109,115,91,49,93,44,105,116,101,109,115,
91,48,93,44,114,41,0,0,12,10,0,5,105,110,102,105,
120,0,0,0,13,9,10,0,12,14,0,3,72,65,83,0,
13,10,14,0,11,14,0,0,0,0,0,0,0,0,240,63,
9,11,7,14,11,14,0,0,0,0,0,0,0,0,0,0,
9,12,7,14,15,13,2,0,31,8,10,4,19,8,9,8,
15,2,8,0,30,8,0,252,32,32,32,32,32,32,32,32,
122,101,114,111,32,61,32,95,100,111,95,110,117,109,98,101,
114,40,39,48,39,41,0,0,12,11,0,10,95,100,111,95,
110,117,109,98,101,114,0,0,13,10,11,0,12,11,0,1,
48,0,0,0,31,9,11,1,19,9,10,9,15,8,9,0,
30,9,0,253,32,32,32,32,32,32,32,32,99,111,100,101,
40,69,81,44,114,44,114,44,102,114,101,101,95,116,109,112,
40,122,101,114,111,41,41,0,12,11,0,4,99,111,100,101,
0,0,0,0,13,10,11,0,12,15,0,2,69,81,0,0,
13,11,15,0,15,12,2,0,15,13,2,0,12,16,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,15,16,0,
15,16,8,0,31,14,16,1,19,14,15,14,31,9,11,4,
19,9,10,9,30,5,0,254,32,32,32,32,32,32,32,32,
114,101,116,117,114,110,32,114,0,0,0,0,20,2,0,0,
18,0,0,1,30,6,0,255,32,32,32,32,105,102,32,116,
46,118,97,108,32,105,110,32,115,101,116,115,58,0,0,0,
12,11,0,3,118,97,108,0,9,10,1,11,36,9,3,10,
21,9,0,0,18,0,0,31,30,12,1,0,32,32,32,32,
32,32,32,32,114,101,116,117,114,110,32,100,111,95,115,101,
116,95,99,116,120,40,105,116,101,109,115,91,48,93,44,105,
116,101,109,115,91,49,93,41,59,0,0,0,12,11,0,10,
100,111,95,115,101,116,95,99,116,120,0,0,13,10,11,0,
11,13,0,0,0,0,0,0,0,0,0,0,9,11,7,13,
11,13,0,0,0,0,0,0,0,0,240,63,9,12,7,13,
31,9,11,2,19,9,10,9,20,9,0,0,18,0,0,215,
30,6,1,1,32,32,32,32,101,108,105,102,32,116,46,118,
97,108,32,105,110,32,99,109,112,115,58,0,12,11,0,3,
118,97,108,0,9,10,1,11,36,9,5,10,21,9,0,0,
18,0,0,166,30,8,1,2,32,32,32,32,32,32,32,32,
98,44,99,32,61,32,105,116,101,109,115,91,48,93,44,105,
116,101,109,115,91,49,93,0,11,11,0,0,0,0,0,0,
0,0,0,0,9,10,7,11,15,9,10,0,11,12,0,0,
0,0,0,0,0,0,240,63,9,11,7,12,15,10,11,0,
15,11,9,0,15,9,10,0,30,5,1,3,32,32,32,32,
32,32,32,32,118,32,61,32,116,46,118,97,108,0,0,0,
12,13,0,3,118,97,108,0,9,12,1,13,15,10,12,0,
30,8,1,4,32,32,32,32,32,32,32,32,105,102,32,118,
91,48,93,32,105,110,32,40,39,62,39,44,39,62,61,39,
41,58,0,0,12,13,0,1,62,0,0,0,12,14,0,2,
62,61,0,0,27,12,13,2,11,14,0,0,0,0,0,0,
0,0,0,0,9,13,10,14,36,12,12,13,21,12,0,0,
18,0,0,27,30,9,1,5,32,32,32,32,32,32,32,32,
32,32,32,32,98,44,99,44,118,32,61,32,99,44,98,44,
39,60,39,43,118,91,49,58,93,0,0,0,15,12,9,0,
15,13,11,0,12,15,0,1,60,0,0,0,11,18,0,0,
0,0,0,0,0,0,240,63,28,19,0,0,27,17,18,2,
9,16,10,17,1,15,15,16,15,14,15,0,15,11,12,0,
15,9,13,0,15,10,14,0,18,0,0,1,30,4,1,6,
32,32,32,32,32,32,32,32,99,100,32,61,32,69,81,0,
12,14,0,2,69,81,0,0,13,13,14,0,15,12,13,0,
30,8,1,7,32,32,32,32,32,32,32,32,105,102,32,118,
32,61,61,32,39,60,39,58,32,99,100,32,61,32,76,84,
0,0,0,0,12,14,0,1,60,0,0,0,23,13,10,14,
21,13,0,0,18,0,0,6,12,14,0,2,76,84,0,0,
13,13,14,0,15,12,13,0,18,0,0,1,30,8,1,8,
32,32,32,32,32,32,32,32,105,102,32,118,32,61,61,32,
39,60,61,39,58,32,99,100,32,61,32,76,69,0,0,0,
12,14,0,2,60,61,0,0,23,13,10,14,21,13,0,0,
18,0,0,6,12,14,0,2,76,69,0,0,13,13,14,0,
15,12,13,0,18,0,0,1,30,8,1,9,32,32,32,32,
32,32,32,32,105,102,32,118,32,61,61,32,39,33,61,39,
58,32,99,100,32,61,32,78,69,0,0,0,12,14,0,2,
33,61,0,0,23,13,10,14,21,13,0,0,18,0,0,6,
12,14,0,2,78,69,0,0,13,13,14,0,15,12,13,0,
18,0,0,1,30,8,1,10,32,32,32,32,32,32,32,32,
114,101,116,117,114,110,32,105,110,102,105,120,40,99,100,44,
98,44,99,44,114,41,0,0,12,15,0,5,105,110,102,105,
120,0,0,0,13,14,15,0,15,15,12,0,15,16,11,0,
15,17,9,0,15,18,2,0,31,13,15,4,19,13,14,13,
20,13,0,0,18,0,0,37,30,14,1,12,32,32,32,32,
32,32,32,32,114,101,116,117,114,110,32,105,110,102,105,120,
40,109,101,116,97,115,91,116,46,118,97,108,93,44,105,116,
101,109,115,91,48,93,44,105,116,101,109,115,91,49,93,44,
114,41,0,0,12,15,0,5,105,110,102,105,120,0,0,0,
13,14,15,0,12,20,0,3,118,97,108,0,9,19,1,20,
9,15,6,19,11,19,0,0,0,0,0,0,0,0,0,0,
9,16,7,19,11,19,0,0,0,0,0,0,0,0,240,63,
9,17,7,19,15,18,2,0,31,13,15,4,19,13,14,13,
20,13,0,0,18,0,0,1,0,0,0,0,12,37,0,9,
100,111,95,115,121,109,98,111,108,0,0,0,14,37,36,0,
30,6,1,14,100,101,102,32,100,111,95,115,101,116,95,99,
116,120,40,107,44,118,41,58,0,0,0,0,16,37,3,103,
44,34,0,0,30,6,1,14,100,101,102,32,100,111,95,115,
101,116,95,99,116,120,40,107,44,118,41,58,0,0,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,10,100,111,95,115,
101,116,95,99,116,120,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,30,7,1,15,
32,32,32,32,105,102,32,107,46,116,121,112,101,32,61,61,
32,39,110,97,109,101,39,58,0,0,0,0,12,4,0,4,
116,121,112,101,0,0,0,0,9,3,1,4,12,4,0,4,
110,97,109,101,0,0,0,0,23,3,3,4,21,3,0,0,
18,0,0,222,30,19,1,16,32,32,32,32,32,32,32,32,
105,102,32,40,68,46,95,103,108,111,98,97,108,115,32,97,
110,100,32,107,46,118,97,108,32,110,111,116,32,105,110,32,
68,46,118,97,114,115,41,32,111,114,32,40,107,46,118,97,
108,32,105,110,32,68,46,103,108,111,98,97,108,115,41,58,
0,0,0,0,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,8,95,103,108,111,98,97,108,115,0,0,0,0,
9,3,3,4,21,3,0,0,18,0,0,16,12,4,0,1,
68,0,0,0,13,3,4,0,12,4,0,4,118,97,114,115,
0,0,0,0,9,3,3,4,12,5,0,3,118,97,108,0,
9,4,1,5,36,3,3,4,11,4,0,0,0,0,0,0,
0,0,0,0,23,3,3,4,46,3,0,0,18,0,0,12,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,7,
103,108,111,98,97,108,115,0,9,3,3,4,12,5,0,3,
118,97,108,0,9,4,1,5,36,3,3,4,21,3,0,0,
18,0,0,92,30,8,1,17,32,32,32,32,32,32,32,32,
32,32,32,32,99,32,61,32,100,111,95,115,116,114,105,110,
103,40,107,41,0,0,0,0,12,6,0,9,100,111,95,115,
116,114,105,110,103,0,0,0,13,5,6,0,15,6,1,0,
31,4,6,1,19,4,5,4,15,3,4,0,30,6,1,18,
32,32,32,32,32,32,32,32,32,32,32,32,98,32,61,32,
100,111,40,118,41,0,0,0,12,7,0,2,100,111,0,0,
11,14,0,0,0,0,0,0,0,0,240,63,9,13,7,14,
31,10,12,2,19,10,11,10,20,10,0,0,18,0,0,118,
12,12,0,3,118,97,108,0,9,11,1,12,36,10,5,11,
21,10,0,0,18,0,0,91,11,12,0,0,0,0,0,0,
0,0,0,0,9,11,7,12,15,10,11,0,11,13,0,0,
0,0,0,0,0,0,240,63,9,12,7,13,15,11,12,0,
15,12,10,0,15,10,11,0,12,14,0,3,118,97,108,0,
9,13,1,14,15,11,13,0,12,14,0,1,62,0,0,0,
12,15,0,2,62,61,0,0,27,13,14,2,11,15,0,0,
0,0,0,0,0,0,0,0,9,14,11,15,36,13,13,14,
21,13,0,0,18,0,0,17,15,13,10,0,15,14,12,0,
12,16,0,1,60,0,0,0,11,19,0,0,0,0,0,0,
0,0,240,63,28,20,0,0,27,18,19,2,9,17,11,18,
1,16,16,17,15,15,16,0,15,12,13,0,15,10,14,0,
15,11,15,0,18,0,0,1,12,15,0,2,69,81,0,0,
13,14,15,0,15,13,14,0,12,15,0,1,60,0,0,0,
23,14,11,15,21,14,0,0,18,0,0,6,12,15,0,2,
76,84,0,0,13,14,15,0,15,13,14,0,18,0,0,1,
12,15,0,2,60,61,0,0,23,14,11,15,21,14,0,0,
18,0,0,6,12,15,0,2,76,69,0,0,13,14,15,0,
15,13,14,0,18,0,0,1,12,15,0,2,33,61,0,0,
23,14,11,15,21,14,0,0,18,0,0,6,12,15,0,2,
78,69,0,0,13,14,15,0,15,13,14,0,18,0,0,1,
12,16,0,5,105,110,102,105,120,0,0,0,13,15,16,0,
15,16,13,0,15,17,12,0,15,18,10,0,15,19,2,0,
31,14,16,4,19,14,15,14,20,14,0,0,18,0,0,22,
12,16,0,5,105,110,102,105,120,0,0,0,13,15,16,0,
12,21,0,3,118,97,108,0,9,20,1,21,9,16,6,20,
11,20,0,0,0,0,0,0,0,0,0,0,9,17,7,20,
11,20,0,0,0,0,0,0,0,0,240,63,9,18,7,20,
15,19,2,0,31,14,16,4,19,14,15,14,20,14,0,0,
18,0,0,1,0,0,0,0,12,38,0,9,100,111,95,115,
121,109,98,111,108,0,0,0,14,38,37,0,16,38,1,221,
44,34,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,12,4,0,4,116,121,112,101,0,0,0,0,
9,3,1,4,12,4,0,4,110,97,109,101,0,0,0,0,
23,3,3,4,21,3,0,0,18,0,0,136,11,5,0,0,
0,0,0,0,0,0,240,63,11,7,0,0,0,0,0,0,
0,0,0,0,12,8,0,1,68,0,0,0,13,3,8,0,
12,8,0,8,95,103,108,111,98,97,108,115,0,0,0,0,
9,3,3,8,23,6,3,7,21,6,0,0,18,0,0,2,
18,0,0,16,12,8,0,1,68,0,0,0,13,3,8,0,
12,8,0,4,118,97,114,115,0,0,0,0,9,3,3,8,
12,9,0,3,118,97,108,0,9,8,1,9,36,3,3,8,
11,8,0,0,0,0,0,0,0,0,0,0,23,3,3,8,
23,4,3,5,21,4,0,0,18,0,0,2,18,0,0,12,
12,6,0,1,68,0,0,0,13,3,6,0,12,6,0,7,
103,108,111,98,97,108,115,0,9,3,3,6,12,7,0,3,
118,97,108,0,9,6,1,7,36,3,3,6,21,3,0,0,
18,0,0,48,12,6,0,9,100,111,95,115,116,114,105,110,
103,0,0,0,13,5,6,0,15,6,1,0,31,4,6,1,
19,4,5,4,15,3,4,0,12,7,0,2,100,111,0,0,
13,6,7,0,15,7,2,0,31,5,7,1,19,5,6,5,
15,4,5,0,30,7,1,19,32,32,32,32,32,32,32,32,
32,32,32,32,99,111,100,101,40,71,83,69,84,44,99,44,
98,41,0,0,12,7,0,4,99,111,100,101,0,0,0,0,
15,4,5,0,12,7,0,4,99,111,100,101,0,0,0,0,
13,6,7,0,12,10,0,4,71,83,69,84,0,0,0,0,
13,7,10,0,15,8,3,0,15,9,4,0,31,5,7,3,
19,5,6,5,30,6,1,20,32,32,32,32,32,32,32,32,
32,32,32,32,102,114,101,101,95,116,109,112,40,99,41,0,
12,7,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,6,7,0,15,7,3,0,31,5,7,1,19,5,6,5,
30,6,1,21,32,32,32,32,32,32,32,32,32,32,32,32,
102,114,101,101,95,116,109,112,40,98,41,0,12,7,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,6,7,0,
15,7,4,0,31,5,7,1,19,5,6,5,30,5,1,22,
32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,
114,110,0,0,28,5,0,0,20,5,0,0,18,0,0,1,
30,6,1,23,32,32,32,32,32,32,32,32,97,32,61,32,
100,111,95,108,111,99,97,108,40,107,41,0,12,8,0,8,
100,111,95,108,111,99,97,108,0,0,0,0,13,7,8,0,
15,8,1,0,31,6,8,1,19,6,7,6,15,5,6,0,
30,5,1,24,32,32,32,32,32,32,32,32,98,32,61,32,
100,111,40,118,41,0,0,0,12,8,0,2,100,111,0,0,
13,7,8,0,15,8,2,0,31,6,8,1,19,6,7,6,
15,4,6,0,30,6,1,25,32,32,32,32,32,32,32,32,
99,111,100,101,40,77,79,86,69,44,97,44,98,41,0,0,
19,5,6,5,12,7,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,6,7,0,15,7,3,0,31,5,7,1,
19,5,6,5,12,7,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,6,7,0,15,7,4,0,31,5,7,1,
19,5,6,5,28,5,0,0,20,5,0,0,18,0,0,1,
12,8,0,8,100,111,95,108,111,99,97,108,0,0,0,0,
13,7,8,0,15,8,1,0,31,6,8,1,19,6,7,6,
15,5,6,0,12,8,0,2,100,111,0,0,13,7,8,0,
15,8,2,0,31,6,8,1,19,6,7,6,15,4,6,0,
12,8,0,4,99,111,100,101,0,0,0,0,13,7,8,0,
12,11,0,4,77,79,86,69,0,0,0,0,13,8,11,0,
15,9,5,0,15,10,4,0,31,6,8,3,19,6,7,6,
30,5,1,26,32,32,32,32,32,32,32,32,102,114,101,101,
95,116,109,112,40,98,41,0,12,8,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,7,8,0,15,8,4,0,
31,6,8,1,19,6,7,6,30,5,1,27,32,32,32,32,
32,32,32,32,114,101,116,117,114,110,32,97,0,0,0,0,
20,5,0,0,18,0,1,242,30,10,1,28,32,32,32,32,
101,108,105,102,32,107,46,116,121,112,101,32,105,110,32,40,
39,116,117,112,108,101,39,44,39,108,105,115,116,39,41,58,
0,0,0,0,12,7,0,5,116,117,112,108,101,0,0,0,
12,8,0,4,108,105,115,116,0,0,0,0,27,6,7,2,
12,8,0,4,116,121,112,101,0,0,0,0,9,7,1,8,
36,6,6,7,21,6,0,0,18,0,1,217,30,10,1,29,
32,32,32,32,32,32,32,32,105,102,32,118,46,116,121,112,
101,32,105,110,32,40,39,116,117,112,108,101,39,44,39,108,
105,115,116,39,41,58,0,0,12,7,0,5,116,117,112,108,
12,8,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,7,8,0,15,8,4,0,31,6,8,1,19,6,7,6,
20,5,0,0,18,0,1,6,12,7,0,5,116,117,112,108,
101,0,0,0,12,8,0,4,108,105,115,116,0,0,0,0,
27,6,7,2,12,8,0,4,116,121,112,101,0,0,0,0,
9,7,2,8,36,6,6,7,21,6,0,0,18,0,1,12,
30,7,1,30,32,32,32,32,32,32,32,32,32,32,32,32,
110,44,116,109,112,115,32,61,32,48,44,91,93,0,0,0,
11,7,0,0,0,0,0,0,0,0,0,0,15,6,7,0,
27,8,0,0,15,7,8,0,15,8,6,0,15,6,7,0,
30,8,1,31,32,32,32,32,32,32,32,32,32,32,32,32,
102,111,114,32,107,107,32,105,110,32,107,46,105,116,101,109,
115,58,0,0,12,10,0,5,105,116,101,109,115,0,0,0,
9,9,1,10,11,10,0,0,0,0,0,0,0,0,0,0,
42,7,9,10,18,0,0,112,30,8,1,32,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,118,118,32,61,
32,118,46,105,116,101,109,115,91,110,93,0,12,13,0,5,
9,7,1,8,36,6,6,7,21,6,0,0,18,0,0,248,
12,7,0,5,116,117,112,108,101,0,0,0,12,8,0,4,
108,105,115,116,0,0,0,0,27,6,7,2,12,8,0,4,
116,121,112,101,0,0,0,0,9,7,2,8,36,6,6,7,
21,6,0,0,18,0,0,128,11,7,0,0,0,0,0,0,
0,0,0,0,15,6,7,0,27,8,0,0,15,7,8,0,
15,8,6,0,15,6,7,0,12,10,0,5,105,116,101,109,
115,0,0,0,9,9,1,10,11,10,0,0,0,0,0,0,
0,0,0,0,42,7,9,10,18,0,0,54,12,13,0,5,
105,116,101,109,115,0,0,0,9,12,2,13,9,12,12,8,
15,11,12,0,30,13,1,33,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,116,109,112,32,61,32,103,101,
116,95,116,109,112,40,41,59,32,116,109,112,115,46,97,112,
112,101,110,100,40,116,109,112,41,0,0,0,12,15,0,7,
103,101,116,95,116,109,112,0,13,14,15,0,31,13,0,0,
19,13,14,13,15,12,13,0,12,15,0,6,97,112,112,101,
110,100,0,0,9,14,6,15,15,15,12,0,31,13,15,1,
19,13,14,13,30,7,1,34,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,114,32,61,32,100,111,40,118,
118,41,0,0,12,16,0,2,100,111,0,0,13,15,16,0,
15,16,11,0,31,14,16,1,19,14,15,14,15,13,14,0,
30,9,1,35,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,99,111,100,101,40,77,79,86,69,44,116,109,
112,44,114,41,0,0,0,0,12,16,0,4,99,111,100,101,
15,11,12,0,12,15,0,7,103,101,116,95,116,109,112,0,
13,14,15,0,31,13,0,0,19,13,14,13,15,12,13,0,
12,15,0,6,97,112,112,101,110,100,0,0,9,14,6,15,
15,15,12,0,31,13,15,1,19,13,14,13,12,16,0,2,
100,111,0,0,13,15,16,0,15,16,11,0,31,14,16,1,
19,14,15,14,15,13,14,0,12,16,0,4,99,111,100,101,
0,0,0,0,13,15,16,0,12,19,0,4,77,79,86,69,
0,0,0,0,13,16,19,0,15,17,12,0,15,18,13,0,
31,14,16,3,19,14,15,14,30,9,1,36,32,32,32,32,
32,32,32,32,32,32,32,32,32,32,32,32,102,114,101,101,
95,116,109,112,40,114,41,32,35,82,69,71,0,0,0,0,
12,16,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,15,16,0,15,16,13,0,31,14,16,1,19,14,15,14,
30,6,1,37,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,110,43,61,49,0,0,0,0,11,15,0,0,
0,0,0,0,0,0,240,63,1,14,8,15,15,8,14,0,
18,0,255,144,30,5,1,38,32,32,32,32,32,32,32,32,
32,32,32,32,110,32,61,32,48,0,0,0,11,9,0,0,
0,0,0,0,0,0,0,0,15,8,9,0,30,8,1,39,
32,32,32,32,32,32,32,32,32,32,32,32,102,111,114,32,
107,107,32,105,110,32,107,46,105,116,101,109,115,58,0,0,
31,14,16,3,19,14,15,14,12,16,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,15,16,0,15,16,13,0,
31,14,16,1,19,14,15,14,11,15,0,0,0,0,0,0,
0,0,240,63,1,14,8,15,15,8,14,0,18,0,255,202,
11,9,0,0,0,0,0,0,0,0,0,0,15,8,9,0,
12,10,0,5,105,116,101,109,115,0,0,0,9,9,1,10,
11,10,0,0,0,0,0,0,0,0,0,0,42,7,9,10,
18,0,0,86,30,8,1,40,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,118,118,32,61,32,118,46,105,
116,101,109,115,91,110,93,0,12,15,0,5,105,116,101,109,
115,0,0,0,9,14,2,15,9,14,14,8,15,11,14,0,
30,8,1,41,32,32,32,32,32,32,32,32,32,32,32,32,
32,32,32,32,116,109,112,32,61,32,116,109,112,115,91,110,
93,0,0,0,9,14,6,8,15,12,14,0,30,18,1,42,
32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
102,114,101,101,95,116,109,112,40,100,111,95,115,101,116,95,
99,116,120,40,107,107,44,84,111,107,101,110,40,118,118,46,
112,111,115,44,39,114,101,103,39,44,116,109,112,41,41,41,
32,35,82,69,71,0,0,0,12,16,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,15,16,0,12,18,0,10,
100,111,95,115,101,116,95,99,116,120,0,0,13,17,18,0,
15,18,7,0,12,21,0,5,84,111,107,101,110,0,0,0,
13,20,21,0,12,24,0,3,112,111,115,0,9,21,11,24,
12,22,0,3,114,101,103,0,15,23,12,0,31,19,21,3,
19,19,20,19,31,16,18,2,19,16,17,16,31,14,16,1,
19,14,15,14,30,6,1,43,32,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,32,110,32,43,61,32,49,0,0,
18,0,0,42,12,15,0,5,105,116,101,109,115,0,0,0,
9,14,2,15,9,14,14,8,15,11,14,0,9,14,6,8,
15,12,14,0,12,16,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,15,16,0,12,18,0,10,100,111,95,115,
101,116,95,99,116,120,0,0,13,17,18,0,15,18,7,0,
12,21,0,5,84,111,107,101,110,0,0,0,13,20,21,0,
12,24,0,3,112,111,115,0,9,21,11,24,12,22,0,3,
114,101,103,0,15,23,12,0,31,19,21,3,19,19,20,19,
31,16,18,2,19,16,17,16,31,14,16,1,19,14,15,14,
11,15,0,0,0,0,0,0,0,0,240,63,1,14,8,15,
15,8,14,0,18,0,255,170,30,5,1,44,32,32,32,32,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,0,0,
28,9,0,0,20,9,0,0,18,0,0,1,30,8,1,46,
32,32,32,32,32,32,32,32,114,32,61,32,100,111,40,118,
41,59,32,117,110,95,116,109,112,40,114,41,0,0,0,0,
12,14,0,2,100,111,0,0,13,10,14,0,15,14,2,0,
31,9,14,1,19,9,10,9,15,13,9,0,12,14,0,6,
117,110,95,116,109,112,0,0,13,10,14,0,15,14,13,0,
31,9,14,1,19,9,10,9,30,11,1,47,32,32,32,32,
32,32,32,32,110,44,32,116,109,112,32,61,32,48,44,32,
84,111,107,101,110,40,118,46,112,111,115,44,39,114,101,103,
39,44,114,41,0,0,0,0,11,10,0,0,0,0,0,0,
0,0,0,0,15,9,10,0,12,16,0,5,84,111,107,101,
110,0,0,0,13,15,16,0,12,19,0,3,112,111,115,0,
9,16,2,19,12,17,0,3,114,101,103,0,15,18,13,0,
31,14,16,3,19,14,15,14,15,10,14,0,15,8,9,0,
15,12,10,0,30,7,1,48,32,32,32,32,32,32,32,32,
102,111,114,32,116,116,32,105,110,32,107,46,105,116,101,109,
115,58,0,0,12,14,0,5,105,116,101,109,115,0,0,0,
9,10,1,14,11,14,0,0,0,0,0,0,0,0,0,0,
42,9,10,14,18,0,0,88,30,27,1,49,32,32,32,32,
32,32,32,32,32,32,32,32,102,114,101,101,95,116,109,112,
40,100,111,95,115,101,116,95,99,116,120,40,116,116,44,84,
111,107,101,110,40,116,109,112,46,112,111,115,44,39,103,101,
116,39,44,78,111,110,101,44,91,116,109,112,44,84,111,107,
101,110,40,116,109,112,46,112,111,115,44,39,110,117,109,98,
101,114,39,44,115,116,114,40,110,41,41,93,41,41,41,32,
35,82,69,71,0,0,0,0,12,17,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,16,17,0,12,19,0,10,
100,111,95,115,101,116,95,99,116,120,0,0,13,18,19,0,
15,19,9,0,12,22,0,5,84,111,107,101,110,0,0,0,
13,21,22,0,12,26,0,3,112,111,115,0,9,22,12,26,
12,23,0,3,103,101,116,0,28,24,0,0,15,26,12,0,
12,29,0,5,84,111,107,101,110,0,0,0,13,28,29,0,
12,32,0,3,112,111,115,0,9,29,12,32,12,30,0,6,
110,117,109,98,101,114,0,0,12,33,0,3,115,116,114,0,
13,32,33,0,15,33,8,0,31,31,33,1,19,31,32,31,
31,27,29,3,19,27,28,27,27,25,26,2,31,20,22,4,
19,20,21,20,31,17,19,2,19,17,18,17,31,15,17,1,
19,15,16,15,30,5,1,50,32,32,32,32,32,32,32,32,
32,32,32,32,110,32,43,61,32,49,0,0,11,16,0,0,
0,0,0,0,0,0,240,63,1,15,8,16,15,8,15,0,
18,0,255,168,30,5,1,51,32,32,32,32,32,32,32,32,
102,114,101,101,95,114,101,103,40,114,41,0,12,15,0,8,
102,114,101,101,95,114,101,103,0,0,0,0,13,14,15,0,
15,15,13,0,31,10,15,1,19,10,14,10,30,4,1,52,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,0,0,
28,10,0,0,20,10,0,0,18,0,0,1,30,6,1,53,
32,32,32,32,114,32,61,32,100,111,40,107,46,105,116,101,
109,115,91,48,93,41,0,0,12,15,0,2,100,111,0,0,
13,14,15,0,12,16,0,5,105,116,101,109,115,0,0,0,
9,15,1,16,11,16,0,0,0,0,0,0,0,0,0,0,
9,15,15,16,31,10,15,1,19,10,14,10,15,13,10,0,
30,4,1,54,32,32,32,32,114,114,32,61,32,100,111,40,
118,41,0,0,12,16,0,2,100,111,0,0,13,15,16,0,
15,8,14,0,18,0,255,214,28,9,0,0,20,9,0,0,
18,0,0,1,12,14,0,2,100,111,0,0,13,10,14,0,
15,14,2,0,31,9,14,1,19,9,10,9,15,13,9,0,
12,14,0,6,117,110,95,116,109,112,0,0,13,10,14,0,
15,14,13,0,31,9,14,1,19,9,10,9,11,10,0,0,
0,0,0,0,0,0,0,0,15,9,10,0,12,16,0,5,
84,111,107,101,110,0,0,0,13,15,16,0,12,19,0,3,
112,111,115,0,9,16,2,19,12,17,0,3,114,101,103,0,
15,18,13,0,31,14,16,3,19,14,15,14,15,10,14,0,
15,8,9,0,15,12,10,0,12,14,0,5,105,116,101,109,
115,0,0,0,9,10,1,14,11,14,0,0,0,0,0,0,
0,0,0,0,42,9,10,14,18,0,0,54,12,17,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,16,17,0,
12,19,0,10,100,111,95,115,101,116,95,99,116,120,0,0,
13,18,19,0,15,19,9,0,12,22,0,5,84,111,107,101,
110,0,0,0,13,21,22,0,12,26,0,3,112,111,115,0,
9,22,12,26,12,23,0,3,103,101,116,0,28,24,0,0,
15,26,12,0,12,29,0,5,84,111,107,101,110,0,0,0,
13,28,29,0,12,32,0,3,112,111,115,0,9,29,12,32,
12,30,0,6,110,117,109,98,101,114,0,0,12,33,0,3,
115,116,114,0,13,32,33,0,15,33,8,0,31,31,33,1,
19,31,32,31,31,27,29,3,19,27,28,27,27,25,26,2,
31,20,22,4,19,20,21,20,31,17,19,2,19,17,18,17,
31,15,17,1,19,15,16,15,11,16,0,0,0,0,0,0,
0,0,240,63,1,15,8,16,15,8,15,0,18,0,255,202,
12,15,0,8,102,114,101,101,95,114,101,103,0,0,0,0,
13,14,15,0,15,15,13,0,31,10,15,1,19,10,14,10,
28,10,0,0,20,10,0,0,18,0,0,1,12,15,0,2,
100,111,0,0,13,14,15,0,12,16,0,5,105,116,101,109,
115,0,0,0,9,15,1,16,11,16,0,0,0,0,0,0,
0,0,0,0,9,15,15,16,31,10,15,1,19,10,14,10,
15,13,10,0,12,16,0,2,100,111,0,0,13,15,16,0,
15,16,2,0,31,14,16,1,19,14,15,14,15,10,14,0,
30,7,1,55,32,32,32,32,116,109,112,32,61,32,100,111,
40,107,46,105,116,101,109,115,91,49,93,41,0,0,0,0,
12,16,0,2,100,111,0,0,13,15,16,0,12,17,0,5,
105,116,101,109,115,0,0,0,9,16,1,17,11,17,0,0,
0,0,0,0,0,0,240,63,9,16,16,17,31,14,16,1,
19,14,15,14,15,12,14,0,30,6,1,56,32,32,32,32,
99,111,100,101,40,83,69,84,44,114,44,116,109,112,44,114,
114,41,0,0,12,16,0,4,99,111,100,101,0,0,0,0,
13,15,16,0,12,20,0,3,83,69,84,0,13,16,20,0,
15,17,13,0,15,18,12,0,15,19,10,0,31,14,16,4,
19,14,15,14,30,6,1,57,32,32,32,32,102,114,101,101,
95,116,109,112,40,114,41,32,35,82,69,71,0,0,0,0,
12,16,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,15,16,0,15,16,13,0,31,14,16,1,19,14,15,14,
30,6,1,58,32,32,32,32,102,114,101,101,95,116,109,112,
40,116,109,112,41,32,35,82,69,71,0,0,12,16,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,15,16,0,
15,16,12,0,31,14,16,1,19,14,15,14,30,4,1,59,
32,32,32,32,114,101,116,117,114,110,32,114,114,0,0,0,
20,10,0,0,0,0,0,0,12,38,0,10,100,111,95,115,
101,116,95,99,116,120,0,0,14,38,37,0,30,9,1,61,
100,101,102,32,109,97,110,97,103,101,95,115,101,113,40,105,
44,97,44,105,116,101,109,115,44,115,97,118,61,48,41,58,
0,0,0,0,16,38,1,20,44,19,0,0,30,9,1,61,
100,101,102,32,109,97,110,97,103,101,95,115,101,113,40,105,
44,97,44,105,116,101,109,115,44,115,97,118,61,48,41,58,
0,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,10,
109,97,110,97,103,101,95,115,101,113,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
28,4,0,0,9,3,0,4,11,4,0,0,0,0,0,0,
0,0,0,0,28,5,0,0,32,4,0,5,30,7,1,62,
32,32,32,32,108,32,61,32,109,97,120,40,115,97,118,44,
108,101,110,40,105,116,101,109,115,41,41,0,12,8,0,3,
109,97,120,0,13,7,8,0,15,8,4,0,12,11,0,3,
108,101,110,0,13,10,11,0,15,11,3,0,31,9,11,1,
19,9,10,9,31,6,8,2,19,6,7,6,15,5,6,0,
30,7,1,63,32,32,32,32,110,44,116,109,112,115,32,61,
32,48,44,103,101,116,95,116,109,112,115,40,108,41,0,0,
11,7,0,0,0,0,0,0,0,0,0,0,15,6,7,0,
12,10,0,8,103,101,116,95,116,109,112,115,0,0,0,0,
13,9,10,0,15,10,5,0,31,8,10,1,19,8,9,8,
15,7,8,0,15,8,6,0,15,6,7,0,30,6,1,64,
32,32,32,32,102,111,114,32,116,116,32,105,110,32,105,116,
101,109,115,58,0,0,0,0,11,9,0,0,0,0,0,0,
0,0,0,0,42,7,3,9,18,0,0,80,30,5,1,65,
32,32,32,32,32,32,32,32,114,32,61,32,116,109,112,115,
91,110,93,0,9,11,6,8,15,10,11,0,30,6,1,66,
32,32,32,32,32,32,32,32,98,32,61,32,100,111,40,116,
116,44,114,41,0,0,0,0,12,14,0,2,100,111,0,0,
13,13,14,0,15,14,7,0,15,15,10,0,31,12,14,2,
19,12,13,12,15,11,12,0,30,5,1,67,32,32,32,32,
32,32,32,32,105,102,32,114,32,33,61,32,98,58,0,0,
35,12,10,11,21,12,0,0,18,0,0,37,30,7,1,68,
32,32,32,32,32,32,32,32,32,32,32,32,99,111,100,101,
40,77,79,86,69,44,114,44,98,41,0,0,12,14,0,4,
99,111,100,101,0,0,0,0,13,13,14,0,12,17,0,4,
77,79,86,69,0,0,0,0,13,14,17,0,15,15,10,0,
15,16,11,0,31,12,14,3,19,12,13,12,30,6,1,69,
32,32,32,32,32,32,32,32,32,32,32,32,102,114,101,101,
95,116,109,112,40,98,41,0,12,14,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,13,14,0,15,14,11,0,
31,12,14,1,19,12,13,12,18,0,0,1,30,4,1,70,
32,32,32,32,32,32,32,32,110,32,43,61,49,0,0,0,
11,13,0,0,0,0,0,0,0,0,240,63,1,12,8,13,
15,8,12,0,18,0,255,176,30,6,1,71,32,32,32,32,
105,102,32,110,111,116,32,108,101,110,40,116,109,112,115,41,
58,0,0,0,12,14,0,3,108,101,110,0,13,13,14,0,
15,14,6,0,31,12,14,1,19,12,13,12,47,9,12,0,
21,9,0,0,18,0,0,33,30,6,1,72,32,32,32,32,
32,32,32,32,99,111,100,101,40,105,44,97,44,48,44,48,
41,0,0,0,12,13,0,4,99,111,100,101,0,0,0,0,
13,12,13,0,15,13,1,0,15,14,2,0,11,15,0,0,
0,0,0,0,0,0,0,0,11,16,0,0,0,0,0,0,
0,0,0,0,31,9,13,4,19,9,12,9,30,5,1,73,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,48,
0,0,0,0,11,9,0,0,0,0,0,0,0,0,0,0,
20,9,0,0,18,0,0,1,30,9,1,74,32,32,32,32,
99,111,100,101,40,105,44,97,44,116,109,112,115,91,48,93,
44,108,101,110,40,105,116,101,109,115,41,41,0,0,0,0,
12,13,0,4,99,111,100,101,0,0,0,0,13,12,13,0,
15,13,1,0,15,14,2,0,11,17,0,0,0,0,0,0,
0,0,0,0,9,15,6,17,12,18,0,3,108,101,110,0,
13,17,18,0,15,18,3,0,31,16,18,1,19,16,17,16,
31,9,13,4,19,9,12,9,30,7,1,75,32,32,32,32,
102,114,101,101,95,116,109,112,115,40,116,109,112,115,91,115,
97,118,58,93,41,0,0,0,12,13,0,9,102,114,101,101,
95,116,109,112,115,0,0,0,13,12,13,0,15,15,4,0,
28,16,0,0,27,14,15,2,9,13,6,14,31,9,13,1,
19,9,12,9,30,5,1,76,32,32,32,32,114,101,116,117,
114,110,32,116,109,112,115,91,48,93,0,0,11,12,0,0,
19,14,15,14,15,12,14,0,12,16,0,4,99,111,100,101,
0,0,0,0,13,15,16,0,12,20,0,3,83,69,84,0,
13,16,20,0,15,17,13,0,15,18,12,0,15,19,10,0,
31,14,16,4,19,14,15,14,12,16,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,15,16,0,15,16,13,0,
31,14,16,1,19,14,15,14,12,16,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,15,16,0,15,16,12,0,
31,14,16,1,19,14,15,14,20,10,0,0,0,0,0,0,
12,39,0,10,100,111,95,115,101,116,95,99,116,120,0,0,
14,39,38,0,16,39,0,152,44,19,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,28,4,0,0,
9,3,0,4,11,4,0,0,0,0,0,0,0,0,0,0,
28,5,0,0,32,4,0,5,12,8,0,3,109,97,120,0,
13,7,8,0,15,8,4,0,12,11,0,3,108,101,110,0,
13,10,11,0,15,11,3,0,31,9,11,1,19,9,10,9,
31,6,8,2,19,6,7,6,15,5,6,0,11,7,0,0,
0,0,0,0,0,0,0,0,15,6,7,0,12,10,0,8,
103,101,116,95,116,109,112,115,0,0,0,0,13,9,10,0,
15,10,5,0,31,8,10,1,19,8,9,8,15,7,8,0,
15,8,6,0,15,6,7,0,11,9,0,0,0,0,0,0,
0,0,0,0,42,7,3,9,18,0,0,41,9,11,6,8,
15,10,11,0,12,14,0,2,100,111,0,0,13,13,14,0,
15,14,7,0,15,15,10,0,31,12,14,2,19,12,13,12,
15,11,12,0,35,12,10,11,21,12,0,0,18,0,0,22,
12,14,0,4,99,111,100,101,0,0,0,0,13,13,14,0,
12,17,0,4,77,79,86,69,0,0,0,0,13,14,17,0,
15,15,10,0,15,16,11,0,31,12,14,3,19,12,13,12,
12,14,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,13,14,0,15,14,11,0,31,12,14,1,19,12,13,12,
18,0,0,1,11,13,0,0,0,0,0,0,0,0,240,63,
1,12,8,13,15,8,12,0,18,0,255,215,11,9,0,0,
0,0,0,0,0,0,0,0,12,14,0,3,108,101,110,0,
13,13,14,0,15,14,6,0,31,12,14,1,19,12,13,12,
23,9,9,12,21,9,0,0,18,0,0,20,12,13,0,4,
99,111,100,101,0,0,0,0,13,12,13,0,15,13,1,0,
15,14,2,0,11,15,0,0,0,0,0,0,0,0,0,0,
11,16,0,0,0,0,0,0,0,0,0,0,31,9,13,4,
19,9,12,9,11,9,0,0,0,0,0,0,0,0,0,0,
20,9,0,0,18,0,0,1,12,13,0,4,99,111,100,101,
0,0,0,0,13,12,13,0,15,13,1,0,15,14,2,0,
11,17,0,0,0,0,0,0,0,0,0,0,9,15,6,17,
12,18,0,3,108,101,110,0,13,17,18,0,15,18,3,0,
31,16,18,1,19,16,17,16,31,9,13,4,19,9,12,9,
12,13,0,9,102,114,101,101,95,116,109,112,115,0,0,0,
13,12,13,0,15,15,4,0,28,16,0,0,27,14,15,2,
9,13,6,14,31,9,13,1,19,9,12,9,11,12,0,0,
0,0,0,0,0,0,0,0,9,9,6,12,20,9,0,0,
0,0,0,0,12,39,0,10,109,97,110,97,103,101,95,115,
101,113,0,0,14,39,38,0,30,6,1,78,100,101,102,32,
112,95,102,105,108,116,101,114,40,105,116,101,109,115,41,58,
0,0,0,0,16,39,0,172,44,12,0,0,30,6,1,78,
100,101,102,32,112,95,102,105,108,116,101,114,40,105,116,101,
109,115,41,58,0,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,8,112,95,102,105,108,116,101,114,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,8,1,79,
32,32,32,32,97,44,98,44,99,44,100,32,61,32,91,93,
44,91,93,44,78,111,110,101,44,78,111,110,101,0,0,0,
27,3,0,0,15,2,3,0,27,4,0,0,15,3,4,0,
28,5,0,0,15,4,5,0,28,6,0,0,15,5,6,0,
15,6,2,0,15,2,3,0,15,3,4,0,15,4,5,0,
30,5,1,80,32,32,32,32,102,111,114,32,116,32,105,110,
32,105,116,101,109,115,58,0,11,7,0,0,0,0,0,0,
0,0,0,0,42,5,1,7,18,0,0,106,30,15,1,81,
32,32,32,32,32,32,32,32,105,102,32,116,46,116,121,112,
101,32,61,61,32,39,115,121,109,98,111,108,39,32,97,110,
100,32,116,46,118,97,108,32,61,61,32,39,61,39,58,32,
98,46,97,112,112,101,110,100,40,116,41,0,12,9,0,4,
116,121,112,101,0,0,0,0,9,8,5,9,12,9,0,6,
115,121,109,98,111,108,0,0,23,8,8,9,21,8,0,0,
18,0,0,7,12,9,0,3,118,97,108,0,9,8,5,9,
12,9,0,1,61,0,0,0,23,8,8,9,21,8,0,0,
18,0,0,9,12,10,0,6,97,112,112,101,110,100,0,0,
9,9,2,10,15,10,5,0,31,8,10,1,19,8,9,8,
18,0,0,63,30,10,1,82,32,32,32,32,32,32,32,32,
101,108,105,102,32,116,46,116,121,112,101,32,61,61,32,39,
97,114,103,115,39,58,32,99,32,61,32,116,0,0,0,0,
12,9,0,4,116,121,112,101,0,0,0,0,9,8,5,9,
12,9,0,4,97,114,103,115,0,0,0,0,23,8,8,9,
21,8,0,0,18,0,0,3,15,3,5,0,18,0,0,40,
30,10,1,83,32,32,32,32,32,32,32,32,101,108,105,102,
32,116,46,116,121,112,101,32,61,61,32,39,110,97,114,103,
115,39,58,32,100,32,61,32,116,0,0,0,12,9,0,4,
116,121,112,101,0,0,0,0,9,8,5,9,12,9,0,5,
110,97,114,103,115,0,0,0,23,8,8,9,21,8,0,0,
18,0,0,3,15,4,5,0,18,0,0,17,30,7,1,84,
32,32,32,32,32,32,32,32,101,108,115,101,58,32,97,46,
97,112,112,101,110,100,40,116,41,0,0,0,12,10,0,6,
97,112,112,101,110,100,0,0,9,9,6,10,15,10,5,0,
31,8,10,1,19,8,9,8,18,0,0,1,18,0,255,150,
30,5,1,85,32,32,32,32,114,101,116,117,114,110,32,97,
44,98,44,99,44,100,0,0,15,8,6,0,15,9,2,0,
15,10,3,0,15,11,4,0,27,7,8,4,20,7,0,0,
0,0,0,0,12,40,0,8,112,95,102,105,108,116,101,114,
0,0,0,0,14,40,39,0,30,5,1,87,100,101,102,32,
100,111,95,105,109,112,111,114,116,40,116,41,58,0,0,0,
16,40,0,170,44,21,0,0,30,5,1,87,100,101,102,32,
100,111,95,105,109,112,111,114,116,40,116,41,58,0,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,9,100,111,95,105,
109,112,111,114,116,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,6,1,88,32,32,32,32,102,111,114,32,
109,111,100,32,105,110,32,116,46,105,116,101,109,115,58,0,
12,4,0,5,105,116,101,109,115,0,0,0,9,3,1,4,
11,4,0,0,0,0,0,0,0,0,0,0,42,2,3,4,
18,0,0,133,30,7,1,89,32,32,32,32,32,32,32,32,
109,111,100,46,116,121,112,101,32,61,32,39,115,116,114,105,
110,103,39,0,12,5,0,6,115,116,114,105,110,103,0,0,
12,6,0,4,116,121,112,101,0,0,0,0,10,2,6,5,
30,12,1,90,32,32,32,32,32,32,32,32,118,32,61,32,
100,111,95,99,97,108,108,40,84,111,107,101,110,40,116,46,
112,111,115,44,39,99,97,108,108,39,44,78,111,110,101,44,
91,0,0,0,12,8,0,7,100,111,95,99,97,108,108,0,
13,7,8,0,12,10,0,5,84,111,107,101,110,0,0,0,
13,9,10,0,12,14,0,3,112,111,115,0,9,10,1,14,
12,11,0,4,99,97,108,108,0,0,0,0,28,12,0,0,
30,11,1,91,32,32,32,32,32,32,32,32,32,32,32,32,
84,111,107,101,110,40,116,46,112,111,115,44,39,110,97,109,
101,39,44,39,105,109,112,111,114,116,39,41,44,0,0,0,
12,17,0,5,84,111,107,101,110,0,0,0,13,16,17,0,
12,20,0,3,112,111,115,0,9,17,1,20,12,18,0,4,
110,97,109,101,0,0,0,0,12,19,0,6,105,109,112,111,
114,116,0,0,31,14,17,3,19,14,16,14,30,5,1,92,
32,32,32,32,32,32,32,32,32,32,32,32,109,111,100,93,
41,41,0,0,15,15,2,0,27,13,14,2,31,8,10,4,
0,0,0,0,12,40,0,10,109,97,110,97,103,101,95,115,
101,113,0,0,14,40,39,0,16,40,0,92,44,12,0,0,
28,2,0,0,9,1,0,2,27,3,0,0,15,2,3,0,
27,4,0,0,15,3,4,0,28,5,0,0,15,4,5,0,
28,6,0,0,15,5,6,0,15,6,2,0,15,2,3,0,
15,3,4,0,15,4,5,0,11,7,0,0,0,0,0,0,
0,0,0,0,42,5,1,7,18,0,0,65,11,10,0,0,
0,0,0,0,0,0,0,0,12,11,0,4,116,121,112,101,
0,0,0,0,9,8,5,11,12,11,0,6,115,121,109,98,
111,108,0,0,23,8,8,11,23,9,8,10,21,9,0,0,
18,0,0,2,18,0,0,7,12,11,0,3,118,97,108,0,
9,8,5,11,12,11,0,1,61,0,0,0,23,8,8,11,
21,8,0,0,18,0,0,9,12,10,0,6,97,112,112,101,
110,100,0,0,9,9,2,10,15,10,5,0,31,8,10,1,
19,8,9,8,18,0,0,33,12,9,0,4,116,121,112,101,
0,0,0,0,9,8,5,9,12,9,0,4,97,114,103,115,
0,0,0,0,23,8,8,9,21,8,0,0,18,0,0,3,
15,3,5,0,18,0,0,21,12,9,0,4,116,121,112,101,
0,0,0,0,9,8,5,9,12,9,0,5,110,97,114,103,
115,0,0,0,23,8,8,9,21,8,0,0,18,0,0,3,
15,4,5,0,18,0,0,9,12,10,0,6,97,112,112,101,
110,100,0,0,9,9,6,10,15,10,5,0,31,8,10,1,
19,8,9,8,18,0,0,1,18,0,255,191,15,8,6,0,
15,9,2,0,15,10,3,0,15,11,4,0,27,7,8,4,
20,7,0,0,0,0,0,0,12,41,0,8,112,95,102,105,
108,116,101,114,0,0,0,0,14,41,40,0,16,41,0,86,
44,21,0,0,28,2,0,0,9,1,0,2,12,4,0,5,
105,116,101,109,115,0,0,0,9,3,1,4,11,4,0,0,
0,0,0,0,0,0,0,0,42,2,3,4,18,0,0,73,
12,5,0,6,115,116,114,105,110,103,0,0,12,6,0,4,
116,121,112,101,0,0,0,0,10,2,6,5,12,8,0,7,
100,111,95,99,97,108,108,0,13,7,8,0,12,10,0,5,
84,111,107,101,110,0,0,0,13,9,10,0,12,14,0,3,
112,111,115,0,9,10,1,14,12,11,0,4,99,97,108,108,
0,0,0,0,28,12,0,0,12,17,0,5,84,111,107,101,
110,0,0,0,13,16,17,0,12,20,0,3,112,111,115,0,
9,17,1,20,12,18,0,4,110,97,109,101,0,0,0,0,
12,19,0,6,105,109,112,111,114,116,0,0,31,14,17,3,
19,14,16,14,15,15,2,0,27,13,14,2,31,8,10,4,
19,8,9,8,31,6,8,1,19,6,7,6,15,5,6,0,
30,7,1,93,32,32,32,32,32,32,32,32,109,111,100,46,
116,121,112,101,32,61,32,39,110,97,109,101,39,0,0,0,
12,6,0,4,110,97,109,101,0,0,0,0,12,7,0,4,
116,121,112,101,0,0,0,0,10,2,7,6,30,12,1,94,
32,32,32,32,32,32,32,32,100,111,95,115,101,116,95,99,
116,120,40,109,111,100,44,84,111,107,101,110,40,116,46,112,
111,115,44,39,114,101,103,39,44,118,41,41,0,0,0,0,
12,8,0,10,100,111,95,115,101,116,95,99,116,120,0,0,
13,7,8,0,15,8,2,0,12,11,0,5,84,111,107,101,
110,0,0,0,13,10,11,0,12,14,0,3,112,111,115,0,
9,11,1,14,12,12,0,3,114,101,103,0,15,13,5,0,
31,9,11,3,19,9,10,9,31,6,8,2,19,6,7,6,
18,0,255,123,0,0,0,0,12,41,0,9,100,111,95,105,
109,112,111,114,116,0,0,0,14,41,40,0,30,4,1,95,
100,101,102,32,100,111,95,102,114,111,109,40,116,41,58,0,
16,41,1,145,44,23,0,0,30,4,1,95,100,101,102,32,
100,111,95,102,114,111,109,40,116,41,58,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,7,100,111,95,102,114,111,109,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,6,1,96,
32,32,32,32,109,111,100,32,61,32,116,46,105,116,101,109,
115,91,48,93,0,0,0,0,12,4,0,5,105,116,101,109,
116,121,112,101,0,0,0,0,10,2,7,6,12,8,0,10,
100,111,95,115,101,116,95,99,116,120,0,0,13,7,8,0,
15,8,2,0,12,11,0,5,84,111,107,101,110,0,0,0,
13,10,11,0,12,14,0,3,112,111,115,0,9,11,1,14,
12,12,0,3,114,101,103,0,15,13,5,0,31,9,11,3,
19,9,10,9,31,6,8,2,19,6,7,6,18,0,255,183,
0,0,0,0,12,42,0,9,100,111,95,105,109,112,111,114,
116,0,0,0,14,42,41,0,16,42,0,222,44,23,0,0,
28,2,0,0,9,1,0,2,12,4,0,5,105,116,101,109,
115,0,0,0,9,3,1,4,11,4,0,0,0,0,0,0,
0,0,0,0,9,3,3,4,15,2,3,0,30,6,1,97,
32,32,32,32,109,111,100,46,116,121,112,101,32,61,32,39,
115,116,114,105,110,103,39,0,12,3,0,6,115,116,114,105,
110,103,0,0,12,4,0,4,116,121,112,101,0,0,0,0,
10,2,4,3,30,10,1,98,32,32,32,32,118,32,61,32,
100,111,40,84,111,107,101,110,40,116,46,112,111,115,44,39,
99,97,108,108,39,44,78,111,110,101,44,91,0,0,0,0,
12,6,0,2,100,111,0,0,13,5,6,0,12,8,0,5,
84,111,107,101,110,0,0,0,13,7,8,0,12,12,0,3,
112,111,115,0,9,8,1,12,12,9,0,4,99,97,108,108,
0,0,0,0,28,10,0,0,30,10,1,99,32,32,32,32,
32,32,32,32,84,111,107,101,110,40,116,46,112,111,115,44,
39,110,97,109,101,39,44,39,105,109,112,111,114,116,39,41,
44,0,0,0,12,15,0,5,84,111,107,101,110,0,0,0,
13,14,15,0,12,18,0,3,112,111,115,0,9,15,1,18,
12,16,0,4,110,97,109,101,0,0,0,0,12,17,0,6,
105,109,112,111,114,116,0,0,31,12,15,3,19,12,14,12,
30,4,1,100,32,32,32,32,32,32,32,32,109,111,100,93,
41,41,0,0,15,13,2,0,27,11,12,2,31,6,8,4,
19,6,7,6,31,4,6,1,19,4,5,4,15,3,4,0,
30,6,1,101,32,32,32,32,105,116,101,109,32,61,32,116,
46,105,116,101,109,115,91,49,93,0,0,0,12,6,0,5,
105,116,101,109,115,0,0,0,9,5,1,6,11,6,0,0,
0,0,0,0,0,0,240,63,9,5,5,6,15,4,5,0,
30,6,1,102,32,32,32,32,105,102,32,105,116,101,109,46,
118,97,108,32,61,61,32,39,42,39,58,0,12,6,0,3,
0,0,0,0,9,3,3,4,15,2,3,0,12,3,0,6,
115,116,114,105,110,103,0,0,12,4,0,4,116,121,112,101,
0,0,0,0,10,2,4,3,12,6,0,2,100,111,0,0,
13,5,6,0,12,8,0,5,84,111,107,101,110,0,0,0,
13,7,8,0,12,12,0,3,112,111,115,0,9,8,1,12,
12,9,0,4,99,97,108,108,0,0,0,0,28,10,0,0,
12,15,0,5,84,111,107,101,110,0,0,0,13,14,15,0,
12,18,0,3,112,111,115,0,9,15,1,18,12,16,0,4,
110,97,109,101,0,0,0,0,12,17,0,6,105,109,112,111,
114,116,0,0,31,12,15,3,19,12,14,12,15,13,2,0,
27,11,12,2,31,6,8,4,19,6,7,6,31,4,6,1,
19,4,5,4,15,3,4,0,12,6,0,5,105,116,101,109,
115,0,0,0,9,5,1,6,11,6,0,0,0,0,0,0,
0,0,240,63,9,5,5,6,15,4,5,0,12,6,0,3,
118,97,108,0,9,5,4,6,12,6,0,1,42,0,0,0,
23,5,5,6,21,5,0,0,18,0,0,120,30,12,1,103,
32,32,32,32,32,32,32,32,102,114,101,101,95,116,109,112,
40,100,111,40,84,111,107,101,110,40,116,46,112,111,115,44,
39,99,97,108,108,39,44,78,111,110,101,44,91,0,0,0,
12,7,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,6,7,0,12,9,0,2,100,111,0,0,13,8,9,0,
12,11,0,5,84,111,107,101,110,0,0,0,13,10,11,0,
12,15,0,3,112,111,115,0,9,11,1,15,12,12,0,4,
99,97,108,108,0,0,0,0,28,13,0,0,30,11,1,104,
32,32,32,32,32,32,32,32,32,32,32,32,84,111,107,101,
110,40,116,46,112,111,115,44,39,110,97,109,101,39,44,39,
109,101,114,103,101,39,41,44,0,0,0,0,12,19,0,5,
84,111,107,101,110,0,0,0,13,18,19,0,12,22,0,3,
112,111,115,0,9,19,1,22,12,20,0,4,110,97,109,101,
0,0,0,0,12,21,0,5,109,101,114,103,101,0,0,0,
31,15,19,3,19,15,18,15,30,11,1,105,32,32,32,32,
32,32,32,32,32,32,32,32,84,111,107,101,110,40,116,46,
112,111,115,44,39,110,97,109,101,39,44,39,95,95,100,105,
99,116,95,95,39,41,44,0,12,19,0,5,84,111,107,101,
23,5,5,6,21,5,0,0,18,0,0,71,12,7,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,6,7,0,
12,9,0,2,100,111,0,0,13,8,9,0,12,11,0,5,
84,111,107,101,110,0,0,0,13,10,11,0,12,15,0,3,
112,111,115,0,9,11,1,15,12,12,0,4,99,97,108,108,
0,0,0,0,28,13,0,0,12,19,0,5,84,111,107,101,
110,0,0,0,13,18,19,0,12,22,0,3,112,111,115,0,
9,19,1,22,12,20,0,4,110,97,109,101,0,0,0,0,
12,21,0,8,95,95,100,105,99,116,95,95,0,0,0,0,
31,16,19,3,19,16,18,16,30,11,1,106,32,32,32,32,
32,32,32,32,32,32,32,32,84,111,107,101,110,40,116,46,
112,111,115,44,39,114,101,103,39,44,118,41,93,41,41,41,
32,35,82,69,71,0,0,0,12,19,0,5,84,111,107,101,
12,21,0,5,109,101,114,103,101,0,0,0,31,15,19,3,
19,15,18,15,12,19,0,5,84,111,107,101,110,0,0,0,
13,18,19,0,12,22,0,3,112,111,115,0,9,19,1,22,
12,20,0,4,110,97,109,101,0,0,0,0,12,21,0,8,
95,95,100,105,99,116,95,95,0,0,0,0,31,16,19,3,
19,16,18,16,12,19,0,5,84,111,107,101,110,0,0,0,
13,18,19,0,12,22,0,3,112,111,115,0,9,19,1,22,
12,20,0,3,114,101,103,0,15,21,3,0,31,17,19,3,
19,17,18,17,27,14,15,3,31,9,11,4,19,9,10,9,
31,7,9,1,19,7,8,7,31,5,7,1,19,5,6,5,
18,0,0,79,12,5,0,6,115,116,114,105,110,103,0,0,
12,6,0,4,116,121,112,101,0,0,0,0,10,4,6,5,
12,7,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,6,7,0,12,9,0,10,100,111,95,115,101,116,95,99,
116,120,0,0,13,8,9,0,12,12,0,5,84,111,107,101,
110,0,0,0,13,11,12,0,12,16,0,3,112,111,115,0,
9,12,1,16,12,13,0,3,103,101,116,0,28,14,0,0,
12,19,0,5,84,111,107,101,110,0,0,0,13,18,19,0,
12,22,0,3,112,111,115,0,9,19,1,22,12,20,0,4,
110,97,109,101,0,0,0,0,12,21,0,8,95,95,100,105,
99,116,95,95,0,0,0,0,31,16,19,3,19,16,18,16,
15,17,4,0,27,15,16,2,31,9,12,4,19,9,11,9,
12,12,0,5,84,111,107,101,110,0,0,0,13,11,12,0,
12,16,0,3,112,111,115,0,9,12,1,16,12,13,0,3,
103,101,116,0,28,14,0,0,12,19,0,5,84,111,107,101,
110,0,0,0,13,18,19,0,12,22,0,3,112,111,115,0,
9,19,1,22,12,20,0,3,114,101,103,0,15,21,3,0,
31,17,19,3,19,17,18,17,27,14,15,3,31,9,11,4,
19,9,10,9,31,7,9,1,19,7,8,7,31,5,7,1,
19,5,6,5,18,0,0,139,30,3,1,107,32,32,32,32,
101,108,115,101,58,0,0,0,30,8,1,108,32,32,32,32,
32,32,32,32,105,116,101,109,46,116,121,112,101,32,61,32,
39,115,116,114,105,110,103,39,0,0,0,0,12,5,0,6,
115,116,114,105,110,103,0,0,12,6,0,4,116,121,112,101,
0,0,0,0,10,4,6,5,30,8,1,109,32,32,32,32,
32,32,32,32,102,114,101,101,95,116,109,112,40,100,111,95,
115,101,116,95,99,116,120,40,0,0,0,0,12,7,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,6,7,0,
12,9,0,10,100,111,95,115,101,116,95,99,116,120,0,0,
13,8,9,0,30,19,1,110,32,32,32,32,32,32,32,32,
32,32,32,32,84,111,107,101,110,40,116,46,112,111,115,44,
39,103,101,116,39,44,78,111,110,101,44,91,32,84,111,107,
101,110,40,116,46,112,111,115,44,39,110,97,109,101,39,44,
39,95,95,100,105,99,116,95,95,39,41,44,105,116,101,109,
93,41,44,0,12,12,0,5,84,111,107,101,110,0,0,0,
13,11,12,0,12,16,0,3,112,111,115,0,9,12,1,16,
12,13,0,3,103,101,116,0,28,14,0,0,12,19,0,5,
84,111,107,101,110,0,0,0,13,18,19,0,12,22,0,3,
112,111,115,0,9,19,1,22,12,20,0,4,110,97,109,101,
0,0,0,0,12,21,0,8,95,95,100,105,99,116,95,95,
0,0,0,0,31,16,19,3,19,16,18,16,15,17,4,0,
27,15,16,2,31,9,12,4,19,9,11,9,30,17,1,111,
32,32,32,32,32,32,32,32,32,32,32,32,84,111,107,101,
110,40,116,46,112,111,115,44,39,103,101,116,39,44,78,111,
110,101,44,91,32,84,111,107,101,110,40,116,46,112,111,115,
44,39,114,101,103,39,44,118,41,44,105,116,101,109,93,41,
0,0,0,0,12,12,0,5,84,111,107,101,110,0,0,0,
13,11,12,0,12,16,0,3,112,111,115,0,9,12,1,16,
12,13,0,3,103,101,116,0,28,14,0,0,12,19,0,5,
84,111,107,101,110,0,0,0,13,18,19,0,12,22,0,3,
112,111,115,0,9,19,1,22,12,20,0,3,114,101,103,0,
15,21,3,0,31,16,19,3,19,16,18,16,15,17,4,0,
27,15,16,2,31,10,12,4,19,10,11,10,31,7,9,2,
19,7,8,7,31,5,7,1,19,5,6,5,18,0,0,1,
0,0,0,0,12,42,0,7,100,111,95,102,114,111,109,0,
14,42,41,0,30,5,1,115,100,101,102,32,100,111,95,103,
108,111,98,97,108,115,40,116,41,58,0,0,16,42,0,93,
44,8,0,0,30,5,1,115,100,101,102,32,100,111,95,103,
108,111,98,97,108,115,40,116,41,58,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,10,100,111,95,103,108,111,98,97,
108,115,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,6,1,116,32,32,32,32,102,111,114,32,116,32,105,110,
32,116,46,105,116,101,109,115,58,0,0,0,12,3,0,5,
105,116,101,109,115,0,0,0,9,2,1,3,11,3,0,0,
0,0,0,0,0,0,0,0,42,1,2,3,18,0,0,56,
30,9,1,117,32,32,32,32,32,32,32,32,105,102,32,116,
46,118,97,108,32,110,111,116,32,105,110,32,68,46,103,108,
111,98,97,108,115,58,0,0,12,5,0,1,68,0,0,0,
13,4,5,0,12,5,0,7,103,108,111,98,97,108,115,0,
9,4,4,5,12,6,0,3,118,97,108,0,9,5,1,6,
36,4,4,5,11,5,0,0,0,0,0,0,0,0,0,0,
23,4,4,5,21,4,0,0,18,0,0,28,30,9,1,118,
32,32,32,32,32,32,32,32,32,32,32,32,68,46,103,108,
111,98,97,108,115,46,97,112,112,101,110,100,40,116,46,118,
97,108,41,0,12,6,0,1,68,0,0,0,13,5,6,0,
12,6,0,7,103,108,111,98,97,108,115,0,9,5,5,6,
12,6,0,6,97,112,112,101,110,100,0,0,9,5,5,6,
12,7,0,3,118,97,108,0,9,6,1,7,31,4,6,1,
19,4,5,4,18,0,0,1,18,0,255,200,0,0,0,0,
12,43,0,10,100,111,95,103,108,111,98,97,108,115,0,0,
14,43,42,0,30,4,1,119,100,101,102,32,100,111,95,100,
101,108,40,116,116,41,58,0,16,43,0,126,44,13,0,0,
30,4,1,119,100,101,102,32,100,111,95,100,101,108,40,116,
116,41,58,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,6,
100,111,95,100,101,108,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,6,1,120,32,32,32,32,102,111,114,32,
116,32,105,110,32,116,116,46,105,116,101,109,115,58,0,0,
12,4,0,5,105,116,101,109,115,0,0,0,9,3,1,4,
11,4,0,0,0,0,0,0,0,0,0,0,42,2,3,4,
18,0,0,91,30,7,1,121,32,32,32,32,32,32,32,32,
114,32,61,32,100,111,40,116,46,105,116,101,109,115,91,48,
93,41,0,0,12,8,0,2,100,111,0,0,13,7,8,0,
12,9,0,5,105,116,101,109,115,0,0,0,9,8,2,9,
11,9,0,0,0,0,0,0,0,0,0,0,9,8,8,9,
31,6,8,1,19,6,7,6,15,5,6,0,30,7,1,122,
32,32,32,32,32,32,32,32,114,50,32,61,32,100,111,40,
116,46,105,116,101,109,115,91,49,93,41,0,12,9,0,2,
100,111,0,0,13,8,9,0,12,10,0,5,105,116,101,109,
115,0,0,0,9,9,2,10,11,10,0,0,0,0,0,0,
0,0,240,63,9,9,9,10,31,7,9,1,19,7,8,7,
15,6,7,0,30,6,1,123,32,32,32,32,32,32,32,32,
99,111,100,101,40,68,69,76,44,114,44,114,50,41,0,0,
12,9,0,4,99,111,100,101,0,0,0,0,13,8,9,0,
12,12,0,3,68,69,76,0,13,9,12,0,15,10,5,0,
15,11,6,0,31,7,9,3,19,7,8,7,30,10,1,124,
32,32,32,32,32,32,32,32,102,114,101,101,95,116,109,112,
40,114,41,59,32,102,114,101,101,95,116,109,112,40,114,50,
41,32,35,82,69,71,0,0,12,9,0,8,102,114,101,101,
31,16,19,3,19,16,18,16,15,17,4,0,27,15,16,2,
31,10,12,4,19,10,11,10,31,7,9,2,19,7,8,7,
31,5,7,1,19,5,6,5,18,0,0,1,0,0,0,0,
12,43,0,7,100,111,95,102,114,111,109,0,14,43,42,0,
16,43,0,49,44,8,0,0,28,2,0,0,9,1,0,2,
12,3,0,5,105,116,101,109,115,0,0,0,9,2,1,3,
11,3,0,0,0,0,0,0,0,0,0,0,42,1,2,3,
18,0,0,36,12,5,0,1,68,0,0,0,13,4,5,0,
12,5,0,7,103,108,111,98,97,108,115,0,9,4,4,5,
12,6,0,3,118,97,108,0,9,5,1,6,36,4,4,5,
11,5,0,0,0,0,0,0,0,0,0,0,23,4,4,5,
21,4,0,0,18,0,0,18,12,6,0,1,68,0,0,0,
13,5,6,0,12,6,0,7,103,108,111,98,97,108,115,0,
9,5,5,6,12,6,0,6,97,112,112,101,110,100,0,0,
9,5,5,6,12,7,0,3,118,97,108,0,9,6,1,7,
31,4,6,1,19,4,5,4,18,0,0,1,18,0,255,220,
0,0,0,0,12,44,0,10,100,111,95,103,108,111,98,97,
108,115,0,0,14,44,43,0,16,44,0,70,44,13,0,0,
28,2,0,0,9,1,0,2,12,4,0,5,105,116,101,109,
115,0,0,0,9,3,1,4,11,4,0,0,0,0,0,0,
0,0,0,0,42,2,3,4,18,0,0,57,12,8,0,2,
100,111,0,0,13,7,8,0,12,9,0,5,105,116,101,109,
115,0,0,0,9,8,2,9,11,9,0,0,0,0,0,0,
0,0,0,0,9,8,8,9,31,6,8,1,19,6,7,6,
15,5,6,0,12,9,0,2,100,111,0,0,13,8,9,0,
12,10,0,5,105,116,101,109,115,0,0,0,9,9,2,10,
11,10,0,0,0,0,0,0,0,0,240,63,9,9,9,10,
31,7,9,1,19,7,8,7,15,6,7,0,12,9,0,4,
99,111,100,101,0,0,0,0,13,8,9,0,12,12,0,3,
68,69,76,0,13,9,12,0,15,10,5,0,15,11,6,0,
31,7,9,3,19,7,8,7,12,9,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,8,9,0,15,9,5,0,
31,7,9,1,19,7,8,7,12,9,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,8,9,0,15,9,6,0,
31,7,9,1,19,7,8,7,18,0,255,165,0,0,0,0,
12,44,0,6,100,111,95,100,101,108,0,0,14,44,43,0,
30,6,1,126,100,101,102,32,100,111,95,99,97,108,108,40,
116,44,114,61,78,111,110,101,41,58,0,0,16,44,2,125,
44,31,0,0,30,6,1,126,100,101,102,32,100,111,95,99,
97,108,108,40,116,44,114,61,78,111,110,101,41,58,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,7,100,111,95,99,
97,108,108,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,30,5,1,127,
32,32,32,32,114,32,61,32,103,101,116,95,116,109,112,40,
114,41,0,0,12,5,0,7,103,101,116,95,116,109,112,0,
13,4,5,0,15,5,2,0,31,3,5,1,19,3,4,3,
15,2,3,0,30,5,1,128,32,32,32,32,105,116,101,109,
115,32,61,32,116,46,105,116,101,109,115,0,12,5,0,5,
31,7,9,1,19,7,8,7,18,0,255,199,0,0,0,0,
12,45,0,6,100,111,95,100,101,108,0,0,14,45,44,0,
16,45,1,133,44,31,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,12,5,0,7,
103,101,116,95,116,109,112,0,13,4,5,0,15,5,2,0,
31,3,5,1,19,3,4,3,15,2,3,0,12,5,0,5,
105,116,101,109,115,0,0,0,9,4,1,5,15,3,4,0,
30,6,1,129,32,32,32,32,102,110,99,32,61,32,100,111,
40,105,116,101,109,115,91,48,93,41,0,0,12,7,0,2,
100,111,0,0,13,6,7,0,11,8,0,0,0,0,0,0,
0,0,0,0,9,7,3,8,31,5,7,1,19,5,6,5,
15,4,5,0,30,9,1,130,32,32,32,32,97,44,98,44,
99,44,100,32,61,32,112,95,102,105,108,116,101,114,40,116,
46,105,116,101,109,115,91,49,58,93,41,0,12,7,0,8,
112,95,102,105,108,116,101,114,0,0,0,0,13,6,7,0,
12,8,0,5,105,116,101,109,115,0,0,0,9,7,1,8,
11,9,0,0,0,0,0,0,0,0,240,63,28,10,0,0,
27,8,9,2,9,7,7,8,31,5,7,1,19,5,6,5,
11,8,0,0,0,0,0,0,0,0,0,0,9,7,5,8,
15,6,7,0,11,9,0,0,0,0,0,0,0,0,240,63,
9,8,5,9,15,7,8,0,11,10,0,0,0,0,0,0,
0,0,0,64,9,9,5,10,15,8,9,0,11,11,0,0,
0,0,0,0,0,0,8,64,9,10,5,11,15,9,10,0,
30,4,1,131,32,32,32,32,101,32,61,32,78,111,110,101,
0,0,0,0,28,10,0,0,15,5,10,0,30,9,1,132,
32,32,32,32,105,102,32,108,101,110,40,98,41,32,33,61,
32,48,32,111,114,32,100,32,33,61,32,78,111,110,101,58,
0,0,0,0,12,12,0,3,108,101,110,0,13,11,12,0,
15,12,7,0,31,10,12,1,19,10,11,10,11,11,0,0,
0,0,0,0,0,0,0,0,35,10,10,11,46,10,0,0,
18,0,0,3,28,11,0,0,35,10,9,11,21,10,0,0,
18,0,1,14,30,14,1,133,32,32,32,32,32,32,32,32,
101,32,61,32,100,111,40,84,111,107,101,110,40,116,46,112,
111,115,44,39,100,105,99,116,39,44,78,111,110,101,44,91,
93,41,41,59,32,117,110,95,116,109,112,40,101,41,59,0,
12,12,0,2,100,111,0,0,13,11,12,0,12,14,0,5,
84,111,107,101,110,0,0,0,13,13,14,0,12,18,0,3,
112,111,115,0,9,14,1,18,12,15,0,4,100,105,99,116,
0,0,0,0,28,16,0,0,27,17,0,0,31,12,14,4,
19,12,13,12,31,10,12,1,19,10,11,10,15,5,10,0,
12,12,0,6,117,110,95,116,109,112,0,0,13,11,12,0,
15,12,5,0,31,10,12,1,19,10,11,10,30,5,1,134,
32,32,32,32,32,32,32,32,102,111,114,32,112,32,105,110,
32,98,58,0,11,11,0,0,0,0,0,0,0,0,0,0,
42,10,7,11,18,0,0,121,30,10,1,135,32,32,32,32,
32,32,32,32,32,32,32,32,112,46,105,116,101,109,115,91,
48,93,46,116,121,112,101,32,61,32,39,115,116,114,105,110,
103,39,0,0,12,13,0,5,105,116,101,109,115,0,0,0,
9,12,10,13,11,13,0,0,0,0,0,0,0,0,0,0,
9,12,12,13,12,13,0,6,115,116,114,105,110,103,0,0,
12,14,0,4,116,121,112,101,0,0,0,0,10,12,14,13,
30,13,1,136,32,32,32,32,32,32,32,32,32,32,32,32,
116,49,44,116,50,32,61,32,100,111,40,112,46,105,116,101,
109,115,91,48,93,41,44,100,111,40,112,46,105,116,101,109,
115,91,49,93,41,0,0,0,12,15,0,2,100,111,0,0,
13,14,15,0,12,16,0,5,105,116,101,109,115,0,0,0,
9,15,10,16,11,16,0,0,0,0,0,0,0,0,0,0,
9,15,15,16,31,13,15,1,19,13,14,13,15,12,13,0,
12,16,0,2,100,111,0,0,13,15,16,0,12,17,0,5,
105,116,101,109,115,0,0,0,9,16,10,17,11,17,0,0,
0,0,0,0,0,0,240,63,9,16,16,17,31,14,16,1,
19,14,15,14,15,13,14,0,15,14,12,0,15,12,13,0,
30,8,1,137,32,32,32,32,32,32,32,32,32,32,32,32,
99,111,100,101,40,83,69,84,44,101,44,116,49,44,116,50,
41,0,0,0,12,16,0,4,99,111,100,101,0,0,0,0,
13,15,16,0,12,20,0,3,83,69,84,0,13,16,20,0,
15,17,5,0,15,18,14,0,15,19,12,0,31,13,16,4,
19,13,15,13,30,11,1,138,32,32,32,32,32,32,32,32,
32,32,32,32,102,114,101,101,95,116,109,112,40,116,49,41,
59,32,102,114,101,101,95,116,109,112,40,116,50,41,32,35,
82,69,71,0,12,16,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,15,16,0,15,16,14,0,31,13,16,1,
19,13,15,13,12,16,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,15,16,0,15,16,12,0,31,13,16,1,
19,13,15,13,18,0,255,135,30,30,1,139,32,32,32,32,
32,32,32,32,105,102,32,100,58,32,102,114,101,101,95,116,
109,112,40,100,111,40,84,111,107,101,110,40,116,46,112,111,
115,44,39,99,97,108,108,39,44,78,111,110,101,44,91,84,
111,107,101,110,40,116,46,112,111,115,44,39,110,97,109,101,
39,44,39,109,101,114,103,101,39,41,44,84,111,107,101,110,
40,116,46,112,111,115,44,39,114,101,103,39,44,101,41,44,
100,46,105,116,101,109,115,91,48,93,93,41,41,41,32,35,
82,69,71,0,21,9,0,0,18,0,0,63,12,15,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,13,15,0,
12,17,0,2,100,111,0,0,13,16,17,0,12,19,0,5,
84,111,107,101,110,0,0,0,13,18,19,0,12,23,0,3,
112,111,115,0,9,19,1,23,12,20,0,4,99,97,108,108,
0,0,0,0,28,21,0,0,12,27,0,5,84,111,107,101,
110,0,0,0,13,26,27,0,12,30,0,3,112,111,115,0,
9,27,1,30,12,28,0,4,110,97,109,101,0,0,0,0,
12,29,0,5,109,101,114,103,101,0,0,0,31,23,27,3,
19,23,26,23,12,27,0,5,84,111,107,101,110,0,0,0,
12,7,0,2,100,111,0,0,13,6,7,0,11,8,0,0,
0,0,0,0,0,0,0,0,9,7,3,8,31,5,7,1,
19,5,6,5,15,4,5,0,12,7,0,8,112,95,102,105,
108,116,101,114,0,0,0,0,13,6,7,0,12,8,0,5,
105,116,101,109,115,0,0,0,9,7,1,8,11,9,0,0,
0,0,0,0,0,0,240,63,28,10,0,0,27,8,9,2,
9,7,7,8,31,5,7,1,19,5,6,5,11,8,0,0,
0,0,0,0,0,0,0,0,9,7,5,8,15,6,7,0,
11,9,0,0,0,0,0,0,0,0,240,63,9,8,5,9,
15,7,8,0,11,10,0,0,0,0,0,0,0,0,0,64,
9,9,5,10,15,8,9,0,11,11,0,0,0,0,0,0,
0,0,8,64,9,10,5,11,15,9,10,0,28,10,0,0,
15,5,10,0,11,12,0,0,0,0,0,0,0,0,240,63,
12,14,0,3,108,101,110,0,13,13,14,0,15,14,7,0,
31,10,14,1,19,10,13,10,11,13,0,0,0,0,0,0,
0,0,0,0,35,10,10,13,23,11,10,12,21,11,0,0,
18,0,0,2,18,0,0,3,28,13,0,0,35,10,9,13,
21,10,0,0,18,0,0,172,12,12,0,2,100,111,0,0,
13,11,12,0,12,14,0,5,84,111,107,101,110,0,0,0,
13,13,14,0,12,18,0,3,112,111,115,0,9,14,1,18,
12,15,0,4,100,105,99,116,0,0,0,0,28,16,0,0,
27,17,0,0,31,12,14,4,19,12,13,12,31,10,12,1,
19,10,11,10,15,5,10,0,12,12,0,6,117,110,95,116,
109,112,0,0,13,11,12,0,15,12,5,0,31,10,12,1,
19,10,11,10,11,11,0,0,0,0,0,0,0,0,0,0,
42,10,7,11,18,0,0,75,12,13,0,5,105,116,101,109,
115,0,0,0,9,12,10,13,11,13,0,0,0,0,0,0,
0,0,0,0,9,12,12,13,12,13,0,6,115,116,114,105,
110,103,0,0,12,14,0,4,116,121,112,101,0,0,0,0,
10,12,14,13,12,15,0,2,100,111,0,0,13,14,15,0,
12,16,0,5,105,116,101,109,115,0,0,0,9,15,10,16,
11,16,0,0,0,0,0,0,0,0,0,0,9,15,15,16,
31,13,15,1,19,13,14,13,15,12,13,0,12,16,0,2,
100,111,0,0,13,15,16,0,12,17,0,5,105,116,101,109,
115,0,0,0,9,16,10,17,11,17,0,0,0,0,0,0,
0,0,240,63,9,16,16,17,31,14,16,1,19,14,15,14,
15,13,14,0,15,14,12,0,15,12,13,0,12,16,0,4,
99,111,100,101,0,0,0,0,13,15,16,0,12,20,0,3,
83,69,84,0,13,16,20,0,15,17,5,0,15,18,14,0,
15,19,12,0,31,13,16,4,19,13,15,13,12,16,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,15,16,0,
15,16,14,0,31,13,16,1,19,13,15,13,12,16,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,15,16,0,
15,16,12,0,31,13,16,1,19,13,15,13,18,0,255,181,
21,9,0,0,18,0,0,63,12,15,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,13,15,0,12,17,0,2,
100,111,0,0,13,16,17,0,12,19,0,5,84,111,107,101,
110,0,0,0,13,18,19,0,12,23,0,3,112,111,115,0,
9,19,1,23,12,20,0,4,99,97,108,108,0,0,0,0,
28,21,0,0,12,27,0,5,84,111,107,101,110,0,0,0,
13,26,27,0,12,30,0,3,112,111,115,0,9,27,1,30,
12,28,0,3,114,101,103,0,15,29,5,0,31,24,27,3,
19,24,26,24,12,26,0,5,105,116,101,109,115,0,0,0,
9,25,9,26,11,26,0,0,0,0,0,0,0,0,0,0,
9,25,25,26,27,22,23,3,31,17,19,4,19,17,18,17,
31,15,17,1,19,15,16,15,31,11,15,1,19,11,13,11,
18,0,0,1,18,0,0,1,30,7,1,140,32,32,32,32,
109,97,110,97,103,101,95,115,101,113,40,80,65,82,65,77,
83,44,114,44,97,41,0,0,12,15,0,10,109,97,110,97,
103,101,95,115,101,113,0,0,13,13,15,0,12,18,0,6,
80,65,82,65,77,83,0,0,13,15,18,0,15,16,2,0,
15,17,6,0,31,11,15,3,19,11,13,11,30,5,1,141,
32,32,32,32,105,102,32,99,32,33,61,32,78,111,110,101,
58,0,0,0,28,13,0,0,35,11,8,13,21,11,0,0,
18,0,0,88,30,12,1,142,32,32,32,32,32,32,32,32,
116,49,44,116,50,32,61,32,95,100,111,95,115,116,114,105,
110,103,40,39,42,39,41,44,100,111,40,99,46,105,116,101,
109,115,91,48,93,41,0,0,12,16,0,10,95,100,111,95,
12,28,0,4,110,97,109,101,0,0,0,0,12,29,0,5,
109,101,114,103,101,0,0,0,31,23,27,3,19,23,26,23,
12,27,0,5,84,111,107,101,110,0,0,0,13,26,27,0,
12,30,0,3,112,111,115,0,9,27,1,30,12,28,0,3,
114,101,103,0,15,29,5,0,31,24,27,3,19,24,26,24,
12,26,0,5,105,116,101,109,115,0,0,0,9,25,9,26,
11,26,0,0,0,0,0,0,0,0,0,0,9,25,25,26,
27,22,23,3,31,17,19,4,19,17,18,17,31,15,17,1,
19,15,16,15,31,11,15,1,19,11,13,11,18,0,0,1,
18,0,0,1,12,15,0,10,109,97,110,97,103,101,95,115,
101,113,0,0,13,13,15,0,12,18,0,6,80,65,82,65,
77,83,0,0,13,15,18,0,15,16,2,0,15,17,6,0,
31,11,15,3,19,11,13,11,28,13,0,0,35,11,8,13,
21,11,0,0,18,0,0,56,12,16,0,10,95,100,111,95,
115,116,114,105,110,103,0,0,13,15,16,0,12,16,0,1,
42,0,0,0,31,13,16,1,19,13,15,13,15,11,13,0,
12,17,0,2,100,111,0,0,13,16,17,0,12,18,0,5,
5202,1109 → 2886,698
105,116,101,109,115,0,0,0,9,17,8,18,11,18,0,0,
0,0,0,0,0,0,0,0,9,17,17,18,31,15,17,1,
19,15,16,15,15,13,15,0,15,14,11,0,15,12,13,0,
30,7,1,143,32,32,32,32,32,32,32,32,99,111,100,101,
40,83,69,84,44,114,44,116,49,44,116,50,41,0,0,0,
12,15,0,4,99,111,100,101,0,0,0,0,13,13,15,0,
12,19,0,3,83,69,84,0,13,15,19,0,15,16,2,0,
15,17,14,0,15,18,12,0,31,11,15,4,19,11,13,11,
30,10,1,144,32,32,32,32,32,32,32,32,102,114,101,101,
95,116,109,112,40,116,49,41,59,32,102,114,101,101,95,116,
109,112,40,116,50,41,32,35,82,69,71,0,12,15,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,13,15,0,
15,15,14,0,31,11,15,1,19,11,13,11,12,15,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,13,15,0,
15,15,12,0,31,11,15,1,19,11,13,11,18,0,0,1,
30,5,1,145,32,32,32,32,105,102,32,101,32,33,61,32,
78,111,110,101,58,0,0,0,28,13,0,0,35,11,5,13,
21,11,0,0,18,0,0,53,30,6,1,146,32,32,32,32,
32,32,32,32,116,49,32,61,32,95,100,111,95,110,111,110,
101,40,41,0,12,15,0,8,95,100,111,95,110,111,110,101,
12,15,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,13,15,0,15,15,14,0,31,11,15,1,19,11,13,11,
12,15,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,13,15,0,15,15,12,0,31,11,15,1,19,11,13,11,
18,0,0,1,28,13,0,0,35,11,5,13,21,11,0,0,
18,0,0,30,12,15,0,8,95,100,111,95,110,111,110,101,
0,0,0,0,13,13,15,0,31,11,0,0,19,11,13,11,
15,14,11,0,30,7,1,147,32,32,32,32,32,32,32,32,
99,111,100,101,40,83,69,84,44,114,44,116,49,44,101,41,
0,0,0,0,12,15,0,4,99,111,100,101,0,0,0,0,
15,14,11,0,12,15,0,4,99,111,100,101,0,0,0,0,
13,13,15,0,12,19,0,3,83,69,84,0,13,15,19,0,
15,16,2,0,15,17,14,0,15,18,5,0,31,11,15,4,
19,11,13,11,30,7,1,148,32,32,32,32,32,32,32,32,
102,114,101,101,95,116,109,112,40,116,49,41,32,35,82,69,
71,0,0,0,12,15,0,8,102,114,101,101,95,116,109,112,
19,11,13,11,12,15,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,13,15,0,15,15,14,0,31,11,15,1,
19,11,13,11,18,0,0,1,30,6,1,149,32,32,32,32,
99,111,100,101,40,67,65,76,76,44,114,44,102,110,99,44,
114,41,0,0,12,15,0,4,99,111,100,101,0,0,0,0,
13,13,15,0,12,19,0,4,67,65,76,76,0,0,0,0,
13,15,19,0,15,16,2,0,15,17,4,0,15,18,2,0,
31,11,15,4,19,11,13,11,30,6,1,150,32,32,32,32,
102,114,101,101,95,116,109,112,40,102,110,99,41,32,35,82,
69,71,0,0,12,15,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,13,15,0,15,15,4,0,31,11,15,1,
19,11,13,11,30,4,1,151,32,32,32,32,114,101,116,117,
114,110,32,114,0,0,0,0,20,2,0,0,0,0,0,0,
12,45,0,7,100,111,95,99,97,108,108,0,14,45,44,0,
30,6,1,153,100,101,102,32,100,111,95,110,97,109,101,40,
116,44,114,61,78,111,110,101,41,58,0,0,16,45,0,187,
44,10,0,0,30,6,1,153,100,101,102,32,100,111,95,110,
97,109,101,40,116,44,114,61,78,111,110,101,41,58,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,7,100,111,95,110,
97,109,101,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,30,6,1,154,
32,32,32,32,105,102,32,116,46,118,97,108,32,105,110,32,
68,46,118,97,114,115,58,0,12,4,0,1,68,0,0,0,
19,11,13,11,18,0,0,1,12,15,0,4,99,111,100,101,
0,0,0,0,13,13,15,0,12,19,0,4,67,65,76,76,
0,0,0,0,13,15,19,0,15,16,2,0,15,17,4,0,
15,18,2,0,31,11,15,4,19,11,13,11,12,15,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,13,15,0,
15,15,4,0,31,11,15,1,19,11,13,11,20,2,0,0,
0,0,0,0,12,46,0,7,100,111,95,99,97,108,108,0,
14,46,45,0,16,46,0,70,44,10,0,0,28,2,0,0,
9,1,0,2,28,2,0,0,28,3,0,0,32,2,0,3,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,4,
118,97,114,115,0,0,0,0,9,3,3,4,12,5,0,3,
118,97,108,0,9,4,1,5,36,3,3,4,21,3,0,0,
18,0,0,12,12,5,0,8,100,111,95,108,111,99,97,108,
0,0,0,0,13,4,5,0,15,5,1,0,15,6,2,0,
31,3,5,2,19,3,4,3,20,3,0,0,18,0,0,1,
12,5,0,7,103,101,116,95,116,109,112,0,13,4,5,0,
15,5,2,0,31,3,5,1,19,3,4,3,15,2,3,0,
12,6,0,9,100,111,95,115,116,114,105,110,103,0,0,0,
13,5,6,0,15,6,1,0,31,4,6,1,19,4,5,4,
15,3,4,0,12,6,0,4,99,111,100,101,0,0,0,0,
13,5,6,0,12,9,0,4,71,71,69,84,0,0,0,0,
13,6,9,0,15,7,2,0,15,8,3,0,31,4,6,3,
19,4,5,4,12,6,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,5,6,0,15,6,3,0,31,4,6,1,
19,4,5,4,20,2,0,0,0,0,0,0,12,47,0,7,
100,111,95,110,97,109,101,0,14,47,46,0,16,47,0,52,
44,7,0,0,28,2,0,0,9,1,0,2,28,2,0,0,
28,3,0,0,32,2,0,3,12,4,0,1,68,0,0,0,
13,3,4,0,12,4,0,4,118,97,114,115,0,0,0,0,
9,3,3,4,12,5,0,3,118,97,108,0,9,4,1,5,
36,3,3,4,21,3,0,0,18,0,0,21,30,8,1,155,
32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,100,
111,95,108,111,99,97,108,40,116,44,114,41,0,0,0,0,
12,5,0,8,100,111,95,108,111,99,97,108,0,0,0,0,
13,4,5,0,15,5,1,0,15,6,2,0,31,3,5,2,
19,3,4,3,20,3,0,0,18,0,0,1,30,8,1,156,
32,32,32,32,105,102,32,116,46,118,97,108,32,110,111,116,
32,105,110,32,68,46,114,103,108,111,98,97,108,115,58,0,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,8,
114,103,108,111,98,97,108,115,0,0,0,0,9,3,3,4,
12,5,0,3,118,97,108,0,9,4,1,5,36,3,3,4,
11,4,0,0,0,0,0,0,0,0,0,0,23,3,3,4,
21,3,0,0,18,0,0,29,30,9,1,157,32,32,32,32,
32,32,32,32,68,46,114,103,108,111,98,97,108,115,46,97,
112,112,101,110,100,40,116,46,118,97,108,41,0,0,0,0,
12,5,0,1,68,0,0,0,13,4,5,0,12,5,0,8,
114,103,108,111,98,97,108,115,0,0,0,0,9,4,4,5,
12,5,0,6,97,112,112,101,110,100,0,0,9,4,4,5,
12,6,0,3,118,97,108,0,9,5,1,6,31,3,5,1,
19,3,4,3,18,0,0,1,30,5,1,158,32,32,32,32,
114,32,61,32,103,101,116,95,116,109,112,40,114,41,0,0,
12,5,0,7,103,101,116,95,116,109,112,0,13,4,5,0,
15,5,2,0,31,3,5,1,19,3,4,3,15,2,3,0,
30,6,1,159,32,32,32,32,99,32,61,32,100,111,95,115,
116,114,105,110,103,40,116,41,0,0,0,0,12,6,0,9,
100,111,95,115,116,114,105,110,103,0,0,0,13,5,6,0,
15,6,1,0,31,4,6,1,19,4,5,4,15,3,4,0,
30,5,1,160,32,32,32,32,99,111,100,101,40,71,71,69,
84,44,114,44,99,41,0,0,12,6,0,4,99,111,100,101,
0,0,0,0,13,5,6,0,12,9,0,4,71,71,69,84,
0,0,0,0,13,6,9,0,15,7,2,0,15,8,3,0,
31,4,6,3,19,4,5,4,30,4,1,161,32,32,32,32,
102,114,101,101,95,116,109,112,40,99,41,0,12,6,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,5,6,0,
15,6,3,0,31,4,6,1,19,4,5,4,30,4,1,162,
32,32,32,32,114,101,116,117,114,110,32,114,0,0,0,0,
20,2,0,0,0,0,0,0,12,46,0,7,100,111,95,110,
97,109,101,0,14,46,45,0,30,6,1,164,100,101,102,32,
100,111,95,108,111,99,97,108,40,116,44,114,61,78,111,110,
101,41,58,0,16,46,0,178,44,9,0,0,30,6,1,164,
100,101,102,32,100,111,95,108,111,99,97,108,40,116,44,114,
61,78,111,110,101,41,58,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,8,100,111,95,108,111,99,97,108,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,2,0,0,
28,3,0,0,32,2,0,3,30,7,1,165,32,32,32,32,
105,102,32,116,46,118,97,108,32,105,110,32,68,46,114,103,
108,111,98,97,108,115,58,0,12,4,0,1,68,0,0,0,
13,3,4,0,12,4,0,8,114,103,108,111,98,97,108,115,
0,0,0,0,9,3,3,4,12,5,0,3,118,97,108,0,
9,4,1,5,36,3,3,4,21,3,0,0,18,0,0,62,
30,6,1,166,32,32,32,32,32,32,32,32,68,46,101,114,
114,111,114,32,61,32,84,114,117,101,0,0,12,4,0,1,
68,0,0,0,13,3,4,0,11,4,0,0,0,0,0,0,
0,0,240,63,12,5,0,5,101,114,114,111,114,0,0,0,
10,3,5,4,30,15,1,167,32,32,32,32,32,32,32,32,
116,111,107,101,110,105,122,101,46,117,95,101,114,114,111,114,
40,39,85,110,98,111,117,110,100,76,111,99,97,108,69,114,
114,111,114,39,44,68,46,99,111,100,101,44,116,46,112,111,
115,41,0,0,12,5,0,8,116,111,107,101,110,105,122,101,
0,0,0,0,13,4,5,0,12,5,0,7,117,95,101,114,
114,111,114,0,9,4,4,5,12,5,0,17,85,110,98,111,
117,110,100,76,111,99,97,108,69,114,114,111,114,0,0,0,
12,8,0,1,68,0,0,0,13,6,8,0,12,8,0,4,
99,111,100,101,0,0,0,0,9,6,6,8,12,8,0,3,
112,111,115,0,9,7,1,8,31,3,5,3,19,3,4,3,
18,0,0,1,30,7,1,168,32,32,32,32,105,102,32,116,
46,118,97,108,32,110,111,116,32,105,110,32,68,46,118,97,
114,115,58,0,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,4,118,97,114,115,0,0,0,0,9,3,3,4,
12,5,0,3,118,97,108,0,9,4,1,5,36,3,3,4,
11,4,0,0,0,0,0,0,0,0,0,0,23,3,3,4,
21,3,0,0,18,0,0,27,30,8,1,169,32,32,32,32,
32,32,32,32,68,46,118,97,114,115,46,97,112,112,101,110,
100,40,116,46,118,97,108,41,0,0,0,0,12,5,0,1,
36,3,3,4,11,4,0,0,0,0,0,0,0,0,0,0,
23,3,3,4,21,3,0,0,18,0,0,18,12,5,0,1,
68,0,0,0,13,4,5,0,12,5,0,4,118,97,114,115,
0,0,0,0,9,4,4,5,12,5,0,6,97,112,112,101,
110,100,0,0,9,4,4,5,12,6,0,3,118,97,108,0,
9,5,1,6,31,3,5,1,19,3,4,3,18,0,0,1,
30,7,1,170,32,32,32,32,114,101,116,117,114,110,32,103,
101,116,95,114,101,103,40,116,46,118,97,108,41,0,0,0,
12,5,0,7,103,101,116,95,114,101,103,0,13,4,5,0,
12,6,0,3,118,97,108,0,9,5,1,6,31,3,5,1,
19,3,4,3,20,3,0,0,0,0,0,0,12,47,0,8,
100,111,95,108,111,99,97,108,0,0,0,0,14,47,46,0,
30,7,1,172,100,101,102,32,100,111,95,100,101,102,40,116,
111,107,44,107,108,115,61,78,111,110,101,41,58,0,0,0,
16,47,3,65,44,25,0,0,30,7,1,172,100,101,102,32,
100,111,95,100,101,102,40,116,111,107,44,107,108,115,61,78,
111,110,101,41,58,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,6,100,111,95,100,101,102,0,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,2,0,0,28,3,0,0,
32,2,0,3,30,6,1,173,32,32,32,32,105,116,101,109,
115,32,61,32,116,111,107,46,105,116,101,109,115,0,0,0,
12,5,0,5,105,116,101,109,115,0,0,0,9,4,1,5,
15,3,4,0,30,5,1,175,32,32,32,32,116,32,61,32,
103,101,116,95,116,97,103,40,41,0,0,0,12,7,0,7,
103,101,116,95,116,97,103,0,13,6,7,0,31,5,0,0,
19,5,6,5,15,4,5,0,30,6,1,176,32,32,32,32,
114,102,32,61,32,102,110,99,40,116,44,39,101,110,100,39,
41,0,0,0,12,8,0,3,102,110,99,0,13,7,8,0,
15,8,4,0,12,9,0,3,101,110,100,0,31,6,8,2,
19,6,7,6,15,5,6,0,30,4,1,178,32,32,32,32,
68,46,98,101,103,105,110,40,41,0,0,0,12,8,0,1,
68,0,0,0,13,7,8,0,12,8,0,5,98,101,103,105,
110,0,0,0,9,7,7,8,31,6,0,0,19,6,7,6,
30,5,1,179,32,32,32,32,115,101,116,112,111,115,40,116,
111,107,46,112,111,115,41,0,12,8,0,6,115,101,116,112,
111,115,0,0,13,7,8,0,12,9,0,3,112,111,115,0,
9,8,1,9,31,6,8,1,19,6,7,6,30,13,1,180,
32,32,32,32,114,32,61,32,100,111,95,108,111,99,97,108,
40,84,111,107,101,110,40,116,111,107,46,112,111,115,44,39,
110,97,109,101,39,44,39,95,95,112,97,114,97,109,115,39,
41,41,0,0,12,9,0,8,100,111,95,108,111,99,97,108,
0,0,0,0,13,8,9,0,12,11,0,5,84,111,107,101,
110,0,0,0,13,10,11,0,12,14,0,3,112,111,115,0,
9,11,1,14,12,12,0,4,110,97,109,101,0,0,0,0,
12,13,0,8,95,95,112,97,114,97,109,115,0,0,0,0,
31,9,11,3,19,9,10,9,31,7,9,1,19,7,8,7,
15,6,7,0,30,7,1,181,32,32,32,32,100,111,95,105,
110,102,111,40,105,116,101,109,115,91,48,93,46,118,97,108,
41,0,0,0,12,9,0,7,100,111,95,105,110,102,111,0,
13,8,9,0,11,10,0,0,0,0,0,0,0,0,0,0,
9,9,3,10,12,10,0,3,118,97,108,0,9,9,9,10,
31,7,9,1,19,7,8,7,30,10,1,182,32,32,32,32,
97,44,98,44,99,44,100,32,61,32,112,95,102,105,108,116,
101,114,40,105,116,101,109,115,91,49,93,46,105,116,101,109,
115,41,0,0,12,9,0,8,112,95,102,105,108,116,101,114,
0,0,0,0,13,8,9,0,11,10,0,0,0,0,0,0,
0,0,240,63,9,9,3,10,12,10,0,5,105,116,101,109,
115,0,0,0,9,9,9,10,31,7,9,1,19,7,8,7,
11,10,0,0,0,0,0,0,0,0,0,0,9,9,7,10,
15,8,9,0,11,11,0,0,0,0,0,0,0,0,240,63,
9,10,7,11,15,9,10,0,11,12,0,0,0,0,0,0,
0,0,0,64,9,11,7,12,15,10,11,0,11,13,0,0,
0,0,0,0,0,0,8,64,9,12,7,13,15,11,12,0,
30,4,1,183,32,32,32,32,102,111,114,32,112,32,105,110,
32,97,58,0,11,12,0,0,0,0,0,0,0,0,0,0,
42,7,8,12,18,0,0,70,30,6,1,184,32,32,32,32,
32,32,32,32,118,32,61,32,100,111,95,108,111,99,97,108,
40,112,41,0,12,16,0,8,100,111,95,108,111,99,97,108,
0,0,0,0,13,15,16,0,15,16,7,0,31,14,16,1,
19,14,15,14,15,13,14,0,30,7,1,185,32,32,32,32,
32,32,32,32,116,109,112,32,61,32,95,100,111,95,110,111,
110,101,40,41,0,0,0,0,12,17,0,8,95,100,111,95,
110,111,110,101,0,0,0,0,13,16,17,0,31,15,0,0,
19,15,16,15,15,14,15,0,30,7,1,186,32,32,32,32,
32,32,32,32,99,111,100,101,40,71,69,84,44,118,44,114,
44,116,109,112,41,0,0,0,12,17,0,4,99,111,100,101,
0,0,0,0,13,16,17,0,12,21,0,3,71,69,84,0,
13,17,21,0,15,18,13,0,15,19,6,0,15,20,14,0,
31,15,17,4,19,15,16,15,30,7,1,187,32,32,32,32,
32,32,32,32,102,114,101,101,95,116,109,112,40,116,109,112,
41,32,35,82,69,71,0,0,12,17,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,16,17,0,15,17,14,0,
31,15,17,1,19,15,16,15,18,0,255,186,30,4,1,188,
32,32,32,32,102,111,114,32,112,32,105,110,32,98,58,0,
11,12,0,0,0,0,0,0,0,0,0,0,42,7,9,12,
18,0,0,103,30,9,1,189,32,32,32,32,32,32,32,32,
118,32,61,32,100,111,95,108,111,99,97,108,40,112,46,105,
116,101,109,115,91,48,93,41,0,0,0,0,12,17,0,8,
100,111,95,108,111,99,97,108,0,0,0,0,13,16,17,0,
12,18,0,5,105,116,101,109,115,0,0,0,9,17,7,18,
11,18,0,0,0,0,0,0,0,0,0,0,9,17,17,18,
31,15,17,1,19,15,16,15,15,13,15,0,30,7,1,190,
32,32,32,32,32,32,32,32,100,111,40,112,46,105,116,101,
109,115,91,49,93,44,118,41,0,0,0,0,12,17,0,2,
100,111,0,0,13,16,17,0,12,19,0,5,105,116,101,109,
115,0,0,0,9,17,7,19,11,19,0,0,0,0,0,0,
0,0,240,63,9,17,17,19,15,18,13,0,31,15,17,2,
19,15,16,15,30,7,1,191,32,32,32,32,32,32,32,32,
116,109,112,32,61,32,95,100,111,95,110,111,110,101,40,41,
0,0,0,0,12,17,0,8,95,100,111,95,110,111,110,101,
0,0,0,0,13,16,17,0,31,15,0,0,19,15,16,15,
15,14,15,0,30,7,1,192,32,32,32,32,32,32,32,32,
99,111,100,101,40,73,71,69,84,44,118,44,114,44,116,109,
112,41,0,0,12,17,0,4,99,111,100,101,0,0,0,0,
13,16,17,0,12,21,0,4,73,71,69,84,0,0,0,0,
13,17,21,0,15,18,13,0,15,19,6,0,15,20,14,0,
31,15,17,4,19,15,16,15,30,7,1,193,32,32,32,32,
32,32,32,32,102,114,101,101,95,116,109,112,40,116,109,112,
41,32,35,82,69,71,0,0,12,17,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,16,17,0,15,17,14,0,
31,15,17,1,19,15,16,15,18,0,255,153,30,5,1,194,
32,32,32,32,105,102,32,99,32,33,61,32,78,111,110,101,
58,0,0,0,28,15,0,0,35,12,10,15,21,12,0,0,
18,0,0,83,30,9,1,195,32,32,32,32,32,32,32,32,
118,32,61,32,100,111,95,108,111,99,97,108,40,99,46,105,
116,101,109,115,91,48,93,41,0,0,0,0,12,16,0,8,
19,3,4,3,20,3,0,0,0,0,0,0,12,48,0,8,
100,111,95,108,111,99,97,108,0,0,0,0,14,48,47,0,
16,48,1,229,44,25,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,12,5,0,5,
105,116,101,109,115,0,0,0,9,4,1,5,15,3,4,0,
12,7,0,7,103,101,116,95,116,97,103,0,13,6,7,0,
31,5,0,0,19,5,6,5,15,4,5,0,12,8,0,3,
102,110,99,0,13,7,8,0,15,8,4,0,12,9,0,3,
101,110,100,0,31,6,8,2,19,6,7,6,15,5,6,0,
12,8,0,1,68,0,0,0,13,7,8,0,12,8,0,5,
98,101,103,105,110,0,0,0,9,7,7,8,31,6,0,0,
19,6,7,6,12,8,0,6,115,101,116,112,111,115,0,0,
13,7,8,0,12,9,0,3,112,111,115,0,9,8,1,9,
31,6,8,1,19,6,7,6,12,9,0,8,100,111,95,108,
111,99,97,108,0,0,0,0,13,8,9,0,12,11,0,5,
84,111,107,101,110,0,0,0,13,10,11,0,12,14,0,3,
112,111,115,0,9,11,1,14,12,12,0,4,110,97,109,101,
0,0,0,0,12,13,0,8,95,95,112,97,114,97,109,115,
0,0,0,0,31,9,11,3,19,9,10,9,31,7,9,1,
19,7,8,7,15,6,7,0,12,9,0,7,100,111,95,105,
110,102,111,0,13,8,9,0,11,10,0,0,0,0,0,0,
0,0,0,0,9,9,3,10,12,10,0,3,118,97,108,0,
9,9,9,10,31,7,9,1,19,7,8,7,12,9,0,8,
112,95,102,105,108,116,101,114,0,0,0,0,13,8,9,0,
11,10,0,0,0,0,0,0,0,0,240,63,9,9,3,10,
12,10,0,5,105,116,101,109,115,0,0,0,9,9,9,10,
31,7,9,1,19,7,8,7,11,10,0,0,0,0,0,0,
0,0,0,0,9,9,7,10,15,8,9,0,11,11,0,0,
0,0,0,0,0,0,240,63,9,10,7,11,15,9,10,0,
11,12,0,0,0,0,0,0,0,0,0,64,9,11,7,12,
15,10,11,0,11,13,0,0,0,0,0,0,0,0,8,64,
9,12,7,13,15,11,12,0,11,12,0,0,0,0,0,0,
0,0,0,0,42,7,8,12,18,0,0,39,12,16,0,8,
100,111,95,108,111,99,97,108,0,0,0,0,13,15,16,0,
12,17,0,5,105,116,101,109,115,0,0,0,9,16,10,17,
11,17,0,0,0,0,0,0,0,0,0,0,9,16,16,17,
31,12,16,1,19,12,15,12,15,13,12,0,30,8,1,196,
32,32,32,32,32,32,32,32,116,109,112,32,61,32,95,100,
111,95,115,116,114,105,110,103,40,39,42,39,41,0,0,0,
12,16,0,10,95,100,111,95,115,116,114,105,110,103,0,0,
13,15,16,0,12,16,0,1,42,0,0,0,31,12,16,1,
19,12,15,12,15,14,12,0,30,7,1,197,32,32,32,32,
32,32,32,32,99,111,100,101,40,71,69,84,44,118,44,114,
44,116,109,112,41,0,0,0,12,16,0,4,99,111,100,101,
0,0,0,0,13,15,16,0,12,20,0,3,71,69,84,0,
13,16,20,0,15,17,13,0,15,18,6,0,15,19,14,0,
31,12,16,4,19,12,15,12,30,7,1,198,32,32,32,32,
32,32,32,32,102,114,101,101,95,116,109,112,40,116,109,112,
41,32,35,82,69,71,0,0,12,16,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,15,16,0,15,16,14,0,
31,12,16,1,19,12,15,12,18,0,0,1,30,5,1,199,
32,32,32,32,105,102,32,100,32,33,61,32,78,111,110,101,
58,0,0,0,28,15,0,0,35,12,11,15,21,12,0,0,
18,0,0,106,30,9,1,200,32,32,32,32,32,32,32,32,
101,32,61,32,100,111,95,108,111,99,97,108,40,100,46,105,
116,101,109,115,91,48,93,41,0,0,0,0,12,17,0,8,
100,111,95,108,111,99,97,108,0,0,0,0,13,16,17,0,
12,18,0,5,105,116,101,109,115,0,0,0,9,17,11,18,
11,18,0,0,0,0,0,0,0,0,0,0,9,17,17,18,
31,15,17,1,19,15,16,15,15,12,15,0,30,7,1,201,
32,32,32,32,32,32,32,32,99,111,100,101,40,68,73,67,
84,44,101,44,48,44,48,41,0,0,0,0,12,17,0,4,
99,111,100,101,0,0,0,0,13,16,17,0,12,21,0,4,
68,73,67,84,0,0,0,0,13,17,21,0,15,18,12,0,
11,19,0,0,0,0,0,0,0,0,0,0,11,20,0,0,
0,0,0,0,0,0,0,0,31,15,17,4,19,15,16,15,
30,7,1,202,32,32,32,32,32,32,32,32,116,109,112,32,
61,32,95,100,111,95,110,111,110,101,40,41,0,0,0,0,
15,16,7,0,31,14,16,1,19,14,15,14,15,13,14,0,
12,17,0,8,95,100,111,95,110,111,110,101,0,0,0,0,
13,16,17,0,31,15,0,0,19,15,16,15,15,14,15,0,
30,7,1,203,32,32,32,32,32,32,32,32,99,111,100,101,
40,73,71,69,84,44,101,44,114,44,116,109,112,41,0,0,
12,17,0,4,99,111,100,101,0,0,0,0,13,16,17,0,
12,21,0,3,71,69,84,0,13,17,21,0,15,18,13,0,
15,19,6,0,15,20,14,0,31,15,17,4,19,15,16,15,
12,17,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,16,17,0,15,17,14,0,31,15,17,1,19,15,16,15,
18,0,255,217,11,12,0,0,0,0,0,0,0,0,0,0,
42,7,9,12,18,0,0,61,12,17,0,8,100,111,95,108,
111,99,97,108,0,0,0,0,13,16,17,0,12,18,0,5,
105,116,101,109,115,0,0,0,9,17,7,18,11,18,0,0,
0,0,0,0,0,0,0,0,9,17,17,18,31,15,17,1,
19,15,16,15,15,13,15,0,12,17,0,2,100,111,0,0,
13,16,17,0,12,19,0,5,105,116,101,109,115,0,0,0,
9,17,7,19,11,19,0,0,0,0,0,0,0,0,240,63,
9,17,17,19,15,18,13,0,31,15,17,2,19,15,16,15,
12,17,0,8,95,100,111,95,110,111,110,101,0,0,0,0,
13,16,17,0,31,15,0,0,19,15,16,15,15,14,15,0,
12,17,0,4,99,111,100,101,0,0,0,0,13,16,17,0,
12,21,0,4,73,71,69,84,0,0,0,0,13,17,21,0,
15,18,12,0,15,19,6,0,15,20,14,0,31,15,17,4,
19,15,16,15,30,7,1,204,32,32,32,32,32,32,32,32,
102,114,101,101,95,116,109,112,40,116,109,112,41,32,35,82,
69,71,0,0,12,17,0,8,102,114,101,101,95,116,109,112,
15,18,13,0,15,19,6,0,15,20,14,0,31,15,17,4,
19,15,16,15,12,17,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,16,17,0,15,17,14,0,31,15,17,1,
19,15,16,15,18,0,0,1,30,8,1,205,32,32,32,32,
102,114,101,101,95,116,109,112,40,100,111,40,105,116,101,109,
115,91,50,93,41,41,32,35,82,69,71,0,12,17,0,8,
19,15,16,15,18,0,255,195,28,15,0,0,35,12,10,15,
21,12,0,0,18,0,0,48,12,16,0,8,100,111,95,108,
111,99,97,108,0,0,0,0,13,15,16,0,12,17,0,5,
105,116,101,109,115,0,0,0,9,16,10,17,11,17,0,0,
0,0,0,0,0,0,0,0,9,16,16,17,31,12,16,1,
19,12,15,12,15,13,12,0,12,16,0,10,95,100,111,95,
115,116,114,105,110,103,0,0,13,15,16,0,12,16,0,1,
42,0,0,0,31,12,16,1,19,12,15,12,15,14,12,0,
12,16,0,4,99,111,100,101,0,0,0,0,13,15,16,0,
12,20,0,3,71,69,84,0,13,16,20,0,15,17,13,0,
15,18,6,0,15,19,14,0,31,12,16,4,19,12,15,12,
12,16,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,15,16,0,15,16,14,0,31,12,16,1,19,12,15,12,
18,0,0,1,28,15,0,0,35,12,11,15,21,12,0,0,
18,0,0,64,12,17,0,8,100,111,95,108,111,99,97,108,
0,0,0,0,13,16,17,0,12,18,0,5,105,116,101,109,
115,0,0,0,9,17,11,18,11,18,0,0,0,0,0,0,
0,0,0,0,9,17,17,18,31,15,17,1,19,15,16,15,
15,12,15,0,12,17,0,4,99,111,100,101,0,0,0,0,
13,16,17,0,12,21,0,4,68,73,67,84,0,0,0,0,
13,17,21,0,15,18,12,0,11,19,0,0,0,0,0,0,
0,0,0,0,11,20,0,0,0,0,0,0,0,0,0,0,
31,15,17,4,19,15,16,15,12,17,0,8,95,100,111,95,
110,111,110,101,0,0,0,0,13,16,17,0,31,15,0,0,
19,15,16,15,15,14,15,0,12,17,0,4,99,111,100,101,
0,0,0,0,13,16,17,0,12,21,0,4,73,71,69,84,
0,0,0,0,13,17,21,0,15,18,12,0,15,19,6,0,
15,20,14,0,31,15,17,4,19,15,16,15,12,17,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,16,17,0,
12,19,0,2,100,111,0,0,13,18,19,0,11,20,0,0,
0,0,0,0,0,0,0,64,9,19,3,20,31,17,19,1,
19,17,18,17,31,15,17,1,19,15,16,15,30,3,1,206,
32,32,32,32,68,46,101,110,100,40,41,0,12,17,0,1,
68,0,0,0,13,16,17,0,12,17,0,3,101,110,100,0,
9,16,16,17,31,15,0,0,19,15,16,15,30,5,1,208,
32,32,32,32,116,97,103,40,116,44,39,101,110,100,39,41,
0,0,0,0,12,17,0,3,116,97,103,0,13,16,17,0,
15,17,4,0,12,18,0,3,101,110,100,0,31,15,17,2,
19,15,16,15,30,5,1,210,32,32,32,32,105,102,32,107,
108,115,32,61,61,32,78,111,110,101,58,0,28,16,0,0,
23,15,2,16,21,15,0,0,18,0,0,98,30,17,1,211,
32,32,32,32,32,32,32,32,105,102,32,68,46,95,103,108,
111,98,97,108,115,58,32,100,111,95,103,108,111,98,97,108,
115,40,84,111,107,101,110,40,116,111,107,46,112,111,115,44,
48,44,48,44,91,105,116,101,109,115,91,48,93,93,41,41,
0,0,0,0,12,16,0,1,68,0,0,0,13,15,16,0,
12,16,0,8,95,103,108,111,98,97,108,115,0,0,0,0,
9,15,15,16,21,15,0,0,18,0,0,29,12,17,0,10,
100,111,95,103,108,111,98,97,108,115,0,0,13,16,17,0,
12,19,0,5,84,111,107,101,110,0,0,0,13,18,19,0,
12,23,0,3,112,111,115,0,9,19,1,23,11,20,0,0,
0,0,0,0,0,0,0,0,11,21,0,0,0,0,0,0,
0,0,0,0,11,24,0,0,0,0,0,0,0,0,0,0,
9,23,3,24,27,22,23,1,31,17,19,4,19,17,18,17,
31,15,17,1,19,15,16,15,18,0,0,1,30,15,1,212,
32,32,32,32,32,32,32,32,114,32,61,32,100,111,95,115,
101,116,95,99,116,120,40,105,116,101,109,115,91,48,93,44,
84,111,107,101,110,40,116,111,107,46,112,111,115,44,39,114,
101,103,39,44,114,102,41,41,0,0,0,0,12,17,0,10,
100,111,95,115,101,116,95,99,116,120,0,0,13,16,17,0,
11,19,0,0,0,0,0,0,0,0,0,0,9,17,3,19,
12,20,0,5,84,111,107,101,110,0,0,0,13,19,20,0,
12,23,0,3,112,111,115,0,9,20,1,23,12,21,0,3,
114,101,103,0,15,22,5,0,31,18,20,3,19,18,19,18,
31,15,17,2,19,15,16,15,15,6,15,0,18,0,0,63,
30,3,1,213,32,32,32,32,101,108,115,101,58,0,0,0,
30,9,1,214,32,32,32,32,32,32,32,32,114,110,32,61,
32,100,111,95,115,116,114,105,110,103,40,105,116,101,109,115,
91,48,93,41,0,0,0,0,12,18,0,9,100,111,95,115,
116,114,105,110,103,0,0,0,13,17,18,0,11,19,0,0,
0,0,0,0,0,0,0,0,9,18,3,19,31,16,18,1,
19,16,17,16,15,15,16,0,30,7,1,215,32,32,32,32,
32,32,32,32,99,111,100,101,40,83,69,84,44,107,108,115,
44,114,110,44,114,102,41,0,12,18,0,4,99,111,100,101,
0,0,0,0,13,17,18,0,12,22,0,3,83,69,84,0,
13,18,22,0,15,19,2,0,15,20,15,0,15,21,5,0,
31,16,18,4,19,16,17,16,30,6,1,216,32,32,32,32,
32,32,32,32,102,114,101,101,95,116,109,112,40,114,110,41,
0,0,0,0,12,18,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,17,18,0,15,18,15,0,31,16,18,1,
19,16,17,16,18,0,0,1,30,5,1,218,32,32,32,32,
102,114,101,101,95,116,109,112,40,114,102,41,0,0,0,0,
15,17,14,0,31,15,17,1,19,15,16,15,18,0,0,1,
12,17,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,16,17,0,12,19,0,2,100,111,0,0,13,18,19,0,
11,20,0,0,0,0,0,0,0,0,0,64,9,19,3,20,
31,17,19,1,19,17,18,17,31,15,17,1,19,15,16,15,
12,17,0,1,68,0,0,0,13,16,17,0,12,17,0,3,
101,110,100,0,9,16,16,17,31,15,0,0,19,15,16,15,
12,17,0,3,116,97,103,0,13,16,17,0,15,17,4,0,
12,18,0,3,101,110,100,0,31,15,17,2,19,15,16,15,
28,16,0,0,23,15,2,16,21,15,0,0,18,0,0,64,
12,16,0,1,68,0,0,0,13,15,16,0,12,16,0,8,
95,103,108,111,98,97,108,115,0,0,0,0,9,15,15,16,
21,15,0,0,18,0,0,29,12,17,0,10,100,111,95,103,
108,111,98,97,108,115,0,0,13,16,17,0,12,19,0,5,
84,111,107,101,110,0,0,0,13,18,19,0,12,23,0,3,
112,111,115,0,9,19,1,23,11,20,0,0,0,0,0,0,
0,0,0,0,11,21,0,0,0,0,0,0,0,0,0,0,
11,24,0,0,0,0,0,0,0,0,0,0,9,23,3,24,
27,22,23,1,31,17,19,4,19,17,18,17,31,15,17,1,
19,15,16,15,18,0,0,1,12,17,0,10,100,111,95,115,
101,116,95,99,116,120,0,0,13,16,17,0,11,19,0,0,
0,0,0,0,0,0,0,0,9,17,3,19,12,20,0,5,
84,111,107,101,110,0,0,0,13,19,20,0,12,23,0,3,
112,111,115,0,9,20,1,23,12,21,0,3,114,101,103,0,
15,22,5,0,31,18,20,3,19,18,19,18,31,15,17,2,
19,15,16,15,15,6,15,0,18,0,0,34,12,18,0,9,
100,111,95,115,116,114,105,110,103,0,0,0,13,17,18,0,
11,19,0,0,0,0,0,0,0,0,0,0,9,18,3,19,
31,16,18,1,19,16,17,16,15,15,16,0,12,18,0,4,
99,111,100,101,0,0,0,0,13,17,18,0,12,22,0,3,
83,69,84,0,13,18,22,0,15,19,2,0,15,20,15,0,
15,21,5,0,31,16,18,4,19,16,17,16,12,18,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,17,18,0,
15,18,15,0,31,16,18,1,19,16,17,16,18,0,0,1,
12,18,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,17,18,0,15,18,5,0,31,16,18,1,19,16,17,16,
0,0,0,0,12,48,0,6,100,111,95,100,101,102,0,0,
14,48,47,0,30,5,1,220,100,101,102,32,100,111,95,99,
108,97,115,115,40,116,41,58,0,0,0,0,16,48,1,234,
44,26,0,0,30,5,1,220,100,101,102,32,100,111,95,99,
108,97,115,115,40,116,41,58,0,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,8,100,111,95,99,108,97,115,115,
0,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,3,1,221,32,32,32,32,116,111,107,32,61,32,116,0,
15,2,1,0,30,5,1,222,32,32,32,32,105,116,101,109,
115,32,61,32,116,46,105,116,101,109,115,0,12,5,0,5,
105,116,101,109,115,0,0,0,9,4,1,5,15,3,4,0,
30,5,1,223,32,32,32,32,112,97,114,101,110,116,32,61,
32,78,111,110,101,0,0,0,28,5,0,0,15,4,5,0,
30,8,1,224,32,32,32,32,105,102,32,105,116,101,109,115,
91,48,93,46,116,121,112,101,32,61,61,32,39,110,97,109,
101,39,58,0,11,6,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,12,49,0,6,100,111,95,100,101,102,0,0,
14,49,48,0,16,49,3,36,44,44,0,0,28,2,0,0,
9,1,0,2,15,2,1,0,12,5,0,5,105,116,101,109,
115,0,0,0,9,4,1,5,15,3,4,0,28,5,0,0,
15,4,5,0,11,6,0,0,0,0,0,0,0,0,0,0,
9,5,3,6,12,6,0,4,116,121,112,101,0,0,0,0,
9,5,5,6,12,6,0,4,110,97,109,101,0,0,0,0,
23,5,5,6,21,5,0,0,18,0,0,47,30,7,1,225,
32,32,32,32,32,32,32,32,110,97,109,101,32,61,32,105,
116,101,109,115,91,48,93,46,118,97,108,0,11,7,0,0,
23,5,5,6,21,5,0,0,18,0,0,10,11,7,0,0,
0,0,0,0,0,0,0,0,9,6,3,7,12,7,0,3,
118,97,108,0,9,6,6,7,15,5,6,0,30,12,1,226,
32,32,32,32,32,32,32,32,112,97,114,101,110,116,32,61,
32,84,111,107,101,110,40,116,111,107,46,112,111,115,44,39,
110,97,109,101,39,44,39,111,98,106,101,99,116,39,41,0,
12,8,0,5,84,111,107,101,110,0,0,0,13,7,8,0,
12,11,0,3,112,111,115,0,9,8,2,11,12,9,0,4,
110,97,109,101,0,0,0,0,12,10,0,6,111,98,106,101,
99,116,0,0,31,6,8,3,19,6,7,6,15,4,6,0,
18,0,0,56,30,3,1,227,32,32,32,32,101,108,115,101,
58,0,0,0,30,10,1,228,32,32,32,32,32,32,32,32,
110,97,109,101,32,61,32,105,116,101,109,115,91,48,93,46,
105,116,101,109,115,91,48,93,46,118,97,108,0,0,0,0,
118,97,108,0,9,6,6,7,15,5,6,0,18,0,0,34,
11,7,0,0,0,0,0,0,0,0,0,0,9,6,3,7,
12,7,0,5,105,116,101,109,115,0,0,0,9,6,6,7,
11,7,0,0,0,0,0,0,0,0,0,0,9,6,6,7,
12,7,0,3,118,97,108,0,9,6,6,7,15,5,6,0,
30,9,1,229,32,32,32,32,32,32,32,32,112,97,114,101,
110,116,32,61,32,105,116,101,109,115,91,48,93,46,105,116,
101,109,115,91,49,93,0,0,11,7,0,0,0,0,0,0,
0,0,0,0,9,6,3,7,12,7,0,5,105,116,101,109,
115,0,0,0,9,6,6,7,11,7,0,0,0,0,0,0,
0,0,240,63,9,6,6,7,15,4,6,0,18,0,0,1,
30,10,1,231,32,32,32,32,107,108,115,32,61,32,100,111,
40,84,111,107,101,110,40,116,46,112,111,115,44,39,100,105,
99,116,39,44,48,44,91,93,41,41,0,0,12,9,0,2,
100,111,0,0,13,8,9,0,12,11,0,5,84,111,107,101,
110,0,0,0,13,10,11,0,12,15,0,3,112,111,115,0,
9,11,1,15,12,12,0,4,100,105,99,116,0,0,0,0,
11,13,0,0,0,0,0,0,0,0,0,0,27,14,0,0,
31,9,11,4,19,9,10,9,31,7,9,1,19,7,8,7,
15,6,7,0,30,4,1,232,32,32,32,32,117,110,95,116,
109,112,40,107,108,115,41,0,12,9,0,6,117,110,95,116,
109,112,0,0,13,8,9,0,15,9,6,0,31,7,9,1,
19,7,8,7,30,7,1,233,32,32,32,32,116,115,32,61,
32,95,100,111,95,115,116,114,105,110,103,40,110,97,109,101,
41,0,0,0,12,10,0,10,95,100,111,95,115,116,114,105,
110,103,0,0,13,9,10,0,15,10,5,0,31,8,10,1,
19,8,9,8,15,7,8,0,30,6,1,234,32,32,32,32,
99,111,100,101,40,71,83,69,84,44,116,115,44,107,108,115,
41,0,0,0,12,10,0,4,99,111,100,101,0,0,0,0,
13,9,10,0,12,13,0,4,71,83,69,84,0,0,0,0,
13,10,13,0,15,11,7,0,15,12,6,0,31,8,10,3,
19,8,9,8,30,6,1,235,32,32,32,32,102,114,101,101,
95,116,109,112,40,116,115,41,32,35,82,69,71,0,0,0,
11,7,0,0,0,0,0,0,0,0,0,0,9,6,3,7,
12,7,0,5,105,116,101,109,115,0,0,0,9,6,6,7,
11,7,0,0,0,0,0,0,0,0,240,63,9,6,6,7,
12,7,0,3,118,97,108,0,9,6,6,7,15,4,6,0,
18,0,0,1,12,9,0,2,100,111,0,0,13,8,9,0,
12,11,0,5,84,111,107,101,110,0,0,0,13,10,11,0,
12,15,0,3,112,111,115,0,9,11,1,15,12,12,0,4,
100,105,99,116,0,0,0,0,11,13,0,0,0,0,0,0,
0,0,0,0,27,14,0,0,31,9,11,4,19,9,10,9,
31,7,9,1,19,7,8,7,15,6,7,0,12,10,0,10,
95,100,111,95,115,116,114,105,110,103,0,0,13,9,10,0,
15,10,5,0,31,8,10,1,19,8,9,8,15,7,8,0,
12,10,0,4,99,111,100,101,0,0,0,0,13,9,10,0,
12,13,0,4,71,83,69,84,0,0,0,0,13,10,13,0,
15,11,7,0,15,12,6,0,31,8,10,3,19,8,9,8,
12,10,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,9,10,0,15,10,7,0,31,8,10,1,19,8,9,8,
30,11,1,237,32,32,32,32,102,114,101,101,95,116,109,112,
40,100,111,40,84,111,107,101,110,40,116,111,107,46,112,111,
115,44,39,99,97,108,108,39,44,78,111,110,101,44,91,0,
12,10,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,9,10,0,12,12,0,2,100,111,0,0,13,11,12,0,
12,14,0,5,84,111,107,101,110,0,0,0,13,13,14,0,
12,18,0,3,112,111,115,0,9,14,2,18,12,15,0,4,
99,97,108,108,0,0,0,0,28,16,0,0,30,11,1,238,
32,32,32,32,32,32,32,32,84,111,107,101,110,40,116,111,
107,46,112,111,115,44,39,110,97,109,101,39,44,39,115,101,
116,109,101,116,97,39,41,44,0,0,0,0,12,22,0,5,
84,111,107,101,110,0,0,0,13,21,22,0,12,25,0,3,
112,111,115,0,9,22,2,25,12,23,0,4,110,97,109,101,
0,0,0,0,12,24,0,7,115,101,116,109,101,116,97,0,
31,18,22,3,19,18,21,18,30,9,1,239,32,32,32,32,
32,32,32,32,84,111,107,101,110,40,116,111,107,46,112,111,
115,44,39,114,101,103,39,44,107,108,115,41,44,0,0,0,
12,22,0,5,84,111,107,101,110,0,0,0,13,21,22,0,
12,25,0,3,112,111,115,0,9,22,2,25,12,23,0,3,
114,101,103,0,15,24,6,0,31,19,22,3,19,19,21,19,
30,5,1,240,32,32,32,32,32,32,32,32,112,97,114,101,
110,116,93,41,41,41,0,0,15,20,4,0,27,17,18,3,
31,12,14,4,19,12,13,12,31,10,12,1,19,10,11,10,
31,8,10,1,19,8,9,8,30,9,1,242,32,32,32,32,
102,111,114,32,109,101,109,98,101,114,32,105,110,32,105,116,
101,109,115,91,49,93,46,105,116,101,109,115,58,0,0,0,
11,10,0,0,0,0,0,0,0,0,240,63,9,9,3,10,
12,10,0,5,105,116,101,109,115,0,0,0,9,9,9,10,
11,10,0,0,0,0,0,0,0,0,0,0,42,8,9,10,
18,0,0,93,30,13,1,243,32,32,32,32,32,32,32,32,
105,102,32,109,101,109,98,101,114,46,116,121,112,101,32,61,
61,32,39,100,101,102,39,58,32,100,111,95,100,101,102,40,
109,101,109,98,101,114,44,107,108,115,41,0,12,12,0,4,
116,121,112,101,0,0,0,0,9,11,8,12,12,12,0,3,
100,101,102,0,23,11,11,12,21,11,0,0,18,0,0,10,
12,13,0,6,100,111,95,100,101,102,0,0,13,12,13,0,
15,13,8,0,15,14,6,0,31,11,13,2,19,11,12,11,
18,0,0,60,30,21,1,244,32,32,32,32,32,32,32,32,
101,108,105,102,32,109,101,109,98,101,114,46,116,121,112,101,
32,61,61,32,39,115,121,109,98,111,108,39,32,97,110,100,
32,109,101,109,98,101,114,46,118,97,108,32,61,61,32,39,
61,39,58,32,100,111,95,99,108,97,115,115,118,97,114,40,
109,101,109,98,101,114,44,107,108,115,41,0,12,12,0,4,
116,121,112,101,0,0,0,0,9,11,8,12,12,12,0,6,
115,121,109,98,111,108,0,0,23,11,11,12,21,11,0,0,
18,0,0,7,12,12,0,3,118,97,108,0,9,11,8,12,
12,12,0,1,61,0,0,0,23,11,11,12,21,11,0,0,
18,0,0,11,12,13,0,11,100,111,95,99,108,97,115,115,
118,97,114,0,13,12,13,0,15,13,8,0,15,14,6,0,
31,11,13,2,19,11,12,11,18,0,0,10,30,6,1,245,
32,32,32,32,32,32,32,32,101,108,115,101,58,32,99,111,
110,116,105,110,117,101,0,0,18,0,255,165,18,0,0,1,
18,0,255,163,30,6,1,247,32,32,32,32,102,114,101,101,
95,114,101,103,40,107,108,115,41,32,35,82,69,71,0,0,
12,11,0,8,102,114,101,101,95,114,101,103,0,0,0,0,
13,10,11,0,15,11,6,0,31,9,11,1,19,9,10,9,
0,0,0,0,12,49,0,8,100,111,95,99,108,97,115,115,
0,0,0,0,14,49,48,0,30,6,1,249,100,101,102,32,
100,111,95,99,108,97,115,115,118,97,114,40,116,44,114,41,
58,0,0,0,16,49,0,119,44,12,0,0,30,6,1,249,
100,101,102,32,100,111,95,99,108,97,115,115,118,97,114,40,
116,44,114,41,58,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,11,100,111,95,99,108,97,115,115,118,97,114,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,30,8,1,250,32,32,32,32,118,97,114,32,
61,32,100,111,95,115,116,114,105,110,103,40,116,46,105,116,
101,109,115,91,48,93,41,0,12,6,0,9,100,111,95,115,
116,114,105,110,103,0,0,0,13,5,6,0,12,7,0,5,
105,116,101,109,115,0,0,0,9,6,1,7,11,7,0,0,
0,0,0,0,0,0,0,0,9,6,6,7,31,4,6,1,
19,4,5,4,15,3,4,0,30,7,1,251,32,32,32,32,
118,97,108,32,61,32,100,111,40,116,46,105,116,101,109,115,
91,49,93,41,0,0,0,0,12,7,0,2,100,111,0,0,
13,6,7,0,12,8,0,5,105,116,101,109,115,0,0,0,
9,7,1,8,11,8,0,0,0,0,0,0,0,0,240,63,
9,7,7,8,31,5,7,1,19,5,6,5,15,4,5,0,
30,6,1,252,32,32,32,32,99,111,100,101,40,83,69,84,
44,114,44,118,97,114,44,118,97,108,41,0,12,7,0,4,
99,111,100,101,0,0,0,0,13,6,7,0,12,11,0,3,
83,69,84,0,13,7,11,0,15,8,2,0,15,9,3,0,
15,10,4,0,31,5,7,4,19,5,6,5,30,5,1,253,
32,32,32,32,102,114,101,101,95,114,101,103,40,118,97,114,
41,0,0,0,12,7,0,8,102,114,101,101,95,114,101,103,
0,0,0,0,13,6,7,0,15,7,3,0,31,5,7,1,
19,5,6,5,30,5,1,254,32,32,32,32,102,114,101,101,
95,114,101,103,40,118,97,108,41,0,0,0,12,7,0,8,
102,114,101,101,95,114,101,103,0,0,0,0,13,6,7,0,
15,7,4,0,31,5,7,1,19,5,6,5,0,0,0,0,
12,50,0,11,100,111,95,99,108,97,115,115,118,97,114,0,
14,50,49,0,30,5,2,0,100,101,102,32,100,111,95,119,
104,105,108,101,40,116,41,58,0,0,0,0,16,50,0,222,
44,10,0,0,30,5,2,0,100,101,102,32,100,111,95,119,
104,105,108,101,40,116,41,58,0,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,8,100,111,95,119,104,105,108,101,
0,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,5,2,1,32,32,32,32,105,116,101,109,115,32,61,32,
116,46,105,116,101,109,115,0,12,4,0,5,105,116,101,109,
115,0,0,0,9,3,1,4,15,2,3,0,30,5,2,2,
32,32,32,32,116,32,61,32,115,116,97,99,107,95,116,97,
103,40,41,0,12,5,0,9,115,116,97,99,107,95,116,97,
103,0,0,0,13,4,5,0,31,3,0,0,19,3,4,3,
15,1,3,0,30,5,2,3,32,32,32,32,116,97,103,40,
116,44,39,98,101,103,105,110,39,41,0,0,12,5,0,3,
11,9,0,0,0,0,0,0,0,0,0,0,15,8,9,0,
27,10,0,0,15,9,10,0,15,10,8,0,15,8,9,0,
21,4,0,0,18,0,0,78,12,12,0,6,97,112,112,101,
110,100,0,0,9,11,8,12,12,14,0,5,84,111,107,101,
110,0,0,0,13,13,14,0,12,18,0,3,112,111,115,0,
9,14,1,18,12,15,0,4,99,97,108,108,0,0,0,0,
28,16,0,0,12,21,0,5,84,111,107,101,110,0,0,0,
13,20,21,0,12,25,0,3,112,111,115,0,9,21,1,25,
12,22,0,3,103,101,116,0,28,23,0,0,12,28,0,5,
84,111,107,101,110,0,0,0,13,27,28,0,12,31,0,3,
112,111,115,0,9,28,1,31,12,29,0,4,110,97,109,101,
0,0,0,0,15,30,4,0,31,25,28,3,19,25,27,25,
12,28,0,5,84,111,107,101,110,0,0,0,13,27,28,0,
12,31,0,3,112,111,115,0,9,28,1,31,12,29,0,6,
115,116,114,105,110,103,0,0,12,30,0,7,95,95,110,101,
119,95,95,0,31,26,28,3,19,26,27,26,27,24,25,2,
31,18,21,4,19,18,20,18,12,21,0,5,84,111,107,101,
110,0,0,0,13,20,21,0,12,24,0,3,112,111,115,0,
9,21,1,24,12,22,0,4,110,97,109,101,0,0,0,0,
12,23,0,4,115,101,108,102,0,0,0,0,31,19,21,3,
19,19,20,19,27,17,18,2,31,12,14,4,19,12,13,12,
31,9,12,1,19,9,11,9,18,0,0,1,11,12,0,0,
0,0,0,0,0,0,240,63,9,11,3,12,12,12,0,5,
105,116,101,109,115,0,0,0,9,11,11,12,11,12,0,0,
0,0,0,0,0,0,0,0,42,9,11,12,18,0,0,190,
12,14,0,4,116,121,112,101,0,0,0,0,9,13,9,14,
12,14,0,3,100,101,102,0,35,13,13,14,21,13,0,0,
18,0,0,3,18,0,255,245,18,0,0,1,12,15,0,5,
105,116,101,109,115,0,0,0,9,14,9,15,11,15,0,0,
0,0,0,0,0,0,0,0,9,14,14,15,12,15,0,3,
118,97,108,0,9,14,14,15,15,13,14,0,12,15,0,8,
95,95,105,110,105,116,95,95,0,0,0,0,23,14,13,15,
21,14,0,0,18,0,0,6,11,14,0,0,0,0,0,0,
0,0,240,63,15,10,14,0,18,0,0,1,12,16,0,6,
100,111,95,100,101,102,0,0,13,15,16,0,15,16,9,0,
15,17,6,0,31,14,16,2,19,14,15,14,12,16,0,6,
97,112,112,101,110,100,0,0,9,15,8,16,12,18,0,5,
84,111,107,101,110,0,0,0,13,17,18,0,12,22,0,3,
112,111,115,0,9,18,9,22,12,19,0,6,115,121,109,98,
111,108,0,0,12,20,0,1,61,0,0,0,12,25,0,5,
84,111,107,101,110,0,0,0,13,24,25,0,12,29,0,3,
112,111,115,0,9,25,9,29,12,26,0,3,103,101,116,0,
28,27,0,0,12,32,0,5,84,111,107,101,110,0,0,0,
13,31,32,0,12,35,0,3,112,111,115,0,9,32,9,35,
12,33,0,4,110,97,109,101,0,0,0,0,12,34,0,4,
115,101,108,102,0,0,0,0,31,29,32,3,19,29,31,29,
12,32,0,5,84,111,107,101,110,0,0,0,13,31,32,0,
12,35,0,3,112,111,115,0,9,32,9,35,12,33,0,6,
115,116,114,105,110,103,0,0,15,34,13,0,31,30,32,3,
19,30,31,30,27,28,29,2,31,22,25,4,19,22,24,22,
12,25,0,5,84,111,107,101,110,0,0,0,13,24,25,0,
12,29,0,3,112,111,115,0,9,25,9,29,12,26,0,4,
99,97,108,108,0,0,0,0,28,27,0,0,12,33,0,5,
84,111,107,101,110,0,0,0,13,32,33,0,12,36,0,3,
112,111,115,0,9,33,9,36,12,34,0,4,110,97,109,101,
0,0,0,0,12,35,0,4,98,105,110,100,0,0,0,0,
31,29,33,3,19,29,32,29,12,33,0,5,84,111,107,101,
110,0,0,0,13,32,33,0,12,37,0,3,112,111,115,0,
9,33,9,37,12,34,0,3,103,101,116,0,28,35,0,0,
12,40,0,5,84,111,107,101,110,0,0,0,13,39,40,0,
12,43,0,3,112,111,115,0,9,40,9,43,12,41,0,4,
110,97,109,101,0,0,0,0,15,42,5,0,31,37,40,3,
19,37,39,37,12,40,0,5,84,111,107,101,110,0,0,0,
13,39,40,0,12,43,0,3,112,111,115,0,9,40,9,43,
12,41,0,6,115,116,114,105,110,103,0,0,15,42,13,0,
31,38,40,3,19,38,39,38,27,36,37,2,31,30,33,4,
19,30,32,30,12,33,0,5,84,111,107,101,110,0,0,0,
13,32,33,0,12,36,0,3,112,111,115,0,9,33,9,36,
12,34,0,4,110,97,109,101,0,0,0,0,12,35,0,4,
115,101,108,102,0,0,0,0,31,31,33,3,19,31,32,31,
27,28,29,3,31,23,25,4,19,23,24,23,27,21,22,2,
31,16,18,4,19,16,17,16,31,14,16,1,19,14,15,14,
18,0,255,66,12,14,0,6,100,111,95,100,101,102,0,0,
13,12,14,0,12,17,0,5,84,111,107,101,110,0,0,0,
13,16,17,0,12,21,0,3,112,111,115,0,9,17,1,21,
12,18,0,3,100,101,102,0,28,19,0,0,12,25,0,5,
84,111,107,101,110,0,0,0,13,24,25,0,12,28,0,3,
112,111,115,0,9,25,1,28,12,26,0,4,110,97,109,101,
0,0,0,0,12,27,0,7,95,95,110,101,119,95,95,0,
31,21,25,3,19,21,24,21,12,25,0,5,84,111,107,101,
110,0,0,0,13,24,25,0,12,29,0,3,112,111,115,0,
9,25,1,29,12,26,0,4,108,105,115,116,0,0,0,0,
28,27,0,0,12,31,0,5,84,111,107,101,110,0,0,0,
13,30,31,0,12,34,0,3,112,111,115,0,9,31,1,34,
12,32,0,4,110,97,109,101,0,0,0,0,12,33,0,4,
115,101,108,102,0,0,0,0,31,29,31,3,19,29,30,29,
27,28,29,1,31,22,25,4,19,22,24,22,12,25,0,5,
84,111,107,101,110,0,0,0,13,24,25,0,12,29,0,3,
112,111,115,0,9,25,1,29,12,26,0,10,115,116,97,116,
101,109,101,110,116,115,0,0,28,27,0,0,15,28,8,0,
31,23,25,4,19,23,24,23,27,20,21,3,31,14,17,4,
19,14,16,14,15,15,6,0,31,11,14,2,19,11,12,11,
12,14,0,7,103,101,116,95,116,97,103,0,13,12,14,0,
31,11,0,0,19,11,12,11,15,1,11,0,12,15,0,3,
102,110,99,0,13,14,15,0,15,15,1,0,12,16,0,3,
101,110,100,0,31,12,15,2,19,12,14,12,15,11,12,0,
12,15,0,1,68,0,0,0,13,14,15,0,12,15,0,5,
98,101,103,105,110,0,0,0,9,14,14,15,31,12,0,0,
19,12,14,12,12,16,0,8,100,111,95,108,111,99,97,108,
0,0,0,0,13,15,16,0,12,18,0,5,84,111,107,101,
110,0,0,0,13,17,18,0,12,21,0,3,112,111,115,0,
9,18,2,21,12,19,0,4,110,97,109,101,0,0,0,0,
12,20,0,8,95,95,112,97,114,97,109,115,0,0,0,0,
31,16,18,3,19,16,17,16,31,14,16,1,19,14,15,14,
15,12,14,0,12,17,0,8,100,111,95,108,111,99,97,108,
0,0,0,0,13,16,17,0,12,19,0,5,84,111,107,101,
110,0,0,0,13,18,19,0,12,22,0,3,112,111,115,0,
9,19,2,22,12,20,0,4,110,97,109,101,0,0,0,0,
12,21,0,4,115,101,108,102,0,0,0,0,31,17,19,3,
19,17,18,17,31,15,17,1,19,15,16,15,15,14,15,0,
12,17,0,4,99,111,100,101,0,0,0,0,13,16,17,0,
12,21,0,4,68,73,67,84,0,0,0,0,13,17,21,0,
15,18,14,0,11,19,0,0,0,0,0,0,0,0,0,0,
11,20,0,0,0,0,0,0,0,0,0,0,31,15,17,4,
19,15,16,15,12,17,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,16,17,0,12,19,0,2,100,111,0,0,
13,18,19,0,12,21,0,5,84,111,107,101,110,0,0,0,
13,20,21,0,12,25,0,3,112,111,115,0,9,21,2,25,
12,22,0,4,99,97,108,108,0,0,0,0,28,23,0,0,
12,28,0,5,84,111,107,101,110,0,0,0,13,27,28,0,
12,32,0,3,112,111,115,0,9,28,2,32,12,29,0,3,
103,101,116,0,28,30,0,0,12,35,0,5,84,111,107,101,
110,0,0,0,13,34,35,0,12,38,0,3,112,111,115,0,
9,35,2,38,12,36,0,4,110,97,109,101,0,0,0,0,
15,37,5,0,31,32,35,3,19,32,34,32,12,35,0,5,
84,111,107,101,110,0,0,0,13,34,35,0,12,38,0,3,
112,111,115,0,9,35,2,38,12,36,0,6,115,116,114,105,
110,103,0,0,12,37,0,7,95,95,110,101,119,95,95,0,
31,33,35,3,19,33,34,33,27,31,32,2,31,25,28,4,
19,25,27,25,12,28,0,5,84,111,107,101,110,0,0,0,
13,27,28,0,12,31,0,3,112,111,115,0,9,28,2,31,
12,29,0,4,110,97,109,101,0,0,0,0,12,30,0,4,
115,101,108,102,0,0,0,0,31,26,28,3,19,26,27,26,
27,24,25,2,31,19,21,4,19,19,20,19,31,17,19,1,
19,17,18,17,31,15,17,1,19,15,16,15,21,10,0,0,
18,0,0,77,12,18,0,7,103,101,116,95,116,109,112,0,
13,17,18,0,31,16,0,0,19,16,17,16,15,15,16,0,
12,19,0,10,95,100,111,95,115,116,114,105,110,103,0,0,
13,18,19,0,12,19,0,8,95,95,105,110,105,116,95,95,
0,0,0,0,31,17,19,1,19,17,18,17,15,16,17,0,
12,19,0,4,99,111,100,101,0,0,0,0,13,18,19,0,
12,23,0,3,71,69,84,0,13,19,23,0,15,20,15,0,
15,21,14,0,15,22,16,0,31,17,19,4,19,17,18,17,
12,20,0,7,103,101,116,95,116,109,112,0,13,19,20,0,
31,18,0,0,19,18,19,18,15,17,18,0,12,20,0,4,
99,111,100,101,0,0,0,0,13,19,20,0,12,24,0,4,
67,65,76,76,0,0,0,0,13,20,24,0,15,21,17,0,
15,22,15,0,15,23,12,0,31,18,20,4,19,18,19,18,
12,20,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,19,20,0,15,20,15,0,31,18,20,1,19,18,19,18,
12,20,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,19,20,0,15,20,16,0,31,18,20,1,19,18,19,18,
12,20,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,19,20,0,15,20,17,0,31,18,20,1,19,18,19,18,
18,0,0,1,12,20,0,4,99,111,100,101,0,0,0,0,
13,19,20,0,12,22,0,6,82,69,84,85,82,78,0,0,
13,20,22,0,15,21,14,0,31,18,20,2,19,18,19,18,
12,20,0,1,68,0,0,0,13,19,20,0,12,20,0,3,
101,110,100,0,9,19,19,20,31,18,0,0,19,18,19,18,
12,20,0,3,116,97,103,0,13,19,20,0,15,20,1,0,
12,21,0,3,101,110,100,0,31,18,20,2,19,18,19,18,
12,20,0,10,95,100,111,95,115,116,114,105,110,103,0,0,
13,19,20,0,12,20,0,8,95,95,99,97,108,108,95,95,
0,0,0,0,31,18,20,1,19,18,19,18,15,7,18,0,
12,20,0,4,99,111,100,101,0,0,0,0,13,19,20,0,
12,24,0,3,83,69,84,0,13,20,24,0,15,21,6,0,
15,22,7,0,15,23,11,0,31,18,20,4,19,18,19,18,
12,20,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,19,20,0,15,20,6,0,31,18,20,1,19,18,19,18,
12,20,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,19,20,0,15,20,7,0,31,18,20,1,19,18,19,18,
0,0,0,0,12,50,0,8,100,111,95,99,108,97,115,115,
0,0,0,0,14,50,49,0,16,50,0,123,44,10,0,0,
28,2,0,0,9,1,0,2,12,4,0,5,105,116,101,109,
115,0,0,0,9,3,1,4,15,2,3,0,12,5,0,9,
115,116,97,99,107,95,116,97,103,0,0,0,13,4,5,0,
31,3,0,0,19,3,4,3,15,1,3,0,12,5,0,3,
116,97,103,0,13,4,5,0,15,5,1,0,12,6,0,5,
98,101,103,105,110,0,0,0,31,3,5,2,19,3,4,3,
30,6,2,4,32,32,32,32,116,97,103,40,116,44,39,99,
111,110,116,105,110,117,101,39,41,0,0,0,12,5,0,3,
116,97,103,0,13,4,5,0,15,5,1,0,12,6,0,8,
99,111,110,116,105,110,117,101,0,0,0,0,31,3,5,2,
19,3,4,3,30,6,2,5,32,32,32,32,114,32,61,32,
100,111,40,105,116,101,109,115,91,48,93,41,0,0,0,0,
12,6,0,2,100,111,0,0,13,5,6,0,11,7,0,0,
0,0,0,0,0,0,0,0,9,6,2,7,31,4,6,1,
19,4,5,4,15,3,4,0,30,4,2,6,32,32,32,32,
99,111,100,101,40,73,70,44,114,41,0,0,12,6,0,4,
99,111,100,101,0,0,0,0,13,5,6,0,12,8,0,2,
73,70,0,0,13,6,8,0,15,7,3,0,31,4,6,2,
19,4,5,4,30,6,2,7,32,32,32,32,102,114,101,101,
95,116,109,112,40,114,41,32,35,82,69,71,0,0,0,0,
12,6,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,5,6,0,15,6,3,0,31,4,6,1,19,4,5,4,
30,5,2,8,32,32,32,32,106,117,109,112,40,116,44,39,
101,110,100,39,41,0,0,0,12,6,0,4,106,117,109,112,
12,5,0,3,116,97,103,0,13,4,5,0,15,5,1,0,
12,6,0,8,99,111,110,116,105,110,117,101,0,0,0,0,
31,3,5,2,19,3,4,3,12,6,0,2,100,111,0,0,
13,5,6,0,11,7,0,0,0,0,0,0,0,0,0,0,
9,6,2,7,31,4,6,1,19,4,5,4,15,3,4,0,
12,6,0,4,99,111,100,101,0,0,0,0,13,5,6,0,
12,8,0,2,73,70,0,0,13,6,8,0,15,7,3,0,
31,4,6,2,19,4,5,4,12,6,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,5,6,0,15,6,3,0,
31,4,6,1,19,4,5,4,12,6,0,4,106,117,109,112,
0,0,0,0,13,5,6,0,15,6,1,0,12,7,0,3,
101,110,100,0,31,4,6,2,19,4,5,4,30,8,2,9,
32,32,32,32,102,114,101,101,95,116,109,112,40,100,111,40,
105,116,101,109,115,91,49,93,41,41,32,35,82,69,71,0,
12,6,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,5,6,0,12,8,0,2,100,111,0,0,13,7,8,0,
11,9,0,0,0,0,0,0,0,0,240,63,9,8,2,9,
31,6,8,1,19,6,7,6,31,4,6,1,19,4,5,4,
30,5,2,10,32,32,32,32,106,117,109,112,40,116,44,39,
98,101,103,105,110,39,41,0,12,6,0,4,106,117,109,112,
0,0,0,0,13,5,6,0,15,6,1,0,12,7,0,5,
98,101,103,105,110,0,0,0,31,4,6,2,19,4,5,4,
30,5,2,11,32,32,32,32,116,97,103,40,116,44,39,98,
114,101,97,107,39,41,0,0,12,6,0,3,116,97,103,0,
13,5,6,0,15,6,1,0,12,7,0,5,98,114,101,97,
107,0,0,0,31,4,6,2,19,4,5,4,30,5,2,12,
32,32,32,32,116,97,103,40,116,44,39,101,110,100,39,41,
0,0,0,0,12,6,0,3,116,97,103,0,13,5,6,0,
15,6,1,0,12,7,0,3,101,110,100,0,31,4,6,2,
19,4,5,4,30,4,2,13,32,32,32,32,112,111,112,95,
116,97,103,40,41,0,0,0,12,6,0,7,112,111,112,95,
101,110,100,0,31,4,6,2,19,4,5,4,12,6,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,5,6,0,
12,8,0,2,100,111,0,0,13,7,8,0,11,9,0,0,
0,0,0,0,0,0,240,63,9,8,2,9,31,6,8,1,
19,6,7,6,31,4,6,1,19,4,5,4,12,6,0,4,
106,117,109,112,0,0,0,0,13,5,6,0,15,6,1,0,
12,7,0,5,98,101,103,105,110,0,0,0,31,4,6,2,
19,4,5,4,12,6,0,3,116,97,103,0,13,5,6,0,
15,6,1,0,12,7,0,5,98,114,101,97,107,0,0,0,
31,4,6,2,19,4,5,4,12,6,0,3,116,97,103,0,
13,5,6,0,15,6,1,0,12,7,0,3,101,110,100,0,
31,4,6,2,19,4,5,4,12,6,0,7,112,111,112,95,
116,97,103,0,13,5,6,0,31,4,0,0,19,4,5,4,
0,0,0,0,12,51,0,8,100,111,95,119,104,105,108,101,
0,0,0,0,14,51,50,0,30,5,2,15,100,101,102,32,
100,111,95,102,111,114,40,116,111,107,41,58,0,0,0,0,
16,51,1,11,44,14,0,0,30,5,2,15,100,101,102,32,
100,111,95,102,111,114,40,116,111,107,41,58,0,0,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,6,100,111,95,102,
111,114,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,6,2,16,32,32,32,32,105,116,101,109,115,32,61,32,
116,111,107,46,105,116,101,109,115,0,0,0,12,4,0,5,
105,116,101,109,115,0,0,0,9,3,1,4,15,2,3,0,
30,8,2,18,32,32,32,32,114,101,103,32,61,32,100,111,
95,108,111,99,97,108,40,105,116,101,109,115,91,48,93,41,
0,0,0,0,12,6,0,8,100,111,95,108,111,99,97,108,
0,0,0,0,13,5,6,0,11,7,0,0,0,0,0,0,
0,0,0,0,9,6,2,7,31,4,6,1,19,4,5,4,
15,3,4,0,30,6,2,19,32,32,32,32,105,116,114,32,
61,32,100,111,40,105,116,101,109,115,91,49,93,41,0,0,
12,7,0,2,100,111,0,0,13,6,7,0,11,8,0,0,
0,0,0,0,0,0,240,63,9,7,2,8,31,5,7,1,
19,5,6,5,15,4,5,0,30,6,2,20,32,32,32,32,
105,32,61,32,95,100,111,95,110,117,109,98,101,114,40,39,
48,39,41,0,12,8,0,10,95,100,111,95,110,117,109,98,
0,0,0,0,14,51,50,0,16,51,0,156,44,14,0,0,
28,2,0,0,9,1,0,2,12,4,0,5,105,116,101,109,
115,0,0,0,9,3,1,4,15,2,3,0,12,6,0,8,
100,111,95,108,111,99,97,108,0,0,0,0,13,5,6,0,
11,7,0,0,0,0,0,0,0,0,0,0,9,6,2,7,
31,4,6,1,19,4,5,4,15,3,4,0,12,7,0,2,
100,111,0,0,13,6,7,0,11,8,0,0,0,0,0,0,
0,0,240,63,9,7,2,8,31,5,7,1,19,5,6,5,
15,4,5,0,12,8,0,10,95,100,111,95,110,117,109,98,
101,114,0,0,13,7,8,0,12,8,0,1,48,0,0,0,
31,6,8,1,19,6,7,6,15,5,6,0,30,14,2,22,
32,32,32,32,116,32,61,32,115,116,97,99,107,95,116,97,
103,40,41,59,32,116,97,103,40,116,44,39,108,111,111,112,
39,41,59,32,116,97,103,40,116,44,39,99,111,110,116,105,
110,117,101,39,41,0,0,0,12,9,0,9,115,116,97,99,
107,95,116,97,103,0,0,0,13,8,9,0,31,7,0,0,
19,7,8,7,15,6,7,0,12,9,0,3,116,97,103,0,
13,8,9,0,15,9,6,0,12,10,0,4,108,111,111,112,
0,0,0,0,31,7,9,2,19,7,8,7,12,9,0,3,
116,97,103,0,13,8,9,0,15,9,6,0,12,10,0,8,
99,111,110,116,105,110,117,101,0,0,0,0,31,7,9,2,
19,7,8,7,30,10,2,23,32,32,32,32,99,111,100,101,
40,73,84,69,82,44,114,101,103,44,105,116,114,44,105,41,
59,32,106,117,109,112,40,116,44,39,101,110,100,39,41,0,
12,9,0,4,99,111,100,101,0,0,0,0,13,8,9,0,
12,13,0,4,73,84,69,82,0,0,0,0,13,9,13,0,
15,10,3,0,15,11,4,0,15,12,5,0,31,7,9,4,
19,7,8,7,12,9,0,4,106,117,109,112,0,0,0,0,
13,8,9,0,15,9,6,0,12,10,0,3,101,110,100,0,
31,7,9,2,19,7,8,7,30,8,2,24,32,32,32,32,
102,114,101,101,95,116,109,112,40,100,111,40,105,116,101,109,
115,91,50,93,41,41,32,35,82,69,71,0,12,9,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,8,9,0,
12,11,0,2,100,111,0,0,13,10,11,0,11,12,0,0,
0,0,0,0,0,0,0,64,9,11,2,12,31,9,11,1,
19,9,10,9,31,7,9,1,19,7,8,7,30,5,2,25,
32,32,32,32,106,117,109,112,40,116,44,39,108,111,111,112,
39,41,0,0,12,9,0,4,106,117,109,112,0,0,0,0,
13,8,9,0,15,9,6,0,12,10,0,4,108,111,111,112,
0,0,0,0,31,7,9,2,19,7,8,7,30,11,2,26,
32,32,32,32,116,97,103,40,116,44,39,98,114,101,97,107,
39,41,59,32,116,97,103,40,116,44,39,101,110,100,39,41,
59,32,112,111,112,95,116,97,103,40,41,0,12,9,0,3,
116,97,103,0,13,8,9,0,15,9,6,0,12,10,0,5,
98,114,101,97,107,0,0,0,31,7,9,2,19,7,8,7,
31,6,8,1,19,6,7,6,15,5,6,0,12,9,0,9,
115,116,97,99,107,95,116,97,103,0,0,0,13,8,9,0,
31,7,0,0,19,7,8,7,15,6,7,0,12,9,0,3,
116,97,103,0,13,8,9,0,15,9,6,0,12,10,0,4,
108,111,111,112,0,0,0,0,31,7,9,2,19,7,8,7,
12,9,0,3,116,97,103,0,13,8,9,0,15,9,6,0,
12,10,0,8,99,111,110,116,105,110,117,101,0,0,0,0,
31,7,9,2,19,7,8,7,12,9,0,4,99,111,100,101,
0,0,0,0,13,8,9,0,12,13,0,4,73,84,69,82,
0,0,0,0,13,9,13,0,15,10,3,0,15,11,4,0,
15,12,5,0,31,7,9,4,19,7,8,7,12,9,0,4,
106,117,109,112,0,0,0,0,13,8,9,0,15,9,6,0,
12,10,0,3,101,110,100,0,31,7,9,2,19,7,8,7,
12,9,0,7,112,111,112,95,116,97,103,0,13,8,9,0,
31,7,0,0,19,7,8,7,30,6,2,28,32,32,32,32,
102,114,101,101,95,116,109,112,40,105,116,114,41,32,35,82,
69,71,0,0,12,9,0,8,102,114,101,101,95,116,109,112,
12,9,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,8,9,0,12,11,0,2,100,111,0,0,13,10,11,0,
11,12,0,0,0,0,0,0,0,0,0,64,9,11,2,12,
31,9,11,1,19,9,10,9,31,7,9,1,19,7,8,7,
12,9,0,4,106,117,109,112,0,0,0,0,13,8,9,0,
15,9,6,0,12,10,0,4,108,111,111,112,0,0,0,0,
31,7,9,2,19,7,8,7,12,9,0,3,116,97,103,0,
13,8,9,0,15,9,6,0,12,10,0,5,98,114,101,97,
107,0,0,0,31,7,9,2,19,7,8,7,12,9,0,3,
116,97,103,0,13,8,9,0,15,9,6,0,12,10,0,3,
101,110,100,0,31,7,9,2,19,7,8,7,12,9,0,7,
112,111,112,95,116,97,103,0,13,8,9,0,31,7,0,0,
19,7,8,7,12,9,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,8,9,0,15,9,4,0,31,7,9,1,
19,7,8,7,30,4,2,29,32,32,32,32,102,114,101,101,
95,116,109,112,40,105,41,0,12,9,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,8,9,0,15,9,5,0,
31,7,9,1,19,7,8,7,0,0,0,0,12,52,0,6,
100,111,95,102,111,114,0,0,14,52,51,0,30,6,2,31,
100,101,102,32,100,111,95,99,111,109,112,40,116,44,114,61,
78,111,110,101,41,58,0,0,16,52,1,15,44,18,0,0,
30,6,2,31,100,101,102,32,100,111,95,99,111,109,112,40,
116,44,114,61,78,111,110,101,41,58,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,7,100,111,95,99,111,109,112,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,2,0,0,
28,3,0,0,32,2,0,3,30,8,2,32,32,32,32,32,
110,97,109,101,32,61,32,39,99,111,109,112,58,39,43,103,
101,116,95,116,97,103,40,41,0,0,0,0,12,4,0,5,
99,111,109,112,58,0,0,0,12,7,0,7,103,101,116,95,
116,97,103,0,13,6,7,0,31,5,0,0,19,5,6,5,
1,4,4,5,15,3,4,0,30,11,2,33,32,32,32,32,
114,32,61,32,100,111,95,108,111,99,97,108,40,84,111,107,
101,110,40,116,46,112,111,115,44,39,110,97,109,101,39,44,
110,97,109,101,41,41,0,0,12,6,0,8,100,111,95,108,
111,99,97,108,0,0,0,0,13,5,6,0,12,8,0,5,
84,111,107,101,110,0,0,0,13,7,8,0,12,11,0,3,
112,111,115,0,9,8,1,11,12,9,0,4,110,97,109,101,
0,0,0,0,15,10,3,0,31,6,8,3,19,6,7,6,
31,4,6,1,19,4,5,4,15,2,4,0,30,6,2,34,
32,32,32,32,99,111,100,101,40,76,73,83,84,44,114,44,
48,44,48,41,0,0,0,0,12,6,0,4,99,111,100,101,
0,0,0,0,13,5,6,0,12,10,0,4,76,73,83,84,
0,0,0,0,13,6,10,0,15,7,2,0,11,8,0,0,
0,0,0,0,0,0,0,0,11,9,0,0,0,0,0,0,
0,0,0,0,31,4,6,4,19,4,5,4,30,9,2,35,
32,32,32,32,107,101,121,32,61,32,84,111,107,101,110,40,
116,46,112,111,115,44,39,103,101,116,39,44,78,111,110,101,
44,91,0,0,12,7,0,5,84,111,107,101,110,0,0,0,
13,6,7,0,12,11,0,3,112,111,115,0,9,7,1,11,
12,8,0,3,103,101,116,0,28,9,0,0,30,9,2,36,
32,32,32,32,32,32,32,32,32,32,32,32,84,111,107,101,
110,40,116,46,112,111,115,44,39,114,101,103,39,44,114,41,
44,0,0,0,12,14,0,5,84,111,107,101,110,0,0,0,
13,13,14,0,12,17,0,3,112,111,115,0,9,14,1,17,
12,15,0,3,114,101,103,0,15,16,2,0,31,11,14,3,
19,11,13,11,30,11,2,37,32,32,32,32,32,32,32,32,
32,32,32,32,84,111,107,101,110,40,116,46,112,111,115,44,
39,115,121,109,98,111,108,39,44,39,78,111,110,101,39,41,
93,41,0,0,12,14,0,5,84,111,107,101,110,0,0,0,
13,13,14,0,12,17,0,3,112,111,115,0,9,14,1,17,
12,15,0,6,115,121,109,98,111,108,0,0,12,16,0,4,
78,111,110,101,0,0,0,0,31,12,14,3,19,12,13,12,
27,10,11,2,31,5,7,4,19,5,6,5,15,4,5,0,
30,13,2,38,32,32,32,32,97,112,32,61,32,84,111,107,
101,110,40,116,46,112,111,115,44,39,115,121,109,98,111,108,
39,44,39,61,39,44,91,107,101,121,44,116,46,105,116,101,
109,115,91,48,93,93,41,0,12,8,0,5,84,111,107,101,
110,0,0,0,13,7,8,0,12,12,0,3,112,111,115,0,
9,8,1,12,12,9,0,6,115,121,109,98,111,108,0,0,
12,10,0,1,61,0,0,0,15,12,4,0,12,14,0,5,
105,116,101,109,115,0,0,0,9,13,1,14,11,14,0,0,
0,0,0,0,0,0,0,0,9,13,13,14,27,11,12,2,
31,6,8,4,19,6,7,6,15,5,6,0,30,15,2,39,
32,32,32,32,100,111,40,84,111,107,101,110,40,116,46,112,
111,115,44,39,102,111,114,39,44,78,111,110,101,44,91,116,
46,105,116,101,109,115,91,49,93,44,116,46,105,116,101,109,
115,91,50,93,44,97,112,93,41,41,0,0,12,8,0,2,
100,111,0,0,13,7,8,0,12,10,0,5,84,111,107,101,
110,0,0,0,13,9,10,0,12,14,0,3,112,111,115,0,
9,10,1,14,12,11,0,3,102,111,114,0,28,12,0,0,
12,17,0,5,105,116,101,109,115,0,0,0,9,14,1,17,
11,17,0,0,0,0,0,0,0,0,240,63,9,14,14,17,
12,17,0,5,105,116,101,109,115,0,0,0,9,15,1,17,
11,17,0,0,0,0,0,0,0,0,0,64,9,15,15,17,
15,16,5,0,27,13,14,3,31,8,10,4,19,8,9,8,
31,6,8,1,19,6,7,6,30,4,2,40,32,32,32,32,
114,101,116,117,114,110,32,114,0,0,0,0,20,2,0,0,
19,7,8,7,12,9,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,8,9,0,15,9,5,0,31,7,9,1,
19,7,8,7,0,0,0,0,12,52,0,6,100,111,95,102,
111,114,0,0,14,52,51,0,16,52,0,159,44,18,0,0,
28,2,0,0,9,1,0,2,28,2,0,0,28,3,0,0,
32,2,0,3,12,4,0,5,99,111,109,112,58,0,0,0,
12,7,0,7,103,101,116,95,116,97,103,0,13,6,7,0,
31,5,0,0,19,5,6,5,1,4,4,5,15,3,4,0,
12,6,0,8,100,111,95,108,111,99,97,108,0,0,0,0,
13,5,6,0,12,8,0,5,84,111,107,101,110,0,0,0,
13,7,8,0,12,11,0,3,112,111,115,0,9,8,1,11,
12,9,0,4,110,97,109,101,0,0,0,0,15,10,3,0,
31,6,8,3,19,6,7,6,31,4,6,1,19,4,5,4,
15,2,4,0,12,6,0,4,99,111,100,101,0,0,0,0,
13,5,6,0,12,10,0,4,76,73,83,84,0,0,0,0,
13,6,10,0,15,7,2,0,11,8,0,0,0,0,0,0,
0,0,0,0,11,9,0,0,0,0,0,0,0,0,0,0,
31,4,6,4,19,4,5,4,12,7,0,5,84,111,107,101,
110,0,0,0,13,6,7,0,12,11,0,3,112,111,115,0,
9,7,1,11,12,8,0,3,103,101,116,0,28,9,0,0,
12,14,0,5,84,111,107,101,110,0,0,0,13,13,14,0,
12,17,0,3,112,111,115,0,9,14,1,17,12,15,0,3,
114,101,103,0,15,16,2,0,31,11,14,3,19,11,13,11,
12,14,0,5,84,111,107,101,110,0,0,0,13,13,14,0,
12,17,0,3,112,111,115,0,9,14,1,17,12,15,0,6,
115,121,109,98,111,108,0,0,12,16,0,4,78,111,110,101,
0,0,0,0,31,12,14,3,19,12,13,12,27,10,11,2,
31,5,7,4,19,5,6,5,15,4,5,0,12,8,0,5,
84,111,107,101,110,0,0,0,13,7,8,0,12,12,0,3,
112,111,115,0,9,8,1,12,12,9,0,6,115,121,109,98,
111,108,0,0,12,10,0,1,61,0,0,0,15,12,4,0,
12,14,0,5,105,116,101,109,115,0,0,0,9,13,1,14,
11,14,0,0,0,0,0,0,0,0,0,0,9,13,13,14,
27,11,12,2,31,6,8,4,19,6,7,6,15,5,6,0,
12,8,0,2,100,111,0,0,13,7,8,0,12,10,0,5,
84,111,107,101,110,0,0,0,13,9,10,0,12,14,0,3,
112,111,115,0,9,10,1,14,12,11,0,3,102,111,114,0,
28,12,0,0,12,17,0,5,105,116,101,109,115,0,0,0,
9,14,1,17,11,17,0,0,0,0,0,0,0,0,240,63,
9,14,14,17,12,17,0,5,105,116,101,109,115,0,0,0,
9,15,1,17,11,17,0,0,0,0,0,0,0,0,0,64,
9,15,15,17,15,16,5,0,27,13,14,3,31,8,10,4,
19,8,9,8,31,6,8,1,19,6,7,6,20,2,0,0,
0,0,0,0,12,53,0,7,100,111,95,99,111,109,112,0,
14,53,52,0,30,4,2,42,100,101,102,32,100,111,95,105,
102,40,116,41,58,0,0,0,16,53,1,53,44,13,0,0,
30,4,2,42,100,101,102,32,100,111,95,105,102,40,116,41,
58,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,5,
100,111,95,105,102,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,5,2,43,32,32,32,32,105,116,101,109,
115,32,61,32,116,46,105,116,101,109,115,0,12,4,0,5,
105,116,101,109,115,0,0,0,9,3,1,4,15,2,3,0,
30,5,2,44,32,32,32,32,116,32,61,32,103,101,116,95,
116,97,103,40,41,0,0,0,12,5,0,7,103,101,116,95,
14,53,52,0,16,53,0,171,44,13,0,0,28,2,0,0,
9,1,0,2,12,4,0,5,105,116,101,109,115,0,0,0,
9,3,1,4,15,2,3,0,12,5,0,7,103,101,116,95,
116,97,103,0,13,4,5,0,31,3,0,0,19,3,4,3,
15,1,3,0,30,3,2,45,32,32,32,32,110,32,61,32,
48,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,
15,3,4,0,30,6,2,46,32,32,32,32,102,111,114,32,
116,116,32,105,110,32,105,116,101,109,115,58,0,0,0,0,
11,5,0,0,0,0,0,0,0,0,0,0,42,4,2,5,
18,0,0,220,30,5,2,47,32,32,32,32,32,32,32,32,
116,97,103,40,116,44,110,41,0,0,0,0,12,8,0,3,
116,97,103,0,13,7,8,0,15,8,1,0,15,9,3,0,
31,6,8,2,19,6,7,6,30,8,2,48,32,32,32,32,
32,32,32,32,105,102,32,116,116,46,116,121,112,101,32,61,
61,32,39,101,108,105,102,39,58,0,0,0,12,7,0,4,
116,121,112,101,0,0,0,0,9,6,4,7,12,7,0,4,
101,108,105,102,0,0,0,0,23,6,6,7,21,6,0,0,
18,0,0,100,30,15,2,49,32,32,32,32,32,32,32,32,
32,32,32,32,97,32,61,32,100,111,40,116,116,46,105,116,
101,109,115,91,48,93,41,59,32,99,111,100,101,40,73,70,
44,97,41,59,32,102,114,101,101,95,116,109,112,40,97,41,
59,0,0,0,12,9,0,2,100,111,0,0,13,8,9,0,
12,10,0,5,105,116,101,109,115,0,0,0,9,9,4,10,
11,10,0,0,0,0,0,0,0,0,0,0,9,9,9,10,
31,7,9,1,19,7,8,7,15,6,7,0,12,9,0,4,
99,111,100,101,0,0,0,0,13,8,9,0,12,11,0,2,
73,70,0,0,13,9,11,0,15,10,6,0,31,7,9,2,
19,7,8,7,12,9,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,8,9,0,15,9,6,0,31,7,9,1,
19,7,8,7,30,6,2,50,32,32,32,32,32,32,32,32,
32,32,32,32,106,117,109,112,40,116,44,110,43,49,41,0,
12,9,0,4,106,117,109,112,0,0,0,0,13,8,9,0,
15,9,1,0,11,11,0,0,0,0,0,0,0,0,240,63,
1,10,3,11,31,7,9,2,19,7,8,7,30,11,2,51,
32,32,32,32,32,32,32,32,32,32,32,32,102,114,101,101,
95,116,109,112,40,100,111,40,116,116,46,105,116,101,109,115,
91,49,93,41,41,32,35,82,69,71,0,0,12,9,0,8,
15,1,3,0,11,4,0,0,0,0,0,0,0,0,0,0,
15,3,4,0,11,5,0,0,0,0,0,0,0,0,0,0,
42,4,2,5,18,0,0,131,12,8,0,3,116,97,103,0,
13,7,8,0,15,8,1,0,15,9,3,0,31,6,8,2,
19,6,7,6,12,7,0,4,116,121,112,101,0,0,0,0,
9,6,4,7,12,7,0,4,101,108,105,102,0,0,0,0,
23,6,6,7,21,6,0,0,18,0,0,65,12,9,0,2,
100,111,0,0,13,8,9,0,12,10,0,5,105,116,101,109,
115,0,0,0,9,9,4,10,11,10,0,0,0,0,0,0,
0,0,0,0,9,9,9,10,31,7,9,1,19,7,8,7,
15,6,7,0,12,9,0,4,99,111,100,101,0,0,0,0,
13,8,9,0,12,11,0,2,73,70,0,0,13,9,11,0,
15,10,6,0,31,7,9,2,19,7,8,7,12,9,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,8,9,0,
12,11,0,2,100,111,0,0,13,10,11,0,12,12,0,5,
105,116,101,109,115,0,0,0,9,11,4,12,11,12,0,0,
0,0,0,0,0,0,240,63,9,11,11,12,31,9,11,1,
19,9,10,9,31,7,9,1,19,7,8,7,18,0,0,62,
30,8,2,52,32,32,32,32,32,32,32,32,101,108,105,102,
32,116,116,46,116,121,112,101,32,61,61,32,39,101,108,115,
101,39,58,0,12,8,0,4,116,121,112,101,0,0,0,0,
9,7,4,8,12,8,0,4,101,108,115,101,0,0,0,0,
23,7,7,8,21,7,0,0,18,0,0,34,30,11,2,53,
32,32,32,32,32,32,32,32,32,32,32,32,102,114,101,101,
95,116,109,112,40,100,111,40,116,116,46,105,116,101,109,115,
91,48,93,41,41,32,35,82,69,71,0,0,12,9,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,8,9,0,
12,11,0,2,100,111,0,0,13,10,11,0,12,12,0,5,
105,116,101,109,115,0,0,0,9,11,4,12,11,12,0,0,
0,0,0,0,0,0,0,0,9,11,11,12,31,9,11,1,
19,9,10,9,31,7,9,1,19,7,8,7,18,0,0,10,
30,5,2,55,32,32,32,32,32,32,32,32,32,32,32,32,
114,97,105,115,101,0,0,0,28,7,0,0,37,7,0,0,
18,0,0,1,30,6,2,56,32,32,32,32,32,32,32,32,
106,117,109,112,40,116,44,39,101,110,100,39,41,0,0,0,
12,9,0,4,106,117,109,112,0,0,0,0,13,8,9,0,
15,9,1,0,12,10,0,3,101,110,100,0,31,7,9,2,
19,7,8,7,30,4,2,57,32,32,32,32,32,32,32,32,
110,32,43,61,32,49,0,0,11,8,0,0,0,0,0,0,
0,0,240,63,1,7,3,8,15,3,7,0,18,0,255,36,
30,4,2,58,32,32,32,32,116,97,103,40,116,44,110,41,
0,0,0,0,12,8,0,3,116,97,103,0,13,7,8,0,
15,8,1,0,15,9,3,0,31,5,8,2,19,5,7,5,
30,5,2,59,32,32,32,32,116,97,103,40,116,44,39,101,
110,100,39,41,0,0,0,0,12,8,0,3,116,97,103,0,
13,7,8,0,15,8,1,0,12,9,0,3,101,110,100,0,
31,5,8,2,19,5,7,5,0,0,0,0,12,54,0,5,
100,111,95,105,102,0,0,0,14,54,53,0,30,4,2,61,
100,101,102,32,100,111,95,116,114,121,40,116,41,58,0,0,
16,54,0,185,44,9,0,0,30,4,2,61,100,101,102,32,
100,111,95,116,114,121,40,116,41,58,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,6,100,111,95,116,114,121,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,5,2,62,
32,32,32,32,105,116,101,109,115,32,61,32,116,46,105,116,
101,109,115,0,12,4,0,5,105,116,101,109,115,0,0,0,
9,3,1,4,15,2,3,0,30,5,2,63,32,32,32,32,
116,32,61,32,103,101,116,95,116,97,103,40,41,0,0,0,
12,5,0,7,103,101,116,95,116,97,103,0,13,4,5,0,
31,3,0,0,19,3,4,3,15,1,3,0,30,6,2,64,
32,32,32,32,115,101,116,106,109,112,40,116,44,39,101,120,
99,101,112,116,39,41,0,0,12,5,0,6,115,101,116,106,
109,112,0,0,13,4,5,0,15,5,1,0,12,6,0,6,
101,120,99,101,112,116,0,0,31,3,5,2,19,3,4,3,
30,8,2,65,32,32,32,32,102,114,101,101,95,116,109,112,
40,100,111,40,105,116,101,109,115,91,48,93,41,41,32,35,
82,69,71,0,12,5,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,4,5,0,12,7,0,2,100,111,0,0,
13,6,7,0,11,8,0,0,0,0,0,0,0,0,0,0,
9,7,2,8,31,5,7,1,19,5,6,5,31,3,5,1,
19,3,4,3,30,5,2,66,32,32,32,32,99,111,100,101,
40,83,69,84,74,77,80,44,48,41,0,0,12,5,0,4,
99,111,100,101,0,0,0,0,13,4,5,0,12,7,0,6,
83,69,84,74,77,80,0,0,13,5,7,0,11,6,0,0,
0,0,0,0,0,0,0,0,31,3,5,2,19,3,4,3,
30,5,2,67,32,32,32,32,106,117,109,112,40,116,44,39,
101,110,100,39,41,0,0,0,12,5,0,4,106,117,109,112,
0,0,0,0,13,4,5,0,15,5,1,0,12,6,0,3,
101,110,100,0,31,3,5,2,19,3,4,3,30,5,2,68,
32,32,32,32,116,97,103,40,116,44,39,101,120,99,101,112,
116,39,41,0,12,5,0,3,116,97,103,0,13,4,5,0,
15,9,6,0,31,7,9,1,19,7,8,7,12,9,0,4,
106,117,109,112,0,0,0,0,13,8,9,0,15,9,1,0,
11,11,0,0,0,0,0,0,0,0,240,63,1,10,3,11,
31,7,9,2,19,7,8,7,12,9,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,8,9,0,12,11,0,2,
100,111,0,0,13,10,11,0,12,12,0,5,105,116,101,109,
115,0,0,0,9,11,4,12,11,12,0,0,0,0,0,0,
0,0,240,63,9,11,11,12,31,9,11,1,19,9,10,9,
31,7,9,1,19,7,8,7,18,0,0,35,12,8,0,4,
116,121,112,101,0,0,0,0,9,7,4,8,12,8,0,4,
101,108,115,101,0,0,0,0,23,7,7,8,21,7,0,0,
18,0,0,22,12,9,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,8,9,0,12,11,0,2,100,111,0,0,
13,10,11,0,12,12,0,5,105,116,101,109,115,0,0,0,
9,11,4,12,11,12,0,0,0,0,0,0,0,0,0,0,
9,11,11,12,31,9,11,1,19,9,10,9,31,7,9,1,
19,7,8,7,18,0,0,4,28,7,0,0,37,7,0,0,
18,0,0,1,12,9,0,4,106,117,109,112,0,0,0,0,
13,8,9,0,15,9,1,0,12,10,0,3,101,110,100,0,
31,7,9,2,19,7,8,7,11,8,0,0,0,0,0,0,
0,0,240,63,1,7,3,8,15,3,7,0,18,0,255,125,
12,8,0,3,116,97,103,0,13,7,8,0,15,8,1,0,
15,9,3,0,31,5,8,2,19,5,7,5,12,8,0,3,
116,97,103,0,13,7,8,0,15,8,1,0,12,9,0,3,
101,110,100,0,31,5,8,2,19,5,7,5,0,0,0,0,
12,54,0,5,100,111,95,105,102,0,0,0,14,54,53,0,
16,54,0,93,44,9,0,0,28,2,0,0,9,1,0,2,
12,4,0,5,105,116,101,109,115,0,0,0,9,3,1,4,
15,2,3,0,12,5,0,7,103,101,116,95,116,97,103,0,
13,4,5,0,31,3,0,0,19,3,4,3,15,1,3,0,
12,5,0,6,115,101,116,106,109,112,0,0,13,4,5,0,
15,5,1,0,12,6,0,6,101,120,99,101,112,116,0,0,
31,3,5,2,19,3,4,3,30,11,2,69,32,32,32,32,
102,114,101,101,95,116,109,112,40,100,111,40,105,116,101,109,
115,91,49,93,46,105,116,101,109,115,91,49,93,41,41,32,
35,82,69,71,0,0,0,0,12,5,0,8,102,114,101,101,
31,3,5,2,19,3,4,3,12,5,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,4,5,0,12,7,0,2,
100,111,0,0,13,6,7,0,11,8,0,0,0,0,0,0,
0,0,240,63,9,7,2,8,12,8,0,5,105,116,101,109,
115,0,0,0,9,7,7,8,11,8,0,0,0,0,0,0,
0,0,240,63,9,7,7,8,31,5,7,1,19,5,6,5,
31,3,5,1,19,3,4,3,30,5,2,70,32,32,32,32,
116,97,103,40,116,44,39,101,110,100,39,41,0,0,0,0,
0,0,0,0,9,7,2,8,31,5,7,1,19,5,6,5,
31,3,5,1,19,3,4,3,12,5,0,4,106,117,109,112,
0,0,0,0,13,4,5,0,15,5,1,0,12,6,0,3,
101,110,100,0,31,3,5,2,19,3,4,3,12,5,0,3,
116,97,103,0,13,4,5,0,15,5,1,0,12,6,0,6,
101,120,99,101,112,116,0,0,31,3,5,2,19,3,4,3,
12,5,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,4,5,0,12,7,0,2,100,111,0,0,13,6,7,0,
11,8,0,0,0,0,0,0,0,0,240,63,9,7,2,8,
12,8,0,5,105,116,101,109,115,0,0,0,9,7,7,8,
11,8,0,0,0,0,0,0,0,0,240,63,9,7,7,8,
31,5,7,1,19,5,6,5,31,3,5,1,19,3,4,3,
12,5,0,3,116,97,103,0,13,4,5,0,15,5,1,0,
12,6,0,3,101,110,100,0,31,3,5,2,19,3,4,3,
0,0,0,0,12,55,0,6,100,111,95,116,114,121,0,0,
14,55,54,0,30,5,2,72,100,101,102,32,100,111,95,114,
101,116,117,114,110,40,116,41,58,0,0,0,16,55,0,106,
44,8,0,0,30,5,2,72,100,101,102,32,100,111,95,114,
101,116,117,114,110,40,116,41,58,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,9,100,111,95,114,101,116,117,114,
110,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
30,9,2,73,32,32,32,32,105,102,32,116,46,105,116,101,
109,115,58,32,114,32,61,32,100,111,40,116,46,105,116,101,
109,115,91,48,93,41,0,0,12,3,0,5,105,116,101,109,
14,55,54,0,16,55,0,56,44,8,0,0,28,2,0,0,
9,1,0,2,12,3,0,5,105,116,101,109,115,0,0,0,
9,2,1,3,21,2,0,0,18,0,0,16,12,5,0,2,
100,111,0,0,13,4,5,0,12,6,0,5,105,116,101,109,
115,0,0,0,9,5,1,6,11,6,0,0,0,0,0,0,
0,0,0,0,9,5,5,6,31,3,5,1,19,3,4,3,
15,2,3,0,18,0,0,10,12,5,0,8,95,100,111,95,
110,111,110,101,0,0,0,0,13,4,5,0,31,3,0,0,
19,3,4,3,15,2,3,0,18,0,0,1,12,5,0,4,
99,111,100,101,0,0,0,0,13,4,5,0,12,7,0,6,
82,69,84,85,82,78,0,0,13,5,7,0,15,6,2,0,
31,3,5,2,19,3,4,3,12,5,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,4,5,0,15,5,2,0,
31,3,5,1,19,3,4,3,28,3,0,0,20,3,0,0,
0,0,0,0,12,56,0,9,100,111,95,114,101,116,117,114,
110,0,0,0,14,56,55,0,16,56,0,56,44,8,0,0,
28,2,0,0,9,1,0,2,12,3,0,5,105,116,101,109,
115,0,0,0,9,2,1,3,21,2,0,0,18,0,0,16,
12,5,0,2,100,111,0,0,13,4,5,0,12,6,0,5,
105,116,101,109,115,0,0,0,9,5,1,6,11,6,0,0,
0,0,0,0,0,0,0,0,9,5,5,6,31,3,5,1,
19,3,4,3,15,2,3,0,18,0,0,18,30,7,2,74,
32,32,32,32,101,108,115,101,58,32,114,32,61,32,95,100,
111,95,110,111,110,101,40,41,0,0,0,0,12,5,0,8,
19,3,4,3,15,2,3,0,18,0,0,10,12,5,0,8,
95,100,111,95,110,111,110,101,0,0,0,0,13,4,5,0,
31,3,0,0,19,3,4,3,15,2,3,0,18,0,0,1,
30,5,2,75,32,32,32,32,99,111,100,101,40,82,69,84,
85,82,78,44,114,41,0,0,12,5,0,4,99,111,100,101,
0,0,0,0,13,4,5,0,12,7,0,6,82,69,84,85,
82,78,0,0,13,5,7,0,15,6,2,0,31,3,5,2,
19,3,4,3,30,4,2,76,32,32,32,32,102,114,101,101,
95,116,109,112,40,114,41,0,12,5,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,4,5,0,15,5,2,0,
31,3,5,1,19,3,4,3,30,3,2,77,32,32,32,32,
114,101,116,117,114,110,0,0,28,3,0,0,20,3,0,0,
0,0,0,0,12,56,0,9,100,111,95,114,101,116,117,114,
110,0,0,0,14,56,55,0,30,5,2,78,100,101,102,32,
100,111,95,114,97,105,115,101,40,116,41,58,0,0,0,0,
16,56,0,106,44,8,0,0,30,5,2,78,100,101,102,32,
100,111,95,114,97,105,115,101,40,116,41,58,0,0,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,8,100,111,95,114,
97,105,115,101,0,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,9,2,79,32,32,32,32,105,102,32,116,
46,105,116,101,109,115,58,32,114,32,61,32,100,111,40,116,
46,105,116,101,109,115,91,48,93,41,0,0,12,3,0,5,
105,116,101,109,115,0,0,0,9,2,1,3,21,2,0,0,
18,0,0,16,12,5,0,2,100,111,0,0,13,4,5,0,
12,6,0,5,105,116,101,109,115,0,0,0,9,5,1,6,
11,6,0,0,0,0,0,0,0,0,0,0,9,5,5,6,
31,3,5,1,19,3,4,3,15,2,3,0,18,0,0,18,
30,7,2,80,32,32,32,32,101,108,115,101,58,32,114,32,
61,32,95,100,111,95,110,111,110,101,40,41,0,0,0,0,
12,5,0,8,95,100,111,95,110,111,110,101,0,0,0,0,
13,4,5,0,31,3,0,0,19,3,4,3,15,2,3,0,
18,0,0,1,30,5,2,81,32,32,32,32,99,111,100,101,
40,82,65,73,83,69,44,114,41,0,0,0,12,5,0,4,
99,111,100,101,0,0,0,0,13,4,5,0,12,7,0,5,
82,65,73,83,69,0,0,0,13,5,7,0,15,6,2,0,
31,3,5,2,19,3,4,3,30,4,2,82,32,32,32,32,
102,114,101,101,95,116,109,112,40,114,41,0,12,5,0,8,
12,5,0,4,99,111,100,101,0,0,0,0,13,4,5,0,
12,7,0,5,82,65,73,83,69,0,0,0,13,5,7,0,
15,6,2,0,31,3,5,2,19,3,4,3,12,5,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,4,5,0,
15,5,2,0,31,3,5,1,19,3,4,3,30,3,2,83,
32,32,32,32,114,101,116,117,114,110,0,0,28,3,0,0,
15,5,2,0,31,3,5,1,19,3,4,3,28,3,0,0,
20,3,0,0,0,0,0,0,12,57,0,8,100,111,95,114,
97,105,115,101,0,0,0,0,14,57,56,0,30,6,2,85,
100,101,102,32,100,111,95,115,116,97,116,101,109,101,110,116,
115,40,116,41,58,0,0,0,16,57,0,58,44,10,0,0,
30,6,2,85,100,101,102,32,100,111,95,115,116,97,116,101,
109,101,110,116,115,40,116,41,58,0,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,13,100,111,95,115,116,97,116,101,
109,101,110,116,115,0,0,0,34,1,0,0,28,2,0,0,
9,1,0,2,30,10,2,86,32,32,32,32,102,111,114,32,
116,116,32,105,110,32,116,46,105,116,101,109,115,58,32,102,
114,101,101,95,116,109,112,40,100,111,40,116,116,41,41,0,
12,4,0,5,105,116,101,109,115,0,0,0,9,3,1,4,
11,4,0,0,0,0,0,0,0,0,0,0,42,2,3,4,
18,0,0,15,12,7,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,6,7,0,12,9,0,2,100,111,0,0,
13,8,9,0,15,9,2,0,31,7,9,1,19,7,8,7,
31,5,7,1,19,5,6,5,18,0,255,241,0,0,0,0,
12,58,0,13,100,111,95,115,116,97,116,101,109,101,110,116,
115,0,0,0,14,58,57,0,30,6,2,88,100,101,102,32,
100,111,95,108,105,115,116,40,116,44,114,61,78,111,110,101,
41,58,0,0,16,58,0,70,44,9,0,0,30,6,2,88,
100,101,102,32,100,111,95,108,105,115,116,40,116,44,114,61,
78,111,110,101,41,58,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,7,100,111,95,108,105,115,116,0,34,1,0,0,
28,2,0,0,9,1,0,2,28,2,0,0,28,3,0,0,
32,2,0,3,30,5,2,89,32,32,32,32,114,32,61,32,
103,101,116,95,116,109,112,40,114,41,0,0,12,5,0,7,
103,101,116,95,116,109,112,0,13,4,5,0,15,5,2,0,
31,3,5,1,19,3,4,3,15,2,3,0,30,8,2,90,
32,32,32,32,109,97,110,97,103,101,95,115,101,113,40,76,
73,83,84,44,114,44,116,46,105,116,101,109,115,41,0,0,
97,105,115,101,0,0,0,0,14,57,56,0,16,57,0,28,
44,10,0,0,28,2,0,0,9,1,0,2,12,4,0,5,
105,116,101,109,115,0,0,0,9,3,1,4,11,4,0,0,
0,0,0,0,0,0,0,0,42,2,3,4,18,0,0,15,
12,7,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,6,7,0,12,9,0,2,100,111,0,0,13,8,9,0,
15,9,2,0,31,7,9,1,19,7,8,7,31,5,7,1,
19,5,6,5,18,0,255,241,0,0,0,0,12,58,0,13,
100,111,95,115,116,97,116,101,109,101,110,116,115,0,0,0,
14,58,57,0,16,58,0,33,44,9,0,0,28,2,0,0,
9,1,0,2,28,2,0,0,28,3,0,0,32,2,0,3,
12,5,0,7,103,101,116,95,116,109,112,0,13,4,5,0,
15,5,2,0,31,3,5,1,19,3,4,3,15,2,3,0,
12,5,0,10,109,97,110,97,103,101,95,115,101,113,0,0,
13,4,5,0,12,8,0,4,76,73,83,84,0,0,0,0,
13,5,8,0,15,6,2,0,12,8,0,5,105,116,101,109,
115,0,0,0,9,7,1,8,31,3,5,3,19,3,4,3,
30,4,2,91,32,32,32,32,114,101,116,117,114,110,32,114,
0,0,0,0,20,2,0,0,0,0,0,0,12,59,0,7,
100,111,95,108,105,115,116,0,14,59,58,0,30,6,2,93,
100,101,102,32,100,111,95,100,105,99,116,40,116,44,114,61,
78,111,110,101,41,58,0,0,16,59,0,70,44,9,0,0,
30,6,2,93,100,101,102,32,100,111,95,100,105,99,116,40,
116,44,114,61,78,111,110,101,41,58,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,7,100,111,95,100,105,99,116,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,2,0,0,
28,3,0,0,32,2,0,3,30,5,2,94,32,32,32,32,
114,32,61,32,103,101,116,95,116,109,112,40,114,41,0,0,
12,5,0,7,103,101,116,95,116,109,112,0,13,4,5,0,
15,5,2,0,31,3,5,1,19,3,4,3,15,2,3,0,
30,8,2,95,32,32,32,32,109,97,110,97,103,101,95,115,
101,113,40,68,73,67,84,44,114,44,116,46,105,116,101,109,
115,41,0,0,12,5,0,10,109,97,110,97,103,101,95,115,
20,2,0,0,0,0,0,0,12,59,0,7,100,111,95,108,
105,115,116,0,14,59,58,0,16,59,0,33,44,9,0,0,
28,2,0,0,9,1,0,2,28,2,0,0,28,3,0,0,
32,2,0,3,12,5,0,7,103,101,116,95,116,109,112,0,
13,4,5,0,15,5,2,0,31,3,5,1,19,3,4,3,
15,2,3,0,12,5,0,10,109,97,110,97,103,101,95,115,
101,113,0,0,13,4,5,0,12,8,0,4,68,73,67,84,
0,0,0,0,13,5,8,0,15,6,2,0,12,8,0,5,
105,116,101,109,115,0,0,0,9,7,1,8,31,3,5,3,
19,3,4,3,30,4,2,96,32,32,32,32,114,101,116,117,
114,110,32,114,0,0,0,0,20,2,0,0,0,0,0,0,
12,60,0,7,100,111,95,100,105,99,116,0,14,60,59,0,
30,6,2,98,100,101,102,32,100,111,95,103,101,116,40,116,
44,114,61,78,111,110,101,41,58,0,0,0,16,60,0,67,
44,11,0,0,30,6,2,98,100,101,102,32,100,111,95,103,
101,116,40,116,44,114,61,78,111,110,101,41,58,0,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,6,100,111,95,103,
101,116,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,30,5,2,99,
32,32,32,32,105,116,101,109,115,32,61,32,116,46,105,116,
101,109,115,0,12,5,0,5,105,116,101,109,115,0,0,0,
9,4,1,5,15,3,4,0,30,11,2,100,32,32,32,32,
114,101,116,117,114,110,32,105,110,102,105,120,40,71,69,84,
44,105,116,101,109,115,91,48,93,44,105,116,101,109,115,91,
49,93,44,114,41,0,0,0,12,6,0,5,105,110,102,105,
120,0,0,0,13,5,6,0,12,10,0,3,71,69,84,0,
13,6,10,0,11,10,0,0,0,0,0,0,0,0,0,0,
9,7,3,10,11,10,0,0,0,0,0,0,0,0,240,63,
9,8,3,10,15,9,2,0,31,4,6,4,19,4,5,4,
20,4,0,0,0,0,0,0,12,61,0,6,100,111,95,103,
101,116,0,0,14,61,60,0,30,11,2,102,100,101,102,32,
100,111,95,98,114,101,97,107,40,116,41,58,32,106,117,109,
112,40,68,46,116,115,116,97,99,107,91,45,49,93,44,39,
98,114,101,97,107,39,41,0,16,61,0,48,44,7,0,0,
30,11,2,102,100,101,102,32,100,111,95,98,114,101,97,107,
40,116,41,58,32,106,117,109,112,40,68,46,116,115,116,97,
99,107,91,45,49,93,44,39,98,114,101,97,107,39,41,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,8,100,111,95,98,
114,101,97,107,0,0,0,0,34,1,0,0,28,2,0,0,
19,3,4,3,20,2,0,0,0,0,0,0,12,60,0,7,
100,111,95,100,105,99,116,0,14,60,59,0,16,60,0,32,
44,11,0,0,28,2,0,0,9,1,0,2,28,2,0,0,
28,3,0,0,32,2,0,3,12,5,0,5,105,116,101,109,
115,0,0,0,9,4,1,5,15,3,4,0,12,6,0,5,
105,110,102,105,120,0,0,0,13,5,6,0,12,10,0,3,
71,69,84,0,13,6,10,0,11,10,0,0,0,0,0,0,
0,0,0,0,9,7,3,10,11,10,0,0,0,0,0,0,
0,0,240,63,9,8,3,10,15,9,2,0,31,4,6,4,
19,4,5,4,20,4,0,0,0,0,0,0,12,61,0,6,
100,111,95,103,101,116,0,0,14,61,60,0,16,61,0,25,
44,7,0,0,28,2,0,0,9,1,0,2,12,4,0,4,
106,117,109,112,0,0,0,0,13,3,4,0,12,6,0,1,
68,0,0,0,13,4,6,0,12,6,0,6,116,115,116,97,
99,107,0,0,9,4,4,6,11,6,0,0,0,0,0,0,
0,0,240,191,9,4,4,6,12,5,0,5,98,114,101,97,
107,0,0,0,31,2,4,2,19,2,3,2,0,0,0,0,
12,62,0,8,100,111,95,98,114,101,97,107,0,0,0,0,
14,62,61,0,16,62,0,26,44,7,0,0,28,2,0,0,
9,1,0,2,12,4,0,4,106,117,109,112,0,0,0,0,
13,3,4,0,12,6,0,1,68,0,0,0,13,4,6,0,
12,6,0,6,116,115,116,97,99,107,0,0,9,4,4,6,
11,6,0,0,0,0,0,0,0,0,240,191,9,4,4,6,
12,5,0,5,98,114,101,97,107,0,0,0,31,2,4,2,
19,2,3,2,0,0,0,0,12,62,0,8,100,111,95,98,
114,101,97,107,0,0,0,0,14,62,61,0,30,13,2,103,
100,101,102,32,100,111,95,99,111,110,116,105,110,117,101,40,
116,41,58,32,106,117,109,112,40,68,46,116,115,116,97,99,
107,91,45,49,93,44,39,99,111,110,116,105,110,117,101,39,
41,0,0,0,16,62,0,51,44,7,0,0,30,13,2,103,
100,101,102,32,100,111,95,99,111,110,116,105,110,117,101,40,
116,41,58,32,106,117,109,112,40,68,46,116,115,116,97,99,
107,91,45,49,93,44,39,99,111,110,116,105,110,117,101,39,
41,0,0,0,12,1,0,14,99,111,114,101,47,101,110,99,
111,100,101,46,112,121,0,0,33,1,0,0,12,1,0,11,
100,111,95,99,111,110,116,105,110,117,101,0,34,1,0,0,
28,2,0,0,9,1,0,2,12,4,0,4,106,117,109,112,
0,0,0,0,13,3,4,0,12,6,0,1,68,0,0,0,
13,4,6,0,12,6,0,6,116,115,116,97,99,107,0,0,
9,4,4,6,11,6,0,0,0,0,0,0,0,0,240,191,
9,4,4,6,12,5,0,8,99,111,110,116,105,110,117,101,
0,0,0,0,31,2,4,2,19,2,3,2,0,0,0,0,
12,63,0,11,100,111,95,99,111,110,116,105,110,117,101,0,
14,63,62,0,30,7,2,104,100,101,102,32,100,111,95,112,
97,115,115,40,116,41,58,32,99,111,100,101,40,80,65,83,
83,41,0,0,16,63,0,33,44,6,0,0,30,7,2,104,
100,101,102,32,100,111,95,112,97,115,115,40,116,41,58,32,
99,111,100,101,40,80,65,83,83,41,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,7,100,111,95,112,97,115,115,0,
34,1,0,0,28,2,0,0,9,1,0,2,12,4,0,4,
99,111,100,101,0,0,0,0,13,3,4,0,12,5,0,4,
80,65,83,83,0,0,0,0,13,4,5,0,31,2,4,1,
19,2,3,2,0,0,0,0,12,64,0,7,100,111,95,112,
97,115,115,0,14,64,63,0,30,6,2,106,100,101,102,32,
100,111,95,105,110,102,111,40,110,97,109,101,61,39,63,39,
41,58,0,0,16,64,0,127,44,11,0,0,30,6,2,106,
100,101,102,32,100,111,95,105,110,102,111,40,110,97,109,101,
61,39,63,39,41,58,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,7,100,111,95,105,110,102,111,0,34,1,0,0,
12,1,0,1,63,0,0,0,28,2,0,0,32,1,0,2,
30,8,2,107,32,32,32,32,105,102,32,39,45,110,111,112,
111,115,39,32,105,110,32,65,82,71,86,58,32,114,101,116,
117,114,110,0,12,3,0,4,65,82,71,86,0,0,0,0,
12,5,0,8,99,111,110,116,105,110,117,101,0,0,0,0,
31,2,4,2,19,2,3,2,0,0,0,0,12,63,0,11,
100,111,95,99,111,110,116,105,110,117,101,0,14,63,62,0,
16,63,0,15,44,6,0,0,28,2,0,0,9,1,0,2,
12,4,0,4,99,111,100,101,0,0,0,0,13,3,4,0,
12,5,0,4,80,65,83,83,0,0,0,0,13,4,5,0,
31,2,4,1,19,2,3,2,0,0,0,0,12,64,0,7,
100,111,95,112,97,115,115,0,14,64,63,0,16,64,0,76,
44,11,0,0,12,1,0,1,63,0,0,0,28,2,0,0,
32,1,0,2,12,3,0,4,65,82,71,86,0,0,0,0,
13,2,3,0,12,3,0,6,45,110,111,112,111,115,0,0,
36,2,2,3,21,2,0,0,18,0,0,4,28,2,0,0,
20,2,0,0,18,0,0,1,30,12,2,108,32,32,32,32,
99,111,100,101,40,70,73,76,69,44,102,114,101,101,95,116,
109,112,40,95,100,111,95,115,116,114,105,110,103,40,68,46,
102,110,97,109,101,41,41,41,0,0,0,0,12,4,0,4,
99,111,100,101,0,0,0,0,13,3,4,0,12,6,0,4,
70,73,76,69,0,0,0,0,13,4,6,0,12,7,0,8,
102,114,101,101,95,116,109,112,0,0,0,0,13,6,7,0,
12,9,0,10,95,100,111,95,115,116,114,105,110,103,0,0,
13,8,9,0,12,10,0,1,68,0,0,0,13,9,10,0,
12,10,0,5,102,110,97,109,101,0,0,0,9,9,9,10,
31,7,9,1,19,7,8,7,31,5,7,1,19,5,6,5,
31,2,4,2,19,2,3,2,30,11,2,109,32,32,32,32,
99,111,100,101,40,78,65,77,69,44,102,114,101,101,95,116,
109,112,40,95,100,111,95,115,116,114,105,110,103,40,110,97,
109,101,41,41,41,0,0,0,12,4,0,4,99,111,100,101,
0,0,0,0,13,3,4,0,12,6,0,4,78,65,77,69,
20,2,0,0,18,0,0,1,12,4,0,4,99,111,100,101,
0,0,0,0,13,3,4,0,12,6,0,4,70,73,76,69,
0,0,0,0,13,4,6,0,12,7,0,8,102,114,101,101,
95,116,109,112,0,0,0,0,13,6,7,0,12,9,0,10,
95,100,111,95,115,116,114,105,110,103,0,0,13,8,9,0,
15,9,1,0,31,7,9,1,19,7,8,7,31,5,7,1,
19,5,6,5,31,2,4,2,19,2,3,2,0,0,0,0,
12,65,0,7,100,111,95,105,110,102,111,0,14,65,64,0,
30,5,2,110,100,101,102,32,100,111,95,109,111,100,117,108,
101,40,116,41,58,0,0,0,16,65,0,63,44,8,0,0,
30,5,2,110,100,101,102,32,100,111,95,109,111,100,117,108,
101,40,116,41,58,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,9,100,111,95,109,111,100,117,108,101,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,30,4,2,111,
32,32,32,32,100,111,95,105,110,102,111,40,41,0,0,0,
12,4,0,7,100,111,95,105,110,102,111,0,13,3,4,0,
31,2,0,0,19,2,3,2,30,9,2,112,32,32,32,32,
102,114,101,101,95,116,109,112,40,100,111,40,116,46,105,116,
101,109,115,91,48,93,41,41,32,35,82,69,71,0,0,0,
12,4,0,8,102,114,101,101,95,116,109,112,0,0,0,0,
13,3,4,0,12,6,0,2,100,111,0,0,13,5,6,0,
12,7,0,5,105,116,101,109,115,0,0,0,9,6,1,7,
11,7,0,0,0,0,0,0,0,0,0,0,9,6,6,7,
31,4,6,1,19,4,5,4,31,2,4,1,19,2,3,2,
0,0,0,0,12,66,0,9,100,111,95,109,111,100,117,108,
101,0,0,0,14,66,65,0,30,9,2,113,100,101,102,32,
100,111,95,114,101,103,40,116,44,114,61,78,111,110,101,41,
58,32,114,101,116,117,114,110,32,116,46,118,97,108,0,0,
16,66,0,32,44,5,0,0,30,9,2,113,100,101,102,32,
100,111,95,114,101,103,40,116,44,114,61,78,111,110,101,41,
58,32,114,101,116,117,114,110,32,116,46,118,97,108,0,0,
12,1,0,14,99,111,114,101,47,101,110,99,111,100,101,46,
112,121,0,0,33,1,0,0,12,1,0,6,100,111,95,114,
101,103,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,2,0,0,28,3,0,0,32,2,0,3,12,4,0,3,
118,97,108,0,9,3,1,4,20,3,0,0,0,0,0,0,
12,67,0,6,100,111,95,114,101,103,0,0,14,67,66,0,
30,3,2,115,102,109,97,112,32,61,32,123,0,0,0,0,
12,67,0,4,102,109,97,112,0,0,0,0,30,16,2,116,
32,32,32,32,39,109,111,100,117,108,101,39,58,100,111,95,
109,111,100,117,108,101,44,39,115,116,97,116,101,109,101,110,
116,115,39,58,100,111,95,115,116,97,116,101,109,101,110,116,
115,44,39,100,101,102,39,58,100,111,95,100,101,102,44,0,
12,69,0,6,109,111,100,117,108,101,0,0,12,103,0,9,
100,111,95,109,111,100,117,108,101,0,0,0,13,70,103,0,
12,71,0,10,115,116,97,116,101,109,101,110,116,115,0,0,
12,103,0,13,100,111,95,115,116,97,116,101,109,101,110,116,
115,0,0,0,13,72,103,0,12,73,0,3,100,101,102,0,
12,103,0,6,100,111,95,100,101,102,0,0,13,74,103,0,
30,13,2,117,32,32,32,32,39,114,101,116,117,114,110,39,
58,100,111,95,114,101,116,117,114,110,44,39,119,104,105,108,
101,39,58,100,111,95,119,104,105,108,101,44,39,105,102,39,
58,100,111,95,105,102,44,0,12,75,0,6,114,101,116,117,
12,10,0,1,68,0,0,0,13,9,10,0,12,10,0,5,
102,110,97,109,101,0,0,0,9,9,9,10,31,7,9,1,
19,7,8,7,31,5,7,1,19,5,6,5,31,2,4,2,
19,2,3,2,12,4,0,4,99,111,100,101,0,0,0,0,
13,3,4,0,12,6,0,4,78,65,77,69,0,0,0,0,
13,4,6,0,12,7,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,6,7,0,12,9,0,10,95,100,111,95,
115,116,114,105,110,103,0,0,13,8,9,0,15,9,1,0,
31,7,9,1,19,7,8,7,31,5,7,1,19,5,6,5,
31,2,4,2,19,2,3,2,0,0,0,0,12,65,0,7,
100,111,95,105,110,102,111,0,14,65,64,0,16,65,0,31,
44,8,0,0,28,2,0,0,9,1,0,2,12,4,0,7,
100,111,95,105,110,102,111,0,13,3,4,0,31,2,0,0,
19,2,3,2,12,4,0,8,102,114,101,101,95,116,109,112,
0,0,0,0,13,3,4,0,12,6,0,2,100,111,0,0,
13,5,6,0,12,7,0,5,105,116,101,109,115,0,0,0,
9,6,1,7,11,7,0,0,0,0,0,0,0,0,0,0,
9,6,6,7,31,4,6,1,19,4,5,4,31,2,4,1,
19,2,3,2,0,0,0,0,12,66,0,9,100,111,95,109,
111,100,117,108,101,0,0,0,14,66,65,0,16,66,0,12,
44,5,0,0,28,2,0,0,9,1,0,2,28,2,0,0,
28,3,0,0,32,2,0,3,12,4,0,3,118,97,108,0,
9,3,1,4,20,3,0,0,0,0,0,0,12,67,0,6,
100,111,95,114,101,103,0,0,14,67,66,0,12,67,0,4,
102,109,97,112,0,0,0,0,12,69,0,6,109,111,100,117,
108,101,0,0,12,103,0,9,100,111,95,109,111,100,117,108,
101,0,0,0,13,70,103,0,12,71,0,10,115,116,97,116,
101,109,101,110,116,115,0,0,12,103,0,13,100,111,95,115,
116,97,116,101,109,101,110,116,115,0,0,0,13,72,103,0,
12,73,0,3,100,101,102,0,12,103,0,6,100,111,95,100,
101,102,0,0,13,74,103,0,12,75,0,6,114,101,116,117,
114,110,0,0,12,103,0,9,100,111,95,114,101,116,117,114,
110,0,0,0,13,76,103,0,12,77,0,5,119,104,105,108,
101,0,0,0,12,103,0,8,100,111,95,119,104,105,108,101,
0,0,0,0,13,78,103,0,12,79,0,2,105,102,0,0,
12,103,0,5,100,111,95,105,102,0,0,0,13,80,103,0,
30,19,2,118,32,32,32,32,39,98,114,101,97,107,39,58,
100,111,95,98,114,101,97,107,44,39,112,97,115,115,39,58,
100,111,95,112,97,115,115,44,39,99,111,110,116,105,110,117,
101,39,58,100,111,95,99,111,110,116,105,110,117,101,44,39,
102,111,114,39,58,100,111,95,102,111,114,44,0,0,0,0,
12,81,0,5,98,114,101,97,107,0,0,0,12,103,0,8,
100,111,95,98,114,101,97,107,0,0,0,0,13,82,103,0,
12,83,0,4,112,97,115,115,0,0,0,0,12,103,0,7,
6312,368 → 3585,198
99,111,110,116,105,110,117,101,0,0,0,0,12,103,0,11,
100,111,95,99,111,110,116,105,110,117,101,0,13,86,103,0,
12,87,0,3,102,111,114,0,12,103,0,6,100,111,95,102,
111,114,0,0,13,88,103,0,30,18,2,119,32,32,32,32,
39,99,108,97,115,115,39,58,100,111,95,99,108,97,115,115,
44,39,114,97,105,115,101,39,58,100,111,95,114,97,105,115,
101,44,39,116,114,121,39,58,100,111,95,116,114,121,44,39,
105,109,112,111,114,116,39,58,100,111,95,105,109,112,111,114,
116,44,0,0,12,89,0,5,99,108,97,115,115,0,0,0,
12,103,0,8,100,111,95,99,108,97,115,115,0,0,0,0,
13,90,103,0,12,91,0,5,114,97,105,115,101,0,0,0,
12,103,0,8,100,111,95,114,97,105,115,101,0,0,0,0,
13,92,103,0,12,93,0,3,116,114,121,0,12,103,0,6,
100,111,95,116,114,121,0,0,13,94,103,0,12,95,0,6,
105,109,112,111,114,116,0,0,12,103,0,9,100,111,95,105,
109,112,111,114,116,0,0,0,13,96,103,0,30,14,2,120,
32,32,32,32,39,103,108,111,98,97,108,115,39,58,100,111,
95,103,108,111,98,97,108,115,44,39,100,101,108,39,58,100,
111,95,100,101,108,44,39,102,114,111,109,39,58,100,111,95,
102,114,111,109,44,0,0,0,12,97,0,7,103,108,111,98,
97,108,115,0,12,103,0,10,100,111,95,103,108,111,98,97,
108,115,0,0,13,98,103,0,12,99,0,3,100,101,108,0,
12,103,0,6,100,111,95,100,101,108,0,0,13,100,103,0,
12,101,0,4,102,114,111,109,0,0,0,0,12,103,0,7,
100,111,95,102,114,111,109,0,13,102,103,0,26,68,69,34,
14,67,68,0,30,3,2,122,114,109,97,112,32,61,32,123,
0,0,0,0,12,67,0,4,114,109,97,112,0,0,0,0,
30,18,2,123,32,32,32,32,39,108,105,115,116,39,58,100,
111,95,108,105,115,116,44,32,39,116,117,112,108,101,39,58,
100,111,95,108,105,115,116,44,32,39,100,105,99,116,39,58,
100,111,95,100,105,99,116,44,32,39,115,108,105,99,101,39,
58,100,111,95,108,105,115,116,44,0,0,0,12,69,0,4,
108,105,115,116,0,0,0,0,12,93,0,7,100,111,95,108,
105,115,116,0,13,70,93,0,12,71,0,5,116,117,112,108,
101,0,0,0,12,93,0,7,100,111,95,108,105,115,116,0,
13,72,93,0,12,73,0,4,100,105,99,116,0,0,0,0,
12,93,0,7,100,111,95,100,105,99,116,0,13,74,93,0,
12,75,0,5,115,108,105,99,101,0,0,0,12,93,0,7,
100,111,95,108,105,115,116,0,13,76,93,0,30,19,2,124,
32,32,32,32,39,99,111,109,112,39,58,100,111,95,99,111,
109,112,44,32,39,110,97,109,101,39,58,100,111,95,110,97,
109,101,44,39,115,121,109,98,111,108,39,58,100,111,95,115,
121,109,98,111,108,44,39,110,117,109,98,101,114,39,58,100,
111,95,110,117,109,98,101,114,44,0,0,0,12,77,0,4,
99,111,109,112,0,0,0,0,12,93,0,7,100,111,95,99,
111,109,112,0,13,78,93,0,12,79,0,4,110,97,109,101,
0,0,0,0,12,93,0,7,100,111,95,110,97,109,101,0,
13,80,93,0,12,81,0,6,115,121,109,98,111,108,0,0,
12,93,0,9,100,111,95,115,121,109,98,111,108,0,0,0,
13,82,93,0,12,83,0,6,110,117,109,98,101,114,0,0,
12,93,0,9,100,111,95,110,117,109,98,101,114,0,0,0,
13,84,93,0,30,17,2,125,32,32,32,32,39,115,116,114,
105,110,103,39,58,100,111,95,115,116,114,105,110,103,44,39,
103,101,116,39,58,100,111,95,103,101,116,44,32,39,99,97,
108,108,39,58,100,111,95,99,97,108,108,44,32,39,114,101,
103,39,58,100,111,95,114,101,103,44,0,0,12,85,0,6,
115,116,114,105,110,103,0,0,12,93,0,9,100,111,95,115,
116,114,105,110,103,0,0,0,13,86,93,0,12,87,0,3,
103,101,116,0,12,93,0,6,100,111,95,103,101,116,0,0,
13,88,93,0,12,89,0,4,99,97,108,108,0,0,0,0,
12,93,0,7,100,111,95,99,97,108,108,0,13,90,93,0,
12,91,0,3,114,101,103,0,12,93,0,6,100,111,95,114,
101,103,0,0,13,92,93,0,26,68,69,24,14,67,68,0,
30,5,2,128,100,101,102,32,100,111,40,116,44,114,61,78,
111,110,101,41,58,0,0,0,16,67,0,198,44,9,0,0,
30,5,2,128,100,101,102,32,100,111,40,116,44,114,61,78,
111,110,101,41,58,0,0,0,12,1,0,14,99,111,114,101,
47,101,110,99,111,100,101,46,112,121,0,0,33,1,0,0,
12,1,0,2,100,111,0,0,34,1,0,0,28,2,0,0,
111,114,0,0,13,88,103,0,12,89,0,5,99,108,97,115,
115,0,0,0,12,103,0,8,100,111,95,99,108,97,115,115,
0,0,0,0,13,90,103,0,12,91,0,5,114,97,105,115,
101,0,0,0,12,103,0,8,100,111,95,114,97,105,115,101,
0,0,0,0,13,92,103,0,12,93,0,3,116,114,121,0,
12,103,0,6,100,111,95,116,114,121,0,0,13,94,103,0,
12,95,0,6,105,109,112,111,114,116,0,0,12,103,0,9,
100,111,95,105,109,112,111,114,116,0,0,0,13,96,103,0,
12,97,0,7,103,108,111,98,97,108,115,0,12,103,0,10,
100,111,95,103,108,111,98,97,108,115,0,0,13,98,103,0,
12,99,0,3,100,101,108,0,12,103,0,6,100,111,95,100,
101,108,0,0,13,100,103,0,12,101,0,4,102,114,111,109,
0,0,0,0,12,103,0,7,100,111,95,102,114,111,109,0,
13,102,103,0,26,68,69,34,14,67,68,0,12,67,0,4,
114,109,97,112,0,0,0,0,12,69,0,4,108,105,115,116,
0,0,0,0,12,93,0,7,100,111,95,108,105,115,116,0,
13,70,93,0,12,71,0,5,116,117,112,108,101,0,0,0,
12,93,0,7,100,111,95,108,105,115,116,0,13,72,93,0,
12,73,0,4,100,105,99,116,0,0,0,0,12,93,0,7,
100,111,95,100,105,99,116,0,13,74,93,0,12,75,0,5,
115,108,105,99,101,0,0,0,12,93,0,7,100,111,95,108,
105,115,116,0,13,76,93,0,12,77,0,4,99,111,109,112,
0,0,0,0,12,93,0,7,100,111,95,99,111,109,112,0,
13,78,93,0,12,79,0,4,110,97,109,101,0,0,0,0,
12,93,0,7,100,111,95,110,97,109,101,0,13,80,93,0,
12,81,0,6,115,121,109,98,111,108,0,0,12,93,0,9,
100,111,95,115,121,109,98,111,108,0,0,0,13,82,93,0,
12,83,0,6,110,117,109,98,101,114,0,0,12,93,0,9,
100,111,95,110,117,109,98,101,114,0,0,0,13,84,93,0,
12,85,0,6,115,116,114,105,110,103,0,0,12,93,0,9,
100,111,95,115,116,114,105,110,103,0,0,0,13,86,93,0,
12,87,0,3,103,101,116,0,12,93,0,6,100,111,95,103,
101,116,0,0,13,88,93,0,12,89,0,4,99,97,108,108,
0,0,0,0,12,93,0,7,100,111,95,99,97,108,108,0,
13,90,93,0,12,91,0,3,114,101,103,0,12,93,0,6,
100,111,95,114,101,103,0,0,13,92,93,0,26,68,69,24,
14,67,68,0,16,67,0,110,44,9,0,0,28,2,0,0,
9,1,0,2,28,2,0,0,28,3,0,0,32,2,0,3,
30,7,2,129,32,32,32,32,105,102,32,116,46,112,111,115,
58,32,115,101,116,112,111,115,40,116,46,112,111,115,41,0,
12,4,0,3,112,111,115,0,9,3,1,4,21,3,0,0,
18,0,0,11,12,5,0,6,115,101,116,112,111,115,0,0,
13,4,5,0,12,6,0,3,112,111,115,0,9,5,1,6,
31,3,5,1,19,3,4,3,18,0,0,1,30,3,2,130,
32,32,32,32,116,114,121,58,0,0,0,0,38,0,0,70,
30,7,2,131,32,32,32,32,32,32,32,32,105,102,32,116,
46,116,121,112,101,32,105,110,32,114,109,97,112,58,0,0,
31,3,5,1,19,3,4,3,18,0,0,1,38,0,0,41,
12,4,0,4,114,109,97,112,0,0,0,0,13,3,4,0,
12,5,0,4,116,121,112,101,0,0,0,0,9,4,1,5,
36,3,3,4,21,3,0,0,18,0,0,27,30,10,2,132,
32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,
114,110,32,114,109,97,112,91,116,46,116,121,112,101,93,40,
116,44,114,41,0,0,0,0,12,5,0,4,114,109,97,112,
36,3,3,4,21,3,0,0,18,0,0,16,12,5,0,4,
114,109,97,112,0,0,0,0,13,4,5,0,12,6,0,4,
116,121,112,101,0,0,0,0,9,5,1,6,9,4,4,5,
15,5,1,0,15,6,2,0,31,3,5,2,19,3,4,3,
20,3,0,0,18,0,0,1,12,5,0,4,102,109,97,112,
0,0,0,0,13,4,5,0,12,6,0,4,116,121,112,101,
0,0,0,0,9,5,1,6,9,4,4,5,15,5,1,0,
15,6,2,0,31,3,5,2,19,3,4,3,20,3,0,0,
18,0,0,1,30,8,2,134,32,32,32,32,32,32,32,32,
114,101,116,117,114,110,32,102,109,97,112,91,116,46,116,121,
112,101,93,40,116,41,0,0,12,5,0,4,102,109,97,112,
0,0,0,0,13,4,5,0,12,6,0,4,116,121,112,101,
0,0,0,0,9,5,1,6,9,4,4,5,15,5,1,0,
31,3,5,1,19,3,4,3,20,3,0,0,38,0,0,0,
18,0,0,79,30,3,2,135,32,32,32,32,101,120,99,101,
112,116,58,0,30,7,2,136,32,32,32,32,32,32,32,32,
105,102,32,68,46,101,114,114,111,114,58,32,114,97,105,115,
101,0,0,0,12,4,0,1,68,0,0,0,13,3,4,0,
12,4,0,5,101,114,114,111,114,0,0,0,9,3,3,4,
21,3,0,0,18,0,0,4,28,3,0,0,37,3,0,0,
18,0,0,1,30,6,2,137,32,32,32,32,32,32,32,32,
68,46,101,114,114,111,114,32,61,32,84,114,117,101,0,0,
31,3,5,1,19,3,4,3,20,3,0,0,18,0,0,47,
12,4,0,1,68,0,0,0,13,3,4,0,12,4,0,5,
101,114,114,111,114,0,0,0,9,3,3,4,21,3,0,0,
18,0,0,4,28,3,0,0,37,3,0,0,18,0,0,1,
12,4,0,1,68,0,0,0,13,3,4,0,11,4,0,0,
0,0,0,0,0,0,240,63,12,5,0,5,101,114,114,111,
114,0,0,0,10,3,5,4,30,12,2,138,32,32,32,32,
32,32,32,32,116,111,107,101,110,105,122,101,46,117,95,101,
114,114,111,114,40,39,101,110,99,111,100,101,39,44,68,46,
99,111,100,101,44,116,46,112,111,115,41,0,12,5,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,13,4,5,0,
12,5,0,7,117,95,101,114,114,111,114,0,9,4,4,5,
12,5,0,6,101,110,99,111,100,101,0,0,12,8,0,1,
68,0,0,0,13,6,8,0,12,8,0,4,99,111,100,101,
0,0,0,0,9,6,6,8,12,8,0,3,112,111,115,0,
9,7,1,8,31,3,5,3,19,3,4,3,0,0,0,0,
12,68,0,2,100,111,0,0,14,68,67,0,30,6,2,140,
100,101,102,32,101,110,99,111,100,101,40,102,110,97,109,101,
44,115,44,116,41,58,0,0,16,68,0,192,44,12,0,0,
30,6,2,140,100,101,102,32,101,110,99,111,100,101,40,102,
110,97,109,101,44,115,44,116,41,58,0,0,12,1,0,14,
99,111,114,101,47,101,110,99,111,100,101,46,112,121,0,0,
33,1,0,0,12,1,0,6,101,110,99,111,100,101,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,28,4,0,0,9,3,0,4,30,11,2,141,
32,32,32,32,116,32,61,32,84,111,107,101,110,40,40,49,
44,49,41,44,39,109,111,100,117,108,101,39,44,39,109,111,
100,117,108,101,39,44,91,116,93,41,0,0,12,6,0,5,
84,111,107,101,110,0,0,0,13,5,6,0,11,10,0,0,
0,0,0,0,0,0,240,63,11,11,0,0,0,0,0,0,
0,0,240,63,27,6,10,2,12,7,0,6,109,111,100,117,
108,101,0,0,12,8,0,6,109,111,100,117,108,101,0,0,
15,10,3,0,27,9,10,1,31,4,6,4,19,4,5,4,
15,3,4,0,30,4,2,142,32,32,32,32,103,108,111,98,
97,108,32,68,0,0,0,0,30,7,2,143,32,32,32,32,
115,32,61,32,116,111,107,101,110,105,122,101,46,99,108,101,
97,110,40,115,41,0,0,0,12,6,0,8,116,111,107,101,
110,105,122,101,0,0,0,0,13,5,6,0,12,6,0,5,
99,108,101,97,110,0,0,0,9,5,5,6,15,6,2,0,
31,4,6,1,19,4,5,4,15,2,4,0,30,6,2,144,
32,32,32,32,68,32,61,32,68,83,116,97,116,101,40,115,
44,102,110,97,109,101,41,0,12,4,0,1,68,0,0,0,
12,7,0,6,68,83,116,97,116,101,0,0,13,6,7,0,
15,7,2,0,15,8,1,0,31,5,7,2,19,5,6,5,
14,4,5,0,30,5,2,145,32,32,32,32,68,46,98,101,
103,105,110,40,84,114,117,101,41,0,0,0,12,6,0,1,
68,0,0,0,13,5,6,0,12,6,0,5,98,101,103,105,
110,0,0,0,9,5,5,6,11,6,0,0,0,0,0,0,
0,0,240,63,31,4,6,1,19,4,5,4,30,3,2,146,
32,32,32,32,100,111,40,116,41,0,0,0,12,6,0,2,
100,111,0,0,13,5,6,0,15,6,3,0,31,4,6,1,
19,4,5,4,30,3,2,147,32,32,32,32,68,46,101,110,
100,40,41,0,12,6,0,1,68,0,0,0,13,5,6,0,
12,6,0,3,101,110,100,0,9,5,5,6,31,4,0,0,
19,4,5,4,30,4,2,148,32,32,32,32,109,97,112,95,
116,97,103,115,40,41,0,0,12,6,0,8,109,97,112,95,
114,0,0,0,10,3,5,4,12,5,0,8,116,111,107,101,
110,105,122,101,0,0,0,0,13,4,5,0,12,5,0,7,
117,95,101,114,114,111,114,0,9,4,4,5,12,5,0,6,
101,110,99,111,100,101,0,0,12,8,0,1,68,0,0,0,
13,6,8,0,12,8,0,4,99,111,100,101,0,0,0,0,
9,6,6,8,12,8,0,3,112,111,115,0,9,7,1,8,
31,3,5,3,19,3,4,3,0,0,0,0,12,68,0,2,
100,111,0,0,14,68,67,0,16,68,0,109,44,12,0,0,
28,2,0,0,9,1,0,2,28,3,0,0,9,2,0,3,
28,4,0,0,9,3,0,4,12,6,0,5,84,111,107,101,
110,0,0,0,13,5,6,0,11,10,0,0,0,0,0,0,
0,0,240,63,11,11,0,0,0,0,0,0,0,0,240,63,
27,6,10,2,12,7,0,6,109,111,100,117,108,101,0,0,
12,8,0,6,109,111,100,117,108,101,0,0,15,10,3,0,
27,9,10,1,31,4,6,4,19,4,5,4,15,3,4,0,
12,6,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
13,5,6,0,12,6,0,5,99,108,101,97,110,0,0,0,
9,5,5,6,15,6,2,0,31,4,6,1,19,4,5,4,
15,2,4,0,12,4,0,1,68,0,0,0,12,7,0,6,
68,83,116,97,116,101,0,0,13,6,7,0,15,7,2,0,
15,8,1,0,31,5,7,2,19,5,6,5,14,4,5,0,
12,6,0,1,68,0,0,0,13,5,6,0,12,6,0,5,
98,101,103,105,110,0,0,0,9,5,5,6,11,6,0,0,
0,0,0,0,0,0,240,63,31,4,6,1,19,4,5,4,
12,6,0,2,100,111,0,0,13,5,6,0,15,6,3,0,
31,4,6,1,19,4,5,4,12,6,0,1,68,0,0,0,
13,5,6,0,12,6,0,3,101,110,100,0,9,5,5,6,
31,4,0,0,19,4,5,4,12,6,0,8,109,97,112,95,
116,97,103,115,0,0,0,0,13,5,6,0,31,4,0,0,
19,4,5,4,30,7,2,149,32,32,32,32,111,117,116,32,
61,32,68,46,111,117,116,59,32,68,32,61,32,78,111,110,
101,0,0,0,12,6,0,1,68,0,0,0,13,5,6,0,
19,4,5,4,12,6,0,1,68,0,0,0,13,5,6,0,
12,6,0,3,111,117,116,0,9,5,5,6,15,4,5,0,
12,5,0,1,68,0,0,0,28,6,0,0,14,5,6,0,
30,6,2,150,32,32,32,32,114,101,116,117,114,110,32,39,
39,46,106,111,105,110,40,111,117,116,41,0,12,6,0,0,
0,0,0,0,12,7,0,4,106,111,105,110,0,0,0,0,
9,6,6,7,15,7,4,0,31,5,7,1,19,5,6,5,
20,5,0,0,0,0,0,0,12,69,0,6,101,110,99,111,
100,101,0,0,14,69,68,0,0,0,0,0,
12,6,0,0,0,0,0,0,12,7,0,4,106,111,105,110,
0,0,0,0,9,6,6,7,15,7,4,0,31,5,7,1,
19,5,6,5,20,5,0,0,0,0,0,0,12,69,0,6,
101,110,99,111,100,101,0,0,14,69,68,0,0,0,0,0,
};
unsigned char tp_py2bc[] = {
44,11,0,0,30,3,0,1,105,109,112,111,114,116,32,115,
121,115,0,0,12,0,0,13,99,111,114,101,47,112,121,50,
98,99,46,112,121,0,0,0,33,0,0,0,12,0,0,1,
63,0,0,0,34,0,0,0,12,2,0,6,105,109,112,111,
114,116,0,0,13,1,2,0,12,2,0,3,115,121,115,0,
31,0,2,1,19,0,1,0,12,1,0,3,115,121,115,0,
14,1,0,0,30,8,0,2,105,102,32,110,111,116,32,34,
116,105,110,121,112,121,34,32,105,110,32,115,121,115,46,118,
101,114,115,105,111,110,58,0,12,2,0,3,115,121,115,0,
13,1,2,0,12,2,0,7,118,101,114,115,105,111,110,0,
9,1,1,2,12,2,0,6,116,105,110,121,112,121,0,0,
36,1,1,2,47,0,1,0,21,0,0,0,18,0,0,30,
30,6,0,3,32,32,32,32,102,114,111,109,32,98,111,111,
116,32,105,109,112,111,114,116,32,42,0,0,12,2,0,6,
105,109,112,111,114,116,0,0,13,1,2,0,12,2,0,4,
98,111,111,116,0,0,0,0,31,0,2,1,19,0,1,0,
12,3,0,5,109,101,114,103,101,0,0,0,13,2,3,0,
12,5,0,8,95,95,100,105,99,116,95,95,0,0,0,0,
13,3,5,0,15,4,0,0,31,1,3,2,19,1,2,1,
18,0,0,1,30,8,0,5,105,109,112,111,114,116,32,116,
111,107,101,110,105,122,101,44,112,97,114,115,101,44,101,110,
99,111,100,101,0,0,0,0,12,2,0,6,105,109,112,111,
114,116,0,0,13,1,2,0,12,2,0,8,116,111,107,101,
110,105,122,101,0,0,0,0,31,0,2,1,19,0,1,0,
12,1,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
14,1,0,0,12,2,0,6,105,109,112,111,114,116,0,0,
13,1,2,0,12,2,0,5,112,97,114,115,101,0,0,0,
31,0,2,1,19,0,1,0,12,1,0,5,112,97,114,115,
101,0,0,0,14,1,0,0,12,2,0,6,105,109,112,111,
114,116,0,0,13,1,2,0,12,2,0,6,101,110,99,111,
100,101,0,0,31,0,2,1,19,0,1,0,12,1,0,6,
101,110,99,111,100,101,0,0,14,1,0,0,30,6,0,7,
100,101,102,32,95,99,111,109,112,105,108,101,40,115,44,102,
110,97,109,101,41,58,0,0,16,0,0,101,44,11,0,0,
30,6,0,7,100,101,102,32,95,99,111,109,112,105,108,101,
40,115,44,102,110,97,109,101,41,58,0,0,12,1,0,13,
99,111,114,101,47,112,121,50,98,99,46,112,121,0,0,0,
33,1,0,0,12,1,0,8,95,99,111,109,112,105,108,101,
0,0,0,0,34,1,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,30,9,0,8,32,32,32,32,
116,111,107,101,110,115,32,61,32,116,111,107,101,110,105,122,
101,46,116,111,107,101,110,105,122,101,40,115,41,0,0,0,
44,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,
12,3,0,3,115,116,114,0,13,2,3,0,11,3,0,0,
0,0,0,0,0,0,240,63,31,1,3,1,19,1,2,1,
12,2,0,1,49,0,0,0,23,1,1,2,23,0,0,1,
21,0,0,0,18,0,0,23,12,2,0,6,105,109,112,111,
114,116,0,0,13,1,2,0,12,2,0,4,98,111,111,116,
0,0,0,0,31,0,2,1,19,0,1,0,12,3,0,5,
109,101,114,103,101,0,0,0,13,2,3,0,12,5,0,8,
95,95,100,105,99,116,95,95,0,0,0,0,13,3,5,0,
15,4,0,0,31,1,3,2,19,1,2,1,18,0,0,1,
12,2,0,6,105,109,112,111,114,116,0,0,13,1,2,0,
12,2,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
31,0,2,1,19,0,1,0,12,1,0,8,116,111,107,101,
110,105,122,101,0,0,0,0,14,1,0,0,12,2,0,6,
105,109,112,111,114,116,0,0,13,1,2,0,12,2,0,5,
112,97,114,115,101,0,0,0,31,0,2,1,19,0,1,0,
12,1,0,5,112,97,114,115,101,0,0,0,14,1,0,0,
12,2,0,6,105,109,112,111,114,116,0,0,13,1,2,0,
12,2,0,6,101,110,99,111,100,101,0,0,31,0,2,1,
19,0,1,0,12,1,0,6,101,110,99,111,100,101,0,0,
14,1,0,0,16,0,0,49,44,11,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,12,6,0,8,
116,111,107,101,110,105,122,101,0,0,0,0,13,5,6,0,
12,6,0,8,116,111,107,101,110,105,122,101,0,0,0,0,
13,5,6,0,12,6,0,8,116,111,107,101,110,105,122,101,
0,0,0,0,9,5,5,6,15,6,1,0,31,4,6,1,
19,4,5,4,15,3,4,0,30,8,0,9,32,32,32,32,
116,32,61,32,112,97,114,115,101,46,112,97,114,115,101,40,
115,44,116,111,107,101,110,115,41,0,0,0,12,7,0,5,
112,97,114,115,101,0,0,0,13,6,7,0,12,7,0,5,
112,97,114,115,101,0,0,0,9,6,6,7,15,7,1,0,
15,8,3,0,31,5,7,2,19,5,6,5,15,4,5,0,
30,9,0,10,32,32,32,32,114,32,61,32,101,110,99,111,
100,101,46,101,110,99,111,100,101,40,102,110,97,109,101,44,
115,44,116,41,0,0,0,0,12,8,0,6,101,110,99,111,
9,5,5,6,15,6,1,0,31,4,6,1,19,4,5,4,
15,3,4,0,12,7,0,5,112,97,114,115,101,0,0,0,
13,6,7,0,12,7,0,5,112,97,114,115,101,0,0,0,
9,6,6,7,15,7,1,0,15,8,3,0,31,5,7,2,
19,5,6,5,15,4,5,0,12,8,0,6,101,110,99,111,
100,101,0,0,13,7,8,0,12,8,0,6,101,110,99,111,
100,101,0,0,9,7,7,8,15,8,2,0,15,9,1,0,
15,10,4,0,31,6,8,3,19,6,7,6,15,5,6,0,
30,4,0,11,32,32,32,32,114,101,116,117,114,110,32,114,
0,0,0,0,20,5,0,0,0,0,0,0,12,1,0,8,
95,99,111,109,112,105,108,101,0,0,0,0,14,1,0,0,
30,5,0,13,100,101,102,32,95,105,109,112,111,114,116,40,
110,97,109,101,41,58,0,0,16,1,1,33,44,12,0,0,
30,5,0,13,100,101,102,32,95,105,109,112,111,114,116,40,
110,97,109,101,41,58,0,0,12,1,0,13,99,111,114,101,
47,112,121,50,98,99,46,112,121,0,0,0,33,1,0,0,
12,1,0,7,95,105,109,112,111,114,116,0,34,1,0,0,
28,2,0,0,9,1,0,2,30,6,0,14,32,32,32,32,
105,102,32,110,97,109,101,32,105,110,32,77,79,68,85,76,
69,83,58,0,12,3,0,7,77,79,68,85,76,69,83,0,
13,2,3,0,36,2,2,1,21,2,0,0,18,0,0,17,
30,8,0,15,32,32,32,32,32,32,32,32,114,101,116,117,
114,110,32,77,79,68,85,76,69,83,91,110,97,109,101,93,
0,0,0,0,12,3,0,7,77,79,68,85,76,69,83,0,
13,2,3,0,9,2,2,1,20,2,0,0,18,0,0,1,
30,5,0,16,32,32,32,32,112,121,32,61,32,110,97,109,
101,43,34,46,112,121,34,0,12,4,0,3,46,112,121,0,
1,3,1,4,15,2,3,0,30,6,0,17,32,32,32,32,
116,112,99,32,61,32,110,97,109,101,43,34,46,116,112,99,
34,0,0,0,12,5,0,4,46,116,112,99,0,0,0,0,
1,4,1,5,15,3,4,0,30,5,0,18,32,32,32,32,
105,102,32,101,120,105,115,116,115,40,112,121,41,58,0,0,
12,6,0,6,101,120,105,115,116,115,0,0,13,5,6,0,
15,6,2,0,31,4,6,1,19,4,5,4,21,4,0,0,
18,0,0,97,30,14,0,19,32,32,32,32,32,32,32,32,
105,102,32,110,111,116,32,101,120,105,115,116,115,40,116,112,
99,41,32,111,114,32,109,116,105,109,101,40,112,121,41,32,
62,32,109,116,105,109,101,40,116,112,99,41,58,0,0,0,
12,7,0,6,101,120,105,115,116,115,0,0,13,6,7,0,
15,7,3,0,31,5,7,1,19,5,6,5,47,4,5,0,
46,4,0,0,18,0,0,16,12,6,0,5,109,116,105,109,
101,0,0,0,13,5,6,0,15,6,3,0,31,4,6,1,
19,4,5,4,12,7,0,5,109,116,105,109,101,0,0,0,
13,6,7,0,15,7,2,0,31,5,7,1,19,5,6,5,
25,4,4,5,21,4,0,0,18,0,0,54,30,7,0,20,
32,32,32,32,32,32,32,32,32,32,32,32,115,32,61,32,
108,111,97,100,40,112,121,41,0,0,0,0,12,7,0,4,
108,111,97,100,0,0,0,0,13,6,7,0,15,7,2,0,
31,5,7,1,19,5,6,5,15,4,5,0,30,9,0,21,
32,32,32,32,32,32,32,32,32,32,32,32,99,111,100,101,
32,61,32,95,99,111,109,112,105,108,101,40,115,44,112,121,
41,0,0,0,12,8,0,8,95,99,111,109,112,105,108,101,
0,0,0,0,13,7,8,0,15,8,4,0,15,9,2,0,
31,6,8,2,19,6,7,6,15,5,6,0,30,7,0,22,
32,32,32,32,32,32,32,32,32,32,32,32,115,97,118,101,
40,116,112,99,44,99,111,100,101,41,0,0,12,8,0,4,
115,97,118,101,0,0,0,0,13,7,8,0,15,8,3,0,
15,9,5,0,31,6,8,2,19,6,7,6,18,0,0,1,
18,0,0,1,30,8,0,23,32,32,32,32,105,102,32,110,
111,116,32,101,120,105,115,116,115,40,116,112,99,41,58,32,
114,97,105,115,101,0,0,0,12,9,0,6,101,120,105,115,
116,115,0,0,13,8,9,0,15,9,3,0,31,7,9,1,
19,7,8,7,47,6,7,0,21,6,0,0,18,0,0,4,
28,6,0,0,37,6,0,0,18,0,0,1,30,6,0,24,
32,32,32,32,99,111,100,101,32,61,32,108,111,97,100,40,
116,112,99,41,0,0,0,0,12,8,0,4,108,111,97,100,
20,5,0,0,0,0,0,0,12,1,0,8,95,99,111,109,
112,105,108,101,0,0,0,0,14,1,0,0,16,1,0,155,
44,12,0,0,28,2,0,0,9,1,0,2,12,3,0,7,
77,79,68,85,76,69,83,0,13,2,3,0,36,2,2,1,
21,2,0,0,18,0,0,8,12,3,0,7,77,79,68,85,
76,69,83,0,13,2,3,0,9,2,2,1,20,2,0,0,
18,0,0,1,12,4,0,3,46,112,121,0,1,3,1,4,
15,2,3,0,12,5,0,4,46,116,112,99,0,0,0,0,
1,4,1,5,15,3,4,0,12,6,0,6,101,120,105,115,
116,115,0,0,13,5,6,0,15,6,2,0,31,4,6,1,
19,4,5,4,21,4,0,0,18,0,0,64,11,6,0,0,
0,0,0,0,0,0,240,63,11,4,0,0,0,0,0,0,
0,0,0,0,12,9,0,6,101,120,105,115,116,115,0,0,
13,8,9,0,15,9,3,0,31,7,9,1,19,7,8,7,
23,4,4,7,23,5,4,6,21,5,0,0,18,0,0,2,
18,0,0,16,12,8,0,5,109,116,105,109,101,0,0,0,
13,7,8,0,15,8,3,0,31,4,8,1,19,4,7,4,
12,9,0,5,109,116,105,109,101,0,0,0,13,8,9,0,
15,9,2,0,31,7,9,1,19,7,8,7,25,4,4,7,
21,4,0,0,18,0,0,28,12,7,0,4,108,111,97,100,
0,0,0,0,13,6,7,0,15,7,2,0,31,5,7,1,
19,5,6,5,15,4,5,0,12,8,0,8,95,99,111,109,
112,105,108,101,0,0,0,0,13,7,8,0,15,8,4,0,
15,9,2,0,31,6,8,2,19,6,7,6,15,5,6,0,
12,8,0,4,115,97,118,101,0,0,0,0,13,7,8,0,
15,8,3,0,15,9,5,0,31,6,8,2,19,6,7,6,
18,0,0,1,18,0,0,1,11,6,0,0,0,0,0,0,
0,0,0,0,12,9,0,6,101,120,105,115,116,115,0,0,
13,8,9,0,15,9,3,0,31,7,9,1,19,7,8,7,
23,6,6,7,21,6,0,0,18,0,0,4,28,6,0,0,
37,6,0,0,18,0,0,1,12,8,0,4,108,111,97,100,
0,0,0,0,13,7,8,0,15,8,3,0,31,6,8,1,
19,6,7,6,15,5,6,0,30,11,0,25,32,32,32,32,
103,32,61,32,123,39,95,95,110,97,109,101,95,95,39,58,
110,97,109,101,44,39,95,95,99,111,100,101,95,95,39,58,
99,111,100,101,125,0,0,0,12,8,0,8,95,95,110,97,
19,6,7,6,15,5,6,0,12,8,0,8,95,95,110,97,
109,101,95,95,0,0,0,0,15,9,1,0,12,10,0,8,
95,95,99,111,100,101,95,95,0,0,0,0,15,11,5,0,
26,7,8,4,15,6,7,0,30,6,0,26,32,32,32,32,
103,91,39,95,95,100,105,99,116,95,95,39,93,32,61,32,
103,0,0,0,12,7,0,8,95,95,100,105,99,116,95,95,
0,0,0,0,10,6,7,6,30,6,0,27,32,32,32,32,
77,79,68,85,76,69,83,91,110,97,109,101,93,32,61,32,
103,0,0,0,12,8,0,7,77,79,68,85,76,69,83,0,
13,7,8,0,10,7,1,6,30,5,0,28,32,32,32,32,
101,120,101,99,40,99,111,100,101,44,103,41,0,0,0,0,
26,7,8,4,15,6,7,0,12,7,0,8,95,95,100,105,
99,116,95,95,0,0,0,0,10,6,7,6,12,8,0,7,
77,79,68,85,76,69,83,0,13,7,8,0,10,7,1,6,
12,9,0,4,101,120,101,99,0,0,0,0,13,8,9,0,
15,9,5,0,15,10,6,0,31,7,9,2,19,7,8,7,
30,4,0,29,32,32,32,32,114,101,116,117,114,110,32,103,
0,0,0,0,20,6,0,0,0,0,0,0,12,2,0,7,
95,105,109,112,111,114,116,0,14,2,1,0,30,4,0,32,
100,101,102,32,95,105,110,105,116,40,41,58,0,0,0,0,
16,2,0,65,44,4,0,0,30,4,0,32,100,101,102,32,
95,105,110,105,116,40,41,58,0,0,0,0,12,1,0,13,
99,111,114,101,47,112,121,50,98,99,46,112,121,0,0,0,
33,1,0,0,12,1,0,5,95,105,110,105,116,0,0,0,
34,1,0,0,30,9,0,33,32,32,32,32,66,85,73,76,
84,73,78,83,91,39,99,111,109,112,105,108,101,39,93,32,
61,32,95,99,111,109,112,105,108,101,0,0,12,2,0,8,
66,85,73,76,84,73,78,83,0,0,0,0,13,1,2,0,
12,3,0,8,95,99,111,109,112,105,108,101,0,0,0,0,
13,2,3,0,12,3,0,7,99,111,109,112,105,108,101,0,
10,1,3,2,30,9,0,34,32,32,32,32,66,85,73,76,
84,73,78,83,91,39,105,109,112,111,114,116,39,93,32,61,
32,95,105,109,112,111,114,116,0,0,0,0,12,2,0,8,
66,85,73,76,84,73,78,83,0,0,0,0,13,1,2,0,
12,3,0,7,95,105,109,112,111,114,116,0,13,2,3,0,
12,3,0,6,105,109,112,111,114,116,0,0,10,1,3,2,
0,0,0,0,12,3,0,5,95,105,110,105,116,0,0,0,
14,3,2,0,30,8,0,36,100,101,102,32,105,109,112,111,
114,116,95,102,110,97,109,101,40,102,110,97,109,101,44,110,
97,109,101,41,58,0,0,0,16,3,0,125,44,10,0,0,
30,8,0,36,100,101,102,32,105,109,112,111,114,116,95,102,
110,97,109,101,40,102,110,97,109,101,44,110,97,109,101,41,
58,0,0,0,12,1,0,13,99,111,114,101,47,112,121,50,
98,99,46,112,121,0,0,0,33,1,0,0,12,1,0,12,
105,109,112,111,114,116,95,102,110,97,109,101,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,30,3,0,37,32,32,32,32,103,32,61,32,
123,125,0,0,26,4,0,0,15,3,4,0,30,7,0,38,
32,32,32,32,103,91,39,95,95,110,97,109,101,95,95,39,
93,32,61,32,110,97,109,101,0,0,0,0,12,4,0,8,
95,95,110,97,109,101,95,95,0,0,0,0,10,3,4,2,
30,6,0,39,32,32,32,32,77,79,68,85,76,69,83,91,
110,97,109,101,93,32,61,32,103,0,0,0,12,5,0,7,
77,79,68,85,76,69,83,0,13,4,5,0,10,4,2,3,
30,5,0,40,32,32,32,32,115,32,61,32,108,111,97,100,
40,102,110,97,109,101,41,0,12,7,0,4,108,111,97,100,
20,6,0,0,0,0,0,0,12,2,0,7,95,105,109,112,
111,114,116,0,14,2,1,0,16,2,0,30,44,4,0,0,
12,2,0,8,66,85,73,76,84,73,78,83,0,0,0,0,
13,1,2,0,12,3,0,8,95,99,111,109,112,105,108,101,
0,0,0,0,13,2,3,0,12,3,0,7,99,111,109,112,
105,108,101,0,10,1,3,2,12,2,0,8,66,85,73,76,
84,73,78,83,0,0,0,0,13,1,2,0,12,3,0,7,
95,105,109,112,111,114,116,0,13,2,3,0,12,3,0,6,
105,109,112,111,114,116,0,0,10,1,3,2,0,0,0,0,
12,3,0,5,95,105,110,105,116,0,0,0,14,3,2,0,
16,3,0,51,44,10,0,0,28,2,0,0,9,1,0,2,
28,3,0,0,9,2,0,3,26,4,0,0,15,3,4,0,
12,4,0,8,95,95,110,97,109,101,95,95,0,0,0,0,
10,3,4,2,12,5,0,7,77,79,68,85,76,69,83,0,
13,4,5,0,10,4,2,3,12,7,0,4,108,111,97,100,
0,0,0,0,13,6,7,0,15,7,1,0,31,5,7,1,
19,5,6,5,15,4,5,0,30,8,0,41,32,32,32,32,
99,111,100,101,32,61,32,95,99,111,109,112,105,108,101,40,
115,44,102,110,97,109,101,41,0,0,0,0,12,8,0,8,
95,99,111,109,112,105,108,101,0,0,0,0,13,7,8,0,
15,8,4,0,15,9,1,0,31,6,8,2,19,6,7,6,
15,5,6,0,30,7,0,42,32,32,32,32,103,91,39,95,
95,99,111,100,101,95,95,39,93,32,61,32,99,111,100,101,
0,0,0,0,12,6,0,8,95,95,99,111,100,101,95,95,
0,0,0,0,10,3,6,5,30,5,0,43,32,32,32,32,
101,120,101,99,40,99,111,100,101,44,103,41,0,0,0,0,
12,8,0,4,101,120,101,99,0,0,0,0,13,7,8,0,
15,8,5,0,15,9,3,0,31,6,8,2,19,6,7,6,
30,4,0,44,32,32,32,32,114,101,116,117,114,110,32,103,
0,0,0,0,20,3,0,0,0,0,0,0,12,4,0,12,
19,5,6,5,15,4,5,0,12,8,0,8,95,99,111,109,
112,105,108,101,0,0,0,0,13,7,8,0,15,8,4,0,
15,9,1,0,31,6,8,2,19,6,7,6,15,5,6,0,
12,6,0,8,95,95,99,111,100,101,95,95,0,0,0,0,
10,3,6,5,12,8,0,4,101,120,101,99,0,0,0,0,
13,7,8,0,15,8,5,0,15,9,3,0,31,6,8,2,
19,6,7,6,20,3,0,0,0,0,0,0,12,4,0,12,
105,109,112,111,114,116,95,102,110,97,109,101,0,0,0,0,
14,4,3,0,30,4,0,46,100,101,102,32,116,105,110,121,
112,121,40,41,58,0,0,0,16,4,0,51,44,6,0,0,
30,4,0,46,100,101,102,32,116,105,110,121,112,121,40,41,
58,0,0,0,12,1,0,13,99,111,114,101,47,112,121,50,
98,99,46,112,121,0,0,0,33,1,0,0,12,1,0,6,
116,105,110,121,112,121,0,0,34,1,0,0,30,11,0,47,
32,32,32,32,114,101,116,117,114,110,32,105,109,112,111,114,
116,95,102,110,97,109,101,40,65,82,71,86,91,48,93,44,
39,95,95,109,97,105,110,95,95,39,41,0,12,3,0,12,
14,4,3,0,16,4,0,24,44,6,0,0,12,3,0,12,
105,109,112,111,114,116,95,102,110,97,109,101,0,0,0,0,
13,2,3,0,12,5,0,4,65,82,71,86,0,0,0,0,
13,3,5,0,11,5,0,0,0,0,0,0,0,0,0,0,
6680,90 → 3783,23
9,3,3,5,12,4,0,8,95,95,109,97,105,110,95,95,
0,0,0,0,31,1,3,2,19,1,2,1,20,1,0,0,
0,0,0,0,12,5,0,6,116,105,110,121,112,121,0,0,
14,5,4,0,30,5,0,49,100,101,102,32,109,97,105,110,
40,115,114,99,44,100,101,115,116,41,58,0,16,5,0,68,
44,9,0,0,30,5,0,49,100,101,102,32,109,97,105,110,
40,115,114,99,44,100,101,115,116,41,58,0,12,1,0,13,
99,111,114,101,47,112,121,50,98,99,46,112,121,0,0,0,
33,1,0,0,12,1,0,4,109,97,105,110,0,0,0,0,
34,1,0,0,28,2,0,0,9,1,0,2,28,3,0,0,
9,2,0,3,30,5,0,50,32,32,32,32,115,32,61,32,
108,111,97,100,40,115,114,99,41,0,0,0,12,6,0,4,
14,5,4,0,16,5,0,33,44,9,0,0,28,2,0,0,
9,1,0,2,28,3,0,0,9,2,0,3,12,6,0,4,
108,111,97,100,0,0,0,0,13,5,6,0,15,6,1,0,
31,4,6,1,19,4,5,4,15,3,4,0,30,6,0,51,
32,32,32,32,114,32,61,32,95,99,111,109,112,105,108,101,
40,115,44,115,114,99,41,0,12,7,0,8,95,99,111,109,
112,105,108,101,0,0,0,0,13,6,7,0,15,7,3,0,
15,8,1,0,31,5,7,2,19,5,6,5,15,4,5,0,
30,5,0,52,32,32,32,32,115,97,118,101,40,100,101,115,
116,44,114,41,0,0,0,0,12,7,0,4,115,97,118,101,
0,0,0,0,13,6,7,0,15,7,2,0,15,8,4,0,
31,5,7,2,19,5,6,5,0,0,0,0,12,6,0,4,
109,97,105,110,0,0,0,0,14,6,5,0,30,7,0,54,
105,102,32,95,95,110,97,109,101,95,95,32,61,61,32,39,
95,95,109,97,105,110,95,95,39,58,0,0,12,7,0,8,
95,95,110,97,109,101,95,95,0,0,0,0,13,6,7,0,
12,7,0,8,95,95,109,97,105,110,95,95,0,0,0,0,
23,6,6,7,21,6,0,0,18,0,0,242,30,7,0,55,
32,32,32,32,109,97,105,110,40,65,82,71,86,91,49,93,
44,65,82,71,86,91,50,93,41,0,0,0,12,8,0,4,
109,97,105,110,0,0,0,0,13,7,8,0,12,10,0,4,
65,82,71,86,0,0,0,0,13,8,10,0,11,10,0,0,
0,0,0,0,0,0,240,63,9,8,8,10,12,10,0,4,
65,82,71,86,0,0,0,0,13,9,10,0,11,10,0,0,
0,0,0,0,0,0,0,64,9,9,9,10,31,6,8,2,
19,6,7,6,30,7,0,56,32,32,32,32,109,97,105,110,
40,65,82,71,86,91,49,93,44,65,82,71,86,91,50,93,
41,0,0,0,12,8,0,4,109,97,105,110,0,0,0,0,
13,7,8,0,12,10,0,4,65,82,71,86,0,0,0,0,
13,8,10,0,11,10,0,0,0,0,0,0,0,0,240,63,
9,8,8,10,12,10,0,4,65,82,71,86,0,0,0,0,
13,9,10,0,11,10,0,0,0,0,0,0,0,0,0,64,
9,9,9,10,31,6,8,2,19,6,7,6,30,7,0,57,
32,32,32,32,109,97,105,110,40,65,82,71,86,91,49,93,
44,65,82,71,86,91,50,93,41,0,0,0,12,8,0,4,
109,97,105,110,0,0,0,0,13,7,8,0,12,10,0,4,
65,82,71,86,0,0,0,0,13,8,10,0,11,10,0,0,
0,0,0,0,0,0,240,63,9,8,8,10,12,10,0,4,
65,82,71,86,0,0,0,0,13,9,10,0,11,10,0,0,
0,0,0,0,0,0,0,64,9,9,9,10,31,6,8,2,
19,6,7,6,30,7,0,58,32,32,32,32,109,97,105,110,
40,65,82,71,86,91,49,93,44,65,82,71,86,91,50,93,
41,0,0,0,12,8,0,4,109,97,105,110,0,0,0,0,
13,7,8,0,12,10,0,4,65,82,71,86,0,0,0,0,
13,8,10,0,11,10,0,0,0,0,0,0,0,0,240,63,
9,8,8,10,12,10,0,4,65,82,71,86,0,0,0,0,
13,9,10,0,11,10,0,0,0,0,0,0,0,0,0,64,
9,9,9,10,31,6,8,2,19,6,7,6,30,7,0,59,
32,32,32,32,109,97,105,110,40,65,82,71,86,91,49,93,
44,65,82,71,86,91,50,93,41,0,0,0,12,8,0,4,
109,97,105,110,0,0,0,0,13,7,8,0,12,10,0,4,
65,82,71,86,0,0,0,0,13,8,10,0,11,10,0,0,
0,0,0,0,0,0,240,63,9,8,8,10,12,10,0,4,
65,82,71,86,0,0,0,0,13,9,10,0,11,10,0,0,
0,0,0,0,0,0,0,64,9,9,9,10,31,6,8,2,
19,6,7,6,30,7,0,60,32,32,32,32,109,97,105,110,
40,65,82,71,86,91,49,93,44,65,82,71,86,91,50,93,
41,0,0,0,12,8,0,4,109,97,105,110,0,0,0,0,
13,7,8,0,12,10,0,4,65,82,71,86,0,0,0,0,
13,8,10,0,11,10,0,0,0,0,0,0,0,0,240,63,
9,8,8,10,12,10,0,4,65,82,71,86,0,0,0,0,
13,9,10,0,11,10,0,0,0,0,0,0,0,0,0,64,
9,9,9,10,31,6,8,2,19,6,7,6,30,7,0,61,
32,32,32,32,109,97,105,110,40,65,82,71,86,91,49,93,
44,65,82,71,86,91,50,93,41,0,0,0,12,8,0,4,
109,97,105,110,0,0,0,0,13,7,8,0,12,10,0,4,
65,82,71,86,0,0,0,0,13,8,10,0,11,10,0,0,
0,0,0,0,0,0,240,63,9,8,8,10,12,10,0,4,
65,82,71,86,0,0,0,0,13,9,10,0,11,10,0,0,
0,0,0,0,0,0,0,64,9,9,9,10,31,6,8,2,
19,6,7,6,30,7,0,62,32,32,32,32,109,97,105,110,
40,65,82,71,86,91,49,93,44,65,82,71,86,91,50,93,
41,0,0,0,12,8,0,4,109,97,105,110,0,0,0,0,
13,7,8,0,12,10,0,4,65,82,71,86,0,0,0,0,
13,8,10,0,11,10,0,0,0,0,0,0,0,0,240,63,
9,8,8,10,12,10,0,4,65,82,71,86,0,0,0,0,
13,9,10,0,11,10,0,0,0,0,0,0,0,0,0,64,
9,9,9,10,31,6,8,2,19,6,7,6,18,0,0,1,
0,0,0,0,
31,4,6,1,19,4,5,4,15,3,4,0,12,7,0,8,
95,99,111,109,112,105,108,101,0,0,0,0,13,6,7,0,
15,7,3,0,15,8,1,0,31,5,7,2,19,5,6,5,
15,4,5,0,12,7,0,4,115,97,118,101,0,0,0,0,
13,6,7,0,15,7,2,0,15,8,4,0,31,5,7,2,
19,5,6,5,0,0,0,0,12,6,0,4,109,97,105,110,
0,0,0,0,14,6,5,0,12,7,0,8,95,95,110,97,
109,101,95,95,0,0,0,0,13,6,7,0,12,7,0,8,
95,95,109,97,105,110,95,95,0,0,0,0,23,6,6,7,
21,6,0,0,18,0,0,24,12,8,0,4,109,97,105,110,
0,0,0,0,13,7,8,0,12,10,0,4,65,82,71,86,
0,0,0,0,13,8,10,0,11,10,0,0,0,0,0,0,
0,0,240,63,9,8,8,10,12,10,0,4,65,82,71,86,
0,0,0,0,13,9,10,0,11,10,0,0,0,0,0,0,
0,0,0,64,9,9,9,10,31,6,8,2,19,6,7,6,
18,0,0,1,0,0,0,0,
};
/programs/develop/tinypy/tinypy/boot.py
0,0 → 1,46
def _boot_init():
global FTYPE
f = open('tp.h','r').read()
FTYPE = 'f'
if 'double tp_num' in f: FTYPE = 'd'
import sys
global ARGV
ARGV = sys.argv
_boot_init()
 
def merge(a,b):
if isinstance(a,dict):
for k in b: a[k] = b[k]
else:
for k in b: setattr(a,k,b[k])
 
def number(v):
if type(v) is str and v[0:2] == '0x':
v = int(v[2:],16)
return float(v)
 
def istype(v,t):
if t == 'string': return isinstance(v,str)
elif t == 'list': return (isinstance(v,list) or isinstance(v,tuple))
elif t == 'dict': return isinstance(v,dict)
elif t == 'number': return (isinstance(v,float) or isinstance(v,int))
raise '?'
 
def fpack(v):
import struct
return struct.pack(FTYPE,v)
 
def system(cmd):
import os
return os.system(cmd)
 
def load(fname):
f = open(fname,'rb')
r = f.read()
f.close()
return r
 
def save(fname,v):
f = open(fname,'wb')
f.write(v)
f.close()
/programs/develop/tinypy/tinypy/dict.c
0,0 → 1,169
int tp_lua_hash(void const *v,int l) {
int i,step = (l>>5)+1;
int h = l + (l >= 4?*(int*)v:0);
for (i=l; i>=step; i-=step) {
h = h^((h<<5)+(h>>2)+((unsigned char *)v)[i-1]);
}
return h;
}
void _tp_dict_free(_tp_dict *self) {
tp_free(self->items);
tp_free(self);
}
 
/* void _tp_dict_reset(_tp_dict *self) {
memset(self->items,0,self->alloc*sizeof(tp_item));
self->len = 0;
self->used = 0;
self->cur = 0;
}*/
 
int tp_hash(TP,tp_obj v) {
switch (v.type) {
case TP_NONE: return 0;
case TP_NUMBER: return tp_lua_hash(&v.number.val,sizeof(tp_num));
case TP_STRING: return tp_lua_hash(v.string.val,v.string.len);
case TP_DICT: return tp_lua_hash(&v.dict.val,sizeof(void*));
case TP_LIST: {
int r = v.list.val->len; int n; for(n=0; n<v.list.val->len; n++) {
tp_obj vv = v.list.val->items[n]; r += vv.type != TP_LIST?tp_hash(tp,v.list.val->items[n]):tp_lua_hash(&vv.list.val,sizeof(void*)); } return r;
}
case TP_FNC: return tp_lua_hash(&v.fnc.info,sizeof(void*));
case TP_DATA: return tp_lua_hash(&v.data.val,sizeof(void*));
}
tp_raise(0,"tp_hash(%s)",TP_CSTR(v));
}
 
void _tp_dict_hash_set(TP,_tp_dict *self, int hash, tp_obj k, tp_obj v) {
tp_item item;
int i,idx = hash&self->mask;
for (i=idx; i<idx+self->alloc; i++) {
int n = i&self->mask;
if (self->items[n].used > 0) { continue; }
if (self->items[n].used == 0) { self->used += 1; }
item.used = 1;
item.hash = hash;
item.key = k;
item.val = v;
self->items[n] = item;
self->len += 1;
return;
}
tp_raise(,"_tp_dict_hash_set(%d,%d,%s,%s)",self,hash,TP_CSTR(k),TP_CSTR(v));
}
 
void _tp_dict_tp_realloc(TP,_tp_dict *self,int len) {
tp_item *items = self->items;
int i,alloc = self->alloc;
len = _tp_max(8,len);
 
self->items = (tp_item*)tp_malloc(len*sizeof(tp_item));
self->alloc = len; self->mask = len-1;
self->len = 0; self->used = 0;
 
for (i=0; i<alloc; i++) {
if (items[i].used != 1) { continue; }
_tp_dict_hash_set(tp,self,items[i].hash,items[i].key,items[i].val);
}
tp_free(items);
}
 
int _tp_dict_hash_find(TP,_tp_dict *self, int hash, tp_obj k) {
int i,idx = hash&self->mask;
for (i=idx; i<idx+self->alloc; i++) {
int n = i&self->mask;
if (self->items[n].used == 0) { break; }
if (self->items[n].used < 0) { continue; }
if (self->items[n].hash != hash) { continue; }
if (tp_cmp(tp,self->items[n].key,k) != 0) { continue; }
return n;
}
return -1;
}
int _tp_dict_find(TP,_tp_dict *self,tp_obj k) {
return _tp_dict_hash_find(tp,self,tp_hash(tp,k),k);
}
 
void _tp_dict_setx(TP,_tp_dict *self,tp_obj k, tp_obj v) {
int hash = tp_hash(tp,k); int n = _tp_dict_hash_find(tp,self,hash,k);
if (n == -1) {
if (self->len >= (self->alloc/2)) {
_tp_dict_tp_realloc(tp,self,self->alloc*2);
} else if (self->used >= (self->alloc*3/4)) {
_tp_dict_tp_realloc(tp,self,self->alloc);
}
_tp_dict_hash_set(tp,self,hash,k,v);
} else {
self->items[n].val = v;
}
}
 
void _tp_dict_set(TP,_tp_dict *self,tp_obj k, tp_obj v) {
_tp_dict_setx(tp,self,k,v);
tp_grey(tp,k); tp_grey(tp,v);
}
 
tp_obj _tp_dict_get(TP,_tp_dict *self,tp_obj k, const char *error) {
int n = _tp_dict_find(tp,self,k);
if (n < 0) {
tp_raise(tp_None,"%s: KeyError: %s\n",error,TP_CSTR(k));
}
return self->items[n].val;
}
 
void _tp_dict_del(TP,_tp_dict *self,tp_obj k, const char *error) {
int n = _tp_dict_find(tp,self,k);
if (n < 0) { tp_raise(,"%s: KeyError: %s\n",error,TP_CSTR(k)); }
self->items[n].used = -1;
self->len -= 1;
}
 
_tp_dict *_tp_dict_new(void) {
_tp_dict *self = (_tp_dict*)tp_malloc(sizeof(_tp_dict));
return self;
}
tp_obj _tp_dict_copy(TP,tp_obj rr) {
tp_obj obj = {TP_DICT};
_tp_dict *o = rr.dict.val;
_tp_dict *r = _tp_dict_new();
*r = *o; r->gci = 0;
r->items = (tp_item*)tp_malloc(sizeof(tp_item)*o->alloc);
memcpy(r->items,o->items,sizeof(tp_item)*o->alloc);
obj.dict.val = r;
return tp_track(tp,obj);
}
 
int _tp_dict_next(TP,_tp_dict *self) {
if (!self->len) { tp_raise(0,"_tp_dict_next(...)",0); }
while (1) {
self->cur = ((self->cur + 1) & self->mask);
if (self->items[self->cur].used > 0) {
return self->cur;
}
}
}
 
tp_obj tp_merge(TP) {
tp_obj self = TP_OBJ();
tp_obj v = TP_OBJ();
int i; for (i=0; i<v.dict.val->len; i++) {
int n = _tp_dict_next(tp,v.dict.val);
_tp_dict_set(tp,self.dict.val,
v.dict.val->items[n].key,v.dict.val->items[n].val);
}
return tp_None;
}
 
volatile tp_obj tp_dict(TP) {
tp_obj r = {TP_DICT};
r.dict.val = _tp_dict_new();
return tp ? tp_track(tp,r) : r;
}
 
tp_obj tp_dict_n(TP,int n, tp_obj* argv) {
tp_obj r = tp_dict(tp);
int i; for (i=0; i<n; i++) { tp_set(tp,r,argv[i*2],argv[i*2+1]); }
return r;
}
 
 
/programs/develop/tinypy/tinypy/encode.py
0,0 → 1,699
import tokenize
from tokenize import Token
if '.' in str(1.0):
from boot import *
 
EOF,ADD,SUB,MUL,DIV,POW,AND,OR,CMP,GET,SET,NUMBER,STRING,GGET,GSET,MOVE,DEF,PASS,JUMP,CALL,RETURN,IF,DEBUG,EQ,LE,LT,DICT,LIST,NONE,LEN,POS,PARAMS,IGET,FILE,NAME,NE,HAS,RAISE,SETJMP,MOD,LSH,RSH,ITER,DEL,REGS = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44
 
class DState:
def __init__(self,code,fname):
self.code, self.fname = code,fname
self.lines = self.code.split('\n')
 
self.stack,self.out,self._scopei,self.tstack,self._tagi,self.data = [],[('tag','EOF')],0,[],0,{}
self.error = False
def begin(self,gbl=False):
if len(self.stack): self.stack.append((self.vars,self.r2n,self.n2r,self._tmpi,self.mreg,self.snum,self._globals,self.lineno,self.globals,self.cregs,self.tmpc))
else: self.stack.append(None)
self.vars,self.r2n,self.n2r,self._tmpi,self.mreg,self.snum,self._globals,self.lineno,self.globals,self.cregs,self.tmpc = [],{},{},0,0,str(self._scopei),gbl,-1,[],['regs'],0
self._scopei += 1
insert(self.cregs)
def end(self):
self.cregs.append(self.mreg)
code(EOF)
# This next line forces the encoder to
# throw an exception if any tmp regs
# were leaked within the frame
assert(self.tmpc == 0) #REG
if len(self.stack) > 1:
self.vars,self.r2n,self.n2r,self._tmpi,self.mreg,self.snum,self._globals,self.lineno,self.globals,self.cregs,self.tmpc = self.stack.pop()
else: self.stack.pop()
 
 
def insert(v): D.out.append(v)
def write(v):
if istype(v,'list'):
insert(v)
return
for n in range(0,len(v),4):
insert(('data',v[n:n+4]))
def setpos(v):
if '-nopos' in ARGV: return
line,x = v
if line == D.lineno: return
text = D.lines[line-1]
D.lineno = line
val = text + "\0"*(4-len(text)%4)
code_16(POS,len(val)/4,line)
write(val)
def code(i,a=0,b=0,c=0):
if not istype(i,'number'): raise
if not istype(a,'number'): raise
if not istype(b,'number'): raise
if not istype(c,'number'): raise
write(('code',i,a,b,c))
def code_16(i,a,b):
if b < 0: b += 0x8000
code(i,a,(b&0xff00)>>8,(b&0xff)>>0)
def get_code16(i,a,b):
return ('code',i,a,(b&0xff00)>>8,(b&0xff)>>0)
 
def _do_string(v,r=None):
r = get_tmp(r)
val = v + "\0"*(4-len(v)%4)
code_16(STRING,r,len(v))
write(val)
return r
def do_string(t,r=None):
return _do_string(t.val,r)
 
def _do_number(v,r=None):
r = get_tmp(r)
code(NUMBER,r,0,0)
write(fpack(number(v)))
return r
def do_number(t,r=None):
return _do_number(t.val,r)
 
def get_tag():
k = str(D._tagi)
D._tagi += 1
return k
def stack_tag():
k = get_tag()
D.tstack.append(k)
return k
def pop_tag():
D.tstack.pop()
 
def tag(*t):
t = D.snum+':'+':'.join([str(v) for v in t])
insert(('tag',t))
def jump(*t):
t = D.snum+':'+':'.join([str(v) for v in t])
insert(('jump',t))
def setjmp(*t):
t = D.snum+':'+':'.join([str(v) for v in t])
insert(('setjmp',t))
def fnc(*t):
t = D.snum+':'+':'.join([str(v) for v in t])
r = get_reg(t)
insert(('fnc',r,t))
return r
 
def map_tags():
tags = {}
out = []
n = 0
for item in D.out:
if item[0] == 'tag':
tags[item[1]] = n
continue
if item[0] == 'regs':
out.append(get_code16(REGS,item[1],0))
n += 1
continue
out.append(item)
n += 1
for n in range(0,len(out)):
item = out[n]
if item[0] == 'jump':
out[n] = get_code16(JUMP,0,tags[item[1]]-n)
elif item[0] == 'setjmp':
out[n] = get_code16(SETJMP,0,tags[item[1]]-n)
elif item[0] == 'fnc':
out[n] = get_code16(DEF,item[1],tags[item[2]]-n)
for n in range(0,len(out)):
item = out[n]
if item[0] == 'data':
out[n] = item[1]
elif item[0] == 'code':
i,a,b,c = item[1:]
out[n] = chr(i)+chr(a)+chr(b)+chr(c)
else:
raise str(('huh?',item))
if len(out[n]) != 4:
raise ('code '+str(n)+' is wrong length '+str(len(out[n])))
D.out = out
 
def get_tmp(r=None):
if r != None: return r
return get_tmps(1)[0]
def get_tmps(t):
rs = alloc(t)
regs = range(rs,rs+t)
for r in regs:
set_reg(r,"$"+str(D._tmpi))
D._tmpi += 1
D.tmpc += t #REG
return regs
def alloc(t):
s = ''.join(["01"[r in D.r2n] for r in range(0,min(256,D.mreg+t))])
return s.index('0'*t)
def is_tmp(r):
if r is None: return False
return (D.r2n[r][0] == '$')
def un_tmp(r):
n = D.r2n[r]
free_reg(r)
set_reg(r,'*'+n)
def free_tmp(r):
if is_tmp(r): free_reg(r)
return r
def free_tmps(r):
for k in r: free_tmp(k)
def get_reg(n):
if n not in D.n2r:
set_reg(alloc(1),n)
return D.n2r[n]
#def get_clean_reg(n):
#if n in D.n2r: raise
#set_reg(D.mreg,n)
#return D.n2r[n]
def set_reg(r,n):
D.n2r[n] = r; D.r2n[r] = n
D.mreg = max(D.mreg,r+1)
def free_reg(r):
if is_tmp(r): D.tmpc -= 1
n = D.r2n[r]; del D.r2n[r]; del D.n2r[n]
 
def imanage(orig,fnc):
items = orig.items
orig.val = orig.val[:-1]
t = Token(orig.pos,'symbol','=',[items[0],orig])
return fnc(t)
 
def infix(i,tb,tc,r=None):
r = get_tmp(r)
b,c = do(tb,r),do(tc)
code(i,r,b,c)
if r != b: free_tmp(b)
free_tmp(c)
return r
def ss_infix(ss,i,tb,tc,r=None):
r = get_tmp(r)
r2 = get_tmp()
ss = _do_number(ss)
t = get_tag()
r = do(tb,r)
code(EQ,r2,r,ss)
code(IF,r2)
jump(t,'else')
jump(t,'end')
tag(t,'else')
r = do(tc,r)
tag(t,'end')
free_tmp(r2) #REG
free_tmp(ss) #REG
return r
 
def _do_none(r=None):
r = get_tmp(r)
code(NONE,r)
return r
 
def do_symbol(t,r=None):
sets = ['=']
isets = ['+=','-=','*=','/=']
cmps = ['<','>','<=','>=','==','!=']
metas = {
'+':ADD,'*':MUL,'/':DIV,'**':POW,
'-':SUB,'and':AND,'or':OR,
'%':MOD,'>>':RSH,'<<':LSH,
'&':AND,'|':OR,
}
if t.val == 'None': return _do_none(r)
if t.val == 'True':
return _do_number('1',r)
if t.val == 'False':
return _do_number('0',r)
items = t.items
 
if t.val in ['and','or']:
ss = int(t.val == 'or')
return ss_infix(ss,metas[t.val],items[0],items[1],r)
if t.val in isets:
return imanage(t,do_symbol)
if t.val == 'is':
return infix(EQ,items[0],items[1],r)
if t.val == 'isnot':
return infix(CMP,items[0],items[1],r)
if t.val == 'not':
return infix(EQ,Token(t.pos,'number',0),items[0],r)
if t.val == 'in':
return infix(HAS,items[1],items[0],r)
if t.val == 'notin':
r = infix(HAS,items[1],items[0],r)
zero = _do_number('0')
code(EQ,r,r,free_tmp(zero))
return r
if t.val in sets:
return do_set_ctx(items[0],items[1]);
elif t.val in cmps:
b,c = items[0],items[1]
v = t.val
if v[0] in ('>','>='):
b,c,v = c,b,'<'+v[1:]
cd = EQ
if v == '<': cd = LT
if v == '<=': cd = LE
if v == '!=': cd = NE
return infix(cd,b,c,r)
else:
return infix(metas[t.val],items[0],items[1],r)
 
def do_set_ctx(k,v):
if k.type == 'name':
if (D._globals and k.val not in D.vars) or (k.val in D.globals):
c = do_string(k)
b = do(v)
code(GSET,c,b)
free_tmp(c)
free_tmp(b)
return
a = do_local(k)
b = do(v)
code(MOVE,a,b)
free_tmp(b)
return a
elif k.type in ('tuple','list'):
if v.type in ('tuple','list'):
n,tmps = 0,[]
for kk in k.items:
vv = v.items[n]
tmp = get_tmp(); tmps.append(tmp)
r = do(vv)
code(MOVE,tmp,r)
free_tmp(r) #REG
n+=1
n = 0
for kk in k.items:
vv = v.items[n]
tmp = tmps[n]
free_tmp(do_set_ctx(kk,Token(vv.pos,'reg',tmp))) #REG
n += 1
return
 
r = do(v); un_tmp(r)
n, tmp = 0, Token(v.pos,'reg',r)
for tt in k.items:
free_tmp(do_set_ctx(tt,Token(tmp.pos,'get',None,[tmp,Token(tmp.pos,'number',str(n))]))) #REG
n += 1
free_reg(r)
return
r = do(k.items[0])
rr = do(v)
tmp = do(k.items[1])
code(SET,r,tmp,rr)
free_tmp(r) #REG
free_tmp(tmp) #REG
return rr
 
def manage_seq(i,a,items,sav=0):
l = max(sav,len(items))
n,tmps = 0,get_tmps(l)
for tt in items:
r = tmps[n]
b = do(tt,r)
if r != b:
code(MOVE,r,b)
free_tmp(b)
n +=1
if not len(tmps):
code(i,a,0,0)
return 0
code(i,a,tmps[0],len(items))
free_tmps(tmps[sav:])
return tmps[0]
 
def p_filter(items):
a,b,c,d = [],[],None,None
for t in items:
if t.type == 'symbol' and t.val == '=': b.append(t)
elif t.type == 'args': c = t
elif t.type == 'nargs': d = t
else: a.append(t)
return a,b,c,d
 
def do_import(t):
for mod in t.items:
mod.type = 'string'
v = do_call(Token(t.pos,'call',None,[
Token(t.pos,'name','import'),
mod]))
mod.type = 'name'
do_set_ctx(mod,Token(t.pos,'reg',v))
def do_from(t):
mod = t.items[0]
mod.type = 'string'
v = do(Token(t.pos,'call',None,[
Token(t.pos,'name','import'),
mod]))
item = t.items[1]
if item.val == '*':
free_tmp(do(Token(t.pos,'call',None,[
Token(t.pos,'name','merge'),
Token(t.pos,'name','__dict__'),
Token(t.pos,'reg',v)]))) #REG
else:
item.type = 'string'
free_tmp(do_set_ctx(
Token(t.pos,'get',None,[ Token(t.pos,'name','__dict__'),item]),
Token(t.pos,'get',None,[ Token(t.pos,'reg',v),item])
)) #REG
 
def do_globals(t):
for t in t.items:
if t.val not in D.globals:
D.globals.append(t.val)
def do_del(tt):
for t in tt.items:
r = do(t.items[0])
r2 = do(t.items[1])
code(DEL,r,r2)
free_tmp(r); free_tmp(r2) #REG
 
def do_call(t,r=None):
r = get_tmp(r)
items = t.items
fnc = do(items[0])
a,b,c,d = p_filter(t.items[1:])
e = None
if len(b) != 0 or d != None:
e = do(Token(t.pos,'dict',None,[])); un_tmp(e);
for p in b:
p.items[0].type = 'string'
t1,t2 = do(p.items[0]),do(p.items[1])
code(SET,e,t1,t2)
free_tmp(t1); free_tmp(t2) #REG
if d: free_tmp(do(Token(t.pos,'call',None,[Token(t.pos,'name','merge'),Token(t.pos,'reg',e),d.items[0]]))) #REG
manage_seq(PARAMS,r,a)
if c != None:
t1,t2 = _do_string('*'),do(c.items[0])
code(SET,r,t1,t2)
free_tmp(t1); free_tmp(t2) #REG
if e != None:
t1 = _do_none()
code(SET,r,t1,e)
free_tmp(t1) #REG
code(CALL,r,fnc,r)
free_tmp(fnc) #REG
return r
 
def do_name(t,r=None):
if t.val in D.vars:
return do_local(t,r)
r = get_tmp(r)
c = do_string(t)
code(GGET,r,c)
free_tmp(c)
return r
 
def do_local(t,r=None):
if t.val not in D.vars:
D.vars.append(t.val)
return get_reg(t.val)
 
def do_def(tok,kls=None):
items = tok.items
 
t = get_tag()
rf = fnc(t,'end')
 
D.begin()
setpos(tok.pos)
r = do_local(Token(tok.pos,'name','__params'))
do_info(items[0].val)
a,b,c,d = p_filter(items[1].items)
for p in a:
v = do_local(p)
tmp = _do_none()
code(GET,v,r,tmp)
free_tmp(tmp) #REG
for p in b:
v = do_local(p.items[0])
do(p.items[1],v)
tmp = _do_none()
code(IGET,v,r,tmp)
free_tmp(tmp) #REG
if c != None:
v = do_local(c.items[0])
tmp = _do_string('*')
code(GET,v,r,tmp)
free_tmp(tmp) #REG
if d != None:
e = do_local(d.items[0])
code(DICT,e,0,0)
tmp = _do_none()
code(IGET,e,r,tmp)
free_tmp(tmp) #REG
free_tmp(do(items[2])) #REG
D.end()
 
tag(t,'end')
 
if kls == None:
if D._globals: do_globals(Token(tok.pos,0,0,[items[0]]))
r = do_set_ctx(items[0],Token(tok.pos,'reg',rf))
else:
rn = do_string(items[0])
code(SET,kls,rn,rf)
free_tmp(rn)
 
free_tmp(rf)
 
def do_class(t):
tok = t
items = t.items
parent = None
if items[0].type == 'name':
name = items[0].val
else:
name = items[0].items[0].val
parent = items[0].items[1].val
 
kls = do(Token(t.pos,'dict',0,[]))
ts = _do_string(name)
code(GSET,ts,kls)
free_tmp(ts) #REG
 
init,_new = False,[]
if parent:
_new.append(Token(t.pos,'call',None,[
Token(t.pos,'get',None,[
Token(t.pos,'name',parent),
Token(t.pos,'string','__new__'),
]),
Token(t.pos,'name','self'),
]))
 
for fc in items[1].items:
if fc.type != 'def': continue
fn = fc.items[0].val
if fn == '__init__': init = True
do_def(fc,kls)
_new.append(Token(fc.pos,'symbol','=',[
Token(fc.pos,'get',None,[
Token(fc.pos,'name','self'),
Token(fc.pos,'string',fn)]),
Token(fc.pos,'call',None,[
Token(fc.pos,'name','bind'),
Token(fc.pos,'get',None,[
Token(fc.pos,'name',name),
Token(fc.pos,'string',fn)]),
Token(fc.pos,'name','self')])
]))
 
do_def(Token(t.pos,'def',None,[
Token(t.pos,'name','__new__'),
Token(t.pos,'list',None,[Token(t.pos,'name','self')]),
Token(t.pos,'statements',None,_new)]),kls)
 
t = get_tag()
rf = fnc(t,'end')
D.begin()
params = do_local(Token(tok.pos,'name','__params'))
 
slf = do_local(Token(tok.pos,'name','self'))
code(DICT,slf,0,0)
 
free_tmp(do(Token(tok.pos,'call',None,[
Token(tok.pos,'get',None,[
Token(tok.pos,'name',name),
Token(tok.pos,'string','__new__')]),
Token(tok.pos,'name','self')]))) #REG
 
if init:
tmp = get_tmp()
t3 = _do_string('__init__')
code(GET,tmp,slf,t3)
t4 = get_tmp()
code(CALL,t4,tmp,params)
free_tmp(tmp) #REG
free_tmp(t3) #REG
free_tmp(t4) #REG
code(RETURN,slf)
 
D.end()
tag(t,'end')
ts = _do_string('__call__')
code(SET,kls,ts,rf)
free_tmp(kls) #REG
free_tmp(ts) #REG
 
 
 
 
def do_while(t):
items = t.items
t = stack_tag()
tag(t,'begin')
tag(t,'continue')
r = do(items[0])
code(IF,r)
free_tmp(r) #REG
jump(t,'end')
free_tmp(do(items[1])) #REG
jump(t,'begin')
tag(t,'break')
tag(t,'end')
pop_tag()
 
def do_for(tok):
items = tok.items
 
reg = do_local(items[0])
itr = do(items[1])
i = _do_number('0')
 
t = stack_tag(); tag(t,'loop'); tag(t,'continue')
code(ITER,reg,itr,i); jump(t,'end')
free_tmp(do(items[2])) #REG
jump(t,'loop')
tag(t,'break'); tag(t,'end'); pop_tag()
 
free_tmp(itr) #REG
free_tmp(i)
 
def do_comp(t,r=None):
name = 'comp:'+get_tag()
r = do_local(Token(t.pos,'name',name))
code(LIST,r,0,0)
key = Token(t.pos,'get',None,[
Token(t.pos,'reg',r),
Token(t.pos,'symbol','None')])
ap = Token(t.pos,'symbol','=',[key,t.items[0]])
do(Token(t.pos,'for',None,[t.items[1],t.items[2],ap]))
return r
 
def do_if(t):
items = t.items
t = get_tag()
n = 0
for tt in items:
tag(t,n)
if tt.type == 'elif':
a = do(tt.items[0]); code(IF,a); free_tmp(a);
jump(t,n+1)
free_tmp(do(tt.items[1])) #REG
elif tt.type == 'else':
free_tmp(do(tt.items[0])) #REG
else:
raise
jump(t,'end')
n += 1
tag(t,n)
tag(t,'end')
 
def do_try(t):
items = t.items
t = get_tag()
setjmp(t,'except')
free_tmp(do(items[0])) #REG
jump(t,'end')
tag(t,'except')
free_tmp(do(items[1].items[1])) #REG
tag(t,'end')
 
def do_return(t):
if t.items: r = do(t.items[0])
else: r = _do_none()
code(RETURN,r)
free_tmp(r)
return
def do_raise(t):
if t.items: r = do(t.items[0])
else: r = _do_none()
code(RAISE,r)
free_tmp(r)
return
 
def do_statements(t):
for tt in t.items: free_tmp(do(tt))
 
def do_list(t,r=None):
r = get_tmp(r)
manage_seq(LIST,r,t.items)
return r
 
def do_dict(t,r=None):
r = get_tmp(r)
manage_seq(DICT,r,t.items)
return r
 
def do_get(t,r=None):
items = t.items
return infix(GET,items[0],items[1],r)
 
def do_break(t): jump(D.tstack[-1],'break')
def do_continue(t): jump(D.tstack[-1],'continue')
def do_pass(t): code(PASS)
 
def do_info(name='?'):
if '-nopos' in ARGV: return
code(FILE,free_tmp(_do_string(D.fname)))
code(NAME,free_tmp(_do_string(name)))
def do_module(t):
do_info()
free_tmp(do(t.items[0])) #REG
def do_reg(t,r=None): return t.val
 
fmap = {
'module':do_module,'statements':do_statements,'def':do_def,
'return':do_return,'while':do_while,'if':do_if,
'break':do_break,'pass':do_pass,'continue':do_continue,'for':do_for,
'class':do_class,'raise':do_raise,'try':do_try,'import':do_import,
'globals':do_globals,'del':do_del,'from':do_from,
}
rmap = {
'list':do_list, 'tuple':do_list, 'dict':do_dict, 'slice':do_list,
'comp':do_comp, 'name':do_name,'symbol':do_symbol,'number':do_number,
'string':do_string,'get':do_get, 'call':do_call, 'reg':do_reg,
}
 
def do(t,r=None):
if t.pos: setpos(t.pos)
try:
if t.type in rmap:
return rmap[t.type](t,r)
return fmap[t.type](t)
except:
if D.error: raise
D.error = True
tokenize.u_error('encode',D.code,t.pos)
 
def encode(fname,s,t):
t = Token((1,1),'module','module',[t])
global D
s = tokenize.clean(s)
D = DState(s,fname)
D.begin(True)
do(t)
D.end()
map_tags()
out = D.out; D = None
return ''.join(out)
 
/programs/develop/tinypy/tinypy/gc.c
0,0 → 1,152
/* tp_obj tp_track(TP,tp_obj v) { return v; }
void tp_grey(TP,tp_obj v) { }
void tp_full(TP) { }
void tp_gc_init(TP) { }
void tp_gc_deinit(TP) { }
void tp_delete(TP,tp_obj v) { }*/
 
void tp_grey(TP,tp_obj v) {
if (v.type < TP_STRING || (!v.gci.data) || *v.gci.data) { return; }
*v.gci.data = 1;
if (v.type == TP_STRING || v.type == TP_DATA) {
_tp_list_appendx(tp,tp->black,v);
return;
}
_tp_list_appendx(tp,tp->grey,v);
}
 
void tp_follow(TP,tp_obj v) {
int type = v.type;
if (type == TP_LIST) {
int n;
for (n=0; n<v.list.val->len; n++) {
tp_grey(tp,v.list.val->items[n]);
}
}
if (type == TP_DICT) {
int i;
for (i=0; i<v.dict.val->len; i++) {
int n = _tp_dict_next(tp,v.dict.val);
tp_grey(tp,v.dict.val->items[n].key);
tp_grey(tp,v.dict.val->items[n].val);
}
}
if (type == TP_FNC) {
tp_grey(tp,v.fnc.info->self);
tp_grey(tp,v.fnc.info->globals);
}
}
 
void tp_reset(TP) {
int n;
_tp_list *tmp;
for (n=0; n<tp->black->len; n++) {
*tp->black->items[n].gci.data = 0;
}
tmp = tp->white;
tp->white = tp->black;
tp->black = tmp;
}
 
void tp_gc_init(TP) {
tp->white = _tp_list_new();
tp->strings = _tp_dict_new();
tp->grey = _tp_list_new();
tp->black = _tp_list_new();
tp->steps = 0;
}
 
void tp_gc_deinit(TP) {
_tp_list_free(tp->white);
_tp_dict_free(tp->strings);
_tp_list_free(tp->grey);
_tp_list_free(tp->black);
}
 
void tp_delete(TP,tp_obj v) {
int type = v.type;
if (type == TP_LIST) {
_tp_list_free(v.list.val);
return;
} else if (type == TP_DICT) {
_tp_dict_free(v.dict.val);
return;
} else if (type == TP_STRING) {
tp_free(v.string.info);
return;
} else if (type == TP_DATA) {
if (v.data.info->free) {
v.data.info->free(tp,v);
}
tp_free(v.data.info);
return;
} else if (type == TP_FNC) {
tp_free(v.fnc.info);
return;
}
tp_raise(,"tp_delete(%s)",TP_CSTR(v));
}
 
void tp_collect(TP) {
int n;
for (n=0; n<tp->white->len; n++) {
tp_obj r = tp->white->items[n];
if (*r.gci.data) { continue; }
if (r.type == TP_STRING) {
/*this can't be moved into tp_delete, because tp_delete is
also used by tp_track_s to delete redundant strings*/
_tp_dict_del(tp,tp->strings,r,"tp_collect");
}
tp_delete(tp,r);
}
tp->white->len = 0;
tp_reset(tp);
}
 
void _tp_gcinc(TP) {
tp_obj v;
if (!tp->grey->len) {
return;
}
v = _tp_list_pop(tp,tp->grey,tp->grey->len-1,"_tp_gcinc");
tp_follow(tp,v);
_tp_list_appendx(tp,tp->black,v);
}
 
void tp_full(TP) {
while (tp->grey->len) {
_tp_gcinc(tp);
}
tp_collect(tp);
tp_follow(tp,tp->root);
}
 
void tp_gcinc(TP) {
tp->steps += 1;
if (tp->steps < TP_GCMAX || tp->grey->len > 0) {
_tp_gcinc(tp); _tp_gcinc(tp);
}
if (tp->steps < TP_GCMAX || tp->grey->len > 0) { return; }
tp->steps = 0;
tp_full(tp);
return;
}
 
tp_obj tp_track(TP,tp_obj v) {
if (v.type == TP_STRING) {
int i = _tp_dict_find(tp,tp->strings,v);
if (i != -1) {
tp_delete(tp,v);
v = tp->strings->items[i].key;
tp_grey(tp,v);
return v;
}
_tp_dict_setx(tp,tp->strings,v,tp_True);
}
tp_gcinc(tp);
tp_grey(tp,v);
return v;
}
 
/**/
 
/programs/develop/tinypy/tinypy/list.c
0,0 → 1,133
void _tp_list_realloc(_tp_list *self,int len) {
if (!len) { len=1; }
self->items = (tp_obj*)tp_realloc(self->items,len*sizeof(tp_obj));
self->alloc = len;
}
 
void _tp_list_set(TP,_tp_list *self,int k, tp_obj v, const char *error) {
if (k >= self->len) { tp_raise(,"%s: KeyError: %d\n",error,k); }
self->items[k] = v;
tp_grey(tp,v);
}
void _tp_list_free(_tp_list *self) {
tp_free(self->items);
tp_free(self);
}
 
tp_obj _tp_list_get(TP,_tp_list *self,int k,const char *error) {
if (k >= self->len) { tp_raise(tp_None,"%s: KeyError: %d\n",error,k); }
return self->items[k];
}
void _tp_list_insertx(TP,_tp_list *self, int n, tp_obj v) {
if (self->len >= self->alloc) {
_tp_list_realloc(self,self->alloc*2);
}
if (n < self->len) { memmove(&self->items[n+1],&self->items[n],sizeof(tp_obj)*(self->len-n)); }
self->items[n] = v;
self->len += 1;
}
void _tp_list_appendx(TP,_tp_list *self, tp_obj v) {
_tp_list_insertx(tp,self,self->len,v);
}
void _tp_list_insert(TP,_tp_list *self, int n, tp_obj v) {
_tp_list_insertx(tp,self,n,v);
tp_grey(tp,v);
}
void _tp_list_append(TP,_tp_list *self, tp_obj v) {
_tp_list_insert(tp,self,self->len,v);
}
tp_obj _tp_list_pop(TP,_tp_list *self, int n, const char *error) {
tp_obj r = _tp_list_get(tp,self,n,error);
if (n != self->len-1) { memmove(&self->items[n],&self->items[n+1],sizeof(tp_obj)*(self->len-(n+1))); }
self->len -= 1;
return r;
}
 
int _tp_list_find(TP,_tp_list *self, tp_obj v) {
int n;
for (n=0; n<self->len; n++) {
if (tp_cmp(tp,v,self->items[n]) == 0) {
return n;
}
}
return -1;
}
 
tp_obj tp_index(TP) {
tp_obj self = TP_OBJ();
tp_obj v = TP_OBJ();
int i = _tp_list_find(tp,self.list.val,v);
if (i < 0) { tp_raise(tp_None,"tp_index(%s,%s) - item not found",TP_CSTR(self),TP_CSTR(v)); }
return tp_number(i);
}
 
_tp_list *_tp_list_new(void) {
return (_tp_list*)tp_malloc(sizeof(_tp_list));
}
 
tp_obj _tp_list_copy(TP, tp_obj rr) {
tp_obj val = {TP_LIST};
_tp_list *o = rr.list.val;
_tp_list *r = _tp_list_new();
*r = *o; r->gci = 0;
r->items = (tp_obj*)tp_malloc(sizeof(tp_obj)*o->alloc);
memcpy(r->items,o->items,sizeof(tp_obj)*o->alloc);
val.list.val = r;
return tp_track(tp,val);
}
 
tp_obj tp_append(TP) {
tp_obj self = TP_OBJ();
tp_obj v = TP_OBJ();
_tp_list_append(tp,self.list.val,v);
return tp_None;
}
 
tp_obj tp_pop(TP) {
tp_obj self = TP_OBJ();
return _tp_list_pop(tp,self.list.val,self.list.val->len-1,"pop");
}
 
tp_obj tp_insert(TP) {
tp_obj self = TP_OBJ();
int n = TP_NUM();
tp_obj v = TP_OBJ();
_tp_list_insert(tp,self.list.val,n,v);
return tp_None;
}
 
tp_obj tp_extend(TP) {
tp_obj self = TP_OBJ();
tp_obj v = TP_OBJ();
int i;
for (i=0; i<v.list.val->len; i++) {
_tp_list_append(tp,self.list.val,v.list.val->items[i]);
}
return tp_None;
}
 
tp_obj tp_list(TP) {
tp_obj r = {TP_LIST};
r.list.val = _tp_list_new();
return tp ? tp_track(tp,r) : r;
}
 
tp_obj tp_list_n(TP,int n,tp_obj *argv) {
int i;
tp_obj r = tp_list(tp); _tp_list_realloc(r.list.val,n);
for (i=0; i<n; i++) {
_tp_list_append(tp,r.list.val,argv[i]);
}
return r;
}
 
int _tp_sort_cmp(tp_obj *a,tp_obj *b) {
return tp_cmp(0,*a,*b);
}
 
tp_obj tp_sort(TP) {
tp_obj self = TP_OBJ();
qsort(self.list.val->items, self.list.val->len, sizeof(tp_obj), (int(*)(const void*,const void*))_tp_sort_cmp);
return tp_None;
}
 
/programs/develop/tinypy/tinypy/misc.c
0,0 → 1,68
tp_obj *tp_ptr(tp_obj o) {
tp_obj *ptr = (tp_obj*)tp_malloc(sizeof(tp_obj)); *ptr = o;
return ptr;
}
 
tp_obj _tp_dcall(TP,tp_obj fnc(TP)) {
return fnc(tp);
}
tp_obj _tp_tcall(TP,tp_obj fnc) {
if (fnc.fnc.ftype&2) {
_tp_list_insert(tp,tp->params.list.val,0,fnc.fnc.info->self);
}
return _tp_dcall(tp,(tp_obj (*)(tp_vm *))fnc.fnc.val);
}
 
tp_obj tp_fnc_new(TP,int t, void *v, tp_obj s, tp_obj g) {
tp_obj r = {TP_FNC};
_tp_fnc *info = (_tp_fnc*)tp_malloc(sizeof(_tp_fnc));
info->self = s;
info->globals = g;
r.fnc.ftype = t;
r.fnc.info = info;
r.fnc.val = v;
return tp_track(tp,r);
}
 
tp_obj tp_def(TP,void *v, tp_obj g) {
return tp_fnc_new(tp,1,v,tp_None,g);
}
 
tp_obj tp_fnc(TP,tp_obj v(TP)) {
return tp_fnc_new(tp,0,v,tp_None,tp_None);
}
 
tp_obj tp_method(TP,tp_obj self,tp_obj v(TP)) {
return tp_fnc_new(tp,2,v,self,tp_None);
}
 
tp_obj tp_data(TP,int magic,void *v) {
tp_obj r = {TP_DATA};
r.data.info = (_tp_data*)tp_malloc(sizeof(_tp_data));
r.data.val = v;
r.data.magic = magic;
return tp_track(tp,r);
}
 
tp_obj tp_params(TP) {
tp_obj r;
tp->params = tp->_params.list.val->items[tp->cur];
r = tp->_params.list.val->items[tp->cur];
r.list.val->len = 0;
return r;
}
tp_obj tp_params_n(TP,int n, tp_obj argv[]) {
tp_obj r = tp_params(tp);
int i; for (i=0; i<n; i++) { _tp_list_append(tp,r.list.val,argv[i]); }
return r;
}
tp_obj tp_params_v(TP,int n,...) {
int i;
tp_obj r = tp_params(tp);
va_list a; va_start(a,n);
for (i=0; i<n; i++) {
_tp_list_append(tp,r.list.val,va_arg(a,tp_obj));
}
va_end(a);
return r;
}
/programs/develop/tinypy/tinypy/parse.py
0,0 → 1,408
import tokenize
from tokenize import Token
if '.' in str(1.0):
from boot import *
 
def check(t,*vs):
if vs[0] == None: return True
if t.type in vs: return True
if t.type == 'symbol' and t.val in vs: return True
return False
 
def tweak(k,v):
P.stack.append((k,dmap[k]))
if v: dmap[k] = omap[k]
else: dmap[k] = {'lbp':0,'nud':itself}
def restore():
k,v = P.stack.pop()
dmap[k] = v
 
def cpy(d):
r = {}
for k in d: r[k] = d[k]
return r
 
class PData:
def __init__(self,s,tokens):
self.s = s
self.tokens = tokens
self.pos = 0
self.token = None
self.stack = []
def init(self):
global omap,dmap
omap = cpy(base_dmap)
dmap = cpy(base_dmap)
self.advance()
def advance(self,val=None):
if not check(self.token,val):
error('expected '+val,self.token)
if self.pos < len(self.tokens):
t = self.tokens[self.pos]
self.pos += 1
else:
t = Token((0,0),'eof','eof')
self.token = do(t)
return t
def error(ctx,t):
print t
tokenize.u_error(ctx,P.s,t.pos)
 
def nud(t):
#if 'nud' not in t:
# error('no nud',t)
return t.nud(t)
def led(t,left):
#if 'led' not in t:
# error('no led',t)
return t.led(t,left)
def get_lbp(t):
#if 'lbp' not in t:
# error('no lbp',t)
return t.lbp
def get_items(t):
#if 'items' not in t:
# error('no items',t)
return t.items
 
def expression(rbp):
t = P.token
advance()
left = nud(t)
while rbp < get_lbp(P.token):
t = P.token
advance()
left = led(t,left)
return left
 
def infix_led(t,left):
t.items = [left,expression(t.bp)]
return t
def infix_is(t,left):
if check(P.token,'not'):
t.val = 'isnot'
advance('not')
t.items = [left,expression(t.bp)]
return t
def infix_not(t,left):
advance('in')
t.val = 'notin'
t.items = [left,expression(t.bp)]
return t
def infix_tuple(t,left):
r = expression(t.bp)
if left.val == ',':
left.items.append(r)
return left
t.items = [left,r]
t.type = 'tuple'
return t
def lst(t):
if t == None: return []
if check(t,',','tuple','statements'):
return get_items(t)
return [t]
def ilst(typ,t):
return Token(t.pos,typ,typ,lst(t))
 
def call_led(t,left):
r = Token(t.pos,'call','$',[left])
while not check(P.token,')'):
tweak(',',0)
r.items.append(expression(0))
if P.token.val == ',': advance(',')
restore()
advance(")")
return r
def get_led(t,left):
r = Token(t.pos,'get','.',[left])
items = [left]
more = False
while not check(P.token,']'):
more = False
if check(P.token,':'):
items.append(Token(P.token.pos,'symbol','None'))
else:
items.append(expression(0))
if check(P.token,':'):
advance(':')
more = True
if more:
items.append(Token(P.token.pos,'symbol','None'))
if len(items) > 2:
items = [left,Token(t.pos,'slice',':',items[1:])]
r.items = items
advance("]")
return r
def dot_led(t,left):
r = expression(t.bp)
r.type = 'string'
t.items = [left,r]
return t
 
def itself(t):
return t
def paren_nud(t):
tweak(',',1)
r = expression(0)
restore()
advance(')')
return r
def list_nud(t):
t.type = 'list'
t.val = '[]'
t.items = []
next = P.token
tweak(',',0)
while not check(P.token,'for',']'):
r = expression(0)
t.items.append(r)
if P.token.val == ',': advance(',')
if check(P.token,'for'):
t.type = 'comp'
advance('for')
tweak('in',0)
t.items.append(expression(0))
advance('in')
t.items.append(expression(0))
restore()
restore()
advance(']')
return t
def dict_nud(t):
t.type='dict'
t.val = '{}'
t.items = []
tweak(',',0)
while not check(P.token,'}'):
t.items.append(expression(0))
if check(P.token,':',','): advance()
restore()
advance('}')
return t
 
def advance(t=None):
return P.advance(t)
 
def block():
items = []
tok = P.token
 
while check(P.token,'nl'): advance()
if check(P.token,'indent'):
advance('indent')
while not check(P.token,'dedent'):
items.append(expression(0))
while check(P.token,';','nl'): advance()
advance('dedent')
else:
items.append(expression(0))
while check(P.token,';'):
advance(';')
items.append(expression(0))
while check(P.token,'nl'): advance()
 
if len(items) > 1:
return Token(tok.pos,'statements',';',items)
return items.pop()
 
def def_nud(t):
items = t.items = []
items.append(P.token); advance()
advance('(')
r = Token(t.pos,'symbol','():',[])
items.append(r)
while not check(P.token,')'):
tweak(',',0)
r.items.append(expression(0))
if check(P.token,','): advance(',')
restore()
advance(')')
advance(':')
items.append(block())
return t
 
 
def while_nud(t):
items = t.items = []
items.append(expression(0))
advance(':')
items.append(block())
return t
def class_nud(t):
items = t.items = []
items.append(expression(0))
advance(':')
items.append(ilst('methods',block()))
return t
 
def from_nud(t):
items = t.items = []
items.append(expression(0))
advance('import')
items.append(expression(0))
return t
 
def for_nud(t):
items = t.items = []
tweak('in',0)
items.append(expression(0))
advance('in')
items.append(expression(0))
restore()
advance(':')
items.append(block())
return t
def if_nud(t):
items = t.items = []
a = expression(0)
advance(':')
b = block()
items.append(Token(t.pos,'elif','elif',[a,b]))
while check(P.token,'elif'):
tok = P.token
advance('elif')
a = expression(0)
advance(':')
b = block()
items.append(Token(tok.pos,'elif','elif',[a,b]))
if check(P.token,'else'):
tok = P.token
advance('else')
advance(':')
b = block()
items.append(Token(tok.pos,'else','else',[b]))
return t
def try_nud(t):
items = t.items = []
advance(':')
b = block()
items.append(b)
while check(P.token,'except'):
tok = P.token
advance('except')
if not check(P.token,':'): a = expression(0)
else: a = Token(tok.pos,'symbol','None')
advance(':')
b = block()
items.append(Token(tok.pos,'except','except',[a,b]))
if check(P.token,'else'):
tok = P.token
advance('else')
advance(':')
b = block()
items.append(Token(tok.pos,'else','else',[b]))
return t
def prefix_nud(t):
#bp = 70
#if 'bp' in t: bp = t['bp']
bp = t.bp
t.items = [expression(bp)]
return t
def prefix_nud0(t):
if check(P.token,'nl',';','eof','dedent'): return t
return prefix_nud(t)
def prefix_nuds(t):
r = expression(0)
return ilst(t.type,r)
 
def prefix_neg(t):
r = expression(50)
if r.type == 'number':
r.val = str(-float(r.val))
return r
t.items = [Token(t.pos,'number','0'),r]
return t
def vargs_nud(t):
r = prefix_nud(t)
t.type = 'args'
t.val = '*'
return t
def nargs_nud(t):
r = prefix_nud(t)
t.type = 'nargs'
t.val = '**'
return t
 
 
base_dmap = {
',':{'lbp':20,'bp':20,'led':infix_tuple},
'+':{'lbp':50,'bp':50,'led':infix_led},
'-':{'lbp':50,'nud':prefix_neg,
'bp':50,'led':infix_led},
'not':{'lbp':35,'nud':prefix_nud,'bp':35,
'bp':35,'led':infix_not },
'%':{'lbp':60,'bp':60,'led':infix_led},
'*':{'lbp':60,'nud':vargs_nud,
'bp':60,'led':infix_led,},
'**': {'lbp':65,'nud':nargs_nud,
'bp':65,'led':infix_led,},
'/':{'lbp':60,'bp':60,'led':infix_led},
'(':{'lbp':70,'nud':paren_nud,
'bp':80,'led':call_led,},
'[':{'lbp':70,'nud':list_nud,
'bp':80,'led':get_led,},
'{':{'lbp':0,'nud':dict_nud,},
'.':{'lbp':80,'bp':80,'led':dot_led,'type':'get',},
'break':{'lbp':0,'nud':itself,'type':'break'},
'pass':{'lbp':0,'nud':itself,'type':'pass'},
'continue':{'lbp':0,'nud':itself,'type':'continue'},
'eof':{'lbp':0,'type':'eof','val':'eof'},
'def':{'lbp':0,'nud':def_nud,'type':'def',},
'while':{'lbp':0,'nud':while_nud,'type':'while',},
'for':{'lbp':0,'nud':for_nud,'type':'for',},
'try':{'lbp':0,'nud':try_nud,'type':'try',},
'if':{'lbp':0,'nud':if_nud,'type':'if',},
'class':{'lbp':0,'nud':class_nud,'type':'class',},
'raise':{'lbp':0,'nud':prefix_nud0,'type':'raise','bp':20,},
'return':{'lbp':0,'nud':prefix_nud0,'type':'return','bp':10,},
'import':{'lbp':0,'nud':prefix_nuds,'type':'import','bp':20,},
'from':{'lbp':0,'nud':from_nud,'type':'from','bp':20,},
'del':{'lbp':0,'nud':prefix_nuds,'type':'del','bp':10,},
'global':{'lbp':0,'nud':prefix_nuds,'type':'globals','bp':20,},
 
'=':{
'lbp':10,'bp':9,'led':infix_led,
},
}
 
def i_infix(bp,led,*vs):
for v in vs: base_dmap[v] = {'lbp':bp,'bp':bp,'led':led}
i_infix(40,infix_led,'<','>','<=','>=','!=','==')
i_infix(40,infix_is,'is','in')
i_infix(10,infix_led,'+=','-=','*=','/=')
i_infix(31,infix_led,'and','&')
i_infix(30,infix_led,'or','|')
i_infix(36,infix_led,'<<','>>')
def i_terms(*vs):
for v in vs: base_dmap[v] = {'lbp':0,'nud':itself}
i_terms(')','}',']',';',':','nl','elif','else','True','False','None','name','string','number','indent','dedent','except')
base_dmap['nl']['val'] = 'nl'
 
def gmap(t,v):
if v not in dmap:
error('unknown "%s"'%v,t)
return dmap[v]
 
def do(t):
if t.type == 'symbol': r = gmap(t,t.val)
else: r = gmap(t,t.type)
merge(t,r)
return t
def do_module():
tok = P.token
items = []
while not check(P.token,'eof'):
items.append(block())
if len(items) > 1:
return Token(tok.pos,'statements',';',items)
return items.pop()
 
def parse(s,tokens,wrap=0):
global P
s = tokenize.clean(s)
P=PData(s,tokens); P.init()
r = do_module()
P = None
return r
 
/programs/develop/tinypy/tinypy/string.c
0,0 → 1,165
#include <stdarg.h>
 
tp_obj tp_string_t(TP, int n) {
tp_obj r = tp_string_n(0,n);
r.string.info = (_tp_string*)tp_malloc(sizeof(_tp_string)+n);
r.string.val = r.string.info->s;
return r;
}
 
tp_obj tp_printf(TP, char const *fmt,...) {
int l;
tp_obj r;
char tmp[2000];
char *s;
va_list arg;
va_start(arg, fmt);
l = vsnprintf(tmp, sizeof(tmp), fmt,arg);
r = tp_string_t(tp,l);
s = r.string.info->s;
va_end(arg);
va_start(arg, fmt);
vsprintf(s,fmt,arg);
va_end(arg);
return tp_track(tp,r);
}
 
int _tp_str_index(tp_obj s, tp_obj k) {
int i=0;
while ((s.string.len - i) >= k.string.len) {
if (memcmp(s.string.val+i,k.string.val,k.string.len) == 0) {
return i;
}
i += 1;
}
return -1;
}
 
tp_obj tp_join(TP) {
tp_obj delim = TP_OBJ();
tp_obj val = TP_OBJ();
int l=0,i;
tp_obj r;
char *s;
for (i=0; i<val.list.val->len; i++) {
if (i!=0) { l += delim.string.len; }
l += tp_str(tp,val.list.val->items[i]).string.len;
}
r = tp_string_t(tp,l);
s = r.string.info->s;
l = 0;
for (i=0; i<val.list.val->len; i++) {
tp_obj e;
if (i!=0) {
memcpy(s+l,delim.string.val,delim.string.len); l += delim.string.len;
}
e = tp_str(tp,val.list.val->items[i]);
memcpy(s+l,e.string.val,e.string.len); l += e.string.len;
}
return tp_track(tp,r);
}
 
tp_obj tp_string_slice(TP,tp_obj s, int a, int b) {
tp_obj r = tp_string_t(tp,b-a);
char *m = r.string.info->s;
memcpy(m,s.string.val+a,b-a);
return tp_track(tp,r);
}
 
tp_obj tp_split(TP) {
tp_obj v = TP_OBJ();
tp_obj d = TP_OBJ();
tp_obj r = tp_list(tp);
 
int i;
while ((i=_tp_str_index(v,d))!=-1) {
_tp_list_append(tp,r.list.val,tp_string_slice(tp,v,0,i));
v.string.val += i + d.string.len; v.string.len -= i + d.string.len;
/* tp_grey(tp,r); // should stop gc or something instead*/
}
_tp_list_append(tp,r.list.val,tp_string_slice(tp,v,0,v.string.len));
/* tp_grey(tp,r); // should stop gc or something instead*/
return r;
}
 
 
tp_obj tp_find(TP) {
tp_obj s = TP_OBJ();
tp_obj v = TP_OBJ();
return tp_number(_tp_str_index(s,v));
}
 
tp_obj tp_str_index(TP) {
tp_obj s = TP_OBJ();
tp_obj v = TP_OBJ();
int n = _tp_str_index(s,v);
if (n >= 0) { return tp_number(n); }
tp_raise(tp_None,"tp_str_index(%s,%s)",s,v);
}
 
tp_obj tp_str2(TP) {
tp_obj v = TP_OBJ();
return tp_str(tp,v);
}
 
tp_obj tp_chr(TP) {
int v = TP_NUM();
return tp_string_n(tp->chars[(unsigned char)v],1);
}
tp_obj tp_ord(TP) {
char const *s = TP_STR();
return tp_number((unsigned char)s[0]);
}
 
tp_obj tp_strip(TP) {
char const *v = TP_STR();
int i, l = strlen(v); int a = l, b = 0;
tp_obj r;
char *s;
for (i=0; i<l; i++) {
if (v[i] != ' ' && v[i] != '\n' && v[i] != '\t' && v[i] != '\r') {
a = _tp_min(a,i); b = _tp_max(b,i+1);
}
}
if ((b-a) < 0) { return tp_string(""); }
r = tp_string_t(tp,b-a);
s = r.string.info->s;
memcpy(s,v+a,b-a);
return tp_track(tp,r);
}
 
 
tp_obj tp_replace(TP) {
tp_obj s = TP_OBJ();
tp_obj k = TP_OBJ();
tp_obj v = TP_OBJ();
tp_obj p = s;
int i,n = 0;
int c;
int l;
tp_obj rr;
char *r;
char *d;
tp_obj z;
while ((i = _tp_str_index(p,k)) != -1) {
n += 1;
p.string.val += i + k.string.len; p.string.len -= i + k.string.len;
}
/* fprintf(stderr,"ns: %d\n",n); */
l = s.string.len + n * (v.string.len-k.string.len);
rr = tp_string_t(tp,l);
r = rr.string.info->s;
d = r;
z = p = s;
while ((i = _tp_str_index(p,k)) != -1) {
p.string.val += i; p.string.len -= i;
memcpy(d,z.string.val,c=(p.string.val-z.string.val)); d += c;
p.string.val += k.string.len; p.string.len -= k.string.len;
memcpy(d,v.string.val,v.string.len); d += v.string.len;
z = p;
}
memcpy(d,z.string.val,(s.string.val + s.string.len) - z.string.val);
 
return tp_track(tp,rr);
}
 
/programs/develop/tinypy/tinypy/tests.py
0,0 → 1,750
# figure out if we're in python or tinypy (tinypy displays "1.0" as "1")
is_tinypy = (str(1.0) == "1")
if not is_tinypy:
from boot import *
 
################################################################################
RM = 'rm -f '
VM = './vm '
TINYPY = './tinypy '
TMP = 'tmp.txt'
if '-mingw32' in ARGV or "-win" in ARGV:
RM = 'del '
VM = 'vm '
TINYPY = 'tinypy '
TMP = 'tmp.txt'
#TMP = 'stdout.txt'
def system_rm(fname):
system(RM+fname)
 
################################################################################
#if not is_tinypy:
#v = chksize()
#assert (v < 65536)
 
################################################################################
def t_show(t):
if t.type == 'string': return '"'+t.val+'"'
if t.type == 'number': return t.val
if t.type == 'symbol': return t.val
if t.type == 'name': return '$'+t.val
return t.type
def t_tokenize(s,exp=''):
import tokenize
result = tokenize.tokenize(s)
res = ' '.join([t_show(t) for t in result])
#print(s); print(exp); print(res)
assert(res == exp)
 
if __name__ == '__main__':
t_tokenize("234",'234')
t_tokenize("234.234",'234.234')
t_tokenize("phil",'$phil')
t_tokenize("_phil234",'$_phil234')
t_tokenize("'phil'",'"phil"')
t_tokenize('"phil"','"phil"')
t_tokenize("'phil' x",'"phil" $x')
t_tokenize("#comment","")
t_tokenize("and","and")
t_tokenize("=","=")
t_tokenize("()","( )")
t_tokenize("(==)","( == )")
t_tokenize("phil=234","$phil = 234")
t_tokenize("a b","$a $b")
t_tokenize("a\nb","$a nl $b")
t_tokenize("a\n b","$a nl indent $b dedent")
t_tokenize("a\n b\n c", "$a nl indent $b nl indent $c dedent dedent")
t_tokenize("a\n b\n c", "$a nl indent $b nl $c dedent")
t_tokenize("a\n b\n \n c", "$a nl indent $b nl nl indent $c dedent dedent")
t_tokenize("a\n b\nc", "$a nl indent $b nl dedent $c")
t_tokenize("a\n b\n c\nd", "$a nl indent $b nl indent $c nl dedent dedent $d")
t_tokenize("(\n )","( )")
t_tokenize(" x","indent $x dedent")
t_tokenize(" #","")
t_tokenize("None","None")
 
 
################################################################################
 
def t_lisp(t):
if t.type == 'block':
return """{%s}"""%' '.join([t_lisp(tt) for tt in t.items])
if t.type == 'statement':
return """%s;"""%' '.join([t_lisp(tt) for tt in t.items])
if t.items == None: return t.val
args = ''.join([" "+t_lisp(tt) for tt in t.items])
return "("+t.val+args+")"
 
def t_parse(s,ex=''):
import tokenize, parse
r = ''
tokens = tokenize.tokenize(s)
tree = parse.parse(s,tokens)
r = t_lisp(tree)
#print(s); print(ex); print(r)
assert(r==ex)
 
if __name__ == '__main__':
t_parse('2+4*3', '(+ 2 (* 4 3))')
t_parse('4*(2+3)', '(* 4 (+ 2 3))')
t_parse('(2+3)*4', '(* (+ 2 3) 4)')
t_parse('1<2', '(< 1 2)')
t_parse('x=3', '(= x 3)')
t_parse('x = 2*3', '(= x (* 2 3))')
t_parse('x = y', '(= x y)')
t_parse('2,3', '(, 2 3)')
t_parse('2,3,4', '(, 2 3 4)')
t_parse('[]', '([])')
t_parse('[1]', '([] 1)')
t_parse('[2,3,4]', '([] 2 3 4)')
t_parse('print(3)', '($ print 3)')
t_parse('print()', '($ print)')
t_parse('print(2,3)', '($ print 2 3)')
t_parse('def fnc():pass', '(def fnc (():) pass)')
t_parse('def fnc(x):pass', '(def fnc ((): x) pass)')
t_parse('def fnc(x,y):pass', '(def fnc ((): x y) pass)')
t_parse('x\ny\nz', '(; x y z)')
t_parse('return x', '(return x)')
t_parse('print(test(2,3))', '($ print ($ test 2 3))')
t_parse('x.y', '(. x y)')
t_parse('get(2).x', '(. ($ get 2) x)')
t_parse('{}', '({})')
t_parse('True', 'True')
t_parse('False', 'False')
t_parse('None', 'None')
t_parse('while 1:pass', '(while 1 pass)')
t_parse('for x in y:pass', '(for x y pass)')
t_parse('print("x")', '($ print x)')
t_parse('if 1: pass', '(if (elif 1 pass))')
t_parse('x = []', '(= x ([]))')
t_parse('x[1]', '(. x 1)')
t_parse('import sdl', '(import sdl)')
t_parse('2 is 3', '(is 2 3)')
t_parse('2 is not 3', '(isnot 2 3)')
t_parse('x is None', '(is x None)')
t_parse('2 is 3 or 4 is 5', '(or (is 2 3) (is 4 5))')
t_parse('e.x == 3 or e.x == 4', '(or (== (. e x) 3) (== (. e x) 4))')
t_parse('if 1==2: 3\nelif 4:5\nelse:6', '(if (elif (== 1 2) 3) (elif 4 5) (else 6))')
t_parse('x = y(2)*3 + y(4)*5', '(= x (+ (* ($ y 2) 3) (* ($ y 4) 5)))')
t_parse('x(1,2)+y(3,4)', '(+ ($ x 1 2) ($ y 3 4))')
t_parse('x(a,b,c[d])', '($ x a b (. c d))')
t_parse('x(1,2)*j+y(3,4)*k+z(5,6)*l', '(+ (+ (* ($ x 1 2) j) (* ($ y 3 4) k)) (* ($ z 5 6) l))')
t_parse('a = b.x/c * 2 - 1', '(= a (- (* (/ (. b x) c) 2) 1))')
t_parse('for x in y: z', '(for x y z)')
 
t_parse('min(255,n*2)','($ min 255 (* n 2))')
t_parse('c = pal[i*8]','(= c (. pal (* i 8)))')
t_parse('{x:y,a:b}','({} x y a b)')
t_parse('x[1:2:3]','(. x (: 1 2 3))')
if is_tinypy: t_parse('x - -234','(- x -234)')
else: t_parse('x - -234','(- x -234.0)')
t_parse('x - -y','(- x (- 0 y))')
t_parse('x = ((y*4)-2)','(= x (- (* y 4) 2))')
if is_tinypy: t_parse('print([1,2,"OK",4][-3:3][1])','($ print (. (. ([] 1 2 OK 4) (: -3 3)) 1))')
else: t_parse('print([1,2,"OK",4][-3:3][1])','($ print (. (. ([] 1 2 OK 4) (: -3.0 3)) 1))')
t_parse('a,b = 1,2','(= (, a b) (, 1 2))')
t_parse('class C: pass','(class C (methods pass))')
t_parse('def test(*v): pass','(def test ((): (* v)) pass)')
t_parse('def test(**v): pass','(def test ((): (** v)) pass)')
t_parse('test(*v)','($ test (* v))')
t_parse('test(**v)','($ test (** v))')
t_parse('def test(x=y): pass','(def test ((): (= x y)) pass)')
t_parse('test(x=y)','($ test (= x y))')
t_parse('def test(y="K",x="Z"): pass','(def test ((): (= y K) (= x Z)) pass)')
t_parse('return x+y','(return (+ x y))')
t_parse('if "a" is not "b": pass','(if (elif (isnot a b) pass))')
t_parse('z = 0\nfor x in y: pass','(; (= z 0) (for x y pass))')
t_parse('for k in {"OK":0}: pass','(for k ({} OK 0) pass)')
t_parse('print(test(10,3,z=50000,*[200],**{"x":4000}))','($ print ($ test 10 3 (= z 50000) (* ([] 200)) (** ({} x 4000))))')
t_parse('x="OK";print(x)','(; (= x OK) ($ print x))')
t_parse('[(1,3)]','([] (, 1 3))')
t_parse('x[:]','(. x (: None None))')
t_parse('x[:1]','(. x (: None 1))')
t_parse('x[1:]','(. x (: 1 None))')
t_parse('return\nx','(; return x)')
t_parse('"""test"""','test')
t_parse('return a,b','(return (, a b))')
 
################################################################################
 
def showerror(cmd, ss, ex, res):
print(cmd)
print("ss : '" + str(ss) + "'")
print("ex : '" + str(ex) + "'")
print("res: '" + str(res) + "'")
 
def t_render(ss,ex,exact=True):
import tokenize, parse, encode
if not istype(ss,'list'): ss =[ss]
n = 1
for s in ss:
fname = 'tmp'+str(n)+'.tpc'
system_rm(fname)
tokens = tokenize.tokenize(s)
t = parse.parse(s,tokens)
r = encode.encode(fname,s,t)
f = save(fname,r)
n += 1
system_rm('tmp.txt')
cmd = VM + fname + " > tmp.txt"
system(cmd)
res = load(TMP).strip()
#print(ss,ex,res)
if exact:
if res != ex: showerror(cmd, ss, ex, res)
assert(res == ex)
else:
if ex not in res: showerror(cmd, ss, ex, res)
assert(ex in res)
 
def test_range():
t_render("""print(str(range(4))[:5])""","<list")
t_render("""print(len(range(4)))""","4")
t_render("""print(range(4)[0])""","0")
t_render("""print(range(4)[1])""","1")
t_render("""print(range(4)[-1])""","3")
 
t_render("""print(str(range(-4))[:5])""","<list")
t_render("""print(len(range(-4)))""","0")
 
t_render("""print(str(range(0,5,3))[:5])""","<list")
t_render("""print(len(range(0,5,3)))""","2")
t_render("""print(range(0,5,3)[0])""","0")
t_render("""print(range(0,5,3)[1])""","3")
t_render("""print(range(0,5,3)[-1])""","3")
 
t_render("""print(str(range(5,0,-3))[:5])""","<list")
t_render("""print(len(range(5,0,-3)))""","2")
t_render("""print(range(5,0,-3)[0])""","5")
t_render("""print(range(5,0,-3)[1])""","2")
t_render("""print(range(5,0,-3)[-1])""","2")
 
t_render("""print(str(range(-8,-4))[:5])""","<list")
t_render("""print(len(range(-8,-4)))""","4")
t_render("""print(range(-8,-4)[0])""","-8")
t_render("""print(range(-8,-4)[1])""","-7")
t_render("""print(range(-8,-4)[-1])""","-5")
 
t_render("""print(str(range(-4,-8,-1))[:5])""","<list")
t_render("""print(len(range(-4,-8,-1)))""","4")
t_render("""print(range(-4,-8,-1)[0])""","-4")
t_render("""print(range(-4,-8,-1)[1])""","-5")
t_render("""print(range(-4,-8,-1)[-1])""","-7")
 
t_render("""print(str(range(-4,-8))[:5])""","<list")
t_render("""print(len(range(-4,-8)))""","0")
 
t_render("""print(str(range(-8,-4,-1))[:5])""","<list")
t_render("""print(len(range(-8,-4,-1)))""","0")
 
t_render("""print(str(range(0,4,0))[:5])""","<list")
t_render("""print(len(range(0,4,0)))""","0")
 
if __name__ == '__main__':
t_render('print("hello world")',"hello world")
t_render('print(234)',"234")
t_render('a=3\nprint(a)',"3")
t_render('print(2+3)',"5")
t_render("""
x = 2
x += 3
print(x)
"""
,"5")
t_render("""
x = "OK"
print(x)
"""
,"OK")
t_render("""
a,b = 1,2
print(a+b)
"""
,"3")
t_render("""
x = 1
if x == 1:
print("yes")
""","yes")
t_render("""
if 0 == 1:
print("X")
else:
print("OK")
"""
,"OK")
t_render("""
if 0 == 1:
print("X")
elif 1 == 2:
print("Y")
else:
print("OK")
"""
,"OK")
 
t_render("""
def test(x,y):
return x+y
r = test(3,5)
print(r)
""","8")
t_render("""
x = 1
t = 0
while x<=5:
t = t+x
x = x+1
print(t)
""","15")
t_render("""
x = {}
x.y = "test"
print(x.y)
""","test")
t_render("""
if "a" is "a":
print("OK")
"""
,"OK")
 
t_render("""
if "a" is not "b":
print("OK")
"""
,"OK")
 
t_render("""
if None is None:
print("OK")
"""
,"OK")
t_render("""
if "x" is "x" or "y" is "y":
print("OK")
"""
,"OK")
t_render("""
x = 1
while x < 3:
break
x = x + 1
print(x)
"""
,"1")
t_render("""
x = 1
n = 0
while x < 10:
x = x + 1
if n == 2:
continue
n = n + 1
print(n)
"""
,"2")
t_render("""
def test(x): return x
y = test(1)*2 + test(3)*4 + test(5)*6
print(y)
"""
,"44")
t_render("""
def test(a,b): return a+b
print(test(1,1)+test(1,1))
"""
,"4")
 
t_render("""
def test(): print("OK")
x = test
x()
"""
,"OK")
 
t_render("""
x = [2,4,6]
print(x[1])
"""
,"4")
t_render("""
def test(): print("OK")
x = [1,test,2]
x[1]()
"""
,"OK")
 
 
t_render("""
z = 0
for x in [1,2,3]:
z += x
print(z)
"""
,"6")
 
t_render("""
z = 0
for x in range(1,4):
z += x
print(z)
"""
,"6")
 
t_render("""
x = {'a':'OK'}
print(x.a)
"""
,"OK")
 
t_render("""print("1234"[1:3])""","23")
t_render("""print("1234"[-3:3])""","23")
t_render("""print([1,2,"OK",4][-3:3][1])""","OK")
t_render("""
n = 0
for x in range(0,10,2):
n += 1
print(n)
"""
,"5")
 
t_render("""print(max(3,8,2,6))""","8")
t_render("""print(min(3,4,2,6))""","2")
t_render("""for k in {'OK':0}: print(k)""","OK")
 
t_render("""
X = "OK"
def test(): print(X)
test()
"""
,"OK")
 
t_render("""
a = 4
def test(z):
for i in range(0,a):
z += i
return z
print(test(1))
"""
,"7")
 
t_render("""
def test(self): print(self)
fnc = bind(test,"OK")
fnc()
"""
,"OK")
 
t_render("""
class C:
def __init__(self,data): self.data = data
def print(self): print(self.data)
C("OK").print()
"""
,"OK")
 
t_render("""
x = [v*v for v in range(0,5)]
print(x[3])
"""
,"9")
t_render("""
t = [[y*10+x for x in range(0,10)] for y in range(0,10)]
print(t[2][3])
"""
,"23")
 
t_render("""
x = [1]
x.extend([2,3])
print(x[1])
"""
,"2")
 
#t_render("""
#x = {'a':3}
#merge(x,{'b':4})
#print(x.b)
#"""
#,"4")
 
t_render("""
x = [1,2,3]
y = copy(x)
y[0] *= 10
print(x[0]+y[0])
"""
,"11")
t_render("""
x = {'a':3}
y = copy(x)
y.a *= 10
print(x.a+y.a)
"""
,"33")
t_render("""
x = {}
y = x['x']
"""
,'KeyError',0)
t_render("""
x = []
y = x[1]
"""
,'KeyError',0)
t_render("""print("O"+"K")""","OK")
t_render("""print("-".join(["O","K"]))""","O-K")
t_render("""print("OK-OK".split("-")[1])""","OK")
t_render("""
def test(*v): return max(v[2])
print(test(*[1,2,"OK"]))
"""
,"OK")
t_render("""
def test(**v): return v['x']
print(test(**{'x':'OK'}))
"""
,"OK")
#t_render("""
#def test(y='K',x='Z'): print(x+y)
#test(x='O')
#"""
#,"OK")
t_render("""
def test(y='K',x='Z'): print(x+y)
test('O')
"""
,"ZO")
 
#t_render("""
#def test(a,b=2,*c,**d): return a+b+c[0]+d['x']+d['z']
#print(test(10,3,z=50000,*[200],**{'x':4000}))
#"""
#,"54213")
 
t_render("""print("".join(["O"]+["K"]))""","OK")
t_render("""x="OK";print(x)""","OK")
t_render("""x = [1,2,] ; print(x[1])""","2")
t_render("""a,b,d = [0],0,'OK'; print(d)""","OK")
t_render("""
def test(): raise
try:
test()
except:
print("OK")
""","OK")
 
t_render("""print("OKx"[:-1])""","OK")
t_render("""print("xOK"[1:])""","OK")
t_render("""a,b = "OK"; print(a+b)""","OK")
t_render("""
def test(a,b):
print a+b[2]
test(1,3)
""","Exception",False)
 
t_render("""
def test(): raise
test()
""","Exception",False)
t_render(['OK="OK"',"import tmp1\nprint(tmp1.OK)"],"OK")
t_render(['O="O"','K="K"',"import tmp1, tmp2\nprint(tmp1.O+tmp2.K)"],"OK")
t_render("""
def test(): return
x = 1
print(test())
""","None")
 
t_render("""
def test(): pass
x = 1
print(test())
""","None")
 
t_render("""
def test():
global x
x = "OK"
test()
print(x)
""","OK")
 
t_render("""
class X:
pass
y = X()
print("OK")
""","OK")
 
t_render("""
class X: pass
def test(): y = X()
test()
print("OK")
""","OK")
 
t_render(["class X: pass\ndef test(): y = X()","import tmp1\ntmp1.test();print('OK')"],"OK")
t_render("print(len([1,2,3]))","3")
t_render('if not "?" in "xyz": print("OK")',"OK")
t_render('print({1:"OK"}[1])',"OK")
t_render('print(len("\0"))',"1")
t_render('print(1 in {1:2})',"1")
t_render('x = {1:2}; del x[1]; print(len(x))','0')
t_render("""
def test(t):
t = "O"+t
print(t)
test("K")
""","OK")
 
t_render("""print([1,2,3].index(3))""","2")
t_render("""print("1,2,3".split(",").index("3"))""","2")
t_render("""v = [3,2,1]; v.sort(); print(v[0])""","1")
 
t_render("""print(abs(-5))""","5")
t_render("""print(int(1.234))""","1")
t_render("print(int(round(1.5)))","2")
t_render("print(ord('X'))","88")
t_render("print(ord(chr(128)))","128")
#t_render("print(fsize('LICENSE.txt'))","181")
t_render("print(int('ff',16))","255")
t_render("""
def test(x,y): print(x); return y
test('a',1) or test('b',1) and test('c',0)
""","a")
 
t_render("def test(): print('OK')\n{'__call__':test}()","OK")
 
t_render("""
class A:
def __init__(self):
self.a = 'O'
self.b = 'x'
def test(self):
print("KO")
class B(A):
def __init__(self):
A.__init__(self)
self.b = 'K'
def test(self):
print(self.a+self.b)
B().test()
""","OK")
 
t_render("""
class A:
def test(self):
print(self)
A.test("OK")
""","OK")
 
t_render("""
def test():
def fnc():
print("OK")
fnc()
test()
""","OK")
 
t_render("""print("aa..bbb...ccc".replace("..","X"))""","aaXbbbX.ccc")
t_render("""print("..bbb..".replace("..","X"))""","XbbbX")
t_render("""print("234".replace("\r\n","\n"))""","234")
t_render("""print("a\0b".replace("\0","X"))""","aXb")
t_render("""x = "a\0b"; x = x.replace("\0","c"); print(x)""","acb")
 
t_render("""print(0xff)""","255")
t_render("""x=(1,3);print({x:'OK'}[x])""","OK")
t_render("""x=(1,3);y=(1,3);print({x:'OK'}[y])""","OK")
t_render("""print({(1,3):'OK'}[(1,3)])""","OK")
t_render("def test(): test()\ntest()","Exception",0)
t_render("x = []; x.append(x); print(x<x)","0");
t_render("x = []; x.append(x); print({x:'OK'}[x])","OK")
#t_render("print(float(str(4294967296))==float('4294967296'))","1")
t_render("print(2**3)","8")
#t_render("x = 'OK',\nprint(x[0])","OK")
 
test_range()
t_render(['v="OK"',"from tmp1 import *\nprint(v)"],"OK")
t_render(['v="OK"',"from tmp1 import v\nprint(v)"],"OK")
t_render(['x="X";y="K"',"x = 'O'\nfrom tmp1 import y\nprint(x+y)"],"OK")
 
t_render("""
def test(**e):
print(e['x'])
test(x='OK')
""","OK")
 
# test register allocator
s = "def f():pass\n"+("f()\n"*256)+"print('OK')"
t_render(s,"OK")
t_render("print(2**3)","8")
t_render("print(2*3**2)", "18", False)
t_render("""
def test(**v): return 'OK'
print(test())
"""
,"OK")
t_render("""
def test(**v):
v['x'] = 'OK'
return v
print(test()['x'])
"""
,"OK")
 
################################################################################
 
def t_boot(ss,ex,exact=True):
if not istype(ss,'list'): ss =[ss]
n = 1
for s in ss:
fname = 'tmp'+str(n)+'.tpc'
system_rm(fname)
fname = 'tmp'+str(n)+'.py'
save(fname,s)
n += 1
system_rm('tmp.txt')
system(TINYPY+fname+' > tmp.txt')
res = load(TMP).strip()
#print(ss,ex,res)
if exact: assert(res == ex)
else: assert(ex in res)
 
is_boot = False
try:
assert(is_tinypy == True)
x = compile('x=3','')
is_boot = True
except:
pass
 
if is_boot == True and __name__ == '__main__':
print("# t_boot")
t_boot(["def test(): print('OK')","import tmp1; tmp1.test()"],"OK")
 
/programs/develop/tinypy/tinypy/tokenize.py
0,0 → 1,171
class Token:
def __init__(self,pos=(0,0),type='symbol',val=None,items=None):
self.pos,self.type,self.val,self.items=pos,type,val,items
 
def u_error(ctx,s,i):
y,x = i
line = s.split('\n')[y-1]
p = ''
if y < 10: p += ' '
if y < 100: p += ' '
r = p + str(y) + ": " + line + "\n"
r += " "+" "*x+"^" +'\n'
raise 'error: '+ctx+'\n'+r
 
ISYMBOLS = '`-=[];,./~!@$%^&*()+{}:<>?'
SYMBOLS = [
'def','class','yield','return','pass','and','or','not','in','import',
'is','while','break','for','continue','if','else','elif','try',
'except','raise','True','False','None','global','del','from',
'-','+','*','**','/','%','<<','>>',
'-=','+=','*=','/=','=','==','!=','<','>',
'<=','>=','[',']','{','}','(',')','.',':',',',';','&','|','!',
]
B_BEGIN,B_END = ['[','(','{'],[']',')','}']
 
class TData:
def __init__(self):
self.y,self.yi,self.nl = 1,0,True
self.res,self.indent,self.braces = [],[0],0
def add(self,t,v): self.res.append(Token(self.f,t,v))
 
def clean(s):
s = s.replace('\r\n','\n')
s = s.replace('\r','\n')
return s
 
def tokenize(s):
s = clean(s)
try: return do_tokenize(s)
except: u_error('tokenize',s,T.f)
 
def do_tokenize(s):
global T
T,i,l = TData(),0,len(s)
T.f = (T.y,i-T.yi+1)
while i < l:
c = s[i]; T.f = (T.y,i-T.yi+1)
if T.nl: T.nl = False; i = do_indent(s,i,l)
elif c == '\n': i = do_nl(s,i,l)
elif c in ISYMBOLS: i = do_symbol(s,i,l)
elif c >= '0' and c <= '9': i = do_number(s,i,l)
elif (c >= 'a' and c <= 'z') or \
(c >= 'A' and c <= 'Z') or c == '_': i = do_name(s,i,l)
elif c=='"' or c=="'": i = do_string(s,i,l)
elif c=='#': i = do_comment(s,i,l)
elif c == '\\' and s[i+1] == '\n':
i += 2; T.y,T.yi = T.y+1,i
elif c == ' ' or c == '\t': i += 1
else: u_error('tokenize',s,T.f)
indent(0)
r = T.res; T = None
return r
 
def do_nl(s,i,l):
if not T.braces:
T.add('nl',None)
i,T.nl = i+1,True
T.y,T.yi = T.y+1,i
return i
 
def do_indent(s,i,l):
v = 0
while i<l:
c = s[i]
if c != ' ' and c != '\t': break
i,v = i+1,v+1
if c != '\n' and c != '#' and not T.braces: indent(v)
return i
 
def indent(v):
if v == T.indent[-1]: pass
elif v > T.indent[-1]:
T.indent.append(v)
T.add('indent',v)
elif v < T.indent[-1]:
n = T.indent.index(v)
while len(T.indent) > n+1:
v = T.indent.pop()
T.add('dedent',v)
 
 
def do_symbol(s,i,l):
symbols = []
v,f,i = s[i],i,i+1
if v in SYMBOLS: symbols.append(v)
while i<l:
c = s[i]
if not c in ISYMBOLS: break
v,i = v+c,i+1
if v in SYMBOLS: symbols.append(v)
v = symbols.pop(); n = len(v); i = f+n
T.add('symbol',v)
if v in B_BEGIN: T.braces += 1
if v in B_END: T.braces -= 1
return i
 
def do_number(s,i,l):
v,i,c =s[i],i+1,s[i]
while i<l:
c = s[i]
if (c < '0' or c > '9') and (c < 'a' or c > 'f') and c != 'x': break
v,i = v+c,i+1
if c == '.':
v,i = v+c,i+1
while i<l:
c = s[i]
if c < '0' or c > '9': break
v,i = v+c,i+1
T.add('number',v)
return i
 
def do_name(s,i,l):
v,i =s[i],i+1
while i<l:
c = s[i]
if (c < 'a' or c > 'z') and (c < 'A' or c > 'Z') and (c < '0' or c > '9') and c != '_': break
v,i = v+c,i+1
if v in SYMBOLS: T.add('symbol',v)
else: T.add('name',v)
return i
 
def do_string(s,i,l):
v,q,i = '',s[i],i+1
if (l-i) >= 5 and s[i] == q and s[i+1] == q: # """
i += 2
while i<l-2:
c = s[i]
if c == q and s[i+1] == q and s[i+2] == q:
i += 3
T.add('string',v)
break
else:
v,i = v+c,i+1
if c == '\n': T.y,T.yi = T.y+1,i
else:
while i<l:
c = s[i]
if c == "\\":
i = i+1; c = s[i]
if c == "n": c = '\n'
if c == "r": c = chr(13)
if c == "t": c = "\t"
if c == "0": c = "\0"
v,i = v+c,i+1
elif c == q:
i += 1
T.add('string',v)
break
else:
v,i = v+c,i+1
return i
 
def do_comment(s,i,l):
i += 1
while i<l:
c = s[i]
if c == '\n': break
i += 1
return i
 
 
/programs/develop/tinypy/tinypy/tp.c
0,0 → 1,32
#ifndef TP_COMPILER
#define TP_COMPILER 1
#endif
 
#include "tp.h"
#include "list.c"
#include "koconsole.c"
#include "dict.c"
#include "misc.c"
#include "string.c"
#include "builtins.c"
#include "gc.c"
#include "ops.c"
void tp_compiler(TP);
#include "vm.c"
 
tp_obj tp_None = {TP_NONE};
 
#if TP_COMPILER
#include "bc.c"
void tp_compiler(TP) {
tp_import(tp,0,"tokenize",tp_tokenize);
tp_import(tp,0,"parse",tp_parse);
tp_import(tp,0,"encode",tp_encode);
tp_import(tp,0,"py2bc",tp_py2bc);
tp_call(tp,"py2bc","_init",tp_None);
}
#else
void tp_compiler(TP) { }
#endif
 
/**/
/programs/develop/tinypy/tinypy/tp.h
0,0 → 1,233
#ifndef TP_H
#define TP_H
 
#include <setjmp.h>
#include <sys/stat.h>
#ifndef __USE_ISOC99
#define __USE_ISOC99
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <math.h>
 
#ifdef __GNUC__
#define tp_inline __inline__
#endif
 
#ifdef _MSC_VER
#define tp_inline __inline
#endif
 
#ifndef tp_inline
#error "Unsuported compiler"
#endif
 
#define tp_malloc(x) calloc((x),1)
#define tp_realloc(x,y) realloc(x,y)
#define tp_free(x) free(x)
 
/* #include <gc/gc.h>
#define tp_malloc(x) GC_MALLOC(x)
#define tp_realloc(x,y) GC_REALLOC(x,y)
#define tp_free(x)*/
 
enum {
TP_NONE,TP_NUMBER,TP_STRING,TP_DICT,
TP_LIST,TP_FNC,TP_DATA,
};
 
typedef double tp_num;
 
typedef struct tp_number_ {
int type;
tp_num val;
} tp_number_;
typedef struct tp_string_ {
int type;
struct _tp_string *info;
char const *val;
int len;
} tp_string_;
typedef struct tp_list_ {
int type;
struct _tp_list *val;
} tp_list_;
typedef struct tp_dict_ {
int type;
struct _tp_dict *val;
} tp_dict_;
typedef struct tp_fnc_ {
int type;
struct _tp_fnc *info;
int ftype;
void *val;
} tp_fnc_;
typedef struct tp_data_ {
int type;
struct _tp_data *info;
void *val;
int magic;
} tp_data_;
 
typedef union tp_obj {
int type;
tp_number_ number;
struct { int type; int *data; } gci;
tp_string_ string;
tp_dict_ dict;
tp_list_ list;
tp_fnc_ fnc;
tp_data_ data;
} tp_obj;
 
typedef struct _tp_string {
int gci;
char s[1];
} _tp_string;
typedef struct _tp_list {
int gci;
tp_obj *items;
int len;
int alloc;
} _tp_list;
typedef struct tp_item {
int used;
int hash;
tp_obj key;
tp_obj val;
} tp_item;
typedef struct _tp_dict {
int gci;
tp_item *items;
int len;
int alloc;
int cur;
int mask;
int used;
} _tp_dict;
typedef struct _tp_fnc {
int gci;
tp_obj self;
tp_obj globals;
} _tp_fnc;
 
 
typedef union tp_code {
unsigned char i;
struct { unsigned char i,a,b,c; } regs;
struct { char val[4]; } string;
struct { float val; } number;
} tp_code;
 
typedef struct tp_frame_ {
tp_code *codes;
tp_code *cur;
tp_code *jmp;
tp_obj *regs;
tp_obj *ret_dest;
tp_obj fname;
tp_obj name;
tp_obj line;
tp_obj globals;
int lineno;
int cregs;
} tp_frame_;
 
#define TP_GCMAX 4096
#define TP_FRAMES 256
/* #define TP_REGS_PER_FRAME 256*/
#define TP_REGS 16384
typedef struct tp_vm {
tp_obj builtins;
tp_obj modules;
tp_frame_ frames[TP_FRAMES];
tp_obj _params;
tp_obj params;
tp_obj _regs;
tp_obj *regs;
tp_obj root;
jmp_buf buf;
int jmp;
tp_obj ex;
char chars[256][2];
int cur;
/* gc*/
_tp_list *white;
_tp_list *grey;
_tp_list *black;
_tp_dict *strings;
int steps;
} tp_vm;
 
#define TP tp_vm *tp
typedef struct _tp_data {
int gci;
void (*free)(TP,tp_obj);
} _tp_data;
 
/* NOTE: these are the few out of namespace items for convenience*/
#define tp_True tp_number(1)
#define tp_False tp_number(0)
#define TP_CSTR(v) ((tp_str(tp,(v))).string.val)
 
extern tp_obj tp_None;
 
void tp_set(TP,tp_obj,tp_obj,tp_obj);
tp_obj tp_get(TP,tp_obj,tp_obj);
tp_obj tp_len(TP,tp_obj);
tp_obj tp_str(TP,tp_obj);
int tp_cmp(TP,tp_obj,tp_obj);
void _tp_raise(TP,tp_obj);
tp_obj tp_printf(TP,char const *fmt,...);
tp_obj tp_track(TP,tp_obj);
void tp_grey(TP,tp_obj);
 
/* __func__ __VA_ARGS__ __FILE__ __LINE__ */
#define tp_raise(r,fmt,...) { \
_tp_raise(tp,tp_printf(tp,fmt,__VA_ARGS__)); \
return r; \
}
#define TP_OBJ() (tp_get(tp,tp->params,tp_None))
tp_inline static tp_obj tp_type(TP,int t,tp_obj v) {
if (v.type != t) { tp_raise(tp_None,"_tp_type(%d,%s)",t,TP_CSTR(v)); }
return v;
}
#define TP_TYPE(t) tp_type(tp,t,TP_OBJ())
#define TP_NUM() (TP_TYPE(TP_NUMBER).number.val)
#define TP_STR() (TP_CSTR(TP_TYPE(TP_STRING)))
#define TP_DEFAULT(d) (tp->params.list.val->len?tp_get(tp,tp->params,tp_None):(d))
#define TP_LOOP(e) \
int __l = tp->params.list.val->len; \
int __i; for (__i=0; __i<__l; __i++) { \
(e) = _tp_list_get(tp,tp->params.list.val,__i,"TP_LOOP");
#define TP_END \
}
 
tp_inline static int _tp_min(int a, int b) { return (a<b?a:b); }
tp_inline static int _tp_max(int a, int b) { return (a>b?a:b); }
tp_inline static int _tp_sign(tp_num v) { return (v<0?-1:(v>0?1:0)); }
 
tp_inline static tp_obj tp_number(tp_num v) {
tp_obj val = {TP_NUMBER};
val.number.val = v;
return val;
}
 
tp_inline static tp_obj tp_string(char const *v) {
tp_obj val;
tp_string_ s = {TP_STRING, 0, v, 0};
s.len = strlen(v);
val.string = s;
return val;
}
 
tp_inline static tp_obj tp_string_n(char const *v,int n) {
tp_obj val;
tp_string_ s = {TP_STRING, 0,v,n};
val.string = s;
return val;
}
 
#endif
/programs/develop/tinypy/tinypy/vmmain.c
0,0 → 1,9
#define TP_COMPILER 0
#include "tp.c"
 
int main(int argc, char *argv[]) {
tp_vm *tp = tp_init(argc,argv);
tp_import(tp,argv[1],"__main__",0);
tp_deinit(tp);
return(0);
}
/programs/develop/tinypy/modules/kolibri/debug.c
0,0 → 1,19
#include "tp.h"
 
void debug_write_byte(const char ch){
__asm__ __volatile__(
"int $0x40"
::"a"(63), "b"(1), "c"(ch)
);
}
 
tp_obj kolibri_debug_print(TP)
{
tp_obj str = TP_TYPE(TP_STRING);
for(int i=0; i < str.string.len; i++)
{
debug_write_byte(str.string.val[i]);
}
return tp_None;
}
 
/programs/develop/tinypy/modules/kolibri/gui.c
0,0 → 1,163
#include "tp.h"
#include <kos32sys.h>
 
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
 
extern void _tp_raise(TP,tp_obj);
extern tp_obj tp_dict(TP);
extern tp_obj tp_method(TP,tp_obj self,tp_obj v(TP));
extern tp_obj tp_number(tp_num v);
extern tp_obj tp_list(TP);
extern void _tp_list_append(TP,_tp_list *self, tp_obj v);
extern tp_obj tp_call(TP, const char *mod, const char *fnc, tp_obj params);
extern void _tp_call(TP,tp_obj *dest, tp_obj fnc, tp_obj params);
extern int tp_bool(TP,tp_obj v);
extern tp_obj tp_has(TP,tp_obj self, tp_obj k);
// #define _cdecl __attribute__((cdecl))
extern int (* _cdecl con_printf)(const char* format,...);
static tp_obj kolibri_show(TP)
{
tp_obj self = TP_TYPE(TP_DICT);
uint16_t xpos = (uint16_t)(tp_get(tp, self, tp_string("x")).number.val);
uint16_t ypos = (uint16_t)tp_get(tp, self, tp_string("y")).number.val;
uint16_t height = (uint16_t)tp_get(tp, self, tp_string("height")).number.val;
uint16_t width = (uint16_t)tp_get(tp, self, tp_string("width")).number.val;
uint16_t fixedsize = (uint16_t)tp_get(tp, self, tp_string("fixedsize")).number.val;
uint32_t bgcolor = (uint32_t)tp_get(tp, self, tp_string("bgcolor")).number.val;
uint32_t status;
uint32_t style;
uint32_t x = xpos * 0x10000 + width;
uint32_t y = ypos * 0x10000 + height;
if (fixedsize)
style = 0;
else
style = 0x33000000 + (bgcolor & 0xFFFFFF);
asm volatile ("int $0x40"::"a"(12), "b"(1));
asm volatile ("int $0x40"::
"a"(0), "b"(x), "c"(y), "d"(style),
"S"(0), "D"(0));
asm volatile ("int $0x40"::"a"(12), "b"(2));
/* If window has additional handler, run it. */
if (tp_bool(tp, tp_has(tp, self, tp_string("on_show"))))
{
tp_obj result;
tp_obj fnc = tp_get(tp, self, tp_string("on_show"));
tp_obj param_list = tp_list(tp); /* Prepare parameters. */
_tp_list_append(tp, param_list.list.val, self);
_tp_call(tp, &result, fnc, param_list);
}
return tp_None;
}
 
static void window_function(void)
{
uint32_t ev;
/* Wait for event. */
do {
asm volatile("int $0x40":"=a"(ev):"a"(10));
} while(ev != 3);
asm volatile("int $040"::"a"(-1));
}
 
static tp_obj kolibri_default_handler(TP)
{
return tp_None;
}
 
/* Run window_function() in separated thread. */
static tp_obj kolibri_run(TP)
{
tp_obj self = TP_TYPE(TP_DICT);
tp_obj redraw = tp_get(tp, self, tp_string("show"));
tp_obj result;
tp_obj key_handler = tp_None;
tp_obj button_handler = tp_None;
int button_id;
uint32_t ev;
int leave=0;
tp_obj param_list;
/* Obtain handlers. */
if (tp_bool(tp, tp_has(tp, self, tp_string("on_key"))))
key_handler = tp_get(tp, self, tp_string("on_key"));
if (tp_bool(tp, tp_has(tp, self, tp_string("on_button"))))
button_handler = tp_get(tp, self, tp_string("on_button"));
 
while(!leave){
asm volatile("int $0x40":"=a"(ev):"a"(10));
switch (ev)
{
case 1:
_tp_call(tp, &result, redraw, tp_None);
break;
case 2:
if (key_handler.type == TP_FNC)
{
param_list = tp_list(tp); /* Prepare parameters. */
_tp_list_append(tp, param_list.list.val, self);
oskey_t key;
key = get_key();
_tp_list_append(tp, param_list.list.val, tp_number(key.code));
_tp_call(tp, &result, key_handler, param_list);
}
break;
case 3:
button_id = get_os_button();
if (button_id == 1)
leave = 1;
else if (button_handler.type == TP_FNC)
{
param_list = tp_list(tp); /* Prepare parameters. */
_tp_list_append(tp, param_list.list.val, self);
_tp_list_append(tp, param_list.list.val, tp_number(button_id));
_tp_call(tp, &result, button_handler, param_list);
}
break;
default:
con_printf("Got unknown event %d\n", ev);
break;
}
};
return tp_None;
}
 
static tp_obj kolibri_print_text(TP)
{
tp_obj self = TP_TYPE(TP_DICT);
uint32_t textcolor = (uint32_t)tp_get(tp, self, tp_string("textcolor")).number.val;
uint16_t x = (uint16_t)tp_get(tp, self, tp_string("curx")).number.val;
uint16_t y = (uint16_t)tp_get(tp, self, tp_string("cury")).number.val;
uint32_t ofs;
uint32_t width = (uint32_t)tp_get(tp, self, tp_string("width")).number.val;
tp_obj text = TP_TYPE(TP_STRING);
 
draw_text_sys((char *)text.string.val, x, y, text.string.len, textcolor);
/* Update cursor position. */
ofs = 6 * text.string.len;
tp_set(tp, self, tp_string("cury"), tp_number(y + 9 * ((x + ofs) / width)));
tp_set(tp, self, tp_string("curx"), tp_number((x + ofs)%width));
 
return tp_None;
}
 
tp_obj kolibri_mainwindow(TP)
{
tp_obj obj = tp_dict(tp);
obj = tp_dict(tp);
tp_set(tp, obj, tp_string("x"), TP_TYPE(TP_NUMBER));
tp_set(tp, obj, tp_string("y"), TP_TYPE(TP_NUMBER));
tp_set(tp, obj, tp_string("height"), TP_TYPE(TP_NUMBER));
tp_set(tp, obj, tp_string("width"), TP_TYPE(TP_NUMBER));
tp_set(tp, obj, tp_string("curx"), tp_number(0));
tp_set(tp, obj, tp_string("cury"), tp_number(0));
tp_set(tp, obj, tp_string("fixedsize"), TP_TYPE(TP_NUMBER));
tp_set(tp, obj, tp_string("textcolor"), tp_number(0x202020));
tp_set(tp, obj, tp_string("bgcolor"), tp_number(0xFFFFFF));
tp_set(tp, obj, tp_string("show"), tp_method(tp, obj, kolibri_show));
tp_set(tp, obj, tp_string("run"), tp_method(tp, obj, kolibri_run));
/*tp_set(tp, obj, tp_string("keyhandler"), tp_method(tp, obj, kolibri_default_handler));
tp_set(tp, obj, tp_string("buttonhandler"), tp_method(tp, obj, kolibri_default_handler));*/
tp_set(tp, obj, tp_string("print_text"), tp_method(tp, obj, kolibri_print_text));
return obj;
}
/programs/develop/tinypy/modules/kolibri/init.c
0,0 → 1,29
#include "tp.h"
 
extern tp_obj kolibri_open(TP);
extern tp_obj kolibri_mainwindow(TP);
extern tp_obj kolibri_debug_print(TP);
extern tp_obj kolibri_socket_module(TP);
extern tp_obj tp_dict(TP);
extern tp_obj tp_fnc(TP,tp_obj v(TP));
 
void kolibri_init(TP)
{
tp_obj kolibri_mod = tp_dict(tp);
tp_obj socket_mod = kolibri_socket_module(tp);
 
tp_set(tp, kolibri_mod, tp_string("open"), tp_fnc(tp, kolibri_open));
tp_set(tp, kolibri_mod, tp_string("window"), tp_fnc(tp, kolibri_mainwindow));
/* debug */
tp_set(tp, kolibri_mod, tp_string("debug_print"), tp_fnc(tp, kolibri_debug_print));
/* socket is a separated module. */
tp_set(tp, kolibri_mod, tp_string("socket"), socket_mod);
 
/* Bind module attributes. */
tp_set(tp, kolibri_mod, tp_string("__doc__"),
tp_string("KolibriOS system specific functions."));
tp_set(tp, kolibri_mod, tp_string("__name__"), tp_string("kolibri"));
tp_set(tp, kolibri_mod, tp_string("__file__"), tp_string(__FILE__));
/* Bind to tiny modules[] */
tp_set(tp, tp->modules, tp_string("kolibri"), kolibri_mod);
}
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/programs/develop/tinypy/modules/kolibri/net.c
0,0 → 1,296
#include <sys/socket.h>
// #include <menuet/net.h>
 
#include "tp.h"
 
extern tp_obj tp_dict(TP);
extern tp_obj tp_method(TP,tp_obj self,tp_obj v(TP));
extern tp_obj tp_fnc(TP,tp_obj v(TP));
extern tp_obj tp_get(TP,tp_obj self, tp_obj k);
tp_obj tp_has(TP,tp_obj self, tp_obj k);
// #define _cdecl __attribute__((cdecl))
extern int (* _cdecl con_printf)(const char* format,...);
 
#define PRECISION 0.000001
 
#define GET_SOCKET_DESCRIPTOR(_obj, _sock) do{ \
if (fabs(tp_has(tp, _obj, tp_string("socket")).number.val) < PRECISION)\
tp_raise(tp_None, "Socket not open", tp_None); \
_sock = (__u32)(tp_get(tp, _obj, tp_string("socket")).number.val + PRECISION);\
} while(0)
 
/* Socket close method.
*
* Example:
* s.close() # s must be a socket object created by socket.
*
* Raises exception if socket was not opened. Otherwise returns True.
*/
static tp_obj kolibri_close_socket(TP)
{
// tp_obj self = TP_TYPE(TP_DICT);
// __u32 socktype;
// __u32 s;
 
// GET_SOCKET_DESCRIPTOR(self, s);
 
// socktype = (__u32)tp_get(tp, self, tp_string("type")).number.val;
// GET_SOCKET_DESCRIPTOR(self, s);
// if (socktype == SOCK_STREAM)
// __menuet__close_TCP_socket(s);
// else if (socktype == SOCK_DGRAM)
// __menuet__close_UDP_socket(s);
return tp_True;
}
 
/* Socket send method.
*
* Example:
* data="<html><head><title>Preved!!!</title></head><body>Example.</body></html>"
* s.send(data)
* or:
* s.send(data, 20) # Send just 20 bytes
*/
static tp_obj kolibri_send(TP)
{
// tp_obj self = TP_TYPE(TP_DICT);
// tp_obj data_obj = TP_TYPE(TP_STRING);
// __u32 datalen = TP_DEFAULT(tp_False).number.val;
// __u32 socktype = (__u32)tp_get(tp, self, tp_string("type")).number.val;
// __u32 s;
// int result;
 
// GET_SOCKET_DESCRIPTOR(self, s);
 
// if (datalen < 0 || datalen > data_obj.string.len)
// datalen = data_obj.string.len;
// if (socktype == SOCK_STREAM)
// result = __menuet__write_TCP_socket(s, datalen, (void *)data_obj.string.val);
// else if (socktype == SOCK_DGRAM)
// result = __menuet__write_UDP_socket(s, datalen, (void *)data_obj.string.val);
// return tp_number(!(result != 0));
return tp_number(0);
}
 
#define __u32 unsigned int
#define __u8 unsigned char
 
/* Socket recv method.
*
* data="<html><head><title>Preved!!!</title></head><body>Example.</body></html>"
* s.recv(data)
* or:
* s.recv(data, 20) # Send just 20 bytes
*/
static tp_obj kolibri_recv(TP)
{
tp_obj self = TP_TYPE(TP_DICT);
__u32 datalen = TP_DEFAULT(tp_False).number.val;
__u32 s;
__u8 c;
__u8 *buf, *p;
__u32 buf_size;
__u32 bytes_read = 0;
int i;
 
// GET_SOCKET_DESCRIPTOR(self, s);
 
// if (datalen)
// buf_size = datalen;
// else
// buf_size = 2048;
// if (!(buf = malloc(datalen)))
// tp_raise(tp_None, "Cannot allocate buffer for received data", tp_None);
// p = buf;
// while (__menuet__read_socket(s, &c) && bytes_read < buf_size)
// {
// *p++ = c;
// bytes_read++;
// if (bytes_read >= buf_size && !datalen)
// {
// buf_size += 1024;
// buf = realloc(buf, buf_size);
// }
// }
return tp_string_n(buf, bytes_read);
}
 
static void inet_pton(TP, const char *buf, int len, __u32 *addr)
{
char *p = (char *)buf;
int i = 0;
__u32 val = 0;
*addr = 0;
while (*p && p < buf + len && i < 4)
{
if (*p == '.' || !*p)
{
if (val > 255)
tp_raise(tp_None, "ValueError: number > 255 in IP address", tp_None);
*addr += (val << ((i++) << 3));
val = 0;
}
else
{
if (*p < '0' || *p > '9')
tp_raise(tp_None, "ValueError: bad char in IP address, digit expected", tp_None);
val = val * 10 + *p - '0';
}
p++;
}
if (!*p)
{
if (i == 3)
*addr += (val << ((i++) << 3));
else
tp_raise(tp_None, "ValueError: bad IP address", tp_None);
}
 
}
 
/* Converter from string presentation to binary address. */
static tp_obj kolibri_inet_pton(TP)
{
tp_obj obj;
__u32 addr;
obj = TP_TYPE(TP_STRING);
// inet_pton(tp, (char *)obj.string.val, (int)obj.string.len, &addr);
return tp_number(addr);
}
 
/* Socket bind method.
*
* In KolibriOS it just sets local address and port.
*
* Example:
* s.bind('10.10.1.2', 6000) #Connects to 10.10.1.2:6000
*/
tp_obj kolibri_bind(TP)
{
// tp_obj self = TP_TYPE(TP_DICT);
// tp_obj local_addr_obj = TP_OBJ();
// __u32 local_port = (__u32)TP_TYPE(TP_NUMBER).number.val;
// __u32 local_addr;
 
// if (local_addr_obj.type == TP_NUMBER)
// local_addr = local_addr_obj.number.val;
// else if (local_addr_obj.type == TP_STRING)
// inet_pton(tp, (const char *)local_addr_obj.string.val, local_addr_obj.string.len, &local_addr);
 
// tp_set(tp, self, tp_string("local_addr"), tp_number(local_addr));
// tp_set(tp, self, tp_string("local_port"), tp_number(local_port));
return tp_None;
}
 
/* Socket connect method.
*
* Example:
* s.connect('10.10.1.1', 7000) #Connects to 10.10.1.1:7000
*/
tp_obj kolibri_connect(TP)
{
// tp_obj self = TP_TYPE(TP_DICT);
// tp_obj remote_addr_obj = TP_OBJ();
// __u32 remote_addr;
// __u32 remote_port = (__u32)TP_TYPE(TP_NUMBER).number.val;
// __u32 local_port = tp_get(tp, self, tp_string("local_port")).number.val;
// __u32 socktype = (__u32)tp_get(tp, self, tp_string("type")).number.val;
// int s = -1; /* Socket descriptor */
 
 
// if (remote_addr_obj.type == TP_NUMBER)
// remote_addr = remote_addr_obj.number.val;
// else if (remote_addr_obj.type == TP_STRING)
// inet_pton(tp, (const char *)remote_addr_obj.string.val, remote_addr_obj.string.len, &remote_addr);
 
// if (socktype == SOCK_STREAM)
// s = __menuet__open_TCP_socket(local_port, remote_port, remote_addr, 1);
// else if (socktype == SOCK_DGRAM)
// s = __menuet__open_UDP_socket(local_port, remote_port, remote_addr);
// if (s >= 0)
// {
// tp_set(tp, self, tp_string("socket"), tp_number(s));
// return tp_True;
// }
// else
return tp_False;
}
 
/* Socket listen method.
*
* Example:
* s.listen('10.10.1.1', 5000)
*/
tp_obj kolibri_listen(TP)
{
// tp_obj self = TP_TYPE(TP_DICT);
// tp_obj remote_addr_obj = TP_OBJ();
// __u32 remote_addr;
// __u32 remote_port = (__u32)TP_TYPE(TP_NUMBER).number.val;
// __u32 local_port = tp_get(tp, self, tp_string("local_port")).number.val;
// __u32 socktype = (__u32)tp_get(tp, self, tp_string("type")).number.val;
// int s = -1; /* Socket descriptor */
 
// if (socktype != SOCK_STREAM)
// tp_raise(tp_None, "IOError: attempt to listen on non-TCP socket", tp_None);
 
// if (remote_addr_obj.type == TP_NUMBER)
// remote_addr = remote_addr_obj.number.val;
// else if (remote_addr_obj.type == TP_STRING)
// inet_pton(tp, (const char *)remote_addr_obj.string.val, remote_addr_obj.string.len, &remote_addr);
 
// if ((s = __menuet__open_TCP_socket(local_port, remote_port, remote_addr, 0)) >= 0)
// {
// tp_set(tp, self, tp_string("socket"), tp_number(s));
// return tp_True;
// }
// else
return tp_False;
}
 
 
/* Exported function.
*
* Example:
*
* s = socket(socket.AF_INET, socket.SOCK_DGRAM)
*
* Returns socket object.
*/
tp_obj kolibri_socket(TP)
{
tp_obj s;
tp_obj sockfamily = TP_TYPE(TP_NUMBER);
tp_obj socktype = TP_TYPE(TP_NUMBER);
 
// if (fabs(sockfamily.number.val - AF_INET) > PRECISION ||
// (fabs(socktype.number.val - SOCK_STREAM) > PRECISION &&
// fabs(socktype.number.val - SOCK_DGRAM) > PRECISION))
// return tp_None;
s = tp_dict(tp);
// tp_set(tp, s, tp_string("family"), sockfamily);
// tp_set(tp, s, tp_string("type"), socktype);
// tp_set(tp, s, tp_string("bind"), tp_method(tp, s, kolibri_bind));
// tp_set(tp, s, tp_string("connect"), tp_method(tp, s, kolibri_connect));
// tp_set(tp, s, tp_string("send"), tp_method(tp, s, kolibri_send));
// tp_set(tp, s, tp_string("recv"), tp_method(tp, s, kolibri_recv));
// tp_set(tp, s, tp_string("close"), tp_method(tp, s, kolibri_close_socket));
// if (fabs(socktype.number.val - SOCK_STREAM) < PRECISION)
// tp_set(tp, s, tp_string("listen"), tp_method(tp, s, kolibri_listen));
return s;
}
 
tp_obj kolibri_socket_module(TP)
{
tp_obj socket_mod = tp_dict(tp);
 
// tp_set(tp, socket_mod, tp_string("AF_INET"), tp_number(AF_INET));
// tp_set(tp, socket_mod, tp_string("SOCK_STREAM"), tp_number(SOCK_STREAM));
// tp_set(tp, socket_mod, tp_string("SOCK_DGRAM"), tp_number(SOCK_DGRAM));
tp_set(tp, socket_mod, tp_string("AF_INET"), tp_number(0));
tp_set(tp, socket_mod, tp_string("SOCK_STREAM"), tp_number(0));
tp_set(tp, socket_mod, tp_string("SOCK_DGRAM"), tp_number(0));
tp_set(tp, socket_mod, tp_string("inet_pton"), tp_fnc(tp, kolibri_inet_pton));
tp_set(tp, socket_mod, tp_string("socket"), tp_fnc(tp, kolibri_socket));
return socket_mod;
}
/programs/develop/tinypy/modules/kolibri/fs.c
0,0 → 1,258
#include <string.h>
#include "tp.h"
 
extern tp_obj tp_fnc(TP,tp_obj v(TP));
extern tp_obj tp_method(TP,tp_obj self,tp_obj v(TP));
extern tp_obj tp_number(tp_num v);
extern tp_obj tp_string(char const *v);
extern tp_obj tp_list(TP);
extern tp_obj tp_dict(TP);
extern void _tp_raise(TP,tp_obj);
// #define _cdecl __attribute__((cdecl))
extern int (* _cdecl con_printf)(const char* format,...);
 
#define call70(par, st) asm volatile ("int $0x40":"=a"(st):"a"(70), "b"(par))
#define call70_rw(par, st, cnt) asm volatile ("int $0x40":"=a"(st), "=b"(cnt):"a"(70), "b"(par))
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
 
typedef struct {
uint32_t subfnc;
uint32_t res1;
uint32_t res2;
uint32_t res3;
uint8_t *data;
uint8_t res4;
char *fn;
}__attribute__((__packed__)) info_params_t;
 
typedef struct {
uint32_t subfnc;
uint32_t pos;
uint32_t res1;
uint32_t cnt;
char* data;
uint8_t res2;
char* fn;
} __attribute__((__packed__)) rw_params_t;
 
static tp_obj kolibri_close(TP)
{
tp_obj self = TP_TYPE(TP_DICT);
uint32_t size = tp_get(tp, self, tp_string("size")).number.val;
char *mode = (char *)tp_get(tp, self, tp_string("mode")).string.val;
tp_set(tp, self, tp_string("closed"), tp_True);
return tp_None;
}
 
static tp_obj kolibri_read(TP)
{
uint32_t status, num;
tp_obj self = TP_TYPE(TP_DICT);
uint32_t pos = tp_get(tp, self, tp_string("pos")).number.val;
uint32_t size = tp_get(tp, self, tp_string("size")).number.val;
uint32_t cnt;
char *buf = (char *)malloc(size - pos);
rw_params_t params = {0, pos, 0, size - pos, buf, 0,
(char *)tp_get(tp, self, tp_string("name")).string.val};
char *mode = (char *)tp_get(tp, self, tp_string("mode")).string.val;
 
if (*mode != 'r')
tp_raise(tp_None, "IOError: file not open for reading", tp_None);
 
if (!buf)
return tp_None;
call70_rw((&params), status, cnt);
buf[cnt] = '\0';
return tp_string(buf);
}
 
#if 0
static tp_obj kolibri_readline(TP)
{
return tp_string("Line");
}
 
static tp_obj kolibri_readlines(TP)
{
tp_obj result = tp_list(tp);
int i;
 
for(i=0; i < 5; i++)
tp_add(result, tp_string("Line"));
return result;
}
#endif
 
/* Write object to file.
*
* tp TinyPy virtual machine structure.
*
* returns tp_True
*/
static tp_obj kolibri_write(TP)
{
tp_obj self = TP_TYPE(TP_DICT);
tp_obj obj = TP_OBJ(); /* What to write. */
char *mode = (char *)tp_get(tp, self, tp_string("mode")).string.val;
uint32_t pos = (uint32_t)tp_get(tp, self, tp_string("pos")).number.val;
uint32_t size = (uint32_t)tp_get(tp, self, tp_string("size")).number.val;
 
if (*mode != 'w' && *mode != 'a')
{
tp_raise(tp_None, "IOError: file not open for writing", tp_None);
}
else
{
char *data = (char *)TP_CSTR(obj);
rw_params_t params = {3, pos, 0, strlen(data), data, 0,
(char *)tp_get(tp, self, tp_string("name")).string.val};
uint32_t status;
uint32_t cnt;
call70_rw((&params), status, cnt);
if (status)
{
tp_raise(tp_None, "IOError: writing failed with status %d", status);
}
pos += cnt;
tp_set(tp, self, tp_string("pos"), tp_number(pos));
if (pos > size)
{
/* If writing has come beyond the file, increase its size. */
tp_set(tp, self, tp_string("size"), tp_number(pos));
}
return tp_True;
}
}
 
/* Write line list into file.
*
* tp TinyPy virtual machine structure.
*
* returns tp_None.
*/
static tp_obj kolibri_writelines(TP)
{
tp_obj result = tp_None;
tp_obj self = TP_TYPE(TP_DICT);
tp_obj list = TP_TYPE(TP_LIST); /* What to write. */
char *mode = (char *)tp_get(tp, self, tp_string("mode")).string.val;
long pos = (long)tp_get(tp, self, tp_string("pos")).number.val;
uint32_t size = (uint32_t)tp_get(tp, self, tp_string("size")).number.val;
 
if (*mode != 'w' && *mode != 'a')
{
tp_raise(tp_None, "IOError: file not open for writing", tp_None);
}
else
{
int i;
char *fn = (char *)tp_get(tp, self, tp_string("name")).string.val;
rw_params_t params = {3, 0, 0, 0, NULL, 0, fn};
 
for (i = 0; i < list.list.val->len; i++)
{
char *data = (char *)TP_CSTR(list.list.val->items[i]);
uint32_t status;
uint32_t cnt;
 
params.data = data;
params.cnt = strlen(data);
params.pos = pos;
 
call70_rw((&params), status, cnt);
if (status)
tp_raise(tp_None, "IOError: writing failed with status %d", status);
pos += cnt;
}
tp_set(tp, self, tp_string("pos"), tp_number(pos));
if (pos > size)
{
/* If writing has come beyond the file, increase its size. */
tp_set(tp, self, tp_string("size"), tp_number(pos));
}
return tp_True;
}
}
 
/* Get file size.
*
* fn ASCIIZ absolute file path.
*/
long long int kolibri_filesize(const char *fn)
{
uint8_t data[40];
uint32_t status;
long long int result;
info_params_t params = {5, 0, 0, 0, data, 0, (char *)fn};
 
call70((&params), status);
/* File size is at offset 32. */
if (status == 0)
result = *(long long*)(&data[32]);
else
result = -status;
return result;
}
 
 
/* Open file.
*
* tp TinyPy virtual machine structure.
*
* returns file object.
*/
tp_obj kolibri_open(TP) {
tp_obj obj;
char *fn = (char *)(TP_TYPE(TP_STRING).string.val);
tp_obj mode_obj = TP_OBJ();
long long int size;
long long int pos = 0;
uint32_t status;
info_params_t params = {2, 0, 0, 0, NULL, 0, fn};
 
if (mode_obj.type == TP_NONE)
mode_obj = tp_string("r");
else if (mode_obj.type != TP_STRING)
tp_raise(tp_None, "ValueError: bad file access mode %s", TP_CSTR(mode_obj));
switch(mode_obj.string.val[0])
{
case 'w':
call70((&params), status);
if (status)
tp_raise(tp_None, "IOError: cannot open file for writing", tp_None);
size = 0;
break;
case 'a':
pos = size;
break;
case 'r':
break;
default:
tp_raise(tp_None, "ValueError: mode string must begin with 'r', 'w', or 'a'", tp_None);
}
if ((size = kolibri_filesize(fn)) < 0)
tp_raise(tp_None, "IOError: filesize returned %d", tp_number(size));
obj = tp_dict(tp);
tp_set(tp, obj, tp_string("name"), tp_string(fn));
tp_set(tp, obj, tp_string("size"), tp_number(size));
tp_set(tp, obj, tp_string("pos"), tp_number(pos));
tp_set(tp, obj, tp_string("mode"), mode_obj);
#if 0
tp_set(tp, obj, tp_string("__doc__"),
tp_string("File object.\nAttributes:\n name: file name\n"
" closed: boolean indicating whether file was closed\n"
"Methods:\n read: read the entire file into string\n"
" readlines: get list of lines\n"
" close: close the file\n"
));
#endif
tp_set(tp, obj, tp_string("closed"), tp_False);
tp_set(tp, obj, tp_string("close"), tp_method(tp, obj, kolibri_close));
tp_set(tp, obj, tp_string("read"), tp_method(tp, obj, kolibri_read));
tp_set(tp, obj, tp_string("write"), tp_method(tp, obj, kolibri_write));
tp_set(tp, obj, tp_string("writelines"), tp_method(tp, obj, kolibri_writelines));
return obj;
}
 
 
Property changes:
Added: svn:executable
+*
\ No newline at end of property
/programs/develop/tinypy/modules/random/init.c
0,0 → 1,52
#include "random.c"
 
/*
* random_mod_init()
*
* random module initialization function
*/
void random_init(TP)
{
/*
* module dict for random
*/
tp_obj random_mod = tp_dict(tp);
 
/*
* bind functions to random module
*/
tp_set(tp, random_mod, tp_string("seed"), tp_fnc(tp, random_seed));
tp_set(tp, random_mod, tp_string("getstate"), tp_fnc(tp, random_getstate));
tp_set(tp, random_mod, tp_string("setstate"), tp_fnc(tp, random_setstate));
tp_set(tp, random_mod, tp_string("jumpahead"), tp_fnc(tp, random_jumpahead));
tp_set(tp, random_mod, tp_string("random"), tp_fnc(tp, random_random));
 
/*
* bind usual distribution random variable generator
*/
tp_set(tp, random_mod, tp_string("uniform"), tp_fnc(tp, random_uniform));
tp_set(tp, random_mod, tp_string("normalvariate"), tp_fnc(tp, random_normalvariate));
tp_set(tp, random_mod, tp_string("lognormvariate"), tp_fnc(tp, random_lognormvariate));
tp_set(tp, random_mod, tp_string("expovariate"), tp_fnc(tp, random_expovariate));
tp_set(tp, random_mod, tp_string("vonmisesvariate"), tp_fnc(tp, random_vonmisesvariate));
tp_set(tp, random_mod, tp_string("gammavariate"), tp_fnc(tp, random_gammavariate));
tp_set(tp, random_mod, tp_string("betavariate"), tp_fnc(tp, random_betavariate));
tp_set(tp, random_mod, tp_string("paretovariate"), tp_fnc(tp, random_paretovariate));
tp_set(tp, random_mod, tp_string("weibullvariate"), tp_fnc(tp, random_weibullvariate));
tp_set(tp, random_mod, tp_string("randrange"), tp_fnc(tp, random_randrange));
tp_set(tp, random_mod, tp_string("randint"), tp_fnc(tp, random_randint));
tp_set(tp, random_mod, tp_string("choice"), tp_fnc(tp, random_choice));
tp_set(tp, random_mod, tp_string("shuffle"), tp_fnc(tp, random_shuffle));
 
/*
* bind special attributes to random module
*/
tp_set(tp, random_mod, tp_string("__doc__"), tp_string("Random variable generators."));
tp_set(tp, random_mod, tp_string("__name__"), tp_string("random"));
tp_set(tp, random_mod, tp_string("__file__"), tp_string(__FILE__));
 
/*
* bind random module to tinypy modules[]
*/
tp_set(tp, tp->modules, tp_string("random"), random_mod);
}
/programs/develop/tinypy/modules/random/random.c
0,0 → 1,1107
#include <stdlib.h>
#include <time.h>
#include <errno.h>
 
#include <math.h>
#ifndef M_E
#define M_E 2.7182818284590452354
#endif
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
 
/*
* following random generators are mutual exclusive.
*/
#define __USE_MERSENNE_TWISTER_RANDOM_GENERATOR
/*#define __USE_WICHMANN_HILL_RANDOM_GENERATOR*/
/*#define __USE_POSIX_RANDOM_GENERATOR*/
 
 
#if defined(__USE_MERSENNE_TWISTER_RANDOM_GENERATOR)
 
/***********************************************************
* following code is borrowed from Python's _randommodule.c
***********************************************************/
/* Random objects */
 
/* ------------------------------------------------------------------
The code in this module was based on a download from:
http://www.math.keio.ac.jp/~matumoto/MT2002/emt19937ar.html
 
It was modified in 2002 by Raymond Hettinger as follows:
 
* the principal computational lines untouched except for tabbing.
 
* renamed genrand_res53() to random_random() and wrapped
in python calling/return code.
 
* genrand_int32() and the helper functions, init_genrand()
and init_by_array(), were declared static, wrapped in
Python calling/return code. also, their global data
references were replaced with structure references.
 
* unused functions from the original were deleted.
new, original C python code was added to implement the
Random() interface.
 
The following are the verbatim comments from the original code:
 
A C-program for MT19937, with initialization improved 2002/1/26.
Coded by Takuji Nishimura and Makoto Matsumoto.
 
Before using, initialize the state by using init_genrand(seed)
or init_by_array(init_key, key_length).
 
Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
 
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
 
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
 
3. The names of its contributors may not be used to endorse or promote
products derived from this software without specific prior written
permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
Any feedback is very welcome.
http://www.math.keio.ac.jp/matumoto/emt.html
email: matumoto@math.keio.ac.jp
*/
 
/* Period parameters -- These are all magic. Don't change. */
#define N 624
#define M 397
#define MATRIX_A 0x9908b0dfUL /* constant vector a */
#define UPPER_MASK 0x80000000UL /* most significant w-r bits */
#define LOWER_MASK 0x7fffffffUL /* least significant r bits */
 
typedef struct {
unsigned long state[N];
int index;
int has_seed;
} RandomObject;
 
/* generates a random number on [0,0xffffffff]-interval */
static unsigned long
genrand_int32(RandomObject *self)
{
unsigned long y;
static unsigned long mag01[2]={0x0UL, MATRIX_A};
/* mag01[x] = x * MATRIX_A for x=0,1 */
unsigned long *mt;
 
mt = self->state;
if (self->index >= N) { /* generate N words at one time */
int kk;
 
for (kk=0;kk<N-M;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1UL];
}
for (;kk<N-1;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
}
y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL];
 
self->index = 0;
}
 
y = mt[self->index++];
y ^= (y >> 11);
y ^= (y << 7) & 0x9d2c5680UL;
y ^= (y << 15) & 0xefc60000UL;
y ^= (y >> 18);
return y;
}
 
/* initializes mt[N] with a seed */
static void
init_genrand(RandomObject *self, unsigned long s)
{
int mti;
unsigned long *mt;
 
mt = self->state;
mt[0]= s & 0xffffffffUL;
for (mti=1; mti<N; mti++) {
mt[mti] =
(1812433253UL * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
/* In the previous versions, MSBs of the seed affect */
/* only MSBs of the array mt[]. */
/* 2002/01/09 modified by Makoto Matsumoto */
mt[mti] &= 0xffffffffUL;
/* for >32 bit machines */
}
self->index = mti;
return;
}
 
/* initialize by an array with array-length */
/* init_key is the array for initializing keys */
/* key_length is its length */
static void
init_by_array(RandomObject *self, unsigned long init_key[], unsigned long key_length)
{
unsigned int i, j, k; /* was signed in the original code. RDH 12/16/2002 */
unsigned long *mt;
 
mt = self->state;
init_genrand(self, 19650218UL);
i=1; j=0;
k = (N>key_length ? N : key_length);
for (; k; k--) {
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL))
+ init_key[j] + j; /* non linear */
mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
i++; j++;
if (i>=N) { mt[0] = mt[N-1]; i=1; }
if (j>=key_length) j=0;
}
for (k=N-1; k; k--) {
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL))
- i; /* non linear */
mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
i++;
if (i>=N) { mt[0] = mt[N-1]; i=1; }
}
 
mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */
return;
}
 
/*----------------------end of Mersenne Twister Algorithm----------------*/
 
/*************************************************************************
* following are tinypy related stuffs.
*************************************************************************/
 
static RandomObject _gRandom; /* random object */
 
static tp_obj random_seed(TP)
{
tp_obj arg = TP_DEFAULT(tp_None);
 
if (arg.type == TP_NONE) {
time_t now;
 
(void)time(&now);
init_genrand(&_gRandom, (unsigned long)now);
_gRandom.has_seed = 1;
} else if (arg.type == TP_NUMBER) {
init_genrand(&_gRandom, (unsigned long)arg.number.val);
_gRandom.has_seed = 1;
} else if (arg.type == TP_STRING) {
unsigned long seed;
seed = (unsigned long)tp_hash(tp, arg);
init_genrand(&_gRandom, seed);
_gRandom.has_seed = 1;
} else {
tp_raise(tp_None,tp_printf(tp, "%s", "invalid argument for seed()"));
}
return (tp_None);
}
 
static tp_obj random_getstate(TP)
{
tp_obj state_list = tp_list(tp);
int i;
 
for (i = 0; i < N; i++) {
_tp_list_append(tp, state_list.list.val, tp_number(_gRandom.state[i]));
}
_tp_list_append(tp, state_list.list.val, tp_number(_gRandom.index));
 
return (state_list);
}
 
/*
* @state_list must contain exactly N+1(625) integer.
*/
static tp_obj random_setstate(TP)
{
tp_obj state_list = TP_OBJ();
tp_obj state_elem;
tp_obj len;
int i;
 
len = tp_len(tp, state_list);
if (len.number.val != N+1) {
tp_raise(tp_None,tp_printf(tp, "%s: state vector's size invalid(should be %d)",
__func__, N+1));
}
 
for (i = 0; i < N; i++) {
state_elem = tp_get(tp, state_list, tp_number(i));
_gRandom.state[i] = (unsigned long)state_elem.number.val;
}
state_elem = tp_get(tp, state_list, tp_number(i));
_gRandom.index = (int)state_elem.number.val;
 
return (tp_None);
}
 
/*
* Jumpahead should be a fast way advance the generator n-steps ahead, but
* lacking a formula for that, the next best is to use n and the existing
* state to create a new state far away from the original.
*
* The generator uses constant spaced additive feedback, so shuffling the
* state elements ought to produce a state which would not be encountered
* (in the near term) by calls to random(). Shuffling is normally
* implemented by swapping the ith element with another element ranging
* from 0 to i inclusive. That allows the element to have the possibility
* of not being moved. Since the goal is to produce a new, different
* state, the swap element is ranged from 0 to i-1 inclusive. This assures
* that each element gets moved at least once.
*
* To make sure that consecutive calls to jumpahead(n) produce different
* states (even in the rare case of involutory shuffles), i+1 is added to
* each element at position i. Successive calls are then guaranteed to
* have changing (growing) values as well as shuffled positions.
*
* Finally, the self->index value is set to N so that the generator itself
* kicks in on the next call to random(). This assures that all results
* have been through the generator and do not just reflect alterations to
* the underlying state.
*/
static tp_obj random_jumpahead(TP)
{
long n = (long)TP_NUM();
long i, j;
unsigned long *mt;
unsigned long tmp;
 
mt = _gRandom.state;
 
for (i = N-1; i > 1; i--) {
j = n % i;
if (j == -1L) {
tp_raise(tp_None,tp_printf(tp, "error: %s: j = %ld", __func__, j));
}
tmp = mt[i];
mt[i] = mt[j];
mt[j] = tmp;
}
 
for (i = 0; i < N; i++)
mt[i] += i + 1;
 
_gRandom.index = N;
 
return (tp_None);
}
 
/* random_random is the function named genrand_res53 in the original code;
* generates a random number on [0,1) with 53-bit resolution; note that
* 9007199254740992 == 2**53; I assume they're spelling "/2**53" as
* multiply-by-reciprocal in the (likely vain) hope that the compiler will
* optimize the division away at compile-time. 67108864 is 2**26. In
* effect, a contains 27 random bits shifted left 26, and b fills in the
* lower 26 bits of the 53-bit numerator.
* The orginal code credited Isaku Wada for this algorithm, 2002/01/09.
*/
static tp_obj random_random(TP)
{
RandomObject *self = &_gRandom;
unsigned long a, b;
 
if (! self->has_seed)
random_seed(tp);
 
a = genrand_int32(self)>>5;
b = genrand_int32(self)>>6;
return tp_number((a*67108864.0+b)*(1.0/9007199254740992.0));
}
 
 
#elif defined(__USE_WICHMANN_HILL_RANDOM_GENERATOR)
 
/*************************************************
* divmod(x, y)
* a helper function borrowed from Python
*************************************************/
/* Compute Python divmod(x, y), returning the quotient and storing the
* remainder into *r. The quotient is the floor of x/y, and that's
* the real point of this. C will probably truncate instead (C99
* requires truncation; C89 left it implementation-defined).
* Simplification: we *require* that y > 0 here. That's appropriate
* for all the uses made of it. This simplifies the code and makes
* the overflow case impossible (divmod(LONG_MIN, -1) is the only
* overflow case).
*/
#include <assert.h>
 
static int
divmod(int x, int y, int *r)
{
int quo;
 
assert(y > 0);
quo = x / y;
*r = x - quo * y;
if (*r < 0) {
--quo;
*r += y;
}
assert(0 <= *r && *r < y);
return quo;
}
 
 
typedef struct WH_RandomObject {
struct seed {
unsigned long x;
unsigned long y;
unsigned long z;
} seed;
int has_seed;
} WH_RandomObject;
 
static WH_RandomObject _gWhRandom;
 
static tp_obj random_seed(TP)
{
long a;
int x, y, z;
tp_obj arg = TP_DEFAULT(tp_None);
 
if (arg.type == TP_NONE) {
time_t now;
 
(void)time(&now);
a = (long)now * 256;
} else if (arg.type == TP_NUMBER) {
a = (long)arg.number.val;
} else {
tp_raise(tp_None,tp_printf(tp, "%s", "invalid argument for seed()"));
}
a = divmod(a, 30268, &x);
a = divmod(a, 30306, &y);
a = divmod(a, 30322, &z);
_gWhRandom.seed.x = (int)x + 1;
_gWhRandom.seed.y = (int)y + 1;
_gWhRandom.seed.z = (int)z + 1;
_gWhRandom.has_seed = 1;
 
return (tp_None);
}
 
/*
* following comments are from Python's random.py
*---------------------------------------
* Wichman-Hill random number generator.
*
* Wichmann, B. A. & Hill, I. D. (1982)
* Algorithm AS 183:
* An efficient and portable pseudo-random number generator
* Applied Statistics 31 (1982) 188-190
*
* see also:
* Correction to Algorithm AS 183
* Applied Statistics 33 (1984) 123
*
* McLeod, A. I. (1985)
* A remark on Algorithm AS 183
* Applied Statistics 34 (1985),198-200
* This part is thread-unsafe:
* BEGIN CRITICAL SECTION
*/
static tp_obj random_random(TP)
{
long x, y, z;
double r;
 
if (! _gWhRandom.has_seed)
random_seed(tp);
 
x = _gWhRandom.seed.x;
y = _gWhRandom.seed.y;
z = _gWhRandom.seed.z;
 
x = (171 * x) % 30269;
y = (172 * y) % 30307;
z = (170 * z) % 30323;
 
_gWhRandom.seed.x = x;
_gWhRandom.seed.y = y;
_gWhRandom.seed.z = z;
 
/*
* Note: on a platform using IEEE-754 double arithmetic, this can
* never return 0.0 (asserted by Tim; proof too long for a comment).
*/
errno = 0;
r = fmod(((double)x/30269.0+(double)y/30307.0+(double)z/30323.0), 1.0);
if (errno == EDOM)
tp_raise(tp_None,tp_printf(tp, "%s", "fmod(): denominator can't be zero"));
 
return tp_number(r);
}
 
/*
* for compatibility
*/
static tp_obj random_setstate(TP)
{
return (tp_None);
}
 
/*
* for compatibility
*/
static tp_obj random_getstate(TP)
{
return (tp_None);
}
 
/*
* FIXME: risk of overflow.
* following comments are from Python's random.py
* --------------------------------------------
* Act as if n calls to random() were made, but quickly.
*
* n is an int, greater than or equal to 0.
*
* Example use: If you have 2 threads and know that each will
* consume no more than a million random numbers, create two Random
* objects r1 and r2, then do
* r2.setstate(r1.getstate())
* r2.jumpahead(1000000)
* Then r1 and r2 will use guaranteed-disjoint segments of the full
* period.
*/
static tp_obj random_jumpahead(TP)
{
int n = (int)TP_NUM();
long x, y, z;
 
if (n < 0)
tp_raise(tp_None,tp_printf(tp, "%s: n = %d invalid, should >= 0", __func__, n));
 
x = _gWhRandom.seed.x;
y = _gWhRandom.seed.y;
z = _gWhRandom.seed.z;
 
x = (int)(x * ((long)pow(171, n) % 30269)) % 30269;
y = (int)(y * ((long)pow(172, n) % 30307)) % 30307;
z = (int)(z * ((long)pow(170, n) % 30323)) % 30323;
 
_gWhRandom.seed.x = x;
_gWhRandom.seed.y = y;
_gWhRandom.seed.z = z;
 
return (tp_None);
}
 
 
#elif defined(__USE_POSIX_RANDOM_GENERATOR)
 
/*
* judge whether seeded
*/
static int has_seed = 0;
 
static tp_obj random_seed(TP)
{
tp_obj arg = TP_DEFAULT(tp_None);
 
if (arg.type == TP_NONE) {
time_t now;
 
(void)time(&now);
srandom((unsigned int)now);
has_seed = 1;
} else if (arg.type == TP_NUMBER) {
srandom((unsigned long)arg.number.val);
has_seed = 1;
} else {
tp_raise(tp_None,tp_printf(tp, "%s", "invalid argument for seed()"));
}
return (tp_None);
}
 
/*
* random()
*
* generate successive pseudo random number ranging from [0.0, 1.0).
* usually RAND_MAX is huge number, thus the periods of the success-
* ive random number is very long, about 16*((2**31)-1).
* NOTE: if seed() not called before random(), random() will
* automatically call seed() with current time.
*/
tp_obj random_random(TP)
{
double r = 0.0;
 
if (! has_seed)
random_seed(tp);
 
r = (tp_num)random()/(tp_num)RAND_MAX;
 
return (tp_number(r));
}
 
/*
* setstate(state)
*
* for compatibility.
*/
tp_obj random_setstate(TP)
{
return (tp_None);
}
 
/*
* getstate()
*
* for compatibility.
*/
tp_obj random_getstate(TP)
{
return (tp_None);
}
 
/*
* jumpahead()
*
* for compatibility.
*/
tp_obj random_jumpahead(TP)
{
return (tp_None);
}
 
#else
 
#error no underlying random generator is specified
 
#endif
 
/************************************************************
* some usual distributions
************************************************************/
 
/*
* return real number in range [a, b)
* a and b can be negtive, but a must be less than b.
*/
tp_obj random_uniform(TP)
{
double a = TP_NUM();
double b = TP_NUM();
double r = 0.0;
tp_obj rvo; /* random variable object */
 
if (a >= b)
tp_raise(tp_None,tp_printf(tp, "%s: a(%f) must be less than b(%f)", a, b));
 
rvo = random_random(tp);
r = a + (b - a) * rvo.number.val;
return (tp_number(r));
}
 
/*
* Normal distribution
* @mu mean
* @sigma standard deviation
*-----------------------------
* Uses Kinderman and Monahan method. Reference: Kinderman,
* A.J. and Monahan, J.F., "Computer generation of random
* variables using the ratio of uniform deviates", ACM Trans
* Math Software, 3, (1977), pp257-260.
*/
tp_obj random_normalvariate(TP)
{
double mu = TP_NUM();
double sigma = TP_NUM();
double NV_MAGICCONST;
double u1, u2;
double z, zz;
double r = 0.0;
tp_obj rvo; /* random variable object */
 
NV_MAGICCONST = 4.0 * exp(-0.5) / sqrt(2.0);
while (1) {
rvo = random_random(tp);
u1 = rvo.number.val;
rvo = random_random(tp);
u2 = 1.0 - rvo.number.val;
z = NV_MAGICCONST * (u1 - 0.5) / u2;
zz = z * z / 4.0;
if (zz <= - log(u2))
break;
}
 
r = mu + z * sigma;
 
return (tp_number(r));
}
 
/*
* Log normal distribution
*
* If take natural logarithm on log normal distribution, normal
* distribution with mean mu and standard deviation sigma will
* return.
* @mu mean, can be any value
* @sigma standard deviation, must be > 0.
*/
tp_obj random_lognormvariate(TP)
{
double mu = TP_NUM();
double sigma = TP_NUM();
tp_obj params;
tp_obj normvar; /* normal distribution variate */
double r = 0.0;
 
/*
* call random_normalvariate() actually
*/
params = tp_params_v(tp, 2, tp_number(mu), tp_number(sigma));
normvar = tp_ez_call(tp, "random", "normalvariate", params);
r = exp(normvar.number.val);
 
return (tp_number(r));
}
 
/*
* Exponential distribution
*
* @lambda reciprocal of mean.
* return value range (0, +inf)
*/
tp_obj random_expovariate(TP)
{
double lambda = TP_NUM();
double u, r;
tp_obj rvo;
 
do {
rvo = random_random(tp);
u = rvo.number.val;
} while (u <= 0.0000001);
 
r = -log(u) / lambda;
 
return (tp_number(r));
}
 
/*
* Circular data distribution.
*
* mu is the mean angle, expressed in radians between 0 and 2*pi, and
* kappa is the concentration parameter, which must be greater than or
* equal to zero. If kappa is equal to zero, this distribution reduces
* to a uniform random angle over the range 0 to 2*pi.
*
* mu: mean angle (in radians between 0 and 2*pi)
* kappa: concentration parameter kappa (>= 0)
* if kappa = 0 generate uniform random angle
*
* Based upon an algorithm published in: Fisher, N.I.,
* "Statistical Analysis of Circular Data", Cambridge
* University Press, 1993.
*
* Thanks to Magnus Kessler for a correction to the
* implementation of step 4.
*/
tp_obj random_vonmisesvariate(TP)
{
double mu = TP_NUM();
double kappa = TP_NUM();
tp_obj rvo;
double a, b, c, r;
double u1, u2, u3, z, f;
double theta;
double TWOPI = 2.0 * M_PI;
 
if (kappa <= 1e-6) {
rvo = random_random(tp);
theta = TWOPI * rvo.number.val;
return (tp_number(theta));
}
 
a = 1.0 + sqrt(1.0 + 4.0 * kappa * kappa);
b = (a - sqrt(2.0 * a))/(2.0 * kappa);
r = (1.0 + b * b)/(2.0 * b);
 
while (1) {
rvo = random_random(tp);
u1 = rvo.number.val;
 
z = cos(M_PI * u1);
f = (1.0 + r * z)/(r + z);
c = kappa * (r - f);
 
rvo = random_random(tp);
u2 = rvo.number.val;
 
if ((u2 < (c * (2.0 - c))) ||
(u2 <= (c * exp(1.0 - c))))
break;
}
 
rvo = random_random(tp);
u3 = rvo.number.val;
if (u3 > 0.5)
theta = fmod(mu, TWOPI) + acos(f);
else
theta = fmod(mu, TWOPI) - acos(f);
 
return (tp_number(theta));
}
 
/*
* Gamma distribution. Not the gamma function!
*
* Conditions on the parameters are alpha > 0 and beta > 0.
*/
tp_obj random_gammavariate(TP)
{
double alpha = TP_NUM();
double beta = TP_NUM();
tp_obj rvo;
double res;
double LOG4 = log(4.0);
double SG_MAGICCONST = 1.0 + log(4.5);
 
/*
* alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2
* Warning: a few older sources define the gamma distribution in terms
* of alpha > -1.0
*/
if ((alpha <= 0.0) || (beta <= 0.0))
tp_raise(tp_None,tp_printf(tp, "%s: alpha(%f) and beta(%f) must be > 0.0",
__func__, alpha, beta));
 
if (alpha > 1.0) {
 
/*
* Uses R.C.H. Cheng, "The generation of Gamma
* variables with non-integral shape parameters",
* Applied Statistics, (1977), 26, No. 1, p71-74
*/
 
double ainv;
double bbb, ccc;
double u1, u2;
double v, x, z, r;
 
ainv = sqrt(2.0 * alpha - 1.0);
bbb = alpha - LOG4;
ccc = alpha + ainv;
 
while (1) {
rvo = random_random(tp);
u1 = rvo.number.val;
if (! ((1e-7 < u1) && (u1 < 0.9999999)))
continue;
rvo = random_random(tp);
u2 = 1.0 - rvo.number.val;
v = log(u1 / (1.0 - u1)) / ainv;
x = alpha * exp(v);
z = u1 * u1 * u2;
r = bbb + ccc * v - x;
if ((r + SG_MAGICCONST - 4.5 * z >= 0.0) ||
(r >= log(z))) {
res = x * beta;
return (tp_number(res));
}
}
}
else if (alpha == 1.0) {
 
/*
* expovariate(1)
*/
 
double u;
 
do {
rvo = random_random(tp);
u = rvo.number.val;
} while (u <= 1e-7);
 
res = - log(u) * beta;
return (tp_number(res));
} else {
 
/*
* alpha is between 0 and 1 (exclusive)
*
* Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle
*/
 
double b, p, u, u1, x;
 
while (1) {
rvo = random_random(tp);
u = rvo.number.val;
b = (M_E + alpha) / M_E;
p = b * u;
if (p <= 1.0)
/*FIXME: x = p ** (1.0/alpha)*/
x = pow(p, 1.0/alpha);
else
x = - log((b - p) / alpha);
rvo = random_random(tp);
u1 = rvo.number.val;
if (p > 1.0) {
/*FIXME: if u1 <= x ** (alpha - 1.0):*/
if (u1 <= pow(x, alpha - 1.0))
break;
}
else if (u1 <= exp(-x))
break;
}
 
res = x * beta;
return (tp_number(res));
}
}
 
/*
* Beta distribution.
*
* Conditions on the parameters are alpha > 0 and beta > 0.
* Returned values range between 0 and 1.
*
* # This version due to Janne Sinkkonen, and matches all the std
* # texts (e.g., Knuth Vol 2 Ed 3 pg 134 "the beta distribution").
*
* See also:
* http://sourceforge.net/bugs/?func=detailbug&bug_id=130030&group_id=5470
* for Ivan Frohne's insightful analysis of why the original implementation:
*
* def betavariate(self, alpha, beta):
* # Discrete Event Simulation in C, pp 87-88.
*
* y = self.expovariate(alpha)
* z = self.expovariate(1.0/beta)
* return z/(y+z)
*
* was dead wrong, and how it probably got that way.
*
*/
tp_obj random_betavariate(TP)
{
double alpha = TP_NUM();
double beta = TP_NUM();
double t;
double r = 0.0;
tp_obj y;
tp_obj params;
 
params = tp_params_v(tp, 2, tp_number(alpha), tp_number(1.0));
y = tp_ez_call(tp, "random", "gammavariate", params);
if (y.number.val == 0) {
return (y);
} else {
params = tp_params_v(tp, 2, tp_number(beta), tp_number(1.0));
t = y.number.val;
y = tp_ez_call(tp, "random", "gammavariate", params);
r = t / (t + y.number.val);
return (tp_number(r));
}
}
 
/*
* Pareto distribution. alpha is the shape parameter.
* # Jain, pg. 495
*/
tp_obj random_paretovariate(TP)
{
double alpha = TP_NUM();
double u;
double r;
tp_obj rvo;
rvo = random_random(tp);
u = 1.0 - rvo.number.val;
r = 1.0 / pow(u, 1.0/alpha);
return (tp_number(r));
}
 
/*
* Weibull distribution.
*
* alpha is the scale parameter and beta is the shape parameter.
*
* Jain, pg. 499; bug fix courtesy Bill Arms
*/
tp_obj random_weibullvariate(TP)
{
double alpha = TP_NUM();
double beta = TP_NUM();
double u;
double r;
tp_obj rvo;
rvo = random_random(tp);
u = 1.0 - rvo.number.val;
r = alpha * pow(-log(u), 1.0/beta);
return (tp_number(r));
}
 
/*
* randomly select an element from range ([start,] stop[, step])
*
* 'stop' must be larger than 'start', both can be negative;
* 'step' must be integer larger than zero.
*/
tp_obj random_randrange(TP)
{
tp_obj start = TP_OBJ();
tp_obj stop = TP_DEFAULT(tp_None);
tp_obj step = TP_DEFAULT(tp_number(1));
tp_obj rvo = random_random(tp);
int istart = (int)start.number.val;
int istep = (int)step.number.val;
int istop;
int iwidth;
double res;
if (stop.type == TP_NONE) {
/*
* if only one argument, then start just means stop
*/
istop = istart;
res = (rvo.number.val * istop);
return (tp_number(res));
} else if (stop.type == TP_NUMBER) {
istop = (int)stop.number.val;
iwidth = istop - istart;
if (iwidth < 0)
tp_raise(tp_None,tp_printf(tp, "%s", "stop must be > start"));
if (istep <= 0)
tp_raise(tp_None,tp_printf(tp, "%s", "step must be integer larger than 0"));
if (istep == 1) {
res = (int)(istart + (int)(rvo.number.val * iwidth));
return (tp_number(res));
} else {
int n = (iwidth + istep - 1) / istep;
res = (int)(istart + istep * (int)(n * rvo.number.val));
return (tp_number(res));
}
} else {
tp_raise(tp_None,tp_printf(tp, "%s", "wrong type of stop"));
}
}
 
/*
* return random integer between [a, b]
*/
tp_obj random_randint(TP)
{
double a = TP_NUM();
double b = TP_NUM();
tp_obj r;
tp_obj params;
 
params = tp_params_v(tp, 2, tp_number(a), tp_number(b + 1));
r = tp_ez_call(tp, "random", "randrange", params);
return (r);
}
 
/*
* return a random element of sequence 'seq'. 'seq' mustn't be empty.
*/
tp_obj random_choice(TP)
{
tp_obj seq = TP_OBJ();
tp_obj len;
tp_obj rvo;
tp_obj r;
int i;
len = tp_len(tp, seq);
if (len.number.val <= 0)
tp_raise(tp_None,tp_printf(tp, "%s", "seq mustn't be empty"));
rvo = random_random(tp);
i = (int)(len.number.val * rvo.number.val);
r = tp_get(tp, seq, tp_number(i));
return (r);
}
 
/*
* shuffle sequence 'seq' in place, return None
*/
tp_obj random_shuffle(TP)
{
tp_obj seq = TP_OBJ();
tp_obj elmi;
tp_obj elmj;
tp_obj params;
tp_obj rvo;
tp_obj len = tp_len(tp, seq);
int i, j;
if (len.number.val <= 0)
return (tp_None);
for (i = len.number.val - 1; i > len.number.val / 2; i--) {
/*
* randomly exchange elment i and elment j, element i from the behind end of 'seq', while
* element j from the front end of 'seq'.
*/
params = tp_params_v(tp, 2, tp_number(0), tp_number(len.number.val / 2));
rvo = tp_ez_call(tp, "random", "randint", params);
j = (int)rvo.number.val;
elmi = tp_get(tp, seq, tp_number(i));
elmj = tp_get(tp, seq, tp_number(j));
tp_set(tp, seq, tp_number(i), elmj);
tp_set(tp, seq, tp_number(j), elmi);
}
for (i = len.number.val / 2; i >= 0; i--) {
/*
* randomly exchange elment i and elment j, element i from the front end of 'seq', while
* element j from the behind end of 'seq'.
*/
params = tp_params_v(tp, 2, tp_number(len.number.val / 2), tp_number(len.number.val - 1));
rvo = tp_ez_call(tp, "random", "randint", params);
j = (int)rvo.number.val;
elmi = tp_get(tp, seq, tp_number(i));
elmj = tp_get(tp, seq, tp_number(j));
tp_set(tp, seq, tp_number(i), elmj);
tp_set(tp, seq, tp_number(j), elmi);
}
return (tp_None);
}
/programs/develop/tinypy/modules/random/tests.py
0,0 → 1,176
#!/usr/bin/env python
 
import random
#from math import log, exp, sqrt, pi
 
def test_seed_state():
"""test seed() and getstate()/setstate()
"""
# random ought to be able to deal with seeds in any form, of follows.
# following code shouldn't cause an exception.
random.seed()
random.seed(0)
random.seed(-1)
random.seed(0.1)
random.seed(-0.1)
random.seed("a")
random.seed("abc")
random.seed("abcd")
random.seed("fasdfasdfasdfadgaldhgldahlgahdlghadlgladh")
random.seed("lxhlh90yowhldshlgah;")
# state1 and state2 should be different for different seeds
random.seed(1)
state1 = random.getstate()
random.seed(2)
state2 = random.getstate()
rep = 0
for ind in range(len(state1)):
elem1 = state1[ind]
elem2 = state2[ind]
if (elem1 == elem2): rep += 1
if (rep > len(state1) / 2):
print("rep = ", rep, "len(state1) = ", len(state1))
raise "state1 and state2 should be different"
# for the same seeds, state1 and state2 should be the same
random.seed(100)
state1 = random.getstate()
random.seed(100)
state2 = random.getstate()
rep = 0
for ind in range(len(state1)):
elem1 = state1[ind]
elem2 = state2[ind]
if (elem1 == elem2): rep += 1
if (rep != len(state1)):
raise "state1 and state2 should be the same"
 
def test_jumpahead():
"""jumpahead will change the pseudo-number generator's internal state
"""
random.seed()
state1 = random.getstate()
random.jumpahead(20)
state2 = random.getstate()
rep = 0
for ind in range(len(state1)):
elem1 = state1[ind]
elem2 = state2[ind]
if (elem1 == elem2): rep += 1
if (rep > len(state1) / 2):
raise "state1 and state2 can't be the same"
def test_setstate():
"""
"""
random.seed()
oldState = random.getstate()
oldRandSeq = [random.random() for i in range(10)]
random.setstate(oldState)
newRandSeq = [random.random() for i in range(10)]
rep = 0
for ind in range(len(oldRandSeq)):
elem1 = oldRandSeq[ind]
elem2 = newRandSeq[ind]
if (elem1 == elem2): rep += 1
if (rep != len(oldRandSeq)):
raise "oldRandSeq and newRandSeq should be the same"
 
def test_random():
"""generate a random number list
"""
x = [random.random() for i in range(100)]
def test_distribution():
"""these lines are borrowed from python, they shouldn't
cause any exception.
"""
g = random
g.uniform(1,10)
g.paretovariate(1.0)
g.expovariate(1.0)
g.weibullvariate(1.0, 1.0)
g.normalvariate(0.0, 1.0)
g.lognormvariate(0.0, 1.0)
g.vonmisesvariate(0.0, 1.0)
g.gammavariate(0.01, 1.0)
g.gammavariate(1.0, 1.0)
g.gammavariate(200.0, 1.0)
g.betavariate(3.0, 3.0)
 
def test_randrange():
"""these input to randrange() shouldn't cause any exception.
"""
random.randrange(100000)
random.randrange(-100000)
random.randrange(0)
random.randrange(-10.2)
random.randrange(-10, 10)
random.randrange(2, 1000)
random.randrange(0, 1)
random.randrange(-1, 0)
random.randrange(10, 2000, 2)
random.randrange(-2000, 100, 5)
random.randrange(-1000.3, 1000.7, 2)
 
def test_randint():
"""for any valid pair (a, b), randint(a, b) should lay between [a, b]
"""
for i in range(1000):
r = random.randint(-10000, 10000)
if (-10000 <= r <= 10000): continue
else: raise "error: random.randint()"
 
def test_choice():
"""random.choice() should be able to deal with string, list.
"""
S = "abcdefg123*@#$%)("
L = [1, 2, 3, -1, 0.2, -0.1, -10000, "cyc"]
if random.choice(S) not in S:
raise "error: random.choice(S)"
if random.choice(L) not in L:
raise "error: random.choice(L)"
 
def test_shuffle():
"""test random.shuffle() on list. since string is not writable in-place,
random.shuffle() can not be applied on string.
Note: to copy items from a list to a new list, must use syntax like:
newList = oldList[:]
if use syntax like: newList = oldList, newList is just an alias of oldList.
"""
oldL = [1, 2, 3, -1, 0.2, -0.1, -10000, "cyc"]
newL = oldL[:]
random.shuffle(newL)
rep = 0
for ind in range(len(oldL)):
elem1 = oldL[ind]
elem2 = newL[ind]
if (elem1 == elem2): rep += 1
if (rep > len(oldL) / 2):
raise "oldL and newL shouldn't be the same"
def test_53_bits_per_float():
pass
def main():
test_seed_state()
test_jumpahead()
test_setstate()
test_random()
test_distribution()
test_randrange()
test_randint()
test_choice()
test_shuffle()
test_53_bits_per_float()
print("#OK")
 
if __name__ == '__main__':
main()
/programs/develop/tinypy/modules/re/init.c
0,0 → 1,710
/*
* regular expression module
*
* Important Note: do not support group name index
*
* $Id$
*/
 
#include <stdio.h>
#include <assert.h>
#include "regexpr.c"
 
/* tinypy API to be use in this unit */
extern tp_obj tp_data(TP,int magic,void *v);
extern tp_obj tp_object_new(TP);
extern tp_obj tp_object(TP);
extern tp_obj tp_method(TP,tp_obj self,tp_obj v(TP));
extern tp_obj tp_string_copy(TP, const char *s, int n);
extern tp_obj tp_list(TP);
extern tp_obj tp_copy(TP);
 
/* last error message */
static const char * LastError = NULL;
 
/* lower level regex object */
typedef struct {
struct re_pattern_buffer re_patbuf; /* The compiled expression */
struct re_registers re_regs; /* The registers from the last match */
char re_fastmap[256]; /* Storage for fastmap */
unsigned char *re_translate; /* String object for translate table */
unsigned char *re_lastok; /* String object last matched/searched */
 
/* supplementary */
int re_errno; /* error num */
int re_syntax; /* syntax */
} regexobject;
 
/* local declarations */
static regexobject* getre(TP, tp_obj rmobj);
static tp_obj match_obj_group(TP);
static tp_obj match_obj_groups(TP);
static tp_obj match_obj_start(TP);
static tp_obj match_obj_end(TP);
static tp_obj match_obj_span(TP);
 
/*
* helper function: return lower level regex object
* rmobj - regex or match object
*/
static regexobject * getre(TP, tp_obj rmobj)
{
tp_obj reobj_data = tp_get(tp, rmobj, tp_string("__data__"));
regexobject *re = NULL;
 
/* validate magic */
if (reobj_data.data.magic != sizeof(regexobject)) {
LastError = "broken regex object";
return (NULL);
}
re = (regexobject*)reobj_data.data.val;
assert(re);
 
return (re);
}
 
/*
* derive match object from regex object
*/
static tp_obj match_object(TP, tp_obj reobj)
{
tp_obj mo = tp_object(tp); /* match object */
tp_obj redata; /* regex object data */
tp_obj madata; /* match object data */
regexobject *re = NULL; /* lower level regex object */
 
redata = tp_get(tp, reobj, tp_string("__data__"));
re = (regexobject *)redata.data.val;
assert(re);
madata = tp_data(tp, (int)sizeof(regexobject), re);
 
tp_set(tp, mo, tp_string("group"), tp_method(tp, mo, match_obj_group));
tp_set(tp, mo, tp_string("groups"), tp_method(tp, mo, match_obj_groups));
tp_set(tp, mo, tp_string("start"), tp_method(tp, mo, match_obj_start));
tp_set(tp, mo, tp_string("end"), tp_method(tp, mo, match_obj_end));
tp_set(tp, mo, tp_string("span"), tp_method(tp, mo, match_obj_span));
tp_set(tp, mo, tp_string("__data__"), madata);
 
return (mo);
}
 
/*
* FUNC: regexobj.search(str[,pos=0])
* self - regex object
* str - string to be searched
* pos - optional starting offset
*
* RETURN:
* match object - when matched
* None - not matched
*/
static tp_obj regex_obj_search(TP)
{
tp_obj self = TP_OBJ(); /* regex object */
tp_obj str = TP_STR();
tp_obj pos = TP_DEFAULT(tp_number(0));
tp_obj maobj; /* match object */
regexobject *re = NULL;
int r = -2; /* -2 indicate exception */
int range;
 
if (pos.number.val < 0 || pos.number.val > str.string.len) {
LastError = "search offset out of range";
goto exception;
}
range = str.string.len - pos.number.val;
 
re = getre(tp, self);
re->re_lastok = NULL;
r = re_search(&re->re_patbuf, (unsigned char *)str.string.val,
str.string.len, pos.number.val, range, &re->re_regs);
 
/* cannot match pattern */
if (r == -1)
goto notfind;
 
/* error occurred */
if (r == -2)
goto exception;
 
/* matched */
re->re_lastok = (unsigned char *)str.string.val;
 
/* match obj */
maobj = match_object(tp, self);
 
return (maobj);
 
notfind:
re->re_lastok = NULL;
return (tp_None);
exception:
re->re_lastok = NULL;
tp_raise(tp_None, tp_string("regex search error"));
}
 
/*
* FUNC: regexobj.match(str[,pos=0])
* self - regex object
* str - string to be matched
* pos - optional starting position
*
* RETURN:
* match object - when matched
* None - not matched
*/
static tp_obj regex_obj_match(TP)
{
tp_obj self = TP_OBJ(); /* regex object */
tp_obj str = TP_STR();
tp_obj pos = TP_DEFAULT(tp_number(0));
tp_obj maobj; /* match object */
regexobject *re = NULL;
int r = -2; /* -2 indicate exception */
 
re = getre(tp, self);
re->re_lastok = NULL;
r = re_match(&re->re_patbuf, (unsigned char *)str.string.val,
str.string.len, pos.number.val, &re->re_regs);
 
/* cannot match pattern */
if (r == -1)
goto nomatch;
 
/* error occurred */
if (r == -2)
goto exception;
 
/* matched */
re->re_lastok = (unsigned char *)str.string.val;
 
/* match obj */
maobj = match_object(tp, self);
 
return (maobj);
 
nomatch:
re->re_lastok = NULL;
return (tp_None);
exception:
re->re_lastok = NULL;
tp_raise(tp_None, tp_string("regex match error"));
}
 
/*
* regex object split()
* self - regex object
* restr - regex string
* maxsplit - max split field, default 0, mean no limit
*/
static tp_obj regex_obj_split(TP)
{
tp_obj self = TP_OBJ(); /* regex object */
tp_obj restr = TP_OBJ(); /* string */
tp_obj maxsplit = TP_DEFAULT(tp_number(0));
tp_obj maobj; /* match object */
regexobject *re = NULL; /* lower level regex object */
tp_obj result = tp_list(tp);
tp_obj grpstr; /* group string */
int slen; /* string length */
int srchloc; /* search location */
 
/* maxsplit == 0 means no limit */
if ((int)maxsplit.number.val == 0)
maxsplit.number.val = RE_NREGS;
assert(maxsplit.number.val > 0);
 
srchloc = 0;
slen = strlen((char *)restr.string.val);
 
do {
/* generate a temp match object */
tp_params_v(tp, 3, self, restr, tp_number(srchloc));
maobj = regex_obj_search(tp);
if (!tp_bool(tp, maobj))
break;
 
re = getre(tp, maobj);
if (re->re_lastok == NULL) {
tp_raise(tp_None, tp_string("no match for split()"));
}
 
/* extract fields */
if ((int)maxsplit.number.val > 0) {
int start = re->re_regs.start[0];
int end = re->re_regs.end[0];
/*printf("%s:start(%d),end(%d)\n", __func__, start, end);*/
if (start < 0 || end < 0)
break;
 
grpstr = tp_string_copy(tp,
(const char *)re->re_lastok + srchloc, start - srchloc);
 
if (tp_bool(tp, grpstr)) {
tp_set(tp, result, tp_None, grpstr);
maxsplit.number.val--;
}
 
srchloc = end;
}
} while (srchloc < slen && (int)maxsplit.number.val > 0);
 
/* collect remaining string, if necessary */
if (srchloc < slen) {
grpstr = tp_string_copy(tp,
(const char *)restr.string.val + srchloc, slen - srchloc);
if (tp_bool(tp, grpstr))
tp_set(tp, result, tp_None, grpstr);
}
 
return (result);
}
 
/*
* regex object findall()
* self - regex object
* restr - regex string
* pos - starting position, default 0
*/
static tp_obj regex_obj_findall(TP)
{
tp_obj self = TP_OBJ(); /* regex object */
tp_obj restr = TP_OBJ(); /* string */
tp_obj pos = TP_DEFAULT(tp_number(0));
tp_obj maobj; /* match object */
regexobject *re = NULL; /* lower level regex object */
tp_obj result = tp_list(tp);
tp_obj grpstr; /* group string */
int slen; /* string length */
int srchloc; /* search location */
 
srchloc = (int)pos.number.val;
slen = strlen((char *)restr.string.val);
if (srchloc < 0 || srchloc >= slen)
tp_raise(tp_None, tp_string("starting position out of range"));
 
do {
/* generate a temp match object */
tp_params_v(tp, 3, self, restr, tp_number(srchloc));
maobj = regex_obj_search(tp);
if (!tp_bool(tp, maobj))
break;
 
re = getre(tp, maobj);
if (re->re_lastok == NULL) {
tp_raise(tp_None, tp_string("no match for findall()"));
}
 
/* extract fields */
if (srchloc < slen) {
int start = re->re_regs.start[0];
int end = re->re_regs.end[0];
/*printf("%s:start(%d),end(%d)\n", __func__, start, end);*/
if (start < 0 || end < 0)
break;
 
grpstr = tp_string_copy(tp,
(const char *)re->re_lastok + start, end - start);
 
if (tp_bool(tp, grpstr)) {
tp_set(tp, result, tp_None, grpstr);
}
 
srchloc = end;
}
} while (srchloc < slen);
 
return (result);
}
 
/*
* FUNC: matchobj.group([group1, ...])
* self - match object
* args - optional group indices, default 0
*
* return specified group.
*/
static tp_obj match_obj_group(TP)
{
tp_obj self = TP_OBJ(); /* match object */
tp_obj grpidx; /* a group index */
regexobject *re = NULL;
int indices[RE_NREGS];
int start;
int end;
int i;
int single = 0; /* single group index? */
tp_obj result;
 
/* get lower level regex object representation */
re = getre(tp, self);
if (re->re_lastok == NULL)
tp_raise(tp_None,
tp_string("group() only valid after successful match/search"));
 
for (i = 0; i < RE_NREGS; i++)
indices[i] = -1;
 
/*
* if no group index provided, supply default group index 0; else
* fill in indices[] with provided group index list.
*/
if (tp->params.list.val->len == 0) {
indices[0] = 0;
single = 1;
} else if (tp->params.list.val->len == 1) {
indices[0] = (int)TP_NUM();
single = 1;
} else {
i = 0;
TP_LOOP(grpidx)
if (grpidx.number.val < 0 || grpidx.number.val > RE_NREGS)
tp_raise(tp_None, tp_string("group() grpidx out of range"));
indices[i++] = (int)grpidx.number.val;
TP_END
}
 
/* generate result string list */
result = tp_list(tp);
for (i = 0; i < RE_NREGS && indices[i] >= 0; i++) {
tp_obj grpstr;
start = re->re_regs.start[indices[i]];
end = re->re_regs.end[indices[i]];
if (start < 0 || end < 0) {
grpstr = tp_None;
} else {
grpstr = tp_string_copy(tp, (const char *)re->re_lastok + start,
end - start);
}
tp_set(tp, result, tp_None, grpstr);
}
return (single ? tp_get(tp, result, tp_number(0)) : result);
}
 
/*
* FUNC: matchobj.groups()
* self - match object.
* return all groups.
* Note: CPython allow a 'default' argument, but we disallow it.
*/
static tp_obj match_obj_groups(TP)
{
tp_obj self = TP_OBJ(); /* match object */
regexobject *re = NULL;
int start;
int end;
int i;
tp_obj result = tp_list(tp);
 
re = getre(tp, self);
if (re->re_lastok == NULL) {
tp_raise(tp_None,
tp_string("groups() only valid after successful match/search"));
}
 
for (i = 1; i < RE_NREGS; i++) {
start = re->re_regs.start[i];
end = re->re_regs.end[i];
if (start < 0 || end < 0)
break;
 
tp_obj grpstr = tp_string_copy(tp,
(const char *)re->re_lastok + start, end - start);
 
if (tp_bool(tp, grpstr))
tp_set(tp, result, tp_None, grpstr);
}
 
return (result);
}
 
/*
* FUNC: matchobj.start([group])
* self - match object
* group - group index
* return starting position of matched 'group' substring.
*/
static tp_obj match_obj_start(TP)
{
tp_obj self = TP_OBJ(); /* match object */
tp_obj group = TP_DEFAULT(tp_number(0)); /* group */
regexobject *re = NULL;
int start;
 
re = getre(tp, self);
if (re->re_lastok == NULL) {
tp_raise(tp_None,
tp_string("start() only valid after successful match/search"));
}
 
if (group.number.val < 0 || group.number.val > RE_NREGS)
tp_raise(tp_None, tp_string("IndexError: group index out of range"));
 
start = re->re_regs.start[(int)group.number.val];
 
return (tp_number(start));
}
 
/*
* FUNC: matchobj.end([group])
* self - match object
* group - group index
* return ending position of matched 'group' substring.
*/
static tp_obj match_obj_end(TP)
{
tp_obj self = TP_OBJ(); /* match object */
tp_obj group = TP_DEFAULT(tp_number(0)); /* group */
regexobject *re = NULL;
int end;
 
re = getre(tp, self);
if (re->re_lastok == NULL) {
tp_raise(tp_None,
tp_string("end() only valid after successful match/search"));
}
 
if (group.number.val < 0 || group.number.val > RE_NREGS)
tp_raise(tp_None, tp_string("IndexError: group index out of range"));
 
end = re->re_regs.end[(int)group.number.val];
 
return (tp_number(end));
}
 
/*
* FUNC: matchobj.span([group])
* self - match object
* group - group index
* return [start,end] position pair of matched 'group' substring.
*/
static tp_obj match_obj_span(TP)
{
tp_obj self = TP_OBJ(); /* match object */
tp_obj group = TP_DEFAULT(tp_number(0)); /* group */
regexobject *re = NULL;
int start;
int end;
tp_obj result;
 
re = getre(tp, self);
if (re->re_lastok == NULL) {
tp_raise(tp_None,
tp_string("span() only valid after successful match/search"));
}
 
if (group.number.val < 0 || group.number.val > RE_NREGS)
tp_raise(tp_None, tp_string("IndexError: group index out of range"));
 
start = re->re_regs.start[(int)group.number.val];
end = re->re_regs.end[(int)group.number.val];
 
result = tp_list(tp);
tp_set(tp, result, tp_None, tp_number(start));
tp_set(tp, result, tp_None, tp_number(end));
 
return (result);
}
 
/*
* compile out a re object
* repat - regex pattern
* resyn - regex syntax
*/
static tp_obj regex_compile(TP)
{
char *error = NULL;
char const *pat = NULL;
int size = 0;
tp_obj reobj_data;
tp_obj repat = TP_TYPE(TP_STRING); /* pattern */
tp_obj resyn = TP_DEFAULT(tp_number(RE_SYNTAX_EMACS)); /* syntax */
tp_obj reobj; /* regex object */
regexobject *re;
 
/*
* create regex object, its parent is builtin 'object'
*/
reobj = tp_object(tp);
 
re = (regexobject *)malloc(sizeof(regexobject));
if (!re) {
error = "malloc lower level regex object failed";
goto finally;
}
 
re->re_patbuf.buffer = NULL;
re->re_patbuf.allocated = 0;
re->re_patbuf.fastmap = (unsigned char *)re->re_fastmap;
re->re_patbuf.translate = NULL;
re->re_translate = NULL;
re->re_lastok = NULL;
 
re->re_errno = 0;
re->re_syntax = (int)resyn.number.val;
 
pat = repat.string.val;
size = repat.string.len;
error = re_compile_pattern((unsigned char *)pat, size, &re->re_patbuf);
if (error != NULL) {
LastError = error;
goto finally;
}
 
/* regexobject's size as magic */
reobj_data = tp_data(tp, (int)sizeof(regexobject), re);
 
/*
* bind to regex object
*/
tp_set(tp, reobj, tp_string("search"),
tp_method(tp, reobj, regex_obj_search));
tp_set(tp, reobj, tp_string("match"),
tp_method(tp, reobj, regex_obj_match));
tp_set(tp, reobj, tp_string("split"),
tp_method(tp, reobj, regex_obj_split));
tp_set(tp, reobj, tp_string("findall"),
tp_method(tp, reobj, regex_obj_findall));
tp_set(tp, reobj, tp_string("__data__"), reobj_data);
 
tp_set(tp, reobj, tp_string("__name__"),
tp_string("regular expression object"));
tp_set(tp, reobj, tp_string("__doc__"), tp_string(
"regular expression object, support methods:\n"
"search(str[,pos=0])-search 'str' from 'pos'\n"
"match(str[,pos=0]) -match 'str' from 'pos'\n"
));
 
return (reobj);
 
finally:
tp_raise(tp_None, tp_string(error));
}
 
/*
* module level search()
*/
static tp_obj regex_search(TP)
{
tp_obj repat = TP_OBJ(); /* pattern */
tp_obj restr = TP_OBJ(); /* string */
tp_obj resyn = TP_DEFAULT(tp_number(RE_SYNTAX_EMACS));
tp_obj reobj; /* regex object */
tp_obj maobj; /* match object */
 
/* compile out regex object */
tp_params_v(tp, 2, repat, resyn);
reobj = regex_compile(tp);
/* call r.search() */
tp_params_v(tp, 3, reobj, restr, tp_number(0));
maobj = regex_obj_search(tp);
 
return (maobj);
}
 
/*
* module level match()
*/
static tp_obj regex_match(TP)
{
tp_obj repat = TP_OBJ(); /* pattern */
tp_obj restr = TP_OBJ(); /* string */
tp_obj resyn = TP_DEFAULT(tp_number(RE_SYNTAX_EMACS));
tp_obj reobj; /* regex object */
tp_obj maobj; /* match object */
 
/* compile out regex object */
tp_params_v(tp, 2, repat, resyn);
reobj = regex_compile(tp);
/* call r.search() */
tp_params_v(tp, 3, reobj, restr, tp_number(0));
maobj = regex_obj_match(tp);
 
return (maobj);
}
 
/*
* module level split()
* repat - regex pattern
* restr - regex string
* maxsplit - max split field, default 0, mean no limit
*/
static tp_obj regex_split(TP)
{
tp_obj repat = TP_OBJ(); /* pattern */
tp_obj restr = TP_OBJ(); /* string */
tp_obj maxsplit = TP_DEFAULT(tp_number(0));
tp_obj reobj; /* regex object */
 
/* generate a temp regex object */
tp_params_v(tp, 2, repat, tp_number(RE_SYNTAX_EMACS));
reobj = regex_compile(tp);
tp_params_v(tp, 3, reobj, restr, maxsplit);
return regex_obj_split(tp);
}
 
/*
* module level findall()
* repat - regex pattern
* restr - regex string
* resyn - regex syntax, optional, default RE_SYNTAX_EMAC
*/
static tp_obj regex_findall(TP)
{
tp_obj repat = TP_OBJ(); /* pattern */
tp_obj restr = TP_OBJ(); /* string */
tp_obj resyn = TP_DEFAULT(tp_number(RE_SYNTAX_EMACS));
tp_obj reobj; /* regex object */
 
/* generate a temp regex object */
tp_params_v(tp, 2, repat, resyn);
reobj = regex_compile(tp);
tp_params_v(tp, 2, reobj, restr);
return regex_obj_findall(tp);
}
 
 
/*
* re mod can only support 'set_syntax', 'get_syntax', and 'compile' functions,
* 'compile' function will return a 'reobj', and this 'reobj' will support
* methods 'search', 'match', 'group', 'groupall', el al.
*/
void re_init(TP)
{
/*
* module dict for re
*/
tp_obj re_mod = tp_dict(tp);
 
/*
* bind to re module
*/
tp_set(tp, re_mod, tp_string("compile"), tp_fnc(tp, regex_compile));
tp_set(tp, re_mod, tp_string("search"), tp_fnc(tp, regex_search));
tp_set(tp, re_mod, tp_string("match"), tp_fnc(tp, regex_match));
tp_set(tp, re_mod, tp_string("split"), tp_fnc(tp, regex_split));
tp_set(tp, re_mod, tp_string("findall"), tp_fnc(tp, regex_findall));
tp_set(tp, re_mod, tp_string("AWK_SYNTAX"), tp_number(RE_SYNTAX_AWK));
tp_set(tp, re_mod, tp_string("EGREP_SYNTAX"), tp_number(RE_SYNTAX_EGREP));
tp_set(tp, re_mod, tp_string("GREP_SYNTAX"), tp_number(RE_SYNTAX_GREP));
tp_set(tp, re_mod, tp_string("EMACS_SYNTAX"), tp_number(RE_SYNTAX_EMACS));
 
/*
* bind special attibutes to re module
*/
tp_set(tp, re_mod, tp_string("__name__"),
tp_string("regular expression module"));
tp_set(tp, re_mod, tp_string("__file__"), tp_string(__FILE__));
tp_set(tp, re_mod, tp_string("__doc__"),
tp_string("simple regular express implementation"));
 
/*
* bind regex module to tinypy modules[]
*/
tp_set(tp, tp->modules, tp_string("re"), re_mod);
}
 
/programs/develop/tinypy/modules/re/regexpr.c
0,0 → 1,2124
/*
* to eliminate dependence on CPython, I stripped out
* some CPython error handling function calls.
*/
 
/* regexpr.c
*
* Author: Tatu Ylonen <ylo@ngs.fi>
*
* Copyright (c) 1991 Tatu Ylonen, Espoo, Finland
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without
* fee, provided that the above copyright notice appear in all copies.
* This software is provided "as is" without express or implied
* warranty.
*
* Created: Thu Sep 26 17:14:05 1991 ylo
* Last modified: Mon Nov 4 17:06:48 1991 ylo
* Ported to Think C: 19 Jan 1992 guido@cwi.nl
*
* This code draws many ideas from the regular expression packages by
* Henry Spencer of the University of Toronto and Richard Stallman of
* the Free Software Foundation.
*
* Emacs-specific code and syntax table code is almost directly borrowed
* from GNU regexp.
*
* Bugs fixed and lots of reorganization by Jeffrey C. Ollie, April
* 1997 Thanks for bug reports and ideas from Andrew Kuchling, Tim
* Peters, Guido van Rossum, Ka-Ping Yee, Sjoerd Mullender, and
* probably one or two others that I'm forgetting.
*
* $Id$ */
 
#include <stdlib.h>
#include <string.h>
#include "regexpr.h"
 
/* The original code blithely assumed that sizeof(short) == 2. Not
* always true. Original instances of "(short)x" were replaced by
* SHORT(x), where SHORT is #defined below. */
 
#define SHORT(x) ((x) & 0x8000 ? (x) - 0x10000 : (x))
 
/* The stack implementation is taken from an idea by Andrew Kuchling.
* It's a doubly linked list of arrays. The advantages of this over a
* simple linked list are that the number of mallocs required are
* reduced. It also makes it possible to statically allocate enough
* space so that small patterns don't ever need to call malloc.
*
* The advantages over a single array is that is periodically
* realloced when more space is needed is that we avoid ever copying
* the stack. */
 
/* item_t is the basic stack element. Defined as a union of
* structures so that both registers, failure points, and counters can
* be pushed/popped from the stack. There's nothing built into the
* item to keep track of whether a certain stack item is a register, a
* failure point, or a counter. */
 
typedef union item_t
{
struct
{
int num;
int level;
unsigned char *start;
unsigned char *end;
} reg;
struct
{
int count;
int level;
int phantom;
unsigned char *code;
unsigned char *text;
} fail;
struct
{
int num;
int level;
int count;
} cntr;
} item_t;
 
#define STACK_PAGE_SIZE 256
#define NUM_REGISTERS 256
 
/* A 'page' of stack items. */
 
typedef struct item_page_t
{
item_t items[STACK_PAGE_SIZE];
struct item_page_t *prev;
struct item_page_t *next;
} item_page_t;
 
 
typedef struct match_state
{
/* The number of registers that have been pushed onto the stack
* since the last failure point. */
 
int count;
 
/* Used to control when registers need to be pushed onto the
* stack. */
int level;
/* The number of failure points on the stack. */
int point;
/* Storage for the registers. Each register consists of two
* pointers to characters. So register N is represented as
* start[N] and end[N]. The pointers must be converted to
* offsets from the beginning of the string before returning the
* registers to the calling program. */
unsigned char *start[NUM_REGISTERS];
unsigned char *end[NUM_REGISTERS];
/* Keeps track of whether a register has changed recently. */
int changed[NUM_REGISTERS];
/* Structure to encapsulate the stack. */
struct
{
/* index into the current page. If index == 0 and you need
* to pop an item, move to the previous page and set index
* = STACK_PAGE_SIZE - 1. Otherwise decrement index to
* push a page. If index == STACK_PAGE_SIZE and you need
* to push a page move to the next page and set index =
* 0. If there is no new next page, allocate a new page
* and link it in. Otherwise, increment index to push a
* page. */
int index;
item_page_t *current; /* Pointer to the current page. */
item_page_t first; /* First page is statically allocated. */
} stack;
} match_state;
 
/* Initialize a state object */
 
/* #define NEW_STATE(state) \ */
/* memset(&state, 0, (void *)(&state.stack) - (void *)(&state)); \ */
/* state.stack.current = &state.stack.first; \ */
/* state.stack.first.prev = NULL; \ */
/* state.stack.first.next = NULL; \ */
/* state.stack.index = 0; \ */
/* state.level = 1 */
 
#define NEW_STATE(state, nregs) \
{ \
int i; \
for (i = 0; i < nregs; i++) \
{ \
state.start[i] = NULL; \
state.end[i] = NULL; \
state.changed[i] = 0; \
} \
state.stack.current = &state.stack.first; \
state.stack.first.prev = NULL; \
state.stack.first.next = NULL; \
state.stack.index = 0; \
state.level = 1; \
state.count = 0; \
state.level = 0; \
state.point = 0; \
}
 
/* Free any memory that might have been malloc'd */
 
#define FREE_STATE(state) \
while(state.stack.first.next != NULL) \
{ \
state.stack.current = state.stack.first.next; \
state.stack.first.next = state.stack.current->next; \
free(state.stack.current); \
}
 
/* Discard the top 'count' stack items. */
 
#define STACK_DISCARD(stack, count, on_error) \
stack.index -= count; \
while (stack.index < 0) \
{ \
if (stack.current->prev == NULL) \
on_error; \
stack.current = stack.current->prev; \
stack.index += STACK_PAGE_SIZE; \
}
 
/* Store a pointer to the previous item on the stack. Used to pop an
* item off of the stack. */
 
#define STACK_PREV(stack, top, on_error) \
if (stack.index == 0) \
{ \
if (stack.current->prev == NULL) \
on_error; \
stack.current = stack.current->prev; \
stack.index = STACK_PAGE_SIZE - 1; \
} \
else \
{ \
stack.index--; \
} \
top = &(stack.current->items[stack.index])
 
/* Store a pointer to the next item on the stack. Used to push an item
* on to the stack. */
 
#define STACK_NEXT(stack, top, on_error) \
if (stack.index == STACK_PAGE_SIZE) \
{ \
if (stack.current->next == NULL) \
{ \
stack.current->next = (item_page_t *)malloc(sizeof(item_page_t)); \
if (stack.current->next == NULL) \
on_error; \
stack.current->next->prev = stack.current; \
stack.current->next->next = NULL; \
} \
stack.current = stack.current->next; \
stack.index = 0; \
} \
top = &(stack.current->items[stack.index++])
 
/* Store a pointer to the item that is 'count' items back in the
* stack. STACK_BACK(stack, top, 1, on_error) is equivalent to
* STACK_TOP(stack, top, on_error). */
 
#define STACK_BACK(stack, top, count, on_error) \
{ \
int index; \
item_page_t *current; \
current = stack.current; \
index = stack.index - (count); \
while (index < 0) \
{ \
if (current->prev == NULL) \
on_error; \
current = current->prev; \
index += STACK_PAGE_SIZE; \
} \
top = &(current->items[index]); \
}
 
/* Store a pointer to the top item on the stack. Execute the
* 'on_error' code if there are no items on the stack. */
 
#define STACK_TOP(stack, top, on_error) \
if (stack.index == 0) \
{ \
if (stack.current->prev == NULL) \
on_error; \
top = &(stack.current->prev->items[STACK_PAGE_SIZE - 1]); \
} \
else \
{ \
top = &(stack.current->items[stack.index - 1]); \
}
 
/* Test to see if the stack is empty */
 
#define STACK_EMPTY(stack) ((stack.index == 0) && \
(stack.current->prev == NULL))
 
/* Return the start of register 'reg' */
 
#define GET_REG_START(state, reg) (state.start[reg])
 
/* Return the end of register 'reg' */
 
#define GET_REG_END(state, reg) (state.end[reg])
 
/* Set the start of register 'reg'. If the state of the register needs
* saving, push it on the stack. */
 
#define SET_REG_START(state, reg, text, on_error) \
if(state.changed[reg] < state.level) \
{ \
item_t *item; \
STACK_NEXT(state.stack, item, on_error); \
item->reg.num = reg; \
item->reg.start = state.start[reg]; \
item->reg.end = state.end[reg]; \
item->reg.level = state.changed[reg]; \
state.changed[reg] = state.level; \
state.count++; \
} \
state.start[reg] = text
 
/* Set the end of register 'reg'. If the state of the register needs
* saving, push it on the stack. */
 
#define SET_REG_END(state, reg, text, on_error) \
if(state.changed[reg] < state.level) \
{ \
item_t *item; \
STACK_NEXT(state.stack, item, on_error); \
item->reg.num = reg; \
item->reg.start = state.start[reg]; \
item->reg.end = state.end[reg]; \
item->reg.level = state.changed[reg]; \
state.changed[reg] = state.level; \
state.count++; \
} \
state.end[reg] = text
 
#define PUSH_FAILURE(state, xcode, xtext, on_error) \
{ \
item_t *item; \
STACK_NEXT(state.stack, item, on_error); \
item->fail.code = xcode; \
item->fail.text = xtext; \
item->fail.count = state.count; \
item->fail.level = state.level; \
item->fail.phantom = 0; \
state.count = 0; \
state.level++; \
state.point++; \
}
 
/* Update the last failure point with a new position in the text. */
 
#define UPDATE_FAILURE(state, xtext, on_error) \
{ \
item_t *item; \
STACK_BACK(state.stack, item, state.count + 1, on_error); \
if (!item->fail.phantom) \
{ \
item_t *item2; \
STACK_NEXT(state.stack, item2, on_error); \
item2->fail.code = item->fail.code; \
item2->fail.text = xtext; \
item2->fail.count = state.count; \
item2->fail.level = state.level; \
item2->fail.phantom = 1; \
state.count = 0; \
state.level++; \
state.point++; \
} \
else \
{ \
STACK_DISCARD(state.stack, state.count, on_error); \
STACK_TOP(state.stack, item, on_error); \
item->fail.text = xtext; \
state.count = 0; \
state.level++; \
} \
}
 
#define POP_FAILURE(state, xcode, xtext, on_empty, on_error) \
{ \
item_t *item; \
do \
{ \
while(state.count > 0) \
{ \
STACK_PREV(state.stack, item, on_error); \
state.start[item->reg.num] = item->reg.start; \
state.end[item->reg.num] = item->reg.end; \
state.changed[item->reg.num] = item->reg.level; \
state.count--; \
} \
STACK_PREV(state.stack, item, on_empty); \
xcode = item->fail.code; \
xtext = item->fail.text; \
state.count = item->fail.count; \
state.level = item->fail.level; \
state.point--; \
} \
while (item->fail.text == NULL); \
}
 
enum regexp_compiled_ops /* opcodes for compiled regexp */
{
Cend, /* end of pattern reached */
Cbol, /* beginning of line */
Ceol, /* end of line */
Cset, /* character set. Followed by 32 bytes of set. */
Cexact, /* followed by a byte to match */
Canychar, /* matches any character except newline */
Cstart_memory, /* set register start addr (followed by reg number) */
Cend_memory, /* set register end addr (followed by reg number) */
Cmatch_memory, /* match a duplicate of reg contents (regnum follows)*/
Cjump, /* followed by two bytes (lsb,msb) of displacement. */
Cstar_jump, /* will change to jump/update_failure_jump at runtime */
Cfailure_jump, /* jump to addr on failure */
Cupdate_failure_jump, /* update topmost failure point and jump */
Cdummy_failure_jump, /* push a dummy failure point and jump */
Cbegbuf, /* match at beginning of buffer */
Cendbuf, /* match at end of buffer */
Cwordbeg, /* match at beginning of word */
Cwordend, /* match at end of word */
Cwordbound, /* match if at word boundary */
Cnotwordbound, /* match if not at word boundary */
Csyntaxspec, /* matches syntax code (1 byte follows) */
Cnotsyntaxspec, /* matches if syntax code does not match (1 byte follows) */
Crepeat1
};
 
enum regexp_syntax_op /* syntax codes for plain and quoted characters */
{
Rend, /* special code for end of regexp */
Rnormal, /* normal character */
Ranychar, /* any character except newline */
Rquote, /* the quote character */
Rbol, /* match beginning of line */
Reol, /* match end of line */
Roptional, /* match preceding expression optionally */
Rstar, /* match preceding expr zero or more times */
Rplus, /* match preceding expr one or more times */
Ror, /* match either of alternatives */
Ropenpar, /* opening parenthesis */
Rclosepar, /* closing parenthesis */
Rmemory, /* match memory register */
Rextended_memory, /* \vnn to match registers 10-99 */
Ropenset, /* open set. Internal syntax hard-coded below. */
/* the following are gnu extensions to "normal" regexp syntax */
Rbegbuf, /* beginning of buffer */
Rendbuf, /* end of buffer */
Rwordchar, /* word character */
Rnotwordchar, /* not word character */
Rwordbeg, /* beginning of word */
Rwordend, /* end of word */
Rwordbound, /* word bound */
Rnotwordbound, /* not word bound */
Rnum_ops
};
 
/* customized errno */
int re_errno = TP_RE_NOERR;
 
static int re_compile_initialized = 0;
static int regexp_syntax = 0;
int re_syntax = 0; /* Exported copy of regexp_syntax */
static unsigned char regexp_plain_ops[256];
static unsigned char regexp_quoted_ops[256];
static unsigned char regexp_precedences[Rnum_ops];
static int regexp_context_indep_ops;
static int regexp_ansi_sequences;
 
#define NUM_LEVELS 5 /* number of precedence levels in use */
#define MAX_NESTING 100 /* max nesting level of operators */
 
#define SYNTAX(ch) re_syntax_table[(unsigned char)(ch)]
 
unsigned char re_syntax_table[256];
 
int re_err_occurred(void)
{
if (re_errno == TP_RE_NOERR)
return (0);
return (1);
}
 
void re_compile_initialize(void)
{
int a;
static int syntax_table_inited = 0;
 
if (!syntax_table_inited)
{
syntax_table_inited = 1;
memset(re_syntax_table, 0, 256);
for (a = 'a'; a <= 'z'; a++)
re_syntax_table[a] = Sword;
for (a = 'A'; a <= 'Z'; a++)
re_syntax_table[a] = Sword;
for (a = '0'; a <= '9'; a++)
re_syntax_table[a] = Sword | Sdigit | Shexdigit;
for (a = '0'; a <= '7'; a++)
re_syntax_table[a] |= Soctaldigit;
for (a = 'A'; a <= 'F'; a++)
re_syntax_table[a] |= Shexdigit;
for (a = 'a'; a <= 'f'; a++)
re_syntax_table[a] |= Shexdigit;
re_syntax_table['_'] = Sword;
for (a = 9; a <= 13; a++)
re_syntax_table[a] = Swhitespace;
re_syntax_table[' '] = Swhitespace;
}
re_compile_initialized = 1;
for (a = 0; a < 256; a++)
{
regexp_plain_ops[a] = Rnormal;
regexp_quoted_ops[a] = Rnormal;
}
for (a = '0'; a <= '9'; a++)
regexp_quoted_ops[a] = Rmemory;
regexp_plain_ops['\134'] = Rquote;
if (regexp_syntax & RE_NO_BK_PARENS)
{
regexp_plain_ops['('] = Ropenpar;
regexp_plain_ops[')'] = Rclosepar;
}
else
{
regexp_quoted_ops['('] = Ropenpar;
regexp_quoted_ops[')'] = Rclosepar;
}
if (regexp_syntax & RE_NO_BK_VBAR)
regexp_plain_ops['\174'] = Ror;
else
regexp_quoted_ops['\174'] = Ror;
regexp_plain_ops['*'] = Rstar;
if (regexp_syntax & RE_BK_PLUS_QM)
{
regexp_quoted_ops['+'] = Rplus;
regexp_quoted_ops['?'] = Roptional;
}
else
{
regexp_plain_ops['+'] = Rplus;
regexp_plain_ops['?'] = Roptional;
}
if (regexp_syntax & RE_NEWLINE_OR)
regexp_plain_ops['\n'] = Ror;
regexp_plain_ops['\133'] = Ropenset;
regexp_plain_ops['\136'] = Rbol;
regexp_plain_ops['$'] = Reol;
regexp_plain_ops['.'] = Ranychar;
if (!(regexp_syntax & RE_NO_GNU_EXTENSIONS))
{
regexp_quoted_ops['w'] = Rwordchar;
regexp_quoted_ops['W'] = Rnotwordchar;
regexp_quoted_ops['<'] = Rwordbeg;
regexp_quoted_ops['>'] = Rwordend;
regexp_quoted_ops['b'] = Rwordbound;
regexp_quoted_ops['B'] = Rnotwordbound;
regexp_quoted_ops['`'] = Rbegbuf;
regexp_quoted_ops['\''] = Rendbuf;
}
if (regexp_syntax & RE_ANSI_HEX)
regexp_quoted_ops['v'] = Rextended_memory;
for (a = 0; a < Rnum_ops; a++)
regexp_precedences[a] = 4;
if (regexp_syntax & RE_TIGHT_VBAR)
{
regexp_precedences[Ror] = 3;
regexp_precedences[Rbol] = 2;
regexp_precedences[Reol] = 2;
}
else
{
regexp_precedences[Ror] = 2;
regexp_precedences[Rbol] = 3;
regexp_precedences[Reol] = 3;
}
regexp_precedences[Rclosepar] = 1;
regexp_precedences[Rend] = 0;
regexp_context_indep_ops = (regexp_syntax & RE_CONTEXT_INDEP_OPS) != 0;
regexp_ansi_sequences = (regexp_syntax & RE_ANSI_HEX) != 0;
}
 
int re_set_syntax(int syntax)
{
int ret;
ret = regexp_syntax;
regexp_syntax = syntax;
re_syntax = syntax; /* Exported copy */
re_compile_initialize();
return ret;
}
 
static int hex_char_to_decimal(int ch)
{
if (ch >= '0' && ch <= '9')
return ch - '0';
if (ch >= 'a' && ch <= 'f')
return ch - 'a' + 10;
if (ch >= 'A' && ch <= 'F')
return ch - 'A' + 10;
return 16;
}
 
static void re_compile_fastmap_aux(unsigned char *code, int pos,
unsigned char *visited,
unsigned char *can_be_null,
unsigned char *fastmap)
{
int a;
int b;
int syntaxcode;
if (visited[pos])
return; /* we have already been here */
visited[pos] = 1;
for (;;)
switch (code[pos++]) {
case Cend:
{
*can_be_null = 1;
return;
}
case Cbol:
case Cbegbuf:
case Cendbuf:
case Cwordbeg:
case Cwordend:
case Cwordbound:
case Cnotwordbound:
{
for (a = 0; a < 256; a++)
fastmap[a] = 1;
break;
}
case Csyntaxspec:
{
syntaxcode = code[pos++];
for (a = 0; a < 256; a++)
if (SYNTAX(a) & syntaxcode)
fastmap[a] = 1;
return;
}
case Cnotsyntaxspec:
{
syntaxcode = code[pos++];
for (a = 0; a < 256; a++)
if (!(SYNTAX(a) & syntaxcode) )
fastmap[a] = 1;
return;
}
case Ceol:
{
fastmap['\n'] = 1;
if (*can_be_null == 0)
*can_be_null = 2; /* can match null, but only at end of buffer*/
return;
}
case Cset:
{
for (a = 0; a < 256/8; a++)
if (code[pos + a] != 0)
for (b = 0; b < 8; b++)
if (code[pos + a] & (1 << b))
fastmap[(a << 3) + b] = 1;
pos += 256/8;
return;
}
case Cexact:
{
fastmap[(unsigned char)code[pos]] = 1;
return;
}
case Canychar:
{
for (a = 0; a < 256; a++)
if (a != '\n')
fastmap[a] = 1;
return;
}
case Cstart_memory:
case Cend_memory:
{
pos++;
break;
}
case Cmatch_memory:
{
for (a = 0; a < 256; a++)
fastmap[a] = 1;
*can_be_null = 1;
return;
}
case Cjump:
case Cdummy_failure_jump:
case Cupdate_failure_jump:
case Cstar_jump:
{
a = (unsigned char)code[pos++];
a |= (unsigned char)code[pos++] << 8;
pos += (int)SHORT(a);
if (visited[pos])
{
/* argh... the regexp contains empty loops. This is not
good, as this may cause a failure stack overflow when
matching. Oh well. */
/* this path leads nowhere; pursue other paths. */
return;
}
visited[pos] = 1;
break;
}
case Cfailure_jump:
{
a = (unsigned char)code[pos++];
a |= (unsigned char)code[pos++] << 8;
a = pos + (int)SHORT(a);
re_compile_fastmap_aux(code, a, visited, can_be_null, fastmap);
break;
}
case Crepeat1:
{
pos += 2;
break;
}
default:
{
/*PyErr_SetString(PyExc_SystemError, "Unknown regex opcode: memory corrupted?");*/
re_errno = TP_RE_UNKNOWN_OPCODE;
return;
/*NOTREACHED*/
}
}
}
 
static int re_do_compile_fastmap(unsigned char *buffer, int used, int pos,
unsigned char *can_be_null,
unsigned char *fastmap)
{
unsigned char small_visited[512], *visited;
if (used <= sizeof(small_visited))
visited = small_visited;
else
{
visited = (unsigned char *)malloc(used);
if (!visited)
return 0;
}
*can_be_null = 0;
memset(fastmap, 0, 256);
memset(visited, 0, used);
re_compile_fastmap_aux(buffer, pos, visited, can_be_null, fastmap);
if (visited != small_visited)
free(visited);
return 1;
}
 
void re_compile_fastmap(regexp_t bufp)
{
if (!bufp->fastmap || bufp->fastmap_accurate)
return;
assert(bufp->used > 0);
if (!re_do_compile_fastmap(bufp->buffer,
bufp->used,
0,
&bufp->can_be_null,
bufp->fastmap))
return;
/*if (PyErr_Occurred()) return;*/
if (re_err_occurred()) return;
 
if (bufp->buffer[0] == Cbol)
bufp->anchor = 1; /* begline */
else
if (bufp->buffer[0] == Cbegbuf)
bufp->anchor = 2; /* begbuf */
else
bufp->anchor = 0; /* none */
bufp->fastmap_accurate = 1;
}
 
/*
* star is coded as:
* 1: failure_jump 2
* ... code for operand of star
* star_jump 1
* 2: ... code after star
*
* We change the star_jump to update_failure_jump if we can determine
* that it is safe to do so; otherwise we change it to an ordinary
* jump.
*
* plus is coded as
*
* jump 2
* 1: failure_jump 3
* 2: ... code for operand of plus
* star_jump 1
* 3: ... code after plus
*
* For star_jump considerations this is processed identically to star.
*
*/
 
static int re_optimize_star_jump(regexp_t bufp, unsigned char *code)
{
unsigned char map[256];
unsigned char can_be_null;
unsigned char *p1;
unsigned char *p2;
unsigned char ch;
int a;
int b;
int num_instructions = 0;
 
a = (unsigned char)*code++;
a |= (unsigned char)*code++ << 8;
a = (int)SHORT(a);
p1 = code + a + 3; /* skip the failure_jump */
/* Check that the jump is within the pattern */
if (p1<bufp->buffer || bufp->buffer+bufp->used<p1)
{
/*PyErr_SetString(PyExc_SystemError, "Regex VM jump out of bounds (failure_jump opt)");*/
re_errno = TP_RE_JUMP_OUT_BOUNDS;
return 0;
}
assert(p1[-3] == Cfailure_jump);
p2 = code;
/* p1 points inside loop, p2 points to after loop */
if (!re_do_compile_fastmap(bufp->buffer, bufp->used,
(int)(p2 - bufp->buffer),
&can_be_null, map))
goto make_normal_jump;
/* If we might introduce a new update point inside the
* loop, we can't optimize because then update_jump would
* update a wrong failure point. Thus we have to be
* quite careful here.
*/
/* loop until we find something that consumes a character */
loop_p1:
num_instructions++;
switch (*p1++)
{
case Cbol:
case Ceol:
case Cbegbuf:
case Cendbuf:
case Cwordbeg:
case Cwordend:
case Cwordbound:
case Cnotwordbound:
{
goto loop_p1;
}
case Cstart_memory:
case Cend_memory:
{
p1++;
goto loop_p1;
}
case Cexact:
{
ch = (unsigned char)*p1++;
if (map[(int)ch])
goto make_normal_jump;
break;
}
case Canychar:
{
for (b = 0; b < 256; b++)
if (b != '\n' && map[b])
goto make_normal_jump;
break;
}
case Cset:
{
for (b = 0; b < 256; b++)
if ((p1[b >> 3] & (1 << (b & 7))) && map[b])
goto make_normal_jump;
p1 += 256/8;
break;
}
default:
{
goto make_normal_jump;
}
}
/* now we know that we can't backtrack. */
while (p1 != p2 - 3)
{
num_instructions++;
switch (*p1++)
{
case Cend:
{
return 0;
}
case Cbol:
case Ceol:
case Canychar:
case Cbegbuf:
case Cendbuf:
case Cwordbeg:
case Cwordend:
case Cwordbound:
case Cnotwordbound:
{
break;
}
case Cset:
{
p1 += 256/8;
break;
}
case Cexact:
case Cstart_memory:
case Cend_memory:
case Cmatch_memory:
case Csyntaxspec:
case Cnotsyntaxspec:
{
p1++;
break;
}
case Cjump:
case Cstar_jump:
case Cfailure_jump:
case Cupdate_failure_jump:
case Cdummy_failure_jump:
{
goto make_normal_jump;
}
default:
{
return 0;
}
}
}
/* make_update_jump: */
code -= 3;
a += 3; /* jump to after the Cfailure_jump */
code[0] = Cupdate_failure_jump;
code[1] = a & 0xff;
code[2] = a >> 8;
if (num_instructions > 1)
return 1;
assert(num_instructions == 1);
/* if the only instruction matches a single character, we can do
* better */
p1 = code + 3 + a; /* start of sole instruction */
if (*p1 == Cset || *p1 == Cexact || *p1 == Canychar ||
*p1 == Csyntaxspec || *p1 == Cnotsyntaxspec)
code[0] = Crepeat1;
return 1;
make_normal_jump:
code -= 3;
*code = Cjump;
return 1;
}
 
static int re_optimize(regexp_t bufp)
{
unsigned char *code;
code = bufp->buffer;
while(1)
{
switch (*code++)
{
case Cend:
{
return 1;
}
case Canychar:
case Cbol:
case Ceol:
case Cbegbuf:
case Cendbuf:
case Cwordbeg:
case Cwordend:
case Cwordbound:
case Cnotwordbound:
{
break;
}
case Cset:
{
code += 256/8;
break;
}
case Cexact:
case Cstart_memory:
case Cend_memory:
case Cmatch_memory:
case Csyntaxspec:
case Cnotsyntaxspec:
{
code++;
break;
}
case Cstar_jump:
{
if (!re_optimize_star_jump(bufp, code))
{
return 0;
}
/* fall through */
}
case Cupdate_failure_jump:
case Cjump:
case Cdummy_failure_jump:
case Cfailure_jump:
case Crepeat1:
{
code += 2;
break;
}
default:
{
return 0;
}
}
}
}
 
#define NEXTCHAR(var) \
{ \
if (pos >= size) \
goto ends_prematurely; \
(var) = regex[pos]; \
pos++; \
}
 
#define ALLOC(amount) \
{ \
if (pattern_offset+(amount) > alloc) \
{ \
alloc += 256 + (amount); \
pattern = (unsigned char *)realloc(pattern, alloc); \
if (!pattern) \
goto out_of_memory; \
} \
}
 
#define STORE(ch) pattern[pattern_offset++] = (ch)
 
#define CURRENT_LEVEL_START (starts[starts_base + current_level])
 
#define SET_LEVEL_START starts[starts_base + current_level] = pattern_offset
 
#define PUSH_LEVEL_STARTS \
if (starts_base < (MAX_NESTING-1)*NUM_LEVELS) \
starts_base += NUM_LEVELS; \
else \
goto too_complex \
 
#define POP_LEVEL_STARTS starts_base -= NUM_LEVELS
 
#define PUT_ADDR(offset,addr) \
{ \
int disp = (addr) - (offset) - 2; \
pattern[(offset)] = disp & 0xff; \
pattern[(offset)+1] = (disp>>8) & 0xff; \
}
 
#define INSERT_JUMP(pos,type,addr) \
{ \
int a, p = (pos), t = (type), ad = (addr); \
for (a = pattern_offset - 1; a >= p; a--) \
pattern[a + 3] = pattern[a]; \
pattern[p] = t; \
PUT_ADDR(p+1,ad); \
pattern_offset += 3; \
}
 
#define SETBIT(buf,offset,bit) (buf)[(offset)+(bit)/8] |= (1<<((bit) & 7))
 
#define SET_FIELDS \
{ \
bufp->allocated = alloc; \
bufp->buffer = pattern; \
bufp->used = pattern_offset; \
}
#define GETHEX(var) \
{ \
unsigned char gethex_ch, gethex_value; \
NEXTCHAR(gethex_ch); \
gethex_value = hex_char_to_decimal(gethex_ch); \
if (gethex_value == 16) \
goto hex_error; \
NEXTCHAR(gethex_ch); \
gethex_ch = hex_char_to_decimal(gethex_ch); \
if (gethex_ch == 16) \
goto hex_error; \
(var) = gethex_value * 16 + gethex_ch; \
}
 
#define ANSI_TRANSLATE(ch) \
{ \
switch (ch) \
{ \
case 'a': \
case 'A': \
{ \
ch = 7; /* audible bell */ \
break; \
} \
case 'b': \
case 'B': \
{ \
ch = 8; /* backspace */ \
break; \
} \
case 'f': \
case 'F': \
{ \
ch = 12; /* form feed */ \
break; \
} \
case 'n': \
case 'N': \
{ \
ch = 10; /* line feed */ \
break; \
} \
case 'r': \
case 'R': \
{ \
ch = 13; /* carriage return */ \
break; \
} \
case 't': \
case 'T': \
{ \
ch = 9; /* tab */ \
break; \
} \
case 'v': \
case 'V': \
{ \
ch = 11; /* vertical tab */ \
break; \
} \
case 'x': /* hex code */ \
case 'X': \
{ \
GETHEX(ch); \
break; \
} \
default: \
{ \
/* other characters passed through */ \
if (translate) \
ch = translate[(unsigned char)ch]; \
break; \
} \
} \
}
 
char *re_compile_pattern(unsigned char *regex, int size, regexp_t bufp)
{
int a;
int pos;
int op;
int current_level;
int level;
int opcode;
int pattern_offset = 0, alloc;
int starts[NUM_LEVELS * MAX_NESTING];
int starts_base;
int future_jumps[MAX_NESTING];
int num_jumps;
unsigned char ch = '\0';
unsigned char *pattern;
unsigned char *translate;
int next_register;
int paren_depth;
int num_open_registers;
int open_registers[RE_NREGS];
int beginning_context;
if (!re_compile_initialized)
re_compile_initialize();
bufp->used = 0;
bufp->fastmap_accurate = 0;
bufp->uses_registers = 1;
bufp->num_registers = 1;
translate = bufp->translate;
pattern = bufp->buffer;
alloc = bufp->allocated;
if (alloc == 0 || pattern == NULL)
{
alloc = 256;
pattern = (unsigned char *)malloc(alloc);
if (!pattern)
goto out_of_memory;
}
pattern_offset = 0;
starts_base = 0;
num_jumps = 0;
current_level = 0;
SET_LEVEL_START;
num_open_registers = 0;
next_register = 1;
paren_depth = 0;
beginning_context = 1;
op = -1;
/* we use Rend dummy to ensure that pending jumps are updated
(due to low priority of Rend) before exiting the loop. */
pos = 0;
while (op != Rend)
{
if (pos >= size)
op = Rend;
else
{
NEXTCHAR(ch);
if (translate)
ch = translate[(unsigned char)ch];
op = regexp_plain_ops[(unsigned char)ch];
if (op == Rquote)
{
NEXTCHAR(ch);
op = regexp_quoted_ops[(unsigned char)ch];
if (op == Rnormal && regexp_ansi_sequences)
ANSI_TRANSLATE(ch);
}
}
level = regexp_precedences[op];
/* printf("ch='%c' op=%d level=%d current_level=%d
curlevstart=%d\n", ch, op, level, current_level,
CURRENT_LEVEL_START); */
if (level > current_level)
{
for (current_level++; current_level < level; current_level++)
SET_LEVEL_START;
SET_LEVEL_START;
}
else
if (level < current_level)
{
current_level = level;
for (;num_jumps > 0 &&
future_jumps[num_jumps-1] >= CURRENT_LEVEL_START;
num_jumps--)
PUT_ADDR(future_jumps[num_jumps-1], pattern_offset);
}
switch (op)
{
case Rend:
{
break;
}
case Rnormal:
{
normal_char:
opcode = Cexact;
store_opcode_and_arg: /* opcode & ch must be set */
SET_LEVEL_START;
ALLOC(2);
STORE(opcode);
STORE(ch);
break;
}
case Ranychar:
{
opcode = Canychar;
store_opcode:
SET_LEVEL_START;
ALLOC(1);
STORE(opcode);
break;
}
case Rquote:
{
/*Py_FatalError("Rquote");*/
re_errno = TP_RE_QUOTE_ERR;
abort(); /* XXX: may need to jump to error handler */
/*NOTREACHED*/
}
case Rbol:
{
if (!beginning_context) {
if (regexp_context_indep_ops)
goto op_error;
else
goto normal_char;
}
opcode = Cbol;
goto store_opcode;
}
case Reol:
{
if (!((pos >= size) ||
((regexp_syntax & RE_NO_BK_VBAR) ?
(regex[pos] == '\174') :
(pos+1 < size && regex[pos] == '\134' &&
regex[pos+1] == '\174')) ||
((regexp_syntax & RE_NO_BK_PARENS)?
(regex[pos] == ')'):
(pos+1 < size && regex[pos] == '\134' &&
regex[pos+1] == ')')))) {
if (regexp_context_indep_ops)
goto op_error;
else
goto normal_char;
}
opcode = Ceol;
goto store_opcode;
/* NOTREACHED */
break;
}
case Roptional:
{
if (beginning_context) {
if (regexp_context_indep_ops)
goto op_error;
else
goto normal_char;
}
if (CURRENT_LEVEL_START == pattern_offset)
break; /* ignore empty patterns for ? */
ALLOC(3);
INSERT_JUMP(CURRENT_LEVEL_START, Cfailure_jump,
pattern_offset + 3);
break;
}
case Rstar:
case Rplus:
{
if (beginning_context) {
if (regexp_context_indep_ops)
goto op_error;
else
goto normal_char;
}
if (CURRENT_LEVEL_START == pattern_offset)
break; /* ignore empty patterns for + and * */
ALLOC(9);
INSERT_JUMP(CURRENT_LEVEL_START, Cfailure_jump,
pattern_offset + 6);
INSERT_JUMP(pattern_offset, Cstar_jump, CURRENT_LEVEL_START);
if (op == Rplus) /* jump over initial failure_jump */
INSERT_JUMP(CURRENT_LEVEL_START, Cdummy_failure_jump,
CURRENT_LEVEL_START + 6);
break;
}
case Ror:
{
ALLOC(6);
INSERT_JUMP(CURRENT_LEVEL_START, Cfailure_jump,
pattern_offset + 6);
if (num_jumps >= MAX_NESTING)
goto too_complex;
STORE(Cjump);
future_jumps[num_jumps++] = pattern_offset;
STORE(0);
STORE(0);
SET_LEVEL_START;
break;
}
case Ropenpar:
{
SET_LEVEL_START;
if (next_register < RE_NREGS)
{
bufp->uses_registers = 1;
ALLOC(2);
STORE(Cstart_memory);
STORE(next_register);
open_registers[num_open_registers++] = next_register;
bufp->num_registers++;
next_register++;
}
paren_depth++;
PUSH_LEVEL_STARTS;
current_level = 0;
SET_LEVEL_START;
break;
}
case Rclosepar:
{
if (paren_depth <= 0)
goto parenthesis_error;
POP_LEVEL_STARTS;
current_level = regexp_precedences[Ropenpar];
paren_depth--;
if (paren_depth < num_open_registers)
{
bufp->uses_registers = 1;
ALLOC(2);
STORE(Cend_memory);
num_open_registers--;
STORE(open_registers[num_open_registers]);
}
break;
}
case Rmemory:
{
if (ch == '0')
goto bad_match_register;
assert(ch >= '0' && ch <= '9');
bufp->uses_registers = 1;
opcode = Cmatch_memory;
ch -= '0';
goto store_opcode_and_arg;
}
case Rextended_memory:
{
NEXTCHAR(ch);
if (ch < '0' || ch > '9')
goto bad_match_register;
NEXTCHAR(a);
if (a < '0' || a > '9')
goto bad_match_register;
ch = 10 * (a - '0') + ch - '0';
if (ch == 0 || ch >= RE_NREGS)
goto bad_match_register;
bufp->uses_registers = 1;
opcode = Cmatch_memory;
goto store_opcode_and_arg;
}
case Ropenset:
{
int complement;
int prev;
int offset;
int range;
int firstchar;
SET_LEVEL_START;
ALLOC(1+256/8);
STORE(Cset);
offset = pattern_offset;
for (a = 0; a < 256/8; a++)
STORE(0);
NEXTCHAR(ch);
if (translate)
ch = translate[(unsigned char)ch];
if (ch == '\136')
{
complement = 1;
NEXTCHAR(ch);
if (translate)
ch = translate[(unsigned char)ch];
}
else
complement = 0;
prev = -1;
range = 0;
firstchar = 1;
while (ch != '\135' || firstchar)
{
firstchar = 0;
if (regexp_ansi_sequences && ch == '\134')
{
NEXTCHAR(ch);
ANSI_TRANSLATE(ch);
}
if (range)
{
for (a = prev; a <= (int)ch; a++)
SETBIT(pattern, offset, a);
prev = -1;
range = 0;
}
else
if (prev != -1 && ch == '-')
range = 1;
else
{
SETBIT(pattern, offset, ch);
prev = ch;
}
NEXTCHAR(ch);
if (translate)
ch = translate[(unsigned char)ch];
}
if (range)
SETBIT(pattern, offset, '-');
if (complement)
{
for (a = 0; a < 256/8; a++)
pattern[offset+a] ^= 0xff;
}
break;
}
case Rbegbuf:
{
opcode = Cbegbuf;
goto store_opcode;
}
case Rendbuf:
{
opcode = Cendbuf;
goto store_opcode;
}
case Rwordchar:
{
opcode = Csyntaxspec;
ch = Sword;
goto store_opcode_and_arg;
}
case Rnotwordchar:
{
opcode = Cnotsyntaxspec;
ch = Sword;
goto store_opcode_and_arg;
}
case Rwordbeg:
{
opcode = Cwordbeg;
goto store_opcode;
}
case Rwordend:
{
opcode = Cwordend;
goto store_opcode;
}
case Rwordbound:
{
opcode = Cwordbound;
goto store_opcode;
}
case Rnotwordbound:
{
opcode = Cnotwordbound;
goto store_opcode;
}
default:
{
abort();
}
}
beginning_context = (op == Ropenpar || op == Ror);
}
if (starts_base != 0)
goto parenthesis_error;
assert(num_jumps == 0);
ALLOC(1);
STORE(Cend);
SET_FIELDS;
if(!re_optimize(bufp))
return "Optimization error";
return NULL;
 
op_error:
SET_FIELDS;
return "Badly placed special character";
 
bad_match_register:
SET_FIELDS;
return "Bad match register number";
hex_error:
SET_FIELDS;
return "Bad hexadecimal number";
parenthesis_error:
SET_FIELDS;
return "Badly placed parenthesis";
out_of_memory:
SET_FIELDS;
return "Out of memory";
ends_prematurely:
SET_FIELDS;
return "Regular expression ends prematurely";
 
too_complex:
SET_FIELDS;
return "Regular expression too complex";
}
 
#undef CHARAT
#undef NEXTCHAR
#undef GETHEX
#undef ALLOC
#undef STORE
#undef CURRENT_LEVEL_START
#undef SET_LEVEL_START
#undef PUSH_LEVEL_STARTS
#undef POP_LEVEL_STARTS
#undef PUT_ADDR
#undef INSERT_JUMP
#undef SETBIT
#undef SET_FIELDS
 
#define PREFETCH if (text == textend) goto fail
 
#define NEXTCHAR(var) \
PREFETCH; \
var = (unsigned char)*text++; \
if (translate) \
var = translate[var]
 
int re_match(regexp_t bufp, unsigned char *string, int size, int pos,
regexp_registers_t old_regs)
{
unsigned char *code;
unsigned char *translate;
unsigned char *text;
unsigned char *textstart;
unsigned char *textend;
int a;
int b;
int ch;
int reg;
int match_end;
unsigned char *regstart;
unsigned char *regend;
int regsize;
match_state state;
assert(pos >= 0 && size >= 0);
assert(pos <= size);
text = string + pos;
textstart = string;
textend = string + size;
code = bufp->buffer;
translate = bufp->translate;
NEW_STATE(state, bufp->num_registers);
 
continue_matching:
switch (*code++)
{
case Cend:
{
match_end = text - textstart;
if (old_regs)
{
old_regs->start[0] = pos;
old_regs->end[0] = match_end;
if (!bufp->uses_registers)
{
for (a = 1; a < RE_NREGS; a++)
{
old_regs->start[a] = -1;
old_regs->end[a] = -1;
}
}
else
{
for (a = 1; a < bufp->num_registers; a++)
{
if ((GET_REG_START(state, a) == NULL) ||
(GET_REG_END(state, a) == NULL))
{
old_regs->start[a] = -1;
old_regs->end[a] = -1;
continue;
}
old_regs->start[a] = GET_REG_START(state, a) - textstart;
old_regs->end[a] = GET_REG_END(state, a) - textstart;
}
for (; a < RE_NREGS; a++)
{
old_regs->start[a] = -1;
old_regs->end[a] = -1;
}
}
}
FREE_STATE(state);
return match_end - pos;
}
case Cbol:
{
if (text == textstart || text[-1] == '\n')
goto continue_matching;
goto fail;
}
case Ceol:
{
if (text == textend || *text == '\n')
goto continue_matching;
goto fail;
}
case Cset:
{
NEXTCHAR(ch);
if (code[ch/8] & (1<<(ch & 7)))
{
code += 256/8;
goto continue_matching;
}
goto fail;
}
case Cexact:
{
NEXTCHAR(ch);
if (ch != (unsigned char)*code++)
goto fail;
goto continue_matching;
}
case Canychar:
{
NEXTCHAR(ch);
if (ch == '\n')
goto fail;
goto continue_matching;
}
case Cstart_memory:
{
reg = *code++;
SET_REG_START(state, reg, text, goto error);
goto continue_matching;
}
case Cend_memory:
{
reg = *code++;
SET_REG_END(state, reg, text, goto error);
goto continue_matching;
}
case Cmatch_memory:
{
reg = *code++;
regstart = GET_REG_START(state, reg);
regend = GET_REG_END(state, reg);
if ((regstart == NULL) || (regend == NULL))
goto fail; /* or should we just match nothing? */
regsize = regend - regstart;
 
if (regsize > (textend - text))
goto fail;
if(translate)
{
for (; regstart < regend; regstart++, text++)
if (translate[*regstart] != translate[*text])
goto fail;
}
else
for (; regstart < regend; regstart++, text++)
if (*regstart != *text)
goto fail;
goto continue_matching;
}
case Cupdate_failure_jump:
{
UPDATE_FAILURE(state, text, goto error);
/* fall to next case */
}
/* treat Cstar_jump just like Cjump if it hasn't been optimized */
case Cstar_jump:
case Cjump:
{
a = (unsigned char)*code++;
a |= (unsigned char)*code++ << 8;
code += (int)SHORT(a);
if (code<bufp->buffer || bufp->buffer+bufp->used<code) {
/*PyErr_SetString(PyExc_SystemError, "Regex VM jump out of bounds (Cjump)");*/
re_errno = TP_RE_JUMP_OUT_BOUNDS;
FREE_STATE(state);
return -2;
}
goto continue_matching;
}
case Cdummy_failure_jump:
{
unsigned char *failuredest;
 
a = (unsigned char)*code++;
a |= (unsigned char)*code++ << 8;
a = (int)SHORT(a);
assert(*code == Cfailure_jump);
b = (unsigned char)code[1];
b |= (unsigned char)code[2] << 8;
failuredest = code + (int)SHORT(b) + 3;
if (failuredest<bufp->buffer || bufp->buffer+bufp->used < failuredest) {
/*PyErr_SetString(PyExc_SystemError, "Regex VM jump out of bounds (Cdummy_failure_jump failuredest)");*/
re_errno = TP_RE_JUMP_OUT_BOUNDS;
FREE_STATE(state);
return -2;
}
PUSH_FAILURE(state, failuredest, NULL, goto error);
code += a;
if (code<bufp->buffer || bufp->buffer+bufp->used < code) {
/*PyErr_SetString(PyExc_SystemError, "Regex VM jump out of bounds (Cdummy_failure_jump code)");*/
re_errno = TP_RE_JUMP_OUT_BOUNDS;
FREE_STATE(state);
return -2;
}
goto continue_matching;
}
case Cfailure_jump:
{
a = (unsigned char)*code++;
a |= (unsigned char)*code++ << 8;
a = (int)SHORT(a);
if (code+a<bufp->buffer || bufp->buffer+bufp->used < code+a) {
/*PyErr_SetString(PyExc_SystemError, "Regex VM jump out of bounds (Cfailure_jump)");*/
re_errno = TP_RE_JUMP_OUT_BOUNDS;
FREE_STATE(state);
return -2;
}
PUSH_FAILURE(state, code + a, text, goto error);
goto continue_matching;
}
case Crepeat1:
{
unsigned char *pinst;
a = (unsigned char)*code++;
a |= (unsigned char)*code++ << 8;
a = (int)SHORT(a);
pinst = code + a;
if (pinst<bufp->buffer || bufp->buffer+bufp->used<pinst) {
/*PyErr_SetString(PyExc_SystemError, "Regex VM jump out of bounds (Crepeat1)");*/
re_errno = TP_RE_JUMP_OUT_BOUNDS;
FREE_STATE(state);
return -2;
}
/* pinst is sole instruction in loop, and it matches a
* single character. Since Crepeat1 was originally a
* Cupdate_failure_jump, we also know that backtracking
* is useless: so long as the single-character
* expression matches, it must be used. Also, in the
* case of +, we've already matched one character, so +
* can't fail: nothing here can cause a failure. */
switch (*pinst++)
{
case Cset:
{
if (translate)
{
while (text < textend)
{
ch = translate[(unsigned char)*text];
if (pinst[ch/8] & (1<<(ch & 7)))
text++;
else
break;
}
}
else
{
while (text < textend)
{
ch = (unsigned char)*text;
if (pinst[ch/8] & (1<<(ch & 7)))
text++;
else
break;
}
}
break;
}
case Cexact:
{
ch = (unsigned char)*pinst;
if (translate)
{
while (text < textend &&
translate[(unsigned char)*text] == ch)
text++;
}
else
{
while (text < textend && (unsigned char)*text == ch)
text++;
}
break;
}
case Canychar:
{
while (text < textend && (unsigned char)*text != '\n')
text++;
break;
}
case Csyntaxspec:
{
a = (unsigned char)*pinst;
if (translate)
{
while (text < textend &&
(SYNTAX(translate[*text]) & a) )
text++;
}
else
{
while (text < textend && (SYNTAX(*text) & a) )
text++;
}
break;
}
case Cnotsyntaxspec:
{
a = (unsigned char)*pinst;
if (translate)
{
while (text < textend &&
!(SYNTAX(translate[*text]) & a) )
text++;
}
else
{
while (text < textend && !(SYNTAX(*text) & a) )
text++;
}
break;
}
default:
{
FREE_STATE(state);
/*PyErr_SetString(PyExc_SystemError, "Unknown regex opcode: memory corrupted?");*/
re_errno = TP_RE_UNKNOWN_OPCODE;
return -2;
/*NOTREACHED*/
}
}
/* due to the funky way + and * are compiled, the top
* failure- stack entry at this point is actually a
* success entry -- update it & pop it */
UPDATE_FAILURE(state, text, goto error);
goto fail; /* i.e., succeed <wink/sigh> */
}
case Cbegbuf:
{
if (text == textstart)
goto continue_matching;
goto fail;
}
case Cendbuf:
{
if (text == textend)
goto continue_matching;
goto fail;
}
case Cwordbeg:
{
if (text == textend)
goto fail;
if (!(SYNTAX(*text) & Sword))
goto fail;
if (text == textstart)
goto continue_matching;
if (!(SYNTAX(text[-1]) & Sword))
goto continue_matching;
goto fail;
}
case Cwordend:
{
if (text == textstart)
goto fail;
if (!(SYNTAX(text[-1]) & Sword))
goto fail;
if (text == textend)
goto continue_matching;
if (!(SYNTAX(*text) & Sword))
goto continue_matching;
goto fail;
}
case Cwordbound:
{
/* Note: as in gnu regexp, this also matches at the
* beginning and end of buffer. */
 
if (text == textstart || text == textend)
goto continue_matching;
if ((SYNTAX(text[-1]) & Sword) ^ (SYNTAX(*text) & Sword))
goto continue_matching;
goto fail;
}
case Cnotwordbound:
{
/* Note: as in gnu regexp, this never matches at the
* beginning and end of buffer. */
if (text == textstart || text == textend)
goto fail;
if (!((SYNTAX(text[-1]) & Sword) ^ (SYNTAX(*text) & Sword)))
goto continue_matching;
goto fail;
}
case Csyntaxspec:
{
NEXTCHAR(ch);
if (!(SYNTAX(ch) & (unsigned char)*code++))
goto fail;
goto continue_matching;
}
case Cnotsyntaxspec:
{
NEXTCHAR(ch);
if (SYNTAX(ch) & (unsigned char)*code++)
goto fail;
goto continue_matching;
}
default:
{
FREE_STATE(state);
/*PyErr_SetString(PyExc_SystemError, "Unknown regex opcode: memory corrupted?");*/
re_errno = TP_RE_UNKNOWN_OPCODE;
return -2;
/*NOTREACHED*/
}
}
 
#if 0 /* This line is never reached --Guido */
abort();
#endif
/*
*NOTREACHED
*/
 
/* Using "break;" in the above switch statement is equivalent to "goto fail;" */
fail:
POP_FAILURE(state, code, text, goto done_matching, goto error);
goto continue_matching;
done_matching:
/* if(translated != NULL) */
/* free(translated); */
FREE_STATE(state);
return -1;
 
error:
/* if (translated != NULL) */
/* free(translated); */
FREE_STATE(state);
return -2;
}
 
#undef PREFETCH
#undef NEXTCHAR
 
int re_search(regexp_t bufp, unsigned char *string, int size, int pos,
int range, regexp_registers_t regs)
{
unsigned char *fastmap;
unsigned char *translate;
unsigned char *text;
unsigned char *partstart;
unsigned char *partend;
int dir;
int ret;
unsigned char anchor;
assert(size >= 0 && pos >= 0);
assert(pos + range >= 0 && pos + range <= size); /* Bugfix by ylo */
fastmap = bufp->fastmap;
translate = bufp->translate;
if (fastmap && !bufp->fastmap_accurate) {
re_compile_fastmap(bufp);
if (re_err_occurred()) return -2;
}
anchor = bufp->anchor;
if (bufp->can_be_null == 1) /* can_be_null == 2: can match null at eob */
fastmap = NULL;
 
if (range < 0)
{
dir = -1;
range = -range;
}
else
dir = 1;
 
if (anchor == 2) {
if (pos != 0)
return -1;
else
range = 0;
}
 
for (; range >= 0; range--, pos += dir)
{
if (fastmap)
{
if (dir == 1)
{ /* searching forwards */
 
text = string + pos;
partend = string + size;
partstart = text;
if (translate)
while (text != partend &&
!fastmap[(unsigned char) translate[(unsigned char)*text]])
text++;
else
while (text != partend && !fastmap[(unsigned char)*text])
text++;
pos += text - partstart;
range -= text - partstart;
if (pos == size && bufp->can_be_null == 0)
return -1;
}
else
{ /* searching backwards */
text = string + pos;
partstart = string + pos - range;
partend = text;
if (translate)
while (text != partstart &&
!fastmap[(unsigned char)
translate[(unsigned char)*text]])
text--;
else
while (text != partstart &&
!fastmap[(unsigned char)*text])
text--;
pos -= partend - text;
range -= partend - text;
}
}
if (anchor == 1)
{ /* anchored to begline */
if (pos > 0 && (string[pos - 1] != '\n'))
continue;
}
assert(pos >= 0 && pos <= size);
ret = re_match(bufp, string, size, pos, regs);
if (ret >= 0)
return pos;
if (ret == -2)
return -2;
}
return -1;
}
 
/*
** Local Variables:
** mode: c
** c-file-style: "python"
** End:
*/
/programs/develop/tinypy/modules/re/regexpr.h
0,0 → 1,160
/*
* -*- mode: c-mode; c-file-style: python -*-
*/
 
#ifndef Py_REGEXPR_H
#define Py_REGEXPR_H
#ifdef __cplusplus
extern "C" {
#endif
 
/*
* regexpr.h
*
* Author: Tatu Ylonen <ylo@ngs.fi>
*
* Copyright (c) 1991 Tatu Ylonen, Espoo, Finland
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies. This
* software is provided "as is" without express or implied warranty.
*
* Created: Thu Sep 26 17:15:36 1991 ylo
* Last modified: Mon Nov 4 15:49:46 1991 ylo
*/
 
/* $Id$ */
 
#ifndef REGEXPR_H
#define REGEXPR_H
 
#define RE_NREGS 100 /* number of registers available */
 
typedef struct re_pattern_buffer
{
unsigned char *buffer; /* compiled pattern */
int allocated; /* allocated size of compiled pattern */
int used; /* actual length of compiled pattern */
unsigned char *fastmap; /* fastmap[ch] is true if ch can start pattern */
unsigned char *translate; /* translation to apply during compilation/matching */
unsigned char fastmap_accurate; /* true if fastmap is valid */
unsigned char can_be_null; /* true if can match empty string */
unsigned char uses_registers; /* registers are used and need to be initialized */
int num_registers; /* number of registers used */
unsigned char anchor; /* anchor: 0=none 1=begline 2=begbuf */
} *regexp_t;
 
typedef struct re_registers
{
int start[RE_NREGS]; /* start offset of region */
int end[RE_NREGS]; /* end offset of region */
} *regexp_registers_t;
 
/* bit definitions for syntax */
#define RE_NO_BK_PARENS 1 /* no quoting for parentheses */
#define RE_NO_BK_VBAR 2 /* no quoting for vertical bar */
#define RE_BK_PLUS_QM 4 /* quoting needed for + and ? */
#define RE_TIGHT_VBAR 8 /* | binds tighter than ^ and $ */
#define RE_NEWLINE_OR 16 /* treat newline as or */
#define RE_CONTEXT_INDEP_OPS 32 /* ^$?*+ are special in all contexts */
#define RE_ANSI_HEX 64 /* ansi sequences (\n etc) and \xhh */
#define RE_NO_GNU_EXTENSIONS 128 /* no gnu extensions */
 
#define TP_RE_NOERR 0
#define TP_RE_UNKNOWN_OPCODE (-1)
#define TP_RE_JUMP_OUT_BOUNDS 1
#define TP_RE_QUOTE_ERR 2
 
/* definitions for some common regexp styles */
#define RE_SYNTAX_AWK (RE_NO_BK_PARENS|RE_NO_BK_VBAR|RE_CONTEXT_INDEP_OPS)
#define RE_SYNTAX_EGREP (RE_SYNTAX_AWK|RE_NEWLINE_OR)
#define RE_SYNTAX_GREP (RE_BK_PLUS_QM|RE_NEWLINE_OR)
#define RE_SYNTAX_EMACS 0
 
#define Sword 1
#define Swhitespace 2
#define Sdigit 4
#define Soctaldigit 8
#define Shexdigit 16
 
/* Rename all exported symbols to avoid conflicts with similarly named
symbols in some systems' standard C libraries... */
 
#define re_syntax _Py_re_syntax
#define re_syntax_table _Py_re_syntax_table
#define re_compile_initialize _Py_re_compile_initialize
#define re_set_syntax _Py_re_set_syntax
#define re_compile_pattern _Py_re_compile_pattern
#define re_match _Py_re_match
#define re_search _Py_re_search
#define re_compile_fastmap _Py_re_compile_fastmap
#define re_comp _Py_re_comp
#define re_exec _Py_re_exec
 
#ifdef HAVE_PROTOTYPES
 
extern int re_syntax;
/* This is the actual syntax mask. It was added so that Python could do
* syntax-dependent munging of patterns before compilation. */
 
extern unsigned char re_syntax_table[256];
 
void re_compile_initialize(void);
 
int re_set_syntax(int syntax);
/* This sets the syntax to use and returns the previous syntax. The
* syntax is specified by a bit mask of the above defined bits. */
 
char *re_compile_pattern(unsigned char *regex, int regex_size, regexp_t compiled);
/* This compiles the regexp (given in regex and length in regex_size).
* This returns NULL if the regexp compiled successfully, and an error
* message if an error was encountered. The buffer field must be
* initialized to a memory area allocated by malloc (or to NULL) before
* use, and the allocated field must be set to its length (or 0 if
* buffer is NULL). Also, the translate field must be set to point to a
* valid translation table, or NULL if it is not used. */
 
int re_match(regexp_t compiled, unsigned char *string, int size, int pos,
regexp_registers_t old_regs);
/* This tries to match the regexp against the string. This returns the
* length of the matched portion, or -1 if the pattern could not be
* matched and -2 if an error (such as failure stack overflow) is
* encountered. */
 
int re_search(regexp_t compiled, unsigned char *string, int size, int startpos,
int range, regexp_registers_t regs);
/* This searches for a substring matching the regexp. This returns the
* first index at which a match is found. range specifies at how many
* positions to try matching; positive values indicate searching
* forwards, and negative values indicate searching backwards. mstop
* specifies the offset beyond which a match must not go. This returns
* -1 if no match is found, and -2 if an error (such as failure stack
* overflow) is encountered. */
 
void re_compile_fastmap(regexp_t compiled);
/* This computes the fastmap for the regexp. For this to have any effect,
* the calling program must have initialized the fastmap field to point
* to an array of 256 characters. */
 
#else /* HAVE_PROTOTYPES */
 
extern int re_syntax;
extern unsigned char re_syntax_table[256];
void re_compile_initialize();
int re_set_syntax();
char *re_compile_pattern();
int re_match();
int re_search();
void re_compile_fastmap();
 
#endif /* HAVE_PROTOTYPES */
 
#endif /* REGEXPR_H */
 
 
 
#ifdef __cplusplus
}
#endif
#endif /* !Py_REGEXPR_H */
/programs/develop/tinypy/modules/re/tests.py
0,0 → 1,648
"""
test case for re module
"""
 
import re
import testsuite
SUCCEED, FAIL, SYNTAX_ERROR = range(3)
 
def RAISE():
raise("testing failed")
 
def main():
#print("begin re tests")
 
assert(re.__name__ != None)
assert(re.__doc__ != None)
assert(re.__file__ != None)
 
test_re_obj_search()
test_re_obj_match()
test_re_mod_search()
test_re_mod_match()
test_re_obj_split()
test_re_mod_split()
test_re_obj_findall()
test_re_mod_findall()
test_mat_obj_groups()
test_mat_obj_start()
test_mat_obj_end()
test_mat_obj_span()
 
print("#OK: re tests passed")
 
def test_re_obj_search(verbose = None):
"""
some tests borrowed from cpython
testing re.compile(), reobj.search(), and matobj.group()
"""
regex_tests = testsuite.search_regex_tests
for t in regex_tests:
pattern=s=outcome=repl=expected=None
if len(t)==5:
pattern, s, outcome, repl, expected = t
elif len(t)==3:
pattern, s, outcome = t
else:
raise ('Test tuples should have 3 or 5 fields',t)
 
try:
obj=re.compile(pattern)
except:
if outcome==SYNTAX_ERROR: continue # Expected a syntax error
else:
# Regex syntax errors aren't yet reported, so for
# the official test suite they'll be quietly ignored.
pass
try:
matobj=obj.search(s)
except:
print('=== Unexpected exception:', obj, matobj, pattern, s)
RAISE()
 
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
pass
elif outcome==FAIL:
if matobj==None: pass # No match, as expected
else: print('=== Succeeded incorrectly', obj, matobj, pattern, s)
elif outcome==SUCCEED:
if matobj!=None:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
found=matobj.group(0)
repl = repl.replace("found", str(found))
for i in range(1,11):
if "g"+str(i) in repl:
gi = str(matobj.group(i))
repl = repl.replace("g"+str(i), gi)
if len(t) == 5:
repl = repl.replace('+', '')
repl = repl.replace('\"', '')
if repl!=expected:
print( '=== grouping error', t,
str(repl)+' should be '+str(expected))
RAISE()
else:
print ('=== Failed incorrectly', t)
 
def test_re_obj_match(verbose = None):
"""
some tests borrowed from cpython
testing re.compile(), reobj.match() and matobj.group()
"""
regex_tests = testsuite.match_regex_tests
for t in regex_tests:
pattern=s=outcome=repl=expected=None
if len(t)==5:
pattern, s, outcome, repl, expected = t
elif len(t)==3:
pattern, s, outcome = t
else:
raise ('Test tuples should have 3 or 5 fields',t)
 
try:
obj=re.compile(pattern)
except:
if outcome==SYNTAX_ERROR: continue # Expected a syntax error
else:
# Regex syntax errors aren't yet reported, so for
# the official test suite they'll be quietly ignored.
pass
try:
matobj=obj.match(s)
except:
print('=== Unexpected exception:', obj, matobj, pattern, s)
 
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
pass
elif outcome==FAIL:
if matobj==None: pass # No match, as expected
else: print('=== Succeeded incorrectly', obj, matobj, pattern, s)
elif outcome==SUCCEED:
if matobj!=None:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
found=matobj.group(0)
repl = repl.replace("found", str(found))
for i in range(1,11):
if "g"+str(i) in repl:
gi = str(matobj.group(i))
repl = repl.replace("g"+str(i), gi)
if len(t) == 5:
repl = repl.replace('+', '')
repl = repl.replace('\"', '')
if repl!=expected:
print( '=== grouping error', t,
str(repl)+' should be '+str(expected))
RAISE()
else:
print ('=== Failed incorrectly', obj, matobj, pattern, s)
 
def test_re_mod_search(verbose = None):
"""
some tests borrowed from cpython
testing re.search(), and matobj.group()
"""
regex_tests = testsuite.search_regex_tests
for t in regex_tests:
pattern=s=outcome=repl=expected=None
if len(t)==5:
pattern, s, outcome, repl, expected = t
elif len(t)==3:
pattern, s, outcome = t
else:
raise ('Test tuples should have 3 or 5 fields',t)
 
try:
matobj=re.search(pattern, s)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
pass
else:
print('=== Unexpected exception:', matobj, pattern, s)
 
if outcome==FAIL:
if matobj==None: pass # No match, as expected
else: print('=== Succeeded incorrectly', obj, matobj, pattern, s)
elif outcome==SUCCEED:
if matobj!=None:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
found=matobj.group(0)
repl = repl.replace("found", str(found))
for i in range(1,11):
if "g"+str(i) in repl:
gi = str(matobj.group(i))
repl = repl.replace("g"+str(i), gi)
if len(t) == 5:
repl = repl.replace('+', '')
repl = repl.replace('\"', '')
if repl!=expected:
print( '=== grouping error', t,
str(repl)+' should be '+str(expected))
RAISE()
else:
print ('=== Failed incorrectly', t)
 
def test_re_mod_match(verbose = None):
"""
some tests borrowed from cpython
testing re.match(), and matobj.group()
"""
regex_tests = testsuite.match_regex_tests
for t in regex_tests:
pattern=s=outcome=repl=expected=None
if len(t)==5:
pattern, s, outcome, repl, expected = t
elif len(t)==3:
pattern, s, outcome = t
else:
raise ('Test tuples should have 3 or 5 fields',t)
 
try:
matobj=re.match(pattern, s)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
pass
else:
print('=== Unexpected exception:', matobj, pattern, s)
 
if outcome==FAIL:
if matobj==None: pass # No match, as expected
else: print('=== Succeeded incorrectly', matobj, pattern, s)
elif outcome==SUCCEED:
if matobj!=None:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
found=matobj.group(0)
repl = repl.replace("found", str(found))
for i in range(1,11):
if "g"+str(i) in repl:
gi = str(matobj.group(i))
repl = repl.replace("g"+str(i), gi)
if len(t) == 5:
repl = repl.replace('+', '')
repl = repl.replace('\"', '')
if repl!=expected:
print( '=== grouping error', t,
str(repl)+' should be '+str(expected))
RAISE()
else:
print ('=== Failed incorrectly', t)
 
def test_re_obj_split(verbose = None):
"""
test re.compile(), and reobj.split()
"""
regex_tests = testsuite.split_regex_tests
for t in regex_tests:
pattern, s, outcome, maxsplit, fields = t
try:
reobj = re.compile(pattern)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
pass
else:
print('=== Unexpected exception:', pattern, s,
outcome, maxsplit, fields)
try:
fldlst=reobj.split(s, maxsplit)
except:
if outcome == SYNTAX_ERROR:
continue
else:
print('=== Unexpected exception:', pattern, s,
outcome, maxsplit, fields)
 
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if fldlst:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
if verbose:
fldstr = fieldstr = ""
for item in fldlst:
fldstr = fldstr + str(item) + " | "
for item in fields:
fieldstr = fieldstr + str(item) + " | "
print(fldstr, "~~~", fieldstr)
if len(fields) != len(fldlst):
print('=== Not coherent 1')
RAISE()
 
for i in range(len(fields)):
if fields[i] != fldlst[i]:
if verbose:
print('=== Not coherent 2', pattern, s,
outcome, maxsplit, fields, i,
fields[i],'(',len(fields[i]),')', ' | ',
fldlst[i],'(',len(fldlst[i]),')')
else:
print('=== Not coherent 2')
RAISE()
else:
print ('=== Failed incorrectly', pattern, s,
outcome, maxsplit, fields)
 
def test_re_mod_split(verbose = None):
"""
test re.split()
"""
regex_tests = testsuite.split_regex_tests
for t in regex_tests:
pattern, s, outcome, maxsplit, fields = t
try:
fldlst=re.split(pattern, s, maxsplit)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception:', pattern, s,
outcome, maxsplit, fields)
 
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if fldlst:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
if verbose:
fldstr = fieldstr = ""
for item in fldlst:
fldstr = fldstr + str(item) + " | "
for item in fields:
fieldstr = fieldstr + str(item) + " | "
print(fldstr, "~~~", fieldstr)
 
if len(fields) != len(fldlst):
print('=== Not coherent 1')
RAISE()
 
for i in range(len(fields)):
if fields[i] != fldlst[i]:
if verbose:
print('=== Not coherent 2', pattern, s,
outcome, maxsplit, fields, i,
fields[i],'(',len(fields[i]),')', ' | ',
fldlst[i],'(',len(fldlst[i]),')')
else:
print('=== Not coherent 2')
RAISE()
else:
print ('=== Failed incorrectly', pattern, s,
outcome, maxsplit, fields)
 
def test_re_obj_findall(verbose = None):
"""
test re.compile(), and reobj.findall()
"""
regex_tests = testsuite.findall_regex_tests
for t in regex_tests:
pattern, s, outcome, pos, fields = t
try:
reobj = re.compile(pattern)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
pass
else:
print('=== Unexpected exception:', pattern, s,
outcome, pos, fields)
try:
fldlst=reobj.findall(s, pos)
except:
if outcome == SYNTAX_ERROR:
continue
else:
print('=== Unexpected exception:', pattern, s,
outcome, pos, fields)
 
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if fldlst:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
if verbose:
fldstr = fieldstr = ""
for item in fldlst:
fldstr = fldstr + str(item) + " | "
for item in fields:
fieldstr = fieldstr + str(item) + " | "
print(fldstr, "~~~", fieldstr)
 
if len(fields) != len(fldlst):
print('=== Not coherent 1')
RAISE()
 
for i in range(len(fields)):
if fields[i] != fldlst[i]:
if verbose:
print('=== Not coherent 2', pattern, s,
outcome, maxsplit, fields, i,
fields[i],'(',len(fields[i]),')', ' | ',
fldlst[i],'(',len(fldlst[i]),')')
else:
print('=== Not coherent 2')
RAISE()
else:
print ('=== Failed incorrectly', pattern, s,
outcome, pos, fields)
 
def test_re_mod_findall(verbose = None):
"""
test re.findall()
"""
regex_tests = testsuite.mod_findall_regex_tests
for t in regex_tests:
pattern, s, outcome, pos, fields = t # pos is not used
try:
fldlst=re.findall(pattern, s)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception:', pattern, s,
outcome, pos, fields)
 
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if fldlst:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
if verbose:
fldstr = fieldstr = ""
for item in fldlst:
fldstr = fldstr + str(item) + " | "
for item in fields:
fieldstr = fieldstr + str(item) + " | "
print(fldstr, "~~~", fieldstr)
 
if len(fields) != len(fldlst):
print('=== Not coherent 1')
RAISE()
 
for i in range(len(fields)):
if fields[i] != fldlst[i]:
if verbose:
print('=== Not coherent 2', pattern, s,
outcome, maxsplit, fields, i,
fields[i],'(',len(fields[i]),')', ' | ',
fldlst[i],'(',len(fldlst[i]),')')
else:
print('=== Not coherent 2')
RAISE()
else:
print ('=== Failed incorrectly', pattern, s,
outcome, pos, fields)
 
def test_mat_obj_groups(verbose = None):
"""
test re.search(), and matobj.groups()
'verbose' is for debugging, when 'verbose' is true, print extra info
"""
regex_tests = testsuite.matobj_groups_regex_tests
for t in regex_tests:
pattern, s, outcome, fields, grpidx, start, end = t
try:
matobj=re.search(pattern, s)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 1:', pattern, s,
outcome,fields)
 
try:
if outcome==SUCCEED: assert(matobj != None)
fldlst = matobj.groups()
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 2:', pattern, s,
outcome,fields)
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if fldlst and fields:
# Matched, as expected, so now we compute the
# result string and compare it to our expected result.
if verbose:
fldstr = fieldstr = ""
for item in fldlst:
fldstr = fldstr + str(item) + " | "
for item in fields:
fieldstr = fieldstr + str(item) + " | "
print(fldstr, "~~~", fieldstr)
 
if len(fields) != len(fldlst):
print('=== Not coherent 2')
RAISE()
 
for i in range(len(fields)):
if fields[i] != fldlst[i]:
if verbose:
print('=== Not coherent', pattern, s,
outcome,fields, i,
fields[i],'(',len(fields[i]),')', ' | ',
fldlst[i],'(',len(fldlst[i]),')')
else:
print('=== Not coherent')
RAISE()
elif not len(fldlst) and not len(fields):
# output is empty, as expected
if verbose:
print("output is empty, as expected")
continue
else:
if verbose:
for item in fldlst:
print(item,)
print()
for item in fields:
print(item,)
print()
print ('=== Failed incorrectly', pattern, s,
outcome,fields,fldlst)
 
def test_mat_obj_start(verbose = None):
"""
test re.search(), and matobj.start()
'verbose' is for debugging, when 'verbose' is true, print extra info
"""
regex_tests = testsuite.matobj_groups_regex_tests
for t in regex_tests:
pattern, s, outcome, fields, grpidx, start, end = t
try:
matobj=re.search(pattern, s)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 1:', pattern, s,
outcome,fields)
 
try:
if outcome==SUCCEED: assert(matobj != None)
fldlst = matobj.groups()
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 2:', pattern, s,
outcome,fields)
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if grpidx > 0:
if matobj.start(grpidx) == start:
pass
else:
if verbose:
print ('=== Failed incorrectly', pattern, s,
outcome,fields,fldlst)
raise("testing failed")
 
 
def test_mat_obj_end(verbose = None):
"""
test re.search(), and matobj.end()
'verbose' is for debugging, when 'verbose' is true, print extra info
"""
regex_tests = testsuite.matobj_groups_regex_tests
for t in regex_tests:
pattern, s, outcome, fields, grpidx, start, end = t
try:
matobj=re.search(pattern, s)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 1:', pattern, s,
outcome,fields)
 
try:
if outcome==SUCCEED: assert(matobj != None)
fldlst = matobj.groups()
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 2:', pattern, s,
outcome,fields)
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if grpidx > 0:
if matobj.end(grpidx) == end:
pass
else:
if verbose:
print ('=== Failed incorrectly', pattern, s,
outcome,fields,fldlst, matobj.end(grpidx), end)
raise("testing failed")
 
def test_mat_obj_span(verbose = None):
"""
test re.search(), and matobj.span()
'verbose' is for debugging, when 'verbose' is true, print extra info
"""
regex_tests = testsuite.matobj_groups_regex_tests
for t in regex_tests:
pattern, s, outcome, fields, grpidx, start, end = t
try:
matobj=re.search(pattern, s)
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 1:', pattern, s,
outcome,fields)
 
try:
if outcome==SUCCEED: assert(matobj != None)
fldlst = matobj.groups()
except:
if outcome==SYNTAX_ERROR:
# This should have been a syntax error; forget it.
continue
else:
print('=== Unexpected exception 2:', pattern, s,
outcome,fields)
if outcome==FAIL:
pass # No match, as expected
elif outcome==SUCCEED:
if (grpidx > 0):
spstart, spend = matobj.span(grpidx)
if spstart == start and spend == end:
pass
else:
if verbose:
print ('=== Failed incorrectly', pattern, s,
outcome,fields,fldlst)
raise("testing failed")
 
if __name__ == "__main__":
main()
 
/programs/develop/tinypy/modules/re/testsuite.py
0,0 → 1,367
# Test suite (for verifying correctness)
#
# The test suite is a list of 5- or 3-tuples. The 5 parts of a
# complete tuple are:
# element 0: a string containing the pattern
# 1: the string to match against the pattern
# 2: the expected result (0 - SUCCEED, 1 - FAIL, 2 - SYNTAX_ERROR)
# 3: a string that will be eval()'ed to produce a test string.
# This is an arbitrary Python expression; the available
# variables are "found" (the whole match), and "g1", "g2", ...
# up to "g10" contain the contents of each group, or the
# string 'None' if the group wasn't given a value.
# 4: The expected result of evaluating the expression.
# If the two don't match, an error is reported.
#
# If the regex isn't expected to work, the latter two elements can be omitted.
 
# test suite for search
search_regex_tests=[
['abc', 'abc', 0, 'found', 'abc'],
['abc', 'xbc', 1],
['abc', 'axc', 1],
['abc', 'abx', 1],
['abc', 'xabcy', 0, 'found', 'abc'],
['abc', 'ababc', 0, 'found', 'abc'],
['ab*c', 'abc', 0, 'found', 'abc'],
['ab*bc', 'abc', 0, 'found', 'abc'],
['ab*bc', 'abbc', 0, 'found', 'abbc'],
['ab*bc', 'abbbbc', 0, 'found', 'abbbbc'],
['ab+bc', 'abbc', 0, 'found', 'abbc'],
['ab+bc', 'abc', 1],
['ab+bc', 'abq', 1],
['ab+bc', 'abbbbc', 0, 'found', 'abbbbc'],
['ab?bc', 'abbc', 0, 'found', 'abbc'],
['ab?bc', 'abc', 0, 'found', 'abc'],
['ab?bc', 'abbbbc', 1],
['ab?c', 'abc', 0, 'found', 'abc'],
['^abc$', 'abc', 0, 'found', 'abc'],
['^abc$', 'abcc', 1],
['^abc', 'abcc', 0, 'found', 'abc'],
['^abc$', 'aabc', 1],
['abc$', 'aabc', 0, 'found', 'abc'],
['^', 'abc', 0, 'found+"-"', '-'],
['$', 'abc', 0, 'found+"-"', '-'],
['a.c', 'abc', 0, 'found', 'abc'],
['a.c', 'axc', 0, 'found', 'axc'],
['a.*c', 'axyzc', 0, 'found', 'axyzc'],
['a.*c', 'axyzd', 1],
['a[bc]d', 'abc', 1],
['a[bc]d', 'abd', 0, 'found', 'abd'],
['a[b-d]e', 'abd', 1],
['a[b-d]e', 'ace', 0, 'found', 'ace'],
['a[b-d]', 'aac', 0, 'found', 'ac'],
['a[-b]', 'a-', 0, 'found', 'a-'],
['a[b-]', 'a-', 0, 'found', 'a-'],
['a[]b', '-', 2],
['a[', '-', 2],
['a\\', '-', 2],
['abc\\)', '-', 2],
['\\(abc', '-', 2],
['a]', 'a]', 0, 'found', 'a]'],
['a[]]b', 'a]b', 0, 'found', 'a]b'],
['a[^bc]d', 'aed', 0, 'found', 'aed'],
['a[^bc]d', 'abd', 1],
['a[^-b]c', 'adc', 0, 'found', 'adc'],
['a[^-b]c', 'a-c', 1],
['a[^]b]c', 'a]c', 1],
['a[^]b]c', 'adc', 0, 'found', 'adc'],
['\\ba\\b', 'a-', 0, '"-"', '-'],
['\\ba\\b', '-a', 0, '"-"', '-'],
['\\ba\\b', '-a-', 0, '"-"', '-'],
['\\by\\b', 'xy', 1],
['\\by\\b', 'yz', 1],
['\\by\\b', 'xyz', 1],
['ab\\|cd', 'abc', 0, 'found', 'ab'],
['ab\\|cd', 'abcd', 0, 'found', 'ab'],
['\\(\\)ef', 'def', 0, 'found+"-"+g1', 'ef-'],
['$b', 'b', 1],
['a(b', 'a(b', 0, 'found+"-"+g1', 'a(b-None'],
['a(*b', 'ab', 0, 'found', 'ab'],
['a(*b', 'a((b', 0, 'found', 'a((b'],
['a\\\\b', 'a\\b', 0, 'found', 'a\\b'],
['\\(\\(a\\)\\)', 'abc', 0, 'found+"-"+g1+"-"+g2', 'a-a-a'],
['\\(a\\)b\\(c\\)', 'abc', 0, 'found+"-"+g1+"-"+g2', 'abc-a-c'],
['a+b+c', 'aabbabc', 0, 'found', 'abc'],
['\\(a+\\|b\\)*', 'ab', 0, 'found+"-"+g1', 'ab-b'],
['\\(a+\\|b\\)+', 'ab', 0, 'found+"-"+g1', 'ab-b'],
['\\(a+\\|b\\)?', 'ab', 0, 'found+"-"+g1', 'a-a'],
['\\)\\(', '-', 2],
['[^ab]*', 'cde', 0, 'found', 'cde'],
['abc', '', 1],
['a*', '', 0, 'found', ''],
['a\\|b\\|c\\|d\\|e', 'e', 0, 'found', 'e'],
['\\(a\\|b\\|c\\|d\\|e\\)f', 'ef', 0, 'found+"-"+g1', 'ef-e'],
['abcd*efg', 'abcdefg', 0, 'found', 'abcdefg'],
['ab*', 'xabyabbbz', 0, 'found', 'ab'],
['ab*', 'xayabbbz', 0, 'found', 'a'],
['\\(ab\\|cd\\)e', 'abcde', 0, 'found+"-"+g1', 'cde-cd'],
['[abhgefdc]ij', 'hij', 0, 'found', 'hij'],
['^\\(ab\\|cd\\)e', 'abcde', 1, 'xg1y', 'xy'],
['\\(abc\\|\\)ef', 'abcdef', 0, 'found+"-"+g1', 'ef-'],
['\\(a\\|b\\)c*d', 'abcd', 0, 'found+"-"+g1', 'bcd-b'],
['\\(ab\\|ab*\\)bc', 'abc', 0, 'found+"-"+g1', 'abc-a'],
['a\\([bc]*\\)c*', 'abc', 0, 'found+"-"+g1', 'abc-bc'],
['a\\([bc]*\\)\\(c*d\\)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'],
['a\\([bc]+\\)\\(c*d\\)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'],
['a\\([bc]*\\)\\(c+d\\)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-b-cd'],
['a[bcd]*dcdcde', 'adcdcde', 0, 'found', 'adcdcde'],
['a[bcd]+dcdcde', 'adcdcde', 1],
['\\(ab\\|a\\)b*c', 'abc', 0, 'found+"-"+g1', 'abc-ab'],
['\\(\\(a\\)\\(b\\)c\\)\\(d\\)', 'abcd', 0, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d'],
['[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', 0, 'found', 'alpha'],
['^a\\(bc+\\|b[eh]\\)g\\|.h$', 'abh', 0, 'found+"-"+g1', 'bh-None'],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'effgz', 0, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'ij', 0, 'found+"-"+g1+"-"+g2', 'ij-ij-j'],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'effg', 1],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'bcdd', 1],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'reffgz', 0, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'],
['\\(\\(\\(\\(\\(\\(\\(\\(\\(a\\)\\)\\)\\)\\)\\)\\)\\)\\)', 'a', 0, 'found', 'a'],
['multiple words of text', 'uh-uh', 1],
['multiple words', 'multiple words, yeah', 0, 'found', 'multiple words'],
['\\(.*\\)c\\(.*\\)', 'abcde', 0, 'found+"-"+g1+"-"+g2', 'abcde-ab-de'],
['(\\(.*\\), \\(.*\\))', '(a, b)', 0, 'g2+"-"+g1', 'b-a'],
['[k]', 'ab', 1],
['a[-]?c', 'ac', 0, 'found', 'ac'],
['\\(abc\\)\\1', 'abcabc', 0, 'g1', 'abc'],
['\\([a-c]*\\)\\1', 'abcabc', 0, 'g1', 'abc'],
['^\\(.+\\)?B', 'AB', 0, 'g1', 'A'],
['\\(a+\\).\\1$', 'aaaaa', 0, 'found+"-"+g1', 'aaaaa-aa'],
['^\\(a+\\).\\1$', 'aaaa', 1],
['\\(abc\\)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc'],
['\\([a-c]+\\)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc'],
['\\(a\\)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a'],
['\\(a+\\)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a'],
['\\(a+\\)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a'],
['\\(a\\).+\\1', 'aba', 0, 'found+"-"+g1', 'aba-a'],
['\\(a\\)ba*\\1', 'aba', 0, 'found+"-"+g1', 'aba-a'],
['\\(aa\\|a\\)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a'],
['\\(a\\|aa\\)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a'],
['\\(a+\\)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a'],
['\\([abc]*\\)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc'],
['\\(a\\)\\(b\\)c\\|ab', 'ab', 0, 'found+"-"+g1+"-"+g2', 'ab-None-None'],
['\\(a\\)+x', 'aaax', 0, 'found+"-"+g1', 'aaax-a'],
['\\([ac]\\)+x', 'aacx', 0, 'found+"-"+g1', 'aacx-c'],
['\\([^/]*/\\)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', 0, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/'],
['\\([^.]*\\)\\.\\([^:]*\\):[T ]+\\(.*\\)', 'track1.title:TBlah blah blah', 0, 'found+"-"+g1+"-"+g2+"-"+g3', 'track1.title:TBlah blah blah-track1-title-Blah blah blah'],
['\\([^N]*N\\)+', 'abNNxyzN', 0, 'found+"-"+g1', 'abNNxyzN-xyzN'],
['\\([^N]*N\\)+', 'abNNxyz', 0, 'found+"-"+g1', 'abNN-N'],
['\\([abc]*\\)x', 'abcx', 0, 'found+"-"+g1', 'abcx-abc'],
['\\([abc]*\\)x', 'abc', 1],
['\\([xyz]*\\)x', 'abcx', 0, 'found+"-"+g1', 'x-'],
['\\(a\\)+b\\|aac', 'aac', 0, 'found+"-"+g1', 'aac-None'],
['\\<a', 'a', 0, 'found', 'a'],
['\\<a', '!', 1],
['a\\<b', 'ab', 1],
['a\\>', 'ab', 1],
['a\\>', 'a!', 0, 'found', 'a'],
['a\\>', 'a', 0, 'found', 'a'],
]
 
 
# test suite for match
match_regex_tests=[
['abc', 'abc', 0, 'found', 'abc'],
['abc', 'xbc', 1],
['abc', 'axc', 1],
['abc', 'abx', 1],
['abc', 'xabcy', 1],
['abc', 'ababc', 1],
['ab*c', 'abc', 0, 'found', 'abc'],
['ab*bc', 'abc', 0, 'found', 'abc'],
['ab*bc', 'abbc', 0, 'found', 'abbc'],
['ab*bc', 'abbbbc', 0, 'found', 'abbbbc'],
['ab+bc', 'abbc', 0, 'found', 'abbc'],
['ab+bc', 'abc', 1],
['ab+bc', 'abq', 1],
['ab+bc', 'abbbbc', 0, 'found', 'abbbbc'],
['ab?bc', 'abbc', 0, 'found', 'abbc'],
['ab?bc', 'abc', 0, 'found', 'abc'],
['ab?bc', 'abbbbc', 1],
['ab?c', 'abc', 0, 'found', 'abc'],
['^abc$', 'abc', 0, 'found', 'abc'],
['^abc$', 'abcc', 1],
['^abc', 'abcc', 0, 'found', 'abc'],
['^abc$', 'aabc', 1],
['abc$', 'aabc', 1],
['^', 'abc', 0, 'found+"-"', '-'],
['$', 'abc', 1],
['a.c', 'abc', 0, 'found', 'abc'],
['a.c', 'axc', 0, 'found', 'axc'],
['a.*c', 'axyzc', 0, 'found', 'axyzc'],
['a.*c', 'axyzd', 1],
['a[bc]d', 'abc', 1],
['a[bc]d', 'abd', 0, 'found', 'abd'],
['a[b-d]e', 'abd', 1],
['a[b-d]e', 'ace', 0, 'found', 'ace'],
['a[b-d]', 'aac', 1],
['a[-b]', 'a-', 0, 'found', 'a-'],
['a[b-]', 'a-', 0, 'found', 'a-'],
['a[]b', '-', 2],
['a[', '-', 2],
['a\\', '-', 2],
['abc\\)', '-', 2],
['\\(abc', '-', 2],
['a]', 'a]', 0, 'found', 'a]'],
['a[]]b', 'a]b', 0, 'found', 'a]b'],
['a[^bc]d', 'aed', 0, 'found', 'aed'],
['a[^bc]d', 'abd', 1],
['a[^-b]c', 'adc', 0, 'found', 'adc'],
['a[^-b]c', 'a-c', 1],
['a[^]b]c', 'a]c', 1],
['a[^]b]c', 'adc', 0, 'found', 'adc'],
['\\ba\\b', 'a-', 0, '"-"', '-'],
['\\ba\\b', '-a', 1],
['\\ba\\b', '-a-', 1],
['\\by\\b', 'xy', 1],
['\\by\\b', 'yz', 1],
['\\by\\b', 'xyz', 1],
['ab\\|cd', 'abc', 0, 'found', 'ab'],
['ab\\|cd', 'abcd', 0, 'found', 'ab'],
['\\(\\)ef', 'def', 1],
['$b', 'b', 1],
['a(b', 'a(b', 0, 'found+"-"+g1', 'a(b-None'],
['a(*b', 'ab', 0, 'found', 'ab'],
['a(*b', 'a((b', 0, 'found', 'a((b'],
['a\\\\b', 'a\\b', 0, 'found', 'a\\b'],
['\\(\\(a\\)\\)', 'abc', 0, 'found+"-"+g1+"-"+g2', 'a-a-a'],
['\\(a\\)b\\(c\\)', 'abc', 0, 'found+"-"+g1+"-"+g2', 'abc-a-c'],
['a+b+c', 'aabbabc', 1],
['\\(a+\\|b\\)*', 'ab', 0, 'found+"-"+g1', 'ab-b'],
['\\(a+\\|b\\)+', 'ab', 0, 'found+"-"+g1', 'ab-b'],
['\\(a+\\|b\\)?', 'ab', 0, 'found+"-"+g1', 'a-a'],
['\\)\\(', '-', 2],
['[^ab]*', 'cde', 0, 'found', 'cde'],
['abc', '', 1],
['a*', '', 0, 'found', ''],
['a\\|b\\|c\\|d\\|e', 'e', 0, 'found', 'e'],
['\\(a\\|b\\|c\\|d\\|e\\)f', 'ef', 0, 'found+"-"+g1', 'ef-e'],
['abcd*efg', 'abcdefg', 0, 'found', 'abcdefg'],
['ab*', 'xabyabbbz', 1],
['ab*', 'xayabbbz', 1],
['\\(ab\\|cd\\)e', 'abcde', 1],
['[abhgefdc]ij', 'hij', 0, 'found', 'hij'],
['^\\(ab\\|cd\\)e', 'abcde', 1, 'xg1y', 'xy'],
['\\(abc\\|\\)ef', 'abcdef', 1],
['\\(a\\|b\\)c*d', 'abcd', 1],
['\\(ab\\|ab*\\)bc', 'abc', 0, 'found+"-"+g1', 'abc-a'],
['a\\([bc]*\\)c*', 'abc', 0, 'found+"-"+g1', 'abc-bc'],
['a\\([bc]*\\)\\(c*d\\)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'],
['a\\([bc]+\\)\\(c*d\\)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'],
['a\\([bc]*\\)\\(c+d\\)', 'abcd', 0, 'found+"-"+g1+"-"+g2', 'abcd-b-cd'],
['a[bcd]*dcdcde', 'adcdcde', 0, 'found', 'adcdcde'],
['a[bcd]+dcdcde', 'adcdcde', 1],
['\\(ab\\|a\\)b*c', 'abc', 0, 'found+"-"+g1', 'abc-ab'],
['\\(\\(a\\)\\(b\\)c\\)\\(d\\)', 'abcd', 0, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d'],
['[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', 0, 'found', 'alpha'],
['^a\\(bc+\\|b[eh]\\)g\\|.h$', 'abh', 1],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'effgz', 0, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'ij', 0, 'found+"-"+g1+"-"+g2', 'ij-ij-j'],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'effg', 1],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'bcdd', 1],
['\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'reffgz', 1],
['\\(\\(\\(\\(\\(\\(\\(\\(\\(a\\)\\)\\)\\)\\)\\)\\)\\)\\)', 'a', 0, 'found', 'a'],
['multiple words of text', 'uh-uh', 1],
['multiple words', 'multiple words, yeah', 0, 'found', 'multiple words'],
['\\(.*\\)c\\(.*\\)', 'abcde', 0, 'found+"-"+g1+"-"+g2', 'abcde-ab-de'],
['(\\(.*\\), \\(.*\\))', '(a, b)', 0, 'g2+"-"+g1', 'b-a'],
['[k]', 'ab', 1],
['a[-]?c', 'ac', 0, 'found', 'ac'],
['\\(abc\\)\\1', 'abcabc', 0, 'g1', 'abc'],
['\\([a-c]*\\)\\1', 'abcabc', 0, 'g1', 'abc'],
['^\\(.+\\)?B', 'AB', 0, 'g1', 'A'],
['\\(a+\\).\\1$', 'aaaaa', 0, 'found+"-"+g1', 'aaaaa-aa'],
['^\\(a+\\).\\1$', 'aaaa', 1],
['\\(abc\\)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc'],
['\\([a-c]+\\)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc'],
['\\(a\\)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a'],
['\\(a+\\)\\1', 'aa', 0, 'found+"-"+g1', 'aa-a'],
['\\(a+\\)+\\1', 'aa', 0, 'found+"-"+g1', 'aa-a'],
['\\(a\\).+\\1', 'aba', 0, 'found+"-"+g1', 'aba-a'],
['\\(a\\)ba*\\1', 'aba', 0, 'found+"-"+g1', 'aba-a'],
['\\(aa\\|a\\)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a'],
['\\(a\\|aa\\)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a'],
['\\(a+\\)a\\1$', 'aaa', 0, 'found+"-"+g1', 'aaa-a'],
['\\([abc]*\\)\\1', 'abcabc', 0, 'found+"-"+g1', 'abcabc-abc'],
['\\(a\\)\\(b\\)c\\|ab', 'ab', 0, 'found+"-"+g1+"-"+g2', 'ab-None-None'],
['\\(a\\)+x', 'aaax', 0, 'found+"-"+g1', 'aaax-a'],
['\\([ac]\\)+x', 'aacx', 0, 'found+"-"+g1', 'aacx-c'],
['\\([^/]*/\\)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', 0, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/'],
['\\([^.]*\\)\\.\\([^:]*\\):[T ]+\\(.*\\)', 'track1.title:TBlah blah blah', 0, 'found+"-"+g1+"-"+g2+"-"+g3', 'track1.title:TBlah blah blah-track1-title-Blah blah blah'],
['\\([^N]*N\\)+', 'abNNxyzN', 0, 'found+"-"+g1', 'abNNxyzN-xyzN'],
['\\([^N]*N\\)+', 'abNNxyz', 0, 'found+"-"+g1', 'abNN-N'],
['\\([abc]*\\)x', 'abcx', 0, 'found+"-"+g1', 'abcx-abc'],
['\\([abc]*\\)x', 'abc', 1],
['\\([xyz]*\\)x', 'abcx', 1],
['\\(a\\)+b\\|aac', 'aac', 0, 'found+"-"+g1', 'aac-None'],
['\\<a', 'a', 0, 'found', 'a'],
['\\<a', '!', 1],
['a\\<b', 'ab', 1],
['a\\>', 'ab', 1],
['a\\>', 'a!', 0, 'found', 'a'],
['a\\>', 'a', 0, 'found', 'a'],
]
 
# test suite for split()
# element 0: pattern
# 1: string to split
# 3: compile result
# 4: maxsplit
# 5: splitted fields list
split_regex_tests = [
["[ |,]", "with you, nothing, and me", 0, 0, ["with","you","nothing","and","me"]],
["[ |,]", "with you, nothing, and me", 0, 1, ["with", "you, nothing, and me"]],
["\\ ", "send email to apply", 0, 0, ["send", "email", "to", "apply"]],
["\\ ", "send email to apply", 0, 2, ["send", "email", "to apply"]],
["[+ | -]", "+86-028-83201034", 0, 0, ["86", "028", "83201034"]],
["[+ | -]", "+86-028-83201034", 0, 1, ["86", "028-83201034"]],
["[*|#]", "slide show", 0, 0, ["slide show"]],
["(", "whats ever", 0, 1, ["whats ever"]],
["@#!~$%^&*()<>\n", "who knows", 0, 1, ["who knows"]],
]
 
# test suite for findall()
# element 0: pattern
# 1: string to match
# 3: compile result
# 4: starting position
# 5: grouped fields list
 
# reobj.find()
findall_regex_tests = [
["\\ ", "send email to apply", 0, 0, [" ", " ", " "]],
["\\ ", "send email to apply", 0, 5, [" ", " "]],
["[+ | -]", "+86-028-83201034", 0, 0, ["+", "-", "-"]],
["[+ | -]", "+86-028-83201034", 0, 1, ["-", "-"]],
["sl.*e\\|#", "slide show at Room #3", 0, 0, ["slide", "#"]],
["w.+s\\|e.*r", "whats ever", 0, 0, ["whats", "ever"]],
["Euler\\|Gauss", "Both Euler and Gauss are great mathematicians", 0, 0, ["Euler", "Gauss"]],
]
 
# module re.findall()
mod_findall_regex_tests = [
["\\ ", "send email to apply", 0, 0, [" ", " ", " "]],
["\\ ", "send email to apply", 0, 0, [" ", " ", " "]],
["[+ | -]", "+86-028-83201034", 0, 0, ["+", "-", "-"]],
["[+ | -]", "+86-028-83201034", 0, 0, ["+", "-", "-"]],
["sl.*e\\|#", "slide show at Room #3", 0, 0, ["slide", "#"]],
["w.+s\\|e.*r", "whats ever", 0, 0, ["whats", "ever"]],
["Euler\\|Gauss", "Both Euler and Gauss are great mathematicians", 0, 0, ["Euler", "Gauss"]],
]
 
# test for match object's groups() method
# element 0: pattern
# 1: string
# 2: compile result
# 3: matched fields, for groups()
# 4: group index, valid when > 0, for start(), end(), and span()
# 5: pattern's starting index in string, for start() and span()
# 6: pattern's ending index in string, for end() and span
matobj_groups_regex_tests = [
["\\(abc\\(.*xyz\\)\\(.*31415926\\)\\)", "where is abc and flurry xyz, which is pi 31415926, derived from ms", 0, ["abc and flurry xyz, which is pi 31415926"," and flurry xyz",", which is pi 31415926"], 2, 12, 27],
 
["[a\\|b]\\(.+\\)shoe\\([t]+\\)d", "bbbshoetttdxrznmlkjp", 0, ["bb", "ttt"], 1, 1, 3],
 
["abcdef", "xyah2oewoyqe030uabcdefwhalsdewnkhgiohyczb", 0, [], -1, 0, 0],
]
 
/programs/develop/tinypy/modules/math/init.c
0,0 → 1,66
#include "math.c"
#include "../../tinypy/tp.h"
 
/*
* init math module, namely, set its dictionary
*/
void math_init(TP)
{
/*
* new a module dict for math
*/
tp_obj math_mod = tp_dict(tp);
 
/*
* initialize pi and e
*/
math_pi = tp_number(M_PI);
math_e = tp_number(M_E);
 
/*
* bind math functions to math module
*/
tp_set(tp, math_mod, tp_string("pi"), math_pi);
tp_set(tp, math_mod, tp_string("e"), math_e);
tp_set(tp, math_mod, tp_string("acos"), tp_fnc(tp, math_acos));
tp_set(tp, math_mod, tp_string("asin"), tp_fnc(tp, math_asin));
tp_set(tp, math_mod, tp_string("atan"), tp_fnc(tp, math_atan));
tp_set(tp, math_mod, tp_string("atan2"), tp_fnc(tp, math_atan2));
tp_set(tp, math_mod, tp_string("ceil"), tp_fnc(tp, math_ceil));
tp_set(tp, math_mod, tp_string("cos"), tp_fnc(tp, math_cos));
tp_set(tp, math_mod, tp_string("cosh"), tp_fnc(tp, math_cosh));
tp_set(tp, math_mod, tp_string("degrees"), tp_fnc(tp, math_degrees));
tp_set(tp, math_mod, tp_string("exp"), tp_fnc(tp, math_exp));
tp_set(tp, math_mod, tp_string("fabs"), tp_fnc(tp, math_fabs));
tp_set(tp, math_mod, tp_string("floor"), tp_fnc(tp, math_floor));
tp_set(tp, math_mod, tp_string("fmod"), tp_fnc(tp, math_fmod));
tp_set(tp, math_mod, tp_string("frexp"), tp_fnc(tp, math_frexp));
tp_set(tp, math_mod, tp_string("hypot"), tp_fnc(tp, math_hypot));
tp_set(tp, math_mod, tp_string("ldexp"), tp_fnc(tp, math_ldexp));
tp_set(tp, math_mod, tp_string("log"), tp_fnc(tp, math_log));
tp_set(tp, math_mod, tp_string("log10"), tp_fnc(tp, math_log10));
tp_set(tp, math_mod, tp_string("modf"), tp_fnc(tp, math_modf));
tp_set(tp, math_mod, tp_string("pow"), tp_fnc(tp, math_pow));
tp_set(tp, math_mod, tp_string("radians"), tp_fnc(tp, math_radians));
tp_set(tp, math_mod, tp_string("sin"), tp_fnc(tp, math_sin));
tp_set(tp, math_mod, tp_string("sinh"), tp_fnc(tp, math_sinh));
tp_set(tp, math_mod, tp_string("sqrt"), tp_fnc(tp, math_sqrt));
tp_set(tp, math_mod, tp_string("tan"), tp_fnc(tp, math_tan));
tp_set(tp, math_mod, tp_string("tanh"), tp_fnc(tp, math_tanh));
 
/*
* bind special attributes to math module
*/
tp_set(tp, math_mod, tp_string("__doc__"),
tp_string(
"This module is always available. It provides access to the\n"
"mathematical functions defined by the C standard."));
tp_set(tp, math_mod, tp_string("__name__"), tp_string("math"));
tp_set(tp, math_mod, tp_string("__file__"), tp_string(__FILE__));
 
/*
* bind to tiny modules[]
*/
tp_set(tp, tp->modules, tp_string("math"), math_mod);
}
 
/programs/develop/tinypy/modules/math/math.c
0,0 → 1,365
#include <math.h>
#ifndef M_E
#define M_E 2.7182818284590452354
#endif
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
 
#include <errno.h>
 
/*
* template for tinypy math functions
* with one parameter.
*
* @cfunc is the coresponding function name in C
* math library.
*/
#define TP_MATH_FUNC1(cfunc) \
static tp_obj math_##cfunc(TP) { \
double x = TP_NUM(); \
double r = 0.0; \
\
errno = 0; \
r = cfunc(x); \
if (errno == EDOM || errno == ERANGE) { \
tp_raise(tp_None, "%s(x): x=%f, " \
"out of range", __func__, x); \
} \
\
return (tp_number(r)); \
}
 
/*
* template for tinypy math functions
* with two parameters.
*
* @cfunc is the coresponding function name in C
* math library.
*/
#define TP_MATH_FUNC2(cfunc) \
static tp_obj math_##cfunc(TP) { \
double x = TP_NUM(); \
double y = TP_NUM(); \
double r = 0.0; \
\
errno = 0; \
r = cfunc(x, y); \
if (errno == EDOM || errno == ERANGE) { \
tp_raise(tp_None, "%s(x, y): x=%f,y=%f " \
"out of range", __func__, x, y);\
} \
\
return (tp_number(r)); \
}
 
 
/*
* PI definition: 3.1415926535897931
*/
static tp_obj math_pi;
 
/*
* E definition: 2.7182818284590451
*/
static tp_obj math_e;
 
/*
* acos(x)
*
* return arc cosine of x, return value is measured in radians.
* if x falls out -1 to 1, raise out-of-range exception.
*/
TP_MATH_FUNC1(acos)
 
/*
* asin(x)
*
* return arc sine of x, measured in radians, actually [-PI/2, PI/2]
* if x falls out of -1 to 1, raise out-of-range exception
*/
TP_MATH_FUNC1(asin)
 
/*
* atan(x)
*
* return arc tangent of x, measured in radians,
*/
TP_MATH_FUNC1(atan)
 
/*
* atan2(x, y)
*
* return arc tangent of x/y, measured in radians.
* unlike atan(x/y), both the signs of x and y
* are considered to determine the quaderant of
* the result.
*/
TP_MATH_FUNC2(atan2)
 
/*
* ceil(x)
*
* return the ceiling of x, i.e, the smallest
* integer >= x.
*/
TP_MATH_FUNC1(ceil)
 
/*
* cos(x)
*
* return cosine of x. x is measured in radians.
*/
TP_MATH_FUNC1(cos)
 
/*
* cosh(x)
*
* return hyperbolic cosine of x.
*/
TP_MATH_FUNC1(cosh)
 
/*
* degrees(x)
*
* converts angle x from radians to degrees.
* NOTE: this function is introduced by python,
* so we cannot wrap it directly in TP_MATH_FUNC1(),
* here the solution is defining a new
* C function - degrees().
*/
static const double degToRad =
3.141592653589793238462643383 / 180.0;
static double degrees(double x)
{
return (x / degToRad);
}
 
TP_MATH_FUNC1(degrees)
 
/*
* exp(x)
*
* return the value e raised to power of x.
* e is the base of natural logarithms.
*/
TP_MATH_FUNC1(exp)
 
/*
* fabs(x)
*
* return the absolute value of x.
*/
TP_MATH_FUNC1(fabs)
 
/*
* floor(x)
*
* return the floor of x, i.e, the largest integer <= x
*/
TP_MATH_FUNC1(floor)
 
/*
* fmod(x, y)
*
* return the remainder of dividing x by y. that is,
* return x - n * y, where n is the quotient of x/y.
* NOTE: this function relies on the underlying platform.
*/
TP_MATH_FUNC2(fmod)
 
/*
* frexp(x)
*
* return a pair (r, y), which satisfies:
* x = r * (2 ** y), and r is normalized fraction
* which is laid between 1/2 <= abs(r) < 1.
* if x = 0, the (r, y) = (0, 0).
*/
static tp_obj math_frexp(TP) {
double x = TP_NUM();
int y = 0;
double r = 0.0;
tp_obj rList = tp_list(tp);
 
errno = 0;
r = frexp(x, &y);
if (errno == EDOM || errno == ERANGE) {
tp_raise(tp_None, "%s(x): x=%f, "
"out of range", __func__, x);
}
 
_tp_list_append(tp, rList.list.val, tp_number(r));
_tp_list_append(tp, rList.list.val, tp_number((tp_num)y));
return (rList);
}
 
 
/*
* hypot(x, y)
*
* return Euclidean distance, namely,
* sqrt(x*x + y*y)
*/
TP_MATH_FUNC2(hypot)
 
 
/*
* ldexp(x, y)
*
* return the result of multiplying x by 2
* raised to y.
*/
TP_MATH_FUNC2(ldexp)
 
/*
* log(x, [base])
*
* return logarithm of x to given base. If base is
* not given, return the natural logarithm of x.
* Note: common logarithm(log10) is used to compute
* the denominator and numerator. based on fomula:
* log(x, base) = log10(x) / log10(base).
*/
static tp_obj math_log(TP) {
double x = TP_NUM();
tp_obj b = TP_DEFAULT(tp_None);
double y = 0.0;
double den = 0.0; /* denominator */
double num = 0.0; /* numinator */
double r = 0.0; /* result */
 
if (b.type == TP_NONE)
y = M_E;
else if (b.type == TP_NUMBER)
y = (double)b.number.val;
else
tp_raise(tp_None, "%s(x, [base]): base invalid", __func__);
 
errno = 0;
num = log10(x);
if (errno == EDOM || errno == ERANGE)
goto excep;
 
errno = 0;
den = log10(y);
if (errno == EDOM || errno == ERANGE)
goto excep;
 
r = num / den;
 
return (tp_number(r));
 
excep:
tp_raise(tp_None, "%s(x, y): x=%f,y=%f "
"out of range", __func__, x, y);
}
 
/*
* log10(x)
*
* return 10-based logarithm of x.
*/
TP_MATH_FUNC1(log10)
 
/*
* modf(x)
*
* return a pair (r, y). r is the integral part of
* x and y is the fractional part of x, both holds
* the same sign as x.
*/
static tp_obj math_modf(TP) {
double x = TP_NUM();
double y = 0.0;
double r = 0.0;
tp_obj rList = tp_list(tp);
 
errno = 0;
r = modf(x, &y);
if (errno == EDOM || errno == ERANGE) {
tp_raise(tp_None, "%s(x): x=%f, "
"out of range", __func__, x);
}
 
_tp_list_append(tp, rList.list.val, tp_number(r));
_tp_list_append(tp, rList.list.val, tp_number(y));
return (rList);
}
 
/*
* pow(x, y)
*
* return value of x raised to y. equivalence of x ** y.
* NOTE: conventionally, tp_pow() is the implementation
* of builtin function pow(); whilst, math_pow() is an
* alternative in math module.
*/
static tp_obj math_pow(TP) {
double x = TP_NUM();
double y = TP_NUM();
double r = 0.0;
 
errno = 0;
r = pow(x, y);
if (errno == EDOM || errno == ERANGE) {
tp_raise(tp_None, "%s(x, y): x=%f,y=%f "
"out of range", __func__, x, y);
}
 
return (tp_number(r));
}
 
 
/*
* radians(x)
*
* converts angle x from degrees to radians.
* NOTE: this function is introduced by python,
* adopt same solution as degrees(x).
*/
static double radians(double x)
{
return (x * degToRad);
}
 
TP_MATH_FUNC1(radians)
 
/*
* sin(x)
*
* return sine of x, x is measured in radians.
*/
TP_MATH_FUNC1(sin)
 
/*
* sinh(x)
*
* return hyperbolic sine of x.
* mathematically, sinh(x) = (exp(x) - exp(-x)) / 2.
*/
TP_MATH_FUNC1(sinh)
 
/*
* sqrt(x)
*
* return square root of x.
* if x is negtive, raise out-of-range exception.
*/
TP_MATH_FUNC1(sqrt)
 
/*
* tan(x)
*
* return tangent of x, x is measured in radians.
*/
TP_MATH_FUNC1(tan)
 
/*
* tanh(x)
*
* return hyperbolic tangent of x.
* mathematically, tanh(x) = sinh(x) / cosh(x).
*/
TP_MATH_FUNC1(tanh)
 
/programs/develop/tinypy/modules/math/tests.py
0,0 → 1,176
### This file is grabbed from Python's Lib/test/test_math.py
###---------------------------------------------------------
# Python test set -- math module
# XXXX Should not do tests around zero only
 
eps = 0.00001
#print('math module, testing with eps ', eps)
import math
 
def testit(name, value, expected):
if abs(value-expected) > eps:
msg = name + " returned " + str(value) + " expected " + str(expected)
raise msg
 
#print 'constants'
testit('pi', math.pi, 3.1415926)
testit('e', math.e, 2.7182818)
 
#print 'acos'
testit('acos(-1)', math.acos(-1), math.pi)
testit('acos(0)', math.acos(0), math.pi/2)
testit('acos(1)', math.acos(1), 0)
 
#print 'asin'
testit('asin(-1)', math.asin(-1), -math.pi/2)
testit('asin(0)', math.asin(0), 0)
testit('asin(1)', math.asin(1), math.pi/2)
 
#print 'atan'
testit('atan(-1)', math.atan(-1), -math.pi/4)
testit('atan(0)', math.atan(0), 0)
testit('atan(1)', math.atan(1), math.pi/4)
 
#print 'atan2'
testit('atan2(-1, 0)', math.atan2(-1, 0), -math.pi/2)
testit('atan2(-1, 1)', math.atan2(-1, 1), -math.pi/4)
testit('atan2(0, 1)', math.atan2(0, 1), 0)
testit('atan2(1, 1)', math.atan2(1, 1), math.pi/4)
testit('atan2(1, 0)', math.atan2(1, 0), math.pi/2)
 
#print 'ceil'
testit('ceil(0.5)', math.ceil(0.5), 1)
testit('ceil(1.0)', math.ceil(1.0), 1)
testit('ceil(1.5)', math.ceil(1.5), 2)
testit('ceil(-0.5)', math.ceil(-0.5), 0)
testit('ceil(-1.0)', math.ceil(-1.0), -1)
testit('ceil(-1.5)', math.ceil(-1.5), -1)
 
#print 'cos'
testit('cos(-pi/2)', math.cos(-math.pi/2), 0)
testit('cos(0)', math.cos(0), 1)
testit('cos(pi/2)', math.cos(math.pi/2), 0)
testit('cos(pi)', math.cos(math.pi), -1)
 
#print 'cosh'
testit('cosh(0)', math.cosh(0), 1)
testit('cosh(2)-2*(cosh(1)**2)', math.cosh(2)-2*(math.cosh(1)**2), -1) # Thanks to Lambert
 
#print 'degrees'
testit('degrees(pi)', math.degrees(math.pi), 180.0)
testit('degrees(pi/2)', math.degrees(math.pi/2), 90.0)
testit('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0)
 
#print 'exp'
testit('exp(-1)', math.exp(-1), 1/math.e)
testit('exp(0)', math.exp(0), 1)
testit('exp(1)', math.exp(1), math.e)
 
#print 'fabs'
testit('fabs(-1)', math.fabs(-1), 1)
testit('fabs(0)', math.fabs(0), 0)
testit('fabs(1)', math.fabs(1), 1)
 
#print 'floor'
testit('floor(0.5)', math.floor(0.5), 0)
testit('floor(1.0)', math.floor(1.0), 1)
testit('floor(1.5)', math.floor(1.5), 1)
testit('floor(-0.5)', math.floor(-0.5), -1)
testit('floor(-1.0)', math.floor(-1.0), -1)
testit('floor(-1.5)', math.floor(-1.5), -2)
 
#print 'fmod'
testit('fmod(10,1)', math.fmod(10,1), 0)
testit('fmod(10,0.5)', math.fmod(10,0.5), 0)
testit('fmod(10,1.5)', math.fmod(10,1.5), 1)
testit('fmod(-10,1)', math.fmod(-10,1), 0)
testit('fmod(-10,0.5)', math.fmod(-10,0.5), 0)
testit('fmod(-10,1.5)', math.fmod(-10,1.5), -1)
 
#print 'frexp'
def testfrexp(name, value, expected):
mant = value[0]
exp = value[1]
emant = expected[0]
eexp = expected[1]
if abs(mant-emant) > eps or exp != eexp:
raise '%s returned (%f, %f), expected (%f, %f)'%\
(name, mant, exp, emant,eexp)
 
testfrexp('frexp(-1)', math.frexp(-1), (-0.5, 1))
testfrexp('frexp(0)', math.frexp(0), (0, 0))
testfrexp('frexp(1)', math.frexp(1), (0.5, 1))
testfrexp('frexp(2)', math.frexp(2), (0.5, 2))
 
#print 'hypot'
testit('hypot(0,0)', math.hypot(0,0), 0)
testit('hypot(3,4)', math.hypot(3,4), 5)
 
#print 'ldexp'
testit('ldexp(0,1)', math.ldexp(0,1), 0)
testit('ldexp(1,1)', math.ldexp(1,1), 2)
testit('ldexp(1,-1)', math.ldexp(1,-1), 0.5)
testit('ldexp(-1,1)', math.ldexp(-1,1), -2)
 
#print 'log'
testit('log(1/e)', math.log(1/math.e), -1)
testit('log(1)', math.log(1), 0)
testit('log(e)', math.log(math.e), 1)
testit('log(32,2)', math.log(32,2), 5)
testit('log(10**40, 10)', math.log(10**40, 10), 40)
testit('log(10**40, 10**20)', math.log(10**40, 10**20), 2)
 
#print 'log10'
testit('log10(0.1)', math.log10(0.1), -1)
testit('log10(1)', math.log10(1), 0)
testit('log10(10)', math.log10(10), 1)
 
#print 'modf'
def testmodf(name, value, expected):
v1 = value[0]
v2 = value[1]
e1 = expected[0]
e2 = expected[1]
if abs(v1-e1) > eps or abs(v2-e2):
raise '%s returned (%f, %f), expected (%f, %f)'%\
(name, v1,v2, e1,e2)
 
testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0))
testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0))
 
#print 'pow'
testit('pow(0,1)', math.pow(0,1), 0)
testit('pow(1,0)', math.pow(1,0), 1)
testit('pow(2,1)', math.pow(2,1), 2)
testit('pow(2,-1)', math.pow(2,-1), 0.5)
 
#print 'radians'
testit('radians(180)', math.radians(180), math.pi)
testit('radians(90)', math.radians(90), math.pi/2)
testit('radians(-45)', math.radians(-45), -math.pi/4)
 
#print 'sin'
testit('sin(0)', math.sin(0), 0)
testit('sin(pi/2)', math.sin(math.pi/2), 1)
testit('sin(-pi/2)', math.sin(-math.pi/2), -1)
 
#print 'sinh'
testit('sinh(0)', math.sinh(0), 0)
testit('sinh(1)**2-cosh(1)**2', math.sinh(1)**2-math.cosh(1)**2, -1)
testit('sinh(1)+sinh(-1)', math.sinh(1)+math.sinh(-1), 0)
 
#print 'sqrt'
testit('sqrt(0)', math.sqrt(0), 0)
testit('sqrt(1)', math.sqrt(1), 1)
testit('sqrt(4)', math.sqrt(4), 2)
 
#print 'tan'
testit('tan(0)', math.tan(0), 0)
testit('tan(pi/4)', math.tan(math.pi/4), 1)
testit('tan(-pi/4)', math.tan(-math.pi/4), -1)
 
#print 'tanh'
testit('tanh(0)', math.tanh(0), 0)
testit('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0)
 
#print("OK: math module test pass")
/programs/develop/tinypy/modules/pygame/init.c
0,0 → 1,182
#include "SDL.h"
 
/* utility functions */
Uint32 pygame_list_to_color(TP,tp_obj clr,SDL_Surface *s) {
int r,g,b;
r = tp_get(tp,clr,tp_number(0)).number.val;
g = tp_get(tp,clr,tp_number(1)).number.val;
b = tp_get(tp,clr,tp_number(2)).number.val;
return SDL_MapRGB(s->format,r,g,b);
}
 
/* surface */
 
#define PYGAME_TYPE_SURF 0x1001
 
void pygame_surf_free(TP,tp_obj d) {
if (d.data.magic != PYGAME_TYPE_SURF) { tp_raise(,"%s","not a surface"); }
SDL_FreeSurface((SDL_Surface*)d.data.val);
}
 
SDL_Surface *pygame_obj_to_surf(TP,tp_obj self) {
tp_obj d = tp_get(tp,self,tp_string("__surf"));
if (d.data.magic != PYGAME_TYPE_SURF) { tp_raise(0,"%s","not a surface"); }
return (SDL_Surface*)d.data.val;
}
 
 
tp_obj pygame_surface_set_at(TP) {
tp_obj self = TP_OBJ();
tp_obj pos = TP_TYPE(TP_LIST);
tp_obj clr = TP_TYPE(TP_LIST);
SDL_Rect r;
r.x = tp_get(tp,pos,tp_number(0)).number.val;
r.y = tp_get(tp,pos,tp_number(1)).number.val;
r.w = 1; r.h = 1;
SDL_Surface *s =pygame_obj_to_surf(tp,self);
Uint32 c = pygame_list_to_color(tp,clr,s);
SDL_FillRect(s, &r, c);
return tp_None;
}
 
 
tp_obj pygame_surf_to_obj(TP,SDL_Surface *s) {
tp_obj self = tp_dict(tp);
tp_obj d = tp_data(tp,PYGAME_TYPE_SURF,s);
d.data.info->free = pygame_surf_free;
 
tp_set(tp,self,tp_string("__surf"),d);
tp_set(tp,self,tp_string("set_at"),tp_method(tp,self,pygame_surface_set_at));
return self;
}
 
 
 
 
/* display module */
 
tp_obj pygame_display_set_mode(TP) {
tp_obj sz = TP_TYPE(TP_LIST);
int w = tp_get(tp,sz,tp_number(0)).number.val;
int h = tp_get(tp,sz,tp_number(1)).number.val;
SDL_Surface *s = SDL_SetVideoMode(w, h, 0, 0);
return pygame_surf_to_obj(tp,s);
}
 
tp_obj pygame_display_flip(TP) {
SDL_Flip(SDL_GetVideoSurface());
return tp_None;
}
 
SDL_Rect pygame_list_to_rect(TP,tp_obj o) {
SDL_Rect r;
r.x = tp_get(tp,o,tp_number(0)).number.val;
r.y = tp_get(tp,o,tp_number(1)).number.val;
r.w = tp_get(tp,o,tp_number(2)).number.val;
r.h = tp_get(tp,o,tp_number(3)).number.val;
return r;
}
 
tp_obj pygame_display_update(TP) {
SDL_Rect r = pygame_list_to_rect(tp,TP_TYPE(TP_LIST));
SDL_UpdateRects(SDL_GetVideoSurface(), 1, &r);
return tp_None;
}
 
/* event module */
tp_obj pygame_event_get(TP) {
SDL_Event e;
tp_obj r = tp_list(tp);
while (SDL_PollEvent(&e)) {
tp_obj d = tp_dict(tp);
tp_set(tp,d,tp_string("type"),tp_number(e.type));
switch (e.type) {
case SDL_KEYDOWN:
case SDL_KEYUP:
tp_set(tp,d,tp_string("key"),tp_number(e.key.keysym.sym));
tp_set(tp,d,tp_string("mod"),tp_number(e.key.keysym.mod));
break;
case SDL_MOUSEMOTION:
tp_set(tp,d,tp_string("pos"),tp_list_n(tp,2,(tp_obj[]){tp_number(e.motion.x),tp_number(e.motion.y)}));
tp_set(tp,d,tp_string("rel"),tp_list_n(tp,2,(tp_obj[]){tp_number(e.motion.xrel),tp_number(e.motion.yrel)}));
tp_set(tp,d,tp_string("state"),tp_number(e.motion.state));
break;
case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
tp_set(tp,d,tp_string("pos"),tp_list_n(tp,2,(tp_obj[]){tp_number(e.button.x),tp_number(e.button.y)}));
tp_set(tp,d,tp_string("button"),tp_number(e.button.button));
break;
}
tp_set(tp,r,tp_None,d);
}
return r;
}
 
/* mouse */
tp_obj pygame_mouse_get_pos(TP) {
int x,y;
SDL_GetMouseState(&x,&y);
tp_obj r = tp_list_n(tp,2,(tp_obj[]){tp_number(x),tp_number(y)});
return r;
}
 
/* time */
tp_obj pygame_time_get_ticks(TP) {
return tp_number(SDL_GetTicks());
}
 
/* pygame */
#define PYGAME_LOCALS(a,b) tp_set(tp,m,tp_string(a),tp_number(b));
 
tp_obj _pygame_init(TP) {
SDL_Init(SDL_INIT_VIDEO);
return tp_None;
}
 
 
void pygame_init(TP) {
tp_obj g,m;
g = tp_dict(tp);
tp_set(tp,tp->modules,tp_string("pygame"),g);
tp_set(tp,g,tp_string("init"),tp_fnc(tp,_pygame_init));
/* display */
m = tp_dict(tp); tp_set(tp,g,tp_string("display"),m);
tp_set(tp,m,tp_string("set_mode"),tp_fnc(tp,pygame_display_set_mode));
tp_set(tp,m,tp_string("flip"),tp_fnc(tp,pygame_display_flip));
tp_set(tp,m,tp_string("update"),tp_fnc(tp,pygame_display_update));
/* event */
m = tp_dict(tp); tp_set(tp,g,tp_string("event"),m);
tp_set(tp,m,tp_string("get"),tp_fnc(tp,pygame_event_get));
/* locals */
m = tp_dict(tp); tp_set(tp,g,tp_string("locals"),m);
PYGAME_LOCALS("QUIT",SDL_QUIT);
PYGAME_LOCALS("KEYDOWN",SDL_KEYDOWN);
PYGAME_LOCALS("KEYUP",SDL_KEYUP);
PYGAME_LOCALS("MOUSEBUTTONDOWN",SDL_MOUSEBUTTONDOWN);
PYGAME_LOCALS("MOUSEBUTTONUP",SDL_MOUSEBUTTONUP);
PYGAME_LOCALS("MOUSEMOTION",SDL_MOUSEMOTION);
PYGAME_LOCALS("K_UP",SDLK_UP);
PYGAME_LOCALS("K_DOWN",SDLK_DOWN);
PYGAME_LOCALS("K_LEFT",SDLK_LEFT);
PYGAME_LOCALS("K_RIGHT",SDLK_RIGHT);
PYGAME_LOCALS("K_ESCAPE",SDLK_ESCAPE);
PYGAME_LOCALS("K_SPACE",SDLK_SPACE);
PYGAME_LOCALS("K_RETURN",SDLK_RETURN);
/* mouse */
m = tp_dict(tp); tp_set(tp,g,tp_string("mouse"),m);
tp_set(tp,m,tp_string("get_pos"),tp_fnc(tp,pygame_mouse_get_pos));
/* time */
m = tp_dict(tp); tp_set(tp,g,tp_string("time"),m);
tp_set(tp,m,tp_string("get_ticks"),tp_fnc(tp,pygame_time_get_ticks));
 
}
 
/**/