From e57a323dc8293568fa4560e3361a9d797f07f913 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 7 Jul 2014 23:31:31 -0700 Subject: [PATCH] WIP. --- plugins/include/core.inc | 8 - plugins/include/functions.inc | 2 +- sourcepawn/compiler/sc.h | 2 + sourcepawn/compiler/sc1.c | 3 + sourcepawn/compiler/sc2.c | 2 +- sourcepawn/compiler/sc3.c | 233 ++++++++++--------- sourcepawn/compiler/sc5.scp | 413 +++++++++++++++++----------------- 7 files changed, 340 insertions(+), 323 deletions(-) diff --git a/plugins/include/core.inc b/plugins/include/core.inc index 446d8591..9b216493 100644 --- a/plugins/include/core.inc +++ b/plugins/include/core.inc @@ -48,14 +48,6 @@ struct PlVers String:time[] }; -/** - * Function helper values. - */ -enum Function -{ - INVALID_FUNCTION = -1, -}; - /** * Specifies what to do after a hook completes. */ diff --git a/plugins/include/functions.inc b/plugins/include/functions.inc index e030a044..344f3eb3 100644 --- a/plugins/include/functions.inc +++ b/plugins/include/functions.inc @@ -117,7 +117,7 @@ enum ExecType * @param plugin Handle of the plugin that contains the function. Pass INVALID_HANDLE to search in the calling plugin. * @param name Name of the function. - * @return Function id or INVALID_FUNCTION if not found. + * @return Function id or null if not found. * @error Invalid or corrupt plugin handle. */ native Function:GetFunctionByName(Handle:plugin, const String:name[]); diff --git a/sourcepawn/compiler/sc.h b/sourcepawn/compiler/sc.h index f9f6fce9..d4426084 100644 --- a/sourcepawn/compiler/sc.h +++ b/sourcepawn/compiler/sc.h @@ -405,6 +405,7 @@ enum { tFORWARD, tFUNCENUM, tFUNCTAG, + tFUNCTION, tGOTO, tIF, tINT, @@ -928,6 +929,7 @@ SC_VDECL int pc_tag_void; /* global void tag */ SC_VDECL int pc_tag_object; /* root object tag */ SC_VDECL int pc_tag_bool; /* global bool tag */ SC_VDECL int pc_tag_null_t; /* the null type */ +SC_VDECL int pc_tag_nullfunc_t; /* the null function type */ SC_VDECL int pc_anytag; /* global any tag */ SC_VDECL int glbstringread; /* last global string read */ SC_VDECL int sc_require_newdecls; /* only newdecls are allowed */ diff --git a/sourcepawn/compiler/sc1.c b/sourcepawn/compiler/sc1.c index f2931806..5a439463 100644 --- a/sourcepawn/compiler/sc1.c +++ b/sourcepawn/compiler/sc1.c @@ -80,6 +80,7 @@ int pc_tag_void = 0; int pc_tag_object = 0; int pc_tag_bool = 0; int pc_tag_null_t = 0; +int pc_tag_nullfunc_t = 0; static void resetglobals(void); static void initglobals(void); @@ -1351,10 +1352,12 @@ static void setconstants(void) pc_tag_object = pc_addtag_flags("object", FIXEDTAG|OBJECTTAG); pc_tag_bool = pc_addtag("bool"); pc_tag_null_t = pc_addtag_flags("null_t", FIXEDTAG|OBJECTTAG); + pc_tag_nullfunc_t = pc_addtag_flags("nullfunc_t", FIXEDTAG|OBJECTTAG); add_constant("true",1,sGLOBAL,1); /* boolean flags */ add_constant("false",0,sGLOBAL,1); add_constant("EOS",0,sGLOBAL,0); /* End Of String, or '\0' */ + add_constant("INVALID_FUNCTION", -1, sGLOBAL, pc_tag_nullfunc_t); #if PAWN_CELL_SIZE==16 add_constant("cellbits",16,sGLOBAL,0); #if defined _I16_MAX diff --git a/sourcepawn/compiler/sc2.c b/sourcepawn/compiler/sc2.c index 4ba0982c..ec41659d 100644 --- a/sourcepawn/compiler/sc2.c +++ b/sourcepawn/compiler/sc2.c @@ -1952,7 +1952,7 @@ char *sc_tokens[] = { "case", "cellsof", "char", "class", "const", "continue", "decl", "default", "defined", "delete", "do", "else", "*end", "enum", "exit", - "for", "forward", "funcenum", "functag", + "for", "forward", "funcenum", "functag", "function", "goto", "if", "int", "methodmap", diff --git a/sourcepawn/compiler/sc3.c b/sourcepawn/compiler/sc3.c index 9c6a7d2a..07dfbd71 100644 --- a/sourcepawn/compiler/sc3.c +++ b/sourcepawn/compiler/sc3.c @@ -357,6 +357,16 @@ static int matchobjecttags(int formaltag, int actualtag, int flags) if ((formaltag & OBJECTTAG) && !(actualtag & OBJECTTAG)) return obj_typeerror(132, formaltag, actualtag); + if (actualtag == pc_tag_nullfunc_t) { + // All functions are nullable. We use a separate constant for backward + // compatibility; plugins and extensions check -1, not 0. + if (formaltag & FUNCTAG) + return TRUE; + + error(150, pc_tagname(formaltag)); + return FALSE; + } + if (actualtag == pc_tag_null_t) { // All objects are nullable. if (formaltag & OBJECTTAG) @@ -403,126 +413,116 @@ static int matchreturntag(functag_t *t, symbol *sym) static int matchfunctags(int formaltag, int actualtag) { - if (actualtag == pc_functag || (formaltag == pc_functag && actualtag & FUNCTAG)) + if (formaltag == pc_functag && (actualtag & FUNCTAG)) return TRUE; - if (actualtag & FUNCTAG) { - constvalue *v = find_tag_byval(actualtag); - int index; - short usage = uPUBLIC; - symbol *sym, *found = NULL; - funcenum_t *e; - functag_t *t; + if (actualtag == pc_tag_nullfunc_t) + return TRUE; - if (strncmp(v->name, "$Func", 5) != 0) - return FALSE; + if (!(actualtag & FUNCTAG)) + return FALSE; - /* Now we have to go about looking up each function in this enum. WHICH IS IT. */ - e = funcenums_find_byval(formaltag); - if (!e) - return FALSE; + constvalue *v = find_tag_byval(actualtag); + int index; + short usage = uPUBLIC; + symbol *sym, *found = NULL; + funcenum_t *e; + functag_t *t; - assert(v->name[5] == '@' || v->name[5] == '!'); + if (strncmp(v->name, "$Func", 5) != 0) + return FALSE; - /* Deduce which function type this is */ - if (v->name[5] == '@') - { - usage = uPUBLIC; - } else if (v->name[5] == '!') { - usage = uSTOCK; - } + /* Now we have to go about looking up each function in this enum. WHICH IS IT. */ + e = funcenums_find_byval(formaltag); + if (!e) + return FALSE; - index = atoi(&v->name[6]); + assert(v->name[5] == '@' || v->name[5] == '!'); - assert(index >= 0); + /* Deduce which function type this is */ + if (v->name[5] == '@') + { + usage = uPUBLIC; + } else if (v->name[5] == '!') { + usage = uSTOCK; + } - /* Find the function, either by public idx or code addr */ - if (usage == uPUBLIC) { - for (sym=glbtab.next; sym!=NULL; sym=sym->next) { - if (sym->ident==iFUNCTN && (sym->usage & uPUBLIC)!=0 && (sym->vclass == sGLOBAL)) { - if (index-- == 0) { - found = sym; - break; - } - } - } - } else if (usage == uSTOCK) { - for (sym=glbtab.next; sym!=NULL; sym=sym->next) { - if (sym->ident==iFUNCTN && (sym->vclass == sGLOBAL)) { - if (sym->codeaddr == index) { - found = sym; - break; - } + index = atoi(&v->name[6]); + + assert(index >= 0); + + /* Find the function, either by public idx or code addr */ + if (usage == uPUBLIC) { + for (sym=glbtab.next; sym!=NULL; sym=sym->next) { + if (sym->ident==iFUNCTN && (sym->usage & uPUBLIC)!=0 && (sym->vclass == sGLOBAL)) { + if (index-- == 0) { + found = sym; + break; } } } - - if (!found) { - assert(found); - return FALSE; + } else if (usage == uSTOCK) { + for (sym=glbtab.next; sym!=NULL; sym=sym->next) { + if (sym->ident==iFUNCTN && (sym->vclass == sGLOBAL)) { + if (sym->codeaddr == index) { + found = sym; + break; + } + } } + } - /* Wow, we now have: - * 1) The functional enum deduced from formaltag - * 2) The function trying to be shoved in deduced from actualtag - * Now we have to check if it matches any one of the functags inside the enum. - */ - t = e->first; - while (t) { - int curarg,skip=0,i; - arginfo *func_arg; - funcarg_t *enum_arg; - /* Check return type first. */ - if (!matchreturntag(t, sym)) { - t = t->next; - continue; + if (!found) { + assert(found); + return FALSE; + } + + /* Wow, we now have: + * 1) The functional enum deduced from formaltag + * 2) The function trying to be shoved in deduced from actualtag + * Now we have to check if it matches any one of the functags inside the enum. + */ + t = e->first; + while (t) { + int curarg,skip=0,i; + arginfo *func_arg; + funcarg_t *enum_arg; + /* Check return type first. */ + if (!matchreturntag(t, sym)) { + t = t->next; + continue; + } + /* Check usage */ + if (t->type != usage) { + t = t->next; + continue; + } + /* Begin iterating arguments */ + for (curarg=0; curargargcount; curarg++) { + enum_arg = &t->args[curarg]; + /* Check whether we've exhausted our arguments */ + if (sym->dim.arglist[curarg].ident == 0) { + /* Can we bail out early? */ + if (!enum_arg->ommittable) { + /* No! */ + skip = 1; + } + break; } - /* Check usage */ - if (t->type != usage) { - t = t->next; - continue; + func_arg = &sym->dim.arglist[curarg]; + /* First check the ident type */ + if (enum_arg->ident != func_arg->ident) { + skip = 1; + break; } - /* Begin iterating arguments */ - for (curarg=0; curargargcount; curarg++) { - enum_arg = &t->args[curarg]; - /* Check whether we've exhausted our arguments */ - if (sym->dim.arglist[curarg].ident == 0) { - /* Can we bail out early? */ - if (!enum_arg->ommittable) { - /* No! */ - skip = 1; - } - break; - } - func_arg = &sym->dim.arglist[curarg]; - /* First check the ident type */ - if (enum_arg->ident != func_arg->ident) { - skip = 1; - break; - } - /* Next check arrayness */ - if (enum_arg->dimcount != func_arg->numdim) { - skip = 1; - break; - } - if (enum_arg->dimcount > 0) { - for (i=0; idimcount; i++) { - if (enum_arg->dims[i] != func_arg->dim[i]) { - skip = 1; - break; - } - } - if (skip) - break; - } - /* Lastly, check the tags */ - if (enum_arg->tagcount != func_arg->numtags) { - skip = 1; - break; - } - /* They should all be in the same order just for clarity... */ - for (i=0; itagcount; i++) { - if (!matchtag(func_arg->tags[i], enum_arg->tags[i], MATCHTAG_SILENT|MATCHTAG_COERCE)) { + /* Next check arrayness */ + if (enum_arg->dimcount != func_arg->numdim) { + skip = 1; + break; + } + if (enum_arg->dimcount > 0) { + for (i=0; idimcount; i++) { + if (enum_arg->dims[i] != func_arg->dim[i]) { skip = 1; break; } @@ -530,13 +530,27 @@ static int matchfunctags(int formaltag, int actualtag) if (skip) break; } - if (!skip) { - /* Make sure there are no trailing arguments */ - if (sym->dim.arglist[curarg].ident == 0) - return TRUE; + /* Lastly, check the tags */ + if (enum_arg->tagcount != func_arg->numtags) { + skip = 1; + break; } - t = t->next; + /* They should all be in the same order just for clarity... */ + for (i=0; itagcount; i++) { + if (!matchtag(func_arg->tags[i], enum_arg->tags[i], MATCHTAG_SILENT|MATCHTAG_COERCE)) { + skip = 1; + break; + } + } + if (skip) + break; } + if (!skip) { + /* Make sure there are no trailing arguments */ + if (sym->dim.arglist[curarg].ident == 0) + return TRUE; + } + t = t->next; } return FALSE; @@ -2215,6 +2229,7 @@ restart: } else { lval1->constval=(code_addr<<1)|0; snprintf(faketag, sizeof(faketag)-1, "$Func!%d", code_addr); + error(149); } lval1->tag=pc_addtag_flags(faketag, FIXEDTAG|FUNCTAG); oldsym->usage |= uREAD; diff --git a/sourcepawn/compiler/sc5.scp b/sourcepawn/compiler/sc5.scp index 8ac1517c..0fcb6127 100644 --- a/sourcepawn/compiler/sc5.scp +++ b/sourcepawn/compiler/sc5.scp @@ -31,14 +31,14 @@ SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned ch #define SCPACK_TABLE errstr_table /*-*SCPACK start of pair table, do not change or remove this line */ unsigned char errstr_table [][2] = { - {101,32}, {116,32}, {111,110}, {115,32}, {100,32}, {97,114}, {105,110}, {116,105}, {37,115}, {101,114}, {110,111}, {97,110}, {101,110}, {97,108}, {135,130}, {114,101}, - {111,114}, {34,136}, {145,34}, {117,110}, {121,32}, {138,129}, {115,105}, {115,116}, {100,101}, {97,116}, {101,132}, {109,140}, {32,146}, {41,10}, {109,98}, {116,104}, - {114,97}, {117,115}, {144,32}, {147,99}, {98,108}, {163,142}, {102,165}, {101,120}, {118,141}, {97,32}, {111,108}, {116,121}, {99,139}, {112,101}, {115,121}, {172,149}, - {174,158}, {133,160}, {176,170}, {115,10}, {103,32}, {105,132}, {103,117}, {115,150}, {182,155}, {137,32}, {133,184}, {116,111}, {102,134}, {97,164}, {168,181}, {99,104}, - {161,129}, {134,190}, {109,192}, {104,97}, {111,102}, {105,131}, {44,32}, {166,32}, {109,101}, {99,116}, {98,128}, {97,142}, {177,148}, {109,97}, {101,100}, {117,108}, - {99,130}, {37,131}, {118,133}, {112,143}, {178,156}, {196,32}, {105,189}, {210,214}, {99,111}, {101,131}, {130,32}, {99,108}, {118,128}, {110,32}, {152,188}, {102,105}, - {111,112}, {186,129}, {100,105}, {97,115}, {108,128}, {112,128}, {97,131}, {136,10}, {156,10}, {109,153}, {151,153}, {116,97}, {171,229}, {119,105}, {215,128}, {224,137}, - {101,10}, {212,157}, {34,32}, {171,173}, {195,220}, {40,241}, {150,122}, {208,151}, {139,32}, {141,32}, {110,97}, {101,108}, {139,132}, {102,144}, {134,32} + {101,32}, {116,32}, {111,110}, {115,32}, {100,32}, {97,114}, {105,110}, {116,105}, {37,115}, {101,114}, {110,111}, {97,110}, {135,130}, {97,108}, {101,110}, {114,101}, + {117,110}, {111,114}, {34,136}, {146,34}, {138,129}, {121,32}, {115,105}, {115,116}, {100,101}, {97,116}, {101,132}, {109,142}, {32,147}, {41,10}, {109,98}, {116,104}, + {114,97}, {117,115}, {144,99}, {98,108}, {162,140}, {145,32}, {102,164}, {97,32}, {116,121}, {101,120}, {99,139}, {118,141}, {111,108}, {170,148}, {112,101}, {115,121}, + {175,158}, {133,160}, {176,172}, {115,10}, {115,150}, {103,32}, {116,111}, {105,132}, {103,117}, {184,155}, {137,32}, {97,163}, {133,185}, {102,134}, {171,183}, {99,104}, + {161,129}, {166,32}, {134,190}, {109,192}, {104,97}, {111,102}, {117,108}, {105,131}, {44,32}, {109,101}, {99,116}, {98,128}, {97,140}, {177,149}, {109,97}, {101,100}, + {99,130}, {37,131}, {118,133}, {112,143}, {178,156}, {110,32}, {197,32}, {105,187}, {210,215}, {99,111}, {101,131}, {130,32}, {99,108}, {118,128}, {152,189}, {102,105}, + {111,112}, {97,131}, {188,129}, {168,174}, {100,105}, {97,115}, {108,128}, {112,128}, {136,10}, {156,10}, {109,153}, {151,153}, {116,97}, {168,231}, {119,105}, {216,128}, + {224,137}, {101,10}, {212,157}, {34,32}, {196,221}, {40,242}, {150,122}, {208,151}, {139,32}, {141,32}, {110,97}, {101,108}, {139,132}, {102,145}, {134,32} }; /*-*SCPACK end of pair table, do not change or remove this line */ @@ -192,154 +192,159 @@ static char *errmsg[] = { /*146*/ "#pragma newdecls must be required or optional\n", /*147*/ "new-style declarations are required\n", /*148*/ "cannot assign null to a non-nullable type\n", +/*149*/ "cannot use non-public functions as callbacks\n", +/*150*/ "cannot assign INVALID_FUNCTION to a non-function type\n", #else - "\247\255\311\232\273k\214:\234\306bu\201fo\223\204\222\012", - "\202l\224\251s\206g\344\352e\233\201(\242\247\323\267\202) \254 f\252low ea\277 \042c\343e\042\012", - "\230\333\205\313 \325\251loc\371\356\302ap\255\205 \376\251\330mpo\223\204\244ock\012", - "\246\234 \305\225imple\233t\316\012", - "\307\315\224\225\364\272t\263", - "\302\312a\267gn\232\273 \370\261y\012", - "\357\231\242\257\312\217\336\316\012", - "\302\312\251\367\213\201\247\323\267\202; \343sum\232z\211o\012", - "\301\314\366\200(nega\207ve\306z\211o \242ou\201\325bo\223ds\235", - "\301\307\242\230\333\205\313\012", - "\301out\226d\200\246\263", - "\301\307c\215l\306\225\251\276add\217s\263", - "\212 \214tr\224po\206\201(\212 pu\244ic \246s\235", - "\301\352e\233t; \225\376s\355t\277\012", - "\042\230fa\317t\362c\343\200\302\312\237\200l\343\201c\343\200\376s\355t\277 \352e\233t\012", - "m\317\207p\344\230fa\317t\203\376\042s\355t\277\042\012", - "\223\336\232\324\012", - "\206i\207\215iz\313 d\231\251\247ce\316\203\230\333\205\232\366\360", - "\225\251lab\373:\350", - "\301\262 \372m\200\222\012", - "\262 \215\217ad\224\336\316:\350", - "\302\312l\250u\200(n\202-\367\213t\235", - "\314a\267gn\233\201\302\312\226mp\344a\267gn\233t\012", - "\042b\217ak\362\242\042\320t\206ue\362\305ou\201\325\320t\247t\012", - "\307head\206\264\342ff\211\203from pro\273\363\012", - "\212 \351\277\206\264\042#if...\042\012", - "\301\277\205a\311\271\367\213t\012", - "\301subscrip\201(\225\370\314\242\273o m\213\224subscripts):\350", - "\301\247\323\267\202\306\343sum\232z\211o\012", - "\330mpo\223\204\352e\233\201\225\333os\232a\201\237\200\214\204\325\337\344(\227\205t\232a\201l\206\200%d\235", - "\223k\212w\335\342\217c\207v\360", - "\314\206\230x ou\201\325bo\223d\203(\356\222\235", - "\314\302\312\206\230x\232(\356\222\235", - "\341do\331\225\364\251\230fa\317\201\250u\200(\341%d\235", - "\341\354mis\351\277 (\341%d\235", - "empt\224\352e\233t\012", - "\301\227r\206\264(po\267\244\224n\202-t\211m\206\231\232\227r\206g\235", - "\247t\240 \277\205a\311\211\203\332l\206\360", - "\367\213\201\262 \303\203\212 \366\360", - "duplic\231\200\042c\343e\362lab\373 (\250u\200%d\235", - "\301\373lip\226s\306\314\366\200\305\225k\212wn\012", - "\301\330\236\206\313 \325\333\343\203s\255ci\337\211\263", - "\277\205a\311\271\367\213\201\247ce\316\203r\213g\200f\242pack\232\227r\206g\012", - "po\226\216\371p\205a\310t\211\203\302\323c\316\200\215l \372m\232p\205a\310t\211\263", - "\273o m\213\224\307\272t\263", - "\223k\212w\335\314\366\200(\356\222\235", - "\314\366\331do \225\351\277\306\242\230\227\206\313 \314\305\273o sm\215l\012", - "\314(\203do \225\351\277\012", - "\301l\206\200\320t\206u\313\012", - "\301r\213g\360", - "\301subscript\306\241\200\042[ ]\362\357\231\220\203\332\315j\242\342\233\226\202\263", - "m\317\207-\342\233\226\202\371\261y\203\302\312f\317l\224\206i\207\215iz\316\012", - "\247ce\316\206\264\315ximum nu\236\271\325\342\233\226\202\263", - "\223\351\277\232\333os\206\264b\240c\200(\042}\042\235", - "\227\205\201\325\307bod\224\355\237ou\201\307head\211\012", - "\261ys\306loc\371\327\331\374\307\272t\203\257\312pu\244ic (\356\222\235", - "\223\274ish\232\247\323\267\332be\375\200\330mpil\271\342\217c\207v\360", - "duplic\231\200\272t; sam\200\341\305p\343s\232t\355c\360", - "\307\341\315\224\225\364\251\230fa\317\201\250u\200(\356\222\235", - "m\317\207p\344\042#\373se\362\342\217c\207v\331betwe\214 \042#if ... #\214\342f\042\012", - "\042#\373seif\362\342\217c\207\334f\252low\203\370\042#\373se\362\342\217c\207v\360", - "nu\236\271\325\357\213d\203do\331\225\337\201\237\200\357\231\220\012", - "\307\217s\317\201\353\264\325\357\231\220\234 \302\312\222\012", - "\257\277\213g\200\323\336\232\357\231\220\263", - "\307\341\315\224\202l\224\364\251s\206g\344\353\264(\341%d\235", - "\307\341\315\224\225\312\251\217f\211\214c\200\341\242\370\314(\341\222\235", - "\356\257\312bo\237 \251\217f\211\214c\200\374\370\314(\356\222\235", - "\301\240\216\371nu\236\271\323ci\226\332\376#p\240g\315\012", - "\240\216\371nu\236\271\375\315\201\215\217ad\224\336\316\012", - "\240\216\371nu\236\271supp\220\201w\346\225\214\275\316\012", - "\241\211-\336\232\357\231\242\302\312\230\333\205\232be\375\200\241\200(\246\234\235", - "\042\366e\304\362\357\231\242\305\301\332\042\246\362\262\263", - "\307\341\302\312\370\314(\341\222\235", - "#\336\200p\231t\211\335\302\227\205\201\355\237 \370\215p\303be\207c \277\205a\311\211\012", - "\206pu\201l\206\200\273o l\202\264(aft\271subs\207tu\216s\235", - "\256n\353x \211r\242\376\237\200\247\323\267\202\306\242\301\307c\215l\012", - "m\215\375m\232UTF-8 \214\330d\206g\306\242c\220rupt\232\337le: \347", - "\307\241\331bo\237 \042\217turn\362\374\042\217tur\335<\250ue>\042\012", - "\206\320\226\227\214\201\217tur\335\363\203(\314& n\202-\261y\235", - "\223k\212w\335\262\306\242\225\251\367\213\201\262 \365", - "\257\353k\200\251\353\264\346\251\230fa\317\201\250u\200f\242\370\206\230x\232\314p\205a\310t\271\365", - "\241\211-\336\232\357\231\220\203\374\372\207\334\246\203\315\224\225\364\352e\263", - "\251\307\242\356\315\224\202l\224b\373\202\264\273 \251s\206g\344au\273\351\332\365", - "\352\200\320fli\311: \202\200\325\237\200\352\331\305\215\217ad\224a\267gn\232\273 a\212\237\271imple\233t\313 \365", - "\212 \352\331\205\200\336\232f\242\324\012", - "\223k\212w\335au\273\351\202\350", - "\223k\212w\335\352\200\222 f\242au\273\351\202\350", - "pu\244ic \327\331\374loc\371\327\331\315\224\225\364\352\331\365", - "\352\200\327\331\315\224\225\312\206i\207\215iz\232\365", - "pu\244ic \246\203\315\224\225\217tur\335\261y\203\365", - "a\236i\266ou\203\367\213t; \353\264ov\211rid\200\305\217qui\217\204\365", - "nu\236\271\325\272t\203do\331\225\351\277 \336i\216\012", - "\247\255\311\232\353\264\372m\200id\214\207\337\211\012", - "\307\214um\211\313 \217qui\217\203\223iqu\200\353g\012", - "\257\364\217qui\217\204p\205a\310t\211\203aft\271\340\216\371p\205a\310t\211\263", - "\330\317\204\225\274\204\310\236\211\234 \376\227ruc\201\222\012", - "\324 do\331\225\364\251\351\277\206\264\363\012", - "\354\222 sho\317\204\312\222 \376new-\227y\344\230\333\205\313\263", - "\321sho\317\204\225\364\370\247plici\201\217tur\335\363\012", - "\307pro\273\363\203do \225\351\277\012", - "s\255cif\224ei\237\271\215l \342\233\226\202\203\242\202l\224\237\200l\343\201\342\233\226\202\012", - "\257\274\204\321\347", - "\321w\346\215\217ad\224\336\232\332\237\305\347", - "\257\274\204\213\224\310\237od\203f\242\347", - "\257\274\204\310\237o\204\242pr\357t\224\210.\347", - "\257c\215l \310\237od\203\332\370\261y\012", - "\257c\215l \310\237od\203\332\251\246\012", - "\310\237o\204\302\364\251\337rs\201\341\330mpa\207\244\200\355\237 \237\200\321\354(\210\235", - "\321\372m\200\302\227\205\201\355\237 \370upp\211c\343\200lett\211\012", - "\321\303\203\215\217ad\224be\214 \336\232(\323vio\241l\224se\214 \346\210\235", - "\247\255\311\232id\214\207\337\271- d\265you \375ge\201\251\363?\012", - "\367ru\311\242\307\302\217tur\335\353\264\347", - "\257\336\200\367ru\311\242\375\234; \215\217ad\224\247i\227\203\346\251\347", - "miss\206\264\363\306\242\321\302\364\237\200sam\200\372m\200\346\321\222\012", - "\257\241\200\230lete\306\321\321\303\203\212 \230\227ru\311\220\012", - "\212 \310\237od\315p \242\333\343\203w\346fo\223\204f\242\347", - "\212 \230\227ru\311\242w\346fo\223\204f\242\321\347", - "\230\227ru\311\220\203\302\312\372\207\334\246\263", - "\230\227ru\311\220\203\257\364\247t\240 \272t\263", - "\310\237od\315p \374\333\343\203\226gn\231u\217\203\302\241\200new-\227y\344\354\230\333\205\313\263", - "\257s\255cif\224\314\342\233\226\202\203\332bo\237 \354\374\372\310\012", - "\247\255\311\232\354\247\323\267\202\012", - "f\317ly-qu\215i\337\232\372m\200\222 \305\273o l\202g\306wo\317\204\312tr\243\231\232\273\350", - "\223\247\255\311\232\273k\214\306\247\255\311\232\310\237o\204\242pr\357\253\012", - "\247\255\311\232\042\372\207ve\362\242\042get\042\012", - "\321f\242\321\215\217ad\224\247i\227\263", - "pr\357t\224gett\211\203\257accep\201\247t\240 \272t\263", - "\321\302\364\237\200sam\200\217tur\335\354\346pr\357t\224\321(\210\235", - "\257mix \310\237od\315p\203\374\333\343s\331\355\237 \206h\211it\213c\360", - "\257\330\211c\200\246\203\273 \250ue\263", - "\257\330\211c\200objec\201\354\321\273 n\202-objec\201\354\347", - "\257\330\211c\200n\202-objec\201\354\321\273 objec\201\354\347", - "\257\330\211c\200\223\217l\231\232objec\201\363\203\321\374\347", - "\354mis\351\277 (\321\374\210\235", - "\257\241\200\370objec\201\376\251m\317\207-\353\264s\373e\311\220\012", - "\261y\203\205\200\225supp\220t\232\346\217tur\335\363\263", - "\257mix \217f\211\214c\200\374\314\363\263", - "\320s\201w\346s\255ci\337\232t\355c\360", - "\330\317\204\225\274\204\354\222\012", - "new-\227y\344\314\363\203\257s\255cif\224\342\233\226\332\366\331\346p\205\201\325\237eir \363\012", - "\372\207ves\306\375w\205ds\306\374pu\244ic \246\203\257\217tur\335\261y\263", - "\301\354\230\333\205\313\012", - "new-\227y\344\230\333\205\313\203sho\317\204\225\364\042new\042\012", - "vo\265\257\312\241\232\346\251\356\363\012", - "\301\354\247\323\267\202\012", - "#p\240gm\251new\230\333\203\302\312\217qui\217\204\242\340\216\215\012", - "new-\227y\344\230\333\205\313\203\205\200\217qui\217d\012" + "\251\256\312\232\266k\216:\234\310bu\201fo\220\204\223\012", + "\202l\225\247s\206g\346\353e\233\201(\245\251\323\264\202) \252 f\254low ea\277 \042c\345e\042\012", + "\230\334\205\314 \326\247loc\371\357\303ap\256\205 \376\247\331mpo\220\204\243ock\012", + "\246\234 \307\224imple\233t\317\012", + "\301\316\225\224\364\274t\263", + "\303\313a\264gn\232\266 \370\261y\012", + "\360\231\245\255\313\217\336\317\012", + "\303\313\247\367\213\201\251\323\264\202; \345sum\232z\211o\012", + "\302\315\366\200(nega\207ve\310z\211o \245ou\201\326bo\220ds\235", + "\302\301\245\230\334\205\314\012", + "\302out\226d\200\246\263", + "\302\301c\215l\310\224\247\276add\217s\263", + "\212 \216tr\225po\206\201(\212 pu\243ic \246s\235", + "\302\353e\233t; \224\376s\356t\277\012", + "\042\230fa\306t\363c\345\200\303\313\237\200l\345\201c\345\200\376s\356t\277 \353e\233t\012", + "m\306\207p\346\230fa\306t\203\376\042s\356t\277\042\012", + "\220\336\232\324\012", + "\206i\207\215iz\314 d\231\247\251ce\317\203\230\334\205\232\366\361", + "\224\247lab\373:\351", + "\302\262 \372m\200\223\012", + "\262 \215\217ad\225\336\317:\351", + "\303\313l\253u\200(n\202-\367\213t\235", + "\315a\264gn\233\201\303\313\226mp\346a\264gn\233t\012", + "\042b\217ak\363\245\042\320t\206ue\363\307ou\201\326\320t\251t\012", + "\301head\206\265\344ff\211\203from pro\266\343\012", + "\212 \352\277\206\265\042#if...\042\012", + "\302\277\205a\312\272\367\213t\012", + "\302subscrip\201(\224\370\315\245\266o m\213\225subscripts):\351", + "\302\251\323\264\202\310\345sum\232z\211o\012", + "\331mpo\220\204\353e\233\201\224\334os\232a\201\237\200\216\204\326\337\346(\227\205t\232a\201l\206\200%d\235", + "\220k\212w\325\344\217c\207v\361", + "\315\206\230x ou\201\326bo\220d\203(\357\223\235", + "\315\303\313\206\230x\232(\357\223\235", + "\342do\332\224\364\247\230fa\306\201\253u\200(\342%d\235", + "\342\355mis\352\277 (\342%d\235", + "empt\225\353e\233t\012", + "\302\227r\206\265(po\264\243\225n\202-t\211m\206\231\232\227r\206g\235", + "\251t\240 \277\205a\312\211\203\333l\206\361", + "\367\213\201\262 \304\203\212 \366\361", + "duplic\231\200\042c\345e\363lab\373 (\253u\200%d\235", + "\302\373lip\226s\310\315\366\200\307\224k\212wn\012", + "\302\331\236\206\314 \326\334\345\203s\256ci\337\211\263", + "\277\205a\312\272\367\213\201\251ce\317\203r\213g\200f\245pack\232\227r\206g\012", + "po\226\214\371p\205a\311t\211\203\303\323c\317\200\215l \372m\232p\205a\311t\211\263", + "\266o m\213\225\301\274t\263", + "\220k\212w\325\315\366\200(\357\223\235", + "\315\366\332do \224\352\277\310\245\230\227\206\314 \315\307\266o sm\215l\012", + "\315(\203do \224\352\277\012", + "\302l\206\200\320t\206u\314\012", + "\302r\213g\361", + "\302subscript\310\241\200\042[ ]\363\360\231\221\203\333\316j\245\344\233\226\202\263", + "m\306\207-\344\233\226\202\371\261y\203\303\313f\306l\225\206i\207\215iz\317\012", + "\251ce\317\206\265\316ximum nu\236\272\326\344\233\226\202\263", + "\220\352\277\232\334os\206\265b\240c\200(\042}\042\235", + "\227\205\201\326\301bod\225\356\237ou\201\301head\211\012", + "\261ys\310loc\371\330\332\374\301\274t\203\255\313pu\243ic (\357\223\235", + "\220\275ish\232\251\323\264\333be\375\200\331mpil\272\344\217c\207v\361", + "duplic\231\200\274t; sam\200\342\307p\345s\232t\356c\361", + "\301\342\316\225\224\364\247\230fa\306\201\253u\200(\357\223\235", + "m\306\207p\346\042#\373se\363\344\217c\207v\332betwe\216 \042#if ... #\216\344f\042\012", + "\042#\373seif\363\344\217c\207\335f\254low\203\370\042#\373se\363\344\217c\207v\361", + "nu\236\272\326\360\213d\203do\332\224\337\201\237\200\360\231\221\012", + "\301\217s\306\201\354\265\326\360\231\221\234 \303\313\223\012", + "\255\277\213g\200\323\336\232\360\231\221\263", + "\301\342\316\225\202l\225\364\247s\206g\346\354\265(\342%d\235", + "\301\342\316\225\224\313\247\217f\211\216c\200\342\245\370\315(\342\223\235", + "\357\255\313bo\237 \247\217f\211\216c\200\374\370\315(\357\223\235", + "\302\240\214\371nu\236\272\323ci\226\333\376#p\240g\316\012", + "\240\214\371nu\236\272\375\316\201\215\217ad\225\336\317\012", + "\240\214\371nu\236\272supp\221\201w\341\224\216\273\317\012", + "\241\211-\336\232\360\231\245\303\313\230\334\205\232be\375\200\241\200(\246\234\235", + "\042\366e\305\363\360\231\245\307\302\333\042\246\363\262\263", + "\301\342\303\313\370\315(\342\223\235", + "#\336\200p\231t\211\325\303\227\205\201\356\237 \370\215p\304be\207c \277\205a\312\211\012", + "\206pu\201l\206\200\266o l\202\265(aft\272subs\207tu\214s\235", + "\257n\354x \211r\245\376\237\200\251\323\264\202\310\245\302\301c\215l\012", + "m\215\375m\232UTF-8 \216\331d\206g\310\245c\221rupt\232\337le: \350", + "\301\241\332bo\237 \042\217turn\363\374\042\217tur\325<\253ue>\042\012", + "\206\320\226\227\216\201\217tur\325\343\203(\315& n\202-\261y\235", + "\220k\212w\325\262\310\245\224\247\367\213\201\262 \365", + "\255\354k\200\247\354\265\341\247\230fa\306\201\253u\200f\245\370\206\230x\232\315p\205a\311t\272\365", + "\241\211-\336\232\360\231\221\203\374\372\207\335\246\203\316\225\224\364\353e\263", + "\247\301\245\357\316\225\202l\225b\373\202\265\266 \247s\206g\346au\266\352\333\365", + "\353\200\320fli\312: \202\200\326\237\200\353\332\307\215\217ad\225a\264gn\232\266 a\212\237\272imple\233t\314 \365", + "\212 \353\332\205\200\336\232f\245\324\012", + "\220k\212w\325au\266\352\202\351", + "\220k\212w\325\353\200\223 f\245au\266\352\202\351", + "pu\243ic \330\332\374loc\371\330\332\316\225\224\364\353\332\365", + "\353\200\330\332\316\225\224\313\206i\207\215iz\232\365", + "pu\243ic \246\203\316\225\224\217tur\325\261y\203\365", + "a\236i\270ou\203\367\213t; \354\265ov\211rid\200\307\217qui\217\204\365", + "nu\236\272\326\274t\203do\332\224\352\277 \336i\214\012", + "\251\256\312\232\354\265\372m\200id\216\207\337\211\012", + "\301\216um\211\314 \217qui\217\203\220iqu\200\354g\012", + "\255\364\217qui\217\204p\205a\311t\211\203aft\272\340\214\371p\205a\311t\211\263", + "\331\306\204\224\275\204\311\236\211\234 \376\227ruc\201\223\012", + "\324 do\332\224\364\247\352\277\206\265\343\012", + "\355\223 sho\306\204\313\223 \376new-\227y\346\230\334\205\314\263", + "\321sho\306\204\224\364\370\251plici\201\217tur\325\343\012", + "\301pro\266\343\203do \224\352\277\012", + "s\256cif\225ei\237\272\215l \344\233\226\202\203\245\202l\225\237\200l\345\201\344\233\226\202\012", + "\255\275\204\321\350", + "\321w\341\215\217ad\225\336\232\333\237\307\350", + "\255\275\204\213\225\311\237od\203f\245\350", + "\255\275\204\311\237o\204\245pr\360t\225\210.\350", + "\255c\215l \311\237od\203\333\370\261y\012", + "\255c\215l \311\237od\203\333\247\246\012", + "\311\237o\204\303\364\247\337rs\201\342\331mpa\207\243\200\356\237 \237\200\321\355(\210\235", + "\321\372m\200\303\227\205\201\356\237 \370upp\211c\345\200lett\211\012", + "\321\304\203\215\217ad\225be\216 \336\232(\323vio\241l\225se\216 \341\210\235", + "\251\256\312\232id\216\207\337\272- d\267you \375ge\201\247\343?\012", + "\367ru\312\245\301\303\217tur\325\354\265\350", + "\255\336\200\367ru\312\245\375\234; \215\217ad\225\251i\227\203\341\247\350", + "miss\206\265\343\310\245\321\303\364\237\200sam\200\372m\200\341\321\223\012", + "\255\241\200\230lete\310\321\321\304\203\212 \230\227ru\312\221\012", + "\212 \311\237od\316p \245\334\345\203w\341fo\220\204f\245\350", + "\212 \230\227ru\312\245w\341fo\220\204f\245\321\350", + "\230\227ru\312\221\203\303\313\372\207\335\246\263", + "\230\227ru\312\221\203\255\364\251t\240 \274t\263", + "\311\237od\316p \374\334\345\203\226gn\231u\217\203\303\241\200new-\227y\346\355\230\334\205\314\263", + "\255s\256cif\225\315\344\233\226\202\203\333bo\237 \355\374\372\311\012", + "\251\256\312\232\355\251\323\264\202\012", + "f\306ly-qu\215i\337\232\372m\200\223 \307\266o l\202g\310wo\306\204\313tr\242\231\232\266\351", + "\220\251\256\312\232\266k\216\310\251\256\312\232\311\237o\204\245pr\360\250\012", + "\251\256\312\232\042\372\207ve\363\245\042get\042\012", + "\321f\245\321\215\217ad\225\251i\227\263", + "pr\360t\225gett\211\203\255accep\201\251t\240 \274t\263", + "\321\303\364\237\200sam\200\217tur\325\355\341pr\360t\225\321(\210\235", + "\255mix \311\237od\316p\203\374\334\345s\332\356\237 \206h\211it\213c\361", + "\255\331\211c\200\246\203\266 \253ue\263", + "\255\331\211c\200objec\201\355\321\266 n\202-objec\201\355\350", + "\255\331\211c\200n\202-objec\201\355\321\266 objec\201\355\350", + "\255\331\211c\200\220\217l\231\232objec\201\343\203\321\374\350", + "\355mis\352\277 (\321\374\210\235", + "\255\241\200\370objec\201\376\247m\306\207-\354\265s\373e\312\221\012", + "\261y\203\205\200\224supp\221t\232\341\217tur\325\343\263", + "\255mix \217f\211\216c\200\374\315\343\263", + "\320s\201w\341s\256ci\337\232t\356c\361", + "\331\306\204\224\275\204\355\223\012", + "new-\227y\346\315\343\203\255s\256cif\225\344\233\226\333\366\332\341p\205\201\326\237eir \343\012", + "\372\207ves\310\375w\205ds\310\374pu\243ic \246\203\255\217tur\325\261y\263", + "\302\355\230\334\205\314\012", + "new-\227y\346\230\334\205\314\203sho\306\204\224\364\042new\042\012", + "vo\267\255\313\241\232\341\247\357\343\012", + "\302\355\251\323\264\202\012", + "#p\240gm\247new\230\334\203\303\313\217qui\217\204\245\340\214\215\012", + "new-\227y\346\230\334\205\314\203\205\200\217qui\217d\012", + "\255a\264g\325n\306l \266 \247n\202-n\306l\273\200\343\012", + "\255\241\200n\202-pu\243ic \246\203\341c\215lback\263", + "\255a\264g\325INVALID_FUNCTION \266 \247n\202-\301\343\012" #endif }; @@ -364,18 +369,18 @@ static char *fatalmsg[] = { /*170*/ "assertion failed: %s\n", /*171*/ "user error: %s\n", #else - "\257\217a\204from \337le:\350", - "\257writ\200\273 \337le:\350", - "t\275\200ov\211flow:\350", - "\206suf\337ci\214\201\310m\220y\012", - "\301\343se\236l\271\206\227ruc\216\350", - "num\211ic ov\211flow\306\247ce\316\206\264capaci\253\012", - "\330mpil\232scrip\201\247ce\316\203\237\200\315ximum \310m\220\224\366\200(%l\204bytes\235", - "\273o m\213\224\211r\242\310ssag\331\332\202\200l\206\360", - "\330\230pag\200\315pp\206\264\337\344\225fo\223d\012", - "\301p\231h:\350", - "\343s\211\216 fail\316: \347", - "\241\271\211r\220: \347" + "\255\217a\204from \337le:\351", + "\255writ\200\266 \337le:\351", + "t\273\200ov\211flow:\351", + "\206suf\337ci\216\201\311m\221y\012", + "\302\345se\236l\272\206\227ruc\214\351", + "num\211ic ov\211flow\310\251ce\317\206\265capaci\250\012", + "\331mpil\232scrip\201\251ce\317\203\237\200\316ximum \311m\221\225\366\200(%l\204bytes\235", + "\266o m\213\225\211r\245\311ssag\332\333\202\200l\206\361", + "\331\230pag\200\316pp\206\265\337\346\224fo\220d\012", + "\302p\231h:\351", + "\345s\211\214 fail\317: \350", + "\241\272\211r\221: \350" #endif }; @@ -419,43 +424,43 @@ static char *warnmsg[] = { /*235*/ "public function lacks forward declaration (symbol \"%s\")\n", /*236*/ "unknown parameter in substitution (incorrect #define pattern)\n" #else - "\324 \305tr\243\231\232\273 %\204\277\205a\311\211\263", - "\217\336i\216 \325\367\213t/\315cro \365", - "nu\236\271\325\272t\203do\331\225\351\277 \336i\216\012", - "\262 \305nev\271\241\316:\350", - "\262 \305a\267gn\232\251\250u\200\237a\201\305nev\271\241\316:\350", - "\217d\223d\213\201\330\230: \367\213\201\247\323\267\332\305z\211o\012", - "\217d\223d\213\201te\227: \367\213\201\247\323\267\332\305n\202-z\211o\012", - "\223k\212w\335#p\240g\315\012", - "\307\355\237 \353\264\217s\317\201\241\232be\375\200\336i\216\306\375c\206\264\217p\205s\360", - "\246\234 sho\317\204\217tur\335\251\250u\360", - "po\267\244\200\241\200\325\262 be\375\200\206i\207\215iz\313:\350", - "po\267\244\224\223\206t\214\230\204a\267gn\233t\012", - "po\267\244\224\223\206t\214\230\204bit\355s\200\357\313\012", - "\353\264mis\351\277\012", - "po\267\244\224\251\042\367\362\314\341w\346\206t\214\230d:\350", - "\247\323\267\332\303\203\212 effe\311\012", - "ne\227\232\330m\233t\012", - "loos\200\206d\214t\313\012", - "\252\204\227y\344pro\273\363\203\241\232\355\237 \340\216\371semic\252umn\263", - "loc\371\356\222 s\303dow\203\251\356a\201\251\323c\316\206\264lev\373\012", - "\247\323\267\332\355\237 \353\264ov\211rid\200\302ap\255\205 betwe\214 p\205\214\237ese\263", - "lab\373 \372m\200\222 s\303dow\203\353\264\372\310\012", - "nu\236\271\325\342git\203\247ce\316\203\240\216\371nu\236\271\323ci\226\202\012", - "\217d\223d\213\201\042\366e\304\042: \341\366\200\305\215way\2031 \365", - "\206\230t\211m\206\231\200\314\366\200\376\042\366e\304\362\247\323\267\332\365", - "\223\217a\277\275\200\330\230\012", - "\251\356\305a\267gn\232\273 its\373f \365", - "m\220\200\206i\207\215iz\211\203\237\370\214um \337\373d\263", - "l\214g\237 \325\206i\207\215iz\271\247ce\316\203\366\200\325\237\200\214um \337\373d\012", - "\206\230x \353\264mis\351\277 \365", - "\212 imple\233t\313 f\242\352\200\222 \376\246\234\306\212 f\215l-back\012", - "\352\200s\255ci\337c\313 \332\375w\205\204\230\333\205\313 \305ig\212\217d\012", - "outpu\201\337\344\305writt\214\306bu\201\355\237 \330mpac\201\214\330d\206\264\342s\275\316\012", - "\352\200\356\222 s\303dow\203\251glob\371\327\360", - "\324 \305m\205k\232\346\230\323c\231\316: \347", - "pu\244ic \307lack\203\375w\205\204\230\333\205\313 \365", - "\223k\212w\335p\205a\310t\271\376subs\207tu\216 (\206c\220\217c\201#\336\200p\231t\211n\235" + "\324 \307tr\242\231\232\266 %\204\277\205a\312\211\263", + "\217\336i\214 \326\367\213t/\316cro \365", + "nu\236\272\326\274t\203do\332\224\352\277 \336i\214\012", + "\262 \307nev\272\241\317:\351", + "\262 \307a\264gn\232\247\253u\200\237a\201\307nev\272\241\317:\351", + "\217d\220d\213\201\331\230: \367\213\201\251\323\264\333\307z\211o\012", + "\217d\220d\213\201te\227: \367\213\201\251\323\264\333\307n\202-z\211o\012", + "\220k\212w\325#p\240g\316\012", + "\301\356\237 \354\265\217s\306\201\241\232be\375\200\336i\214\310\375c\206\265\217p\205s\361", + "\246\234 sho\306\204\217tur\325\247\253u\361", + "po\264\243\200\241\200\326\262 be\375\200\206i\207\215iz\314:\351", + "po\264\243\225\220\206t\216\230\204a\264gn\233t\012", + "po\264\243\225\220\206t\216\230\204bit\356s\200\360\314\012", + "\354\265mis\352\277\012", + "po\264\243\225\247\042\367\363\315\342w\341\206t\216\230d:\351", + "\251\323\264\333\304\203\212 effe\312\012", + "ne\227\232\331m\233t\012", + "loos\200\206d\216t\314\012", + "\254\204\227y\346pro\266\343\203\241\232\356\237 \340\214\371semic\254umn\263", + "loc\371\357\223 s\304dow\203\247\357a\201\247\323c\317\206\265lev\373\012", + "\251\323\264\333\356\237 \354\265ov\211rid\200\303ap\256\205 betwe\216 p\205\216\237ese\263", + "lab\373 \372m\200\223 s\304dow\203\354\265\372\311\012", + "nu\236\272\326\344git\203\251ce\317\203\240\214\371nu\236\272\323ci\226\202\012", + "\217d\220d\213\201\042\366e\305\042: \342\366\200\307\215way\2031 \365", + "\206\230t\211m\206\231\200\315\366\200\376\042\366e\305\363\251\323\264\333\365", + "\220\217a\277\273\200\331\230\012", + "\247\357\307a\264gn\232\266 its\373f \365", + "m\221\200\206i\207\215iz\211\203\237\370\216um \337\373d\263", + "l\216g\237 \326\206i\207\215iz\272\251ce\317\203\366\200\326\237\200\216um \337\373d\012", + "\206\230x \354\265mis\352\277 \365", + "\212 imple\233t\314 f\245\353\200\223 \376\246\234\310\212 f\215l-back\012", + "\353\200s\256ci\337c\314 \333\375w\205\204\230\334\205\314 \307ig\212\217d\012", + "outpu\201\337\346\307writt\216\310bu\201\356\237 \331mpac\201\216\331d\206\265\344s\273\317\012", + "\353\200\357\223 s\304dow\203\247glob\371\330\361", + "\324 \307m\205k\232\341\230\323c\231\317: \350", + "pu\243ic \301lack\203\375w\205\204\230\334\205\314 \365", + "\220k\212w\325p\205a\311t\272\376subs\207tu\214 (\206c\221\217c\201#\336\200p\231t\211n\235" #endif };