diff --git a/Lib/imp.py b/Lib/imp.py --- a/Lib/imp.py +++ b/Lib/imp.py @@ -11,7 +11,7 @@ init_builtin, init_frozen, is_builtin, is_frozen, _fix_co_filename, extension_suffixes) # Could move out of _imp, but not worth the code -from _imp import get_magic, get_tag +from _imp import get_magic from importlib._bootstrap import new_module from importlib._bootstrap import cache_from_source @@ -37,6 +37,11 @@ IMP_HOOK = 9 +def get_tag(): + """Return the magic tag for .pyc or .pyo files.""" + return sys.implementation.cache_tag + + def get_suffixes(): warnings.warn('imp.get_suffixes() is deprecated; use the constants ' 'defined on importlib.machinery instead', diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -1446,7 +1446,7 @@ # Constants setattr(self_module, '_relax_case', _make_relax_case()) setattr(self_module, '_MAGIC_NUMBER', _imp_module.get_magic()) - setattr(self_module, '_TAG', _imp.get_tag()) + setattr(self_module, '_TAG', sys.implementation.cache_tag) if builtin_os == 'nt': SOURCE_SUFFIXES.append('.pyw') diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -112,23 +112,11 @@ /* MAGIC must change whenever the bytecode emitted by the compiler may no longer be understood by older implementations of the eval loop (usually due to the addition of new opcodes) - TAG must change for each major Python release. The magic number will take - care of any bytecode changes that occur during development. */ -#define QUOTE(arg) #arg -#define STRIFY(name) QUOTE(name) -#define MAJOR STRIFY(PY_MAJOR_VERSION) -#define MINOR STRIFY(PY_MINOR_VERSION) #define MAGIC (3230 | ((long)'\r'<<16) | ((long)'\n'<<24)) -#define TAG "cpython-" MAJOR MINOR; #define CACHEDIR "__pycache__" /* Current magic word and string tag as globals. */ static long pyc_magic = MAGIC; -static const char *pyc_tag = TAG; -#undef QUOTE -#undef STRIFY -#undef MAJOR -#undef MINOR /* See _PyImport_FixupExtensionObject() below */ static PyObject *extensions = NULL; @@ -534,9 +522,22 @@ const char * PyImport_GetMagicTag(void) { - return pyc_tag; + PyObject *impl, *tag; + const char *raw_tag; + + /* We could also pull it from imp or importlib. */ + impl = PySys_GetObject("implementation"); + if (impl == NULL) + return NULL; + tag = PyObject_GetAttrString(impl, "cache_tag"); + if (tag == NULL) + return NULL; + raw_tag = PyUnicode_DATA(tag); + Py_DECREF(tag); + return raw_tag; } + /* Magic for extension modules (built-in as well as dynamically loaded). To prevent initializing an extension module more than once, we keep a static dictionary 'extensions' keyed by module name @@ -1847,12 +1848,6 @@ } static PyObject * -imp_get_tag(PyObject *self, PyObject *noargs) -{ - return PyUnicode_FromString(pyc_tag); -} - -static PyObject * imp_extension_suffixes(PyObject *self, PyObject *noargs) { PyObject *list; @@ -2002,10 +1997,6 @@ "get_magic() -> string\n\ Return the magic number for .pyc or .pyo files."); -PyDoc_STRVAR(doc_get_tag, -"get_tag() -> string\n\ -Return the magic tag for .pyc or .pyo files."); - PyDoc_STRVAR(doc_extension_suffixes, "extension_suffixes() -> list of strings\n\ Returns the list of file suffixes used to identify extension modules."); @@ -2029,7 +2020,6 @@ static PyMethodDef imp_methods[] = { {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic}, - {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag}, {"extension_suffixes", imp_extension_suffixes, METH_NOARGS, doc_extension_suffixes}, {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held}, diff --git a/Python/importlib.h b/Python/importlib.h --- a/Python/importlib.h +++ b/Python/importlib.h @@ -3024,7 +3024,7 @@ 105,108,101,70,105,110,100,101,114,46,95,102,105,108,108,95, 99,97,99,104,101,99,1,0,0,0,0,0,0,0,3,0, 0,0,3,0,0,0,7,0,0,0,115,25,0,0,0,-121, - 0,0,-121,1,0,102,2,0,100,1,0,100,2,0,-122,0, + 1,0,-121,0,0,102,2,0,100,1,0,100,2,0,-122,0, 0,125,2,0,124,2,0,83,40,3,0,0,0,117,20,1, 0,0,65,32,99,108,97,115,115,32,109,101,116,104,111,100, 32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,97, @@ -3072,9 +3072,9 @@ 0,99,108,115,117,14,0,0,0,108,111,97,100,101,114,95, 100,101,116,97,105,108,115,117,24,0,0,0,112,97,116,104, 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,40,0,0,0,0,40,2,0,0,0,117,3, - 0,0,0,99,108,115,117,14,0,0,0,108,111,97,100,101, - 114,95,100,101,116,97,105,108,115,117,29,0,0,0,60,102, + 110,100,101,114,40,0,0,0,0,40,2,0,0,0,117,14, + 0,0,0,108,111,97,100,101,114,95,100,101,116,97,105,108, + 115,117,3,0,0,0,99,108,115,117,29,0,0,0,60,102, 114,111,122,101,110,32,105,109,112,111,114,116,108,105,98,46, 95,98,111,111,116,115,116,114,97,112,62,117,9,0,0,0, 112,97,116,104,95,104,111,111,107,-126,4,0,0,115,4,0, @@ -3617,9 +3617,9 @@ 0,124,8,0,-125,1,0,-125,3,0,1,116,8,0,124,3, 0,100,22,0,116,15,0,-125,0,0,-125,3,0,1,116,8, 0,124,3,0,100,23,0,124,1,0,106,16,0,-125,0,0, - -125,3,0,1,116,8,0,124,3,0,100,24,0,116,0,0, - 106,17,0,-125,0,0,-125,3,0,1,124,7,0,100,8,0, - 107,2,0,114,120,2,116,18,0,106,19,0,100,25,0,-125, + -125,3,0,1,116,8,0,124,3,0,100,24,0,116,1,0, + 106,17,0,106,18,0,-125,3,0,1,124,7,0,100,8,0, + 107,2,0,114,120,2,116,19,0,106,20,0,100,25,0,-125, 1,0,1,110,0,0,100,26,0,83,40,28,0,0,0,117, -6,0,0,0,83,101,116,117,112,32,105,109,112,111,114,116, 108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,103, @@ -3670,7 +3670,7 @@ 117,3,0,0,0,95,105,111,117,9,0,0,0,95,119,97, 114,110,105,110,103,115,117,8,0,0,0,98,117,105,108,116, 105,110,115,117,7,0,0,0,109,97,114,115,104,97,108,40, - 20,0,0,0,117,4,0,0,0,95,105,109,112,117,3,0, + 21,0,0,0,117,4,0,0,0,95,105,109,112,117,3,0, 0,0,115,121,115,117,7,0,0,0,104,97,115,97,116,116, 114,117,15,0,0,0,66,117,105,108,116,105,110,73,109,112, 111,114,116,101,114,117,10,0,0,0,95,95,108,111,97,100, @@ -3684,163 +3684,165 @@ 117,4,0,0,0,78,111,110,101,117,3,0,0,0,115,101, 116,117,16,0,0,0,95,109,97,107,101,95,114,101,108,97, 120,95,99,97,115,101,117,9,0,0,0,103,101,116,95,109, - 97,103,105,99,117,7,0,0,0,103,101,116,95,116,97,103, - 117,15,0,0,0,83,79,85,82,67,69,95,83,85,70,70, - 73,88,69,83,117,6,0,0,0,97,112,112,101,110,100,40, - 13,0,0,0,117,10,0,0,0,115,121,115,95,109,111,100, - 117,108,101,117,11,0,0,0,95,105,109,112,95,109,111,100, - 117,108,101,117,6,0,0,0,109,111,100,117,108,101,117,11, - 0,0,0,115,101,108,102,95,109,111,100,117,108,101,117,12, - 0,0,0,98,117,105,108,116,105,110,95,110,97,109,101,117, - 14,0,0,0,98,117,105,108,116,105,110,95,109,111,100,117, - 108,101,117,10,0,0,0,111,115,95,100,101,116,97,105,108, - 115,117,10,0,0,0,98,117,105,108,116,105,110,95,111,115, - 117,15,0,0,0,112,97,116,104,95,115,101,112,97,114,97, - 116,111,114,115,117,8,0,0,0,112,97,116,104,95,115,101, - 112,117,9,0,0,0,111,115,95,109,111,100,117,108,101,117, - 13,0,0,0,116,104,114,101,97,100,95,109,111,100,117,108, - 101,117,14,0,0,0,119,101,97,107,114,101,102,95,109,111, - 100,117,108,101,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,60,102,114,111,122,101,110,32,105,109,112,111,114, - 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,62, - 117,6,0,0,0,95,115,101,116,117,112,110,5,0,0,115, - 82,0,0,0,0,9,6,1,6,2,19,1,15,1,16,2, - 13,1,13,1,15,1,18,2,13,1,20,2,48,1,19,2, - 31,1,10,1,15,1,13,1,4,2,3,1,15,2,27,1, - 13,1,5,1,13,1,12,2,12,2,3,1,19,1,13,2, - 11,1,15,2,16,1,16,1,16,1,16,1,22,2,19,1, - 22,1,22,1,12,1,117,6,0,0,0,95,115,101,116,117, - 112,99,2,0,0,0,0,0,0,0,6,0,0,0,4,0, - 0,0,67,0,0,0,115,-120,0,0,0,116,0,0,124,0, - 0,124,1,0,-125,2,0,1,116,1,0,124,1,0,106,2, - 0,-125,0,0,100,2,0,102,3,0,125,2,0,116,4,0, - 116,5,0,100,3,0,102,3,0,125,3,0,116,7,0,116, - 8,0,100,3,0,102,3,0,125,4,0,124,2,0,124,3, - 0,124,4,0,103,3,0,125,5,0,116,9,0,106,10,0, - 106,11,0,116,12,0,106,13,0,124,5,0,-116,0,0,103, - 1,0,-125,1,0,1,116,9,0,106,14,0,106,11,0,116, - 15,0,116,16,0,116,17,0,103,3,0,-125,1,0,1,100, - 1,0,83,40,4,0,0,0,117,50,0,0,0,73,110,115, - 116,97,108,108,32,105,109,112,111,114,116,108,105,98,32,97, - 115,32,116,104,101,32,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,32,111,102,32,105,109,112,111,114,116,46,78, - 70,84,40,18,0,0,0,117,6,0,0,0,95,115,101,116, - 117,112,117,19,0,0,0,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,117,18,0,0,0,101, - 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, - 115,117,5,0,0,0,70,97,108,115,101,117,16,0,0,0, - 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, - 117,15,0,0,0,83,79,85,82,67,69,95,83,85,70,70, - 73,88,69,83,117,4,0,0,0,84,114,117,101,117,20,0, - 0,0,83,111,117,114,99,101,108,101,115,115,70,105,108,101, - 76,111,97,100,101,114,117,17,0,0,0,66,89,84,69,67, - 79,68,69,95,83,85,70,70,73,88,69,83,117,3,0,0, - 0,115,121,115,117,10,0,0,0,112,97,116,104,95,104,111, - 111,107,115,117,6,0,0,0,101,120,116,101,110,100,117,10, - 0,0,0,70,105,108,101,70,105,110,100,101,114,117,9,0, - 0,0,112,97,116,104,95,104,111,111,107,117,9,0,0,0, - 109,101,116,97,95,112,97,116,104,117,15,0,0,0,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,117,14,0, - 0,0,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 117,10,0,0,0,80,97,116,104,70,105,110,100,101,114,40, - 6,0,0,0,117,10,0,0,0,115,121,115,95,109,111,100, - 117,108,101,117,11,0,0,0,95,105,109,112,95,109,111,100, - 117,108,101,117,10,0,0,0,101,120,116,101,110,115,105,111, - 110,115,117,6,0,0,0,115,111,117,114,99,101,117,8,0, - 0,0,98,121,116,101,99,111,100,101,117,17,0,0,0,115, - 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, - 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,60, - 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, - 46,95,98,111,111,116,115,116,114,97,112,62,117,8,0,0, - 0,95,105,110,115,116,97,108,108,-82,5,0,0,115,14,0, - 0,0,0,2,13,1,21,1,15,1,15,1,15,1,28,1, - 117,8,0,0,0,95,105,110,115,116,97,108,108,78,40,3, - 0,0,0,117,3,0,0,0,119,105,110,117,6,0,0,0, - 99,121,103,119,105,110,117,6,0,0,0,100,97,114,119,105, - 110,40,65,0,0,0,117,7,0,0,0,95,95,100,111,99, - 95,95,117,27,0,0,0,95,67,65,83,69,95,73,78,83, - 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, - 77,83,117,16,0,0,0,95,109,97,107,101,95,114,101,108, - 97,120,95,99,97,115,101,117,7,0,0,0,95,119,95,108, - 111,110,103,117,7,0,0,0,95,114,95,108,111,110,103,117, - 10,0,0,0,95,112,97,116,104,95,106,111,105,110,117,11, - 0,0,0,95,112,97,116,104,95,115,112,108,105,116,117,18, - 0,0,0,95,112,97,116,104,95,105,115,95,109,111,100,101, - 95,116,121,112,101,117,12,0,0,0,95,112,97,116,104,95, - 105,115,102,105,108,101,117,11,0,0,0,95,112,97,116,104, - 95,105,115,100,105,114,117,13,0,0,0,95,119,114,105,116, - 101,95,97,116,111,109,105,99,117,5,0,0,0,95,119,114, - 97,112,117,4,0,0,0,116,121,112,101,117,8,0,0,0, - 95,95,99,111,100,101,95,95,117,10,0,0,0,95,99,111, - 100,101,95,116,121,112,101,117,10,0,0,0,110,101,119,95, - 109,111,100,117,108,101,117,13,0,0,0,95,109,111,100,117, - 108,101,95,108,111,99,107,115,117,12,0,0,0,95,98,108, - 111,99,107,105,110,103,95,111,110,117,12,0,0,0,82,117, - 110,116,105,109,101,69,114,114,111,114,117,14,0,0,0,95, - 68,101,97,100,108,111,99,107,69,114,114,111,114,117,11,0, - 0,0,95,77,111,100,117,108,101,76,111,99,107,117,16,0, - 0,0,95,68,117,109,109,121,77,111,100,117,108,101,76,111, - 99,107,117,16,0,0,0,95,103,101,116,95,109,111,100,117, - 108,101,95,108,111,99,107,117,19,0,0,0,95,108,111,99, - 107,95,117,110,108,111,99,107,95,109,111,100,117,108,101,117, - 8,0,0,0,95,80,89,67,65,67,72,69,117,15,0,0, - 0,83,79,85,82,67,69,95,83,85,70,70,73,88,69,83, - 117,23,0,0,0,68,69,66,85,71,95,66,89,84,69,67, - 79,68,69,95,83,85,70,70,73,88,69,83,117,27,0,0, - 0,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, - 79,68,69,95,83,85,70,70,73,88,69,83,117,17,0,0, - 0,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, - 69,83,117,4,0,0,0,78,111,110,101,117,17,0,0,0, - 99,97,99,104,101,95,102,114,111,109,95,115,111,117,114,99, - 101,117,16,0,0,0,95,118,101,114,98,111,115,101,95,109, - 101,115,115,97,103,101,117,11,0,0,0,115,101,116,95,112, - 97,99,107,97,103,101,117,10,0,0,0,115,101,116,95,108, - 111,97,100,101,114,117,17,0,0,0,109,111,100,117,108,101, - 95,102,111,114,95,108,111,97,100,101,114,117,11,0,0,0, - 95,99,104,101,99,107,95,110,97,109,101,117,17,0,0,0, - 95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,105, - 110,117,16,0,0,0,95,114,101,113,117,105,114,101,115,95, - 102,114,111,122,101,110,117,15,0,0,0,66,117,105,108,116, - 105,110,73,109,112,111,114,116,101,114,117,14,0,0,0,70, - 114,111,122,101,110,73,109,112,111,114,116,101,114,117,13,0, - 0,0,95,76,111,97,100,101,114,66,97,115,105,99,115,117, - 12,0,0,0,83,111,117,114,99,101,76,111,97,100,101,114, - 117,10,0,0,0,70,105,108,101,76,111,97,100,101,114,117, - 16,0,0,0,83,111,117,114,99,101,70,105,108,101,76,111, - 97,100,101,114,117,20,0,0,0,83,111,117,114,99,101,108, - 101,115,115,70,105,108,101,76,111,97,100,101,114,117,19,0, - 0,0,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,117,14,0,0,0,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,117,15,0,0,0,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,117,10,0,0, - 0,80,97,116,104,70,105,110,100,101,114,117,10,0,0,0, - 70,105,108,101,70,105,110,100,101,114,117,18,0,0,0,95, - 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, - 116,117,13,0,0,0,95,114,101,115,111,108,118,101,95,110, - 97,109,101,117,12,0,0,0,95,102,105,110,100,95,109,111, - 100,117,108,101,117,13,0,0,0,95,115,97,110,105,116,121, - 95,99,104,101,99,107,117,8,0,0,0,95,69,82,82,95, - 77,83,71,117,23,0,0,0,95,102,105,110,100,95,97,110, - 100,95,108,111,97,100,95,117,110,108,111,99,107,101,100,117, - 14,0,0,0,95,102,105,110,100,95,97,110,100,95,108,111, - 97,100,117,11,0,0,0,95,103,99,100,95,105,109,112,111, - 114,116,117,16,0,0,0,95,104,97,110,100,108,101,95,102, - 114,111,109,108,105,115,116,117,17,0,0,0,95,99,97,108, - 99,95,95,95,112,97,99,107,97,103,101,95,95,117,10,0, - 0,0,95,95,105,109,112,111,114,116,95,95,117,13,0,0, - 0,95,77,65,71,73,67,95,78,85,77,66,69,82,117,4, - 0,0,0,95,84,65,71,117,6,0,0,0,95,115,101,116, - 117,112,117,8,0,0,0,95,105,110,115,116,97,108,108,40, - 0,0,0,0,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,60,102,114,111,122,101,110,32,105,109,112,111,114, - 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,62, - 117,8,0,0,0,60,109,111,100,117,108,101,62,8,0,0, - 0,115,120,0,0,0,6,21,6,3,12,13,12,16,12,13, - 12,12,12,12,12,10,12,6,12,7,12,21,12,8,15,3, - 12,12,6,2,6,3,22,4,19,68,19,23,12,17,12,21, - 6,2,9,2,9,1,9,2,6,4,15,22,12,8,12,13, - 12,11,12,51,12,18,12,11,12,13,19,57,19,54,19,79, - 22,111,19,29,25,38,25,24,19,40,19,55,19,18,19,81, - 19,-127,19,13,12,9,12,17,12,17,6,2,12,46,12,13, - 18,25,12,23,12,15,24,30,6,1,6,3,12,64, + 97,103,105,99,117,14,0,0,0,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,117,9,0,0,0,99,97,99,104, + 101,95,116,97,103,117,15,0,0,0,83,79,85,82,67,69, + 95,83,85,70,70,73,88,69,83,117,6,0,0,0,97,112, + 112,101,110,100,40,13,0,0,0,117,10,0,0,0,115,121, + 115,95,109,111,100,117,108,101,117,11,0,0,0,95,105,109, + 112,95,109,111,100,117,108,101,117,6,0,0,0,109,111,100, + 117,108,101,117,11,0,0,0,115,101,108,102,95,109,111,100, + 117,108,101,117,12,0,0,0,98,117,105,108,116,105,110,95, + 110,97,109,101,117,14,0,0,0,98,117,105,108,116,105,110, + 95,109,111,100,117,108,101,117,10,0,0,0,111,115,95,100, + 101,116,97,105,108,115,117,10,0,0,0,98,117,105,108,116, + 105,110,95,111,115,117,15,0,0,0,112,97,116,104,95,115, + 101,112,97,114,97,116,111,114,115,117,8,0,0,0,112,97, + 116,104,95,115,101,112,117,9,0,0,0,111,115,95,109,111, + 100,117,108,101,117,13,0,0,0,116,104,114,101,97,100,95, + 109,111,100,117,108,101,117,14,0,0,0,119,101,97,107,114, + 101,102,95,109,111,100,117,108,101,40,0,0,0,0,40,0, + 0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, + 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, + 116,114,97,112,62,117,6,0,0,0,95,115,101,116,117,112, + 110,5,0,0,115,82,0,0,0,0,9,6,1,6,2,19, + 1,15,1,16,2,13,1,13,1,15,1,18,2,13,1,20, + 2,48,1,19,2,31,1,10,1,15,1,13,1,4,2,3, + 1,15,2,27,1,13,1,5,1,13,1,12,2,12,2,3, + 1,19,1,13,2,11,1,15,2,16,1,16,1,16,1,16, + 1,22,2,19,1,22,1,22,1,12,1,117,6,0,0,0, + 95,115,101,116,117,112,99,2,0,0,0,0,0,0,0,6, + 0,0,0,4,0,0,0,67,0,0,0,115,-120,0,0,0, + 116,0,0,124,0,0,124,1,0,-125,2,0,1,116,1,0, + 124,1,0,106,2,0,-125,0,0,100,2,0,102,3,0,125, + 2,0,116,4,0,116,5,0,100,3,0,102,3,0,125,3, + 0,116,7,0,116,8,0,100,3,0,102,3,0,125,4,0, + 124,2,0,124,3,0,124,4,0,103,3,0,125,5,0,116, + 9,0,106,10,0,106,11,0,116,12,0,106,13,0,124,5, + 0,-116,0,0,103,1,0,-125,1,0,1,116,9,0,106,14, + 0,106,11,0,116,15,0,116,16,0,116,17,0,103,3,0, + -125,1,0,1,100,1,0,83,40,4,0,0,0,117,50,0, + 0,0,73,110,115,116,97,108,108,32,105,109,112,111,114,116, + 108,105,98,32,97,115,32,116,104,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112, + 111,114,116,46,78,70,84,40,18,0,0,0,117,6,0,0, + 0,95,115,101,116,117,112,117,19,0,0,0,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,117, + 18,0,0,0,101,120,116,101,110,115,105,111,110,95,115,117, + 102,102,105,120,101,115,117,5,0,0,0,70,97,108,115,101, + 117,16,0,0,0,83,111,117,114,99,101,70,105,108,101,76, + 111,97,100,101,114,117,15,0,0,0,83,79,85,82,67,69, + 95,83,85,70,70,73,88,69,83,117,4,0,0,0,84,114, + 117,101,117,20,0,0,0,83,111,117,114,99,101,108,101,115, + 115,70,105,108,101,76,111,97,100,101,114,117,17,0,0,0, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,117,3,0,0,0,115,121,115,117,10,0,0,0,112,97, + 116,104,95,104,111,111,107,115,117,6,0,0,0,101,120,116, + 101,110,100,117,10,0,0,0,70,105,108,101,70,105,110,100, + 101,114,117,9,0,0,0,112,97,116,104,95,104,111,111,107, + 117,9,0,0,0,109,101,116,97,95,112,97,116,104,117,15, + 0,0,0,66,117,105,108,116,105,110,73,109,112,111,114,116, + 101,114,117,14,0,0,0,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,117,10,0,0,0,80,97,116,104,70,105, + 110,100,101,114,40,6,0,0,0,117,10,0,0,0,115,121, + 115,95,109,111,100,117,108,101,117,11,0,0,0,95,105,109, + 112,95,109,111,100,117,108,101,117,10,0,0,0,101,120,116, + 101,110,115,105,111,110,115,117,6,0,0,0,115,111,117,114, + 99,101,117,8,0,0,0,98,121,116,101,99,111,100,101,117, + 17,0,0,0,115,117,112,112,111,114,116,101,100,95,108,111, + 97,100,101,114,115,40,0,0,0,0,40,0,0,0,0,117, + 29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,111, + 114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,112, + 62,117,8,0,0,0,95,105,110,115,116,97,108,108,-82,5, + 0,0,115,14,0,0,0,0,2,13,1,21,1,15,1,15, + 1,15,1,28,1,117,8,0,0,0,95,105,110,115,116,97, + 108,108,78,40,3,0,0,0,117,3,0,0,0,119,105,110, + 117,6,0,0,0,99,121,103,119,105,110,117,6,0,0,0, + 100,97,114,119,105,110,40,65,0,0,0,117,7,0,0,0, + 95,95,100,111,99,95,95,117,27,0,0,0,95,67,65,83, + 69,95,73,78,83,69,78,83,73,84,73,86,69,95,80,76, + 65,84,70,79,82,77,83,117,16,0,0,0,95,109,97,107, + 101,95,114,101,108,97,120,95,99,97,115,101,117,7,0,0, + 0,95,119,95,108,111,110,103,117,7,0,0,0,95,114,95, + 108,111,110,103,117,10,0,0,0,95,112,97,116,104,95,106, + 111,105,110,117,11,0,0,0,95,112,97,116,104,95,115,112, + 108,105,116,117,18,0,0,0,95,112,97,116,104,95,105,115, + 95,109,111,100,101,95,116,121,112,101,117,12,0,0,0,95, + 112,97,116,104,95,105,115,102,105,108,101,117,11,0,0,0, + 95,112,97,116,104,95,105,115,100,105,114,117,13,0,0,0, + 95,119,114,105,116,101,95,97,116,111,109,105,99,117,5,0, + 0,0,95,119,114,97,112,117,4,0,0,0,116,121,112,101, + 117,8,0,0,0,95,95,99,111,100,101,95,95,117,10,0, + 0,0,95,99,111,100,101,95,116,121,112,101,117,10,0,0, + 0,110,101,119,95,109,111,100,117,108,101,117,13,0,0,0, + 95,109,111,100,117,108,101,95,108,111,99,107,115,117,12,0, + 0,0,95,98,108,111,99,107,105,110,103,95,111,110,117,12, + 0,0,0,82,117,110,116,105,109,101,69,114,114,111,114,117, + 14,0,0,0,95,68,101,97,100,108,111,99,107,69,114,114, + 111,114,117,11,0,0,0,95,77,111,100,117,108,101,76,111, + 99,107,117,16,0,0,0,95,68,117,109,109,121,77,111,100, + 117,108,101,76,111,99,107,117,16,0,0,0,95,103,101,116, + 95,109,111,100,117,108,101,95,108,111,99,107,117,19,0,0, + 0,95,108,111,99,107,95,117,110,108,111,99,107,95,109,111, + 100,117,108,101,117,8,0,0,0,95,80,89,67,65,67,72, + 69,117,15,0,0,0,83,79,85,82,67,69,95,83,85,70, + 70,73,88,69,83,117,23,0,0,0,68,69,66,85,71,95, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,117,27,0,0,0,79,80,84,73,77,73,90,69,68,95, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,117,17,0,0,0,66,89,84,69,67,79,68,69,95,83, + 85,70,70,73,88,69,83,117,4,0,0,0,78,111,110,101, + 117,17,0,0,0,99,97,99,104,101,95,102,114,111,109,95, + 115,111,117,114,99,101,117,16,0,0,0,95,118,101,114,98, + 111,115,101,95,109,101,115,115,97,103,101,117,11,0,0,0, + 115,101,116,95,112,97,99,107,97,103,101,117,10,0,0,0, + 115,101,116,95,108,111,97,100,101,114,117,17,0,0,0,109, + 111,100,117,108,101,95,102,111,114,95,108,111,97,100,101,114, + 117,11,0,0,0,95,99,104,101,99,107,95,110,97,109,101, + 117,17,0,0,0,95,114,101,113,117,105,114,101,115,95,98, + 117,105,108,116,105,110,117,16,0,0,0,95,114,101,113,117, + 105,114,101,115,95,102,114,111,122,101,110,117,15,0,0,0, + 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,117, + 14,0,0,0,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,117,13,0,0,0,95,76,111,97,100,101,114,66,97, + 115,105,99,115,117,12,0,0,0,83,111,117,114,99,101,76, + 111,97,100,101,114,117,10,0,0,0,70,105,108,101,76,111, + 97,100,101,114,117,16,0,0,0,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,117,20,0,0,0,83,111, + 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, + 101,114,117,19,0,0,0,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,117,14,0,0,0,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,117,15,0, + 0,0,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,117,10,0,0,0,80,97,116,104,70,105,110,100,101,114, + 117,10,0,0,0,70,105,108,101,70,105,110,100,101,114,117, + 18,0,0,0,95,73,109,112,111,114,116,76,111,99,107,67, + 111,110,116,101,120,116,117,13,0,0,0,95,114,101,115,111, + 108,118,101,95,110,97,109,101,117,12,0,0,0,95,102,105, + 110,100,95,109,111,100,117,108,101,117,13,0,0,0,95,115, + 97,110,105,116,121,95,99,104,101,99,107,117,8,0,0,0, + 95,69,82,82,95,77,83,71,117,23,0,0,0,95,102,105, + 110,100,95,97,110,100,95,108,111,97,100,95,117,110,108,111, + 99,107,101,100,117,14,0,0,0,95,102,105,110,100,95,97, + 110,100,95,108,111,97,100,117,11,0,0,0,95,103,99,100, + 95,105,109,112,111,114,116,117,16,0,0,0,95,104,97,110, + 100,108,101,95,102,114,111,109,108,105,115,116,117,17,0,0, + 0,95,99,97,108,99,95,95,95,112,97,99,107,97,103,101, + 95,95,117,10,0,0,0,95,95,105,109,112,111,114,116,95, + 95,117,13,0,0,0,95,77,65,71,73,67,95,78,85,77, + 66,69,82,117,4,0,0,0,95,84,65,71,117,6,0,0, + 0,95,115,101,116,117,112,117,8,0,0,0,95,105,110,115, + 116,97,108,108,40,0,0,0,0,40,0,0,0,0,40,0, + 0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, + 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, + 116,114,97,112,62,117,8,0,0,0,60,109,111,100,117,108, + 101,62,8,0,0,0,115,120,0,0,0,6,21,6,3,12, + 13,12,16,12,13,12,12,12,12,12,10,12,6,12,7,12, + 21,12,8,15,3,12,12,6,2,6,3,22,4,19,68,19, + 23,12,17,12,21,6,2,9,2,9,1,9,2,6,4,15, + 22,12,8,12,13,12,11,12,51,12,18,12,11,12,13,19, + 57,19,54,19,79,22,111,19,29,25,38,25,24,19,40,19, + 55,19,18,19,81,19,-127,19,13,12,9,12,17,12,17,6, + 2,12,46,12,13,18,25,12,23,12,15,24,30,6,1,6, + 3,12,64, };