Issue #26110: Add LOAD_METHOD/CALL_METHOD opcodes.

Special thanks to INADA Naoki for pushing the patch through
the last mile, Serhiy Storchaka for reviewing the code, and to
Victor Stinner for suggesting the idea (originally implemented
in the PyPy project).
This commit is contained in:
Yury Selivanov 2016-12-13 19:03:51 -05:00
parent e6bb53bf61
commit f2392133eb
13 changed files with 747 additions and 483 deletions

View File

@ -92,6 +92,11 @@ Improved Modules
Optimizations
=============
* Added two new opcodes: ``LOAD_METHOD`` and ``CALL_METHOD`` to avoid
instantiation of bound method objects for method calls, which results
in method calls being faster up to 20%.
(Contributed by Yury Selivanov and INADA Naoki in :issue:`26110`.)
Build and C API Changes
=======================

View File

@ -126,6 +126,8 @@ extern "C" {
#define BUILD_CONST_KEY_MAP 156
#define BUILD_STRING 157
#define BUILD_TUPLE_UNPACK_WITH_CALL 158
#define LOAD_METHOD 160
#define CALL_METHOD 161
/* EXCEPT_HANDLER is a special, implicit block type which is created when
entering an except handler. It is not an opcode but we define it here

View File

@ -240,6 +240,7 @@ _code_type = type(_write_atomic.__code__)
# Python 3.6b1 3377 (set __class__ cell from type.__new__ #23722)
# Python 3.6b2 3378 (add BUILD_TUPLE_UNPACK_WITH_CALL #28257)
# Python 3.6rc1 3379 (more thorough __class__ validation #23722)
# Python 3.7a0 3390 (add LOAD_METHOD and CALL_METHOD opcodes)
#
# MAGIC must change whenever the bytecode emitted by the compiler may no
# longer be understood by older implementations of the eval loop (usually
@ -248,7 +249,7 @@ _code_type = type(_write_atomic.__code__)
# Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
# in PC/launcher.c must also be updated.
MAGIC_NUMBER = (3379).to_bytes(2, 'little') + b'\r\n'
MAGIC_NUMBER = (3390).to_bytes(2, 'little') + b'\r\n'
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
_PYCACHE = '__pycache__'

View File

@ -212,4 +212,7 @@ def_op('BUILD_CONST_KEY_MAP', 156)
def_op('BUILD_STRING', 157)
def_op('BUILD_TUPLE_UNPACK_WITH_CALL', 158)
name_op('LOAD_METHOD', 160)
def_op('CALL_METHOD', 161)
del def_op, name_op, jrel_op, jabs_op

View File

@ -207,6 +207,33 @@ SyntaxError: Generator expression must be parenthesized if not sole argument
... # doctest: +ELLIPSIS
() [('a000', 0), ('a001', 1), ('a002', 2), ..., ('a298', 298), ('a299', 299)]
>>> class C:
... def meth(self, *args):
... return args
>>> obj = C()
>>> obj.meth(
... 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, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
... 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
... 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
... 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
... 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
... 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
... 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
... 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
... 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
... 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
... 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
... 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
... 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
... 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
... 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
... 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
... 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
... 290, 291, 292, 293, 294, 295, 296, 297, 298, 299) # doctest: +ELLIPSIS
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 297, 298, 299)
>>> f(lambda x: x[0] = 3)
Traceback (most recent call last):
SyntaxError: lambda cannot contain assignment

View File

@ -174,6 +174,9 @@ Core and Builtins
- Issue #28721: Fix asynchronous generators aclose() and athrow() to
handle StopAsyncIteration propagation properly.
- Issue #26110: Speed-up method calls: add LOAD_METHOD and CALL_METHOD
opcodes.
Library
-------

View File

@ -1025,11 +1025,99 @@ _PyObject_NextNotImplemented(PyObject *self)
return NULL;
}
/* Generic GetAttr functions - put these in your tp_[gs]etattro slot */
/* Specialized version of _PyObject_GenericGetAttrWithDict
specifically for the LOAD_METHOD opcode.
Return 1 if a method is found, 0 if it's a regular attribute
from __dict__ or something returned by using a descriptor
protocol.
`method` will point to the resolved attribute or NULL. In the
latter case, an error will be set.
*/
int
_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method)
{
PyTypeObject *tp = Py_TYPE(obj);
PyObject *descr;
descrgetfunc f = NULL;
PyObject **dictptr, *dict;
PyObject *attr;
int meth_found = 0;
assert(*method == NULL);
if (Py_TYPE(obj)->tp_getattro != PyObject_GenericGetAttr
|| !PyUnicode_Check(name)) {
*method = PyObject_GetAttr(obj, name);
return 0;
}
if (tp->tp_dict == NULL && PyType_Ready(tp) < 0)
return 0;
descr = _PyType_Lookup(tp, name);
if (descr != NULL) {
Py_INCREF(descr);
if (PyFunction_Check(descr)) {
/* A python method. */
meth_found = 1;
} else {
f = descr->ob_type->tp_descr_get;
if (f != NULL && PyDescr_IsData(descr)) {
*method = f(descr, obj, (PyObject *)obj->ob_type);
Py_DECREF(descr);
return 0;
}
}
}
dictptr = _PyObject_GetDictPtr(obj);
if (dictptr != NULL && (dict = *dictptr) != NULL) {
Py_INCREF(dict);
attr = PyDict_GetItem(dict, name);
if (attr != NULL) {
Py_INCREF(attr);
*method = attr;
Py_DECREF(dict);
Py_XDECREF(descr);
return 0;
}
Py_DECREF(dict);
}
if (meth_found) {
*method = descr;
return 1;
}
if (f != NULL) {
*method = f(descr, obj, (PyObject *)Py_TYPE(obj));
Py_DECREF(descr);
return 0;
}
if (descr != NULL) {
*method = descr;
return 0;
}
PyErr_Format(PyExc_AttributeError,
"'%.50s' object has no attribute '%U'",
tp->tp_name, name);
return 0;
}
/* Generic GetAttr functions - put these in your tp_[gs]etattro slot. */
PyObject *
_PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name, PyObject *dict)
{
/* Make sure the logic of _PyObject_GetMethod is in sync with
this method.
*/
PyTypeObject *tp = Py_TYPE(obj);
PyObject *descr = NULL;
PyObject *res = NULL;

View File

@ -1090,6 +1090,7 @@ static PYC_MAGIC magic_values[] = {
{ 3250, 3310, L"3.4" },
{ 3320, 3351, L"3.5" },
{ 3360, 3379, L"3.6" },
{ 3390, 3399, L"3.7" },
{ 0 }
};

View File

@ -30,6 +30,9 @@
#define CHECKEXC 1 /* Double-check exception checking */
#endif
/* Private API for the LOAD_METHOD opcode. */
extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **);
typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
/* Forward declarations */
@ -3225,6 +3228,100 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag)
DISPATCH();
}
TARGET(LOAD_METHOD) {
/* Designed to work in tamdem with CALL_METHOD. */
PyObject *name = GETITEM(names, oparg);
PyObject *obj = TOP();
PyObject *meth = NULL;
int meth_found = _PyObject_GetMethod(obj, name, &meth);
SET_TOP(meth); /* Replace `obj` on top; OK if NULL. */
if (meth == NULL) {
/* Most likely attribute wasn't found. */
Py_DECREF(obj);
goto error;
}
if (meth_found) {
/* The method object is now on top of the stack.
Push `obj` back to the stack, so that the stack
layout would be:
method | obj | arg1 | ... | argN
*/
PUSH(obj);
}
else {
/* Not a method (but a regular attr, or something
was returned by a descriptor protocol). Push
NULL to the top of the stack, to signal
CALL_METHOD that it's not a method call.
*/
Py_DECREF(obj);
PUSH(NULL);
}
DISPATCH();
}
TARGET(CALL_METHOD) {
/* Designed to work in tamdem with LOAD_METHOD. */
PyObject **sp, *res, *obj;
sp = stack_pointer;
obj = PEEK(oparg + 1);
if (obj == NULL) {
/* `obj` is NULL when LOAD_METHOD thinks that it's not
a method call. Swap the NULL and callable.
Stack layout:
... | callable | NULL | arg1 | ... | argN
^- TOP()
^- (-oparg)
^- (-oparg-1)
^- (-oparg-2)
after the next line it will be:
... | callable | callable | arg1 | ... | argN
^- TOP()
^- (-oparg)
^- (-oparg-1)
^- (-oparg-2)
Right side `callable` will be POPed by call_funtion.
Left side `callable` will be POPed manually later
(one of "callbale" refs on the stack is borrowed.)
*/
SET_VALUE(oparg + 1, PEEK(oparg + 2));
res = call_function(&sp, oparg, NULL);
stack_pointer = sp;
(void)POP(); /* POP the left side callable. */
}
else {
/* This is a method call. Stack layout:
... | method | obj | arg1 | ... | argN
^- TOP()
^- (-oparg)
^- (-oparg-1)
`obj` and `method` will be POPed by call_function.
We'll be passing `oparg + 1` to call_function, to
make it accept the `obj` as a first argument.
*/
res = call_function(&sp, oparg + 1, NULL);
stack_pointer = sp;
}
PUSH(res);
if (res == NULL)
goto error;
DISPATCH();
}
PREDICTED(CALL_FUNCTION);
TARGET(CALL_FUNCTION) {
PyObject **sp, *res;

View File

@ -1040,6 +1040,8 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg)
return -oparg;
case CALL_FUNCTION:
return -oparg;
case CALL_METHOD:
return -oparg-1;
case CALL_FUNCTION_KW:
return -oparg-1;
case CALL_FUNCTION_EX:
@ -1078,6 +1080,8 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg)
/* If there's a fmt_spec on the stack, we go from 2->1,
else 1->1. */
return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0;
case LOAD_METHOD:
return 1;
default:
return PY_INVALID_STACK_EFFECT;
}
@ -3399,9 +3403,42 @@ compiler_compare(struct compiler *c, expr_ty e)
return 1;
}
static int
maybe_optimize_method_call(struct compiler *c, expr_ty e)
{
Py_ssize_t argsl, i;
expr_ty meth = e->v.Call.func;
asdl_seq *args = e->v.Call.args;
/* Check that the call node is an attribute access, and that
the call doesn't have keyword parameters. */
if (meth->kind != Attribute_kind || meth->v.Attribute.ctx != Load ||
asdl_seq_LEN(e->v.Call.keywords))
return -1;
/* Check that there are no *varargs types of arguments. */
argsl = asdl_seq_LEN(args);
for (i = 0; i < argsl; i++) {
expr_ty elt = asdl_seq_GET(args, i);
if (elt->kind == Starred_kind) {
return -1;
}
}
/* Alright, we can optimize the code. */
VISIT(c, expr, meth->v.Attribute.value);
ADDOP_NAME(c, LOAD_METHOD, meth->v.Attribute.attr, names);
VISIT_SEQ(c, expr, e->v.Call.args);
ADDOP_I(c, CALL_METHOD, asdl_seq_LEN(e->v.Call.args));
return 1;
}
static int
compiler_call(struct compiler *c, expr_ty e)
{
if (maybe_optimize_method_call(c, e) > 0)
return 1;
VISIT(c, expr, e->v.Call.func);
return compiler_call_helper(c, 0,
e->v.Call.args,

View File

@ -56,7 +56,7 @@ const unsigned char _Py_M__importlib[] = {
67,0,0,0,115,60,0,0,0,120,40,100,6,68,0,93,
32,125,2,116,0,124,1,124,2,131,2,114,6,116,1,124,
0,124,2,116,2,124,1,124,2,131,2,131,3,1,0,113,
6,87,0,124,0,106,3,106,4,124,1,106,3,131,1,1,
6,87,0,124,0,106,3,160,4,124,1,106,3,161,1,1,
0,100,5,83,0,41,7,122,47,83,105,109,112,108,101,32,
115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102,
117,110,99,116,111,111,108,115,46,117,112,100,97,116,101,95,
@ -105,8 +105,8 @@ const unsigned char _Py_M__importlib[] = {
32,32,116,97,107,101,32,108,111,99,107,115,32,66,32,116,
104,101,110,32,65,41,46,10,32,32,32,32,99,2,0,0,
0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,
0,115,48,0,0,0,116,0,106,1,131,0,124,0,95,2,
116,0,106,1,131,0,124,0,95,3,124,1,124,0,95,4,
0,115,48,0,0,0,116,0,160,1,161,0,124,0,95,2,
116,0,160,1,161,0,124,0,95,3,124,1,124,0,95,4,
100,0,124,0,95,5,100,1,124,0,95,6,100,1,124,0,
95,7,100,0,83,0,41,2,78,233,0,0,0,0,41,8,
218,7,95,116,104,114,101,97,100,90,13,97,108,108,111,99,
@ -119,9 +119,9 @@ const unsigned char _Py_M__importlib[] = {
0,0,1,10,1,10,1,6,1,6,1,6,1,122,20,95,
77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105,
116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0,
2,0,0,0,67,0,0,0,115,64,0,0,0,116,0,106,
1,131,0,125,1,124,0,106,2,125,2,120,44,116,3,106,
4,124,2,131,1,125,3,124,3,100,0,107,8,114,38,100,
3,0,0,0,67,0,0,0,115,64,0,0,0,116,0,160,
1,161,0,125,1,124,0,106,2,125,2,120,44,116,3,160,
4,124,2,161,1,125,3,124,3,100,0,107,8,114,38,100,
1,83,0,124,3,106,2,125,2,124,2,124,1,107,2,114,
16,100,2,83,0,113,16,87,0,100,0,83,0,41,3,78,
70,84,41,5,114,20,0,0,0,218,9,103,101,116,95,105,
@ -134,16 +134,16 @@ const unsigned char _Py_M__importlib[] = {
1,8,1,4,1,6,1,8,1,122,24,95,77,111,100,117,
108,101,76,111,99,107,46,104,97,115,95,100,101,97,100,108,
111,99,107,99,1,0,0,0,0,0,0,0,2,0,0,0,
16,0,0,0,67,0,0,0,115,168,0,0,0,116,0,106,
1,131,0,125,1,124,0,116,2,124,1,60,0,122,138,120,
16,0,0,0,67,0,0,0,115,168,0,0,0,116,0,160,
1,161,0,125,1,124,0,116,2,124,1,60,0,122,138,120,
132,124,0,106,3,143,96,1,0,124,0,106,4,100,1,107,
2,115,48,124,0,106,5,124,1,107,2,114,72,124,1,124,
0,95,5,124,0,4,0,106,4,100,2,55,0,2,0,95,
4,100,3,83,0,124,0,106,6,131,0,114,92,116,7,100,
4,124,0,22,0,131,1,130,1,124,0,106,8,106,9,100,
5,131,1,114,118,124,0,4,0,106,10,100,2,55,0,2,
4,100,3,83,0,124,0,160,6,161,0,114,92,116,7,100,
4,124,0,22,0,131,1,130,1,124,0,106,8,160,9,100,
5,161,1,114,118,124,0,4,0,106,10,100,2,55,0,2,
0,95,10,87,0,100,6,81,0,82,0,88,0,124,0,106,
8,106,9,131,0,1,0,124,0,106,8,106,11,131,0,1,
8,160,9,161,0,1,0,124,0,106,8,160,11,161,0,1,
0,113,20,87,0,87,0,100,6,116,2,124,1,61,0,88,
0,100,6,83,0,41,7,122,185,10,32,32,32,32,32,32,
32,32,65,99,113,117,105,114,101,32,116,104,101,32,109,111,
@ -171,13 +171,13 @@ const unsigned char _Py_M__importlib[] = {
1,24,2,10,1,18,2,122,19,95,77,111,100,117,108,101,
76,111,99,107,46,97,99,113,117,105,114,101,99,1,0,0,
0,0,0,0,0,2,0,0,0,10,0,0,0,67,0,0,
0,115,122,0,0,0,116,0,106,1,131,0,125,1,124,0,
0,115,122,0,0,0,116,0,160,1,161,0,125,1,124,0,
106,2,143,98,1,0,124,0,106,3,124,1,107,3,114,34,
116,4,100,1,131,1,130,1,124,0,106,5,100,2,107,4,
115,48,116,6,130,1,124,0,4,0,106,5,100,3,56,0,
2,0,95,5,124,0,106,5,100,2,107,2,114,108,100,0,
124,0,95,3,124,0,106,7,114,108,124,0,4,0,106,7,
100,3,56,0,2,0,95,7,124,0,106,8,106,9,131,0,
100,3,56,0,2,0,95,7,124,0,106,8,160,9,161,0,
1,0,87,0,100,0,81,0,82,0,88,0,100,0,83,0,
41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101,
97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32,
@ -192,9 +192,9 @@ const unsigned char _Py_M__importlib[] = {
1,8,1,8,1,10,1,8,1,14,1,14,1,10,1,6,
1,6,1,14,1,122,19,95,77,111,100,117,108,101,76,111,
99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0,
0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115,
18,0,0,0,100,1,106,0,124,0,106,1,116,2,124,0,
131,1,131,2,83,0,41,2,78,122,23,95,77,111,100,117,
0,0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,
18,0,0,0,100,1,160,0,124,0,106,1,116,2,124,0,
131,1,161,2,83,0,41,2,78,122,23,95,77,111,100,117,
108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32,
123,125,41,3,218,6,102,111,114,109,97,116,114,15,0,0,
0,218,2,105,100,41,1,114,26,0,0,0,114,10,0,0,
@ -247,9 +247,9 @@ const unsigned char _Py_M__importlib[] = {
0,114,35,0,0,0,131,0,0,0,115,6,0,0,0,0,
1,10,1,8,1,122,24,95,68,117,109,109,121,77,111,100,
117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99,
1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,
67,0,0,0,115,18,0,0,0,100,1,106,0,124,0,106,
1,116,2,124,0,131,1,131,2,83,0,41,2,78,122,28,
1,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,
67,0,0,0,115,18,0,0,0,100,1,160,0,124,0,106,
1,116,2,124,0,131,1,161,2,83,0,41,2,78,122,28,
95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,
40,123,33,114,125,41,32,97,116,32,123,125,41,3,114,38,
0,0,0,114,15,0,0,0,114,39,0,0,0,41,1,114,
@ -277,10 +277,10 @@ const unsigned char _Py_M__importlib[] = {
4,0,0,0,0,1,6,1,122,27,95,77,111,100,117,108,
101,76,111,99,107,77,97,110,97,103,101,114,46,95,95,105,
110,105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,
0,0,10,0,0,0,67,0,0,0,115,42,0,0,0,122,
0,0,11,0,0,0,67,0,0,0,115,42,0,0,0,122,
16,116,0,124,0,106,1,131,1,124,0,95,2,87,0,100,
0,116,3,106,4,131,0,1,0,88,0,124,0,106,2,106,
5,131,0,1,0,100,0,83,0,41,1,78,41,6,218,16,
0,116,3,160,4,161,0,1,0,88,0,124,0,106,2,160,
5,161,0,1,0,100,0,83,0,41,1,78,41,6,218,16,
95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107,
114,43,0,0,0,114,44,0,0,0,218,4,95,105,109,112,
218,12,114,101,108,101,97,115,101,95,108,111,99,107,114,34,
@ -290,8 +290,8 @@ const unsigned char _Py_M__importlib[] = {
1,16,2,10,1,122,28,95,77,111,100,117,108,101,76,111,
99,107,77,97,110,97,103,101,114,46,95,95,101,110,116,101,
114,95,95,99,1,0,0,0,0,0,0,0,3,0,0,0,
1,0,0,0,79,0,0,0,115,14,0,0,0,124,0,106,
0,106,1,131,0,1,0,100,0,83,0,41,1,78,41,2,
2,0,0,0,79,0,0,0,115,14,0,0,0,124,0,106,
0,160,1,161,0,1,0,100,0,83,0,41,1,78,41,2,
114,44,0,0,0,114,35,0,0,0,41,3,114,26,0,0,
0,218,4,97,114,103,115,90,6,107,119,97,114,103,115,114,
10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,
@ -303,14 +303,14 @@ const unsigned char _Py_M__importlib[] = {
0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,
114,11,0,0,0,114,42,0,0,0,140,0,0,0,115,6,
0,0,0,8,2,8,4,8,7,114,42,0,0,0,99,1,
0,0,0,0,0,0,0,3,0,0,0,11,0,0,0,3,
0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,3,
0,0,0,115,106,0,0,0,100,1,125,1,121,14,116,0,
136,0,25,0,131,0,125,1,87,0,110,20,4,0,116,1,
107,10,114,38,1,0,1,0,1,0,89,0,110,2,88,0,
124,1,100,1,107,8,114,102,116,2,100,1,107,8,114,66,
116,3,136,0,131,1,125,1,110,8,116,4,136,0,131,1,
125,1,135,0,102,1,100,2,100,3,132,8,125,2,116,5,
106,6,124,1,124,2,131,2,116,0,136,0,60,0,124,1,
160,6,124,1,124,2,161,2,116,0,136,0,60,0,124,1,
83,0,41,4,122,109,71,101,116,32,111,114,32,99,114,101,
97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108,
111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32,
@ -335,10 +335,10 @@ const unsigned char _Py_M__importlib[] = {
4,1,2,1,14,1,14,1,6,1,8,1,8,1,10,2,
8,1,12,2,16,1,114,45,0,0,0,99,1,0,0,0,
0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,0,
115,62,0,0,0,116,0,124,0,131,1,125,1,116,1,106,
2,131,0,1,0,121,12,124,1,106,3,131,0,1,0,87,
115,62,0,0,0,116,0,124,0,131,1,125,1,116,1,160,
2,161,0,1,0,121,12,124,1,160,3,161,0,1,0,87,
0,110,20,4,0,116,4,107,10,114,48,1,0,1,0,1,
0,89,0,110,10,88,0,124,1,106,5,131,0,1,0,100,
0,89,0,110,10,88,0,124,1,160,5,161,0,1,0,100,
1,83,0,41,2,97,21,1,0,0,82,101,108,101,97,115,
101,32,116,104,101,32,103,108,111,98,97,108,32,105,109,112,
111,114,116,32,108,111,99,107,44,32,97,110,100,32,97,99,
@ -393,8 +393,8 @@ const unsigned char _Py_M__importlib[] = {
58,0,0,0,114,33,0,0,0,41,1,218,9,118,101,114,
98,111,115,105,116,121,99,1,0,0,0,1,0,0,0,3,
0,0,0,5,0,0,0,71,0,0,0,115,54,0,0,0,
116,0,106,1,106,2,124,1,107,5,114,50,124,0,106,3,
100,6,131,1,115,30,100,3,124,0,23,0,125,0,116,4,
116,0,106,1,106,2,124,1,107,5,114,50,124,0,160,3,
100,6,161,1,115,30,100,3,124,0,23,0,125,0,116,4,
124,0,106,5,124,2,142,0,116,0,106,6,100,4,141,2,
1,0,100,5,83,0,41,7,122,61,80,114,105,110,116,32,
116,104,101,32,109,101,115,115,97,103,101,32,116,111,32,115,
@ -420,7 +420,7 @@ const unsigned char _Py_M__importlib[] = {
117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0,
0,2,0,0,0,4,0,0,0,19,0,0,0,115,38,0,
0,0,124,1,116,0,106,1,107,7,114,28,116,2,100,1,
106,3,124,1,131,1,124,1,100,2,141,2,130,1,136,0,
160,3,124,1,161,1,124,1,100,2,141,2,130,1,136,0,
124,0,124,1,131,2,83,0,41,3,78,122,29,123,33,114,
125,32,105,115,32,110,111,116,32,97,32,98,117,105,108,116,
45,105,110,32,109,111,100,117,108,101,41,1,114,15,0,0,
@ -448,8 +448,8 @@ const unsigned char _Py_M__importlib[] = {
97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,102,
114,111,122,101,110,46,99,2,0,0,0,0,0,0,0,2,
0,0,0,4,0,0,0,19,0,0,0,115,38,0,0,0,
116,0,106,1,124,1,131,1,115,28,116,2,100,1,106,3,
124,1,131,1,124,1,100,2,141,2,130,1,136,0,124,0,
116,0,160,1,124,1,161,1,115,28,116,2,100,1,160,3,
124,1,161,1,124,1,100,2,141,2,130,1,136,0,124,0,
124,1,131,2,83,0,41,3,78,122,27,123,33,114,125,32,
105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,
109,111,100,117,108,101,41,1,114,15,0,0,0,41,4,114,
@ -489,10 +489,10 @@ const unsigned char _Py_M__importlib[] = {
114,11,0,0,0,218,17,95,108,111,97,100,95,109,111,100,
117,108,101,95,115,104,105,109,239,0,0,0,115,12,0,0,
0,0,6,10,1,10,1,10,1,10,1,10,2,114,84,0,
0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,35,
0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,36,
0,0,0,67,0,0,0,115,216,0,0,0,116,0,124,0,
100,1,100,0,131,3,125,1,116,1,124,1,100,2,131,2,
114,54,121,10,124,1,106,2,124,0,131,1,83,0,4,0,
114,54,121,10,124,1,160,2,124,0,161,1,83,0,4,0,
116,3,107,10,114,52,1,0,1,0,1,0,89,0,110,2,
88,0,121,10,124,0,106,4,125,2,87,0,110,20,4,0,
116,5,107,10,114,84,1,0,1,0,1,0,89,0,110,18,
@ -501,9 +501,9 @@ const unsigned char _Py_M__importlib[] = {
116,5,107,10,114,136,1,0,1,0,1,0,100,3,125,3,
89,0,110,2,88,0,121,10,124,0,106,8,125,4,87,0,
110,50,4,0,116,5,107,10,114,198,1,0,1,0,1,0,
124,1,100,0,107,8,114,182,100,4,106,9,124,3,131,1,
83,0,100,5,106,9,124,3,124,1,131,2,83,0,89,0,
110,14,88,0,100,6,106,9,124,3,124,4,131,2,83,0,
124,1,100,0,107,8,114,182,100,4,160,9,124,3,161,1,
83,0,100,5,160,9,124,3,124,1,161,2,83,0,89,0,
110,14,88,0,100,6,160,9,124,3,124,4,161,2,83,0,
100,0,83,0,41,7,78,218,10,95,95,108,111,97,100,101,
114,95,95,218,11,109,111,100,117,108,101,95,114,101,112,114,
250,1,63,122,13,60,109,111,100,117,108,101,32,123,33,114,
@ -702,14 +702,14 @@ const unsigned char _Py_M__importlib[] = {
27,0,0,0,99,1,0,0,115,14,0,0,0,0,2,6,
1,6,1,6,1,6,1,14,3,6,1,122,19,77,111,100,
117,108,101,83,112,101,99,46,95,95,105,110,105,116,95,95,
99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
0,67,0,0,0,115,102,0,0,0,100,1,106,0,124,0,
106,1,131,1,100,2,106,0,124,0,106,2,131,1,103,2,
125,1,124,0,106,3,100,0,107,9,114,52,124,1,106,4,
100,3,106,0,124,0,106,3,131,1,131,1,1,0,124,0,
106,5,100,0,107,9,114,80,124,1,106,4,100,4,106,0,
124,0,106,5,131,1,131,1,1,0,100,5,106,0,124,0,
106,6,106,7,100,6,106,8,124,1,131,1,131,2,83,0,
99,1,0,0,0,0,0,0,0,2,0,0,0,6,0,0,
0,67,0,0,0,115,102,0,0,0,100,1,160,0,124,0,
106,1,161,1,100,2,160,0,124,0,106,2,161,1,103,2,
125,1,124,0,106,3,100,0,107,9,114,52,124,1,160,4,
100,3,160,0,124,0,106,3,161,1,161,1,1,0,124,0,
106,5,100,0,107,9,114,80,124,1,160,4,100,4,160,0,
124,0,106,5,161,1,161,1,1,0,100,5,160,0,124,0,
106,6,106,7,100,6,160,8,124,1,161,1,161,2,83,0,
41,7,78,122,9,110,97,109,101,61,123,33,114,125,122,11,
108,111,97,100,101,114,61,123,33,114,125,122,11,111,114,105,
103,105,110,61,123,33,114,125,122,29,115,117,98,109,111,100,
@ -741,11 +741,11 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,0,1,6,1,2,1,12,1,12,1,12,1,10,
1,12,1,12,1,14,1,122,17,77,111,100,117,108,101,83,
112,101,99,46,95,95,101,113,95,95,99,1,0,0,0,0,
0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,
0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,
58,0,0,0,124,0,106,0,100,0,107,8,114,52,124,0,
106,1,100,0,107,9,114,52,124,0,106,2,114,52,116,3,
100,0,107,8,114,38,116,4,130,1,116,3,106,5,124,0,
106,1,131,1,124,0,95,0,124,0,106,0,83,0,41,1,
100,0,107,8,114,38,116,4,130,1,116,3,160,5,124,0,
106,1,161,1,124,0,95,0,124,0,106,0,83,0,41,1,
78,41,6,114,108,0,0,0,114,103,0,0,0,114,107,0,
0,0,218,19,95,98,111,111,116,115,116,114,97,112,95,101,
120,116,101,114,110,97,108,218,19,78,111,116,73,109,112,108,
@ -761,9 +761,9 @@ const unsigned char _Py_M__importlib[] = {
0,114,112,0,0,0,114,10,0,0,0,114,10,0,0,0,
114,11,0,0,0,114,112,0,0,0,142,1,0,0,115,2,
0,0,0,0,2,99,1,0,0,0,0,0,0,0,1,0,
0,0,2,0,0,0,67,0,0,0,115,36,0,0,0,124,
0,106,0,100,1,107,8,114,26,124,0,106,1,106,2,100,
2,131,1,100,3,25,0,83,0,124,0,106,1,83,0,100,
0,0,3,0,0,0,67,0,0,0,115,36,0,0,0,124,
0,106,0,100,1,107,8,114,26,124,0,106,1,160,2,100,
2,161,1,100,3,25,0,83,0,124,0,106,1,83,0,100,
1,83,0,41,4,122,32,84,104,101,32,110,97,109,101,32,
111,102,32,116,104,101,32,109,111,100,117,108,101,39,115,32,
112,97,114,101,110,116,46,78,218,1,46,114,19,0,0,0,
@ -801,8 +801,8 @@ const unsigned char _Py_M__importlib[] = {
48,124,4,124,0,124,1,100,3,141,2,83,0,124,3,114,
56,103,0,110,2,100,2,125,5,124,4,124,0,124,1,124,
5,100,4,141,3,83,0,124,3,100,2,107,8,114,138,116,
0,124,1,100,5,131,2,114,134,121,14,124,1,106,4,124,
0,131,1,125,3,87,0,113,138,4,0,116,5,107,10,114,
0,124,1,100,5,131,2,114,134,121,14,124,1,160,4,124,
0,161,1,125,3,87,0,113,138,4,0,116,5,107,10,114,
130,1,0,1,0,1,0,100,2,125,3,89,0,113,138,88,
0,110,4,100,6,125,3,116,6,124,0,124,1,124,2,124,
3,100,7,141,4,83,0,41,8,122,53,82,101,116,117,114,
@ -869,7 +869,7 @@ const unsigned char _Py_M__importlib[] = {
124,1,100,2,100,0,131,3,100,0,107,8,114,166,124,0,
106,4,125,3,124,3,100,0,107,8,114,134,124,0,106,5,
100,0,107,9,114,134,116,6,100,0,107,8,114,110,116,7,
130,1,116,6,106,8,125,4,124,4,106,9,124,4,131,1,
130,1,116,6,106,8,125,4,124,4,160,9,124,4,161,1,
125,3,124,0,106,5,124,3,95,10,121,10,124,3,124,1,
95,11,87,0,110,20,4,0,116,3,107,10,114,164,1,0,
1,0,1,0,89,0,110,2,88,0,124,2,115,186,116,0,
@ -915,7 +915,7 @@ const unsigned char _Py_M__importlib[] = {
6,1,114,133,0,0,0,99,1,0,0,0,0,0,0,0,
2,0,0,0,3,0,0,0,67,0,0,0,115,82,0,0,
0,100,1,125,1,116,0,124,0,106,1,100,2,131,2,114,
30,124,0,106,1,106,2,124,0,131,1,125,1,110,20,116,
30,124,0,106,1,160,2,124,0,161,1,125,1,110,20,116,
0,124,0,106,1,100,3,131,2,114,50,116,3,100,4,131,
1,130,1,124,1,100,1,107,8,114,68,116,4,124,0,106,
5,131,1,125,1,116,6,124,0,124,1,131,2,1,0,124,
@ -936,14 +936,14 @@ const unsigned char _Py_M__importlib[] = {
95,115,112,101,99,41,2,0,0,115,18,0,0,0,0,3,
4,1,12,3,14,1,12,1,8,2,8,1,10,1,10,1,
114,136,0,0,0,99,1,0,0,0,0,0,0,0,2,0,
0,0,3,0,0,0,67,0,0,0,115,106,0,0,0,124,
0,0,4,0,0,0,67,0,0,0,115,106,0,0,0,124,
0,106,0,100,1,107,8,114,14,100,2,110,4,124,0,106,
0,125,1,124,0,106,1,100,1,107,8,114,66,124,0,106,
2,100,1,107,8,114,50,100,3,106,3,124,1,131,1,83,
0,100,4,106,3,124,1,124,0,106,2,131,2,83,0,110,
36,124,0,106,4,114,86,100,5,106,3,124,1,124,0,106,
1,131,2,83,0,100,6,106,3,124,0,106,0,124,0,106,
1,131,2,83,0,100,1,83,0,41,7,122,38,82,101,116,
2,100,1,107,8,114,50,100,3,160,3,124,1,161,1,83,
0,100,4,160,3,124,1,124,0,106,2,161,2,83,0,110,
36,124,0,106,4,114,86,100,5,160,3,124,1,124,0,106,
1,161,2,83,0,100,6,160,3,124,0,106,0,124,0,106,
1,161,2,83,0,100,1,83,0,41,7,122,38,82,101,116,
117,114,110,32,116,104,101,32,114,101,112,114,32,116,111,32,
117,115,101,32,102,111,114,32,116,104,101,32,109,111,100,117,
108,101,46,78,114,87,0,0,0,122,13,60,109,111,100,117,
@ -959,17 +959,17 @@ const unsigned char _Py_M__importlib[] = {
3,20,1,10,1,10,1,10,2,16,2,6,1,14,2,114,
91,0,0,0,99,2,0,0,0,0,0,0,0,4,0,0,
0,12,0,0,0,67,0,0,0,115,186,0,0,0,124,0,
106,0,125,2,116,1,106,2,131,0,1,0,116,3,124,2,
131,1,143,148,1,0,116,4,106,5,106,6,124,2,131,1,
124,1,107,9,114,62,100,1,106,7,124,2,131,1,125,3,
106,0,125,2,116,1,160,2,161,0,1,0,116,3,124,2,
131,1,143,148,1,0,116,4,106,5,160,6,124,2,161,1,
124,1,107,9,114,62,100,1,160,7,124,2,161,1,125,3,
116,8,124,3,124,2,100,2,141,2,130,1,124,0,106,9,
100,3,107,8,114,114,124,0,106,10,100,3,107,8,114,96,
116,8,100,4,124,0,106,0,100,2,141,2,130,1,116,11,
124,0,124,1,100,5,100,6,141,3,1,0,124,1,83,0,
116,11,124,0,124,1,100,5,100,6,141,3,1,0,116,12,
124,0,106,9,100,7,131,2,115,154,124,0,106,9,106,13,
124,2,131,1,1,0,110,12,124,0,106,9,106,14,124,1,
131,1,1,0,87,0,100,3,81,0,82,0,88,0,116,4,
124,0,106,9,100,7,131,2,115,154,124,0,106,9,160,13,
124,2,161,1,1,0,110,12,124,0,106,9,160,14,124,1,
161,1,1,0,87,0,100,3,81,0,82,0,88,0,116,4,
106,5,124,2,25,0,83,0,41,8,122,70,69,120,101,99,
117,116,101,32,116,104,101,32,115,112,101,99,39,115,32,115,
112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32,
@ -992,14 +992,14 @@ const unsigned char _Py_M__importlib[] = {
16,1,10,1,12,1,10,1,10,1,14,2,14,1,4,1,
14,1,12,4,14,2,22,1,114,80,0,0,0,99,1,0,
0,0,0,0,0,0,2,0,0,0,27,0,0,0,67,0,
0,0,115,206,0,0,0,124,0,106,0,106,1,124,0,106,
2,131,1,1,0,116,3,106,4,124,0,106,2,25,0,125,
0,0,115,206,0,0,0,124,0,106,0,160,1,124,0,106,
2,161,1,1,0,116,3,106,4,124,0,106,2,25,0,125,
1,116,5,124,1,100,1,100,0,131,3,100,0,107,8,114,
76,121,12,124,0,106,0,124,1,95,6,87,0,110,20,4,
0,116,7,107,10,114,74,1,0,1,0,1,0,89,0,110,
2,88,0,116,5,124,1,100,2,100,0,131,3,100,0,107,
8,114,154,121,40,124,1,106,8,124,1,95,9,116,10,124,
1,100,3,131,2,115,130,124,0,106,2,106,11,100,4,131,
1,100,3,131,2,115,130,124,0,106,2,160,11,100,4,161,
1,100,5,25,0,124,1,95,9,87,0,110,20,4,0,116,
7,107,10,114,152,1,0,1,0,1,0,89,0,110,2,88,
0,116,5,124,1,100,6,100,0,131,3,100,0,107,8,114,
@ -1025,7 +1025,7 @@ const unsigned char _Py_M__importlib[] = {
0,131,1,125,1,116,4,124,1,131,1,143,54,1,0,124,
0,106,0,100,0,107,8,114,84,124,0,106,5,100,0,107,
8,114,96,116,6,100,2,124,0,106,7,100,3,141,2,130,
1,110,12,124,0,106,0,106,8,124,1,131,1,1,0,87,
1,110,12,124,0,106,0,160,8,124,1,161,1,1,0,87,
0,100,0,81,0,82,0,88,0,116,9,106,10,124,0,106,
7,25,0,83,0,41,4,78,114,135,0,0,0,122,14,109,
105,115,115,105,110,103,32,108,111,97,100,101,114,41,1,114,
@ -1039,7 +1039,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,2,10,2,12,1,8,2,8,1,10,1,10,1,10,
1,16,3,22,5,114,141,0,0,0,99,1,0,0,0,0,
0,0,0,1,0,0,0,9,0,0,0,67,0,0,0,115,
38,0,0,0,116,0,106,1,131,0,1,0,116,2,124,0,
38,0,0,0,116,0,160,1,161,0,1,0,116,2,124,0,
106,3,131,1,143,10,1,0,116,4,124,0,131,1,83,0,
81,0,82,0,88,0,100,1,83,0,41,2,122,191,82,101,
116,117,114,110,32,97,32,110,101,119,32,109,111,100,117,108,
@ -1079,9 +1079,9 @@ const unsigned char _Py_M__importlib[] = {
105,100,32,116,104,101,32,110,101,101,100,32,116,111,10,32,
32,32,32,105,110,115,116,97,110,116,105,97,116,101,32,116,
104,101,32,99,108,97,115,115,46,10,10,32,32,32,32,99,
1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,
67,0,0,0,115,12,0,0,0,100,1,106,0,124,0,106,
1,131,1,83,0,41,2,122,115,82,101,116,117,114,110,32,
1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,
67,0,0,0,115,12,0,0,0,100,1,160,0,124,0,106,
1,161,1,83,0,41,2,122,115,82,101,116,117,114,110,32,
114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100,
117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,
101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,
@ -1097,8 +1097,8 @@ const unsigned char _Py_M__importlib[] = {
110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101,
95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,4,
0,0,0,5,0,0,0,67,0,0,0,115,44,0,0,0,
124,2,100,0,107,9,114,12,100,0,83,0,116,0,106,1,
124,1,131,1,114,36,116,2,124,1,124,0,100,1,100,2,
124,2,100,0,107,9,114,12,100,0,83,0,116,0,160,1,
124,1,161,1,114,36,116,2,124,1,124,0,100,1,100,2,
141,3,83,0,100,0,83,0,100,0,83,0,41,3,78,122,
8,98,117,105,108,116,45,105,110,41,1,114,103,0,0,0,
41,3,114,46,0,0,0,90,10,105,115,95,98,117,105,108,
@ -1109,8 +1109,8 @@ const unsigned char _Py_M__importlib[] = {
115,10,0,0,0,0,2,8,1,4,1,10,1,14,2,122,
25,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,
46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0,
0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,
30,0,0,0,124,0,106,0,124,1,124,2,131,2,125,3,
0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,
30,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,
124,3,100,1,107,9,114,26,124,3,106,1,83,0,100,1,
83,0,41,2,122,175,70,105,110,100,32,116,104,101,32,98,
117,105,108,116,45,105,110,32,109,111,100,117,108,101,46,10,
@ -1132,7 +1132,7 @@ const unsigned char _Py_M__importlib[] = {
101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,2,
0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,
0,0,0,115,46,0,0,0,124,1,106,0,116,1,106,2,
107,7,114,34,116,3,100,1,106,4,124,1,106,0,131,1,
107,7,114,34,116,3,100,1,160,4,124,1,106,0,161,1,
124,1,106,0,100,2,141,2,130,1,116,5,116,6,106,7,
124,1,131,2,83,0,41,3,122,24,67,114,101,97,116,101,
32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,
@ -1221,8 +1221,8 @@ const unsigned char _Py_M__importlib[] = {
116,104,101,32,110,101,101,100,32,116,111,10,32,32,32,32,
105,110,115,116,97,110,116,105,97,116,101,32,116,104,101,32,
99,108,97,115,115,46,10,10,32,32,32,32,99,1,0,0,
0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,
0,115,12,0,0,0,100,1,106,0,124,0,106,1,131,1,
0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,
0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,
83,0,41,2,122,115,82,101,116,117,114,110,32,114,101,112,
114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,
46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,
@ -1238,7 +1238,7 @@ const unsigned char _Py_M__importlib[] = {
7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,
114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,
0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,
0,0,0,115,32,0,0,0,116,0,106,1,124,1,131,1,
0,0,0,115,32,0,0,0,116,0,160,1,124,1,161,1,
114,24,116,2,124,1,124,0,100,1,100,2,141,3,83,0,
100,0,83,0,100,0,83,0,41,3,78,90,6,102,114,111,
122,101,110,41,1,114,103,0,0,0,41,3,114,46,0,0,
@ -1248,8 +1248,8 @@ const unsigned char _Py_M__importlib[] = {
114,146,0,0,0,3,3,0,0,115,6,0,0,0,0,2,
10,1,14,2,122,24,70,114,111,122,101,110,73,109,112,111,
114,116,101,114,46,102,105,110,100,95,115,112,101,99,99,3,
0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,
0,0,0,115,18,0,0,0,116,0,106,1,124,1,131,1,
0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,
0,0,0,115,18,0,0,0,116,0,160,1,124,1,161,1,
114,14,124,0,83,0,100,1,83,0,41,2,122,93,70,105,
110,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117,
108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,
@ -1274,8 +1274,8 @@ const unsigned char _Py_M__importlib[] = {
99,114,101,97,116,101,95,109,111,100,117,108,101,99,1,0,
0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,
0,0,115,64,0,0,0,124,0,106,0,106,1,125,1,116,
2,106,3,124,1,131,1,115,36,116,4,100,1,106,5,124,
1,131,1,124,1,100,2,141,2,130,1,116,6,116,2,106,
2,160,3,124,1,161,1,115,36,116,4,100,1,160,5,124,
1,161,1,124,1,100,2,141,2,130,1,116,6,116,2,106,
7,124,1,131,2,125,2,116,8,124,2,124,0,106,9,131,
2,1,0,100,0,83,0,41,3,78,122,27,123,33,114,125,
32,105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,
@ -1303,8 +1303,8 @@ const unsigned char _Py_M__importlib[] = {
0,114,138,0,0,0,32,3,0,0,115,2,0,0,0,0,
7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,
114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,
0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,
0,0,115,10,0,0,0,116,0,106,1,124,1,131,1,83,
0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,
0,0,115,10,0,0,0,116,0,160,1,124,1,161,1,83,
0,41,1,122,45,82,101,116,117,114,110,32,116,104,101,32,
99,111,100,101,32,111,98,106,101,99,116,32,102,111,114,32,
116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,108,
@ -1324,8 +1324,8 @@ const unsigned char _Py_M__importlib[] = {
47,3,0,0,115,2,0,0,0,0,4,122,25,70,114,111,
122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,
115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,2,
0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,
116,0,106,1,124,1,131,1,83,0,41,1,122,46,82,101,
0,0,0,3,0,0,0,67,0,0,0,115,10,0,0,0,
116,0,160,1,124,1,161,1,83,0,41,1,122,46,82,101,
116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,
32,102,114,111,122,101,110,32,109,111,100,117,108,101,32,105,
115,32,97,32,112,97,99,107,97,103,101,46,41,2,114,46,
@ -1352,8 +1352,8 @@ const unsigned char _Py_M__importlib[] = {
111,99,107,67,111,110,116,101,120,116,122,36,67,111,110,116,
101,120,116,32,109,97,110,97,103,101,114,32,102,111,114,32,
116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,46,
99,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,
0,67,0,0,0,115,12,0,0,0,116,0,106,1,131,0,
99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,
0,67,0,0,0,115,12,0,0,0,116,0,160,1,161,0,
1,0,100,1,83,0,41,2,122,24,65,99,113,117,105,114,
101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,
107,46,78,41,2,114,46,0,0,0,114,137,0,0,0,41,
@ -1362,8 +1362,8 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,0,2,122,28,95,73,109,112,111,114,116,76,111,
99,107,67,111,110,116,101,120,116,46,95,95,101,110,116,101,
114,95,95,99,4,0,0,0,0,0,0,0,4,0,0,0,
1,0,0,0,67,0,0,0,115,12,0,0,0,116,0,106,
1,131,0,1,0,100,1,83,0,41,2,122,60,82,101,108,
2,0,0,0,67,0,0,0,115,12,0,0,0,116,0,160,
1,161,0,1,0,100,1,83,0,41,2,122,60,82,101,108,
101,97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,
108,111,99,107,32,114,101,103,97,114,100,108,101,115,115,32,
111,102,32,97,110,121,32,114,97,105,115,101,100,32,101,120,
@ -1380,11 +1380,11 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
0,0,114,157,0,0,0,62,3,0,0,115,6,0,0,0,
8,2,4,2,8,4,114,157,0,0,0,99,3,0,0,0,
0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,
115,64,0,0,0,124,1,106,0,100,1,124,2,100,2,24,
0,131,2,125,3,116,1,124,3,131,1,124,2,107,0,114,
0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
115,64,0,0,0,124,1,160,0,100,1,124,2,100,2,24,
0,161,2,125,3,116,1,124,3,131,1,124,2,107,0,114,
36,116,2,100,3,131,1,130,1,124,3,100,4,25,0,125,
4,124,0,114,60,100,5,106,3,124,4,124,0,131,2,83,
4,124,0,114,60,100,5,160,3,124,4,124,0,161,2,83,
0,124,4,83,0,41,6,122,50,82,101,115,111,108,118,101,
32,97,32,114,101,108,97,116,105,118,101,32,109,111,100,117,
108,101,32,110,97,109,101,32,116,111,32,97,110,32,97,98,
@ -1401,9 +1401,9 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,11,0,0,0,218,13,95,114,101,115,111,108,118,
101,95,110,97,109,101,75,3,0,0,115,10,0,0,0,0,
2,16,1,12,1,8,1,8,1,114,163,0,0,0,99,3,
0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,
0,0,0,115,34,0,0,0,124,0,106,0,124,1,124,2,
131,2,125,3,124,3,100,0,107,8,114,24,100,0,83,0,
0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,
0,0,0,115,34,0,0,0,124,0,160,0,124,1,124,2,
161,2,125,3,124,3,100,0,107,8,114,24,100,0,83,0,
116,1,124,1,124,3,131,2,83,0,41,1,78,41,2,114,
147,0,0,0,114,78,0,0,0,41,4,218,6,102,105,110,
100,101,114,114,15,0,0,0,114,144,0,0,0,114,93,0,
@ -1414,7 +1414,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,10,0,0,0,27,0,0,0,67,0,0,0,115,
242,0,0,0,116,0,106,1,125,3,124,3,100,1,107,8,
114,22,116,2,100,2,131,1,130,1,124,3,115,38,116,3,
106,4,100,3,116,5,131,2,1,0,124,0,116,0,106,6,
160,4,100,3,116,5,161,2,1,0,124,0,116,0,106,6,
107,6,125,4,120,188,124,3,68,0,93,176,125,5,116,7,
131,0,143,72,1,0,121,10,124,5,106,8,125,6,87,0,
110,42,4,0,116,9,107,10,114,118,1,0,1,0,1,0,
@ -1449,15 +1449,15 @@ const unsigned char _Py_M__importlib[] = {
10,1,8,1,2,1,10,1,14,1,12,1,8,1,8,2,
22,1,8,2,16,1,10,1,2,1,10,1,14,4,6,2,
8,1,4,2,6,2,8,2,114,170,0,0,0,99,3,0,
0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,
0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,
0,0,115,140,0,0,0,116,0,124,0,116,1,131,2,115,
28,116,2,100,1,106,3,116,4,124,0,131,1,131,1,131,
28,116,2,100,1,160,3,116,4,124,0,131,1,161,1,131,
1,130,1,124,2,100,2,107,0,114,44,116,5,100,3,131,
1,130,1,124,2,100,2,107,4,114,114,116,0,124,1,116,
1,131,2,115,72,116,2,100,4,131,1,130,1,110,42,124,
1,115,86,116,6,100,5,131,1,130,1,110,28,124,1,116,
7,106,8,107,7,114,114,100,6,125,3,116,9,124,3,106,
3,124,1,131,1,131,1,130,1,124,0,12,0,114,136,124,
7,106,8,107,7,114,114,100,6,125,3,116,9,124,3,160,
3,124,1,161,1,131,1,130,1,124,0,12,0,114,136,124,
2,100,2,107,2,114,136,116,5,100,7,131,1,130,1,100,
8,83,0,41,9,122,28,86,101,114,105,102,121,32,97,114,
103,117,109,101,110,116,115,32,97,114,101,32,34,115,97,110,
@ -1488,20 +1488,20 @@ const unsigned char _Py_M__importlib[] = {
1,10,2,10,1,4,2,14,1,14,1,114,175,0,0,0,
122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101,
100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0,
0,8,0,0,0,12,0,0,0,67,0,0,0,115,220,0,
0,0,100,0,125,2,124,0,106,0,100,1,131,1,100,2,
0,8,0,0,0,13,0,0,0,67,0,0,0,115,220,0,
0,0,100,0,125,2,124,0,160,0,100,1,161,1,100,2,
25,0,125,3,124,3,114,134,124,3,116,1,106,2,107,7,
114,42,116,3,124,1,124,3,131,2,1,0,124,0,116,1,
106,2,107,6,114,62,116,1,106,2,124,0,25,0,83,0,
116,1,106,2,124,3,25,0,125,4,121,10,124,4,106,4,
125,2,87,0,110,50,4,0,116,5,107,10,114,132,1,0,
1,0,1,0,116,6,100,3,23,0,106,7,124,0,124,3,
131,2,125,5,116,8,124,5,124,0,100,4,141,2,100,0,
1,0,1,0,116,6,100,3,23,0,160,7,124,0,124,3,
161,2,125,5,116,8,124,5,124,0,100,4,141,2,100,0,
130,2,89,0,110,2,88,0,116,9,124,0,124,2,131,2,
125,6,124,6,100,0,107,8,114,172,116,8,116,6,106,7,
124,0,131,1,124,0,100,4,141,2,130,1,110,8,116,10,
125,6,124,6,100,0,107,8,114,172,116,8,116,6,160,7,
124,0,161,1,124,0,100,4,141,2,130,1,110,8,116,10,
124,6,131,1,125,7,124,3,114,216,116,1,106,2,124,3,
25,0,125,4,116,11,124,4,124,0,106,0,100,1,131,1,
25,0,125,4,116,11,124,4,124,0,160,0,100,1,161,1,
100,5,25,0,124,7,131,3,1,0,124,7,83,0,41,6,
78,114,117,0,0,0,114,19,0,0,0,122,23,59,32,123,
33,114,125,32,105,115,32,110,111,116,32,97,32,112,97,99,
@ -1536,11 +1536,11 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,
0,115,120,0,0,0,116,0,124,0,124,1,124,2,131,3,
1,0,124,2,100,1,107,4,114,32,116,1,124,0,124,1,
124,2,131,3,125,0,116,2,106,3,131,0,1,0,124,0,
124,2,131,3,125,0,116,2,160,3,161,0,1,0,124,0,
116,4,106,5,107,7,114,60,116,6,124,0,116,7,131,2,
83,0,116,4,106,5,124,0,25,0,125,3,124,3,100,2,
107,8,114,108,116,2,106,8,131,0,1,0,100,3,106,9,
124,0,131,1,125,4,116,10,124,4,124,0,100,4,141,2,
107,8,114,108,116,2,160,8,161,0,1,0,100,3,160,9,
124,0,161,1,125,4,116,10,124,4,124,0,100,4,141,2,
130,1,116,11,124,0,131,1,1,0,124,3,83,0,41,5,
97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32,
114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108,
@ -1578,10 +1578,10 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,0,0,0,6,0,0,0,17,0,0,0,67,0,
0,0,115,164,0,0,0,116,0,124,0,100,1,131,2,114,
160,100,2,124,1,107,6,114,58,116,1,124,1,131,1,125,
1,124,1,106,2,100,2,131,1,1,0,116,0,124,0,100,
3,131,2,114,58,124,1,106,3,124,0,106,4,131,1,1,
1,124,1,160,2,100,2,161,1,1,0,116,0,124,0,100,
3,131,2,114,58,124,1,160,3,124,0,106,4,161,1,1,
0,120,100,124,1,68,0,93,92,125,3,116,0,124,0,124,
3,131,2,115,64,100,4,106,5,124,0,106,6,124,3,131,
3,131,2,115,64,100,4,160,5,124,0,106,6,124,3,161,
2,125,4,121,14,116,7,124,2,124,4,131,2,1,0,87,
0,113,64,4,0,116,8,107,10,114,154,1,0,125,5,1,
0,122,20,124,5,106,9,124,4,107,2,114,136,119,64,130,
@ -1616,15 +1616,15 @@ const unsigned char _Py_M__importlib[] = {
1,10,1,10,1,14,1,2,1,14,1,16,4,10,1,2,
1,24,1,114,189,0,0,0,99,1,0,0,0,0,0,0,
0,3,0,0,0,6,0,0,0,67,0,0,0,115,146,0,
0,0,124,0,106,0,100,1,131,1,125,1,124,0,106,0,
100,2,131,1,125,2,124,1,100,3,107,9,114,82,124,2,
0,0,124,0,160,0,100,1,161,1,125,1,124,0,160,0,
100,2,161,1,125,2,124,1,100,3,107,9,114,82,124,2,
100,3,107,9,114,78,124,1,124,2,106,1,107,3,114,78,
116,2,106,3,100,4,124,1,155,2,100,5,124,2,106,1,
155,2,100,6,157,5,116,4,100,7,100,8,141,3,1,0,
124,1,83,0,124,2,100,3,107,9,114,96,124,2,106,1,
83,0,116,2,106,3,100,9,116,4,100,7,100,8,141,3,
1,0,124,0,100,10,25,0,125,1,100,11,124,0,107,7,
114,142,124,1,106,5,100,12,131,1,100,13,25,0,125,1,
114,142,124,1,160,5,100,12,161,1,100,13,25,0,125,1,
124,1,83,0,41,14,122,167,67,97,108,99,117,108,97,116,
101,32,119,104,97,116,32,95,95,112,97,99,107,97,103,101,
95,95,32,115,104,111,117,108,100,32,98,101,46,10,10,32,
@ -1661,9 +1661,9 @@ const unsigned char _Py_M__importlib[] = {
131,1,125,5,110,36,124,1,100,2,107,9,114,30,124,1,
110,2,105,0,125,6,116,1,124,6,131,1,125,7,116,0,
124,0,124,7,124,4,131,3,125,5,124,3,115,150,124,4,
100,1,107,2,114,84,116,0,124,0,106,2,100,3,131,1,
100,1,107,2,114,84,116,0,124,0,160,2,100,3,161,1,
100,1,25,0,131,1,83,0,124,0,115,92,124,5,83,0,
116,3,124,0,131,1,116,3,124,0,106,2,100,3,131,1,
116,3,124,0,131,1,116,3,124,0,160,2,100,3,161,1,
100,1,25,0,131,1,24,0,125,8,116,4,106,5,124,5,
106,6,100,2,116,3,124,5,106,6,131,1,124,8,24,0,
133,2,25,0,25,0,83,0,110,12,116,7,124,5,124,3,
@ -1710,8 +1710,8 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,11,8,1,10,2,16,1,8,1,12,1,4,3,
8,1,18,1,4,1,4,4,26,3,32,2,114,196,0,0,
0,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,
0,0,67,0,0,0,115,38,0,0,0,116,0,106,1,124,
0,131,1,125,1,124,1,100,0,107,8,114,30,116,2,100,
0,0,67,0,0,0,115,38,0,0,0,116,0,160,1,124,
0,161,1,125,1,124,1,100,0,107,8,114,30,116,2,100,
1,124,0,23,0,131,1,130,1,116,3,124,1,131,1,83,
0,41,2,78,122,25,110,111,32,98,117,105,108,116,45,105,
110,32,109,111,100,117,108,101,32,110,97,109,101,100,32,41,
@ -1723,10 +1723,10 @@ const unsigned char _Py_M__importlib[] = {
1,8,1,12,1,114,197,0,0,0,99,2,0,0,0,0,
0,0,0,12,0,0,0,12,0,0,0,67,0,0,0,115,
244,0,0,0,124,1,97,0,124,0,97,1,116,2,116,1,
131,1,125,2,120,86,116,1,106,3,106,4,131,0,68,0,
131,1,125,2,120,86,116,1,106,3,160,4,161,0,68,0,
93,72,92,2,125,3,125,4,116,5,124,4,124,2,131,2,
114,28,124,3,116,1,106,6,107,6,114,62,116,7,125,5,
110,18,116,0,106,8,124,3,131,1,114,28,116,9,125,5,
110,18,116,0,160,8,124,3,161,1,114,28,116,9,125,5,
110,2,113,28,116,10,124,4,124,5,131,2,125,6,116,11,
124,6,124,4,131,2,1,0,113,28,87,0,116,1,106,3,
116,12,25,0,125,7,120,54,100,5,68,0,93,46,125,8,
@ -1774,12 +1774,12 @@ const unsigned char _Py_M__importlib[] = {
1,10,1,10,1,6,1,10,1,6,2,2,1,10,1,14,
3,10,1,10,1,10,1,10,2,10,1,16,3,2,1,12,
1,14,2,10,1,12,3,8,1,114,201,0,0,0,99,2,
0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,
0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,
0,0,0,115,66,0,0,0,116,0,124,0,124,1,131,2,
1,0,116,1,106,2,106,3,116,4,131,1,1,0,116,1,
106,2,106,3,116,5,131,1,1,0,100,1,100,2,108,6,
125,2,124,2,97,7,124,2,106,8,116,1,106,9,116,10,
25,0,131,1,1,0,100,2,83,0,41,3,122,50,73,110,
1,0,116,1,106,2,160,3,116,4,161,1,1,0,116,1,
106,2,160,3,116,5,161,1,1,0,100,1,100,2,108,6,
125,2,124,2,97,7,124,2,160,8,116,1,106,9,116,10,
25,0,161,1,1,0,100,2,83,0,41,3,122,50,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,

File diff suppressed because it is too large Load Diff

View File

@ -159,8 +159,8 @@ static void *opcode_targets[256] = {
&&TARGET_BUILD_STRING,
&&TARGET_BUILD_TUPLE_UNPACK_WITH_CALL,
&&_unknown_opcode,
&&_unknown_opcode,
&&_unknown_opcode,
&&TARGET_LOAD_METHOD,
&&TARGET_CALL_METHOD,
&&_unknown_opcode,
&&_unknown_opcode,
&&_unknown_opcode,