]> granicus.if.org Git - python/commitdiff
Issue #15166: Re-implement imp.get_tag() using sys.implementation.
authorBrett Cannon <brett@python.org>
Mon, 2 Jul 2012 19:13:11 +0000 (15:13 -0400)
committerBrett Cannon <brett@python.org>
Mon, 2 Jul 2012 19:13:11 +0000 (15:13 -0400)
Also eliminates some C code in Python/import.c as well.

Patch by Eric Snow with verification by comparing against another
patch from Jeff Knupp.

Lib/imp.py
Lib/importlib/_bootstrap.py
Misc/NEWS
Python/import.c
Python/importlib.h

index 8c89237f07b1a6ab532b06e1f11e6e608251ed1e..fcfd3d36ee1a8cc574612868d8932e3bf3f23c73 100644 (file)
@@ -11,7 +11,7 @@ from _imp import (lock_held, acquire_lock, release_lock,
                   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 @@ PY_CODERESOURCE = 8
 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',
index 36c0e88cacec3d9e9d55fd7c9b73a4e4019b7332..21af7ac1e824907fa41833720ad784a746cd049c 100644 (file)
@@ -1452,7 +1452,7 @@ def _setup(sys_module, _imp_module):
     # 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')
 
index 8c4aad2b6ba3ef4246c08c544fdfab0b154937eb..cba8c416e28057934fc3350fb808e6251b938ea2 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #15166: Implement imp.get_tag() using sys.implementation.cache_tag.
+
 - Issue #15210: Catch KeyError when imprortlib.__init__ can't find
   _frozen_importlib in sys.modules, not ImportError.
 
index 701a6e9eb5a0804a0a2040e239f78b9e8fafad52..c63f760d07f624b45155a324aa3940919620e62c 100644 (file)
@@ -112,23 +112,11 @@ typedef unsigned short mode_t;
 /* 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 @@ PyImport_GetMagicNumber(void)
 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
@@ -1846,12 +1847,6 @@ imp_get_magic(PyObject *self, PyObject *noargs)
     return imp_make_magic(pyc_magic);
 }
 
-static PyObject *
-imp_get_tag(PyObject *self, PyObject *noargs)
-{
-    return PyUnicode_FromString(pyc_tag);
-}
-
 static PyObject *
 imp_extension_suffixes(PyObject *self, PyObject *noargs)
 {
@@ -2002,10 +1997,6 @@ PyDoc_STRVAR(doc_get_magic,
 "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 @@ On platforms without threads, this function does nothing.");
 
 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},
index 4cdb53453c1c19400e618a717a8d567137168566..8a73a7d978549d311d6e735cc4088fd6b8698130 100644 (file)
@@ -3051,8 +3051,8 @@ unsigned char _Py_M__importlib[] = {
     99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,
     0,19,0,0,0,115,46,0,0,0,116,0,0,124,0,0,
     131,1,0,115,33,0,116,1,0,100,1,0,100,2,0,124,
-    0,0,131,1,1,130,1,0,110,0,0,136,1,0,124,0,
-    0,136,0,0,140,1,0,83,40,3,0,0,0,117,45,0,
+    0,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0,
+    0,136,1,0,140,1,0,83,40,3,0,0,0,117,45,0,
     0,0,80,97,116,104,32,104,111,111,107,32,102,111,114,32,
     105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,
     101,114,121,46,70,105,108,101,70,105,110,100,101,114,46,117,
@@ -3062,8 +3062,8 @@ unsigned char _Py_M__importlib[] = {
     117,11,0,0,0,95,112,97,116,104,95,105,115,100,105,114,
     117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114,
     40,1,0,0,0,117,4,0,0,0,112,97,116,104,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,40,0,
+    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,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,24,0,0,0,112,97,116,104,95,104,
@@ -3077,9 +3077,9 @@ unsigned char _Py_M__importlib[] = {
     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,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,
+    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,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,134,4,0,0,115,4,0,0,0,0,10,21,6,
@@ -3635,8 +3635,8 @@ unsigned char _Py_M__importlib[] = {
     124,3,0,100,22,0,116,15,0,131,0,0,131,3,0,1,
     116,8,0,124,3,0,100,23,0,124,1,0,106,16,0,131,
     0,0,131,3,0,1,116,8,0,124,3,0,100,24,0,116,
-    0,0,106,17,0,131,0,0,131,3,0,1,124,7,0,100,
-    8,0,107,2,0,114,120,2,116,18,0,106,19,0,100,25,
+    1,0,106,17,0,106,18,0,131,3,0,1,124,7,0,100,
+    8,0,107,2,0,114,120,2,116,19,0,106,20,0,100,25,
     0,131,1,0,1,110,0,0,100,26,0,83,40,28,0,0,
     0,117,250,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,
@@ -3687,7 +3687,7 @@ unsigned char _Py_M__importlib[] = {
     0,0,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,
+    108,40,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,
@@ -3701,163 +3701,165 @@ unsigned char _Py_M__importlib[] = {
     111,114,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,116,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,136,0,0,0,116,0,0,
-    124,0,0,124,1,0,131,2,0,1,116,1,0,124,1,0,
-    106,2,0,131,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,140,0,
-    0,103,1,0,131,1,0,1,116,9,0,106,14,0,106,11,
-    0,116,15,0,116,16,0,116,17,0,103,3,0,131,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,180,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,135,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,
+    95,109,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,116,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,136,0,
+    0,0,116,0,0,124,0,0,124,1,0,131,2,0,1,116,
+    1,0,124,1,0,106,2,0,131,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,140,0,0,103,1,0,131,1,0,1,116,9,0,
+    106,14,0,106,11,0,116,15,0,116,16,0,116,17,0,103,
+    3,0,131,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,
+    180,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,135,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,
 };