diff options
Diffstat (limited to 'Python')
44 files changed, 9963 insertions, 7961 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index 7bf2c50..e07a93f 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -271,6 +271,10 @@ static PyTypeObject *Bytes_type; static char *Bytes_fields[]={ "s", }; +static PyTypeObject *NameConstant_type; +static char *NameConstant_fields[]={ + "value", +}; static PyTypeObject *Ellipsis_type; static PyTypeObject *Attribute_type; _Py_IDENTIFIER(attr); @@ -408,24 +412,24 @@ static char *ExceptHandler_fields[]={ static PyTypeObject *arguments_type; static PyObject* ast2obj_arguments(void*); _Py_IDENTIFIER(vararg); -_Py_IDENTIFIER(varargannotation); _Py_IDENTIFIER(kwonlyargs); +_Py_IDENTIFIER(kw_defaults); _Py_IDENTIFIER(kwarg); -_Py_IDENTIFIER(kwargannotation); _Py_IDENTIFIER(defaults); -_Py_IDENTIFIER(kw_defaults); static char *arguments_fields[]={ "args", "vararg", - "varargannotation", "kwonlyargs", + "kw_defaults", "kwarg", - "kwargannotation", "defaults", - "kw_defaults", }; static PyTypeObject *arg_type; static PyObject* ast2obj_arg(void*); +static char *arg_attributes[] = { + "lineno", + "col_offset", +}; _Py_IDENTIFIER(arg); _Py_IDENTIFIER(annotation); static char *arg_fields[]={ @@ -673,6 +677,7 @@ static PyObject* ast2obj_object(void *o) Py_INCREF((PyObject*)o); return (PyObject*)o; } +#define ast2obj_singleton ast2obj_object #define ast2obj_identifier ast2obj_object #define ast2obj_string ast2obj_object #define ast2obj_bytes ast2obj_object @@ -684,6 +689,17 @@ static PyObject* ast2obj_int(long b) /* Conversion Python -> AST */ +static int obj2ast_singleton(PyObject *obj, PyObject** out, PyArena* arena) +{ + if (obj != Py_None && obj != Py_True && obj != Py_False) { + PyErr_SetString(PyExc_ValueError, + "AST singleton must be True, False, or None"); + return 1; + } + *out = obj; + return 0; +} + static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena) { if (obj == Py_None) @@ -758,6 +774,19 @@ static int add_ast_fields(void) return 0; } +static int exists_not_none(PyObject *obj, _Py_Identifier *id) +{ + int isnone; + PyObject *attr = _PyObject_GetAttrId(obj, id); + if (!attr) { + PyErr_Clear(); + return 0; + } + isnone = attr == Py_None; + Py_DECREF(attr); + return !isnone; +} + static int init_types(void) { @@ -862,6 +891,9 @@ static int init_types(void) if (!Str_type) return 0; Bytes_type = make_type("Bytes", expr_type, Bytes_fields, 1); if (!Bytes_type) return 0; + NameConstant_type = make_type("NameConstant", expr_type, + NameConstant_fields, 1); + if (!NameConstant_type) return 0; Ellipsis_type = make_type("Ellipsis", expr_type, NULL, 0); if (!Ellipsis_type) return 0; Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3); @@ -1039,6 +1071,7 @@ static int init_types(void) comprehension_type = make_type("comprehension", &AST_type, comprehension_fields, 3); if (!comprehension_type) return 0; + if (!add_attributes(comprehension_type, NULL, 0)) return 0; excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0); if (!excepthandler_type) return 0; if (!add_attributes(excepthandler_type, excepthandler_attributes, 2)) @@ -1046,16 +1079,21 @@ static int init_types(void) ExceptHandler_type = make_type("ExceptHandler", excepthandler_type, ExceptHandler_fields, 3); if (!ExceptHandler_type) return 0; - arguments_type = make_type("arguments", &AST_type, arguments_fields, 8); + arguments_type = make_type("arguments", &AST_type, arguments_fields, 6); if (!arguments_type) return 0; + if (!add_attributes(arguments_type, NULL, 0)) return 0; arg_type = make_type("arg", &AST_type, arg_fields, 2); if (!arg_type) return 0; + if (!add_attributes(arg_type, arg_attributes, 2)) return 0; keyword_type = make_type("keyword", &AST_type, keyword_fields, 2); if (!keyword_type) return 0; + if (!add_attributes(keyword_type, NULL, 0)) return 0; alias_type = make_type("alias", &AST_type, alias_fields, 2); if (!alias_type) return 0; + if (!add_attributes(alias_type, NULL, 0)) return 0; withitem_type = make_type("withitem", &AST_type, withitem_fields, 2); if (!withitem_type) return 0; + if (!add_attributes(withitem_type, NULL, 0)) return 0; initialized = 1; return 1; } @@ -1923,6 +1961,25 @@ Bytes(bytes s, int lineno, int col_offset, PyArena *arena) } expr_ty +NameConstant(singleton value, int lineno, int col_offset, PyArena *arena) +{ + expr_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field value is required for NameConstant"); + return NULL; + } + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = NameConstant_kind; + p->v.NameConstant.value = value; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty Ellipsis(int lineno, int col_offset, PyArena *arena) { expr_ty p; @@ -2177,9 +2234,8 @@ ExceptHandler(expr_ty type, identifier name, asdl_seq * body, int lineno, int } arguments_ty -arguments(asdl_seq * args, identifier vararg, expr_ty varargannotation, - asdl_seq * kwonlyargs, identifier kwarg, expr_ty kwargannotation, - asdl_seq * defaults, asdl_seq * kw_defaults, PyArena *arena) +arguments(asdl_seq * args, arg_ty vararg, asdl_seq * kwonlyargs, asdl_seq * + kw_defaults, arg_ty kwarg, asdl_seq * defaults, PyArena *arena) { arguments_ty p; p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p)); @@ -2187,12 +2243,10 @@ arguments(asdl_seq * args, identifier vararg, expr_ty varargannotation, return NULL; p->args = args; p->vararg = vararg; - p->varargannotation = varargannotation; p->kwonlyargs = kwonlyargs; + p->kw_defaults = kw_defaults; p->kwarg = kwarg; - p->kwargannotation = kwargannotation; p->defaults = defaults; - p->kw_defaults = kw_defaults; return p; } @@ -2943,6 +2997,15 @@ ast2obj_expr(void* _o) goto failed; Py_DECREF(value); break; + case NameConstant_kind: + result = PyType_GenericNew(NameConstant_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_singleton(o->v.NameConstant.value); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_value, value) == -1) + goto failed; + Py_DECREF(value); + break; case Ellipsis_kind: result = PyType_GenericNew(Ellipsis_type, NULL, NULL); if (!result) goto failed; @@ -3361,29 +3424,24 @@ ast2obj_arguments(void* _o) if (_PyObject_SetAttrId(result, &PyId_args, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_identifier(o->vararg); + value = ast2obj_arg(o->vararg); if (!value) goto failed; if (_PyObject_SetAttrId(result, &PyId_vararg, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_expr(o->varargannotation); - if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_varargannotation, value) == -1) - goto failed; - Py_DECREF(value); value = ast2obj_list(o->kwonlyargs, ast2obj_arg); if (!value) goto failed; if (_PyObject_SetAttrId(result, &PyId_kwonlyargs, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_identifier(o->kwarg); + value = ast2obj_list(o->kw_defaults, ast2obj_expr); if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1) + if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_expr(o->kwargannotation); + value = ast2obj_arg(o->kwarg); if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_kwargannotation, value) == -1) + if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1) goto failed; Py_DECREF(value); value = ast2obj_list(o->defaults, ast2obj_expr); @@ -3391,11 +3449,6 @@ ast2obj_arguments(void* _o) if (_PyObject_SetAttrId(result, &PyId_defaults, value) == -1) goto failed; Py_DECREF(value); - value = ast2obj_list(o->kw_defaults, ast2obj_expr); - if (!value) goto failed; - if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1) - goto failed; - Py_DECREF(value); return result; failed: Py_XDECREF(value); @@ -3425,6 +3478,16 @@ ast2obj_arg(void* _o) if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1) goto failed; Py_DECREF(value); + value = ast2obj_int(o->lineno); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0) + goto failed; + Py_DECREF(value); + value = ast2obj_int(o->col_offset); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0) + goto failed; + Py_DECREF(value); return result; failed: Py_XDECREF(value); @@ -3549,7 +3612,7 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3584,7 +3647,7 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3641,7 +3704,7 @@ obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3744,7 +3807,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3768,7 +3831,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - decorator_list = asdl_seq_new(len, arena); + decorator_list = _Py_asdl_seq_new(len, arena); if (decorator_list == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -3781,7 +3844,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_returns)) { + if (exists_not_none(obj, &PyId_returns)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_returns); if (tmp == NULL) goto failed; @@ -3831,7 +3894,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - bases = asdl_seq_new(len, arena); + bases = _Py_asdl_seq_new(len, arena); if (bases == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -3855,7 +3918,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - keywords = asdl_seq_new(len, arena); + keywords = _Py_asdl_seq_new(len, arena); if (keywords == NULL) goto failed; for (i = 0; i < len; i++) { keyword_ty value; @@ -3868,7 +3931,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_starargs)) { + if (exists_not_none(obj, &PyId_starargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_starargs); if (tmp == NULL) goto failed; @@ -3878,7 +3941,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) } else { starargs = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_kwargs)) { + if (exists_not_none(obj, &PyId_kwargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_kwargs); if (tmp == NULL) goto failed; @@ -3899,7 +3962,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -3923,7 +3986,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - decorator_list = asdl_seq_new(len, arena); + decorator_list = _Py_asdl_seq_new(len, arena); if (decorator_list == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -3948,7 +4011,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) if (isinstance) { expr_ty value; - if (_PyObject_HasAttrId(obj, &PyId_value)) { + if (exists_not_none(obj, &PyId_value)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_value); if (tmp == NULL) goto failed; @@ -3980,7 +4043,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - targets = asdl_seq_new(len, arena); + targets = _Py_asdl_seq_new(len, arena); if (targets == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -4016,7 +4079,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - targets = asdl_seq_new(len, arena); + targets = _Py_asdl_seq_new(len, arena); if (targets == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -4133,7 +4196,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4157,7 +4220,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4205,7 +4268,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4229,7 +4292,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4277,7 +4340,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4301,7 +4364,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4337,7 +4400,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - items = asdl_seq_new(len, arena); + items = _Py_asdl_seq_new(len, arena); if (items == NULL) goto failed; for (i = 0; i < len; i++) { withitem_ty value; @@ -4361,7 +4424,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4386,7 +4449,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) expr_ty exc; expr_ty cause; - if (_PyObject_HasAttrId(obj, &PyId_exc)) { + if (exists_not_none(obj, &PyId_exc)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_exc); if (tmp == NULL) goto failed; @@ -4396,7 +4459,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) } else { exc = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_cause)) { + if (exists_not_none(obj, &PyId_cause)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_cause); if (tmp == NULL) goto failed; @@ -4431,7 +4494,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4455,7 +4518,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - handlers = asdl_seq_new(len, arena); + handlers = _Py_asdl_seq_new(len, arena); if (handlers == NULL) goto failed; for (i = 0; i < len; i++) { excepthandler_ty value; @@ -4479,7 +4542,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - orelse = asdl_seq_new(len, arena); + orelse = _Py_asdl_seq_new(len, arena); if (orelse == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4503,7 +4566,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - finalbody = asdl_seq_new(len, arena); + finalbody = _Py_asdl_seq_new(len, arena); if (finalbody == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -4540,7 +4603,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_msg)) { + if (exists_not_none(obj, &PyId_msg)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_msg); if (tmp == NULL) goto failed; @@ -4572,7 +4635,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { alias_ty value; @@ -4598,7 +4661,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) asdl_seq* names; int level; - if (_PyObject_HasAttrId(obj, &PyId_module)) { + if (exists_not_none(obj, &PyId_module)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_module); if (tmp == NULL) goto failed; @@ -4619,7 +4682,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { alias_ty value; @@ -4632,7 +4695,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_level)) { + if (exists_not_none(obj, &PyId_level)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_level); if (tmp == NULL) goto failed; @@ -4664,7 +4727,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { identifier value; @@ -4699,7 +4762,7 @@ obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - names = asdl_seq_new(len, arena); + names = _Py_asdl_seq_new(len, arena); if (names == NULL) goto failed; for (i = 0; i < len; i++) { identifier value; @@ -4840,7 +4903,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - values = asdl_seq_new(len, arena); + values = _Py_asdl_seq_new(len, arena); if (values == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5036,7 +5099,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - keys = asdl_seq_new(len, arena); + keys = _Py_asdl_seq_new(len, arena); if (keys == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5060,7 +5123,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - values = asdl_seq_new(len, arena); + values = _Py_asdl_seq_new(len, arena); if (values == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5095,7 +5158,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - elts = asdl_seq_new(len, arena); + elts = _Py_asdl_seq_new(len, arena); if (elts == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5142,7 +5205,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5189,7 +5252,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5248,7 +5311,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5295,7 +5358,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - generators = asdl_seq_new(len, arena); + generators = _Py_asdl_seq_new(len, arena); if (generators == NULL) goto failed; for (i = 0; i < len; i++) { comprehension_ty value; @@ -5319,7 +5382,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (isinstance) { expr_ty value; - if (_PyObject_HasAttrId(obj, &PyId_value)) { + if (exists_not_none(obj, &PyId_value)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_value); if (tmp == NULL) goto failed; @@ -5386,7 +5449,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - ops = asdl_int_seq_new(len, arena); + ops = _Py_asdl_int_seq_new(len, arena); if (ops == NULL) goto failed; for (i = 0; i < len; i++) { cmpop_ty value; @@ -5410,7 +5473,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - comparators = asdl_seq_new(len, arena); + comparators = _Py_asdl_seq_new(len, arena); if (comparators == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5460,7 +5523,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - args = asdl_seq_new(len, arena); + args = _Py_asdl_seq_new(len, arena); if (args == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5484,7 +5547,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - keywords = asdl_seq_new(len, arena); + keywords = _Py_asdl_seq_new(len, arena); if (keywords == NULL) goto failed; for (i = 0; i < len; i++) { keyword_ty value; @@ -5497,7 +5560,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_starargs)) { + if (exists_not_none(obj, &PyId_starargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_starargs); if (tmp == NULL) goto failed; @@ -5507,7 +5570,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) } else { starargs = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_kwargs)) { + if (exists_not_none(obj, &PyId_kwargs)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_kwargs); if (tmp == NULL) goto failed; @@ -5588,6 +5651,28 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (*out == NULL) goto failed; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject*)NameConstant_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + singleton value; + + if (_PyObject_HasAttrId(obj, &PyId_value)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_value); + if (tmp == NULL) goto failed; + res = obj2ast_singleton(tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NameConstant"); + return 1; + } + *out = NameConstant(value, lineno, col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject*)Ellipsis_type); if (isinstance == -1) { return 1; @@ -5777,7 +5862,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - elts = asdl_seq_new(len, arena); + elts = _Py_asdl_seq_new(len, arena); if (elts == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5824,7 +5909,7 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - elts = asdl_seq_new(len, arena); + elts = _Py_asdl_seq_new(len, arena); if (elts == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -5937,7 +6022,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) expr_ty upper; expr_ty step; - if (_PyObject_HasAttrId(obj, &PyId_lower)) { + if (exists_not_none(obj, &PyId_lower)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_lower); if (tmp == NULL) goto failed; @@ -5947,7 +6032,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) } else { lower = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_upper)) { + if (exists_not_none(obj, &PyId_upper)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_upper); if (tmp == NULL) goto failed; @@ -5957,7 +6042,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) } else { upper = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_step)) { + if (exists_not_none(obj, &PyId_step)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_step); if (tmp == NULL) goto failed; @@ -5989,7 +6074,7 @@ obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - dims = asdl_seq_new(len, arena); + dims = _Py_asdl_seq_new(len, arena); if (dims == NULL) goto failed; for (i = 0; i < len; i++) { slice_ty value; @@ -6340,7 +6425,7 @@ obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - ifs = asdl_seq_new(len, arena); + ifs = _Py_asdl_seq_new(len, arena); if (ifs == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; @@ -6404,7 +6489,7 @@ obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena) identifier name; asdl_seq* body; - if (_PyObject_HasAttrId(obj, &PyId_type)) { + if (exists_not_none(obj, &PyId_type)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_type); if (tmp == NULL) goto failed; @@ -6414,7 +6499,7 @@ obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena) } else { type = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_name)) { + if (exists_not_none(obj, &PyId_name)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_name); if (tmp == NULL) goto failed; @@ -6435,7 +6520,7 @@ obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - body = asdl_seq_new(len, arena); + body = _Py_asdl_seq_new(len, arena); if (body == NULL) goto failed; for (i = 0; i < len; i++) { stmt_ty value; @@ -6464,13 +6549,11 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) { PyObject* tmp = NULL; asdl_seq* args; - identifier vararg; - expr_ty varargannotation; + arg_ty vararg; asdl_seq* kwonlyargs; - identifier kwarg; - expr_ty kwargannotation; - asdl_seq* defaults; asdl_seq* kw_defaults; + arg_ty kwarg; + asdl_seq* defaults; if (_PyObject_HasAttrId(obj, &PyId_args)) { int res; @@ -6483,7 +6566,7 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - args = asdl_seq_new(len, arena); + args = _Py_asdl_seq_new(len, arena); if (args == NULL) goto failed; for (i = 0; i < len; i++) { arg_ty value; @@ -6496,26 +6579,16 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_vararg)) { + if (exists_not_none(obj, &PyId_vararg)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_vararg); if (tmp == NULL) goto failed; - res = obj2ast_identifier(tmp, &vararg, arena); + res = obj2ast_arg(tmp, &vararg, arena); if (res != 0) goto failed; Py_CLEAR(tmp); } else { vararg = NULL; } - if (_PyObject_HasAttrId(obj, &PyId_varargannotation)) { - int res; - tmp = _PyObject_GetAttrId(obj, &PyId_varargannotation); - if (tmp == NULL) goto failed; - res = obj2ast_expr(tmp, &varargannotation, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } else { - varargannotation = NULL; - } if (_PyObject_HasAttrId(obj, &PyId_kwonlyargs)) { int res; Py_ssize_t len; @@ -6527,7 +6600,7 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) goto failed; } len = PyList_GET_SIZE(tmp); - kwonlyargs = asdl_seq_new(len, arena); + kwonlyargs = _Py_asdl_seq_new(len, arena); if (kwonlyargs == NULL) goto failed; for (i = 0; i < len; i++) { arg_ty value; @@ -6540,76 +6613,66 @@ obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_kwarg)) { - int res; - tmp = _PyObject_GetAttrId(obj, &PyId_kwarg); - if (tmp == NULL) goto failed; - res = obj2ast_identifier(tmp, &kwarg, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } else { - kwarg = NULL; - } - if (_PyObject_HasAttrId(obj, &PyId_kwargannotation)) { - int res; - tmp = _PyObject_GetAttrId(obj, &PyId_kwargannotation); - if (tmp == NULL) goto failed; - res = obj2ast_expr(tmp, &kwargannotation, arena); - if (res != 0) goto failed; - Py_CLEAR(tmp); - } else { - kwargannotation = NULL; - } - if (_PyObject_HasAttrId(obj, &PyId_defaults)) { + if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) { int res; Py_ssize_t len; Py_ssize_t i; - tmp = _PyObject_GetAttrId(obj, &PyId_defaults); + tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults); if (tmp == NULL) goto failed; if (!PyList_Check(tmp)) { - PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); + PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); goto failed; } len = PyList_GET_SIZE(tmp); - defaults = asdl_seq_new(len, arena); - if (defaults == NULL) goto failed; + kw_defaults = _Py_asdl_seq_new(len, arena); + if (kw_defaults == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; - asdl_seq_SET(defaults, i, value); + asdl_seq_SET(kw_defaults, i, value); } Py_CLEAR(tmp); } else { - PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments"); + PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) { + if (exists_not_none(obj, &PyId_kwarg)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_kwarg); + if (tmp == NULL) goto failed; + res = obj2ast_arg(tmp, &kwarg, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + kwarg = NULL; + } + if (_PyObject_HasAttrId(obj, &PyId_defaults)) { int res; Py_ssize_t len; Py_ssize_t i; - tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults); + tmp = _PyObject_GetAttrId(obj, &PyId_defaults); if (tmp == NULL) goto failed; if (!PyList_Check(tmp)) { - PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); + PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name); goto failed; } len = PyList_GET_SIZE(tmp); - kw_defaults = asdl_seq_new(len, arena); - if (kw_defaults == NULL) goto failed; + defaults = _Py_asdl_seq_new(len, arena); + if (defaults == NULL) goto failed; for (i = 0; i < len; i++) { expr_ty value; res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena); if (res != 0) goto failed; - asdl_seq_SET(kw_defaults, i, value); + asdl_seq_SET(defaults, i, value); } Py_CLEAR(tmp); } else { - PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments"); + PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments"); return 1; } - *out = arguments(args, vararg, varargannotation, kwonlyargs, kwarg, - kwargannotation, defaults, kw_defaults, arena); + *out = arguments(args, vararg, kwonlyargs, kw_defaults, kwarg, defaults, + arena); return 0; failed: Py_XDECREF(tmp); @@ -6634,7 +6697,7 @@ obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_annotation)) { + if (exists_not_none(obj, &PyId_annotation)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_annotation); if (tmp == NULL) goto failed; @@ -6705,7 +6768,7 @@ obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_asname)) { + if (exists_not_none(obj, &PyId_asname)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_asname); if (tmp == NULL) goto failed; @@ -6740,7 +6803,7 @@ obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena) PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem"); return 1; } - if (_PyObject_HasAttrId(obj, &PyId_optional_vars)) { + if (exists_not_none(obj, &PyId_optional_vars)) { int res; tmp = _PyObject_GetAttrId(obj, &PyId_optional_vars); if (tmp == NULL) goto failed; @@ -6770,7 +6833,7 @@ PyInit__ast(void) if (!m) return NULL; d = PyModule_GetDict(m); if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return NULL; - if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0) + if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) return NULL; if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return NULL; if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0) return @@ -6850,6 +6913,8 @@ PyInit__ast(void) if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return NULL; if (PyDict_SetItemString(d, "Bytes", (PyObject*)Bytes_type) < 0) return NULL; + if (PyDict_SetItemString(d, "NameConstant", (PyObject*)NameConstant_type) < + 0) return NULL; if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0) return NULL; if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) < 0) @@ -6949,7 +7014,8 @@ PyInit__ast(void) PyObject* PyAST_mod2obj(mod_ty t) { - init_types(); + if (!init_types()) + return NULL; return ast2obj_mod(t); } @@ -6963,7 +7029,8 @@ mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode) int isinstance; assert(0 <= mode && mode <= 2); - init_types(); + if (!init_types()) + return NULL; isinstance = PyObject_IsInstance(ast, req_type[mode]); if (isinstance == -1) @@ -6981,7 +7048,8 @@ mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode) int PyAST_Check(PyObject* obj) { - init_types(); + if (!init_types()) + return -1; return PyObject_IsInstance(obj, (PyObject*)&AST_type); } diff --git a/Python/_warnings.c b/Python/_warnings.c index f33e477..6013d7d 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -13,6 +13,8 @@ static PyObject *_filters; /* List */ static PyObject *_once_registry; /* Dict */ static PyObject *_default_action; /* String */ +_Py_IDENTIFIER(argv); +_Py_IDENTIFIER(stderr); static int check_matched(PyObject *obj, PyObject *arg) @@ -99,7 +101,7 @@ get_default_action(void) /* The item is a borrowed reference. */ -static const char * +static PyObject* get_filter(PyObject *category, PyObject *text, Py_ssize_t lineno, PyObject *module, PyObject **item) { @@ -144,21 +146,28 @@ get_filter(PyObject *category, PyObject *text, Py_ssize_t lineno, ln_obj = PyTuple_GET_ITEM(tmp_item, 4); good_msg = check_matched(msg, text); + if (good_msg == -1) + return NULL; + good_mod = check_matched(mod, module); + if (good_mod == -1) + return NULL; + is_subclass = PyObject_IsSubclass(category, cat); + if (is_subclass == -1) + return NULL; + ln = PyLong_AsSsize_t(ln_obj); - if (good_msg == -1 || good_mod == -1 || is_subclass == -1 || - (ln == -1 && PyErr_Occurred())) + if (ln == -1 && PyErr_Occurred()) return NULL; if (good_msg && is_subclass && good_mod && (ln == 0 || lineno == ln)) - return _PyUnicode_AsString(action); + return action; } action = get_default_action(); - if (action != NULL) { - return _PyUnicode_AsString(action); - } + if (action != NULL) + return action; PyErr_SetString(PyExc_ValueError, MODULE_NAME ".defaultaction not found"); @@ -192,23 +201,26 @@ static PyObject * normalize_module(PyObject *filename) { PyObject *module; - const char *mod_str; + int kind; + void *data; Py_ssize_t len; - int rc = PyObject_IsTrue(filename); - if (rc == -1) - return NULL; - else if (rc == 0) - return PyUnicode_FromString("<unknown>"); - - mod_str = _PyUnicode_AsString(filename); - if (mod_str == NULL) - return NULL; len = PyUnicode_GetLength(filename); if (len < 0) return NULL; + + if (len == 0) + return PyUnicode_FromString("<unknown>"); + + kind = PyUnicode_KIND(filename); + data = PyUnicode_DATA(filename); + + /* if filename.endswith(".py"): */ if (len >= 3 && - strncmp(mod_str + (len - 3), ".py", 3) == 0) { + PyUnicode_READ(kind, data, len-3) == '.' && + PyUnicode_READ(kind, data, len-2) == 'p' && + PyUnicode_READ(kind, data, len-1) == 'y') + { module = PyUnicode_Substring(filename, 0, len-3); } else { @@ -253,39 +265,63 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject name = _PyObject_GetAttrId(category, &PyId___name__); if (name == NULL) /* XXX Can an object lack a '__name__' attribute? */ - return; + goto error; - f_stderr = PySys_GetObject("stderr"); + f_stderr = _PySys_GetObjectId(&PyId_stderr); if (f_stderr == NULL) { fprintf(stderr, "lost sys.stderr\n"); - Py_DECREF(name); - return; + goto error; } /* Print "filename:lineno: category: text\n" */ - PyFile_WriteObject(filename, f_stderr, Py_PRINT_RAW); - PyFile_WriteString(lineno_str, f_stderr); - PyFile_WriteObject(name, f_stderr, Py_PRINT_RAW); - PyFile_WriteString(": ", f_stderr); - PyFile_WriteObject(text, f_stderr, Py_PRINT_RAW); - PyFile_WriteString("\n", f_stderr); - Py_XDECREF(name); + if (PyFile_WriteObject(filename, f_stderr, Py_PRINT_RAW) < 0) + goto error; + if (PyFile_WriteString(lineno_str, f_stderr) < 0) + goto error; + if (PyFile_WriteObject(name, f_stderr, Py_PRINT_RAW) < 0) + goto error; + if (PyFile_WriteString(": ", f_stderr) < 0) + goto error; + if (PyFile_WriteObject(text, f_stderr, Py_PRINT_RAW) < 0) + goto error; + if (PyFile_WriteString("\n", f_stderr) < 0) + goto error; + Py_CLEAR(name); /* Print " source_line\n" */ if (sourceline) { - char *source_line_str = _PyUnicode_AsString(sourceline); - if (source_line_str == NULL) - return; - while (*source_line_str == ' ' || *source_line_str == '\t' || - *source_line_str == '\014') - source_line_str++; - - PyFile_WriteString(source_line_str, f_stderr); + int kind; + void *data; + Py_ssize_t i, len; + Py_UCS4 ch; + PyObject *truncated; + + if (PyUnicode_READY(sourceline) < 1) + goto error; + + kind = PyUnicode_KIND(sourceline); + data = PyUnicode_DATA(sourceline); + len = PyUnicode_GET_LENGTH(sourceline); + for (i=0; i<len; i++) { + ch = PyUnicode_READ(kind, data, i); + if (ch != ' ' && ch != '\t' && ch != '\014') + break; + } + + truncated = PyUnicode_Substring(sourceline, i, len); + if (truncated == NULL) + goto error; + + PyFile_WriteObject(sourceline, f_stderr, Py_PRINT_RAW); + Py_DECREF(truncated); PyFile_WriteString("\n", f_stderr); } - else - if (_Py_DisplaySourceLine(f_stderr, filename, lineno, 2) < 0) - return; + else { + _Py_DisplaySourceLine(f_stderr, filename, lineno, 2); + } + +error: + Py_XDECREF(name); PyErr_Clear(); } @@ -296,9 +332,16 @@ warn_explicit(PyObject *category, PyObject *message, { PyObject *key = NULL, *text = NULL, *result = NULL, *lineno_obj = NULL; PyObject *item = Py_None; - const char *action; + PyObject *action; int rc; + /* module can be None if a warning is emitted late during Python shutdown. + In this case, the Python warnings module was probably unloaded, filters + are no more available to choose as action. It is safer to ignore the + warning and do nothing. */ + if (module == Py_None) + Py_RETURN_NONE; + if (registry && !PyDict_Check(registry) && (registry != Py_None)) { PyErr_SetString(PyExc_TypeError, "'registry' must be a dict"); return NULL; @@ -354,7 +397,7 @@ warn_explicit(PyObject *category, PyObject *message, if (action == NULL) goto cleanup; - if (strcmp(action, "error") == 0) { + if (PyUnicode_CompareWithASCIIString(action, "error") == 0) { PyErr_SetObject(category, message); goto cleanup; } @@ -362,13 +405,13 @@ warn_explicit(PyObject *category, PyObject *message, /* Store in the registry that we've been here, *except* when the action is "always". */ rc = 0; - if (strcmp(action, "always") != 0) { + if (PyUnicode_CompareWithASCIIString(action, "always") != 0) { if (registry != NULL && registry != Py_None && PyDict_SetItem(registry, key, Py_True) < 0) goto cleanup; - else if (strcmp(action, "ignore") == 0) + else if (PyUnicode_CompareWithASCIIString(action, "ignore") == 0) goto return_none; - else if (strcmp(action, "once") == 0) { + else if (PyUnicode_CompareWithASCIIString(action, "once") == 0) { if (registry == NULL || registry == Py_None) { registry = get_once_registry(); if (registry == NULL) @@ -377,24 +420,15 @@ warn_explicit(PyObject *category, PyObject *message, /* _once_registry[(text, category)] = 1 */ rc = update_registry(registry, text, category, 0); } - else if (strcmp(action, "module") == 0) { + else if (PyUnicode_CompareWithASCIIString(action, "module") == 0) { /* registry[(text, category, 0)] = 1 */ if (registry != NULL && registry != Py_None) rc = update_registry(registry, text, category, 0); } - else if (strcmp(action, "default") != 0) { - PyObject *to_str = PyObject_Str(item); - const char *err_str = "???"; - - if (to_str != NULL) { - err_str = _PyUnicode_AsString(to_str); - if (err_str == NULL) - goto cleanup; - } + else if (PyUnicode_CompareWithASCIIString(action, "default") != 0) { PyErr_Format(PyExc_RuntimeError, - "Unrecognized action (%s) in warnings.filters:\n %s", - action, err_str); - Py_XDECREF(to_str); + "Unrecognized action (%R) in warnings.filters:\n %R", + action, item); goto cleanup; } } @@ -528,13 +562,12 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, Py_INCREF(*filename); } else { - const char *module_str = _PyUnicode_AsString(*module); *filename = NULL; - if (module_str == NULL) - goto handle_error; - if (strcmp(module_str, "__main__") == 0) { - PyObject *argv = PySys_GetObject("argv"); - if (argv != NULL && PyList_Size(argv) > 0) { + if (*module != Py_None && PyUnicode_CompareWithASCIIString(*module, "__main__") == 0) { + PyObject *argv = _PySys_GetObjectId(&PyId_argv); + /* PyList_Check() is needed because sys.argv is set to None during + Python finalization */ + if (argv != NULL && PyList_Check(argv) && PyList_Size(argv) > 0) { int is_true; *filename = PyList_GetItem(argv, 0); Py_INCREF(*filename); @@ -554,8 +587,8 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, else { /* embedded interpreters don't have sys.argv, see bug #839151 */ *filename = PyUnicode_FromString("__main__"); - if (*filename == NULL) - goto handle_error; + if (*filename == NULL) + goto handle_error; } } if (*filename == NULL) { @@ -649,7 +682,7 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) PyObject *registry = NULL; PyObject *module_globals = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOi|OOO:warn_explicit", + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOO:warn_explicit", kwd_list, &message, &category, &filename, &lineno, &module, ®istry, &module_globals)) return NULL; @@ -707,14 +740,14 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) /* Handle the warning. */ returned = warn_explicit(category, message, filename, lineno, module, - registry, source_line); + registry, source_line); Py_DECREF(source_list); return returned; } standard_call: return warn_explicit(category, message, filename, lineno, module, - registry, NULL); + registry, NULL); } @@ -786,11 +819,26 @@ PyErr_Warn(PyObject *category, char *text) /* Warning with explicit origin */ int +PyErr_WarnExplicitObject(PyObject *category, PyObject *message, + PyObject *filename, int lineno, + PyObject *module, PyObject *registry) +{ + PyObject *res; + if (category == NULL) + category = PyExc_RuntimeWarning; + res = warn_explicit(category, message, filename, lineno, + module, registry, NULL); + if (res == NULL) + return -1; + Py_DECREF(res); + return 0; +} + +int PyErr_WarnExplicit(PyObject *category, const char *text, const char *filename_str, int lineno, const char *module_str, PyObject *registry) { - PyObject *res; PyObject *message = PyUnicode_FromString(text); PyObject *filename = PyUnicode_DecodeFSDefault(filename_str); PyObject *module = NULL; @@ -800,18 +848,12 @@ PyErr_WarnExplicit(PyObject *category, const char *text, goto exit; if (module_str != NULL) { module = PyUnicode_FromString(module_str); - if (module == NULL) - goto exit; + if (module == NULL) + goto exit; } - if (category == NULL) - category = PyExc_RuntimeWarning; - res = warn_explicit(category, message, filename, lineno, module, registry, - NULL); - if (res == NULL) - goto exit; - Py_DECREF(res); - ret = 0; + ret = PyErr_WarnExplicitObject(category, message, filename, lineno, + module, registry); exit: Py_XDECREF(message); @@ -820,6 +862,49 @@ PyErr_WarnExplicit(PyObject *category, const char *text, return ret; } +int +PyErr_WarnExplicitFormat(PyObject *category, + const char *filename_str, int lineno, + const char *module_str, PyObject *registry, + const char *format, ...) +{ + PyObject *message; + PyObject *module = NULL; + PyObject *filename = PyUnicode_DecodeFSDefault(filename_str); + int ret = -1; + va_list vargs; + + if (filename == NULL) + goto exit; + if (module_str != NULL) { + module = PyUnicode_FromString(module_str); + if (module == NULL) + goto exit; + } + +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, format); +#else + va_start(vargs); +#endif + message = PyUnicode_FromFormatV(format, vargs); + if (message != NULL) { + PyObject *res; + res = warn_explicit(category, message, filename, lineno, + module, registry, NULL); + Py_DECREF(message); + if (res != NULL) { + Py_DECREF(res); + ret = 0; + } + } + va_end(vargs); +exit: + Py_XDECREF(module); + Py_XDECREF(filename); + return ret; +} + PyDoc_STRVAR(warn_doc, "Issue a warning, or maybe ignore it or raise an exception."); diff --git a/Python/asdl.c b/Python/asdl.c index e7e3280..74fa941 100644 --- a/Python/asdl.c +++ b/Python/asdl.c @@ -2,7 +2,7 @@ #include "asdl.h" asdl_seq * -asdl_seq_new(Py_ssize_t size, PyArena *arena) +_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena) { asdl_seq *seq = NULL; size_t n = (size ? (sizeof(void *) * (size - 1)) : 0); @@ -33,7 +33,7 @@ asdl_seq_new(Py_ssize_t size, PyArena *arena) } asdl_int_seq * -asdl_int_seq_new(Py_ssize_t size, PyArena *arena) +_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena) { asdl_int_seq *seq = NULL; size_t n = (size ? (sizeof(void *) * (size - 1)) : 0); diff --git a/Python/ast.c b/Python/ast.c index 9a0b064..3bd24fd 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -109,22 +109,14 @@ validate_arguments(arguments_ty args) { if (!validate_args(args->args)) return 0; - if (args->varargannotation) { - if (!args->vararg) { - PyErr_SetString(PyExc_ValueError, "varargannotation but no vararg on arguments"); - return 0; - } - if (!validate_expr(args->varargannotation, Load)) + if (args->vararg && args->vararg->annotation + && !validate_expr(args->vararg->annotation, Load)) { return 0; } if (!validate_args(args->kwonlyargs)) return 0; - if (args->kwargannotation) { - if (!args->kwarg) { - PyErr_SetString(PyExc_ValueError, "kwargannotation but no kwarg on arguments"); - return 0; - } - if (!validate_expr(args->kwargannotation, Load)) + if (args->kwarg && args->kwarg->annotation + && !validate_expr(args->kwarg->annotation, Load)) { return 0; } if (asdl_seq_LEN(args->defaults) > asdl_seq_LEN(args->args)) { @@ -282,6 +274,7 @@ validate_expr(expr_ty exp, expr_context_ty ctx) return validate_exprs(exp->v.Tuple.elts, ctx, 0); /* These last cases don't have any checking. */ case Name_kind: + case NameConstant_kind: case Ellipsis_kind: return 1; default: @@ -498,7 +491,7 @@ PyAST_Validate(mod_ty mod) struct compiling { char *c_encoding; /* source encoding */ PyArena *c_arena; /* arena for allocating memeory */ - const char *c_filename; /* filename */ + PyObject *c_filename; /* filename */ PyObject *c_normalize; /* Normalization function from unicodedata. */ PyObject *c_normalize_args; /* Normalization argument tuple. */ }; @@ -567,7 +560,10 @@ new_identifier(const char *n, struct compiling *c) id = id2; } PyUnicode_InternInPlace(&id); - PyArena_AddPyObject(c->c_arena, id); + if (PyArena_AddPyObject(c->c_arena, id) < 0) { + Py_DECREF(id); + return NULL; + } return id; } @@ -577,24 +573,13 @@ static int ast_error(struct compiling *c, const node *n, const char *errmsg) { PyObject *value, *errstr, *loc, *tmp; - PyObject *filename_obj; - loc = PyErr_ProgramText(c->c_filename, LINENO(n)); + loc = PyErr_ProgramTextObject(c->c_filename, LINENO(n)); if (!loc) { Py_INCREF(Py_None); loc = Py_None; } - if (c->c_filename) { - filename_obj = PyUnicode_DecodeFSDefault(c->c_filename); - if (!filename_obj) { - Py_DECREF(loc); - return 0; - } - } else { - Py_INCREF(Py_None); - filename_obj = Py_None; - } - tmp = Py_BuildValue("(NiiN)", filename_obj, LINENO(n), n->n_col_offset, loc); + tmp = Py_BuildValue("(OiiN)", c->c_filename, LINENO(n), n->n_col_offset, loc); if (!tmp) return 0; errstr = PyUnicode_FromString(errmsg); @@ -677,8 +662,8 @@ num_stmts(const node *n) */ mod_ty -PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, - PyArena *arena) +PyAST_FromNodeObject(const node *n, PyCompilerFlags *flags, + PyObject *filename, PyArena *arena) { int i, j, k, num; asdl_seq *stmts = NULL; @@ -688,6 +673,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, mod_ty res = NULL; c.c_arena = arena; + /* borrowed reference */ c.c_filename = filename; c.c_normalize = c.c_normalize_args = NULL; if (flags && flags->cf_flags & PyCF_SOURCE_IS_UTF8) { @@ -710,7 +696,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, k = 0; switch (TYPE(n)) { case file_input: - stmts = asdl_seq_new(num_stmts(n), arena); + stmts = _Py_asdl_seq_new(num_stmts(n), arena); if (!stmts) goto out; for (i = 0; i < NCH(n) - 1; i++) { @@ -750,7 +736,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, } case single_input: if (TYPE(CHILD(n, 0)) == NEWLINE) { - stmts = asdl_seq_new(1, arena); + stmts = _Py_asdl_seq_new(1, arena); if (!stmts) goto out; asdl_seq_SET(stmts, 0, Pass(n->n_lineno, n->n_col_offset, @@ -762,7 +748,7 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, else { n = CHILD(n, 0); num = num_stmts(n); - stmts = asdl_seq_new(num, arena); + stmts = _Py_asdl_seq_new(num, arena); if (!stmts) goto out; if (num == 1) { @@ -801,6 +787,21 @@ PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename, return res; } +mod_ty +PyAST_FromNode(const node *n, PyCompilerFlags *flags, const char *filename_str, + PyArena *arena) +{ + mod_ty mod; + PyObject *filename; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + mod = PyAST_FromNodeObject(n, flags, filename, arena); + Py_DECREF(filename); + return mod; + +} + /* Return the AST repr. of the operator represented as syntax (|, ^, etc.) */ @@ -903,7 +904,7 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) break; case Name_kind: if (ctx == Store) { - if (forbidden_name(c, e->v.Name.id, n, 1)) + if (forbidden_name(c, e->v.Name.id, n, 0)) return 0; /* forbidden_name() calls ast_error() */ } e->v.Name.ctx = ctx; @@ -955,6 +956,9 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) case Bytes_kind: expr_name = "literal"; break; + case NameConstant_kind: + expr_name = "keyword"; + break; case Ellipsis_kind: expr_name = "Ellipsis"; break; @@ -1095,7 +1099,7 @@ seq_for_testlist(struct compiling *c, const node *n) int i; assert(TYPE(n) == testlist || TYPE(n) == testlist_star_expr || TYPE(n) == testlist_comp); - seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!seq) return NULL; @@ -1119,6 +1123,7 @@ ast_for_arg(struct compiling *c, const node *n) identifier name; expr_ty annotation = NULL; node *ch; + arg_ty tmp; assert(TYPE(n) == tfpdef || TYPE(n) == vfpdef); ch = CHILD(n, 0); @@ -1134,7 +1139,13 @@ ast_for_arg(struct compiling *c, const node *n) return NULL; } - return arg(name, annotation, c->c_arena); + tmp = arg(name, annotation, c->c_arena); + if (!tmp) + return NULL; + + tmp->lineno = LINENO(n); + tmp->col_offset = n->n_col_offset; + return tmp; } /* returns -1 if failed to handle keyword only arguments @@ -1230,15 +1241,13 @@ ast_for_arguments(struct compiling *c, const node *n) int i, j, k, nposargs = 0, nkwonlyargs = 0; int nposdefaults = 0, found_default = 0; asdl_seq *posargs, *posdefaults, *kwonlyargs, *kwdefaults; - identifier vararg = NULL, kwarg = NULL; + arg_ty vararg = NULL, kwarg = NULL; arg_ty arg; - expr_ty varargannotation = NULL, kwargannotation = NULL; node *ch; if (TYPE(n) == parameters) { if (NCH(n) == 2) /* () as argument list */ - return arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, c->c_arena); + return arguments(NULL, NULL, NULL, NULL, NULL, NULL, c->c_arena); n = CHILD(n, 1); } assert(TYPE(n) == typedargslist || TYPE(n) == varargslist); @@ -1270,22 +1279,22 @@ ast_for_arguments(struct compiling *c, const node *n) if (TYPE(ch) == DOUBLESTAR) break; if (TYPE(ch) == tfpdef || TYPE(ch) == vfpdef) nkwonlyargs++; } - posargs = (nposargs ? asdl_seq_new(nposargs, c->c_arena) : NULL); + posargs = (nposargs ? _Py_asdl_seq_new(nposargs, c->c_arena) : NULL); if (!posargs && nposargs) return NULL; kwonlyargs = (nkwonlyargs ? - asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); + _Py_asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); if (!kwonlyargs && nkwonlyargs) return NULL; posdefaults = (nposdefaults ? - asdl_seq_new(nposdefaults, c->c_arena) : NULL); + _Py_asdl_seq_new(nposdefaults, c->c_arena) : NULL); if (!posdefaults && nposdefaults) return NULL; /* The length of kwonlyargs and kwdefaults are same since we set NULL as default for keyword only argument w/o default - we have sequence data structure, but no dictionary */ kwdefaults = (nkwonlyargs ? - asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); + _Py_asdl_seq_new(nkwonlyargs, c->c_arena) : NULL); if (!kwdefaults && nkwonlyargs) return NULL; @@ -1344,17 +1353,10 @@ ast_for_arguments(struct compiling *c, const node *n) i = res; /* res has new position to process */ } else { - vararg = NEW_IDENTIFIER(CHILD(ch, 0)); + vararg = ast_for_arg(c, ch); if (!vararg) return NULL; - if (forbidden_name(c, vararg, CHILD(ch, 0), 0)) - return NULL; - if (NCH(ch) > 1) { - /* there is an annotation on the vararg */ - varargannotation = ast_for_expr(c, CHILD(ch, 2)); - if (!varargannotation) - return NULL; - } + i += 3; if (i < NCH(n) && (TYPE(CHILD(n, i)) == tfpdef || TYPE(CHILD(n, i)) == vfpdef)) { @@ -1369,17 +1371,9 @@ ast_for_arguments(struct compiling *c, const node *n) case DOUBLESTAR: ch = CHILD(n, i+1); /* tfpdef */ assert(TYPE(ch) == tfpdef || TYPE(ch) == vfpdef); - kwarg = NEW_IDENTIFIER(CHILD(ch, 0)); + kwarg = ast_for_arg(c, ch); if (!kwarg) return NULL; - if (NCH(ch) > 1) { - /* there is an annotation on the kwarg */ - kwargannotation = ast_for_expr(c, CHILD(ch, 2)); - if (!kwargannotation) - return NULL; - } - if (forbidden_name(c, kwarg, CHILD(ch, 0), 0)) - return NULL; i += 3; break; default: @@ -1389,8 +1383,7 @@ ast_for_arguments(struct compiling *c, const node *n) return NULL; } } - return arguments(posargs, vararg, varargannotation, kwonlyargs, kwarg, - kwargannotation, posdefaults, kwdefaults, c->c_arena); + return arguments(posargs, vararg, kwonlyargs, kwdefaults, kwarg, posdefaults, c->c_arena); } static expr_ty @@ -1469,7 +1462,7 @@ ast_for_decorators(struct compiling *c, const node *n) int i; REQ(n, decorators); - decorator_seq = asdl_seq_new(NCH(n), c->c_arena); + decorator_seq = _Py_asdl_seq_new(NCH(n), c->c_arena); if (!decorator_seq) return NULL; @@ -1555,8 +1548,7 @@ ast_for_lambdef(struct compiling *c, const node *n) expr_ty expression; if (NCH(n) == 3) { - args = arguments(NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, c->c_arena); + args = arguments(NULL, NULL, NULL, NULL, NULL, NULL, c->c_arena); if (!args) return NULL; expression = ast_for_expr(c, CHILD(n, 2)); @@ -1666,7 +1658,7 @@ ast_for_comprehension(struct compiling *c, const node *n) if (n_fors == -1) return NULL; - comps = asdl_seq_new(n_fors, c->c_arena); + comps = _Py_asdl_seq_new(n_fors, c->c_arena); if (!comps) return NULL; @@ -1707,7 +1699,7 @@ ast_for_comprehension(struct compiling *c, const node *n) if (n_ifs == -1) return NULL; - ifs = asdl_seq_new(n_ifs, c->c_arena); + ifs = _Py_asdl_seq_new(n_ifs, c->c_arena); if (!ifs) return NULL; @@ -1819,11 +1811,21 @@ ast_for_atom(struct compiling *c, const node *n) switch (TYPE(ch)) { case NAME: { - /* All names start in Load context, but may later be - changed. */ - PyObject *name = NEW_IDENTIFIER(ch); + PyObject *name; + const char *s = STR(ch); + size_t len = strlen(s); + if (len >= 4 && len <= 5) { + if (!strcmp(s, "None")) + return NameConstant(Py_None, LINENO(n), n->n_col_offset, c->c_arena); + if (!strcmp(s, "True")) + return NameConstant(Py_True, LINENO(n), n->n_col_offset, c->c_arena); + if (!strcmp(s, "False")) + return NameConstant(Py_False, LINENO(n), n->n_col_offset, c->c_arena); + } + name = new_identifier(s, c); if (!name) return NULL; + /* All names start in Load context, but may later be changed. */ return Name(name, Load, LINENO(n), n->n_col_offset, c->c_arena); } case STRING: { @@ -1848,12 +1850,15 @@ ast_for_atom(struct compiling *c, const node *n) } ast_error(c, n, buf); Py_DECREF(type); - Py_DECREF(value); + Py_XDECREF(value); Py_XDECREF(tback); } return NULL; } - PyArena_AddPyObject(c->c_arena, str); + if (PyArena_AddPyObject(c->c_arena, str) < 0) { + Py_DECREF(str); + return NULL; + } if (bytesmode) return Bytes(str, LINENO(n), n->n_col_offset, c->c_arena); else @@ -1864,7 +1869,10 @@ ast_for_atom(struct compiling *c, const node *n) if (!pynum) return NULL; - PyArena_AddPyObject(c->c_arena, pynum); + if (PyArena_AddPyObject(c->c_arena, pynum) < 0) { + Py_DECREF(pynum); + return NULL; + } return Num(pynum, LINENO(n), n->n_col_offset, c->c_arena); } case ELLIPSIS: /* Ellipsis */ @@ -1913,7 +1921,7 @@ ast_for_atom(struct compiling *c, const node *n) /* it's a simple set */ asdl_seq *elts; size = (NCH(ch) + 1) / 2; /* +1 in case no trailing comma */ - elts = asdl_seq_new(size, c->c_arena); + elts = _Py_asdl_seq_new(size, c->c_arena); if (!elts) return NULL; for (i = 0; i < NCH(ch); i += 2) { @@ -1932,11 +1940,11 @@ ast_for_atom(struct compiling *c, const node *n) } else { /* it's a dict */ size = (NCH(ch) + 1) / 4; /* +1 in case no trailing comma */ - keys = asdl_seq_new(size, c->c_arena); + keys = _Py_asdl_seq_new(size, c->c_arena); if (!keys) return NULL; - values = asdl_seq_new(size, c->c_arena); + values = _Py_asdl_seq_new(size, c->c_arena); if (!values) return NULL; @@ -2093,15 +2101,22 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr) if (NCH(n) == 2) return Call(left_expr, NULL, NULL, NULL, NULL, LINENO(n), n->n_col_offset, c->c_arena); - else - return ast_for_call(c, CHILD(n, 1), left_expr); + else { + expr_ty tmp = ast_for_call(c, CHILD(n, 1), left_expr); + if (!tmp) + return NULL; + + tmp->lineno = LINENO(n); + tmp->col_offset = n->n_col_offset; + return tmp; + } } else if (TYPE(CHILD(n, 0)) == DOT ) { PyObject *attr_id = NEW_IDENTIFIER(CHILD(n, 1)); if (!attr_id) return NULL; return Attribute(left_expr, attr_id, Load, - LINENO(n), n->n_col_offset, c->c_arena); + LINENO(CHILD(n, 1)), CHILD(n, 1)->n_col_offset, c->c_arena); } else { REQ(CHILD(n, 0), LSQB); @@ -2124,7 +2139,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr) expr_ty e; int simple = 1; asdl_seq *slices, *elts; - slices = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + slices = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!slices) return NULL; for (j = 0; j < NCH(n); j += 2) { @@ -2140,7 +2155,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr) Load, LINENO(n), n->n_col_offset, c->c_arena); } /* extract Index values and put them in a Tuple */ - elts = asdl_seq_new(asdl_seq_LEN(slices), c->c_arena); + elts = _Py_asdl_seq_new(asdl_seq_LEN(slices), c->c_arena); if (!elts) return NULL; for (j = 0; j < asdl_seq_LEN(slices); ++j) { @@ -2202,8 +2217,6 @@ ast_for_power(struct compiling *c, const node *n) tmp = ast_for_trailer(c, ch, e); if (!tmp) return NULL; - tmp->lineno = e->lineno; - tmp->col_offset = e->col_offset; e = tmp; } if (TYPE(CHILD(n, NCH(n) - 1)) == factor) { @@ -2275,7 +2288,7 @@ ast_for_expr(struct compiling *c, const node *n) n = CHILD(n, 0); goto loop; } - seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!seq) return NULL; for (i = 0; i < NCH(n); i += 2) { @@ -2311,10 +2324,10 @@ ast_for_expr(struct compiling *c, const node *n) expr_ty expression; asdl_int_seq *ops; asdl_seq *cmps; - ops = asdl_int_seq_new(NCH(n) / 2, c->c_arena); + ops = _Py_asdl_int_seq_new(NCH(n) / 2, c->c_arena); if (!ops) return NULL; - cmps = asdl_seq_new(NCH(n) / 2, c->c_arena); + cmps = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!cmps) { return NULL; } @@ -2440,10 +2453,10 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func) return NULL; } - args = asdl_seq_new(nargs + ngens, c->c_arena); + args = _Py_asdl_seq_new(nargs + ngens, c->c_arena); if (!args) return NULL; - keywords = asdl_seq_new(nkeywords, c->c_arena); + keywords = _Py_asdl_seq_new(nkeywords, c->c_arena); if (!keywords) return NULL; nargs = 0; @@ -2620,7 +2633,7 @@ ast_for_expr_stmt(struct compiling *c, const node *n) /* a normal assignment */ REQ(CHILD(n, 1), EQUAL); - targets = asdl_seq_new(NCH(n) / 2, c->c_arena); + targets = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!targets) return NULL; for (i = 0; i < NCH(n) - 2; i += 2) { @@ -2661,7 +2674,7 @@ ast_for_exprlist(struct compiling *c, const node *n, expr_context_ty context) REQ(n, exprlist); - seq = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + seq = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!seq) return NULL; for (i = 0; i < NCH(n); i += 2) { @@ -2846,13 +2859,19 @@ alias_for_import_name(struct compiling *c, const node *n, int store) return NULL; str = uni; PyUnicode_InternInPlace(&str); - PyArena_AddPyObject(c->c_arena, str); + if (PyArena_AddPyObject(c->c_arena, str) < 0) { + Py_DECREF(str); + return NULL; + } return alias(str, NULL, c->c_arena); } break; case STAR: str = PyUnicode_InternFromString("*"); - PyArena_AddPyObject(c->c_arena, str); + if (PyArena_AddPyObject(c->c_arena, str) < 0) { + Py_DECREF(str); + return NULL; + } return alias(str, NULL, c->c_arena); default: PyErr_Format(PyExc_SystemError, @@ -2885,7 +2904,7 @@ ast_for_import_stmt(struct compiling *c, const node *n) if (TYPE(n) == import_name) { n = CHILD(n, 1); REQ(n, dotted_as_names); - aliases = asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); + aliases = _Py_asdl_seq_new((NCH(n) + 1) / 2, c->c_arena); if (!aliases) return NULL; for (i = 0; i < NCH(n); i += 2) { @@ -2947,7 +2966,7 @@ ast_for_import_stmt(struct compiling *c, const node *n) return NULL; } - aliases = asdl_seq_new((n_children + 1) / 2, c->c_arena); + aliases = _Py_asdl_seq_new((n_children + 1) / 2, c->c_arena); if (!aliases) return NULL; @@ -2986,7 +3005,7 @@ ast_for_global_stmt(struct compiling *c, const node *n) int i; REQ(n, global_stmt); - s = asdl_seq_new(NCH(n) / 2, c->c_arena); + s = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!s) return NULL; for (i = 1; i < NCH(n); i += 2) { @@ -3007,7 +3026,7 @@ ast_for_nonlocal_stmt(struct compiling *c, const node *n) int i; REQ(n, nonlocal_stmt); - s = asdl_seq_new(NCH(n) / 2, c->c_arena); + s = _Py_asdl_seq_new(NCH(n) / 2, c->c_arena); if (!s) return NULL; for (i = 1; i < NCH(n); i += 2) { @@ -3060,7 +3079,7 @@ ast_for_suite(struct compiling *c, const node *n) REQ(n, suite); total = num_stmts(n); - seq = asdl_seq_new(total, c->c_arena); + seq = _Py_asdl_seq_new(total, c->c_arena); if (!seq) return NULL; if (TYPE(CHILD(n, 0)) == simple_stmt) { @@ -3179,7 +3198,7 @@ ast_for_if_stmt(struct compiling *c, const node *n) if (has_else) { asdl_seq *suite_seq2; - orelse = asdl_seq_new(1, c->c_arena); + orelse = _Py_asdl_seq_new(1, c->c_arena); if (!orelse) return NULL; expression = ast_for_expr(c, CHILD(n, NCH(n) - 6)); @@ -3203,7 +3222,7 @@ ast_for_if_stmt(struct compiling *c, const node *n) for (i = 0; i < n_elif; i++) { int off = 5 + (n_elif - i - 1) * 4; - asdl_seq *newobj = asdl_seq_new(1, c->c_arena); + asdl_seq *newobj = _Py_asdl_seq_new(1, c->c_arena); if (!newobj) return NULL; expression = ast_for_expr(c, CHILD(n, off)); @@ -3415,7 +3434,7 @@ ast_for_try_stmt(struct compiling *c, const node *n) if (n_except > 0) { int i; /* process except statements to create a try ... except */ - handlers = asdl_seq_new(n_except, c->c_arena); + handlers = _Py_asdl_seq_new(n_except, c->c_arena); if (handlers == NULL) return NULL; @@ -3466,7 +3485,7 @@ ast_for_with_stmt(struct compiling *c, const node *n) REQ(n, with_stmt); n_items = (NCH(n) - 2) / 2; - items = asdl_seq_new(n_items, c->c_arena); + items = _Py_asdl_seq_new(n_items, c->c_arena); if (!items) return NULL; for (i = 1; i < NCH(n) - 2; i += 2) { @@ -3632,18 +3651,16 @@ parsenumber(struct compiling *c, const char *s) end = s + strlen(s) - 1; imflag = *end == 'j' || *end == 'J'; if (s[0] == '0') { - x = (long) PyOS_strtoul((char *)s, (char **)&end, 0); + x = (long) PyOS_strtoul(s, (char **)&end, 0); if (x < 0 && errno == 0) { - return PyLong_FromString((char *)s, - (char **)0, - 0); + return PyLong_FromString(s, (char **)0, 0); } } else - x = PyOS_strtol((char *)s, (char **)&end, 0); + x = PyOS_strtol(s, (char **)&end, 0); if (*end == '\0') { if (errno != 0) - return PyLong_FromString((char *)s, (char **)0, 0); + return PyLong_FromString(s, (char **)0, 0); return PyLong_FromLong(x); } /* XXX Huge floats may silently fail */ @@ -3666,8 +3683,8 @@ parsenumber(struct compiling *c, const char *s) static PyObject * decode_utf8(struct compiling *c, const char **sPtr, const char *end) { - char *s, *t; - t = s = (char *)*sPtr; + const char *s, *t; + t = s = *sPtr; /* while (s < end && *s != '\\') s++; */ /* inefficient for u".." */ while (s < end && (*s & 0x80)) s++; *sPtr = s; diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index c94daea..e3157d0 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -32,8 +32,19 @@ const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */ int Py_HasFileSystemDefaultEncoding = 0; #endif +_Py_IDENTIFIER(__builtins__); +_Py_IDENTIFIER(__dict__); +_Py_IDENTIFIER(__prepare__); +_Py_IDENTIFIER(__round__); +_Py_IDENTIFIER(encoding); +_Py_IDENTIFIER(errors); _Py_IDENTIFIER(fileno); _Py_IDENTIFIER(flush); +_Py_IDENTIFIER(metaclass); +_Py_IDENTIFIER(sort); +_Py_IDENTIFIER(stdin); +_Py_IDENTIFIER(stdout); +_Py_IDENTIFIER(stderr); static PyObject * builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) @@ -42,7 +53,6 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) PyObject *cls = NULL; Py_ssize_t nargs; int isclass; - _Py_IDENTIFIER(__prepare__); assert(args != NULL); if (!PyTuple_Check(args)) { @@ -57,6 +67,11 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } func = PyTuple_GET_ITEM(args, 0); /* Better be callable */ + if (!PyFunction_Check(func)) { + PyErr_SetString(PyExc_TypeError, + "__build__class__: func must be a function"); + return NULL; + } name = PyTuple_GET_ITEM(args, 1); if (!PyUnicode_Check(name)) { PyErr_SetString(PyExc_TypeError, @@ -77,10 +92,10 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) Py_DECREF(bases); return NULL; } - meta = PyDict_GetItemString(mkw, "metaclass"); + meta = _PyDict_GetItemId(mkw, &PyId_metaclass); if (meta != NULL) { Py_INCREF(meta); - if (PyDict_DelItemString(mkw, "metaclass") < 0) { + if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) { Py_DECREF(meta); Py_DECREF(mkw); Py_DECREF(bases); @@ -155,7 +170,9 @@ builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds) Py_DECREF(bases); return NULL; } - cell = PyObject_CallFunctionObjArgs(func, ns, NULL); + cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns, + NULL, 0, NULL, 0, NULL, 0, NULL, + PyFunction_GET_CLOSURE(func)); if (cell != NULL) { PyObject *margs; margs = PyTuple_Pack(3, name, bases, ns); @@ -333,7 +350,11 @@ builtin_bin(PyObject *self, PyObject *v) PyDoc_STRVAR(bin_doc, "bin(number) -> string\n\ \n\ -Return the binary representation of an integer."); +Return the binary representation of an integer.\n\ +\n\ + >>> bin(2796202)\n\ + '0b1010101010101010101010'\n\ +"); static PyObject * @@ -572,8 +593,7 @@ static PyObject * builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) { char *str; - PyObject *filename_obj; - char *filename; + PyObject *filename; char *startstr; int mode = -1; int dont_inherit = 0; @@ -589,12 +609,11 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO&s|iii:compile", kwlist, &cmd, - PyUnicode_FSConverter, &filename_obj, + PyUnicode_FSDecoder, &filename, &startstr, &supplied_flags, &dont_inherit, &optimize)) return NULL; - filename = PyBytes_AS_STRING(filename_obj); cf.cf_flags = supplied_flags | PyCF_SOURCE_IS_UTF8; if (supplied_flags & @@ -652,24 +671,24 @@ builtin_compile(PyObject *self, PyObject *args, PyObject *kwds) PyArena_Free(arena); goto error; } - result = (PyObject*)PyAST_CompileEx(mod, filename, - &cf, optimize, arena); + result = (PyObject*)PyAST_CompileObject(mod, filename, + &cf, optimize, arena); PyArena_Free(arena); } goto finally; } - str = source_as_string(cmd, "compile", "string, bytes, AST or code", &cf); + str = source_as_string(cmd, "compile", "string, bytes or AST", &cf); if (str == NULL) goto error; - result = Py_CompileStringExFlags(str, filename, start[mode], &cf, optimize); + result = Py_CompileStringObject(str, filename, start[mode], &cf, optimize); goto finally; error: result = NULL; finally: - Py_DECREF(filename_obj); + Py_DECREF(filename); return result; } @@ -750,8 +769,11 @@ builtin_eval(PyObject *self, PyObject *args) } if (globals == Py_None) { globals = PyEval_GetGlobals(); - if (locals == Py_None) + if (locals == Py_None) { locals = PyEval_GetLocals(); + if (locals == NULL) + return NULL; + } } else if (locals == Py_None) locals = globals; @@ -763,9 +785,9 @@ builtin_eval(PyObject *self, PyObject *args) return NULL; } - if (PyDict_GetItemString(globals, "__builtins__") == NULL) { - if (PyDict_SetItemString(globals, "__builtins__", - PyEval_GetBuiltins()) != 0) + if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) { + if (_PyDict_SetItemId(globals, &PyId___builtins__, + PyEval_GetBuiltins()) != 0) return NULL; } @@ -815,6 +837,8 @@ builtin_exec(PyObject *self, PyObject *args) globals = PyEval_GetGlobals(); if (locals == Py_None) { locals = PyEval_GetLocals(); + if (locals == NULL) + return NULL; } if (!globals || !locals) { PyErr_SetString(PyExc_SystemError, @@ -836,9 +860,9 @@ builtin_exec(PyObject *self, PyObject *args) locals->ob_type->tp_name); return NULL; } - if (PyDict_GetItemString(globals, "__builtins__") == NULL) { - if (PyDict_SetItemString(globals, "__builtins__", - PyEval_GetBuiltins()) != 0) + if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) { + if (_PyDict_SetItemId(globals, &PyId___builtins__, + PyEval_GetBuiltins()) != 0) return NULL; } @@ -1256,7 +1280,11 @@ builtin_hex(PyObject *self, PyObject *v) PyDoc_STRVAR(hex_doc, "hex(number) -> string\n\ \n\ -Return the hexadecimal representation of an integer."); +Return the hexadecimal representation of an integer.\n\ +\n\ + >>> hex(3735928559)\n\ + '0xdeadbeef'\n\ +"); static PyObject * @@ -1322,26 +1350,35 @@ static PyObject * min_max(PyObject *args, PyObject *kwds, int op) { PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL; + PyObject *emptytuple, *defaultval = NULL; + static char *kwlist[] = {"key", "default", NULL}; const char *name = op == Py_LT ? "min" : "max"; + const int positional = PyTuple_Size(args) > 1; + int ret; - if (PyTuple_Size(args) > 1) + if (positional) v = args; - else if (!PyArg_UnpackTuple(args, (char *)name, 1, 1, &v)) + else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) return NULL; - if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds)) { - keyfunc = PyDict_GetItemString(kwds, "key"); - if (PyDict_Size(kwds)!=1 || keyfunc == NULL) { - PyErr_Format(PyExc_TypeError, - "%s() got an unexpected keyword argument", name); - return NULL; - } - Py_INCREF(keyfunc); + emptytuple = PyTuple_New(0); + if (emptytuple == NULL) + return NULL; + ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist, + &keyfunc, &defaultval); + Py_DECREF(emptytuple); + if (!ret) + return NULL; + + if (positional && defaultval != NULL) { + PyErr_Format(PyExc_TypeError, + "Cannot specify a default for %s() with multiple " + "positional arguments", name); + return NULL; } it = PyObject_GetIter(v); if (it == NULL) { - Py_XDECREF(keyfunc); return NULL; } @@ -1385,14 +1422,18 @@ min_max(PyObject *args, PyObject *kwds, int op) if (PyErr_Occurred()) goto Fail_it; if (maxval == NULL) { - PyErr_Format(PyExc_ValueError, - "%s() arg is an empty sequence", name); assert(maxitem == NULL); + if (defaultval != NULL) { + Py_INCREF(defaultval); + maxitem = defaultval; + } else { + PyErr_Format(PyExc_ValueError, + "%s() arg is an empty sequence", name); + } } else Py_DECREF(maxval); Py_DECREF(it); - Py_XDECREF(keyfunc); return maxitem; Fail_it_item_and_val: @@ -1403,7 +1444,6 @@ Fail_it: Py_XDECREF(maxval); Py_XDECREF(maxitem); Py_DECREF(it); - Py_XDECREF(keyfunc); return NULL; } @@ -1444,7 +1484,11 @@ builtin_oct(PyObject *self, PyObject *v) PyDoc_STRVAR(oct_doc, "oct(number) -> string\n\ \n\ -Return the octal representation of an integer."); +Return the octal representation of an integer.\n\ +\n\ + >>> oct(342391)\n\ + '0o1234567'\n\ +"); static PyObject * @@ -1530,7 +1574,12 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds) kwlist, &sep, &end, &file, &flush)) return NULL; if (file == NULL || file == Py_None) { - file = PySys_GetObject("stdout"); + file = _PySys_GetObjectId(&PyId_stdout); + if (file == NULL) { + PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); + return NULL; + } + /* sys.stdout may be None when FILE* stdout isn't connected */ if (file == Py_None) Py_RETURN_NONE; @@ -1584,7 +1633,7 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds) if (do_flush == -1) return NULL; else if (do_flush) { - tmp = PyObject_CallMethod(file, "flush", ""); + tmp = _PyObject_CallMethodId(file, &PyId_flush, ""); if (tmp == NULL) return NULL; else @@ -1610,9 +1659,9 @@ static PyObject * builtin_input(PyObject *self, PyObject *args) { PyObject *promptarg = NULL; - PyObject *fin = PySys_GetObject("stdin"); - PyObject *fout = PySys_GetObject("stdout"); - PyObject *ferr = PySys_GetObject("stderr"); + PyObject *fin = _PySys_GetObjectId(&PyId_stdin); + PyObject *fout = _PySys_GetObjectId(&PyId_stdout); + PyObject *ferr = _PySys_GetObjectId(&PyId_stderr); PyObject *tmp; long fd; int tty; @@ -1683,8 +1732,6 @@ builtin_input(PyObject *self, PyObject *args) char *stdin_encoding_str, *stdin_errors_str; PyObject *result; size_t len; - _Py_IDENTIFIER(encoding); - _Py_IDENTIFIER(errors); stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding); stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors); @@ -1810,10 +1857,9 @@ For most object types, eval(repr(object)) == object."); static PyObject * builtin_round(PyObject *self, PyObject *args, PyObject *kwds) { - static PyObject *round_str = NULL; PyObject *ndigits = NULL; static char *kwlist[] = {"number", "ndigits", 0}; - PyObject *number, *round; + PyObject *number, *round, *result; if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round", kwlist, &number, &ndigits)) @@ -1824,24 +1870,21 @@ builtin_round(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } - if (round_str == NULL) { - round_str = PyUnicode_InternFromString("__round__"); - if (round_str == NULL) - return NULL; - } - - round = _PyType_Lookup(Py_TYPE(number), round_str); + round = _PyObject_LookupSpecial(number, &PyId___round__); if (round == NULL) { - PyErr_Format(PyExc_TypeError, - "type %.100s doesn't define __round__ method", - Py_TYPE(number)->tp_name); + if (!PyErr_Occurred()) + PyErr_Format(PyExc_TypeError, + "type %.100s doesn't define __round__ method", + Py_TYPE(number)->tp_name); return NULL; } if (ndigits == NULL) - return PyObject_CallFunction(round, "O", number); + result = PyObject_CallFunctionObjArgs(round, NULL); else - return PyObject_CallFunction(round, "OO", number, ndigits); + result = PyObject_CallFunctionObjArgs(round, ndigits, NULL); + Py_DECREF(round); + return result; } PyDoc_STRVAR(round_doc, @@ -1859,7 +1902,6 @@ builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) PyObject *callable; static char *kwlist[] = {"iterable", "key", "reverse", 0}; int reverse; - _Py_IDENTIFIER(sort); /* args 1-3 should match listsort in Objects/listobject.c */ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted", @@ -1907,16 +1949,11 @@ builtin_vars(PyObject *self, PyObject *args) return NULL; if (v == NULL) { d = PyEval_GetLocals(); - if (d == NULL) { - if (!PyErr_Occurred()) - PyErr_SetString(PyExc_SystemError, - "vars(): no locals!?"); - } - else - Py_INCREF(d); + if (d == NULL) + return NULL; + Py_INCREF(d); } else { - _Py_IDENTIFIER(__dict__); d = _PyObject_GetAttrId(v, &PyId___dict__); if (d == NULL) { PyErr_SetString(PyExc_TypeError, @@ -2413,6 +2450,12 @@ PyObject * _PyBuiltin_Init(void) { PyObject *mod, *dict, *debug; + + if (PyType_Ready(&PyFilter_Type) < 0 || + PyType_Ready(&PyMap_Type) < 0 || + PyType_Ready(&PyZip_Type) < 0) + return NULL; + mod = PyModule_Create(&builtinsmodule); if (mod == NULL) return NULL; diff --git a/Python/ceval.c b/Python/ceval.c index 73925dc..34c52b0 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -37,7 +37,7 @@ typedef unsigned long long uint64; static void ppc_getcounter(uint64 *v) { - register unsigned long tbu, tb, tbu2; + unsigned long tbu, tb, tbu2; loop: asm volatile ("mftbu %0" : "=r" (tbu) ); @@ -123,13 +123,16 @@ static PyObject * load_args(PyObject ***, int); static int lltrace; static int prtrace(PyObject *, char *); #endif -static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *, +static int call_trace(Py_tracefunc, PyObject *, + PyThreadState *, PyFrameObject *, int, PyObject *); static int call_trace_protected(Py_tracefunc, PyObject *, - PyFrameObject *, int, PyObject *); -static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *); + PyThreadState *, PyFrameObject *, + int, PyObject *); +static void call_exc_trace(Py_tracefunc, PyObject *, + PyThreadState *, PyFrameObject *); static int maybe_call_line_trace(Py_tracefunc, PyObject *, - PyFrameObject *, int *, int *, int *); + PyThreadState *, PyFrameObject *, int *, int *, int *); static PyObject * cmp_outcome(int, PyObject *, PyObject *); static PyObject * import_from(PyObject *, PyObject *); @@ -142,8 +145,6 @@ static PyObject * special_lookup(PyObject *, _Py_Identifier *); #define NAME_ERROR_MSG \ "name '%.200s' is not defined" -#define GLOBAL_NAME_ERROR_MSG \ - "global name '%.200s' is not defined" #define UNBOUNDLOCAL_ERROR_MSG \ "local variable '%.200s' referenced before assignment" #define UNBOUNDFREE_ERROR_MSG \ @@ -364,29 +365,28 @@ PyEval_ReleaseThread(PyThreadState *tstate) drop_gil(tstate); } -/* This function is called from PyOS_AfterFork to ensure that newly - created child processes don't hold locks referring to threads which - are not running in the child process. (This could also be done using - pthread_atfork mechanism, at least for the pthreads implementation.) */ +/* This function is called from PyOS_AfterFork to destroy all threads which are + * not running in the child process, and clear internal locks which might be + * held by those threads. (This could also be done using pthread_atfork + * mechanism, at least for the pthreads implementation.) */ void PyEval_ReInitThreads(void) { _Py_IDENTIFIER(_after_fork); PyObject *threading, *result; - PyThreadState *tstate = PyThreadState_GET(); + PyThreadState *current_tstate = PyThreadState_GET(); if (!gil_created()) return; recreate_gil(); pending_lock = PyThread_allocate_lock(); - take_gil(tstate); + take_gil(current_tstate); main_thread = PyThread_get_thread_ident(); /* Update the threading module with the new state. */ - tstate = PyThreadState_GET(); - threading = PyMapping_GetItemString(tstate->interp->modules, + threading = PyMapping_GetItemString(current_tstate->interp->modules, "threading"); if (threading == NULL) { /* threading not imported */ @@ -399,6 +399,9 @@ PyEval_ReInitThreads(void) else Py_DECREF(result); Py_DECREF(threading); + + /* Destroy all threads except the current one */ + _PyThreadState_DeleteExcept(current_tstate); } #else @@ -742,7 +745,6 @@ _Py_CheckRecursiveCall(char *where) enum why_code { WHY_NOT = 0x0001, /* No error */ WHY_EXCEPTION = 0x0002, /* Exception occurred */ - WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */ WHY_RETURN = 0x0008, /* 'return' statement */ WHY_BREAK = 0x0010, /* 'break' statement */ WHY_CONTINUE = 0x0020, /* 'continue' statement */ @@ -753,7 +755,7 @@ enum why_code { static void save_exc_state(PyThreadState *, PyFrameObject *); static void swap_exc_state(PyThreadState *, PyFrameObject *); static void restore_and_clear_exc_state(PyThreadState *, PyFrameObject *); -static enum why_code do_raise(PyObject *, PyObject *); +static int do_raise(PyObject *, PyObject *); static int unpack_iterable(PyObject *, int, int, PyObject **); /* Records whether tracing is on for any thread. Counts the number of @@ -793,18 +795,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #ifdef DXPAIRS int lastopcode = 0; #endif - register PyObject **stack_pointer; /* Next free slot in value stack */ - register unsigned char *next_instr; - register int opcode; /* Current opcode */ - register int oparg; /* Current opcode argument, if any */ - register enum why_code why; /* Reason for block stack unwind */ - register int err; /* Error status -- nonzero if error */ - register PyObject *x; /* Result object -- NULL if error */ - register PyObject *v; /* Temporary objects popped off stack */ - register PyObject *w; - register PyObject *u; - register PyObject *t; - register PyObject **fastlocals, **freevars; + PyObject **stack_pointer; /* Next free slot in value stack */ + unsigned char *next_instr; + int opcode; /* Current opcode */ + int oparg; /* Current opcode argument, if any */ + enum why_code why; /* Reason for block stack unwind */ + PyObject **fastlocals, **freevars; PyObject *retval = NULL; /* Return value */ PyThreadState *tstate = PyThreadState_GET(); PyCodeObject *co; @@ -1143,7 +1139,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) whenever an exception is detected. */ if (call_trace_protected(tstate->c_tracefunc, tstate->c_traceobj, - f, PyTrace_CALL, Py_None)) { + tstate, f, PyTrace_CALL, Py_None)) { /* Trace function raised an error */ goto exit_eval_frame; } @@ -1153,7 +1149,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) return itself and isn't called for "line" events */ if (call_trace_protected(tstate->c_profilefunc, tstate->c_profileobj, - f, PyTrace_CALL, Py_None)) { + tstate, f, PyTrace_CALL, Py_None)) { /* Profile function raised an error */ goto exit_eval_frame; } @@ -1189,6 +1185,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) stack_pointer = f->f_stacktop; assert(stack_pointer != NULL); f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ + f->f_executing = 1; if (co->co_flags & CO_GENERATOR && !throwflag) { if (f->f_exc_type != NULL && f->f_exc_type != Py_None) { @@ -1206,14 +1203,16 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #endif why = WHY_NOT; - err = 0; - x = Py_None; /* Not a reference, just anything non-NULL */ - w = NULL; - if (throwflag) { /* support for generator.throw() */ - why = WHY_EXCEPTION; - goto on_error; - } + if (throwflag) /* support for generator.throw() */ + goto error; + +#ifdef Py_DEBUG + /* PyEval_EvalFrameEx() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller looses its exception */ + assert(!PyErr_Occurred()); +#endif for (;;) { #ifdef WITH_TSC @@ -1235,6 +1234,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #endif assert(stack_pointer >= f->f_valuestack); /* else underflow */ assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */ + assert(!PyErr_Occurred()); /* Do periodic things. Doing this every time through the loop would add too much overhead, so we do it @@ -1250,15 +1250,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) a try: finally: block uninterruptible. */ goto fast_next_opcode; } - tstate->tick_counter++; #ifdef WITH_TSC ticked = 1; #endif if (_Py_atomic_load_relaxed(&pendingcalls_to_do)) { - if (Py_MakePendingCalls() < 0) { - why = WHY_EXCEPTION; - goto on_error; - } + if (Py_MakePendingCalls() < 0) + goto error; } #ifdef WITH_THREAD if (_Py_atomic_load_relaxed(&gil_drop_request)) { @@ -1276,13 +1273,12 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #endif /* Check for asynchronous exceptions. */ if (tstate->async_exc != NULL) { - x = tstate->async_exc; + PyObject *exc = tstate->async_exc; tstate->async_exc = NULL; UNSIGNAL_ASYNC_EXC(); - PyErr_SetNone(x); - Py_DECREF(x); - why = WHY_EXCEPTION; - goto on_error; + PyErr_SetNone(exc); + Py_DECREF(exc); + goto error; } } @@ -1293,24 +1289,24 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) if (_Py_TracingPossible && tstate->c_tracefunc != NULL && !tstate->tracing) { + int err; /* see maybe_call_line_trace for expository comments */ f->f_stacktop = stack_pointer; err = maybe_call_line_trace(tstate->c_tracefunc, tstate->c_traceobj, - f, &instr_lb, &instr_ub, - &instr_prev); + tstate, f, + &instr_lb, &instr_ub, &instr_prev); /* Reload possibly changed frame fields */ JUMPTO(f->f_lasti); if (f->f_stacktop != NULL) { stack_pointer = f->f_stacktop; f->f_stacktop = NULL; } - if (err) { + if (err) /* trace function raised an exception */ - goto on_error; - } + goto error; } /* Extract opcode and argument */ @@ -1357,87 +1353,99 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) TARGET(NOP) FAST_DISPATCH(); - TARGET(LOAD_FAST) - x = GETLOCAL(oparg); - if (x != NULL) { - Py_INCREF(x); - PUSH(x); - FAST_DISPATCH(); + TARGET(LOAD_FAST) { + PyObject *value = GETLOCAL(oparg); + if (value == NULL) { + format_exc_check_arg(PyExc_UnboundLocalError, + UNBOUNDLOCAL_ERROR_MSG, + PyTuple_GetItem(co->co_varnames, oparg)); + goto error; } - format_exc_check_arg(PyExc_UnboundLocalError, - UNBOUNDLOCAL_ERROR_MSG, - PyTuple_GetItem(co->co_varnames, oparg)); - break; + Py_INCREF(value); + PUSH(value); + FAST_DISPATCH(); + } - TARGET(LOAD_CONST) - x = GETITEM(consts, oparg); - Py_INCREF(x); - PUSH(x); + TARGET(LOAD_CONST) { + PyObject *value = GETITEM(consts, oparg); + Py_INCREF(value); + PUSH(value); FAST_DISPATCH(); + } PREDICTED_WITH_ARG(STORE_FAST); - TARGET(STORE_FAST) - v = POP(); - SETLOCAL(oparg, v); + TARGET(STORE_FAST) { + PyObject *value = POP(); + SETLOCAL(oparg, value); FAST_DISPATCH(); + } - TARGET(POP_TOP) - v = POP(); - Py_DECREF(v); + TARGET(POP_TOP) { + PyObject *value = POP(); + Py_DECREF(value); FAST_DISPATCH(); + } - TARGET(ROT_TWO) - v = TOP(); - w = SECOND(); - SET_TOP(w); - SET_SECOND(v); + TARGET(ROT_TWO) { + PyObject *top = TOP(); + PyObject *second = SECOND(); + SET_TOP(second); + SET_SECOND(top); FAST_DISPATCH(); + } - TARGET(ROT_THREE) - v = TOP(); - w = SECOND(); - x = THIRD(); - SET_TOP(w); - SET_SECOND(x); - SET_THIRD(v); + TARGET(ROT_THREE) { + PyObject *top = TOP(); + PyObject *second = SECOND(); + PyObject *third = THIRD(); + SET_TOP(second); + SET_SECOND(third); + SET_THIRD(top); FAST_DISPATCH(); + } - TARGET(DUP_TOP) - v = TOP(); - Py_INCREF(v); - PUSH(v); + TARGET(DUP_TOP) { + PyObject *top = TOP(); + Py_INCREF(top); + PUSH(top); FAST_DISPATCH(); + } - TARGET(DUP_TOP_TWO) - x = TOP(); - Py_INCREF(x); - w = SECOND(); - Py_INCREF(w); + TARGET(DUP_TOP_TWO) { + PyObject *top = TOP(); + PyObject *second = SECOND(); + Py_INCREF(top); + Py_INCREF(second); STACKADJ(2); - SET_TOP(x); - SET_SECOND(w); + SET_TOP(top); + SET_SECOND(second); FAST_DISPATCH(); + } - TARGET(UNARY_POSITIVE) - v = TOP(); - x = PyNumber_Positive(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(UNARY_POSITIVE) { + PyObject *value = TOP(); + PyObject *res = PyNumber_Positive(value); + Py_DECREF(value); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(UNARY_NEGATIVE) - v = TOP(); - x = PyNumber_Negative(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(UNARY_NEGATIVE) { + PyObject *value = TOP(); + PyObject *res = PyNumber_Negative(value); + Py_DECREF(value); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(UNARY_NOT) - v = TOP(); - err = PyObject_IsTrue(v); - Py_DECREF(v); + TARGET(UNARY_NOT) { + PyObject *value = TOP(); + int err = PyObject_IsTrue(value); + Py_DECREF(value); if (err == 0) { Py_INCREF(Py_True); SET_TOP(Py_True); @@ -1450,416 +1458,464 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } STACKADJ(-1); - break; + goto error; + } - TARGET(UNARY_INVERT) - v = TOP(); - x = PyNumber_Invert(v); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(UNARY_INVERT) { + PyObject *value = TOP(); + PyObject *res = PyNumber_Invert(value); + Py_DECREF(value); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_POWER) - w = POP(); - v = TOP(); - x = PyNumber_Power(v, w, Py_None); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_POWER) { + PyObject *exp = POP(); + PyObject *base = TOP(); + PyObject *res = PyNumber_Power(base, exp, Py_None); + Py_DECREF(base); + Py_DECREF(exp); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_MULTIPLY) - w = POP(); - v = TOP(); - x = PyNumber_Multiply(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_MULTIPLY) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Multiply(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_TRUE_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_TrueDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_TRUE_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_TrueDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_FLOOR_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_FloorDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_FLOOR_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_FloorDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_MODULO) - w = POP(); - v = TOP(); - if (PyUnicode_CheckExact(v)) - x = PyUnicode_Format(v, w); - else - x = PyNumber_Remainder(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_MODULO) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *res = PyUnicode_CheckExact(dividend) ? + PyUnicode_Format(dividend, divisor) : + PyNumber_Remainder(dividend, divisor); + Py_DECREF(divisor); + Py_DECREF(dividend); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_ADD) - w = POP(); - v = TOP(); - if (PyUnicode_CheckExact(v) && - PyUnicode_CheckExact(w)) { - x = unicode_concatenate(v, w, f, next_instr); + TARGET(BINARY_ADD) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *sum; + if (PyUnicode_CheckExact(left) && + PyUnicode_CheckExact(right)) { + sum = unicode_concatenate(left, right, f, next_instr); /* unicode_concatenate consumed the ref to v */ - goto skip_decref_vx; } else { - x = PyNumber_Add(v, w); + sum = PyNumber_Add(left, right); + Py_DECREF(left); } - Py_DECREF(v); - skip_decref_vx: - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; - - TARGET(BINARY_SUBTRACT) - w = POP(); - v = TOP(); - x = PyNumber_Subtract(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; - - TARGET(BINARY_SUBSCR) - w = POP(); - v = TOP(); - x = PyObject_GetItem(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + Py_DECREF(right); + SET_TOP(sum); + if (sum == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_LSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_Lshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_SUBTRACT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *diff = PyNumber_Subtract(left, right); + Py_DECREF(right); + Py_DECREF(left); + SET_TOP(diff); + if (diff == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_RSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_Rshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_SUBSCR) { + PyObject *sub = POP(); + PyObject *container = TOP(); + PyObject *res = PyObject_GetItem(container, sub); + Py_DECREF(container); + Py_DECREF(sub); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_AND) - w = POP(); - v = TOP(); - x = PyNumber_And(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_LSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Lshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_XOR) - w = POP(); - v = TOP(); - x = PyNumber_Xor(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_RSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Rshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(BINARY_OR) - w = POP(); - v = TOP(); - x = PyNumber_Or(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BINARY_AND) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_And(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(LIST_APPEND) - w = POP(); - v = PEEK(oparg); - err = PyList_Append(v, w); - Py_DECREF(w); - if (err == 0) { - PREDICT(JUMP_ABSOLUTE); - DISPATCH(); - } - break; + TARGET(BINARY_XOR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Xor(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(SET_ADD) - w = POP(); - v = stack_pointer[-oparg]; - err = PySet_Add(v, w); - Py_DECREF(w); - if (err == 0) { - PREDICT(JUMP_ABSOLUTE); - DISPATCH(); - } - break; + TARGET(BINARY_OR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_Or(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_POWER) - w = POP(); - v = TOP(); - x = PyNumber_InPlacePower(v, w, Py_None); + TARGET(LIST_APPEND) { + PyObject *v = POP(); + PyObject *list = PEEK(oparg); + int err; + err = PyList_Append(list, v); Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + if (err != 0) + goto error; + PREDICT(JUMP_ABSOLUTE); + DISPATCH(); + } - TARGET(INPLACE_MULTIPLY) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceMultiply(v, w); + TARGET(SET_ADD) { + PyObject *v = POP(); + PyObject *set = stack_pointer[-oparg]; + int err; + err = PySet_Add(set, v); Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + if (err != 0) + goto error; + PREDICT(JUMP_ABSOLUTE); + DISPATCH(); + } - TARGET(INPLACE_TRUE_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceTrueDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_POWER) { + PyObject *exp = POP(); + PyObject *base = TOP(); + PyObject *res = PyNumber_InPlacePower(base, exp, Py_None); + Py_DECREF(base); + Py_DECREF(exp); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_FLOOR_DIVIDE) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceFloorDivide(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_MULTIPLY) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceMultiply(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_MODULO) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceRemainder(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_TRUE_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_InPlaceTrueDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } + + TARGET(INPLACE_FLOOR_DIVIDE) { + PyObject *divisor = POP(); + PyObject *dividend = TOP(); + PyObject *quotient = PyNumber_InPlaceFloorDivide(dividend, divisor); + Py_DECREF(dividend); + Py_DECREF(divisor); + SET_TOP(quotient); + if (quotient == NULL) + goto error; + DISPATCH(); + } + + TARGET(INPLACE_MODULO) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *mod = PyNumber_InPlaceRemainder(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(mod); + if (mod == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_ADD) - w = POP(); - v = TOP(); - if (PyUnicode_CheckExact(v) && - PyUnicode_CheckExact(w)) { - x = unicode_concatenate(v, w, f, next_instr); + TARGET(INPLACE_ADD) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *sum; + if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { + sum = unicode_concatenate(left, right, f, next_instr); /* unicode_concatenate consumed the ref to v */ - goto skip_decref_v; } else { - x = PyNumber_InPlaceAdd(v, w); + sum = PyNumber_InPlaceAdd(left, right); + Py_DECREF(left); } - Py_DECREF(v); - skip_decref_v: - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + Py_DECREF(right); + SET_TOP(sum); + if (sum == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_SUBTRACT) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceSubtract(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_SUBTRACT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *diff = PyNumber_InPlaceSubtract(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(diff); + if (diff == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_LSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceLshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_LSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceLshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_RSHIFT) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceRshift(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_RSHIFT) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceRshift(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_AND) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceAnd(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_AND) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceAnd(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_XOR) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceXor(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_XOR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceXor(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(INPLACE_OR) - w = POP(); - v = TOP(); - x = PyNumber_InPlaceOr(v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(INPLACE_OR) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = PyNumber_InPlaceOr(left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(STORE_SUBSCR) - w = TOP(); - v = SECOND(); - u = THIRD(); + TARGET(STORE_SUBSCR) { + PyObject *sub = TOP(); + PyObject *container = SECOND(); + PyObject *v = THIRD(); + int err; STACKADJ(-3); /* v[w] = u */ - err = PyObject_SetItem(v, w, u); - Py_DECREF(u); + err = PyObject_SetItem(container, sub, v); Py_DECREF(v); - Py_DECREF(w); - if (err == 0) DISPATCH(); - break; + Py_DECREF(container); + Py_DECREF(sub); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_SUBSCR) - w = TOP(); - v = SECOND(); + TARGET(DELETE_SUBSCR) { + PyObject *sub = TOP(); + PyObject *container = SECOND(); + int err; STACKADJ(-2); /* del v[w] */ - err = PyObject_DelItem(v, w); - Py_DECREF(v); - Py_DECREF(w); - if (err == 0) DISPATCH(); - break; + err = PyObject_DelItem(container, sub); + Py_DECREF(container); + Py_DECREF(sub); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(PRINT_EXPR) - v = POP(); - w = PySys_GetObject("displayhook"); - if (w == NULL) { + TARGET(PRINT_EXPR) { + _Py_IDENTIFIER(displayhook); + PyObject *value = POP(); + PyObject *hook = _PySys_GetObjectId(&PyId_displayhook); + PyObject *res; + if (hook == NULL) { PyErr_SetString(PyExc_RuntimeError, "lost sys.displayhook"); - err = -1; - x = NULL; - } - if (err == 0) { - x = PyTuple_Pack(1, v); - if (x == NULL) - err = -1; + Py_DECREF(value); + goto error; } - if (err == 0) { - w = PyEval_CallObject(w, x); - Py_XDECREF(w); - if (w == NULL) - err = -1; - } - Py_DECREF(v); - Py_XDECREF(x); - break; + res = PyObject_CallFunctionObjArgs(hook, value, NULL); + Py_DECREF(value); + if (res == NULL) + goto error; + Py_DECREF(res); + DISPATCH(); + } #ifdef CASE_TOO_BIG default: switch (opcode) { #endif - TARGET(RAISE_VARARGS) - v = w = NULL; + TARGET(RAISE_VARARGS) { + PyObject *cause = NULL, *exc = NULL; switch (oparg) { case 2: - v = POP(); /* cause */ + cause = POP(); /* cause */ case 1: - w = POP(); /* exc */ + exc = POP(); /* exc */ case 0: /* Fallthrough */ - why = do_raise(w, v); + if (do_raise(exc, cause)) { + why = WHY_EXCEPTION; + goto fast_block_end; + } break; default: PyErr_SetString(PyExc_SystemError, "bad RAISE_VARARGS oparg"); - why = WHY_EXCEPTION; break; } - break; - - TARGET(STORE_LOCALS) - x = POP(); - v = f->f_locals; - Py_XDECREF(v); - f->f_locals = x; - DISPATCH(); + goto error; + } - TARGET(RETURN_VALUE) + TARGET(RETURN_VALUE) { retval = POP(); why = WHY_RETURN; goto fast_block_end; + } - TARGET(YIELD_FROM) - u = POP(); - x = TOP(); - /* send u to x */ - if (PyGen_CheckExact(x)) { - retval = _PyGen_Send((PyGenObject *)x, u); + TARGET(YIELD_FROM) { + PyObject *v = POP(); + PyObject *reciever = TOP(); + int err; + if (PyGen_CheckExact(reciever)) { + retval = _PyGen_Send((PyGenObject *)reciever, v); } else { _Py_IDENTIFIER(send); - if (u == Py_None) - retval = Py_TYPE(x)->tp_iternext(x); + if (v == Py_None) + retval = Py_TYPE(reciever)->tp_iternext(reciever); else - retval = _PyObject_CallMethodId(x, &PyId_send, "O", u); + retval = _PyObject_CallMethodId(reciever, &PyId_send, "O", v); } - Py_DECREF(u); - if (!retval) { + Py_DECREF(v); + if (retval == NULL) { PyObject *val; - x = POP(); /* Remove iter from stack */ - Py_DECREF(x); + if (tstate->c_tracefunc != NULL + && PyErr_ExceptionMatches(PyExc_StopIteration)) + call_exc_trace(tstate->c_tracefunc, tstate->c_traceobj, tstate, f); err = _PyGen_FetchStopIterationValue(&val); - if (err < 0) { - x = NULL; - break; - } - x = val; - PUSH(x); - continue; + if (err < 0) + goto error; + Py_DECREF(reciever); + SET_TOP(val); + DISPATCH(); } /* x remains on stack, retval is value to be yielded */ f->f_stacktop = stack_pointer; @@ -1867,39 +1923,38 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) /* and repeat... */ f->f_lasti--; goto fast_yield; + } - TARGET(YIELD_VALUE) + TARGET(YIELD_VALUE) { retval = POP(); f->f_stacktop = stack_pointer; why = WHY_YIELD; goto fast_yield; + } - TARGET(POP_EXCEPT) - { - PyTryBlock *b = PyFrame_BlockPop(f); - if (b->b_type != EXCEPT_HANDLER) { - PyErr_SetString(PyExc_SystemError, - "popped block is not an except handler"); - why = WHY_EXCEPTION; - break; - } - UNWIND_EXCEPT_HANDLER(b); + TARGET(POP_EXCEPT) { + PyTryBlock *b = PyFrame_BlockPop(f); + if (b->b_type != EXCEPT_HANDLER) { + PyErr_SetString(PyExc_SystemError, + "popped block is not an except handler"); + goto error; } + UNWIND_EXCEPT_HANDLER(b); DISPATCH(); + } - TARGET(POP_BLOCK) - { - PyTryBlock *b = PyFrame_BlockPop(f); - UNWIND_BLOCK(b); - } + TARGET(POP_BLOCK) { + PyTryBlock *b = PyFrame_BlockPop(f); + UNWIND_BLOCK(b); DISPATCH(); + } PREDICTED(END_FINALLY); - TARGET(END_FINALLY) - v = POP(); - if (PyLong_Check(v)) { - why = (enum why_code) PyLong_AS_LONG(v); - assert(why != WHY_YIELD); + TARGET(END_FINALLY) { + PyObject *status = POP(); + if (PyLong_Check(status)) { + why = (enum why_code) PyLong_AS_LONG(status); + assert(why != WHY_YIELD && why != WHY_EXCEPTION); if (why == WHY_RETURN || why == WHY_CONTINUE) retval = POP(); @@ -1912,248 +1967,280 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) assert(b->b_type == EXCEPT_HANDLER); UNWIND_EXCEPT_HANDLER(b); why = WHY_NOT; + Py_DECREF(status); + DISPATCH(); } + Py_DECREF(status); + goto fast_block_end; } - else if (PyExceptionClass_Check(v)) { - w = POP(); - u = POP(); - PyErr_Restore(v, w, u); - why = WHY_RERAISE; - break; + else if (PyExceptionClass_Check(status)) { + PyObject *exc = POP(); + PyObject *tb = POP(); + PyErr_Restore(status, exc, tb); + why = WHY_EXCEPTION; + goto fast_block_end; } - else if (v != Py_None) { + else if (status != Py_None) { PyErr_SetString(PyExc_SystemError, "'finally' pops bad exception"); - why = WHY_EXCEPTION; + Py_DECREF(status); + goto error; } - Py_DECREF(v); - break; + Py_DECREF(status); + DISPATCH(); + } - TARGET(LOAD_BUILD_CLASS) - { + TARGET(LOAD_BUILD_CLASS) { _Py_IDENTIFIER(__build_class__); + PyObject *bc; if (PyDict_CheckExact(f->f_builtins)) { - x = _PyDict_GetItemId(f->f_builtins, &PyId___build_class__); - if (x == NULL) { + bc = _PyDict_GetItemId(f->f_builtins, &PyId___build_class__); + if (bc == NULL) { PyErr_SetString(PyExc_NameError, "__build_class__ not found"); - break; + goto error; } - Py_INCREF(x); + Py_INCREF(bc); } else { PyObject *build_class_str = _PyUnicode_FromId(&PyId___build_class__); if (build_class_str == NULL) break; - x = PyObject_GetItem(f->f_builtins, build_class_str); - if (x == NULL) { + bc = PyObject_GetItem(f->f_builtins, build_class_str); + if (bc == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) PyErr_SetString(PyExc_NameError, "__build_class__ not found"); - break; + goto error; } } - PUSH(x); - break; + PUSH(bc); + DISPATCH(); } - TARGET(STORE_NAME) - w = GETITEM(names, oparg); - v = POP(); - if ((x = f->f_locals) != NULL) { - if (PyDict_CheckExact(x)) - err = PyDict_SetItem(x, w, v); - else - err = PyObject_SetItem(x, w, v); + TARGET(STORE_NAME) { + PyObject *name = GETITEM(names, oparg); + PyObject *v = POP(); + PyObject *ns = f->f_locals; + int err; + if (ns == NULL) { + PyErr_Format(PyExc_SystemError, + "no locals found when storing %R", name); Py_DECREF(v); - if (err == 0) DISPATCH(); - break; + goto error; } - PyErr_Format(PyExc_SystemError, - "no locals found when storing %R", w); - break; + if (PyDict_CheckExact(ns)) + err = PyDict_SetItem(ns, name, v); + else + err = PyObject_SetItem(ns, name, v); + Py_DECREF(v); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_NAME) - w = GETITEM(names, oparg); - if ((x = f->f_locals) != NULL) { - if ((err = PyObject_DelItem(x, w)) != 0) - format_exc_check_arg(PyExc_NameError, - NAME_ERROR_MSG, - w); - break; + TARGET(DELETE_NAME) { + PyObject *name = GETITEM(names, oparg); + PyObject *ns = f->f_locals; + int err; + if (ns == NULL) { + PyErr_Format(PyExc_SystemError, + "no locals when deleting %R", name); + goto error; } - PyErr_Format(PyExc_SystemError, - "no locals when deleting %R", w); - break; + err = PyObject_DelItem(ns, name); + if (err != 0) { + format_exc_check_arg(PyExc_NameError, + NAME_ERROR_MSG, + name); + goto error; + } + DISPATCH(); + } PREDICTED_WITH_ARG(UNPACK_SEQUENCE); - TARGET(UNPACK_SEQUENCE) - v = POP(); - if (PyTuple_CheckExact(v) && - PyTuple_GET_SIZE(v) == oparg) { - PyObject **items = \ - ((PyTupleObject *)v)->ob_item; + TARGET(UNPACK_SEQUENCE) { + PyObject *seq = POP(), *item, **items; + if (PyTuple_CheckExact(seq) && + PyTuple_GET_SIZE(seq) == oparg) { + items = ((PyTupleObject *)seq)->ob_item; while (oparg--) { - w = items[oparg]; - Py_INCREF(w); - PUSH(w); + item = items[oparg]; + Py_INCREF(item); + PUSH(item); } - Py_DECREF(v); - DISPATCH(); - } else if (PyList_CheckExact(v) && - PyList_GET_SIZE(v) == oparg) { - PyObject **items = \ - ((PyListObject *)v)->ob_item; + } else if (PyList_CheckExact(seq) && + PyList_GET_SIZE(seq) == oparg) { + items = ((PyListObject *)seq)->ob_item; while (oparg--) { - w = items[oparg]; - Py_INCREF(w); - PUSH(w); + item = items[oparg]; + Py_INCREF(item); + PUSH(item); } - } else if (unpack_iterable(v, oparg, -1, + } else if (unpack_iterable(seq, oparg, -1, stack_pointer + oparg)) { STACKADJ(oparg); } else { /* unpack_iterable() raised an exception */ - why = WHY_EXCEPTION; + Py_DECREF(seq); + goto error; } - Py_DECREF(v); - break; + Py_DECREF(seq); + DISPATCH(); + } - TARGET(UNPACK_EX) - { + TARGET(UNPACK_EX) { int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8); - v = POP(); + PyObject *seq = POP(); - if (unpack_iterable(v, oparg & 0xFF, oparg >> 8, + if (unpack_iterable(seq, oparg & 0xFF, oparg >> 8, stack_pointer + totalargs)) { stack_pointer += totalargs; } else { - why = WHY_EXCEPTION; + Py_DECREF(seq); + goto error; } - Py_DECREF(v); - break; + Py_DECREF(seq); + DISPATCH(); } - TARGET(STORE_ATTR) - w = GETITEM(names, oparg); - v = TOP(); - u = SECOND(); + TARGET(STORE_ATTR) { + PyObject *name = GETITEM(names, oparg); + PyObject *owner = TOP(); + PyObject *v = SECOND(); + int err; STACKADJ(-2); - err = PyObject_SetAttr(v, w, u); /* v.w = u */ + err = PyObject_SetAttr(owner, name, v); Py_DECREF(v); - Py_DECREF(u); - if (err == 0) DISPATCH(); - break; + Py_DECREF(owner); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_ATTR) - w = GETITEM(names, oparg); - v = POP(); - err = PyObject_SetAttr(v, w, (PyObject *)NULL); - /* del v.w */ - Py_DECREF(v); - break; + TARGET(DELETE_ATTR) { + PyObject *name = GETITEM(names, oparg); + PyObject *owner = POP(); + int err; + err = PyObject_SetAttr(owner, name, (PyObject *)NULL); + Py_DECREF(owner); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(STORE_GLOBAL) - w = GETITEM(names, oparg); - v = POP(); - err = PyDict_SetItem(f->f_globals, w, v); + TARGET(STORE_GLOBAL) { + PyObject *name = GETITEM(names, oparg); + PyObject *v = POP(); + int err; + err = PyDict_SetItem(f->f_globals, name, v); Py_DECREF(v); - if (err == 0) DISPATCH(); - break; + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(DELETE_GLOBAL) - w = GETITEM(names, oparg); - if ((err = PyDict_DelItem(f->f_globals, w)) != 0) + TARGET(DELETE_GLOBAL) { + PyObject *name = GETITEM(names, oparg); + int err; + err = PyDict_DelItem(f->f_globals, name); + if (err != 0) { format_exc_check_arg( - PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w); - break; + PyExc_NameError, NAME_ERROR_MSG, name); + goto error; + } + DISPATCH(); + } - TARGET(LOAD_NAME) - w = GETITEM(names, oparg); - if ((v = f->f_locals) == NULL) { + TARGET(LOAD_NAME) { + PyObject *name = GETITEM(names, oparg); + PyObject *locals = f->f_locals; + PyObject *v; + if (locals == NULL) { PyErr_Format(PyExc_SystemError, - "no locals when loading %R", w); - why = WHY_EXCEPTION; - break; + "no locals when loading %R", name); + goto error; } - if (PyDict_CheckExact(v)) { - x = PyDict_GetItem(v, w); - Py_XINCREF(x); + if (PyDict_CheckExact(locals)) { + v = PyDict_GetItem(locals, name); + Py_XINCREF(v); } else { - x = PyObject_GetItem(v, w); - if (x == NULL && _PyErr_OCCURRED()) { - if (!PyErr_ExceptionMatches( - PyExc_KeyError)) - break; + v = PyObject_GetItem(locals, name); + if (v == NULL && _PyErr_OCCURRED()) { + if (!PyErr_ExceptionMatches(PyExc_KeyError)) + goto error; PyErr_Clear(); } } - if (x == NULL) { - x = PyDict_GetItem(f->f_globals, w); - Py_XINCREF(x); - if (x == NULL) { + if (v == NULL) { + v = PyDict_GetItem(f->f_globals, name); + Py_XINCREF(v); + if (v == NULL) { if (PyDict_CheckExact(f->f_builtins)) { - x = PyDict_GetItem(f->f_builtins, w); - if (x == NULL) { + v = PyDict_GetItem(f->f_builtins, name); + if (v == NULL) { format_exc_check_arg( PyExc_NameError, - NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } - Py_INCREF(x); + Py_INCREF(v); } else { - x = PyObject_GetItem(f->f_builtins, w); - if (x == NULL) { + v = PyObject_GetItem(f->f_builtins, name); + if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) format_exc_check_arg( PyExc_NameError, - NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } } } } - PUSH(x); + PUSH(v); DISPATCH(); + } - TARGET(LOAD_GLOBAL) - w = GETITEM(names, oparg); + TARGET(LOAD_GLOBAL) { + PyObject *name = GETITEM(names, oparg); + PyObject *v; if (PyDict_CheckExact(f->f_globals) && PyDict_CheckExact(f->f_builtins)) { - x = _PyDict_LoadGlobal((PyDictObject *)f->f_globals, + v = _PyDict_LoadGlobal((PyDictObject *)f->f_globals, (PyDictObject *)f->f_builtins, - w); - if (x == NULL) { + name); + if (v == NULL) { if (!_PyErr_OCCURRED()) format_exc_check_arg(PyExc_NameError, - GLOBAL_NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } - Py_INCREF(x); + Py_INCREF(v); } else { /* Slow-path if globals or builtins is not a dict */ - x = PyObject_GetItem(f->f_globals, w); - if (x == NULL) { - x = PyObject_GetItem(f->f_builtins, w); - if (x == NULL) { + v = PyObject_GetItem(f->f_globals, name); + if (v == NULL) { + v = PyObject_GetItem(f->f_builtins, name); + if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) format_exc_check_arg( PyExc_NameError, - GLOBAL_NAME_ERROR_MSG, w); - break; + NAME_ERROR_MSG, name); + goto error; } } } - PUSH(x); + PUSH(v); DISPATCH(); + } - TARGET(DELETE_FAST) - x = GETLOCAL(oparg); - if (x != NULL) { + TARGET(DELETE_FAST) { + PyObject *v = GETLOCAL(oparg); + if (v != NULL) { SETLOCAL(oparg, NULL); DISPATCH(); } @@ -2162,252 +2249,312 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) UNBOUNDLOCAL_ERROR_MSG, PyTuple_GetItem(co->co_varnames, oparg) ); - break; + goto error; + } - TARGET(DELETE_DEREF) - x = freevars[oparg]; - if (PyCell_GET(x) != NULL) { - PyCell_Set(x, NULL); + TARGET(DELETE_DEREF) { + PyObject *cell = freevars[oparg]; + if (PyCell_GET(cell) != NULL) { + PyCell_Set(cell, NULL); DISPATCH(); } - err = -1; format_exc_unbound(co, oparg); - break; + goto error; + } - TARGET(LOAD_CLOSURE) - x = freevars[oparg]; - Py_INCREF(x); - PUSH(x); - if (x != NULL) DISPATCH(); - break; + TARGET(LOAD_CLOSURE) { + PyObject *cell = freevars[oparg]; + Py_INCREF(cell); + PUSH(cell); + DISPATCH(); + } - TARGET(LOAD_DEREF) - x = freevars[oparg]; - w = PyCell_Get(x); - if (w != NULL) { - PUSH(w); - DISPATCH(); + TARGET(LOAD_CLASSDEREF) { + PyObject *name, *value, *locals = f->f_locals; + Py_ssize_t idx; + assert(locals); + assert(oparg >= PyTuple_GET_SIZE(co->co_cellvars)); + idx = oparg - PyTuple_GET_SIZE(co->co_cellvars); + assert(idx >= 0 && idx < PyTuple_GET_SIZE(co->co_freevars)); + name = PyTuple_GET_ITEM(co->co_freevars, idx); + if (PyDict_CheckExact(locals)) { + value = PyDict_GetItem(locals, name); + Py_XINCREF(value); } - err = -1; - format_exc_unbound(co, oparg); - break; + else { + value = PyObject_GetItem(locals, name); + if (value == NULL && PyErr_Occurred()) { + if (!PyErr_ExceptionMatches(PyExc_KeyError)) + goto error; + PyErr_Clear(); + } + } + if (!value) { + PyObject *cell = freevars[oparg]; + value = PyCell_GET(cell); + if (value == NULL) { + format_exc_unbound(co, oparg); + goto error; + } + Py_INCREF(value); + } + PUSH(value); + DISPATCH(); + } - TARGET(STORE_DEREF) - w = POP(); - x = freevars[oparg]; - PyCell_Set(x, w); - Py_DECREF(w); + TARGET(LOAD_DEREF) { + PyObject *cell = freevars[oparg]; + PyObject *value = PyCell_GET(cell); + if (value == NULL) { + format_exc_unbound(co, oparg); + goto error; + } + Py_INCREF(value); + PUSH(value); DISPATCH(); + } - TARGET(BUILD_TUPLE) - x = PyTuple_New(oparg); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - PyTuple_SET_ITEM(x, oparg, w); - } - PUSH(x); - DISPATCH(); + TARGET(STORE_DEREF) { + PyObject *v = POP(); + PyObject *cell = freevars[oparg]; + PyCell_Set(cell, v); + Py_DECREF(v); + DISPATCH(); + } + + TARGET(BUILD_TUPLE) { + PyObject *tup = PyTuple_New(oparg); + if (tup == NULL) + goto error; + while (--oparg >= 0) { + PyObject *item = POP(); + PyTuple_SET_ITEM(tup, oparg, item); } - break; + PUSH(tup); + DISPATCH(); + } - TARGET(BUILD_LIST) - x = PyList_New(oparg); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - PyList_SET_ITEM(x, oparg, w); - } - PUSH(x); - DISPATCH(); + TARGET(BUILD_LIST) { + PyObject *list = PyList_New(oparg); + if (list == NULL) + goto error; + while (--oparg >= 0) { + PyObject *item = POP(); + PyList_SET_ITEM(list, oparg, item); } - break; + PUSH(list); + DISPATCH(); + } - TARGET(BUILD_SET) - x = PySet_New(NULL); - if (x != NULL) { - for (; --oparg >= 0;) { - w = POP(); - if (err == 0) - err = PySet_Add(x, w); - Py_DECREF(w); - } - if (err != 0) { - Py_DECREF(x); - break; - } - PUSH(x); - DISPATCH(); + TARGET(BUILD_SET) { + PyObject *set = PySet_New(NULL); + int err = 0; + if (set == NULL) + goto error; + while (--oparg >= 0) { + PyObject *item = POP(); + if (err == 0) + err = PySet_Add(set, item); + Py_DECREF(item); } - break; + if (err != 0) { + Py_DECREF(set); + goto error; + } + PUSH(set); + DISPATCH(); + } - TARGET(BUILD_MAP) - x = _PyDict_NewPresized((Py_ssize_t)oparg); - PUSH(x); - if (x != NULL) DISPATCH(); - break; + TARGET(BUILD_MAP) { + PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg); + if (map == NULL) + goto error; + PUSH(map); + DISPATCH(); + } - TARGET(STORE_MAP) - w = TOP(); /* key */ - u = SECOND(); /* value */ - v = THIRD(); /* dict */ + TARGET(STORE_MAP) { + PyObject *key = TOP(); + PyObject *value = SECOND(); + PyObject *map = THIRD(); + int err; STACKADJ(-2); - assert (PyDict_CheckExact(v)); - err = PyDict_SetItem(v, w, u); /* v[w] = u */ - Py_DECREF(u); - Py_DECREF(w); - if (err == 0) DISPATCH(); - break; + assert(PyDict_CheckExact(map)); + err = PyDict_SetItem(map, key, value); + Py_DECREF(value); + Py_DECREF(key); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(MAP_ADD) - w = TOP(); /* key */ - u = SECOND(); /* value */ + TARGET(MAP_ADD) { + PyObject *key = TOP(); + PyObject *value = SECOND(); + PyObject *map; + int err; STACKADJ(-2); - v = stack_pointer[-oparg]; /* dict */ - assert (PyDict_CheckExact(v)); - err = PyDict_SetItem(v, w, u); /* v[w] = u */ - Py_DECREF(u); - Py_DECREF(w); - if (err == 0) { - PREDICT(JUMP_ABSOLUTE); - DISPATCH(); - } - break; + map = stack_pointer[-oparg]; /* dict */ + assert(PyDict_CheckExact(map)); + err = PyDict_SetItem(map, key, value); /* v[w] = u */ + Py_DECREF(value); + Py_DECREF(key); + if (err != 0) + goto error; + PREDICT(JUMP_ABSOLUTE); + DISPATCH(); + } - TARGET(LOAD_ATTR) - w = GETITEM(names, oparg); - v = TOP(); - x = PyObject_GetAttr(v, w); - Py_DECREF(v); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + TARGET(LOAD_ATTR) { + PyObject *name = GETITEM(names, oparg); + PyObject *owner = TOP(); + PyObject *res = PyObject_GetAttr(owner, name); + Py_DECREF(owner); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(COMPARE_OP) - w = POP(); - v = TOP(); - x = cmp_outcome(oparg, v, w); - Py_DECREF(v); - Py_DECREF(w); - SET_TOP(x); - if (x == NULL) break; + TARGET(COMPARE_OP) { + PyObject *right = POP(); + PyObject *left = TOP(); + PyObject *res = cmp_outcome(oparg, left, right); + Py_DECREF(left); + Py_DECREF(right); + SET_TOP(res); + if (res == NULL) + goto error; PREDICT(POP_JUMP_IF_FALSE); PREDICT(POP_JUMP_IF_TRUE); DISPATCH(); + } - TARGET(IMPORT_NAME) - { + TARGET(IMPORT_NAME) { _Py_IDENTIFIER(__import__); - w = GETITEM(names, oparg); - x = _PyDict_GetItemId(f->f_builtins, &PyId___import__); - if (x == NULL) { + PyObject *name = GETITEM(names, oparg); + PyObject *func = _PyDict_GetItemId(f->f_builtins, &PyId___import__); + PyObject *from, *level, *args, *res; + if (func == NULL) { PyErr_SetString(PyExc_ImportError, "__import__ not found"); - break; + goto error; } - Py_INCREF(x); - v = POP(); - u = TOP(); - if (PyLong_AsLong(u) != -1 || PyErr_Occurred()) - w = PyTuple_Pack(5, - w, + Py_INCREF(func); + from = POP(); + level = TOP(); + if (PyLong_AsLong(level) != -1 || PyErr_Occurred()) + args = PyTuple_Pack(5, + name, f->f_globals, f->f_locals == NULL ? Py_None : f->f_locals, - v, - u); + from, + level); else - w = PyTuple_Pack(4, - w, + args = PyTuple_Pack(4, + name, f->f_globals, f->f_locals == NULL ? Py_None : f->f_locals, - v); - Py_DECREF(v); - Py_DECREF(u); - if (w == NULL) { - u = POP(); - Py_DECREF(x); - x = NULL; - break; + from); + Py_DECREF(level); + Py_DECREF(from); + if (args == NULL) { + Py_DECREF(func); + STACKADJ(-1); + goto error; } READ_TIMESTAMP(intr0); - v = x; - x = PyEval_CallObject(v, w); - Py_DECREF(v); + res = PyEval_CallObject(func, args); READ_TIMESTAMP(intr1); - Py_DECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + Py_DECREF(args); + Py_DECREF(func); + SET_TOP(res); + if (res == NULL) + goto error; + DISPATCH(); } - TARGET(IMPORT_STAR) - v = POP(); - PyFrame_FastToLocals(f); - if ((x = f->f_locals) == NULL) { + TARGET(IMPORT_STAR) { + PyObject *from = POP(), *locals; + int err; + if (PyFrame_FastToLocalsWithError(f) < 0) + goto error; + + locals = f->f_locals; + if (locals == NULL) { PyErr_SetString(PyExc_SystemError, "no locals found during 'import *'"); - break; + goto error; } READ_TIMESTAMP(intr0); - err = import_all_from(x, v); + err = import_all_from(locals, from); READ_TIMESTAMP(intr1); PyFrame_LocalsToFast(f, 0); - Py_DECREF(v); - if (err == 0) DISPATCH(); - break; + Py_DECREF(from); + if (err != 0) + goto error; + DISPATCH(); + } - TARGET(IMPORT_FROM) - w = GETITEM(names, oparg); - v = TOP(); + TARGET(IMPORT_FROM) { + PyObject *name = GETITEM(names, oparg); + PyObject *from = TOP(); + PyObject *res; READ_TIMESTAMP(intr0); - x = import_from(v, w); + res = import_from(from, name); READ_TIMESTAMP(intr1); - PUSH(x); - if (x != NULL) DISPATCH(); - break; + PUSH(res); + if (res == NULL) + goto error; + DISPATCH(); + } - TARGET(JUMP_FORWARD) + TARGET(JUMP_FORWARD) { JUMPBY(oparg); FAST_DISPATCH(); + } PREDICTED_WITH_ARG(POP_JUMP_IF_FALSE); - TARGET(POP_JUMP_IF_FALSE) - w = POP(); - if (w == Py_True) { - Py_DECREF(w); + TARGET(POP_JUMP_IF_FALSE) { + PyObject *cond = POP(); + int err; + if (cond == Py_True) { + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_False) { - Py_DECREF(w); + if (cond == Py_False) { + Py_DECREF(cond); JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); - Py_DECREF(w); + err = PyObject_IsTrue(cond); + Py_DECREF(cond); if (err > 0) err = 0; else if (err == 0) JUMPTO(oparg); else - break; + goto error; DISPATCH(); + } PREDICTED_WITH_ARG(POP_JUMP_IF_TRUE); - TARGET(POP_JUMP_IF_TRUE) - w = POP(); - if (w == Py_False) { - Py_DECREF(w); + TARGET(POP_JUMP_IF_TRUE) { + PyObject *cond = POP(); + int err; + if (cond == Py_False) { + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_True) { - Py_DECREF(w); + if (cond == Py_True) { + Py_DECREF(cond); JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); - Py_DECREF(w); + err = PyObject_IsTrue(cond); + Py_DECREF(cond); if (err > 0) { err = 0; JUMPTO(oparg); @@ -2415,58 +2562,63 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) else if (err == 0) ; else - break; + goto error; DISPATCH(); + } - TARGET(JUMP_IF_FALSE_OR_POP) - w = TOP(); - if (w == Py_True) { + TARGET(JUMP_IF_FALSE_OR_POP) { + PyObject *cond = TOP(); + int err; + if (cond == Py_True) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_False) { + if (cond == Py_False) { JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); + err = PyObject_IsTrue(cond); if (err > 0) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); err = 0; } else if (err == 0) JUMPTO(oparg); else - break; + goto error; DISPATCH(); + } - TARGET(JUMP_IF_TRUE_OR_POP) - w = TOP(); - if (w == Py_False) { + TARGET(JUMP_IF_TRUE_OR_POP) { + PyObject *cond = TOP(); + int err; + if (cond == Py_False) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); FAST_DISPATCH(); } - if (w == Py_True) { + if (cond == Py_True) { JUMPTO(oparg); FAST_DISPATCH(); } - err = PyObject_IsTrue(w); + err = PyObject_IsTrue(cond); if (err > 0) { err = 0; JUMPTO(oparg); } else if (err == 0) { STACKADJ(-1); - Py_DECREF(w); + Py_DECREF(cond); } else - break; + goto error; DISPATCH(); + } PREDICTED_WITH_ARG(JUMP_ABSOLUTE); - TARGET(JUMP_ABSOLUTE) + TARGET(JUMP_ABSOLUTE) { JUMPTO(oparg); #if FAST_LOOPS /* Enabling this path speeds-up all while and for-loops by bypassing @@ -2480,60 +2632,62 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #else DISPATCH(); #endif + } - TARGET(GET_ITER) + TARGET(GET_ITER) { /* before: [obj]; after [getiter(obj)] */ - v = TOP(); - x = PyObject_GetIter(v); - Py_DECREF(v); - if (x != NULL) { - SET_TOP(x); - PREDICT(FOR_ITER); - DISPATCH(); - } - STACKADJ(-1); - break; + PyObject *iterable = TOP(); + PyObject *iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + SET_TOP(iter); + if (iter == NULL) + goto error; + PREDICT(FOR_ITER); + DISPATCH(); + } PREDICTED_WITH_ARG(FOR_ITER); - TARGET(FOR_ITER) + TARGET(FOR_ITER) { /* before: [iter]; after: [iter, iter()] *or* [] */ - v = TOP(); - x = (*v->ob_type->tp_iternext)(v); - if (x != NULL) { - PUSH(x); + PyObject *iter = TOP(); + PyObject *next = (*iter->ob_type->tp_iternext)(iter); + if (next != NULL) { + PUSH(next); PREDICT(STORE_FAST); PREDICT(UNPACK_SEQUENCE); DISPATCH(); } if (PyErr_Occurred()) { - if (!PyErr_ExceptionMatches( - PyExc_StopIteration)) - break; + if (!PyErr_ExceptionMatches(PyExc_StopIteration)) + goto error; + else if (tstate->c_tracefunc != NULL) + call_exc_trace(tstate->c_tracefunc, tstate->c_traceobj, tstate, f); PyErr_Clear(); } /* iterator ended normally */ - x = v = POP(); - Py_DECREF(v); + STACKADJ(-1); + Py_DECREF(iter); JUMPBY(oparg); DISPATCH(); + } - TARGET(BREAK_LOOP) + TARGET(BREAK_LOOP) { why = WHY_BREAK; goto fast_block_end; + } - TARGET(CONTINUE_LOOP) + TARGET(CONTINUE_LOOP) { retval = PyLong_FromLong(oparg); - if (!retval) { - x = NULL; - break; - } + if (retval == NULL) + goto error; why = WHY_CONTINUE; goto fast_block_end; + } TARGET_WITH_IMPL(SETUP_LOOP, _setup_finally) TARGET_WITH_IMPL(SETUP_EXCEPT, _setup_finally) TARGET(SETUP_FINALLY) - _setup_finally: + _setup_finally: { /* NOTE: If you add any new block-setup opcodes that are not try/except/finally handlers, you may need to update the PyGen_NeedsFinalizing() function. @@ -2542,37 +2696,35 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg, STACK_LEVEL()); DISPATCH(); + } - TARGET(SETUP_WITH) - { + TARGET(SETUP_WITH) { _Py_IDENTIFIER(__exit__); _Py_IDENTIFIER(__enter__); - w = TOP(); - x = special_lookup(w, &PyId___exit__); - if (!x) - break; - SET_TOP(x); - u = special_lookup(w, &PyId___enter__); - Py_DECREF(w); - if (!u) { - x = NULL; - break; - } - x = PyObject_CallFunctionObjArgs(u, NULL); - Py_DECREF(u); - if (!x) - break; + PyObject *mgr = TOP(); + PyObject *exit = special_lookup(mgr, &PyId___exit__), *enter; + PyObject *res; + if (exit == NULL) + goto error; + SET_TOP(exit); + enter = special_lookup(mgr, &PyId___enter__); + Py_DECREF(mgr); + if (enter == NULL) + goto error; + res = PyObject_CallFunctionObjArgs(enter, NULL); + Py_DECREF(enter); + if (res == NULL) + goto error; /* Setup the finally block before pushing the result of __enter__ on the stack. */ PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg, STACK_LEVEL()); - PUSH(x); + PUSH(res); DISPATCH(); } - TARGET(WITH_CLEANUP) - { + TARGET(WITH_CLEANUP) { /* At the top of the stack are 1-6 values indicating how/why we entered the finally clause: - TOP = None @@ -2599,42 +2751,42 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) */ PyObject *exit_func; - u = TOP(); - if (u == Py_None) { + PyObject *exc = TOP(), *val = Py_None, *tb = Py_None, *res; + int err; + if (exc == Py_None) { (void)POP(); exit_func = TOP(); - SET_TOP(u); - v = w = Py_None; + SET_TOP(exc); } - else if (PyLong_Check(u)) { - (void)POP(); - switch(PyLong_AsLong(u)) { + else if (PyLong_Check(exc)) { + STACKADJ(-1); + switch (PyLong_AsLong(exc)) { case WHY_RETURN: case WHY_CONTINUE: /* Retval in TOP. */ exit_func = SECOND(); SET_SECOND(TOP()); - SET_TOP(u); + SET_TOP(exc); break; default: exit_func = TOP(); - SET_TOP(u); + SET_TOP(exc); break; } - u = v = w = Py_None; + exc = Py_None; } else { - PyObject *tp, *exc, *tb; + PyObject *tp2, *exc2, *tb2; PyTryBlock *block; - v = SECOND(); - w = THIRD(); - tp = FOURTH(); - exc = PEEK(5); - tb = PEEK(6); + val = SECOND(); + tb = THIRD(); + tp2 = FOURTH(); + exc2 = PEEK(5); + tb2 = PEEK(6); exit_func = PEEK(7); - SET_VALUE(7, tb); - SET_VALUE(6, exc); - SET_VALUE(5, tp); + SET_VALUE(7, tb2); + SET_VALUE(6, exc2); + SET_VALUE(5, tp2); /* UNWIND_EXCEPT_HANDLER will pop this off. */ SET_FOURTH(NULL); /* We just shifted the stack down, so we have @@ -2645,56 +2797,53 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) block->b_level--; } /* XXX Not the fastest way to call it... */ - x = PyObject_CallFunctionObjArgs(exit_func, u, v, w, - NULL); + res = PyObject_CallFunctionObjArgs(exit_func, exc, val, tb, NULL); Py_DECREF(exit_func); - if (x == NULL) - break; /* Go to error exit */ + if (res == NULL) + goto error; - if (u != Py_None) - err = PyObject_IsTrue(x); + if (exc != Py_None) + err = PyObject_IsTrue(res); else err = 0; - Py_DECREF(x); + Py_DECREF(res); if (err < 0) - break; /* Go to error exit */ + goto error; else if (err > 0) { err = 0; /* There was an exception and a True return */ PUSH(PyLong_FromLong((long) WHY_SILENCED)); } PREDICT(END_FINALLY); - break; + DISPATCH(); } - TARGET(CALL_FUNCTION) - { - PyObject **sp; + TARGET(CALL_FUNCTION) { + PyObject **sp, *res; PCALL(PCALL_ALL); sp = stack_pointer; #ifdef WITH_TSC - x = call_function(&sp, oparg, &intr0, &intr1); + res = call_function(&sp, oparg, &intr0, &intr1); #else - x = call_function(&sp, oparg); + res = call_function(&sp, oparg); #endif stack_pointer = sp; - PUSH(x); - if (x != NULL) - DISPATCH(); - break; + PUSH(res); + if (res == NULL) + goto error; + DISPATCH(); } TARGET_WITH_IMPL(CALL_FUNCTION_VAR, _call_function_var_kw) TARGET_WITH_IMPL(CALL_FUNCTION_KW, _call_function_var_kw) TARGET(CALL_FUNCTION_VAR_KW) - _call_function_var_kw: - { + _call_function_var_kw: { int na = oparg & 0xff; int nk = (oparg>>8) & 0xff; int flags = (opcode - CALL_FUNCTION) & 3; int n = na + 2 * nk; - PyObject **pfunc, *func, **sp; + PyObject **pfunc, *func, **sp, *res; PCALL(PCALL_ALL); if (flags & CALL_FLAG_VAR) n++; @@ -2717,137 +2866,156 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) Py_INCREF(func); sp = stack_pointer; READ_TIMESTAMP(intr0); - x = ext_do_call(func, &sp, flags, na, nk); + res = ext_do_call(func, &sp, flags, na, nk); READ_TIMESTAMP(intr1); stack_pointer = sp; Py_DECREF(func); while (stack_pointer > pfunc) { - w = POP(); - Py_DECREF(w); + PyObject *o = POP(); + Py_DECREF(o); } - PUSH(x); - if (x != NULL) - DISPATCH(); - break; + PUSH(res); + if (res == NULL) + goto error; + DISPATCH(); } TARGET_WITH_IMPL(MAKE_CLOSURE, _make_function) TARGET(MAKE_FUNCTION) - _make_function: - { + _make_function: { int posdefaults = oparg & 0xff; int kwdefaults = (oparg>>8) & 0xff; int num_annotations = (oparg >> 16) & 0x7fff; - w = POP(); /* qualname */ - v = POP(); /* code object */ - x = PyFunction_NewWithQualName(v, f->f_globals, w); - Py_DECREF(v); - Py_DECREF(w); + PyObject *qualname = POP(); /* qualname */ + PyObject *code = POP(); /* code object */ + PyObject *func = PyFunction_NewWithQualName(code, f->f_globals, qualname); + Py_DECREF(code); + Py_DECREF(qualname); - if (x != NULL && opcode == MAKE_CLOSURE) { - v = POP(); - if (PyFunction_SetClosure(x, v) != 0) { + if (func == NULL) + goto error; + + if (opcode == MAKE_CLOSURE) { + PyObject *closure = POP(); + if (PyFunction_SetClosure(func, closure) != 0) { /* Can't happen unless bytecode is corrupt. */ - why = WHY_EXCEPTION; + Py_DECREF(func); + Py_DECREF(closure); + goto error; } - Py_DECREF(v); + Py_DECREF(closure); } - if (x != NULL && num_annotations > 0) { + if (num_annotations > 0) { Py_ssize_t name_ix; - u = POP(); /* names of args with annotations */ - v = PyDict_New(); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; + PyObject *names = POP(); /* names of args with annotations */ + PyObject *anns = PyDict_New(); + if (anns == NULL) { + Py_DECREF(func); + goto error; } - name_ix = PyTuple_Size(u); + name_ix = PyTuple_Size(names); assert(num_annotations == name_ix+1); while (name_ix > 0) { + PyObject *name, *value; + int err; --name_ix; - t = PyTuple_GET_ITEM(u, name_ix); - w = POP(); - /* XXX(nnorwitz): check for errors */ - PyDict_SetItem(v, t, w); - Py_DECREF(w); + name = PyTuple_GET_ITEM(names, name_ix); + value = POP(); + err = PyDict_SetItem(anns, name, value); + Py_DECREF(value); + if (err != 0) { + Py_DECREF(anns); + Py_DECREF(func); + goto error; + } } - if (PyFunction_SetAnnotations(x, v) != 0) { + if (PyFunction_SetAnnotations(func, anns) != 0) { /* Can't happen unless PyFunction_SetAnnotations changes. */ - why = WHY_EXCEPTION; + Py_DECREF(anns); + Py_DECREF(func); + goto error; } - Py_DECREF(v); - Py_DECREF(u); + Py_DECREF(anns); + Py_DECREF(names); } /* XXX Maybe this should be a separate opcode? */ - if (x != NULL && posdefaults > 0) { - v = PyTuple_New(posdefaults); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; + if (kwdefaults > 0) { + PyObject *defs = PyDict_New(); + if (defs == NULL) { + Py_DECREF(func); + goto error; } - while (--posdefaults >= 0) { - w = POP(); - PyTuple_SET_ITEM(v, posdefaults, w); + while (--kwdefaults >= 0) { + PyObject *v = POP(); /* default value */ + PyObject *key = POP(); /* kw only arg name */ + int err = PyDict_SetItem(defs, key, v); + Py_DECREF(v); + Py_DECREF(key); + if (err != 0) { + Py_DECREF(defs); + Py_DECREF(func); + goto error; + } } - if (PyFunction_SetDefaults(x, v) != 0) { + if (PyFunction_SetKwDefaults(func, defs) != 0) { /* Can't happen unless - PyFunction_SetDefaults changes. */ - why = WHY_EXCEPTION; + PyFunction_SetKwDefaults changes. */ + Py_DECREF(func); + Py_DECREF(defs); + goto error; } - Py_DECREF(v); + Py_DECREF(defs); } - if (x != NULL && kwdefaults > 0) { - v = PyDict_New(); - if (v == NULL) { - Py_DECREF(x); - x = NULL; - break; - } - while (--kwdefaults >= 0) { - w = POP(); /* default value */ - u = POP(); /* kw only arg name */ - /* XXX(nnorwitz): check for errors */ - PyDict_SetItem(v, u, w); - Py_DECREF(w); - Py_DECREF(u); + if (posdefaults > 0) { + PyObject *defs = PyTuple_New(posdefaults); + if (defs == NULL) { + Py_DECREF(func); + goto error; } - if (PyFunction_SetKwDefaults(x, v) != 0) { + while (--posdefaults >= 0) + PyTuple_SET_ITEM(defs, posdefaults, POP()); + if (PyFunction_SetDefaults(func, defs) != 0) { /* Can't happen unless - PyFunction_SetKwDefaults changes. */ - why = WHY_EXCEPTION; + PyFunction_SetDefaults changes. */ + Py_DECREF(defs); + Py_DECREF(func); + goto error; } - Py_DECREF(v); + Py_DECREF(defs); } - PUSH(x); - break; + PUSH(func); + DISPATCH(); } - TARGET(BUILD_SLICE) + TARGET(BUILD_SLICE) { + PyObject *start, *stop, *step, *slice; if (oparg == 3) - w = POP(); + step = POP(); else - w = NULL; - v = POP(); - u = TOP(); - x = PySlice_New(u, v, w); - Py_DECREF(u); - Py_DECREF(v); - Py_XDECREF(w); - SET_TOP(x); - if (x != NULL) DISPATCH(); - break; + step = NULL; + stop = POP(); + start = TOP(); + slice = PySlice_New(start, stop, step); + Py_DECREF(start); + Py_DECREF(stop); + Py_XDECREF(step); + SET_TOP(slice); + if (slice == NULL) + goto error; + DISPATCH(); + } - TARGET(EXTENDED_ARG) + TARGET(EXTENDED_ARG) { opcode = NEXTOP(); oparg = oparg<<16 | NEXTARG(); goto dispatch_opcode; + } #if USE_COMPUTED_GOTOS _unknown_opcode: @@ -2858,8 +3026,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyFrame_GetLineNumber(f), opcode); PyErr_SetString(PyExc_SystemError, "unknown opcode"); - why = WHY_EXCEPTION; - break; + goto error; #ifdef CASE_TOO_BIG } @@ -2867,71 +3034,36 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } /* switch */ - on_error: + /* This should never be reached. Every opcode should end with DISPATCH() + or goto error. */ + assert(0); +error: READ_TIMESTAMP(inst1); - /* Quickly continue if no error occurred */ - - if (why == WHY_NOT) { - if (err == 0 && x != NULL) { -#ifdef CHECKEXC - /* This check is expensive! */ - if (PyErr_Occurred()) - fprintf(stderr, - "XXX undetected error\n"); - else { -#endif - READ_TIMESTAMP(loop1); - continue; /* Normal, fast path */ -#ifdef CHECKEXC - } -#endif - } - why = WHY_EXCEPTION; - x = Py_None; - err = 0; - } - - /* Double-check exception status */ + assert(why == WHY_NOT); + why = WHY_EXCEPTION; - if (why == WHY_EXCEPTION || why == WHY_RERAISE) { - if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_SystemError, - "error return without exception set"); - why = WHY_EXCEPTION; - } - } -#ifdef CHECKEXC - else { - /* This check is expensive! */ - if (PyErr_Occurred()) { - char buf[128]; - sprintf(buf, "Stack unwind with exception " - "set and why=%d", why); - Py_FatalError(buf); - } - } + /* Double-check exception status. */ +#ifdef NDEBUG + if (!PyErr_Occurred()) + PyErr_SetString(PyExc_SystemError, + "error return without exception set"); +#else + assert(PyErr_Occurred()); #endif - /* Log traceback info if this is a real exception */ + /* Log traceback info. */ + PyTraceBack_Here(f); - if (why == WHY_EXCEPTION) { - PyTraceBack_Here(f); + if (tstate->c_tracefunc != NULL) + call_exc_trace(tstate->c_tracefunc, tstate->c_traceobj, + tstate, f); - if (tstate->c_tracefunc != NULL) - call_exc_trace(tstate->c_tracefunc, - tstate->c_traceobj, f); - } - - /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */ - - if (why == WHY_RERAISE) - why = WHY_EXCEPTION; +fast_block_end: + assert(why != WHY_NOT); /* Unwind stacks if a (pseudo) exception occurred */ - -fast_block_end: while (why != WHY_NOT && f->f_iblock > 0) { /* Peek at the current block. */ PyTryBlock *b = &f->f_blockstack[f->f_iblock - 1]; @@ -2978,7 +3110,10 @@ fast_block_end: Python main loop. */ PyErr_NormalizeException( &exc, &val, &tb); - PyException_SetTraceback(val, tb); + if (tb != NULL) + PyException_SetTraceback(val, tb); + else + PyException_SetTraceback(val, Py_None); Py_INCREF(exc); tstate->exc_type = exc; Py_INCREF(val); @@ -3010,18 +3145,23 @@ fast_block_end: break; READ_TIMESTAMP(loop1); + assert(!PyErr_Occurred()); + } /* main loop */ assert(why != WHY_YIELD); /* Pop remaining stack entries. */ while (!EMPTY()) { - v = POP(); - Py_XDECREF(v); + PyObject *o = POP(); + Py_XDECREF(o); } if (why != WHY_RETURN) retval = NULL; + assert((retval != NULL && !PyErr_Occurred()) + || (retval == NULL && PyErr_Occurred())); + fast_yield: if (co->co_flags & CO_GENERATOR && (why == WHY_YIELD || why == WHY_RETURN)) { /* The purpose of this block is to put aside the generator's exception @@ -3046,8 +3186,8 @@ fast_yield: if (tstate->use_tracing) { if (tstate->c_tracefunc) { if (why == WHY_RETURN || why == WHY_YIELD) { - if (call_trace(tstate->c_tracefunc, - tstate->c_traceobj, f, + if (call_trace(tstate->c_tracefunc, tstate->c_traceobj, + tstate, f, PyTrace_RETURN, retval)) { Py_XDECREF(retval); retval = NULL; @@ -3055,18 +3195,19 @@ fast_yield: } } else if (why == WHY_EXCEPTION) { - call_trace_protected(tstate->c_tracefunc, - tstate->c_traceobj, f, + call_trace_protected(tstate->c_tracefunc, tstate->c_traceobj, + tstate, f, PyTrace_RETURN, NULL); } } if (tstate->c_profilefunc) { if (why == WHY_EXCEPTION) call_trace_protected(tstate->c_profilefunc, - tstate->c_profileobj, f, + tstate->c_profileobj, + tstate, f, PyTrace_RETURN, NULL); - else if (call_trace(tstate->c_profilefunc, - tstate->c_profileobj, f, + else if (call_trace(tstate->c_profilefunc, tstate->c_profileobj, + tstate, f, PyTrace_RETURN, retval)) { Py_XDECREF(retval); retval = NULL; @@ -3078,6 +3219,7 @@ fast_yield: /* pop frame */ exit_eval_frame: Py_LeaveRecursiveCall(); + f->f_executing = 0; tstate->frame = f->f_back; return retval; @@ -3243,9 +3385,9 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure) { PyCodeObject* co = (PyCodeObject*)_co; - register PyFrameObject *f; - register PyObject *retval = NULL; - register PyObject **fastlocals, **freevars; + PyFrameObject *f; + PyObject *retval = NULL; + PyObject **fastlocals, **freevars; PyThreadState *tstate = PyThreadState_GET(); PyObject *x, *u; int total_args = co->co_argcount + co->co_kwonlyargcount; @@ -3522,7 +3664,7 @@ restore_and_clear_exc_state(PyThreadState *tstate, PyFrameObject *f) /* Logic for the raise statement (too complicated for inlining). This *consumes* a reference count to each of its arguments. */ -static enum why_code +static int do_raise(PyObject *exc, PyObject *cause) { PyObject *type = NULL, *value = NULL; @@ -3537,13 +3679,13 @@ do_raise(PyObject *exc, PyObject *cause) if (type == Py_None) { PyErr_SetString(PyExc_RuntimeError, "No active exception to reraise"); - return WHY_EXCEPTION; - } + return 0; + } Py_XINCREF(type); Py_XINCREF(value); Py_XINCREF(tb); PyErr_Restore(type, value, tb); - return WHY_RERAISE; + return 1; } /* We support the following forms of raise: @@ -3606,13 +3748,13 @@ do_raise(PyObject *exc, PyObject *cause) /* PyErr_SetObject incref's its arguments */ Py_XDECREF(value); Py_XDECREF(type); - return WHY_EXCEPTION; + return 0; raise_error: Py_XDECREF(value); Py_XDECREF(type); Py_XDECREF(cause); - return WHY_EXCEPTION; + return 0; } /* Iterate v argcnt times and store the results on the stack (via decreasing @@ -3709,40 +3851,43 @@ prtrace(PyObject *v, char *str) #endif static void -call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f) +call_exc_trace(Py_tracefunc func, PyObject *self, + PyThreadState *tstate, PyFrameObject *f) { - PyObject *type, *value, *traceback, *arg; + PyObject *type, *value, *traceback, *orig_traceback, *arg; int err; - PyErr_Fetch(&type, &value, &traceback); + PyErr_Fetch(&type, &value, &orig_traceback); if (value == NULL) { value = Py_None; Py_INCREF(value); } - PyErr_NormalizeException(&type, &value, &traceback); + PyErr_NormalizeException(&type, &value, &orig_traceback); + traceback = (orig_traceback != NULL) ? orig_traceback : Py_None; arg = PyTuple_Pack(3, type, value, traceback); if (arg == NULL) { - PyErr_Restore(type, value, traceback); + PyErr_Restore(type, value, orig_traceback); return; } - err = call_trace(func, self, f, PyTrace_EXCEPTION, arg); + err = call_trace(func, self, tstate, f, PyTrace_EXCEPTION, arg); Py_DECREF(arg); if (err == 0) - PyErr_Restore(type, value, traceback); + PyErr_Restore(type, value, orig_traceback); else { Py_XDECREF(type); Py_XDECREF(value); - Py_XDECREF(traceback); + Py_XDECREF(orig_traceback); } } static int -call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame, +call_trace_protected(Py_tracefunc func, PyObject *obj, + PyThreadState *tstate, PyFrameObject *frame, int what, PyObject *arg) { PyObject *type, *value, *traceback; int err; PyErr_Fetch(&type, &value, &traceback); - err = call_trace(func, obj, frame, what, arg); + err = call_trace(func, obj, tstate, frame, what, arg); if (err == 0) { PyErr_Restore(type, value, traceback); @@ -3757,10 +3902,10 @@ call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame, } static int -call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame, +call_trace(Py_tracefunc func, PyObject *obj, + PyThreadState *tstate, PyFrameObject *frame, int what, PyObject *arg) { - register PyThreadState *tstate = frame->f_tstate; int result; if (tstate->tracing) return 0; @@ -3776,8 +3921,7 @@ call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame, PyObject * _PyEval_CallTracing(PyObject *func, PyObject *args) { - PyFrameObject *frame = PyEval_GetFrame(); - PyThreadState *tstate = frame->f_tstate; + PyThreadState *tstate = PyThreadState_GET(); int save_tracing = tstate->tracing; int save_use_tracing = tstate->use_tracing; PyObject *result; @@ -3794,8 +3938,8 @@ _PyEval_CallTracing(PyObject *func, PyObject *args) /* See Objects/lnotab_notes.txt for a description of how tracing works. */ static int maybe_call_line_trace(Py_tracefunc func, PyObject *obj, - PyFrameObject *frame, int *instr_lb, int *instr_ub, - int *instr_prev) + PyThreadState *tstate, PyFrameObject *frame, + int *instr_lb, int *instr_ub, int *instr_prev) { int result = 0; int line = frame->f_lineno; @@ -3815,7 +3959,7 @@ maybe_call_line_trace(Py_tracefunc func, PyObject *obj, number and call the trace function. */ if (frame->f_lasti == *instr_lb || frame->f_lasti < *instr_prev) { frame->f_lineno = line; - result = call_trace(func, obj, frame, PyTrace_LINE, Py_None); + result = call_trace(func, obj, tstate, frame, PyTrace_LINE, Py_None); } *instr_prev = frame->f_lasti; return result; @@ -3871,9 +4015,15 @@ PyObject * PyEval_GetLocals(void) { PyFrameObject *current_frame = PyEval_GetFrame(); - if (current_frame == NULL) + if (current_frame == NULL) { + PyErr_SetString(PyExc_SystemError, "frame does not exist"); return NULL; - PyFrame_FastToLocals(current_frame); + } + + if (PyFrame_FastToLocalsWithError(current_frame) < 0) + return NULL; + + assert(current_frame->f_locals != NULL); return current_frame->f_locals; } @@ -3883,8 +4033,9 @@ PyEval_GetGlobals(void) PyFrameObject *current_frame = PyEval_GetFrame(); if (current_frame == NULL) return NULL; - else - return current_frame->f_globals; + + assert(current_frame->f_globals != NULL); + return current_frame->f_globals; } PyFrameObject * @@ -3926,6 +4077,13 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) { PyObject *result; +#ifdef Py_DEBUG + /* PyEval_CallObjectWithKeywords() must not be called with an exception + set, because it may clear it (directly or indirectly) + and so the caller looses its exception */ + assert(!PyErr_Occurred()); +#endif + if (arg == NULL) { arg = PyTuple_New(0); if (arg == NULL) @@ -3948,6 +4106,9 @@ PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw) result = PyObject_Call(func, arg, kw); Py_DECREF(arg); + + assert((result != NULL && !PyErr_Occurred()) + || (result == NULL && PyErr_Occurred())); return result; } @@ -3994,10 +4155,9 @@ err_args(PyObject *func, int flags, int nargs) #define C_TRACE(x, call) \ if (tstate->use_tracing && tstate->c_profilefunc) { \ - if (call_trace(tstate->c_profilefunc, \ - tstate->c_profileobj, \ - tstate->frame, PyTrace_C_CALL, \ - func)) { \ + if (call_trace(tstate->c_profilefunc, tstate->c_profileobj, \ + tstate, tstate->frame, \ + PyTrace_C_CALL, func)) { \ x = NULL; \ } \ else { \ @@ -4006,14 +4166,14 @@ if (tstate->use_tracing && tstate->c_profilefunc) { \ if (x == NULL) { \ call_trace_protected(tstate->c_profilefunc, \ tstate->c_profileobj, \ - tstate->frame, PyTrace_C_EXCEPTION, \ - func); \ + tstate, tstate->frame, \ + PyTrace_C_EXCEPTION, func); \ /* XXX should pass (type, value, tb) */ \ } else { \ if (call_trace(tstate->c_profilefunc, \ tstate->c_profileobj, \ - tstate->frame, PyTrace_C_RETURN, \ - func)) { \ + tstate, tstate->frame, \ + PyTrace_C_RETURN, func)) { \ Py_DECREF(x); \ x = NULL; \ } \ @@ -4065,10 +4225,15 @@ call_function(PyObject ***pp_stack, int oparg else { PyObject *callargs; callargs = load_args(pp_stack, na); - READ_TIMESTAMP(*pintr0); - C_TRACE(x, PyCFunction_Call(func,callargs,NULL)); - READ_TIMESTAMP(*pintr1); - Py_XDECREF(callargs); + if (callargs != NULL) { + READ_TIMESTAMP(*pintr0); + C_TRACE(x, PyCFunction_Call(func,callargs,NULL)); + READ_TIMESTAMP(*pintr1); + Py_XDECREF(callargs); + } + else { + x = NULL; + } } } else { if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { @@ -4093,6 +4258,8 @@ call_function(PyObject ***pp_stack, int oparg READ_TIMESTAMP(*pintr1); Py_DECREF(func); } + assert((x != NULL && !PyErr_Occurred()) + || (x == NULL && PyErr_Occurred())); /* Clear the stack of the function object. Also removes the arguments in case they weren't consumed already @@ -4103,6 +4270,9 @@ call_function(PyObject ***pp_stack, int oparg Py_DECREF(w); PCALL(PCALL_POP); } + + assert((x != NULL && !PyErr_Occurred()) + || (x == NULL && PyErr_Occurred())); return x; } @@ -4386,6 +4556,8 @@ ext_call_fail: Py_XDECREF(callargs); Py_XDECREF(kwdict); Py_XDECREF(stararg); + assert((result != NULL && !PyErr_Occurred()) + || (result == NULL && PyErr_Occurred())); return result; } @@ -4424,7 +4596,7 @@ _PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi) "BaseException is not allowed" static PyObject * -cmp_outcome(int op, register PyObject *v, register PyObject *w) +cmp_outcome(int op, PyObject *v, PyObject *w) { int res = 0; switch (op) { @@ -4482,7 +4654,7 @@ import_from(PyObject *v, PyObject *name) x = PyObject_GetAttr(v, name); if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, "cannot import name %S", name); + PyErr_Format(PyExc_ImportError, "cannot import name %R", name); } return x; } diff --git a/Python/codecs.c b/Python/codecs.c index fd67d1b..5ff41b5 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -53,7 +53,7 @@ int PyCodec_Register(PyObject *search_function) static PyObject *normalizestring(const char *string) { - register size_t i; + size_t i; size_t len = strlen(string); char *p; PyObject *v; @@ -65,9 +65,9 @@ PyObject *normalizestring(const char *string) p = PyMem_Malloc(len + 1); if (p == NULL) - return NULL; + return PyErr_NoMemory(); for (i = 0; i < len; i++) { - register char ch = string[i]; + char ch = string[i]; if (ch == ' ') ch = '-'; else @@ -332,30 +332,45 @@ PyObject *PyCodec_StreamWriter(const char *encoding, return codec_getstreamcodec(encoding, stream, errors, 3); } +/* Helper that tries to ensure the reported exception chain indicates the + * codec that was invoked to trigger the failure without changing the type + * of the exception raised. + */ +static void +wrap_codec_error(const char *operation, + const char *encoding) +{ + /* TrySetFromCause will replace the active exception with a suitably + * updated clone if it can, otherwise it will leave the original + * exception alone. + */ + _PyErr_TrySetFromCause("%s with '%s' codec failed", + operation, encoding); +} + /* Encode an object (e.g. an Unicode object) using the given encoding and return the resulting encoded object (usually a Python string). errors is passed to the encoder factory as argument if non-NULL. */ -PyObject *PyCodec_Encode(PyObject *object, - const char *encoding, - const char *errors) +static PyObject * +_PyCodec_EncodeInternal(PyObject *object, + PyObject *encoder, + const char *encoding, + const char *errors) { - PyObject *encoder = NULL; PyObject *args = NULL, *result = NULL; PyObject *v = NULL; - encoder = PyCodec_Encoder(encoding); - if (encoder == NULL) - goto onError; - args = args_tuple(object, errors); if (args == NULL) goto onError; result = PyEval_CallObject(encoder, args); - if (result == NULL) + if (result == NULL) { + wrap_codec_error("encoding", encoding); goto onError; + } if (!PyTuple_Check(result) || PyTuple_GET_SIZE(result) != 2) { @@ -384,25 +399,24 @@ PyObject *PyCodec_Encode(PyObject *object, errors is passed to the decoder factory as argument if non-NULL. */ -PyObject *PyCodec_Decode(PyObject *object, - const char *encoding, - const char *errors) +static PyObject * +_PyCodec_DecodeInternal(PyObject *object, + PyObject *decoder, + const char *encoding, + const char *errors) { - PyObject *decoder = NULL; PyObject *args = NULL, *result = NULL; PyObject *v; - decoder = PyCodec_Decoder(encoding); - if (decoder == NULL) - goto onError; - args = args_tuple(object, errors); if (args == NULL) goto onError; result = PyEval_CallObject(decoder,args); - if (result == NULL) + if (result == NULL) { + wrap_codec_error("decoding", encoding); goto onError; + } if (!PyTuple_Check(result) || PyTuple_GET_SIZE(result) != 2) { PyErr_SetString(PyExc_TypeError, @@ -425,6 +439,118 @@ PyObject *PyCodec_Decode(PyObject *object, return NULL; } +/* Generic encoding/decoding API */ +PyObject *PyCodec_Encode(PyObject *object, + const char *encoding, + const char *errors) +{ + PyObject *encoder; + + encoder = PyCodec_Encoder(encoding); + if (encoder == NULL) + return NULL; + + return _PyCodec_EncodeInternal(object, encoder, encoding, errors); +} + +PyObject *PyCodec_Decode(PyObject *object, + const char *encoding, + const char *errors) +{ + PyObject *decoder; + + decoder = PyCodec_Decoder(encoding); + if (decoder == NULL) + return NULL; + + return _PyCodec_DecodeInternal(object, decoder, encoding, errors); +} + +/* Text encoding/decoding API */ +static +PyObject *codec_getitem_checked(const char *encoding, + const char *operation_name, + int index) +{ + _Py_IDENTIFIER(_is_text_encoding); + PyObject *codec; + PyObject *attr; + PyObject *v; + int is_text_codec; + + codec = _PyCodec_Lookup(encoding); + if (codec == NULL) + return NULL; + + /* Backwards compatibility: assume any raw tuple describes a text + * encoding, and the same for anything lacking the private + * attribute. + */ + if (!PyTuple_CheckExact(codec)) { + attr = _PyObject_GetAttrId(codec, &PyId__is_text_encoding); + if (attr == NULL) { + if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + Py_DECREF(codec); + return NULL; + } + } else { + is_text_codec = PyObject_IsTrue(attr); + Py_DECREF(attr); + if (!is_text_codec) { + Py_DECREF(codec); + PyErr_Format(PyExc_LookupError, + "'%.400s' is not a text encoding; " + "use codecs.%s() to handle arbitrary codecs", + encoding, operation_name); + return NULL; + } + } + } + + v = PyTuple_GET_ITEM(codec, index); + Py_DECREF(codec); + Py_INCREF(v); + return v; +} + +static PyObject * _PyCodec_TextEncoder(const char *encoding) +{ + return codec_getitem_checked(encoding, "encode", 0); +} + +static PyObject * _PyCodec_TextDecoder(const char *encoding) +{ + return codec_getitem_checked(encoding, "decode", 1); +} + +PyObject *_PyCodec_EncodeText(PyObject *object, + const char *encoding, + const char *errors) +{ + PyObject *encoder; + + encoder = _PyCodec_TextEncoder(encoding); + if (encoder == NULL) + return NULL; + + return _PyCodec_EncodeInternal(object, encoder, encoding, errors); +} + +PyObject *_PyCodec_DecodeText(PyObject *object, + const char *encoding, + const char *errors) +{ + PyObject *decoder; + + decoder = _PyCodec_TextDecoder(encoding); + if (decoder == NULL) + return NULL; + + return _PyCodec_DecodeInternal(object, decoder, encoding, errors); +} + /* Register the error handling callback function error under the name name. This function will be called by the codec when it encounters an unencodable characters/undecodable bytes and doesn't know the @@ -441,7 +567,7 @@ int PyCodec_RegisterError(const char *name, PyObject *error) return -1; } return PyDict_SetItemString(interp->codec_error_registry, - (char *)name, error); + name, error); } /* Lookup the error handling callback function registered under the @@ -457,7 +583,7 @@ PyObject *PyCodec_LookupError(const char *name) if (name==NULL) name = "strict"; - handler = PyDict_GetItemString(interp->codec_error_registry, (char *)name); + handler = PyDict_GetItemString(interp->codec_error_registry, name); if (!handler) PyErr_Format(PyExc_LookupError, "unknown error handler name '%.400s'", name); else @@ -733,6 +859,65 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) } } +#define ENC_UTF8 0 +#define ENC_UTF16BE 1 +#define ENC_UTF16LE 2 +#define ENC_UTF32BE 3 +#define ENC_UTF32LE 4 + +static int +get_standard_encoding(const char *encoding, int *bytelength) +{ + if (Py_TOLOWER(encoding[0]) == 'u' && + Py_TOLOWER(encoding[1]) == 't' && + Py_TOLOWER(encoding[2]) == 'f') { + encoding += 3; + if (*encoding == '-' || *encoding == '_' ) + encoding++; + if (encoding[0] == '1' && encoding[1] == '6') { + encoding += 2; + *bytelength = 2; + if (*encoding == '\0') { +#ifdef WORDS_BIGENDIAN + return ENC_UTF16BE; +#else + return ENC_UTF16LE; +#endif + } + if (*encoding == '-' || *encoding == '_' ) + encoding++; + if (Py_TOLOWER(encoding[1]) == 'e' && encoding[2] == '\0') { + if (Py_TOLOWER(encoding[0]) == 'b') + return ENC_UTF16BE; + if (Py_TOLOWER(encoding[0]) == 'l') + return ENC_UTF16LE; + } + } + else if (encoding[0] == '3' && encoding[1] == '2') { + encoding += 2; + *bytelength = 4; + if (*encoding == '\0') { +#ifdef WORDS_BIGENDIAN + return ENC_UTF32BE; +#else + return ENC_UTF32LE; +#endif + } + if (*encoding == '-' || *encoding == '_' ) + encoding++; + if (Py_TOLOWER(encoding[1]) == 'e' && encoding[2] == '\0') { + if (Py_TOLOWER(encoding[0]) == 'b') + return ENC_UTF32BE; + if (Py_TOLOWER(encoding[0]) == 'l') + return ENC_UTF32LE; + } + } + } + /* utf-8 */ + *bytelength = 3; + return ENC_UTF8; +} + /* This handler is declared static until someone demonstrates a need to call it directly. */ static PyObject * @@ -740,37 +925,77 @@ PyCodec_SurrogatePassErrors(PyObject *exc) { PyObject *restuple; PyObject *object; + PyObject *encode; + char *encoding; + int code; + int bytelength; Py_ssize_t i; Py_ssize_t start; Py_ssize_t end; PyObject *res; if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) { - char *outp; + unsigned char *outp; if (PyUnicodeEncodeError_GetStart(exc, &start)) return NULL; if (PyUnicodeEncodeError_GetEnd(exc, &end)) return NULL; if (!(object = PyUnicodeEncodeError_GetObject(exc))) return NULL; - res = PyBytes_FromStringAndSize(NULL, 3*(end-start)); + if (!(encode = PyUnicodeEncodeError_GetEncoding(exc))) { + Py_DECREF(object); + return NULL; + } + if (!(encoding = PyUnicode_AsUTF8(encode))) { + Py_DECREF(object); + Py_DECREF(encode); + return NULL; + } + code = get_standard_encoding(encoding, &bytelength); + Py_DECREF(encode); + + res = PyBytes_FromStringAndSize(NULL, bytelength*(end-start)); if (!res) { Py_DECREF(object); return NULL; } - outp = PyBytes_AsString(res); + outp = (unsigned char*)PyBytes_AsString(res); for (i = start; i < end; i++) { /* object is guaranteed to be "ready" */ Py_UCS4 ch = PyUnicode_READ_CHAR(object, i); - if (ch < 0xd800 || ch > 0xdfff) { + if (!Py_UNICODE_IS_SURROGATE(ch)) { /* Not a surrogate, fail with original exception */ PyErr_SetObject(PyExceptionInstance_Class(exc), exc); Py_DECREF(res); Py_DECREF(object); return NULL; } - *outp++ = (char)(0xe0 | (ch >> 12)); - *outp++ = (char)(0x80 | ((ch >> 6) & 0x3f)); - *outp++ = (char)(0x80 | (ch & 0x3f)); + switch (code) { + case ENC_UTF8: + *outp++ = (unsigned char)(0xe0 | (ch >> 12)); + *outp++ = (unsigned char)(0x80 | ((ch >> 6) & 0x3f)); + *outp++ = (unsigned char)(0x80 | (ch & 0x3f)); + break; + case ENC_UTF16LE: + *outp++ = (unsigned char) ch; + *outp++ = (unsigned char)(ch >> 8); + break; + case ENC_UTF16BE: + *outp++ = (unsigned char)(ch >> 8); + *outp++ = (unsigned char) ch; + break; + case ENC_UTF32LE: + *outp++ = (unsigned char) ch; + *outp++ = (unsigned char)(ch >> 8); + *outp++ = (unsigned char)(ch >> 16); + *outp++ = (unsigned char)(ch >> 24); + break; + case ENC_UTF32BE: + *outp++ = (unsigned char)(ch >> 24); + *outp++ = (unsigned char)(ch >> 16); + *outp++ = (unsigned char)(ch >> 8); + *outp++ = (unsigned char) ch; + break; + } } restuple = Py_BuildValue("(On)", res, end); Py_DECREF(res); @@ -782,34 +1007,64 @@ PyCodec_SurrogatePassErrors(PyObject *exc) Py_UCS4 ch = 0; if (PyUnicodeDecodeError_GetStart(exc, &start)) return NULL; + if (PyUnicodeDecodeError_GetEnd(exc, &end)) + return NULL; if (!(object = PyUnicodeDecodeError_GetObject(exc))) return NULL; if (!(p = (unsigned char*)PyBytes_AsString(object))) { Py_DECREF(object); return NULL; } + if (!(encode = PyUnicodeDecodeError_GetEncoding(exc))) { + Py_DECREF(object); + return NULL; + } + if (!(encoding = PyUnicode_AsUTF8(encode))) { + Py_DECREF(object); + Py_DECREF(encode); + return NULL; + } + code = get_standard_encoding(encoding, &bytelength); + Py_DECREF(encode); + /* Try decoding a single surrogate character. If there are more, let the codec call us again. */ p += start; - if (PyBytes_GET_SIZE(object) - start >= 3 && - (p[0] & 0xf0) == 0xe0 && - (p[1] & 0xc0) == 0x80 && - (p[2] & 0xc0) == 0x80) { - /* it's a three-byte code */ - ch = ((p[0] & 0x0f) << 12) + ((p[1] & 0x3f) << 6) + (p[2] & 0x3f); - if (ch < 0xd800 || ch > 0xdfff) - /* it's not a surrogate - fail */ - ch = 0; + if (PyBytes_GET_SIZE(object) - start >= bytelength) { + switch (code) { + case ENC_UTF8: + if ((p[0] & 0xf0) == 0xe0 && + (p[1] & 0xc0) == 0x80 && + (p[2] & 0xc0) == 0x80) { + /* it's a three-byte code */ + ch = ((p[0] & 0x0f) << 12) + ((p[1] & 0x3f) << 6) + (p[2] & 0x3f); + } + break; + case ENC_UTF16LE: + ch = p[1] << 8 | p[0]; + break; + case ENC_UTF16BE: + ch = p[0] << 8 | p[1]; + break; + case ENC_UTF32LE: + ch = (p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]; + break; + case ENC_UTF32BE: + ch = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; + break; + } } + Py_DECREF(object); - if (ch == 0) { + if (!Py_UNICODE_IS_SURROGATE(ch)) { + /* it's not a surrogate - fail */ PyErr_SetObject(PyExceptionInstance_Class(exc), exc); return NULL; } res = PyUnicode_FromOrdinal(ch); if (res == NULL) return NULL; - return Py_BuildValue("(Nn)", res, start+3); + return Py_BuildValue("(Nn)", res, start + bytelength); } else { wrong_exception_type(exc); @@ -1026,7 +1281,7 @@ static int _PyCodecRegistry_Init(void) if (interp->codec_error_registry) { for (i = 0; i < Py_ARRAY_LENGTH(methods); ++i) { - PyObject *func = PyCFunction_New(&methods[i].def, NULL); + PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL); int res; if (!func) Py_FatalError("can't initialize codec error registry"); diff --git a/Python/compile.c b/Python/compile.c index 6d66255..a7ddc5a 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -94,6 +94,7 @@ enum { COMPILER_SCOPE_MODULE, COMPILER_SCOPE_CLASS, COMPILER_SCOPE_FUNCTION, + COMPILER_SCOPE_LAMBDA, COMPILER_SCOPE_COMPREHENSION, }; @@ -119,8 +120,8 @@ struct compiler_unit { PyObject *u_private; /* for private name mangling */ - int u_argcount; /* number of arguments for block */ - int u_kwonlyargcount; /* number of keyword only arguments for block */ + Py_ssize_t u_argcount; /* number of arguments for block */ + Py_ssize_t u_kwonlyargcount; /* number of keyword only arguments for block */ /* Pointer to the most recently allocated block. By following b_list members, you can reach all early allocated blocks. */ basicblock *u_blocks; @@ -149,8 +150,7 @@ handled by the symbol analysis pass. */ struct compiler { - const char *c_filename; - PyObject *c_filename_obj; + PyObject *c_filename; struct symtable *c_st; PyFutureFeatures *c_future; /* pointer to module's __future__ */ PyCompilerFlags *c_flags; @@ -170,7 +170,7 @@ static basicblock *compiler_new_block(struct compiler *); static int compiler_next_instr(struct compiler *, basicblock *); static int compiler_addop(struct compiler *, int); static int compiler_addop_o(struct compiler *, int, PyObject *, PyObject *); -static int compiler_addop_i(struct compiler *, int, int); +static int compiler_addop_i(struct compiler *, int, Py_ssize_t); static int compiler_addop_j(struct compiler *, int, basicblock *, int); static basicblock *compiler_use_new_block(struct compiler *); static int compiler_error(struct compiler *, const char *); @@ -195,12 +195,13 @@ static int inplace_binop(struct compiler *, operator_ty); static int expr_constant(struct compiler *, expr_ty); static int compiler_with(struct compiler *, stmt_ty, int); -static int compiler_call_helper(struct compiler *c, int n, +static int compiler_call_helper(struct compiler *c, Py_ssize_t n, asdl_seq *args, asdl_seq *keywords, expr_ty starargs, expr_ty kwargs); static int compiler_try_except(struct compiler *, stmt_ty); +static int compiler_set_qualname(struct compiler *); static PyCodeObject *assemble(struct compiler *, int addNone); static PyObject *__doc__; @@ -288,8 +289,8 @@ compiler_init(struct compiler *c) } PyCodeObject * -PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, - int optimize, PyArena *arena) +PyAST_CompileObject(mod_ty mod, PyObject *filename, PyCompilerFlags *flags, + int optimize, PyArena *arena) { struct compiler c; PyCodeObject *co = NULL; @@ -304,12 +305,10 @@ PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, if (!compiler_init(&c)) return NULL; + Py_INCREF(filename); c.c_filename = filename; - c.c_filename_obj = PyUnicode_DecodeFSDefault(filename); - if (!c.c_filename_obj) - goto finally; c.c_arena = arena; - c.c_future = PyFuture_FromAST(mod, filename); + c.c_future = PyFuture_FromASTObject(mod, filename); if (c.c_future == NULL) goto finally; if (!flags) { @@ -323,7 +322,7 @@ PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, c.c_optimize = (optimize == -1) ? Py_OptimizeFlag : optimize; c.c_nestlevel = 0; - c.c_st = PySymtable_Build(mod, filename, c.c_future); + c.c_st = PySymtable_BuildObject(mod, filename, c.c_future); if (c.c_st == NULL) { if (!PyErr_Occurred()) PyErr_SetString(PyExc_SystemError, "no symtable"); @@ -339,6 +338,21 @@ PyAST_CompileEx(mod_ty mod, const char *filename, PyCompilerFlags *flags, } PyCodeObject * +PyAST_CompileEx(mod_ty mod, const char *filename_str, PyCompilerFlags *flags, + int optimize, PyArena *arena) +{ + PyObject *filename; + PyCodeObject *co; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + co = PyAST_CompileObject(mod, filename, flags, optimize, arena); + Py_DECREF(filename); + return co; + +} + +PyCodeObject * PyNode_Compile(struct _node *n, const char *filename) { PyCodeObject *co = NULL; @@ -360,8 +374,7 @@ compiler_free(struct compiler *c) PySymtable_Free(c->c_st); if (c->c_future) PyObject_Free(c->c_future); - if (c->c_filename_obj) - Py_DECREF(c->c_filename_obj); + Py_XDECREF(c->c_filename); Py_DECREF(c->c_stack); } @@ -375,7 +388,7 @@ list2dict(PyObject *list) n = PyList_Size(list); for (i = 0; i < n; i++) { - v = PyLong_FromLong(i); + v = PyLong_FromSsize_t(i); if (!v) { Py_DECREF(dict); return NULL; @@ -403,7 +416,7 @@ each key. */ static PyObject * -dictbytype(PyObject *src, int scope_type, int flag, int offset) +dictbytype(PyObject *src, int scope_type, int flag, Py_ssize_t offset) { Py_ssize_t i = offset, scope, num_keys, key_i; PyObject *k, *v, *dest = PyDict_New(); @@ -437,7 +450,7 @@ dictbytype(PyObject *src, int scope_type, int flag, int offset) scope = (vi >> SCOPE_OFFSET) & SCOPE_MASK; if (scope == scope_type || vi & flag) { - PyObject *tuple, *item = PyLong_FromLong(i); + PyObject *tuple, *item = PyLong_FromSsize_t(i); if (item == NULL) { Py_DECREF(sorted_keys); Py_DECREF(dest); @@ -535,6 +548,37 @@ compiler_enter_scope(struct compiler *c, identifier name, compiler_unit_free(u); return 0; } + if (u->u_ste->ste_needs_class_closure) { + /* Cook up a implicit __class__ cell. */ + _Py_IDENTIFIER(__class__); + PyObject *tuple, *name, *zero; + int res; + assert(u->u_scope_type == COMPILER_SCOPE_CLASS); + assert(PyDict_Size(u->u_cellvars) == 0); + name = _PyUnicode_FromId(&PyId___class__); + if (!name) { + compiler_unit_free(u); + return 0; + } + tuple = PyTuple_Pack(2, name, Py_TYPE(name)); + if (!tuple) { + compiler_unit_free(u); + return 0; + } + zero = PyLong_FromLong(0); + if (!zero) { + Py_DECREF(tuple); + compiler_unit_free(u); + return 0; + } + res = PyDict_SetItem(u->u_cellvars, tuple, zero); + Py_DECREF(tuple); + Py_DECREF(zero); + if (res < 0) { + compiler_unit_free(u); + return 0; + } + } u->u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS, PyDict_Size(u->u_cellvars)); @@ -580,13 +624,18 @@ compiler_enter_scope(struct compiler *c, identifier name, if (compiler_use_new_block(c) == NULL) return 0; + if (u->u_scope_type != COMPILER_SCOPE_MODULE) { + if (!compiler_set_qualname(c)) + return 0; + } + return 1; } static void compiler_exit_scope(struct compiler *c) { - int n; + Py_ssize_t n; PyObject *capsule; c->c_nestlevel--; @@ -607,57 +656,77 @@ compiler_exit_scope(struct compiler *c) } -static PyObject * -compiler_scope_qualname(struct compiler *c) +static int +compiler_set_qualname(struct compiler *c) { - Py_ssize_t stack_size, i; _Py_static_string(dot, "."); - _Py_static_string(locals, "<locals>"); - struct compiler_unit *u; - PyObject *capsule, *name, *seq, *dot_str, *locals_str; + _Py_static_string(dot_locals, ".<locals>"); + Py_ssize_t stack_size; + struct compiler_unit *u = c->u; + PyObject *name, *base, *dot_str, *dot_locals_str; - u = c->u; - if (u->u_qualname != NULL) { - Py_INCREF(u->u_qualname); - return u->u_qualname; - } + base = NULL; + stack_size = PyList_GET_SIZE(c->c_stack); + assert(stack_size >= 1); + if (stack_size > 1) { + int scope, force_global = 0; + struct compiler_unit *parent; + PyObject *mangled, *capsule; + + capsule = PyList_GET_ITEM(c->c_stack, stack_size - 1); + parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT); + assert(parent); + + if (u->u_scope_type == COMPILER_SCOPE_FUNCTION || u->u_scope_type == COMPILER_SCOPE_CLASS) { + assert(u->u_name); + mangled = _Py_Mangle(parent->u_private, u->u_name); + if (!mangled) + return 0; + scope = PyST_GetScope(parent->u_ste, mangled); + Py_DECREF(mangled); + assert(scope != GLOBAL_IMPLICIT); + if (scope == GLOBAL_EXPLICIT) + force_global = 1; + } - seq = PyList_New(0); - if (seq == NULL) - return NULL; + if (!force_global) { + if (parent->u_scope_type == COMPILER_SCOPE_FUNCTION + || parent->u_scope_type == COMPILER_SCOPE_LAMBDA) { + dot_locals_str = _PyUnicode_FromId(&dot_locals); + if (dot_locals_str == NULL) + return 0; + base = PyUnicode_Concat(parent->u_qualname, dot_locals_str); + if (base == NULL) + return 0; + } + else { + Py_INCREF(parent->u_qualname); + base = parent->u_qualname; + } + } + } - stack_size = PyList_GET_SIZE(c->c_stack); - for (i = 0; i < stack_size; i++) { - capsule = PyList_GET_ITEM(c->c_stack, i); - u = (struct compiler_unit *)PyCapsule_GetPointer(capsule, COMPILER_CAPSULE_NAME_COMPILER_UNIT); - assert(u); - if (u->u_scope_type == COMPILER_SCOPE_MODULE) - continue; - if (PyList_Append(seq, u->u_name)) - goto _error; - if (u->u_scope_type == COMPILER_SCOPE_FUNCTION) { - locals_str = _PyUnicode_FromId(&locals); - if (locals_str == NULL) - goto _error; - if (PyList_Append(seq, locals_str)) - goto _error; + if (base != NULL) { + dot_str = _PyUnicode_FromId(&dot); + if (dot_str == NULL) { + Py_DECREF(base); + return 0; } + name = PyUnicode_Concat(base, dot_str); + Py_DECREF(base); + if (name == NULL) + return 0; + PyUnicode_Append(&name, u->u_name); + if (name == NULL) + return 0; + } + else { + Py_INCREF(u->u_name); + name = u->u_name; } - u = c->u; - if (PyList_Append(seq, u->u_name)) - goto _error; - dot_str = _PyUnicode_FromId(&dot); - if (dot_str == NULL) - goto _error; - name = PyUnicode_Join(dot_str, seq); - Py_DECREF(seq); u->u_qualname = name; - Py_XINCREF(name); - return name; -_error: - Py_XDECREF(seq); - return NULL; + return 1; } /* Allocate a new block and return a pointer to it. @@ -784,8 +853,8 @@ compiler_set_lineno(struct compiler *c, int off) b->b_instr[off].i_lineno = c->u->u_lineno; } -static int -opcode_stack_effect(int opcode, int oparg) +int +PyCompile_OpcodeStackEffect(int opcode, int oparg) { switch (opcode) { case POP_TOP: @@ -862,8 +931,6 @@ opcode_stack_effect(int opcode, int oparg) return 7; case WITH_CLEANUP: return -1; /* XXX Sometimes more */ - case STORE_LOCALS: - return -1; case RETURN_VALUE: return -1; case IMPORT_STAR: @@ -970,17 +1037,16 @@ opcode_stack_effect(int opcode, int oparg) case LOAD_CLOSURE: return 1; case LOAD_DEREF: + case LOAD_CLASSDEREF: return 1; case STORE_DEREF: return -1; case DELETE_DEREF: return 0; default: - fprintf(stderr, "opcode = %d\n", opcode); - Py_FatalError("opcode_stack_effect()"); - + return PY_INVALID_STACK_EFFECT; } - return 0; /* not reachable */ + return PY_INVALID_STACK_EFFECT; /* not reachable */ } /* Add an opcode with no argument. @@ -1006,7 +1072,7 @@ compiler_addop(struct compiler *c, int opcode) return 1; } -static int +static Py_ssize_t compiler_add_o(struct compiler *c, PyObject *dict, PyObject *o) { PyObject *t, *v; @@ -1060,7 +1126,7 @@ compiler_add_o(struct compiler *c, PyObject *dict, PyObject *o) if (PyErr_Occurred()) return -1; arg = PyDict_Size(dict); - v = PyLong_FromLong(arg); + v = PyLong_FromSsize_t(arg); if (!v) { Py_DECREF(t); return -1; @@ -1082,7 +1148,7 @@ static int compiler_addop_o(struct compiler *c, int opcode, PyObject *dict, PyObject *o) { - int arg = compiler_add_o(c, dict, o); + Py_ssize_t arg = compiler_add_o(c, dict, o); if (arg < 0) return 0; return compiler_addop_i(c, opcode, arg); @@ -1092,7 +1158,7 @@ static int compiler_addop_name(struct compiler *c, int opcode, PyObject *dict, PyObject *o) { - int arg; + Py_ssize_t arg; PyObject *mangled = _Py_Mangle(c->u->u_private, o); if (!mangled) return 0; @@ -1108,16 +1174,22 @@ compiler_addop_name(struct compiler *c, int opcode, PyObject *dict, */ static int -compiler_addop_i(struct compiler *c, int opcode, int oparg) +compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) { struct instr *i; int off; + + /* Integer arguments are limit to 16-bit. There is an extension for 32-bit + integer arguments. */ + assert((-2147483647-1) <= oparg); + assert(oparg <= 2147483647); + off = compiler_next_instr(c, c->u->u_curblock); if (off < 0) return 0; i = &c->u->u_curblock->b_instr[off]; i->i_opcode = opcode; - i->i_oparg = oparg; + i->i_oparg = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int); i->i_hasarg = 1; compiler_set_lineno(c, off); return 1; @@ -1330,16 +1402,19 @@ compiler_mod(struct compiler *c, mod_ty mod) static int get_ref_type(struct compiler *c, PyObject *name) { - int scope = PyST_GetScope(c->u->u_ste, name); + int scope; + if (c->u->u_scope_type == COMPILER_SCOPE_CLASS && + !PyUnicode_CompareWithASCIIString(name, "__class__")) + return CELL; + scope = PyST_GetScope(c->u->u_ste, name); if (scope == 0) { char buf[350]; PyOS_snprintf(buf, sizeof(buf), - "unknown scope for %.100s in %.100s(%s) in %s\n" + "unknown scope for %.100s in %.100s(%s)\n" "symbols: %s\nlocals: %s\nglobals: %s", PyBytes_AS_STRING(name), PyBytes_AS_STRING(c->u->u_name), PyObject_REPR(c->u->u_ste->ste_id), - c->c_filename, PyObject_REPR(c->u->u_ste->ste_symbols), PyObject_REPR(c->u->u_varnames), PyObject_REPR(c->u->u_names) @@ -1365,9 +1440,9 @@ compiler_lookup_arg(PyObject *dict, PyObject *name) } static int -compiler_make_closure(struct compiler *c, PyCodeObject *co, int args, PyObject *qualname) +compiler_make_closure(struct compiler *c, PyCodeObject *co, Py_ssize_t args, PyObject *qualname) { - int i, free = PyCode_GetNumFree(co); + Py_ssize_t i, free = PyCode_GetNumFree(co); if (qualname == NULL) qualname = co->co_name; @@ -1494,22 +1569,22 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, */ static identifier return_str; PyObject *names; - int len; + Py_ssize_t len; names = PyList_New(0); if (!names) return -1; if (compiler_visit_argannotations(c, args->args, names)) goto error; - if (args->varargannotation && - compiler_visit_argannotation(c, args->vararg, - args->varargannotation, names)) + if (args->vararg && args->vararg->annotation && + compiler_visit_argannotation(c, args->vararg->arg, + args->vararg->annotation, names)) goto error; if (compiler_visit_argannotations(c, args->kwonlyargs, names)) goto error; - if (args->kwargannotation && - compiler_visit_argannotation(c, args->kwarg, - args->kwargannotation, names)) + if (args->kwarg && args->kwarg->annotation && + compiler_visit_argannotation(c, args->kwarg->arg, + args->kwarg->annotation, names)) goto error; if (!return_str) { @@ -1531,7 +1606,7 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, if (len) { /* convert names to a tuple and place on stack */ PyObject *elt; - int i; + Py_ssize_t i; PyObject *s = PyTuple_New(len); if (!s) goto error; @@ -1545,7 +1620,9 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, len++; /* include the just-pushed tuple */ } Py_DECREF(names); - return len; + + /* We just checked that len <= 65535, see above */ + return Py_SAFE_DOWNCAST(len, Py_ssize_t, int); error: Py_DECREF(names); @@ -1561,13 +1638,16 @@ compiler_function(struct compiler *c, stmt_ty s) expr_ty returns = s->v.FunctionDef.returns; asdl_seq* decos = s->v.FunctionDef.decorator_list; stmt_ty st; - int i, n, docstring, kw_default_count = 0, arglength; + Py_ssize_t i, n, arglength; + int docstring, kw_default_count = 0; int num_annotations; assert(s->kind == FunctionDef_kind); if (!compiler_decorators(c, decos)) return 0; + if (args->defaults) + VISIT_SEQ(c, expr, args->defaults); if (args->kwonlyargs) { int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, args->kw_defaults); @@ -1575,8 +1655,6 @@ compiler_function(struct compiler *c, stmt_ty s) return 0; kw_default_count = res; } - if (args->defaults) - VISIT_SEQ(c, expr, args->defaults); num_annotations = compiler_visit_annotations(c, args, returns); if (num_annotations < 0) return 0; @@ -1605,9 +1683,10 @@ compiler_function(struct compiler *c, stmt_ty s) VISIT_IN_SCOPE(c, stmt, st); } co = assemble(c, 1); - qualname = compiler_scope_qualname(c); + qualname = c->u->u_qualname; + Py_INCREF(qualname); compiler_exit_scope(c); - if (qualname == NULL || co == NULL) { + if (co == NULL) { Py_XDECREF(qualname); Py_XDECREF(co); return 0; @@ -1661,12 +1740,6 @@ compiler_class(struct compiler *c, stmt_ty s) Py_INCREF(s->v.ClassDef.name); Py_XDECREF(c->u->u_private); c->u->u_private = s->v.ClassDef.name; - /* force it to have one mandatory argument */ - c->u->u_argcount = 1; - /* load the first argument (__locals__) ... */ - ADDOP_I(c, LOAD_FAST, 0); - /* ... and store it into f_locals */ - ADDOP_IN_SCOPE(c, STORE_LOCALS); /* load (global) __name__ ... */ str = PyUnicode_InternFromString("__name__"); if (!str || !compiler_nameop(c, str, Load)) { @@ -1683,14 +1756,8 @@ compiler_class(struct compiler *c, stmt_ty s) return 0; } Py_DECREF(str); - /* store the __qualname__ */ - str = compiler_scope_qualname(c); - if (!str) { - compiler_exit_scope(c); - return 0; - } - ADDOP_O(c, LOAD_CONST, str, consts); - Py_DECREF(str); + assert(c->u->u_qualname); + ADDOP_O(c, LOAD_CONST, c->u->u_qualname, consts); str = PyUnicode_InternFromString("__qualname__"); if (!str || !compiler_nameop(c, str, Store)) { Py_XDECREF(str); @@ -1703,24 +1770,28 @@ compiler_class(struct compiler *c, stmt_ty s) compiler_exit_scope(c); return 0; } - /* return the (empty) __class__ cell */ - str = PyUnicode_InternFromString("__class__"); - if (str == NULL) { - compiler_exit_scope(c); - return 0; - } - i = compiler_lookup_arg(c->u->u_cellvars, str); - Py_DECREF(str); - if (i == -1) { - /* This happens when nobody references the cell */ - PyErr_Clear(); - /* Return None */ - ADDOP_O(c, LOAD_CONST, Py_None, consts); - } - else { + if (c->u->u_ste->ste_needs_class_closure) { + /* return the (empty) __class__ cell */ + str = PyUnicode_InternFromString("__class__"); + if (str == NULL) { + compiler_exit_scope(c); + return 0; + } + i = compiler_lookup_arg(c->u->u_cellvars, str); + Py_DECREF(str); + if (i < 0) { + compiler_exit_scope(c); + return 0; + } + assert(i == 0); /* Return the cell where to store __class__ */ ADDOP_I(c, LOAD_CLOSURE, i); } + else { + assert(PyDict_Size(c->u->u_cellvars) == 0); + /* This happens when nobody references the cell. Return None. */ + ADDOP_O(c, LOAD_CONST, Py_None, consts); + } ADDOP_IN_SCOPE(c, RETURN_VALUE); /* create the code object */ co = assemble(c, 1); @@ -1787,7 +1858,8 @@ compiler_lambda(struct compiler *c, expr_ty e) PyCodeObject *co; PyObject *qualname; static identifier name; - int kw_default_count = 0, arglength; + int kw_default_count = 0; + Py_ssize_t arglength; arguments_ty args = e->v.Lambda.args; assert(e->kind == Lambda_kind); @@ -1797,15 +1869,15 @@ compiler_lambda(struct compiler *c, expr_ty e) return 0; } + if (args->defaults) + VISIT_SEQ(c, expr, args->defaults); if (args->kwonlyargs) { int res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, args->kw_defaults); if (res < 0) return 0; kw_default_count = res; } - if (args->defaults) - VISIT_SEQ(c, expr, args->defaults); - if (!compiler_enter_scope(c, name, COMPILER_SCOPE_FUNCTION, + if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA, (void *)e, e->lineno)) return 0; @@ -1824,9 +1896,10 @@ compiler_lambda(struct compiler *c, expr_ty e) ADDOP_IN_SCOPE(c, RETURN_VALUE); } co = assemble(c, 1); - qualname = compiler_scope_qualname(c); + qualname = c->u->u_qualname; + Py_INCREF(qualname); compiler_exit_scope(c); - if (qualname == NULL || co == NULL) + if (co == NULL) return 0; arglength = asdl_seq_LEN(args->defaults); @@ -2097,7 +2170,7 @@ static int compiler_try_except(struct compiler *c, stmt_ty s) { basicblock *body, *orelse, *except, *end; - int i, n; + Py_ssize_t i, n; body = compiler_new_block(c); except = compiler_new_block(c); @@ -2263,7 +2336,7 @@ compiler_import(struct compiler *c, stmt_ty s) module names. XXX Perhaps change the representation to make this case simpler? */ - int i, n = asdl_seq_LEN(s->v.Import.names); + Py_ssize_t i, n = asdl_seq_LEN(s->v.Import.names); for (i = 0; i < n; i++) { alias_ty alias = (alias_ty)asdl_seq_GET(s->v.Import.names, i); @@ -2288,8 +2361,11 @@ compiler_import(struct compiler *c, stmt_ty s) identifier tmp = alias->name; Py_ssize_t dot = PyUnicode_FindChar( alias->name, '.', 0, PyUnicode_GET_LENGTH(alias->name), 1); - if (dot != -1) + if (dot != -1) { tmp = PyUnicode_Substring(alias->name, 0, dot); + if (tmp == NULL) + return 0; + } r = compiler_nameop(c, tmp, Store); if (dot != -1) { Py_DECREF(tmp); @@ -2304,7 +2380,7 @@ compiler_import(struct compiler *c, stmt_ty s) static int compiler_from_import(struct compiler *c, stmt_ty s) { - int i, n = asdl_seq_LEN(s->v.ImportFrom.names); + Py_ssize_t i, n = asdl_seq_LEN(s->v.ImportFrom.names); PyObject *names = PyTuple_New(n); PyObject *level; @@ -2380,6 +2456,7 @@ compiler_assert(struct compiler *c, stmt_ty s) { static PyObject *assertion_error = NULL; basicblock *end; + PyObject* msg; if (c->c_optimize) return 1; @@ -2390,11 +2467,17 @@ compiler_assert(struct compiler *c, stmt_ty s) } if (s->v.Assert.test->kind == Tuple_kind && asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0) { - const char* msg = - "assertion is always true, perhaps remove parentheses?"; - if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, c->c_filename, - c->u->u_lineno, NULL, NULL) == -1) + msg = PyUnicode_FromString("assertion is always true, " + "perhaps remove parentheses?"); + if (msg == NULL) + return 0; + if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, + c->c_filename, c->u->u_lineno, + NULL, NULL) == -1) { + Py_DECREF(msg); return 0; + } + Py_DECREF(msg); } VISIT(c, expr, s->v.Assert.test); end = compiler_new_block(c); @@ -2414,7 +2497,7 @@ compiler_assert(struct compiler *c, stmt_ty s) static int compiler_visit_stmt(struct compiler *c, stmt_ty s) { - int i, n; + Py_ssize_t i, n; /* Always assign a lineno to the next instruction for a stmt. */ c->u->u_lineno = s->lineno; @@ -2462,12 +2545,12 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s) if (s->v.Raise.exc) { VISIT(c, expr, s->v.Raise.exc); n++; - if (s->v.Raise.cause) { - VISIT(c, expr, s->v.Raise.cause); - n++; - } + if (s->v.Raise.cause) { + VISIT(c, expr, s->v.Raise.cause); + n++; + } } - ADDOP_I(c, RAISE_VARARGS, n); + ADDOP_I(c, RAISE_VARARGS, (int)n); break; case Try_kind: return compiler_try(c, s); @@ -2627,7 +2710,8 @@ inplace_binop(struct compiler *c, operator_ty op) static int compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) { - int op, scope, arg; + int op, scope; + Py_ssize_t arg; enum { OP_FAST, OP_GLOBAL, OP_DEREF, OP_NAME } optype; PyObject *dict = c->u->u_names; @@ -2638,6 +2722,10 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) if (!mangled) return 0; + assert(PyUnicode_CompareWithASCIIString(name, "None") && + PyUnicode_CompareWithASCIIString(name, "True") && + PyUnicode_CompareWithASCIIString(name, "False")); + op = 0; optype = OP_NAME; scope = PyST_GetScope(c->u->u_ste, mangled); @@ -2673,7 +2761,9 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx) switch (optype) { case OP_DEREF: switch (ctx) { - case Load: op = LOAD_DEREF; break; + case Load: + op = (c->u->u_ste->ste_type == ClassBlock) ? LOAD_CLASSDEREF : LOAD_DEREF; + break; case Store: op = STORE_DEREF; break; case AugLoad: case AugStore: @@ -2747,7 +2837,8 @@ static int compiler_boolop(struct compiler *c, expr_ty e) { basicblock *end; - int jumpi, i, n; + int jumpi; + Py_ssize_t i, n; asdl_seq *s; assert(e->kind == BoolOp_kind); @@ -2773,7 +2864,7 @@ compiler_boolop(struct compiler *c, expr_ty e) static int compiler_list(struct compiler *c, expr_ty e) { - int n = asdl_seq_LEN(e->v.List.elts); + Py_ssize_t n = asdl_seq_LEN(e->v.List.elts); if (e->v.List.ctx == Store) { int i, seen_star = 0; for (i = 0; i < n; i++) { @@ -2806,7 +2897,7 @@ compiler_list(struct compiler *c, expr_ty e) static int compiler_tuple(struct compiler *c, expr_ty e) { - int n = asdl_seq_LEN(e->v.Tuple.elts); + Py_ssize_t n = asdl_seq_LEN(e->v.Tuple.elts); if (e->v.Tuple.ctx == Store) { int i, seen_star = 0; for (i = 0; i < n; i++) { @@ -2839,7 +2930,7 @@ compiler_tuple(struct compiler *c, expr_ty e) static int compiler_compare(struct compiler *c, expr_ty e) { - int i, n; + Py_ssize_t i, n; basicblock *cleanup = NULL; /* XXX the logic can be cleaned up for 1 or multiple comparisons */ @@ -2895,11 +2986,11 @@ compiler_call(struct compiler *c, expr_ty e) /* shared code between compiler_call and compiler_class */ static int compiler_call_helper(struct compiler *c, - int n, /* Args already pushed */ - asdl_seq *args, - asdl_seq *keywords, - expr_ty starargs, - expr_ty kwargs) + Py_ssize_t n, /* Args already pushed */ + asdl_seq *args, + asdl_seq *keywords, + expr_ty starargs, + expr_ty kwargs) { int code = 0; @@ -2960,7 +3051,7 @@ compiler_comprehension_generator(struct compiler *c, comprehension_ty gen; basicblock *start, *anchor, *skip, *if_cleanup; - int i, n; + Py_ssize_t i, n; start = compiler_new_block(c); skip = compiler_new_block(c); @@ -3085,9 +3176,10 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type, identifier name, } co = assemble(c, 1); - qualname = compiler_scope_qualname(c); + qualname = c->u->u_qualname; + Py_INCREF(qualname); compiler_exit_scope(c); - if (qualname == NULL || co == NULL) + if (co == NULL) goto error; if (!compiler_make_closure(c, co, 0, qualname)) @@ -3197,12 +3289,18 @@ expr_constant(struct compiler *c, expr_ty e) case Name_kind: /* optimize away names that can't be reassigned */ id = PyUnicode_AsUTF8(e->v.Name.id); - if (strcmp(id, "True") == 0) return 1; - if (strcmp(id, "False") == 0) return 0; - if (strcmp(id, "None") == 0) return 0; - if (strcmp(id, "__debug__") == 0) - return ! c->c_optimize; - /* fall through */ + if (id && strcmp(id, "__debug__") == 0) + return !c->c_optimize; + return -1; + case NameConstant_kind: { + PyObject *o = e->v.NameConstant.value; + if (o == Py_None) + return 0; + else if (o == Py_True) + return 1; + else if (o == Py_False) + return 0; + } default: return -1; } @@ -3292,7 +3390,7 @@ compiler_with(struct compiler *c, stmt_ty s, int pos) static int compiler_visit_expr(struct compiler *c, expr_ty e) { - int i, n; + Py_ssize_t i, n; /* If expr e has a different line number than the last expr/stmt, set a new line number for the next instruction. @@ -3321,6 +3419,8 @@ compiler_visit_expr(struct compiler *c, expr_ty e) return compiler_ifexp(c, e); case Dict_kind: n = asdl_seq_LEN(e->v.Dict.values); + /* BUILD_MAP parameter is only used to preallocate the dictionary, + it doesn't need to be exact */ ADDOP_I(c, BUILD_MAP, (n>0xFFFF ? 0xFFFF : n)); for (i = 0; i < n; i++) { VISIT(c, expr, @@ -3378,6 +3478,9 @@ compiler_visit_expr(struct compiler *c, expr_ty e) case Ellipsis_kind: ADDOP_O(c, LOAD_CONST, Py_Ellipsis, consts); break; + case NameConstant_kind: + ADDOP_O(c, LOAD_CONST, e->v.NameConstant.value, consts); + break; /* The following exprs can be assignment targets. */ case Attribute_kind: if (e->v.Attribute.ctx != AugStore) @@ -3547,12 +3650,12 @@ compiler_error(struct compiler *c, const char *errstr) PyObject *loc; PyObject *u = NULL, *v = NULL; - loc = PyErr_ProgramText(c->c_filename, c->u->u_lineno); + loc = PyErr_ProgramTextObject(c->c_filename, c->u->u_lineno); if (!loc) { Py_INCREF(Py_None); loc = Py_None; } - u = Py_BuildValue("(OiiO)", c->c_filename_obj, c->u->u_lineno, + u = Py_BuildValue("(OiiO)", c->c_filename, c->u->u_lineno, c->u->u_col_offset, loc); if (!u) goto exit; @@ -3665,7 +3768,7 @@ compiler_visit_slice(struct compiler *c, slice_ty s, expr_context_ty ctx) case ExtSlice_kind: kindname = "extended slice"; if (ctx != AugStore) { - int i, n = asdl_seq_LEN(s->v.ExtSlice.dims); + Py_ssize_t i, n = asdl_seq_LEN(s->v.ExtSlice.dims); for (i = 0; i < n; i++) { slice_ty sub = (slice_ty)asdl_seq_GET( s->v.ExtSlice.dims, i); @@ -3724,7 +3827,7 @@ dfs(struct compiler *c, basicblock *b, struct assembler *a) static int stackdepth_walk(struct compiler *c, basicblock *b, int depth, int maxdepth) { - int i, target_depth; + int i, target_depth, effect; struct instr *instr; if (b->b_seen || b->b_startdepth >= depth) return maxdepth; @@ -3732,7 +3835,13 @@ stackdepth_walk(struct compiler *c, basicblock *b, int depth, int maxdepth) b->b_startdepth = depth; for (i = 0; i < b->b_iused; i++) { instr = &b->b_instr[i]; - depth += opcode_stack_effect(instr->i_opcode, instr->i_oparg); + effect = PyCompile_OpcodeStackEffect(instr->i_opcode, instr->i_oparg); + if (effect == PY_INVALID_STACK_EFFECT) { + fprintf(stderr, "opcode = %d\n", instr->i_opcode); + Py_FatalError("PyCompile_OpcodeStackEffect()"); + } + depth += effect; + if (depth > maxdepth) maxdepth = depth; assert(depth >= 0); /* invalid code or bug in stackdepth() */ @@ -3790,7 +3899,7 @@ assemble_init(struct assembler *a, int nblocks, int firstlineno) a->a_lnotab = PyBytes_FromStringAndSize(NULL, DEFAULT_LNOTAB_SIZE); if (!a->a_lnotab) return 0; - if (nblocks > PY_SIZE_MAX / sizeof(basicblock *)) { + if ((size_t)nblocks > PY_SIZE_MAX / sizeof(basicblock *)) { PyErr_NoMemory(); return 0; } @@ -3843,7 +3952,7 @@ static int assemble_lnotab(struct assembler *a, struct instr *i) { int d_bytecode, d_lineno; - int len; + Py_ssize_t len; unsigned char *lnotab; d_bytecode = a->a_offset - a->a_lineno_off; @@ -4034,7 +4143,7 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) } static PyObject * -dict_keys_inorder(PyObject *dict, int offset) +dict_keys_inorder(PyObject *dict, Py_ssize_t offset) { PyObject *tuple, *k, *v; Py_ssize_t i, pos = 0, size = PyDict_Size(dict); @@ -4059,10 +4168,10 @@ static int compute_code_flags(struct compiler *c) { PySTEntryObject *ste = c->u->u_ste; - int flags = 0, n; - if (ste->ste_type != ModuleBlock) - flags |= CO_NEWLOCALS; + int flags = 0; + Py_ssize_t n; if (ste->ste_type == FunctionBlock) { + flags |= CO_NEWLOCALS; if (!ste->ste_unoptimized) flags |= CO_OPTIMIZED; if (ste->ste_nested) @@ -4084,9 +4193,9 @@ compute_code_flags(struct compiler *c) if (n == 0) { n = PyDict_Size(c->u->u_cellvars); if (n < 0) - return -1; + return -1; if (n == 0) { - flags |= CO_NOFREE; + flags |= CO_NOFREE; } } @@ -4105,7 +4214,10 @@ makecode(struct compiler *c, struct assembler *a) PyObject *freevars = NULL; PyObject *cellvars = NULL; PyObject *bytecode = NULL; - int nlocals, flags; + Py_ssize_t nlocals; + int nlocals_int; + int flags; + int argcount, kwonlyargcount; tmp = dict_keys_inorder(c->u->u_consts, 0); if (!tmp) @@ -4124,7 +4236,11 @@ makecode(struct compiler *c, struct assembler *a) freevars = dict_keys_inorder(c->u->u_freevars, PyTuple_Size(cellvars)); if (!freevars) goto error; + nlocals = PyDict_Size(c->u->u_varnames); + assert(nlocals < INT_MAX); + nlocals_int = Py_SAFE_DOWNCAST(nlocals, Py_ssize_t, int); + flags = compute_code_flags(c); if (flags < 0) goto error; @@ -4139,11 +4255,13 @@ makecode(struct compiler *c, struct assembler *a) Py_DECREF(consts); consts = tmp; - co = PyCode_New(c->u->u_argcount, c->u->u_kwonlyargcount, - nlocals, stackdepth(c), flags, + argcount = Py_SAFE_DOWNCAST(c->u->u_argcount, Py_ssize_t, int); + kwonlyargcount = Py_SAFE_DOWNCAST(c->u->u_kwonlyargcount, Py_ssize_t, int); + co = PyCode_New(argcount, kwonlyargcount, + nlocals_int, stackdepth(c), flags, bytecode, consts, names, varnames, freevars, cellvars, - c->c_filename_obj, c->u->u_name, + c->c_filename, c->u->u_name, c->u->u_firstlineno, a->a_lnotab); error: @@ -4259,4 +4377,3 @@ PyAST_Compile(mod_ty mod, const char *filename, PyCompilerFlags *flags, return PyAST_CompileEx(mod, filename, flags, -1, arena); } - diff --git a/Python/condvar.h b/Python/condvar.h index bbb40ba..e022dc7 100644 --- a/Python/condvar.h +++ b/Python/condvar.h @@ -241,7 +241,7 @@ _PyCOND_WAIT_MS(PyCOND_T *cv, PyMUTEX_T *cs, DWORD ms) * but we are safe because we are using a semaphore wich has an internal * count. */ - wait = WaitForSingleObject(cv->sem, ms); + wait = WaitForSingleObjectEx(cv->sem, ms, FALSE); PyMUTEX_LOCK(cs); if (wait != WAIT_OBJECT_0) --cv->waiting; diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c index f40a0be..5ac30ed 100644 --- a/Python/dynload_aix.c +++ b/Python/dynload_aix.c @@ -30,11 +30,11 @@ const char *_PyImport_DynLoadFiletab[] = {".so", NULL}; static int aix_getoldmodules(void **modlistptr) { - register ModulePtr modptr, prevmodptr; - register struct ld_info *ldiptr; - register char *ldibuf; - register int errflag, bufsize = 1024; - register unsigned int offset; + ModulePtr modptr, prevmodptr; + struct ld_info *ldiptr; + char *ldibuf; + int errflag, bufsize = 1024; + unsigned int offset; char *progname = Py_GetProgramName(); /* @@ -106,7 +106,7 @@ aix_loaderror(const char *pathname) char *message[1024], errbuf[1024]; PyObject *pathname_ob = NULL; PyObject *errbuf_ob = NULL; - register int i,j; + int i,j; struct errtab { int errNo; diff --git a/Python/dynload_os2.c b/Python/dynload_os2.c deleted file mode 100644 index 0e1b907..0000000 --- a/Python/dynload_os2.c +++ /dev/null @@ -1,42 +0,0 @@ - -/* Support for dynamic loading of extension modules */ - -#define INCL_DOSERRORS -#define INCL_DOSMODULEMGR -#include <os2.h> - -#include "Python.h" -#include "importdl.h" - - -const char *_PyImport_DynLoadFiletab[] = {".pyd", ".dll", NULL}; - -dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, - const char *pathname, FILE *fp) -{ - dl_funcptr p; - APIRET rc; - HMODULE hDLL; - char failreason[256]; - char funcname[258]; - - rc = DosLoadModule(failreason, - sizeof(failreason), - pathname, - &hDLL); - - if (rc != NO_ERROR) { - char errBuf[256]; - PyOS_snprintf(errBuf, sizeof(errBuf), - "DLL load failed, rc = %d: %.200s", - rc, failreason); - PyErr_SetString(PyExc_ImportError, errBuf); - return NULL; - } - - PyOS_snprintf(funcname, sizeof(funcname), "PyInit_%.200s", shortname); - rc = DosQueryProcAddr(hDLL, 0L, funcname, &p); - if (rc != NO_ERROR) - p = NULL; /* Signify Failure to Acquire Entrypoint */ - return p; -} diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 75544ed..5cd1efd 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -18,10 +18,6 @@ #ifdef HAVE_DLFCN_H #include <dlfcn.h> -#else -#if defined(PYOS_OS2) && defined(PYCC_GCC) -#include "dlfcn.h" -#endif #endif #if (defined(__OpenBSD__) || defined(__NetBSD__)) && !defined(__ELF__) @@ -40,30 +36,16 @@ const char *_PyImport_DynLoadFiletab[] = { #ifdef __CYGWIN__ ".dll", #else /* !__CYGWIN__ */ -#if defined(PYOS_OS2) && defined(PYCC_GCC) - ".pyd", - ".dll", -#else /* !(defined(PYOS_OS2) && defined(PYCC_GCC)) */ -#ifdef __VMS - ".exe", - ".EXE", -#else /* !__VMS */ "." SOABI ".so", ".abi" PYTHON_ABI_STRING ".so", ".so", -#endif /* __VMS */ -#endif /* defined(PYOS_OS2) && defined(PYCC_GCC) */ #endif /* __CYGWIN__ */ NULL, }; static struct { dev_t dev; -#ifdef __VMS - ino_t ino[3]; -#else ino_t ino; -#endif void *handle; } handles[128]; static int nhandles = 0; @@ -104,47 +86,39 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, } if (nhandles < 128) { handles[nhandles].dev = statb.st_dev; -#ifdef __VMS - handles[nhandles].ino[0] = statb.st_ino[0]; - handles[nhandles].ino[1] = statb.st_ino[1]; - handles[nhandles].ino[2] = statb.st_ino[2]; -#else handles[nhandles].ino = statb.st_ino; -#endif } } -#if !(defined(PYOS_OS2) && defined(PYCC_GCC)) dlopenflags = PyThreadState_GET()->interp->dlopenflags; -#endif - -#ifdef __VMS - /* VMS currently don't allow a pathname, use a logical name instead */ - /* Concatenate 'python_module_' and shortname */ - /* so "import vms.bar" will use the logical python_module_bar */ - /* As C module use only one name space this is probably not a */ - /* important limitation */ - PyOS_snprintf(pathbuf, sizeof(pathbuf), "python_module_%-.200s", - shortname); - pathname = pathbuf; -#endif handle = dlopen(pathname, dlopenflags); if (handle == NULL) { - PyObject *mod_name = NULL; - PyObject *path = NULL; - PyObject *error_ob = NULL; + PyObject *mod_name; + PyObject *path; + PyObject *error_ob; const char *error = dlerror(); if (error == NULL) error = "unknown dlopen() error"; error_ob = PyUnicode_FromString(error); - path = PyUnicode_FromString(pathname); + if (error_ob == NULL) + return NULL; mod_name = PyUnicode_FromString(shortname); + if (mod_name == NULL) { + Py_DECREF(error_ob); + return NULL; + } + path = PyUnicode_FromString(pathname); + if (path == NULL) { + Py_DECREF(error_ob); + Py_DECREF(mod_name); + return NULL; + } PyErr_SetImportError(error_ob, mod_name, path); - Py_XDECREF(error_ob); - Py_XDECREF(path); - Py_XDECREF(mod_name); + Py_DECREF(error_ob); + Py_DECREF(mod_name); + Py_DECREF(path); return NULL; } if (fp != NULL && nhandles < 128) diff --git a/Python/errors.c b/Python/errors.c index 626b16e..90dc729 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -20,6 +20,9 @@ extern char *strerror(int); extern "C" { #endif +_Py_IDENTIFIER(builtins); +_Py_IDENTIFIER(stderr); + void PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback) @@ -71,6 +74,11 @@ PyErr_SetObject(PyObject *exception, PyObject *value) if (value == NULL || !PyExceptionInstance_Check(value)) { /* We must normalize the value right now */ PyObject *args, *fixed_value; +#ifdef Py_DEBUG + /* in debug mode, PyEval_EvalFrameEx() fails with an assertion + error if an exception is set when it is called */ + PyErr_Clear(); +#endif if (value == NULL || value == Py_None) args = PyTuple_New(0); else if (PyTuple_Check(value)) { @@ -112,6 +120,20 @@ PyErr_SetObject(PyObject *exception, PyObject *value) PyErr_Restore(exception, value, tb); } +/* Set a key error with the specified argument, wrapping it in a + * tuple automatically so that tuple keys are not unpacked as the + * exception arguments. */ +void +_PyErr_SetKeyError(PyObject *arg) +{ + PyObject *tup; + tup = PyTuple_Pack(1, arg); + if (!tup) + return; /* caller will expect error to be set anyway */ + PyErr_SetObject(PyExc_KeyError, tup); + Py_DECREF(tup); +} + void PyErr_SetNone(PyObject *exception) { @@ -227,12 +249,21 @@ PyErr_NormalizeException(PyObject **exc, PyObject **val, PyObject **tb) value will be an instance. */ if (PyExceptionClass_Check(type)) { + int is_subclass; + if (inclass) { + is_subclass = PyObject_IsSubclass(inclass, type); + if (is_subclass < 0) + goto finally; + } + else + is_subclass = 0; + /* if the value was not an instance, or is not an instance whose class is (or is derived from) type, then use the value as an argument to instantiation of the type class. */ - if (!inclass || !PyObject_IsSubclass(inclass, type)) { + if (!inclass || !is_subclass) { PyObject *args, *res; if (value == Py_None) @@ -366,6 +397,12 @@ PyErr_BadArgument(void) PyObject * PyErr_NoMemory(void) { + if (Py_TYPE(PyExc_MemoryError) == NULL) { + /* PyErr_NoMemory() has been called before PyExc_MemoryError has been + initialized by _PyExc_Init() */ + Py_FatalError("Out of memory and PyExc_MemoryError is not " + "initialized yet"); + } PyErr_SetNone(PyExc_MemoryError); return NULL; } @@ -588,7 +625,7 @@ PyObject *PyErr_SetExcFromWindowsErr(PyObject *exc, int ierr) PyObject *PyErr_SetFromWindowsErr(int ierr) { - return PyErr_SetExcFromWindowsErrWithFilename(PyExc_WindowsError, + return PyErr_SetExcFromWindowsErrWithFilename(PyExc_OSError, ierr, NULL); } PyObject *PyErr_SetFromWindowsErrWithFilename( @@ -597,7 +634,7 @@ PyObject *PyErr_SetFromWindowsErrWithFilename( { PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL; PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( - PyExc_WindowsError, + PyExc_OSError, ierr, name); Py_XDECREF(name); return result; @@ -611,7 +648,7 @@ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename( PyUnicode_FromUnicode(filename, wcslen(filename)) : NULL; PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( - PyExc_WindowsError, + PyExc_OSError, ierr, name); Py_XDECREF(name); return result; @@ -646,8 +683,11 @@ PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path) Py_INCREF(msg); PyTuple_SET_ITEM(args, 0, msg); - PyDict_SetItemString(kwargs, "name", name); - PyDict_SetItemString(kwargs, "path", path); + + if (PyDict_SetItemString(kwargs, "name", name) < 0) + return NULL; + if (PyDict_SetItemString(kwargs, "path", path) < 0) + return NULL; error = PyObject_Call(PyExc_ImportError, args, kwargs); if (error != NULL) { @@ -675,6 +715,7 @@ _PyErr_BadInternalCall(const char *filename, int lineno) void PyErr_BadInternalCall(void) { + assert(0 && "bad argument to internal function"); PyErr_Format(PyExc_SystemError, "bad argument to internal function"); } @@ -694,6 +735,12 @@ PyErr_Format(PyObject *exception, const char *format, ...) va_start(vargs); #endif +#ifdef Py_DEBUG + /* in debug mode, PyEval_EvalFrameEx() fails with an assertion error + if an exception is set when it is called */ + PyErr_Clear(); +#endif + string = PyUnicode_FromFormatV(format, vargs); PyErr_SetObject(exception, string); Py_XDECREF(string); @@ -795,60 +842,84 @@ PyErr_WriteUnraisable(PyObject *obj) { _Py_IDENTIFIER(__module__); PyObject *f, *t, *v, *tb; + PyObject *moduleName = NULL; + char* className; + PyErr_Fetch(&t, &v, &tb); - f = PySys_GetObject("stderr"); - if (f != NULL && f != Py_None) { - PyFile_WriteString("Exception ", f); - if (t) { - PyObject* moduleName; - char* className; - assert(PyExceptionClass_Check(t)); - className = PyExceptionClass_Name(t); - if (className != NULL) { - char *dot = strrchr(className, '.'); - if (dot != NULL) - className = dot+1; - } - moduleName = _PyObject_GetAttrId(t, &PyId___module__); - if (moduleName == NULL) - PyFile_WriteString("<unknown>", f); - else { - char* modstr = _PyUnicode_AsString(moduleName); - if (modstr && - strcmp(modstr, "builtins") != 0) - { - PyFile_WriteString(modstr, f); - PyFile_WriteString(".", f); - } - } - if (className == NULL) - PyFile_WriteString("<unknown>", f); - else - PyFile_WriteString(className, f); - if (v && v != Py_None) { - PyFile_WriteString(": ", f); - PyFile_WriteObject(v, f, 0); - } - Py_XDECREF(moduleName); - } - if (obj) { - PyFile_WriteString(" in ", f); - PyFile_WriteObject(obj, f, 0); + f = _PySys_GetObjectId(&PyId_stderr); + if (f == NULL || f == Py_None) + goto done; + + if (obj) { + if (PyFile_WriteString("Exception ignored in: ", f) < 0) + goto done; + if (PyFile_WriteObject(obj, f, 0) < 0) + goto done; + if (PyFile_WriteString("\n", f) < 0) + goto done; + } + + if (PyTraceBack_Print(tb, f) < 0) + goto done; + + if (!t) + goto done; + + assert(PyExceptionClass_Check(t)); + className = PyExceptionClass_Name(t); + if (className != NULL) { + char *dot = strrchr(className, '.'); + if (dot != NULL) + className = dot+1; + } + + moduleName = _PyObject_GetAttrId(t, &PyId___module__); + if (moduleName == NULL) { + PyErr_Clear(); + if (PyFile_WriteString("<unknown>", f) < 0) + goto done; + } + else { + if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0) { + if (PyFile_WriteObject(moduleName, f, Py_PRINT_RAW) < 0) + goto done; + if (PyFile_WriteString(".", f) < 0) + goto done; } - PyFile_WriteString(" ignored\n", f); - PyErr_Clear(); /* Just in case */ } + if (className == NULL) { + if (PyFile_WriteString("<unknown>", f) < 0) + goto done; + } + else { + if (PyFile_WriteString(className, f) < 0) + goto done; + } + + if (v && v != Py_None) { + if (PyFile_WriteString(": ", f) < 0) + goto done; + if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) + goto done; + } + if (PyFile_WriteString("\n", f) < 0) + goto done; + +done: + Py_XDECREF(moduleName); Py_XDECREF(t); Py_XDECREF(v); Py_XDECREF(tb); + PyErr_Clear(); /* Just in case */ } extern PyObject *PyModule_GetWarningsModule(void); void -PyErr_SyntaxLocation(const char *filename, int lineno) { +PyErr_SyntaxLocation(const char *filename, int lineno) +{ PyErr_SyntaxLocationEx(filename, lineno, -1); } @@ -858,7 +929,7 @@ PyErr_SyntaxLocation(const char *filename, int lineno) { to make printing of exceptions believe it is a syntax error. */ void -PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) +PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset) { PyObject *exc, *v, *tb, *tmp; _Py_IDENTIFIER(filename); @@ -892,16 +963,10 @@ PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) } } if (filename != NULL) { - tmp = PyUnicode_DecodeFSDefault(filename); - if (tmp == NULL) + if (_PyObject_SetAttrId(v, &PyId_filename, filename)) PyErr_Clear(); - else { - if (_PyObject_SetAttrId(v, &PyId_filename, tmp)) - PyErr_Clear(); - Py_DECREF(tmp); - } - tmp = PyErr_ProgramText(filename, lineno); + tmp = PyErr_ProgramTextObject(filename, lineno); if (tmp) { if (_PyObject_SetAttrId(v, &PyId_text, tmp)) PyErr_Clear(); @@ -931,22 +996,33 @@ PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) PyErr_Restore(exc, v, tb); } +void +PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) +{ + PyObject *fileobj; + if (filename != NULL) { + fileobj = PyUnicode_DecodeFSDefault(filename); + if (fileobj == NULL) + PyErr_Clear(); + } + else + fileobj = NULL; + PyErr_SyntaxLocationObject(fileobj, lineno, col_offset); + Py_XDECREF(fileobj); +} + /* Attempt to load the line of text that the exception refers to. If it fails, it will return NULL but will not set an exception. XXX The functionality of this function is quite similar to the functionality in tb_displayline() in traceback.c. */ -PyObject * -PyErr_ProgramText(const char *filename, int lineno) +static PyObject * +err_programtext(FILE *fp, int lineno) { - FILE *fp; int i; char linebuf[1000]; - if (filename == NULL || *filename == '\0' || lineno <= 0) - return NULL; - fp = fopen(filename, "r" PY_STDIOTEXTMODE); if (fp == NULL) return NULL; for (i = 0; i < lineno; i++) { @@ -977,6 +1053,26 @@ PyErr_ProgramText(const char *filename, int lineno) return NULL; } +PyObject * +PyErr_ProgramText(const char *filename, int lineno) +{ + FILE *fp; + if (filename == NULL || *filename == '\0' || lineno <= 0) + return NULL; + fp = _Py_fopen(filename, "r" PY_STDIOTEXTMODE); + return err_programtext(fp, lineno); +} + +PyObject * +PyErr_ProgramTextObject(PyObject *filename, int lineno) +{ + FILE *fp; + if (filename == NULL || lineno <= 0) + return NULL; + fp = _Py_fopen_obj(filename, "r" PY_STDIOTEXTMODE); + return err_programtext(fp, lineno); +} + #ifdef __cplusplus } #endif diff --git a/Python/fileutils.c b/Python/fileutils.c index d25111f..a55064f 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -10,20 +10,39 @@ #include <langinfo.h> #endif +#ifdef HAVE_SYS_IOCTL_H +#include <sys/ioctl.h> +#endif + +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif /* HAVE_FCNTL_H */ + #ifdef __APPLE__ extern wchar_t* _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size); #endif +#ifdef O_CLOEXEC +/* Does open() support the O_CLOEXEC flag? Possible values: + + -1: unknown + 0: open() ignores O_CLOEXEC flag, ex: Linux kernel older than 2.6.23 + 1: open() supports O_CLOEXEC flag, close-on-exec is set + + The flag is used by _Py_open(), io.FileIO and os.open() */ +int _Py_open_cloexec_works = -1; +#endif + PyObject * _Py_device_encoding(int fd) { -#if defined(MS_WINDOWS) || defined(MS_WIN64) +#if defined(MS_WINDOWS) UINT cp; #endif if (!_PyVerify_fd(fd) || !isatty(fd)) { Py_RETURN_NONE; } -#if defined(MS_WINDOWS) || defined(MS_WIN64) +#if defined(MS_WINDOWS) if (fd == 0) cp = GetConsoleCP(); else if (fd == 1 || fd == 2) @@ -61,7 +80,7 @@ extern int _Py_normalize_encoding(const char *, char *, size_t); workaround is also enabled on error, for example if getting the locale failed. - Values of locale_is_ascii: + Values of force_ascii: 1: the workaround is used: _Py_wchar2char() uses encode_ascii_surrogateescape() and _Py_char2wchar() uses @@ -202,7 +221,7 @@ decode_ascii_surrogateescape(const char *arg, size_t *size) unsigned char *in; wchar_t *out; - res = PyMem_Malloc((strlen(arg)+1)*sizeof(wchar_t)); + res = PyMem_RawMalloc((strlen(arg)+1)*sizeof(wchar_t)); if (!res) return NULL; @@ -230,7 +249,7 @@ decode_ascii_surrogateescape(const char *arg, size_t *size) Use _Py_wchar2char() to encode the character string back to a byte string. Return a pointer to a newly allocated wide character string (use - PyMem_Free() to free the memory) and write the number of written wide + PyMem_RawFree() to free the memory) and write the number of written wide characters excluding the null character into *size if size is not NULL, or NULL on error (decoding or memory allocation error). If size is not NULL, *size is set to (size_t)-1 on memory error and (size_t)-2 on decoding @@ -255,9 +274,9 @@ _Py_char2wchar(const char* arg, size_t *size) wchar_t *res; size_t argsize; size_t count; +#ifdef HAVE_MBRTOWC unsigned char *in; wchar_t *out; -#ifdef HAVE_MBRTOWC mbstate_t mbs; #endif @@ -284,7 +303,7 @@ _Py_char2wchar(const char* arg, size_t *size) argsize = mbstowcs(NULL, arg, 0); #endif if (argsize != (size_t)-1) { - res = (wchar_t *)PyMem_Malloc((argsize+1)*sizeof(wchar_t)); + res = (wchar_t *)PyMem_RawMalloc((argsize+1)*sizeof(wchar_t)); if (!res) goto oom; count = mbstowcs(res, arg, argsize+1); @@ -293,7 +312,7 @@ _Py_char2wchar(const char* arg, size_t *size) /* Only use the result if it contains no surrogate characters. */ for (tmp = res; *tmp != 0 && - (*tmp < 0xd800 || *tmp > 0xdfff); tmp++) + !Py_UNICODE_IS_SURROGATE(*tmp); tmp++) ; if (*tmp == 0) { if (size != NULL) @@ -301,7 +320,7 @@ _Py_char2wchar(const char* arg, size_t *size) return res; } } - PyMem_Free(res); + PyMem_RawFree(res); } /* Conversion failed. Fall back to escaping with surrogateescape. */ #ifdef HAVE_MBRTOWC @@ -310,7 +329,7 @@ _Py_char2wchar(const char* arg, size_t *size) /* Overallocate; as multi-byte characters are in the argument, the actual output could use less memory. */ argsize = strlen(arg) + 1; - res = (wchar_t*)PyMem_Malloc(argsize*sizeof(wchar_t)); + res = (wchar_t*)PyMem_RawMalloc(argsize*sizeof(wchar_t)); if (!res) goto oom; in = (unsigned char*)arg; @@ -326,7 +345,7 @@ _Py_char2wchar(const char* arg, size_t *size) since we provide everything that we have - unless there is a bug in the C library, or I misunderstood how mbrtowc works. */ - PyMem_Free(res); + PyMem_RawFree(res); if (size != NULL) *size = (size_t)-2; return NULL; @@ -339,7 +358,7 @@ _Py_char2wchar(const char* arg, size_t *size) memset(&mbs, 0, sizeof mbs); continue; } - if (*out >= 0xd800 && *out <= 0xdfff) { + if (Py_UNICODE_IS_SURROGATE(*out)) { /* Surrogate character. Escape the original byte sequence with surrogateescape. */ argsize -= converted; @@ -548,14 +567,215 @@ _Py_stat(PyObject *path, struct stat *statbuf) #endif -/* Open a file. Use _wfopen() on Windows, encode the path to the locale - encoding and use fopen() otherwise. */ +static int +get_inheritable(int fd, int raise) +{ +#ifdef MS_WINDOWS + HANDLE handle; + DWORD flags; + + if (!_PyVerify_fd(fd)) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + handle = (HANDLE)_get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + + if (!GetHandleInformation(handle, &flags)) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + + return (flags & HANDLE_FLAG_INHERIT); +#else + int flags; + + flags = fcntl(fd, F_GETFD, 0); + if (flags == -1) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return !(flags & FD_CLOEXEC); +#endif +} + +/* Get the inheritable flag of the specified file descriptor. + Return 1 if the file descriptor can be inherited, 0 if it cannot, + raise an exception and return -1 on error. */ +int +_Py_get_inheritable(int fd) +{ + return get_inheritable(fd, 1); +} + +static int +set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) +{ +#ifdef MS_WINDOWS + HANDLE handle; + DWORD flags; +#elif defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX) + int request; + int err; +#elif defined(HAVE_FCNTL_H) + int flags; + int res; +#endif + + /* atomic_flag_works can only be used to make the file descriptor + non-inheritable */ + assert(!(atomic_flag_works != NULL && inheritable)); + + if (atomic_flag_works != NULL && !inheritable) { + if (*atomic_flag_works == -1) { + int inheritable = get_inheritable(fd, raise); + if (inheritable == -1) + return -1; + *atomic_flag_works = !inheritable; + } + + if (*atomic_flag_works) + return 0; + } + +#ifdef MS_WINDOWS + if (!_PyVerify_fd(fd)) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + handle = (HANDLE)_get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + + if (inheritable) + flags = HANDLE_FLAG_INHERIT; + else + flags = 0; + if (!SetHandleInformation(handle, HANDLE_FLAG_INHERIT, flags)) { + if (raise) + PyErr_SetFromWindowsErr(0); + return -1; + } + return 0; + +#elif defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX) + if (inheritable) + request = FIONCLEX; + else + request = FIOCLEX; + err = ioctl(fd, request, NULL); + if (err) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; + +#else + flags = fcntl(fd, F_GETFD); + if (flags < 0) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + if (inheritable) + flags &= ~FD_CLOEXEC; + else + flags |= FD_CLOEXEC; + res = fcntl(fd, F_SETFD, flags); + if (res < 0) { + if (raise) + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return 0; +#endif +} + +/* Make the file descriptor non-inheritable. + Return 0 on success, set errno and return -1 on error. */ +static int +make_non_inheritable(int fd) +{ + return set_inheritable(fd, 0, 0, NULL); +} + +/* Set the inheritable flag of the specified file descriptor. + On success: return 0, on error: raise an exception if raise is nonzero + and return -1. + + If atomic_flag_works is not NULL: + + * if *atomic_flag_works==-1, check if the inheritable is set on the file + descriptor: if yes, set *atomic_flag_works to 1, otherwise set to 0 and + set the inheritable flag + * if *atomic_flag_works==1: do nothing + * if *atomic_flag_works==0: set inheritable flag to False + + Set atomic_flag_works to NULL if no atomic flag was used to create the + file descriptor. + + atomic_flag_works can only be used to make a file descriptor + non-inheritable: atomic_flag_works must be NULL if inheritable=1. */ +int +_Py_set_inheritable(int fd, int inheritable, int *atomic_flag_works) +{ + return set_inheritable(fd, inheritable, 1, atomic_flag_works); +} + +/* Open a file with the specified flags (wrapper to open() function). + The file descriptor is created non-inheritable. */ +int +_Py_open(const char *pathname, int flags) +{ + int fd; +#ifdef MS_WINDOWS + fd = open(pathname, flags | O_NOINHERIT); + if (fd < 0) + return fd; +#else + + int *atomic_flag_works; +#ifdef O_CLOEXEC + atomic_flag_works = &_Py_open_cloexec_works; + flags |= O_CLOEXEC; +#else + atomic_flag_works = NULL; +#endif + fd = open(pathname, flags); + if (fd < 0) + return fd; + + if (set_inheritable(fd, 0, 0, atomic_flag_works) < 0) { + close(fd); + return -1; + } +#endif /* !MS_WINDOWS */ + return fd; +} +/* Open a file. Use _wfopen() on Windows, encode the path to the locale + encoding and use fopen() otherwise. The file descriptor is created + non-inheritable. */ FILE * _Py_wfopen(const wchar_t *path, const wchar_t *mode) { -#ifndef MS_WINDOWS FILE *f; +#ifndef MS_WINDOWS char *cpath; char cmode[10]; size_t r; @@ -569,21 +789,42 @@ _Py_wfopen(const wchar_t *path, const wchar_t *mode) return NULL; f = fopen(cpath, cmode); PyMem_Free(cpath); - return f; #else - return _wfopen(path, mode); + f = _wfopen(path, mode); #endif + if (f == NULL) + return NULL; + if (make_non_inheritable(fileno(f)) < 0) { + fclose(f); + return NULL; + } + return f; } -/* Call _wfopen() on Windows, or encode the path to the filesystem encoding and - call fopen() otherwise. +/* Wrapper to fopen(). The file descriptor is created non-inheritable. */ +FILE* +_Py_fopen(const char *pathname, const char *mode) +{ + FILE *f = fopen(pathname, mode); + if (f == NULL) + return NULL; + if (make_non_inheritable(fileno(f)) < 0) { + fclose(f); + return NULL; + } + return f; +} - Return the new file object on success, or NULL if the file cannot be open or - (if PyErr_Occurred()) on unicode error */ +/* Open a file. Call _wfopen() on Windows, or encode the path to the filesystem + encoding and call fopen() otherwise. The file descriptor is created + non-inheritable. + Return the new file object on success, or NULL if the file cannot be open or + (if PyErr_Occurred()) on unicode error. */ FILE* -_Py_fopen(PyObject *path, const char *mode) +_Py_fopen_obj(PyObject *path, const char *mode) { + FILE *f; #ifdef MS_WINDOWS wchar_t *wpath; wchar_t wmode[10]; @@ -603,16 +844,21 @@ _Py_fopen(PyObject *path, const char *mode) if (usize == 0) return NULL; - return _wfopen(wpath, wmode); + f = _wfopen(wpath, wmode); #else - FILE *f; PyObject *bytes; if (!PyUnicode_FSConverter(path, &bytes)) return NULL; f = fopen(PyBytes_AS_STRING(bytes), mode); Py_DECREF(bytes); - return f; #endif + if (f == NULL) + return NULL; + if (make_non_inheritable(fileno(f)) < 0) { + fclose(f); + return NULL; + } + return f; } #ifdef HAVE_READLINK @@ -649,12 +895,12 @@ _Py_wreadlink(const wchar_t *path, wchar_t *buf, size_t bufsiz) return -1; } if (bufsiz <= r1) { - PyMem_Free(wbuf); + PyMem_RawFree(wbuf); errno = EINVAL; return -1; } wcsncpy(buf, wbuf, bufsiz); - PyMem_Free(wbuf); + PyMem_RawFree(wbuf); return (int)r1; } #endif @@ -690,12 +936,12 @@ _Py_wrealpath(const wchar_t *path, return NULL; } if (resolved_path_size <= r) { - PyMem_Free(wresolved_path); + PyMem_RawFree(wresolved_path); errno = EINVAL; return NULL; } wcsncpy(resolved_path, wresolved_path, resolved_path_size); - PyMem_Free(wresolved_path); + PyMem_RawFree(wresolved_path); return resolved_path; } #endif @@ -708,7 +954,8 @@ wchar_t* _Py_wgetcwd(wchar_t *buf, size_t size) { #ifdef MS_WINDOWS - return _wgetcwd(buf, size); + int isize = (int)Py_MIN(size, INT_MAX); + return _wgetcwd(buf, isize); #else char fname[MAXPATHLEN]; wchar_t *wname; @@ -720,12 +967,81 @@ _Py_wgetcwd(wchar_t *buf, size_t size) if (wname == NULL) return NULL; if (size <= len) { - PyMem_Free(wname); + PyMem_RawFree(wname); return NULL; } wcsncpy(buf, wname, size); - PyMem_Free(wname); + PyMem_RawFree(wname); return buf; #endif } +/* Duplicate a file descriptor. The new file descriptor is created as + non-inheritable. Return a new file descriptor on success, raise an OSError + exception and return -1 on error. + + The GIL is released to call dup(). The caller must hold the GIL. */ +int +_Py_dup(int fd) +{ +#ifdef MS_WINDOWS + HANDLE handle; + DWORD ftype; +#endif + + if (!_PyVerify_fd(fd)) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + +#ifdef MS_WINDOWS + handle = (HANDLE)_get_osfhandle(fd); + if (handle == INVALID_HANDLE_VALUE) { + PyErr_SetFromWindowsErr(0); + return -1; + } + + /* get the file type, ignore the error if it failed */ + ftype = GetFileType(handle); + + Py_BEGIN_ALLOW_THREADS + fd = dup(fd); + Py_END_ALLOW_THREADS + if (fd < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + /* Character files like console cannot be make non-inheritable */ + if (ftype != FILE_TYPE_CHAR) { + if (_Py_set_inheritable(fd, 0, NULL) < 0) { + close(fd); + return -1; + } + } +#elif defined(HAVE_FCNTL_H) && defined(F_DUPFD_CLOEXEC) + Py_BEGIN_ALLOW_THREADS + fd = fcntl(fd, F_DUPFD_CLOEXEC, 0); + Py_END_ALLOW_THREADS + if (fd < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + +#else + Py_BEGIN_ALLOW_THREADS + fd = dup(fd); + Py_END_ALLOW_THREADS + if (fd < 0) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + + if (_Py_set_inheritable(fd, 0, NULL) < 0) { + close(fd); + return -1; + } +#endif + return fd; +} + diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index a6516dc..0a3cc59 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -315,7 +315,7 @@ calc_padding(Py_ssize_t nchars, Py_ssize_t width, Py_UCS4 align, /* Do the padding, and return a pointer to where the caller-supplied content goes. */ -static Py_ssize_t +static int fill_padding(_PyUnicodeWriter *writer, Py_ssize_t nchars, Py_UCS4 fill_char, Py_ssize_t n_lpadding, @@ -556,7 +556,7 @@ fill_number(_PyUnicodeWriter *writer, const NumberFieldWidths *spec, { /* Used to keep track of digits, decimal, and remainder. */ Py_ssize_t d_pos = d_start; - const enum PyUnicode_Kind kind = writer->kind; + const unsigned int kind = writer->kind; const void *data = writer->data; Py_ssize_t r; @@ -757,7 +757,8 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format, goto done; } - if (format->width == -1 && format->precision == -1) { + if ((format->width == -1 || format->width <= len) + && (format->precision == -1 || format->precision >= len)) { /* Fast path */ return _PyUnicodeWriter_WriteStr(writer, value); } @@ -770,9 +771,13 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format, calc_padding(len, format->width, format->align, &lpad, &rpad, &total); - maxchar = _PyUnicode_FindMaxChar(value, 0, len); + maxchar = writer->maxchar; if (lpad != 0 || rpad != 0) maxchar = Py_MAX(maxchar, format->fill_char); + if (PyUnicode_MAX_CHAR_VALUE(value) > maxchar) { + Py_UCS4 valmaxchar = _PyUnicode_FindMaxChar(value, 0, len); + maxchar = Py_MAX(maxchar, valmaxchar); + } /* allocate the resulting string */ if (_PyUnicodeWriter_Prepare(writer, total, maxchar) == -1) @@ -977,8 +982,7 @@ format_float_internal(PyObject *value, Py_ssize_t n_total; int has_decimal; double val; - Py_ssize_t precision; - Py_ssize_t default_precision = 6; + int precision, default_precision = 6; Py_UCS4 type = format->type; int add_pct = 0; Py_ssize_t index; @@ -1049,24 +1053,24 @@ format_float_internal(PyObject *value, n_digits += 1; } - /* Since there is no unicode version of PyOS_double_to_string, - just use the 8 bit version and then convert to unicode. */ - unicode_tmp = _PyUnicode_FromASCII(buf, n_digits); - PyMem_Free(buf); - if (unicode_tmp == NULL) - goto done; - if (format->sign != '+' && format->sign != ' ' && format->width == -1 && format->type != 'n' && !format->thousands_separators) { /* Fast path */ - result = _PyUnicodeWriter_WriteStr(writer, unicode_tmp); - Py_DECREF(unicode_tmp); + result = _PyUnicodeWriter_WriteASCIIString(writer, buf, n_digits); + PyMem_Free(buf); return result; } + /* Since there is no unicode version of PyOS_double_to_string, + just use the 8 bit version and then convert to unicode. */ + unicode_tmp = _PyUnicode_FromASCII(buf, n_digits); + PyMem_Free(buf); + if (unicode_tmp == NULL) + goto done; + /* Is a sign character present in the output? If so, remember it and skip it */ index = 0; @@ -1133,8 +1137,7 @@ format_complex_internal(PyObject *value, Py_ssize_t n_im_total; int re_has_decimal; int im_has_decimal; - int precision; - Py_ssize_t default_precision = 6; + int precision, default_precision = 6; Py_UCS4 type = format->type; Py_ssize_t i_re; Py_ssize_t i_im; diff --git a/Python/frozen.c b/Python/frozen.c index 25fdc17..9bc662b 100644 --- a/Python/frozen.c +++ b/Python/frozen.c @@ -28,7 +28,7 @@ static unsigned char M___hello__[] = { #define SIZE (int)sizeof(M___hello__) -static struct _frozen _PyImport_FrozenModules[] = { +static const struct _frozen _PyImport_FrozenModules[] = { /* importlib */ {"_frozen_importlib", _Py_M__importlib, (int)sizeof(_Py_M__importlib)}, /* Test module */ @@ -42,4 +42,4 @@ static struct _frozen _PyImport_FrozenModules[] = { /* Embedding apps may change this pointer to point to their favorite collection of frozen modules: */ -struct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules; +const struct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules; diff --git a/Python/frozenmain.c b/Python/frozenmain.c index 8b1f2d4..55d05fc 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -16,19 +16,19 @@ int Py_FrozenMain(int argc, char **argv) { char *p; - int i, n, sts; + int i, n, sts = 1; int inspect = 0; int unbuffered = 0; - char *oldloc; - wchar_t **argv_copy; + char *oldloc = NULL; + wchar_t **argv_copy = NULL; /* We need a second copies, as Python might modify the first one. */ - wchar_t **argv_copy2; + wchar_t **argv_copy2 = NULL; - argv_copy = PyMem_Malloc(sizeof(wchar_t*)*argc); - argv_copy2 = PyMem_Malloc(sizeof(wchar_t*)*argc); + argv_copy = PyMem_RawMalloc(sizeof(wchar_t*) * argc); + argv_copy2 = PyMem_RawMalloc(sizeof(wchar_t*) * argc); if (!argv_copy || !argv_copy2) { fprintf(stderr, "out of memory\n"); - return 1; + goto error; } Py_FrozenFlag = 1; /* Suppress errors from getpath.c */ @@ -44,32 +44,26 @@ Py_FrozenMain(int argc, char **argv) setbuf(stderr, (char *)NULL); } - oldloc = setlocale(LC_ALL, NULL); + oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL)); + if (!oldloc) { + fprintf(stderr, "out of memory\n"); + goto error; + } + setlocale(LC_ALL, ""); for (i = 0; i < argc; i++) { -#ifdef HAVE_BROKEN_MBSTOWCS - size_t argsize = strlen(argv[i]); -#else - size_t argsize = mbstowcs(NULL, argv[i], 0); -#endif - size_t count; - if (argsize == (size_t)-1) { - fprintf(stderr, "Could not convert argument %d to string\n", i); - return 1; - } - argv_copy[i] = PyMem_Malloc((argsize+1)*sizeof(wchar_t)); + argv_copy[i] = _Py_char2wchar(argv[i], NULL); argv_copy2[i] = argv_copy[i]; if (!argv_copy[i]) { - fprintf(stderr, "out of memory\n"); - return 1; - } - count = mbstowcs(argv_copy[i], argv[i], argsize+1); - if (count == (size_t)-1) { - fprintf(stderr, "Could not convert argument %d to string\n", i); - return 1; + fprintf(stderr, "Unable to decode the command line argument #%i\n", + i + 1); + argc = i; + goto error; } } setlocale(LC_ALL, oldloc); + PyMem_RawFree(oldloc); + oldloc = NULL; #ifdef MS_WINDOWS PyInitFrozenExtensions(); @@ -103,10 +97,14 @@ Py_FrozenMain(int argc, char **argv) PyWinFreeze_ExeTerm(); #endif Py_Finalize(); - for (i = 0; i < argc; i++) { - PyMem_Free(argv_copy2[i]); + +error: + PyMem_RawFree(argv_copy); + if (argv_copy2) { + for (i = 0; i < argc; i++) + PyMem_RawFree(argv_copy2[i]); + PyMem_RawFree(argv_copy2); } - PyMem_Free(argv_copy); - PyMem_Free(argv_copy2); + PyMem_RawFree(oldloc); return sts; } diff --git a/Python/future.c b/Python/future.c index d24ae41..81eab54 100644 --- a/Python/future.c +++ b/Python/future.c @@ -11,7 +11,7 @@ "from __future__ imports must occur at the beginning of the file" static int -future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) +future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) { int i; asdl_seq *names; @@ -43,12 +43,12 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); - PyErr_SyntaxLocationEx(filename, s->lineno, s->col_offset); + PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); return 0; } else { PyErr_Format(PyExc_SyntaxError, UNDEFINED_FUTURE_FEATURE, feature); - PyErr_SyntaxLocationEx(filename, s->lineno, s->col_offset); + PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); return 0; } } @@ -56,13 +56,17 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, const char *filename) } static int -future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) +future_parse(PyFutureFeatures *ff, mod_ty mod, PyObject *filename) { - int i, found_docstring = 0, done = 0, prev_line = 0; + int i, done = 0, prev_line = 0; + stmt_ty first; if (!(mod->kind == Module_kind || mod->kind == Interactive_kind)) return 1; + if (asdl_seq_LEN(mod->v.Module.body) == 0) + return 1; + /* A subsequent pass will detect future imports that don't appear at the beginning of the file. There's one case, however, that is easier to handle here: A series of imports @@ -71,8 +75,13 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) but is preceded by a regular import. */ + i = 0; + first = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); + if (first->kind == Expr_kind && first->v.Expr.value->kind == Str_kind) + i++; - for (i = 0; i < asdl_seq_LEN(mod->v.Module.body); i++) { + + for (; i < asdl_seq_LEN(mod->v.Module.body); i++) { stmt_ty s = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i); if (done && s->lineno > prev_line) @@ -92,32 +101,27 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, const char *filename) if (done) { PyErr_SetString(PyExc_SyntaxError, ERR_LATE_FUTURE); - PyErr_SyntaxLocationEx(filename, s->lineno, s->col_offset); + PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset); return 0; } if (!future_check_features(ff, s, filename)) return 0; ff->ff_lineno = s->lineno; } - else - done = 1; - } - else if (s->kind == Expr_kind && !found_docstring) { - expr_ty e = s->v.Expr.value; - if (e->kind != Str_kind) + else { done = 1; - else - found_docstring = 1; + } } - else + else { done = 1; + } } return 1; } PyFutureFeatures * -PyFuture_FromAST(mod_ty mod, const char *filename) +PyFuture_FromASTObject(mod_ty mod, PyObject *filename) { PyFutureFeatures *ff; @@ -135,3 +139,18 @@ PyFuture_FromAST(mod_ty mod, const char *filename) } return ff; } + + +PyFutureFeatures * +PyFuture_FromAST(mod_ty mod, const char *filename_str) +{ + PyFutureFeatures *ff; + PyObject *filename; + + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + ff = PyFuture_FromASTObject(mod, filename); + Py_DECREF(filename); + return ff; +} diff --git a/Python/getargs.c b/Python/getargs.c index ae931b9..bfea111 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -46,14 +46,16 @@ typedef struct { } freelistentry_t; typedef struct { - int first_available; freelistentry_t *entries; + int first_available; + int entries_malloced; } freelist_t; +#define STATIC_FREELIST_ENTRIES 8 /* Forward */ static int vgetargs1(PyObject *, const char *, va_list *, int); -static void seterror(int, const char *, int *, const char *, const char *); +static void seterror(Py_ssize_t, const char *, int *, const char *, const char *); static char *convertitem(PyObject *, const char **, va_list *, int, int *, char *, size_t, freelist_t *); static char *converttuple(PyObject *, const char **, va_list *, int, @@ -187,7 +189,8 @@ cleanreturn(int retval, freelist_t *freelist) freelist->entries[index].item); } } - PyMem_FREE(freelist->entries); + if (freelist->entries_malloced) + PyMem_FREE(freelist->entries); return retval; } @@ -197,6 +200,8 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) { char msgbuf[256]; int levels[32]; + freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; + freelist_t freelist = {static_entries, 0, 0}; const char *fname = NULL; const char *message = NULL; int min = -1; @@ -206,7 +211,6 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) const char *formatsave = format; Py_ssize_t i, len; char *msg; - freelist_t freelist = {0, NULL}; int compat = flags & FLAG_COMPAT; assert(compat || (args != (PyObject*)NULL)); @@ -240,15 +244,15 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) message = format; endfmt = 1; break; + case '|': + if (level == 0) + min = max; + break; default: if (level == 0) { - if (c == 'O') - max++; - else if (Py_ISALPHA(Py_CHARMASK(c))) { + if (Py_ISALPHA(Py_CHARMASK(c))) if (c != 'e') /* skip encoded */ max++; - } else if (c == '|') - min = max; } break; } @@ -262,10 +266,13 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) format = formatsave; - freelist.entries = PyMem_NEW(freelistentry_t, max); - if (freelist.entries == NULL) { - PyErr_NoMemory(); - return 0; + if (max > STATIC_FREELIST_ENTRIES) { + freelist.entries = PyMem_NEW(freelistentry_t, max); + if (freelist.entries == NULL) { + PyErr_NoMemory(); + return 0; + } + freelist.entries_malloced = 1; } if (compat) { @@ -350,7 +357,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) static void -seterror(int iarg, const char *msg, int *levels, const char *fname, +seterror(Py_ssize_t iarg, const char *msg, int *levels, const char *fname, const char *message) { char buf[512]; @@ -366,10 +373,10 @@ seterror(int iarg, const char *msg, int *levels, const char *fname, } if (iarg != 0) { PyOS_snprintf(p, sizeof(buf) - (p - buf), - "argument %d", iarg); + "argument %" PY_FORMAT_SIZE_T "d", iarg); i = 0; p += strlen(p); - while (levels[i] > 0 && i < 32 && (int)(p-buf) < 220) { + while (i < 32 && levels[i] > 0 && (int)(p-buf) < 220) { PyOS_snprintf(p, sizeof(buf) - (p - buf), ", item %d", levels[i]-1); p += strlen(p); @@ -414,6 +421,7 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, int n = 0; const char *format = *p_format; int i; + Py_ssize_t len; for (;;) { int c = *format++; @@ -443,12 +451,20 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, return msgbuf; } - if ((i = PySequence_Size(arg)) != n) { + len = PySequence_Size(arg); + if (len != n) { levels[0] = 0; - PyOS_snprintf(msgbuf, bufsize, - toplevel ? "expected %d arguments, not %d" : - "must be sequence of length %d, not %d", - n, i); + if (toplevel) { + PyOS_snprintf(msgbuf, bufsize, + "expected %d arguments, not %" PY_FORMAT_SIZE_T "d", + n, len); + } + else { + PyOS_snprintf(msgbuf, bufsize, + "must be sequence of length %d, " + "not %" PY_FORMAT_SIZE_T "d", + n, len); + } return msgbuf; } @@ -563,7 +579,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, "size does not fit in an int"); \ return converterr("", arg, msgbuf, bufsize); \ } \ - *q=s; \ + *q = (int)s; \ } #define BUFFER_LEN ((flags & FLAG_SIZE_T) ? *q2:*q) #define RETURN_ERR_OCCURRED return msgbuf @@ -1419,9 +1435,11 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, const char *fname, *msg, *custom_msg, *keyword; int min = INT_MAX; int max = INT_MAX; - int i, len, nargs, nkeywords; + int i, len; + Py_ssize_t nargs, nkeywords; PyObject *current_arg; - freelist_t freelist = {0, NULL}; + freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; + freelist_t freelist = {static_entries, 0, 0}; assert(args != NULL && PyTuple_Check(args)); assert(keywords == NULL || PyDict_Check(keywords)); @@ -1445,17 +1463,20 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, for (len=0; kwlist[len]; len++) continue; - freelist.entries = PyMem_NEW(freelistentry_t, len); - if (freelist.entries == NULL) { - PyErr_NoMemory(); - return 0; + if (len > STATIC_FREELIST_ENTRIES) { + freelist.entries = PyMem_NEW(freelistentry_t, len); + if (freelist.entries == NULL) { + PyErr_NoMemory(); + return 0; + } + freelist.entries_malloced = 1; } nargs = PyTuple_GET_SIZE(args); nkeywords = (keywords == NULL) ? 0 : PyDict_Size(keywords); if (nargs + nkeywords > len) { PyErr_Format(PyExc_TypeError, - "%s%s takes at most %d argument%s (%d given)", + "%s%s takes at most %d argument%s (%zd given)", (fname == NULL) ? "function" : fname, (fname == NULL) ? "" : "()", len, @@ -1574,20 +1595,15 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, Py_ssize_t pos = 0; while (PyDict_Next(keywords, &pos, &key, &value)) { int match = 0; - char *ks; if (!PyUnicode_Check(key)) { PyErr_SetString(PyExc_TypeError, "keywords must be strings"); return cleanreturn(0, &freelist); } - /* check that _PyUnicode_AsString() result is not NULL */ - ks = _PyUnicode_AsString(key); - if (ks != NULL) { - for (i = 0; i < len; i++) { - if (!strcmp(ks, kwlist[i])) { - match = 1; - break; - } + for (i = 0; i < len; i++) { + if (!PyUnicode_CompareWithASCIIString(key, kwlist[i])) { + match = 1; + break; } } if (!match) { @@ -1789,7 +1805,7 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m /* For type constructors that don't take keyword args * - * Sets a TypeError and returns 0 if the kwds dict is + * Sets a TypeError and returns 0 if the args/kwargs is * not empty, returns 1 otherwise */ int @@ -1808,6 +1824,25 @@ _PyArg_NoKeywords(const char *funcname, PyObject *kw) funcname); return 0; } + + +int +_PyArg_NoPositional(const char *funcname, PyObject *args) +{ + if (args == NULL) + return 1; + if (!PyTuple_CheckExact(args)) { + PyErr_BadInternalCall(); + return 0; + } + if (PyTuple_GET_SIZE(args) == 0) + return 1; + + PyErr_Format(PyExc_TypeError, "%s does not take positional arguments", + funcname); + return 0; +} + #ifdef __cplusplus }; #endif diff --git a/Python/getcwd.c b/Python/getcwd.c deleted file mode 100644 index 4bedbd1..0000000 --- a/Python/getcwd.c +++ /dev/null @@ -1,83 +0,0 @@ - -/* Two PD getcwd() implementations. - Author: Guido van Rossum, CWI Amsterdam, Jan 1991, <guido@cwi.nl>. */ - -#include <stdio.h> -#include <errno.h> - -#ifdef HAVE_GETWD - -/* Version for BSD systems -- use getwd() */ - -#ifdef HAVE_SYS_PARAM_H -#include <sys/param.h> -#endif - -#ifndef MAXPATHLEN -#if defined(PATH_MAX) && PATH_MAX > 1024 -#define MAXPATHLEN PATH_MAX -#else -#define MAXPATHLEN 1024 -#endif -#endif - -extern char *getwd(char *); - -char * -getcwd(char *buf, int size) -{ - char localbuf[MAXPATHLEN+1]; - char *ret; - - if (size <= 0) { - errno = EINVAL; - return NULL; - } - ret = getwd(localbuf); - if (ret != NULL && strlen(localbuf) >= (size_t)size) { - errno = ERANGE; - return NULL; - } - if (ret == NULL) { - errno = EACCES; /* Most likely error */ - return NULL; - } - strncpy(buf, localbuf, size); - return buf; -} - -#else /* !HAVE_GETWD */ - -/* Version for really old UNIX systems -- use pipe from pwd */ - -#ifndef PWD_CMD -#define PWD_CMD "/bin/pwd" -#endif - -char * -getcwd(char *buf, int size) -{ - FILE *fp; - char *p; - int sts; - if (size <= 0) { - errno = EINVAL; - return NULL; - } - if ((fp = popen(PWD_CMD, "r")) == NULL) - return NULL; - if (fgets(buf, size, fp) == NULL || (sts = pclose(fp)) != 0) { - errno = EACCES; /* Most likely error */ - return NULL; - } - for (p = buf; *p != '\n'; p++) { - if (*p == '\0') { - errno = ERANGE; - return NULL; - } - } - *p = '\0'; - return buf; -} - -#endif /* !HAVE_GETWD */ diff --git a/Python/import.c b/Python/import.c index e91cef8..fb7d88c 100644 --- a/Python/import.c +++ b/Python/import.c @@ -19,22 +19,11 @@ extern "C" { #endif -#ifdef MS_WINDOWS -/* for stat.st_mode */ -typedef unsigned short mode_t; -/* for _mkdir */ -#include <direct.h> -#endif - - #define CACHEDIR "__pycache__" /* See _PyImport_FixupExtensionObject() below */ static PyObject *extensions = NULL; -/* Function from Parser/tokenizer.c */ -extern char * PyTokenizer_FindEncodingFilename(int, PyObject *); - /* This table is defined in config.c: */ extern struct _inittab _PyImport_Inittab[]; @@ -42,6 +31,19 @@ struct _inittab *PyImport_Inittab = _PyImport_Inittab; static PyObject *initstr = NULL; +/*[clinic input] +module _imp +[clinic start generated code]*/ +/*[clinic end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/ + +/*[python input] +class fs_unicode_converter(CConverter): + type = 'PyObject *' + converter = 'PyUnicode_FSDecoder' + +[python start generated code]*/ +/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/ + /* Initialize things */ void @@ -93,8 +95,10 @@ _PyImportZip_Init(void) int err = 0; path_hooks = PySys_GetObject("path_hooks"); - if (path_hooks == NULL) + if (path_hooks == NULL) { + PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks"); goto error; + } if (Py_VerboseFlag) PySys_WriteStderr("# installing zipimport hook\n"); @@ -204,8 +208,11 @@ _PyImport_ReInitLock(void) if (import_lock_level > 1) { /* Forked as a side effect of import */ long me = PyThread_get_thread_ident(); - PyThread_acquire_lock(import_lock, 0); - /* XXX: can the previous line fail? */ + /* The following could fail if the lock is already held, but forking as + a side-effect of an import is a) rare, b) nuts, and c) difficult to + do thanks to the lock only being held when doing individual module + locks per import. */ + PyThread_acquire_lock(import_lock, NOWAIT_LOCK); import_lock_thread = me; import_lock_level--; } else { @@ -216,8 +223,35 @@ _PyImport_ReInitLock(void) #endif +/*[clinic input] +_imp.lock_held + +Return True if the import lock is currently held, else False. + +On platforms without threads, return False. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_lock_held__doc__, +"lock_held()\n" +"Return True if the import lock is currently held, else False.\n" +"\n" +"On platforms without threads, return False."); + +#define _IMP_LOCK_HELD_METHODDEF \ + {"lock_held", (PyCFunction)_imp_lock_held, METH_NOARGS, _imp_lock_held__doc__}, + static PyObject * -imp_lock_held(PyObject *self, PyObject *noargs) +_imp_lock_held_impl(PyModuleDef *module); + +static PyObject * +_imp_lock_held(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_lock_held_impl(module); +} + +static PyObject * +_imp_lock_held_impl(PyModuleDef *module) +/*[clinic end generated code: checksum=ede1cafb78eb22e3009602f684c8b780e2b82d62]*/ { #ifdef WITH_THREAD return PyBool_FromLong(import_lock_thread != -1); @@ -226,8 +260,37 @@ imp_lock_held(PyObject *self, PyObject *noargs) #endif } +/*[clinic input] +_imp.acquire_lock + +Acquires the interpreter's import lock for the current thread. + +This lock should be used by import hooks to ensure thread-safety when importing +modules. On platforms without threads, this function does nothing. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_acquire_lock__doc__, +"acquire_lock()\n" +"Acquires the interpreter\'s import lock for the current thread.\n" +"\n" +"This lock should be used by import hooks to ensure thread-safety when importing\n" +"modules. On platforms without threads, this function does nothing."); + +#define _IMP_ACQUIRE_LOCK_METHODDEF \ + {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__}, + +static PyObject * +_imp_acquire_lock_impl(PyModuleDef *module); + +static PyObject * +_imp_acquire_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_acquire_lock_impl(module); +} + static PyObject * -imp_acquire_lock(PyObject *self, PyObject *noargs) +_imp_acquire_lock_impl(PyModuleDef *module) +/*[clinic end generated code: checksum=5b520b2416c5954a7cf0ed30955d68abe20b5868]*/ { #ifdef WITH_THREAD _PyImport_AcquireLock(); @@ -236,8 +299,35 @@ imp_acquire_lock(PyObject *self, PyObject *noargs) return Py_None; } +/*[clinic input] +_imp.release_lock + +Release the interpreter's import lock. + +On platforms without threads, this function does nothing. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_release_lock__doc__, +"release_lock()\n" +"Release the interpreter\'s import lock.\n" +"\n" +"On platforms without threads, this function does nothing."); + +#define _IMP_RELEASE_LOCK_METHODDEF \ + {"release_lock", (PyCFunction)_imp_release_lock, METH_NOARGS, _imp_release_lock__doc__}, + +static PyObject * +_imp_release_lock_impl(PyModuleDef *module); + static PyObject * -imp_release_lock(PyObject *self, PyObject *noargs) +_imp_release_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_release_lock_impl(module); +} + +static PyObject * +_imp_release_lock_impl(PyModuleDef *module) +/*[clinic end generated code: checksum=efcd9d2923294c04371596e7f6d66a706d43fcac]*/ { #ifdef WITH_THREAD if (_PyImport_ReleaseLock() < 0) { @@ -280,6 +370,7 @@ static char* sys_deletes[] = { "path", "argv", "ps1", "ps2", "last_type", "last_value", "last_traceback", "path_hooks", "path_importer_cache", "meta_path", + "__interactivehook__", /* misc stuff */ "flags", "float_info", NULL @@ -292,16 +383,17 @@ static char* sys_files[] = { NULL }; - /* Un-initialize things, as good as we can */ void PyImport_Cleanup(void) { - Py_ssize_t pos, ndone; + Py_ssize_t pos; PyObject *key, *value, *dict; PyInterpreterState *interp = PyThreadState_GET()->interp; PyObject *modules = interp->modules; + PyObject *builtins = interp->builtins; + PyObject *weaklist = NULL; if (modules == NULL) return; /* Already done */ @@ -312,6 +404,8 @@ PyImport_Cleanup(void) deleted *last* of all, they would come too late in the normal destruction order. Sigh. */ + /* XXX Perhaps these precautions are obsolete. Who knows? */ + value = PyDict_GetItemString(modules, "builtins"); if (value != NULL && PyModule_Check(value)) { dict = PyModule_GetDict(value); @@ -339,87 +433,87 @@ PyImport_Cleanup(void) } } - /* First, delete __main__ */ - value = PyDict_GetItemString(modules, "__main__"); - if (value != NULL && PyModule_Check(value)) { - if (Py_VerboseFlag) - PySys_WriteStderr("# cleanup __main__\n"); - _PyModule_Clear(value); - PyDict_SetItemString(modules, "__main__", Py_None); - } - - /* The special treatment of "builtins" here is because even - when it's not referenced as a module, its dictionary is - referenced by almost every module's __builtins__. Since - deleting a module clears its dictionary (even if there are - references left to it), we need to delete the "builtins" - module last. Likewise, we don't delete sys until the very - end because it is implicitly referenced (e.g. by print). - - Also note that we 'delete' modules by replacing their entry - in the modules dict with None, rather than really deleting - them; this avoids a rehash of the modules dictionary and - also marks them as "non existent" so they won't be - re-imported. */ - - /* Next, repeatedly delete modules with a reference count of - one (skipping builtins and sys) and delete them */ - do { - ndone = 0; - pos = 0; - while (PyDict_Next(modules, &pos, &key, &value)) { - if (value->ob_refcnt != 1) - continue; - if (PyUnicode_Check(key) && PyModule_Check(value)) { - if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0) - continue; - if (PyUnicode_CompareWithASCIIString(key, "sys") == 0) - continue; - if (Py_VerboseFlag) - PySys_FormatStderr( - "# cleanup[1] %U\n", key); - _PyModule_Clear(value); - PyDict_SetItem(modules, key, Py_None); - ndone++; - } - } - } while (ndone > 0); + /* We prepare a list which will receive (name, weakref) tuples of + modules when they are removed from sys.modules. The name is used + for diagnosis messages (in verbose mode), while the weakref helps + detect those modules which have been held alive. */ + weaklist = PyList_New(0); + if (weaklist == NULL) + PyErr_Clear(); - /* Next, delete all modules (still skipping builtins and sys) */ +#define STORE_MODULE_WEAKREF(name, mod) \ + if (weaklist != NULL) { \ + PyObject *wr = PyWeakref_NewRef(mod, NULL); \ + if (name && wr) { \ + PyObject *tup = PyTuple_Pack(2, name, wr); \ + PyList_Append(weaklist, tup); \ + Py_XDECREF(tup); \ + } \ + Py_XDECREF(wr); \ + if (PyErr_Occurred()) \ + PyErr_Clear(); \ + } + + /* Remove all modules from sys.modules, hoping that garbage collection + can reclaim most of them. */ pos = 0; while (PyDict_Next(modules, &pos, &key, &value)) { - if (PyUnicode_Check(key) && PyModule_Check(value)) { - if (PyUnicode_CompareWithASCIIString(key, "builtins") == 0) - continue; - if (PyUnicode_CompareWithASCIIString(key, "sys") == 0) - continue; - if (Py_VerboseFlag) - PySys_FormatStderr("# cleanup[2] %U\n", key); - _PyModule_Clear(value); + if (PyModule_Check(value)) { + if (Py_VerboseFlag && PyUnicode_Check(key)) + PySys_FormatStderr("# cleanup[2] removing %U\n", key, value); + STORE_MODULE_WEAKREF(key, value); PyDict_SetItem(modules, key, Py_None); } } - /* Next, delete sys and builtins (in that order) */ - value = PyDict_GetItemString(modules, "sys"); - if (value != NULL && PyModule_Check(value)) { - if (Py_VerboseFlag) - PySys_WriteStderr("# cleanup sys\n"); - _PyModule_Clear(value); - PyDict_SetItemString(modules, "sys", Py_None); - } - value = PyDict_GetItemString(modules, "builtins"); - if (value != NULL && PyModule_Check(value)) { - if (Py_VerboseFlag) - PySys_WriteStderr("# cleanup builtins\n"); - _PyModule_Clear(value); - PyDict_SetItemString(modules, "builtins", Py_None); + /* Clear the modules dict. */ + PyDict_Clear(modules); + /* Replace the interpreter's reference to builtins with an empty dict + (module globals still have a reference to the original builtins). */ + builtins = interp->builtins; + interp->builtins = PyDict_New(); + Py_DECREF(builtins); + /* Clear module dict copies stored in the interpreter state */ + _PyState_ClearModules(); + /* Collect references */ + _PyGC_CollectNoFail(); + /* Dump GC stats before it's too late, since it uses the warnings + machinery. */ + _PyGC_DumpShutdownStats(); + + /* Now, if there are any modules left alive, clear their globals to + minimize potential leaks. All C extension modules actually end + up here, since they are kept alive in the interpreter state. */ + if (weaklist != NULL) { + Py_ssize_t i, n; + n = PyList_GET_SIZE(weaklist); + for (i = 0; i < n; i++) { + PyObject *tup = PyList_GET_ITEM(weaklist, i); + PyObject *name = PyTuple_GET_ITEM(tup, 0); + PyObject *mod = PyWeakref_GET_OBJECT(PyTuple_GET_ITEM(tup, 1)); + if (mod == Py_None) + continue; + Py_INCREF(mod); + assert(PyModule_Check(mod)); + if (Py_VerboseFlag && PyUnicode_Check(name)) + PySys_FormatStderr("# cleanup[3] wiping %U\n", + name, mod); + _PyModule_Clear(mod); + Py_DECREF(mod); + } + Py_DECREF(weaklist); } - /* Finally, clear and delete the modules directory */ - PyDict_Clear(modules); + /* Clear and delete the modules directory. Actual modules will + still be there only if imported during the execution of some + destructor. */ interp->modules = NULL; Py_DECREF(modules); + + /* Once more */ + _PyGC_CollectNoFail(); + +#undef STORE_MODULE_WEAKREF } @@ -451,12 +545,12 @@ PyImport_GetMagicTag(void) /* 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 - (for built-in modules) or by filename (for dynamically loaded - modules), containing these modules. A copy of the module's - dictionary is stored by calling _PyImport_FixupExtensionObject() - immediately after the module initialization function succeeds. A - copy can be retrieved from there by calling + once, we keep a static dictionary 'extensions' keyed by the tuple + (module name, module name) (for built-in modules) or by + (filename, module name) (for dynamically loaded modules), containing these + modules. A copy of the module's dictionary is stored by calling + _PyImport_FixupExtensionObject() immediately after the module initialization + function succeeds. A copy can be retrieved from there by calling _PyImport_FindExtensionObject(). Modules which do support multiple initialization set their m_size @@ -469,8 +563,9 @@ int _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name, PyObject *filename) { - PyObject *modules, *dict; + PyObject *modules, *dict, *key; struct PyModuleDef *def; + int res; if (extensions == NULL) { extensions = PyDict_New(); if (extensions == NULL) @@ -507,12 +602,18 @@ _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name, if (def->m_base.m_copy == NULL) return -1; } - PyDict_SetItem(extensions, filename, (PyObject*)def); + key = PyTuple_Pack(2, filename, name); + if (key == NULL) + return -1; + res = PyDict_SetItem(extensions, key, (PyObject *)def); + Py_DECREF(key); + if (res < 0) + return -1; return 0; } int -_PyImport_FixupBuiltin(PyObject *mod, char *name) +_PyImport_FixupBuiltin(PyObject *mod, const char *name) { int res; PyObject *nameobj; @@ -527,11 +628,15 @@ _PyImport_FixupBuiltin(PyObject *mod, char *name) PyObject * _PyImport_FindExtensionObject(PyObject *name, PyObject *filename) { - PyObject *mod, *mdict; + PyObject *mod, *mdict, *key; PyModuleDef* def; if (extensions == NULL) return NULL; - def = (PyModuleDef*)PyDict_GetItem(extensions, filename); + key = PyTuple_Pack(2, filename, name); + if (key == NULL) + return NULL; + def = (PyModuleDef *)PyDict_GetItem(extensions, key); + Py_DECREF(key); if (def == NULL) return NULL; if (def->m_size == -1) { @@ -647,22 +752,23 @@ remove_module(PyObject *name) * interface. The other two exist primarily for backward compatibility. */ PyObject * -PyImport_ExecCodeModule(char *name, PyObject *co) +PyImport_ExecCodeModule(const char *name, PyObject *co) { return PyImport_ExecCodeModuleWithPathnames( name, co, (char *)NULL, (char *)NULL); } PyObject * -PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname) +PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname) { return PyImport_ExecCodeModuleWithPathnames( name, co, pathname, (char *)NULL); } PyObject * -PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname, - char *cpathname) +PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, + const char *pathname, + const char *cpathname) { PyObject *m = NULL; PyObject *nameobj, *pathobj = NULL, *cpathobj = NULL; @@ -693,7 +799,7 @@ PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname, "no interpreter!"); } - pathobj = _PyObject_CallMethodObjIdArgs(interp->importlib, + pathobj = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__get_sourcefile, cpathobj, NULL); if (pathobj == NULL) @@ -807,35 +913,64 @@ update_compiled_module(PyCodeObject *co, PyObject *newname) Py_DECREF(oldname); } -static PyObject * -imp_fix_co_filename(PyObject *self, PyObject *args) -{ - PyObject *co; - PyObject *file_path; +/*[clinic input] +_imp._fix_co_filename - if (!PyArg_ParseTuple(args, "OO:_fix_co_filename", &co, &file_path)) - return NULL; + code: object(type="PyCodeObject *", subclass_of="&PyCode_Type") + Code object to change. - if (!PyCode_Check(co)) { - PyErr_SetString(PyExc_TypeError, - "first argument must be a code object"); - return NULL; - } + path: unicode + File path to use. + / - if (!PyUnicode_Check(file_path)) { - PyErr_SetString(PyExc_TypeError, - "second argument must be a string"); - return NULL; - } +Changes code.co_filename to specify the passed-in file path. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp__fix_co_filename__doc__, +"_fix_co_filename(code, path)\n" +"Changes code.co_filename to specify the passed-in file path.\n" +"\n" +" code\n" +" Code object to change.\n" +" path\n" +" File path to use."); - update_compiled_module((PyCodeObject*)co, file_path); +#define _IMP__FIX_CO_FILENAME_METHODDEF \ + {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_VARARGS, _imp__fix_co_filename__doc__}, + +static PyObject * +_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, PyObject *path); + +static PyObject * +_imp__fix_co_filename(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyCodeObject *code; + PyObject *path; + + if (!PyArg_ParseTuple(args, + "O!U:_fix_co_filename", + &PyCode_Type, &code, &path)) + goto exit; + return_value = _imp__fix_co_filename_impl(module, code, path); + +exit: + return return_value; +} + +static PyObject * +_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, PyObject *path) +/*[clinic end generated code: checksum=4f55bad308072b30ad1921068fc4ce85bd2b39bf]*/ + +{ + update_compiled_module(code, path); Py_RETURN_NONE; } /* Forward */ -static struct _frozen * find_frozen(PyObject *); +static const struct _frozen * find_frozen(PyObject *); /* Helper to test for built-in module */ @@ -917,11 +1052,11 @@ PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path) { PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL; - if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) { - if ((path_hooks = PySys_GetObject("path_hooks"))) { - importer = get_path_importer(path_importer_cache, - path_hooks, path); - } + path_importer_cache = PySys_GetObject("path_importer_cache"); + path_hooks = PySys_GetObject("path_hooks"); + if (path_importer_cache != NULL && path_hooks != NULL) { + importer = get_path_importer(path_importer_cache, + path_hooks, path); } Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */ return importer; @@ -938,8 +1073,12 @@ static int init_builtin(PyObject *name) { struct _inittab *p; + PyObject *mod; - if (_PyImport_FindExtensionObject(name, name) != NULL) + mod = _PyImport_FindExtensionObject(name, name); + if (PyErr_Occurred()) + return -1; + if (mod != NULL) return 1; for (p = PyImport_Inittab; p->name != NULL; p++) { @@ -972,10 +1111,10 @@ init_builtin(PyObject *name) /* Frozen modules */ -static struct _frozen * +static const struct _frozen * find_frozen(PyObject *name) { - struct _frozen *p; + const struct _frozen *p; if (name == NULL) return NULL; @@ -992,7 +1131,7 @@ find_frozen(PyObject *name) static PyObject * get_frozen_object(PyObject *name) { - struct _frozen *p = find_frozen(name); + const struct _frozen *p = find_frozen(name); int size; if (p == NULL) { @@ -1010,13 +1149,13 @@ get_frozen_object(PyObject *name) size = p->size; if (size < 0) size = -size; - return PyMarshal_ReadObjectFromString((char *)p->code, size); + return PyMarshal_ReadObjectFromString((const char *)p->code, size); } static PyObject * is_frozen_package(PyObject *name) { - struct _frozen *p = find_frozen(name); + const struct _frozen *p = find_frozen(name); int size; if (p == NULL) { @@ -1043,7 +1182,7 @@ is_frozen_package(PyObject *name) int PyImport_ImportFrozenModuleObject(PyObject *name) { - struct _frozen *p; + const struct _frozen *p; PyObject *co, *m, *path; int ispackage; int size; @@ -1062,7 +1201,7 @@ PyImport_ImportFrozenModuleObject(PyObject *name) ispackage = (size < 0); if (ispackage) size = -size; - co = PyMarshal_ReadObjectFromString((char *)p->code, size); + co = PyMarshal_ReadObjectFromString((const char *)p->code, size); if (co == NULL) return -1; if (!PyCode_Check(co)) { @@ -1072,19 +1211,17 @@ PyImport_ImportFrozenModuleObject(PyObject *name) goto err_return; } if (ispackage) { - /* Set __path__ to the package name */ + /* Set __path__ to the empty list */ PyObject *d, *l; int err; m = PyImport_AddModuleObject(name); if (m == NULL) goto err_return; d = PyModule_GetDict(m); - l = PyList_New(1); + l = PyList_New(0); if (l == NULL) { goto err_return; } - Py_INCREF(name); - PyList_SET_ITEM(l, 0, name); err = PyDict_SetItemString(d, "__path__", l); Py_DECREF(l); if (err != 0) @@ -1106,7 +1243,7 @@ err_return: } int -PyImport_ImportFrozenModule(char *name) +PyImport_ImportFrozenModule(const char *name) { PyObject *nameobj; int ret; @@ -1220,7 +1357,8 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, int level) { _Py_IDENTIFIER(__import__); - _Py_IDENTIFIER(__initializing__); + _Py_IDENTIFIER(__spec__); + _Py_IDENTIFIER(_initializing); _Py_IDENTIFIER(__package__); _Py_IDENTIFIER(__path__); _Py_IDENTIFIER(__name__); @@ -1356,7 +1494,11 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, goto error; } } + base = PyUnicode_Substring(package, 0, last_dot); + if (base == NULL) + goto error; + if (PyUnicode_GET_LENGTH(name) > 0) { PyObject *borrowed_dot, *seq = NULL; @@ -1410,16 +1552,21 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, goto error_with_unlock; } else if (mod != NULL) { - PyObject *value; + PyObject *value = NULL; + PyObject *spec; int initializing = 0; Py_INCREF(mod); /* Optimization: only call _bootstrap._lock_unlock_module() if - __initializing__ is true. - NOTE: because of this, __initializing__ must be set *before* + __spec__._initializing is true. + NOTE: because of this, initializing must be set *before* stuffing the new module in sys.modules. */ - value = _PyObject_GetAttrId(mod, &PyId___initializing__); + spec = _PyObject_GetAttrId(mod, &PyId___spec__); + if (spec != NULL) { + value = _PyObject_GetAttrId(spec, &PyId__initializing); + Py_DECREF(spec); + } if (value == NULL) PyErr_Clear(); else { @@ -1430,7 +1577,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } if (initializing > 0) { /* _bootstrap._lock_unlock_module() releases the import lock */ - value = _PyObject_CallMethodObjIdArgs(interp->importlib, + value = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__lock_unlock_module, abs_name, NULL); if (value == NULL) @@ -1448,7 +1595,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } else { /* _bootstrap._find_and_load() releases the import lock */ - mod = _PyObject_CallMethodObjIdArgs(interp->importlib, + mod = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__find_and_load, abs_name, builtins_import, NULL); if (mod == NULL) { @@ -1517,7 +1664,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } } else { - final_mod = _PyObject_CallMethodObjIdArgs(interp->importlib, + final_mod = _PyObject_CallMethodIdObjArgs(interp->importlib, &PyId__handle_fromlist, mod, fromlist, builtins_import, NULL); @@ -1669,8 +1816,31 @@ PyImport_Import(PyObject *module_name) return r; } +/*[clinic input] +_imp.extension_suffixes + +Returns the list of file suffixes used to identify extension modules. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_extension_suffixes__doc__, +"extension_suffixes()\n" +"Returns the list of file suffixes used to identify extension modules."); + +#define _IMP_EXTENSION_SUFFIXES_METHODDEF \ + {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__}, + +static PyObject * +_imp_extension_suffixes_impl(PyModuleDef *module); + +static PyObject * +_imp_extension_suffixes(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +{ + return _imp_extension_suffixes_impl(module); +} + static PyObject * -imp_extension_suffixes(PyObject *self, PyObject *noargs) +_imp_extension_suffixes_impl(PyModuleDef *module) +/*[clinic end generated code: checksum=82fb35d8429a429a4dc80c84b45b1aad73ff1de7]*/ { PyObject *list; const char *suffix; @@ -1698,14 +1868,48 @@ imp_extension_suffixes(PyObject *self, PyObject *noargs) return list; } +/*[clinic input] +_imp.init_builtin + + name: unicode + / + +Initializes a built-in module. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_init_builtin__doc__, +"init_builtin(name)\n" +"Initializes a built-in module."); + +#define _IMP_INIT_BUILTIN_METHODDEF \ + {"init_builtin", (PyCFunction)_imp_init_builtin, METH_VARARGS, _imp_init_builtin__doc__}, + +static PyObject * +_imp_init_builtin_impl(PyModuleDef *module, PyObject *name); + static PyObject * -imp_init_builtin(PyObject *self, PyObject *args) +_imp_init_builtin(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; PyObject *name; + + if (!PyArg_ParseTuple(args, + "U:init_builtin", + &name)) + goto exit; + return_value = _imp_init_builtin_impl(module, name); + +exit: + return return_value; +} + +static PyObject * +_imp_init_builtin_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: checksum=59239206e5b2fb59358066e72fd0e72e55a7baf5]*/ +{ int ret; PyObject *m; - if (!PyArg_ParseTuple(args, "U:init_builtin", &name)) - return NULL; + ret = init_builtin(name); if (ret < 0) return NULL; @@ -1718,14 +1922,48 @@ imp_init_builtin(PyObject *self, PyObject *args) return m; } +/*[clinic input] +_imp.init_frozen + + name: unicode + / + +Initializes a frozen module. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_init_frozen__doc__, +"init_frozen(name)\n" +"Initializes a frozen module."); + +#define _IMP_INIT_FROZEN_METHODDEF \ + {"init_frozen", (PyCFunction)_imp_init_frozen, METH_VARARGS, _imp_init_frozen__doc__}, + static PyObject * -imp_init_frozen(PyObject *self, PyObject *args) +_imp_init_frozen_impl(PyModuleDef *module, PyObject *name); + +static PyObject * +_imp_init_frozen(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; PyObject *name; + + if (!PyArg_ParseTuple(args, + "U:init_frozen", + &name)) + goto exit; + return_value = _imp_init_frozen_impl(module, name); + +exit: + return return_value; +} + +static PyObject * +_imp_init_frozen_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: checksum=503fcc3de9961263e4d9484259af357a7d287a0b]*/ +{ int ret; PyObject *m; - if (!PyArg_ParseTuple(args, "U:init_frozen", &name)) - return NULL; + ret = PyImport_ImportFrozenModuleObject(name); if (ret < 0) return NULL; @@ -1738,61 +1976,229 @@ imp_init_frozen(PyObject *self, PyObject *args) return m; } +/*[clinic input] +_imp.get_frozen_object + + name: unicode + / + +Create a code object for a frozen module. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_get_frozen_object__doc__, +"get_frozen_object(name)\n" +"Create a code object for a frozen module."); + +#define _IMP_GET_FROZEN_OBJECT_METHODDEF \ + {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_VARARGS, _imp_get_frozen_object__doc__}, + +static PyObject * +_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name); + static PyObject * -imp_get_frozen_object(PyObject *self, PyObject *args) +_imp_get_frozen_object(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; PyObject *name; - if (!PyArg_ParseTuple(args, "U:get_frozen_object", &name)) - return NULL; + if (!PyArg_ParseTuple(args, + "U:get_frozen_object", + &name)) + goto exit; + return_value = _imp_get_frozen_object_impl(module, name); + +exit: + return return_value; +} + +static PyObject * +_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: checksum=7a6423a4daf139496b9a394ff3ac6130089d1cba]*/ +{ return get_frozen_object(name); } +/*[clinic input] +_imp.is_frozen_package + + name: unicode + / + +Returns True if the module name is of a frozen package. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_is_frozen_package__doc__, +"is_frozen_package(name)\n" +"Returns True if the module name is of a frozen package."); + +#define _IMP_IS_FROZEN_PACKAGE_METHODDEF \ + {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_VARARGS, _imp_is_frozen_package__doc__}, + +static PyObject * +_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name); + static PyObject * -imp_is_frozen_package(PyObject *self, PyObject *args) +_imp_is_frozen_package(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; PyObject *name; - if (!PyArg_ParseTuple(args, "U:is_frozen_package", &name)) - return NULL; + if (!PyArg_ParseTuple(args, + "U:is_frozen_package", + &name)) + goto exit; + return_value = _imp_is_frozen_package_impl(module, name); + +exit: + return return_value; +} + +static PyObject * +_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: checksum=dc7e361ea30b6945b8bbe7266d7b9a5ea433b510]*/ +{ return is_frozen_package(name); } +/*[clinic input] +_imp.is_builtin + + name: unicode + / + +Returns True if the module name corresponds to a built-in module. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_is_builtin__doc__, +"is_builtin(name)\n" +"Returns True if the module name corresponds to a built-in module."); + +#define _IMP_IS_BUILTIN_METHODDEF \ + {"is_builtin", (PyCFunction)_imp_is_builtin, METH_VARARGS, _imp_is_builtin__doc__}, + +static PyObject * +_imp_is_builtin_impl(PyModuleDef *module, PyObject *name); + static PyObject * -imp_is_builtin(PyObject *self, PyObject *args) +_imp_is_builtin(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; PyObject *name; - if (!PyArg_ParseTuple(args, "U:is_builtin", &name)) - return NULL; + + if (!PyArg_ParseTuple(args, + "U:is_builtin", + &name)) + goto exit; + return_value = _imp_is_builtin_impl(module, name); + +exit: + return return_value; +} + +static PyObject * +_imp_is_builtin_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: checksum=353938c1d55210a1e3850d3ccba7539d02165cac]*/ +{ return PyLong_FromLong(is_builtin(name)); } +/*[clinic input] +_imp.is_frozen + + name: unicode + / + +Returns True if the module name corresponds to a frozen module. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_is_frozen__doc__, +"is_frozen(name)\n" +"Returns True if the module name corresponds to a frozen module."); + +#define _IMP_IS_FROZEN_METHODDEF \ + {"is_frozen", (PyCFunction)_imp_is_frozen, METH_VARARGS, _imp_is_frozen__doc__}, + +static PyObject * +_imp_is_frozen_impl(PyModuleDef *module, PyObject *name); + static PyObject * -imp_is_frozen(PyObject *self, PyObject *args) +_imp_is_frozen(PyModuleDef *module, PyObject *args) { + PyObject *return_value = NULL; PyObject *name; - struct _frozen *p; - if (!PyArg_ParseTuple(args, "U:is_frozen", &name)) - return NULL; + + if (!PyArg_ParseTuple(args, + "U:is_frozen", + &name)) + goto exit; + return_value = _imp_is_frozen_impl(module, name); + +exit: + return return_value; +} + +static PyObject * +_imp_is_frozen_impl(PyModuleDef *module, PyObject *name) +/*[clinic end generated code: checksum=978b547ddcb76fa6c4a181ad53569c9acf382c7b]*/ +{ + const struct _frozen *p; + p = find_frozen(name); return PyBool_FromLong((long) (p == NULL ? 0 : p->size)); } #ifdef HAVE_DYNAMIC_LOADING +/*[clinic input] +_imp.load_dynamic + + name: unicode + path: fs_unicode + file: object = NULL + / + +Loads an extension module. +[clinic start generated code]*/ + +PyDoc_STRVAR(_imp_load_dynamic__doc__, +"load_dynamic(name, path, file=None)\n" +"Loads an extension module."); + +#define _IMP_LOAD_DYNAMIC_METHODDEF \ + {"load_dynamic", (PyCFunction)_imp_load_dynamic, METH_VARARGS, _imp_load_dynamic__doc__}, + +static PyObject * +_imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, PyObject *file); + +static PyObject * +_imp_load_dynamic(PyModuleDef *module, PyObject *args) +{ + PyObject *return_value = NULL; + PyObject *name; + PyObject *path; + PyObject *file = NULL; + + if (!PyArg_ParseTuple(args, + "UO&|O:load_dynamic", + &name, PyUnicode_FSDecoder, &path, &file)) + goto exit; + return_value = _imp_load_dynamic_impl(module, name, path, file); + +exit: + return return_value; +} + static PyObject * -imp_load_dynamic(PyObject *self, PyObject *args) +_imp_load_dynamic_impl(PyModuleDef *module, PyObject *name, PyObject *path, PyObject *file) +/*[clinic end generated code: checksum=6795f65d9ce003ccaf08e4e8eef484dc52e262d0]*/ { - PyObject *name, *pathname, *fob = NULL, *mod; + PyObject *mod; FILE *fp; - if (!PyArg_ParseTuple(args, "UO&|O:load_dynamic", - &name, PyUnicode_FSDecoder, &pathname, &fob)) - return NULL; - if (fob != NULL) { - fp = _Py_fopen(pathname, "r"); + if (file != NULL) { + fp = _Py_fopen_obj(path, "r"); if (fp == NULL) { - Py_DECREF(pathname); + Py_DECREF(path); if (!PyErr_Occurred()) PyErr_SetFromErrno(PyExc_IOError); return NULL; @@ -1800,8 +2206,8 @@ imp_load_dynamic(PyObject *self, PyObject *args) } else fp = NULL; - mod = _PyImport_LoadDynamicModule(name, pathname, fp); - Py_DECREF(pathname); + mod = _PyImport_LoadDynamicModule(name, path, fp); + Py_DECREF(path); if (fp) fclose(fp); return mod; @@ -1810,49 +2216,25 @@ imp_load_dynamic(PyObject *self, PyObject *args) #endif /* HAVE_DYNAMIC_LOADING */ -/* Doc strings */ - PyDoc_STRVAR(doc_imp, "(Extremely) low-level import machinery bits as used by importlib and imp."); -PyDoc_STRVAR(doc_extension_suffixes, -"extension_suffixes() -> list of strings\n\ -Returns the list of file suffixes used to identify extension modules."); - -PyDoc_STRVAR(doc_lock_held, -"lock_held() -> boolean\n\ -Return True if the import lock is currently held, else False.\n\ -On platforms without threads, return False."); - -PyDoc_STRVAR(doc_acquire_lock, -"acquire_lock() -> None\n\ -Acquires the interpreter's import lock for the current thread.\n\ -This lock should be used by import hooks to ensure thread-safety\n\ -when importing modules.\n\ -On platforms without threads, this function does nothing."); - -PyDoc_STRVAR(doc_release_lock, -"release_lock() -> None\n\ -Release the interpreter's import lock.\n\ -On platforms without threads, this function does nothing."); - static PyMethodDef imp_methods[] = { - {"extension_suffixes", imp_extension_suffixes, METH_NOARGS, - doc_extension_suffixes}, - {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held}, - {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock}, - {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock}, - {"get_frozen_object", imp_get_frozen_object, METH_VARARGS}, - {"is_frozen_package", imp_is_frozen_package, METH_VARARGS}, - {"init_builtin", imp_init_builtin, METH_VARARGS}, - {"init_frozen", imp_init_frozen, METH_VARARGS}, - {"is_builtin", imp_is_builtin, METH_VARARGS}, - {"is_frozen", imp_is_frozen, METH_VARARGS}, + _IMP_EXTENSION_SUFFIXES_METHODDEF + _IMP_LOCK_HELD_METHODDEF + _IMP_ACQUIRE_LOCK_METHODDEF + _IMP_RELEASE_LOCK_METHODDEF + _IMP_GET_FROZEN_OBJECT_METHODDEF + _IMP_IS_FROZEN_PACKAGE_METHODDEF + _IMP_INIT_BUILTIN_METHODDEF + _IMP_INIT_FROZEN_METHODDEF + _IMP_IS_BUILTIN_METHODDEF + _IMP_IS_FROZEN_METHODDEF #ifdef HAVE_DYNAMIC_LOADING - {"load_dynamic", imp_load_dynamic, METH_VARARGS}, + _IMP_LOAD_DYNAMIC_METHODDEF #endif - {"_fix_co_filename", imp_fix_co_filename, METH_VARARGS}, - {NULL, NULL} /* sentinel */ + _IMP__FIX_CO_FILENAME_METHODDEF + {NULL, NULL} /* sentinel */ }; diff --git a/Python/importdl.c b/Python/importdl.c index 0ea954c..b60f1c7 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -77,6 +77,8 @@ _PyImport_LoadDynamicModule(PyObject *name, PyObject *path, FILE *fp) PyObject *msg = PyUnicode_FromFormat("dynamic module does not define " "init function (PyInit_%s)", shortname); + if (msg == NULL) + goto error; PyErr_SetImportError(msg, name, path); Py_DECREF(msg); goto error; diff --git a/Python/importdl.h b/Python/importdl.h index 6b9cf75..6a51a91 100644 --- a/Python/importdl.h +++ b/Python/importdl.h @@ -18,13 +18,8 @@ extern PyObject *_PyImport_LoadDynamicModule(PyObject *name, PyObject *pathname, #include <windows.h> typedef FARPROC dl_funcptr; #else -#if defined(PYOS_OS2) && !defined(PYCC_GCC) -#include <os2def.h> -typedef int (* APIENTRY dl_funcptr)(); -#else typedef void (*dl_funcptr)(void); #endif -#endif #ifdef __cplusplus diff --git a/Python/importlib.h b/Python/importlib.h index cb6afc5..d84d9fb 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1,286 +1,257 @@ /* Auto-generated by Modules/_freeze_importlib.c */ -unsigned char _Py_M__importlib[] = { - 99,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,64,0,0,0,115,206,3,0,0,100,0,0,90,0,0, - 100,131,0,90,1,0,100,4,0,100,5,0,132,0,0,90, +const unsigned char _Py_M__importlib[] = { + 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, + 0,64,0,0,0,115,213,4,0,0,100,0,0,90,0,0, + 100,161,0,90,1,0,100,4,0,100,5,0,132,0,0,90, 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, 6,0,100,14,0,100,15,0,132,0,0,90,7,0,100,16, 0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0, - 132,0,0,90,9,0,100,20,0,100,21,0,100,22,0,132, - 1,0,90,10,0,100,23,0,100,24,0,132,0,0,90,11, - 0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0, - 100,25,0,100,26,0,132,0,0,90,15,0,105,0,0,90, - 16,0,105,0,0,90,17,0,71,100,27,0,100,28,0,132, - 0,0,100,28,0,101,18,0,131,3,0,90,19,0,71,100, - 29,0,100,30,0,132,0,0,100,30,0,131,2,0,90,20, - 0,71,100,31,0,100,32,0,132,0,0,100,32,0,131,2, - 0,90,21,0,100,33,0,100,34,0,132,0,0,90,22,0, - 100,35,0,100,36,0,132,0,0,90,23,0,100,37,0,100, - 38,0,132,0,0,90,24,0,100,39,0,101,25,0,100,40, - 0,131,1,0,100,41,0,62,66,101,25,0,100,42,0,131, - 1,0,100,43,0,62,66,90,26,0,101,27,0,100,44,0, - 100,45,0,132,0,0,101,28,0,100,46,0,100,47,0,100, - 48,0,131,3,0,68,131,1,0,131,1,0,90,29,0,100, - 49,0,90,30,0,100,50,0,103,1,0,90,31,0,100,51, - 0,103,1,0,90,32,0,100,52,0,103,1,0,90,33,0, - 100,130,0,100,53,0,100,54,0,132,1,0,90,35,0,100, - 55,0,100,56,0,132,0,0,90,36,0,100,57,0,100,58, - 0,132,0,0,90,37,0,100,59,0,100,60,0,100,61,0, - 100,62,0,132,0,1,90,38,0,100,63,0,100,64,0,132, - 0,0,90,39,0,100,65,0,100,66,0,132,0,0,90,40, - 0,100,67,0,100,68,0,132,0,0,90,41,0,100,69,0, - 100,70,0,132,0,0,90,42,0,100,71,0,100,72,0,132, - 0,0,90,43,0,100,73,0,100,74,0,132,0,0,90,44, - 0,100,75,0,100,76,0,132,0,0,90,45,0,71,100,77, - 0,100,78,0,132,0,0,100,78,0,131,2,0,90,46,0, - 71,100,79,0,100,80,0,132,0,0,100,80,0,131,2,0, - 90,47,0,71,100,81,0,100,82,0,132,0,0,100,82,0, - 131,2,0,90,48,0,71,100,83,0,100,84,0,132,0,0, - 100,84,0,131,2,0,90,49,0,71,100,85,0,100,86,0, - 132,0,0,100,86,0,101,49,0,131,3,0,90,50,0,71, - 100,87,0,100,88,0,132,0,0,100,88,0,131,2,0,90, - 51,0,71,100,89,0,100,90,0,132,0,0,100,90,0,101, - 51,0,101,50,0,131,4,0,90,52,0,71,100,91,0,100, - 92,0,132,0,0,100,92,0,101,51,0,101,49,0,131,4, - 0,90,53,0,103,0,0,90,54,0,71,100,93,0,100,94, - 0,132,0,0,100,94,0,131,2,0,90,55,0,71,100,95, - 0,100,96,0,132,0,0,100,96,0,131,2,0,90,56,0, - 71,100,97,0,100,98,0,132,0,0,100,98,0,131,2,0, - 90,57,0,71,100,99,0,100,100,0,132,0,0,100,100,0, - 131,2,0,90,58,0,71,100,101,0,100,102,0,132,0,0, - 100,102,0,131,2,0,90,59,0,71,100,103,0,100,104,0, - 132,0,0,100,104,0,131,2,0,90,60,0,100,105,0,100, - 106,0,132,0,0,90,61,0,100,107,0,100,108,0,132,0, - 0,90,62,0,100,109,0,100,110,0,132,0,0,90,63,0, - 100,111,0,90,64,0,100,112,0,100,113,0,132,0,0,90, - 65,0,100,114,0,100,115,0,132,0,0,90,66,0,100,130, - 0,100,46,0,100,116,0,100,117,0,132,2,0,90,67,0, - 100,118,0,100,119,0,132,0,0,90,68,0,100,120,0,100, - 121,0,132,0,0,90,69,0,100,122,0,100,123,0,132,0, - 0,90,70,0,100,130,0,100,130,0,102,0,0,100,46,0, - 100,124,0,100,125,0,132,4,0,90,71,0,100,126,0,100, - 127,0,132,0,0,90,72,0,100,128,0,100,129,0,132,0, - 0,90,73,0,100,130,0,83,40,132,0,0,0,117,83,1, - 0,0,67,111,114,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, - 10,10,84,104,105,115,32,109,111,100,117,108,101,32,105,115, - 32,78,79,84,32,109,101,97,110,116,32,116,111,32,98,101, - 32,100,105,114,101,99,116,108,121,32,105,109,112,111,114,116, - 101,100,33,32,73,116,32,104,97,115,32,98,101,101,110,32, - 100,101,115,105,103,110,101,100,32,115,117,99,104,10,116,104, - 97,116,32,105,116,32,99,97,110,32,98,101,32,98,111,111, - 116,115,116,114,97,112,112,101,100,32,105,110,116,111,32,80, - 121,116,104,111,110,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,32,65,115,10,115,117,99,104,32,105, - 116,32,114,101,113,117,105,114,101,115,32,116,104,101,32,105, - 110,106,101,99,116,105,111,110,32,111,102,32,115,112,101,99, - 105,102,105,99,32,109,111,100,117,108,101,115,32,97,110,100, - 32,97,116,116,114,105,98,117,116,101,115,32,105,110,32,111, - 114,100,101,114,32,116,111,10,119,111,114,107,46,32,79,110, - 101,32,115,104,111,117,108,100,32,117,115,101,32,105,109,112, - 111,114,116,108,105,98,32,97,115,32,116,104,101,32,112,117, - 98,108,105,99,45,102,97,99,105,110,103,32,118,101,114,115, - 105,111,110,32,111,102,32,116,104,105,115,32,109,111,100,117, - 108,101,46,10,10,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,99,0,0,0,0,0,0,0,0,1,0,0,0, - 2,0,0,0,67,0,0,0,115,49,0,0,0,116,0,0, - 106,1,0,106,2,0,116,3,0,131,1,0,114,33,0,100, - 1,0,100,2,0,132,0,0,125,0,0,110,12,0,100,3, - 0,100,2,0,132,0,0,125,0,0,124,0,0,83,40,4, - 0,0,0,78,99,0,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,83,0,0,0,115,13,0,0,0,100,1, - 0,116,0,0,106,1,0,107,6,0,83,40,2,0,0,0, - 117,53,0,0,0,84,114,117,101,32,105,102,32,102,105,108, - 101,110,97,109,101,115,32,109,117,115,116,32,98,101,32,99, - 104,101,99,107,101,100,32,99,97,115,101,45,105,110,115,101, - 110,115,105,116,105,118,101,108,121,46,115,12,0,0,0,80, - 89,84,72,79,78,67,65,83,69,79,75,40,2,0,0,0, - 117,3,0,0,0,95,111,115,117,7,0,0,0,101,110,118, - 105,114,111,110,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,11,0,0,0,95,114,101,108,97,120, - 95,99,97,115,101,34,0,0,0,115,2,0,0,0,0,2, - 117,37,0,0,0,95,109,97,107,101,95,114,101,108,97,120, - 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, - 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, - 4,0,0,0,100,1,0,83,40,2,0,0,0,117,53,0, - 0,0,84,114,117,101,32,105,102,32,102,105,108,101,110,97, - 109,101,115,32,109,117,115,116,32,98,101,32,99,104,101,99, - 107,101,100,32,99,97,115,101,45,105,110,115,101,110,115,105, - 116,105,118,101,108,121,46,70,40,1,0,0,0,117,5,0, - 0,0,70,97,108,115,101,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, + 132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90, + 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, + 0,100,25,0,100,26,0,132,0,0,90,12,0,100,27,0, + 100,28,0,132,0,0,90,13,0,101,14,0,101,12,0,106, + 15,0,131,1,0,90,16,0,71,100,29,0,100,30,0,132, + 0,0,100,30,0,131,2,0,90,17,0,105,0,0,90,18, + 0,105,0,0,90,19,0,71,100,31,0,100,32,0,132,0, + 0,100,32,0,101,20,0,131,3,0,90,21,0,71,100,33, + 0,100,34,0,132,0,0,100,34,0,131,2,0,90,22,0, + 71,100,35,0,100,36,0,132,0,0,100,36,0,131,2,0, + 90,23,0,71,100,37,0,100,38,0,132,0,0,100,38,0, + 131,2,0,90,24,0,100,39,0,100,40,0,132,0,0,90, + 25,0,100,41,0,100,42,0,132,0,0,90,26,0,100,43, + 0,100,44,0,132,0,0,90,27,0,100,45,0,106,28,0, + 100,46,0,100,47,0,131,2,0,100,48,0,23,90,29,0, + 101,30,0,106,31,0,101,29,0,100,47,0,131,2,0,90, + 32,0,100,49,0,90,33,0,100,50,0,103,1,0,90,34, + 0,100,51,0,103,1,0,90,35,0,100,52,0,103,1,0, + 90,36,0,100,53,0,100,54,0,100,55,0,132,1,0,90, + 37,0,100,56,0,100,57,0,132,0,0,90,38,0,100,58, + 0,100,59,0,132,0,0,90,39,0,100,60,0,100,61,0, + 132,0,0,90,40,0,100,62,0,100,63,0,100,64,0,100, + 65,0,132,0,1,90,41,0,100,66,0,100,67,0,132,0, + 0,90,42,0,100,68,0,100,69,0,132,0,0,90,43,0, + 100,70,0,100,71,0,132,0,0,90,44,0,100,72,0,100, + 73,0,132,0,0,90,45,0,100,74,0,100,75,0,132,0, + 0,90,46,0,100,53,0,100,53,0,100,53,0,100,76,0, + 100,77,0,132,3,0,90,47,0,100,53,0,100,53,0,100, + 53,0,100,78,0,100,79,0,132,3,0,90,48,0,100,80, + 0,100,80,0,100,81,0,100,82,0,132,2,0,90,49,0, + 100,83,0,100,84,0,132,0,0,90,50,0,100,85,0,100, + 86,0,132,0,0,90,51,0,71,100,87,0,100,88,0,132, + 0,0,100,88,0,131,2,0,90,52,0,71,100,89,0,100, + 90,0,132,0,0,100,90,0,131,2,0,90,53,0,100,91, + 0,100,53,0,100,92,0,100,53,0,100,93,0,100,94,0, + 132,0,2,90,54,0,101,55,0,131,0,0,90,56,0,100, + 53,0,100,95,0,100,53,0,100,96,0,101,56,0,100,97, + 0,100,98,0,132,1,2,90,57,0,100,53,0,100,53,0, + 100,99,0,100,100,0,132,2,0,90,58,0,71,100,101,0, + 100,102,0,132,0,0,100,102,0,131,2,0,90,59,0,71, + 100,103,0,100,104,0,132,0,0,100,104,0,131,2,0,90, + 60,0,71,100,105,0,100,106,0,132,0,0,100,106,0,131, + 2,0,90,61,0,71,100,107,0,100,108,0,132,0,0,100, + 108,0,131,2,0,90,62,0,71,100,109,0,100,110,0,132, + 0,0,100,110,0,131,2,0,90,63,0,71,100,111,0,100, + 112,0,132,0,0,100,112,0,101,63,0,131,3,0,90,64, + 0,71,100,113,0,100,114,0,132,0,0,100,114,0,131,2, + 0,90,65,0,71,100,115,0,100,116,0,132,0,0,100,116, + 0,101,65,0,101,64,0,131,4,0,90,66,0,71,100,117, + 0,100,118,0,132,0,0,100,118,0,101,65,0,101,63,0, + 131,4,0,90,67,0,103,0,0,90,68,0,71,100,119,0, + 100,120,0,132,0,0,100,120,0,131,2,0,90,69,0,71, + 100,121,0,100,122,0,132,0,0,100,122,0,131,2,0,90, + 70,0,71,100,123,0,100,124,0,132,0,0,100,124,0,131, + 2,0,90,71,0,71,100,125,0,100,126,0,132,0,0,100, + 126,0,131,2,0,90,72,0,71,100,127,0,100,128,0,132, + 0,0,100,128,0,131,2,0,90,73,0,71,100,129,0,100, + 130,0,132,0,0,100,130,0,131,2,0,90,74,0,100,131, + 0,100,132,0,132,0,0,90,75,0,100,133,0,100,134,0, + 132,0,0,90,76,0,100,53,0,100,135,0,100,136,0,132, + 1,0,90,77,0,100,137,0,100,138,0,132,0,0,90,78, + 0,100,139,0,90,79,0,101,79,0,100,140,0,23,90,80, + 0,100,141,0,100,142,0,132,0,0,90,81,0,100,143,0, + 100,144,0,132,0,0,90,82,0,100,53,0,100,80,0,100, + 145,0,100,146,0,132,2,0,90,83,0,100,147,0,100,148, + 0,132,0,0,90,84,0,100,149,0,100,150,0,132,0,0, + 90,85,0,100,151,0,100,152,0,132,0,0,90,86,0,100, + 53,0,100,53,0,102,0,0,100,80,0,100,153,0,100,154, + 0,132,4,0,90,87,0,100,155,0,100,156,0,132,0,0, + 90,88,0,100,157,0,100,158,0,132,0,0,90,89,0,100, + 159,0,100,160,0,132,0,0,90,90,0,100,53,0,83,41, + 162,97,83,1,0,0,67,111,114,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,10,10,84,104,105,115,32,109,111,100,117,108, + 101,32,105,115,32,78,79,84,32,109,101,97,110,116,32,116, + 111,32,98,101,32,100,105,114,101,99,116,108,121,32,105,109, + 112,111,114,116,101,100,33,32,73,116,32,104,97,115,32,98, + 101,101,110,32,100,101,115,105,103,110,101,100,32,115,117,99, + 104,10,116,104,97,116,32,105,116,32,99,97,110,32,98,101, + 32,98,111,111,116,115,116,114,97,112,112,101,100,32,105,110, + 116,111,32,80,121,116,104,111,110,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,32,65,115,10,115,117, + 99,104,32,105,116,32,114,101,113,117,105,114,101,115,32,116, + 104,101,32,105,110,106,101,99,116,105,111,110,32,111,102,32, + 115,112,101,99,105,102,105,99,32,109,111,100,117,108,101,115, + 32,97,110,100,32,97,116,116,114,105,98,117,116,101,115,32, + 105,110,32,111,114,100,101,114,32,116,111,10,119,111,114,107, + 46,32,79,110,101,32,115,104,111,117,108,100,32,117,115,101, + 32,105,109,112,111,114,116,108,105,98,32,97,115,32,116,104, + 101,32,112,117,98,108,105,99,45,102,97,99,105,110,103,32, + 118,101,114,115,105,111,110,32,111,102,32,116,104,105,115,32, + 109,111,100,117,108,101,46,10,10,218,3,119,105,110,218,6, + 99,121,103,119,105,110,218,6,100,97,114,119,105,110,99,0, + 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, + 0,0,0,115,49,0,0,0,116,0,0,106,1,0,106,2, + 0,116,3,0,131,1,0,114,33,0,100,1,0,100,2,0, + 132,0,0,125,0,0,110,12,0,100,3,0,100,2,0,132, + 0,0,125,0,0,124,0,0,83,41,4,78,99,0,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,83,0,0, + 0,115,13,0,0,0,100,1,0,116,0,0,106,1,0,107, + 6,0,83,41,2,122,53,84,114,117,101,32,105,102,32,102, + 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, + 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, + 115,101,110,115,105,116,105,118,101,108,121,46,115,12,0,0, + 0,80,89,84,72,79,78,67,65,83,69,79,75,41,2,218, + 3,95,111,115,90,7,101,110,118,105,114,111,110,169,0,114, + 4,0,0,0,114,4,0,0,0,250,29,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,11,0,0,0,95,114,101, - 108,97,120,95,99,97,115,101,38,0,0,0,115,2,0,0, - 0,0,2,40,4,0,0,0,117,3,0,0,0,115,121,115, - 117,8,0,0,0,112,108,97,116,102,111,114,109,117,10,0, - 0,0,115,116,97,114,116,115,119,105,116,104,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,40,1,0,0, - 0,117,11,0,0,0,95,114,101,108,97,120,95,99,97,115, - 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,16,0, - 0,0,95,109,97,107,101,95,114,101,108,97,120,95,99,97, - 115,101,32,0,0,0,115,8,0,0,0,0,1,18,1,15, - 4,12,3,117,16,0,0,0,95,109,97,107,101,95,114,101, - 108,97,120,95,99,97,115,101,99,1,0,0,0,0,0,0, - 0,2,0,0,0,3,0,0,0,67,0,0,0,115,108,0, - 0,0,116,0,0,124,0,0,131,1,0,125,0,0,103,0, - 0,125,1,0,124,1,0,106,1,0,124,0,0,100,1,0, - 64,131,1,0,1,124,1,0,106,1,0,124,0,0,100,2, - 0,63,100,1,0,64,131,1,0,1,124,1,0,106,1,0, - 124,0,0,100,3,0,63,100,1,0,64,131,1,0,1,124, - 1,0,106,1,0,124,0,0,100,4,0,63,100,1,0,64, - 131,1,0,1,116,2,0,124,1,0,131,1,0,83,40,5, - 0,0,0,117,111,0,0,0,67,111,110,118,101,114,116,32, + 111,116,115,116,114,97,112,62,218,11,95,114,101,108,97,120, + 95,99,97,115,101,30,0,0,0,115,2,0,0,0,0,2, + 122,37,95,109,97,107,101,95,114,101,108,97,120,95,99,97, + 115,101,46,60,108,111,99,97,108,115,62,46,95,114,101,108, + 97,120,95,99,97,115,101,99,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,83,0,0,0,115,4,0,0, + 0,100,1,0,83,41,2,122,53,84,114,117,101,32,105,102, + 32,102,105,108,101,110,97,109,101,115,32,109,117,115,116,32, + 98,101,32,99,104,101,99,107,101,100,32,99,97,115,101,45, + 105,110,115,101,110,115,105,116,105,118,101,108,121,46,70,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,6,0,0,0,34,0,0, + 0,115,2,0,0,0,0,2,41,4,218,3,115,121,115,218, + 8,112,108,97,116,102,111,114,109,218,10,115,116,97,114,116, + 115,119,105,116,104,218,27,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,41,1,114,6,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,16,95,109,97,107,101,95, + 114,101,108,97,120,95,99,97,115,101,28,0,0,0,115,8, + 0,0,0,0,1,18,1,15,4,12,3,114,11,0,0,0, + 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0, + 131,1,0,100,1,0,64,106,1,0,100,2,0,100,3,0, + 131,2,0,83,41,4,122,42,67,111,110,118,101,114,116,32, 97,32,51,50,45,98,105,116,32,105,110,116,101,103,101,114, 32,116,111,32,108,105,116,116,108,101,45,101,110,100,105,97, - 110,46,10,10,32,32,32,32,88,88,88,32,84,101,109,112, - 111,114,97,114,121,32,117,110,116,105,108,32,109,97,114,115, - 104,97,108,39,115,32,108,111,110,103,32,102,117,110,99,116, - 105,111,110,115,32,97,114,101,32,101,120,112,111,115,101,100, - 46,10,10,32,32,32,32,105,255,0,0,0,105,8,0,0, - 0,105,16,0,0,0,105,24,0,0,0,40,3,0,0,0, - 117,3,0,0,0,105,110,116,117,6,0,0,0,97,112,112, - 101,110,100,117,9,0,0,0,98,121,116,101,97,114,114,97, - 121,40,2,0,0,0,117,1,0,0,0,120,117,9,0,0, - 0,105,110,116,95,98,121,116,101,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,7,0,0,0,95,119,95,108,111, - 110,103,45,0,0,0,115,14,0,0,0,0,6,12,1,6, - 1,17,1,21,1,21,1,21,1,117,7,0,0,0,95,119, - 95,108,111,110,103,99,1,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,67,0,0,0,115,68,0,0,0,124, - 0,0,100,1,0,25,125,1,0,124,1,0,124,0,0,100, - 2,0,25,100,3,0,62,79,125,1,0,124,1,0,124,0, - 0,100,4,0,25,100,5,0,62,79,125,1,0,124,1,0, - 124,0,0,100,6,0,25,100,7,0,62,79,125,1,0,124, - 1,0,83,40,8,0,0,0,117,115,0,0,0,67,111,110, - 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32, - 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, - 32,97,110,32,105,110,116,101,103,101,114,46,10,10,32,32, - 32,32,88,88,88,32,84,101,109,112,111,114,97,114,121,32, - 117,110,116,105,108,32,109,97,114,115,104,97,108,39,115,32, - 108,111,110,103,32,102,117,110,99,116,105,111,110,32,97,114, - 101,32,101,120,112,111,115,101,100,46,10,10,32,32,32,32, - 105,0,0,0,0,105,1,0,0,0,105,8,0,0,0,105, - 2,0,0,0,105,16,0,0,0,105,3,0,0,0,105,24, - 0,0,0,40,0,0,0,0,40,2,0,0,0,117,9,0, - 0,0,105,110,116,95,98,121,116,101,115,117,1,0,0,0, - 120,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,7,0, - 0,0,95,114,95,108,111,110,103,61,0,0,0,115,10,0, - 0,0,0,6,10,1,18,1,18,1,18,1,117,7,0,0, - 0,95,114,95,108,111,110,103,99,0,0,0,0,0,0,0, - 0,3,0,0,0,4,0,0,0,71,0,0,0,115,103,0, - 0,0,103,0,0,125,1,0,120,71,0,124,0,0,68,93, - 63,0,125,2,0,124,2,0,115,31,0,113,13,0,110,0, - 0,124,1,0,106,0,0,124,2,0,131,1,0,1,124,2, - 0,100,4,0,25,116,1,0,107,7,0,114,13,0,124,1, - 0,106,0,0,116,2,0,131,1,0,1,113,13,0,113,13, - 0,87,100,2,0,106,3,0,124,1,0,100,3,0,100,5, - 0,133,2,0,25,131,1,0,83,40,6,0,0,0,117,31, - 0,0,0,82,101,112,108,97,99,101,109,101,110,116,32,102, - 111,114,32,111,115,46,112,97,116,104,46,106,111,105,110,40, - 41,46,105,1,0,0,0,117,0,0,0,0,78,105,255,255, - 255,255,105,255,255,255,255,40,4,0,0,0,117,6,0,0, - 0,97,112,112,101,110,100,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,4,0,0,0,106,111,105, - 110,40,3,0,0,0,117,10,0,0,0,112,97,116,104,95, - 112,97,114,116,115,117,9,0,0,0,110,101,119,95,112,97, - 114,116,115,117,4,0,0,0,112,97,114,116,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,10,0,0,0,95,112,97, - 116,104,95,106,111,105,110,74,0,0,0,115,16,0,0,0, - 0,2,6,1,13,1,6,1,6,1,13,1,16,1,20,1, - 117,10,0,0,0,95,112,97,116,104,95,106,111,105,110,99, - 1,0,0,0,0,0,0,0,6,0,0,0,3,0,0,0, - 67,0,0,0,115,85,0,0,0,120,48,0,116,0,0,124, - 0,0,131,1,0,68,93,28,0,125,1,0,124,1,0,116, - 1,0,107,6,0,114,13,0,124,1,0,125,2,0,80,113, - 13,0,113,13,0,87,116,2,0,125,2,0,124,0,0,106, - 3,0,124,2,0,131,1,0,92,3,0,125,3,0,125,4, - 0,125,5,0,124,3,0,124,5,0,102,2,0,83,40,1, - 0,0,0,117,32,0,0,0,82,101,112,108,97,99,101,109, - 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, - 115,112,108,105,116,40,41,46,40,4,0,0,0,117,8,0, - 0,0,114,101,118,101,114,115,101,100,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,10,0,0,0, - 114,112,97,114,116,105,116,105,111,110,40,6,0,0,0,117, - 4,0,0,0,112,97,116,104,117,1,0,0,0,120,117,3, - 0,0,0,115,101,112,117,5,0,0,0,102,114,111,110,116, - 117,1,0,0,0,95,117,4,0,0,0,116,97,105,108,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,11,0,0,0, - 95,112,97,116,104,95,115,112,108,105,116,86,0,0,0,115, - 14,0,0,0,0,2,19,1,12,1,6,1,8,2,6,1, - 24,1,117,11,0,0,0,95,112,97,116,104,95,115,112,108, - 105,116,99,2,0,0,0,0,0,0,0,3,0,0,0,11, - 0,0,0,67,0,0,0,115,61,0,0,0,121,19,0,116, - 0,0,106,1,0,124,0,0,131,1,0,125,2,0,87,110, - 22,0,4,116,2,0,107,10,0,114,43,0,1,1,1,100, - 2,0,83,89,110,1,0,88,124,2,0,106,4,0,100,1, - 0,64,124,1,0,107,2,0,83,40,3,0,0,0,117,49, - 0,0,0,84,101,115,116,32,119,104,101,116,104,101,114,32, - 116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,116, - 121,112,101,46,105,0,240,0,0,70,40,5,0,0,0,117, - 3,0,0,0,95,111,115,117,4,0,0,0,115,116,97,116, - 117,7,0,0,0,79,83,69,114,114,111,114,117,5,0,0, - 0,70,97,108,115,101,117,7,0,0,0,115,116,95,109,111, - 100,101,40,3,0,0,0,117,4,0,0,0,112,97,116,104, - 117,4,0,0,0,109,111,100,101,117,9,0,0,0,115,116, - 97,116,95,105,110,102,111,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,18,0,0,0,95,112,97,116,104,95,105,115, - 95,109,111,100,101,95,116,121,112,101,98,0,0,0,115,10, - 0,0,0,0,2,3,1,19,1,13,1,9,1,117,18,0, - 0,0,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,99,1,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,67,0,0,0,115,13,0,0,0,116,0, - 0,124,0,0,100,1,0,131,2,0,83,40,2,0,0,0, - 117,31,0,0,0,82,101,112,108,97,99,101,109,101,110,116, - 32,102,111,114,32,111,115,46,112,97,116,104,46,105,115,102, - 105,108,101,46,105,0,128,0,0,40,1,0,0,0,117,18, - 0,0,0,95,112,97,116,104,95,105,115,95,109,111,100,101, - 95,116,121,112,101,40,1,0,0,0,117,4,0,0,0,112, - 97,116,104,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, - 12,0,0,0,95,112,97,116,104,95,105,115,102,105,108,101, - 108,0,0,0,115,2,0,0,0,0,2,117,12,0,0,0, - 95,112,97,116,104,95,105,115,102,105,108,101,99,1,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,34,0,0,0,124,0,0,115,21,0,116,0,0,106, - 1,0,131,0,0,125,0,0,110,0,0,116,2,0,124,0, - 0,100,1,0,131,2,0,83,40,2,0,0,0,117,30,0, - 0,0,82,101,112,108,97,99,101,109,101,110,116,32,102,111, - 114,32,111,115,46,112,97,116,104,46,105,115,100,105,114,46, - 105,0,64,0,0,40,3,0,0,0,117,3,0,0,0,95, - 111,115,117,6,0,0,0,103,101,116,99,119,100,117,18,0, - 0,0,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,40,1,0,0,0,117,4,0,0,0,112,97, - 116,104,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,11, - 0,0,0,95,112,97,116,104,95,105,115,100,105,114,114,0, - 0,0,115,6,0,0,0,0,2,6,1,15,1,117,11,0, - 0,0,95,112,97,116,104,95,105,115,100,105,114,105,182,1, + 110,46,108,3,0,0,0,255,127,255,127,3,0,233,4,0, + 0,0,218,6,108,105,116,116,108,101,41,2,218,3,105,110, + 116,218,8,116,111,95,98,121,116,101,115,41,1,218,1,120, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 7,95,119,95,108,111,110,103,40,0,0,0,115,2,0,0, + 0,0,2,114,17,0,0,0,99,1,0,0,0,0,0,0, + 0,1,0,0,0,3,0,0,0,67,0,0,0,115,16,0, + 0,0,116,0,0,106,1,0,124,0,0,100,1,0,131,2, + 0,83,41,2,122,47,67,111,110,118,101,114,116,32,52,32, + 98,121,116,101,115,32,105,110,32,108,105,116,116,108,101,45, + 101,110,100,105,97,110,32,116,111,32,97,110,32,105,110,116, + 101,103,101,114,46,114,13,0,0,0,41,2,114,14,0,0, + 0,218,10,102,114,111,109,95,98,121,116,101,115,41,1,90, + 9,105,110,116,95,98,121,116,101,115,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,7,95,114,95,108,111, + 110,103,45,0,0,0,115,2,0,0,0,0,2,114,19,0, + 0,0,99,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,71,0,0,0,115,26,0,0,0,116,0,0,106, + 1,0,100,1,0,100,2,0,132,0,0,124,0,0,68,131, + 1,0,131,1,0,83,41,3,122,31,82,101,112,108,97,99, + 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, + 104,46,106,111,105,110,40,41,46,99,1,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,83,0,0,0,115,37, + 0,0,0,103,0,0,124,0,0,93,27,0,125,1,0,124, + 1,0,114,6,0,124,1,0,106,0,0,116,1,0,131,1, + 0,145,2,0,113,6,0,83,114,4,0,0,0,41,2,218, + 6,114,115,116,114,105,112,218,15,112,97,116,104,95,115,101, + 112,97,114,97,116,111,114,115,41,2,218,2,46,48,218,4, + 112,97,114,116,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,250,10,60,108,105,115,116,99,111,109,112,62,52, + 0,0,0,115,2,0,0,0,9,1,122,30,95,112,97,116, + 104,95,106,111,105,110,46,60,108,111,99,97,108,115,62,46, + 60,108,105,115,116,99,111,109,112,62,41,2,218,8,112,97, + 116,104,95,115,101,112,218,4,106,111,105,110,41,1,218,10, + 112,97,116,104,95,112,97,114,116,115,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,10,95,112,97,116,104, + 95,106,111,105,110,50,0,0,0,115,4,0,0,0,0,2, + 15,1,114,28,0,0,0,99,1,0,0,0,0,0,0,0, + 5,0,0,0,5,0,0,0,67,0,0,0,115,134,0,0, + 0,116,0,0,116,1,0,131,1,0,100,1,0,107,2,0, + 114,52,0,124,0,0,106,2,0,116,3,0,131,1,0,92, + 3,0,125,1,0,125,2,0,125,3,0,124,1,0,124,3, + 0,102,2,0,83,120,69,0,116,4,0,124,0,0,131,1, + 0,68,93,55,0,125,4,0,124,4,0,116,1,0,107,6, + 0,114,65,0,124,0,0,106,5,0,124,4,0,100,2,0, + 100,1,0,131,1,1,92,2,0,125,1,0,125,3,0,124, + 1,0,124,3,0,102,2,0,83,113,65,0,87,100,3,0, + 124,0,0,102,2,0,83,41,4,122,32,82,101,112,108,97, + 99,101,109,101,110,116,32,102,111,114,32,111,115,46,112,97, + 116,104,46,115,112,108,105,116,40,41,46,233,1,0,0,0, + 90,8,109,97,120,115,112,108,105,116,218,0,41,6,218,3, + 108,101,110,114,21,0,0,0,218,10,114,112,97,114,116,105, + 116,105,111,110,114,25,0,0,0,218,8,114,101,118,101,114, + 115,101,100,218,6,114,115,112,108,105,116,41,5,218,4,112, + 97,116,104,90,5,102,114,111,110,116,218,1,95,218,4,116, + 97,105,108,114,16,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,11,95,112,97,116,104,95,115, + 112,108,105,116,56,0,0,0,115,16,0,0,0,0,2,18, + 1,24,1,10,1,19,1,12,1,27,1,14,1,114,38,0, + 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,2, + 0,0,0,67,0,0,0,115,13,0,0,0,116,0,0,106, + 1,0,124,0,0,131,1,0,83,41,1,122,126,83,116,97, + 116,32,116,104,101,32,112,97,116,104,46,10,10,32,32,32, + 32,77,97,100,101,32,97,32,115,101,112,97,114,97,116,101, + 32,102,117,110,99,116,105,111,110,32,116,111,32,109,97,107, + 101,32,105,116,32,101,97,115,105,101,114,32,116,111,32,111, + 118,101,114,114,105,100,101,32,105,110,32,101,120,112,101,114, + 105,109,101,110,116,115,10,32,32,32,32,40,101,46,103,46, + 32,99,97,99,104,101,32,115,116,97,116,32,114,101,115,117, + 108,116,115,41,46,10,10,32,32,32,32,41,2,114,3,0, + 0,0,90,4,115,116,97,116,41,1,114,35,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,10, + 95,112,97,116,104,95,115,116,97,116,68,0,0,0,115,2, + 0,0,0,0,7,114,39,0,0,0,99,2,0,0,0,0, + 0,0,0,3,0,0,0,11,0,0,0,67,0,0,0,115, + 58,0,0,0,121,16,0,116,0,0,124,0,0,131,1,0, + 125,2,0,87,110,22,0,4,116,1,0,107,10,0,114,40, + 0,1,1,1,100,1,0,83,89,110,1,0,88,124,2,0, + 106,2,0,100,2,0,64,124,1,0,107,2,0,83,41,3, + 122,49,84,101,115,116,32,119,104,101,116,104,101,114,32,116, + 104,101,32,112,97,116,104,32,105,115,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,109,111,100,101,32,116,121, + 112,101,46,70,105,0,240,0,0,41,3,114,39,0,0,0, + 218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,111, + 100,101,41,3,114,35,0,0,0,218,4,109,111,100,101,90, + 9,115,116,97,116,95,105,110,102,111,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,18,95,112,97,116,104, + 95,105,115,95,109,111,100,101,95,116,121,112,101,78,0,0, + 0,115,10,0,0,0,0,2,3,1,16,1,13,1,9,1, + 114,43,0,0,0,99,1,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,13,0,0,0,116, + 0,0,124,0,0,100,1,0,131,2,0,83,41,2,122,31, + 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, + 111,115,46,112,97,116,104,46,105,115,102,105,108,101,46,105, + 0,128,0,0,41,1,114,43,0,0,0,41,1,114,35,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,87, + 0,0,0,115,2,0,0,0,0,2,114,44,0,0,0,99, + 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,34,0,0,0,124,0,0,115,21,0,116, + 0,0,106,1,0,131,0,0,125,0,0,110,0,0,116,2, + 0,124,0,0,100,1,0,131,2,0,83,41,2,122,30,82, + 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, + 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, + 0,0,41,3,114,3,0,0,0,218,6,103,101,116,99,119, + 100,114,43,0,0,0,41,1,114,35,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,112, + 97,116,104,95,105,115,100,105,114,92,0,0,0,115,6,0, + 0,0,0,2,6,1,15,1,114,46,0,0,0,105,182,1, 0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,17, 0,0,0,67,0,0,0,115,192,0,0,0,100,1,0,106, 0,0,124,0,0,116,1,0,124,0,0,131,1,0,131,2, @@ -294,963 +265,691 @@ unsigned char _Py_M__importlib[] = { 0,107,10,0,114,187,0,1,1,1,121,17,0,116,2,0, 106,12,0,124,3,0,131,1,0,1,87,110,18,0,4,116, 11,0,107,10,0,114,179,0,1,1,1,89,110,1,0,88, - 130,0,0,89,110,1,0,88,100,4,0,83,40,5,0,0, - 0,117,162,0,0,0,66,101,115,116,45,101,102,102,111,114, - 116,32,102,117,110,99,116,105,111,110,32,116,111,32,119,114, - 105,116,101,32,100,97,116,97,32,116,111,32,97,32,112,97, - 116,104,32,97,116,111,109,105,99,97,108,108,121,46,10,32, - 32,32,32,66,101,32,112,114,101,112,97,114,101,100,32,116, - 111,32,104,97,110,100,108,101,32,97,32,70,105,108,101,69, - 120,105,115,116,115,69,114,114,111,114,32,105,102,32,99,111, - 110,99,117,114,114,101,110,116,32,119,114,105,116,105,110,103, - 32,111,102,32,116,104,101,10,32,32,32,32,116,101,109,112, - 111,114,97,114,121,32,102,105,108,101,32,105,115,32,97,116, - 116,101,109,112,116,101,100,46,117,5,0,0,0,123,125,46, - 123,125,105,182,1,0,0,117,2,0,0,0,119,98,78,40, - 13,0,0,0,117,6,0,0,0,102,111,114,109,97,116,117, - 2,0,0,0,105,100,117,3,0,0,0,95,111,115,117,4, - 0,0,0,111,112,101,110,117,6,0,0,0,79,95,69,88, - 67,76,117,7,0,0,0,79,95,67,82,69,65,84,117,8, - 0,0,0,79,95,87,82,79,78,76,89,117,3,0,0,0, - 95,105,111,117,6,0,0,0,70,105,108,101,73,79,117,5, - 0,0,0,119,114,105,116,101,117,7,0,0,0,114,101,112, - 108,97,99,101,117,7,0,0,0,79,83,69,114,114,111,114, - 117,6,0,0,0,117,110,108,105,110,107,40,6,0,0,0, - 117,4,0,0,0,112,97,116,104,117,4,0,0,0,100,97, - 116,97,117,4,0,0,0,109,111,100,101,117,8,0,0,0, - 112,97,116,104,95,116,109,112,117,2,0,0,0,102,100,117, - 4,0,0,0,102,105,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,13,0,0,0,95,119,114,105,116,101,95, - 97,116,111,109,105,99,121,0,0,0,115,26,0,0,0,0, - 5,24,1,9,1,33,1,3,3,21,1,19,1,20,1,13, - 1,3,1,17,1,13,1,5,1,117,13,0,0,0,95,119, - 114,105,116,101,95,97,116,111,109,105,99,99,2,0,0,0, - 0,0,0,0,3,0,0,0,7,0,0,0,67,0,0,0, - 115,95,0,0,0,120,69,0,100,1,0,100,2,0,100,3, - 0,100,4,0,103,4,0,68,93,49,0,125,2,0,116,0, - 0,124,1,0,124,2,0,131,2,0,114,19,0,116,1,0, - 124,0,0,124,2,0,116,2,0,124,1,0,124,2,0,131, - 2,0,131,3,0,1,113,19,0,113,19,0,87,124,0,0, - 106,3,0,106,4,0,124,1,0,106,3,0,131,1,0,1, - 100,5,0,83,40,6,0,0,0,117,47,0,0,0,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,119,114,97,112,112,101,114,46,117,10,0, - 0,0,95,95,109,111,100,117,108,101,95,95,117,8,0,0, - 0,95,95,110,97,109,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,7,0,0,0,95, - 95,100,111,99,95,95,78,40,5,0,0,0,117,7,0,0, - 0,104,97,115,97,116,116,114,117,7,0,0,0,115,101,116, - 97,116,116,114,117,7,0,0,0,103,101,116,97,116,116,114, - 117,8,0,0,0,95,95,100,105,99,116,95,95,117,6,0, - 0,0,117,112,100,97,116,101,40,3,0,0,0,117,3,0, - 0,0,110,101,119,117,3,0,0,0,111,108,100,117,7,0, - 0,0,114,101,112,108,97,99,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,5,0,0,0,95,119,114,97,112,143, - 0,0,0,115,8,0,0,0,0,2,25,1,15,1,32,1, - 117,5,0,0,0,95,119,114,97,112,99,1,0,0,0,0, - 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, - 16,0,0,0,116,0,0,116,1,0,131,1,0,124,0,0, - 131,1,0,83,40,1,0,0,0,117,75,0,0,0,67,114, - 101,97,116,101,32,97,32,110,101,119,32,109,111,100,117,108, - 101,46,10,10,32,32,32,32,84,104,101,32,109,111,100,117, - 108,101,32,105,115,32,110,111,116,32,101,110,116,101,114,101, - 100,32,105,110,116,111,32,115,121,115,46,109,111,100,117,108, - 101,115,46,10,10,32,32,32,32,40,2,0,0,0,117,4, - 0,0,0,116,121,112,101,117,3,0,0,0,95,105,111,40, - 1,0,0,0,117,4,0,0,0,110,97,109,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,10,0,0,0,110,101, - 119,95,109,111,100,117,108,101,154,0,0,0,115,2,0,0, - 0,0,6,117,10,0,0,0,110,101,119,95,109,111,100,117, - 108,101,99,1,0,0,0,0,0,0,0,1,0,0,0,1, - 0,0,0,66,0,0,0,115,20,0,0,0,124,0,0,69, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,83, - 40,2,0,0,0,117,14,0,0,0,95,68,101,97,100,108, - 111,99,107,69,114,114,111,114,78,40,3,0,0,0,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,10,0,0,0, - 95,95,109,111,100,117,108,101,95,95,117,12,0,0,0,95, - 95,113,117,97,108,110,97,109,101,95,95,40,1,0,0,0, - 117,10,0,0,0,95,95,108,111,99,97,108,115,95,95,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,14,0,0,0, - 95,68,101,97,100,108,111,99,107,69,114,114,111,114,171,0, - 0,0,115,2,0,0,0,16,1,117,14,0,0,0,95,68, - 101,97,100,108,111,99,107,69,114,114,111,114,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,66,0,0, - 0,115,86,0,0,0,124,0,0,69,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,90,3,0,100,2,0,100, - 3,0,132,0,0,90,4,0,100,4,0,100,5,0,132,0, - 0,90,5,0,100,6,0,100,7,0,132,0,0,90,6,0, - 100,8,0,100,9,0,132,0,0,90,7,0,100,10,0,100, - 11,0,132,0,0,90,8,0,100,12,0,83,40,13,0,0, - 0,117,11,0,0,0,95,77,111,100,117,108,101,76,111,99, - 107,117,169,0,0,0,65,32,114,101,99,117,114,115,105,118, - 101,32,108,111,99,107,32,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,32,119,104,105,99,104,32,105,115,32,97, - 98,108,101,32,116,111,32,100,101,116,101,99,116,32,100,101, - 97,100,108,111,99,107,115,10,32,32,32,32,40,101,46,103, - 46,32,116,104,114,101,97,100,32,49,32,116,114,121,105,110, - 103,32,116,111,32,116,97,107,101,32,108,111,99,107,115,32, - 65,32,116,104,101,110,32,66,44,32,97,110,100,32,116,104, - 114,101,97,100,32,50,32,116,114,121,105,110,103,32,116,111, - 10,32,32,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,70,0,0,0,116,0,0,106,1,0,131, - 0,0,124,0,0,95,2,0,116,0,0,106,1,0,131,0, - 0,124,0,0,95,3,0,124,1,0,124,0,0,95,4,0, - 100,0,0,124,0,0,95,6,0,100,1,0,124,0,0,95, - 7,0,100,1,0,124,0,0,95,8,0,100,0,0,83,40, - 2,0,0,0,78,105,0,0,0,0,40,9,0,0,0,117, - 7,0,0,0,95,116,104,114,101,97,100,117,13,0,0,0, - 97,108,108,111,99,97,116,101,95,108,111,99,107,117,4,0, - 0,0,108,111,99,107,117,6,0,0,0,119,97,107,101,117, - 112,117,4,0,0,0,110,97,109,101,117,4,0,0,0,78, - 111,110,101,117,5,0,0,0,111,119,110,101,114,117,5,0, - 0,0,99,111,117,110,116,117,7,0,0,0,119,97,105,116, - 101,114,115,40,2,0,0,0,117,4,0,0,0,115,101,108, - 102,117,4,0,0,0,110,97,109,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,8,0,0,0,95,95,105,110,105, - 116,95,95,181,0,0,0,115,12,0,0,0,0,1,15,1, - 15,1,9,1,9,1,9,1,117,20,0,0,0,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,87,0,0,0,116,0,0,106,1, - 0,131,0,0,125,1,0,124,0,0,106,2,0,125,2,0, - 120,59,0,116,3,0,106,4,0,124,2,0,131,1,0,125, - 3,0,124,3,0,100,0,0,107,8,0,114,55,0,100,1, - 0,83,124,3,0,106,2,0,125,2,0,124,2,0,124,1, - 0,107,2,0,114,24,0,100,2,0,83,113,24,0,100,0, - 0,83,40,3,0,0,0,78,70,84,40,8,0,0,0,117, - 7,0,0,0,95,116,104,114,101,97,100,117,9,0,0,0, - 103,101,116,95,105,100,101,110,116,117,5,0,0,0,111,119, - 110,101,114,117,12,0,0,0,95,98,108,111,99,107,105,110, - 103,95,111,110,117,3,0,0,0,103,101,116,117,4,0,0, - 0,78,111,110,101,117,5,0,0,0,70,97,108,115,101,117, - 4,0,0,0,84,114,117,101,40,4,0,0,0,117,4,0, - 0,0,115,101,108,102,117,2,0,0,0,109,101,117,3,0, - 0,0,116,105,100,117,4,0,0,0,108,111,99,107,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,12,0,0,0,104, - 97,115,95,100,101,97,100,108,111,99,107,189,0,0,0,115, - 18,0,0,0,0,2,12,1,9,1,3,1,15,1,12,1, - 4,1,9,1,12,1,117,24,0,0,0,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, - 17,0,0,0,67,0,0,0,115,214,0,0,0,116,0,0, - 106,1,0,131,0,0,125,1,0,124,0,0,116,2,0,124, - 1,0,60,122,177,0,120,170,0,124,0,0,106,3,0,143, - 130,0,1,124,0,0,106,4,0,100,1,0,107,2,0,115, - 68,0,124,0,0,106,5,0,124,1,0,107,2,0,114,96, - 0,124,1,0,124,0,0,95,5,0,124,0,0,4,106,4, - 0,100,2,0,55,2,95,4,0,100,5,0,83,124,0,0, - 106,7,0,131,0,0,114,127,0,116,8,0,100,3,0,124, - 0,0,22,131,1,0,130,1,0,110,0,0,124,0,0,106, - 9,0,106,10,0,100,6,0,131,1,0,114,163,0,124,0, - 0,4,106,12,0,100,2,0,55,2,95,12,0,110,0,0, - 87,100,4,0,81,88,124,0,0,106,9,0,106,10,0,131, - 0,0,1,124,0,0,106,9,0,106,13,0,131,0,0,1, - 113,28,0,87,100,4,0,116,2,0,124,1,0,61,88,100, - 4,0,83,40,7,0,0,0,117,185,0,0,0,10,32,32, - 32,32,32,32,32,32,65,99,113,117,105,114,101,32,116,104, - 101,32,109,111,100,117,108,101,32,108,111,99,107,46,32,32, - 73,102,32,97,32,112,111,116,101,110,116,105,97,108,32,100, - 101,97,100,108,111,99,107,32,105,115,32,100,101,116,101,99, - 116,101,100,44,10,32,32,32,32,32,32,32,32,97,32,95, - 68,101,97,100,108,111,99,107,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,46,10,32,32,32,32,32,32,32, - 32,79,116,104,101,114,119,105,115,101,44,32,116,104,101,32, - 108,111,99,107,32,105,115,32,97,108,119,97,121,115,32,97, - 99,113,117,105,114,101,100,32,97,110,100,32,84,114,117,101, - 32,105,115,32,114,101,116,117,114,110,101,100,46,10,32,32, - 32,32,32,32,32,32,105,0,0,0,0,105,1,0,0,0, - 117,23,0,0,0,100,101,97,100,108,111,99,107,32,100,101, - 116,101,99,116,101,100,32,98,121,32,37,114,78,84,70,40, - 14,0,0,0,117,7,0,0,0,95,116,104,114,101,97,100, - 117,9,0,0,0,103,101,116,95,105,100,101,110,116,117,12, - 0,0,0,95,98,108,111,99,107,105,110,103,95,111,110,117, - 4,0,0,0,108,111,99,107,117,5,0,0,0,99,111,117, - 110,116,117,5,0,0,0,111,119,110,101,114,117,4,0,0, - 0,84,114,117,101,117,12,0,0,0,104,97,115,95,100,101, - 97,100,108,111,99,107,117,14,0,0,0,95,68,101,97,100, - 108,111,99,107,69,114,114,111,114,117,6,0,0,0,119,97, - 107,101,117,112,117,7,0,0,0,97,99,113,117,105,114,101, - 117,5,0,0,0,70,97,108,115,101,117,7,0,0,0,119, - 97,105,116,101,114,115,117,7,0,0,0,114,101,108,101,97, - 115,101,40,2,0,0,0,117,4,0,0,0,115,101,108,102, - 117,3,0,0,0,116,105,100,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,7,0,0,0,97,99,113,117,105,114,101, - 201,0,0,0,115,32,0,0,0,0,6,12,1,10,1,3, - 1,3,1,10,1,30,1,9,1,15,1,4,1,12,1,19, - 1,18,1,24,2,13,1,20,2,117,19,0,0,0,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,165,0,0,0,116,0,0,106,1, - 0,131,0,0,125,1,0,124,0,0,106,2,0,143,138,0, - 1,124,0,0,106,3,0,124,1,0,107,3,0,114,52,0, - 116,4,0,100,1,0,131,1,0,130,1,0,110,0,0,124, - 0,0,106,5,0,100,2,0,107,4,0,115,73,0,116,6, - 0,130,1,0,124,0,0,4,106,5,0,100,3,0,56,2, - 95,5,0,124,0,0,106,5,0,100,2,0,107,2,0,114, - 155,0,100,0,0,124,0,0,95,3,0,124,0,0,106,8, - 0,114,155,0,124,0,0,4,106,8,0,100,3,0,56,2, - 95,8,0,124,0,0,106,9,0,106,10,0,131,0,0,1, - 113,155,0,110,0,0,87,100,0,0,81,88,100,0,0,83, - 40,4,0,0,0,78,117,31,0,0,0,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,108,111,99,107,105,0,0,0,0,105, - 1,0,0,0,40,11,0,0,0,117,7,0,0,0,95,116, - 104,114,101,97,100,117,9,0,0,0,103,101,116,95,105,100, - 101,110,116,117,4,0,0,0,108,111,99,107,117,5,0,0, - 0,111,119,110,101,114,117,12,0,0,0,82,117,110,116,105, - 109,101,69,114,114,111,114,117,5,0,0,0,99,111,117,110, - 116,117,14,0,0,0,65,115,115,101,114,116,105,111,110,69, - 114,114,111,114,117,4,0,0,0,78,111,110,101,117,7,0, - 0,0,119,97,105,116,101,114,115,117,6,0,0,0,119,97, - 107,101,117,112,117,7,0,0,0,114,101,108,101,97,115,101, - 40,2,0,0,0,117,4,0,0,0,115,101,108,102,117,3, - 0,0,0,116,105,100,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,7,0,0,0,114,101,108,101,97,115,101,226,0, - 0,0,115,22,0,0,0,0,1,12,1,10,1,15,1,15, - 1,21,1,15,1,15,1,9,1,9,1,15,1,117,19,0, - 0,0,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,23,0,0,0,100, - 1,0,124,0,0,106,0,0,116,1,0,124,0,0,131,1, - 0,102,2,0,22,83,40,2,0,0,0,78,117,21,0,0, - 0,95,77,111,100,117,108,101,76,111,99,107,40,37,114,41, - 32,97,116,32,37,100,40,2,0,0,0,117,4,0,0,0, - 110,97,109,101,117,2,0,0,0,105,100,40,1,0,0,0, - 117,4,0,0,0,115,101,108,102,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,95,114,101,112,114, - 95,95,239,0,0,0,115,2,0,0,0,0,1,117,20,0, - 0,0,95,77,111,100,117,108,101,76,111,99,107,46,95,95, - 114,101,112,114,95,95,78,40,9,0,0,0,117,8,0,0, - 0,95,95,110,97,109,101,95,95,117,10,0,0,0,95,95, - 109,111,100,117,108,101,95,95,117,12,0,0,0,95,95,113, - 117,97,108,110,97,109,101,95,95,117,7,0,0,0,95,95, - 100,111,99,95,95,117,8,0,0,0,95,95,105,110,105,116, - 95,95,117,12,0,0,0,104,97,115,95,100,101,97,100,108, - 111,99,107,117,7,0,0,0,97,99,113,117,105,114,101,117, - 7,0,0,0,114,101,108,101,97,115,101,117,8,0,0,0, - 95,95,114,101,112,114,95,95,40,1,0,0,0,117,10,0, - 0,0,95,95,108,111,99,97,108,115,95,95,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,11,0,0,0,95,77,111, - 100,117,108,101,76,111,99,107,175,0,0,0,115,12,0,0, - 0,16,4,6,2,12,8,12,12,12,25,12,13,117,11,0, - 0,0,95,77,111,100,117,108,101,76,111,99,107,99,1,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,66,0, - 0,0,115,74,0,0,0,124,0,0,69,101,0,0,90,1, + 130,0,0,89,110,1,0,88,100,4,0,83,41,5,122,162, + 66,101,115,116,45,101,102,102,111,114,116,32,102,117,110,99, + 116,105,111,110,32,116,111,32,119,114,105,116,101,32,100,97, + 116,97,32,116,111,32,97,32,112,97,116,104,32,97,116,111, + 109,105,99,97,108,108,121,46,10,32,32,32,32,66,101,32, + 112,114,101,112,97,114,101,100,32,116,111,32,104,97,110,100, + 108,101,32,97,32,70,105,108,101,69,120,105,115,116,115,69, + 114,114,111,114,32,105,102,32,99,111,110,99,117,114,114,101, + 110,116,32,119,114,105,116,105,110,103,32,111,102,32,116,104, + 101,10,32,32,32,32,116,101,109,112,111,114,97,114,121,32, + 102,105,108,101,32,105,115,32,97,116,116,101,109,112,116,101, + 100,46,122,5,123,125,46,123,125,105,182,1,0,0,90,2, + 119,98,78,41,13,218,6,102,111,114,109,97,116,218,2,105, + 100,114,3,0,0,0,90,4,111,112,101,110,90,6,79,95, + 69,88,67,76,90,7,79,95,67,82,69,65,84,90,8,79, + 95,87,82,79,78,76,89,218,3,95,105,111,218,6,70,105, + 108,101,73,79,218,5,119,114,105,116,101,218,7,114,101,112, + 108,97,99,101,114,40,0,0,0,90,6,117,110,108,105,110, + 107,41,6,114,35,0,0,0,218,4,100,97,116,97,114,42, + 0,0,0,90,8,112,97,116,104,95,116,109,112,90,2,102, + 100,218,4,102,105,108,101,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,13,95,119,114,105,116,101,95,97, + 116,111,109,105,99,99,0,0,0,115,26,0,0,0,0,5, + 24,1,9,1,33,1,3,3,21,1,19,1,20,1,13,1, + 3,1,17,1,13,1,5,1,114,55,0,0,0,99,2,0, + 0,0,0,0,0,0,3,0,0,0,7,0,0,0,67,0, + 0,0,115,95,0,0,0,120,69,0,100,1,0,100,2,0, + 100,3,0,100,4,0,103,4,0,68,93,49,0,125,2,0, + 116,0,0,124,1,0,124,2,0,131,2,0,114,19,0,116, + 1,0,124,0,0,124,2,0,116,2,0,124,1,0,124,2, + 0,131,2,0,131,3,0,1,113,19,0,113,19,0,87,124, + 0,0,106,3,0,106,4,0,124,1,0,106,3,0,131,1, + 0,1,100,5,0,83,41,6,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,119,114,97,112,112,101,114,46,218,10,95,95,109,111,100, + 117,108,101,95,95,218,8,95,95,110,97,109,101,95,95,218, + 12,95,95,113,117,97,108,110,97,109,101,95,95,218,7,95, + 95,100,111,99,95,95,78,41,5,218,7,104,97,115,97,116, + 116,114,218,7,115,101,116,97,116,116,114,218,7,103,101,116, + 97,116,116,114,218,8,95,95,100,105,99,116,95,95,218,6, + 117,112,100,97,116,101,41,3,90,3,110,101,119,90,3,111, + 108,100,114,52,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,5,95,119,114,97,112,121,0,0, + 0,115,8,0,0,0,0,2,25,1,15,1,32,1,114,65, + 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,16,0,0,0,116,0,0, + 116,1,0,131,1,0,124,0,0,131,1,0,83,41,1,78, + 41,2,218,4,116,121,112,101,114,7,0,0,0,41,1,218, + 4,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,11,95,110,101,119,95,109,111,100,117,108, + 101,129,0,0,0,115,2,0,0,0,0,1,114,68,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,64,0,0,0,115,58,0,0,0,101,0,0,90,1, 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, - 0,100,8,0,100,9,0,132,0,0,90,7,0,100,10,0, - 83,40,11,0,0,0,117,16,0,0,0,95,68,117,109,109, - 121,77,111,100,117,108,101,76,111,99,107,117,86,0,0,0, - 65,32,115,105,109,112,108,101,32,95,77,111,100,117,108,101, - 76,111,99,107,32,101,113,117,105,118,97,108,101,110,116,32, - 102,111,114,32,80,121,116,104,111,110,32,98,117,105,108,100, - 115,32,119,105,116,104,111,117,116,10,32,32,32,32,109,117, - 108,116,105,45,116,104,114,101,97,100,105,110,103,32,115,117, - 112,112,111,114,116,46,99,2,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,22,0,0,0, - 124,1,0,124,0,0,95,0,0,100,1,0,124,0,0,95, - 1,0,100,0,0,83,40,2,0,0,0,78,105,0,0,0, - 0,40,2,0,0,0,117,4,0,0,0,110,97,109,101,117, - 5,0,0,0,99,111,117,110,116,40,2,0,0,0,117,4, - 0,0,0,115,101,108,102,117,4,0,0,0,110,97,109,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,8,0,0, - 0,95,95,105,110,105,116,95,95,247,0,0,0,115,4,0, - 0,0,0,1,9,1,117,25,0,0,0,95,68,117,109,109, - 121,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,1,0,0, - 0,3,0,0,0,67,0,0,0,115,19,0,0,0,124,0, - 0,4,106,0,0,100,1,0,55,2,95,0,0,100,2,0, - 83,40,3,0,0,0,78,105,1,0,0,0,84,40,2,0, - 0,0,117,5,0,0,0,99,111,117,110,116,117,4,0,0, - 0,84,114,117,101,40,1,0,0,0,117,4,0,0,0,115, - 101,108,102,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, - 7,0,0,0,97,99,113,117,105,114,101,251,0,0,0,115, - 4,0,0,0,0,1,15,1,117,24,0,0,0,95,68,117, - 109,109,121,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,1,0, - 0,0,3,0,0,0,67,0,0,0,115,49,0,0,0,124, - 0,0,106,0,0,100,1,0,107,2,0,114,30,0,116,1, - 0,100,2,0,131,1,0,130,1,0,110,0,0,124,0,0, - 4,106,0,0,100,3,0,56,2,95,0,0,100,0,0,83, - 40,4,0,0,0,78,105,0,0,0,0,117,31,0,0,0, - 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,108,111,99,107,105, - 1,0,0,0,40,2,0,0,0,117,5,0,0,0,99,111, - 117,110,116,117,12,0,0,0,82,117,110,116,105,109,101,69, - 114,114,111,114,40,1,0,0,0,117,4,0,0,0,115,101, - 108,102,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,7, - 0,0,0,114,101,108,101,97,115,101,255,0,0,0,115,6, - 0,0,0,0,1,15,1,15,1,117,24,0,0,0,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,23,0,0,0, - 100,1,0,124,0,0,106,0,0,116,1,0,124,0,0,131, - 1,0,102,2,0,22,83,40,2,0,0,0,78,117,26,0, - 0,0,95,68,117,109,109,121,77,111,100,117,108,101,76,111, - 99,107,40,37,114,41,32,97,116,32,37,100,40,2,0,0, - 0,117,4,0,0,0,110,97,109,101,117,2,0,0,0,105, - 100,40,1,0,0,0,117,4,0,0,0,115,101,108,102,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,95,114,101,112,114,95,95,4,1,0,0,115,2,0,0, - 0,0,1,117,25,0,0,0,95,68,117,109,109,121,77,111, - 100,117,108,101,76,111,99,107,46,95,95,114,101,112,114,95, - 95,78,40,8,0,0,0,117,8,0,0,0,95,95,110,97, - 109,101,95,95,117,10,0,0,0,95,95,109,111,100,117,108, - 101,95,95,117,12,0,0,0,95,95,113,117,97,108,110,97, - 109,101,95,95,117,7,0,0,0,95,95,100,111,99,95,95, - 117,8,0,0,0,95,95,105,110,105,116,95,95,117,7,0, - 0,0,97,99,113,117,105,114,101,117,7,0,0,0,114,101, - 108,101,97,115,101,117,8,0,0,0,95,95,114,101,112,114, - 95,95,40,1,0,0,0,117,10,0,0,0,95,95,108,111, - 99,97,108,115,95,95,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,16,0,0,0,95,68,117,109,109,121,77,111,100, - 117,108,101,76,111,99,107,243,0,0,0,115,10,0,0,0, - 16,2,6,2,12,4,12,4,12,5,117,16,0,0,0,95, - 68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,99, - 1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,0, - 3,0,0,0,115,142,0,0,0,100,3,0,125,1,0,121, - 17,0,116,1,0,136,0,0,25,131,0,0,125,1,0,87, - 110,18,0,4,116,2,0,107,10,0,114,43,0,1,1,1, - 89,110,1,0,88,124,1,0,100,3,0,107,8,0,114,138, - 0,116,3,0,100,3,0,107,8,0,114,83,0,116,4,0, - 136,0,0,131,1,0,125,1,0,110,12,0,116,5,0,136, - 0,0,131,1,0,125,1,0,135,0,0,102,1,0,100,1, - 0,100,2,0,134,0,0,125,2,0,116,6,0,106,7,0, - 124,1,0,124,2,0,131,2,0,116,1,0,136,0,0,60, - 110,0,0,124,1,0,83,40,4,0,0,0,117,109,0,0, - 0,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,109,111,100,117,108, - 101,32,110,97,109,101,46,10,10,32,32,32,32,83,104,111, - 117,108,100,32,111,110,108,121,32,98,101,32,99,97,108,108, - 101,100,32,119,105,116,104,32,116,104,101,32,105,109,112,111, - 114,116,32,108,111,99,107,32,116,97,107,101,110,46,99,1, - 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,19, - 0,0,0,115,11,0,0,0,116,0,0,136,0,0,61,100, - 0,0,83,40,1,0,0,0,78,40,1,0,0,0,117,13, - 0,0,0,95,109,111,100,117,108,101,95,108,111,99,107,115, - 40,1,0,0,0,117,1,0,0,0,95,40,1,0,0,0, - 117,4,0,0,0,110,97,109,101,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,2,0,0,0,99,98,24,1,0,0,115,2,0,0,0, - 0,1,117,28,0,0,0,95,103,101,116,95,109,111,100,117, + 0,100,8,0,83,41,9,218,13,95,77,97,110,97,103,101, + 82,101,108,111,97,100,122,63,77,97,110,97,103,101,115,32, + 116,104,101,32,112,111,115,115,105,98,108,101,32,99,108,101, + 97,110,45,117,112,32,111,102,32,115,121,115,46,109,111,100, + 117,108,101,115,32,102,111,114,32,108,111,97,100,95,109,111, + 100,117,108,101,40,41,46,99,2,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,13,0,0, + 0,124,1,0,124,0,0,95,0,0,100,0,0,83,41,1, + 78,41,1,218,5,95,110,97,109,101,41,2,218,4,115,101, + 108,102,114,67,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,8,95,95,105,110,105,116,95,95, + 141,0,0,0,115,2,0,0,0,0,1,122,22,95,77,97, + 110,97,103,101,82,101,108,111,97,100,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,25,0,0,0,124,0,0, + 106,0,0,116,1,0,106,2,0,107,6,0,124,0,0,95, + 3,0,100,0,0,83,41,1,78,41,4,114,70,0,0,0, + 114,7,0,0,0,218,7,109,111,100,117,108,101,115,218,10, + 95,105,115,95,114,101,108,111,97,100,41,1,114,71,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,9,95,95,101,110,116,101,114,95,95,144,0,0,0,115, + 2,0,0,0,0,1,122,23,95,77,97,110,97,103,101,82, + 101,108,111,97,100,46,95,95,101,110,116,101,114,95,95,99, + 1,0,0,0,0,0,0,0,2,0,0,0,12,0,0,0, + 71,0,0,0,115,80,0,0,0,116,0,0,100,1,0,100, + 2,0,132,0,0,124,1,0,68,131,1,0,131,1,0,114, + 76,0,124,0,0,106,1,0,12,114,76,0,121,17,0,116, + 2,0,106,3,0,124,0,0,106,4,0,61,87,113,76,0, + 4,116,5,0,107,10,0,114,72,0,1,1,1,89,113,76, + 0,88,110,0,0,100,0,0,83,41,3,78,99,1,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, + 0,115,27,0,0,0,124,0,0,93,17,0,125,1,0,124, + 1,0,100,0,0,107,9,0,86,1,113,3,0,100,0,0, + 83,41,1,78,114,4,0,0,0,41,2,114,22,0,0,0, + 218,3,97,114,103,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,250,9,60,103,101,110,101,120,112,114,62,148, + 0,0,0,115,2,0,0,0,6,0,122,41,95,77,97,110, + 97,103,101,82,101,108,111,97,100,46,95,95,101,120,105,116, + 95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110, + 101,120,112,114,62,41,6,218,3,97,110,121,114,74,0,0, + 0,114,7,0,0,0,114,73,0,0,0,114,70,0,0,0, + 218,8,75,101,121,69,114,114,111,114,41,2,114,71,0,0, + 0,218,4,97,114,103,115,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,8,95,95,101,120,105,116,95,95, + 147,0,0,0,115,10,0,0,0,0,1,35,1,3,1,17, + 1,13,1,122,22,95,77,97,110,97,103,101,82,101,108,111, + 97,100,46,95,95,101,120,105,116,95,95,78,41,7,114,57, + 0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0, + 0,0,114,72,0,0,0,114,75,0,0,0,114,81,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,69,0,0,0,137,0,0,0,115,8, + 0,0,0,12,2,6,2,12,3,12,3,114,69,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,64,0,0,0,115,16,0,0,0,101,0,0,90,1,0, + 100,0,0,90,2,0,100,1,0,83,41,2,218,14,95,68, + 101,97,100,108,111,99,107,69,114,114,111,114,78,41,3,114, + 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,82,0,0,0,162,0,0,0,115,2,0,0,0, + 12,1,114,82,0,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,64,0,0,0,115,82,0,0, + 0,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, + 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, + 4,0,100,5,0,132,0,0,90,5,0,100,6,0,100,7, + 0,132,0,0,90,6,0,100,8,0,100,9,0,132,0,0, + 90,7,0,100,10,0,100,11,0,132,0,0,90,8,0,100, + 12,0,83,41,13,218,11,95,77,111,100,117,108,101,76,111, + 99,107,122,169,65,32,114,101,99,117,114,115,105,118,101,32, + 108,111,99,107,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,119,104,105,99,104,32,105,115,32,97,98,108, + 101,32,116,111,32,100,101,116,101,99,116,32,100,101,97,100, + 108,111,99,107,115,10,32,32,32,32,40,101,46,103,46,32, + 116,104,114,101,97,100,32,49,32,116,114,121,105,110,103,32, + 116,111,32,116,97,107,101,32,108,111,99,107,115,32,65,32, + 116,104,101,110,32,66,44,32,97,110,100,32,116,104,114,101, + 97,100,32,50,32,116,114,121,105,110,103,32,116,111,10,32, + 32,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,70,0,0,0,116,0,0,106,1,0,131,0,0, + 124,0,0,95,2,0,116,0,0,106,1,0,131,0,0,124, + 0,0,95,3,0,124,1,0,124,0,0,95,4,0,100,0, + 0,124,0,0,95,5,0,100,1,0,124,0,0,95,6,0, + 100,1,0,124,0,0,95,7,0,100,0,0,83,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,97,116,101,95,108,111,99,107,218, + 4,108,111,99,107,218,6,119,97,107,101,117,112,114,67,0, + 0,0,218,5,111,119,110,101,114,218,5,99,111,117,110,116, + 218,7,119,97,105,116,101,114,115,41,2,114,71,0,0,0, + 114,67,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,72,0,0,0,172,0,0,0,115,12,0, + 0,0,0,1,15,1,15,1,9,1,9,1,9,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,87,0,0,0,116,0, + 0,106,1,0,131,0,0,125,1,0,124,0,0,106,2,0, + 125,2,0,120,59,0,116,3,0,106,4,0,124,2,0,131, + 1,0,125,3,0,124,3,0,100,0,0,107,8,0,114,55, + 0,100,1,0,83,124,3,0,106,2,0,125,2,0,124,2, + 0,124,1,0,107,2,0,114,24,0,100,2,0,83,113,24, + 0,100,0,0,83,41,3,78,70,84,41,5,114,85,0,0, + 0,218,9,103,101,116,95,105,100,101,110,116,114,88,0,0, + 0,218,12,95,98,108,111,99,107,105,110,103,95,111,110,218, + 3,103,101,116,41,4,114,71,0,0,0,218,2,109,101,218, + 3,116,105,100,114,86,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,12,104,97,115,95,100,101, + 97,100,108,111,99,107,180,0,0,0,115,18,0,0,0,0, + 2,12,1,9,1,3,1,15,1,12,1,4,1,9,1,12, + 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,17,0,0,0,67,0,0,0, + 115,214,0,0,0,116,0,0,106,1,0,131,0,0,125,1, + 0,124,0,0,116,2,0,124,1,0,60,122,177,0,120,170, + 0,124,0,0,106,3,0,143,130,0,1,124,0,0,106,4, + 0,100,1,0,107,2,0,115,68,0,124,0,0,106,5,0, + 124,1,0,107,2,0,114,96,0,124,1,0,124,0,0,95, + 5,0,124,0,0,4,106,4,0,100,2,0,55,2,95,4, + 0,100,3,0,83,124,0,0,106,6,0,131,0,0,114,127, + 0,116,7,0,100,4,0,124,0,0,22,131,1,0,130,1, + 0,110,0,0,124,0,0,106,8,0,106,9,0,100,5,0, + 131,1,0,114,163,0,124,0,0,4,106,10,0,100,2,0, + 55,2,95,10,0,110,0,0,87,100,6,0,81,88,124,0, + 0,106,8,0,106,9,0,131,0,0,1,124,0,0,106,8, + 0,106,11,0,131,0,0,1,113,28,0,87,100,6,0,116, + 2,0,124,1,0,61,88,100,6,0,83,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,100,117,108,101,32,108,111,99,107,46, + 32,32,73,102,32,97,32,112,111,116,101,110,116,105,97,108, + 32,100,101,97,100,108,111,99,107,32,105,115,32,100,101,116, + 101,99,116,101,100,44,10,32,32,32,32,32,32,32,32,97, + 32,95,68,101,97,100,108,111,99,107,69,114,114,111,114,32, + 105,115,32,114,97,105,115,101,100,46,10,32,32,32,32,32, + 32,32,32,79,116,104,101,114,119,105,115,101,44,32,116,104, + 101,32,108,111,99,107,32,105,115,32,97,108,119,97,121,115, + 32,97,99,113,117,105,114,101,100,32,97,110,100,32,84,114, + 117,101,32,105,115,32,114,101,116,117,114,110,101,100,46,10, + 32,32,32,32,32,32,32,32,114,84,0,0,0,114,29,0, + 0,0,84,122,23,100,101,97,100,108,111,99,107,32,100,101, + 116,101,99,116,101,100,32,98,121,32,37,114,70,78,41,12, + 114,85,0,0,0,114,91,0,0,0,114,92,0,0,0,114, + 86,0,0,0,114,89,0,0,0,114,88,0,0,0,114,96, + 0,0,0,114,82,0,0,0,114,87,0,0,0,218,7,97, + 99,113,117,105,114,101,114,90,0,0,0,218,7,114,101,108, + 101,97,115,101,41,2,114,71,0,0,0,114,95,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 97,0,0,0,192,0,0,0,115,32,0,0,0,0,6,12, + 1,10,1,3,1,3,1,10,1,30,1,9,1,15,1,4, + 1,12,1,19,1,18,1,24,2,13,1,20,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,165,0,0,0,116,0,0,106, + 1,0,131,0,0,125,1,0,124,0,0,106,2,0,143,138, + 0,1,124,0,0,106,3,0,124,1,0,107,3,0,114,52, + 0,116,4,0,100,1,0,131,1,0,130,1,0,110,0,0, + 124,0,0,106,5,0,100,2,0,107,4,0,115,73,0,116, + 6,0,130,1,0,124,0,0,4,106,5,0,100,3,0,56, + 2,95,5,0,124,0,0,106,5,0,100,2,0,107,2,0, + 114,155,0,100,0,0,124,0,0,95,3,0,124,0,0,106, + 7,0,114,155,0,124,0,0,4,106,7,0,100,3,0,56, + 2,95,7,0,124,0,0,106,8,0,106,9,0,131,0,0, + 1,113,155,0,110,0,0,87,100,0,0,81,88,100,0,0, + 83,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,108,111,99,107,114,84,0,0,0,114,29,0,0,0,41, + 10,114,85,0,0,0,114,91,0,0,0,114,86,0,0,0, + 114,88,0,0,0,218,12,82,117,110,116,105,109,101,69,114, + 114,111,114,114,89,0,0,0,218,14,65,115,115,101,114,116, + 105,111,110,69,114,114,111,114,114,90,0,0,0,114,87,0, + 0,0,114,98,0,0,0,41,2,114,71,0,0,0,114,95, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,98,0,0,0,217,0,0,0,115,22,0,0,0, + 0,1,12,1,10,1,15,1,15,1,21,1,15,1,15,1, + 9,1,9,1,15,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,25,0,0,0,100,1,0,106,0,0,124,0,0,106,1, + 0,116,2,0,124,0,0,131,1,0,131,2,0,83,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,114,47,0,0, + 0,114,67,0,0,0,114,48,0,0,0,41,1,114,71,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,8,95,95,114,101,112,114,95,95,230,0,0,0,115, + 2,0,0,0,0,1,122,20,95,77,111,100,117,108,101,76, + 111,99,107,46,95,95,114,101,112,114,95,95,78,41,9,114, + 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,59, + 0,0,0,114,72,0,0,0,114,96,0,0,0,114,97,0, + 0,0,114,98,0,0,0,114,101,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,83,0,0,0,166,0,0,0,115,12,0,0,0,12,4, + 6,2,12,8,12,12,12,25,12,13,114,83,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 64,0,0,0,115,70,0,0,0,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, + 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, + 90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100, + 8,0,100,9,0,132,0,0,90,7,0,100,10,0,83,41, + 11,218,16,95,68,117,109,109,121,77,111,100,117,108,101,76, + 111,99,107,122,86,65,32,115,105,109,112,108,101,32,95,77, + 111,100,117,108,101,76,111,99,107,32,101,113,117,105,118,97, + 108,101,110,116,32,102,111,114,32,80,121,116,104,111,110,32, + 98,117,105,108,100,115,32,119,105,116,104,111,117,116,10,32, + 32,32,32,109,117,108,116,105,45,116,104,114,101,97,100,105, + 110,103,32,115,117,112,112,111,114,116,46,99,2,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,22,0,0,0,124,1,0,124,0,0,95,0,0,100,1, + 0,124,0,0,95,1,0,100,0,0,83,41,2,78,114,84, + 0,0,0,41,2,114,67,0,0,0,114,89,0,0,0,41, + 2,114,71,0,0,0,114,67,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,72,0,0,0,238, + 0,0,0,115,4,0,0,0,0,1,9,1,122,25,95,68, + 117,109,109,121,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, + 1,0,0,0,3,0,0,0,67,0,0,0,115,19,0,0, + 0,124,0,0,4,106,0,0,100,1,0,55,2,95,0,0, + 100,2,0,83,41,3,78,114,29,0,0,0,84,41,1,114, + 89,0,0,0,41,1,114,71,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,97,0,0,0,242, + 0,0,0,115,4,0,0,0,0,1,15,1,122,24,95,68, + 117,109,109,121,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,1, + 0,0,0,3,0,0,0,67,0,0,0,115,49,0,0,0, + 124,0,0,106,0,0,100,1,0,107,2,0,114,30,0,116, + 1,0,100,2,0,131,1,0,130,1,0,110,0,0,124,0, + 0,4,106,0,0,100,3,0,56,2,95,0,0,100,0,0, + 83,41,4,78,114,84,0,0,0,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,108,111,99,107,114,29,0,0,0,41, + 2,114,89,0,0,0,114,99,0,0,0,41,1,114,71,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,98,0,0,0,246,0,0,0,115,6,0,0,0,0, + 1,15,1,15,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,25,0,0,0,100,1,0,106,0,0,124, + 0,0,106,1,0,116,2,0,124,0,0,131,1,0,131,2, + 0,83,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,47,0,0,0,114,67,0,0,0,114, + 48,0,0,0,41,1,114,71,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,101,0,0,0,251, + 0,0,0,115,2,0,0,0,0,1,122,25,95,68,117,109, + 109,121,77,111,100,117,108,101,76,111,99,107,46,95,95,114, + 101,112,114,95,95,78,41,8,114,57,0,0,0,114,56,0, + 0,0,114,58,0,0,0,114,59,0,0,0,114,72,0,0, + 0,114,97,0,0,0,114,98,0,0,0,114,101,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,102,0,0,0,234,0,0,0,115,10,0, + 0,0,12,2,6,2,12,4,12,4,12,5,114,102,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,64,0,0,0,115,52,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,100,2,0,132,0,0, + 90,3,0,100,3,0,100,4,0,132,0,0,90,4,0,100, + 5,0,100,6,0,132,0,0,90,5,0,100,7,0,83,41, + 8,218,18,95,77,111,100,117,108,101,76,111,99,107,77,97, + 110,97,103,101,114,99,2,0,0,0,0,0,0,0,2,0, + 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124, + 1,0,124,0,0,95,0,0,100,0,0,124,0,0,95,1, + 0,100,0,0,83,41,1,78,41,2,114,70,0,0,0,218, + 5,95,108,111,99,107,41,2,114,71,0,0,0,114,67,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,72,0,0,0,1,1,0,0,115,4,0,0,0,0, + 1,9,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,53,0,0,0,122,22,0,116,0,0, + 124,0,0,106,1,0,131,1,0,124,0,0,95,2,0,87, + 100,0,0,116,3,0,106,4,0,131,0,0,1,88,124,0, + 0,106,2,0,106,5,0,131,0,0,1,100,0,0,83,41, + 1,78,41,6,218,16,95,103,101,116,95,109,111,100,117,108, + 101,95,108,111,99,107,114,70,0,0,0,114,104,0,0,0, + 218,4,95,105,109,112,218,12,114,101,108,101,97,115,101,95, + 108,111,99,107,114,97,0,0,0,41,1,114,71,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 75,0,0,0,5,1,0,0,115,8,0,0,0,0,1,3, + 1,22,2,11,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,17,0,0,0,124,0,0, + 106,0,0,106,1,0,131,0,0,1,100,0,0,83,41,1, + 78,41,2,114,104,0,0,0,114,98,0,0,0,41,3,114, + 71,0,0,0,114,80,0,0,0,218,6,107,119,97,114,103, + 115,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,81,0,0,0,12,1,0,0,115,2,0,0,0,0,1, + 122,27,95,77,111,100,117,108,101,76,111,99,107,77,97,110, + 97,103,101,114,46,95,95,101,120,105,116,95,95,78,41,6, + 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, + 72,0,0,0,114,75,0,0,0,114,81,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,103,0,0,0,255,0,0,0,115,6,0,0,0, + 12,2,12,4,12,7,114,103,0,0,0,99,1,0,0,0, + 0,0,0,0,3,0,0,0,11,0,0,0,3,0,0,0, + 115,142,0,0,0,100,1,0,125,1,0,121,17,0,116,0, + 0,136,0,0,25,131,0,0,125,1,0,87,110,18,0,4, + 116,1,0,107,10,0,114,43,0,1,1,1,89,110,1,0, + 88,124,1,0,100,1,0,107,8,0,114,138,0,116,2,0, + 100,1,0,107,8,0,114,83,0,116,3,0,136,0,0,131, + 1,0,125,1,0,110,12,0,116,4,0,136,0,0,131,1, + 0,125,1,0,135,0,0,102,1,0,100,2,0,100,3,0, + 134,0,0,125,2,0,116,5,0,106,6,0,124,1,0,124, + 2,0,131,2,0,116,0,0,136,0,0,60,110,0,0,124, + 1,0,83,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,109,111,100,117,108,101,32,110,97,109,101,46,10,10,32, + 32,32,32,83,104,111,117,108,100,32,111,110,108,121,32,98, + 101,32,99,97,108,108,101,100,32,119,105,116,104,32,116,104, + 101,32,105,109,112,111,114,116,32,108,111,99,107,32,116,97, + 107,101,110,46,78,99,1,0,0,0,0,0,0,0,1,0, + 0,0,2,0,0,0,19,0,0,0,115,11,0,0,0,116, + 0,0,136,0,0,61,100,0,0,83,41,1,78,41,1,218, + 13,95,109,111,100,117,108,101,95,108,111,99,107,115,41,1, + 114,36,0,0,0,41,1,114,67,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,2,99,98,32,1,0,0,115,2, + 0,0,0,0,1,122,28,95,103,101,116,95,109,111,100,117, 108,101,95,108,111,99,107,46,60,108,111,99,97,108,115,62, - 46,99,98,78,40,8,0,0,0,117,4,0,0,0,78,111, - 110,101,117,13,0,0,0,95,109,111,100,117,108,101,95,108, - 111,99,107,115,117,8,0,0,0,75,101,121,69,114,114,111, - 114,117,7,0,0,0,95,116,104,114,101,97,100,117,16,0, - 0,0,95,68,117,109,109,121,77,111,100,117,108,101,76,111, - 99,107,117,11,0,0,0,95,77,111,100,117,108,101,76,111, - 99,107,117,8,0,0,0,95,119,101,97,107,114,101,102,117, - 3,0,0,0,114,101,102,40,3,0,0,0,117,4,0,0, - 0,110,97,109,101,117,4,0,0,0,108,111,99,107,117,2, - 0,0,0,99,98,40,0,0,0,0,40,1,0,0,0,117, - 4,0,0,0,110,97,109,101,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,16,0,0,0,95, - 103,101,116,95,109,111,100,117,108,101,95,108,111,99,107,10, - 1,0,0,115,24,0,0,0,0,4,6,1,3,1,17,1, - 13,1,5,1,12,1,12,1,15,2,12,1,18,2,25,1, - 117,16,0,0,0,95,103,101,116,95,109,111,100,117,108,101, - 95,108,111,99,107,99,1,0,0,0,0,0,0,0,2,0, - 0,0,11,0,0,0,67,0,0,0,115,71,0,0,0,116, - 0,0,124,0,0,131,1,0,125,1,0,116,1,0,106,2, - 0,131,0,0,1,121,14,0,124,1,0,106,3,0,131,0, - 0,1,87,110,18,0,4,116,4,0,107,10,0,114,56,0, - 1,1,1,89,110,11,0,88,124,1,0,106,5,0,131,0, - 0,1,100,1,0,83,40,2,0,0,0,117,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,113,117,105,114,101,115,32,116,104,101, - 110,32,114,101,108,101,97,115,101,32,116,104,101,10,32,32, - 32,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,109,111,100,117,108,101, - 32,110,97,109,101,46,10,32,32,32,32,84,104,105,115,32, - 105,115,32,117,115,101,100,32,116,111,32,101,110,115,117,114, - 101,32,97,32,109,111,100,117,108,101,32,105,115,32,99,111, - 109,112,108,101,116,101,108,121,32,105,110,105,116,105,97,108, - 105,122,101,100,44,32,105,110,32,116,104,101,10,32,32,32, - 32,101,118,101,110,116,32,105,116,32,105,115,32,98,101,105, - 110,103,32,105,109,112,111,114,116,101,100,32,98,121,32,97, - 110,111,116,104,101,114,32,116,104,114,101,97,100,46,10,10, - 32,32,32,32,83,104,111,117,108,100,32,111,110,108,121,32, - 98,101,32,99,97,108,108,101,100,32,119,105,116,104,32,116, - 104,101,32,105,109,112,111,114,116,32,108,111,99,107,32,116, - 97,107,101,110,46,78,40,6,0,0,0,117,16,0,0,0, - 95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107, - 117,4,0,0,0,95,105,109,112,117,12,0,0,0,114,101, - 108,101,97,115,101,95,108,111,99,107,117,7,0,0,0,97, - 99,113,117,105,114,101,117,14,0,0,0,95,68,101,97,100, - 108,111,99,107,69,114,114,111,114,117,7,0,0,0,114,101, - 108,101,97,115,101,40,2,0,0,0,117,4,0,0,0,110, - 97,109,101,117,4,0,0,0,108,111,99,107,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,19,0,0,0,95,108,111, - 99,107,95,117,110,108,111,99,107,95,109,111,100,117,108,101, - 29,1,0,0,115,14,0,0,0,0,7,12,1,10,1,3, - 1,14,1,13,3,5,2,117,19,0,0,0,95,108,111,99, - 107,95,117,110,108,111,99,107,95,109,111,100,117,108,101,99, - 1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 79,0,0,0,115,13,0,0,0,124,0,0,124,1,0,124, - 2,0,142,0,0,83,40,1,0,0,0,117,46,1,0,0, - 114,101,109,111,118,101,95,105,109,112,111,114,116,108,105,98, - 95,102,114,97,109,101,115,32,105,110,32,105,109,112,111,114, - 116,46,99,32,119,105,108,108,32,97,108,119,97,121,115,32, - 114,101,109,111,118,101,32,115,101,113,117,101,110,99,101,115, - 10,32,32,32,32,111,102,32,105,109,112,111,114,116,108,105, - 98,32,102,114,97,109,101,115,32,116,104,97,116,32,101,110, - 100,32,119,105,116,104,32,97,32,99,97,108,108,32,116,111, - 32,116,104,105,115,32,102,117,110,99,116,105,111,110,10,10, - 32,32,32,32,85,115,101,32,105,116,32,105,110,115,116,101, - 97,100,32,111,102,32,97,32,110,111,114,109,97,108,32,99, - 97,108,108,32,105,110,32,112,108,97,99,101,115,32,119,104, - 101,114,101,32,105,110,99,108,117,100,105,110,103,32,116,104, - 101,32,105,109,112,111,114,116,108,105,98,10,32,32,32,32, - 102,114,97,109,101,115,32,105,110,116,114,111,100,117,99,101, - 115,32,117,110,119,97,110,116,101,100,32,110,111,105,115,101, - 32,105,110,116,111,32,116,104,101,32,116,114,97,99,101,98, - 97,99,107,32,40,101,46,103,46,32,119,104,101,110,32,101, - 120,101,99,117,116,105,110,103,10,32,32,32,32,109,111,100, - 117,108,101,32,99,111,100,101,41,10,32,32,32,32,40,0, - 0,0,0,40,3,0,0,0,117,1,0,0,0,102,117,4, - 0,0,0,97,114,103,115,117,4,0,0,0,107,119,100,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,25,0,0, - 0,95,99,97,108,108,95,119,105,116,104,95,102,114,97,109, - 101,115,95,114,101,109,111,118,101,100,49,1,0,0,115,2, - 0,0,0,0,8,117,25,0,0,0,95,99,97,108,108,95, - 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, - 118,101,100,105,158,12,0,0,117,1,0,0,0,13,105,16, - 0,0,0,117,1,0,0,0,10,105,24,0,0,0,99,1, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,99, - 0,0,0,115,29,0,0,0,124,0,0,93,19,0,125,1, - 0,116,0,0,124,1,0,63,100,0,0,64,86,1,113,3, - 0,100,1,0,83,40,2,0,0,0,105,255,0,0,0,78, - 40,1,0,0,0,117,17,0,0,0,95,82,65,87,95,77, - 65,71,73,67,95,78,85,77,66,69,82,40,2,0,0,0, - 117,2,0,0,0,46,48,117,1,0,0,0,110,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,9,0,0,0,60,103, - 101,110,101,120,112,114,62,150,1,0,0,115,2,0,0,0, - 6,0,117,9,0,0,0,60,103,101,110,101,120,112,114,62, - 105,0,0,0,0,105,25,0,0,0,105,8,0,0,0,117, - 11,0,0,0,95,95,112,121,99,97,99,104,101,95,95,117, - 3,0,0,0,46,112,121,117,4,0,0,0,46,112,121,99, - 117,4,0,0,0,46,112,121,111,99,2,0,0,0,0,0, - 0,0,11,0,0,0,6,0,0,0,67,0,0,0,115,180, - 0,0,0,124,1,0,100,5,0,107,8,0,114,25,0,116, - 1,0,106,2,0,106,3,0,12,110,3,0,124,1,0,125, - 2,0,124,2,0,114,46,0,116,4,0,125,3,0,110,6, - 0,116,5,0,125,3,0,116,6,0,124,0,0,131,1,0, - 92,2,0,125,4,0,125,5,0,124,5,0,106,7,0,100, - 1,0,131,1,0,92,3,0,125,6,0,125,7,0,125,8, - 0,116,1,0,106,8,0,106,9,0,125,9,0,124,9,0, - 100,5,0,107,8,0,114,133,0,116,10,0,100,2,0,131, - 1,0,130,1,0,110,0,0,100,3,0,106,11,0,124,6, - 0,124,7,0,124,9,0,124,3,0,100,4,0,25,103,4, - 0,131,1,0,125,10,0,116,12,0,124,4,0,116,13,0, - 124,10,0,131,3,0,83,40,6,0,0,0,117,244,1,0, - 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, - 116,111,32,97,32,46,112,121,32,102,105,108,101,44,32,114, - 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, - 111,32,105,116,115,32,46,112,121,99,47,46,112,121,111,32, - 102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,46, - 112,121,32,102,105,108,101,32,100,111,101,115,32,110,111,116, - 32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32, - 116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117, - 114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,32, - 116,104,101,10,32,32,32,32,46,112,121,99,47,46,112,121, - 111,32,102,105,108,101,32,99,97,108,99,117,108,97,116,101, - 100,32,97,115,32,105,102,32,116,104,101,32,46,112,121,32, - 102,105,108,101,32,119,101,114,101,32,105,109,112,111,114,116, - 101,100,46,32,32,84,104,101,32,101,120,116,101,110,115,105, - 111,110,10,32,32,32,32,119,105,108,108,32,98,101,32,46, - 112,121,99,32,117,110,108,101,115,115,32,115,121,115,46,102, - 108,97,103,115,46,111,112,116,105,109,105,122,101,32,105,115, - 32,110,111,110,45,122,101,114,111,44,32,116,104,101,110,32, - 105,116,32,119,105,108,108,32,98,101,32,46,112,121,111,46, - 10,10,32,32,32,32,73,102,32,100,101,98,117,103,95,111, - 118,101,114,114,105,100,101,32,105,115,32,110,111,116,32,78, - 111,110,101,44,32,116,104,101,110,32,105,116,32,109,117,115, - 116,32,98,101,32,97,32,98,111,111,108,101,97,110,32,97, - 110,100,32,105,115,32,117,115,101,100,32,105,110,10,32,32, - 32,32,112,108,97,99,101,32,111,102,32,115,121,115,46,102, - 108,97,103,115,46,111,112,116,105,109,105,122,101,46,10,10, - 32,32,32,32,73,102,32,115,121,115,46,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, - 116,97,103,32,105,115,32,78,111,110,101,32,116,104,101,110, - 32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,10, - 10,32,32,32,32,117,1,0,0,0,46,117,36,0,0,0, - 115,121,115,46,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,46,99,97,99,104,101,95,116,97,103,32,105,115,32, - 78,111,110,101,117,0,0,0,0,105,0,0,0,0,78,40, - 14,0,0,0,117,4,0,0,0,78,111,110,101,117,3,0, - 0,0,115,121,115,117,5,0,0,0,102,108,97,103,115,117, - 8,0,0,0,111,112,116,105,109,105,122,101,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,11,0,0,0,95,112,97, - 116,104,95,115,112,108,105,116,117,9,0,0,0,112,97,114, - 116,105,116,105,111,110,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,19,0,0,0,78,111,116,73, - 109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,117, - 4,0,0,0,106,111,105,110,117,10,0,0,0,95,112,97, - 116,104,95,106,111,105,110,117,8,0,0,0,95,80,89,67, - 65,67,72,69,40,11,0,0,0,117,4,0,0,0,112,97, - 116,104,117,14,0,0,0,100,101,98,117,103,95,111,118,101, - 114,114,105,100,101,117,5,0,0,0,100,101,98,117,103,117, - 8,0,0,0,115,117,102,102,105,120,101,115,117,4,0,0, - 0,104,101,97,100,117,4,0,0,0,116,97,105,108,117,13, - 0,0,0,98,97,115,101,95,102,105,108,101,110,97,109,101, - 117,3,0,0,0,115,101,112,117,1,0,0,0,95,117,3, - 0,0,0,116,97,103,117,8,0,0,0,102,105,108,101,110, - 97,109,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, - 17,0,0,0,99,97,99,104,101,95,102,114,111,109,95,115, - 111,117,114,99,101,159,1,0,0,115,22,0,0,0,0,13, - 31,1,6,1,9,2,6,1,18,1,24,1,12,1,12,1, - 15,1,31,1,117,17,0,0,0,99,97,99,104,101,95,102, - 114,111,109,95,115,111,117,114,99,101,99,1,0,0,0,0, - 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, - 193,0,0,0,116,0,0,106,1,0,106,2,0,100,7,0, - 107,8,0,114,33,0,116,4,0,100,1,0,131,1,0,130, - 1,0,110,0,0,116,5,0,124,0,0,131,1,0,92,2, - 0,125,1,0,125,2,0,116,5,0,124,1,0,131,1,0, - 92,2,0,125,1,0,125,3,0,124,3,0,116,6,0,107, - 3,0,114,108,0,116,7,0,100,2,0,106,8,0,116,6, - 0,124,0,0,131,2,0,131,1,0,130,1,0,110,0,0, - 124,2,0,106,9,0,100,3,0,131,1,0,100,4,0,107, - 3,0,114,153,0,116,7,0,100,5,0,106,8,0,124,2, - 0,131,1,0,131,1,0,130,1,0,110,0,0,124,2,0, - 106,10,0,100,3,0,131,1,0,100,6,0,25,125,4,0, - 116,11,0,124,1,0,124,4,0,116,12,0,100,6,0,25, - 23,131,2,0,83,40,8,0,0,0,117,121,1,0,0,71, - 105,118,101,110,32,116,104,101,32,112,97,116,104,32,116,111, - 32,97,32,46,112,121,99,46,47,46,112,121,111,32,102,105, - 108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,112, - 97,116,104,32,116,111,32,105,116,115,32,46,112,121,32,102, - 105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,112, - 121,99,47,46,112,121,111,32,102,105,108,101,32,100,111,101, - 115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120, - 105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,121, - 32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,116, - 104,32,116,111,10,32,32,32,32,116,104,101,32,46,112,121, - 32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,100, - 32,116,111,32,99,111,114,114,101,115,112,111,110,100,32,116, - 111,32,116,104,101,32,46,112,121,99,47,46,112,121,111,32, - 102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,100, - 111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,102, - 111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,32, - 102,111,114,109,97,116,44,32,86,97,108,117,101,69,114,114, - 111,114,32,119,105,108,108,32,98,101,32,114,97,105,115,101, - 100,46,32,73,102,10,32,32,32,32,115,121,115,46,105,109, - 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, - 104,101,95,116,97,103,32,105,115,32,78,111,110,101,32,116, - 104,101,110,32,78,111,116,73,109,112,108,101,109,101,110,116, - 101,100,69,114,114,111,114,32,105,115,32,114,97,105,115,101, - 100,46,10,10,32,32,32,32,117,36,0,0,0,115,121,115, - 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46, - 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110, - 101,117,37,0,0,0,123,125,32,110,111,116,32,98,111,116, - 116,111,109,45,108,101,118,101,108,32,100,105,114,101,99,116, - 111,114,121,32,105,110,32,123,33,114,125,117,1,0,0,0, - 46,105,2,0,0,0,117,28,0,0,0,101,120,112,101,99, - 116,101,100,32,111,110,108,121,32,50,32,100,111,116,115,32, - 105,110,32,123,33,114,125,105,0,0,0,0,78,40,13,0, - 0,0,117,3,0,0,0,115,121,115,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,4,0,0,0, - 78,111,110,101,117,19,0,0,0,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,117,11,0,0, - 0,95,112,97,116,104,95,115,112,108,105,116,117,8,0,0, - 0,95,80,89,67,65,67,72,69,117,10,0,0,0,86,97, - 108,117,101,69,114,114,111,114,117,6,0,0,0,102,111,114, - 109,97,116,117,5,0,0,0,99,111,117,110,116,117,9,0, - 0,0,112,97,114,116,105,116,105,111,110,117,10,0,0,0, - 95,112,97,116,104,95,106,111,105,110,117,15,0,0,0,83, - 79,85,82,67,69,95,83,85,70,70,73,88,69,83,40,5, - 0,0,0,117,4,0,0,0,112,97,116,104,117,4,0,0, - 0,104,101,97,100,117,16,0,0,0,112,121,99,97,99,104, - 101,95,102,105,108,101,110,97,109,101,117,7,0,0,0,112, - 121,99,97,99,104,101,117,13,0,0,0,98,97,115,101,95, - 102,105,108,101,110,97,109,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,17,0,0,0,115,111,117,114,99,101,95, - 102,114,111,109,95,99,97,99,104,101,186,1,0,0,115,24, - 0,0,0,0,9,18,1,15,1,18,1,18,1,12,1,9, - 1,18,1,21,1,9,1,15,1,19,1,117,17,0,0,0, - 115,111,117,114,99,101,95,102,114,111,109,95,99,97,99,104, - 101,99,1,0,0,0,0,0,0,0,5,0,0,0,13,0, - 0,0,67,0,0,0,115,164,0,0,0,116,0,0,124,0, - 0,131,1,0,100,1,0,107,2,0,114,22,0,100,6,0, - 83,124,0,0,106,2,0,100,2,0,131,1,0,92,3,0, - 125,1,0,125,2,0,125,3,0,124,1,0,12,115,81,0, - 124,3,0,106,3,0,131,0,0,100,7,0,100,8,0,133, - 2,0,25,100,5,0,107,3,0,114,85,0,124,0,0,83, - 121,16,0,116,4,0,124,0,0,131,1,0,125,4,0,87, - 110,40,0,4,116,5,0,116,6,0,102,2,0,107,10,0, - 114,143,0,1,1,1,124,0,0,100,6,0,100,9,0,133, - 2,0,25,125,4,0,89,110,1,0,88,116,7,0,124,4, - 0,131,1,0,114,160,0,124,4,0,83,124,0,0,83,40, - 10,0,0,0,117,188,0,0,0,67,111,110,118,101,114,116, - 32,97,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 32,112,97,116,104,32,116,111,32,97,32,115,111,117,114,99, - 101,32,112,97,116,104,32,40,105,102,32,112,111,115,115,105, - 98,108,101,41,46,10,10,32,32,32,32,84,104,105,115,32, - 102,117,110,99,116,105,111,110,32,101,120,105,115,116,115,32, - 112,117,114,101,108,121,32,102,111,114,32,98,97,99,107,119, - 97,114,100,115,45,99,111,109,112,97,116,105,98,105,108,105, - 116,121,32,102,111,114,10,32,32,32,32,80,121,73,109,112, - 111,114,116,95,69,120,101,99,67,111,100,101,77,111,100,117, - 108,101,87,105,116,104,70,105,108,101,110,97,109,101,115,40, - 41,32,105,110,32,116,104,101,32,67,32,65,80,73,46,10, - 10,32,32,32,32,105,0,0,0,0,117,1,0,0,0,46, - 105,3,0,0,0,105,1,0,0,0,117,2,0,0,0,112, - 121,78,105,253,255,255,255,105,255,255,255,255,105,255,255,255, - 255,40,8,0,0,0,117,3,0,0,0,108,101,110,117,4, - 0,0,0,78,111,110,101,117,10,0,0,0,114,112,97,114, - 116,105,116,105,111,110,117,5,0,0,0,108,111,119,101,114, - 117,17,0,0,0,115,111,117,114,99,101,95,102,114,111,109, - 95,99,97,99,104,101,117,19,0,0,0,78,111,116,73,109, - 112,108,101,109,101,110,116,101,100,69,114,114,111,114,117,10, - 0,0,0,86,97,108,117,101,69,114,114,111,114,117,12,0, - 0,0,95,112,97,116,104,95,105,115,102,105,108,101,40,5, - 0,0,0,117,13,0,0,0,98,121,116,101,99,111,100,101, - 95,112,97,116,104,117,4,0,0,0,114,101,115,116,117,1, - 0,0,0,95,117,9,0,0,0,101,120,116,101,110,115,105, - 111,110,117,11,0,0,0,115,111,117,114,99,101,95,112,97, - 116,104,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,15, - 0,0,0,95,103,101,116,95,115,111,117,114,99,101,102,105, - 108,101,209,1,0,0,115,20,0,0,0,0,7,18,1,4, - 1,24,1,35,1,4,1,3,1,16,1,19,1,21,1,117, - 15,0,0,0,95,103,101,116,95,115,111,117,114,99,101,102, - 105,108,101,117,9,0,0,0,118,101,114,98,111,115,105,116, - 121,105,1,0,0,0,99,1,0,0,0,1,0,0,0,3, - 0,0,0,4,0,0,0,71,0,0,0,115,81,0,0,0, - 116,0,0,106,1,0,106,2,0,124,1,0,107,5,0,114, - 77,0,124,0,0,106,3,0,100,6,0,131,1,0,115,46, - 0,100,3,0,124,0,0,23,125,0,0,110,0,0,116,4, - 0,124,0,0,106,5,0,124,2,0,140,0,0,100,4,0, - 116,0,0,106,6,0,131,1,1,1,110,0,0,100,5,0, - 83,40,7,0,0,0,117,61,0,0,0,80,114,105,110,116, - 32,116,104,101,32,109,101,115,115,97,103,101,32,116,111,32, - 115,116,100,101,114,114,32,105,102,32,45,118,47,80,89,84, - 72,79,78,86,69,82,66,79,83,69,32,105,115,32,116,117, - 114,110,101,100,32,111,110,46,117,1,0,0,0,35,117,7, - 0,0,0,105,109,112,111,114,116,32,117,2,0,0,0,35, - 32,117,4,0,0,0,102,105,108,101,78,40,2,0,0,0, - 117,1,0,0,0,35,117,7,0,0,0,105,109,112,111,114, - 116,32,40,7,0,0,0,117,3,0,0,0,115,121,115,117, - 5,0,0,0,102,108,97,103,115,117,7,0,0,0,118,101, - 114,98,111,115,101,117,10,0,0,0,115,116,97,114,116,115, - 119,105,116,104,117,5,0,0,0,112,114,105,110,116,117,6, - 0,0,0,102,111,114,109,97,116,117,6,0,0,0,115,116, - 100,101,114,114,40,3,0,0,0,117,7,0,0,0,109,101, - 115,115,97,103,101,117,9,0,0,0,118,101,114,98,111,115, - 105,116,121,117,4,0,0,0,97,114,103,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,16,0,0,0,95,118,101, - 114,98,111,115,101,95,109,101,115,115,97,103,101,228,1,0, - 0,115,8,0,0,0,0,2,18,1,15,1,13,1,117,16, - 0,0,0,95,118,101,114,98,111,115,101,95,109,101,115,115, - 97,103,101,99,1,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,3,0,0,0,115,35,0,0,0,135,0,0, - 102,1,0,100,1,0,100,2,0,134,0,0,125,1,0,116, - 0,0,124,1,0,136,0,0,131,2,0,1,124,1,0,83, - 40,3,0,0,0,117,39,0,0,0,83,101,116,32,95,95, - 112,97,99,107,97,103,101,95,95,32,111,110,32,116,104,101, - 32,114,101,116,117,114,110,101,100,32,109,111,100,117,108,101, - 46,99,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,31,0,0,0,115,101,0,0,0,136,0,0,124,0, - 0,124,1,0,142,0,0,125,2,0,116,0,0,124,2,0, - 100,1,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 97,0,124,2,0,106,2,0,124,2,0,95,3,0,116,4, - 0,124,2,0,100,2,0,131,2,0,115,97,0,124,2,0, - 106,3,0,106,5,0,100,3,0,131,1,0,100,4,0,25, - 124,2,0,95,3,0,113,97,0,110,0,0,124,2,0,83, - 40,5,0,0,0,78,117,11,0,0,0,95,95,112,97,99, - 107,97,103,101,95,95,117,8,0,0,0,95,95,112,97,116, - 104,95,95,117,1,0,0,0,46,105,0,0,0,0,40,6, - 0,0,0,117,7,0,0,0,103,101,116,97,116,116,114,117, - 4,0,0,0,78,111,110,101,117,8,0,0,0,95,95,110, - 97,109,101,95,95,117,11,0,0,0,95,95,112,97,99,107, - 97,103,101,95,95,117,7,0,0,0,104,97,115,97,116,116, - 114,117,10,0,0,0,114,112,97,114,116,105,116,105,111,110, - 40,3,0,0,0,117,4,0,0,0,97,114,103,115,117,6, - 0,0,0,107,119,97,114,103,115,117,6,0,0,0,109,111, - 100,117,108,101,40,1,0,0,0,117,3,0,0,0,102,120, - 110,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,19,0,0,0,115,101,116, - 95,112,97,99,107,97,103,101,95,119,114,97,112,112,101,114, - 238,1,0,0,115,12,0,0,0,0,1,15,1,24,1,12, - 1,15,1,31,1,117,40,0,0,0,115,101,116,95,112,97, - 99,107,97,103,101,46,60,108,111,99,97,108,115,62,46,115, - 101,116,95,112,97,99,107,97,103,101,95,119,114,97,112,112, - 101,114,40,1,0,0,0,117,5,0,0,0,95,119,114,97, - 112,40,2,0,0,0,117,3,0,0,0,102,120,110,117,19, - 0,0,0,115,101,116,95,112,97,99,107,97,103,101,95,119, - 114,97,112,112,101,114,40,0,0,0,0,40,1,0,0,0, - 117,3,0,0,0,102,120,110,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,11,0,0,0,115, - 101,116,95,112,97,99,107,97,103,101,236,1,0,0,115,6, - 0,0,0,0,2,18,7,13,1,117,11,0,0,0,115,101, - 116,95,112,97,99,107,97,103,101,99,1,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,35, - 0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134, - 0,0,125,1,0,116,0,0,124,1,0,136,0,0,131,2, - 0,1,124,1,0,83,40,3,0,0,0,117,38,0,0,0, - 83,101,116,32,95,95,108,111,97,100,101,114,95,95,32,111, - 110,32,116,104,101,32,114,101,116,117,114,110,101,100,32,109, - 111,100,117,108,101,46,99,1,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,31,0,0,0,115,49,0,0,0, - 136,0,0,124,0,0,124,1,0,124,2,0,142,1,0,125, - 3,0,116,0,0,124,3,0,100,1,0,131,2,0,115,45, - 0,124,0,0,124,3,0,95,1,0,110,0,0,124,3,0, - 83,40,2,0,0,0,78,117,10,0,0,0,95,95,108,111, - 97,100,101,114,95,95,40,2,0,0,0,117,7,0,0,0, - 104,97,115,97,116,116,114,117,10,0,0,0,95,95,108,111, - 97,100,101,114,95,95,40,4,0,0,0,117,4,0,0,0, - 115,101,108,102,117,4,0,0,0,97,114,103,115,117,6,0, - 0,0,107,119,97,114,103,115,117,6,0,0,0,109,111,100, - 117,108,101,40,1,0,0,0,117,3,0,0,0,102,120,110, - 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,18,0,0,0,115,101,116,95, - 108,111,97,100,101,114,95,119,114,97,112,112,101,114,251,1, - 0,0,115,8,0,0,0,0,1,18,1,15,1,12,1,117, - 38,0,0,0,115,101,116,95,108,111,97,100,101,114,46,60, - 108,111,99,97,108,115,62,46,115,101,116,95,108,111,97,100, - 101,114,95,119,114,97,112,112,101,114,40,1,0,0,0,117, - 5,0,0,0,95,119,114,97,112,40,2,0,0,0,117,3, - 0,0,0,102,120,110,117,18,0,0,0,115,101,116,95,108, - 111,97,100,101,114,95,119,114,97,112,112,101,114,40,0,0, - 0,0,40,1,0,0,0,117,3,0,0,0,102,120,110,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,10,0,0,0,115,101,116,95,108,111,97,100,101,114, - 249,1,0,0,115,6,0,0,0,0,2,18,5,13,1,117, - 10,0,0,0,115,101,116,95,108,111,97,100,101,114,99,1, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, - 0,0,0,115,35,0,0,0,135,0,0,102,1,0,100,1, - 0,100,2,0,134,0,0,125,1,0,116,0,0,124,1,0, - 136,0,0,131,2,0,1,124,1,0,83,40,3,0,0,0, - 117,42,3,0,0,68,101,99,111,114,97,116,111,114,32,116, - 111,32,104,97,110,100,108,101,32,115,101,108,101,99,116,105, - 110,103,32,116,104,101,32,112,114,111,112,101,114,32,109,111, - 100,117,108,101,32,102,111,114,32,108,111,97,100,101,114,115, - 46,10,10,32,32,32,32,84,104,101,32,100,101,99,111,114, - 97,116,101,100,32,102,117,110,99,116,105,111,110,32,105,115, - 32,112,97,115,115,101,100,32,116,104,101,32,109,111,100,117, - 108,101,32,116,111,32,117,115,101,32,105,110,115,116,101,97, - 100,32,111,102,32,116,104,101,32,109,111,100,117,108,101,10, - 32,32,32,32,110,97,109,101,46,32,84,104,101,32,109,111, - 100,117,108,101,32,112,97,115,115,101,100,32,105,110,32,116, - 111,32,116,104,101,32,102,117,110,99,116,105,111,110,32,105, - 115,32,101,105,116,104,101,114,32,102,114,111,109,32,115,121, - 115,46,109,111,100,117,108,101,115,32,105,102,10,32,32,32, - 32,105,116,32,97,108,114,101,97,100,121,32,101,120,105,115, - 116,115,32,111,114,32,105,115,32,97,32,110,101,119,32,109, - 111,100,117,108,101,46,32,73,102,32,116,104,101,32,109,111, - 100,117,108,101,32,105,115,32,110,101,119,44,32,116,104,101, - 110,32,95,95,110,97,109,101,95,95,10,32,32,32,32,105, - 115,32,115,101,116,32,116,104,101,32,102,105,114,115,116,32, - 97,114,103,117,109,101,110,116,32,116,111,32,116,104,101,32, - 109,101,116,104,111,100,44,32,95,95,108,111,97,100,101,114, - 95,95,32,105,115,32,115,101,116,32,116,111,32,115,101,108, - 102,44,32,97,110,100,10,32,32,32,32,95,95,112,97,99, - 107,97,103,101,95,95,32,105,115,32,115,101,116,32,97,99, - 99,111,114,100,105,110,103,108,121,32,40,105,102,32,115,101, - 108,102,46,105,115,95,112,97,99,107,97,103,101,40,41,32, - 105,115,32,100,101,102,105,110,101,100,41,32,119,105,108,108, - 32,98,101,32,115,101,116,10,32,32,32,32,98,101,102,111, - 114,101,32,105,116,32,105,115,32,112,97,115,115,101,100,32, - 116,111,32,116,104,101,32,100,101,99,111,114,97,116,101,100, - 32,102,117,110,99,116,105,111,110,32,40,105,102,32,115,101, - 108,102,46,105,115,95,112,97,99,107,97,103,101,40,41,32, - 100,111,101,115,10,32,32,32,32,110,111,116,32,119,111,114, - 107,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, - 32,105,116,32,119,105,108,108,32,98,101,32,115,101,116,32, - 112,111,115,116,45,108,111,97,100,41,46,10,10,32,32,32, - 32,73,102,32,97,110,32,101,120,99,101,112,116,105,111,110, - 32,105,115,32,114,97,105,115,101,100,32,97,110,100,32,116, - 104,101,32,100,101,99,111,114,97,116,111,114,32,99,114,101, - 97,116,101,100,32,116,104,101,32,109,111,100,117,108,101,32, - 105,116,32,105,115,10,32,32,32,32,115,117,98,115,101,113, - 117,101,110,116,108,121,32,114,101,109,111,118,101,100,32,102, - 114,111,109,32,115,121,115,46,109,111,100,117,108,101,115,46, - 10,10,32,32,32,32,84,104,101,32,100,101,99,111,114,97, - 116,111,114,32,97,115,115,117,109,101,115,32,116,104,97,116, - 32,116,104,101,32,100,101,99,111,114,97,116,101,100,32,102, - 117,110,99,116,105,111,110,32,116,97,107,101,115,32,116,104, - 101,32,109,111,100,117,108,101,32,110,97,109,101,32,97,115, - 10,32,32,32,32,116,104,101,32,115,101,99,111,110,100,32, - 97,114,103,117,109,101,110,116,46,10,10,32,32,32,32,99, - 2,0,0,0,0,0,0,0,7,0,0,0,25,0,0,0, - 31,0,0,0,115,254,0,0,0,116,0,0,106,1,0,106, - 2,0,124,1,0,131,1,0,125,4,0,124,4,0,100,0, - 0,107,9,0,125,5,0,124,5,0,115,168,0,116,4,0, - 124,1,0,131,1,0,125,4,0,100,3,0,124,4,0,95, - 6,0,124,4,0,116,0,0,106,1,0,124,1,0,60,124, - 0,0,124,4,0,95,7,0,121,19,0,124,0,0,106,8, - 0,124,1,0,131,1,0,125,6,0,87,110,24,0,4,116, - 9,0,116,10,0,102,2,0,107,10,0,114,124,0,1,1, - 1,89,113,177,0,88,124,6,0,114,143,0,124,1,0,124, - 4,0,95,11,0,113,177,0,124,1,0,106,12,0,100,1, - 0,131,1,0,100,2,0,25,124,4,0,95,11,0,110,9, - 0,100,3,0,124,4,0,95,6,0,122,60,0,121,23,0, - 136,0,0,124,0,0,124,4,0,124,2,0,124,3,0,142, - 2,0,83,87,110,30,0,1,1,1,124,5,0,115,228,0, - 116,0,0,106,1,0,124,1,0,61,110,0,0,130,0,0, - 89,110,1,0,88,87,100,0,0,100,4,0,124,4,0,95, - 6,0,88,100,0,0,83,40,5,0,0,0,78,117,1,0, - 0,0,46,105,0,0,0,0,84,70,40,14,0,0,0,117, - 3,0,0,0,115,121,115,117,7,0,0,0,109,111,100,117, - 108,101,115,117,3,0,0,0,103,101,116,117,4,0,0,0, - 78,111,110,101,117,10,0,0,0,110,101,119,95,109,111,100, - 117,108,101,117,4,0,0,0,84,114,117,101,117,16,0,0, - 0,95,95,105,110,105,116,105,97,108,105,122,105,110,103,95, - 95,117,10,0,0,0,95,95,108,111,97,100,101,114,95,95, - 117,10,0,0,0,105,115,95,112,97,99,107,97,103,101,117, - 11,0,0,0,73,109,112,111,114,116,69,114,114,111,114,117, - 14,0,0,0,65,116,116,114,105,98,117,116,101,69,114,114, - 111,114,117,11,0,0,0,95,95,112,97,99,107,97,103,101, - 95,95,117,10,0,0,0,114,112,97,114,116,105,116,105,111, - 110,117,5,0,0,0,70,97,108,115,101,40,7,0,0,0, - 117,4,0,0,0,115,101,108,102,117,8,0,0,0,102,117, - 108,108,110,97,109,101,117,4,0,0,0,97,114,103,115,117, - 6,0,0,0,107,119,97,114,103,115,117,6,0,0,0,109, - 111,100,117,108,101,117,9,0,0,0,105,115,95,114,101,108, - 111,97,100,117,10,0,0,0,105,115,95,112,97,99,107,97, - 103,101,40,1,0,0,0,117,3,0,0,0,102,120,110,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,25,0,0,0,109,111,100,117,108, - 101,95,102,111,114,95,108,111,97,100,101,114,95,119,114,97, - 112,112,101,114,22,2,0,0,115,44,0,0,0,0,1,18, - 1,12,1,6,4,12,3,9,1,13,1,9,1,3,1,19, - 1,19,1,5,2,6,1,12,2,25,2,9,1,6,2,23, - 1,3,1,6,1,13,1,12,2,117,52,0,0,0,109,111, - 100,117,108,101,95,102,111,114,95,108,111,97,100,101,114,46, - 60,108,111,99,97,108,115,62,46,109,111,100,117,108,101,95, - 102,111,114,95,108,111,97,100,101,114,95,119,114,97,112,112, - 101,114,40,1,0,0,0,117,5,0,0,0,95,119,114,97, - 112,40,2,0,0,0,117,3,0,0,0,102,120,110,117,25, - 0,0,0,109,111,100,117,108,101,95,102,111,114,95,108,111, - 97,100,101,114,95,119,114,97,112,112,101,114,40,0,0,0, - 0,40,1,0,0,0,117,3,0,0,0,102,120,110,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,17,0,0,0,109,111,100,117,108,101,95,102,111,114,95, - 108,111,97,100,101,114,4,2,0,0,115,6,0,0,0,0, - 18,18,33,13,1,117,17,0,0,0,109,111,100,117,108,101, - 95,102,111,114,95,108,111,97,100,101,114,99,1,0,0,0, - 0,0,0,0,2,0,0,0,4,0,0,0,3,0,0,0, - 115,38,0,0,0,100,3,0,135,0,0,102,1,0,100,1, - 0,100,2,0,134,1,0,125,1,0,116,1,0,124,1,0, - 136,0,0,131,2,0,1,124,1,0,83,40,4,0,0,0, - 117,252,0,0,0,68,101,99,111,114,97,116,111,114,32,116, - 111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,104, - 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,114, - 101,113,117,101,115,116,101,100,32,109,97,116,99,104,101,115, - 32,116,104,101,32,111,110,101,32,116,104,101,10,32,32,32, - 32,108,111,97,100,101,114,32,99,97,110,32,104,97,110,100, - 108,101,46,10,10,32,32,32,32,84,104,101,32,102,105,114, - 115,116,32,97,114,103,117,109,101,110,116,32,40,115,101,108, - 102,41,32,109,117,115,116,32,100,101,102,105,110,101,32,95, - 110,97,109,101,32,119,104,105,99,104,32,116,104,101,32,115, - 101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105, - 115,10,32,32,32,32,99,111,109,112,97,114,101,100,32,97, - 103,97,105,110,115,116,46,32,73,102,32,116,104,101,32,99, - 111,109,112,97,114,105,115,111,110,32,102,97,105,108,115,32, - 116,104,101,110,32,73,109,112,111,114,116,69,114,114,111,114, - 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, - 32,99,2,0,0,0,0,0,0,0,4,0,0,0,5,0, - 0,0,31,0,0,0,115,83,0,0,0,124,1,0,100,0, - 0,107,8,0,114,24,0,124,0,0,106,1,0,125,1,0, - 110,40,0,124,0,0,106,1,0,124,1,0,107,3,0,114, - 64,0,116,2,0,100,1,0,124,1,0,22,100,2,0,124, - 1,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0, - 0,124,1,0,124,2,0,124,3,0,142,2,0,83,40,3, - 0,0,0,78,117,23,0,0,0,108,111,97,100,101,114,32, - 99,97,110,110,111,116,32,104,97,110,100,108,101,32,37,115, - 117,4,0,0,0,110,97,109,101,40,3,0,0,0,117,4, - 0,0,0,78,111,110,101,117,4,0,0,0,110,97,109,101, - 117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114, - 40,4,0,0,0,117,4,0,0,0,115,101,108,102,117,4, - 0,0,0,110,97,109,101,117,4,0,0,0,97,114,103,115, - 117,6,0,0,0,107,119,97,114,103,115,40,1,0,0,0, - 117,6,0,0,0,109,101,116,104,111,100,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,19,0,0,0,95,99,104,101,99,107,95,110,97, - 109,101,95,119,114,97,112,112,101,114,67,2,0,0,115,10, - 0,0,0,0,1,12,1,12,1,15,1,25,1,117,40,0, - 0,0,95,99,104,101,99,107,95,110,97,109,101,46,60,108, - 111,99,97,108,115,62,46,95,99,104,101,99,107,95,110,97, - 109,101,95,119,114,97,112,112,101,114,78,40,2,0,0,0, - 117,4,0,0,0,78,111,110,101,117,5,0,0,0,95,119, - 114,97,112,40,2,0,0,0,117,6,0,0,0,109,101,116, - 104,111,100,117,19,0,0,0,95,99,104,101,99,107,95,110, - 97,109,101,95,119,114,97,112,112,101,114,40,0,0,0,0, - 40,1,0,0,0,117,6,0,0,0,109,101,116,104,111,100, - 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,11,0,0,0,95,99,104,101,99,107,95,110,97, - 109,101,59,2,0,0,115,6,0,0,0,0,8,21,6,13, - 1,117,11,0,0,0,95,99,104,101,99,107,95,110,97,109, - 101,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,3,0,0,0,115,35,0,0,0,135,0,0,102,1, - 0,100,1,0,100,2,0,134,0,0,125,1,0,116,0,0, - 124,1,0,136,0,0,131,2,0,1,124,1,0,83,40,3, - 0,0,0,117,49,0,0,0,68,101,99,111,114,97,116,111, + 46,99,98,41,7,114,109,0,0,0,114,79,0,0,0,114, + 85,0,0,0,114,102,0,0,0,114,83,0,0,0,218,8, + 95,119,101,97,107,114,101,102,90,3,114,101,102,41,3,114, + 67,0,0,0,114,86,0,0,0,114,110,0,0,0,114,4, + 0,0,0,41,1,114,67,0,0,0,114,5,0,0,0,114, + 105,0,0,0,18,1,0,0,115,24,0,0,0,0,4,6, + 1,3,1,17,1,13,1,5,1,12,1,12,1,15,2,12, + 1,18,2,25,1,114,105,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, + 71,0,0,0,116,0,0,124,0,0,131,1,0,125,1,0, + 116,1,0,106,2,0,131,0,0,1,121,14,0,124,1,0, + 106,3,0,131,0,0,1,87,110,18,0,4,116,4,0,107, + 10,0,114,56,0,1,1,1,89,110,11,0,88,124,1,0, + 106,5,0,131,0,0,1,100,1,0,83,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,113,117,105,114,101,115,32,116, + 104,101,110,32,114,101,108,101,97,115,101,32,116,104,101,10, + 32,32,32,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,109,111,100,117, + 108,101,32,110,97,109,101,46,10,32,32,32,32,84,104,105, + 115,32,105,115,32,117,115,101,100,32,116,111,32,101,110,115, + 117,114,101,32,97,32,109,111,100,117,108,101,32,105,115,32, + 99,111,109,112,108,101,116,101,108,121,32,105,110,105,116,105, + 97,108,105,122,101,100,44,32,105,110,32,116,104,101,10,32, + 32,32,32,101,118,101,110,116,32,105,116,32,105,115,32,98, + 101,105,110,103,32,105,109,112,111,114,116,101,100,32,98,121, + 32,97,110,111,116,104,101,114,32,116,104,114,101,97,100,46, + 10,10,32,32,32,32,83,104,111,117,108,100,32,111,110,108, + 121,32,98,101,32,99,97,108,108,101,100,32,119,105,116,104, + 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, + 32,116,97,107,101,110,46,78,41,6,114,105,0,0,0,114, + 106,0,0,0,114,107,0,0,0,114,97,0,0,0,114,82, + 0,0,0,114,98,0,0,0,41,2,114,67,0,0,0,114, + 86,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,19,95,108,111,99,107,95,117,110,108,111,99, + 107,95,109,111,100,117,108,101,37,1,0,0,115,14,0,0, + 0,0,7,12,1,10,1,3,1,14,1,13,3,5,2,114, + 112,0,0,0,99,1,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,79,0,0,0,115,13,0,0,0,124,0, + 0,124,1,0,124,2,0,142,0,0,83,41,1,97,46,1, + 0,0,114,101,109,111,118,101,95,105,109,112,111,114,116,108, + 105,98,95,102,114,97,109,101,115,32,105,110,32,105,109,112, + 111,114,116,46,99,32,119,105,108,108,32,97,108,119,97,121, + 115,32,114,101,109,111,118,101,32,115,101,113,117,101,110,99, + 101,115,10,32,32,32,32,111,102,32,105,109,112,111,114,116, + 108,105,98,32,102,114,97,109,101,115,32,116,104,97,116,32, + 101,110,100,32,119,105,116,104,32,97,32,99,97,108,108,32, + 116,111,32,116,104,105,115,32,102,117,110,99,116,105,111,110, + 10,10,32,32,32,32,85,115,101,32,105,116,32,105,110,115, + 116,101,97,100,32,111,102,32,97,32,110,111,114,109,97,108, + 32,99,97,108,108,32,105,110,32,112,108,97,99,101,115,32, + 119,104,101,114,101,32,105,110,99,108,117,100,105,110,103,32, + 116,104,101,32,105,109,112,111,114,116,108,105,98,10,32,32, + 32,32,102,114,97,109,101,115,32,105,110,116,114,111,100,117, + 99,101,115,32,117,110,119,97,110,116,101,100,32,110,111,105, + 115,101,32,105,110,116,111,32,116,104,101,32,116,114,97,99, + 101,98,97,99,107,32,40,101,46,103,46,32,119,104,101,110, + 32,101,120,101,99,117,116,105,110,103,10,32,32,32,32,109, + 111,100,117,108,101,32,99,111,100,101,41,10,32,32,32,32, + 114,4,0,0,0,41,3,218,1,102,114,80,0,0,0,90, + 4,107,119,100,115,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,25,95,99,97,108,108,95,119,105,116,104, + 95,102,114,97,109,101,115,95,114,101,109,111,118,101,100,57, + 1,0,0,115,2,0,0,0,0,8,114,114,0,0,0,105, + 228,12,0,0,233,2,0,0,0,114,13,0,0,0,115,2, + 0,0,0,13,10,90,11,95,95,112,121,99,97,99,104,101, + 95,95,122,3,46,112,121,122,4,46,112,121,99,122,4,46, + 112,121,111,78,99,2,0,0,0,0,0,0,0,11,0,0, + 0,6,0,0,0,67,0,0,0,115,180,0,0,0,124,1, + 0,100,1,0,107,8,0,114,25,0,116,0,0,106,1,0, + 106,2,0,12,110,3,0,124,1,0,125,2,0,124,2,0, + 114,46,0,116,3,0,125,3,0,110,6,0,116,4,0,125, + 3,0,116,5,0,124,0,0,131,1,0,92,2,0,125,4, + 0,125,5,0,124,5,0,106,6,0,100,2,0,131,1,0, + 92,3,0,125,6,0,125,7,0,125,8,0,116,0,0,106, + 7,0,106,8,0,125,9,0,124,9,0,100,1,0,107,8, + 0,114,133,0,116,9,0,100,3,0,131,1,0,130,1,0, + 110,0,0,100,4,0,106,10,0,124,6,0,124,7,0,124, + 9,0,124,3,0,100,5,0,25,103,4,0,131,1,0,125, + 10,0,116,11,0,124,4,0,116,12,0,124,10,0,131,3, + 0,83,41,6,97,244,1,0,0,71,105,118,101,110,32,116, + 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, + 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, + 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, + 121,99,47,46,112,121,111,32,102,105,108,101,46,10,10,32, + 32,32,32,84,104,101,32,46,112,121,32,102,105,108,101,32, + 100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111, + 32,101,120,105,115,116,59,32,116,104,105,115,32,115,105,109, + 112,108,121,32,114,101,116,117,114,110,115,32,116,104,101,32, + 112,97,116,104,32,116,111,32,116,104,101,10,32,32,32,32, + 46,112,121,99,47,46,112,121,111,32,102,105,108,101,32,99, + 97,108,99,117,108,97,116,101,100,32,97,115,32,105,102,32, + 116,104,101,32,46,112,121,32,102,105,108,101,32,119,101,114, + 101,32,105,109,112,111,114,116,101,100,46,32,32,84,104,101, + 32,101,120,116,101,110,115,105,111,110,10,32,32,32,32,119, + 105,108,108,32,98,101,32,46,112,121,99,32,117,110,108,101, + 115,115,32,115,121,115,46,102,108,97,103,115,46,111,112,116, + 105,109,105,122,101,32,105,115,32,110,111,110,45,122,101,114, + 111,44,32,116,104,101,110,32,105,116,32,119,105,108,108,32, + 98,101,32,46,112,121,111,46,10,10,32,32,32,32,73,102, + 32,100,101,98,117,103,95,111,118,101,114,114,105,100,101,32, + 105,115,32,110,111,116,32,78,111,110,101,44,32,116,104,101, + 110,32,105,116,32,109,117,115,116,32,98,101,32,97,32,98, + 111,111,108,101,97,110,32,97,110,100,32,105,115,32,117,115, + 101,100,32,105,110,10,32,32,32,32,112,108,97,99,101,32, + 111,102,32,115,121,115,46,102,108,97,103,115,46,111,112,116, + 105,109,105,122,101,46,10,10,32,32,32,32,73,102,32,115, + 121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78, + 111,110,101,32,116,104,101,110,32,78,111,116,73,109,112,108, + 101,109,101,110,116,101,100,69,114,114,111,114,32,105,115,32, + 114,97,105,115,101,100,46,10,10,32,32,32,32,78,218,1, + 46,122,36,115,121,115,46,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, + 105,115,32,78,111,110,101,114,30,0,0,0,114,84,0,0, + 0,41,13,114,7,0,0,0,218,5,102,108,97,103,115,218, + 8,111,112,116,105,109,105,122,101,218,23,68,69,66,85,71, + 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, + 69,83,218,27,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,114, + 38,0,0,0,218,9,112,97,114,116,105,116,105,111,110,218, + 14,105,109,112,108,101,109,101,110,116,97,116,105,111,110,218, + 9,99,97,99,104,101,95,116,97,103,218,19,78,111,116,73, + 109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,114, + 26,0,0,0,114,28,0,0,0,218,8,95,80,89,67,65, + 67,72,69,41,11,114,35,0,0,0,90,14,100,101,98,117, + 103,95,111,118,101,114,114,105,100,101,218,5,100,101,98,117, + 103,218,8,115,117,102,102,105,120,101,115,218,4,104,101,97, + 100,114,37,0,0,0,218,13,98,97,115,101,95,102,105,108, + 101,110,97,109,101,218,3,115,101,112,114,36,0,0,0,90, + 3,116,97,103,218,8,102,105,108,101,110,97,109,101,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,99, + 97,99,104,101,95,102,114,111,109,95,115,111,117,114,99,101, + 180,1,0,0,115,22,0,0,0,0,13,31,1,6,1,9, + 2,6,1,18,1,24,1,12,1,12,1,15,1,31,1,114, + 132,0,0,0,99,1,0,0,0,0,0,0,0,5,0,0, + 0,5,0,0,0,67,0,0,0,115,193,0,0,0,116,0, + 0,106,1,0,106,2,0,100,1,0,107,8,0,114,33,0, + 116,3,0,100,2,0,131,1,0,130,1,0,110,0,0,116, + 4,0,124,0,0,131,1,0,92,2,0,125,1,0,125,2, + 0,116,4,0,124,1,0,131,1,0,92,2,0,125,1,0, + 125,3,0,124,3,0,116,5,0,107,3,0,114,108,0,116, + 6,0,100,3,0,106,7,0,116,5,0,124,0,0,131,2, + 0,131,1,0,130,1,0,110,0,0,124,2,0,106,8,0, + 100,4,0,131,1,0,100,5,0,107,3,0,114,153,0,116, + 6,0,100,6,0,106,7,0,124,2,0,131,1,0,131,1, + 0,130,1,0,110,0,0,124,2,0,106,9,0,100,4,0, + 131,1,0,100,7,0,25,125,4,0,116,10,0,124,1,0, + 124,4,0,116,11,0,100,7,0,25,23,131,2,0,83,41, + 8,97,121,1,0,0,71,105,118,101,110,32,116,104,101,32, + 112,97,116,104,32,116,111,32,97,32,46,112,121,99,46,47, + 46,112,121,111,32,102,105,108,101,44,32,114,101,116,117,114, + 110,32,116,104,101,32,112,97,116,104,32,116,111,32,105,116, + 115,32,46,112,121,32,102,105,108,101,46,10,10,32,32,32, + 32,84,104,101,32,46,112,121,99,47,46,112,121,111,32,102, + 105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,101, + 100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,115, + 32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,32, + 116,104,101,32,112,97,116,104,32,116,111,10,32,32,32,32, + 116,104,101,32,46,112,121,32,102,105,108,101,32,99,97,108, + 99,117,108,97,116,101,100,32,116,111,32,99,111,114,114,101, + 115,112,111,110,100,32,116,111,32,116,104,101,32,46,112,121, + 99,47,46,112,121,111,32,102,105,108,101,46,32,32,73,102, + 32,112,97,116,104,32,100,111,101,115,10,32,32,32,32,110, + 111,116,32,99,111,110,102,111,114,109,32,116,111,32,80,69, + 80,32,51,49,52,55,32,102,111,114,109,97,116,44,32,86, + 97,108,117,101,69,114,114,111,114,32,119,105,108,108,32,98, + 101,32,114,97,105,115,101,100,46,32,73,102,10,32,32,32, + 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, + 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, + 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, + 122,36,115,121,115,46,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,46,99,97,99,104,101,95,116,97,103,32,105, + 115,32,78,111,110,101,122,37,123,125,32,110,111,116,32,98, + 111,116,116,111,109,45,108,101,118,101,108,32,100,105,114,101, + 99,116,111,114,121,32,105,110,32,123,33,114,125,114,116,0, + 0,0,114,115,0,0,0,122,28,101,120,112,101,99,116,101, + 100,32,111,110,108,121,32,50,32,100,111,116,115,32,105,110, + 32,123,33,114,125,114,84,0,0,0,41,12,114,7,0,0, + 0,114,122,0,0,0,114,123,0,0,0,114,124,0,0,0, + 114,38,0,0,0,114,125,0,0,0,218,10,86,97,108,117, + 101,69,114,114,111,114,114,47,0,0,0,114,89,0,0,0, + 114,121,0,0,0,114,28,0,0,0,218,15,83,79,85,82, + 67,69,95,83,85,70,70,73,88,69,83,41,5,114,35,0, + 0,0,114,128,0,0,0,90,16,112,121,99,97,99,104,101, + 95,102,105,108,101,110,97,109,101,90,7,112,121,99,97,99, + 104,101,114,129,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,17,115,111,117,114,99,101,95,102, + 114,111,109,95,99,97,99,104,101,207,1,0,0,115,24,0, + 0,0,0,9,18,1,15,1,18,1,18,1,12,1,3,1, + 24,1,21,1,3,1,21,1,19,1,114,135,0,0,0,99, + 1,0,0,0,0,0,0,0,5,0,0,0,13,0,0,0, + 67,0,0,0,115,164,0,0,0,116,0,0,124,0,0,131, + 1,0,100,1,0,107,2,0,114,22,0,100,2,0,83,124, + 0,0,106,1,0,100,3,0,131,1,0,92,3,0,125,1, + 0,125,2,0,125,3,0,124,1,0,12,115,81,0,124,3, + 0,106,2,0,131,0,0,100,7,0,100,8,0,133,2,0, + 25,100,6,0,107,3,0,114,85,0,124,0,0,83,121,16, + 0,116,3,0,124,0,0,131,1,0,125,4,0,87,110,40, + 0,4,116,4,0,116,5,0,102,2,0,107,10,0,114,143, + 0,1,1,1,124,0,0,100,2,0,100,9,0,133,2,0, + 25,125,4,0,89,110,1,0,88,116,6,0,124,4,0,131, + 1,0,114,160,0,124,4,0,83,124,0,0,83,41,10,122, + 188,67,111,110,118,101,114,116,32,97,32,98,121,116,101,99, + 111,100,101,32,102,105,108,101,32,112,97,116,104,32,116,111, + 32,97,32,115,111,117,114,99,101,32,112,97,116,104,32,40, + 105,102,32,112,111,115,115,105,98,108,101,41,46,10,10,32, + 32,32,32,84,104,105,115,32,102,117,110,99,116,105,111,110, + 32,101,120,105,115,116,115,32,112,117,114,101,108,121,32,102, + 111,114,32,98,97,99,107,119,97,114,100,115,45,99,111,109, + 112,97,116,105,98,105,108,105,116,121,32,102,111,114,10,32, + 32,32,32,80,121,73,109,112,111,114,116,95,69,120,101,99, + 67,111,100,101,77,111,100,117,108,101,87,105,116,104,70,105, + 108,101,110,97,109,101,115,40,41,32,105,110,32,116,104,101, + 32,67,32,65,80,73,46,10,10,32,32,32,32,114,84,0, + 0,0,78,114,116,0,0,0,233,3,0,0,0,114,29,0, + 0,0,90,2,112,121,233,253,255,255,255,233,255,255,255,255, + 114,138,0,0,0,41,7,114,31,0,0,0,114,32,0,0, + 0,218,5,108,111,119,101,114,114,135,0,0,0,114,124,0, + 0,0,114,133,0,0,0,114,44,0,0,0,41,5,218,13, + 98,121,116,101,99,111,100,101,95,112,97,116,104,90,4,114, + 101,115,116,114,36,0,0,0,90,9,101,120,116,101,110,115, + 105,111,110,218,11,115,111,117,114,99,101,95,112,97,116,104, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 15,95,103,101,116,95,115,111,117,114,99,101,102,105,108,101, + 230,1,0,0,115,20,0,0,0,0,7,18,1,4,1,24, + 1,35,1,4,1,3,1,16,1,19,1,21,1,114,142,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,60,0,0,0,121,19,0,116, + 0,0,124,0,0,131,1,0,106,1,0,125,1,0,87,110, + 24,0,4,116,2,0,107,10,0,114,45,0,1,1,1,100, + 1,0,125,1,0,89,110,1,0,88,124,1,0,100,2,0, + 79,125,1,0,124,1,0,83,41,3,122,51,67,97,108,99, + 117,108,97,116,101,32,116,104,101,32,109,111,100,101,32,112, + 101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,97, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,46,105, + 182,1,0,0,233,128,0,0,0,41,3,114,39,0,0,0, + 114,41,0,0,0,114,40,0,0,0,41,2,114,35,0,0, + 0,114,42,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,10,95,99,97,108,99,95,109,111,100, + 101,249,1,0,0,115,12,0,0,0,0,2,3,1,19,1, + 13,1,11,3,10,1,114,144,0,0,0,218,9,118,101,114, + 98,111,115,105,116,121,114,29,0,0,0,99,1,0,0,0, + 1,0,0,0,3,0,0,0,4,0,0,0,71,0,0,0, + 115,81,0,0,0,116,0,0,106,1,0,106,2,0,124,1, + 0,107,5,0,114,77,0,124,0,0,106,3,0,100,6,0, + 131,1,0,115,46,0,100,3,0,124,0,0,23,125,0,0, + 110,0,0,116,4,0,124,0,0,106,5,0,124,2,0,140, + 0,0,100,4,0,116,0,0,106,6,0,131,1,1,1,110, + 0,0,100,5,0,83,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, + 116,100,101,114,114,32,105,102,32,45,118,47,80,89,84,72, + 79,78,86,69,82,66,79,83,69,32,105,115,32,116,117,114, + 110,101,100,32,111,110,46,250,1,35,250,7,105,109,112,111, + 114,116,32,122,2,35,32,114,54,0,0,0,78,41,2,114, + 146,0,0,0,114,147,0,0,0,41,7,114,7,0,0,0, + 114,117,0,0,0,218,7,118,101,114,98,111,115,101,114,9, + 0,0,0,218,5,112,114,105,110,116,114,47,0,0,0,218, + 6,115,116,100,101,114,114,41,3,218,7,109,101,115,115,97, + 103,101,114,145,0,0,0,114,80,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,16,95,118,101, + 114,98,111,115,101,95,109,101,115,115,97,103,101,5,2,0, + 0,115,8,0,0,0,0,2,18,1,15,1,13,1,114,152, + 0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,3,0,0,0,115,38,0,0,0,100,1,0, + 135,0,0,102,1,0,100,2,0,100,3,0,134,1,0,125, + 1,0,116,0,0,124,1,0,136,0,0,131,2,0,1,124, + 1,0,83,41,4,122,252,68,101,99,111,114,97,116,111,114, + 32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32, + 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, + 32,114,101,113,117,101,115,116,101,100,32,109,97,116,99,104, + 101,115,32,116,104,101,32,111,110,101,32,116,104,101,10,32, + 32,32,32,108,111,97,100,101,114,32,99,97,110,32,104,97, + 110,100,108,101,46,10,10,32,32,32,32,84,104,101,32,102, + 105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,115, + 101,108,102,41,32,109,117,115,116,32,100,101,102,105,110,101, + 32,95,110,97,109,101,32,119,104,105,99,104,32,116,104,101, + 32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116, + 32,105,115,10,32,32,32,32,99,111,109,112,97,114,101,100, + 32,97,103,97,105,110,115,116,46,32,73,102,32,116,104,101, + 32,99,111,109,112,97,114,105,115,111,110,32,102,97,105,108, + 115,32,116,104,101,110,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, + 32,32,32,78,99,2,0,0,0,0,0,0,0,4,0,0, + 0,5,0,0,0,31,0,0,0,115,83,0,0,0,124,1, + 0,100,0,0,107,8,0,114,24,0,124,0,0,106,0,0, + 125,1,0,110,40,0,124,0,0,106,0,0,124,1,0,107, + 3,0,114,64,0,116,1,0,100,1,0,124,1,0,22,100, + 2,0,124,1,0,131,1,1,130,1,0,110,0,0,136,0, + 0,124,0,0,124,1,0,124,2,0,124,3,0,142,2,0, + 83,41,3,78,122,23,108,111,97,100,101,114,32,99,97,110, + 110,111,116,32,104,97,110,100,108,101,32,37,115,114,67,0, + 0,0,41,2,114,67,0,0,0,218,11,73,109,112,111,114, + 116,69,114,114,111,114,41,4,114,71,0,0,0,114,67,0, + 0,0,114,80,0,0,0,114,108,0,0,0,41,1,218,6, + 109,101,116,104,111,100,114,4,0,0,0,114,5,0,0,0, + 218,19,95,99,104,101,99,107,95,110,97,109,101,95,119,114, + 97,112,112,101,114,21,2,0,0,115,10,0,0,0,0,1, + 12,1,12,1,15,1,25,1,122,40,95,99,104,101,99,107, + 95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95, + 99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,112, + 101,114,41,1,114,65,0,0,0,41,2,114,154,0,0,0, + 114,155,0,0,0,114,4,0,0,0,41,1,114,154,0,0, + 0,114,5,0,0,0,218,11,95,99,104,101,99,107,95,110, + 97,109,101,13,2,0,0,115,6,0,0,0,0,8,21,6, + 13,1,114,156,0,0,0,99,1,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,3,0,0,0,115,35,0,0, + 0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0, + 125,1,0,116,0,0,124,1,0,136,0,0,131,2,0,1, + 124,1,0,83,41,3,122,49,68,101,99,111,114,97,116,111, 114,32,116,111,32,118,101,114,105,102,121,32,116,104,101,32, 110,97,109,101,100,32,109,111,100,117,108,101,32,105,115,32, 98,117,105,108,116,45,105,110,46,99,2,0,0,0,0,0, @@ -1258,3173 +957,3392 @@ unsigned char _Py_M__importlib[] = { 0,0,0,124,1,0,116,0,0,106,1,0,107,7,0,114, 45,0,116,2,0,100,1,0,106,3,0,124,1,0,131,1, 0,100,2,0,124,1,0,131,1,1,130,1,0,110,0,0, - 136,0,0,124,0,0,124,1,0,131,2,0,83,40,3,0, - 0,0,78,117,27,0,0,0,123,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,117,4,0,0,0,110,97,109,101,40,4,0,0, - 0,117,3,0,0,0,115,121,115,117,20,0,0,0,98,117, - 105,108,116,105,110,95,109,111,100,117,108,101,95,110,97,109, - 101,115,117,11,0,0,0,73,109,112,111,114,116,69,114,114, - 111,114,117,6,0,0,0,102,111,114,109,97,116,40,2,0, - 0,0,117,4,0,0,0,115,101,108,102,117,8,0,0,0, - 102,117,108,108,110,97,109,101,40,1,0,0,0,117,3,0, - 0,0,102,120,110,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,25,0,0, - 0,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116, - 105,110,95,119,114,97,112,112,101,114,79,2,0,0,115,8, - 0,0,0,0,1,15,1,18,1,12,1,117,52,0,0,0, - 95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,105, - 110,46,60,108,111,99,97,108,115,62,46,95,114,101,113,117, - 105,114,101,115,95,98,117,105,108,116,105,110,95,119,114,97, - 112,112,101,114,40,1,0,0,0,117,5,0,0,0,95,119, - 114,97,112,40,2,0,0,0,117,3,0,0,0,102,120,110, - 117,25,0,0,0,95,114,101,113,117,105,114,101,115,95,98, - 117,105,108,116,105,110,95,119,114,97,112,112,101,114,40,0, - 0,0,0,40,1,0,0,0,117,3,0,0,0,102,120,110, - 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,17,0,0,0,95,114,101,113,117,105,114,101,115, - 95,98,117,105,108,116,105,110,77,2,0,0,115,6,0,0, - 0,0,2,18,5,13,1,117,17,0,0,0,95,114,101,113, - 117,105,114,101,115,95,98,117,105,108,116,105,110,99,1,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,3,0, - 0,0,115,35,0,0,0,135,0,0,102,1,0,100,1,0, - 100,2,0,134,0,0,125,1,0,116,0,0,124,1,0,136, - 0,0,131,2,0,1,124,1,0,83,40,3,0,0,0,117, - 47,0,0,0,68,101,99,111,114,97,116,111,114,32,116,111, - 32,118,101,114,105,102,121,32,116,104,101,32,110,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,58,0,0,0,116,0,0, - 106,1,0,124,1,0,131,1,0,115,45,0,116,2,0,100, - 1,0,106,3,0,124,1,0,131,1,0,100,2,0,124,1, - 0,131,1,1,130,1,0,110,0,0,136,0,0,124,0,0, - 124,1,0,131,2,0,83,40,3,0,0,0,78,117,25,0, - 0,0,123,125,32,105,115,32,110,111,116,32,97,32,102,114, - 111,122,101,110,32,109,111,100,117,108,101,117,4,0,0,0, - 110,97,109,101,40,4,0,0,0,117,4,0,0,0,95,105, - 109,112,117,9,0,0,0,105,115,95,102,114,111,122,101,110, - 117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114, - 117,6,0,0,0,102,111,114,109,97,116,40,2,0,0,0, - 117,4,0,0,0,115,101,108,102,117,8,0,0,0,102,117, - 108,108,110,97,109,101,40,1,0,0,0,117,3,0,0,0, - 102,120,110,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,95, - 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,95, - 119,114,97,112,112,101,114,90,2,0,0,115,8,0,0,0, - 0,1,15,1,18,1,12,1,117,50,0,0,0,95,114,101, - 113,117,105,114,101,115,95,102,114,111,122,101,110,46,60,108, - 111,99,97,108,115,62,46,95,114,101,113,117,105,114,101,115, - 95,102,114,111,122,101,110,95,119,114,97,112,112,101,114,40, - 1,0,0,0,117,5,0,0,0,95,119,114,97,112,40,2, - 0,0,0,117,3,0,0,0,102,120,110,117,24,0,0,0, - 95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110, - 95,119,114,97,112,112,101,114,40,0,0,0,0,40,1,0, - 0,0,117,3,0,0,0,102,120,110,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,16,0,0, - 0,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101, - 110,88,2,0,0,115,6,0,0,0,0,2,18,5,13,1, - 117,16,0,0,0,95,114,101,113,117,105,114,101,115,95,102, - 114,111,122,101,110,99,2,0,0,0,0,0,0,0,5,0, + 136,0,0,124,0,0,124,1,0,131,2,0,83,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,114, + 67,0,0,0,41,4,114,7,0,0,0,218,20,98,117,105, + 108,116,105,110,95,109,111,100,117,108,101,95,110,97,109,101, + 115,114,153,0,0,0,114,47,0,0,0,41,2,114,71,0, + 0,0,218,8,102,117,108,108,110,97,109,101,41,1,218,3, + 102,120,110,114,4,0,0,0,114,5,0,0,0,218,25,95, + 114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110, + 95,119,114,97,112,112,101,114,33,2,0,0,115,8,0,0, + 0,0,1,15,1,18,1,12,1,122,52,95,114,101,113,117, + 105,114,101,115,95,98,117,105,108,116,105,110,46,60,108,111, + 99,97,108,115,62,46,95,114,101,113,117,105,114,101,115,95, + 98,117,105,108,116,105,110,95,119,114,97,112,112,101,114,41, + 1,114,65,0,0,0,41,2,114,159,0,0,0,114,160,0, + 0,0,114,4,0,0,0,41,1,114,159,0,0,0,114,5, + 0,0,0,218,17,95,114,101,113,117,105,114,101,115,95,98, + 117,105,108,116,105,110,31,2,0,0,115,6,0,0,0,0, + 2,18,5,13,1,114,161,0,0,0,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115, + 35,0,0,0,135,0,0,102,1,0,100,1,0,100,2,0, + 134,0,0,125,1,0,116,0,0,124,1,0,136,0,0,131, + 2,0,1,124,1,0,83,41,3,122,47,68,101,99,111,114, + 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, + 104,101,32,110,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, + 58,0,0,0,116,0,0,106,1,0,124,1,0,131,1,0, + 115,45,0,116,2,0,100,1,0,106,3,0,124,1,0,131, + 1,0,100,2,0,124,1,0,131,1,1,130,1,0,110,0, + 0,136,0,0,124,0,0,124,1,0,131,2,0,83,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,114,67, + 0,0,0,41,4,114,106,0,0,0,218,9,105,115,95,102, + 114,111,122,101,110,114,153,0,0,0,114,47,0,0,0,41, + 2,114,71,0,0,0,114,158,0,0,0,41,1,114,159,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,24,95,114, + 101,113,117,105,114,101,115,95,102,114,111,122,101,110,95,119, + 114,97,112,112,101,114,44,2,0,0,115,8,0,0,0,0, + 1,15,1,18,1,12,1,122,50,95,114,101,113,117,105,114, + 101,115,95,102,114,111,122,101,110,46,60,108,111,99,97,108, + 115,62,46,95,114,101,113,117,105,114,101,115,95,102,114,111, + 122,101,110,95,119,114,97,112,112,101,114,41,1,114,65,0, + 0,0,41,2,114,159,0,0,0,114,163,0,0,0,114,4, + 0,0,0,41,1,114,159,0,0,0,114,5,0,0,0,218, + 16,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101, + 110,42,2,0,0,115,6,0,0,0,0,2,18,5,13,1, + 114,164,0,0,0,99,2,0,0,0,0,0,0,0,5,0, 0,0,5,0,0,0,67,0,0,0,115,87,0,0,0,124, 0,0,106,0,0,124,1,0,131,1,0,92,2,0,125,2, - 0,125,3,0,124,2,0,100,3,0,107,8,0,114,83,0, - 116,2,0,124,3,0,131,1,0,114,83,0,100,1,0,125, - 4,0,116,3,0,106,4,0,124,4,0,106,5,0,124,3, - 0,100,2,0,25,131,1,0,116,6,0,131,2,0,1,110, - 0,0,124,2,0,83,40,4,0,0,0,117,86,0,0,0, - 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, - 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,32,98,121, - 32,100,101,108,101,103,97,116,105,110,103,32,116,111,10,32, - 32,32,32,115,101,108,102,46,102,105,110,100,95,108,111,97, - 100,101,114,40,41,46,117,44,0,0,0,78,111,116,32,105, - 109,112,111,114,116,105,110,103,32,100,105,114,101,99,116,111, - 114,121,32,123,125,58,32,109,105,115,115,105,110,103,32,95, - 95,105,110,105,116,95,95,105,0,0,0,0,78,40,7,0, - 0,0,117,11,0,0,0,102,105,110,100,95,108,111,97,100, - 101,114,117,4,0,0,0,78,111,110,101,117,3,0,0,0, - 108,101,110,117,9,0,0,0,95,119,97,114,110,105,110,103, - 115,117,4,0,0,0,119,97,114,110,117,6,0,0,0,102, - 111,114,109,97,116,117,13,0,0,0,73,109,112,111,114,116, - 87,97,114,110,105,110,103,40,5,0,0,0,117,4,0,0, - 0,115,101,108,102,117,8,0,0,0,102,117,108,108,110,97, - 109,101,117,6,0,0,0,108,111,97,100,101,114,117,8,0, - 0,0,112,111,114,116,105,111,110,115,117,3,0,0,0,109, - 115,103,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,17, - 0,0,0,95,102,105,110,100,95,109,111,100,117,108,101,95, - 115,104,105,109,99,2,0,0,115,10,0,0,0,0,6,21, - 1,24,1,6,1,32,1,117,17,0,0,0,95,102,105,110, - 100,95,109,111,100,117,108,101,95,115,104,105,109,99,1,0, - 0,0,0,0,0,0,1,0,0,0,6,0,0,0,66,0, - 0,0,115,173,0,0,0,124,0,0,69,101,0,0,90,1, - 0,100,0,0,90,2,0,100,1,0,90,3,0,101,4,0, - 100,2,0,100,3,0,132,0,0,131,1,0,90,5,0,101, - 4,0,100,14,0,100,4,0,100,5,0,132,1,0,131,1, - 0,90,7,0,101,4,0,101,8,0,101,9,0,101,10,0, - 100,6,0,100,7,0,132,0,0,131,1,0,131,1,0,131, - 1,0,131,1,0,90,11,0,101,4,0,101,10,0,100,8, - 0,100,9,0,132,0,0,131,1,0,131,1,0,90,12,0, - 101,4,0,101,10,0,100,10,0,100,11,0,132,0,0,131, - 1,0,131,1,0,90,13,0,101,4,0,101,10,0,100,12, - 0,100,13,0,132,0,0,131,1,0,131,1,0,90,14,0, - 100,14,0,83,40,15,0,0,0,117,15,0,0,0,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,117,144,0, - 0,0,77,101,116,97,32,112,97,116,104,32,105,109,112,111, - 114,116,32,102,111,114,32,98,117,105,108,116,45,105,110,32, - 109,111,100,117,108,101,115,46,10,10,32,32,32,32,65,108, - 108,32,109,101,116,104,111,100,115,32,97,114,101,32,101,105, - 116,104,101,114,32,99,108,97,115,115,32,111,114,32,115,116, - 97,116,105,99,32,109,101,116,104,111,100,115,32,116,111,32, - 97,118,111,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,2,0,0,0,0,0,0,0,2,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, - 0,0,124,1,0,106,1,0,131,1,0,83,40,2,0,0, - 0,78,117,24,0,0,0,60,109,111,100,117,108,101,32,39, - 123,125,39,32,40,98,117,105,108,116,45,105,110,41,62,40, - 2,0,0,0,117,6,0,0,0,102,111,114,109,97,116,117, - 8,0,0,0,95,95,110,97,109,101,95,95,40,2,0,0, - 0,117,3,0,0,0,99,108,115,117,6,0,0,0,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,11,0,0,0,109,111,100,117,108,101,95,114,101,112,114, - 125,2,0,0,115,2,0,0,0,0,2,117,27,0,0,0, - 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, - 109,111,100,117,108,101,95,114,101,112,114,99,3,0,0,0, - 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, - 115,39,0,0,0,124,2,0,100,1,0,107,9,0,114,16, - 0,100,1,0,83,116,1,0,106,2,0,124,1,0,131,1, - 0,114,35,0,124,0,0,83,100,1,0,83,40,2,0,0, - 0,117,113,0,0,0,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, - 10,32,32,32,32,32,32,32,32,73,102,32,39,112,97,116, - 104,39,32,105,115,32,101,118,101,114,32,115,112,101,99,105, - 102,105,101,100,32,116,104,101,110,32,116,104,101,32,115,101, - 97,114,99,104,32,105,115,32,99,111,110,115,105,100,101,114, - 101,100,32,97,32,102,97,105,108,117,114,101,46,10,10,32, - 32,32,32,32,32,32,32,78,40,3,0,0,0,117,4,0, - 0,0,78,111,110,101,117,4,0,0,0,95,105,109,112,117, - 10,0,0,0,105,115,95,98,117,105,108,116,105,110,40,3, - 0,0,0,117,3,0,0,0,99,108,115,117,8,0,0,0, - 102,117,108,108,110,97,109,101,117,4,0,0,0,112,97,116, - 104,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,11,0, - 0,0,102,105,110,100,95,109,111,100,117,108,101,129,2,0, - 0,115,6,0,0,0,0,7,12,1,4,1,117,27,0,0, - 0,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, - 46,102,105,110,100,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,3,0,0,0,9,0,0,0,67,0,0, - 0,115,88,0,0,0,124,1,0,116,0,0,106,1,0,107, - 6,0,125,2,0,121,20,0,116,2,0,116,3,0,106,4, - 0,124,1,0,131,2,0,83,87,110,46,0,1,1,1,124, - 2,0,12,114,76,0,124,1,0,116,0,0,106,1,0,107, - 6,0,114,76,0,116,0,0,106,1,0,124,1,0,61,110, - 0,0,130,0,0,89,110,1,0,88,100,1,0,83,40,2, - 0,0,0,117,23,0,0,0,76,111,97,100,32,97,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,46,78, - 40,5,0,0,0,117,3,0,0,0,115,121,115,117,7,0, - 0,0,109,111,100,117,108,101,115,117,25,0,0,0,95,99, - 97,108,108,95,119,105,116,104,95,102,114,97,109,101,115,95, - 114,101,109,111,118,101,100,117,4,0,0,0,95,105,109,112, - 117,12,0,0,0,105,110,105,116,95,98,117,105,108,116,105, - 110,40,3,0,0,0,117,3,0,0,0,99,108,115,117,8, - 0,0,0,102,117,108,108,110,97,109,101,117,9,0,0,0, - 105,115,95,114,101,108,111,97,100,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,11,0,0,0,108,111,97,100,95,109, - 111,100,117,108,101,140,2,0,0,115,14,0,0,0,0,6, - 15,1,3,1,20,1,3,1,22,1,13,1,117,27,0,0, - 0,66,117,105,108,116,105,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,1,0,0,0,67,0,0, - 0,115,4,0,0,0,100,1,0,83,40,2,0,0,0,117, - 57,0,0,0,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,117, - 108,101,115,32,100,111,32,110,111,116,32,104,97,118,101,32, - 99,111,100,101,32,111,98,106,101,99,116,115,46,78,40,1, - 0,0,0,117,4,0,0,0,78,111,110,101,40,2,0,0, - 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, - 108,108,110,97,109,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,8,0,0,0,103,101,116,95,99,111,100,101,154, - 2,0,0,115,2,0,0,0,0,4,117,24,0,0,0,66, - 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,103, - 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,1,0,83,40,2,0,0,0,117,56,0,0,0,82, - 101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,100, - 111,32,110,111,116,32,104,97,118,101,32,115,111,117,114,99, - 101,32,99,111,100,101,46,78,40,1,0,0,0,117,4,0, - 0,0,78,111,110,101,40,2,0,0,0,117,3,0,0,0, - 99,108,115,117,8,0,0,0,102,117,108,108,110,97,109,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,10,0,0, - 0,103,101,116,95,115,111,117,114,99,101,160,2,0,0,115, - 2,0,0,0,0,4,117,26,0,0,0,66,117,105,108,116, - 105,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,1,0,0,0,67,0,0,0,115,4,0,0,0,100, - 1,0,83,40,2,0,0,0,117,52,0,0,0,82,101,116, - 117,114,110,32,70,97,108,115,101,32,97,115,32,98,117,105, - 108,116,45,105,110,32,109,111,100,117,108,101,115,32,97,114, - 101,32,110,101,118,101,114,32,112,97,99,107,97,103,101,115, - 46,70,40,1,0,0,0,117,5,0,0,0,70,97,108,115, - 101,40,2,0,0,0,117,3,0,0,0,99,108,115,117,8, - 0,0,0,102,117,108,108,110,97,109,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,10,0,0,0,105,115,95,112, - 97,99,107,97,103,101,166,2,0,0,115,2,0,0,0,0, - 4,117,26,0,0,0,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, - 78,40,15,0,0,0,117,8,0,0,0,95,95,110,97,109, - 101,95,95,117,10,0,0,0,95,95,109,111,100,117,108,101, - 95,95,117,12,0,0,0,95,95,113,117,97,108,110,97,109, - 101,95,95,117,7,0,0,0,95,95,100,111,99,95,95,117, - 11,0,0,0,99,108,97,115,115,109,101,116,104,111,100,117, - 11,0,0,0,109,111,100,117,108,101,95,114,101,112,114,117, - 4,0,0,0,78,111,110,101,117,11,0,0,0,102,105,110, - 100,95,109,111,100,117,108,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,95,114,101,113, - 117,105,114,101,115,95,98,117,105,108,116,105,110,117,11,0, - 0,0,108,111,97,100,95,109,111,100,117,108,101,117,8,0, - 0,0,103,101,116,95,99,111,100,101,117,10,0,0,0,103, - 101,116,95,115,111,117,114,99,101,117,10,0,0,0,105,115, - 95,112,97,99,107,97,103,101,40,1,0,0,0,117,10,0, - 0,0,95,95,108,111,99,97,108,115,95,95,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,15,0,0,0,66,117,105, - 108,116,105,110,73,109,112,111,114,116,101,114,116,2,0,0, - 115,28,0,0,0,16,7,6,2,18,4,3,1,18,10,3, - 1,3,1,3,1,27,11,3,1,21,5,3,1,21,5,3, - 1,117,15,0,0,0,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,99,1,0,0,0,0,0,0,0,1,0, - 0,0,6,0,0,0,66,0,0,0,115,173,0,0,0,124, - 0,0,69,101,0,0,90,1,0,100,0,0,90,2,0,100, + 0,125,3,0,124,2,0,100,1,0,107,8,0,114,83,0, + 116,1,0,124,3,0,131,1,0,114,83,0,100,2,0,125, + 4,0,116,2,0,106,3,0,124,4,0,106,4,0,124,3, + 0,100,3,0,25,131,1,0,116,5,0,131,2,0,1,110, + 0,0,124,2,0,83,41,4,122,155,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,103, + 97,116,105,110,103,32,116,111,10,32,32,32,32,115,101,108, + 102,46,102,105,110,100,95,108,111,97,100,101,114,40,41,46, + 10,10,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, + 105,110,32,102,97,118,111,114,32,111,102,32,102,105,110,100, + 101,114,46,102,105,110,100,95,115,112,101,99,40,41,46,10, + 10,32,32,32,32,78,122,44,78,111,116,32,105,109,112,111, + 114,116,105,110,103,32,100,105,114,101,99,116,111,114,121,32, + 123,125,58,32,109,105,115,115,105,110,103,32,95,95,105,110, + 105,116,95,95,114,84,0,0,0,41,6,218,11,102,105,110, + 100,95,108,111,97,100,101,114,114,31,0,0,0,218,9,95, + 119,97,114,110,105,110,103,115,218,4,119,97,114,110,114,47, + 0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,105, + 110,103,41,5,114,71,0,0,0,114,158,0,0,0,218,6, + 108,111,97,100,101,114,218,8,112,111,114,116,105,111,110,115, + 218,3,109,115,103,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,17,95,102,105,110,100,95,109,111,100,117, + 108,101,95,115,104,105,109,53,2,0,0,115,10,0,0,0, + 0,10,21,1,24,1,6,1,32,1,114,172,0,0,0,99, + 2,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 67,0,0,0,115,93,0,0,0,116,0,0,124,1,0,124, + 0,0,131,2,0,125,2,0,116,1,0,124,2,0,131,1, + 0,125,3,0,124,1,0,116,2,0,106,3,0,107,6,0, + 114,79,0,116,2,0,106,3,0,124,1,0,25,125,4,0, + 124,3,0,106,4,0,124,4,0,131,1,0,1,116,2,0, + 106,3,0,124,1,0,25,83,124,3,0,106,5,0,131,0, + 0,83,100,1,0,83,41,2,122,128,76,111,97,100,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,32,105,110,116,111,32,115,121,115,46,109,111,100, + 117,108,101,115,32,97,110,100,32,114,101,116,117,114,110,32, + 105,116,46,10,10,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,108,111,97,100,101,114,46, + 101,120,101,99,95,109,111,100,117,108,101,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,78,41,6,218,16,115, + 112,101,99,95,102,114,111,109,95,108,111,97,100,101,114,218, + 12,95,83,112,101,99,77,101,116,104,111,100,115,114,7,0, + 0,0,114,73,0,0,0,218,4,101,120,101,99,218,4,108, + 111,97,100,41,5,114,71,0,0,0,114,158,0,0,0,218, + 4,115,112,101,99,218,7,109,101,116,104,111,100,115,218,6, + 109,111,100,117,108,101,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,17,95,108,111,97,100,95,109,111,100, + 117,108,101,95,115,104,105,109,70,2,0,0,115,14,0,0, + 0,0,6,15,1,12,1,15,1,13,1,13,1,11,2,114, + 180,0,0,0,99,4,0,0,0,0,0,0,0,11,0,0, + 0,19,0,0,0,67,0,0,0,115,243,1,0,0,105,0, + 0,125,4,0,124,2,0,100,1,0,107,9,0,114,31,0, + 124,2,0,124,4,0,100,2,0,60,110,6,0,100,3,0, + 125,2,0,124,3,0,100,1,0,107,9,0,114,62,0,124, + 3,0,124,4,0,100,4,0,60,110,0,0,124,0,0,100, + 1,0,100,5,0,133,2,0,25,125,5,0,124,0,0,100, + 5,0,100,6,0,133,2,0,25,125,6,0,124,0,0,100, + 6,0,100,7,0,133,2,0,25,125,7,0,124,5,0,116, + 0,0,107,3,0,114,168,0,100,8,0,106,1,0,124,2, + 0,124,5,0,131,2,0,125,8,0,116,2,0,124,8,0, + 131,1,0,1,116,3,0,124,8,0,124,4,0,141,1,0, + 130,1,0,110,116,0,116,4,0,124,6,0,131,1,0,100, + 5,0,107,3,0,114,226,0,100,9,0,106,1,0,124,2, + 0,131,1,0,125,8,0,116,2,0,124,8,0,131,1,0, + 1,116,5,0,124,8,0,131,1,0,130,1,0,110,58,0, + 116,4,0,124,7,0,131,1,0,100,5,0,107,3,0,114, + 28,1,100,10,0,106,1,0,124,2,0,131,1,0,125,8, + 0,116,2,0,124,8,0,131,1,0,1,116,5,0,124,8, + 0,131,1,0,130,1,0,110,0,0,124,1,0,100,1,0, + 107,9,0,114,229,1,121,20,0,116,6,0,124,1,0,100, + 11,0,25,131,1,0,125,9,0,87,110,18,0,4,116,7, + 0,107,10,0,114,80,1,1,1,1,89,110,62,0,88,116, + 8,0,124,6,0,131,1,0,124,9,0,107,3,0,114,142, + 1,100,12,0,106,1,0,124,2,0,131,1,0,125,8,0, + 116,2,0,124,8,0,131,1,0,1,116,3,0,124,8,0, + 124,4,0,141,1,0,130,1,0,110,0,0,121,18,0,124, + 1,0,100,13,0,25,100,14,0,64,125,10,0,87,110,18, + 0,4,116,7,0,107,10,0,114,180,1,1,1,1,89,113, + 229,1,88,116,8,0,124,7,0,131,1,0,124,10,0,107, + 3,0,114,229,1,116,3,0,100,12,0,106,1,0,124,2, + 0,131,1,0,124,4,0,141,1,0,130,1,0,113,229,1, + 110,0,0,124,0,0,100,7,0,100,1,0,133,2,0,25, + 83,41,15,97,122,1,0,0,86,97,108,105,100,97,116,101, + 32,116,104,101,32,104,101,97,100,101,114,32,111,102,32,116, + 104,101,32,112,97,115,115,101,100,45,105,110,32,98,121,116, + 101,99,111,100,101,32,97,103,97,105,110,115,116,32,115,111, + 117,114,99,101,95,115,116,97,116,115,32,40,105,102,10,32, + 32,32,32,103,105,118,101,110,41,32,97,110,100,32,114,101, + 116,117,114,110,105,110,103,32,116,104,101,32,98,121,116,101, + 99,111,100,101,32,116,104,97,116,32,99,97,110,32,98,101, + 32,99,111,109,112,105,108,101,100,32,98,121,32,99,111,109, + 112,105,108,101,40,41,46,10,10,32,32,32,32,65,108,108, + 32,111,116,104,101,114,32,97,114,103,117,109,101,110,116,115, + 32,97,114,101,32,117,115,101,100,32,116,111,32,101,110,104, + 97,110,99,101,32,101,114,114,111,114,32,114,101,112,111,114, + 116,105,110,103,46,10,10,32,32,32,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 32,119,104,101,110,32,116,104,101,32,109,97,103,105,99,32, + 110,117,109,98,101,114,32,105,115,32,105,110,99,111,114,114, + 101,99,116,32,111,114,32,116,104,101,32,98,121,116,101,99, + 111,100,101,32,105,115,10,32,32,32,32,102,111,117,110,100, + 32,116,111,32,98,101,32,115,116,97,108,101,46,32,69,79, + 70,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 32,119,104,101,110,32,116,104,101,32,100,97,116,97,32,105, + 115,32,102,111,117,110,100,32,116,111,32,98,101,10,32,32, + 32,32,116,114,117,110,99,97,116,101,100,46,10,10,32,32, + 32,32,78,114,67,0,0,0,122,10,60,98,121,116,101,99, + 111,100,101,62,114,35,0,0,0,114,12,0,0,0,233,8, + 0,0,0,233,12,0,0,0,122,30,98,97,100,32,109,97, + 103,105,99,32,110,117,109,98,101,114,32,105,110,32,123,33, + 114,125,58,32,123,33,114,125,122,43,114,101,97,99,104,101, + 100,32,69,79,70,32,119,104,105,108,101,32,114,101,97,100, + 105,110,103,32,116,105,109,101,115,116,97,109,112,32,105,110, + 32,123,33,114,125,122,48,114,101,97,99,104,101,100,32,69, + 79,70,32,119,104,105,108,101,32,114,101,97,100,105,110,103, + 32,115,105,122,101,32,111,102,32,115,111,117,114,99,101,32, + 105,110,32,123,33,114,125,218,5,109,116,105,109,101,122,26, + 98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,108, + 101,32,102,111,114,32,123,33,114,125,218,4,115,105,122,101, + 108,3,0,0,0,255,127,255,127,3,0,41,9,218,12,77, + 65,71,73,67,95,78,85,77,66,69,82,114,47,0,0,0, + 114,152,0,0,0,114,153,0,0,0,114,31,0,0,0,218, + 8,69,79,70,69,114,114,111,114,114,14,0,0,0,114,79, + 0,0,0,114,19,0,0,0,41,11,114,53,0,0,0,218, + 12,115,111,117,114,99,101,95,115,116,97,116,115,114,67,0, + 0,0,114,35,0,0,0,90,11,101,120,99,95,100,101,116, + 97,105,108,115,90,5,109,97,103,105,99,90,13,114,97,119, + 95,116,105,109,101,115,116,97,109,112,90,8,114,97,119,95, + 115,105,122,101,114,151,0,0,0,218,12,115,111,117,114,99, + 101,95,109,116,105,109,101,218,11,115,111,117,114,99,101,95, + 115,105,122,101,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,25,95,118,97,108,105,100,97,116,101,95,98, + 121,116,101,99,111,100,101,95,104,101,97,100,101,114,86,2, + 0,0,115,76,0,0,0,0,11,6,1,12,1,13,3,6, + 1,12,1,13,1,16,1,16,1,16,1,12,1,18,1,10, + 1,18,1,18,1,15,1,10,1,15,1,18,1,15,1,10, + 1,15,1,12,1,3,1,20,1,13,1,5,2,18,1,15, + 1,10,1,18,1,3,1,18,1,13,1,5,2,18,1,15, + 1,15,1,114,190,0,0,0,99,4,0,0,0,0,0,0, + 0,5,0,0,0,6,0,0,0,67,0,0,0,115,115,0, + 0,0,116,0,0,106,1,0,124,0,0,131,1,0,125,4, + 0,116,2,0,124,4,0,116,3,0,131,2,0,114,78,0, + 116,4,0,100,1,0,124,2,0,131,2,0,1,124,3,0, + 100,2,0,107,9,0,114,74,0,116,5,0,106,6,0,124, + 4,0,124,3,0,131,2,0,1,110,0,0,124,4,0,83, + 116,7,0,100,3,0,106,8,0,124,2,0,131,1,0,100, + 4,0,124,1,0,100,5,0,124,2,0,131,1,2,130,1, + 0,100,2,0,83,41,6,122,60,67,111,109,112,105,108,101, + 32,98,121,116,101,99,111,100,101,32,97,115,32,114,101,116, + 117,114,110,101,100,32,98,121,32,95,118,97,108,105,100,97, + 116,101,95,98,121,116,101,99,111,100,101,95,104,101,97,100, + 101,114,40,41,46,122,21,99,111,100,101,32,111,98,106,101, + 99,116,32,102,114,111,109,32,123,33,114,125,78,122,23,78, + 111,110,45,99,111,100,101,32,111,98,106,101,99,116,32,105, + 110,32,123,33,114,125,114,67,0,0,0,114,35,0,0,0, + 41,9,218,7,109,97,114,115,104,97,108,90,5,108,111,97, + 100,115,218,10,105,115,105,110,115,116,97,110,99,101,218,10, + 95,99,111,100,101,95,116,121,112,101,114,152,0,0,0,114, + 106,0,0,0,90,16,95,102,105,120,95,99,111,95,102,105, + 108,101,110,97,109,101,114,153,0,0,0,114,47,0,0,0, + 41,5,114,53,0,0,0,114,67,0,0,0,114,140,0,0, + 0,114,141,0,0,0,218,4,99,111,100,101,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,17,95,99,111, + 109,112,105,108,101,95,98,121,116,101,99,111,100,101,141,2, + 0,0,115,16,0,0,0,0,2,15,1,15,1,13,1,12, + 1,19,1,4,2,18,1,114,195,0,0,0,114,84,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,76,0,0,0,116,0,0,116,1, + 0,131,1,0,125,3,0,124,3,0,106,2,0,116,3,0, + 124,1,0,131,1,0,131,1,0,1,124,3,0,106,2,0, + 116,3,0,124,2,0,131,1,0,131,1,0,1,124,3,0, + 106,2,0,116,4,0,106,5,0,124,0,0,131,1,0,131, + 1,0,1,124,3,0,83,41,1,122,80,67,111,109,112,105, + 108,101,32,97,32,99,111,100,101,32,111,98,106,101,99,116, + 32,105,110,116,111,32,98,121,116,101,99,111,100,101,32,102, + 111,114,32,119,114,105,116,105,110,103,32,111,117,116,32,116, + 111,32,97,32,98,121,116,101,45,99,111,109,112,105,108,101, + 100,10,32,32,32,32,102,105,108,101,46,41,6,218,9,98, + 121,116,101,97,114,114,97,121,114,185,0,0,0,218,6,101, + 120,116,101,110,100,114,17,0,0,0,114,191,0,0,0,90, + 5,100,117,109,112,115,41,4,114,194,0,0,0,114,183,0, + 0,0,114,189,0,0,0,114,53,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,17,95,99,111, + 100,101,95,116,111,95,98,121,116,101,99,111,100,101,153,2, + 0,0,115,10,0,0,0,0,3,12,1,19,1,19,1,22, + 1,114,198,0,0,0,99,1,0,0,0,0,0,0,0,5, + 0,0,0,4,0,0,0,67,0,0,0,115,89,0,0,0, + 100,1,0,100,2,0,108,0,0,125,1,0,116,1,0,106, + 2,0,124,0,0,131,1,0,106,3,0,125,2,0,124,1, + 0,106,4,0,124,2,0,131,1,0,125,3,0,116,1,0, + 106,5,0,100,2,0,100,3,0,131,2,0,125,4,0,124, + 4,0,106,6,0,124,0,0,106,6,0,124,3,0,100,1, + 0,25,131,1,0,131,1,0,83,41,4,122,121,68,101,99, + 111,100,101,32,98,121,116,101,115,32,114,101,112,114,101,115, + 101,110,116,105,110,103,32,115,111,117,114,99,101,32,99,111, + 100,101,32,97,110,100,32,114,101,116,117,114,110,32,116,104, + 101,32,115,116,114,105,110,103,46,10,10,32,32,32,32,85, + 110,105,118,101,114,115,97,108,32,110,101,119,108,105,110,101, + 32,115,117,112,112,111,114,116,32,105,115,32,117,115,101,100, + 32,105,110,32,116,104,101,32,100,101,99,111,100,105,110,103, + 46,10,32,32,32,32,114,84,0,0,0,78,84,41,7,218, + 8,116,111,107,101,110,105,122,101,114,49,0,0,0,90,7, + 66,121,116,101,115,73,79,90,8,114,101,97,100,108,105,110, + 101,90,15,100,101,116,101,99,116,95,101,110,99,111,100,105, + 110,103,90,25,73,110,99,114,101,109,101,110,116,97,108,78, + 101,119,108,105,110,101,68,101,99,111,100,101,114,218,6,100, + 101,99,111,100,101,41,5,218,12,115,111,117,114,99,101,95, + 98,121,116,101,115,114,199,0,0,0,90,21,115,111,117,114, + 99,101,95,98,121,116,101,115,95,114,101,97,100,108,105,110, + 101,218,8,101,110,99,111,100,105,110,103,90,15,110,101,119, + 108,105,110,101,95,100,101,99,111,100,101,114,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,13,100,101,99, + 111,100,101,95,115,111,117,114,99,101,163,2,0,0,115,10, + 0,0,0,0,5,12,1,18,1,15,1,18,1,114,203,0, + 0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,35, + 0,0,0,67,0,0,0,115,15,1,0,0,116,0,0,124, + 0,0,100,1,0,100,0,0,131,3,0,125,1,0,116,1, + 0,124,1,0,100,2,0,131,2,0,114,74,0,121,17,0, + 124,1,0,106,2,0,124,0,0,131,1,0,83,87,113,74, + 0,4,116,3,0,107,10,0,114,70,0,1,1,1,89,113, + 74,0,88,110,0,0,121,13,0,124,0,0,106,4,0,125, + 2,0,87,110,18,0,4,116,5,0,107,10,0,114,107,0, + 1,1,1,89,110,29,0,88,124,2,0,100,0,0,107,9, + 0,114,136,0,116,6,0,124,2,0,131,1,0,106,2,0, + 131,0,0,83,121,13,0,124,0,0,106,7,0,125,3,0, + 87,110,24,0,4,116,5,0,107,10,0,114,175,0,1,1, + 1,100,3,0,125,3,0,89,110,1,0,88,121,13,0,124, + 0,0,106,8,0,125,4,0,87,110,59,0,4,116,5,0, + 107,10,0,114,250,0,1,1,1,124,1,0,100,0,0,107, + 8,0,114,230,0,100,4,0,106,9,0,124,3,0,131,1, + 0,83,100,5,0,106,9,0,124,3,0,124,1,0,131,2, + 0,83,89,110,17,0,88,100,6,0,106,9,0,124,3,0, + 124,4,0,131,2,0,83,100,0,0,83,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,125,62,122,20,60,109,111,100,117, + 108,101,32,123,33,114,125,32,40,123,33,114,125,41,62,122, + 23,60,109,111,100,117,108,101,32,123,33,114,125,32,102,114, + 111,109,32,123,33,114,125,62,41,10,114,62,0,0,0,114, + 60,0,0,0,114,205,0,0,0,218,9,69,120,99,101,112, + 116,105,111,110,218,8,95,95,115,112,101,99,95,95,218,14, + 65,116,116,114,105,98,117,116,101,69,114,114,111,114,114,174, + 0,0,0,114,57,0,0,0,218,8,95,95,102,105,108,101, + 95,95,114,47,0,0,0,41,5,114,179,0,0,0,114,169, + 0,0,0,114,177,0,0,0,114,67,0,0,0,114,131,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,12,95,109,111,100,117,108,101,95,114,101,112,114,177, + 2,0,0,115,46,0,0,0,0,2,18,1,15,4,3,1, + 17,1,13,1,8,1,3,1,13,1,13,1,5,2,12,1, + 16,4,3,1,13,1,13,1,11,1,3,1,13,1,13,1, + 12,1,13,2,21,2,114,211,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, + 115,52,0,0,0,101,0,0,90,1,0,100,0,0,90,2, + 0,100,1,0,100,2,0,132,0,0,90,3,0,100,3,0, + 100,4,0,132,0,0,90,4,0,100,5,0,100,6,0,132, + 0,0,90,5,0,100,7,0,83,41,8,218,17,95,105,110, + 115,116,97,108,108,101,100,95,115,97,102,101,108,121,99,2, + 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, + 0,0,0,115,25,0,0,0,124,1,0,124,0,0,95,0, + 0,124,1,0,106,1,0,124,0,0,95,2,0,100,0,0, + 83,41,1,78,41,3,218,7,95,109,111,100,117,108,101,114, + 208,0,0,0,218,5,95,115,112,101,99,41,2,114,71,0, + 0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,72,0,0,0,215,2,0,0,115, + 4,0,0,0,0,1,9,1,122,26,95,105,110,115,116,97, + 108,108,101,100,95,115,97,102,101,108,121,46,95,95,105,110, + 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,67,0,0,0,115,38,0,0,0,100,1, + 0,124,0,0,106,0,0,95,1,0,124,0,0,106,2,0, + 116,3,0,106,4,0,124,0,0,106,0,0,106,5,0,60, + 100,0,0,83,41,2,78,84,41,6,114,214,0,0,0,218, + 13,95,105,110,105,116,105,97,108,105,122,105,110,103,114,213, + 0,0,0,114,7,0,0,0,114,73,0,0,0,114,67,0, + 0,0,41,1,114,71,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,75,0,0,0,219,2,0, + 0,115,4,0,0,0,0,4,12,1,122,27,95,105,110,115, + 116,97,108,108,101,100,95,115,97,102,101,108,121,46,95,95, + 101,110,116,101,114,95,95,99,1,0,0,0,0,0,0,0, + 3,0,0,0,17,0,0,0,71,0,0,0,115,121,0,0, + 0,122,101,0,124,0,0,106,0,0,125,2,0,116,1,0, + 100,1,0,100,2,0,132,0,0,124,1,0,68,131,1,0, + 131,1,0,114,78,0,121,17,0,116,2,0,106,3,0,124, + 2,0,106,4,0,61,87,113,100,0,4,116,5,0,107,10, + 0,114,74,0,1,1,1,89,113,100,0,88,110,22,0,116, + 6,0,100,3,0,124,2,0,106,4,0,124,2,0,106,7, + 0,131,3,0,1,87,100,0,0,100,4,0,124,0,0,106, + 0,0,95,8,0,88,100,0,0,83,41,5,78,99,1,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,0, + 0,0,115,27,0,0,0,124,0,0,93,17,0,125,1,0, + 124,1,0,100,0,0,107,9,0,86,1,113,3,0,100,0, + 0,83,41,1,78,114,4,0,0,0,41,2,114,22,0,0, + 0,114,76,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,77,0,0,0,229,2,0,0,115,2, + 0,0,0,6,0,122,45,95,105,110,115,116,97,108,108,101, + 100,95,115,97,102,101,108,121,46,95,95,101,120,105,116,95, + 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, + 120,112,114,62,122,18,105,109,112,111,114,116,32,123,33,114, + 125,32,35,32,123,33,114,125,70,41,9,114,214,0,0,0, + 114,78,0,0,0,114,7,0,0,0,114,73,0,0,0,114, + 67,0,0,0,114,79,0,0,0,114,152,0,0,0,114,169, + 0,0,0,114,215,0,0,0,41,3,114,71,0,0,0,114, + 80,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,81,0,0,0,226,2,0, + 0,115,18,0,0,0,0,1,3,1,9,1,25,1,3,1, + 17,1,13,1,8,2,26,2,122,26,95,105,110,115,116,97, + 108,108,101,100,95,115,97,102,101,108,121,46,95,95,101,120, + 105,116,95,95,78,41,6,114,57,0,0,0,114,56,0,0, + 0,114,58,0,0,0,114,72,0,0,0,114,75,0,0,0, + 114,81,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,212,0,0,0,213,2, + 0,0,115,6,0,0,0,12,2,12,4,12,7,114,212,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,8, + 0,0,0,64,0,0,0,115,172,0,0,0,101,0,0,90, + 1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2, + 0,100,3,0,100,4,0,100,3,0,100,5,0,100,3,0, + 100,6,0,100,7,0,132,0,3,90,4,0,100,8,0,100, + 9,0,132,0,0,90,5,0,100,10,0,100,11,0,132,0, + 0,90,6,0,101,7,0,100,12,0,100,13,0,132,0,0, + 131,1,0,90,8,0,101,8,0,106,9,0,100,14,0,100, + 13,0,132,0,0,131,1,0,90,8,0,101,7,0,100,15, + 0,100,16,0,132,0,0,131,1,0,90,10,0,101,7,0, + 100,17,0,100,18,0,132,0,0,131,1,0,90,11,0,101, + 11,0,106,9,0,100,19,0,100,18,0,132,0,0,131,1, + 0,90,11,0,100,3,0,83,41,20,218,10,77,111,100,117, + 108,101,83,112,101,99,97,208,5,0,0,84,104,101,32,115, + 112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114, + 32,97,32,109,111,100,117,108,101,44,32,117,115,101,100,32, + 102,111,114,32,108,111,97,100,105,110,103,46,10,10,32,32, + 32,32,65,32,109,111,100,117,108,101,39,115,32,115,112,101, + 99,32,105,115,32,116,104,101,32,115,111,117,114,99,101,32, + 102,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32, + 97,98,111,117,116,32,116,104,101,32,109,111,100,117,108,101, + 46,32,32,70,111,114,10,32,32,32,32,100,97,116,97,32, + 97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32, + 116,104,101,32,109,111,100,117,108,101,44,32,105,110,99,108, + 117,100,105,110,103,32,115,111,117,114,99,101,44,32,117,115, + 101,32,116,104,101,32,115,112,101,99,39,115,10,32,32,32, + 32,108,111,97,100,101,114,46,10,10,32,32,32,32,96,110, + 97,109,101,96,32,105,115,32,116,104,101,32,97,98,115,111, + 108,117,116,101,32,110,97,109,101,32,111,102,32,116,104,101, + 32,109,111,100,117,108,101,46,32,32,96,108,111,97,100,101, + 114,96,32,105,115,32,116,104,101,32,108,111,97,100,101,114, + 10,32,32,32,32,116,111,32,117,115,101,32,119,104,101,110, + 32,108,111,97,100,105,110,103,32,116,104,101,32,109,111,100, + 117,108,101,46,32,32,96,112,97,114,101,110,116,96,32,105, + 115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104, + 101,10,32,32,32,32,112,97,99,107,97,103,101,32,116,104, + 101,32,109,111,100,117,108,101,32,105,115,32,105,110,46,32, + 32,84,104,101,32,112,97,114,101,110,116,32,105,115,32,100, + 101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32, + 110,97,109,101,46,10,10,32,32,32,32,96,105,115,95,112, + 97,99,107,97,103,101,96,32,100,101,116,101,114,109,105,110, + 101,115,32,105,102,32,116,104,101,32,109,111,100,117,108,101, + 32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97, + 32,112,97,99,107,97,103,101,32,111,114,10,32,32,32,32, + 110,111,116,46,32,32,79,110,32,109,111,100,117,108,101,115, + 32,116,104,105,115,32,105,115,32,114,101,102,108,101,99,116, + 101,100,32,98,121,32,116,104,101,32,96,95,95,112,97,116, + 104,95,95,96,32,97,116,116,114,105,98,117,116,101,46,10, + 10,32,32,32,32,96,111,114,105,103,105,110,96,32,105,115, + 32,116,104,101,32,115,112,101,99,105,102,105,99,32,108,111, + 99,97,116,105,111,110,32,117,115,101,100,32,98,121,32,116, + 104,101,32,108,111,97,100,101,114,32,102,114,111,109,32,119, + 104,105,99,104,32,116,111,10,32,32,32,32,108,111,97,100, + 32,116,104,101,32,109,111,100,117,108,101,44,32,105,102,32, + 116,104,97,116,32,105,110,102,111,114,109,97,116,105,111,110, + 32,105,115,32,97,118,97,105,108,97,98,108,101,46,32,32, + 87,104,101,110,32,102,105,108,101,110,97,109,101,32,105,115, + 10,32,32,32,32,115,101,116,44,32,111,114,105,103,105,110, + 32,119,105,108,108,32,109,97,116,99,104,46,10,10,32,32, + 32,32,96,104,97,115,95,108,111,99,97,116,105,111,110,96, + 32,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32, + 97,32,115,112,101,99,39,115,32,34,111,114,105,103,105,110, + 34,32,114,101,102,108,101,99,116,115,32,97,32,108,111,99, + 97,116,105,111,110,46,10,32,32,32,32,87,104,101,110,32, + 116,104,105,115,32,105,115,32,84,114,117,101,44,32,96,95, + 95,102,105,108,101,95,95,96,32,97,116,116,114,105,98,117, + 116,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, + 32,105,115,32,115,101,116,46,10,10,32,32,32,32,96,99, + 97,99,104,101,100,96,32,105,115,32,116,104,101,32,108,111, + 99,97,116,105,111,110,32,111,102,32,116,104,101,32,99,97, + 99,104,101,100,32,98,121,116,101,99,111,100,101,32,102,105, + 108,101,44,32,105,102,32,97,110,121,46,32,32,73,116,10, + 32,32,32,32,99,111,114,114,101,115,112,111,110,100,115,32, + 116,111,32,116,104,101,32,96,95,95,99,97,99,104,101,100, + 95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,10, + 32,32,32,32,96,115,117,98,109,111,100,117,108,101,95,115, + 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,96, + 32,105,115,32,116,104,101,32,115,101,113,117,101,110,99,101, + 32,111,102,32,112,97,116,104,32,101,110,116,114,105,101,115, + 32,116,111,10,32,32,32,32,115,101,97,114,99,104,32,119, + 104,101,110,32,105,109,112,111,114,116,105,110,103,32,115,117, + 98,109,111,100,117,108,101,115,46,32,32,73,102,32,115,101, + 116,44,32,105,115,95,112,97,99,107,97,103,101,32,115,104, + 111,117,108,100,32,98,101,10,32,32,32,32,84,114,117,101, + 45,45,97,110,100,32,70,97,108,115,101,32,111,116,104,101, + 114,119,105,115,101,46,10,10,32,32,32,32,80,97,99,107, + 97,103,101,115,32,97,114,101,32,115,105,109,112,108,121,32, + 109,111,100,117,108,101,115,32,116,104,97,116,32,40,109,97, + 121,41,32,104,97,118,101,32,115,117,98,109,111,100,117,108, + 101,115,46,32,32,73,102,32,97,32,115,112,101,99,10,32, + 32,32,32,104,97,115,32,97,32,110,111,110,45,78,111,110, + 101,32,118,97,108,117,101,32,105,110,32,96,115,117,98,109, + 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, + 97,116,105,111,110,115,96,44,32,116,104,101,32,105,109,112, + 111,114,116,10,32,32,32,32,115,121,115,116,101,109,32,119, + 105,108,108,32,99,111,110,115,105,100,101,114,32,109,111,100, + 117,108,101,115,32,108,111,97,100,101,100,32,102,114,111,109, + 32,116,104,101,32,115,112,101,99,32,97,115,32,112,97,99, + 107,97,103,101,115,46,10,10,32,32,32,32,79,110,108,121, + 32,102,105,110,100,101,114,115,32,40,115,101,101,32,105,109, + 112,111,114,116,108,105,98,46,97,98,99,46,77,101,116,97, + 80,97,116,104,70,105,110,100,101,114,32,97,110,100,10,32, + 32,32,32,105,109,112,111,114,116,108,105,98,46,97,98,99, + 46,80,97,116,104,69,110,116,114,121,70,105,110,100,101,114, + 41,32,115,104,111,117,108,100,32,109,111,100,105,102,121,32, + 77,111,100,117,108,101,83,112,101,99,32,105,110,115,116,97, + 110,99,101,115,46,10,10,32,32,32,32,218,6,111,114,105, + 103,105,110,78,218,12,108,111,97,100,101,114,95,115,116,97, + 116,101,218,10,105,115,95,112,97,99,107,97,103,101,99,3, + 0,0,0,3,0,0,0,6,0,0,0,2,0,0,0,67, + 0,0,0,115,79,0,0,0,124,1,0,124,0,0,95,0, + 0,124,2,0,124,0,0,95,1,0,124,3,0,124,0,0, + 95,2,0,124,4,0,124,0,0,95,3,0,124,5,0,114, + 48,0,103,0,0,110,3,0,100,0,0,124,0,0,95,4, + 0,100,1,0,124,0,0,95,5,0,100,0,0,124,0,0, + 95,6,0,100,0,0,83,41,2,78,70,41,7,114,67,0, + 0,0,114,169,0,0,0,114,217,0,0,0,114,218,0,0, + 0,218,26,115,117,98,109,111,100,117,108,101,95,115,101,97, + 114,99,104,95,108,111,99,97,116,105,111,110,115,218,13,95, + 115,101,116,95,102,105,108,101,97,116,116,114,218,7,95,99, + 97,99,104,101,100,41,6,114,71,0,0,0,114,67,0,0, + 0,114,169,0,0,0,114,217,0,0,0,114,218,0,0,0, + 114,219,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,72,0,0,0,21,3,0,0,115,14,0, + 0,0,0,2,9,1,9,1,9,1,9,1,21,3,9,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,153,0,0,0,100, + 1,0,106,0,0,124,0,0,106,1,0,131,1,0,100,2, + 0,106,0,0,124,0,0,106,2,0,131,1,0,103,2,0, + 125,1,0,124,0,0,106,3,0,100,0,0,107,9,0,114, + 79,0,124,1,0,106,4,0,100,3,0,106,0,0,124,0, + 0,106,3,0,131,1,0,131,1,0,1,110,0,0,124,0, + 0,106,5,0,100,0,0,107,9,0,114,122,0,124,1,0, + 106,4,0,100,4,0,106,0,0,124,0,0,106,5,0,131, + 1,0,131,1,0,1,110,0,0,100,5,0,106,0,0,124, + 0,0,106,6,0,106,7,0,100,6,0,106,8,0,124,1, + 0,131,1,0,131,2,0,83,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,117,108,101,95,115,101,97,114, + 99,104,95,108,111,99,97,116,105,111,110,115,61,123,125,122, + 6,123,125,40,123,125,41,122,2,44,32,41,9,114,47,0, + 0,0,114,67,0,0,0,114,169,0,0,0,114,217,0,0, + 0,218,6,97,112,112,101,110,100,114,220,0,0,0,218,9, + 95,95,99,108,97,115,115,95,95,114,57,0,0,0,114,26, + 0,0,0,41,2,114,71,0,0,0,114,80,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,101, + 0,0,0,33,3,0,0,115,16,0,0,0,0,1,15,1, + 21,1,15,1,28,1,15,1,6,1,22,1,122,19,77,111, + 100,117,108,101,83,112,101,99,46,95,95,114,101,112,114,95, + 95,99,2,0,0,0,0,0,0,0,3,0,0,0,13,0, + 0,0,67,0,0,0,115,145,0,0,0,124,0,0,106,0, + 0,125,2,0,121,107,0,124,0,0,106,1,0,124,1,0, + 106,1,0,107,2,0,111,114,0,124,0,0,106,2,0,124, + 1,0,106,2,0,107,2,0,111,114,0,124,0,0,106,3, + 0,124,1,0,106,3,0,107,2,0,111,114,0,124,2,0, + 124,1,0,106,0,0,107,2,0,111,114,0,124,0,0,106, + 4,0,124,1,0,106,4,0,107,2,0,111,114,0,124,0, + 0,106,5,0,124,1,0,106,5,0,107,2,0,83,87,110, + 22,0,4,116,6,0,107,10,0,114,140,0,1,1,1,100, + 1,0,83,89,110,1,0,88,100,0,0,83,41,2,78,70, + 41,7,114,220,0,0,0,114,67,0,0,0,114,169,0,0, + 0,114,217,0,0,0,218,6,99,97,99,104,101,100,218,12, + 104,97,115,95,108,111,99,97,116,105,111,110,114,209,0,0, + 0,41,3,114,71,0,0,0,218,5,111,116,104,101,114,218, + 4,115,109,115,108,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,6,95,95,101,113,95,95,43,3,0,0, + 115,20,0,0,0,0,1,9,1,3,1,18,1,18,1,18, + 1,15,1,18,1,20,1,13,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,2,0,0,0,12,0,0,0,67,0,0, + 0,115,158,0,0,0,124,0,0,106,0,0,100,0,0,107, + 8,0,114,151,0,124,0,0,106,1,0,100,0,0,107,9, + 0,114,151,0,124,0,0,106,2,0,114,151,0,124,0,0, + 106,1,0,125,1,0,124,1,0,106,3,0,116,4,0,116, + 5,0,131,1,0,131,1,0,114,112,0,121,19,0,116,6, + 0,124,1,0,131,1,0,124,0,0,95,0,0,87,113,145, + 0,4,116,7,0,107,10,0,114,108,0,1,1,1,89,113, + 145,0,88,113,148,0,124,1,0,106,3,0,116,4,0,116, + 8,0,131,1,0,131,1,0,114,148,0,124,1,0,124,0, + 0,95,0,0,113,148,0,113,151,0,110,0,0,124,0,0, + 106,0,0,83,41,1,78,41,9,114,222,0,0,0,114,217, + 0,0,0,114,221,0,0,0,218,8,101,110,100,115,119,105, + 116,104,218,5,116,117,112,108,101,114,134,0,0,0,114,132, + 0,0,0,114,124,0,0,0,218,17,66,89,84,69,67,79, + 68,69,95,83,85,70,70,73,88,69,83,41,2,114,71,0, + 0,0,114,131,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,225,0,0,0,55,3,0,0,115, + 22,0,0,0,0,2,15,1,24,1,9,1,21,1,3,1, + 19,1,13,1,8,1,21,1,18,1,122,17,77,111,100,117, + 108,101,83,112,101,99,46,99,97,99,104,101,100,99,2,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,13,0,0,0,124,1,0,124,0,0,95,0,0, + 100,0,0,83,41,1,78,41,1,114,222,0,0,0,41,2, + 114,71,0,0,0,114,225,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,225,0,0,0,69,3, + 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,46, + 0,0,0,124,0,0,106,0,0,100,1,0,107,8,0,114, + 35,0,124,0,0,106,1,0,106,2,0,100,2,0,131,1, + 0,100,3,0,25,83,124,0,0,106,1,0,83,100,1,0, + 83,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,114,116,0,0,0,114,84,0,0,0, + 41,3,114,220,0,0,0,114,67,0,0,0,114,32,0,0, + 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,6,112,97,114,101,110,116,73, + 3,0,0,115,6,0,0,0,0,3,15,1,20,2,122,17, + 77,111,100,117,108,101,83,112,101,99,46,112,97,114,101,110, + 116,99,1,0,0,0,0,0,0,0,1,0,0,0,1,0, + 0,0,67,0,0,0,115,7,0,0,0,124,0,0,106,0, + 0,83,41,1,78,41,1,114,221,0,0,0,41,1,114,71, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,226,0,0,0,81,3,0,0,115,2,0,0,0, + 0,2,122,23,77,111,100,117,108,101,83,112,101,99,46,104, + 97,115,95,108,111,99,97,116,105,111,110,99,2,0,0,0, + 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, + 115,19,0,0,0,116,0,0,124,1,0,131,1,0,124,0, + 0,95,1,0,100,0,0,83,41,1,78,41,2,218,4,98, + 111,111,108,114,221,0,0,0,41,2,114,71,0,0,0,218, + 5,118,97,108,117,101,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,226,0,0,0,85,3,0,0,115,2, + 0,0,0,0,2,41,12,114,57,0,0,0,114,56,0,0, + 0,114,58,0,0,0,114,59,0,0,0,114,72,0,0,0, + 114,101,0,0,0,114,229,0,0,0,218,8,112,114,111,112, + 101,114,116,121,114,225,0,0,0,218,6,115,101,116,116,101, + 114,114,233,0,0,0,114,226,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 216,0,0,0,240,2,0,0,115,20,0,0,0,12,35,6, + 2,15,1,15,11,12,10,12,12,18,14,21,4,18,8,18, + 4,114,216,0,0,0,114,217,0,0,0,114,219,0,0,0, + 99,2,0,0,0,2,0,0,0,5,0,0,0,15,0,0, + 0,67,0,0,0,115,193,0,0,0,116,0,0,124,1,0, + 100,1,0,131,2,0,114,83,0,124,3,0,100,2,0,107, + 8,0,114,43,0,116,1,0,124,0,0,100,3,0,124,1, + 0,131,1,1,83,124,3,0,114,55,0,103,0,0,110,3, + 0,100,2,0,125,4,0,116,1,0,124,0,0,100,3,0, + 124,1,0,100,4,0,124,4,0,131,1,2,83,124,3,0, + 100,2,0,107,8,0,114,168,0,116,0,0,124,1,0,100, + 5,0,131,2,0,114,159,0,121,19,0,124,1,0,106,2, + 0,124,0,0,131,1,0,125,3,0,87,113,165,0,4,116, + 3,0,107,10,0,114,155,0,1,1,1,100,2,0,125,3, + 0,89,113,165,0,88,113,168,0,100,6,0,125,3,0,110, + 0,0,116,4,0,124,0,0,124,1,0,100,7,0,124,2, + 0,100,5,0,124,3,0,131,2,2,83,41,8,122,53,82, + 101,116,117,114,110,32,97,32,109,111,100,117,108,101,32,115, + 112,101,99,32,98,97,115,101,100,32,111,110,32,118,97,114, + 105,111,117,115,32,108,111,97,100,101,114,32,109,101,116,104, + 111,100,115,46,218,12,103,101,116,95,102,105,108,101,110,97, + 109,101,78,114,169,0,0,0,114,220,0,0,0,114,219,0, + 0,0,70,114,217,0,0,0,41,5,114,60,0,0,0,218, + 23,115,112,101,99,95,102,114,111,109,95,102,105,108,101,95, + 108,111,99,97,116,105,111,110,114,219,0,0,0,114,153,0, + 0,0,114,216,0,0,0,41,5,114,67,0,0,0,114,169, + 0,0,0,114,217,0,0,0,114,219,0,0,0,90,6,115, + 101,97,114,99,104,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,173,0,0,0,90,3,0,0,115,28,0, + 0,0,0,2,15,1,12,1,16,1,18,1,15,1,7,2, + 12,1,15,1,3,1,19,1,13,1,14,3,9,2,114,173, + 0,0,0,114,169,0,0,0,114,220,0,0,0,99,2,0, + 0,0,2,0,0,0,9,0,0,0,19,0,0,0,67,0, + 0,0,115,110,1,0,0,124,1,0,100,1,0,107,8,0, + 114,79,0,100,2,0,125,1,0,116,0,0,124,2,0,100, + 3,0,131,2,0,114,79,0,121,19,0,124,2,0,106,1, + 0,124,0,0,131,1,0,125,1,0,87,113,76,0,4,116, + 2,0,107,10,0,114,72,0,1,1,1,89,113,76,0,88, + 113,79,0,110,0,0,116,3,0,124,0,0,124,2,0,100, + 4,0,124,1,0,131,2,1,125,4,0,100,5,0,124,4, + 0,95,4,0,124,2,0,100,1,0,107,8,0,114,203,0, + 120,79,0,116,5,0,131,0,0,68,93,61,0,92,2,0, + 125,5,0,125,6,0,124,1,0,106,6,0,116,7,0,124, + 6,0,131,1,0,131,1,0,114,131,0,124,5,0,124,0, + 0,124,1,0,131,2,0,125,2,0,124,2,0,124,4,0, + 95,8,0,80,113,131,0,113,131,0,87,100,1,0,83,110, + 0,0,124,3,0,116,9,0,107,8,0,114,38,1,116,0, + 0,124,2,0,100,6,0,131,2,0,114,47,1,121,19,0, + 124,2,0,106,10,0,124,0,0,131,1,0,125,7,0,87, + 110,18,0,4,116,2,0,107,10,0,114,13,1,1,1,1, + 89,113,35,1,88,124,7,0,114,35,1,103,0,0,124,4, + 0,95,11,0,113,35,1,113,47,1,110,9,0,124,3,0, + 124,4,0,95,11,0,124,4,0,106,11,0,103,0,0,107, + 2,0,114,106,1,124,1,0,114,106,1,116,12,0,124,1, + 0,131,1,0,100,7,0,25,125,8,0,124,4,0,106,11, + 0,106,13,0,124,8,0,131,1,0,1,113,106,1,110,0, + 0,124,4,0,83,41,8,97,61,1,0,0,82,101,116,117, + 114,110,32,97,32,109,111,100,117,108,101,32,115,112,101,99, + 32,98,97,115,101,100,32,111,110,32,97,32,102,105,108,101, + 32,108,111,99,97,116,105,111,110,46,10,10,32,32,32,32, + 84,111,32,105,110,100,105,99,97,116,101,32,116,104,97,116, + 32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,97, + 32,112,97,99,107,97,103,101,44,32,115,101,116,10,32,32, + 32,32,115,117,98,109,111,100,117,108,101,95,115,101,97,114, + 99,104,95,108,111,99,97,116,105,111,110,115,32,116,111,32, + 97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116, + 111,114,121,32,112,97,116,104,115,46,32,32,65,110,10,32, + 32,32,32,101,109,112,116,121,32,108,105,115,116,32,105,115, + 32,115,117,102,102,105,99,105,101,110,116,44,32,116,104,111, + 117,103,104,32,105,116,115,32,110,111,116,32,111,116,104,101, + 114,119,105,115,101,32,117,115,101,102,117,108,32,116,111,32, + 116,104,101,10,32,32,32,32,105,109,112,111,114,116,32,115, + 121,115,116,101,109,46,10,10,32,32,32,32,84,104,101,32, + 108,111,97,100,101,114,32,109,117,115,116,32,116,97,107,101, + 32,97,32,115,112,101,99,32,97,115,32,105,116,115,32,111, + 110,108,121,32,95,95,105,110,105,116,95,95,40,41,32,97, + 114,103,46,10,10,32,32,32,32,78,122,9,60,117,110,107, + 110,111,119,110,62,114,238,0,0,0,114,217,0,0,0,84, + 114,219,0,0,0,114,84,0,0,0,41,14,114,60,0,0, + 0,114,238,0,0,0,114,153,0,0,0,114,216,0,0,0, + 114,221,0,0,0,218,27,95,103,101,116,95,115,117,112,112, + 111,114,116,101,100,95,102,105,108,101,95,108,111,97,100,101, + 114,115,114,230,0,0,0,114,231,0,0,0,114,169,0,0, + 0,218,9,95,80,79,80,85,76,65,84,69,114,219,0,0, + 0,114,220,0,0,0,114,38,0,0,0,114,223,0,0,0, + 41,9,114,67,0,0,0,218,8,108,111,99,97,116,105,111, + 110,114,169,0,0,0,114,220,0,0,0,114,177,0,0,0, + 218,12,108,111,97,100,101,114,95,99,108,97,115,115,114,127, + 0,0,0,114,219,0,0,0,90,7,100,105,114,110,97,109, + 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,239,0,0,0,115,3,0,0,115,60,0,0,0,0,12, + 12,4,6,1,15,2,3,1,19,1,13,1,11,8,21,1, + 9,3,12,1,22,1,21,1,15,1,9,1,8,2,7,3, + 12,2,15,1,3,1,19,1,13,1,5,2,6,1,18,2, + 9,1,15,1,6,1,16,1,22,2,114,239,0,0,0,99, + 3,0,0,0,0,0,0,0,8,0,0,0,53,0,0,0, + 67,0,0,0,115,124,1,0,0,121,13,0,124,0,0,106, + 0,0,125,3,0,87,110,18,0,4,116,1,0,107,10,0, + 114,33,0,1,1,1,89,110,17,0,88,124,3,0,100,0, + 0,107,9,0,114,50,0,124,3,0,83,124,0,0,106,2, + 0,125,4,0,124,1,0,100,0,0,107,8,0,114,108,0, + 121,13,0,124,0,0,106,3,0,125,1,0,87,113,108,0, + 4,116,1,0,107,10,0,114,104,0,1,1,1,89,113,108, + 0,88,110,0,0,121,13,0,124,0,0,106,4,0,125,5, + 0,87,110,24,0,4,116,1,0,107,10,0,114,147,0,1, + 1,1,100,0,0,125,5,0,89,110,1,0,88,124,2,0, + 100,0,0,107,8,0,114,224,0,124,5,0,100,0,0,107, + 8,0,114,215,0,121,13,0,124,1,0,106,5,0,125,2, + 0,87,113,221,0,4,116,1,0,107,10,0,114,211,0,1, + 1,1,100,0,0,125,2,0,89,113,221,0,88,113,224,0, + 124,5,0,125,2,0,110,0,0,121,13,0,124,0,0,106, + 6,0,125,6,0,87,110,24,0,4,116,1,0,107,10,0, + 114,7,1,1,1,1,100,0,0,125,6,0,89,110,1,0, + 88,121,19,0,116,7,0,124,0,0,106,8,0,131,1,0, + 125,7,0,87,110,24,0,4,116,1,0,107,10,0,114,53, + 1,1,1,1,100,0,0,125,7,0,89,110,1,0,88,116, + 9,0,124,4,0,124,1,0,100,1,0,124,2,0,131,2, + 1,125,3,0,124,5,0,100,0,0,107,8,0,114,93,1, + 100,2,0,110,3,0,100,3,0,124,3,0,95,10,0,124, + 6,0,124,3,0,95,11,0,124,7,0,124,3,0,95,12, + 0,124,3,0,83,41,4,78,114,217,0,0,0,70,84,41, + 13,114,208,0,0,0,114,209,0,0,0,114,57,0,0,0, + 114,204,0,0,0,114,210,0,0,0,90,7,95,79,82,73, + 71,73,78,218,10,95,95,99,97,99,104,101,100,95,95,218, + 4,108,105,115,116,218,8,95,95,112,97,116,104,95,95,114, + 216,0,0,0,114,221,0,0,0,114,225,0,0,0,114,220, + 0,0,0,41,8,114,179,0,0,0,114,169,0,0,0,114, + 217,0,0,0,114,177,0,0,0,114,67,0,0,0,114,242, + 0,0,0,114,225,0,0,0,114,220,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,17,95,115, + 112,101,99,95,102,114,111,109,95,109,111,100,117,108,101,179, + 3,0,0,115,72,0,0,0,0,2,3,1,13,1,13,1, + 5,2,12,1,4,2,9,1,12,1,3,1,13,1,13,2, + 8,1,3,1,13,1,13,1,11,1,12,1,12,1,3,1, + 13,1,13,1,14,2,9,1,3,1,13,1,13,1,11,1, + 3,1,19,1,13,1,11,2,21,1,27,1,9,1,9,1, + 114,247,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,64,0,0,0,115,142,0,0,0,101, + 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, + 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, + 100,5,0,132,0,0,90,5,0,100,6,0,100,7,0,100, + 8,0,100,9,0,100,10,0,100,11,0,132,0,2,90,6, + 0,100,12,0,100,13,0,132,0,0,90,7,0,100,14,0, + 100,15,0,132,0,0,90,8,0,100,16,0,100,17,0,132, + 0,0,90,9,0,100,18,0,100,19,0,132,0,0,90,10, + 0,100,20,0,100,21,0,132,0,0,90,11,0,100,22,0, + 100,23,0,132,0,0,90,12,0,100,24,0,83,41,25,114, + 174,0,0,0,122,77,67,111,110,118,101,110,105,101,110,99, + 101,32,119,114,97,112,112,101,114,32,97,114,111,117,110,100, + 32,115,112,101,99,32,111,98,106,101,99,116,115,32,116,111, + 32,112,114,111,118,105,100,101,32,115,112,101,99,45,115,112, + 101,99,105,102,105,99,10,32,32,32,32,109,101,116,104,111, + 100,115,46,99,2,0,0,0,0,0,0,0,2,0,0,0, + 2,0,0,0,67,0,0,0,115,13,0,0,0,124,1,0, + 124,0,0,95,0,0,100,0,0,83,41,1,78,41,1,114, + 177,0,0,0,41,2,114,71,0,0,0,114,177,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 72,0,0,0,231,3,0,0,115,2,0,0,0,0,1,122, + 21,95,83,112,101,99,77,101,116,104,111,100,115,46,95,95, + 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,67,0,0,0,115,158,0,0,0, + 124,0,0,106,0,0,125,1,0,124,1,0,106,1,0,100, + 1,0,107,8,0,114,30,0,100,2,0,110,6,0,124,1, + 0,106,1,0,125,2,0,124,1,0,106,2,0,100,1,0, + 107,8,0,114,104,0,124,1,0,106,3,0,100,1,0,107, + 8,0,114,82,0,100,3,0,106,4,0,124,2,0,131,1, + 0,83,100,4,0,106,4,0,124,2,0,124,1,0,106,3, + 0,131,2,0,83,110,50,0,124,1,0,106,5,0,114,132, + 0,100,5,0,106,4,0,124,2,0,124,1,0,106,2,0, + 131,2,0,83,100,6,0,106,4,0,124,1,0,106,1,0, + 124,1,0,106,2,0,131,2,0,83,100,1,0,83,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,206,0,0,0,122,13, + 60,109,111,100,117,108,101,32,123,33,114,125,62,122,20,60, + 109,111,100,117,108,101,32,123,33,114,125,32,40,123,33,114, + 125,41,62,122,23,60,109,111,100,117,108,101,32,123,33,114, + 125,32,102,114,111,109,32,123,33,114,125,62,122,18,60,109, + 111,100,117,108,101,32,123,33,114,125,32,40,123,125,41,62, + 41,6,114,177,0,0,0,114,67,0,0,0,114,217,0,0, + 0,114,169,0,0,0,114,47,0,0,0,114,226,0,0,0, + 41,3,114,71,0,0,0,114,177,0,0,0,114,67,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,205,0,0,0,234,3,0,0,115,18,0,0,0,0,3, + 9,1,30,1,15,1,15,1,13,2,22,2,9,1,19,2, + 122,24,95,83,112,101,99,77,101,116,104,111,100,115,46,109, + 111,100,117,108,101,95,114,101,112,114,218,9,95,111,118,101, + 114,114,105,100,101,70,218,11,95,102,111,114,99,101,95,110, + 97,109,101,84,99,2,0,0,0,2,0,0,0,6,0,0, + 0,66,0,0,0,67,0,0,0,115,75,2,0,0,124,0, + 0,106,0,0,125,4,0,124,2,0,115,45,0,124,3,0, + 115,45,0,116,1,0,124,1,0,100,1,0,100,2,0,131, + 3,0,100,2,0,107,8,0,114,85,0,121,16,0,124,4, + 0,106,2,0,124,1,0,95,3,0,87,113,85,0,4,116, + 4,0,107,10,0,114,81,0,1,1,1,89,113,85,0,88, + 110,0,0,124,2,0,115,115,0,116,1,0,124,1,0,100, + 3,0,100,2,0,131,3,0,100,2,0,107,8,0,114,221, + 0,124,4,0,106,5,0,125,5,0,124,5,0,100,2,0, + 107,8,0,114,184,0,124,4,0,106,6,0,100,2,0,107, + 9,0,114,184,0,116,7,0,106,8,0,116,7,0,131,1, + 0,125,5,0,124,4,0,106,6,0,124,5,0,95,9,0, + 113,184,0,110,0,0,121,13,0,124,5,0,124,1,0,95, + 10,0,87,113,221,0,4,116,4,0,107,10,0,114,217,0, + 1,1,1,89,113,221,0,88,110,0,0,124,2,0,115,251, + 0,116,1,0,124,1,0,100,4,0,100,2,0,131,3,0, + 100,2,0,107,8,0,114,35,1,121,16,0,124,4,0,106, + 11,0,124,1,0,95,12,0,87,113,35,1,4,116,4,0, + 107,10,0,114,31,1,1,1,1,89,113,35,1,88,110,0, + 0,121,13,0,124,4,0,124,1,0,95,13,0,87,110,18, + 0,4,116,4,0,107,10,0,114,68,1,1,1,1,89,110, + 1,0,88,124,2,0,115,99,1,116,1,0,124,1,0,100, + 5,0,100,2,0,131,3,0,100,2,0,107,8,0,114,157, + 1,124,4,0,106,6,0,100,2,0,107,9,0,114,157,1, + 121,16,0,124,4,0,106,6,0,124,1,0,95,14,0,87, + 113,154,1,4,116,4,0,107,10,0,114,150,1,1,1,1, + 89,113,154,1,88,113,157,1,110,0,0,124,4,0,106,15, + 0,114,71,2,124,2,0,115,196,1,116,1,0,124,1,0, + 100,6,0,100,2,0,131,3,0,100,2,0,107,8,0,114, + 236,1,121,16,0,124,4,0,106,16,0,124,1,0,95,17, + 0,87,113,236,1,4,116,4,0,107,10,0,114,232,1,1, + 1,1,89,113,236,1,88,110,0,0,124,2,0,115,10,2, + 116,1,0,124,1,0,100,7,0,100,2,0,131,3,0,100, + 2,0,107,8,0,114,71,2,124,4,0,106,18,0,100,2, + 0,107,9,0,114,68,2,121,16,0,124,4,0,106,18,0, + 124,1,0,95,19,0,87,113,65,2,4,116,4,0,107,10, + 0,114,61,2,1,1,1,89,113,65,2,88,113,68,2,113, + 71,2,110,0,0,100,2,0,83,41,8,97,29,2,0,0, + 83,101,116,32,116,104,101,32,109,111,100,117,108,101,39,115, + 32,97,116,116,114,105,98,117,116,101,115,46,10,10,32,32, + 32,32,32,32,32,32,65,108,108,32,109,105,115,115,105,110, + 103,32,105,109,112,111,114,116,45,114,101,108,97,116,101,100, + 32,109,111,100,117,108,101,32,97,116,116,114,105,98,117,116, + 101,115,32,119,105,108,108,32,98,101,32,115,101,116,46,32, + 32,72,101,114,101,10,32,32,32,32,32,32,32,32,105,115, + 32,104,111,119,32,116,104,101,32,115,112,101,99,32,97,116, + 116,114,105,98,117,116,101,115,32,109,97,112,32,111,110,116, + 111,32,116,104,101,32,109,111,100,117,108,101,58,10,10,32, + 32,32,32,32,32,32,32,115,112,101,99,46,110,97,109,101, + 32,45,62,32,109,111,100,117,108,101,46,95,95,110,97,109, + 101,95,95,10,32,32,32,32,32,32,32,32,115,112,101,99, + 46,108,111,97,100,101,114,32,45,62,32,109,111,100,117,108, + 101,46,95,95,108,111,97,100,101,114,95,95,10,32,32,32, + 32,32,32,32,32,115,112,101,99,46,112,97,114,101,110,116, + 32,45,62,32,109,111,100,117,108,101,46,95,95,112,97,99, + 107,97,103,101,95,95,10,32,32,32,32,32,32,32,32,115, + 112,101,99,32,45,62,32,109,111,100,117,108,101,46,95,95, + 115,112,101,99,95,95,10,10,32,32,32,32,32,32,32,32, + 79,112,116,105,111,110,97,108,58,10,32,32,32,32,32,32, + 32,32,115,112,101,99,46,111,114,105,103,105,110,32,45,62, + 32,109,111,100,117,108,101,46,95,95,102,105,108,101,95,95, + 32,40,105,102,32,115,112,101,99,46,115,101,116,95,102,105, + 108,101,97,116,116,114,32,105,115,32,116,114,117,101,41,10, + 32,32,32,32,32,32,32,32,115,112,101,99,46,99,97,99, + 104,101,100,32,45,62,32,109,111,100,117,108,101,46,95,95, + 99,97,99,104,101,100,95,95,32,40,105,102,32,95,95,102, + 105,108,101,95,95,32,97,108,115,111,32,115,101,116,41,10, + 32,32,32,32,32,32,32,32,115,112,101,99,46,115,117,98, + 109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111, + 99,97,116,105,111,110,115,32,45,62,32,109,111,100,117,108, + 101,46,95,95,112,97,116,104,95,95,32,40,105,102,32,115, + 101,116,41,10,10,32,32,32,32,32,32,32,32,114,57,0, + 0,0,78,114,204,0,0,0,218,11,95,95,112,97,99,107, + 97,103,101,95,95,114,246,0,0,0,114,210,0,0,0,114, + 244,0,0,0,41,20,114,177,0,0,0,114,62,0,0,0, + 114,67,0,0,0,114,57,0,0,0,114,209,0,0,0,114, + 169,0,0,0,114,220,0,0,0,218,16,95,78,97,109,101, + 115,112,97,99,101,76,111,97,100,101,114,218,7,95,95,110, + 101,119,95,95,218,5,95,112,97,116,104,114,204,0,0,0, + 114,233,0,0,0,114,250,0,0,0,114,208,0,0,0,114, + 246,0,0,0,114,226,0,0,0,114,217,0,0,0,114,210, + 0,0,0,114,225,0,0,0,114,244,0,0,0,41,6,114, + 71,0,0,0,114,179,0,0,0,114,248,0,0,0,114,249, + 0,0,0,114,177,0,0,0,114,169,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,17,105,110, + 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,250, + 3,0,0,115,88,0,0,0,0,17,9,6,12,1,24,1, + 3,1,16,1,13,1,8,3,30,1,9,1,12,2,15,1, + 15,1,18,1,3,1,13,1,13,1,8,3,30,1,3,1, + 16,1,13,1,8,3,3,1,13,1,13,1,5,3,30,1, + 15,1,3,1,16,1,13,1,11,2,9,2,30,1,3,1, + 16,1,13,1,8,3,30,1,15,1,3,1,16,1,13,1, + 122,30,95,83,112,101,99,77,101,116,104,111,100,115,46,105, + 110,105,116,95,109,111,100,117,108,101,95,97,116,116,114,115, + 99,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,67,0,0,0,115,101,0,0,0,124,0,0,106,0,0, + 125,1,0,116,1,0,124,1,0,106,2,0,100,1,0,131, + 2,0,114,48,0,124,1,0,106,2,0,106,3,0,124,1, + 0,131,1,0,125,2,0,110,6,0,100,2,0,125,2,0, + 124,2,0,100,2,0,107,8,0,114,84,0,116,4,0,124, + 1,0,106,5,0,131,1,0,125,2,0,110,0,0,124,0, + 0,106,6,0,124,2,0,131,1,0,1,124,2,0,83,41, + 3,122,153,82,101,116,117,114,110,32,97,32,110,101,119,32, + 109,111,100,117,108,101,32,116,111,32,98,101,32,108,111,97, + 100,101,100,46,10,10,32,32,32,32,32,32,32,32,84,104, + 101,32,105,109,112,111,114,116,45,114,101,108,97,116,101,100, + 32,109,111,100,117,108,101,32,97,116,116,114,105,98,117,116, + 101,115,32,97,114,101,32,97,108,115,111,32,115,101,116,32, + 119,105,116,104,32,116,104,101,10,32,32,32,32,32,32,32, + 32,97,112,112,114,111,112,114,105,97,116,101,32,118,97,108, + 117,101,115,32,102,114,111,109,32,116,104,101,32,115,112,101, + 99,46,10,10,32,32,32,32,32,32,32,32,218,13,99,114, + 101,97,116,101,95,109,111,100,117,108,101,78,41,7,114,177, + 0,0,0,114,60,0,0,0,114,169,0,0,0,114,255,0, + 0,0,114,68,0,0,0,114,67,0,0,0,114,254,0,0, + 0,41,3,114,71,0,0,0,114,177,0,0,0,114,179,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,6,99,114,101,97,116,101,74,4,0,0,115,16,0, + 0,0,0,7,9,2,18,3,21,2,6,1,12,4,18,1, + 13,1,122,19,95,83,112,101,99,77,101,116,104,111,100,115, + 46,99,114,101,97,116,101,99,2,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,23,0,0, + 0,124,0,0,106,0,0,106,1,0,106,2,0,124,1,0, + 131,1,0,1,100,1,0,83,41,2,122,189,68,111,32,101, + 118,101,114,121,116,104,105,110,103,32,110,101,99,101,115,115, + 97,114,121,32,116,111,32,101,120,101,99,117,116,101,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,110,97,109,101,115,112,97,99, + 101,32,111,102,32,96,109,111,100,117,108,101,96,32,105,115, + 32,117,115,101,100,32,97,115,32,116,104,101,32,116,97,114, + 103,101,116,32,111,102,32,101,120,101,99,117,116,105,111,110, + 46,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, + 101,116,104,111,100,32,117,115,101,115,32,116,104,101,32,108, + 111,97,100,101,114,39,115,32,96,101,120,101,99,95,109,111, + 100,117,108,101,40,41,96,32,109,101,116,104,111,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,3,114,177,0,0, + 0,114,169,0,0,0,218,11,101,120,101,99,95,109,111,100, + 117,108,101,41,2,114,71,0,0,0,114,179,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,5, + 95,101,120,101,99,97,4,0,0,115,2,0,0,0,0,7, + 122,18,95,83,112,101,99,77,101,116,104,111,100,115,46,95, + 101,120,101,99,99,2,0,0,0,0,0,0,0,4,0,0, + 0,11,0,0,0,67,0,0,0,115,17,1,0,0,124,0, + 0,106,0,0,106,1,0,125,2,0,116,2,0,106,3,0, + 131,0,0,1,116,4,0,124,2,0,131,1,0,143,226,0, + 1,116,5,0,106,6,0,106,7,0,124,2,0,131,1,0, + 124,1,0,107,9,0,114,95,0,100,1,0,106,8,0,124, + 2,0,131,1,0,125,3,0,116,9,0,124,3,0,100,2, + 0,124,2,0,131,1,1,130,1,0,110,0,0,124,0,0, + 106,0,0,106,10,0,100,3,0,107,8,0,114,181,0,124, + 0,0,106,0,0,106,11,0,100,3,0,107,8,0,114,158, + 0,116,9,0,100,4,0,100,2,0,124,0,0,106,0,0, + 106,1,0,131,1,1,130,1,0,110,0,0,124,0,0,106, + 12,0,124,1,0,100,5,0,100,6,0,131,1,1,1,124, + 1,0,83,124,0,0,106,12,0,124,1,0,100,5,0,100, + 6,0,131,1,1,1,116,13,0,124,0,0,106,0,0,106, + 10,0,100,7,0,131,2,0,115,243,0,124,0,0,106,0, + 0,106,10,0,106,14,0,124,2,0,131,1,0,1,110,13, + 0,124,0,0,106,15,0,124,1,0,131,1,0,1,87,100, + 3,0,81,88,116,5,0,106,6,0,124,2,0,25,83,41, + 8,122,51,69,120,101,99,117,116,101,32,116,104,101,32,115, + 112,101,99,32,105,110,32,97,110,32,101,120,105,115,116,105, + 110,103,32,109,111,100,117,108,101,39,115,32,110,97,109,101, + 115,112,97,99,101,46,122,30,109,111,100,117,108,101,32,123, + 33,114,125,32,110,111,116,32,105,110,32,115,121,115,46,109, + 111,100,117,108,101,115,114,67,0,0,0,78,122,14,109,105, + 115,115,105,110,103,32,108,111,97,100,101,114,114,248,0,0, + 0,84,114,1,1,0,0,41,16,114,177,0,0,0,114,67, + 0,0,0,114,106,0,0,0,218,12,97,99,113,117,105,114, + 101,95,108,111,99,107,114,103,0,0,0,114,7,0,0,0, + 114,73,0,0,0,114,93,0,0,0,114,47,0,0,0,114, + 153,0,0,0,114,169,0,0,0,114,220,0,0,0,114,254, + 0,0,0,114,60,0,0,0,218,11,108,111,97,100,95,109, + 111,100,117,108,101,114,2,1,0,0,41,4,114,71,0,0, + 0,114,179,0,0,0,114,67,0,0,0,114,171,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 175,0,0,0,107,4,0,0,115,32,0,0,0,0,2,12, + 1,10,1,13,1,24,1,15,1,21,1,18,1,18,1,27, + 2,19,1,4,1,19,1,21,4,22,2,19,1,122,17,95, + 83,112,101,99,77,101,116,104,111,100,115,46,101,120,101,99, + 99,1,0,0,0,0,0,0,0,3,0,0,0,27,0,0, + 0,67,0,0,0,115,24,1,0,0,124,0,0,106,0,0, + 125,1,0,124,1,0,106,1,0,106,2,0,124,1,0,106, + 3,0,131,1,0,1,116,4,0,106,5,0,124,1,0,106, + 3,0,25,125,2,0,116,6,0,124,2,0,100,1,0,100, + 0,0,131,3,0,100,0,0,107,8,0,114,108,0,121,16, + 0,124,1,0,106,1,0,124,2,0,95,7,0,87,113,108, + 0,4,116,8,0,107,10,0,114,104,0,1,1,1,89,113, + 108,0,88,110,0,0,116,6,0,124,2,0,100,2,0,100, + 0,0,131,3,0,100,0,0,107,8,0,114,215,0,121,59, + 0,124,2,0,106,9,0,124,2,0,95,10,0,116,11,0, + 124,2,0,100,3,0,131,2,0,115,190,0,124,1,0,106, + 3,0,106,12,0,100,4,0,131,1,0,100,5,0,25,124, + 2,0,95,10,0,110,0,0,87,113,215,0,4,116,8,0, + 107,10,0,114,211,0,1,1,1,89,113,215,0,88,110,0, + 0,116,6,0,124,2,0,100,6,0,100,0,0,131,3,0, + 100,0,0,107,8,0,114,20,1,121,13,0,124,1,0,124, + 2,0,95,13,0,87,113,20,1,4,116,8,0,107,10,0, + 114,16,1,1,1,1,89,113,20,1,88,110,0,0,124,2, + 0,83,41,7,78,114,204,0,0,0,114,250,0,0,0,114, + 246,0,0,0,114,116,0,0,0,114,84,0,0,0,114,208, + 0,0,0,41,14,114,177,0,0,0,114,169,0,0,0,114, + 4,1,0,0,114,67,0,0,0,114,7,0,0,0,114,73, + 0,0,0,114,62,0,0,0,114,204,0,0,0,114,209,0, + 0,0,114,57,0,0,0,114,250,0,0,0,114,60,0,0, + 0,114,32,0,0,0,114,208,0,0,0,41,3,114,71,0, + 0,0,114,177,0,0,0,114,179,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,25,95,108,111, + 97,100,95,98,97,99,107,119,97,114,100,95,99,111,109,112, + 97,116,105,98,108,101,131,4,0,0,115,42,0,0,0,0, + 4,9,1,19,2,16,1,24,1,3,1,16,1,13,1,8, + 1,24,1,3,4,12,1,15,1,32,1,13,1,8,1,24, + 1,3,1,13,1,13,1,8,1,122,38,95,83,112,101,99, + 77,101,116,104,111,100,115,46,95,108,111,97,100,95,98,97, + 99,107,119,97,114,100,95,99,111,109,112,97,116,105,98,108, + 101,99,1,0,0,0,0,0,0,0,2,0,0,0,11,0, + 0,0,67,0,0,0,115,179,0,0,0,124,0,0,106,0, + 0,106,1,0,100,0,0,107,9,0,114,52,0,116,2,0, + 124,0,0,106,0,0,106,1,0,100,1,0,131,2,0,115, + 52,0,124,0,0,106,3,0,131,0,0,83,110,0,0,124, + 0,0,106,4,0,131,0,0,125,1,0,116,5,0,124,1, + 0,131,1,0,143,84,0,1,124,0,0,106,0,0,106,1, + 0,100,0,0,107,8,0,114,143,0,124,0,0,106,0,0, + 106,6,0,100,0,0,107,8,0,114,156,0,116,7,0,100, + 2,0,100,3,0,124,0,0,106,0,0,106,8,0,131,1, + 1,130,1,0,113,156,0,110,13,0,124,0,0,106,9,0, + 124,1,0,131,1,0,1,87,100,0,0,81,88,116,10,0, + 106,11,0,124,0,0,106,0,0,106,8,0,25,83,41,4, + 78,114,1,1,0,0,122,14,109,105,115,115,105,110,103,32, + 108,111,97,100,101,114,114,67,0,0,0,41,12,114,177,0, + 0,0,114,169,0,0,0,114,60,0,0,0,114,5,1,0, + 0,114,0,1,0,0,114,212,0,0,0,114,220,0,0,0, + 114,153,0,0,0,114,67,0,0,0,114,2,1,0,0,114, + 7,0,0,0,114,73,0,0,0,41,2,114,71,0,0,0, + 114,179,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,14,95,108,111,97,100,95,117,110,108,111, + 99,107,101,100,161,4,0,0,115,20,0,0,0,0,2,18, + 2,21,1,13,2,12,1,13,1,18,1,18,1,30,3,19, + 5,122,27,95,83,112,101,99,77,101,116,104,111,100,115,46, + 95,108,111,97,100,95,117,110,108,111,99,107,101,100,99,1, + 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,67, + 0,0,0,115,49,0,0,0,116,0,0,106,1,0,131,0, + 0,1,116,2,0,124,0,0,106,3,0,106,4,0,131,1, + 0,143,15,0,1,124,0,0,106,5,0,131,0,0,83,87, + 100,1,0,81,88,100,1,0,83,41,2,122,207,82,101,116, + 117,114,110,32,97,32,110,101,119,32,109,111,100,117,108,101, + 32,111,98,106,101,99,116,44,32,108,111,97,100,101,100,32, + 98,121,32,116,104,101,32,115,112,101,99,39,115,32,108,111, + 97,100,101,114,46,10,10,32,32,32,32,32,32,32,32,84, + 104,101,32,109,111,100,117,108,101,32,105,115,32,110,111,116, + 32,97,100,100,101,100,32,116,111,32,105,116,115,32,112,97, + 114,101,110,116,46,10,10,32,32,32,32,32,32,32,32,73, + 102,32,97,32,109,111,100,117,108,101,32,105,115,32,97,108, + 114,101,97,100,121,32,105,110,32,115,121,115,46,109,111,100, + 117,108,101,115,44,32,116,104,97,116,32,101,120,105,115,116, + 105,110,103,32,109,111,100,117,108,101,32,103,101,116,115,10, + 32,32,32,32,32,32,32,32,99,108,111,98,98,101,114,101, + 100,46,10,10,32,32,32,32,32,32,32,32,78,41,6,114, + 106,0,0,0,114,3,1,0,0,114,103,0,0,0,114,177, + 0,0,0,114,67,0,0,0,114,6,1,0,0,41,1,114, + 71,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,176,0,0,0,184,4,0,0,115,6,0,0, + 0,0,9,10,1,19,1,122,17,95,83,112,101,99,77,101, + 116,104,111,100,115,46,108,111,97,100,78,41,13,114,57,0, + 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, + 0,114,72,0,0,0,114,205,0,0,0,114,254,0,0,0, + 114,0,1,0,0,114,2,1,0,0,114,175,0,0,0,114, + 5,1,0,0,114,6,1,0,0,114,176,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,174,0,0,0,224,3,0,0,115,20,0,0,0, + 12,3,6,4,12,3,12,16,24,80,12,23,12,10,12,24, + 12,30,12,23,114,174,0,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,64,0,0,0,115,181, + 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, 1,0,90,3,0,101,4,0,100,2,0,100,3,0,132,0, - 0,131,1,0,90,5,0,101,4,0,100,14,0,100,4,0, - 100,5,0,132,1,0,131,1,0,90,7,0,101,4,0,101, - 8,0,101,9,0,101,10,0,100,6,0,100,7,0,132,0, - 0,131,1,0,131,1,0,131,1,0,131,1,0,90,11,0, - 101,4,0,101,10,0,100,8,0,100,9,0,132,0,0,131, - 1,0,131,1,0,90,12,0,101,4,0,101,10,0,100,10, - 0,100,11,0,132,0,0,131,1,0,131,1,0,90,13,0, - 101,4,0,101,10,0,100,12,0,100,13,0,132,0,0,131, - 1,0,131,1,0,90,14,0,100,14,0,83,40,15,0,0, - 0,117,14,0,0,0,70,114,111,122,101,110,73,109,112,111, - 114,116,101,114,117,142,0,0,0,77,101,116,97,32,112,97, - 116,104,32,105,109,112,111,114,116,32,102,111,114,32,102,114, - 111,122,101,110,32,109,111,100,117,108,101,115,46,10,10,32, - 32,32,32,65,108,108,32,109,101,116,104,111,100,115,32,97, - 114,101,32,101,105,116,104,101,114,32,99,108,97,115,115,32, - 111,114,32,115,116,97,116,105,99,32,109,101,116,104,111,100, - 115,32,116,111,32,97,118,111,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,2,0,0,0,0,0,0,0, - 2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, - 0,100,1,0,106,0,0,124,1,0,106,1,0,131,1,0, - 83,40,2,0,0,0,78,117,22,0,0,0,60,109,111,100, - 117,108,101,32,39,123,125,39,32,40,102,114,111,122,101,110, - 41,62,40,2,0,0,0,117,6,0,0,0,102,111,114,109, - 97,116,117,8,0,0,0,95,95,110,97,109,101,95,95,40, - 2,0,0,0,117,3,0,0,0,99,108,115,117,1,0,0, - 0,109,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,11, - 0,0,0,109,111,100,117,108,101,95,114,101,112,114,182,2, - 0,0,115,2,0,0,0,0,2,117,26,0,0,0,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,99,3,0,0,0,0,0,0, - 0,3,0,0,0,2,0,0,0,67,0,0,0,115,23,0, - 0,0,116,0,0,106,1,0,124,1,0,131,1,0,114,19, - 0,124,0,0,83,100,1,0,83,40,2,0,0,0,117,21, - 0,0,0,70,105,110,100,32,97,32,102,114,111,122,101,110, - 32,109,111,100,117,108,101,46,78,40,3,0,0,0,117,4, - 0,0,0,95,105,109,112,117,9,0,0,0,105,115,95,102, - 114,111,122,101,110,117,4,0,0,0,78,111,110,101,40,3, - 0,0,0,117,3,0,0,0,99,108,115,117,8,0,0,0, - 102,117,108,108,110,97,109,101,117,4,0,0,0,112,97,116, - 104,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,11,0, - 0,0,102,105,110,100,95,109,111,100,117,108,101,186,2,0, - 0,115,2,0,0,0,0,3,117,26,0,0,0,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,102,105,110,100, - 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, - 4,0,0,0,9,0,0,0,67,0,0,0,115,100,0,0, - 0,124,1,0,116,0,0,106,1,0,107,6,0,125,2,0, - 121,32,0,116,2,0,116,3,0,106,4,0,124,1,0,131, - 2,0,125,3,0,124,3,0,96,5,0,124,3,0,83,87, - 110,46,0,1,1,1,124,2,0,12,114,88,0,124,1,0, - 116,0,0,106,1,0,107,6,0,114,88,0,116,0,0,106, - 1,0,124,1,0,61,110,0,0,130,0,0,89,110,1,0, - 88,100,1,0,83,40,2,0,0,0,117,21,0,0,0,76, - 111,97,100,32,97,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,46,78,40,6,0,0,0,117,3,0,0,0,115, - 121,115,117,7,0,0,0,109,111,100,117,108,101,115,117,25, - 0,0,0,95,99,97,108,108,95,119,105,116,104,95,102,114, - 97,109,101,115,95,114,101,109,111,118,101,100,117,4,0,0, - 0,95,105,109,112,117,11,0,0,0,105,110,105,116,95,102, - 114,111,122,101,110,117,8,0,0,0,95,95,102,105,108,101, - 95,95,40,4,0,0,0,117,3,0,0,0,99,108,115,117, - 8,0,0,0,102,117,108,108,110,97,109,101,117,9,0,0, - 0,105,115,95,114,101,108,111,97,100,117,1,0,0,0,109, - 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,11,0,0, - 0,108,111,97,100,95,109,111,100,117,108,101,191,2,0,0, - 115,18,0,0,0,0,6,15,1,3,1,18,2,6,1,8, - 1,3,1,22,1,13,1,117,26,0,0,0,70,114,111,122, + 0,131,1,0,90,5,0,101,6,0,100,4,0,100,4,0, + 100,5,0,100,6,0,132,2,0,131,1,0,90,7,0,101, + 6,0,100,4,0,100,7,0,100,8,0,132,1,0,131,1, + 0,90,8,0,101,6,0,101,9,0,100,9,0,100,10,0, + 132,0,0,131,1,0,131,1,0,90,10,0,101,6,0,101, + 9,0,100,11,0,100,12,0,132,0,0,131,1,0,131,1, + 0,90,11,0,101,6,0,101,9,0,100,13,0,100,14,0, + 132,0,0,131,1,0,131,1,0,90,12,0,101,6,0,101, + 9,0,100,15,0,100,16,0,132,0,0,131,1,0,131,1, + 0,90,13,0,100,4,0,83,41,17,218,15,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,122,144,77,101,116, + 97,32,112,97,116,104,32,105,109,112,111,114,116,32,102,111, + 114,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,115,46,10,10,32,32,32,32,65,108,108,32,109,101,116, + 104,111,100,115,32,97,114,101,32,101,105,116,104,101,114,32, + 99,108,97,115,115,32,111,114,32,115,116,97,116,105,99,32, + 109,101,116,104,111,100,115,32,116,111,32,97,118,111,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,16,0,0,0,100,1,0,106,0,0,124,0,0, + 106,1,0,131,1,0,83,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,101,99,97,116,101,100,46,32,32,84,104,101,32,105, + 109,112,111,114,116,32,109,97,99,104,105,110,101,114,121,32, + 100,111,101,115,32,116,104,101,32,106,111,98,32,105,116,115, + 101,108,102,46,10,10,32,32,32,32,32,32,32,32,122,24, + 60,109,111,100,117,108,101,32,123,33,114,125,32,40,98,117, + 105,108,116,45,105,110,41,62,41,2,114,47,0,0,0,114, + 57,0,0,0,41,1,114,179,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,205,0,0,0,209, + 4,0,0,115,2,0,0,0,0,7,122,27,66,117,105,108, + 116,105,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,58,0, + 0,0,124,2,0,100,0,0,107,9,0,114,16,0,100,0, + 0,83,116,0,0,106,1,0,124,1,0,131,1,0,114,50, + 0,116,2,0,124,1,0,124,0,0,100,1,0,100,2,0, + 131,2,1,83,100,0,0,83,100,0,0,83,41,3,78,114, + 217,0,0,0,122,8,98,117,105,108,116,45,105,110,41,3, + 114,106,0,0,0,90,10,105,115,95,98,117,105,108,116,105, + 110,114,173,0,0,0,41,4,218,3,99,108,115,114,158,0, + 0,0,114,35,0,0,0,218,6,116,97,114,103,101,116,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,9, + 102,105,110,100,95,115,112,101,99,218,4,0,0,115,10,0, + 0,0,0,2,12,1,4,1,15,1,19,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,41,0,0, + 0,124,0,0,106,0,0,124,1,0,124,2,0,131,2,0, + 125,3,0,124,3,0,100,1,0,107,9,0,114,37,0,124, + 3,0,106,1,0,83,100,1,0,83,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,10,32,32,32,32,32,32,32, + 32,73,102,32,39,112,97,116,104,39,32,105,115,32,101,118, + 101,114,32,115,112,101,99,105,102,105,101,100,32,116,104,101, + 110,32,116,104,101,32,115,101,97,114,99,104,32,105,115,32, + 99,111,110,115,105,100,101,114,101,100,32,97,32,102,97,105, + 108,117,114,101,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, + 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, + 114,10,1,0,0,114,169,0,0,0,41,4,114,8,1,0, + 0,114,158,0,0,0,114,35,0,0,0,114,177,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 11,102,105,110,100,95,109,111,100,117,108,101,227,4,0,0, + 115,4,0,0,0,0,9,18,1,122,27,66,117,105,108,116, + 105,110,73,109,112,111,114,116,101,114,46,102,105,110,100,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,3, + 0,0,0,10,0,0,0,67,0,0,0,115,59,0,0,0, + 116,0,0,124,1,0,131,1,0,143,23,0,1,116,1,0, + 116,2,0,106,3,0,124,1,0,131,2,0,125,2,0,87, + 100,1,0,81,88,124,0,0,124,2,0,95,4,0,100,2, + 0,124,2,0,95,5,0,124,2,0,83,41,3,122,23,76, + 111,97,100,32,97,32,98,117,105,108,116,45,105,110,32,109, + 111,100,117,108,101,46,78,114,30,0,0,0,41,6,114,69, + 0,0,0,114,114,0,0,0,114,106,0,0,0,90,12,105, + 110,105,116,95,98,117,105,108,116,105,110,114,204,0,0,0, + 114,250,0,0,0,41,3,114,8,1,0,0,114,158,0,0, + 0,114,179,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,4,1,0,0,239,4,0,0,115,10, + 0,0,0,0,6,13,1,24,1,9,1,9,1,122,27,66, + 117,105,108,116,105,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,1,0,0,0,67,0,0,0,115, + 4,0,0,0,100,1,0,83,41,2,122,57,82,101,116,117, + 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, + 111,116,32,104,97,118,101,32,99,111,100,101,32,111,98,106, + 101,99,116,115,46,78,114,4,0,0,0,41,2,114,8,1, + 0,0,114,158,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,8,103,101,116,95,99,111,100,101, + 251,4,0,0,115,2,0,0,0,0,4,122,24,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,46,103,101,116, + 95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,0,83,41,2,122,56,82,101,116,117,114,110,32,78,111, + 110,101,32,97,115,32,98,117,105,108,116,45,105,110,32,109, + 111,100,117,108,101,115,32,100,111,32,110,111,116,32,104,97, + 118,101,32,115,111,117,114,99,101,32,99,111,100,101,46,78, + 114,4,0,0,0,41,2,114,8,1,0,0,114,158,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,10,103,101,116,95,115,111,117,114,99,101,1,5,0,0, + 115,2,0,0,0,0,4,122,26,66,117,105,108,116,105,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, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,0, + 83,41,2,122,52,82,101,116,117,114,110,32,70,97,108,115, + 101,32,97,115,32,98,117,105,108,116,45,105,110,32,109,111, + 100,117,108,101,115,32,97,114,101,32,110,101,118,101,114,32, + 112,97,99,107,97,103,101,115,46,70,114,4,0,0,0,41, + 2,114,8,1,0,0,114,158,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,7, + 5,0,0,115,2,0,0,0,0,4,122,26,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,46,105,115,95,112, + 97,99,107,97,103,101,41,14,114,57,0,0,0,114,56,0, + 0,0,114,58,0,0,0,114,59,0,0,0,218,12,115,116, + 97,116,105,99,109,101,116,104,111,100,114,205,0,0,0,218, + 11,99,108,97,115,115,109,101,116,104,111,100,114,10,1,0, + 0,114,11,1,0,0,114,161,0,0,0,114,4,1,0,0, + 114,12,1,0,0,114,13,1,0,0,114,219,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,7,1,0,0,200,4,0,0,115,28,0,0, + 0,12,7,6,2,18,9,3,1,21,8,3,1,18,11,3, + 1,21,11,3,1,21,5,3,1,21,5,3,1,114,7,1, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,64,0,0,0,115,193,0,0,0,101,0,0,90, + 1,0,100,0,0,90,2,0,100,1,0,90,3,0,101,4, + 0,100,2,0,100,3,0,132,0,0,131,1,0,90,5,0, + 101,6,0,100,4,0,100,4,0,100,5,0,100,6,0,132, + 2,0,131,1,0,90,7,0,101,6,0,100,4,0,100,7, + 0,100,8,0,132,1,0,131,1,0,90,8,0,101,4,0, + 100,9,0,100,10,0,132,0,0,131,1,0,90,9,0,101, + 6,0,100,11,0,100,12,0,132,0,0,131,1,0,90,10, + 0,101,6,0,101,11,0,100,13,0,100,14,0,132,0,0, + 131,1,0,131,1,0,90,12,0,101,6,0,101,11,0,100, + 15,0,100,16,0,132,0,0,131,1,0,131,1,0,90,13, + 0,101,6,0,101,11,0,100,17,0,100,18,0,132,0,0, + 131,1,0,131,1,0,90,14,0,100,4,0,83,41,19,218, + 14,70,114,111,122,101,110,73,109,112,111,114,116,101,114,122, + 142,77,101,116,97,32,112,97,116,104,32,105,109,112,111,114, + 116,32,102,111,114,32,102,114,111,122,101,110,32,109,111,100, + 117,108,101,115,46,10,10,32,32,32,32,65,108,108,32,109, + 101,116,104,111,100,115,32,97,114,101,32,101,105,116,104,101, + 114,32,99,108,97,115,115,32,111,114,32,115,116,97,116,105, + 99,32,109,101,116,104,111,100,115,32,116,111,32,97,118,111, + 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,16,0,0,0,100,1,0,106,0,0,124, + 0,0,106,1,0,131,1,0,83,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,101,99,97,116,101,100,46,32,32,84,104,101, + 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, + 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, + 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, + 122,22,60,109,111,100,117,108,101,32,123,33,114,125,32,40, + 102,114,111,122,101,110,41,62,41,2,114,47,0,0,0,114, + 57,0,0,0,41,1,218,1,109,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,205,0,0,0,23,5,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,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,42,0,0,0,116, + 0,0,106,1,0,124,1,0,131,1,0,114,34,0,116,2, + 0,124,1,0,124,0,0,100,1,0,100,2,0,131,2,1, + 83,100,0,0,83,100,0,0,83,41,3,78,114,217,0,0, + 0,90,6,102,114,111,122,101,110,41,3,114,106,0,0,0, + 114,162,0,0,0,114,173,0,0,0,41,4,114,8,1,0, + 0,114,158,0,0,0,114,35,0,0,0,114,9,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 10,1,0,0,32,5,0,0,115,6,0,0,0,0,2,15, + 1,19,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,23,0,0,0,116,0,0,106,1,0,124,1,0, + 131,1,0,114,19,0,124,0,0,83,100,1,0,83,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,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, + 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, + 41,2,114,106,0,0,0,114,162,0,0,0,41,3,114,8, + 1,0,0,114,158,0,0,0,114,35,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,11,1,0, + 0,39,5,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,102,105,110, + 100,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,95,0, + 0,0,124,0,0,106,0,0,106,1,0,125,1,0,116,2, + 0,106,3,0,124,1,0,131,1,0,115,57,0,116,4,0, + 100,1,0,106,5,0,124,1,0,131,1,0,100,2,0,124, + 1,0,131,1,1,130,1,0,110,0,0,116,6,0,116,2, + 0,106,7,0,124,1,0,131,2,0,125,2,0,116,8,0, + 124,2,0,124,0,0,106,9,0,131,2,0,1,100,0,0, + 83,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,114,67,0,0,0,41,10,114,208,0,0,0,114,67,0, + 0,0,114,106,0,0,0,114,162,0,0,0,114,153,0,0, + 0,114,47,0,0,0,114,114,0,0,0,218,17,103,101,116, + 95,102,114,111,122,101,110,95,111,98,106,101,99,116,114,175, + 0,0,0,114,63,0,0,0,41,3,114,179,0,0,0,114, + 67,0,0,0,114,194,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,1,1,0,0,48,5,0, + 0,115,12,0,0,0,0,2,12,1,15,1,18,1,12,1, + 18,1,122,26,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,115,13,0,0,0,116,0,0,124,0,0,124,1, + 0,131,2,0,83,41,1,122,95,76,111,97,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,115,32,109,101,116, + 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, + 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, + 32,32,32,32,32,32,32,32,41,1,114,180,0,0,0,41, + 2,114,8,1,0,0,114,158,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,4,1,0,0,57, + 5,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,13,0,0,0, - 116,0,0,106,1,0,124,1,0,131,1,0,83,40,1,0, - 0,0,117,45,0,0,0,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,101,46,40,2,0,0,0,117,4,0,0,0,95,105, - 109,112,117,17,0,0,0,103,101,116,95,102,114,111,122,101, - 110,95,111,98,106,101,99,116,40,2,0,0,0,117,3,0, - 0,0,99,108,115,117,8,0,0,0,102,117,108,108,110,97, - 109,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,8, - 0,0,0,103,101,116,95,99,111,100,101,208,2,0,0,115, - 2,0,0,0,0,4,117,23,0,0,0,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,46,103,101,116,95,99,111, - 100,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, - 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, - 40,2,0,0,0,117,54,0,0,0,82,101,116,117,114,110, - 32,78,111,110,101,32,97,115,32,102,114,111,122,101,110,32, - 109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,104, - 97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,46, - 78,40,1,0,0,0,117,4,0,0,0,78,111,110,101,40, - 2,0,0,0,117,3,0,0,0,99,108,115,117,8,0,0, - 0,102,117,108,108,110,97,109,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,10,0,0,0,103,101,116,95,115,111, - 117,114,99,101,214,2,0,0,115,2,0,0,0,0,4,117, - 25,0,0,0,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,13,0,0,0,116,0,0,106,1,0,124,1,0, - 131,1,0,83,40,1,0,0,0,117,46,0,0,0,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,40,2,0,0, - 0,117,4,0,0,0,95,105,109,112,117,17,0,0,0,105, - 115,95,102,114,111,122,101,110,95,112,97,99,107,97,103,101, - 40,2,0,0,0,117,3,0,0,0,99,108,115,117,8,0, - 0,0,102,117,108,108,110,97,109,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,10,0,0,0,105,115,95,112,97, - 99,107,97,103,101,220,2,0,0,115,2,0,0,0,0,4, - 117,25,0,0,0,70,114,111,122,101,110,73,109,112,111,114, - 116,101,114,46,105,115,95,112,97,99,107,97,103,101,78,40, - 15,0,0,0,117,8,0,0,0,95,95,110,97,109,101,95, - 95,117,10,0,0,0,95,95,109,111,100,117,108,101,95,95, - 117,12,0,0,0,95,95,113,117,97,108,110,97,109,101,95, - 95,117,7,0,0,0,95,95,100,111,99,95,95,117,11,0, - 0,0,99,108,97,115,115,109,101,116,104,111,100,117,11,0, - 0,0,109,111,100,117,108,101,95,114,101,112,114,117,4,0, - 0,0,78,111,110,101,117,11,0,0,0,102,105,110,100,95, - 109,111,100,117,108,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,16,0,0,0,95,114,101,113,117,105, - 114,101,115,95,102,114,111,122,101,110,117,11,0,0,0,108, - 111,97,100,95,109,111,100,117,108,101,117,8,0,0,0,103, - 101,116,95,99,111,100,101,117,10,0,0,0,103,101,116,95, - 115,111,117,114,99,101,117,10,0,0,0,105,115,95,112,97, - 99,107,97,103,101,40,1,0,0,0,117,10,0,0,0,95, - 95,108,111,99,97,108,115,95,95,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,14,0,0,0,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,173,2,0,0,115,28,0,0, - 0,16,7,6,2,18,4,3,1,18,4,3,1,3,1,3, - 1,27,14,3,1,21,5,3,1,21,5,3,1,117,14,0, - 0,0,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,66,0,0,0,115,101,0,0,0,124,0,0,69,101,0, - 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, - 100,2,0,90,4,0,100,3,0,90,5,0,100,11,0,90, - 7,0,101,8,0,100,4,0,100,5,0,132,0,0,131,1, - 0,90,9,0,101,8,0,100,6,0,100,7,0,132,0,0, - 131,1,0,90,10,0,101,8,0,100,10,0,100,8,0,100, - 9,0,132,1,0,131,1,0,90,12,0,100,10,0,83,40, - 12,0,0,0,117,21,0,0,0,87,105,110,100,111,119,115, - 82,101,103,105,115,116,114,121,70,105,110,100,101,114,117,67, - 0,0,0,77,101,116,97,32,112,97,116,104,32,102,105,110, - 100,101,114,32,102,111,114,32,109,111,100,117,108,101,115,32, - 100,101,99,108,97,114,101,100,32,105,110,32,116,104,101,32, - 87,105,110,100,111,119,115,32,114,101,103,105,115,116,114,121, - 46,10,32,32,32,32,117,59,0,0,0,83,111,102,116,119, - 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, - 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, - 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, - 108,110,97,109,101,125,117,65,0,0,0,83,111,102,116,119, - 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, - 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, - 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, - 108,110,97,109,101,125,92,68,101,98,117,103,99,2,0,0, - 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, - 0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,116, - 0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,0, - 4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,0, - 106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,83, - 89,110,1,0,88,100,0,0,83,40,1,0,0,0,78,40, - 5,0,0,0,117,7,0,0,0,95,119,105,110,114,101,103, - 117,7,0,0,0,79,112,101,110,75,101,121,117,17,0,0, - 0,72,75,69,89,95,67,85,82,82,69,78,84,95,85,83, - 69,82,117,12,0,0,0,87,105,110,100,111,119,115,69,114, - 114,111,114,117,18,0,0,0,72,75,69,89,95,76,79,67, - 65,76,95,77,65,67,72,73,78,69,40,2,0,0,0,117, - 3,0,0,0,99,108,115,117,3,0,0,0,107,101,121,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,14,0,0,0, - 95,111,112,101,110,95,114,101,103,105,115,116,114,121,240,2, - 0,0,115,8,0,0,0,0,2,3,1,23,1,13,1,117, - 36,0,0,0,87,105,110,100,111,119,115,82,101,103,105,115, - 116,114,121,70,105,110,100,101,114,46,95,111,112,101,110,95, - 114,101,103,105,115,116,114,121,99,2,0,0,0,0,0,0, - 0,6,0,0,0,16,0,0,0,67,0,0,0,115,142,0, - 0,0,124,0,0,106,0,0,114,21,0,124,0,0,106,1, - 0,125,2,0,110,9,0,124,0,0,106,2,0,125,2,0, - 124,2,0,106,3,0,100,1,0,124,1,0,100,2,0,116, - 4,0,106,5,0,100,0,0,100,3,0,133,2,0,25,131, - 0,2,125,3,0,121,46,0,124,0,0,106,6,0,124,3, - 0,131,1,0,143,25,0,125,4,0,116,7,0,106,8,0, - 124,4,0,100,4,0,131,2,0,125,5,0,87,100,0,0, - 81,88,87,110,22,0,4,116,9,0,107,10,0,114,137,0, - 1,1,1,100,0,0,83,89,110,1,0,88,124,5,0,83, - 40,5,0,0,0,78,117,8,0,0,0,102,117,108,108,110, - 97,109,101,117,11,0,0,0,115,121,115,95,118,101,114,115, - 105,111,110,105,3,0,0,0,117,0,0,0,0,40,11,0, - 0,0,117,11,0,0,0,68,69,66,85,71,95,66,85,73, - 76,68,117,18,0,0,0,82,69,71,73,83,84,82,89,95, - 75,69,89,95,68,69,66,85,71,117,12,0,0,0,82,69, - 71,73,83,84,82,89,95,75,69,89,117,6,0,0,0,102, - 111,114,109,97,116,117,3,0,0,0,115,121,115,117,7,0, - 0,0,118,101,114,115,105,111,110,117,14,0,0,0,95,111, - 112,101,110,95,114,101,103,105,115,116,114,121,117,7,0,0, - 0,95,119,105,110,114,101,103,117,10,0,0,0,81,117,101, - 114,121,86,97,108,117,101,117,12,0,0,0,87,105,110,100, - 111,119,115,69,114,114,111,114,117,4,0,0,0,78,111,110, - 101,40,6,0,0,0,117,3,0,0,0,99,108,115,117,8, - 0,0,0,102,117,108,108,110,97,109,101,117,12,0,0,0, - 114,101,103,105,115,116,114,121,95,107,101,121,117,3,0,0, - 0,107,101,121,117,4,0,0,0,104,107,101,121,117,8,0, - 0,0,102,105,108,101,112,97,116,104,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,16,0,0,0,95,115,101,97,114, - 99,104,95,114,101,103,105,115,116,114,121,247,2,0,0,115, - 22,0,0,0,0,2,9,1,12,2,9,1,15,1,22,1, - 3,1,18,1,28,1,13,1,9,1,117,38,0,0,0,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,46,95,115,101,97,114,99,104,95,114,101,103, - 105,115,116,114,121,99,3,0,0,0,0,0,0,0,6,0, - 0,0,12,0,0,0,67,0,0,0,115,137,0,0,0,124, - 0,0,106,0,0,124,1,0,131,1,0,125,3,0,124,3, - 0,100,1,0,107,8,0,114,31,0,100,1,0,83,121,17, - 0,116,2,0,106,3,0,124,3,0,131,1,0,1,87,110, - 22,0,4,116,4,0,107,10,0,114,72,0,1,1,1,100, - 1,0,83,89,110,1,0,88,120,57,0,116,5,0,131,0, - 0,68,93,46,0,92,2,0,125,4,0,125,5,0,124,3, - 0,106,6,0,116,7,0,124,5,0,131,1,0,131,1,0, - 114,83,0,124,4,0,124,1,0,124,3,0,131,2,0,83, - 113,83,0,87,100,1,0,83,40,2,0,0,0,117,34,0, - 0,0,70,105,110,100,32,109,111,100,117,108,101,32,110,97, - 109,101,100,32,105,110,32,116,104,101,32,114,101,103,105,115, - 116,114,121,46,78,40,8,0,0,0,117,16,0,0,0,95, - 115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,117, - 4,0,0,0,78,111,110,101,117,3,0,0,0,95,111,115, - 117,4,0,0,0,115,116,97,116,117,7,0,0,0,79,83, - 69,114,114,111,114,117,27,0,0,0,95,103,101,116,95,115, - 117,112,112,111,114,116,101,100,95,102,105,108,101,95,108,111, - 97,100,101,114,115,117,8,0,0,0,101,110,100,115,119,105, - 116,104,117,5,0,0,0,116,117,112,108,101,40,6,0,0, - 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, - 108,108,110,97,109,101,117,4,0,0,0,112,97,116,104,117, - 8,0,0,0,102,105,108,101,112,97,116,104,117,6,0,0, - 0,108,111,97,100,101,114,117,8,0,0,0,115,117,102,102, - 105,120,101,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,11,0,0,0,102,105,110,100,95,109,111,100,117,108,101, - 6,3,0,0,115,20,0,0,0,0,3,15,1,12,1,4, - 1,3,1,17,1,13,1,9,1,22,1,21,1,117,33,0, - 0,0,87,105,110,100,111,119,115,82,101,103,105,115,116,114, - 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, - 117,108,101,78,70,40,13,0,0,0,117,8,0,0,0,95, - 95,110,97,109,101,95,95,117,10,0,0,0,95,95,109,111, - 100,117,108,101,95,95,117,12,0,0,0,95,95,113,117,97, - 108,110,97,109,101,95,95,117,7,0,0,0,95,95,100,111, - 99,95,95,117,12,0,0,0,82,69,71,73,83,84,82,89, - 95,75,69,89,117,18,0,0,0,82,69,71,73,83,84,82, - 89,95,75,69,89,95,68,69,66,85,71,117,5,0,0,0, - 70,97,108,115,101,117,11,0,0,0,68,69,66,85,71,95, - 66,85,73,76,68,117,11,0,0,0,99,108,97,115,115,109, - 101,116,104,111,100,117,14,0,0,0,95,111,112,101,110,95, - 114,101,103,105,115,116,114,121,117,16,0,0,0,95,115,101, - 97,114,99,104,95,114,101,103,105,115,116,114,121,117,4,0, - 0,0,78,111,110,101,117,11,0,0,0,102,105,110,100,95, - 109,111,100,117,108,101,40,1,0,0,0,117,10,0,0,0, - 95,95,108,111,99,97,108,115,95,95,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,21,0,0,0,87,105,110,100,111, - 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, - 227,2,0,0,115,16,0,0,0,16,3,6,3,6,3,6, - 2,6,2,18,7,18,15,3,1,117,21,0,0,0,87,105, - 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,99,1,0,0,0,0,0,0,0,1,0,0,0, - 5,0,0,0,66,0,0,0,115,74,0,0,0,124,0,0, - 69,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, - 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, - 4,0,100,5,0,132,0,0,90,5,0,101,6,0,100,6, - 0,100,10,0,100,7,0,100,8,0,132,0,1,131,1,0, - 90,8,0,100,9,0,83,40,11,0,0,0,117,13,0,0, - 0,95,76,111,97,100,101,114,66,97,115,105,99,115,117,83, - 0,0,0,66,97,115,101,32,99,108,97,115,115,32,111,102, - 32,99,111,109,109,111,110,32,99,111,100,101,32,110,101,101, - 100,101,100,32,98,121,32,98,111,116,104,32,83,111,117,114, - 99,101,76,111,97,100,101,114,32,97,110,100,10,32,32,32, - 32,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, - 111,97,100,101,114,46,99,2,0,0,0,0,0,0,0,5, - 0,0,0,3,0,0,0,67,0,0,0,115,88,0,0,0, - 116,0,0,124,0,0,106,1,0,124,1,0,131,1,0,131, - 1,0,100,1,0,25,125,2,0,124,2,0,106,2,0,100, - 2,0,100,1,0,131,2,0,100,3,0,25,125,3,0,124, - 1,0,106,3,0,100,2,0,131,1,0,100,4,0,25,125, - 4,0,124,3,0,100,5,0,107,2,0,111,87,0,124,4, - 0,100,5,0,107,3,0,83,40,6,0,0,0,117,141,0, - 0,0,67,111,110,99,114,101,116,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, - 112,101,99,116,76,111,97,100,101,114,46,105,115,95,112,97, - 99,107,97,103,101,32,98,121,32,99,104,101,99,107,105,110, - 103,32,105,102,10,32,32,32,32,32,32,32,32,116,104,101, - 32,112,97,116,104,32,114,101,116,117,114,110,101,100,32,98, - 121,32,103,101,116,95,102,105,108,101,110,97,109,101,32,104, - 97,115,32,97,32,102,105,108,101,110,97,109,101,32,111,102, - 32,39,95,95,105,110,105,116,95,95,46,112,121,39,46,105, - 1,0,0,0,117,1,0,0,0,46,105,0,0,0,0,105, - 2,0,0,0,117,8,0,0,0,95,95,105,110,105,116,95, - 95,40,4,0,0,0,117,11,0,0,0,95,112,97,116,104, - 95,115,112,108,105,116,117,12,0,0,0,103,101,116,95,102, - 105,108,101,110,97,109,101,117,6,0,0,0,114,115,112,108, - 105,116,117,10,0,0,0,114,112,97,114,116,105,116,105,111, - 110,40,5,0,0,0,117,4,0,0,0,115,101,108,102,117, - 8,0,0,0,102,117,108,108,110,97,109,101,117,8,0,0, - 0,102,105,108,101,110,97,109,101,117,13,0,0,0,102,105, - 108,101,110,97,109,101,95,98,97,115,101,117,9,0,0,0, - 116,97,105,108,95,110,97,109,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,10,0,0,0,105,115,95,112,97,99, - 107,97,103,101,26,3,0,0,115,8,0,0,0,0,3,25, - 1,22,1,19,1,117,24,0,0,0,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,105,115,95,112,97,99,107,97, - 103,101,99,5,0,0,0,0,0,0,0,12,0,0,0,22, - 0,0,0,67,0,0,0,115,208,1,0,0,124,2,0,100, - 1,0,100,2,0,133,2,0,25,125,5,0,124,2,0,100, - 2,0,100,3,0,133,2,0,25,125,6,0,124,2,0,100, - 3,0,100,4,0,133,2,0,25,125,7,0,124,5,0,116, - 0,0,107,3,0,114,115,0,100,5,0,106,1,0,124,1, - 0,124,5,0,131,2,0,125,8,0,116,2,0,124,8,0, - 131,1,0,1,116,3,0,124,8,0,100,6,0,124,1,0, - 100,7,0,124,3,0,131,1,2,130,1,0,110,116,0,116, - 4,0,124,6,0,131,1,0,100,2,0,107,3,0,114,173, - 0,100,8,0,106,1,0,124,1,0,131,1,0,125,9,0, - 116,2,0,124,9,0,131,1,0,1,116,5,0,124,9,0, - 131,1,0,130,1,0,110,58,0,116,4,0,124,7,0,131, - 1,0,100,2,0,107,3,0,114,231,0,100,9,0,106,1, - 0,124,1,0,131,1,0,125,9,0,116,2,0,124,9,0, - 131,1,0,1,116,5,0,124,9,0,131,1,0,130,1,0, - 110,0,0,124,4,0,100,1,0,107,9,0,114,194,1,121, - 20,0,116,7,0,124,4,0,100,10,0,25,131,1,0,125, - 10,0,87,110,18,0,4,116,8,0,107,10,0,114,27,1, - 1,1,1,89,110,71,0,88,116,9,0,124,6,0,131,1, - 0,124,10,0,107,3,0,114,98,1,100,11,0,106,1,0, - 124,1,0,131,1,0,125,9,0,116,2,0,124,9,0,131, - 1,0,1,116,3,0,124,9,0,100,6,0,124,1,0,100, - 7,0,124,3,0,131,1,2,130,1,0,110,0,0,121,18, - 0,124,4,0,100,12,0,25,100,13,0,64,125,11,0,87, - 110,18,0,4,116,8,0,107,10,0,114,136,1,1,1,1, - 89,113,194,1,88,116,9,0,124,7,0,131,1,0,124,11, - 0,107,3,0,114,194,1,116,3,0,100,11,0,106,1,0, - 124,1,0,131,1,0,100,6,0,124,1,0,100,7,0,124, - 3,0,131,1,2,130,1,0,113,194,1,110,0,0,124,2, - 0,100,4,0,100,1,0,133,2,0,25,83,40,14,0,0, - 0,117,193,0,0,0,82,101,116,117,114,110,32,116,104,101, - 32,109,97,114,115,104,97,108,108,101,100,32,98,121,116,101, - 115,32,102,114,111,109,32,98,121,116,101,99,111,100,101,44, - 32,118,101,114,105,102,121,105,110,103,32,116,104,101,32,109, - 97,103,105,99,10,32,32,32,32,32,32,32,32,110,117,109, - 98,101,114,44,32,116,105,109,101,115,116,97,109,112,32,97, - 110,100,32,115,111,117,114,99,101,32,115,105,122,101,32,97, - 108,111,110,103,32,116,104,101,32,119,97,121,46,10,10,32, - 32,32,32,32,32,32,32,73,102,32,115,111,117,114,99,101, - 95,115,116,97,116,115,32,105,115,32,78,111,110,101,32,116, - 104,101,110,32,115,107,105,112,32,116,104,101,32,116,105,109, - 101,115,116,97,109,112,32,99,104,101,99,107,46,10,10,32, - 32,32,32,32,32,32,32,78,105,4,0,0,0,105,8,0, - 0,0,105,12,0,0,0,117,30,0,0,0,98,97,100,32, - 109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,32, - 123,33,114,125,58,32,123,33,114,125,117,4,0,0,0,110, - 97,109,101,117,4,0,0,0,112,97,116,104,117,19,0,0, - 0,98,97,100,32,116,105,109,101,115,116,97,109,112,32,105, - 110,32,123,125,117,14,0,0,0,98,97,100,32,115,105,122, - 101,32,105,110,32,123,125,117,5,0,0,0,109,116,105,109, - 101,117,24,0,0,0,98,121,116,101,99,111,100,101,32,105, - 115,32,115,116,97,108,101,32,102,111,114,32,123,125,117,4, - 0,0,0,115,105,122,101,108,3,0,0,0,255,127,255,127, - 3,0,40,10,0,0,0,117,12,0,0,0,95,77,65,71, - 73,67,95,66,89,84,69,83,117,6,0,0,0,102,111,114, - 109,97,116,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,73,109,112, - 111,114,116,69,114,114,111,114,117,3,0,0,0,108,101,110, - 117,8,0,0,0,69,79,70,69,114,114,111,114,117,4,0, - 0,0,78,111,110,101,117,3,0,0,0,105,110,116,117,8, - 0,0,0,75,101,121,69,114,114,111,114,117,7,0,0,0, - 95,114,95,108,111,110,103,40,12,0,0,0,117,4,0,0, - 0,115,101,108,102,117,8,0,0,0,102,117,108,108,110,97, - 109,101,117,4,0,0,0,100,97,116,97,117,13,0,0,0, - 98,121,116,101,99,111,100,101,95,112,97,116,104,117,12,0, - 0,0,115,111,117,114,99,101,95,115,116,97,116,115,117,5, - 0,0,0,109,97,103,105,99,117,13,0,0,0,114,97,119, - 95,116,105,109,101,115,116,97,109,112,117,8,0,0,0,114, - 97,119,95,115,105,122,101,117,3,0,0,0,109,115,103,117, - 7,0,0,0,109,101,115,115,97,103,101,117,12,0,0,0, - 115,111,117,114,99,101,95,109,116,105,109,101,117,11,0,0, - 0,115,111,117,114,99,101,95,115,105,122,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,20,0,0,0,95,98,121, - 116,101,115,95,102,114,111,109,95,98,121,116,101,99,111,100, - 101,34,3,0,0,115,68,0,0,0,0,7,16,1,16,1, - 16,1,12,1,18,1,10,1,27,1,18,1,15,1,10,1, - 15,1,18,1,15,1,10,1,15,1,12,1,3,1,20,1, - 13,1,5,2,18,1,15,1,10,1,15,1,12,1,3,1, - 18,1,13,1,5,2,18,1,3,1,15,1,21,3,117,34, - 0,0,0,95,76,111,97,100,101,114,66,97,115,105,99,115, - 46,95,98,121,116,101,115,95,102,114,111,109,95,98,121,116, - 101,99,111,100,101,117,10,0,0,0,115,111,117,114,99,101, - 108,101,115,115,99,2,0,0,0,1,0,0,0,5,0,0, - 0,12,0,0,0,67,0,0,0,115,227,0,0,0,124,1, - 0,106,0,0,125,3,0,124,0,0,106,1,0,124,3,0, - 131,1,0,125,4,0,124,0,0,106,2,0,124,3,0,131, - 1,0,124,1,0,95,3,0,124,2,0,115,106,0,121,22, - 0,116,4,0,124,1,0,106,3,0,131,1,0,124,1,0, - 95,5,0,87,113,118,0,4,116,6,0,107,10,0,114,102, - 0,1,1,1,124,1,0,106,3,0,124,1,0,95,5,0, - 89,113,118,0,88,110,12,0,124,1,0,106,3,0,124,1, - 0,95,5,0,124,3,0,124,1,0,95,7,0,124,0,0, - 106,8,0,124,3,0,131,1,0,114,170,0,116,9,0,124, - 1,0,106,3,0,131,1,0,100,1,0,25,103,1,0,124, - 1,0,95,10,0,110,25,0,124,1,0,106,7,0,106,11, - 0,100,2,0,131,1,0,100,1,0,25,124,1,0,95,7, - 0,124,0,0,124,1,0,95,12,0,116,13,0,116,14,0, - 124,4,0,124,1,0,106,15,0,131,3,0,1,124,1,0, - 83,40,3,0,0,0,117,82,0,0,0,72,101,108,112,101, - 114,32,102,111,114,32,108,111,97,100,95,109,111,100,117,108, - 101,32,97,98,108,101,32,116,111,32,104,97,110,100,108,101, - 32,101,105,116,104,101,114,32,115,111,117,114,99,101,32,111, - 114,32,115,111,117,114,99,101,108,101,115,115,10,32,32,32, - 32,32,32,32,32,108,111,97,100,105,110,103,46,105,0,0, - 0,0,117,1,0,0,0,46,40,16,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,8,0,0,0,103, - 101,116,95,99,111,100,101,117,12,0,0,0,103,101,116,95, - 102,105,108,101,110,97,109,101,117,8,0,0,0,95,95,102, - 105,108,101,95,95,117,17,0,0,0,99,97,99,104,101,95, - 102,114,111,109,95,115,111,117,114,99,101,117,10,0,0,0, - 95,95,99,97,99,104,101,100,95,95,117,19,0,0,0,78, - 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, - 111,114,117,11,0,0,0,95,95,112,97,99,107,97,103,101, - 95,95,117,10,0,0,0,105,115,95,112,97,99,107,97,103, - 101,117,11,0,0,0,95,112,97,116,104,95,115,112,108,105, - 116,117,8,0,0,0,95,95,112,97,116,104,95,95,117,10, - 0,0,0,114,112,97,114,116,105,116,105,111,110,117,10,0, - 0,0,95,95,108,111,97,100,101,114,95,95,117,25,0,0, - 0,95,99,97,108,108,95,119,105,116,104,95,102,114,97,109, - 101,115,95,114,101,109,111,118,101,100,117,4,0,0,0,101, - 120,101,99,117,8,0,0,0,95,95,100,105,99,116,95,95, - 40,5,0,0,0,117,4,0,0,0,115,101,108,102,117,6, - 0,0,0,109,111,100,117,108,101,117,10,0,0,0,115,111, - 117,114,99,101,108,101,115,115,117,4,0,0,0,110,97,109, - 101,117,11,0,0,0,99,111,100,101,95,111,98,106,101,99, - 116,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,12,0, - 0,0,95,108,111,97,100,95,109,111,100,117,108,101,80,3, - 0,0,115,32,0,0,0,0,4,9,1,15,1,18,1,6, - 1,3,1,22,1,13,1,20,2,12,1,9,1,15,1,28, - 2,25,1,9,1,19,1,117,26,0,0,0,95,76,111,97, - 100,101,114,66,97,115,105,99,115,46,95,108,111,97,100,95, - 109,111,100,117,108,101,78,70,40,9,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,10,0,0,0,95, - 95,109,111,100,117,108,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,7,0,0,0,95, - 95,100,111,99,95,95,117,10,0,0,0,105,115,95,112,97, - 99,107,97,103,101,117,20,0,0,0,95,98,121,116,101,115, - 95,102,114,111,109,95,98,121,116,101,99,111,100,101,117,17, - 0,0,0,109,111,100,117,108,101,95,102,111,114,95,108,111, - 97,100,101,114,117,5,0,0,0,70,97,108,115,101,117,12, - 0,0,0,95,108,111,97,100,95,109,111,100,117,108,101,40, - 1,0,0,0,117,10,0,0,0,95,95,108,111,99,97,108, - 115,95,95,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, - 13,0,0,0,95,76,111,97,100,101,114,66,97,115,105,99, - 115,21,3,0,0,115,10,0,0,0,16,3,6,2,12,8, - 12,46,6,1,117,13,0,0,0,95,76,111,97,100,101,114, - 66,97,115,105,99,115,99,1,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,66,0,0,0,115,104,0,0,0, - 124,0,0,69,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,100,2,0,132,0,0,90,3,0,100,3,0,100, - 4,0,132,0,0,90,4,0,100,5,0,100,6,0,132,0, - 0,90,5,0,100,7,0,100,8,0,132,0,0,90,6,0, - 100,9,0,100,10,0,132,0,0,90,7,0,100,11,0,100, - 12,0,132,0,0,90,8,0,100,13,0,100,14,0,132,0, - 0,90,9,0,100,15,0,83,40,16,0,0,0,117,12,0, - 0,0,83,111,117,114,99,101,76,111,97,100,101,114,99,2, + 116,0,0,106,1,0,124,1,0,131,1,0,83,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,101,46,41,2, + 114,106,0,0,0,114,18,1,0,0,41,2,114,8,1,0, + 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,12,1,0,0,66,5,0,0,115,2, + 0,0,0,0,4,122,23,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,103,101,116,95,99,111,100,101,99,2, 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,10,0,0,0,116,0,0,130,1,0,100,1, - 0,83,40,2,0,0,0,117,121,0,0,0,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, - 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, - 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, - 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, - 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, - 100,32,112,97,116,104,44,32,119,104,101,114,101,32,112,97, - 116,104,32,105,115,32,97,32,115,116,114,46,10,32,32,32, - 32,32,32,32,32,78,40,1,0,0,0,117,19,0,0,0, - 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, - 114,111,114,40,2,0,0,0,117,4,0,0,0,115,101,108, - 102,117,4,0,0,0,112,97,116,104,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,10,0,0,0,112,97,116,104,95, - 109,116,105,109,101,106,3,0,0,115,2,0,0,0,0,4, - 117,23,0,0,0,83,111,117,114,99,101,76,111,97,100,101, - 114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0, - 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, - 0,115,20,0,0,0,105,1,0,124,0,0,106,0,0,124, - 1,0,131,1,0,100,1,0,54,83,40,2,0,0,0,117, - 114,1,0,0,79,112,116,105,111,110,97,108,32,109,101,116, - 104,111,100,32,114,101,116,117,114,110,105,110,103,32,97,32, - 109,101,116,97,100,97,116,97,32,100,105,99,116,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 112,97,116,104,10,32,32,32,32,32,32,32,32,116,111,32, - 98,121,32,116,104,101,32,112,97,116,104,32,40,115,116,114, - 41,46,10,32,32,32,32,32,32,32,32,80,111,115,115,105, - 98,108,101,32,107,101,121,115,58,10,32,32,32,32,32,32, - 32,32,45,32,39,109,116,105,109,101,39,32,40,109,97,110, - 100,97,116,111,114,121,41,32,105,115,32,116,104,101,32,110, - 117,109,101,114,105,99,32,116,105,109,101,115,116,97,109,112, - 32,111,102,32,108,97,115,116,32,115,111,117,114,99,101,10, - 32,32,32,32,32,32,32,32,32,32,99,111,100,101,32,109, - 111,100,105,102,105,99,97,116,105,111,110,59,10,32,32,32, - 32,32,32,32,32,45,32,39,115,105,122,101,39,32,40,111, - 112,116,105,111,110,97,108,41,32,105,115,32,116,104,101,32, - 115,105,122,101,32,105,110,32,98,121,116,101,115,32,111,102, - 32,116,104,101,32,115,111,117,114,99,101,32,99,111,100,101, + 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,54, + 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,115,32,100,111, + 32,110,111,116,32,104,97,118,101,32,115,111,117,114,99,101, + 32,99,111,100,101,46,78,114,4,0,0,0,41,2,114,8, + 1,0,0,114,158,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,13,1,0,0,72,5,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,13,0,0,0,116,0,0,106, + 1,0,124,1,0,131,1,0,83,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,106,0, + 0,0,90,17,105,115,95,102,114,111,122,101,110,95,112,97, + 99,107,97,103,101,41,2,114,8,1,0,0,114,158,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,219,0,0,0,78,5,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,105,115,95,112,97,99,107,97,103,101,41,15,114,57,0, + 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, + 0,114,14,1,0,0,114,205,0,0,0,114,15,1,0,0, + 114,10,1,0,0,114,11,1,0,0,114,1,1,0,0,114, + 4,1,0,0,114,164,0,0,0,114,12,1,0,0,114,13, + 1,0,0,114,219,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,16,1,0, + 0,14,5,0,0,115,28,0,0,0,12,7,6,2,18,9, + 3,1,21,6,3,1,18,8,18,9,18,9,3,1,21,5, + 3,1,21,5,3,1,114,16,1,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,64,0,0,0, + 115,121,0,0,0,101,0,0,90,1,0,100,0,0,90,2, + 0,100,1,0,90,3,0,100,2,0,90,4,0,100,3,0, + 90,5,0,100,4,0,90,6,0,101,7,0,100,5,0,100, + 6,0,132,0,0,131,1,0,90,8,0,101,7,0,100,7, + 0,100,8,0,132,0,0,131,1,0,90,9,0,101,7,0, + 100,9,0,100,9,0,100,10,0,100,11,0,132,2,0,131, + 1,0,90,10,0,101,7,0,100,9,0,100,12,0,100,13, + 0,132,1,0,131,1,0,90,11,0,100,9,0,83,41,14, + 218,21,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, + 116,104,32,102,105,110,100,101,114,32,102,111,114,32,109,111, + 100,117,108,101,115,32,100,101,99,108,97,114,101,100,32,105, + 110,32,116,104,101,32,87,105,110,100,111,119,115,32,114,101, + 103,105,115,116,114,121,46,122,59,83,111,102,116,119,97,114, + 101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,67, + 111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,110, + 125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,110, + 97,109,101,125,122,65,83,111,102,116,119,97,114,101,92,80, + 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, + 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, + 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, + 125,92,68,101,98,117,103,70,99,2,0,0,0,0,0,0, + 0,2,0,0,0,11,0,0,0,67,0,0,0,115,67,0, + 0,0,121,23,0,116,0,0,106,1,0,116,0,0,106,2, + 0,124,1,0,131,2,0,83,87,110,37,0,4,116,3,0, + 107,10,0,114,62,0,1,1,1,116,0,0,106,1,0,116, + 0,0,106,4,0,124,1,0,131,2,0,83,89,110,1,0, + 88,100,0,0,83,41,1,78,41,5,218,7,95,119,105,110, + 114,101,103,90,7,79,112,101,110,75,101,121,90,17,72,75, + 69,89,95,67,85,82,82,69,78,84,95,85,83,69,82,114, + 40,0,0,0,90,18,72,75,69,89,95,76,79,67,65,76, + 95,77,65,67,72,73,78,69,41,2,114,8,1,0,0,218, + 3,107,101,121,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,14,95,111,112,101,110,95,114,101,103,105,115, + 116,114,121,97,5,0,0,115,8,0,0,0,0,2,3,1, + 23,1,13,1,122,36,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,95,111,112,101, + 110,95,114,101,103,105,115,116,114,121,99,2,0,0,0,0, + 0,0,0,6,0,0,0,16,0,0,0,67,0,0,0,115, + 142,0,0,0,124,0,0,106,0,0,114,21,0,124,0,0, + 106,1,0,125,2,0,110,9,0,124,0,0,106,2,0,125, + 2,0,124,2,0,106,3,0,100,1,0,124,1,0,100,2, + 0,116,4,0,106,5,0,100,0,0,100,3,0,133,2,0, + 25,131,0,2,125,3,0,121,46,0,124,0,0,106,6,0, + 124,3,0,131,1,0,143,25,0,125,4,0,116,7,0,106, + 8,0,124,4,0,100,4,0,131,2,0,125,5,0,87,100, + 0,0,81,88,87,110,22,0,4,116,9,0,107,10,0,114, + 137,0,1,1,1,100,0,0,83,89,110,1,0,88,124,5, + 0,83,41,5,78,114,158,0,0,0,90,11,115,121,115,95, + 118,101,114,115,105,111,110,114,136,0,0,0,114,30,0,0, + 0,41,10,218,11,68,69,66,85,71,95,66,85,73,76,68, + 218,18,82,69,71,73,83,84,82,89,95,75,69,89,95,68, + 69,66,85,71,218,12,82,69,71,73,83,84,82,89,95,75, + 69,89,114,47,0,0,0,114,7,0,0,0,218,7,118,101, + 114,115,105,111,110,114,22,1,0,0,114,20,1,0,0,90, + 10,81,117,101,114,121,86,97,108,117,101,114,40,0,0,0, + 41,6,114,8,1,0,0,114,158,0,0,0,90,12,114,101, + 103,105,115,116,114,121,95,107,101,121,114,21,1,0,0,90, + 4,104,107,101,121,218,8,102,105,108,101,112,97,116,104,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,16, + 95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121, + 104,5,0,0,115,22,0,0,0,0,2,9,1,12,2,9, + 1,15,1,22,1,3,1,18,1,28,1,13,1,9,1,122, + 38,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, + 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,114, + 101,103,105,115,116,114,121,78,99,4,0,0,0,0,0,0, + 0,8,0,0,0,14,0,0,0,67,0,0,0,115,155,0, + 0,0,124,0,0,106,0,0,124,1,0,131,1,0,125,4, + 0,124,4,0,100,0,0,107,8,0,114,31,0,100,0,0, + 83,121,14,0,116,1,0,124,4,0,131,1,0,1,87,110, + 22,0,4,116,2,0,107,10,0,114,69,0,1,1,1,100, + 0,0,83,89,110,1,0,88,120,78,0,116,3,0,131,0, + 0,68,93,67,0,92,2,0,125,5,0,125,6,0,124,4, + 0,106,4,0,116,5,0,124,6,0,131,1,0,131,1,0, + 114,80,0,116,6,0,124,1,0,124,5,0,124,1,0,124, + 4,0,131,2,0,100,1,0,124,4,0,131,2,1,125,7, + 0,124,7,0,83,113,80,0,87,100,0,0,83,41,2,78, + 114,217,0,0,0,41,7,114,28,1,0,0,114,39,0,0, + 0,114,40,0,0,0,114,240,0,0,0,114,230,0,0,0, + 114,231,0,0,0,114,173,0,0,0,41,8,114,8,1,0, + 0,114,158,0,0,0,114,35,0,0,0,114,9,1,0,0, + 114,27,1,0,0,114,169,0,0,0,114,127,0,0,0,114, + 177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,10,1,0,0,119,5,0,0,115,24,0,0, + 0,0,2,15,1,12,1,4,1,3,1,14,1,13,1,9, + 1,22,1,21,1,21,1,9,1,122,31,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,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, + 45,0,0,0,124,0,0,106,0,0,124,1,0,124,2,0, + 131,2,0,125,3,0,124,3,0,100,1,0,107,9,0,114, + 37,0,124,3,0,106,1,0,83,100,1,0,83,100,1,0, + 83,41,2,122,108,70,105,110,100,32,109,111,100,117,108,101, + 32,110,97,109,101,100,32,105,110,32,116,104,101,32,114,101, + 103,105,115,116,114,121,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,41,2,114,10,1,0,0,114,169,0,0,0,41,4, + 114,8,1,0,0,114,158,0,0,0,114,35,0,0,0,114, + 177,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,11,1,0,0,134,5,0,0,115,8,0,0, + 0,0,7,18,1,12,1,7,2,122,33,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 46,102,105,110,100,95,109,111,100,117,108,101,41,12,114,57, + 0,0,0,114,56,0,0,0,114,58,0,0,0,114,59,0, + 0,0,114,25,1,0,0,114,24,1,0,0,114,23,1,0, + 0,114,15,1,0,0,114,22,1,0,0,114,28,1,0,0, + 114,10,1,0,0,114,11,1,0,0,114,4,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,19, + 1,0,0,85,5,0,0,115,20,0,0,0,12,2,6,3, + 6,3,6,2,6,2,18,7,18,15,3,1,21,14,3,1, + 114,19,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,64,0,0,0,115,52,0,0,0,101, + 0,0,90,1,0,100,0,0,90,2,0,100,1,0,90,3, + 0,100,2,0,100,3,0,132,0,0,90,4,0,100,4,0, + 100,5,0,132,0,0,90,5,0,101,6,0,90,7,0,100, + 6,0,83,41,7,218,13,95,76,111,97,100,101,114,66,97, + 115,105,99,115,122,83,66,97,115,101,32,99,108,97,115,115, + 32,111,102,32,99,111,109,109,111,110,32,99,111,100,101,32, + 110,101,101,100,101,100,32,98,121,32,98,111,116,104,32,83, + 111,117,114,99,101,76,111,97,100,101,114,32,97,110,100,10, + 32,32,32,32,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,46,99,2,0,0,0,0,0, + 0,0,5,0,0,0,3,0,0,0,67,0,0,0,115,88, + 0,0,0,116,0,0,124,0,0,106,1,0,124,1,0,131, + 1,0,131,1,0,100,1,0,25,125,2,0,124,2,0,106, + 2,0,100,2,0,100,1,0,131,2,0,100,3,0,25,125, + 3,0,124,1,0,106,3,0,100,2,0,131,1,0,100,4, + 0,25,125,4,0,124,3,0,100,5,0,107,2,0,111,87, + 0,124,4,0,100,5,0,107,3,0,83,41,6,122,141,67, + 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, + 116,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, + 103,101,32,98,121,32,99,104,101,99,107,105,110,103,32,105, + 102,10,32,32,32,32,32,32,32,32,116,104,101,32,112,97, + 116,104,32,114,101,116,117,114,110,101,100,32,98,121,32,103, + 101,116,95,102,105,108,101,110,97,109,101,32,104,97,115,32, + 97,32,102,105,108,101,110,97,109,101,32,111,102,32,39,95, + 95,105,110,105,116,95,95,46,112,121,39,46,114,29,0,0, + 0,114,116,0,0,0,114,84,0,0,0,114,115,0,0,0, + 114,72,0,0,0,41,4,114,38,0,0,0,114,238,0,0, + 0,114,34,0,0,0,114,32,0,0,0,41,5,114,71,0, + 0,0,114,158,0,0,0,114,131,0,0,0,90,13,102,105, + 108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105, + 108,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,219,0,0,0,153,5,0,0,115,8, + 0,0,0,0,3,25,1,22,1,19,1,122,24,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97, + 99,107,97,103,101,99,2,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,80,0,0,0,124, + 0,0,106,0,0,124,1,0,106,1,0,131,1,0,125,2, + 0,124,2,0,100,1,0,107,8,0,114,57,0,116,2,0, + 100,2,0,106,3,0,124,1,0,106,1,0,131,1,0,131, + 1,0,130,1,0,110,0,0,116,4,0,116,5,0,124,2, + 0,124,1,0,106,6,0,131,3,0,1,100,1,0,83,41, + 3,122,19,69,120,101,99,117,116,101,32,116,104,101,32,109, + 111,100,117,108,101,46,78,122,52,99,97,110,110,111,116,32, + 108,111,97,100,32,109,111,100,117,108,101,32,123,33,114,125, + 32,119,104,101,110,32,103,101,116,95,99,111,100,101,40,41, + 32,114,101,116,117,114,110,115,32,78,111,110,101,41,7,114, + 12,1,0,0,114,57,0,0,0,114,153,0,0,0,114,47, + 0,0,0,114,114,0,0,0,114,175,0,0,0,114,63,0, + 0,0,41,3,114,71,0,0,0,114,179,0,0,0,114,194, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,1,1,0,0,161,5,0,0,115,10,0,0,0, + 0,2,18,1,12,1,3,1,24,1,122,25,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,101,120,101,99,95,109, + 111,100,117,108,101,78,41,8,114,57,0,0,0,114,56,0, + 0,0,114,58,0,0,0,114,59,0,0,0,114,219,0,0, + 0,114,1,1,0,0,114,180,0,0,0,114,4,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,29,1,0,0,148,5,0,0,115,8,0, + 0,0,12,3,6,2,12,8,12,8,114,29,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 64,0,0,0,115,106,0,0,0,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,100,2,0,132,0,0,90,3, + 0,100,3,0,100,4,0,132,0,0,90,4,0,100,5,0, + 100,6,0,132,0,0,90,5,0,100,7,0,100,8,0,132, + 0,0,90,6,0,100,9,0,100,10,0,132,0,0,90,7, + 0,100,11,0,100,18,0,100,13,0,100,14,0,132,0,1, + 90,8,0,100,15,0,100,16,0,132,0,0,90,9,0,100, + 17,0,83,41,19,218,12,83,111,117,114,99,101,76,111,97, + 100,101,114,99,2,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,115,10,0,0,0,116,0,0, + 130,1,0,100,1,0,83,41,2,122,178,79,112,116,105,111, + 110,97,108,32,109,101,116,104,111,100,32,116,104,97,116,32, + 114,101,116,117,114,110,115,32,116,104,101,32,109,111,100,105, + 102,105,99,97,116,105,111,110,32,116,105,109,101,32,40,97, + 110,32,105,110,116,41,32,102,111,114,32,116,104,101,10,32, + 32,32,32,32,32,32,32,115,112,101,99,105,102,105,101,100, + 32,112,97,116,104,44,32,119,104,101,114,101,32,112,97,116, + 104,32,105,115,32,97,32,115,116,114,46,10,10,32,32,32, + 32,32,32,32,32,82,97,105,115,101,115,32,73,79,69,114, + 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, + 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, + 108,101,100,46,10,32,32,32,32,32,32,32,32,78,41,1, + 218,7,73,79,69,114,114,111,114,41,2,114,71,0,0,0, + 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101, + 174,5,0,0,115,2,0,0,0,0,6,122,23,83,111,117, + 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,109, + 116,105,109,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,67,0,0,0,115,20,0,0,0,105,1, + 0,124,0,0,106,0,0,124,1,0,131,1,0,100,1,0, + 54,83,41,2,97,170,1,0,0,79,112,116,105,111,110,97, + 108,32,109,101,116,104,111,100,32,114,101,116,117,114,110,105, + 110,103,32,97,32,109,101,116,97,100,97,116,97,32,100,105, + 99,116,32,102,111,114,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,112,97,116,104,10,32,32,32,32,32,32, + 32,32,116,111,32,98,121,32,116,104,101,32,112,97,116,104, + 32,40,115,116,114,41,46,10,32,32,32,32,32,32,32,32, + 80,111,115,115,105,98,108,101,32,107,101,121,115,58,10,32, + 32,32,32,32,32,32,32,45,32,39,109,116,105,109,101,39, + 32,40,109,97,110,100,97,116,111,114,121,41,32,105,115,32, + 116,104,101,32,110,117,109,101,114,105,99,32,116,105,109,101, + 115,116,97,109,112,32,111,102,32,108,97,115,116,32,115,111, + 117,114,99,101,10,32,32,32,32,32,32,32,32,32,32,99, + 111,100,101,32,109,111,100,105,102,105,99,97,116,105,111,110, + 59,10,32,32,32,32,32,32,32,32,45,32,39,115,105,122, + 101,39,32,40,111,112,116,105,111,110,97,108,41,32,105,115, + 32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116, + 101,115,32,111,102,32,116,104,101,32,115,111,117,114,99,101, + 32,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, + 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, + 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, + 116,104,101,32,108,111,97,100,101,114,32,116,111,32,114,101, + 97,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 115,46,10,32,32,32,32,32,32,32,32,82,97,105,115,101, + 115,32,73,79,69,114,114,111,114,32,119,104,101,110,32,116, + 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, + 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, + 32,32,32,114,183,0,0,0,41,1,114,32,1,0,0,41, + 2,114,71,0,0,0,114,35,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,10,112,97,116,104, + 95,115,116,97,116,115,182,5,0,0,115,2,0,0,0,0, + 11,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, + 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, + 16,0,0,0,124,0,0,106,0,0,124,2,0,124,3,0, + 131,2,0,83,41,1,122,228,79,112,116,105,111,110,97,108, + 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, + 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, + 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, + 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, + 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, + 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, + 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, + 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, + 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, + 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, + 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, + 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, + 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, + 111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8, + 115,101,116,95,100,97,116,97,41,4,114,71,0,0,0,114, + 141,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, + 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, + 101,99,111,100,101,195,5,0,0,115,2,0,0,0,0,8, + 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, + 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, + 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, + 0,0,0,115,4,0,0,0,100,1,0,83,41,2,122,150, + 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, + 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, + 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, + 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, - 104,111,100,32,97,108,108,111,119,115,32,116,104,101,32,108, - 111,97,100,101,114,32,116,111,32,114,101,97,100,32,98,121, + 104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116, + 104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121, 116,101,99,111,100,101,32,102,105,108,101,115,46,10,32,32, - 32,32,32,32,32,32,117,5,0,0,0,109,116,105,109,101, - 40,1,0,0,0,117,10,0,0,0,112,97,116,104,95,109, - 116,105,109,101,40,2,0,0,0,117,4,0,0,0,115,101, - 108,102,117,4,0,0,0,112,97,116,104,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,10,0,0,0,112,97,116,104, - 95,115,116,97,116,115,112,3,0,0,115,2,0,0,0,0, - 10,117,23,0,0,0,83,111,117,114,99,101,76,111,97,100, - 101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, - 0,0,115,16,0,0,0,124,0,0,106,0,0,124,2,0, - 124,3,0,131,2,0,83,40,1,0,0,0,117,228,0,0, - 0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97, - 116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32, - 102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114, - 41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, - 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, - 116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32, - 116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,114, - 99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,101, - 100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,111, - 114,114,101,99,116,108,121,32,116,114,97,110,115,102,101,114, - 32,112,101,114,109,105,115,115,105,111,110,115,10,32,32,32, - 32,32,32,32,32,40,1,0,0,0,117,8,0,0,0,115, - 101,116,95,100,97,116,97,40,4,0,0,0,117,4,0,0, - 0,115,101,108,102,117,11,0,0,0,115,111,117,114,99,101, - 95,112,97,116,104,117,10,0,0,0,99,97,99,104,101,95, - 112,97,116,104,117,4,0,0,0,100,97,116,97,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,15,0,0,0,95,99, - 97,99,104,101,95,98,121,116,101,99,111,100,101,124,3,0, - 0,115,2,0,0,0,0,8,117,28,0,0,0,83,111,117, - 114,99,101,76,111,97,100,101,114,46,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,99,3,0,0,0,0,0, - 0,0,3,0,0,0,1,0,0,0,67,0,0,0,115,10, - 0,0,0,116,0,0,130,1,0,100,1,0,83,40,2,0, - 0,0,117,151,0,0,0,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105, - 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41, - 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32, - 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, - 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, - 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, - 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110, - 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,115,46,10,10,32,32,32,32,32,32,32,32,78,40, - 1,0,0,0,117,19,0,0,0,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,40,3,0,0, - 0,117,4,0,0,0,115,101,108,102,117,4,0,0,0,112, - 97,116,104,117,4,0,0,0,100,97,116,97,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,115,101,116, - 95,100,97,116,97,134,3,0,0,115,2,0,0,0,0,6, - 117,21,0,0,0,83,111,117,114,99,101,76,111,97,100,101, - 114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0, - 0,0,0,9,0,0,0,44,0,0,0,67,0,0,0,115, - 62,1,0,0,100,1,0,100,2,0,108,0,0,125,2,0, - 124,0,0,106,1,0,124,1,0,131,1,0,125,3,0,121, - 19,0,124,0,0,106,2,0,124,3,0,131,1,0,125,4, - 0,87,110,58,0,4,116,3,0,107,10,0,114,106,0,1, - 125,5,0,1,122,26,0,116,4,0,100,3,0,100,4,0, - 124,1,0,131,1,1,124,5,0,130,2,0,87,89,100,2, - 0,100,2,0,125,5,0,126,5,0,88,110,1,0,88,116, - 5,0,106,6,0,124,4,0,131,1,0,106,7,0,125,6, - 0,121,19,0,124,2,0,106,8,0,124,6,0,131,1,0, - 125,7,0,87,110,58,0,4,116,9,0,107,10,0,114,204, - 0,1,125,5,0,1,122,26,0,116,4,0,100,5,0,100, - 4,0,124,1,0,131,1,1,124,5,0,130,2,0,87,89, - 100,2,0,100,2,0,125,5,0,126,5,0,88,110,1,0, - 88,116,5,0,106,10,0,100,2,0,100,7,0,131,2,0, - 125,8,0,121,30,0,124,8,0,106,13,0,124,4,0,106, - 13,0,124,7,0,100,1,0,25,131,1,0,131,1,0,83, - 87,110,58,0,4,116,14,0,107,10,0,114,57,1,1,125, - 5,0,1,122,26,0,116,4,0,100,6,0,100,4,0,124, - 1,0,131,1,1,124,5,0,130,2,0,87,89,100,2,0, - 100,2,0,125,5,0,126,5,0,88,110,1,0,88,100,2, - 0,83,40,8,0,0,0,117,52,0,0,0,67,111,110,99, - 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, - 105,0,0,0,0,78,117,39,0,0,0,115,111,117,114,99, - 101,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32, - 116,104,114,111,117,103,104,32,103,101,116,95,100,97,116,97, - 40,41,117,4,0,0,0,110,97,109,101,117,25,0,0,0, - 70,97,105,108,101,100,32,116,111,32,100,101,116,101,99,116, - 32,101,110,99,111,100,105,110,103,117,28,0,0,0,70,97, - 105,108,101,100,32,116,111,32,100,101,99,111,100,101,32,115, - 111,117,114,99,101,32,102,105,108,101,84,40,15,0,0,0, - 117,8,0,0,0,116,111,107,101,110,105,122,101,117,12,0, - 0,0,103,101,116,95,102,105,108,101,110,97,109,101,117,8, - 0,0,0,103,101,116,95,100,97,116,97,117,7,0,0,0, - 73,79,69,114,114,111,114,117,11,0,0,0,73,109,112,111, - 114,116,69,114,114,111,114,117,3,0,0,0,95,105,111,117, - 7,0,0,0,66,121,116,101,115,73,79,117,8,0,0,0, - 114,101,97,100,108,105,110,101,117,15,0,0,0,100,101,116, - 101,99,116,95,101,110,99,111,100,105,110,103,117,11,0,0, - 0,83,121,110,116,97,120,69,114,114,111,114,117,25,0,0, - 0,73,110,99,114,101,109,101,110,116,97,108,78,101,119,108, - 105,110,101,68,101,99,111,100,101,114,117,4,0,0,0,78, - 111,110,101,117,4,0,0,0,84,114,117,101,117,6,0,0, - 0,100,101,99,111,100,101,117,18,0,0,0,85,110,105,99, - 111,100,101,68,101,99,111,100,101,69,114,114,111,114,40,9, - 0,0,0,117,4,0,0,0,115,101,108,102,117,8,0,0, - 0,102,117,108,108,110,97,109,101,117,8,0,0,0,116,111, - 107,101,110,105,122,101,117,4,0,0,0,112,97,116,104,117, - 12,0,0,0,115,111,117,114,99,101,95,98,121,116,101,115, - 117,3,0,0,0,101,120,99,117,10,0,0,0,114,101,97, - 100,115,111,117,114,99,101,117,8,0,0,0,101,110,99,111, - 100,105,110,103,117,15,0,0,0,110,101,119,108,105,110,101, - 95,100,101,99,111,100,101,114,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,10,0,0,0,103,101,116,95,115,111,117, - 114,99,101,143,3,0,0,115,38,0,0,0,0,2,12,1, - 15,1,3,1,19,1,18,1,9,1,31,1,18,1,3,1, - 19,1,18,1,9,1,31,1,18,1,3,1,30,1,18,1, - 9,1,117,23,0,0,0,83,111,117,114,99,101,76,111,97, - 100,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, - 0,0,0,0,0,0,0,12,0,0,0,45,0,0,0,67, - 0,0,0,115,52,2,0,0,124,0,0,106,0,0,124,1, - 0,131,1,0,125,2,0,100,10,0,125,3,0,121,16,0, - 116,2,0,124,2,0,131,1,0,125,4,0,87,110,24,0, - 4,116,3,0,107,10,0,114,63,0,1,1,1,100,10,0, - 125,4,0,89,110,14,1,88,121,19,0,124,0,0,106,4, - 0,124,2,0,131,1,0,125,5,0,87,110,18,0,4,116, - 3,0,107,10,0,114,103,0,1,1,1,89,110,230,0,88, - 116,5,0,124,5,0,100,1,0,25,131,1,0,125,3,0, - 121,19,0,124,0,0,106,6,0,124,4,0,131,1,0,125, - 6,0,87,110,18,0,4,116,7,0,107,10,0,114,159,0, - 1,1,1,89,110,174,0,88,121,28,0,124,0,0,106,8, - 0,124,1,0,124,6,0,124,4,0,124,5,0,131,4,0, - 125,7,0,87,110,24,0,4,116,9,0,116,10,0,102,2, - 0,107,10,0,114,214,0,1,1,1,89,110,119,0,88,116, - 11,0,100,2,0,124,4,0,124,2,0,131,3,0,1,116, - 12,0,106,13,0,124,7,0,131,1,0,125,8,0,116,14, - 0,124,8,0,116,15,0,131,2,0,114,38,1,116,16,0, - 106,17,0,124,8,0,124,2,0,131,2,0,1,116,11,0, - 100,3,0,124,4,0,131,2,0,1,124,8,0,83,100,4, - 0,125,9,0,116,9,0,124,9,0,106,18,0,124,4,0, - 131,1,0,100,5,0,124,1,0,100,6,0,124,4,0,131, - 1,2,130,1,0,124,0,0,106,6,0,124,2,0,131,1, - 0,125,10,0,116,19,0,116,20,0,124,10,0,124,2,0, - 100,7,0,100,8,0,100,11,0,131,4,1,125,11,0,116, - 11,0,100,3,0,124,2,0,131,2,0,1,116,22,0,106, - 23,0,12,114,48,2,124,4,0,100,10,0,107,9,0,114, - 48,2,124,3,0,100,10,0,107,9,0,114,48,2,116,24, - 0,116,25,0,131,1,0,125,6,0,124,6,0,106,26,0, - 116,27,0,124,3,0,131,1,0,131,1,0,1,124,6,0, - 106,26,0,116,27,0,116,28,0,124,10,0,131,1,0,131, - 1,0,131,1,0,1,124,6,0,106,26,0,116,12,0,106, - 29,0,124,11,0,131,1,0,131,1,0,1,121,36,0,124, - 0,0,106,30,0,124,2,0,124,4,0,124,6,0,131,3, - 0,1,116,11,0,100,9,0,124,4,0,131,2,0,1,87, - 113,48,2,4,116,3,0,107,10,0,114,44,2,1,1,1, - 89,113,48,2,88,110,0,0,124,11,0,83,40,12,0,0, - 0,117,190,0,0,0,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,103, - 101,116,95,99,111,100,101,46,10,10,32,32,32,32,32,32, - 32,32,82,101,97,100,105,110,103,32,111,102,32,98,121,116, - 101,99,111,100,101,32,114,101,113,117,105,114,101,115,32,112, - 97,116,104,95,115,116,97,116,115,32,116,111,32,98,101,32, - 105,109,112,108,101,109,101,110,116,101,100,46,32,84,111,32, - 119,114,105,116,101,10,32,32,32,32,32,32,32,32,98,121, - 116,101,99,111,100,101,44,32,115,101,116,95,100,97,116,97, - 32,109,117,115,116,32,97,108,115,111,32,98,101,32,105,109, - 112,108,101,109,101,110,116,101,100,46,10,10,32,32,32,32, - 32,32,32,32,117,5,0,0,0,109,116,105,109,101,117,13, - 0,0,0,123,125,32,109,97,116,99,104,101,115,32,123,125, - 117,19,0,0,0,99,111,100,101,32,111,98,106,101,99,116, - 32,102,114,111,109,32,123,125,117,21,0,0,0,78,111,110, - 45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32, - 123,125,117,4,0,0,0,110,97,109,101,117,4,0,0,0, - 112,97,116,104,117,4,0,0,0,101,120,101,99,117,12,0, - 0,0,100,111,110,116,95,105,110,104,101,114,105,116,117,10, - 0,0,0,119,114,111,116,101,32,123,33,114,125,78,84,40, - 31,0,0,0,117,12,0,0,0,103,101,116,95,102,105,108, - 101,110,97,109,101,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,19,0,0,0,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,117,10,0,0, - 0,112,97,116,104,95,115,116,97,116,115,117,3,0,0,0, - 105,110,116,117,8,0,0,0,103,101,116,95,100,97,116,97, - 117,7,0,0,0,73,79,69,114,114,111,114,117,20,0,0, - 0,95,98,121,116,101,115,95,102,114,111,109,95,98,121,116, - 101,99,111,100,101,117,11,0,0,0,73,109,112,111,114,116, - 69,114,114,111,114,117,8,0,0,0,69,79,70,69,114,114, - 111,114,117,16,0,0,0,95,118,101,114,98,111,115,101,95, - 109,101,115,115,97,103,101,117,7,0,0,0,109,97,114,115, - 104,97,108,117,5,0,0,0,108,111,97,100,115,117,10,0, - 0,0,105,115,105,110,115,116,97,110,99,101,117,10,0,0, - 0,95,99,111,100,101,95,116,121,112,101,117,4,0,0,0, - 95,105,109,112,117,16,0,0,0,95,102,105,120,95,99,111, - 95,102,105,108,101,110,97,109,101,117,6,0,0,0,102,111, - 114,109,97,116,117,25,0,0,0,95,99,97,108,108,95,119, - 105,116,104,95,102,114,97,109,101,115,95,114,101,109,111,118, - 101,100,117,7,0,0,0,99,111,109,112,105,108,101,117,4, - 0,0,0,84,114,117,101,117,3,0,0,0,115,121,115,117, - 19,0,0,0,100,111,110,116,95,119,114,105,116,101,95,98, - 121,116,101,99,111,100,101,117,9,0,0,0,98,121,116,101, - 97,114,114,97,121,117,12,0,0,0,95,77,65,71,73,67, - 95,66,89,84,69,83,117,6,0,0,0,101,120,116,101,110, - 100,117,7,0,0,0,95,119,95,108,111,110,103,117,3,0, - 0,0,108,101,110,117,5,0,0,0,100,117,109,112,115,117, - 15,0,0,0,95,99,97,99,104,101,95,98,121,116,101,99, - 111,100,101,40,12,0,0,0,117,4,0,0,0,115,101,108, - 102,117,8,0,0,0,102,117,108,108,110,97,109,101,117,11, - 0,0,0,115,111,117,114,99,101,95,112,97,116,104,117,12, - 0,0,0,115,111,117,114,99,101,95,109,116,105,109,101,117, - 13,0,0,0,98,121,116,101,99,111,100,101,95,112,97,116, - 104,117,2,0,0,0,115,116,117,4,0,0,0,100,97,116, - 97,117,10,0,0,0,98,121,116,101,115,95,100,97,116,97, - 117,5,0,0,0,102,111,117,110,100,117,3,0,0,0,109, - 115,103,117,12,0,0,0,115,111,117,114,99,101,95,98,121, - 116,101,115,117,11,0,0,0,99,111,100,101,95,111,98,106, - 101,99,116,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,103,101,116,95,99,111,100,101,165,3,0,0, - 115,98,0,0,0,0,7,15,1,6,1,3,1,16,1,13, - 1,11,2,3,1,19,1,13,1,5,2,16,1,3,1,19, - 1,13,1,5,2,3,1,12,1,3,1,13,1,19,1,5, - 2,9,1,7,1,15,1,15,1,16,1,6,1,7,1,4, - 2,6,1,18,1,15,1,15,1,6,1,12,1,9,1,13, - 1,22,1,12,1,12,1,19,1,25,1,22,1,3,1,19, - 1,17,1,13,1,8,1,117,21,0,0,0,83,111,117,114, - 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,115,13,0,0,0,124,0,0,106,0, - 0,124,1,0,131,1,0,83,40,1,0,0,0,117,0,1, - 0,0,67,111,110,99,114,101,116,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,76,111,97, - 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,82,101,113,117,105,114, - 101,115,32,69,120,101,99,117,116,105,111,110,76,111,97,100, - 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,32, - 97,110,100,32,82,101,115,111,117,114,99,101,76,111,97,100, - 101,114,46,103,101,116,95,100,97,116,97,32,116,111,32,98, - 101,10,32,32,32,32,32,32,32,32,105,109,112,108,101,109, - 101,110,116,101,100,32,116,111,32,108,111,97,100,32,115,111, - 117,114,99,101,32,99,111,100,101,46,32,85,115,101,32,111, - 102,32,98,121,116,101,99,111,100,101,32,105,115,32,100,105, - 99,116,97,116,101,100,32,98,121,32,119,104,101,116,104,101, - 114,10,32,32,32,32,32,32,32,32,103,101,116,95,99,111, - 100,101,32,117,115,101,115,47,119,114,105,116,101,115,32,98, - 121,116,101,99,111,100,101,46,10,10,32,32,32,32,32,32, - 32,32,40,1,0,0,0,117,12,0,0,0,95,108,111,97, - 100,95,109,111,100,117,108,101,40,2,0,0,0,117,4,0, - 0,0,115,101,108,102,117,8,0,0,0,102,117,108,108,110, - 97,109,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, - 11,0,0,0,108,111,97,100,95,109,111,100,117,108,101,227, - 3,0,0,115,2,0,0,0,0,8,117,24,0,0,0,83, - 111,117,114,99,101,76,111,97,100,101,114,46,108,111,97,100, - 95,109,111,100,117,108,101,78,40,10,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,10,0,0,0,95, - 95,109,111,100,117,108,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,10,0,0,0,112, - 97,116,104,95,109,116,105,109,101,117,10,0,0,0,112,97, - 116,104,95,115,116,97,116,115,117,15,0,0,0,95,99,97, - 99,104,101,95,98,121,116,101,99,111,100,101,117,8,0,0, - 0,115,101,116,95,100,97,116,97,117,10,0,0,0,103,101, - 116,95,115,111,117,114,99,101,117,8,0,0,0,103,101,116, - 95,99,111,100,101,117,11,0,0,0,108,111,97,100,95,109, - 111,100,117,108,101,40,1,0,0,0,117,10,0,0,0,95, - 95,108,111,99,97,108,115,95,95,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,12,0,0,0,83,111,117,114,99,101, - 76,111,97,100,101,114,104,3,0,0,115,14,0,0,0,16, - 2,12,6,12,12,12,10,12,9,12,22,12,62,117,12,0, - 0,0,83,111,117,114,99,101,76,111,97,100,101,114,99,1, - 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,2, - 0,0,0,115,92,0,0,0,124,0,0,69,101,0,0,90, - 1,0,100,0,0,90,2,0,100,1,0,90,3,0,100,2, - 0,100,3,0,132,0,0,90,4,0,101,5,0,135,0,0, - 102,1,0,100,4,0,100,5,0,134,0,0,131,1,0,90, - 6,0,101,5,0,100,6,0,100,7,0,132,0,0,131,1, - 0,90,7,0,100,8,0,100,9,0,132,0,0,90,8,0, - 135,0,0,83,40,10,0,0,0,117,10,0,0,0,70,105, - 108,101,76,111,97,100,101,114,117,103,0,0,0,66,97,115, - 101,32,102,105,108,101,32,108,111,97,100,101,114,32,99,108, - 97,115,115,32,119,104,105,99,104,32,105,109,112,108,101,109, - 101,110,116,115,32,116,104,101,32,108,111,97,100,101,114,32, - 112,114,111,116,111,99,111,108,32,109,101,116,104,111,100,115, - 32,116,104,97,116,10,32,32,32,32,114,101,113,117,105,114, - 101,32,102,105,108,101,32,115,121,115,116,101,109,32,117,115, - 97,103,101,46,99,3,0,0,0,0,0,0,0,3,0,0, - 0,2,0,0,0,67,0,0,0,115,22,0,0,0,124,1, - 0,124,0,0,95,0,0,124,2,0,124,0,0,95,1,0, - 100,1,0,83,40,2,0,0,0,117,75,0,0,0,67,97, - 99,104,101,32,116,104,101,32,109,111,100,117,108,101,32,110, - 97,109,101,32,97,110,100,32,116,104,101,32,112,97,116,104, - 32,116,111,32,116,104,101,32,102,105,108,101,32,102,111,117, - 110,100,32,98,121,32,116,104,101,10,32,32,32,32,32,32, - 32,32,102,105,110,100,101,114,46,78,40,2,0,0,0,117, - 4,0,0,0,110,97,109,101,117,4,0,0,0,112,97,116, - 104,40,3,0,0,0,117,4,0,0,0,115,101,108,102,117, - 8,0,0,0,102,117,108,108,110,97,109,101,117,4,0,0, - 0,112,97,116,104,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,95,105,110,105,116,95,95,243,3, - 0,0,115,4,0,0,0,0,3,9,1,117,19,0,0,0, - 70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,105, - 116,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,3,0,0,0,115,22,0,0,0,116,0,0, - 116,1,0,124,0,0,131,2,0,106,2,0,124,1,0,131, - 1,0,83,40,1,0,0,0,117,26,0,0,0,76,111,97, + 32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,71, + 0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,34,1,0, + 0,205,5,0,0,115,0,0,0,0,122,21,83,111,117,114, + 99,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, + 97,99,2,0,0,0,0,0,0,0,5,0,0,0,16,0, + 0,0,67,0,0,0,115,105,0,0,0,124,0,0,106,0, + 0,124,1,0,131,1,0,125,2,0,121,19,0,124,0,0, + 106,1,0,124,2,0,131,1,0,125,3,0,87,110,58,0, + 4,116,2,0,107,10,0,114,94,0,1,125,4,0,1,122, + 26,0,116,3,0,100,1,0,100,2,0,124,1,0,131,1, + 1,124,4,0,130,2,0,87,89,100,3,0,100,3,0,125, + 4,0,126,4,0,88,110,1,0,88,116,4,0,124,3,0, + 131,1,0,83,41,4,122,52,67,111,110,99,114,101,116,101, + 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, + 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, + 46,103,101,116,95,115,111,117,114,99,101,46,122,39,115,111, + 117,114,99,101,32,110,111,116,32,97,118,97,105,108,97,98, + 108,101,32,116,104,114,111,117,103,104,32,103,101,116,95,100, + 97,116,97,40,41,114,67,0,0,0,78,41,5,114,238,0, + 0,0,218,8,103,101,116,95,100,97,116,97,114,40,0,0, + 0,114,153,0,0,0,114,203,0,0,0,41,5,114,71,0, + 0,0,114,158,0,0,0,114,35,0,0,0,114,201,0,0, + 0,218,3,101,120,99,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,13,1,0,0,212,5,0,0,115,14, + 0,0,0,0,2,15,1,3,1,19,1,18,1,9,1,31, + 1,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, + 103,101,116,95,115,111,117,114,99,101,218,9,95,111,112,116, + 105,109,105,122,101,114,29,0,0,0,99,3,0,0,0,1, + 0,0,0,4,0,0,0,9,0,0,0,67,0,0,0,115, + 31,0,0,0,116,0,0,116,1,0,124,1,0,124,2,0, + 100,1,0,100,2,0,100,3,0,100,4,0,124,3,0,131, + 4,2,83,41,5,122,130,82,101,116,117,114,110,32,116,104, + 101,32,99,111,100,101,32,111,98,106,101,99,116,32,99,111, + 109,112,105,108,101,100,32,102,114,111,109,32,115,111,117,114, + 99,101,46,10,10,32,32,32,32,32,32,32,32,84,104,101, + 32,39,100,97,116,97,39,32,97,114,103,117,109,101,110,116, + 32,99,97,110,32,98,101,32,97,110,121,32,111,98,106,101, + 99,116,32,116,121,112,101,32,116,104,97,116,32,99,111,109, + 112,105,108,101,40,41,32,115,117,112,112,111,114,116,115,46, + 10,32,32,32,32,32,32,32,32,114,175,0,0,0,218,12, + 100,111,110,116,95,105,110,104,101,114,105,116,84,114,118,0, + 0,0,41,2,114,114,0,0,0,218,7,99,111,109,112,105, + 108,101,41,4,114,71,0,0,0,114,53,0,0,0,114,35, + 0,0,0,114,38,1,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,14,115,111,117,114,99,101,95, + 116,111,95,99,111,100,101,222,5,0,0,115,4,0,0,0, + 0,5,18,1,122,27,83,111,117,114,99,101,76,111,97,100, + 101,114,46,115,111,117,114,99,101,95,116,111,95,99,111,100, + 101,99,2,0,0,0,0,0,0,0,10,0,0,0,45,0, + 0,0,67,0,0,0,115,177,1,0,0,124,0,0,106,0, + 0,124,1,0,131,1,0,125,2,0,100,1,0,125,3,0, + 121,16,0,116,1,0,124,2,0,131,1,0,125,4,0,87, + 110,24,0,4,116,2,0,107,10,0,114,63,0,1,1,1, + 100,1,0,125,4,0,89,110,202,0,88,121,19,0,124,0, + 0,106,3,0,124,2,0,131,1,0,125,5,0,87,110,18, + 0,4,116,4,0,107,10,0,114,103,0,1,1,1,89,110, + 162,0,88,116,5,0,124,5,0,100,2,0,25,131,1,0, + 125,3,0,121,19,0,124,0,0,106,6,0,124,4,0,131, + 1,0,125,6,0,87,110,18,0,4,116,7,0,107,10,0, + 114,159,0,1,1,1,89,110,106,0,88,121,34,0,116,8, + 0,124,6,0,100,3,0,124,5,0,100,4,0,124,1,0, + 100,5,0,124,4,0,131,1,3,125,7,0,87,110,24,0, + 4,116,9,0,116,10,0,102,2,0,107,10,0,114,220,0, + 1,1,1,89,110,45,0,88,116,11,0,100,6,0,124,4, + 0,124,2,0,131,3,0,1,116,12,0,124,7,0,100,4, + 0,124,1,0,100,7,0,124,4,0,100,8,0,124,2,0, + 131,1,3,83,124,0,0,106,6,0,124,2,0,131,1,0, + 125,8,0,124,0,0,106,13,0,124,8,0,124,2,0,131, + 2,0,125,9,0,116,11,0,100,9,0,124,2,0,131,2, + 0,1,116,14,0,106,15,0,12,114,173,1,124,4,0,100, + 1,0,107,9,0,114,173,1,124,3,0,100,1,0,107,9, + 0,114,173,1,116,16,0,124,9,0,124,3,0,116,17,0, + 124,8,0,131,1,0,131,3,0,125,6,0,121,36,0,124, + 0,0,106,18,0,124,2,0,124,4,0,124,6,0,131,3, + 0,1,116,11,0,100,10,0,124,4,0,131,2,0,1,87, + 113,173,1,4,116,2,0,107,10,0,114,169,1,1,1,1, + 89,113,173,1,88,110,0,0,124,9,0,83,41,11,122,190, + 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,101, + 99,116,76,111,97,100,101,114,46,103,101,116,95,99,111,100, + 101,46,10,10,32,32,32,32,32,32,32,32,82,101,97,100, + 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32, + 114,101,113,117,105,114,101,115,32,112,97,116,104,95,115,116, + 97,116,115,32,116,111,32,98,101,32,105,109,112,108,101,109, + 101,110,116,101,100,46,32,84,111,32,119,114,105,116,101,10, + 32,32,32,32,32,32,32,32,98,121,116,101,99,111,100,101, + 44,32,115,101,116,95,100,97,116,97,32,109,117,115,116,32, + 97,108,115,111,32,98,101,32,105,109,112,108,101,109,101,110, + 116,101,100,46,10,10,32,32,32,32,32,32,32,32,78,114, + 183,0,0,0,114,187,0,0,0,114,67,0,0,0,114,35, + 0,0,0,122,13,123,125,32,109,97,116,99,104,101,115,32, + 123,125,114,140,0,0,0,114,141,0,0,0,122,19,99,111, + 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, + 125,122,10,119,114,111,116,101,32,123,33,114,125,41,19,114, + 238,0,0,0,114,132,0,0,0,114,124,0,0,0,114,33, + 1,0,0,114,31,1,0,0,114,14,0,0,0,114,36,1, + 0,0,114,40,0,0,0,114,190,0,0,0,114,153,0,0, + 0,114,186,0,0,0,114,152,0,0,0,114,195,0,0,0, + 114,41,1,0,0,114,7,0,0,0,218,19,100,111,110,116, + 95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114, + 198,0,0,0,114,31,0,0,0,114,35,1,0,0,41,10, + 114,71,0,0,0,114,158,0,0,0,114,141,0,0,0,114, + 188,0,0,0,114,140,0,0,0,218,2,115,116,114,53,0, + 0,0,218,10,98,121,116,101,115,95,100,97,116,97,114,201, + 0,0,0,90,11,99,111,100,101,95,111,98,106,101,99,116, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 12,1,0,0,230,5,0,0,115,78,0,0,0,0,7,15, + 1,6,1,3,1,16,1,13,1,11,2,3,1,19,1,13, + 1,5,2,16,1,3,1,19,1,13,1,5,2,3,1,9, + 1,12,1,13,1,19,1,5,2,9,1,7,1,15,1,6, + 1,7,1,15,1,18,1,13,1,22,1,12,1,9,1,15, + 1,3,1,19,1,17,1,13,1,8,1,122,21,83,111,117, + 114,99,101,76,111,97,100,101,114,46,103,101,116,95,99,111, + 100,101,78,114,138,0,0,0,41,10,114,57,0,0,0,114, + 56,0,0,0,114,58,0,0,0,114,32,1,0,0,114,33, + 1,0,0,114,35,1,0,0,114,34,1,0,0,114,13,1, + 0,0,114,41,1,0,0,114,12,1,0,0,114,4,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,30,1,0,0,172,5,0,0,115,14,0,0,0,12,2, + 12,8,12,13,12,10,12,7,12,10,18,8,114,30,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,0,0,0,0,115,112,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,101,7,0,135,0,0,102,1,0,100,8,0,100,9,0, + 134,0,0,131,1,0,90,8,0,101,7,0,100,10,0,100, + 11,0,132,0,0,131,1,0,90,9,0,100,12,0,100,13, + 0,132,0,0,90,10,0,135,0,0,83,41,14,218,10,70, + 105,108,101,76,111,97,100,101,114,122,103,66,97,115,101,32, + 102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115, + 115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110, + 116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114, + 111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116, + 104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32, + 102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103, + 101,46,99,3,0,0,0,0,0,0,0,3,0,0,0,2, + 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, + 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,1, + 0,83,41,2,122,75,67,97,99,104,101,32,116,104,101,32, + 109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104, + 101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114, + 46,78,41,2,114,67,0,0,0,114,35,0,0,0,41,3, + 114,71,0,0,0,114,158,0,0,0,114,35,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,72, + 0,0,0,31,6,0,0,115,4,0,0,0,0,3,9,1, + 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,105, + 110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,67,0,0,0,115,34,0,0,0,124, + 0,0,106,0,0,124,1,0,106,0,0,107,2,0,111,33, + 0,124,0,0,106,1,0,124,1,0,106,1,0,107,2,0, + 83,41,1,78,41,2,114,224,0,0,0,114,63,0,0,0, + 41,2,114,71,0,0,0,114,227,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,229,0,0,0, + 37,6,0,0,115,4,0,0,0,0,1,18,1,122,17,70, + 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, + 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,115,26,0,0,0,116,0,0,124,0,0, + 106,1,0,131,1,0,116,0,0,124,0,0,106,2,0,131, + 1,0,65,83,41,1,78,41,3,218,4,104,97,115,104,114, + 67,0,0,0,114,35,0,0,0,41,1,114,71,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 8,95,95,104,97,115,104,95,95,41,6,0,0,115,2,0, + 0,0,0,1,122,19,70,105,108,101,76,111,97,100,101,114, + 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,22, + 0,0,0,116,0,0,116,1,0,124,0,0,131,2,0,106, + 2,0,124,1,0,131,1,0,83,41,1,122,100,76,111,97, 100,32,97,32,109,111,100,117,108,101,32,102,114,111,109,32, - 97,32,102,105,108,101,46,40,3,0,0,0,117,5,0,0, - 0,115,117,112,101,114,117,10,0,0,0,70,105,108,101,76, - 111,97,100,101,114,117,11,0,0,0,108,111,97,100,95,109, - 111,100,117,108,101,40,2,0,0,0,117,4,0,0,0,115, - 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,101, - 40,1,0,0,0,117,9,0,0,0,95,95,99,108,97,115, - 115,95,95,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,11,0,0,0,108, - 111,97,100,95,109,111,100,117,108,101,249,3,0,0,115,2, - 0,0,0,0,5,117,22,0,0,0,70,105,108,101,76,111, - 97,100,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,1,0,0, - 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, - 83,40,1,0,0,0,117,58,0,0,0,82,101,116,117,114, - 110,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104, - 101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,115, - 32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,105, - 110,100,101,114,46,40,1,0,0,0,117,4,0,0,0,112, - 97,116,104,40,2,0,0,0,117,4,0,0,0,115,101,108, - 102,117,8,0,0,0,102,117,108,108,110,97,109,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,12,0,0,0,103, - 101,116,95,102,105,108,101,110,97,109,101,0,4,0,0,115, - 2,0,0,0,0,3,117,23,0,0,0,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,97, - 109,101,99,2,0,0,0,0,0,0,0,3,0,0,0,8, - 0,0,0,67,0,0,0,115,41,0,0,0,116,0,0,106, - 1,0,124,1,0,100,1,0,131,2,0,143,17,0,125,2, - 0,124,2,0,106,2,0,131,0,0,83,87,100,2,0,81, - 88,100,2,0,83,40,3,0,0,0,117,39,0,0,0,82, - 101,116,117,114,110,32,116,104,101,32,100,97,116,97,32,102, - 114,111,109,32,112,97,116,104,32,97,115,32,114,97,119,32, - 98,121,116,101,115,46,117,1,0,0,0,114,78,40,3,0, - 0,0,117,3,0,0,0,95,105,111,117,6,0,0,0,70, - 105,108,101,73,79,117,4,0,0,0,114,101,97,100,40,3, - 0,0,0,117,4,0,0,0,115,101,108,102,117,4,0,0, - 0,112,97,116,104,117,4,0,0,0,102,105,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,8,0,0,0,103, - 101,116,95,100,97,116,97,5,4,0,0,115,4,0,0,0, - 0,2,21,1,117,19,0,0,0,70,105,108,101,76,111,97, - 100,101,114,46,103,101,116,95,100,97,116,97,40,9,0,0, - 0,117,8,0,0,0,95,95,110,97,109,101,95,95,117,10, - 0,0,0,95,95,109,111,100,117,108,101,95,95,117,12,0, - 0,0,95,95,113,117,97,108,110,97,109,101,95,95,117,7, - 0,0,0,95,95,100,111,99,95,95,117,8,0,0,0,95, - 95,105,110,105,116,95,95,117,11,0,0,0,95,99,104,101, - 99,107,95,110,97,109,101,117,11,0,0,0,108,111,97,100, - 95,109,111,100,117,108,101,117,12,0,0,0,103,101,116,95, - 102,105,108,101,110,97,109,101,117,8,0,0,0,103,101,116, - 95,100,97,116,97,40,1,0,0,0,117,10,0,0,0,95, - 95,108,111,99,97,108,115,95,95,40,0,0,0,0,40,1, - 0,0,0,117,9,0,0,0,95,95,99,108,97,115,115,95, - 95,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,10,0,0,0,70,105,108,101,76,111,97,100, - 101,114,238,3,0,0,115,10,0,0,0,16,3,6,2,12, - 6,24,7,18,5,117,10,0,0,0,70,105,108,101,76,111, - 97,100,101,114,99,1,0,0,0,0,0,0,0,1,0,0, - 0,4,0,0,0,66,0,0,0,115,68,0,0,0,124,0, - 0,69,101,0,0,90,1,0,100,0,0,90,2,0,100,1, - 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, - 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,100, - 7,0,100,8,0,100,9,0,132,0,1,90,6,0,100,10, - 0,83,40,11,0,0,0,117,16,0,0,0,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,117,62,0,0, - 0,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,83,111,117,114, - 99,101,76,111,97,100,101,114,32,117,115,105,110,103,32,116, - 104,101,32,102,105,108,101,32,115,121,115,116,101,109,46,99, - 2,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,39,0,0,0,116,0,0,106,1,0,124, - 1,0,131,1,0,125,2,0,105,2,0,124,2,0,106,2, - 0,100,1,0,54,124,2,0,106,3,0,100,2,0,54,83, - 40,3,0,0,0,117,33,0,0,0,82,101,116,117,114,110, - 32,116,104,101,32,109,101,116,97,100,97,116,97,32,102,111, - 114,32,116,104,101,32,112,97,116,104,46,117,5,0,0,0, - 109,116,105,109,101,117,4,0,0,0,115,105,122,101,40,4, - 0,0,0,117,3,0,0,0,95,111,115,117,4,0,0,0, - 115,116,97,116,117,8,0,0,0,115,116,95,109,116,105,109, - 101,117,7,0,0,0,115,116,95,115,105,122,101,40,3,0, - 0,0,117,4,0,0,0,115,101,108,102,117,4,0,0,0, - 112,97,116,104,117,2,0,0,0,115,116,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,10,0,0,0,112,97,116,104, - 95,115,116,97,116,115,15,4,0,0,115,4,0,0,0,0, - 2,15,1,117,27,0,0,0,83,111,117,114,99,101,70,105, - 108,101,76,111,97,100,101,114,46,112,97,116,104,95,115,116, - 97,116,115,99,4,0,0,0,0,0,0,0,5,0,0,0, - 13,0,0,0,67,0,0,0,115,81,0,0,0,121,22,0, - 116,0,0,106,1,0,124,1,0,131,1,0,106,2,0,125, - 4,0,87,110,24,0,4,116,3,0,107,10,0,114,48,0, - 1,1,1,100,1,0,125,4,0,89,110,1,0,88,124,4, - 0,100,2,0,79,125,4,0,124,0,0,106,4,0,124,2, - 0,124,3,0,100,3,0,124,4,0,131,2,1,83,40,4, - 0,0,0,78,105,182,1,0,0,105,128,0,0,0,117,5, - 0,0,0,95,109,111,100,101,40,5,0,0,0,117,3,0, - 0,0,95,111,115,117,4,0,0,0,115,116,97,116,117,7, - 0,0,0,115,116,95,109,111,100,101,117,7,0,0,0,79, - 83,69,114,114,111,114,117,8,0,0,0,115,101,116,95,100, - 97,116,97,40,5,0,0,0,117,4,0,0,0,115,101,108, - 102,117,11,0,0,0,115,111,117,114,99,101,95,112,97,116, - 104,117,13,0,0,0,98,121,116,101,99,111,100,101,95,112, - 97,116,104,117,4,0,0,0,100,97,116,97,117,4,0,0, - 0,109,111,100,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,15,0,0,0,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,20,4,0,0,115,12,0,0,0,0,2, - 3,1,22,1,13,1,11,3,10,1,117,32,0,0,0,83, - 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, - 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,117, - 5,0,0,0,95,109,111,100,101,105,182,1,0,0,99,3, - 0,0,0,1,0,0,0,9,0,0,0,18,0,0,0,67, - 0,0,0,115,53,1,0,0,116,0,0,124,1,0,131,1, - 0,92,2,0,125,4,0,125,5,0,103,0,0,125,6,0, - 120,54,0,124,4,0,114,80,0,116,1,0,124,4,0,131, - 1,0,12,114,80,0,116,0,0,124,4,0,131,1,0,92, - 2,0,125,4,0,125,7,0,124,6,0,106,2,0,124,7, - 0,131,1,0,1,113,27,0,87,120,132,0,116,3,0,124, - 6,0,131,1,0,68,93,118,0,125,7,0,116,4,0,124, - 4,0,124,7,0,131,2,0,125,4,0,121,17,0,116,5, - 0,106,6,0,124,4,0,131,1,0,1,87,113,94,0,4, - 116,7,0,107,10,0,114,155,0,1,1,1,119,94,0,89, - 113,94,0,4,116,8,0,107,10,0,114,211,0,1,125,8, - 0,1,122,25,0,116,9,0,100,1,0,124,4,0,124,8, - 0,131,3,0,1,100,2,0,83,87,89,100,2,0,100,2, - 0,125,8,0,126,8,0,88,113,94,0,88,113,94,0,87, - 121,33,0,116,10,0,124,1,0,124,2,0,124,3,0,131, - 3,0,1,116,9,0,100,3,0,124,1,0,131,2,0,1, - 87,110,53,0,4,116,8,0,107,10,0,114,48,1,1,125, - 8,0,1,122,21,0,116,9,0,100,1,0,124,1,0,124, - 8,0,131,3,0,1,87,89,100,2,0,100,2,0,125,8, - 0,126,8,0,88,110,1,0,88,100,2,0,83,40,4,0, - 0,0,117,27,0,0,0,87,114,105,116,101,32,98,121,116, - 101,115,32,100,97,116,97,32,116,111,32,97,32,102,105,108, - 101,46,117,27,0,0,0,99,111,117,108,100,32,110,111,116, - 32,99,114,101,97,116,101,32,123,33,114,125,58,32,123,33, - 114,125,78,117,12,0,0,0,99,114,101,97,116,101,100,32, - 123,33,114,125,40,11,0,0,0,117,11,0,0,0,95,112, - 97,116,104,95,115,112,108,105,116,117,11,0,0,0,95,112, - 97,116,104,95,105,115,100,105,114,117,6,0,0,0,97,112, - 112,101,110,100,117,8,0,0,0,114,101,118,101,114,115,101, - 100,117,10,0,0,0,95,112,97,116,104,95,106,111,105,110, - 117,3,0,0,0,95,111,115,117,5,0,0,0,109,107,100, - 105,114,117,15,0,0,0,70,105,108,101,69,120,105,115,116, - 115,69,114,114,111,114,117,7,0,0,0,79,83,69,114,114, - 111,114,117,16,0,0,0,95,118,101,114,98,111,115,101,95, - 109,101,115,115,97,103,101,117,13,0,0,0,95,119,114,105, - 116,101,95,97,116,111,109,105,99,40,9,0,0,0,117,4, - 0,0,0,115,101,108,102,117,4,0,0,0,112,97,116,104, - 117,4,0,0,0,100,97,116,97,117,5,0,0,0,95,109, - 111,100,101,117,6,0,0,0,112,97,114,101,110,116,117,8, - 0,0,0,102,105,108,101,110,97,109,101,117,10,0,0,0, - 112,97,116,104,95,112,97,114,116,115,117,4,0,0,0,112, - 97,114,116,117,3,0,0,0,101,120,99,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,115,101,116,95, - 100,97,116,97,31,4,0,0,115,38,0,0,0,0,2,18, - 1,6,2,22,1,18,1,17,2,19,1,15,1,3,1,17, - 1,13,2,7,1,18,3,16,1,27,1,3,1,16,1,17, - 1,18,2,117,25,0,0,0,83,111,117,114,99,101,70,105, - 108,101,76,111,97,100,101,114,46,115,101,116,95,100,97,116, - 97,78,40,7,0,0,0,117,8,0,0,0,95,95,110,97, - 109,101,95,95,117,10,0,0,0,95,95,109,111,100,117,108, - 101,95,95,117,12,0,0,0,95,95,113,117,97,108,110,97, - 109,101,95,95,117,7,0,0,0,95,95,100,111,99,95,95, - 117,10,0,0,0,112,97,116,104,95,115,116,97,116,115,117, - 15,0,0,0,95,99,97,99,104,101,95,98,121,116,101,99, - 111,100,101,117,8,0,0,0,115,101,116,95,100,97,116,97, - 40,1,0,0,0,117,10,0,0,0,95,95,108,111,99,97, - 108,115,95,95,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,16,0,0,0,83,111,117,114,99,101,70,105,108,101,76, - 111,97,100,101,114,11,4,0,0,115,8,0,0,0,16,2, - 6,2,12,5,12,11,117,16,0,0,0,83,111,117,114,99, - 101,70,105,108,101,76,111,97,100,101,114,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,66,0,0,0, - 115,62,0,0,0,124,0,0,69,101,0,0,90,1,0,100, + 97,32,102,105,108,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,41,3,218,5,115,117,112,101,114,114,45,1,0,0,114, + 4,1,0,0,41,2,114,71,0,0,0,114,158,0,0,0, + 41,1,114,224,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,4,1,0,0,44,6,0,0,115,2,0,0,0,0, + 10,122,22,70,105,108,101,76,111,97,100,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,1,0,0,0,67,0,0,0,115,7, + 0,0,0,124,0,0,106,0,0,83,41,1,122,58,82,101, + 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, + 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, + 32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101, + 32,102,105,110,100,101,114,46,41,1,114,35,0,0,0,41, + 2,114,71,0,0,0,114,158,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,238,0,0,0,56, + 6,0,0,115,2,0,0,0,0,3,122,23,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, + 97,109,101,99,2,0,0,0,0,0,0,0,3,0,0,0, + 8,0,0,0,67,0,0,0,115,41,0,0,0,116,0,0, + 106,1,0,124,1,0,100,1,0,131,2,0,143,17,0,125, + 2,0,124,2,0,106,2,0,131,0,0,83,87,100,2,0, + 81,88,100,2,0,83,41,3,122,39,82,101,116,117,114,110, + 32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112, + 97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115, + 46,218,1,114,78,41,3,114,49,0,0,0,114,50,0,0, + 0,90,4,114,101,97,100,41,3,114,71,0,0,0,114,35, + 0,0,0,114,54,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,36,1,0,0,61,6,0,0, + 115,4,0,0,0,0,2,21,1,122,19,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,100,97,116,97,41,11, + 114,57,0,0,0,114,56,0,0,0,114,58,0,0,0,114, + 59,0,0,0,114,72,0,0,0,114,229,0,0,0,114,47, + 1,0,0,114,156,0,0,0,114,4,1,0,0,114,238,0, + 0,0,114,36,1,0,0,114,4,0,0,0,114,4,0,0, + 0,41,1,114,224,0,0,0,114,5,0,0,0,114,45,1, + 0,0,26,6,0,0,115,14,0,0,0,12,3,6,2,12, + 6,12,4,12,3,24,12,18,5,114,45,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, + 0,0,0,115,64,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, + 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, + 5,0,100,6,0,100,7,0,100,8,0,100,9,0,132,0, + 1,90,6,0,100,10,0,83,41,11,218,16,83,111,117,114, + 99,101,70,105,108,101,76,111,97,100,101,114,122,62,67,111, + 110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,32,111,102,32,83,111,117,114,99,101,76, + 111,97,100,101,114,32,117,115,105,110,103,32,116,104,101,32, + 102,105,108,101,32,115,121,115,116,101,109,46,99,2,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,36,0,0,0,116,0,0,124,1,0,131,1,0,125, + 2,0,105,2,0,124,2,0,106,1,0,100,1,0,54,124, + 2,0,106,2,0,100,2,0,54,83,41,3,122,33,82,101, + 116,117,114,110,32,116,104,101,32,109,101,116,97,100,97,116, + 97,32,102,111,114,32,116,104,101,32,112,97,116,104,46,114, + 183,0,0,0,114,184,0,0,0,41,3,114,39,0,0,0, + 218,8,115,116,95,109,116,105,109,101,90,7,115,116,95,115, + 105,122,101,41,3,114,71,0,0,0,114,35,0,0,0,114, + 43,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,33,1,0,0,71,6,0,0,115,4,0,0, + 0,0,2,12,1,122,27,83,111,117,114,99,101,70,105,108, + 101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,97, + 116,115,99,4,0,0,0,0,0,0,0,5,0,0,0,5, + 0,0,0,67,0,0,0,115,34,0,0,0,116,0,0,124, + 1,0,131,1,0,125,4,0,124,0,0,106,1,0,124,2, + 0,124,3,0,100,1,0,124,4,0,131,2,1,83,41,2, + 78,218,5,95,109,111,100,101,41,2,114,144,0,0,0,114, + 34,1,0,0,41,5,114,71,0,0,0,114,141,0,0,0, + 114,140,0,0,0,114,53,0,0,0,114,42,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,35, + 1,0,0,76,6,0,0,115,4,0,0,0,0,2,12,1, + 122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,114,52,1,0,0,105,182,1,0,0,99,3,0,0, + 0,1,0,0,0,9,0,0,0,18,0,0,0,67,0,0, + 0,115,53,1,0,0,116,0,0,124,1,0,131,1,0,92, + 2,0,125,4,0,125,5,0,103,0,0,125,6,0,120,54, + 0,124,4,0,114,80,0,116,1,0,124,4,0,131,1,0, + 12,114,80,0,116,0,0,124,4,0,131,1,0,92,2,0, + 125,4,0,125,7,0,124,6,0,106,2,0,124,7,0,131, + 1,0,1,113,27,0,87,120,132,0,116,3,0,124,6,0, + 131,1,0,68,93,118,0,125,7,0,116,4,0,124,4,0, + 124,7,0,131,2,0,125,4,0,121,17,0,116,5,0,106, + 6,0,124,4,0,131,1,0,1,87,113,94,0,4,116,7, + 0,107,10,0,114,155,0,1,1,1,119,94,0,89,113,94, + 0,4,116,8,0,107,10,0,114,211,0,1,125,8,0,1, + 122,25,0,116,9,0,100,1,0,124,4,0,124,8,0,131, + 3,0,1,100,2,0,83,87,89,100,2,0,100,2,0,125, + 8,0,126,8,0,88,113,94,0,88,113,94,0,87,121,33, + 0,116,10,0,124,1,0,124,2,0,124,3,0,131,3,0, + 1,116,9,0,100,3,0,124,1,0,131,2,0,1,87,110, + 53,0,4,116,8,0,107,10,0,114,48,1,1,125,8,0, + 1,122,21,0,116,9,0,100,1,0,124,1,0,124,8,0, + 131,3,0,1,87,89,100,2,0,100,2,0,125,8,0,126, + 8,0,88,110,1,0,88,100,2,0,83,41,4,122,27,87, + 114,105,116,101,32,98,121,116,101,115,32,100,97,116,97,32, + 116,111,32,97,32,102,105,108,101,46,122,27,99,111,117,108, + 100,32,110,111,116,32,99,114,101,97,116,101,32,123,33,114, + 125,58,32,123,33,114,125,78,122,12,99,114,101,97,116,101, + 100,32,123,33,114,125,41,11,114,38,0,0,0,114,46,0, + 0,0,114,223,0,0,0,114,33,0,0,0,114,28,0,0, + 0,114,3,0,0,0,90,5,109,107,100,105,114,218,15,70, + 105,108,101,69,120,105,115,116,115,69,114,114,111,114,114,40, + 0,0,0,114,152,0,0,0,114,55,0,0,0,41,9,114, + 71,0,0,0,114,35,0,0,0,114,53,0,0,0,114,52, + 1,0,0,114,233,0,0,0,114,131,0,0,0,114,27,0, + 0,0,114,23,0,0,0,114,37,1,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,34,1,0,0, + 81,6,0,0,115,38,0,0,0,0,2,18,1,6,2,22, + 1,18,1,17,2,19,1,15,1,3,1,17,1,13,2,7, + 1,18,3,16,1,27,1,3,1,16,1,17,1,18,2,122, + 25,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, + 114,46,115,101,116,95,100,97,116,97,78,41,7,114,57,0, + 0,0,114,56,0,0,0,114,58,0,0,0,114,59,0,0, + 0,114,33,1,0,0,114,35,1,0,0,114,34,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,50,1,0,0,67,6,0,0,115,8,0, + 0,0,12,2,6,2,12,5,12,5,114,50,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 64,0,0,0,115,46,0,0,0,101,0,0,90,1,0,100, 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, - 90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100, - 8,0,83,40,9,0,0,0,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,45,0,0,0,76,111,97,100,101,114,32,119,104,105, - 99,104,32,104,97,110,100,108,101,115,32,115,111,117,114,99, - 101,108,101,115,115,32,102,105,108,101,32,105,109,112,111,114, - 116,115,46,99,2,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,19,0,0,0,124,0,0, - 106,0,0,124,1,0,100,1,0,100,2,0,131,1,1,83, - 40,3,0,0,0,78,117,10,0,0,0,115,111,117,114,99, - 101,108,101,115,115,84,40,2,0,0,0,117,12,0,0,0, - 95,108,111,97,100,95,109,111,100,117,108,101,117,4,0,0, - 0,84,114,117,101,40,2,0,0,0,117,4,0,0,0,115, - 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,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,11,0,0, - 0,108,111,97,100,95,109,111,100,117,108,101,64,4,0,0, - 115,2,0,0,0,0,1,117,32,0,0,0,83,111,117,114, - 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, - 46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,0, - 0,0,0,0,0,6,0,0,0,6,0,0,0,67,0,0, - 0,115,138,0,0,0,124,0,0,106,0,0,124,1,0,131, - 1,0,125,2,0,124,0,0,106,1,0,124,2,0,131,1, - 0,125,3,0,124,0,0,106,2,0,124,1,0,124,3,0, - 124,2,0,100,0,0,131,4,0,125,4,0,116,4,0,106, - 5,0,124,4,0,131,1,0,125,5,0,116,6,0,124,5, - 0,116,7,0,131,2,0,114,101,0,116,8,0,100,1,0, - 124,2,0,131,2,0,1,124,5,0,83,116,9,0,100,2, - 0,106,10,0,124,2,0,131,1,0,100,3,0,124,1,0, - 100,4,0,124,2,0,131,1,2,130,1,0,100,0,0,83, - 40,5,0,0,0,78,117,21,0,0,0,99,111,100,101,32, - 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, - 117,21,0,0,0,78,111,110,45,99,111,100,101,32,111,98, - 106,101,99,116,32,105,110,32,123,125,117,4,0,0,0,110, - 97,109,101,117,4,0,0,0,112,97,116,104,40,11,0,0, - 0,117,12,0,0,0,103,101,116,95,102,105,108,101,110,97, - 109,101,117,8,0,0,0,103,101,116,95,100,97,116,97,117, - 20,0,0,0,95,98,121,116,101,115,95,102,114,111,109,95, - 98,121,116,101,99,111,100,101,117,4,0,0,0,78,111,110, - 101,117,7,0,0,0,109,97,114,115,104,97,108,117,5,0, - 0,0,108,111,97,100,115,117,10,0,0,0,105,115,105,110, - 115,116,97,110,99,101,117,10,0,0,0,95,99,111,100,101, - 95,116,121,112,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,73, - 109,112,111,114,116,69,114,114,111,114,117,6,0,0,0,102, - 111,114,109,97,116,40,6,0,0,0,117,4,0,0,0,115, - 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,101, - 117,4,0,0,0,112,97,116,104,117,4,0,0,0,100,97, - 116,97,117,10,0,0,0,98,121,116,101,115,95,100,97,116, - 97,117,5,0,0,0,102,111,117,110,100,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,103,101,116,95, - 99,111,100,101,67,4,0,0,115,18,0,0,0,0,1,15, - 1,15,1,24,1,15,1,15,1,13,1,4,2,18,1,117, - 29,0,0,0,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,40, - 2,0,0,0,117,39,0,0,0,82,101,116,117,114,110,32, - 78,111,110,101,32,97,115,32,116,104,101,114,101,32,105,115, - 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, - 78,40,1,0,0,0,117,4,0,0,0,78,111,110,101,40, - 2,0,0,0,117,4,0,0,0,115,101,108,102,117,8,0, - 0,0,102,117,108,108,110,97,109,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,10,0,0,0,103,101,116,95,115, - 111,117,114,99,101,79,4,0,0,115,2,0,0,0,0,2, - 117,31,0,0,0,83,111,117,114,99,101,108,101,115,115,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, - 117,114,99,101,78,40,7,0,0,0,117,8,0,0,0,95, - 95,110,97,109,101,95,95,117,10,0,0,0,95,95,109,111, - 100,117,108,101,95,95,117,12,0,0,0,95,95,113,117,97, - 108,110,97,109,101,95,95,117,7,0,0,0,95,95,100,111, - 99,95,95,117,11,0,0,0,108,111,97,100,95,109,111,100, - 117,108,101,117,8,0,0,0,103,101,116,95,99,111,100,101, - 117,10,0,0,0,103,101,116,95,115,111,117,114,99,101,40, - 1,0,0,0,117,10,0,0,0,95,95,108,111,99,97,108, - 115,95,95,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, - 20,0,0,0,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,60,4,0,0,115,8,0,0, - 0,16,2,6,2,12,3,12,12,117,20,0,0,0,83,111, + 90,5,0,100,6,0,83,41,7,218,20,83,111,117,114,99, + 101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,122, + 45,76,111,97,100,101,114,32,119,104,105,99,104,32,104,97, + 110,100,108,101,115,32,115,111,117,114,99,101,108,101,115,115, + 32,102,105,108,101,32,105,109,112,111,114,116,115,46,99,2, + 0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,67, + 0,0,0,115,76,0,0,0,124,0,0,106,0,0,124,1, + 0,131,1,0,125,2,0,124,0,0,106,1,0,124,2,0, + 131,1,0,125,3,0,116,2,0,124,3,0,100,1,0,124, + 1,0,100,2,0,124,2,0,131,1,2,125,4,0,116,3, + 0,124,4,0,100,1,0,124,1,0,100,3,0,124,2,0, + 131,1,2,83,41,4,78,114,67,0,0,0,114,35,0,0, + 0,114,140,0,0,0,41,4,114,238,0,0,0,114,36,1, + 0,0,114,190,0,0,0,114,195,0,0,0,41,5,114,71, + 0,0,0,114,158,0,0,0,114,35,0,0,0,114,53,0, + 0,0,114,44,1,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,12,1,0,0,114,6,0,0,115, + 8,0,0,0,0,1,15,1,15,1,24,1,122,29,83,111, 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, - 101,114,99,1,0,0,0,0,0,0,0,1,0,0,0,5, - 0,0,0,66,0,0,0,115,104,0,0,0,124,0,0,69, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, - 3,0,100,2,0,100,3,0,132,0,0,90,4,0,101,5, - 0,101,6,0,101,7,0,100,4,0,100,5,0,132,0,0, - 131,1,0,131,1,0,131,1,0,90,8,0,100,6,0,100, - 7,0,132,0,0,90,9,0,100,8,0,100,9,0,132,0, - 0,90,10,0,100,10,0,100,11,0,132,0,0,90,11,0, - 100,12,0,83,40,13,0,0,0,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,93,0,0,0,76,111,97,100,101,114,32,102,111,114, - 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,115,46,10,10,32,32,32,32,84,104,101,32,99,111,110, - 115,116,114,117,99,116,111,114,32,105,115,32,100,101,115,105, - 103,110,101,100,32,116,111,32,119,111,114,107,32,119,105,116, - 104,32,70,105,108,101,70,105,110,100,101,114,46,10,10,32, - 32,32,32,99,3,0,0,0,0,0,0,0,3,0,0,0, - 2,0,0,0,67,0,0,0,115,22,0,0,0,124,1,0, - 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,100, - 0,0,83,40,1,0,0,0,78,40,2,0,0,0,117,4, - 0,0,0,110,97,109,101,117,4,0,0,0,112,97,116,104, - 40,3,0,0,0,117,4,0,0,0,115,101,108,102,117,4, - 0,0,0,110,97,109,101,117,4,0,0,0,112,97,116,104, - 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,95,105,110,105,116,95,95,96,4,0,0,115,4,0, - 0,0,0,1,9,1,117,28,0,0,0,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, - 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0, - 4,0,0,0,10,0,0,0,67,0,0,0,115,175,0,0, - 0,124,1,0,116,0,0,106,1,0,107,6,0,125,2,0, - 121,107,0,116,2,0,116,3,0,106,4,0,124,1,0,124, - 0,0,106,5,0,131,3,0,125,3,0,116,6,0,100,1, - 0,124,0,0,106,5,0,131,2,0,1,124,0,0,106,7, - 0,124,1,0,131,1,0,114,117,0,116,8,0,124,3,0, - 100,2,0,131,2,0,12,114,117,0,116,9,0,124,0,0, - 106,5,0,131,1,0,100,3,0,25,103,1,0,124,3,0, - 95,10,0,110,0,0,124,3,0,83,87,110,46,0,1,1, - 1,124,2,0,12,114,163,0,124,1,0,116,0,0,106,1, - 0,107,6,0,114,163,0,116,0,0,106,1,0,124,1,0, - 61,110,0,0,130,0,0,89,110,1,0,88,100,4,0,83, - 40,5,0,0,0,117,25,0,0,0,76,111,97,100,32,97, + 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,0,83,41,2,122,39,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,116,104,101,114, + 101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,99, + 111,100,101,46,78,114,4,0,0,0,41,2,114,71,0,0, + 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,13,1,0,0,120,6,0,0,115,2, + 0,0,0,0,2,122,31,83,111,117,114,99,101,108,101,115, + 115,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 115,111,117,114,99,101,78,41,6,114,57,0,0,0,114,56, + 0,0,0,114,58,0,0,0,114,59,0,0,0,114,12,1, + 0,0,114,13,1,0,0,114,4,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,54,1,0,0, + 110,6,0,0,115,6,0,0,0,12,2,6,2,12,6,114, + 54,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,64,0,0,0,115,130,0,0,0,101,0, + 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, + 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, + 5,0,132,0,0,90,5,0,100,6,0,100,7,0,132,0, + 0,90,6,0,101,7,0,100,8,0,100,9,0,132,0,0, + 131,1,0,90,8,0,100,10,0,100,11,0,132,0,0,90, + 9,0,100,12,0,100,13,0,132,0,0,90,10,0,100,14, + 0,100,15,0,132,0,0,90,11,0,101,7,0,100,16,0, + 100,17,0,132,0,0,131,1,0,90,12,0,100,18,0,83, + 41,19,218,19,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,122,93,76,111,97,100,101,114,32, + 102,111,114,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,115,46,10,10,32,32,32,32,84,104,101,32, + 99,111,110,115,116,114,117,99,116,111,114,32,105,115,32,100, + 101,115,105,103,110,101,100,32,116,111,32,119,111,114,107,32, + 119,105,116,104,32,70,105,108,101,70,105,110,100,101,114,46, + 10,10,32,32,32,32,99,3,0,0,0,0,0,0,0,3, + 0,0,0,2,0,0,0,67,0,0,0,115,22,0,0,0, + 124,1,0,124,0,0,95,0,0,124,2,0,124,0,0,95, + 1,0,100,0,0,83,41,1,78,41,2,114,67,0,0,0, + 114,35,0,0,0,41,3,114,71,0,0,0,114,67,0,0, + 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,72,0,0,0,137,6,0,0,115,4, + 0,0,0,0,1,9,1,122,28,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,105, + 110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,67,0,0,0,115,34,0,0,0,124, + 0,0,106,0,0,124,1,0,106,0,0,107,2,0,111,33, + 0,124,0,0,106,1,0,124,1,0,106,1,0,107,2,0, + 83,41,1,78,41,2,114,224,0,0,0,114,63,0,0,0, + 41,2,114,71,0,0,0,114,227,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,229,0,0,0, + 141,6,0,0,115,4,0,0,0,0,1,18,1,122,26,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,46,95,95,101,113,95,95,99,1,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,26, + 0,0,0,116,0,0,124,0,0,106,1,0,131,1,0,116, + 0,0,124,0,0,106,2,0,131,1,0,65,83,41,1,78, + 41,3,114,46,1,0,0,114,67,0,0,0,114,35,0,0, + 0,41,1,114,71,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,47,1,0,0,145,6,0,0, + 115,2,0,0,0,0,1,122,28,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,104, + 97,115,104,95,95,99,2,0,0,0,0,0,0,0,4,0, + 0,0,11,0,0,0,67,0,0,0,115,183,0,0,0,116, + 0,0,124,1,0,131,1,0,143,29,0,1,116,1,0,116, + 2,0,106,3,0,124,1,0,124,0,0,106,4,0,131,3, + 0,125,2,0,87,100,1,0,81,88,116,5,0,100,2,0, + 124,0,0,106,4,0,131,2,0,1,124,0,0,106,6,0, + 124,1,0,131,1,0,125,3,0,124,3,0,114,124,0,116, + 7,0,124,2,0,100,3,0,131,2,0,12,114,124,0,116, + 8,0,124,0,0,106,4,0,131,1,0,100,4,0,25,103, + 1,0,124,2,0,95,9,0,110,0,0,124,0,0,124,2, + 0,95,10,0,124,2,0,106,11,0,124,2,0,95,12,0, + 124,3,0,115,179,0,124,2,0,106,12,0,106,13,0,100, + 5,0,131,1,0,100,4,0,25,124,2,0,95,12,0,110, + 0,0,124,2,0,83,41,6,122,25,76,111,97,100,32,97, 110,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,46,117,33,0,0,0,101,120,116,101,110,115,105,111, - 110,32,109,111,100,117,108,101,32,108,111,97,100,101,100,32, - 102,114,111,109,32,123,33,114,125,117,8,0,0,0,95,95, - 112,97,116,104,95,95,105,0,0,0,0,78,40,11,0,0, - 0,117,3,0,0,0,115,121,115,117,7,0,0,0,109,111, - 100,117,108,101,115,117,25,0,0,0,95,99,97,108,108,95, - 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, - 118,101,100,117,4,0,0,0,95,105,109,112,117,12,0,0, - 0,108,111,97,100,95,100,121,110,97,109,105,99,117,4,0, - 0,0,112,97,116,104,117,16,0,0,0,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,117,10,0,0,0, - 105,115,95,112,97,99,107,97,103,101,117,7,0,0,0,104, - 97,115,97,116,116,114,117,11,0,0,0,95,112,97,116,104, - 95,115,112,108,105,116,117,8,0,0,0,95,95,112,97,116, - 104,95,95,40,4,0,0,0,117,4,0,0,0,115,101,108, - 102,117,8,0,0,0,102,117,108,108,110,97,109,101,117,9, - 0,0,0,105,115,95,114,101,108,111,97,100,117,6,0,0, - 0,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,11,0,0,0,108,111,97,100,95,109,111,100, - 117,108,101,100,4,0,0,115,24,0,0,0,0,5,15,1, - 3,1,9,1,15,1,16,1,31,1,28,1,8,1,3,1, - 22,1,13,1,117,31,0,0,0,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,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,4,0,0,0,3,0,0,0,115,48,0, - 0,0,116,0,0,124,0,0,106,1,0,131,1,0,100,1, - 0,25,137,0,0,116,2,0,135,0,0,102,1,0,100,2, - 0,100,3,0,134,0,0,116,3,0,68,131,1,0,131,1, - 0,83,40,4,0,0,0,117,49,0,0,0,82,101,116,117, - 114,110,32,84,114,117,101,32,105,102,32,116,104,101,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, - 105,115,32,97,32,112,97,99,107,97,103,101,46,105,1,0, - 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,51,0,0,0,115,31,0,0,0,124,0,0,93, - 21,0,125,1,0,136,0,0,100,0,0,124,1,0,23,107, - 2,0,86,1,113,3,0,100,1,0,83,40,2,0,0,0, - 117,8,0,0,0,95,95,105,110,105,116,95,95,78,40,0, - 0,0,0,40,2,0,0,0,117,2,0,0,0,46,48,117, - 6,0,0,0,115,117,102,102,105,120,40,1,0,0,0,117, - 9,0,0,0,102,105,108,101,95,110,97,109,101,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,9,0,0,0,60,103,101,110,101,120,112, - 114,62,121,4,0,0,115,2,0,0,0,6,1,117,49,0, - 0,0,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, - 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, - 112,114,62,40,4,0,0,0,117,11,0,0,0,95,112,97, - 116,104,95,115,112,108,105,116,117,4,0,0,0,112,97,116, - 104,117,3,0,0,0,97,110,121,117,18,0,0,0,69,88, - 84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,83, - 40,2,0,0,0,117,4,0,0,0,115,101,108,102,117,8, - 0,0,0,102,117,108,108,110,97,109,101,40,0,0,0,0, - 40,1,0,0,0,117,9,0,0,0,102,105,108,101,95,110, - 97,109,101,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,10,0,0,0,105,115,95,112,97,99, - 107,97,103,101,118,4,0,0,115,6,0,0,0,0,2,19, - 1,18,1,117,30,0,0,0,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, - 97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, - 100,1,0,83,40,2,0,0,0,117,63,0,0,0,82,101, + 108,101,46,78,122,33,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,32,108,111,97,100,101,100,32,102,114, + 111,109,32,123,33,114,125,114,246,0,0,0,114,84,0,0, + 0,114,116,0,0,0,41,14,114,69,0,0,0,114,114,0, + 0,0,114,106,0,0,0,90,12,108,111,97,100,95,100,121, + 110,97,109,105,99,114,35,0,0,0,114,152,0,0,0,114, + 219,0,0,0,114,60,0,0,0,114,38,0,0,0,114,246, + 0,0,0,114,204,0,0,0,114,57,0,0,0,114,250,0, + 0,0,114,32,0,0,0,41,4,114,71,0,0,0,114,158, + 0,0,0,114,179,0,0,0,114,219,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,4,1,0, + 0,148,6,0,0,115,24,0,0,0,0,5,13,1,9,1, + 21,1,16,1,15,1,22,1,28,1,9,1,12,1,6,1, + 28,1,122,31,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,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, + 4,0,0,0,3,0,0,0,115,48,0,0,0,116,0,0, + 124,0,0,106,1,0,131,1,0,100,1,0,25,137,0,0, + 116,2,0,135,0,0,102,1,0,100,2,0,100,3,0,134, + 0,0,116,3,0,68,131,1,0,131,1,0,83,41,4,122, + 49,82,101,116,117,114,110,32,84,114,117,101,32,105,102,32, + 116,104,101,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103, + 101,46,114,29,0,0,0,99,1,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,51,0,0,0,115,31,0,0, + 0,124,0,0,93,21,0,125,1,0,136,0,0,100,0,0, + 124,1,0,23,107,2,0,86,1,113,3,0,100,1,0,83, + 41,2,114,72,0,0,0,78,114,4,0,0,0,41,2,114, + 22,0,0,0,218,6,115,117,102,102,105,120,41,1,218,9, + 102,105,108,101,95,110,97,109,101,114,4,0,0,0,114,5, + 0,0,0,114,77,0,0,0,169,6,0,0,115,2,0,0, + 0,6,1,122,49,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, + 97,103,101,46,60,108,111,99,97,108,115,62,46,60,103,101, + 110,101,120,112,114,62,41,4,114,38,0,0,0,114,35,0, + 0,0,114,78,0,0,0,218,18,69,88,84,69,78,83,73, + 79,78,95,83,85,70,70,73,88,69,83,41,2,114,71,0, + 0,0,114,158,0,0,0,114,4,0,0,0,41,1,114,57, + 1,0,0,114,5,0,0,0,114,219,0,0,0,166,6,0, + 0,115,6,0,0,0,0,2,19,1,18,1,122,30,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,1,0,83,41,2,122,63,82,101, 116,117,114,110,32,78,111,110,101,32,97,115,32,97,110,32, 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, 32,99,97,110,110,111,116,32,99,114,101,97,116,101,32,97, - 32,99,111,100,101,32,111,98,106,101,99,116,46,78,40,1, - 0,0,0,117,4,0,0,0,78,111,110,101,40,2,0,0, - 0,117,4,0,0,0,115,101,108,102,117,8,0,0,0,102, - 117,108,108,110,97,109,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,8,0,0,0,103,101,116,95,99,111,100,101, - 124,4,0,0,115,2,0,0,0,0,2,117,28,0,0,0, + 32,99,111,100,101,32,111,98,106,101,99,116,46,78,114,4, + 0,0,0,41,2,114,71,0,0,0,114,158,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,12, + 1,0,0,172,6,0,0,115,2,0,0,0,0,2,122,28, 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, 100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,115,4,0,0,0,100,1,0,83,40,2,0,0,0,117, - 53,0,0,0,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,115,32,104,97,118,101,32,110,111,32,115,111,117, - 114,99,101,32,99,111,100,101,46,78,40,1,0,0,0,117, - 4,0,0,0,78,111,110,101,40,2,0,0,0,117,4,0, - 0,0,115,101,108,102,117,8,0,0,0,102,117,108,108,110, - 97,109,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, - 10,0,0,0,103,101,116,95,115,111,117,114,99,101,128,4, - 0,0,115,2,0,0,0,0,2,117,30,0,0,0,69,120, - 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,78,40,12,0, - 0,0,117,8,0,0,0,95,95,110,97,109,101,95,95,117, - 10,0,0,0,95,95,109,111,100,117,108,101,95,95,117,12, - 0,0,0,95,95,113,117,97,108,110,97,109,101,95,95,117, - 7,0,0,0,95,95,100,111,99,95,95,117,8,0,0,0, - 95,95,105,110,105,116,95,95,117,11,0,0,0,95,99,104, - 101,99,107,95,110,97,109,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,11,0,0,0,108,111,97,100, - 95,109,111,100,117,108,101,117,10,0,0,0,105,115,95,112, - 97,99,107,97,103,101,117,8,0,0,0,103,101,116,95,99, - 111,100,101,117,10,0,0,0,103,101,116,95,115,111,117,114, - 99,101,40,1,0,0,0,117,10,0,0,0,95,95,108,111, - 99,97,108,115,95,95,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,19,0,0,0,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,88,4,0,0,115,16, - 0,0,0,16,6,6,2,12,4,3,1,3,1,24,16,12, - 6,12,4,117,19,0,0,0,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,66,0,0,0, - 115,134,0,0,0,124,0,0,69,101,0,0,90,1,0,100, - 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, - 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, - 90,5,0,100,6,0,100,7,0,132,0,0,90,6,0,100, - 8,0,100,9,0,132,0,0,90,7,0,100,10,0,100,11, - 0,132,0,0,90,8,0,100,12,0,100,13,0,132,0,0, - 90,9,0,100,14,0,100,15,0,132,0,0,90,10,0,100, - 16,0,100,17,0,132,0,0,90,11,0,100,18,0,100,19, - 0,132,0,0,90,12,0,100,20,0,83,40,21,0,0,0, - 117,14,0,0,0,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,117,38,1,0,0,82,101,112,114,101,115,101,110, - 116,115,32,97,32,110,97,109,101,115,112,97,99,101,32,112, - 97,99,107,97,103,101,39,115,32,112,97,116,104,46,32,32, - 73,116,32,117,115,101,115,32,116,104,101,32,109,111,100,117, - 108,101,32,110,97,109,101,10,32,32,32,32,116,111,32,102, - 105,110,100,32,105,116,115,32,112,97,114,101,110,116,32,109, - 111,100,117,108,101,44,32,97,110,100,32,102,114,111,109,32, - 116,104,101,114,101,32,105,116,32,108,111,111,107,115,32,117, - 112,32,116,104,101,32,112,97,114,101,110,116,39,115,10,32, - 32,32,32,95,95,112,97,116,104,95,95,46,32,32,87,104, - 101,110,32,116,104,105,115,32,99,104,97,110,103,101,115,44, - 32,116,104,101,32,109,111,100,117,108,101,39,115,32,111,119, - 110,32,112,97,116,104,32,105,115,32,114,101,99,111,109,112, - 117,116,101,100,44,10,32,32,32,32,117,115,105,110,103,32, - 112,97,116,104,95,102,105,110,100,101,114,46,32,32,70,111, - 114,32,116,111,112,45,108,101,118,101,108,32,109,111,100,117, - 108,101,115,44,32,116,104,101,32,112,97,114,101,110,116,32, - 109,111,100,117,108,101,39,115,32,112,97,116,104,10,32,32, - 32,32,105,115,32,115,121,115,46,112,97,116,104,46,99,4, - 0,0,0,0,0,0,0,4,0,0,0,2,0,0,0,67, - 0,0,0,115,52,0,0,0,124,1,0,124,0,0,95,0, - 0,124,2,0,124,0,0,95,1,0,116,2,0,124,0,0, - 106,3,0,131,0,0,131,1,0,124,0,0,95,4,0,124, - 3,0,124,0,0,95,5,0,100,0,0,83,40,1,0,0, - 0,78,40,6,0,0,0,117,5,0,0,0,95,110,97,109, - 101,117,5,0,0,0,95,112,97,116,104,117,5,0,0,0, - 116,117,112,108,101,117,16,0,0,0,95,103,101,116,95,112, - 97,114,101,110,116,95,112,97,116,104,117,17,0,0,0,95, - 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, - 117,12,0,0,0,95,112,97,116,104,95,102,105,110,100,101, - 114,40,4,0,0,0,117,4,0,0,0,115,101,108,102,117, - 4,0,0,0,110,97,109,101,117,4,0,0,0,112,97,116, - 104,117,11,0,0,0,112,97,116,104,95,102,105,110,100,101, - 114,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,95,105,110,105,116,95,95,140,4,0,0,115,8, - 0,0,0,0,1,9,1,9,1,21,1,117,23,0,0,0, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, - 4,0,0,0,3,0,0,0,67,0,0,0,115,53,0,0, - 0,124,0,0,106,0,0,106,1,0,100,1,0,131,1,0, - 92,3,0,125,1,0,125,2,0,125,3,0,124,2,0,100, - 2,0,107,2,0,114,43,0,100,6,0,83,124,1,0,100, - 5,0,102,2,0,83,40,7,0,0,0,117,62,0,0,0, - 82,101,116,117,114,110,115,32,97,32,116,117,112,108,101,32, - 111,102,32,40,112,97,114,101,110,116,45,109,111,100,117,108, - 101,45,110,97,109,101,44,32,112,97,114,101,110,116,45,112, - 97,116,104,45,97,116,116,114,45,110,97,109,101,41,117,1, - 0,0,0,46,117,0,0,0,0,117,3,0,0,0,115,121, - 115,117,4,0,0,0,112,97,116,104,117,8,0,0,0,95, - 95,112,97,116,104,95,95,40,2,0,0,0,117,3,0,0, - 0,115,121,115,117,4,0,0,0,112,97,116,104,40,2,0, - 0,0,117,5,0,0,0,95,110,97,109,101,117,10,0,0, - 0,114,112,97,114,116,105,116,105,111,110,40,4,0,0,0, - 117,4,0,0,0,115,101,108,102,117,6,0,0,0,112,97, - 114,101,110,116,117,3,0,0,0,100,111,116,117,2,0,0, - 0,109,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, - 23,0,0,0,95,102,105,110,100,95,112,97,114,101,110,116, - 95,112,97,116,104,95,110,97,109,101,115,146,4,0,0,115, - 8,0,0,0,0,2,27,1,12,2,4,3,117,38,0,0, - 0,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, - 104,95,110,97,109,101,115,99,1,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,67,0,0,0,115,38,0,0, - 0,124,0,0,106,0,0,131,0,0,92,2,0,125,1,0, - 125,2,0,116,1,0,116,2,0,106,3,0,124,1,0,25, - 124,2,0,131,2,0,83,40,1,0,0,0,78,40,4,0, - 0,0,117,23,0,0,0,95,102,105,110,100,95,112,97,114, - 101,110,116,95,112,97,116,104,95,110,97,109,101,115,117,7, - 0,0,0,103,101,116,97,116,116,114,117,3,0,0,0,115, - 121,115,117,7,0,0,0,109,111,100,117,108,101,115,40,3, - 0,0,0,117,4,0,0,0,115,101,108,102,117,18,0,0, - 0,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, - 97,109,101,117,14,0,0,0,112,97,116,104,95,97,116,116, - 114,95,110,97,109,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,16,0,0,0,95,103,101,116,95,112,97,114,101, - 110,116,95,112,97,116,104,156,4,0,0,115,4,0,0,0, - 0,1,18,1,117,31,0,0,0,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,46,95,103,101,116,95,112,97,114, - 101,110,116,95,112,97,116,104,99,1,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,67,0,0,0,115,103,0, - 0,0,116,0,0,124,0,0,106,1,0,131,0,0,131,1, - 0,125,1,0,124,1,0,124,0,0,106,2,0,107,3,0, - 114,96,0,124,0,0,106,3,0,124,0,0,106,4,0,124, - 1,0,131,2,0,92,2,0,125,2,0,125,3,0,124,2, - 0,100,0,0,107,8,0,114,84,0,124,3,0,124,0,0, - 95,6,0,110,0,0,124,1,0,124,0,0,95,2,0,110, - 0,0,124,0,0,106,6,0,83,40,1,0,0,0,78,40, - 7,0,0,0,117,5,0,0,0,116,117,112,108,101,117,16, - 0,0,0,95,103,101,116,95,112,97,114,101,110,116,95,112, - 97,116,104,117,17,0,0,0,95,108,97,115,116,95,112,97, - 114,101,110,116,95,112,97,116,104,117,12,0,0,0,95,112, - 97,116,104,95,102,105,110,100,101,114,117,5,0,0,0,95, - 110,97,109,101,117,4,0,0,0,78,111,110,101,117,5,0, - 0,0,95,112,97,116,104,40,4,0,0,0,117,4,0,0, - 0,115,101,108,102,117,11,0,0,0,112,97,114,101,110,116, - 95,112,97,116,104,117,6,0,0,0,108,111,97,100,101,114, - 117,8,0,0,0,110,101,119,95,112,97,116,104,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,12,0,0,0,95,114, - 101,99,97,108,99,117,108,97,116,101,160,4,0,0,115,14, - 0,0,0,0,2,18,1,15,1,27,3,12,1,12,1,12, - 1,117,27,0,0,0,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,114,101,99,97,108,99,117,108,97,116, - 101,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,16,0,0,0,116,0,0,124,0, - 0,106,1,0,131,0,0,131,1,0,83,40,1,0,0,0, - 78,40,2,0,0,0,117,4,0,0,0,105,116,101,114,117, - 12,0,0,0,95,114,101,99,97,108,99,117,108,97,116,101, - 40,1,0,0,0,117,4,0,0,0,115,101,108,102,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, - 95,105,116,101,114,95,95,172,4,0,0,115,2,0,0,0, - 0,1,117,23,0,0,0,95,78,97,109,101,115,112,97,99, + 0,115,4,0,0,0,100,1,0,83,41,2,122,53,82,101, + 116,117,114,110,32,78,111,110,101,32,97,115,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,115,32,104, + 97,118,101,32,110,111,32,115,111,117,114,99,101,32,99,111, + 100,101,46,78,114,4,0,0,0,41,2,114,71,0,0,0, + 114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,13,1,0,0,176,6,0,0,115,2,0, + 0,0,0,2,122,30,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,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,1,0,0,0,67,0,0,0,115,7,0,0,0,124,0, + 0,106,0,0,83,41,1,122,58,82,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 115,111,117,114,99,101,32,102,105,108,101,32,97,115,32,102, + 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, + 101,114,46,41,1,114,35,0,0,0,41,2,114,71,0,0, + 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,238,0,0,0,180,6,0,0,115,2, + 0,0,0,0,3,122,32,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,102, + 105,108,101,110,97,109,101,78,41,13,114,57,0,0,0,114, + 56,0,0,0,114,58,0,0,0,114,59,0,0,0,114,72, + 0,0,0,114,229,0,0,0,114,47,1,0,0,114,156,0, + 0,0,114,4,1,0,0,114,219,0,0,0,114,12,1,0, + 0,114,13,1,0,0,114,238,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 55,1,0,0,129,6,0,0,115,18,0,0,0,12,6,6, + 2,12,4,12,4,12,3,18,18,12,6,12,4,12,4,114, + 55,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,64,0,0,0,115,130,0,0,0,101,0, + 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, + 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, + 5,0,132,0,0,90,5,0,100,6,0,100,7,0,132,0, + 0,90,6,0,100,8,0,100,9,0,132,0,0,90,7,0, + 100,10,0,100,11,0,132,0,0,90,8,0,100,12,0,100, + 13,0,132,0,0,90,9,0,100,14,0,100,15,0,132,0, + 0,90,10,0,100,16,0,100,17,0,132,0,0,90,11,0, + 100,18,0,100,19,0,132,0,0,90,12,0,100,20,0,83, + 41,21,218,14,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,97,38,1,0,0,82,101,112,114,101,115,101,110,116, + 115,32,97,32,110,97,109,101,115,112,97,99,101,32,112,97, + 99,107,97,103,101,39,115,32,112,97,116,104,46,32,32,73, + 116,32,117,115,101,115,32,116,104,101,32,109,111,100,117,108, + 101,32,110,97,109,101,10,32,32,32,32,116,111,32,102,105, + 110,100,32,105,116,115,32,112,97,114,101,110,116,32,109,111, + 100,117,108,101,44,32,97,110,100,32,102,114,111,109,32,116, + 104,101,114,101,32,105,116,32,108,111,111,107,115,32,117,112, + 32,116,104,101,32,112,97,114,101,110,116,39,115,10,32,32, + 32,32,95,95,112,97,116,104,95,95,46,32,32,87,104,101, + 110,32,116,104,105,115,32,99,104,97,110,103,101,115,44,32, + 116,104,101,32,109,111,100,117,108,101,39,115,32,111,119,110, + 32,112,97,116,104,32,105,115,32,114,101,99,111,109,112,117, + 116,101,100,44,10,32,32,32,32,117,115,105,110,103,32,112, + 97,116,104,95,102,105,110,100,101,114,46,32,32,70,111,114, + 32,116,111,112,45,108,101,118,101,108,32,109,111,100,117,108, + 101,115,44,32,116,104,101,32,112,97,114,101,110,116,32,109, + 111,100,117,108,101,39,115,32,112,97,116,104,10,32,32,32, + 32,105,115,32,115,121,115,46,112,97,116,104,46,99,4,0, + 0,0,0,0,0,0,4,0,0,0,2,0,0,0,67,0, + 0,0,115,52,0,0,0,124,1,0,124,0,0,95,0,0, + 124,2,0,124,0,0,95,1,0,116,2,0,124,0,0,106, + 3,0,131,0,0,131,1,0,124,0,0,95,4,0,124,3, + 0,124,0,0,95,5,0,100,0,0,83,41,1,78,41,6, + 114,70,0,0,0,114,253,0,0,0,114,231,0,0,0,218, + 16,95,103,101,116,95,112,97,114,101,110,116,95,112,97,116, + 104,218,17,95,108,97,115,116,95,112,97,114,101,110,116,95, + 112,97,116,104,218,12,95,112,97,116,104,95,102,105,110,100, + 101,114,41,4,114,71,0,0,0,114,67,0,0,0,114,35, + 0,0,0,218,11,112,97,116,104,95,102,105,110,100,101,114, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 72,0,0,0,193,6,0,0,115,8,0,0,0,0,1,9, + 1,9,1,21,1,122,23,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,105,110,105,116,95,95,99,1, + 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, + 0,0,0,115,53,0,0,0,124,0,0,106,0,0,106,1, + 0,100,1,0,131,1,0,92,3,0,125,1,0,125,2,0, + 125,3,0,124,2,0,100,2,0,107,2,0,114,43,0,100, + 6,0,83,124,1,0,100,5,0,102,2,0,83,41,7,122, + 62,82,101,116,117,114,110,115,32,97,32,116,117,112,108,101, + 32,111,102,32,40,112,97,114,101,110,116,45,109,111,100,117, + 108,101,45,110,97,109,101,44,32,112,97,114,101,110,116,45, + 112,97,116,104,45,97,116,116,114,45,110,97,109,101,41,114, + 116,0,0,0,114,30,0,0,0,114,7,0,0,0,114,35, + 0,0,0,114,246,0,0,0,41,2,122,3,115,121,115,122, + 4,112,97,116,104,41,2,114,70,0,0,0,114,32,0,0, + 0,41,4,114,71,0,0,0,114,233,0,0,0,218,3,100, + 111,116,114,94,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,23,95,102,105,110,100,95,112,97, + 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,199, + 6,0,0,115,8,0,0,0,0,2,27,1,12,2,4,3, + 122,38,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,102,105,110,100,95,112,97,114,101,110,116,95,112,97, + 116,104,95,110,97,109,101,115,99,1,0,0,0,0,0,0, + 0,3,0,0,0,3,0,0,0,67,0,0,0,115,38,0, + 0,0,124,0,0,106,0,0,131,0,0,92,2,0,125,1, + 0,125,2,0,116,1,0,116,2,0,106,3,0,124,1,0, + 25,124,2,0,131,2,0,83,41,1,78,41,4,114,65,1, + 0,0,114,62,0,0,0,114,7,0,0,0,114,73,0,0, + 0,41,3,114,71,0,0,0,90,18,112,97,114,101,110,116, + 95,109,111,100,117,108,101,95,110,97,109,101,90,14,112,97, + 116,104,95,97,116,116,114,95,110,97,109,101,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,60,1,0,0, + 209,6,0,0,115,4,0,0,0,0,1,18,1,122,31,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,103, + 101,116,95,112,97,114,101,110,116,95,112,97,116,104,99,1, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,127,0,0,0,116,0,0,124,0,0,106,1, + 0,131,0,0,131,1,0,125,1,0,124,1,0,124,0,0, + 106,2,0,107,3,0,114,120,0,124,0,0,106,3,0,124, + 0,0,106,4,0,124,1,0,131,2,0,125,2,0,124,2, + 0,100,0,0,107,9,0,114,108,0,124,2,0,106,5,0, + 100,0,0,107,8,0,114,108,0,124,2,0,106,6,0,114, + 108,0,124,2,0,106,6,0,124,0,0,95,7,0,113,108, + 0,110,0,0,124,1,0,124,0,0,95,2,0,110,0,0, + 124,0,0,106,7,0,83,41,1,78,41,8,114,231,0,0, + 0,114,60,1,0,0,114,61,1,0,0,114,62,1,0,0, + 114,70,0,0,0,114,169,0,0,0,114,220,0,0,0,114, + 253,0,0,0,41,3,114,71,0,0,0,90,11,112,97,114, + 101,110,116,95,112,97,116,104,114,177,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,12,95,114, + 101,99,97,108,99,117,108,97,116,101,213,6,0,0,115,16, + 0,0,0,0,2,18,1,15,1,21,3,27,1,9,1,18, + 1,12,1,122,27,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,114,101,99,97,108,99,117,108,97,116,101, + 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, + 0,67,0,0,0,115,16,0,0,0,116,0,0,124,0,0, + 106,1,0,131,0,0,131,1,0,83,41,1,78,41,2,218, + 4,105,116,101,114,114,66,1,0,0,41,1,114,71,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,8,95,95,105,116,101,114,95,95,226,6,0,0,115,2, + 0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99, 101,80,97,116,104,46,95,95,105,116,101,114,95,95,99,1, 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, 0,0,0,115,16,0,0,0,116,0,0,124,0,0,106,1, - 0,131,0,0,131,1,0,83,40,1,0,0,0,78,40,2, - 0,0,0,117,3,0,0,0,108,101,110,117,12,0,0,0, - 95,114,101,99,97,108,99,117,108,97,116,101,40,1,0,0, - 0,117,4,0,0,0,115,101,108,102,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,7,0,0,0,95,95,108,101,110, - 95,95,175,4,0,0,115,2,0,0,0,0,1,117,22,0, - 0,0,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,108,101,110,95,95,99,1,0,0,0,0,0,0, - 0,1,0,0,0,2,0,0,0,67,0,0,0,115,16,0, - 0,0,100,1,0,106,0,0,124,0,0,106,1,0,131,1, - 0,83,40,2,0,0,0,78,117,20,0,0,0,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,40,123,33,114,125, - 41,40,2,0,0,0,117,6,0,0,0,102,111,114,109,97, - 116,117,5,0,0,0,95,112,97,116,104,40,1,0,0,0, - 117,4,0,0,0,115,101,108,102,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,95,114,101,112,114, - 95,95,178,4,0,0,115,2,0,0,0,0,1,117,23,0, - 0,0,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,114,101,112,114,95,95,99,2,0,0,0,0,0, - 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,16, - 0,0,0,124,1,0,124,0,0,106,0,0,131,0,0,107, - 6,0,83,40,1,0,0,0,78,40,1,0,0,0,117,12, - 0,0,0,95,114,101,99,97,108,99,117,108,97,116,101,40, - 2,0,0,0,117,4,0,0,0,115,101,108,102,117,4,0, - 0,0,105,116,101,109,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,12,0,0,0,95,95,99,111,110,116,97,105,110, - 115,95,95,181,4,0,0,115,2,0,0,0,0,1,117,27, - 0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,99,111,110,116,97,105,110,115,95,95,99,2, - 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,67, - 0,0,0,115,20,0,0,0,124,0,0,106,0,0,106,1, - 0,124,1,0,131,1,0,1,100,0,0,83,40,1,0,0, - 0,78,40,2,0,0,0,117,5,0,0,0,95,112,97,116, - 104,117,6,0,0,0,97,112,112,101,110,100,40,2,0,0, - 0,117,4,0,0,0,115,101,108,102,117,4,0,0,0,105, - 116,101,109,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,97,112,112,101,110,100,184,4,0,0,115,2, - 0,0,0,0,1,117,21,0,0,0,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78, - 40,13,0,0,0,117,8,0,0,0,95,95,110,97,109,101, - 95,95,117,10,0,0,0,95,95,109,111,100,117,108,101,95, - 95,117,12,0,0,0,95,95,113,117,97,108,110,97,109,101, - 95,95,117,7,0,0,0,95,95,100,111,99,95,95,117,8, - 0,0,0,95,95,105,110,105,116,95,95,117,23,0,0,0, - 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, - 104,95,110,97,109,101,115,117,16,0,0,0,95,103,101,116, - 95,112,97,114,101,110,116,95,112,97,116,104,117,12,0,0, - 0,95,114,101,99,97,108,99,117,108,97,116,101,117,8,0, - 0,0,95,95,105,116,101,114,95,95,117,7,0,0,0,95, - 95,108,101,110,95,95,117,8,0,0,0,95,95,114,101,112, - 114,95,95,117,12,0,0,0,95,95,99,111,110,116,97,105, - 110,115,95,95,117,6,0,0,0,97,112,112,101,110,100,40, - 1,0,0,0,117,10,0,0,0,95,95,108,111,99,97,108, - 115,95,95,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, - 14,0,0,0,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,133,4,0,0,115,20,0,0,0,16,5,6,2,12, - 6,12,10,12,4,12,12,12,3,12,3,12,3,12,3,117, - 14,0,0,0,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,99,1,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,66,0,0,0,115,68,0,0,0,124,0,0,69, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,100, - 2,0,132,0,0,90,3,0,101,4,0,100,3,0,100,4, - 0,132,0,0,131,1,0,90,5,0,101,6,0,100,5,0, - 100,6,0,132,0,0,131,1,0,90,7,0,100,7,0,83, - 40,8,0,0,0,117,15,0,0,0,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,99,4,0,0,0,0,0, - 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,25, - 0,0,0,116,0,0,124,1,0,124,2,0,124,3,0,131, - 3,0,124,0,0,95,1,0,100,0,0,83,40,1,0,0, - 0,78,40,2,0,0,0,117,14,0,0,0,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,117,5,0,0,0,95, - 112,97,116,104,40,4,0,0,0,117,4,0,0,0,115,101, - 108,102,117,4,0,0,0,110,97,109,101,117,4,0,0,0, - 112,97,116,104,117,11,0,0,0,112,97,116,104,95,102,105, - 110,100,101,114,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,95,105,110,105,116,95,95,189,4,0, - 0,115,2,0,0,0,0,1,117,24,0,0,0,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,95,95,105, - 110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, - 1,0,106,0,0,124,1,0,106,1,0,131,1,0,83,40, - 2,0,0,0,78,117,25,0,0,0,60,109,111,100,117,108, - 101,32,39,123,125,39,32,40,110,97,109,101,115,112,97,99, - 101,41,62,40,2,0,0,0,117,6,0,0,0,102,111,114, - 109,97,116,117,8,0,0,0,95,95,110,97,109,101,95,95, - 40,2,0,0,0,117,3,0,0,0,99,108,115,117,6,0, - 0,0,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,11,0,0,0,109,111,100,117,108,101,95, - 114,101,112,114,192,4,0,0,115,2,0,0,0,0,2,117, - 27,0,0,0,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,109,111,100,117,108,101,95,114,101,112,114,99, - 2,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 67,0,0,0,115,32,0,0,0,116,0,0,100,1,0,124, - 0,0,106,1,0,131,2,0,1,124,0,0,106,1,0,124, - 1,0,95,2,0,124,1,0,83,40,2,0,0,0,117,24, - 0,0,0,76,111,97,100,32,97,32,110,97,109,101,115,112, - 97,99,101,32,109,111,100,117,108,101,46,117,38,0,0,0, - 110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101, - 32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,116, - 104,32,123,33,114,125,40,3,0,0,0,117,16,0,0,0, - 95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,101, - 117,5,0,0,0,95,112,97,116,104,117,8,0,0,0,95, - 95,112,97,116,104,95,95,40,2,0,0,0,117,4,0,0, - 0,115,101,108,102,117,6,0,0,0,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,11,0,0, - 0,108,111,97,100,95,109,111,100,117,108,101,196,4,0,0, - 115,6,0,0,0,0,3,16,1,12,1,117,27,0,0,0, + 0,131,0,0,131,1,0,83,41,1,78,41,2,114,31,0, + 0,0,114,66,1,0,0,41,1,114,71,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,7,95, + 95,108,101,110,95,95,229,6,0,0,115,2,0,0,0,0, + 1,122,22,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,108,101,110,95,95,99,1,0,0,0,0,0, + 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,100,1,0,106,0,0,124,0,0,106,1,0,131, + 1,0,83,41,2,78,122,20,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,40,123,33,114,125,41,41,2,114,47, + 0,0,0,114,253,0,0,0,41,1,114,71,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,101, + 0,0,0,232,6,0,0,115,2,0,0,0,0,1,122,23, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, + 0,124,1,0,124,0,0,106,0,0,131,0,0,107,6,0, + 83,41,1,78,41,1,114,66,1,0,0,41,2,114,71,0, + 0,0,218,4,105,116,101,109,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,12,95,95,99,111,110,116,97, + 105,110,115,95,95,235,6,0,0,115,2,0,0,0,0,1, + 122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,99,111,110,116,97,105,110,115,95,95,99,2,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,20,0,0,0,124,0,0,106,0,0,106,1,0, + 124,1,0,131,1,0,1,100,0,0,83,41,1,78,41,2, + 114,253,0,0,0,114,223,0,0,0,41,2,114,71,0,0, + 0,114,70,1,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,223,0,0,0,238,6,0,0,115,2, + 0,0,0,0,1,122,21,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,97,112,112,101,110,100,78,41,13,114, + 57,0,0,0,114,56,0,0,0,114,58,0,0,0,114,59, + 0,0,0,114,72,0,0,0,114,65,1,0,0,114,60,1, + 0,0,114,66,1,0,0,114,68,1,0,0,114,69,1,0, + 0,114,101,0,0,0,114,71,1,0,0,114,223,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,59,1,0,0,186,6,0,0,115,20,0, + 0,0,12,5,6,2,12,6,12,10,12,4,12,13,12,3, + 12,3,12,3,12,3,114,59,1,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, + 115,106,0,0,0,101,0,0,90,1,0,100,0,0,90,2, + 0,100,1,0,100,2,0,132,0,0,90,3,0,101,4,0, + 100,3,0,100,4,0,132,0,0,131,1,0,90,5,0,100, + 5,0,100,6,0,132,0,0,90,6,0,100,7,0,100,8, + 0,132,0,0,90,7,0,100,9,0,100,10,0,132,0,0, + 90,8,0,100,11,0,100,12,0,132,0,0,90,9,0,100, + 13,0,100,14,0,132,0,0,90,10,0,100,15,0,83,41, + 16,114,251,0,0,0,99,4,0,0,0,0,0,0,0,4, + 0,0,0,4,0,0,0,67,0,0,0,115,25,0,0,0, + 116,0,0,124,1,0,124,2,0,124,3,0,131,3,0,124, + 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,59, + 1,0,0,114,253,0,0,0,41,4,114,71,0,0,0,114, + 67,0,0,0,114,35,0,0,0,114,63,1,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,72,0, + 0,0,244,6,0,0,115,2,0,0,0,0,1,122,25,95, 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 108,111,97,100,95,109,111,100,117,108,101,78,40,8,0,0, - 0,117,8,0,0,0,95,95,110,97,109,101,95,95,117,10, - 0,0,0,95,95,109,111,100,117,108,101,95,95,117,12,0, - 0,0,95,95,113,117,97,108,110,97,109,101,95,95,117,8, - 0,0,0,95,95,105,110,105,116,95,95,117,11,0,0,0, - 99,108,97,115,115,109,101,116,104,111,100,117,11,0,0,0, - 109,111,100,117,108,101,95,114,101,112,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,108,111,97,100,95,109,111,100,117,108, - 101,40,1,0,0,0,117,10,0,0,0,95,95,108,111,99, - 97,108,115,95,95,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,15,0,0,0,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,188,4,0,0,115,6,0,0,0,16,1, - 12,3,18,4,117,15,0,0,0,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,99,1,0,0,0,0,0,0, - 0,1,0,0,0,4,0,0,0,66,0,0,0,115,119,0, - 0,0,124,0,0,69,101,0,0,90,1,0,100,0,0,90, - 2,0,100,1,0,90,3,0,101,4,0,100,2,0,100,3, - 0,132,0,0,131,1,0,90,5,0,101,4,0,100,4,0, - 100,5,0,132,0,0,131,1,0,90,6,0,101,4,0,100, - 6,0,100,7,0,132,0,0,131,1,0,90,7,0,101,4, - 0,100,8,0,100,9,0,132,0,0,131,1,0,90,8,0, - 101,4,0,100,12,0,100,10,0,100,11,0,132,1,0,131, - 1,0,90,10,0,100,12,0,83,40,13,0,0,0,117,10, - 0,0,0,80,97,116,104,70,105,110,100,101,114,117,62,0, - 0,0,77,101,116,97,32,112,97,116,104,32,102,105,110,100, - 101,114,32,102,111,114,32,115,121,115,46,112,97,116,104,32, - 97,110,100,32,112,97,99,107,97,103,101,32,95,95,112,97, - 116,104,95,95,32,97,116,116,114,105,98,117,116,101,115,46, - 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,67,0,0,0,115,58,0,0,0,120,51,0,116,0,0, - 106,1,0,106,2,0,131,0,0,68,93,34,0,125,1,0, - 116,3,0,124,1,0,100,1,0,131,2,0,114,16,0,124, - 1,0,106,4,0,131,0,0,1,113,16,0,113,16,0,87, - 100,2,0,83,40,3,0,0,0,117,125,0,0,0,67,97, - 108,108,32,116,104,101,32,105,110,118,97,108,105,100,97,116, - 101,95,99,97,99,104,101,115,40,41,32,109,101,116,104,111, - 100,32,111,110,32,97,108,108,32,112,97,116,104,32,101,110, - 116,114,121,32,102,105,110,100,101,114,115,10,32,32,32,32, - 32,32,32,32,115,116,111,114,101,100,32,105,110,32,115,121, - 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,115,32,40,119,104,101,114,101,32,105,109, - 112,108,101,109,101,110,116,101,100,41,46,117,17,0,0,0, - 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, - 115,78,40,5,0,0,0,117,3,0,0,0,115,121,115,117, - 19,0,0,0,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,117,6,0,0,0,118,97,108,117, - 101,115,117,7,0,0,0,104,97,115,97,116,116,114,117,17, - 0,0,0,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,40,2,0,0,0,117,3,0,0,0,99,108, - 115,117,6,0,0,0,102,105,110,100,101,114,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,17,0,0,0,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,210,4, - 0,0,115,6,0,0,0,0,4,22,1,15,1,117,28,0, - 0,0,80,97,116,104,70,105,110,100,101,114,46,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, - 0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,67, - 0,0,0,115,94,0,0,0,116,0,0,106,1,0,115,28, - 0,116,2,0,106,3,0,100,1,0,116,4,0,131,2,0, - 1,110,0,0,120,59,0,116,0,0,106,1,0,68,93,44, - 0,125,2,0,121,14,0,124,2,0,124,1,0,131,1,0, - 83,87,113,38,0,4,116,5,0,107,10,0,114,81,0,1, - 1,1,119,38,0,89,113,38,0,88,113,38,0,87,100,2, - 0,83,100,2,0,83,40,3,0,0,0,117,113,0,0,0, - 83,101,97,114,99,104,32,115,101,113,117,101,110,99,101,32, - 111,102,32,104,111,111,107,115,32,102,111,114,32,97,32,102, - 105,110,100,101,114,32,102,111,114,32,39,112,97,116,104,39, - 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,104, - 111,111,107,115,39,32,105,115,32,102,97,108,115,101,32,116, - 104,101,110,32,117,115,101,32,115,121,115,46,112,97,116,104, - 95,104,111,111,107,115,46,10,10,32,32,32,32,32,32,32, - 32,117,23,0,0,0,115,121,115,46,112,97,116,104,95,104, - 111,111,107,115,32,105,115,32,101,109,112,116,121,78,40,7, - 0,0,0,117,3,0,0,0,115,121,115,117,10,0,0,0, - 112,97,116,104,95,104,111,111,107,115,117,9,0,0,0,95, - 119,97,114,110,105,110,103,115,117,4,0,0,0,119,97,114, - 110,117,13,0,0,0,73,109,112,111,114,116,87,97,114,110, - 105,110,103,117,11,0,0,0,73,109,112,111,114,116,69,114, - 114,111,114,117,4,0,0,0,78,111,110,101,40,3,0,0, - 0,117,3,0,0,0,99,108,115,117,4,0,0,0,112,97, - 116,104,117,4,0,0,0,104,111,111,107,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,11,0,0,0,95,112,97,116, - 104,95,104,111,111,107,115,218,4,0,0,115,16,0,0,0, - 0,7,9,1,19,1,16,1,3,1,14,1,13,1,12,2, - 117,22,0,0,0,80,97,116,104,70,105,110,100,101,114,46, - 95,112,97,116,104,95,104,111,111,107,115,99,2,0,0,0, - 0,0,0,0,3,0,0,0,11,0,0,0,67,0,0,0, - 115,91,0,0,0,124,1,0,100,1,0,107,2,0,114,21, - 0,100,2,0,125,1,0,110,0,0,121,17,0,116,0,0, - 106,1,0,124,1,0,25,125,2,0,87,110,46,0,4,116, - 2,0,107,10,0,114,86,0,1,1,1,124,0,0,106,3, - 0,124,1,0,131,1,0,125,2,0,124,2,0,116,0,0, - 106,1,0,124,1,0,60,89,110,1,0,88,124,2,0,83, - 40,3,0,0,0,117,210,0,0,0,71,101,116,32,116,104, - 101,32,102,105,110,100,101,114,32,102,111,114,32,116,104,101, - 32,112,97,116,104,32,101,110,116,114,121,32,102,114,111,109, - 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, - 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,101, - 110,116,114,121,32,105,115,32,110,111,116,32,105,110,32,116, - 104,101,32,99,97,99,104,101,44,32,102,105,110,100,32,116, - 104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,102, - 105,110,100,101,114,10,32,32,32,32,32,32,32,32,97,110, - 100,32,99,97,99,104,101,32,105,116,46,32,73,102,32,110, - 111,32,102,105,110,100,101,114,32,105,115,32,97,118,97,105, - 108,97,98,108,101,44,32,115,116,111,114,101,32,78,111,110, - 101,46,10,10,32,32,32,32,32,32,32,32,117,0,0,0, - 0,117,1,0,0,0,46,40,4,0,0,0,117,3,0,0, - 0,115,121,115,117,19,0,0,0,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,117,8,0,0, - 0,75,101,121,69,114,114,111,114,117,11,0,0,0,95,112, - 97,116,104,95,104,111,111,107,115,40,3,0,0,0,117,3, - 0,0,0,99,108,115,117,4,0,0,0,112,97,116,104,117, - 6,0,0,0,102,105,110,100,101,114,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,20,0,0,0,95,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,235, - 4,0,0,115,16,0,0,0,0,8,12,1,9,1,3,1, - 17,1,13,1,15,1,18,1,117,31,0,0,0,80,97,116, - 104,70,105,110,100,101,114,46,95,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,99,3,0,0, - 0,0,0,0,0,8,0,0,0,5,0,0,0,67,0,0, - 0,115,189,0,0,0,103,0,0,125,3,0,120,176,0,124, - 2,0,68,93,158,0,125,4,0,116,0,0,124,4,0,116, - 1,0,116,2,0,102,2,0,131,2,0,115,46,0,113,13, - 0,110,0,0,124,0,0,106,3,0,124,4,0,131,1,0, - 125,5,0,124,5,0,100,2,0,107,9,0,114,13,0,116, - 5,0,124,5,0,100,1,0,131,2,0,114,112,0,124,5, - 0,106,6,0,124,1,0,131,1,0,92,2,0,125,6,0, - 125,7,0,110,21,0,124,5,0,106,7,0,124,1,0,131, - 1,0,125,6,0,103,0,0,125,7,0,124,6,0,100,2, - 0,107,9,0,114,155,0,124,6,0,124,3,0,102,2,0, - 83,124,3,0,106,8,0,124,7,0,131,1,0,1,113,13, - 0,113,13,0,87,100,2,0,124,3,0,102,2,0,83,100, - 2,0,83,40,3,0,0,0,117,63,0,0,0,70,105,110, + 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,100,1,0,106,0,0,124,1,0,106,1,0,131,1, + 0,83,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,101,99,97, + 116,101,100,46,32,32,84,104,101,32,105,109,112,111,114,116, + 32,109,97,99,104,105,110,101,114,121,32,100,111,101,115,32, + 116,104,101,32,106,111,98,32,105,116,115,101,108,102,46,10, + 10,32,32,32,32,32,32,32,32,122,25,60,109,111,100,117, + 108,101,32,123,33,114,125,32,40,110,97,109,101,115,112,97, + 99,101,41,62,41,2,114,47,0,0,0,114,57,0,0,0, + 41,2,114,8,1,0,0,114,179,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,205,0,0,0, + 247,6,0,0,115,2,0,0,0,0,7,122,28,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,109,111, + 100,117,108,101,95,114,101,112,114,99,2,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,0,83,41,2,78,84,114,4,0,0,0, + 41,2,114,71,0,0,0,114,158,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,219,0,0,0, + 0,7,0,0,115,2,0,0,0,0,1,122,27,95,78,97, + 109,101,115,112,97,99,101,76,111,97,100,101,114,46,105,115, + 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,0,83,41,2,78,114,30,0,0,0,114,4, + 0,0,0,41,2,114,71,0,0,0,114,158,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,13, + 1,0,0,3,7,0,0,115,2,0,0,0,0,1,122,27, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,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,6,0,0,0,67,0,0,0, + 115,22,0,0,0,116,0,0,100,1,0,100,2,0,100,3, + 0,100,4,0,100,5,0,131,3,1,83,41,6,78,114,30, + 0,0,0,122,8,60,115,116,114,105,110,103,62,114,175,0, + 0,0,114,39,1,0,0,84,41,1,114,40,1,0,0,41, + 2,114,71,0,0,0,114,158,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,12,1,0,0,6, + 7,0,0,115,2,0,0,0,0,1,122,25,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 0,0,83,41,1,78,114,4,0,0,0,41,2,114,71,0, + 0,0,114,179,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,1,1,0,0,9,7,0,0,115, + 2,0,0,0,0,1,122,28,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,67,0,0,0,115,29,0,0,0,116,0, + 0,100,1,0,124,0,0,106,1,0,131,2,0,1,116,2, + 0,124,0,0,124,1,0,131,2,0,83,41,2,122,98,76, + 111,97,100,32,97,32,110,97,109,101,115,112,97,99,101,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,122,38,110,97,109,101,115,112,97,99,101,32,109,111,100, + 117,108,101,32,108,111,97,100,101,100,32,119,105,116,104,32, + 112,97,116,104,32,123,33,114,125,41,3,114,152,0,0,0, + 114,253,0,0,0,114,180,0,0,0,41,2,114,71,0,0, + 0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,4,1,0,0,12,7,0,0,115,4, + 0,0,0,0,7,16,1,122,28,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,108,111,97,100,95,109, + 111,100,117,108,101,78,41,11,114,57,0,0,0,114,56,0, + 0,0,114,58,0,0,0,114,72,0,0,0,114,15,1,0, + 0,114,205,0,0,0,114,219,0,0,0,114,13,1,0,0, + 114,12,1,0,0,114,1,1,0,0,114,4,1,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,251,0,0,0,243,6,0,0,115,14,0,0, + 0,12,1,12,3,18,9,12,3,12,3,12,3,12,3,114, + 251,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,64,0,0,0,115,160,0,0,0,101,0, + 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, + 101,4,0,100,2,0,100,3,0,132,0,0,131,1,0,90, + 5,0,101,4,0,100,4,0,100,5,0,132,0,0,131,1, + 0,90,6,0,101,4,0,100,6,0,100,7,0,132,0,0, + 131,1,0,90,7,0,101,4,0,100,8,0,100,9,0,132, + 0,0,131,1,0,90,8,0,101,4,0,100,10,0,100,11, + 0,100,12,0,132,1,0,131,1,0,90,9,0,101,4,0, + 100,10,0,100,10,0,100,13,0,100,14,0,132,2,0,131, + 1,0,90,10,0,101,4,0,100,10,0,100,15,0,100,16, + 0,132,1,0,131,1,0,90,11,0,100,10,0,83,41,17, + 218,10,80,97,116,104,70,105,110,100,101,114,122,62,77,101, + 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, + 111,114,32,115,121,115,46,112,97,116,104,32,97,110,100,32, + 112,97,99,107,97,103,101,32,95,95,112,97,116,104,95,95, + 32,97,116,116,114,105,98,117,116,101,115,46,99,1,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, + 0,115,58,0,0,0,120,51,0,116,0,0,106,1,0,106, + 2,0,131,0,0,68,93,34,0,125,1,0,116,3,0,124, + 1,0,100,1,0,131,2,0,114,16,0,124,1,0,106,4, + 0,131,0,0,1,113,16,0,113,16,0,87,100,2,0,83, + 41,3,122,125,67,97,108,108,32,116,104,101,32,105,110,118, + 97,108,105,100,97,116,101,95,99,97,99,104,101,115,40,41, + 32,109,101,116,104,111,100,32,111,110,32,97,108,108,32,112, + 97,116,104,32,101,110,116,114,121,32,102,105,110,100,101,114, + 115,10,32,32,32,32,32,32,32,32,115,116,111,114,101,100, + 32,105,110,32,115,121,115,46,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,115,32,40,119,104, + 101,114,101,32,105,109,112,108,101,109,101,110,116,101,100,41, + 46,218,17,105,110,118,97,108,105,100,97,116,101,95,99,97, + 99,104,101,115,78,41,5,114,7,0,0,0,218,19,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,218,6,118,97,108,117,101,115,114,60,0,0,0,114,73, + 1,0,0,41,2,114,8,1,0,0,218,6,102,105,110,100, + 101,114,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,73,1,0,0,29,7,0,0,115,6,0,0,0,0, + 4,22,1,15,1,122,28,80,97,116,104,70,105,110,100,101, + 114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,99,2,0,0,0,0,0,0,0,3,0,0,0, + 12,0,0,0,67,0,0,0,115,94,0,0,0,116,0,0, + 106,1,0,115,28,0,116,2,0,106,3,0,100,1,0,116, + 4,0,131,2,0,1,110,0,0,120,59,0,116,0,0,106, + 1,0,68,93,44,0,125,2,0,121,14,0,124,2,0,124, + 1,0,131,1,0,83,87,113,38,0,4,116,5,0,107,10, + 0,114,81,0,1,1,1,119,38,0,89,113,38,0,88,113, + 38,0,87,100,2,0,83,100,2,0,83,41,3,122,113,83, + 101,97,114,99,104,32,115,101,113,117,101,110,99,101,32,111, + 102,32,104,111,111,107,115,32,102,111,114,32,97,32,102,105, + 110,100,101,114,32,102,111,114,32,39,112,97,116,104,39,46, + 10,10,32,32,32,32,32,32,32,32,73,102,32,39,104,111, + 111,107,115,39,32,105,115,32,102,97,108,115,101,32,116,104, + 101,110,32,117,115,101,32,115,121,115,46,112,97,116,104,95, + 104,111,111,107,115,46,10,10,32,32,32,32,32,32,32,32, + 122,23,115,121,115,46,112,97,116,104,95,104,111,111,107,115, + 32,105,115,32,101,109,112,116,121,78,41,6,114,7,0,0, + 0,218,10,112,97,116,104,95,104,111,111,107,115,114,166,0, + 0,0,114,167,0,0,0,114,168,0,0,0,114,153,0,0, + 0,41,3,114,8,1,0,0,114,35,0,0,0,90,4,104, + 111,111,107,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,37, + 7,0,0,115,16,0,0,0,0,7,9,1,19,1,16,1, + 3,1,14,1,13,1,12,2,122,22,80,97,116,104,70,105, + 110,100,101,114,46,95,112,97,116,104,95,104,111,111,107,115, + 99,2,0,0,0,0,0,0,0,3,0,0,0,11,0,0, + 0,67,0,0,0,115,97,0,0,0,124,1,0,100,1,0, + 107,2,0,114,27,0,116,0,0,106,1,0,131,0,0,125, + 1,0,110,0,0,121,17,0,116,2,0,106,3,0,124,1, + 0,25,125,2,0,87,110,46,0,4,116,4,0,107,10,0, + 114,92,0,1,1,1,124,0,0,106,5,0,124,1,0,131, + 1,0,125,2,0,124,2,0,116,2,0,106,3,0,124,1, + 0,60,89,110,1,0,88,124,2,0,83,41,2,122,210,71, + 101,116,32,116,104,101,32,102,105,110,100,101,114,32,102,111, + 114,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, + 32,102,114,111,109,32,115,121,115,46,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,10, + 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, + 97,116,104,32,101,110,116,114,121,32,105,115,32,110,111,116, + 32,105,110,32,116,104,101,32,99,97,99,104,101,44,32,102, + 105,110,100,32,116,104,101,32,97,112,112,114,111,112,114,105, + 97,116,101,32,102,105,110,100,101,114,10,32,32,32,32,32, + 32,32,32,97,110,100,32,99,97,99,104,101,32,105,116,46, + 32,73,102,32,110,111,32,102,105,110,100,101,114,32,105,115, + 32,97,118,97,105,108,97,98,108,101,44,32,115,116,111,114, + 101,32,78,111,110,101,46,10,10,32,32,32,32,32,32,32, + 32,114,30,0,0,0,41,6,114,3,0,0,0,114,45,0, + 0,0,114,7,0,0,0,114,74,1,0,0,114,79,0,0, + 0,114,78,1,0,0,41,3,114,8,1,0,0,114,35,0, + 0,0,114,76,1,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,20,95,112,97,116,104,95,105,109, + 112,111,114,116,101,114,95,99,97,99,104,101,54,7,0,0, + 115,16,0,0,0,0,8,12,1,15,1,3,1,17,1,13, + 1,15,1,18,1,122,31,80,97,116,104,70,105,110,100,101, + 114,46,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,99,3,0,0,0,0,0,0,0,6, + 0,0,0,3,0,0,0,67,0,0,0,115,113,0,0,0, + 116,0,0,124,2,0,100,1,0,131,2,0,114,39,0,124, + 2,0,106,1,0,124,1,0,131,1,0,92,2,0,125,3, + 0,125,4,0,110,21,0,124,2,0,106,2,0,124,1,0, + 131,1,0,125,3,0,100,0,0,125,4,0,124,3,0,100, + 0,0,107,9,0,114,85,0,116,3,0,124,1,0,124,3, + 0,131,2,0,83,116,4,0,124,1,0,100,0,0,131,2, + 0,125,5,0,124,4,0,124,5,0,95,5,0,124,5,0, + 83,41,2,78,114,165,0,0,0,41,6,114,60,0,0,0, + 114,165,0,0,0,114,11,1,0,0,114,173,0,0,0,114, + 216,0,0,0,114,220,0,0,0,41,6,114,8,1,0,0, + 114,158,0,0,0,114,76,1,0,0,114,169,0,0,0,114, + 170,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,16,95,108,101,103,97,99, + 121,95,103,101,116,95,115,112,101,99,71,7,0,0,115,18, + 0,0,0,0,4,15,1,24,2,15,1,6,1,12,1,13, + 1,15,1,9,1,122,27,80,97,116,104,70,105,110,100,101, + 114,46,95,108,101,103,97,99,121,95,103,101,116,95,115,112, + 101,99,78,99,4,0,0,0,0,0,0,0,9,0,0,0, + 5,0,0,0,67,0,0,0,115,252,0,0,0,103,0,0, + 125,4,0,120,239,0,124,2,0,68,93,203,0,125,5,0, + 116,0,0,124,5,0,116,1,0,116,2,0,102,2,0,131, + 2,0,115,46,0,113,13,0,110,0,0,124,0,0,106,3, + 0,124,5,0,131,1,0,125,6,0,124,6,0,100,1,0, + 107,9,0,114,13,0,116,4,0,124,6,0,100,2,0,131, + 2,0,114,109,0,124,6,0,106,5,0,124,1,0,124,3, + 0,131,2,0,125,7,0,110,18,0,124,0,0,106,6,0, + 124,1,0,124,6,0,131,2,0,125,7,0,124,7,0,100, + 1,0,107,8,0,114,145,0,113,13,0,110,0,0,124,7, + 0,106,7,0,100,1,0,107,9,0,114,164,0,124,7,0, + 83,124,7,0,106,8,0,125,8,0,124,8,0,100,1,0, + 107,8,0,114,200,0,116,9,0,100,3,0,131,1,0,130, + 1,0,110,0,0,124,4,0,106,10,0,124,8,0,131,1, + 0,1,113,13,0,113,13,0,87,116,11,0,124,1,0,100, + 1,0,131,2,0,125,7,0,124,4,0,124,7,0,95,8, + 0,124,7,0,83,100,1,0,83,41,4,122,63,70,105,110, 100,32,116,104,101,32,108,111,97,100,101,114,32,111,114,32, 110,97,109,101,115,112,97,99,101,95,112,97,116,104,32,102, 111,114,32,116,104,105,115,32,109,111,100,117,108,101,47,112, - 97,99,107,97,103,101,32,110,97,109,101,46,117,11,0,0, - 0,102,105,110,100,95,108,111,97,100,101,114,78,40,9,0, - 0,0,117,10,0,0,0,105,115,105,110,115,116,97,110,99, - 101,117,3,0,0,0,115,116,114,117,5,0,0,0,98,121, - 116,101,115,117,20,0,0,0,95,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,117,4,0,0, - 0,78,111,110,101,117,7,0,0,0,104,97,115,97,116,116, - 114,117,11,0,0,0,102,105,110,100,95,108,111,97,100,101, - 114,117,11,0,0,0,102,105,110,100,95,109,111,100,117,108, - 101,117,6,0,0,0,101,120,116,101,110,100,40,8,0,0, - 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, - 108,108,110,97,109,101,117,4,0,0,0,112,97,116,104,117, - 14,0,0,0,110,97,109,101,115,112,97,99,101,95,112,97, - 116,104,117,5,0,0,0,101,110,116,114,121,117,6,0,0, - 0,102,105,110,100,101,114,117,6,0,0,0,108,111,97,100, - 101,114,117,8,0,0,0,112,111,114,116,105,111,110,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,11,0,0,0, - 95,103,101,116,95,108,111,97,100,101,114,252,4,0,0,115, - 28,0,0,0,0,5,6,1,13,1,21,1,6,1,15,1, - 12,1,15,1,24,2,15,1,6,1,12,2,10,5,20,2, - 117,22,0,0,0,80,97,116,104,70,105,110,100,101,114,46, - 95,103,101,116,95,108,111,97,100,101,114,99,3,0,0,0, - 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, - 115,97,0,0,0,124,2,0,100,1,0,107,8,0,114,24, - 0,116,1,0,106,2,0,125,2,0,110,0,0,124,0,0, - 106,3,0,124,1,0,124,2,0,131,2,0,92,2,0,125, - 3,0,125,4,0,124,3,0,100,1,0,107,9,0,114,64, - 0,124,3,0,83,124,4,0,114,89,0,116,4,0,124,1, - 0,124,4,0,124,0,0,106,3,0,131,3,0,83,100,1, - 0,83,100,1,0,83,40,2,0,0,0,117,98,0,0,0, - 70,105,110,100,32,116,104,101,32,109,111,100,117,108,101,32, - 111,110,32,115,121,115,46,112,97,116,104,32,111,114,32,39, - 112,97,116,104,39,32,98,97,115,101,100,32,111,110,32,115, - 121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,110, - 100,10,32,32,32,32,32,32,32,32,115,121,115,46,112,97, - 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, - 101,46,78,40,5,0,0,0,117,4,0,0,0,78,111,110, - 101,117,3,0,0,0,115,121,115,117,4,0,0,0,112,97, - 116,104,117,11,0,0,0,95,103,101,116,95,108,111,97,100, - 101,114,117,15,0,0,0,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,40,5,0,0,0,117,3,0,0,0, - 99,108,115,117,8,0,0,0,102,117,108,108,110,97,109,101, - 117,4,0,0,0,112,97,116,104,117,6,0,0,0,108,111, - 97,100,101,114,117,14,0,0,0,110,97,109,101,115,112,97, - 99,101,95,112,97,116,104,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,11,0,0,0,102,105,110,100,95,109,111,100, - 117,108,101,23,5,0,0,115,16,0,0,0,0,4,12,1, - 12,1,24,1,12,1,4,2,6,3,19,2,117,22,0,0, - 0,80,97,116,104,70,105,110,100,101,114,46,102,105,110,100, - 95,109,111,100,117,108,101,78,40,11,0,0,0,117,8,0, - 0,0,95,95,110,97,109,101,95,95,117,10,0,0,0,95, - 95,109,111,100,117,108,101,95,95,117,12,0,0,0,95,95, - 113,117,97,108,110,97,109,101,95,95,117,7,0,0,0,95, - 95,100,111,99,95,95,117,11,0,0,0,99,108,97,115,115, - 109,101,116,104,111,100,117,17,0,0,0,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,117,11,0,0, - 0,95,112,97,116,104,95,104,111,111,107,115,117,20,0,0, - 0,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,117,11,0,0,0,95,103,101,116,95,108, - 111,97,100,101,114,117,4,0,0,0,78,111,110,101,117,11, - 0,0,0,102,105,110,100,95,109,111,100,117,108,101,40,1, - 0,0,0,117,10,0,0,0,95,95,108,111,99,97,108,115, - 95,95,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,10, - 0,0,0,80,97,116,104,70,105,110,100,101,114,206,4,0, - 0,115,14,0,0,0,16,2,6,2,18,8,18,17,18,17, - 18,27,3,1,117,10,0,0,0,80,97,116,104,70,105,110, - 100,101,114,99,1,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,66,0,0,0,115,110,0,0,0,124,0,0, - 69,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, - 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,100, - 4,0,100,5,0,132,0,0,90,5,0,101,6,0,90,7, - 0,100,6,0,100,7,0,132,0,0,90,8,0,100,8,0, - 100,9,0,132,0,0,90,9,0,101,10,0,100,10,0,100, - 11,0,132,0,0,131,1,0,90,11,0,100,12,0,100,13, - 0,132,0,0,90,12,0,100,14,0,83,40,15,0,0,0, - 117,10,0,0,0,70,105,108,101,70,105,110,100,101,114,117, - 172,0,0,0,70,105,108,101,45,98,97,115,101,100,32,102, - 105,110,100,101,114,46,10,10,32,32,32,32,73,110,116,101, - 114,97,99,116,105,111,110,115,32,119,105,116,104,32,116,104, - 101,32,102,105,108,101,32,115,121,115,116,101,109,32,97,114, - 101,32,99,97,99,104,101,100,32,102,111,114,32,112,101,114, - 102,111,114,109,97,110,99,101,44,32,98,101,105,110,103,10, - 32,32,32,32,114,101,102,114,101,115,104,101,100,32,119,104, - 101,110,32,116,104,101,32,100,105,114,101,99,116,111,114,121, - 32,116,104,101,32,102,105,110,100,101,114,32,105,115,32,104, - 97,110,100,108,105,110,103,32,104,97,115,32,98,101,101,110, - 32,109,111,100,105,102,105,101,100,46,10,10,32,32,32,32, - 99,2,0,0,0,0,0,0,0,5,0,0,0,5,0,0, - 0,7,0,0,0,115,122,0,0,0,103,0,0,125,3,0, - 120,52,0,124,2,0,68,93,44,0,92,2,0,137,0,0, - 125,4,0,124,3,0,106,0,0,135,0,0,102,1,0,100, - 1,0,100,2,0,134,0,0,124,4,0,68,131,1,0,131, - 1,0,1,113,13,0,87,124,3,0,124,0,0,95,1,0, - 124,1,0,112,79,0,100,3,0,124,0,0,95,2,0,100, - 6,0,124,0,0,95,3,0,116,4,0,131,0,0,124,0, - 0,95,5,0,116,4,0,131,0,0,124,0,0,95,6,0, - 100,5,0,83,40,7,0,0,0,117,154,0,0,0,73,110, - 105,116,105,97,108,105,122,101,32,119,105,116,104,32,116,104, - 101,32,112,97,116,104,32,116,111,32,115,101,97,114,99,104, - 32,111,110,32,97,110,100,32,97,32,118,97,114,105,97,98, - 108,101,32,110,117,109,98,101,114,32,111,102,10,32,32,32, - 32,32,32,32,32,50,45,116,117,112,108,101,115,32,99,111, - 110,116,97,105,110,105,110,103,32,116,104,101,32,108,111,97, - 100,101,114,32,97,110,100,32,116,104,101,32,102,105,108,101, - 32,115,117,102,102,105,120,101,115,32,116,104,101,32,108,111, - 97,100,101,114,10,32,32,32,32,32,32,32,32,114,101,99, - 111,103,110,105,122,101,115,46,99,1,0,0,0,0,0,0, - 0,2,0,0,0,3,0,0,0,51,0,0,0,115,27,0, - 0,0,124,0,0,93,17,0,125,1,0,124,1,0,136,0, - 0,102,2,0,86,1,113,3,0,100,0,0,83,40,1,0, - 0,0,78,40,0,0,0,0,40,2,0,0,0,117,2,0, - 0,0,46,48,117,6,0,0,0,115,117,102,102,105,120,40, - 1,0,0,0,117,6,0,0,0,108,111,97,100,101,114,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,9,0,0,0,60,103,101,110,101, - 120,112,114,62,56,5,0,0,115,2,0,0,0,6,0,117, - 38,0,0,0,70,105,108,101,70,105,110,100,101,114,46,95, - 95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,62, - 46,60,103,101,110,101,120,112,114,62,117,1,0,0,0,46, - 105,1,0,0,0,78,105,255,255,255,255,40,7,0,0,0, - 117,6,0,0,0,101,120,116,101,110,100,117,8,0,0,0, - 95,108,111,97,100,101,114,115,117,4,0,0,0,112,97,116, - 104,117,11,0,0,0,95,112,97,116,104,95,109,116,105,109, - 101,117,3,0,0,0,115,101,116,117,11,0,0,0,95,112, - 97,116,104,95,99,97,99,104,101,117,19,0,0,0,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,40,5,0,0,0,117,4,0,0,0,115,101,108,102,117, - 4,0,0,0,112,97,116,104,117,14,0,0,0,108,111,97, - 100,101,114,95,100,101,116,97,105,108,115,117,7,0,0,0, - 108,111,97,100,101,114,115,117,8,0,0,0,115,117,102,102, - 105,120,101,115,40,0,0,0,0,40,1,0,0,0,117,6, - 0,0,0,108,111,97,100,101,114,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,95,105,110,105,116,95,95,50,5,0,0,115,16,0,0, - 0,0,4,6,1,19,1,36,1,9,2,15,1,9,1,12, - 1,117,19,0,0,0,70,105,108,101,70,105,110,100,101,114, - 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, - 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,13, - 0,0,0,100,3,0,124,0,0,95,0,0,100,2,0,83, - 40,4,0,0,0,117,31,0,0,0,73,110,118,97,108,105, - 100,97,116,101,32,116,104,101,32,100,105,114,101,99,116,111, - 114,121,32,109,116,105,109,101,46,105,1,0,0,0,78,105, - 255,255,255,255,40,1,0,0,0,117,11,0,0,0,95,112, - 97,116,104,95,109,116,105,109,101,40,1,0,0,0,117,4, - 0,0,0,115,101,108,102,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,17,0,0,0,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,64,5,0,0,115,2,0, - 0,0,0,2,117,28,0,0,0,70,105,108,101,70,105,110, - 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, - 97,99,104,101,115,99,2,0,0,0,0,0,0,0,12,0, - 0,0,13,0,0,0,67,0,0,0,115,216,1,0,0,100, - 8,0,125,2,0,124,1,0,106,1,0,100,1,0,131,1, - 0,100,2,0,25,125,3,0,121,25,0,116,2,0,106,3, - 0,124,0,0,106,4,0,131,1,0,106,5,0,125,4,0, - 87,110,24,0,4,116,6,0,107,10,0,114,76,0,1,1, - 1,100,9,0,125,4,0,89,110,1,0,88,124,4,0,124, - 0,0,106,7,0,107,3,0,114,114,0,124,0,0,106,8, - 0,131,0,0,1,124,4,0,124,0,0,95,7,0,110,0, - 0,116,9,0,131,0,0,114,147,0,124,0,0,106,10,0, - 125,5,0,124,3,0,106,11,0,131,0,0,125,6,0,110, - 15,0,124,0,0,106,12,0,125,5,0,124,3,0,125,6, - 0,124,6,0,124,5,0,107,6,0,114,45,1,116,13,0, - 124,0,0,106,4,0,124,3,0,131,2,0,125,7,0,116, - 14,0,124,7,0,131,1,0,114,45,1,120,91,0,124,0, - 0,106,15,0,68,93,71,0,92,2,0,125,8,0,125,9, - 0,100,4,0,124,8,0,23,125,10,0,116,13,0,124,7, - 0,124,10,0,131,2,0,125,11,0,116,16,0,124,11,0, - 131,1,0,114,214,0,124,9,0,124,1,0,124,11,0,131, - 2,0,124,7,0,103,1,0,102,2,0,83,113,214,0,87, - 100,10,0,125,2,0,113,45,1,110,0,0,120,120,0,124, - 0,0,106,15,0,68,93,109,0,92,2,0,125,8,0,125, - 9,0,116,13,0,124,0,0,106,4,0,124,3,0,124,8, - 0,23,131,2,0,125,11,0,116,18,0,100,5,0,106,19, - 0,124,11,0,131,1,0,100,6,0,100,2,0,131,1,1, - 1,124,6,0,124,8,0,23,124,5,0,107,6,0,114,55, - 1,116,16,0,124,11,0,131,1,0,114,164,1,124,9,0, - 124,1,0,124,11,0,131,2,0,103,0,0,102,2,0,83, - 113,55,1,113,55,1,87,124,2,0,114,206,1,116,18,0, - 100,7,0,106,19,0,124,7,0,131,1,0,131,1,0,1, - 100,11,0,124,7,0,103,1,0,102,2,0,83,100,11,0, - 103,0,0,102,2,0,83,40,12,0,0,0,117,125,0,0, - 0,84,114,121,32,116,111,32,102,105,110,100,32,97,32,108, - 111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,32, - 111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,101, - 10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101, - 32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,114, - 110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,116, - 45,111,102,45,112,111,114,116,105,111,110,115,41,46,117,1, - 0,0,0,46,105,2,0,0,0,105,1,0,0,0,117,8, - 0,0,0,95,95,105,110,105,116,95,95,117,9,0,0,0, - 116,114,121,105,110,103,32,123,125,117,9,0,0,0,118,101, - 114,98,111,115,105,116,121,117,25,0,0,0,112,111,115,115, - 105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,102, - 111,114,32,123,125,70,105,255,255,255,255,84,78,40,21,0, - 0,0,117,5,0,0,0,70,97,108,115,101,117,10,0,0, - 0,114,112,97,114,116,105,116,105,111,110,117,3,0,0,0, - 95,111,115,117,4,0,0,0,115,116,97,116,117,4,0,0, - 0,112,97,116,104,117,8,0,0,0,115,116,95,109,116,105, - 109,101,117,7,0,0,0,79,83,69,114,114,111,114,117,11, - 0,0,0,95,112,97,116,104,95,109,116,105,109,101,117,11, - 0,0,0,95,102,105,108,108,95,99,97,99,104,101,117,11, - 0,0,0,95,114,101,108,97,120,95,99,97,115,101,117,19, - 0,0,0,95,114,101,108,97,120,101,100,95,112,97,116,104, - 95,99,97,99,104,101,117,5,0,0,0,108,111,119,101,114, - 117,11,0,0,0,95,112,97,116,104,95,99,97,99,104,101, - 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,105,115,100,105,114,117, - 8,0,0,0,95,108,111,97,100,101,114,115,117,12,0,0, - 0,95,112,97,116,104,95,105,115,102,105,108,101,117,4,0, - 0,0,84,114,117,101,117,16,0,0,0,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,117,6,0,0,0, - 102,111,114,109,97,116,117,4,0,0,0,78,111,110,101,40, - 12,0,0,0,117,4,0,0,0,115,101,108,102,117,8,0, - 0,0,102,117,108,108,110,97,109,101,117,12,0,0,0,105, - 115,95,110,97,109,101,115,112,97,99,101,117,11,0,0,0, - 116,97,105,108,95,109,111,100,117,108,101,117,5,0,0,0, - 109,116,105,109,101,117,5,0,0,0,99,97,99,104,101,117, - 12,0,0,0,99,97,99,104,101,95,109,111,100,117,108,101, - 117,9,0,0,0,98,97,115,101,95,112,97,116,104,117,6, - 0,0,0,115,117,102,102,105,120,117,6,0,0,0,108,111, - 97,100,101,114,117,13,0,0,0,105,110,105,116,95,102,105, - 108,101,110,97,109,101,117,9,0,0,0,102,117,108,108,95, - 112,97,116,104,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,11,0,0,0,102,105,110,100,95,108,111,97,100,101,114, - 70,5,0,0,115,66,0,0,0,0,3,6,1,19,1,3, - 1,25,1,13,1,11,1,15,1,10,1,12,2,9,1,9, - 1,15,2,9,1,6,2,12,1,18,1,12,1,22,1,10, - 1,15,1,12,1,26,4,12,2,22,1,22,1,25,1,16, - 1,12,1,26,1,6,1,19,1,13,1,117,22,0,0,0, - 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, - 108,111,97,100,101,114,99,1,0,0,0,0,0,0,0,9, - 0,0,0,13,0,0,0,67,0,0,0,115,8,1,0,0, - 124,0,0,106,0,0,125,1,0,121,19,0,116,1,0,106, - 2,0,124,1,0,131,1,0,125,2,0,87,110,33,0,4, - 116,3,0,116,4,0,116,5,0,102,3,0,107,10,0,114, - 63,0,1,1,1,103,0,0,125,2,0,89,110,1,0,88, - 116,6,0,106,7,0,106,8,0,100,1,0,131,1,0,115, - 100,0,116,9,0,124,2,0,131,1,0,124,0,0,95,10, - 0,110,111,0,116,9,0,131,0,0,125,3,0,120,90,0, - 124,2,0,68,93,82,0,125,4,0,124,4,0,106,11,0, - 100,2,0,131,1,0,92,3,0,125,5,0,125,6,0,125, - 7,0,124,6,0,114,179,0,100,3,0,106,12,0,124,5, - 0,124,7,0,106,13,0,131,0,0,131,2,0,125,8,0, - 110,6,0,124,5,0,125,8,0,124,3,0,106,14,0,124, - 8,0,131,1,0,1,113,116,0,87,124,3,0,124,0,0, - 95,10,0,116,6,0,106,7,0,106,8,0,116,15,0,131, - 1,0,114,4,1,116,9,0,100,4,0,100,5,0,132,0, - 0,124,2,0,68,131,1,0,131,1,0,124,0,0,95,16, - 0,110,0,0,100,6,0,83,40,7,0,0,0,117,68,0, - 0,0,70,105,108,108,32,116,104,101,32,99,97,99,104,101, - 32,111,102,32,112,111,116,101,110,116,105,97,108,32,109,111, - 100,117,108,101,115,32,97,110,100,32,112,97,99,107,97,103, - 101,115,32,102,111,114,32,116,104,105,115,32,100,105,114,101, - 99,116,111,114,121,46,117,3,0,0,0,119,105,110,117,1, - 0,0,0,46,117,5,0,0,0,123,125,46,123,125,99,1, - 0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,115, - 0,0,0,115,27,0,0,0,124,0,0,93,17,0,125,1, - 0,124,1,0,106,0,0,131,0,0,86,1,113,3,0,100, - 0,0,83,40,1,0,0,0,78,40,1,0,0,0,117,5, - 0,0,0,108,111,119,101,114,40,2,0,0,0,117,2,0, - 0,0,46,48,117,2,0,0,0,102,110,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,9,0,0,0,60,103,101,110, - 101,120,112,114,62,143,5,0,0,115,2,0,0,0,6,0, - 117,41,0,0,0,70,105,108,101,70,105,110,100,101,114,46, - 95,102,105,108,108,95,99,97,99,104,101,46,60,108,111,99, - 97,108,115,62,46,60,103,101,110,101,120,112,114,62,78,40, - 17,0,0,0,117,4,0,0,0,112,97,116,104,117,3,0, - 0,0,95,111,115,117,7,0,0,0,108,105,115,116,100,105, - 114,117,17,0,0,0,70,105,108,101,78,111,116,70,111,117, - 110,100,69,114,114,111,114,117,15,0,0,0,80,101,114,109, - 105,115,115,105,111,110,69,114,114,111,114,117,18,0,0,0, + 97,99,107,97,103,101,32,110,97,109,101,46,78,114,10,1, + 0,0,122,19,115,112,101,99,32,109,105,115,115,105,110,103, + 32,108,111,97,100,101,114,41,12,114,192,0,0,0,218,3, + 115,116,114,218,5,98,121,116,101,115,114,79,1,0,0,114, + 60,0,0,0,114,10,1,0,0,114,80,1,0,0,114,169, + 0,0,0,114,220,0,0,0,114,153,0,0,0,114,197,0, + 0,0,114,216,0,0,0,41,9,114,8,1,0,0,114,158, + 0,0,0,114,35,0,0,0,114,9,1,0,0,218,14,110, + 97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101, + 110,116,114,121,114,76,1,0,0,114,177,0,0,0,114,170, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,9,95,103,101,116,95,115,112,101,99,86,7,0, + 0,115,40,0,0,0,0,5,6,1,13,1,21,1,6,1, + 15,1,12,1,15,1,21,2,18,1,12,1,6,1,15,1, + 4,1,9,1,12,1,15,5,20,2,15,1,9,1,122,20, + 80,97,116,104,70,105,110,100,101,114,46,95,103,101,116,95, + 115,112,101,99,99,4,0,0,0,0,0,0,0,6,0,0, + 0,4,0,0,0,67,0,0,0,115,143,0,0,0,124,2, + 0,100,1,0,107,8,0,114,24,0,116,0,0,106,1,0, + 125,2,0,110,0,0,124,0,0,106,2,0,124,1,0,124, + 2,0,124,3,0,131,3,0,125,4,0,124,4,0,100,1, + 0,107,8,0,114,61,0,100,1,0,83,124,4,0,106,3, + 0,100,1,0,107,8,0,114,135,0,124,4,0,106,4,0, + 125,5,0,124,5,0,114,128,0,100,2,0,124,4,0,95, + 5,0,116,6,0,124,1,0,124,5,0,124,0,0,106,2, + 0,131,3,0,124,4,0,95,4,0,124,4,0,83,100,1, + 0,83,110,4,0,124,4,0,83,100,1,0,83,41,3,122, + 98,102,105,110,100,32,116,104,101,32,109,111,100,117,108,101, + 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, + 39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32, + 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, + 110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, + 104,101,46,78,90,9,110,97,109,101,115,112,97,99,101,41, + 7,114,7,0,0,0,114,35,0,0,0,114,84,1,0,0, + 114,169,0,0,0,114,220,0,0,0,114,217,0,0,0,114, + 59,1,0,0,41,6,114,8,1,0,0,114,158,0,0,0, + 114,35,0,0,0,114,9,1,0,0,114,177,0,0,0,114, + 83,1,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,10,1,0,0,118,7,0,0,115,26,0,0, + 0,0,4,12,1,12,1,21,1,12,1,4,1,15,1,9, + 1,6,3,9,1,24,1,4,2,7,2,122,20,80,97,116, + 104,70,105,110,100,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,41,0,0,0,124,0,0,106,0, + 0,124,1,0,124,2,0,131,2,0,125,3,0,124,3,0, + 100,1,0,107,8,0,114,34,0,100,1,0,83,124,3,0, + 106,1,0,83,41,2,122,170,102,105,110,100,32,116,104,101, + 32,109,111,100,117,108,101,32,111,110,32,115,121,115,46,112, + 97,116,104,32,111,114,32,39,112,97,116,104,39,32,98,97, + 115,101,100,32,111,110,32,115,121,115,46,112,97,116,104,95, + 104,111,111,107,115,32,97,110,100,10,32,32,32,32,32,32, + 32,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,78,41,2,114,10,1,0,0,114,169,0,0,0,41, + 4,114,8,1,0,0,114,158,0,0,0,114,35,0,0,0, + 114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,11,1,0,0,140,7,0,0,115,8,0, + 0,0,0,8,18,1,12,1,4,1,122,22,80,97,116,104, + 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117, + 108,101,41,12,114,57,0,0,0,114,56,0,0,0,114,58, + 0,0,0,114,59,0,0,0,114,15,1,0,0,114,73,1, + 0,0,114,78,1,0,0,114,79,1,0,0,114,80,1,0, + 0,114,84,1,0,0,114,10,1,0,0,114,11,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,72,1,0,0,25,7,0,0,115,22,0, + 0,0,12,2,6,2,18,8,18,17,18,17,18,15,3,1, + 18,31,3,1,21,21,3,1,114,72,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, + 0,0,115,133,0,0,0,101,0,0,90,1,0,100,0,0, + 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, + 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, + 0,101,6,0,90,7,0,100,6,0,100,7,0,132,0,0, + 90,8,0,100,8,0,100,9,0,132,0,0,90,9,0,100, + 10,0,100,11,0,100,12,0,132,1,0,90,10,0,100,13, + 0,100,14,0,132,0,0,90,11,0,101,12,0,100,15,0, + 100,16,0,132,0,0,131,1,0,90,13,0,100,17,0,100, + 18,0,132,0,0,90,14,0,100,10,0,83,41,19,218,10, + 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, + 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, + 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, + 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, + 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, + 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, + 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, + 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, + 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, + 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, + 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, + 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, + 0,5,0,0,0,5,0,0,0,7,0,0,0,115,122,0, + 0,0,103,0,0,125,3,0,120,52,0,124,2,0,68,93, + 44,0,92,2,0,137,0,0,125,4,0,124,3,0,106,0, + 0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0, + 124,4,0,68,131,1,0,131,1,0,1,113,13,0,87,124, + 3,0,124,0,0,95,1,0,124,1,0,112,79,0,100,3, + 0,124,0,0,95,2,0,100,6,0,124,0,0,95,3,0, + 116,4,0,131,0,0,124,0,0,95,5,0,116,4,0,131, + 0,0,124,0,0,95,6,0,100,5,0,83,41,7,122,154, + 73,110,105,116,105,97,108,105,122,101,32,119,105,116,104,32, + 116,104,101,32,112,97,116,104,32,116,111,32,115,101,97,114, + 99,104,32,111,110,32,97,110,100,32,97,32,118,97,114,105, + 97,98,108,101,32,110,117,109,98,101,114,32,111,102,10,32, + 32,32,32,32,32,32,32,50,45,116,117,112,108,101,115,32, + 99,111,110,116,97,105,110,105,110,103,32,116,104,101,32,108, + 111,97,100,101,114,32,97,110,100,32,116,104,101,32,102,105, + 108,101,32,115,117,102,102,105,120,101,115,32,116,104,101,32, + 108,111,97,100,101,114,10,32,32,32,32,32,32,32,32,114, + 101,99,111,103,110,105,122,101,115,46,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,51,0,0,0,115, + 27,0,0,0,124,0,0,93,17,0,125,1,0,124,1,0, + 136,0,0,102,2,0,86,1,113,3,0,100,0,0,83,41, + 1,78,114,4,0,0,0,41,2,114,22,0,0,0,114,56, + 1,0,0,41,1,114,169,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,77,0,0,0,169,7,0,0,115,2,0, + 0,0,6,0,122,38,70,105,108,101,70,105,110,100,101,114, + 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, + 115,62,46,60,103,101,110,101,120,112,114,62,114,116,0,0, + 0,114,29,0,0,0,78,114,138,0,0,0,41,7,114,197, + 0,0,0,218,8,95,108,111,97,100,101,114,115,114,35,0, + 0,0,218,11,95,112,97,116,104,95,109,116,105,109,101,218, + 3,115,101,116,218,11,95,112,97,116,104,95,99,97,99,104, + 101,218,19,95,114,101,108,97,120,101,100,95,112,97,116,104, + 95,99,97,99,104,101,41,5,114,71,0,0,0,114,35,0, + 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, + 108,115,90,7,108,111,97,100,101,114,115,114,127,0,0,0, + 114,4,0,0,0,41,1,114,169,0,0,0,114,5,0,0, + 0,114,72,0,0,0,163,7,0,0,115,16,0,0,0,0, + 4,6,1,19,1,36,1,9,2,15,1,9,1,12,1,122, + 19,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, + 105,116,95,95,99,1,0,0,0,0,0,0,0,1,0,0, + 0,2,0,0,0,67,0,0,0,115,13,0,0,0,100,3, + 0,124,0,0,95,0,0,100,2,0,83,41,4,122,31,73, + 110,118,97,108,105,100,97,116,101,32,116,104,101,32,100,105, + 114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,29, + 0,0,0,78,114,138,0,0,0,41,1,114,87,1,0,0, + 41,1,114,71,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,73,1,0,0,177,7,0,0,115, + 2,0,0,0,0,2,122,28,70,105,108,101,70,105,110,100, + 101,114,46,105,110,118,97,108,105,100,97,116,101,95,99,97, + 99,104,101,115,99,2,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,59,0,0,0,124,0, + 0,106,0,0,124,1,0,131,1,0,125,2,0,124,2,0, + 100,1,0,107,8,0,114,37,0,100,1,0,103,0,0,102, + 2,0,83,124,2,0,106,1,0,124,2,0,106,2,0,112, + 55,0,103,0,0,102,2,0,83,41,2,122,197,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, + 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, + 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, + 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, + 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, + 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, + 112,111,114,116,105,111,110,115,41,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,78,41,3,114,10,1,0,0,114,169,0,0,0,114, + 220,0,0,0,41,3,114,71,0,0,0,114,158,0,0,0, + 114,177,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,165,0,0,0,183,7,0,0,115,8,0, + 0,0,0,7,15,1,12,1,10,1,122,22,70,105,108,101, + 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, + 101,114,99,6,0,0,0,0,0,0,0,7,0,0,0,7, + 0,0,0,67,0,0,0,115,40,0,0,0,124,1,0,124, + 2,0,124,3,0,131,2,0,125,6,0,116,0,0,124,2, + 0,124,3,0,100,1,0,124,6,0,100,2,0,124,4,0, + 131,2,2,83,41,3,78,114,169,0,0,0,114,220,0,0, + 0,41,1,114,239,0,0,0,41,7,114,71,0,0,0,114, + 243,0,0,0,114,158,0,0,0,114,35,0,0,0,114,228, + 0,0,0,114,9,1,0,0,114,169,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,84,1,0, + 0,195,7,0,0,115,6,0,0,0,0,1,15,1,18,1, + 122,20,70,105,108,101,70,105,110,100,101,114,46,95,103,101, + 116,95,115,112,101,99,78,99,3,0,0,0,0,0,0,0, + 14,0,0,0,15,0,0,0,67,0,0,0,115,240,1,0, + 0,100,1,0,125,3,0,124,1,0,106,0,0,100,2,0, + 131,1,0,100,3,0,25,125,4,0,121,34,0,116,1,0, + 124,0,0,106,2,0,112,49,0,116,3,0,106,4,0,131, + 0,0,131,1,0,106,5,0,125,5,0,87,110,24,0,4, + 116,6,0,107,10,0,114,85,0,1,1,1,100,10,0,125, + 5,0,89,110,1,0,88,124,5,0,124,0,0,106,7,0, + 107,3,0,114,123,0,124,0,0,106,8,0,131,0,0,1, + 124,5,0,124,0,0,95,7,0,110,0,0,116,9,0,131, + 0,0,114,156,0,124,0,0,106,10,0,125,6,0,124,4, + 0,106,11,0,131,0,0,125,7,0,110,15,0,124,0,0, + 106,12,0,125,6,0,124,4,0,125,7,0,124,7,0,124, + 6,0,107,6,0,114,51,1,116,13,0,124,0,0,106,2, + 0,124,4,0,131,2,0,125,8,0,120,103,0,124,0,0, + 106,14,0,68,93,77,0,92,2,0,125,9,0,125,10,0, + 100,5,0,124,9,0,23,125,11,0,116,13,0,124,8,0, + 124,11,0,131,2,0,125,12,0,116,15,0,124,12,0,131, + 1,0,114,211,0,124,0,0,106,16,0,124,10,0,124,1, + 0,124,12,0,124,8,0,103,1,0,124,2,0,131,5,0, + 83,113,211,0,87,116,17,0,124,8,0,131,1,0,125,3, + 0,110,0,0,120,126,0,124,0,0,106,14,0,68,93,115, + 0,92,2,0,125,9,0,125,10,0,116,13,0,124,0,0, + 106,2,0,124,4,0,124,9,0,23,131,2,0,125,12,0, + 116,18,0,100,6,0,106,19,0,124,12,0,131,1,0,100, + 7,0,100,3,0,131,1,1,1,124,7,0,124,9,0,23, + 124,6,0,107,6,0,114,61,1,116,15,0,124,12,0,131, + 1,0,114,176,1,124,0,0,106,16,0,124,10,0,124,1, + 0,124,12,0,100,8,0,124,2,0,131,5,0,83,113,61, + 1,113,61,1,87,124,3,0,114,236,1,116,18,0,100,9, + 0,106,19,0,124,8,0,131,1,0,131,1,0,1,116,20, + 0,124,1,0,100,8,0,131,2,0,125,13,0,124,8,0, + 103,1,0,124,13,0,95,21,0,124,13,0,83,100,8,0, + 83,41,11,122,125,84,114,121,32,116,111,32,102,105,110,100, + 32,97,32,108,111,97,100,101,114,32,102,111,114,32,116,104, + 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, + 108,101,44,32,111,114,32,116,104,101,32,110,97,109,101,115, + 112,97,99,101,10,32,32,32,32,32,32,32,32,112,97,99, + 107,97,103,101,32,112,111,114,116,105,111,110,115,46,32,82, + 101,116,117,114,110,115,32,40,108,111,97,100,101,114,44,32, + 108,105,115,116,45,111,102,45,112,111,114,116,105,111,110,115, + 41,46,70,114,116,0,0,0,114,115,0,0,0,114,29,0, + 0,0,114,72,0,0,0,122,9,116,114,121,105,110,103,32, + 123,125,114,145,0,0,0,78,122,25,112,111,115,115,105,98, + 108,101,32,110,97,109,101,115,112,97,99,101,32,102,111,114, + 32,123,125,114,138,0,0,0,41,22,114,32,0,0,0,114, + 39,0,0,0,114,35,0,0,0,114,3,0,0,0,114,45, + 0,0,0,114,51,1,0,0,114,40,0,0,0,114,87,1, + 0,0,218,11,95,102,105,108,108,95,99,97,99,104,101,114, + 6,0,0,0,114,90,1,0,0,114,139,0,0,0,114,89, + 1,0,0,114,28,0,0,0,114,86,1,0,0,114,44,0, + 0,0,114,84,1,0,0,114,46,0,0,0,114,152,0,0, + 0,114,47,0,0,0,114,216,0,0,0,114,220,0,0,0, + 41,14,114,71,0,0,0,114,158,0,0,0,114,9,1,0, + 0,90,12,105,115,95,110,97,109,101,115,112,97,99,101,90, + 11,116,97,105,108,95,109,111,100,117,108,101,114,183,0,0, + 0,90,5,99,97,99,104,101,90,12,99,97,99,104,101,95, + 109,111,100,117,108,101,90,9,98,97,115,101,95,112,97,116, + 104,114,56,1,0,0,114,243,0,0,0,90,13,105,110,105, + 116,95,102,105,108,101,110,97,109,101,90,9,102,117,108,108, + 95,112,97,116,104,114,177,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,10,1,0,0,200,7, + 0,0,115,68,0,0,0,0,3,6,1,19,1,3,1,34, + 1,13,1,11,1,15,1,10,1,12,2,9,1,9,1,15, + 2,9,1,6,2,12,1,18,1,22,1,10,1,15,1,12, + 1,32,4,15,2,22,1,22,1,25,1,16,1,12,1,32, + 1,6,1,19,1,15,1,12,1,4,1,122,20,70,105,108, + 101,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, + 99,99,1,0,0,0,0,0,0,0,9,0,0,0,13,0, + 0,0,67,0,0,0,115,14,1,0,0,124,0,0,106,0, + 0,125,1,0,121,31,0,116,1,0,106,2,0,124,1,0, + 112,33,0,116,1,0,106,3,0,131,0,0,131,1,0,125, + 2,0,87,110,33,0,4,116,4,0,116,5,0,116,6,0, + 102,3,0,107,10,0,114,75,0,1,1,1,103,0,0,125, + 2,0,89,110,1,0,88,116,7,0,106,8,0,106,9,0, + 100,1,0,131,1,0,115,112,0,116,10,0,124,2,0,131, + 1,0,124,0,0,95,11,0,110,111,0,116,10,0,131,0, + 0,125,3,0,120,90,0,124,2,0,68,93,82,0,125,4, + 0,124,4,0,106,12,0,100,2,0,131,1,0,92,3,0, + 125,5,0,125,6,0,125,7,0,124,6,0,114,191,0,100, + 3,0,106,13,0,124,5,0,124,7,0,106,14,0,131,0, + 0,131,2,0,125,8,0,110,6,0,124,5,0,125,8,0, + 124,3,0,106,15,0,124,8,0,131,1,0,1,113,128,0, + 87,124,3,0,124,0,0,95,11,0,116,7,0,106,8,0, + 106,9,0,116,16,0,131,1,0,114,10,1,100,4,0,100, + 5,0,132,0,0,124,2,0,68,131,1,0,124,0,0,95, + 17,0,110,0,0,100,6,0,83,41,7,122,68,70,105,108, + 108,32,116,104,101,32,99,97,99,104,101,32,111,102,32,112, + 111,116,101,110,116,105,97,108,32,109,111,100,117,108,101,115, + 32,97,110,100,32,112,97,99,107,97,103,101,115,32,102,111, + 114,32,116,104,105,115,32,100,105,114,101,99,116,111,114,121, + 46,114,0,0,0,0,114,116,0,0,0,122,5,123,125,46, + 123,125,99,1,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,83,0,0,0,115,28,0,0,0,104,0,0,124, + 0,0,93,18,0,125,1,0,124,1,0,106,0,0,131,0, + 0,146,2,0,113,6,0,83,114,4,0,0,0,41,1,114, + 139,0,0,0,41,2,114,22,0,0,0,90,2,102,110,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,250,9, + 60,115,101,116,99,111,109,112,62,18,8,0,0,115,2,0, + 0,0,9,0,122,41,70,105,108,101,70,105,110,100,101,114, + 46,95,102,105,108,108,95,99,97,99,104,101,46,60,108,111, + 99,97,108,115,62,46,60,115,101,116,99,111,109,112,62,78, + 41,18,114,35,0,0,0,114,3,0,0,0,90,7,108,105, + 115,116,100,105,114,114,45,0,0,0,218,17,70,105,108,101, + 78,111,116,70,111,117,110,100,69,114,114,111,114,218,15,80, + 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, - 111,114,117,3,0,0,0,115,121,115,117,8,0,0,0,112, - 108,97,116,102,111,114,109,117,10,0,0,0,115,116,97,114, - 116,115,119,105,116,104,117,3,0,0,0,115,101,116,117,11, - 0,0,0,95,112,97,116,104,95,99,97,99,104,101,117,9, - 0,0,0,112,97,114,116,105,116,105,111,110,117,6,0,0, - 0,102,111,114,109,97,116,117,5,0,0,0,108,111,119,101, - 114,117,3,0,0,0,97,100,100,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,19,0,0,0,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,40,9,0,0,0,117,4,0,0,0,115,101,108,102,117, - 4,0,0,0,112,97,116,104,117,8,0,0,0,99,111,110, - 116,101,110,116,115,117,21,0,0,0,108,111,119,101,114,95, - 115,117,102,102,105,120,95,99,111,110,116,101,110,116,115,117, - 4,0,0,0,105,116,101,109,117,4,0,0,0,110,97,109, - 101,117,3,0,0,0,100,111,116,117,6,0,0,0,115,117, - 102,102,105,120,117,8,0,0,0,110,101,119,95,110,97,109, - 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,11,0, - 0,0,95,102,105,108,108,95,99,97,99,104,101,114,5,0, - 0,115,34,0,0,0,0,2,9,1,3,1,19,1,22,3, - 11,3,18,1,18,7,9,1,13,1,24,1,6,1,27,2, - 6,1,17,1,9,1,18,1,117,22,0,0,0,70,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,135,0,0, - 135,1,0,102,2,0,100,1,0,100,2,0,134,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,32,99, - 108,111,115,117,114,101,32,116,111,32,117,115,101,32,111,110, - 32,115,121,115,46,112,97,116,104,95,104,111,111,107,10,32, - 32,32,32,32,32,32,32,119,104,105,99,104,32,119,105,108, - 108,32,114,101,116,117,114,110,32,97,110,32,105,110,115,116, - 97,110,99,101,32,117,115,105,110,103,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,108,111,97,100,101,114,115, - 32,97,110,100,32,116,104,101,32,112,97,116,104,10,32,32, - 32,32,32,32,32,32,99,97,108,108,101,100,32,111,110,32, - 116,104,101,32,99,108,111,115,117,114,101,46,10,10,32,32, - 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, - 104,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, - 99,108,111,115,117,114,101,32,105,115,32,110,111,116,32,97, - 32,100,105,114,101,99,116,111,114,121,44,32,73,109,112,111, - 114,116,69,114,114,111,114,32,105,115,10,32,32,32,32,32, - 32,32,32,114,97,105,115,101,100,46,10,10,32,32,32,32, - 32,32,32,32,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, - 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,30,0,0,0,111,110,108,121,32,100,105,114, - 101,99,116,111,114,105,101,115,32,97,114,101,32,115,117,112, - 112,111,114,116,101,100,117,4,0,0,0,112,97,116,104,40, - 2,0,0,0,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,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,111,111,107,95,102,111,114,95,70,105,108,101, - 70,105,110,100,101,114,155,5,0,0,115,6,0,0,0,0, - 2,12,1,21,1,117,54,0,0,0,70,105,108,101,70,105, - 110,100,101,114,46,112,97,116,104,95,104,111,111,107,46,60, - 108,111,99,97,108,115,62,46,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,3,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,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,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,145,5,0,0,115,4,0,0,0, - 0,10,21,6,117,20,0,0,0,70,105,108,101,70,105,110, - 100,101,114,46,112,97,116,104,95,104,111,111,107,99,1,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, - 0,0,115,14,0,0,0,100,1,0,124,0,0,106,0,0, - 102,1,0,22,83,40,2,0,0,0,78,117,14,0,0,0, - 70,105,108,101,70,105,110,100,101,114,40,37,114,41,40,1, - 0,0,0,117,4,0,0,0,112,97,116,104,40,1,0,0, - 0,117,4,0,0,0,115,101,108,102,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,95,114,101,112, - 114,95,95,163,5,0,0,115,2,0,0,0,0,1,117,19, - 0,0,0,70,105,108,101,70,105,110,100,101,114,46,95,95, - 114,101,112,114,95,95,78,40,13,0,0,0,117,8,0,0, - 0,95,95,110,97,109,101,95,95,117,10,0,0,0,95,95, - 109,111,100,117,108,101,95,95,117,12,0,0,0,95,95,113, - 117,97,108,110,97,109,101,95,95,117,7,0,0,0,95,95, - 100,111,99,95,95,117,8,0,0,0,95,95,105,110,105,116, - 95,95,117,17,0,0,0,105,110,118,97,108,105,100,97,116, - 101,95,99,97,99,104,101,115,117,17,0,0,0,95,102,105, - 110,100,95,109,111,100,117,108,101,95,115,104,105,109,117,11, - 0,0,0,102,105,110,100,95,109,111,100,117,108,101,117,11, - 0,0,0,102,105,110,100,95,108,111,97,100,101,114,117,11, - 0,0,0,95,102,105,108,108,95,99,97,99,104,101,117,11, - 0,0,0,99,108,97,115,115,109,101,116,104,111,100,117,9, - 0,0,0,112,97,116,104,95,104,111,111,107,117,8,0,0, - 0,95,95,114,101,112,114,95,95,40,1,0,0,0,117,10, - 0,0,0,95,95,108,111,99,97,108,115,95,95,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,10,0,0,0,70,105, - 108,101,70,105,110,100,101,114,41,5,0,0,115,16,0,0, - 0,16,7,6,2,12,14,12,4,6,2,12,44,12,31,18, - 18,117,10,0,0,0,70,105,108,101,70,105,110,100,101,114, - 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, - 0,66,0,0,0,115,50,0,0,0,124,0,0,69,101,0, - 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, - 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, - 5,0,132,0,0,90,5,0,100,6,0,83,40,7,0,0, - 0,117,18,0,0,0,95,73,109,112,111,114,116,76,111,99, - 107,67,111,110,116,101,120,116,117,36,0,0,0,67,111,110, - 116,101,120,116,32,109,97,110,97,103,101,114,32,102,111,114, + 111,114,114,7,0,0,0,114,8,0,0,0,114,9,0,0, + 0,114,88,1,0,0,114,89,1,0,0,114,121,0,0,0, + 114,47,0,0,0,114,139,0,0,0,218,3,97,100,100,114, + 10,0,0,0,114,90,1,0,0,41,9,114,71,0,0,0, + 114,35,0,0,0,90,8,99,111,110,116,101,110,116,115,90, + 21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111, + 110,116,101,110,116,115,114,70,1,0,0,114,67,0,0,0, + 114,64,1,0,0,114,56,1,0,0,90,8,110,101,119,95, + 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,92,1,0,0,245,7,0,0,115,34,0,0, + 0,0,2,9,1,3,1,31,1,22,3,11,3,18,1,18, + 7,9,1,13,1,24,1,6,1,27,2,6,1,17,1,9, + 1,18,1,122,22,70,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,135,0,0,135,1,0,102,2,0,100,1, + 0,100,2,0,134,0,0,125,2,0,124,2,0,83,41,3, + 97,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,32,99,108,111,115,117,114,101,32,116,111,32,117, + 115,101,32,111,110,32,115,121,115,46,112,97,116,104,95,104, + 111,111,107,10,32,32,32,32,32,32,32,32,119,104,105,99, + 104,32,119,105,108,108,32,114,101,116,117,114,110,32,97,110, + 32,105,110,115,116,97,110,99,101,32,117,115,105,110,103,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,108,111, + 97,100,101,114,115,32,97,110,100,32,116,104,101,32,112,97, + 116,104,10,32,32,32,32,32,32,32,32,99,97,108,108,101, + 100,32,111,110,32,116,104,101,32,99,108,111,115,117,114,101, + 46,10,10,32,32,32,32,32,32,32,32,73,102,32,116,104, + 101,32,112,97,116,104,32,99,97,108,108,101,100,32,111,110, + 32,116,104,101,32,99,108,111,115,117,114,101,32,105,115,32, + 110,111,116,32,97,32,100,105,114,101,99,116,111,114,121,44, + 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,10, + 32,32,32,32,32,32,32,32,114,97,105,115,101,100,46,10, + 10,32,32,32,32,32,32,32,32,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,0,0,124,0,0,136,1,0,140,1,0, + 83,41,3,122,45,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,122,30,111,110,108,121,32,100,105,114,101,99,116,111, + 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, + 101,100,114,35,0,0,0,41,2,114,46,0,0,0,114,153, + 0,0,0,41,1,114,35,0,0,0,41,2,114,8,1,0, + 0,114,91,1,0,0,114,4,0,0,0,114,5,0,0,0, + 218,24,112,97,116,104,95,104,111,111,107,95,102,111,114,95, + 70,105,108,101,70,105,110,100,101,114,30,8,0,0,115,6, + 0,0,0,0,2,12,1,21,1,122,54,70,105,108,101,70, + 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,46, + 60,108,111,99,97,108,115,62,46,112,97,116,104,95,104,111, + 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, + 114,114,4,0,0,0,41,3,114,8,1,0,0,114,91,1, + 0,0,114,98,1,0,0,114,4,0,0,0,41,2,114,8, + 1,0,0,114,91,1,0,0,114,5,0,0,0,218,9,112, + 97,116,104,95,104,111,111,107,20,8,0,0,115,4,0,0, + 0,0,10,21,6,122,20,70,105,108,101,70,105,110,100,101, + 114,46,112,97,116,104,95,104,111,111,107,99,1,0,0,0, + 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, + 115,16,0,0,0,100,1,0,106,0,0,124,0,0,106,1, + 0,131,1,0,83,41,2,78,122,16,70,105,108,101,70,105, + 110,100,101,114,40,123,33,114,125,41,41,2,114,47,0,0, + 0,114,35,0,0,0,41,1,114,71,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,101,0,0, + 0,38,8,0,0,115,2,0,0,0,0,1,122,19,70,105, + 108,101,70,105,110,100,101,114,46,95,95,114,101,112,114,95, + 95,41,15,114,57,0,0,0,114,56,0,0,0,114,58,0, + 0,0,114,59,0,0,0,114,72,0,0,0,114,73,1,0, + 0,114,172,0,0,0,114,11,1,0,0,114,165,0,0,0, + 114,84,1,0,0,114,10,1,0,0,114,92,1,0,0,114, + 15,1,0,0,114,99,1,0,0,114,101,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,85,1,0,0,154,7,0,0,115,20,0,0,0, + 12,7,6,2,12,14,12,4,6,2,12,12,12,5,15,45, + 12,31,18,18,114,85,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,46, + 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, + 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, + 0,100,4,0,100,5,0,132,0,0,90,5,0,100,6,0, + 83,41,7,218,18,95,73,109,112,111,114,116,76,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,14,0,0,0,116,0,0,106,1,0,131,0,0, + 1,100,1,0,83,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,99,1,0,0,0,0,0,0,0,1,0,0,0,1,0, - 0,0,67,0,0,0,115,14,0,0,0,116,0,0,106,1, - 0,131,0,0,1,100,1,0,83,40,2,0,0,0,117,24, - 0,0,0,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,40,2,0,0, - 0,117,4,0,0,0,95,105,109,112,117,12,0,0,0,97, - 99,113,117,105,114,101,95,108,111,99,107,40,1,0,0,0, - 117,4,0,0,0,115,101,108,102,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,9,0,0,0,95,95,101,110,116,101, - 114,95,95,173,5,0,0,115,2,0,0,0,0,2,117,28, - 0,0,0,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,14,0,0,0,116,0,0,106,1,0,131, - 0,0,1,100,1,0,83,40,2,0,0,0,117,60,0,0, - 0,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,99,101,112,116,105,111,110,115,46,78,40,2, - 0,0,0,117,4,0,0,0,95,105,109,112,117,12,0,0, - 0,114,101,108,101,97,115,101,95,108,111,99,107,40,4,0, - 0,0,117,4,0,0,0,115,101,108,102,117,8,0,0,0, - 101,120,99,95,116,121,112,101,117,9,0,0,0,101,120,99, - 95,118,97,108,117,101,117,13,0,0,0,101,120,99,95,116, - 114,97,99,101,98,97,99,107,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,95,101,120,105,116,95, - 95,177,5,0,0,115,2,0,0,0,0,2,117,27,0,0, - 0,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, - 101,120,116,46,95,95,101,120,105,116,95,95,78,40,6,0, - 0,0,117,8,0,0,0,95,95,110,97,109,101,95,95,117, - 10,0,0,0,95,95,109,111,100,117,108,101,95,95,117,12, - 0,0,0,95,95,113,117,97,108,110,97,109,101,95,95,117, - 7,0,0,0,95,95,100,111,99,95,95,117,9,0,0,0, - 95,95,101,110,116,101,114,95,95,117,8,0,0,0,95,95, - 101,120,105,116,95,95,40,1,0,0,0,117,10,0,0,0, - 95,95,108,111,99,97,108,115,95,95,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,18,0,0,0,95,73,109,112,111, - 114,116,76,111,99,107,67,111,110,116,101,120,116,169,5,0, - 0,115,6,0,0,0,16,2,6,2,12,4,117,18,0,0, - 0,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, - 101,120,116,99,3,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,91,0,0,0,124,1,0, - 106,0,0,100,1,0,124,2,0,100,2,0,24,131,2,0, - 125,3,0,116,1,0,124,3,0,131,1,0,124,2,0,107, - 0,0,114,55,0,116,2,0,100,3,0,131,1,0,130,1, - 0,110,0,0,124,3,0,100,4,0,25,125,4,0,124,0, - 0,114,87,0,100,5,0,106,3,0,124,4,0,124,0,0, - 131,2,0,83,124,4,0,83,40,6,0,0,0,117,50,0, - 0,0,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,115,111,108,117,116,101,32, - 111,110,101,46,117,1,0,0,0,46,105,1,0,0,0,117, - 50,0,0,0,97,116,116,101,109,112,116,101,100,32,114,101, - 108,97,116,105,118,101,32,105,109,112,111,114,116,32,98,101, - 121,111,110,100,32,116,111,112,45,108,101,118,101,108,32,112, - 97,99,107,97,103,101,105,0,0,0,0,117,5,0,0,0, - 123,125,46,123,125,40,4,0,0,0,117,6,0,0,0,114, - 115,112,108,105,116,117,3,0,0,0,108,101,110,117,10,0, - 0,0,86,97,108,117,101,69,114,114,111,114,117,6,0,0, - 0,102,111,114,109,97,116,40,5,0,0,0,117,4,0,0, - 0,110,97,109,101,117,7,0,0,0,112,97,99,107,97,103, - 101,117,5,0,0,0,108,101,118,101,108,117,4,0,0,0, - 98,105,116,115,117,4,0,0,0,98,97,115,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,13,0,0,0,95,114, - 101,115,111,108,118,101,95,110,97,109,101,182,5,0,0,115, - 10,0,0,0,0,2,22,1,18,1,15,1,10,1,117,13, - 0,0,0,95,114,101,115,111,108,118,101,95,110,97,109,101, - 99,2,0,0,0,0,0,0,0,4,0,0,0,11,0,0, - 0,67,0,0,0,115,138,0,0,0,116,0,0,106,1,0, - 115,28,0,116,2,0,106,3,0,100,1,0,116,4,0,131, - 2,0,1,110,0,0,120,103,0,116,0,0,106,1,0,68, - 93,88,0,125,2,0,116,5,0,131,0,0,143,23,0,1, - 124,2,0,106,6,0,124,0,0,124,1,0,131,2,0,125, - 3,0,87,100,2,0,81,88,124,3,0,100,2,0,107,9, - 0,114,38,0,124,0,0,116,0,0,106,8,0,107,7,0, - 114,109,0,124,3,0,83,116,0,0,106,8,0,124,0,0, - 25,106,9,0,83,113,38,0,113,38,0,87,100,2,0,83, - 100,2,0,83,40,3,0,0,0,117,23,0,0,0,70,105, - 110,100,32,97,32,109,111,100,117,108,101,39,115,32,108,111, - 97,100,101,114,46,117,22,0,0,0,115,121,115,46,109,101, - 116,97,95,112,97,116,104,32,105,115,32,101,109,112,116,121, - 78,40,10,0,0,0,117,3,0,0,0,115,121,115,117,9, - 0,0,0,109,101,116,97,95,112,97,116,104,117,9,0,0, - 0,95,119,97,114,110,105,110,103,115,117,4,0,0,0,119, - 97,114,110,117,13,0,0,0,73,109,112,111,114,116,87,97, - 114,110,105,110,103,117,18,0,0,0,95,73,109,112,111,114, - 116,76,111,99,107,67,111,110,116,101,120,116,117,11,0,0, - 0,102,105,110,100,95,109,111,100,117,108,101,117,4,0,0, - 0,78,111,110,101,117,7,0,0,0,109,111,100,117,108,101, - 115,117,10,0,0,0,95,95,108,111,97,100,101,114,95,95, - 40,4,0,0,0,117,4,0,0,0,110,97,109,101,117,4, - 0,0,0,112,97,116,104,117,6,0,0,0,102,105,110,100, - 101,114,117,6,0,0,0,108,111,97,100,101,114,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,12,0,0,0,95,102, - 105,110,100,95,109,111,100,117,108,101,191,5,0,0,115,20, - 0,0,0,0,2,9,1,19,1,16,1,10,1,24,1,12, - 2,15,1,4,2,21,2,117,12,0,0,0,95,102,105,110, - 100,95,109,111,100,117,108,101,99,3,0,0,0,0,0,0, - 0,4,0,0,0,4,0,0,0,67,0,0,0,115,194,0, - 0,0,116,0,0,124,0,0,116,1,0,131,2,0,115,45, - 0,116,2,0,100,1,0,106,3,0,116,4,0,124,0,0, - 131,1,0,131,1,0,131,1,0,130,1,0,110,0,0,124, - 2,0,100,2,0,107,0,0,114,72,0,116,5,0,100,3, - 0,131,1,0,130,1,0,110,0,0,124,1,0,114,156,0, - 116,0,0,124,1,0,116,1,0,131,2,0,115,108,0,116, - 2,0,100,4,0,131,1,0,130,1,0,113,156,0,124,1, - 0,116,6,0,106,7,0,107,7,0,114,156,0,100,5,0, - 125,3,0,116,8,0,124,3,0,106,3,0,124,1,0,131, - 1,0,131,1,0,130,1,0,113,156,0,110,0,0,124,0, - 0,12,114,190,0,124,2,0,100,2,0,107,2,0,114,190, - 0,116,5,0,100,6,0,131,1,0,130,1,0,110,0,0, - 100,7,0,83,40,8,0,0,0,117,28,0,0,0,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,101,34,46,117,31,0,0,0,109, - 111,100,117,108,101,32,110,97,109,101,32,109,117,115,116,32, - 98,101,32,115,116,114,44,32,110,111,116,32,123,125,105,0, - 0,0,0,117,18,0,0,0,108,101,118,101,108,32,109,117, - 115,116,32,98,101,32,62,61,32,48,117,31,0,0,0,95, - 95,112,97,99,107,97,103,101,95,95,32,110,111,116,32,115, - 101,116,32,116,111,32,97,32,115,116,114,105,110,103,117,61, - 0,0,0,80,97,114,101,110,116,32,109,111,100,117,108,101, - 32,123,33,114,125,32,110,111,116,32,108,111,97,100,101,100, - 44,32,99,97,110,110,111,116,32,112,101,114,102,111,114,109, - 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, - 117,17,0,0,0,69,109,112,116,121,32,109,111,100,117,108, - 101,32,110,97,109,101,78,40,9,0,0,0,117,10,0,0, - 0,105,115,105,110,115,116,97,110,99,101,117,3,0,0,0, - 115,116,114,117,9,0,0,0,84,121,112,101,69,114,114,111, - 114,117,6,0,0,0,102,111,114,109,97,116,117,4,0,0, - 0,116,121,112,101,117,10,0,0,0,86,97,108,117,101,69, - 114,114,111,114,117,3,0,0,0,115,121,115,117,7,0,0, - 0,109,111,100,117,108,101,115,117,11,0,0,0,83,121,115, - 116,101,109,69,114,114,111,114,40,4,0,0,0,117,4,0, - 0,0,110,97,109,101,117,7,0,0,0,112,97,99,107,97, - 103,101,117,5,0,0,0,108,101,118,101,108,117,3,0,0, - 0,109,115,103,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,13,0,0,0,95,115,97,110,105,116,121,95,99,104,101, - 99,107,208,5,0,0,115,24,0,0,0,0,2,15,1,30, - 1,12,1,15,1,6,1,15,1,15,1,15,1,6,2,27, - 1,19,1,117,13,0,0,0,95,115,97,110,105,116,121,95, - 99,104,101,99,107,117,20,0,0,0,78,111,32,109,111,100, - 117,108,101,32,110,97,109,101,100,32,123,33,114,125,99,2, - 0,0,0,0,0,0,0,9,0,0,0,27,0,0,0,67, - 0,0,0,115,12,2,0,0,100,0,0,125,2,0,124,0, - 0,106,1,0,100,1,0,131,1,0,100,2,0,25,125,3, - 0,124,3,0,114,178,0,124,3,0,116,2,0,106,3,0, - 107,7,0,114,62,0,116,4,0,124,1,0,124,3,0,131, - 2,0,1,110,0,0,124,0,0,116,2,0,106,3,0,107, - 6,0,114,88,0,116,2,0,106,3,0,124,0,0,25,83, - 116,2,0,106,3,0,124,3,0,25,125,4,0,121,13,0, - 124,4,0,106,5,0,125,2,0,87,113,178,0,4,116,6, - 0,107,10,0,114,174,0,1,1,1,116,7,0,100,3,0, - 23,106,8,0,124,0,0,124,3,0,131,2,0,125,5,0, - 116,9,0,124,5,0,100,4,0,124,0,0,131,1,1,130, - 1,0,89,113,178,0,88,110,0,0,116,10,0,124,0,0, - 124,2,0,131,2,0,125,6,0,124,6,0,100,0,0,107, - 8,0,114,250,0,116,9,0,116,7,0,106,8,0,124,0, - 0,131,1,0,100,4,0,124,0,0,131,1,1,125,7,0, - 100,10,0,124,7,0,95,12,0,124,7,0,130,1,0,110, - 47,0,124,0,0,116,2,0,106,3,0,107,7,0,114,41, - 1,124,6,0,106,13,0,124,0,0,131,1,0,1,116,14, - 0,100,5,0,124,0,0,124,6,0,131,3,0,1,110,0, - 0,116,2,0,106,3,0,124,0,0,25,125,8,0,124,3, - 0,114,105,1,116,2,0,106,3,0,124,3,0,25,125,4, - 0,116,15,0,124,4,0,124,0,0,106,1,0,100,1,0, - 131,1,0,100,6,0,25,124,8,0,131,3,0,1,110,0, - 0,116,16,0,124,8,0,100,7,0,100,0,0,131,3,0, - 100,0,0,107,8,0,114,212,1,121,59,0,124,8,0,106, - 17,0,124,8,0,95,18,0,116,19,0,124,8,0,100,8, - 0,131,2,0,115,187,1,124,8,0,106,18,0,106,1,0, - 100,1,0,131,1,0,100,2,0,25,124,8,0,95,18,0, - 110,0,0,87,113,212,1,4,116,6,0,107,10,0,114,208, - 1,1,1,1,89,113,212,1,88,110,0,0,116,19,0,124, - 8,0,100,9,0,131,2,0,115,8,2,121,13,0,124,6, - 0,124,8,0,95,20,0,87,113,8,2,4,116,6,0,107, - 10,0,114,4,2,1,1,1,89,113,8,2,88,110,0,0, - 124,8,0,83,40,11,0,0,0,78,117,1,0,0,0,46, - 105,0,0,0,0,117,21,0,0,0,59,32,123,125,32,105, - 115,32,110,111,116,32,97,32,112,97,99,107,97,103,101,117, - 4,0,0,0,110,97,109,101,117,18,0,0,0,105,109,112, - 111,114,116,32,123,33,114,125,32,35,32,123,33,114,125,105, - 2,0,0,0,117,11,0,0,0,95,95,112,97,99,107,97, - 103,101,95,95,117,8,0,0,0,95,95,112,97,116,104,95, - 95,117,10,0,0,0,95,95,108,111,97,100,101,114,95,95, - 84,40,21,0,0,0,117,4,0,0,0,78,111,110,101,117, - 10,0,0,0,114,112,97,114,116,105,116,105,111,110,117,3, - 0,0,0,115,121,115,117,7,0,0,0,109,111,100,117,108, - 101,115,117,25,0,0,0,95,99,97,108,108,95,119,105,116, - 104,95,102,114,97,109,101,115,95,114,101,109,111,118,101,100, - 117,8,0,0,0,95,95,112,97,116,104,95,95,117,14,0, - 0,0,65,116,116,114,105,98,117,116,101,69,114,114,111,114, - 117,8,0,0,0,95,69,82,82,95,77,83,71,117,6,0, - 0,0,102,111,114,109,97,116,117,11,0,0,0,73,109,112, - 111,114,116,69,114,114,111,114,117,12,0,0,0,95,102,105, - 110,100,95,109,111,100,117,108,101,117,4,0,0,0,84,114, - 117,101,117,10,0,0,0,95,110,111,116,95,102,111,117,110, - 100,117,11,0,0,0,108,111,97,100,95,109,111,100,117,108, - 101,117,16,0,0,0,95,118,101,114,98,111,115,101,95,109, - 101,115,115,97,103,101,117,7,0,0,0,115,101,116,97,116, - 116,114,117,7,0,0,0,103,101,116,97,116,116,114,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,11,0,0,0, - 95,95,112,97,99,107,97,103,101,95,95,117,7,0,0,0, - 104,97,115,97,116,116,114,117,10,0,0,0,95,95,108,111, - 97,100,101,114,95,95,40,9,0,0,0,117,4,0,0,0, - 110,97,109,101,117,7,0,0,0,105,109,112,111,114,116,95, - 117,4,0,0,0,112,97,116,104,117,6,0,0,0,112,97, - 114,101,110,116,117,13,0,0,0,112,97,114,101,110,116,95, - 109,111,100,117,108,101,117,3,0,0,0,109,115,103,117,6, - 0,0,0,108,111,97,100,101,114,117,3,0,0,0,101,120, - 99,117,6,0,0,0,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,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,227,5,0,0,115,76,0,0,0,0,1,6, - 1,19,1,6,1,15,1,16,2,15,1,11,2,13,1,3, - 1,13,1,13,1,22,1,26,1,15,1,12,1,27,3,9, - 1,9,1,15,2,13,1,19,2,13,1,6,2,13,1,32, - 2,24,1,3,1,12,1,15,1,32,1,13,1,8,2,15, - 1,3,1,13,1,13,1,8,1,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,99,2,0,0,0,0,0,0,0,3,0, - 0,0,18,0,0,0,67,0,0,0,115,75,0,0,0,122, - 16,0,116,0,0,124,0,0,131,1,0,125,2,0,87,100, - 1,0,116,1,0,106,2,0,131,0,0,1,88,124,2,0, - 106,3,0,131,0,0,1,122,17,0,116,4,0,124,0,0, - 124,1,0,131,2,0,83,87,100,1,0,124,2,0,106,5, - 0,131,0,0,1,88,100,1,0,83,40,2,0,0,0,117, - 54,0,0,0,70,105,110,100,32,97,110,100,32,108,111,97, - 100,32,116,104,101,32,109,111,100,117,108,101,44,32,97,110, - 100,32,114,101,108,101,97,115,101,32,116,104,101,32,105,109, - 112,111,114,116,32,108,111,99,107,46,78,40,6,0,0,0, - 117,16,0,0,0,95,103,101,116,95,109,111,100,117,108,101, - 95,108,111,99,107,117,4,0,0,0,95,105,109,112,117,12, - 0,0,0,114,101,108,101,97,115,101,95,108,111,99,107,117, - 7,0,0,0,97,99,113,117,105,114,101,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,7,0,0,0,114,101,108,101, - 97,115,101,40,3,0,0,0,117,4,0,0,0,110,97,109, - 101,117,7,0,0,0,105,109,112,111,114,116,95,117,4,0, - 0,0,108,111,99,107,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,14,0,0,0,95,102,105,110,100,95,97,110,100, - 95,108,111,97,100,21,6,0,0,115,14,0,0,0,0,2, - 3,1,16,2,11,1,10,1,3,1,17,2,117,14,0,0, - 0,95,102,105,110,100,95,97,110,100,95,108,111,97,100,99, - 3,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, - 67,0,0,0,115,172,0,0,0,116,0,0,124,0,0,124, - 1,0,124,2,0,131,3,0,1,124,2,0,100,1,0,107, - 4,0,114,49,0,116,1,0,124,0,0,124,1,0,124,2, - 0,131,3,0,125,0,0,110,0,0,116,2,0,106,3,0, - 131,0,0,1,124,0,0,116,4,0,106,5,0,107,7,0, - 114,87,0,116,6,0,124,0,0,116,7,0,131,2,0,83, - 116,4,0,106,5,0,124,0,0,25,125,3,0,124,3,0, - 100,4,0,107,8,0,114,158,0,116,2,0,106,9,0,131, - 0,0,1,100,2,0,106,10,0,124,0,0,131,1,0,125, - 4,0,116,11,0,124,4,0,100,3,0,124,0,0,131,1, - 1,130,1,0,110,0,0,116,12,0,124,0,0,131,1,0, - 1,124,3,0,83,40,5,0,0,0,117,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,101,32,98,97,115,101, - 100,32,111,110,32,105,116,115,32,110,97,109,101,44,32,116, - 104,101,32,112,97,99,107,97,103,101,32,116,104,101,32,99, - 97,108,108,32,105,115,10,32,32,32,32,98,101,105,110,103, - 32,109,97,100,101,32,102,114,111,109,44,32,97,110,100,32, - 116,104,101,32,108,101,118,101,108,32,97,100,106,117,115,116, - 109,101,110,116,46,10,10,32,32,32,32,84,104,105,115,32, - 102,117,110,99,116,105,111,110,32,114,101,112,114,101,115,101, - 110,116,115,32,116,104,101,32,103,114,101,97,116,101,115,116, - 32,99,111,109,109,111,110,32,100,101,110,111,109,105,110,97, - 116,111,114,32,111,102,32,102,117,110,99,116,105,111,110,97, - 108,105,116,121,10,32,32,32,32,98,101,116,119,101,101,110, - 32,105,109,112,111,114,116,95,109,111,100,117,108,101,32,97, - 110,100,32,95,95,105,109,112,111,114,116,95,95,46,32,84, - 104,105,115,32,105,110,99,108,117,100,101,115,32,115,101,116, - 116,105,110,103,32,95,95,112,97,99,107,97,103,101,95,95, - 32,105,102,10,32,32,32,32,116,104,101,32,108,111,97,100, - 101,114,32,100,105,100,32,110,111,116,46,10,10,32,32,32, - 32,105,0,0,0,0,117,40,0,0,0,105,109,112,111,114, - 116,32,111,102,32,123,125,32,104,97,108,116,101,100,59,32, - 78,111,110,101,32,105,110,32,115,121,115,46,109,111,100,117, - 108,101,115,117,4,0,0,0,110,97,109,101,78,40,13,0, - 0,0,117,13,0,0,0,95,115,97,110,105,116,121,95,99, - 104,101,99,107,117,13,0,0,0,95,114,101,115,111,108,118, - 101,95,110,97,109,101,117,4,0,0,0,95,105,109,112,117, - 12,0,0,0,97,99,113,117,105,114,101,95,108,111,99,107, - 117,3,0,0,0,115,121,115,117,7,0,0,0,109,111,100, - 117,108,101,115,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,4,0,0,0,78,111,110,101, - 117,12,0,0,0,114,101,108,101,97,115,101,95,108,111,99, - 107,117,6,0,0,0,102,111,114,109,97,116,117,11,0,0, - 0,73,109,112,111,114,116,69,114,114,111,114,117,19,0,0, - 0,95,108,111,99,107,95,117,110,108,111,99,107,95,109,111, - 100,117,108,101,40,5,0,0,0,117,4,0,0,0,110,97, - 109,101,117,7,0,0,0,112,97,99,107,97,103,101,117,5, - 0,0,0,108,101,118,101,108,117,6,0,0,0,109,111,100, - 117,108,101,117,7,0,0,0,109,101,115,115,97,103,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,11,0,0,0, - 95,103,99,100,95,105,109,112,111,114,116,34,6,0,0,115, - 28,0,0,0,0,9,16,1,12,1,21,1,10,1,15,1, - 13,1,13,1,12,1,10,1,6,1,9,1,21,1,10,1, - 117,11,0,0,0,95,103,99,100,95,105,109,112,111,114,116, - 99,3,0,0,0,0,0,0,0,6,0,0,0,17,0,0, - 0,67,0,0,0,115,254,0,0,0,116,0,0,124,0,0, - 100,1,0,131,2,0,114,250,0,100,2,0,124,1,0,107, - 6,0,114,89,0,116,1,0,124,1,0,131,1,0,125,1, - 0,124,1,0,106,2,0,100,2,0,131,1,0,1,116,0, - 0,124,0,0,100,3,0,131,2,0,114,89,0,124,1,0, - 106,3,0,124,0,0,106,4,0,131,1,0,1,113,89,0, - 110,0,0,120,158,0,124,1,0,68,93,147,0,125,3,0, - 116,0,0,124,0,0,124,3,0,131,2,0,115,96,0,100, - 4,0,106,5,0,124,0,0,106,6,0,124,3,0,131,2, - 0,125,4,0,121,17,0,116,7,0,124,2,0,124,4,0, - 131,2,0,1,87,113,243,0,4,116,8,0,107,10,0,114, - 239,0,1,125,5,0,1,122,50,0,116,9,0,124,5,0, - 100,5,0,100,7,0,131,3,0,114,218,0,124,5,0,106, - 11,0,124,4,0,107,2,0,114,218,0,119,96,0,113,218, - 0,110,0,0,130,0,0,87,89,100,6,0,100,6,0,125, - 5,0,126,5,0,88,113,243,0,88,113,96,0,113,96,0, - 87,110,0,0,124,0,0,83,40,8,0,0,0,117,238,0, - 0,0,70,105,103,117,114,101,32,111,117,116,32,119,104,97, - 116,32,95,95,105,109,112,111,114,116,95,95,32,115,104,111, - 117,108,100,32,114,101,116,117,114,110,46,10,10,32,32,32, - 32,84,104,101,32,105,109,112,111,114,116,95,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,97,32,99,97,108,108, - 97,98,108,101,32,119,104,105,99,104,32,116,97,107,101,115, - 32,116,104,101,32,110,97,109,101,32,111,102,32,109,111,100, - 117,108,101,32,116,111,10,32,32,32,32,105,109,112,111,114, - 116,46,32,73,116,32,105,115,32,114,101,113,117,105,114,101, - 100,32,116,111,32,100,101,99,111,117,112,108,101,32,116,104, - 101,32,102,117,110,99,116,105,111,110,32,102,114,111,109,32, - 97,115,115,117,109,105,110,103,32,105,109,112,111,114,116,108, - 105,98,39,115,10,32,32,32,32,105,109,112,111,114,116,32, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,105, - 115,32,100,101,115,105,114,101,100,46,10,10,32,32,32,32, - 117,8,0,0,0,95,95,112,97,116,104,95,95,117,1,0, - 0,0,42,117,7,0,0,0,95,95,97,108,108,95,95,117, - 5,0,0,0,123,125,46,123,125,117,10,0,0,0,95,110, - 111,116,95,102,111,117,110,100,78,70,40,12,0,0,0,117, - 7,0,0,0,104,97,115,97,116,116,114,117,4,0,0,0, - 108,105,115,116,117,6,0,0,0,114,101,109,111,118,101,117, - 6,0,0,0,101,120,116,101,110,100,117,7,0,0,0,95, - 95,97,108,108,95,95,117,6,0,0,0,102,111,114,109,97, - 116,117,8,0,0,0,95,95,110,97,109,101,95,95,117,25, - 0,0,0,95,99,97,108,108,95,119,105,116,104,95,102,114, - 97,109,101,115,95,114,101,109,111,118,101,100,117,11,0,0, - 0,73,109,112,111,114,116,69,114,114,111,114,117,7,0,0, - 0,103,101,116,97,116,116,114,117,5,0,0,0,70,97,108, - 115,101,117,4,0,0,0,110,97,109,101,40,6,0,0,0, - 117,6,0,0,0,109,111,100,117,108,101,117,8,0,0,0, - 102,114,111,109,108,105,115,116,117,7,0,0,0,105,109,112, - 111,114,116,95,117,1,0,0,0,120,117,9,0,0,0,102, - 114,111,109,95,110,97,109,101,117,3,0,0,0,101,120,99, - 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,16,0,0, - 0,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, - 116,58,6,0,0,115,34,0,0,0,0,10,15,1,12,1, + 46,78,41,2,114,106,0,0,0,114,3,1,0,0,41,1, + 114,71,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,75,0,0,0,48,8,0,0,115,2,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,14,0,0,0,116,0,0,106, + 1,0,131,0,0,1,100,1,0,83,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,99,101,112,116,105,111,110,115,46,78,41,2,114,106,0, + 0,0,114,107,0,0,0,41,4,114,71,0,0,0,90,8, + 101,120,99,95,116,121,112,101,90,9,101,120,99,95,118,97, + 108,117,101,90,13,101,120,99,95,116,114,97,99,101,98,97, + 99,107,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,81,0,0,0,52,8,0,0,115,2,0,0,0,0, + 2,122,27,95,73,109,112,111,114,116,76,111,99,107,67,111, + 110,116,101,120,116,46,95,95,101,120,105,116,95,95,78,41, + 6,114,57,0,0,0,114,56,0,0,0,114,58,0,0,0, + 114,59,0,0,0,114,75,0,0,0,114,81,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,100,1,0,0,44,8,0,0,115,6,0,0, + 0,12,2,6,2,12,4,114,100,1,0,0,99,3,0,0, + 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, + 0,115,91,0,0,0,124,1,0,106,0,0,100,1,0,124, + 2,0,100,2,0,24,131,2,0,125,3,0,116,1,0,124, + 3,0,131,1,0,124,2,0,107,0,0,114,55,0,116,2, + 0,100,3,0,131,1,0,130,1,0,110,0,0,124,3,0, + 100,4,0,25,125,4,0,124,0,0,114,87,0,100,5,0, + 106,3,0,124,4,0,124,0,0,131,2,0,83,124,4,0, + 83,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,115,111,108,117, + 116,101,32,111,110,101,46,114,116,0,0,0,114,29,0,0, + 0,122,50,97,116,116,101,109,112,116,101,100,32,114,101,108, + 97,116,105,118,101,32,105,109,112,111,114,116,32,98,101,121, + 111,110,100,32,116,111,112,45,108,101,118,101,108,32,112,97, + 99,107,97,103,101,114,84,0,0,0,122,5,123,125,46,123, + 125,41,4,114,34,0,0,0,114,31,0,0,0,114,133,0, + 0,0,114,47,0,0,0,41,5,114,67,0,0,0,218,7, + 112,97,99,107,97,103,101,218,5,108,101,118,101,108,90,4, + 98,105,116,115,90,4,98,97,115,101,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,13,95,114,101,115,111, + 108,118,101,95,110,97,109,101,57,8,0,0,115,10,0,0, + 0,0,2,22,1,18,1,15,1,10,1,114,103,1,0,0, + 99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,67,0,0,0,115,47,0,0,0,124,0,0,106,0,0, + 124,1,0,124,2,0,131,2,0,125,3,0,124,3,0,100, + 0,0,107,8,0,114,34,0,100,0,0,83,116,1,0,124, + 1,0,124,3,0,131,2,0,83,41,1,78,41,2,114,11, + 1,0,0,114,173,0,0,0,41,4,114,76,1,0,0,114, + 67,0,0,0,114,35,0,0,0,114,169,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,95, + 102,105,110,100,95,115,112,101,99,95,108,101,103,97,99,121, + 66,8,0,0,115,8,0,0,0,0,3,18,1,12,1,4, + 1,114,104,1,0,0,99,3,0,0,0,0,0,0,0,9, + 0,0,0,27,0,0,0,67,0,0,0,115,34,1,0,0, + 116,0,0,106,1,0,115,28,0,116,2,0,106,3,0,100, + 1,0,116,4,0,131,2,0,1,110,0,0,124,0,0,116, + 0,0,106,5,0,107,6,0,125,3,0,120,240,0,116,0, + 0,106,1,0,68,93,225,0,125,4,0,116,6,0,131,0, + 0,143,93,0,1,121,13,0,124,4,0,106,7,0,125,5, + 0,87,110,54,0,4,116,8,0,107,10,0,114,138,0,1, + 1,1,116,9,0,124,4,0,124,0,0,124,1,0,131,3, + 0,125,6,0,124,6,0,100,2,0,107,8,0,114,134,0, + 119,53,0,110,0,0,89,110,19,0,88,124,5,0,124,0, + 0,124,1,0,124,2,0,131,3,0,125,6,0,87,100,2, + 0,81,88,124,6,0,100,2,0,107,9,0,114,53,0,124, + 3,0,12,114,15,1,124,0,0,116,0,0,106,5,0,107, + 6,0,114,15,1,116,0,0,106,5,0,124,0,0,25,125, + 7,0,121,13,0,124,7,0,106,10,0,125,8,0,87,110, + 22,0,4,116,8,0,107,10,0,114,247,0,1,1,1,124, + 6,0,83,89,113,19,1,88,124,8,0,100,2,0,107,8, + 0,114,8,1,124,6,0,83,124,8,0,83,113,22,1,124, + 6,0,83,113,53,0,113,53,0,87,100,2,0,83,100,2, + 0,83,41,3,122,23,70,105,110,100,32,97,32,109,111,100, + 117,108,101,39,115,32,108,111,97,100,101,114,46,122,22,115, + 121,115,46,109,101,116,97,95,112,97,116,104,32,105,115,32, + 101,109,112,116,121,78,41,11,114,7,0,0,0,218,9,109, + 101,116,97,95,112,97,116,104,114,166,0,0,0,114,167,0, + 0,0,114,168,0,0,0,114,73,0,0,0,114,100,1,0, + 0,114,10,1,0,0,114,209,0,0,0,114,104,1,0,0, + 114,208,0,0,0,41,9,114,67,0,0,0,114,35,0,0, + 0,114,9,1,0,0,90,9,105,115,95,114,101,108,111,97, + 100,114,76,1,0,0,114,10,1,0,0,114,177,0,0,0, + 114,179,0,0,0,114,208,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,10,95,102,105,110,100, + 95,115,112,101,99,75,8,0,0,115,48,0,0,0,0,2, + 9,1,19,4,15,1,16,1,10,1,3,1,13,1,13,1, + 18,1,12,1,11,2,24,1,12,2,22,1,13,1,3,1, + 13,1,13,4,9,2,12,1,4,2,7,2,11,2,114,106, + 1,0,0,99,3,0,0,0,0,0,0,0,4,0,0,0, + 4,0,0,0,67,0,0,0,115,194,0,0,0,116,0,0, + 124,0,0,116,1,0,131,2,0,115,45,0,116,2,0,100, + 1,0,106,3,0,116,4,0,124,0,0,131,1,0,131,1, + 0,131,1,0,130,1,0,110,0,0,124,2,0,100,2,0, + 107,0,0,114,72,0,116,5,0,100,3,0,131,1,0,130, + 1,0,110,0,0,124,1,0,114,156,0,116,0,0,124,1, + 0,116,1,0,131,2,0,115,108,0,116,2,0,100,4,0, + 131,1,0,130,1,0,113,156,0,124,1,0,116,6,0,106, + 7,0,107,7,0,114,156,0,100,5,0,125,3,0,116,8, + 0,124,3,0,106,3,0,124,1,0,131,1,0,131,1,0, + 130,1,0,113,156,0,110,0,0,124,0,0,12,114,190,0, + 124,2,0,100,2,0,107,2,0,114,190,0,116,5,0,100, + 6,0,131,1,0,130,1,0,110,0,0,100,7,0,83,41, + 8,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,101,34,46,122, + 31,109,111,100,117,108,101,32,110,97,109,101,32,109,117,115, + 116,32,98,101,32,115,116,114,44,32,110,111,116,32,123,125, + 114,84,0,0,0,122,18,108,101,118,101,108,32,109,117,115, + 116,32,98,101,32,62,61,32,48,122,31,95,95,112,97,99, + 107,97,103,101,95,95,32,110,111,116,32,115,101,116,32,116, + 111,32,97,32,115,116,114,105,110,103,122,61,80,97,114,101, + 110,116,32,109,111,100,117,108,101,32,123,33,114,125,32,110, + 111,116,32,108,111,97,100,101,100,44,32,99,97,110,110,111, + 116,32,112,101,114,102,111,114,109,32,114,101,108,97,116,105, + 118,101,32,105,109,112,111,114,116,122,17,69,109,112,116,121, + 32,109,111,100,117,108,101,32,110,97,109,101,78,41,9,114, + 192,0,0,0,114,81,1,0,0,218,9,84,121,112,101,69, + 114,114,111,114,114,47,0,0,0,114,66,0,0,0,114,133, + 0,0,0,114,7,0,0,0,114,73,0,0,0,218,11,83, + 121,115,116,101,109,69,114,114,111,114,41,4,114,67,0,0, + 0,114,101,1,0,0,114,102,1,0,0,114,171,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 13,95,115,97,110,105,116,121,95,99,104,101,99,107,115,8, + 0,0,115,24,0,0,0,0,2,15,1,30,1,12,1,15, + 1,6,1,15,1,15,1,15,1,6,2,27,1,19,1,114, + 109,1,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,52,1,0,0,100,0,0,125,2,0,124,0,0,106, + 0,0,100,1,0,131,1,0,100,2,0,25,125,3,0,124, + 3,0,114,178,0,124,3,0,116,1,0,106,2,0,107,7, + 0,114,62,0,116,3,0,124,1,0,124,3,0,131,2,0, + 1,110,0,0,124,0,0,116,1,0,106,2,0,107,6,0, + 114,88,0,116,1,0,106,2,0,124,0,0,25,83,116,1, + 0,106,2,0,124,3,0,25,125,4,0,121,13,0,124,4, + 0,106,4,0,125,2,0,87,113,178,0,4,116,5,0,107, + 10,0,114,174,0,1,1,1,116,6,0,100,3,0,23,106, + 7,0,124,0,0,124,3,0,131,2,0,125,5,0,116,8, + 0,124,5,0,100,4,0,124,0,0,131,1,1,130,1,0, + 89,113,178,0,88,110,0,0,116,9,0,124,0,0,124,2, + 0,131,2,0,125,6,0,124,6,0,100,0,0,107,8,0, + 114,235,0,116,8,0,116,6,0,106,7,0,124,0,0,131, + 1,0,100,4,0,124,0,0,131,1,1,130,1,0,110,18, + 0,116,10,0,124,6,0,131,1,0,106,11,0,131,0,0, + 125,7,0,124,3,0,114,48,1,116,1,0,106,2,0,124, + 3,0,25,125,4,0,116,12,0,124,4,0,124,0,0,106, + 0,0,100,1,0,131,1,0,100,5,0,25,124,7,0,131, + 3,0,1,110,0,0,124,7,0,83,41,6,78,114,116,0, + 0,0,114,84,0,0,0,122,23,59,32,123,33,114,125,32, + 105,115,32,110,111,116,32,97,32,112,97,99,107,97,103,101, + 114,67,0,0,0,114,115,0,0,0,41,13,114,32,0,0, + 0,114,7,0,0,0,114,73,0,0,0,114,114,0,0,0, + 114,246,0,0,0,114,209,0,0,0,218,8,95,69,82,82, + 95,77,83,71,114,47,0,0,0,114,153,0,0,0,114,106, + 1,0,0,114,174,0,0,0,114,6,1,0,0,114,61,0, + 0,0,41,8,114,67,0,0,0,218,7,105,109,112,111,114, + 116,95,114,35,0,0,0,114,233,0,0,0,90,13,112,97, + 114,101,110,116,95,109,111,100,117,108,101,114,171,0,0,0, + 114,177,0,0,0,114,179,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,23,95,102,105,110,100, + 95,97,110,100,95,108,111,97,100,95,117,110,108,111,99,107, + 101,100,135,8,0,0,115,42,0,0,0,0,1,6,1,19, + 1,6,1,15,1,16,2,15,1,11,1,13,1,3,1,13, + 1,13,1,22,1,26,1,15,1,12,1,30,2,18,1,6, + 2,13,1,32,1,114,112,1,0,0,99,2,0,0,0,0, + 0,0,0,2,0,0,0,10,0,0,0,67,0,0,0,115, + 36,0,0,0,116,0,0,124,0,0,131,1,0,143,18,0, + 1,116,1,0,124,0,0,124,1,0,131,2,0,83,87,100, + 1,0,81,88,100,1,0,83,41,2,122,54,70,105,110,100, + 32,97,110,100,32,108,111,97,100,32,116,104,101,32,109,111, + 100,117,108,101,44,32,97,110,100,32,114,101,108,101,97,115, + 101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, + 107,46,78,41,2,114,103,0,0,0,114,112,1,0,0,41, + 2,114,67,0,0,0,114,111,1,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,14,95,102,105,110, + 100,95,97,110,100,95,108,111,97,100,162,8,0,0,115,4, + 0,0,0,0,2,13,1,114,113,1,0,0,99,3,0,0, + 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, + 0,115,172,0,0,0,116,0,0,124,0,0,124,1,0,124, + 2,0,131,3,0,1,124,2,0,100,1,0,107,4,0,114, + 49,0,116,1,0,124,0,0,124,1,0,124,2,0,131,3, + 0,125,0,0,110,0,0,116,2,0,106,3,0,131,0,0, + 1,124,0,0,116,4,0,106,5,0,107,7,0,114,87,0, + 116,6,0,124,0,0,116,7,0,131,2,0,83,116,4,0, + 106,5,0,124,0,0,25,125,3,0,124,3,0,100,2,0, + 107,8,0,114,158,0,116,2,0,106,8,0,131,0,0,1, + 100,3,0,106,9,0,124,0,0,131,1,0,125,4,0,116, + 10,0,124,4,0,100,4,0,124,0,0,131,1,1,130,1, + 0,110,0,0,116,11,0,124,0,0,131,1,0,1,124,3, + 0,83,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,101,32,98,97,115,101,100,32,111,110,32,105, + 116,115,32,110,97,109,101,44,32,116,104,101,32,112,97,99, + 107,97,103,101,32,116,104,101,32,99,97,108,108,32,105,115, + 10,32,32,32,32,98,101,105,110,103,32,109,97,100,101,32, + 102,114,111,109,44,32,97,110,100,32,116,104,101,32,108,101, + 118,101,108,32,97,100,106,117,115,116,109,101,110,116,46,10, + 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, + 111,110,32,114,101,112,114,101,115,101,110,116,115,32,116,104, + 101,32,103,114,101,97,116,101,115,116,32,99,111,109,109,111, + 110,32,100,101,110,111,109,105,110,97,116,111,114,32,111,102, + 32,102,117,110,99,116,105,111,110,97,108,105,116,121,10,32, + 32,32,32,98,101,116,119,101,101,110,32,105,109,112,111,114, + 116,95,109,111,100,117,108,101,32,97,110,100,32,95,95,105, + 109,112,111,114,116,95,95,46,32,84,104,105,115,32,105,110, + 99,108,117,100,101,115,32,115,101,116,116,105,110,103,32,95, + 95,112,97,99,107,97,103,101,95,95,32,105,102,10,32,32, + 32,32,116,104,101,32,108,111,97,100,101,114,32,100,105,100, + 32,110,111,116,46,10,10,32,32,32,32,114,84,0,0,0, + 78,122,40,105,109,112,111,114,116,32,111,102,32,123,125,32, + 104,97,108,116,101,100,59,32,78,111,110,101,32,105,110,32, + 115,121,115,46,109,111,100,117,108,101,115,114,67,0,0,0, + 41,12,114,109,1,0,0,114,103,1,0,0,114,106,0,0, + 0,114,3,1,0,0,114,7,0,0,0,114,73,0,0,0, + 114,113,1,0,0,218,11,95,103,99,100,95,105,109,112,111, + 114,116,114,107,0,0,0,114,47,0,0,0,114,153,0,0, + 0,114,112,0,0,0,41,5,114,67,0,0,0,114,101,1, + 0,0,114,102,1,0,0,114,179,0,0,0,114,151,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,114,1,0,0,168,8,0,0,115,26,0,0,0,0,9, + 16,1,12,1,21,1,10,1,15,1,13,1,13,1,12,1, + 10,2,15,1,21,1,10,1,114,114,1,0,0,99,3,0, + 0,0,0,0,0,0,6,0,0,0,17,0,0,0,67,0, + 0,0,115,1,1,0,0,116,0,0,124,0,0,100,1,0, + 131,2,0,114,253,0,100,2,0,124,1,0,107,6,0,114, + 89,0,116,1,0,124,1,0,131,1,0,125,1,0,124,1, + 0,106,2,0,100,2,0,131,1,0,1,116,0,0,124,0, + 0,100,3,0,131,2,0,114,89,0,124,1,0,106,3,0, + 124,0,0,106,4,0,131,1,0,1,113,89,0,110,0,0, + 120,161,0,124,1,0,68,93,150,0,125,3,0,116,0,0, + 124,0,0,124,3,0,131,2,0,115,96,0,100,4,0,106, + 5,0,124,0,0,106,6,0,124,3,0,131,2,0,125,4, + 0,121,17,0,116,7,0,124,2,0,124,4,0,131,2,0, + 1,87,113,246,0,4,116,8,0,107,10,0,114,242,0,1, + 125,5,0,1,122,53,0,116,9,0,124,5,0,131,1,0, + 106,10,0,116,11,0,131,1,0,114,221,0,124,5,0,106, + 12,0,124,4,0,107,2,0,114,221,0,119,96,0,113,221, + 0,110,0,0,130,0,0,87,89,100,5,0,100,5,0,125, + 5,0,126,5,0,88,113,246,0,88,113,96,0,113,96,0, + 87,110,0,0,124,0,0,83,41,6,122,238,70,105,103,117, + 114,101,32,111,117,116,32,119,104,97,116,32,95,95,105,109, + 112,111,114,116,95,95,32,115,104,111,117,108,100,32,114,101, + 116,117,114,110,46,10,10,32,32,32,32,84,104,101,32,105, + 109,112,111,114,116,95,32,112,97,114,97,109,101,116,101,114, + 32,105,115,32,97,32,99,97,108,108,97,98,108,101,32,119, + 104,105,99,104,32,116,97,107,101,115,32,116,104,101,32,110, + 97,109,101,32,111,102,32,109,111,100,117,108,101,32,116,111, + 10,32,32,32,32,105,109,112,111,114,116,46,32,73,116,32, + 105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,100, + 101,99,111,117,112,108,101,32,116,104,101,32,102,117,110,99, + 116,105,111,110,32,102,114,111,109,32,97,115,115,117,109,105, + 110,103,32,105,109,112,111,114,116,108,105,98,39,115,10,32, + 32,32,32,105,109,112,111,114,116,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,105,115,32,100,101,115,105, + 114,101,100,46,10,10,32,32,32,32,114,246,0,0,0,250, + 1,42,218,7,95,95,97,108,108,95,95,122,5,123,125,46, + 123,125,78,41,13,114,60,0,0,0,114,245,0,0,0,218, + 6,114,101,109,111,118,101,114,197,0,0,0,114,116,1,0, + 0,114,47,0,0,0,114,57,0,0,0,114,114,0,0,0, + 114,153,0,0,0,114,81,1,0,0,114,9,0,0,0,218, + 15,95,69,82,82,95,77,83,71,95,80,82,69,70,73,88, + 114,67,0,0,0,41,6,114,179,0,0,0,218,8,102,114, + 111,109,108,105,115,116,114,111,1,0,0,114,16,0,0,0, + 90,9,102,114,111,109,95,110,97,109,101,114,37,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 16,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, + 116,192,8,0,0,115,34,0,0,0,0,10,15,1,12,1, 12,1,13,1,15,1,22,1,13,1,15,1,21,1,3,1, - 17,1,18,6,18,1,15,1,9,1,32,1,117,16,0,0, - 0,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, - 116,99,1,0,0,0,0,0,0,0,2,0,0,0,2,0, + 17,1,18,4,21,1,15,1,9,1,32,1,114,120,1,0, + 0,99,1,0,0,0,0,0,0,0,2,0,0,0,2,0, 0,0,67,0,0,0,115,78,0,0,0,124,0,0,106,0, - 0,100,1,0,131,1,0,125,1,0,124,1,0,100,6,0, - 107,8,0,114,74,0,124,0,0,100,2,0,25,125,1,0, - 100,3,0,124,0,0,107,7,0,114,74,0,124,1,0,106, - 2,0,100,4,0,131,1,0,100,5,0,25,125,1,0,113, - 74,0,110,0,0,124,1,0,83,40,7,0,0,0,117,167, - 0,0,0,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,32,32,32,95,95, - 112,97,99,107,97,103,101,95,95,32,105,115,32,110,111,116, - 32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,98, - 101,32,100,101,102,105,110,101,100,32,111,114,32,99,111,117, - 108,100,32,98,101,32,115,101,116,32,116,111,32,78,111,110, - 101,10,32,32,32,32,116,111,32,114,101,112,114,101,115,101, - 110,116,32,116,104,97,116,32,105,116,115,32,112,114,111,112, - 101,114,32,118,97,108,117,101,32,105,115,32,117,110,107,110, - 111,119,110,46,10,10,32,32,32,32,117,11,0,0,0,95, - 95,112,97,99,107,97,103,101,95,95,117,8,0,0,0,95, - 95,110,97,109,101,95,95,117,8,0,0,0,95,95,112,97, - 116,104,95,95,117,1,0,0,0,46,105,0,0,0,0,78, - 40,3,0,0,0,117,3,0,0,0,103,101,116,117,4,0, - 0,0,78,111,110,101,117,10,0,0,0,114,112,97,114,116, - 105,116,105,111,110,40,2,0,0,0,117,7,0,0,0,103, - 108,111,98,97,108,115,117,7,0,0,0,112,97,99,107,97, - 103,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,17, - 0,0,0,95,99,97,108,99,95,95,95,112,97,99,107,97, - 103,101,95,95,92,6,0,0,115,12,0,0,0,0,7,15, - 1,12,1,10,1,12,1,25,1,117,17,0,0,0,95,99, - 97,108,99,95,95,95,112,97,99,107,97,103,101,95,95,99, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,55,0,0,0,116,0,0,116,1,0,106, - 2,0,131,0,0,102,2,0,125,0,0,116,3,0,116,4, - 0,102,2,0,125,1,0,116,5,0,116,6,0,102,2,0, - 125,2,0,124,0,0,124,1,0,124,2,0,103,3,0,83, - 40,1,0,0,0,117,95,0,0,0,82,101,116,117,114,110, - 115,32,97,32,108,105,115,116,32,111,102,32,102,105,108,101, - 45,98,97,115,101,100,32,109,111,100,117,108,101,32,108,111, - 97,100,101,114,115,46,10,10,32,32,32,32,69,97,99,104, - 32,105,116,101,109,32,105,115,32,97,32,116,117,112,108,101, - 32,40,108,111,97,100,101,114,44,32,115,117,102,102,105,120, - 101,115,41,46,10,32,32,32,32,40,7,0,0,0,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,4,0,0,0,95,105,109,112,117, - 18,0,0,0,101,120,116,101,110,115,105,111,110,95,115,117, - 102,102,105,120,101,115,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, - 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,40,3, - 0,0,0,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,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,27,0,0,0,95,103,101,116,95, - 115,117,112,112,111,114,116,101,100,95,102,105,108,101,95,108, - 111,97,100,101,114,115,107,6,0,0,115,8,0,0,0,0, - 5,18,1,12,1,12,1,117,27,0,0,0,95,103,101,116, - 95,115,117,112,112,111,114,116,101,100,95,102,105,108,101,95, - 108,111,97,100,101,114,115,99,5,0,0,0,0,0,0,0, - 9,0,0,0,5,0,0,0,67,0,0,0,115,227,0,0, - 0,124,4,0,100,1,0,107,2,0,114,27,0,116,0,0, - 124,0,0,131,1,0,125,5,0,110,54,0,124,1,0,100, - 3,0,107,9,0,114,45,0,124,1,0,110,3,0,105,0, - 0,125,6,0,116,2,0,124,6,0,131,1,0,125,7,0, - 116,0,0,124,0,0,124,7,0,124,4,0,131,3,0,125, - 5,0,124,3,0,115,207,0,124,4,0,100,1,0,107,2, - 0,114,122,0,116,0,0,124,0,0,106,3,0,100,2,0, - 131,1,0,100,1,0,25,131,1,0,83,124,0,0,115,132, - 0,124,5,0,83,116,4,0,124,0,0,131,1,0,116,4, - 0,124,0,0,106,3,0,100,2,0,131,1,0,100,1,0, - 25,131,1,0,24,125,8,0,116,5,0,106,6,0,124,5, - 0,106,7,0,100,3,0,116,4,0,124,5,0,106,7,0, - 131,1,0,124,8,0,24,133,2,0,25,25,83,110,16,0, - 116,8,0,124,5,0,124,3,0,116,0,0,131,3,0,83, - 100,3,0,83,40,4,0,0,0,117,214,1,0,0,73,109, - 112,111,114,116,32,97,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,84,104,101,32,39,103,108,111,98,97,108,115, - 39,32,97,114,103,117,109,101,110,116,32,105,115,32,117,115, - 101,100,32,116,111,32,105,110,102,101,114,32,119,104,101,114, - 101,32,116,104,101,32,105,109,112,111,114,116,32,105,115,32, - 111,99,99,117,114,105,110,103,32,102,114,111,109,10,32,32, - 32,32,116,111,32,104,97,110,100,108,101,32,114,101,108,97, - 116,105,118,101,32,105,109,112,111,114,116,115,46,32,84,104, - 101,32,39,108,111,99,97,108,115,39,32,97,114,103,117,109, - 101,110,116,32,105,115,32,105,103,110,111,114,101,100,46,32, - 84,104,101,10,32,32,32,32,39,102,114,111,109,108,105,115, - 116,39,32,97,114,103,117,109,101,110,116,32,115,112,101,99, - 105,102,105,101,115,32,119,104,97,116,32,115,104,111,117,108, - 100,32,101,120,105,115,116,32,97,115,32,97,116,116,114,105, - 98,117,116,101,115,32,111,110,32,116,104,101,32,109,111,100, - 117,108,101,10,32,32,32,32,98,101,105,110,103,32,105,109, - 112,111,114,116,101,100,32,40,101,46,103,46,32,96,96,102, - 114,111,109,32,109,111,100,117,108,101,32,105,109,112,111,114, - 116,32,60,102,114,111,109,108,105,115,116,62,96,96,41,46, - 32,32,84,104,101,32,39,108,101,118,101,108,39,10,32,32, - 32,32,97,114,103,117,109,101,110,116,32,114,101,112,114,101, - 115,101,110,116,115,32,116,104,101,32,112,97,99,107,97,103, - 101,32,108,111,99,97,116,105,111,110,32,116,111,32,105,109, - 112,111,114,116,32,102,114,111,109,32,105,110,32,97,32,114, - 101,108,97,116,105,118,101,10,32,32,32,32,105,109,112,111, - 114,116,32,40,101,46,103,46,32,96,96,102,114,111,109,32, - 46,46,112,107,103,32,105,109,112,111,114,116,32,109,111,100, - 96,96,32,119,111,117,108,100,32,104,97,118,101,32,97,32, - 39,108,101,118,101,108,39,32,111,102,32,50,41,46,10,10, - 32,32,32,32,105,0,0,0,0,117,1,0,0,0,46,78, - 40,9,0,0,0,117,11,0,0,0,95,103,99,100,95,105, - 109,112,111,114,116,117,4,0,0,0,78,111,110,101,117,17, - 0,0,0,95,99,97,108,99,95,95,95,112,97,99,107,97, - 103,101,95,95,117,9,0,0,0,112,97,114,116,105,116,105, - 111,110,117,3,0,0,0,108,101,110,117,3,0,0,0,115, - 121,115,117,7,0,0,0,109,111,100,117,108,101,115,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,16,0,0,0, - 95,104,97,110,100,108,101,95,102,114,111,109,108,105,115,116, - 40,9,0,0,0,117,4,0,0,0,110,97,109,101,117,7, - 0,0,0,103,108,111,98,97,108,115,117,6,0,0,0,108, - 111,99,97,108,115,117,8,0,0,0,102,114,111,109,108,105, - 115,116,117,5,0,0,0,108,101,118,101,108,117,6,0,0, - 0,109,111,100,117,108,101,117,8,0,0,0,103,108,111,98, - 97,108,115,95,117,7,0,0,0,112,97,99,107,97,103,101, - 117,7,0,0,0,99,117,116,95,111,102,102,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,10,0,0,0,95,95,105, - 109,112,111,114,116,95,95,118,6,0,0,115,26,0,0,0, - 0,11,12,1,15,2,24,1,12,1,18,1,6,3,12,1, - 23,1,6,1,4,4,35,3,40,2,117,10,0,0,0,95, - 95,105,109,112,111,114,116,95,95,99,2,0,0,0,0,0, - 0,0,16,0,0,0,13,0,0,0,67,0,0,0,115,24, - 3,0,0,124,1,0,97,0,0,124,0,0,97,1,0,116, - 1,0,106,2,0,106,3,0,114,33,0,116,4,0,97,5, - 0,110,6,0,116,6,0,97,5,0,116,7,0,116,1,0, - 131,1,0,125,2,0,120,119,0,116,1,0,106,8,0,106, - 9,0,131,0,0,68,93,102,0,92,2,0,125,3,0,125, - 4,0,116,10,0,124,4,0,124,2,0,131,2,0,114,67, - 0,116,11,0,124,4,0,100,1,0,131,2,0,115,169,0, - 124,3,0,116,1,0,106,12,0,107,6,0,114,136,0,116, - 13,0,124,4,0,95,14,0,113,166,0,116,0,0,106,15, - 0,124,3,0,131,1,0,114,166,0,116,16,0,124,4,0, - 95,14,0,113,166,0,113,169,0,113,67,0,113,67,0,87, - 116,1,0,106,8,0,116,17,0,25,125,5,0,120,76,0, - 100,28,0,68,93,68,0,125,6,0,124,6,0,116,1,0, - 106,8,0,107,7,0,114,232,0,116,13,0,106,18,0,124, - 6,0,131,1,0,125,7,0,110,13,0,116,1,0,106,8, - 0,124,6,0,25,125,7,0,116,19,0,124,5,0,124,6, - 0,124,7,0,131,3,0,1,113,193,0,87,100,6,0,100, - 7,0,103,1,0,102,2,0,100,8,0,100,9,0,100,7, - 0,103,2,0,102,2,0,100,10,0,100,9,0,100,7,0, - 103,2,0,102,2,0,102,3,0,125,8,0,120,189,0,124, - 8,0,68,93,169,0,92,2,0,125,9,0,125,10,0,116, - 20,0,100,11,0,100,12,0,132,0,0,124,10,0,68,131, - 1,0,131,1,0,115,107,1,116,21,0,130,1,0,124,10, - 0,100,13,0,25,125,11,0,124,9,0,116,1,0,106,8, - 0,107,6,0,114,149,1,116,1,0,106,8,0,124,9,0, - 25,125,12,0,80,113,64,1,121,60,0,116,13,0,106,18, - 0,124,9,0,131,1,0,125,12,0,124,9,0,100,10,0, - 107,2,0,114,207,1,100,14,0,116,1,0,106,22,0,107, - 6,0,114,207,1,124,10,0,100,15,0,25,125,11,0,110, - 0,0,80,87,113,64,1,4,116,23,0,107,10,0,114,232, - 1,1,1,1,119,64,1,89,113,64,1,88,113,64,1,87, - 116,23,0,100,16,0,131,1,0,130,1,0,121,19,0,116, - 13,0,106,18,0,100,17,0,131,1,0,125,13,0,87,110, - 24,0,4,116,23,0,107,10,0,114,38,2,1,1,1,100, - 27,0,125,13,0,89,110,1,0,88,116,13,0,106,18,0, - 100,18,0,131,1,0,125,14,0,124,9,0,100,8,0,107, - 2,0,114,100,2,116,13,0,106,18,0,100,19,0,131,1, - 0,125,15,0,116,19,0,124,5,0,100,20,0,124,15,0, - 131,3,0,1,110,0,0,116,19,0,124,5,0,100,21,0, - 124,12,0,131,3,0,1,116,19,0,124,5,0,100,17,0, - 124,13,0,131,3,0,1,116,19,0,124,5,0,100,18,0, - 124,14,0,131,3,0,1,116,19,0,124,5,0,100,22,0, - 124,11,0,131,3,0,1,116,19,0,124,5,0,100,23,0, - 116,25,0,124,10,0,131,1,0,131,3,0,1,116,19,0, - 124,5,0,100,24,0,116,26,0,131,0,0,131,3,0,1, - 116,27,0,106,28,0,116,0,0,106,29,0,131,0,0,131, - 1,0,1,124,9,0,100,8,0,107,2,0,114,20,3,116, - 30,0,106,31,0,100,25,0,131,1,0,1,100,26,0,116, - 27,0,107,6,0,114,20,3,100,29,0,116,33,0,95,34, - 0,113,20,3,110,0,0,100,27,0,83,40,30,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,110, - 103,32,110,101,101,100,101,100,32,98,117,105,108,116,45,105, - 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, - 106,101,99,116,105,110,103,32,116,104,101,109,10,32,32,32, - 32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,108, - 32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,32, - 32,65,115,32,115,121,115,32,105,115,32,110,101,101,100,101, - 100,32,102,111,114,32,115,121,115,46,109,111,100,117,108,101, - 115,32,97,99,99,101,115,115,32,97,110,100,32,95,105,109, - 112,32,105,115,32,110,101,101,100,101,100,32,116,111,32,108, - 111,97,100,32,98,117,105,108,116,45,105,110,10,32,32,32, - 32,109,111,100,117,108,101,115,44,32,116,104,111,115,101,32, - 116,119,111,32,109,111,100,117,108,101,115,32,109,117,115,116, - 32,98,101,32,101,120,112,108,105,99,105,116,108,121,32,112, - 97,115,115,101,100,32,105,110,46,10,10,32,32,32,32,117, - 10,0,0,0,95,95,108,111,97,100,101,114,95,95,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,117,5,0, - 0,0,112,111,115,105,120,117,1,0,0,0,47,117,2,0, - 0,0,110,116,117,1,0,0,0,92,117,3,0,0,0,111, - 115,50,99,1,0,0,0,0,0,0,0,2,0,0,0,3, + 0,100,1,0,131,1,0,125,1,0,124,1,0,100,2,0, + 107,8,0,114,74,0,124,0,0,100,3,0,25,125,1,0, + 100,4,0,124,0,0,107,7,0,114,74,0,124,1,0,106, + 1,0,100,5,0,131,1,0,100,6,0,25,125,1,0,113, + 74,0,110,0,0,124,1,0,83,41,7,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,32,32,32,95,95,112,97,99,107,97,103, + 101,95,95,32,105,115,32,110,111,116,32,103,117,97,114,97, + 110,116,101,101,100,32,116,111,32,98,101,32,100,101,102,105, + 110,101,100,32,111,114,32,99,111,117,108,100,32,98,101,32, + 115,101,116,32,116,111,32,78,111,110,101,10,32,32,32,32, + 116,111,32,114,101,112,114,101,115,101,110,116,32,116,104,97, + 116,32,105,116,115,32,112,114,111,112,101,114,32,118,97,108, + 117,101,32,105,115,32,117,110,107,110,111,119,110,46,10,10, + 32,32,32,32,114,250,0,0,0,78,114,57,0,0,0,114, + 246,0,0,0,114,116,0,0,0,114,84,0,0,0,41,2, + 114,93,0,0,0,114,32,0,0,0,41,2,218,7,103,108, + 111,98,97,108,115,114,101,1,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,17,95,99,97,108,99, + 95,95,95,112,97,99,107,97,103,101,95,95,224,8,0,0, + 115,12,0,0,0,0,7,15,1,12,1,10,1,12,1,25, + 1,114,122,1,0,0,99,0,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,67,0,0,0,115,55,0,0,0, + 116,0,0,116,1,0,106,2,0,131,0,0,102,2,0,125, + 0,0,116,3,0,116,4,0,102,2,0,125,1,0,116,5, + 0,116,6,0,102,2,0,125,2,0,124,0,0,124,1,0, + 124,2,0,103,3,0,83,41,1,122,95,82,101,116,117,114, + 110,115,32,97,32,108,105,115,116,32,111,102,32,102,105,108, + 101,45,98,97,115,101,100,32,109,111,100,117,108,101,32,108, + 111,97,100,101,114,115,46,10,10,32,32,32,32,69,97,99, + 104,32,105,116,101,109,32,105,115,32,97,32,116,117,112,108, + 101,32,40,108,111,97,100,101,114,44,32,115,117,102,102,105, + 120,101,115,41,46,10,32,32,32,32,41,7,114,55,1,0, + 0,114,106,0,0,0,218,18,101,120,116,101,110,115,105,111, + 110,95,115,117,102,102,105,120,101,115,114,50,1,0,0,114, + 134,0,0,0,114,54,1,0,0,114,232,0,0,0,41,3, + 90,10,101,120,116,101,110,115,105,111,110,115,90,6,115,111, + 117,114,99,101,90,8,98,121,116,101,99,111,100,101,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,240,0, + 0,0,239,8,0,0,115,8,0,0,0,0,5,18,1,12, + 1,12,1,114,240,0,0,0,99,5,0,0,0,0,0,0, + 0,9,0,0,0,5,0,0,0,67,0,0,0,115,227,0, + 0,0,124,4,0,100,1,0,107,2,0,114,27,0,116,0, + 0,124,0,0,131,1,0,125,5,0,110,54,0,124,1,0, + 100,2,0,107,9,0,114,45,0,124,1,0,110,3,0,105, + 0,0,125,6,0,116,1,0,124,6,0,131,1,0,125,7, + 0,116,0,0,124,0,0,124,7,0,124,4,0,131,3,0, + 125,5,0,124,3,0,115,207,0,124,4,0,100,1,0,107, + 2,0,114,122,0,116,0,0,124,0,0,106,2,0,100,3, + 0,131,1,0,100,1,0,25,131,1,0,83,124,0,0,115, + 132,0,124,5,0,83,116,3,0,124,0,0,131,1,0,116, + 3,0,124,0,0,106,2,0,100,3,0,131,1,0,100,1, + 0,25,131,1,0,24,125,8,0,116,4,0,106,5,0,124, + 5,0,106,6,0,100,2,0,116,3,0,124,5,0,106,6, + 0,131,1,0,124,8,0,24,133,2,0,25,25,83,110,16, + 0,116,7,0,124,5,0,124,3,0,116,0,0,131,3,0, + 83,100,2,0,83,41,4,97,214,1,0,0,73,109,112,111, + 114,116,32,97,32,109,111,100,117,108,101,46,10,10,32,32, + 32,32,84,104,101,32,39,103,108,111,98,97,108,115,39,32, + 97,114,103,117,109,101,110,116,32,105,115,32,117,115,101,100, + 32,116,111,32,105,110,102,101,114,32,119,104,101,114,101,32, + 116,104,101,32,105,109,112,111,114,116,32,105,115,32,111,99, + 99,117,114,105,110,103,32,102,114,111,109,10,32,32,32,32, + 116,111,32,104,97,110,100,108,101,32,114,101,108,97,116,105, + 118,101,32,105,109,112,111,114,116,115,46,32,84,104,101,32, + 39,108,111,99,97,108,115,39,32,97,114,103,117,109,101,110, + 116,32,105,115,32,105,103,110,111,114,101,100,46,32,84,104, + 101,10,32,32,32,32,39,102,114,111,109,108,105,115,116,39, + 32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102, + 105,101,115,32,119,104,97,116,32,115,104,111,117,108,100,32, + 101,120,105,115,116,32,97,115,32,97,116,116,114,105,98,117, + 116,101,115,32,111,110,32,116,104,101,32,109,111,100,117,108, + 101,10,32,32,32,32,98,101,105,110,103,32,105,109,112,111, + 114,116,101,100,32,40,101,46,103,46,32,96,96,102,114,111, + 109,32,109,111,100,117,108,101,32,105,109,112,111,114,116,32, + 60,102,114,111,109,108,105,115,116,62,96,96,41,46,32,32, + 84,104,101,32,39,108,101,118,101,108,39,10,32,32,32,32, + 97,114,103,117,109,101,110,116,32,114,101,112,114,101,115,101, + 110,116,115,32,116,104,101,32,112,97,99,107,97,103,101,32, + 108,111,99,97,116,105,111,110,32,116,111,32,105,109,112,111, + 114,116,32,102,114,111,109,32,105,110,32,97,32,114,101,108, + 97,116,105,118,101,10,32,32,32,32,105,109,112,111,114,116, + 32,40,101,46,103,46,32,96,96,102,114,111,109,32,46,46, + 112,107,103,32,105,109,112,111,114,116,32,109,111,100,96,96, + 32,119,111,117,108,100,32,104,97,118,101,32,97,32,39,108, + 101,118,101,108,39,32,111,102,32,50,41,46,10,10,32,32, + 32,32,114,84,0,0,0,78,114,116,0,0,0,41,8,114, + 114,1,0,0,114,122,1,0,0,114,121,0,0,0,114,31, + 0,0,0,114,7,0,0,0,114,73,0,0,0,114,57,0, + 0,0,114,120,1,0,0,41,9,114,67,0,0,0,114,121, + 1,0,0,218,6,108,111,99,97,108,115,114,119,1,0,0, + 114,102,1,0,0,114,179,0,0,0,90,8,103,108,111,98, + 97,108,115,95,114,101,1,0,0,90,7,99,117,116,95,111, + 102,102,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,10,95,95,105,109,112,111,114,116,95,95,250,8,0, + 0,115,26,0,0,0,0,11,12,1,15,2,24,1,12,1, + 18,1,6,3,12,1,23,1,6,1,4,4,35,3,40,2, + 114,125,1,0,0,99,1,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,68,0,0,0,116, + 0,0,106,1,0,124,0,0,131,1,0,125,1,0,124,1, + 0,100,0,0,107,8,0,114,46,0,116,2,0,100,1,0, + 124,0,0,23,131,1,0,130,1,0,110,0,0,116,3,0, + 124,1,0,131,1,0,125,2,0,124,2,0,106,4,0,131, + 0,0,83,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,5,114,7,1,0,0,114,10,1,0,0,114,153,0, + 0,0,114,174,0,0,0,114,6,1,0,0,41,3,114,67, + 0,0,0,114,177,0,0,0,114,178,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,18,95,98, + 117,105,108,116,105,110,95,102,114,111,109,95,110,97,109,101, + 29,9,0,0,115,10,0,0,0,0,1,15,1,12,1,19, + 1,12,1,114,126,1,0,0,99,2,0,0,0,0,0,0, + 0,19,0,0,0,12,0,0,0,67,0,0,0,115,232,2, + 0,0,124,1,0,97,0,0,124,0,0,97,1,0,116,1, + 0,106,2,0,106,3,0,114,33,0,116,4,0,97,5,0, + 110,6,0,116,6,0,97,5,0,116,7,0,116,1,0,131, + 1,0,125,2,0,120,138,0,116,1,0,106,8,0,106,9, + 0,131,0,0,68,93,121,0,92,2,0,125,3,0,125,4, + 0,116,10,0,124,4,0,124,2,0,131,2,0,114,67,0, + 124,3,0,116,1,0,106,11,0,107,6,0,114,118,0,116, + 12,0,125,5,0,110,27,0,116,0,0,106,13,0,124,3, + 0,131,1,0,114,67,0,116,14,0,125,5,0,110,3,0, + 113,67,0,116,15,0,124,4,0,124,5,0,131,2,0,125, + 6,0,116,16,0,124,6,0,131,1,0,125,7,0,124,7, + 0,106,17,0,124,4,0,131,1,0,1,113,67,0,113,67, + 0,87,116,1,0,106,8,0,116,18,0,25,125,8,0,120, + 73,0,100,26,0,68,93,65,0,125,9,0,124,9,0,116, + 1,0,106,8,0,107,7,0,114,248,0,116,19,0,124,9, + 0,131,1,0,125,10,0,110,13,0,116,1,0,106,8,0, + 124,9,0,25,125,10,0,116,20,0,124,8,0,124,9,0, + 124,10,0,131,3,0,1,113,212,0,87,100,5,0,100,6, + 0,103,1,0,102,2,0,100,7,0,100,8,0,100,6,0, + 103,2,0,102,2,0,102,2,0,125,11,0,120,146,0,124, + 11,0,68,93,126,0,92,2,0,125,12,0,125,13,0,116, + 21,0,100,9,0,100,10,0,132,0,0,124,13,0,68,131, + 1,0,131,1,0,115,108,1,116,22,0,130,1,0,124,13, + 0,100,11,0,25,125,14,0,124,12,0,116,1,0,106,8, + 0,107,6,0,114,150,1,116,1,0,106,8,0,124,12,0, + 25,125,15,0,80,113,65,1,121,17,0,116,19,0,124,12, + 0,131,1,0,125,15,0,80,87,113,65,1,4,116,23,0, + 107,10,0,114,190,1,1,1,1,119,65,1,89,113,65,1, + 88,113,65,1,87,116,23,0,100,12,0,131,1,0,130,1, + 0,116,20,0,124,8,0,100,13,0,124,15,0,131,3,0, + 1,116,20,0,124,8,0,100,14,0,124,14,0,131,3,0, + 1,116,20,0,124,8,0,100,15,0,100,16,0,106,24,0, + 124,13,0,131,1,0,131,3,0,1,121,16,0,116,19,0, + 100,17,0,131,1,0,125,16,0,87,110,24,0,4,116,23, + 0,107,10,0,114,50,2,1,1,1,100,18,0,125,16,0, + 89,110,1,0,88,116,20,0,124,8,0,100,17,0,124,16, + 0,131,3,0,1,116,19,0,100,19,0,131,1,0,125,17, + 0,116,20,0,124,8,0,100,19,0,124,17,0,131,3,0, + 1,124,12,0,100,7,0,107,2,0,114,138,2,116,19,0, + 100,20,0,131,1,0,125,18,0,116,20,0,124,8,0,100, + 21,0,124,18,0,131,3,0,1,110,0,0,116,20,0,124, + 8,0,100,22,0,116,25,0,131,0,0,131,3,0,1,116, + 26,0,106,27,0,116,0,0,106,28,0,131,0,0,131,1, + 0,1,124,12,0,100,7,0,107,2,0,114,228,2,116,29, + 0,106,30,0,100,23,0,131,1,0,1,100,24,0,116,26, + 0,107,6,0,114,228,2,100,25,0,116,31,0,95,32,0, + 113,228,2,110,0,0,100,18,0,83,41,27,122,250,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,32,110,101,101,100,101, + 100,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,115,32,97,110,100,32,105,110,106,101,99,116,105,110,103, + 32,116,104,101,109,10,32,32,32,32,105,110,116,111,32,116, + 104,101,32,103,108,111,98,97,108,32,110,97,109,101,115,112, + 97,99,101,46,10,10,32,32,32,32,65,115,32,115,121,115, + 32,105,115,32,110,101,101,100,101,100,32,102,111,114,32,115, + 121,115,46,109,111,100,117,108,101,115,32,97,99,99,101,115, + 115,32,97,110,100,32,95,105,109,112,32,105,115,32,110,101, + 101,100,101,100,32,116,111,32,108,111,97,100,32,98,117,105, + 108,116,45,105,110,10,32,32,32,32,109,111,100,117,108,101, + 115,44,32,116,104,111,115,101,32,116,119,111,32,109,111,100, + 117,108,101,115,32,109,117,115,116,32,98,101,32,101,120,112, + 108,105,99,105,116,108,121,32,112,97,115,115,101,100,32,105, + 110,46,10,10,32,32,32,32,114,49,0,0,0,114,166,0, + 0,0,218,8,98,117,105,108,116,105,110,115,114,191,0,0, + 0,90,5,112,111,115,105,120,250,1,47,218,2,110,116,250, + 1,92,99,1,0,0,0,0,0,0,0,2,0,0,0,3, 0,0,0,115,0,0,0,115,33,0,0,0,124,0,0,93, 23,0,125,1,0,116,0,0,124,1,0,131,1,0,100,0, - 0,107,2,0,86,1,113,3,0,100,1,0,83,40,2,0, - 0,0,105,1,0,0,0,78,40,1,0,0,0,117,3,0, - 0,0,108,101,110,40,2,0,0,0,117,2,0,0,0,46, - 48,117,3,0,0,0,115,101,112,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,9,0,0,0,60,103,101,110,101,120, - 112,114,62,191,6,0,0,115,2,0,0,0,6,0,117,25, - 0,0,0,95,115,101,116,117,112,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,105,0,0,0, - 0,117,7,0,0,0,69,77,88,32,71,67,67,105,1,0, - 0,0,117,30,0,0,0,105,109,112,111,114,116,108,105,98, - 32,114,101,113,117,105,114,101,115,32,112,111,115,105,120,32, - 111,114,32,110,116,117,7,0,0,0,95,116,104,114,101,97, - 100,117,8,0,0,0,95,119,101,97,107,114,101,102,117,6, - 0,0,0,119,105,110,114,101,103,117,7,0,0,0,95,119, - 105,110,114,101,103,117,3,0,0,0,95,111,115,117,8,0, - 0,0,112,97,116,104,95,115,101,112,117,15,0,0,0,112, - 97,116,104,95,115,101,112,97,114,97,116,111,114,115,117,11, - 0,0,0,95,114,101,108,97,120,95,99,97,115,101,117,4, - 0,0,0,46,112,121,119,117,6,0,0,0,95,100,46,112, - 121,100,78,40,4,0,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,84,40,35,0,0,0,117,4,0, - 0,0,95,105,109,112,117,3,0,0,0,115,121,115,117,5, - 0,0,0,102,108,97,103,115,117,8,0,0,0,111,112,116, - 105,109,105,122,101,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,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,4,0,0,0,116,121,112,101, - 117,7,0,0,0,109,111,100,117,108,101,115,117,5,0,0, - 0,105,116,101,109,115,117,10,0,0,0,105,115,105,110,115, - 116,97,110,99,101,117,7,0,0,0,104,97,115,97,116,116, - 114,117,20,0,0,0,98,117,105,108,116,105,110,95,109,111, - 100,117,108,101,95,110,97,109,101,115,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,101,114,95,95,117,9,0, - 0,0,105,115,95,102,114,111,122,101,110,117,14,0,0,0, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,117,8, - 0,0,0,95,95,110,97,109,101,95,95,117,11,0,0,0, - 108,111,97,100,95,109,111,100,117,108,101,117,7,0,0,0, - 115,101,116,97,116,116,114,117,3,0,0,0,97,108,108,117, - 14,0,0,0,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,117,7,0,0,0,118,101,114,115,105,111,110,117,11, - 0,0,0,73,109,112,111,114,116,69,114,114,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,18,0,0,0,69,88,84,69,78,83,73, - 79,78,95,83,85,70,70,73,88,69,83,117,6,0,0,0, - 101,120,116,101,110,100,117,18,0,0,0,101,120,116,101,110, - 115,105,111,110,95,115,117,102,102,105,120,101,115,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,117,4,0,0, - 0,84,114,117,101,117,21,0,0,0,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,117, - 11,0,0,0,68,69,66,85,71,95,66,85,73,76,68,40, - 16,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,11,0,0,0,109,111,100,117,108,101,95,116, - 121,112,101,117,4,0,0,0,110,97,109,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,117,13,0, - 0,0,119,105,110,114,101,103,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,154,6,0,0,115,106,0,0,0,0, - 9,6,1,6,2,12,1,9,2,6,2,12,1,28,1,15, - 1,15,1,15,1,12,1,15,1,22,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,12, - 1,15,1,19,2,16,1,16,1,16,1,16,1,22,2,19, - 1,19,1,12,1,13,1,12,1,117,6,0,0,0,95,115, - 101,116,117,112,99,2,0,0,0,0,0,0,0,3,0,0, - 0,3,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,131,0, - 0,125,2,0,116,2,0,106,3,0,106,4,0,116,5,0, - 106,6,0,124,2,0,140,0,0,103,1,0,131,1,0,1, - 116,2,0,106,7,0,106,8,0,116,9,0,131,1,0,1, - 116,2,0,106,7,0,106,8,0,116,10,0,131,1,0,1, - 116,11,0,106,12,0,100,1,0,107,2,0,114,116,0,116, - 2,0,106,7,0,106,8,0,116,13,0,131,1,0,1,110, - 0,0,116,2,0,106,7,0,106,8,0,116,14,0,131,1, - 0,1,100,2,0,83,40,3,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,117,2,0,0,0,110,116,78,40,15,0,0,0,117, - 6,0,0,0,95,115,101,116,117,112,117,27,0,0,0,95, - 103,101,116,95,115,117,112,112,111,114,116,101,100,95,102,105, - 108,101,95,108,111,97,100,101,114,115,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,6,0,0,0,97,112,112,101, - 110,100,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,3,0,0,0,95,111, - 115,117,8,0,0,0,95,95,110,97,109,101,95,95,117,21, - 0,0,0,87,105,110,100,111,119,115,82,101,103,105,115,116, - 114,121,70,105,110,100,101,114,117,10,0,0,0,80,97,116, - 104,70,105,110,100,101,114,40,3,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,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,233,6,0,0,115,16, - 0,0,0,0,2,13,1,9,1,28,1,16,1,16,1,15, - 1,19,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,74,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,25,0,0,0,95,99,97,108,108,95,119,105,116, - 104,95,102,114,97,109,101,115,95,114,101,109,111,118,101,100, - 117,3,0,0,0,111,114,100,117,17,0,0,0,95,82,65, - 87,95,77,65,71,73,67,95,78,85,77,66,69,82,117,5, - 0,0,0,98,121,116,101,115,117,5,0,0,0,114,97,110, - 103,101,117,12,0,0,0,95,77,65,71,73,67,95,66,89, - 84,69,83,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,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, - 17,0,0,0,115,111,117,114,99,101,95,102,114,111,109,95, - 99,97,99,104,101,117,15,0,0,0,95,103,101,116,95,115, - 111,117,114,99,101,102,105,108,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,17, - 0,0,0,95,102,105,110,100,95,109,111,100,117,108,101,95, - 115,104,105,109,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,21,0,0,0, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,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,18,0,0,0,69,88,84,69,78,83, - 73,79,78,95,83,85,70,70,73,88,69,83,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,27,0,0, - 0,95,103,101,116,95,115,117,112,112,111,114,116,101,100,95, - 102,105,108,101,95,108,111,97,100,101,114,115,117,10,0,0, - 0,95,95,105,109,112,111,114,116,95,95,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,132,0,0,0,6,21,6,3,12,13, - 12,16,12,13,12,12,12,12,12,10,12,6,12,7,15,22, - 12,8,15,3,12,12,6,2,6,3,22,4,19,68,19,23, - 12,19,12,20,12,100,34,1,37,2,6,2,9,2,9,1, - 9,2,15,27,12,23,12,19,18,8,12,13,12,11,12,55, - 12,18,12,11,12,11,12,17,19,57,19,54,19,50,19,83, - 22,134,19,29,25,49,25,25,6,3,19,45,19,55,19,18, - 19,91,19,128,19,13,12,9,12,17,12,17,6,2,12,50, - 12,13,18,24,12,34,12,15,12,11,24,36,12,79, + 0,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114, + 29,0,0,0,78,41,1,114,31,0,0,0,41,2,114,22, + 0,0,0,114,130,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,77,0,0,0,81,9,0,0, + 115,2,0,0,0,6,0,122,25,95,115,101,116,117,112,46, + 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, + 114,62,114,84,0,0,0,122,30,105,109,112,111,114,116,108, + 105,98,32,114,101,113,117,105,114,101,115,32,112,111,115,105, + 120,32,111,114,32,110,116,114,3,0,0,0,114,25,0,0, + 0,114,21,0,0,0,114,30,0,0,0,114,85,0,0,0, + 78,114,111,0,0,0,90,6,119,105,110,114,101,103,114,20, + 1,0,0,114,6,0,0,0,122,4,46,112,121,119,122,6, + 95,100,46,112,121,100,84,41,4,122,3,95,105,111,122,9, + 95,119,97,114,110,105,110,103,115,122,8,98,117,105,108,116, + 105,110,115,122,7,109,97,114,115,104,97,108,41,33,114,106, + 0,0,0,114,7,0,0,0,114,117,0,0,0,114,118,0, + 0,0,114,120,0,0,0,114,232,0,0,0,114,119,0,0, + 0,114,66,0,0,0,114,73,0,0,0,218,5,105,116,101, + 109,115,114,192,0,0,0,114,157,0,0,0,114,7,1,0, + 0,114,162,0,0,0,114,16,1,0,0,114,247,0,0,0, + 114,174,0,0,0,114,254,0,0,0,114,57,0,0,0,114, + 126,1,0,0,114,61,0,0,0,218,3,97,108,108,114,100, + 0,0,0,114,153,0,0,0,114,26,0,0,0,114,11,0, + 0,0,114,58,1,0,0,114,197,0,0,0,114,123,1,0, + 0,114,134,0,0,0,114,223,0,0,0,114,19,1,0,0, + 114,23,1,0,0,41,19,218,10,115,121,115,95,109,111,100, + 117,108,101,218,11,95,105,109,112,95,109,111,100,117,108,101, + 90,11,109,111,100,117,108,101,95,116,121,112,101,114,67,0, + 0,0,114,179,0,0,0,114,169,0,0,0,114,177,0,0, + 0,114,178,0,0,0,90,11,115,101,108,102,95,109,111,100, + 117,108,101,90,12,98,117,105,108,116,105,110,95,110,97,109, + 101,90,14,98,117,105,108,116,105,110,95,109,111,100,117,108, + 101,90,10,111,115,95,100,101,116,97,105,108,115,90,10,98, + 117,105,108,116,105,110,95,111,115,114,21,0,0,0,114,25, + 0,0,0,90,9,111,115,95,109,111,100,117,108,101,90,13, + 116,104,114,101,97,100,95,109,111,100,117,108,101,90,14,119, + 101,97,107,114,101,102,95,109,111,100,117,108,101,90,13,119, + 105,110,114,101,103,95,109,111,100,117,108,101,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,6,95,115,101, + 116,117,112,37,9,0,0,115,108,0,0,0,0,9,6,1, + 6,2,12,1,9,2,6,3,12,1,28,1,15,1,15,1, + 9,1,15,1,9,2,3,1,15,1,12,1,20,3,13,1, + 13,1,15,1,15,2,13,1,20,3,33,1,19,2,31,1, + 10,1,15,1,13,1,4,2,3,1,12,1,5,1,13,1, + 12,2,12,1,16,1,16,1,25,3,3,1,16,1,13,2, + 11,1,16,3,12,1,16,3,12,1,12,1,19,3,19,1, + 19,1,12,1,13,1,12,1,114,135,1,0,0,99,2,0, + 0,0,0,0,0,0,3,0,0,0,3,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,131,0,0,125,2,0,116,2,0, + 106,3,0,106,4,0,116,5,0,106,6,0,124,2,0,140, + 0,0,103,1,0,131,1,0,1,116,2,0,106,7,0,106, + 8,0,116,9,0,131,1,0,1,116,2,0,106,7,0,106, + 8,0,116,10,0,131,1,0,1,116,11,0,106,12,0,100, + 1,0,107,2,0,114,116,0,116,2,0,106,7,0,106,8, + 0,116,13,0,131,1,0,1,110,0,0,116,2,0,106,7, + 0,106,8,0,116,14,0,131,1,0,1,100,2,0,83,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,114,129,1,0,0,78,41,15,114,135,1, + 0,0,114,240,0,0,0,114,7,0,0,0,114,77,1,0, + 0,114,197,0,0,0,114,85,1,0,0,114,99,1,0,0, + 114,105,1,0,0,114,223,0,0,0,114,7,1,0,0,114, + 16,1,0,0,114,3,0,0,0,114,57,0,0,0,114,19, + 1,0,0,114,72,1,0,0,41,3,114,133,1,0,0,114, + 134,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95, + 108,111,97,100,101,114,115,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,218,8,95,105,110,115,116,97,108,108, + 124,9,0,0,115,16,0,0,0,0,2,13,1,9,1,28, + 1,16,1,16,1,15,1,19,1,114,136,1,0,0,41,3, + 122,3,119,105,110,114,1,0,0,0,114,2,0,0,0,41, + 91,114,59,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,17,0,0,0,114,19,0,0,0,114,28,0,0,0,114, + 38,0,0,0,114,39,0,0,0,114,43,0,0,0,114,44, + 0,0,0,114,46,0,0,0,114,55,0,0,0,114,65,0, + 0,0,114,68,0,0,0,114,66,0,0,0,218,8,95,95, + 99,111,100,101,95,95,114,193,0,0,0,114,69,0,0,0, + 114,109,0,0,0,114,92,0,0,0,114,99,0,0,0,114, + 82,0,0,0,114,83,0,0,0,114,102,0,0,0,114,103, + 0,0,0,114,105,0,0,0,114,112,0,0,0,114,114,0, + 0,0,114,15,0,0,0,114,185,0,0,0,114,14,0,0, + 0,114,18,0,0,0,90,17,95,82,65,87,95,77,65,71, + 73,67,95,78,85,77,66,69,82,114,125,0,0,0,114,134, + 0,0,0,114,119,0,0,0,114,120,0,0,0,114,132,0, + 0,0,114,135,0,0,0,114,142,0,0,0,114,144,0,0, + 0,114,152,0,0,0,114,156,0,0,0,114,161,0,0,0, + 114,164,0,0,0,114,172,0,0,0,114,180,0,0,0,114, + 190,0,0,0,114,195,0,0,0,114,198,0,0,0,114,203, + 0,0,0,114,211,0,0,0,114,212,0,0,0,114,216,0, + 0,0,114,173,0,0,0,218,6,111,98,106,101,99,116,114, + 241,0,0,0,114,239,0,0,0,114,247,0,0,0,114,174, + 0,0,0,114,7,1,0,0,114,16,1,0,0,114,19,1, + 0,0,114,29,1,0,0,114,30,1,0,0,114,45,1,0, + 0,114,50,1,0,0,114,54,1,0,0,114,58,1,0,0, + 114,55,1,0,0,114,59,1,0,0,114,251,0,0,0,114, + 72,1,0,0,114,85,1,0,0,114,100,1,0,0,114,103, + 1,0,0,114,104,1,0,0,114,106,1,0,0,114,109,1, + 0,0,114,118,1,0,0,114,110,1,0,0,114,112,1,0, + 0,114,113,1,0,0,114,114,1,0,0,114,120,1,0,0, + 114,122,1,0,0,114,240,0,0,0,114,125,1,0,0,114, + 126,1,0,0,114,135,1,0,0,114,136,1,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,8,60,109,111,100,117,108,101,62,8,0,0,0, + 115,168,0,0,0,6,17,6,3,12,12,12,5,12,5,12, + 6,12,12,12,10,12,9,12,5,12,7,15,22,12,8,12, + 4,15,4,19,20,6,2,6,3,22,4,19,68,19,21,19, + 19,12,19,12,20,12,113,22,1,18,2,6,2,9,2,9, + 1,9,2,15,27,12,23,12,19,12,12,18,8,12,18,12, + 11,12,11,12,17,12,16,21,55,21,12,18,10,12,14,12, + 36,19,27,19,106,24,22,9,3,12,1,15,63,18,45,19, + 232,19,70,19,71,19,63,19,24,22,110,19,41,25,43,25, + 16,6,3,19,57,19,57,19,38,19,129,19,146,19,13,12, + 9,12,9,15,40,12,17,6,1,10,2,12,27,12,6,18, + 24,12,32,12,15,12,11,24,35,12,8,12,87, }; diff --git a/Python/marshal.c b/Python/marshal.c index cc17329..dc5411c 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -1,8 +1,10 @@ /* Write Python objects to files and read them back. - This is intended for writing and reading compiled Python code only; - a true persistent storage facility would be much harder, since - it would have to take circular links and sharing into account. */ + This is primarily intended for writing and reading compiled Python code, + even though dicts, lists, sets and frozensets, not commonly seen in + code objects, are supported. + Version 3 of this protocol properly supports circular links + and sharing. */ #define PY_SSIZE_T_CLEAN @@ -31,16 +33,14 @@ #define TYPE_STOPITER 'S' #define TYPE_ELLIPSIS '.' #define TYPE_INT 'i' -/* TYPE_INT64 is deprecated. It is not - generated anymore, and support for reading it - will be removed in Python 3.4. */ -#define TYPE_INT64 'I' #define TYPE_FLOAT 'f' #define TYPE_BINARY_FLOAT 'g' #define TYPE_COMPLEX 'x' #define TYPE_BINARY_COMPLEX 'y' #define TYPE_LONG 'l' #define TYPE_STRING 's' +#define TYPE_INTERNED 't' +#define TYPE_REF 'r' #define TYPE_TUPLE '(' #define TYPE_LIST '[' #define TYPE_DICT '{' @@ -49,6 +49,13 @@ #define TYPE_UNKNOWN '?' #define TYPE_SET '<' #define TYPE_FROZENSET '>' +#define FLAG_REF '\x80' /* with a type, add obj to index */ + +#define TYPE_ASCII 'a' +#define TYPE_ASCII_INTERNED 'A' +#define TYPE_SMALL_TUPLE ')' +#define TYPE_SHORT_ASCII 'z' +#define TYPE_SHORT_ASCII_INTERNED 'Z' #define WFERR_OK 0 #define WFERR_UNMARSHALLABLE 1 @@ -65,15 +72,18 @@ typedef struct { PyObject *current_filename; char *ptr; char *end; + char *buf; + Py_ssize_t buf_size; + PyObject *refs; /* dict on marshal, list on unmarshal */ int version; } WFILE; #define w_byte(c, p) if (((p)->fp)) putc((c), (p)->fp); \ else if ((p)->ptr != (p)->end) *(p)->ptr++ = (c); \ - else w_more(c, p) + else w_more((c), p) static void -w_more(int c, WFILE *p) +w_more(char c, WFILE *p) { Py_ssize_t size, newsize; if (p->str == NULL) @@ -90,7 +100,7 @@ w_more(int c, WFILE *p) p->ptr = PyBytes_AS_STRING((PyBytesObject *)p->str) + size; p->end = PyBytes_AS_STRING((PyBytesObject *)p->str) + newsize; - *p->ptr++ = Py_SAFE_DOWNCAST(c, int, char); + *p->ptr++ = c; } } @@ -146,6 +156,13 @@ w_pstring(const char *s, Py_ssize_t n, WFILE *p) w_string(s, n, p); } +static void +w_short_pstring(const char *s, Py_ssize_t n, WFILE *p) +{ + w_byte(Py_SAFE_DOWNCAST(n, Py_ssize_t, unsigned char), p); + w_string(s, n, p); +} + /* We assume that Python ints are stored internally in base some power of 2**15; for the sake of portability we'll always read and write them in base exactly 2**15. */ @@ -158,13 +175,17 @@ w_pstring(const char *s, Py_ssize_t n, WFILE *p) #endif #define PyLong_MARSHAL_RATIO (PyLong_SHIFT / PyLong_MARSHAL_SHIFT) +#define W_TYPE(t, p) do { \ + w_byte((t) | flag, (p)); \ +} while(0) + static void -w_PyLong(const PyLongObject *ob, WFILE *p) +w_PyLong(const PyLongObject *ob, char flag, WFILE *p) { Py_ssize_t i, j, n, l; digit d; - w_byte(TYPE_LONG, p); + W_TYPE(TYPE_LONG, p); if (Py_SIZE(ob) == 0) { w_long((long)0, p); return; @@ -201,10 +222,64 @@ w_PyLong(const PyLongObject *ob, WFILE *p) } while (d != 0); } +static int +w_ref(PyObject *v, char *flag, WFILE *p) +{ + PyObject *id; + PyObject *idx; + + if (p->version < 3 || p->refs == NULL) + return 0; /* not writing object references */ + + /* if it has only one reference, it definitely isn't shared */ + if (Py_REFCNT(v) == 1) + return 0; + + id = PyLong_FromVoidPtr((void*)v); + if (id == NULL) + goto err; + idx = PyDict_GetItem(p->refs, id); + if (idx != NULL) { + /* write the reference index to the stream */ + long w = PyLong_AsLong(idx); + Py_DECREF(id); + if (w == -1 && PyErr_Occurred()) { + goto err; + } + /* we don't store "long" indices in the dict */ + assert(0 <= w && w <= 0x7fffffff); + w_byte(TYPE_REF, p); + w_long(w, p); + return 1; + } else { + int ok; + Py_ssize_t s = PyDict_Size(p->refs); + /* we don't support long indices */ + if (s >= 0x7fffffff) { + PyErr_SetString(PyExc_ValueError, "too many objects"); + goto err; + } + idx = PyLong_FromSsize_t(s); + ok = idx && PyDict_SetItem(p->refs, id, idx) == 0; + Py_DECREF(id); + Py_XDECREF(idx); + if (!ok) + goto err; + *flag |= FLAG_REF; + return 0; + } +err: + p->error = WFERR_UNMARSHALLABLE; + return 1; +} + +static void +w_complex_object(PyObject *v, char flag, WFILE *p); + static void w_object(PyObject *v, WFILE *p) { - Py_ssize_t i, n; + char flag = '\0'; p->depth++; @@ -229,24 +304,35 @@ w_object(PyObject *v, WFILE *p) else if (v == Py_True) { w_byte(TYPE_TRUE, p); } - else if (PyLong_CheckExact(v)) { + else if (!w_ref(v, &flag, p)) + w_complex_object(v, flag, p); + + p->depth--; +} + +static void +w_complex_object(PyObject *v, char flag, WFILE *p) +{ + Py_ssize_t i, n; + + if (PyLong_CheckExact(v)) { long x = PyLong_AsLong(v); if ((x == -1) && PyErr_Occurred()) { PyLongObject *ob = (PyLongObject *)v; PyErr_Clear(); - w_PyLong(ob, p); + w_PyLong(ob, flag, p); } else { #if SIZEOF_LONG > 4 long y = Py_ARITHMETIC_RIGHT_SHIFT(long, x, 31); if (y && y != -1) { /* Too large for TYPE_INT */ - w_PyLong((PyLongObject*)v, p); + w_PyLong((PyLongObject*)v, flag, p); } else #endif { - w_byte(TYPE_INT, p); + W_TYPE(TYPE_INT, p); w_long(x, p); } } @@ -259,7 +345,7 @@ w_object(PyObject *v, WFILE *p) p->error = WFERR_UNMARSHALLABLE; return; } - w_byte(TYPE_BINARY_FLOAT, p); + W_TYPE(TYPE_BINARY_FLOAT, p); w_string((char*)buf, 8, p); } else { @@ -270,7 +356,7 @@ w_object(PyObject *v, WFILE *p) return; } n = strlen(buf); - w_byte(TYPE_FLOAT, p); + W_TYPE(TYPE_FLOAT, p); w_byte((int)n, p); w_string(buf, n, p); PyMem_Free(buf); @@ -284,7 +370,7 @@ w_object(PyObject *v, WFILE *p) p->error = WFERR_UNMARSHALLABLE; return; } - w_byte(TYPE_BINARY_COMPLEX, p); + W_TYPE(TYPE_BINARY_COMPLEX, p); w_string((char*)buf, 8, p); if (_PyFloat_Pack8(PyComplex_ImagAsDouble(v), buf, 1) < 0) { @@ -295,7 +381,7 @@ w_object(PyObject *v, WFILE *p) } else { char *buf; - w_byte(TYPE_COMPLEX, p); + W_TYPE(TYPE_COMPLEX, p); buf = PyOS_double_to_string(PyComplex_RealAsDouble(v), 'g', 17, 0, NULL); if (!buf) { @@ -319,31 +405,61 @@ w_object(PyObject *v, WFILE *p) } } else if (PyBytes_CheckExact(v)) { - w_byte(TYPE_STRING, p); + W_TYPE(TYPE_STRING, p); w_pstring(PyBytes_AS_STRING(v), PyBytes_GET_SIZE(v), p); } else if (PyUnicode_CheckExact(v)) { - PyObject *utf8; - utf8 = PyUnicode_AsEncodedString(v, "utf8", "surrogatepass"); - if (utf8 == NULL) { - p->depth--; - p->error = WFERR_UNMARSHALLABLE; - return; + if (p->version >= 4 && PyUnicode_IS_ASCII(v)) { + int is_short = PyUnicode_GET_LENGTH(v) < 256; + if (is_short) { + if (PyUnicode_CHECK_INTERNED(v)) + W_TYPE(TYPE_SHORT_ASCII_INTERNED, p); + else + W_TYPE(TYPE_SHORT_ASCII, p); + w_short_pstring((char *) PyUnicode_1BYTE_DATA(v), + PyUnicode_GET_LENGTH(v), p); + } + else { + if (PyUnicode_CHECK_INTERNED(v)) + W_TYPE(TYPE_ASCII_INTERNED, p); + else + W_TYPE(TYPE_ASCII, p); + w_pstring((char *) PyUnicode_1BYTE_DATA(v), + PyUnicode_GET_LENGTH(v), p); + } + } + else { + PyObject *utf8; + utf8 = PyUnicode_AsEncodedString(v, "utf8", "surrogatepass"); + if (utf8 == NULL) { + p->depth--; + p->error = WFERR_UNMARSHALLABLE; + return; + } + if (p->version >= 3 && PyUnicode_CHECK_INTERNED(v)) + W_TYPE(TYPE_INTERNED, p); + else + W_TYPE(TYPE_UNICODE, p); + w_pstring(PyBytes_AS_STRING(utf8), PyBytes_GET_SIZE(utf8), p); + Py_DECREF(utf8); } - w_byte(TYPE_UNICODE, p); - w_pstring(PyBytes_AS_STRING(utf8), PyBytes_GET_SIZE(utf8), p); - Py_DECREF(utf8); } else if (PyTuple_CheckExact(v)) { - w_byte(TYPE_TUPLE, p); n = PyTuple_Size(v); - W_SIZE(n, p); + if (p->version >= 4 && n < 256) { + W_TYPE(TYPE_SMALL_TUPLE, p); + w_byte((unsigned char)n, p); + } + else { + W_TYPE(TYPE_TUPLE, p); + W_SIZE(n, p); + } for (i = 0; i < n; i++) { w_object(PyTuple_GET_ITEM(v, i), p); } } else if (PyList_CheckExact(v)) { - w_byte(TYPE_LIST, p); + W_TYPE(TYPE_LIST, p); n = PyList_GET_SIZE(v); W_SIZE(n, p); for (i = 0; i < n; i++) { @@ -353,7 +469,7 @@ w_object(PyObject *v, WFILE *p) else if (PyDict_CheckExact(v)) { Py_ssize_t pos; PyObject *key, *value; - w_byte(TYPE_DICT, p); + W_TYPE(TYPE_DICT, p); /* This one is NULL object terminated! */ pos = 0; while (PyDict_Next(v, &pos, &key, &value)) { @@ -366,9 +482,9 @@ w_object(PyObject *v, WFILE *p) PyObject *value, *it; if (PyObject_TypeCheck(v, &PySet_Type)) - w_byte(TYPE_SET, p); + W_TYPE(TYPE_SET, p); else - w_byte(TYPE_FROZENSET, p); + W_TYPE(TYPE_FROZENSET, p); n = PyObject_Size(v); if (n == -1) { p->depth--; @@ -395,7 +511,7 @@ w_object(PyObject *v, WFILE *p) } else if (PyCode_Check(v)) { PyCodeObject *co = (PyCodeObject *)v; - w_byte(TYPE_CODE, p); + W_TYPE(TYPE_CODE, p); w_long(co->co_argcount, p); w_long(co->co_kwonlyargcount, p); w_long(co->co_nlocals, p); @@ -421,15 +537,14 @@ w_object(PyObject *v, WFILE *p) p->error = WFERR_UNMARSHALLABLE; return; } - w_byte(TYPE_STRING, p); + W_TYPE(TYPE_STRING, p); w_pstring(view.buf, view.len, p); PyBuffer_Release(&view); } else { - w_byte(TYPE_UNKNOWN, p); + W_TYPE(TYPE_UNKNOWN, p); p->error = WFERR_UNMARSHALLABLE; } - p->depth--; } /* version currently has no effect for writing ints. */ @@ -440,6 +555,7 @@ PyMarshal_WriteLongToFile(long x, FILE *fp, int version) wf.fp = fp; wf.error = WFERR_OK; wf.depth = 0; + wf.refs = NULL; wf.version = version; w_long(x, &wf); } @@ -451,81 +567,107 @@ PyMarshal_WriteObjectToFile(PyObject *x, FILE *fp, int version) wf.fp = fp; wf.error = WFERR_OK; wf.depth = 0; + if (version >= 3) { + if ((wf.refs = PyDict_New()) == NULL) + return; /* caller mush check PyErr_Occurred() */ + } else + wf.refs = NULL; wf.version = version; w_object(x, &wf); + Py_XDECREF(wf.refs); } typedef WFILE RFILE; /* Same struct with different invariants */ -#define rs_byte(p) (((p)->ptr < (p)->end) ? (unsigned char)*(p)->ptr++ : EOF) - -static Py_ssize_t -r_string(char *s, Py_ssize_t n, RFILE *p) +static char * +r_string(Py_ssize_t n, RFILE *p) { - char *ptr; - Py_ssize_t read, left; + Py_ssize_t read = -1; + + if (p->ptr != NULL) { + /* Fast path for loads() */ + char *res = p->ptr; + Py_ssize_t left = p->end - p->ptr; + if (left < n) { + PyErr_SetString(PyExc_EOFError, + "marshal data too short"); + return NULL; + } + p->ptr += n; + return res; + } + if (p->buf == NULL) { + p->buf = PyMem_MALLOC(n); + if (p->buf == NULL) { + PyErr_NoMemory(); + return NULL; + } + p->buf_size = n; + } + else if (p->buf_size < n) { + p->buf = PyMem_REALLOC(p->buf, n); + if (p->buf == NULL) { + PyErr_NoMemory(); + return NULL; + } + p->buf_size = n; + } if (!p->readable) { - if (p->fp != NULL) - /* The result fits into int because it must be <=n. */ - read = fread(s, 1, n, p->fp); - else { - left = p->end - p->ptr; - read = (left < n) ? left : n; - memcpy(s, p->ptr, read); - p->ptr += read; - } + assert(p->fp != NULL); + read = fread(p->buf, 1, n, p->fp); } else { - _Py_IDENTIFIER(read); - - PyObject *data = _PyObject_CallMethodId(p->readable, &PyId_read, "n", n); - read = 0; - if (data != NULL) { - if (!PyBytes_Check(data)) { - PyErr_Format(PyExc_TypeError, - "f.read() returned not bytes but %.100s", - data->ob_type->tp_name); - } - else { - read = PyBytes_GET_SIZE(data); - if (read > 0) { - if (read > n) { - PyErr_Format(PyExc_ValueError, - "read() returned too much data: " - "%zd bytes requested, %zd returned", - n, read); - read = -1; - } - else { - ptr = PyBytes_AS_STRING(data); - memcpy(s, ptr, read); - } - } - } - Py_DECREF(data); + _Py_IDENTIFIER(readinto); + PyObject *res, *mview; + Py_buffer buf; + + if (PyBuffer_FillInfo(&buf, NULL, p->buf, n, 0, PyBUF_CONTIG) == -1) + return NULL; + mview = PyMemoryView_FromBuffer(&buf); + if (mview == NULL) + return NULL; + + res = _PyObject_CallMethodId(p->readable, &PyId_readinto, "N", mview); + if (res != NULL) { + read = PyNumber_AsSsize_t(res, PyExc_ValueError); + Py_DECREF(res); } } - if (!PyErr_Occurred() && (read < n)) { - PyErr_SetString(PyExc_EOFError, "EOF read where not expected"); + if (read != n) { + if (!PyErr_Occurred()) { + if (read > n) + PyErr_Format(PyExc_ValueError, + "read() returned too much data: " + "%zd bytes requested, %zd returned", + n, read); + else + PyErr_SetString(PyExc_EOFError, + "EOF read where not expected"); + } + return NULL; } - return read; + return p->buf; } - static int r_byte(RFILE *p) { int c = EOF; - unsigned char ch; - Py_ssize_t n; - if (!p->readable) - c = p->fp ? getc(p->fp) : rs_byte(p); + if (p->ptr != NULL) { + if (p->ptr < p->end) + c = (unsigned char) *p->ptr++; + return c; + } + if (!p->readable) { + assert(p->fp); + c = getc(p->fp); + } else { - n = r_string((char *) &ch, 1, p); - if (n > 0) - c = ch; + char *ptr = r_string(1, p); + if (ptr != NULL) + c = *(unsigned char *) ptr; } return c; } @@ -533,69 +675,37 @@ r_byte(RFILE *p) static int r_short(RFILE *p) { - register short x; - unsigned char buffer[2]; - - r_string((char *) buffer, 2, p); - x = buffer[0]; - x |= buffer[1] << 8; - /* Sign-extension, in case short greater than 16 bits */ - x |= -(x & 0x8000); + short x = -1; + unsigned char *buffer; + + buffer = (unsigned char *) r_string(2, p); + if (buffer != NULL) { + x = buffer[0]; + x |= buffer[1] << 8; + /* Sign-extension, in case short greater than 16 bits */ + x |= -(x & 0x8000); + } return x; } static long r_long(RFILE *p) { - register long x; - unsigned char buffer[4]; - - r_string((char *) buffer, 4, p); - x = buffer[0]; - x |= (long)buffer[1] << 8; - x |= (long)buffer[2] << 16; - x |= (long)buffer[3] << 24; + long x = -1; + unsigned char *buffer; + + buffer = (unsigned char *) r_string(4, p); + if (buffer != NULL) { + x = buffer[0]; + x |= (long)buffer[1] << 8; + x |= (long)buffer[2] << 16; + x |= (long)buffer[3] << 24; #if SIZEOF_LONG > 4 - /* Sign extension for 64-bit machines */ - x |= -(x & 0x80000000L); -#endif - return x; -} - -/* r_long64 deals with the TYPE_INT64 code. On a machine with - sizeof(long) > 4, it returns a Python int object, else a Python long - object. Note that w_long64 writes out TYPE_INT if 32 bits is enough, - so there's no inefficiency here in returning a PyLong on 32-bit boxes - for everything written via TYPE_INT64 (i.e., if an int is written via - TYPE_INT64, it *needs* more than 32 bits). -*/ -static PyObject * -r_long64(RFILE *p) -{ - PyObject *result = NULL; - long lo4 = r_long(p); - long hi4 = r_long(p); - - if (!PyErr_Occurred()) { -#if SIZEOF_LONG > 4 - long x = (hi4 << 32) | (lo4 & 0xFFFFFFFFL); - result = PyLong_FromLong(x); -#else - unsigned char buf[8]; - int one = 1; - int is_little_endian = (int)*(char*)&one; - if (is_little_endian) { - memcpy(buf, &lo4, 4); - memcpy(buf+4, &hi4, 4); - } - else { - memcpy(buf, &hi4, 4); - memcpy(buf+4, &lo4, 4); - } - result = _PyLong_FromByteArray(buf, 8, is_little_endian, 1); + /* Sign extension for 64-bit machines */ + x |= -(x & 0x80000000L); #endif } - return result; + return x; } static PyObject * @@ -622,25 +732,31 @@ r_PyLong(RFILE *p) ob = _PyLong_New(size); if (ob == NULL) return NULL; + Py_SIZE(ob) = n > 0 ? size : -size; for (i = 0; i < size-1; i++) { d = 0; for (j=0; j < PyLong_MARSHAL_RATIO; j++) { md = r_short(p); - if (PyErr_Occurred()) - break; + if (PyErr_Occurred()) { + Py_DECREF(ob); + return NULL; + } if (md < 0 || md > PyLong_MARSHAL_BASE) goto bad_digit; d += (digit)md << j*PyLong_MARSHAL_SHIFT; } ob->ob_digit[i] = d; } + d = 0; for (j=0; j < shorts_in_top_digit; j++) { md = r_short(p); - if (PyErr_Occurred()) - break; + if (PyErr_Occurred()) { + Py_DECREF(ob); + return NULL; + } if (md < 0 || md > PyLong_MARSHAL_BASE) goto bad_digit; /* topmost marshal digit should be nonzero */ @@ -667,6 +783,59 @@ r_PyLong(RFILE *p) return NULL; } +/* allocate the reflist index for a new object. Return -1 on failure */ +static Py_ssize_t +r_ref_reserve(int flag, RFILE *p) +{ + if (flag) { /* currently only FLAG_REF is defined */ + Py_ssize_t idx = PyList_GET_SIZE(p->refs); + if (idx >= 0x7ffffffe) { + PyErr_SetString(PyExc_ValueError, "bad marshal data (index list too large)"); + return -1; + } + if (PyList_Append(p->refs, Py_None) < 0) + return -1; + return idx; + } else + return 0; +} + +/* insert the new object 'o' to the reflist at previously + * allocated index 'idx'. + * 'o' can be NULL, in which case nothing is done. + * if 'o' was non-NULL, and the function succeeds, 'o' is returned. + * if 'o' was non-NULL, and the function fails, 'o' is released and + * NULL returned. This simplifies error checking at the call site since + * a single test for NULL for the function result is enough. + */ +static PyObject * +r_ref_insert(PyObject *o, Py_ssize_t idx, int flag, RFILE *p) +{ + if (o != NULL && flag) { /* currently only FLAG_REF is defined */ + PyObject *tmp = PyList_GET_ITEM(p->refs, idx); + Py_INCREF(o); + PyList_SET_ITEM(p->refs, idx, o); + Py_DECREF(tmp); + } + return o; +} + +/* combination of both above, used when an object can be + * created whenever it is seen in the file, as opposed to + * after having loaded its sub-objects. + */ +static PyObject * +r_ref(PyObject *o, int flag, RFILE *p) +{ + assert(flag & FLAG_REF); + if (o == NULL) + return NULL; + if (PyList_Append(p->refs, o) < 0) { + Py_DECREF(o); /* release the new object */ + return NULL; + } + return o; +} static PyObject * r_object(RFILE *p) @@ -674,9 +843,17 @@ r_object(RFILE *p) /* NULL is a valid return value, it does not necessarily means that an exception is set. */ PyObject *v, *v2; + Py_ssize_t idx = 0; long i, n; - int type = r_byte(p); - PyObject *retval; + int type, code = r_byte(p); + int flag, is_interned = 0; + PyObject *retval = NULL; + + if (code == EOF) { + PyErr_SetString(PyExc_EOFError, + "EOF read where object expected"); + return NULL; + } p->depth++; @@ -686,16 +863,17 @@ r_object(RFILE *p) return NULL; } - switch (type) { + flag = code & FLAG_REF; + type = code & ~FLAG_REF; - case EOF: - PyErr_SetString(PyExc_EOFError, - "EOF read where object expected"); - retval = NULL; - break; +#define R_REF(O) do{\ + if (flag) \ + O = r_ref(O, flag, p);\ +} while (0) + + switch (type) { case TYPE_NULL: - retval = NULL; break; case TYPE_NONE: @@ -726,67 +904,66 @@ r_object(RFILE *p) case TYPE_INT: n = r_long(p); retval = PyErr_Occurred() ? NULL : PyLong_FromLong(n); - break; - - case TYPE_INT64: - retval = r_long64(p); + R_REF(retval); break; case TYPE_LONG: retval = r_PyLong(p); + R_REF(retval); break; case TYPE_FLOAT: { - char buf[256]; + char buf[256], *ptr; double dx; - retval = NULL; n = r_byte(p); if (n == EOF) { PyErr_SetString(PyExc_EOFError, "EOF read where object expected"); break; } - if (r_string(buf, n, p) != n) + ptr = r_string(n, p); + if (ptr == NULL) break; + memcpy(buf, ptr, n); buf[n] = '\0'; dx = PyOS_string_to_double(buf, NULL, NULL); if (dx == -1.0 && PyErr_Occurred()) break; retval = PyFloat_FromDouble(dx); + R_REF(retval); break; } case TYPE_BINARY_FLOAT: { - unsigned char buf[8]; + unsigned char *buf; double x; - if (r_string((char*)buf, 8, p) != 8) { - retval = NULL; + buf = (unsigned char *) r_string(8, p); + if (buf == NULL) break; - } x = _PyFloat_Unpack8(buf, 1); - if (x == -1.0 && PyErr_Occurred()) { - retval = NULL; + if (x == -1.0 && PyErr_Occurred()) break; - } retval = PyFloat_FromDouble(x); + R_REF(retval); break; } case TYPE_COMPLEX: { - char buf[256]; + char buf[256], *ptr; Py_complex c; - retval = NULL; n = r_byte(p); if (n == EOF) { PyErr_SetString(PyExc_EOFError, "EOF read where object expected"); break; } - if (r_string(buf, n, p) != n) + ptr = r_string(n, p); + if (ptr == NULL) break; + memcpy(buf, ptr, n); buf[n] = '\0'; c.real = PyOS_string_to_double(buf, NULL, NULL); if (c.real == -1.0 && PyErr_Occurred()) @@ -797,112 +974,151 @@ r_object(RFILE *p) "EOF read where object expected"); break; } - if (r_string(buf, n, p) != n) + ptr = r_string(n, p); + if (ptr == NULL) break; + memcpy(buf, ptr, n); buf[n] = '\0'; c.imag = PyOS_string_to_double(buf, NULL, NULL); if (c.imag == -1.0 && PyErr_Occurred()) break; retval = PyComplex_FromCComplex(c); + R_REF(retval); break; } case TYPE_BINARY_COMPLEX: { - unsigned char buf[8]; + unsigned char *buf; Py_complex c; - if (r_string((char*)buf, 8, p) != 8) { - retval = NULL; + buf = (unsigned char *) r_string(8, p); + if (buf == NULL) break; - } c.real = _PyFloat_Unpack8(buf, 1); - if (c.real == -1.0 && PyErr_Occurred()) { - retval = NULL; + if (c.real == -1.0 && PyErr_Occurred()) break; - } - if (r_string((char*)buf, 8, p) != 8) { - retval = NULL; + buf = (unsigned char *) r_string(8, p); + if (buf == NULL) break; - } c.imag = _PyFloat_Unpack8(buf, 1); - if (c.imag == -1.0 && PyErr_Occurred()) { - retval = NULL; + if (c.imag == -1.0 && PyErr_Occurred()) break; - } retval = PyComplex_FromCComplex(c); + R_REF(retval); break; } case TYPE_STRING: - n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + { + char *ptr; + n = r_long(p); + if (PyErr_Occurred()) + break; + if (n < 0 || n > SIZE32_MAX) { + PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)"); + break; + } + v = PyBytes_FromStringAndSize((char *)NULL, n); + if (v == NULL) + break; + ptr = r_string(n, p); + if (ptr == NULL) { + Py_DECREF(v); + break; + } + memcpy(PyBytes_AS_STRING(v), ptr, n); + retval = v; + R_REF(retval); break; } + + case TYPE_ASCII_INTERNED: + is_interned = 1; + case TYPE_ASCII: + n = r_long(p); + if (PyErr_Occurred()) + break; if (n < 0 || n > SIZE32_MAX) { - PyErr_SetString(PyExc_ValueError, "bad marshal data (string size out of range)"); - retval = NULL; + PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)"); break; } - v = PyBytes_FromStringAndSize((char *)NULL, n); - if (v == NULL) { - retval = NULL; + goto _read_ascii; + + case TYPE_SHORT_ASCII_INTERNED: + is_interned = 1; + case TYPE_SHORT_ASCII: + n = r_byte(p); + if (n == EOF) { + PyErr_SetString(PyExc_EOFError, + "EOF read where object expected"); break; } - if (r_string(PyBytes_AS_STRING(v), n, p) != n) { - Py_DECREF(v); - retval = NULL; + _read_ascii: + { + char *ptr; + ptr = r_string(n, p); + if (ptr == NULL) + break; + v = PyUnicode_FromKindAndData(PyUnicode_1BYTE_KIND, ptr, n); + if (v == NULL) + break; + if (is_interned) + PyUnicode_InternInPlace(&v); + retval = v; + R_REF(retval); break; } - retval = v; - break; + case TYPE_INTERNED: + is_interned = 1; case TYPE_UNICODE: { char *buffer; n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (unicode size out of range)"); - retval = NULL; break; } - buffer = PyMem_NEW(char, n); - if (buffer == NULL) { - retval = PyErr_NoMemory(); - break; + if (n != 0) { + buffer = r_string(n, p); + if (buffer == NULL) + break; + v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass"); } - if (r_string(buffer, n, p) != n) { - PyMem_DEL(buffer); - retval = NULL; - break; + else { + v = PyUnicode_New(0, 0); } - v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass"); - PyMem_DEL(buffer); + if (v == NULL) + break; + if (is_interned) + PyUnicode_InternInPlace(&v); retval = v; + R_REF(retval); break; } + case TYPE_SMALL_TUPLE: + n = (unsigned char) r_byte(p); + if (PyErr_Occurred()) + break; + goto _read_tuple; case TYPE_TUPLE: n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (tuple size out of range)"); - retval = NULL; break; } + _read_tuple: v = PyTuple_New(n); - if (v == NULL) { - retval = NULL; + R_REF(v); + if (v == NULL) break; - } + for (i = 0; i < n; i++) { v2 = r_object(p); if ( v2 == NULL ) { @@ -920,20 +1136,16 @@ r_object(RFILE *p) case TYPE_LIST: n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (list size out of range)"); - retval = NULL; break; } v = PyList_New(n); - if (v == NULL) { - retval = NULL; + R_REF(v); + if (v == NULL) break; - } for (i = 0; i < n; i++) { v2 = r_object(p); if ( v2 == NULL ) { @@ -951,20 +1163,26 @@ r_object(RFILE *p) case TYPE_DICT: v = PyDict_New(); - if (v == NULL) { - retval = NULL; + R_REF(v); + if (v == NULL) break; - } for (;;) { PyObject *key, *val; key = r_object(p); if (key == NULL) break; val = r_object(p); - if (val != NULL) - PyDict_SetItem(v, key, val); + if (val == NULL) { + Py_DECREF(key); + break; + } + if (PyDict_SetItem(v, key, val) < 0) { + Py_DECREF(key); + Py_DECREF(val); + break; + } Py_DECREF(key); - Py_XDECREF(val); + Py_DECREF(val); } if (PyErr_Occurred()) { Py_DECREF(v); @@ -976,20 +1194,26 @@ r_object(RFILE *p) case TYPE_SET: case TYPE_FROZENSET: n = r_long(p); - if (PyErr_Occurred()) { - retval = NULL; + if (PyErr_Occurred()) break; - } if (n < 0 || n > SIZE32_MAX) { PyErr_SetString(PyExc_ValueError, "bad marshal data (set size out of range)"); - retval = NULL; break; } v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); - if (v == NULL) { - retval = NULL; - break; + if (type == TYPE_SET) { + R_REF(v); + } else { + /* must use delayed registration of frozensets because they must + * be init with a refcount of 1 + */ + idx = r_ref_reserve(flag, p); + if (idx < 0) + Py_CLEAR(v); /* signal error */ } + if (v == NULL) + break; + for (i = 0; i < n; i++) { v2 = r_object(p); if ( v2 == NULL ) { @@ -1008,6 +1232,8 @@ r_object(RFILE *p) } Py_DECREF(v2); } + if (type != TYPE_SET) + v = r_ref_insert(v, idx, flag, p); retval = v; break; @@ -1029,6 +1255,10 @@ r_object(RFILE *p) int firstlineno; PyObject *lnotab = NULL; + idx = r_ref_reserve(flag, p); + if (idx < 0) + break; + v = NULL; /* XXX ignore long->int overflows for now */ @@ -1084,6 +1314,8 @@ r_object(RFILE *p) if (name == NULL) goto code_error; firstlineno = (int)r_long(p); + if (firstlineno == -1 && PyErr_Occurred()) + break; lnotab = r_object(p); if (lnotab == NULL) goto code_error; @@ -1094,6 +1326,7 @@ r_object(RFILE *p) code, consts, names, varnames, freevars, cellvars, filename, name, firstlineno, lnotab); + v = r_ref_insert(v, idx, flag, p); code_error: Py_XDECREF(code); @@ -1109,11 +1342,27 @@ r_object(RFILE *p) retval = v; break; + case TYPE_REF: + n = r_long(p); + if (n < 0 || n >= PyList_GET_SIZE(p->refs)) { + if (n == -1 && PyErr_Occurred()) + break; + PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)"); + break; + } + v = PyList_GET_ITEM(p->refs, n); + if (v == Py_None) { + PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)"); + break; + } + Py_INCREF(v); + retval = v; + break; + default: /* Bogus data got written, which isn't ideal. This will let you keep working and recover. */ PyErr_SetString(PyExc_ValueError, "bad marshal data (unknown type code)"); - retval = NULL; break; } @@ -1139,23 +1388,33 @@ int PyMarshal_ReadShortFromFile(FILE *fp) { RFILE rf; + int res; assert(fp); rf.readable = NULL; rf.fp = fp; rf.current_filename = NULL; rf.end = rf.ptr = NULL; - return r_short(&rf); + rf.buf = NULL; + res = r_short(&rf); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); + return res; } long PyMarshal_ReadLongFromFile(FILE *fp) { RFILE rf; + long res; rf.fp = fp; rf.readable = NULL; rf.current_filename = NULL; rf.ptr = rf.end = NULL; - return r_long(&rf); + rf.buf = NULL; + res = r_long(&rf); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); + return res; } #ifdef HAVE_FSTAT @@ -1214,22 +1473,36 @@ PyMarshal_ReadObjectFromFile(FILE *fp) rf.current_filename = NULL; rf.depth = 0; rf.ptr = rf.end = NULL; + rf.buf = NULL; + rf.refs = PyList_New(0); + if (rf.refs == NULL) + return NULL; result = r_object(&rf); + Py_DECREF(rf.refs); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); return result; } PyObject * -PyMarshal_ReadObjectFromString(char *str, Py_ssize_t len) +PyMarshal_ReadObjectFromString(const char *str, Py_ssize_t len) { RFILE rf; PyObject *result; rf.fp = NULL; rf.readable = NULL; rf.current_filename = NULL; - rf.ptr = str; - rf.end = str + len; + rf.ptr = (char *)str; + rf.end = (char *)str + len; + rf.buf = NULL; rf.depth = 0; + rf.refs = PyList_New(0); + if (rf.refs == NULL) + return NULL; result = r_object(&rf); + Py_DECREF(rf.refs); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); return result; } @@ -1248,7 +1521,13 @@ PyMarshal_WriteObjectToString(PyObject *x, int version) wf.error = WFERR_OK; wf.depth = 0; wf.version = version; + if (version >= 3) { + if ((wf.refs = PyDict_New()) == NULL) + return NULL; + } else + wf.refs = NULL; w_object(x, &wf); + Py_XDECREF(wf.refs); if (wf.str != NULL) { char *base = PyBytes_AS_STRING((PyBytesObject *)wf.str); if (wf.ptr - base > PY_SSIZE_T_MAX) { @@ -1320,6 +1599,8 @@ marshal_load(PyObject *self, PyObject *f) * Make a call to the read method, but read zero bytes. * This is to ensure that the object passed in at least * has a read method which returns bytes. + * This can be removed if we guarantee good error handling + * for r_string() */ data = _PyObject_CallMethodId(f, &PyId_read, "i", 0); if (data == NULL) @@ -1335,7 +1616,15 @@ marshal_load(PyObject *self, PyObject *f) rf.fp = NULL; rf.readable = f; rf.current_filename = NULL; - result = read_object(&rf); + rf.ptr = rf.end = NULL; + rf.buf = NULL; + if ((rf.refs = PyList_New(0)) != NULL) { + result = read_object(&rf); + Py_DECREF(rf.refs); + if (rf.buf != NULL) + PyMem_FREE(rf.buf); + } else + result = NULL; } Py_DECREF(data); return result; @@ -1392,8 +1681,11 @@ marshal_loads(PyObject *self, PyObject *args) rf.ptr = s; rf.end = s + n; rf.depth = 0; + if ((rf.refs = PyList_New(0)) == NULL) + return NULL; result = read_object(&rf); PyBuffer_Release(&p); + Py_DECREF(rf.refs); return result; } @@ -1433,6 +1725,7 @@ Variables:\n\ version -- indicates the format that the module uses. Version 0 is the\n\ historical format, version 1 shares interned strings and version 2\n\ uses a binary format for floating point numbers.\n\ + Version 3 shares common object references (New in version 3.4).\n\ \n\ Functions:\n\ \n\ diff --git a/Python/modsupport.c b/Python/modsupport.c index 428914f..6c938dd 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -161,7 +161,17 @@ do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags) /* Note that we can't bail immediately on error as this will leak refcounts on any 'N' arguments. */ for (i = 0; i < n; i++) { - PyObject *w = do_mkvalue(p_format, p_va, flags); + PyObject *w; + + if (itemfailed) { + PyObject *exception, *value, *tb; + PyErr_Fetch(&exception, &value, &tb); + w = do_mkvalue(p_format, p_va, flags); + PyErr_Restore(exception, value, tb); + } + else { + w = do_mkvalue(p_format, p_va, flags); + } if (w == NULL) { itemfailed = 1; Py_INCREF(Py_None); diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c index 8a54cbf..98429d4 100644 --- a/Python/mystrtoul.c +++ b/Python/mystrtoul.c @@ -92,11 +92,11 @@ static int digitlimit[] = { ** exceptions - we don't check for them. */ unsigned long -PyOS_strtoul(register char *str, char **ptr, int base) +PyOS_strtoul(const char *str, char **ptr, int base) { - register unsigned long result = 0; /* return value of the function */ - register int c; /* current input character */ - register int ovlimit; /* required digits to overflow */ + unsigned long result = 0; /* return value of the function */ + int c; /* current input character */ + int ovlimit; /* required digits to overflow */ /* skip leading white space */ while (*str && Py_ISSPACE(Py_CHARMASK(*str))) @@ -111,7 +111,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0x */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -120,7 +120,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0o */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -129,7 +129,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0b */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -141,7 +141,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) while (Py_ISSPACE(Py_CHARMASK(*str))) ++str; if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } } @@ -157,7 +157,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0x */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -171,7 +171,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0o */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -185,7 +185,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* there must be at least one digit after 0b */ if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } ++str; @@ -197,7 +197,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* catch silly bases */ if (base < 2 || base > 36) { if (ptr) - *ptr = str; + *ptr = (char *)str; return 0; } @@ -213,7 +213,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) if (ovlimit > 0) /* no overflow check required */ result = result * base + c; else { /* requires overflow check */ - register unsigned long temp_result; + unsigned long temp_result; if (ovlimit < 0) /* guaranteed overflow */ goto overflowed; @@ -239,7 +239,7 @@ PyOS_strtoul(register char *str, char **ptr, int base) /* set pointer to point to the last character scanned */ if (ptr) - *ptr = str; + *ptr = (char *)str; return result; @@ -248,7 +248,7 @@ overflowed: /* spool through remaining digit characters */ while (_PyLong_DigitValue[Py_CHARMASK(*str)] < base) ++str; - *ptr = str; + *ptr = (char *)str; } errno = ERANGE; return (unsigned long)-1; @@ -260,7 +260,7 @@ overflowed: #define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN) long -PyOS_strtol(char *str, char **ptr, int base) +PyOS_strtol(const char *str, char **ptr, int base) { long result; unsigned long uresult; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 2d6bcda..f90a17a 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -68,7 +68,7 @@ static void *opcode_targets[256] = { &&TARGET_BINARY_OR, &&TARGET_INPLACE_POWER, &&TARGET_GET_ITER, - &&TARGET_STORE_LOCALS, + &&_unknown_opcode, &&TARGET_PRINT_EXPR, &&TARGET_LOAD_BUILD_CLASS, &&TARGET_YIELD_FROM, @@ -147,7 +147,7 @@ static void *opcode_targets[256] = { &&TARGET_LIST_APPEND, &&TARGET_SET_ADD, &&TARGET_MAP_ADD, - &&_unknown_opcode, + &&TARGET_LOAD_CLASSDEREF, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, diff --git a/Python/peephole.c b/Python/peephole.c index 5d53677..4185462 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -275,6 +275,7 @@ fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts, PyObject *v len_consts = PyList_GET_SIZE(consts); if (PyList_Append(consts, newconst)) { Py_DECREF(newconst); + PyErr_Clear(); return 0; } Py_DECREF(newconst); @@ -327,37 +328,6 @@ markblocks(unsigned char *code, Py_ssize_t len) return blocks; } -/* Helper to replace LOAD_NAME None/True/False with LOAD_CONST - Returns: 0 if no change, 1 if change, -1 if error */ -static int -load_global(unsigned char *codestr, Py_ssize_t i, char *name, PyObject *consts) -{ - Py_ssize_t j; - PyObject *obj; - if (name == NULL) - return 0; - if (strcmp(name, "None") == 0) - obj = Py_None; - else if (strcmp(name, "True") == 0) - obj = Py_True; - else if (strcmp(name, "False") == 0) - obj = Py_False; - else - return 0; - for (j = 0; j < PyList_GET_SIZE(consts); j++) { - if (PyList_GET_ITEM(consts, j) == obj) - break; - } - if (j == PyList_GET_SIZE(consts)) { - if (PyList_Append(consts, obj) < 0) - return -1; - } - assert(PyList_GET_ITEM(consts, j) == obj); - codestr[i] = LOAD_CONST; - SETARG(codestr, i, j); - return 1; -} - /* Perform basic peephole optimizations to components of a code object. The consts object should still be in list form to allow new constants to be appended. @@ -392,7 +362,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, Py_ssize_t const_stack_size = 0; int in_consts = 0; /* whether we are in a LOAD_CONST sequence */ unsigned int *blocks = NULL; - char *name; /* Bail out if an exception is set */ if (PyErr_Occurred()) @@ -413,8 +382,10 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Make a modifiable copy of the code string */ codestr = (unsigned char *)PyMem_Malloc(codelen); - if (codestr == NULL) + if (codestr == NULL) { + PyErr_NoMemory(); goto exitError; + } codestr = (unsigned char *)memcpy(codestr, PyBytes_AS_STRING(code), codelen); @@ -428,8 +399,10 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Mapping to new jump targets after NOPs are removed */ addrmap = (int *)PyMem_Malloc(codelen * sizeof(int)); - if (addrmap == NULL) + if (addrmap == NULL) { + PyErr_NoMemory(); goto exitError; + } blocks = markblocks(codestr, codelen); if (blocks == NULL) @@ -475,20 +448,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, codestr[i+3] = NOP; break; - /* Replace LOAD_GLOBAL/LOAD_NAME None/True/False - with LOAD_CONST None/True/False */ - case LOAD_NAME: - case LOAD_GLOBAL: - j = GETARG(codestr, i); - name = _PyUnicode_AsString(PyTuple_GET_ITEM(names, j)); - h = load_global(codestr, i, name, consts); - if (h < 0) - goto exitError; - else if (h == 0) - continue; - CONST_STACK_PUSH_OP(i); - break; - /* Skip over LOAD_CONST trueconst POP_JUMP_IF_FALSE xx. This improves "while 1" performance. */ diff --git a/Python/pyarena.c b/Python/pyarena.c index 02a31d8..103603f 100644 --- a/Python/pyarena.c +++ b/Python/pyarena.c @@ -77,7 +77,7 @@ block_new(size_t size) { /* Allocate header and block as one unit. ab_mem points just past header. */ - block *b = (block *)malloc(sizeof(block) + size); + block *b = (block *)PyMem_Malloc(sizeof(block) + size); if (!b) return NULL; b->ab_size = size; @@ -92,7 +92,7 @@ static void block_free(block *b) { while (b) { block *next = b->ab_next; - free(b); + PyMem_Free(b); b = next; } } @@ -127,20 +127,20 @@ block_alloc(block *b, size_t size) PyArena * PyArena_New() { - PyArena* arena = (PyArena *)malloc(sizeof(PyArena)); + PyArena* arena = (PyArena *)PyMem_Malloc(sizeof(PyArena)); if (!arena) return (PyArena*)PyErr_NoMemory(); arena->a_head = block_new(DEFAULT_BLOCK_SIZE); arena->a_cur = arena->a_head; if (!arena->a_head) { - free((void *)arena); + PyMem_Free((void *)arena); return (PyArena*)PyErr_NoMemory(); } arena->a_objects = PyList_New(0); if (!arena->a_objects) { block_free(arena->a_head); - free((void *)arena); + PyMem_Free((void *)arena); return (PyArena*)PyErr_NoMemory(); } #if defined(Py_DEBUG) @@ -173,7 +173,7 @@ PyArena_Free(PyArena *arena) */ Py_DECREF(arena->a_objects); - free(arena); + PyMem_Free(arena); } void * diff --git a/Python/pyhash.c b/Python/pyhash.c new file mode 100644 index 0000000..19aeeb7 --- /dev/null +++ b/Python/pyhash.c @@ -0,0 +1,427 @@ +/* Set of hash utility functions to help maintaining the invariant that + if a==b then hash(a)==hash(b) + + All the utility functions (_Py_Hash*()) return "-1" to signify an error. +*/ +#include "Python.h" + +#ifdef __APPLE__ +# include <libkern/OSByteOrder.h> +#elif defined(HAVE_LE64TOH) && defined(HAVE_ENDIAN_H) +# include <endian.h> +#elif defined(HAVE_LE64TOH) && defined(HAVE_SYS_ENDIAN_H) +# include <sys/endian.h> +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_Py_HashSecret_t _Py_HashSecret; + +#if Py_HASH_ALGORITHM == Py_HASH_EXTERNAL +extern PyHash_FuncDef PyHash_Func; +#else +static PyHash_FuncDef PyHash_Func; +#endif + +/* Count _Py_HashBytes() calls */ +#ifdef Py_HASH_STATS +#define Py_HASH_STATS_MAX 32 +static Py_ssize_t hashstats[Py_HASH_STATS_MAX + 1] = {0}; +#endif + +/* For numeric types, the hash of a number x is based on the reduction + of x modulo the prime P = 2**_PyHASH_BITS - 1. It's designed so that + hash(x) == hash(y) whenever x and y are numerically equal, even if + x and y have different types. + + A quick summary of the hashing strategy: + + (1) First define the 'reduction of x modulo P' for any rational + number x; this is a standard extension of the usual notion of + reduction modulo P for integers. If x == p/q (written in lowest + terms), the reduction is interpreted as the reduction of p times + the inverse of the reduction of q, all modulo P; if q is exactly + divisible by P then define the reduction to be infinity. So we've + got a well-defined map + + reduce : { rational numbers } -> { 0, 1, 2, ..., P-1, infinity }. + + (2) Now for a rational number x, define hash(x) by: + + reduce(x) if x >= 0 + -reduce(-x) if x < 0 + + If the result of the reduction is infinity (this is impossible for + integers, floats and Decimals) then use the predefined hash value + _PyHASH_INF for x >= 0, or -_PyHASH_INF for x < 0, instead. + _PyHASH_INF, -_PyHASH_INF and _PyHASH_NAN are also used for the + hashes of float and Decimal infinities and nans. + + A selling point for the above strategy is that it makes it possible + to compute hashes of decimal and binary floating-point numbers + efficiently, even if the exponent of the binary or decimal number + is large. The key point is that + + reduce(x * y) == reduce(x) * reduce(y) (modulo _PyHASH_MODULUS) + + provided that {reduce(x), reduce(y)} != {0, infinity}. The reduction of a + binary or decimal float is never infinity, since the denominator is a power + of 2 (for binary) or a divisor of a power of 10 (for decimal). So we have, + for nonnegative x, + + reduce(x * 2**e) == reduce(x) * reduce(2**e) % _PyHASH_MODULUS + + reduce(x * 10**e) == reduce(x) * reduce(10**e) % _PyHASH_MODULUS + + and reduce(10**e) can be computed efficiently by the usual modular + exponentiation algorithm. For reduce(2**e) it's even better: since + P is of the form 2**n-1, reduce(2**e) is 2**(e mod n), and multiplication + by 2**(e mod n) modulo 2**n-1 just amounts to a rotation of bits. + + */ + +Py_hash_t +_Py_HashDouble(double v) +{ + int e, sign; + double m; + Py_uhash_t x, y; + + if (!Py_IS_FINITE(v)) { + if (Py_IS_INFINITY(v)) + return v > 0 ? _PyHASH_INF : -_PyHASH_INF; + else + return _PyHASH_NAN; + } + + m = frexp(v, &e); + + sign = 1; + if (m < 0) { + sign = -1; + m = -m; + } + + /* process 28 bits at a time; this should work well both for binary + and hexadecimal floating point. */ + x = 0; + while (m) { + x = ((x << 28) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - 28); + m *= 268435456.0; /* 2**28 */ + e -= 28; + y = (Py_uhash_t)m; /* pull out integer part */ + m -= y; + x += y; + if (x >= _PyHASH_MODULUS) + x -= _PyHASH_MODULUS; + } + + /* adjust for the exponent; first reduce it modulo _PyHASH_BITS */ + e = e >= 0 ? e % _PyHASH_BITS : _PyHASH_BITS-1-((-1-e) % _PyHASH_BITS); + x = ((x << e) & _PyHASH_MODULUS) | x >> (_PyHASH_BITS - e); + + x = x * sign; + if (x == (Py_uhash_t)-1) + x = (Py_uhash_t)-2; + return (Py_hash_t)x; +} + +Py_hash_t +_Py_HashPointer(void *p) +{ + Py_hash_t x; + size_t y = (size_t)p; + /* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid + excessive hash collisions for dicts and sets */ + y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4)); + x = (Py_hash_t)y; + if (x == -1) + x = -2; + return x; +} + +Py_hash_t +_Py_HashBytes(const void *src, Py_ssize_t len) +{ + Py_hash_t x; + /* + We make the hash of the empty string be 0, rather than using + (prefix ^ suffix), since this slightly obfuscates the hash secret + */ + if (len == 0) { + return 0; + } + +#ifdef Py_HASH_STATS + hashstats[(len <= Py_HASH_STATS_MAX) ? len : 0]++; +#endif + +#if Py_HASH_CUTOFF > 0 + if (len < Py_HASH_CUTOFF) { + /* Optimize hashing of very small strings with inline DJBX33A. */ + Py_uhash_t hash; + const unsigned char *p = src; + hash = 5381; /* DJBX33A starts with 5381 */ + + switch(len) { + /* ((hash << 5) + hash) + *p == hash * 33 + *p */ + case 7: hash = ((hash << 5) + hash) + *p++; /* fallthrough */ + case 6: hash = ((hash << 5) + hash) + *p++; /* fallthrough */ + case 5: hash = ((hash << 5) + hash) + *p++; /* fallthrough */ + case 4: hash = ((hash << 5) + hash) + *p++; /* fallthrough */ + case 3: hash = ((hash << 5) + hash) + *p++; /* fallthrough */ + case 2: hash = ((hash << 5) + hash) + *p++; /* fallthrough */ + case 1: hash = ((hash << 5) + hash) + *p++; break; + default: + assert(0); + } + hash ^= len; + hash ^= (Py_uhash_t) _Py_HashSecret.djbx33a.suffix; + x = (Py_hash_t)hash; + } + else +#endif /* Py_HASH_CUTOFF */ + x = PyHash_Func.hash(src, len); + + if (x == -1) + return -2; + return x; +} + +void +_PyHash_Fini(void) +{ +#ifdef Py_HASH_STATS + int i; + Py_ssize_t total = 0; + char *fmt = "%2i %8" PY_FORMAT_SIZE_T "d %8" PY_FORMAT_SIZE_T "d\n"; + + fprintf(stderr, "len calls total\n"); + for (i = 1; i <= Py_HASH_STATS_MAX; i++) { + total += hashstats[i]; + fprintf(stderr, fmt, i, hashstats[i], total); + } + total += hashstats[0]; + fprintf(stderr, "> %8" PY_FORMAT_SIZE_T "d %8" PY_FORMAT_SIZE_T "d\n", + hashstats[0], total); +#endif +} + +PyHash_FuncDef * +PyHash_GetFuncDef(void) +{ + return &PyHash_Func; +} + +/* Optimized memcpy() for Windows */ +#ifdef _MSC_VER +# if SIZEOF_PY_UHASH_T == 4 +# define PY_UHASH_CPY(dst, src) do { \ + dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; \ + } while(0) +# elif SIZEOF_PY_UHASH_T == 8 +# define PY_UHASH_CPY(dst, src) do { \ + dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; \ + dst[4] = src[4]; dst[5] = src[5]; dst[6] = src[6]; dst[7] = src[7]; \ + } while(0) +# else +# error SIZEOF_PY_UHASH_T must be 4 or 8 +# endif /* SIZEOF_PY_UHASH_T */ +#else /* not Windows */ +# define PY_UHASH_CPY(dst, src) memcpy(dst, src, SIZEOF_PY_UHASH_T) +#endif /* _MSC_VER */ + + +#if Py_HASH_ALGORITHM == Py_HASH_FNV +/* ************************************************************************** + * Modified Fowler-Noll-Vo (FNV) hash function + */ +static Py_hash_t +fnv(const void *src, Py_ssize_t len) +{ + const unsigned char *p = src; + Py_uhash_t x; + Py_ssize_t remainder, blocks; + union { + Py_uhash_t value; + unsigned char bytes[SIZEOF_PY_UHASH_T]; + } block; + +#ifdef Py_DEBUG + assert(_Py_HashSecret_Initialized); +#endif + remainder = len % SIZEOF_PY_UHASH_T; + if (remainder == 0) { + /* Process at least one block byte by byte to reduce hash collisions + * for strings with common prefixes. */ + remainder = SIZEOF_PY_UHASH_T; + } + blocks = (len - remainder) / SIZEOF_PY_UHASH_T; + + x = (Py_uhash_t) _Py_HashSecret.fnv.prefix; + x ^= (Py_uhash_t) *p << 7; + while (blocks--) { + PY_UHASH_CPY(block.bytes, p); + x = (_PyHASH_MULTIPLIER * x) ^ block.value; + p += SIZEOF_PY_UHASH_T; + } + /* add remainder */ + for (; remainder > 0; remainder--) + x = (_PyHASH_MULTIPLIER * x) ^ (Py_uhash_t) *p++; + x ^= (Py_uhash_t) len; + x ^= (Py_uhash_t) _Py_HashSecret.fnv.suffix; + if (x == -1) { + x = -2; + } + return x; +} + +static PyHash_FuncDef PyHash_Func = {fnv, "fnv", 8 * SIZEOF_PY_HASH_T, + 16 * SIZEOF_PY_HASH_T}; + +#endif /* Py_HASH_ALGORITHM == Py_HASH_FNV */ + + +#if Py_HASH_ALGORITHM == Py_HASH_SIPHASH24 +/* ************************************************************************** + <MIT License> + Copyright (c) 2013 Marek Majkowski <marek@popcount.org> + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + </MIT License> + + Original location: + https://github.com/majek/csiphash/ + + Solution inspired by code from: + Samuel Neves (supercop/crypto_auth/siphash24/little) + djb (supercop/crypto_auth/siphash24/little2) + Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c) + + Modified for Python by Christian Heimes: + - C89 / MSVC compatibility + - PY_UINT64_T, PY_UINT32_T and PY_UINT8_T + - _rotl64() on Windows + - letoh64() fallback +*/ + +typedef unsigned char PY_UINT8_T; + +/* byte swap little endian to host endian + * Endian conversion not only ensures that the hash function returns the same + * value on all platforms. It is also required to for a good dispersion of + * the hash values' least significant bits. + */ +#if PY_LITTLE_ENDIAN +# define _le64toh(x) ((PY_UINT64_T)(x)) +#elif defined(__APPLE__) +# define _le64toh(x) OSSwapLittleToHostInt64(x) +#elif defined(HAVE_LETOH64) +# define _le64toh(x) le64toh(x) +#else +# define _le64toh(x) (((PY_UINT64_T)(x) << 56) | \ + (((PY_UINT64_T)(x) << 40) & 0xff000000000000ULL) | \ + (((PY_UINT64_T)(x) << 24) & 0xff0000000000ULL) | \ + (((PY_UINT64_T)(x) << 8) & 0xff00000000ULL) | \ + (((PY_UINT64_T)(x) >> 8) & 0xff000000ULL) | \ + (((PY_UINT64_T)(x) >> 24) & 0xff0000ULL) | \ + (((PY_UINT64_T)(x) >> 40) & 0xff00ULL) | \ + ((PY_UINT64_T)(x) >> 56)) +#endif + + +#ifdef _MSC_VER +# define ROTATE(x, b) _rotl64(x, b) +#else +# define ROTATE(x, b) (PY_UINT64_T)( ((x) << (b)) | ( (x) >> (64 - (b))) ) +#endif + +#define HALF_ROUND(a,b,c,d,s,t) \ + a += b; c += d; \ + b = ROTATE(b, s) ^ a; \ + d = ROTATE(d, t) ^ c; \ + a = ROTATE(a, 32); + +#define DOUBLE_ROUND(v0,v1,v2,v3) \ + HALF_ROUND(v0,v1,v2,v3,13,16); \ + HALF_ROUND(v2,v1,v0,v3,17,21); \ + HALF_ROUND(v0,v1,v2,v3,13,16); \ + HALF_ROUND(v2,v1,v0,v3,17,21); + + +static Py_hash_t +siphash24(const void *src, Py_ssize_t src_sz) { + PY_UINT64_T k0 = _le64toh(_Py_HashSecret.siphash.k0); + PY_UINT64_T k1 = _le64toh(_Py_HashSecret.siphash.k1); + PY_UINT64_T b = (PY_UINT64_T)src_sz << 56; + const PY_UINT64_T *in = (PY_UINT64_T*)src; + + PY_UINT64_T v0 = k0 ^ 0x736f6d6570736575ULL; + PY_UINT64_T v1 = k1 ^ 0x646f72616e646f6dULL; + PY_UINT64_T v2 = k0 ^ 0x6c7967656e657261ULL; + PY_UINT64_T v3 = k1 ^ 0x7465646279746573ULL; + + PY_UINT64_T t; + PY_UINT8_T *pt; + PY_UINT8_T *m; + + while (src_sz >= 8) { + PY_UINT64_T mi = _le64toh(*in); + in += 1; + src_sz -= 8; + v3 ^= mi; + DOUBLE_ROUND(v0,v1,v2,v3); + v0 ^= mi; + } + + t = 0; + pt = (PY_UINT8_T *)&t; + m = (PY_UINT8_T *)in; + switch (src_sz) { + case 7: pt[6] = m[6]; + case 6: pt[5] = m[5]; + case 5: pt[4] = m[4]; + case 4: *((PY_UINT32_T*)&pt[0]) = *((PY_UINT32_T*)&m[0]); break; + case 3: pt[2] = m[2]; + case 2: pt[1] = m[1]; + case 1: pt[0] = m[0]; + } + b |= _le64toh(t); + + v3 ^= b; + DOUBLE_ROUND(v0,v1,v2,v3); + v0 ^= b; + v2 ^= 0xff; + DOUBLE_ROUND(v0,v1,v2,v3); + DOUBLE_ROUND(v0,v1,v2,v3); + + /* modified */ + t = (v0 ^ v1) ^ (v2 ^ v3); + return (Py_hash_t)t; +} + +static PyHash_FuncDef PyHash_Func = {siphash24, "siphash24", 64, 128}; + +#endif /* Py_HASH_ALGORITHM == Py_HASH_SIPHASH24 */ + +#ifdef __cplusplus +} +#endif diff --git a/Python/pystate.c b/Python/pystate.c index 772aa53..19fceb7 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -6,11 +6,11 @@ /* -------------------------------------------------------------------------- CAUTION -Always use malloc() and free() directly in this file. A number of these -functions are advertised as safe to call when the GIL isn't held, and in -a debug build Python redirects (e.g.) PyMem_NEW (etc) to Python's debugging -obmalloc functions. Those aren't thread-safe (they rely on the GIL to avoid -the expense of doing their own locking). +Always use PyMem_RawMalloc() and PyMem_RawFree() directly in this file. A +number of these functions are advertised as safe to call when the GIL isn't +held, and in a debug build Python redirects (e.g.) PyMem_NEW (etc) to Python's +debugging obmalloc functions. Those aren't thread-safe (they rely on the GIL +to avoid the expense of doing their own locking). -------------------------------------------------------------------------- */ #ifdef HAVE_DLOPEN @@ -60,7 +60,7 @@ PyInterpreterState * PyInterpreterState_New(void) { PyInterpreterState *interp = (PyInterpreterState *) - malloc(sizeof(PyInterpreterState)); + PyMem_RawMalloc(sizeof(PyInterpreterState)); if (interp != NULL) { HEAD_INIT(); @@ -148,7 +148,7 @@ PyInterpreterState_Delete(PyInterpreterState *interp) Py_FatalError("PyInterpreterState_Delete: remaining threads"); *p = interp->next; HEAD_UNLOCK(); - free(interp); + PyMem_RawFree(interp); #ifdef WITH_THREAD if (interp_head == NULL && head_mutex != NULL) { PyThread_free_lock(head_mutex); @@ -168,7 +168,7 @@ threadstate_getframe(PyThreadState *self) static PyThreadState * new_threadstate(PyInterpreterState *interp, int init) { - PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); + PyThreadState *tstate = (PyThreadState *)PyMem_RawMalloc(sizeof(PyThreadState)); if (_PyThreadState_GetFrame == NULL) _PyThreadState_GetFrame = threadstate_getframe; @@ -182,7 +182,6 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->recursion_critical = 0; tstate->tracing = 0; tstate->use_tracing = 0; - tstate->tick_counter = 0; tstate->gilstate_counter = 0; tstate->async_exc = NULL; #ifdef WITH_THREAD @@ -208,12 +207,17 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->trash_delete_nesting = 0; tstate->trash_delete_later = NULL; + tstate->on_delete = NULL; + tstate->on_delete_data = NULL; if (init) _PyThreadState_Init(tstate); HEAD_LOCK(); + tstate->prev = NULL; tstate->next = interp->tstate_head; + if (tstate->next) + tstate->next->prev = tstate; interp->tstate_head = tstate; HEAD_UNLOCK(); } @@ -317,6 +321,31 @@ PyState_RemoveModule(struct PyModuleDef* def) return PyList_SetItem(state->modules_by_index, index, Py_None); } +/* used by import.c:PyImport_Cleanup */ +void +_PyState_ClearModules(void) +{ + PyInterpreterState *state = PyThreadState_GET()->interp; + if (state->modules_by_index) { + Py_ssize_t i; + for (i = 0; i < PyList_GET_SIZE(state->modules_by_index); i++) { + PyObject *m = PyList_GET_ITEM(state->modules_by_index, i); + if (PyModule_Check(m)) { + /* cleanup the saved copy of module dicts */ + PyModuleDef *md = PyModule_GetDef(m); + if (md) + Py_CLEAR(md->m_base.m_copy); + } + } + /* Setting modules_by_index to NULL could be dangerous, so we + clear the list instead. */ + if (PyList_SetSlice(state->modules_by_index, + 0, PyList_GET_SIZE(state->modules_by_index), + NULL)) + PyErr_WriteUnraisable(state->modules_by_index); + } +} + void PyThreadState_Clear(PyThreadState *tstate) { @@ -349,37 +378,23 @@ static void tstate_delete_common(PyThreadState *tstate) { PyInterpreterState *interp; - PyThreadState **p; - PyThreadState *prev_p = NULL; if (tstate == NULL) Py_FatalError("PyThreadState_Delete: NULL tstate"); interp = tstate->interp; if (interp == NULL) Py_FatalError("PyThreadState_Delete: NULL interp"); HEAD_LOCK(); - for (p = &interp->tstate_head; ; p = &(*p)->next) { - if (*p == NULL) - Py_FatalError( - "PyThreadState_Delete: invalid tstate"); - if (*p == tstate) - break; - /* Sanity check. These states should never happen but if - * they do we must abort. Otherwise we'll end up spinning in - * in a tight loop with the lock held. A similar check is done - * in thread.c find_key(). */ - if (*p == prev_p) - Py_FatalError( - "PyThreadState_Delete: small circular list(!)" - " and tstate not found."); - prev_p = *p; - if ((*p)->next == interp->tstate_head) - Py_FatalError( - "PyThreadState_Delete: circular list(!) and" - " tstate not found."); - } - *p = tstate->next; + if (tstate->prev) + tstate->prev->next = tstate->next; + else + interp->tstate_head = tstate->next; + if (tstate->next) + tstate->next->prev = tstate->prev; HEAD_UNLOCK(); - free(tstate); + if (tstate->on_delete != NULL) { + tstate->on_delete(tstate->on_delete_data); + } + PyMem_RawFree(tstate); } @@ -414,6 +429,43 @@ PyThreadState_DeleteCurrent() #endif /* WITH_THREAD */ +/* + * Delete all thread states except the one passed as argument. + * Note that, if there is a current thread state, it *must* be the one + * passed as argument. Also, this won't touch any other interpreters + * than the current one, since we don't know which thread state should + * be kept in those other interpreteres. + */ +void +_PyThreadState_DeleteExcept(PyThreadState *tstate) +{ + PyInterpreterState *interp = tstate->interp; + PyThreadState *p, *next, *garbage; + HEAD_LOCK(); + /* Remove all thread states, except tstate, from the linked list of + thread states. This will allow calling PyThreadState_Clear() + without holding the lock. */ + garbage = interp->tstate_head; + if (garbage == tstate) + garbage = tstate->next; + if (tstate->prev) + tstate->prev->next = tstate->next; + if (tstate->next) + tstate->next->prev = tstate->prev; + tstate->prev = tstate->next = NULL; + interp->tstate_head = tstate; + HEAD_UNLOCK(); + /* Clear and deallocate all stale thread states. Even if this + executes Python code, we should be safe since it executes + in the current thread, not one of the stale threads. */ + for (p = garbage; p; p = next) { + next = p->next; + PyThreadState_Clear(p); + PyMem_RawFree(p); + } +} + + PyThreadState * PyThreadState_Get(void) { @@ -671,18 +723,18 @@ _PyGILState_NoteThreadState(PyThreadState* tstate) The only situation where you can legitimately have more than one thread state for an OS level thread is when there are multiple - interpreters, when: + interpreters. - a) You shouldn't really be using the PyGILState_ APIs anyway, - and: + You shouldn't really be using the PyGILState_ APIs anyway (see issues + #10915 and #15751). - b) The slightly odd way PyThread_set_key_value works (see - comments by its implementation) means that the first thread - state created for that given OS level thread will "win", - which seems reasonable behaviour. + The first thread state created for that given OS level thread will + "win", which seems reasonable behaviour. */ - if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0) - Py_FatalError("Couldn't create autoTLSkey mapping"); + if (PyThread_get_key_value(autoTLSkey) == NULL) { + if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0) + Py_FatalError("Couldn't create autoTLSkey mapping"); + } /* PyGILState_Release must not try to delete this thread state. */ tstate->gilstate_counter = 1; @@ -697,6 +749,15 @@ PyGILState_GetThisThreadState(void) return (PyThreadState *)PyThread_get_key_value(autoTLSkey); } +int +PyGILState_Check(void) +{ + /* can't use PyThreadState_Get() since it will assert that it has the GIL */ + PyThreadState *tstate = (PyThreadState*)_Py_atomic_load_relaxed( + &_PyThreadState_Current); + return tstate && (tstate == PyGILState_GetThisThreadState()); +} + PyGILState_STATE PyGILState_Ensure(void) { @@ -710,6 +771,11 @@ PyGILState_Ensure(void) assert(autoInterpreterState); /* Py_Initialize() hasn't been called! */ tcur = (PyThreadState *)PyThread_get_key_value(autoTLSkey); if (tcur == NULL) { + /* At startup, Python has no concrete GIL. If PyGILState_Ensure() is + called from a new thread for the first time, we need the create the + GIL. */ + PyEval_InitThreads(); + /* Create a new thread state for this thread */ tcur = PyThreadState_New(autoInterpreterState); if (tcur == NULL) diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 4ab8f08..b8dd919 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -164,7 +164,7 @@ static double _PyOS_ascii_strtod(const char *nptr, char **endptr) { char *fail_pos; - double val = -1.0; + double val; struct lconv *locale_data; const char *decimal_point; size_t decimal_point_len; @@ -923,7 +923,7 @@ static char *uc_float_strings[] = { static char * format_float_short(double d, char format_code, - int mode, Py_ssize_t precision, + int mode, int precision, int always_add_sign, int add_dot_0_if_integer, int use_alt_formatting, char **float_strings, int *type) { @@ -1059,7 +1059,7 @@ format_float_short(double d, char format_code, /* if using an exponent, reset decimal point position to 1 and adjust exponent accordingly.*/ if (use_exp) { - exp = decpt - 1; + exp = (int)decpt - 1; decpt = 1; } /* ensure vdigits_start < decpt <= vdigits_end, or vdigits_start < diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 91d56b7..ff9569b 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -35,12 +35,42 @@ #define PATH_MAX MAXPATHLEN #endif +_Py_IDENTIFIER(builtins); +_Py_IDENTIFIER(excepthook); +_Py_IDENTIFIER(flush); +_Py_IDENTIFIER(last_traceback); +_Py_IDENTIFIER(last_type); +_Py_IDENTIFIER(last_value); +_Py_IDENTIFIER(name); +_Py_IDENTIFIER(ps1); +_Py_IDENTIFIER(ps2); +_Py_IDENTIFIER(stdin); +_Py_IDENTIFIER(stdout); +_Py_IDENTIFIER(stderr); +_Py_static_string(PyId_string, "<string>"); + +#ifdef Py_REF_DEBUG +static +void _print_total_refs(void) { + PyObject *xoptions, *value; + _Py_IDENTIFIER(showrefcount); + + xoptions = PySys_GetXOptions(); + if (xoptions == NULL) + return; + value = _PyDict_GetItemId(xoptions, &PyId_showrefcount); + if (value == Py_True) + fprintf(stderr, + "[%" PY_FORMAT_SIZE_T "d refs, " + "%" PY_FORMAT_SIZE_T "d blocks]\n", + _Py_GetRefTotal(), _Py_GetAllocatedBlocks()); +} +#endif + #ifndef Py_REF_DEBUG #define PRINT_TOTAL_REFS() #else /* Py_REF_DEBUG */ -#define PRINT_TOTAL_REFS() fprintf(stderr, \ - "[%" PY_FORMAT_SIZE_T "d refs]\n", \ - _Py_GetRefTotal()) +#define PRINT_TOTAL_REFS() _print_total_refs() #endif #ifdef __cplusplus @@ -57,7 +87,7 @@ static int initfsencoding(PyInterpreterState *interp); static void initsite(void); static int initstdio(void); static void flush_io(void); -static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *, +static PyObject *run_mod(mod_ty, PyObject *, PyObject *, PyObject *, PyCompilerFlags *, PyArena *); static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *, PyCompilerFlags *); @@ -68,11 +98,15 @@ static void call_py_exitfuncs(void); static void wait_for_thread_shutdown(void); static void call_ll_exitfuncs(void); extern int _PyUnicode_Init(void); +extern int _PyStructSequence_Init(void); extern void _PyUnicode_Fini(void); extern int _PyLong_Init(void); extern void PyLong_Fini(void); extern int _PyFaulthandler_Init(void); extern void _PyFaulthandler_Fini(void); +extern void _PyHash_Fini(void); +extern int _PyTraceMalloc_Init(void); +extern int _PyTraceMalloc_Fini(void); #ifdef WITH_THREAD extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *); @@ -93,6 +127,7 @@ int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */ int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */ +int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */ PyThreadState *_Py_Finalizing = NULL; @@ -118,6 +153,45 @@ Py_IsInitialized(void) return initialized; } +/* Helper to allow an embedding application to override the normal + * mechanism that attempts to figure out an appropriate IO encoding + */ + +static char *_Py_StandardStreamEncoding = NULL; +static char *_Py_StandardStreamErrors = NULL; + +int +Py_SetStandardStreamEncoding(const char *encoding, const char *errors) +{ + if (Py_IsInitialized()) { + /* This is too late to have any effect */ + return -1; + } + /* Can't call PyErr_NoMemory() on errors, as Python hasn't been + * initialised yet. + * + * However, the raw memory allocators are initialised appropriately + * as C static variables, so _PyMem_RawStrdup is OK even though + * Py_Initialize hasn't been called yet. + */ + if (encoding) { + _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding); + if (!_Py_StandardStreamEncoding) { + return -2; + } + } + if (errors) { + _Py_StandardStreamErrors = _PyMem_RawStrdup(errors); + if (!_Py_StandardStreamErrors) { + if (_Py_StandardStreamEncoding) { + PyMem_RawFree(_Py_StandardStreamEncoding); + } + return -3; + } + } + return 0; +} + /* Global initializations. Can be undone by Py_Finalize(). Don't call this twice without an intervening Py_Finalize() call. When initializations fail, a fatal error is issued and the function does @@ -146,7 +220,6 @@ get_codec_name(const char *encoding) { char *name_utf8, *name_str; PyObject *codec, *name = NULL; - _Py_IDENTIFIER(name); codec = _PyCodec_Lookup(encoding); if (!codec) @@ -160,7 +233,7 @@ get_codec_name(const char *encoding) name_utf8 = _PyUnicode_AsString(name); if (name_utf8 == NULL) goto error; - name_str = strdup(name_utf8); + name_str = _PyMem_RawStrdup(name_utf8); Py_DECREF(name); if (name_str == NULL) { PyErr_NoMemory(); @@ -313,7 +386,8 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) if (!PyByteArray_Init()) Py_FatalError("Py_Initialize: can't init bytearray"); - _PyFloat_Init(); + if (!_PyFloat_Init()) + Py_FatalError("Py_Initialize: can't init float"); interp->modules = PyDict_New(); if (interp->modules == NULL) @@ -322,6 +396,8 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) /* Init Unicode implementation; relies on the codec registry */ if (_PyUnicode_Init() < 0) Py_FatalError("Py_Initialize: can't initialize unicode"); + if (_PyStructSequence_Init() < 0) + Py_FatalError("Py_Initialize: can't initialize structseq"); bimod = _PyBuiltin_Init(); if (bimod == NULL) @@ -352,7 +428,7 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) pstderr = PyFile_NewStdPrinter(fileno(stderr)); if (pstderr == NULL) Py_FatalError("Py_Initialize: can't set preliminary stderr"); - PySys_SetObject("stderr", pstderr); + _PySys_SetObjectId(&PyId_stderr, pstderr); PySys_SetObject("__stderr__", pstderr); Py_DECREF(pstderr); @@ -380,6 +456,9 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) if (install_sigs) initsigs(); /* Signal handling stuff, including initintr() */ + if (_PyTraceMalloc_Init() < 0) + Py_FatalError("Py_Initialize: can't initialize tracemalloc"); + initmain(interp); /* Module __main__ */ if (initstdio() < 0) Py_FatalError( @@ -437,10 +516,9 @@ file_is_closed(PyObject *fobj) static void flush_std_files(void) { - PyObject *fout = PySys_GetObject("stdout"); - PyObject *ferr = PySys_GetObject("stderr"); + PyObject *fout = _PySys_GetObjectId(&PyId_stdout); + PyObject *ferr = _PySys_GetObjectId(&PyId_stderr); PyObject *tmp; - _Py_IDENTIFIER(flush); if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); @@ -504,11 +582,13 @@ Py_Finalize(void) _Py_Finalizing = tstate; initialized = 0; - /* Flush stdout+stderr */ - flush_std_files(); - - /* Disable signal handling */ - PyOS_FiniInterrupts(); + /* Destroy the state of all threads except of the current thread: in + practice, only daemon threads should still be alive. Clear frames of + other threads to call objects destructor. Destructors will be called in + the current Python thread. Since _Py_Finalizing has been set, no other + Python threads can lock the GIL at this point (if they try, they will + exit immediately). */ + _PyThreadState_DeleteExcept(tstate); /* Collect garbage. This may call finalizers; it's nice to call these * before all modules are destroyed. @@ -523,6 +603,7 @@ Py_Finalize(void) * XXX I haven't seen a real-life report of either of these. */ PyGC_Collect(); + #ifdef COUNT_ALLOCS /* With COUNT_ALLOCS, it helps to run GC multiple times: each collection might release some types from the type @@ -530,9 +611,12 @@ Py_Finalize(void) while (PyGC_Collect() > 0) /* nothing */; #endif - /* We run this while most interpreter state is still alive, so that - debug information can be printed out */ - _PyGC_Fini(); + + /* Flush stdout+stderr */ + flush_std_files(); + + /* Disable signal handling */ + PyOS_FiniInterrupts(); /* Destroy all modules */ PyImport_Cleanup(); @@ -559,6 +643,10 @@ Py_Finalize(void) PyGC_Collect(); #endif + /* Disable tracemalloc after all Python objects have been destroyed, + so it is possible to use tracemalloc in objects destructor. */ + _PyTraceMalloc_Fini(); + /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ _PyImport_Fini(); @@ -572,6 +660,8 @@ Py_Finalize(void) #ifdef COUNT_ALLOCS dump_counts(stdout); #endif + /* dump hash stats */ + _PyHash_Fini(); PRINT_TOTAL_REFS(); @@ -596,11 +686,6 @@ Py_Finalize(void) _PyExc_Fini(); - /* Cleanup auto-thread-state */ -#ifdef WITH_THREAD - _PyGILState_Fini(); -#endif /* WITH_THREAD */ - /* Sundry finalizers */ PyMethod_Fini(); PyFrame_Fini(); @@ -614,17 +699,15 @@ Py_Finalize(void) PyFloat_Fini(); PyDict_Fini(); PySlice_Fini(); + _PyGC_Fini(); + _PyRandom_Fini(); /* Cleanup Unicode implementation */ _PyUnicode_Fini(); - /* Delete current thread. After this, many C API calls become crashy. */ - PyThreadState_Swap(NULL); - PyInterpreterState_Delete(interp); - /* reset file system default encoding */ if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) { - free((char*)Py_FileSystemDefaultEncoding); + PyMem_RawFree((char*)Py_FileSystemDefaultEncoding); Py_FileSystemDefaultEncoding = NULL; } @@ -636,6 +719,15 @@ Py_Finalize(void) PyGrammar_RemoveAccelerators(&_PyParser_Grammar); + /* Cleanup auto-thread-state */ +#ifdef WITH_THREAD + _PyGILState_Fini(); +#endif /* WITH_THREAD */ + + /* Delete current thread. After this, many C API calls become crashy. */ + PyThreadState_Swap(NULL); + PyInterpreterState_Delete(interp); + #ifdef Py_TRACE_REFS /* Display addresses (& refcnts) of all objects still alive. * An address can be used to find the repr of the object, printed @@ -718,7 +810,7 @@ Py_NewInterpreter(void) pstderr = PyFile_NewStdPrinter(fileno(stderr)); if (pstderr == NULL) Py_FatalError("Py_Initialize: can't set preliminary stderr"); - PySys_SetObject("stderr", pstderr); + _PySys_SetObjectId(&PyId_stderr, pstderr); PySys_SetObject("__stderr__", pstderr); Py_DECREF(pstderr); @@ -773,6 +865,9 @@ Py_EndInterpreter(PyThreadState *tstate) Py_FatalError("Py_EndInterpreter: thread is not current"); if (tstate->frame != NULL) Py_FatalError("Py_EndInterpreter: thread still has a frame"); + + wait_for_thread_shutdown(); + if (tstate != interp->tstate_head || tstate->next != NULL) Py_FatalError("Py_EndInterpreter: not the last thread"); @@ -802,7 +897,7 @@ Py_GetProgramName(void) } static wchar_t *default_home = NULL; -static wchar_t env_home[PATH_MAX+1]; +static wchar_t env_home[MAXPATHLEN+1]; void Py_SetPythonHome(wchar_t *home) @@ -832,7 +927,7 @@ Py_GetPythonHome(void) static void initmain(PyInterpreterState *interp) { - PyObject *m, *d; + PyObject *m, *d, *loader; m = PyImport_AddModule("__main__"); if (m == NULL) Py_FatalError("can't create __main__ module"); @@ -853,7 +948,8 @@ initmain(PyInterpreterState *interp) * be set if __main__ gets further initialized later in the startup * process. */ - if (PyDict_GetItemString(d, "__loader__") == NULL) { + loader = PyDict_GetItemString(d, "__loader__"); + if (loader == NULL || loader == Py_None) { PyObject *loader = PyObject_GetAttrString(interp->importlib, "BuiltinImporter"); if (loader == NULL) { @@ -903,6 +999,7 @@ initsite(void) PyObject *m; m = PyImport_ImportModule("site"); if (m == NULL) { + fprintf(stderr, "Failed to import the site module\n"); PyErr_Print(); Py_Finalize(); exit(1); @@ -925,7 +1022,6 @@ create_stdio(PyObject* io, _Py_IDENTIFIER(open); _Py_IDENTIFIER(isatty); _Py_IDENTIFIER(TextIOWrapper); - _Py_IDENTIFIER(name); _Py_IDENTIFIER(mode); /* stdin is always opened in buffered mode, first because it shouldn't @@ -1035,7 +1131,7 @@ initstdio(void) PyObject *std = NULL; int status = 0, fd; PyObject * encoding_attr; - char *encoding = NULL, *errors; + char *pythonioencoding = NULL, *encoding, *errors; /* Hack to avoid a nasty recursion issue when Python is invoked in verbose mode: pre-import the Latin-1 and UTF-8 codecs */ @@ -1067,14 +1163,28 @@ initstdio(void) } Py_DECREF(wrapper); - encoding = Py_GETENV("PYTHONIOENCODING"); - errors = NULL; - if (encoding) { - encoding = strdup(encoding); - errors = strchr(encoding, ':'); - if (errors) { - *errors = '\0'; - errors++; + encoding = _Py_StandardStreamEncoding; + errors = _Py_StandardStreamErrors; + if (!encoding || !errors) { + pythonioencoding = Py_GETENV("PYTHONIOENCODING"); + if (pythonioencoding) { + char *err; + pythonioencoding = _PyMem_Strdup(pythonioencoding); + if (pythonioencoding == NULL) { + PyErr_NoMemory(); + goto error; + } + err = strchr(pythonioencoding, ':'); + if (err) { + *err = '\0'; + err++; + if (*err && !errors) { + errors = err; + } + } + if (*pythonioencoding && !encoding) { + encoding = pythonioencoding; + } } } @@ -1094,7 +1204,7 @@ initstdio(void) goto error; } /* if (fd < 0) */ PySys_SetObject("__stdin__", std); - PySys_SetObject("stdin", std); + _PySys_SetObjectId(&PyId_stdin, std); Py_DECREF(std); /* Set sys.stdout */ @@ -1109,7 +1219,7 @@ initstdio(void) goto error; } /* if (fd < 0) */ PySys_SetObject("__stdout__", std); - PySys_SetObject("stdout", std); + _PySys_SetObjectId(&PyId_stdout, std); Py_DECREF(std); #if 1 /* Disable this if you have trouble debugging bootstrap stuff */ @@ -1129,18 +1239,24 @@ initstdio(void) when import.c tries to write to stderr in verbose mode. */ encoding_attr = PyObject_GetAttrString(std, "encoding"); if (encoding_attr != NULL) { - const char * encoding; - encoding = _PyUnicode_AsString(encoding_attr); - if (encoding != NULL) { - PyObject *codec_info = _PyCodec_Lookup(encoding); + const char * std_encoding; + std_encoding = _PyUnicode_AsString(encoding_attr); + if (std_encoding != NULL) { + PyObject *codec_info = _PyCodec_Lookup(std_encoding); Py_XDECREF(codec_info); } Py_DECREF(encoding_attr); } PyErr_Clear(); /* Not a fatal error if codec isn't available */ - PySys_SetObject("__stderr__", std); - PySys_SetObject("stderr", std); + if (PySys_SetObject("__stderr__", std) < 0) { + Py_DECREF(std); + goto error; + } + if (_PySys_SetObjectId(&PyId_stderr, std) < 0) { + Py_DECREF(std); + goto error; + } Py_DECREF(std); #endif @@ -1149,8 +1265,16 @@ initstdio(void) status = -1; } - if (encoding) - free(encoding); + /* We won't need them anymore. */ + if (_Py_StandardStreamEncoding) { + PyMem_RawFree(_Py_StandardStreamEncoding); + _Py_StandardStreamEncoding = NULL; + } + if (_Py_StandardStreamErrors) { + PyMem_RawFree(_Py_StandardStreamErrors); + _Py_StandardStreamErrors = NULL; + } + PyMem_Free(pythonioencoding); Py_XDECREF(bimod); Py_XDECREF(iomod); return status; @@ -1175,36 +1299,47 @@ PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, } int -PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) +PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags) { - PyObject *v; - int ret; + PyObject *filename, *v; + int ret, err; PyCompilerFlags local_flags; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) { + PyErr_Print(); + return -1; + } + if (flags == NULL) { flags = &local_flags; local_flags.cf_flags = 0; } - v = PySys_GetObject("ps1"); + v = _PySys_GetObjectId(&PyId_ps1); if (v == NULL) { - PySys_SetObject("ps1", v = PyUnicode_FromString(">>> ")); + _PySys_SetObjectId(&PyId_ps1, v = PyUnicode_FromString(">>> ")); Py_XDECREF(v); } - v = PySys_GetObject("ps2"); + v = _PySys_GetObjectId(&PyId_ps2); if (v == NULL) { - PySys_SetObject("ps2", v = PyUnicode_FromString("... ")); + _PySys_SetObjectId(&PyId_ps2, v = PyUnicode_FromString("... ")); Py_XDECREF(v); } + err = -1; for (;;) { - ret = PyRun_InteractiveOneFlags(fp, filename, flags); + ret = PyRun_InteractiveOneObject(fp, filename, flags); PRINT_TOTAL_REFS(); - if (ret == E_EOF) - return 0; + if (ret == E_EOF) { + err = 0; + break; + } /* if (ret == E_NOMEM) - return -1; + break; */ } + Py_DECREF(filename); + return err; } /* compute parser flags based on compiler flags */ @@ -1232,18 +1367,25 @@ static int PARSER_FLAGS(PyCompilerFlags *flags) #endif int -PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) +PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags) { - PyObject *m, *d, *v, *w, *oenc = NULL; + PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name; mod_ty mod; PyArena *arena; char *ps1 = "", *ps2 = "", *enc = NULL; int errcode = 0; _Py_IDENTIFIER(encoding); + _Py_IDENTIFIER(__main__); + + mod_name = _PyUnicode_FromId(&PyId___main__); /* borrowed */ + if (mod_name == NULL) { + PyErr_Print(); + return -1; + } if (fp == stdin) { /* Fetch encoding from sys.stdin if possible. */ - v = PySys_GetObject("stdin"); + v = _PySys_GetObjectId(&PyId_stdin); if (v && v != Py_None) { oenc = _PyObject_GetAttrId(v, &PyId_encoding); if (oenc) @@ -1252,7 +1394,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags PyErr_Clear(); } } - v = PySys_GetObject("ps1"); + v = _PySys_GetObjectId(&PyId_ps1); if (v != NULL) { v = PyObject_Str(v); if (v == NULL) @@ -1265,7 +1407,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags } } } - w = PySys_GetObject("ps2"); + w = _PySys_GetObjectId(&PyId_ps2); if (w != NULL) { w = PyObject_Str(w); if (w == NULL) @@ -1285,9 +1427,9 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags Py_XDECREF(oenc); return -1; } - mod = PyParser_ASTFromFile(fp, filename, enc, - Py_single_input, ps1, ps2, - flags, &errcode, arena); + mod = PyParser_ASTFromFileObject(fp, filename, enc, + Py_single_input, ps1, ps2, + flags, &errcode, arena); Py_XDECREF(v); Py_XDECREF(w); Py_XDECREF(oenc); @@ -1300,7 +1442,7 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags PyErr_Print(); return -1; } - m = PyImport_AddModule("__main__"); + m = PyImport_AddModuleObject(mod_name); if (m == NULL) { PyArena_Free(arena); return -1; @@ -1317,6 +1459,23 @@ PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags return 0; } +int +PyRun_InteractiveOneFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags) +{ + PyObject *filename; + int res; + + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) { + PyErr_Print(); + return -1; + } + res = PyRun_InteractiveOneObject(fp, filename, flags); + Py_DECREF(filename); + return res; +} + + /* Check whether a file maybe a pyc file: Look at the extension, the file type, and, if we may close it, at the first few bytes. */ @@ -1357,8 +1516,8 @@ maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit) return 0; } -int -static set_main_loader(PyObject *d, const char *filename, const char *loader_name) +static int +set_main_loader(PyObject *d, const char *filename, const char *loader_name) { PyInterpreterState *interp; PyThreadState *tstate; @@ -1425,7 +1584,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, /* Try to run a pyc file. First, re-open in binary */ if (closeit) fclose(fp); - if ((pyc_fp = fopen(filename, "rb")) == NULL) { + if ((pyc_fp = _Py_fopen(filename, "rb")) == NULL) { fprintf(stderr, "python: Can't reopen .pyc file\n"); goto done; } @@ -1484,8 +1643,8 @@ PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags) } static int -parse_syntax_error(PyObject *err, PyObject **message, const char **filename, - int *lineno, int *offset, const char **text) +parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, + int *lineno, int *offset, PyObject **text) { long hold; PyObject *v; @@ -1496,6 +1655,7 @@ parse_syntax_error(PyObject *err, PyObject **message, const char **filename, _Py_IDENTIFIER(text); *message = NULL; + *filename = NULL; /* new style errors. `err' is an instance */ *message = _PyObject_GetAttrId(err, &PyId_msg); @@ -1507,13 +1667,13 @@ parse_syntax_error(PyObject *err, PyObject **message, const char **filename, goto finally; if (v == Py_None) { Py_DECREF(v); - *filename = NULL; + *filename = _PyUnicode_FromId(&PyId_string); + if (*filename == NULL) + goto finally; + Py_INCREF(*filename); } else { - *filename = _PyUnicode_AsString(v); - Py_DECREF(v); - if (!*filename) - goto finally; + *filename = v; } v = _PyObject_GetAttrId(err, &PyId_lineno); @@ -1547,15 +1707,13 @@ parse_syntax_error(PyObject *err, PyObject **message, const char **filename, *text = NULL; } else { - *text = _PyUnicode_AsString(v); - Py_DECREF(v); - if (!*text) - goto finally; + *text = v; } return 1; finally: Py_XDECREF(*message); + Py_XDECREF(*filename); return 0; } @@ -1566,9 +1724,15 @@ PyErr_Print(void) } static void -print_error_text(PyObject *f, int offset, const char *text) +print_error_text(PyObject *f, int offset, PyObject *text_obj) { + char *text; char *nl; + + text = _PyUnicode_AsString(text_obj); + if (text == NULL) + return; + if (offset >= 0) { if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n') offset--; @@ -1627,7 +1791,7 @@ handle_system_exit(void) if (PyLong_Check(value)) exitcode = (int)PyLong_AsLong(value); else { - PyObject *sys_stderr = PySys_GetObject("stderr"); + PyObject *sys_stderr = _PySys_GetObjectId(&PyId_stderr); if (sys_stderr != NULL && sys_stderr != Py_None) { PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW); } else { @@ -1670,11 +1834,11 @@ PyErr_PrintEx(int set_sys_last_vars) return; /* Now we know v != NULL too */ if (set_sys_last_vars) { - PySys_SetObject("last_type", exception); - PySys_SetObject("last_value", v); - PySys_SetObject("last_traceback", tb); + _PySys_SetObjectId(&PyId_last_type, exception); + _PySys_SetObjectId(&PyId_last_value, v); + _PySys_SetObjectId(&PyId_last_traceback, tb); } - hook = PySys_GetObject("excepthook"); + hook = _PySys_GetObjectId(&PyId_excepthook); if (hook) { PyObject *args = PyTuple_Pack(3, exception, v, tb); PyObject *result = PyEval_CallObject(hook, args); @@ -1724,9 +1888,11 @@ print_exception(PyObject *f, PyObject *value) _Py_IDENTIFIER(print_file_and_line); if (!PyExceptionInstance_Check(value)) { - PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f); - PyFile_WriteString(Py_TYPE(value)->tp_name, f); - PyFile_WriteString(" found\n", f); + err = PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f); + err += PyFile_WriteString(Py_TYPE(value)->tp_name, f); + err += PyFile_WriteString(" found\n", f); + if (err) + PyErr_Clear(); return; } @@ -1739,27 +1905,30 @@ print_exception(PyObject *f, PyObject *value) if (err == 0 && _PyObject_HasAttrId(value, &PyId_print_file_and_line)) { - PyObject *message; - const char *filename, *text; + PyObject *message, *filename, *text; int lineno, offset; if (!parse_syntax_error(value, &message, &filename, &lineno, &offset, &text)) PyErr_Clear(); else { - char buf[10]; - PyFile_WriteString(" File \"", f); - if (filename == NULL) - PyFile_WriteString("<string>", f); - else - PyFile_WriteString(filename, f); - PyFile_WriteString("\", line ", f); - PyOS_snprintf(buf, sizeof(buf), "%d", lineno); - PyFile_WriteString(buf, f); - PyFile_WriteString("\n", f); - if (text != NULL) - print_error_text(f, offset, text); + PyObject *line; + Py_DECREF(value); value = message; + + line = PyUnicode_FromFormat(" File \"%U\", line %d\n", + filename, lineno); + Py_DECREF(filename); + if (line != NULL) { + PyFile_WriteObject(line, f, Py_PRINT_RAW); + Py_DECREF(line); + } + + if (text != NULL) { + print_error_text(f, offset, text); + Py_DECREF(text); + } + /* Can't be bothered to check all those PyFile_WriteString() calls */ if (PyErr_Occurred()) @@ -1788,10 +1957,9 @@ print_exception(PyObject *f, PyObject *value) err = PyFile_WriteString("<unknown>", f); } else { - char* modstr = _PyUnicode_AsString(moduleName); - if (modstr && strcmp(modstr, "builtins")) + if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0) { - err = PyFile_WriteString(modstr, f); + err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW); err += PyFile_WriteString(".", f); } Py_DECREF(moduleName); @@ -1884,7 +2052,7 @@ void PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) { PyObject *seen; - PyObject *f = PySys_GetObject("stderr"); + PyObject *f = _PySys_GetObjectId(&PyId_stderr); if (PyExceptionInstance_Check(value) && tb != NULL && PyTraceBack_Check(tb)) { /* Put the traceback on the exception, otherwise it won't get @@ -1920,37 +2088,54 @@ PyRun_StringFlags(const char *str, int start, PyObject *globals, { PyObject *ret = NULL; mod_ty mod; - PyArena *arena = PyArena_New(); + PyArena *arena; + PyObject *filename; + + filename = _PyUnicode_FromId(&PyId_string); /* borrowed */ + if (filename == NULL) + return NULL; + + arena = PyArena_New(); if (arena == NULL) return NULL; - mod = PyParser_ASTFromString(str, "<string>", start, flags, arena); + mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena); if (mod != NULL) - ret = run_mod(mod, "<string>", globals, locals, flags, arena); + ret = run_mod(mod, filename, globals, locals, flags, arena); PyArena_Free(arena); return ret; } PyObject * -PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, +PyRun_FileExFlags(FILE *fp, const char *filename_str, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags) { - PyObject *ret; + PyObject *ret = NULL; mod_ty mod; - PyArena *arena = PyArena_New(); + PyArena *arena = NULL; + PyObject *filename; + + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + goto exit; + + arena = PyArena_New(); if (arena == NULL) - return NULL; + goto exit; - mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0, - flags, NULL, arena); + mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0, + flags, NULL, arena); if (closeit) fclose(fp); if (mod == NULL) { - PyArena_Free(arena); - return NULL; + goto exit; } ret = run_mod(mod, filename, globals, locals, flags, arena); - PyArena_Free(arena); + +exit: + Py_XDECREF(filename); + if (arena != NULL) + PyArena_Free(arena); return ret; } @@ -1959,12 +2144,11 @@ flush_io(void) { PyObject *f, *r; PyObject *type, *value, *traceback; - _Py_IDENTIFIER(flush); /* Save the current exception */ PyErr_Fetch(&type, &value, &traceback); - f = PySys_GetObject("stderr"); + f = _PySys_GetObjectId(&PyId_stderr); if (f != NULL) { r = _PyObject_CallMethodId(f, &PyId_flush, ""); if (r) @@ -1972,7 +2156,7 @@ flush_io(void) else PyErr_Clear(); } - f = PySys_GetObject("stdout"); + f = _PySys_GetObjectId(&PyId_stdout); if (f != NULL) { r = _PyObject_CallMethodId(f, &PyId_flush, ""); if (r) @@ -1985,12 +2169,12 @@ flush_io(void) } static PyObject * -run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals, - PyCompilerFlags *flags, PyArena *arena) +run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals, + PyCompilerFlags *flags, PyArena *arena) { PyCodeObject *co; PyObject *v; - co = PyAST_Compile(mod, filename, flags, arena); + co = PyAST_CompileObject(mod, filename, flags, -1, arena); if (co == NULL) return NULL; v = PyEval_EvalCode((PyObject*)co, globals, locals); @@ -2032,8 +2216,8 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals, } PyObject * -Py_CompileStringExFlags(const char *str, const char *filename, int start, - PyCompilerFlags *flags, int optimize) +Py_CompileStringObject(const char *str, PyObject *filename, int start, + PyCompilerFlags *flags, int optimize) { PyCodeObject *co; mod_ty mod; @@ -2041,7 +2225,7 @@ Py_CompileStringExFlags(const char *str, const char *filename, int start, if (arena == NULL) return NULL; - mod = PyParser_ASTFromString(str, filename, start, flags, arena); + mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena); if (mod == NULL) { PyArena_Free(arena); return NULL; @@ -2051,11 +2235,24 @@ Py_CompileStringExFlags(const char *str, const char *filename, int start, PyArena_Free(arena); return result; } - co = PyAST_CompileEx(mod, filename, flags, optimize, arena); + co = PyAST_CompileObject(mod, filename, flags, optimize, arena); PyArena_Free(arena); return (PyObject *)co; } +PyObject * +Py_CompileStringExFlags(const char *str, const char *filename_str, int start, + PyCompilerFlags *flags, int optimize) +{ + PyObject *filename, *co; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + co = Py_CompileStringObject(str, filename, start, flags, optimize); + Py_DECREF(filename); + return co; +} + /* For use in Py_LIMITED_API */ #undef Py_CompileString PyObject * @@ -2065,46 +2262,62 @@ PyCompileString(const char *str, const char *filename, int start) } struct symtable * -Py_SymtableString(const char *str, const char *filename, int start) +Py_SymtableStringObject(const char *str, PyObject *filename, int start) { struct symtable *st; mod_ty mod; PyCompilerFlags flags; - PyArena *arena = PyArena_New(); + PyArena *arena; + + arena = PyArena_New(); if (arena == NULL) return NULL; flags.cf_flags = 0; - mod = PyParser_ASTFromString(str, filename, start, &flags, arena); + mod = PyParser_ASTFromStringObject(str, filename, start, &flags, arena); if (mod == NULL) { PyArena_Free(arena); return NULL; } - st = PySymtable_Build(mod, filename, 0); + st = PySymtable_BuildObject(mod, filename, 0); PyArena_Free(arena); return st; } +struct symtable * +Py_SymtableString(const char *str, const char *filename_str, int start) +{ + PyObject *filename; + struct symtable *st; + + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + st = Py_SymtableStringObject(str, filename, start); + Py_DECREF(filename); + return st; +} + /* Preferred access to parser is through AST. */ mod_ty -PyParser_ASTFromString(const char *s, const char *filename, int start, - PyCompilerFlags *flags, PyArena *arena) +PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start, + PyCompilerFlags *flags, PyArena *arena) { mod_ty mod; PyCompilerFlags localflags; perrdetail err; int iflags = PARSER_FLAGS(flags); - node *n = PyParser_ParseStringFlagsFilenameEx(s, filename, - &_PyParser_Grammar, start, &err, - &iflags); + node *n = PyParser_ParseStringObject(s, filename, + &_PyParser_Grammar, start, &err, + &iflags); if (flags == NULL) { localflags.cf_flags = 0; flags = &localflags; } if (n) { flags->cf_flags |= iflags & PyCF_MASK; - mod = PyAST_FromNode(n, flags, filename, arena); + mod = PyAST_FromNodeObject(n, flags, filename, arena); PyNode_Free(n); } else { @@ -2116,26 +2329,40 @@ PyParser_ASTFromString(const char *s, const char *filename, int start, } mod_ty -PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc, - int start, char *ps1, - char *ps2, PyCompilerFlags *flags, int *errcode, - PyArena *arena) +PyParser_ASTFromString(const char *s, const char *filename_str, int start, + PyCompilerFlags *flags, PyArena *arena) +{ + PyObject *filename; + mod_ty mod; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + mod = PyParser_ASTFromStringObject(s, filename, start, flags, arena); + Py_DECREF(filename); + return mod; +} + +mod_ty +PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc, + int start, char *ps1, + char *ps2, PyCompilerFlags *flags, int *errcode, + PyArena *arena) { mod_ty mod; PyCompilerFlags localflags; perrdetail err; int iflags = PARSER_FLAGS(flags); - node *n = PyParser_ParseFileFlagsEx(fp, filename, enc, - &_PyParser_Grammar, - start, ps1, ps2, &err, &iflags); + node *n = PyParser_ParseFileObject(fp, filename, enc, + &_PyParser_Grammar, + start, ps1, ps2, &err, &iflags); if (flags == NULL) { localflags.cf_flags = 0; flags = &localflags; } if (n) { flags->cf_flags |= iflags & PyCF_MASK; - mod = PyAST_FromNode(n, flags, filename, arena); + mod = PyAST_FromNodeObject(n, flags, filename, arena); PyNode_Free(n); } else { @@ -2148,6 +2375,23 @@ PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc, return mod; } +mod_ty +PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc, + int start, char *ps1, + char *ps2, PyCompilerFlags *flags, int *errcode, + PyArena *arena) +{ + mod_ty mod; + PyObject *filename; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + mod = PyParser_ASTFromFileObject(fp, filename, enc, start, ps1, ps2, + flags, errcode, arena); + Py_DECREF(filename); + return mod; +} + /* Simplified interface to parsefile -- return node or set exception */ node * @@ -2484,6 +2728,9 @@ initsigs(void) PyOS_setsig(SIGXFSZ, SIG_IGN); #endif PyOS_InitInterrupts(); /* May imply initsignal() */ + if (PyErr_Occurred()) { + Py_FatalError("Py_Initialize: can't import signal"); + } } diff --git a/Python/random.c b/Python/random.c index 337be86..cdace00 100644 --- a/Python/random.c +++ b/Python/random.c @@ -12,13 +12,6 @@ static int _Py_HashSecret_Initialized = 0; #endif #ifdef MS_WINDOWS -typedef BOOL (WINAPI *CRYPTACQUIRECONTEXTA)(HCRYPTPROV *phProv,\ - LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType,\ - DWORD dwFlags ); -typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV hProv, DWORD dwLen,\ - BYTE *pbBuffer ); - -static CRYPTGENRANDOM pCryptGenRandom = NULL; /* This handle is never explicitly released. Instead, the operating system will release it when the process terminates. */ static HCRYPTPROV hCryptProv = 0; @@ -26,29 +19,9 @@ static HCRYPTPROV hCryptProv = 0; static int win32_urandom_init(int raise) { - HINSTANCE hAdvAPI32 = NULL; - CRYPTACQUIRECONTEXTA pCryptAcquireContext = NULL; - - /* Obtain handle to the DLL containing CryptoAPI. This should not fail. */ - hAdvAPI32 = GetModuleHandle("advapi32.dll"); - if(hAdvAPI32 == NULL) - goto error; - - /* Obtain pointers to the CryptoAPI functions. This will fail on some early - versions of Win95. */ - pCryptAcquireContext = (CRYPTACQUIRECONTEXTA)GetProcAddress( - hAdvAPI32, "CryptAcquireContextA"); - if (pCryptAcquireContext == NULL) - goto error; - - pCryptGenRandom = (CRYPTGENRANDOM)GetProcAddress(hAdvAPI32, - "CryptGenRandom"); - if (pCryptGenRandom == NULL) - goto error; - /* Acquire context */ - if (! pCryptAcquireContext(&hCryptProv, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) + if (!CryptAcquireContext(&hCryptProv, NULL, NULL, + PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) goto error; return 0; @@ -77,7 +50,7 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise) while (size > 0) { chunk = size > INT_MAX ? INT_MAX : size; - if (!pCryptGenRandom(hCryptProv, chunk, buffer)) + if (!CryptGenRandom(hCryptProv, (DWORD)chunk, buffer)) { /* CryptGenRandom() failed */ if (raise) @@ -95,40 +68,20 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise) #endif /* MS_WINDOWS */ -#ifdef __VMS -/* Use openssl random routine */ -#include <openssl/rand.h> -static int -vms_urandom(unsigned char *buffer, Py_ssize_t size, int raise) -{ - if (RAND_pseudo_bytes(buffer, size) < 0) { - if (raise) { - PyErr_Format(PyExc_ValueError, - "RAND_pseudo_bytes"); - } else { - Py_FatalError("Failed to initialize the randomized hash " - "secret using RAND_pseudo_bytes"); - } - return -1; - } - return 0; -} -#endif /* __VMS */ - - -#if !defined(MS_WINDOWS) && !defined(__VMS) +#ifndef MS_WINDOWS +static int urandom_fd = -1; /* Read size bytes from /dev/urandom into buffer. Call Py_FatalError() on error. */ static void -dev_urandom_noraise(char *buffer, Py_ssize_t size) +dev_urandom_noraise(unsigned char *buffer, Py_ssize_t size) { int fd; Py_ssize_t n; assert (0 < size); - fd = open("/dev/urandom", O_RDONLY); + fd = _Py_open("/dev/urandom", O_RDONLY); if (fd < 0) Py_FatalError("Failed to open /dev/urandom"); @@ -160,18 +113,30 @@ dev_urandom_python(char *buffer, Py_ssize_t size) if (size <= 0) return 0; - Py_BEGIN_ALLOW_THREADS - fd = open("/dev/urandom", O_RDONLY); - Py_END_ALLOW_THREADS - if (fd < 0) - { - if (errno == ENOENT || errno == ENXIO || - errno == ENODEV || errno == EACCES) - PyErr_SetString(PyExc_NotImplementedError, - "/dev/urandom (or equivalent) not found"); + if (urandom_fd >= 0) + fd = urandom_fd; + else { + Py_BEGIN_ALLOW_THREADS + fd = _Py_open("/dev/urandom", O_RDONLY); + Py_END_ALLOW_THREADS + if (fd < 0) + { + if (errno == ENOENT || errno == ENXIO || + errno == ENODEV || errno == EACCES) + PyErr_SetString(PyExc_NotImplementedError, + "/dev/urandom (or equivalent) not found"); + else + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + if (urandom_fd >= 0) { + /* urandom_fd was initialized by another thread while we were + not holding the GIL, keep it. */ + close(fd); + fd = urandom_fd; + } else - PyErr_SetFromErrno(PyExc_OSError); - return -1; + urandom_fd = fd; } Py_BEGIN_ALLOW_THREADS @@ -195,13 +160,21 @@ dev_urandom_python(char *buffer, Py_ssize_t size) PyErr_Format(PyExc_RuntimeError, "Failed to read %zi bytes from /dev/urandom", size); - close(fd); return -1; } - close(fd); return 0; } -#endif /* !defined(MS_WINDOWS) && !defined(__VMS) */ + +static void +dev_urandom_close(void) +{ + if (urandom_fd >= 0) { + close(urandom_fd); + urandom_fd = -1; + } +} + +#endif /* MS_WINDOWS */ /* Fill buffer with pseudo-random bytes generated by a linear congruent generator (LCG): @@ -243,11 +216,7 @@ _PyOS_URandom(void *buffer, Py_ssize_t size) #ifdef MS_WINDOWS return win32_urandom((unsigned char *)buffer, size, 1); #else -# ifdef __VMS - return vms_urandom((unsigned char *)buffer, size, 1); -# else return dev_urandom_python((char*)buffer, size); -# endif #endif } @@ -255,8 +224,9 @@ void _PyRandom_Init(void) { char *env; - void *secret = &_Py_HashSecret; + unsigned char *secret = (unsigned char *)&_Py_HashSecret.uc; Py_ssize_t secret_size = sizeof(_Py_HashSecret_t); + assert(secret_size == sizeof(_Py_HashSecret.uc)); if (_Py_HashSecret_Initialized) return; @@ -284,18 +254,22 @@ _PyRandom_Init(void) memset(secret, 0, secret_size); } else { - lcg_urandom(seed, (unsigned char*)secret, secret_size); + lcg_urandom(seed, secret, secret_size); } } else { #ifdef MS_WINDOWS - (void)win32_urandom((unsigned char *)secret, secret_size, 0); -#else /* #ifdef MS_WINDOWS */ -# ifdef __VMS - vms_urandom((unsigned char *)secret, secret_size, 0); -# else - dev_urandom_noraise((char*)secret, secret_size); -# endif + (void)win32_urandom(secret, secret_size, 0); +#else + dev_urandom_noraise(secret, secret_size); #endif } } + +void +_PyRandom_Fini(void) +{ +#ifndef MS_WINDOWS + dev_urandom_close(); +#endif +} diff --git a/Python/strdup.c b/Python/strdup.c index 20187e0..769d3db 100644 --- a/Python/strdup.c +++ b/Python/strdup.c @@ -6,7 +6,7 @@ char * strdup(const char *str) { if (str != NULL) { - register char *copy = malloc(strlen(str) + 1); + char *copy = malloc(strlen(str) + 1); if (copy != NULL) return strcpy(copy, str); } diff --git a/Python/symtable.c b/Python/symtable.c index 1e13b790..da164aa 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -37,24 +37,14 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, ste->ste_table = st; ste->ste_id = k; /* ste owns reference to k */ - ste->ste_name = name; Py_INCREF(name); + ste->ste_name = name; ste->ste_symbols = NULL; ste->ste_varnames = NULL; ste->ste_children = NULL; - ste->ste_symbols = PyDict_New(); - if (ste->ste_symbols == NULL) - goto fail; - - ste->ste_varnames = PyList_New(0); - if (ste->ste_varnames == NULL) - goto fail; - - ste->ste_children = PyList_New(0); - if (ste->ste_children == NULL) - goto fail; + ste->ste_directives = NULL; ste->ste_type = block; ste->ste_unoptimized = 0; @@ -75,6 +65,15 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, ste->ste_child_free = 0; ste->ste_generator = 0; ste->ste_returns_value = 0; + ste->ste_needs_class_closure = 0; + + ste->ste_symbols = PyDict_New(); + ste->ste_varnames = PyList_New(0); + ste->ste_children = PyList_New(0); + if (ste->ste_symbols == NULL + || ste->ste_varnames == NULL + || ste->ste_children == NULL) + goto fail; if (PyDict_SetItem(st->st_blocks, ste->ste_id, (PyObject *)ste) < 0) goto fail; @@ -102,6 +101,7 @@ ste_dealloc(PySTEntryObject *ste) Py_XDECREF(ste->ste_symbols); Py_XDECREF(ste->ste_varnames); Py_XDECREF(ste->ste_children); + Py_XDECREF(ste->ste_directives); PyObject_Del(ste); } @@ -188,7 +188,7 @@ static int symtable_visit_withitem(struct symtable *st, withitem_ty item); static identifier top = NULL, lambda = NULL, genexpr = NULL, listcomp = NULL, setcomp = NULL, dictcomp = NULL, - __class__ = NULL, __locals__ = NULL; + __class__ = NULL; #define GET_IDENTIFIER(VAR) \ ((VAR) ? (VAR) : ((VAR) = PyUnicode_InternFromString(# VAR))) @@ -233,7 +233,7 @@ symtable_new(void) #define COMPILER_STACK_FRAME_SCALE 3 struct symtable * -PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future) +PySymtable_BuildObject(mod_ty mod, PyObject *filename, PyFutureFeatures *future) { struct symtable *st = symtable_new(); asdl_seq *seq; @@ -242,7 +242,12 @@ PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future) int recursion_limit = Py_GetRecursionLimit(); if (st == NULL) - return st; + return NULL; + if (filename == NULL) { + PySymtable_Free(st); + return NULL; + } + Py_INCREF(filename); st->st_filename = filename; st->st_future = future; @@ -306,9 +311,23 @@ PySymtable_Build(mod_ty mod, const char *filename, PyFutureFeatures *future) return NULL; } +struct symtable * +PySymtable_Build(mod_ty mod, const char *filename_str, PyFutureFeatures *future) +{ + PyObject *filename; + struct symtable *st; + filename = PyUnicode_DecodeFSDefault(filename_str); + if (filename == NULL) + return NULL; + st = PySymtable_BuildObject(mod, filename, future); + Py_DECREF(filename); + return st; +} + void PySymtable_Free(struct symtable *st) { + Py_XDECREF(st->st_filename); Py_XDECREF(st->st_blocks); Py_XDECREF(st->st_stack); PyMem_Free((void *)st); @@ -346,6 +365,24 @@ PyST_GetScope(PySTEntryObject *ste, PyObject *name) return (PyLong_AS_LONG(v) >> SCOPE_OFFSET) & SCOPE_MASK; } +static int +error_at_directive(PySTEntryObject *ste, PyObject *name) +{ + Py_ssize_t i; + PyObject *data; + assert(ste->ste_directives); + for (i = 0; ; i++) { + data = PyList_GET_ITEM(ste->ste_directives, i); + assert(PyTuple_CheckExact(data)); + if (PyTuple_GET_ITEM(data, 0) == name) + break; + } + PyErr_SyntaxLocationObject(ste->ste_table->st_filename, + PyLong_AsLong(PyTuple_GET_ITEM(data, 1)), + PyLong_AsLong(PyTuple_GET_ITEM(data, 2))); + return 0; +} + /* Analyze raw symbol information to determine scope of each name. @@ -420,16 +457,13 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, PyErr_Format(PyExc_SyntaxError, "name '%U' is parameter and global", name); - PyErr_SyntaxLocationEx(ste->ste_table->st_filename, - ste->ste_lineno, ste->ste_col_offset); - - return 0; + return error_at_directive(ste, name); } if (flags & DEF_NONLOCAL) { PyErr_Format(PyExc_SyntaxError, "name '%U' is nonlocal and global", name); - return 0; + return error_at_directive(ste, name); } SET_SCOPE(scopes, name, GLOBAL_EXPLICIT); if (PySet_Add(global, name) < 0) @@ -443,19 +477,19 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, PyErr_Format(PyExc_SyntaxError, "name '%U' is parameter and nonlocal", name); - return 0; + return error_at_directive(ste, name); } if (!bound) { PyErr_Format(PyExc_SyntaxError, "nonlocal declaration not allowed at module level"); - return 0; + return error_at_directive(ste, name); } if (!PySet_Contains(bound, name)) { PyErr_Format(PyExc_SyntaxError, "no binding for nonlocal '%U' found", name); - return 0; + return error_at_directive(ste, name); } SET_SCOPE(scopes, name, FREE); ste->ste_free = 1; @@ -500,13 +534,10 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, Note that the current block's free variables are included in free. That's safe because no name can be free and local in the same scope. - - The 'restricted' argument may be set to a string to restrict the analysis - to the one variable whose name equals that string (e.g. "__class__"). */ static int -analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) +analyze_cells(PyObject *scopes, PyObject *free) { PyObject *name, *v, *v_cell; int success = 0; @@ -523,9 +554,6 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) continue; if (!PySet_Contains(free, name)) continue; - if (restricted != NULL && - PyUnicode_CompareWithASCIIString(name, restricted)) - continue; /* Replace LOCAL with CELL for this name, and remove from free. It is safe to replace the value of name in the dict, because it will not cause a resize. @@ -541,6 +569,20 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) return success; } +static int +drop_class_free(PySTEntryObject *ste, PyObject *free) +{ + int res; + if (!GET_IDENTIFIER(__class__)) + return 0; + res = PySet_Discard(free, __class__); + if (res < 0) + return 0; + if (res) + ste->ste_needs_class_closure = 1; + return 1; +} + /* Check for illegal statements in unoptimized namespaces */ static int check_unoptimized(const PySTEntryObject* ste) { @@ -564,8 +606,9 @@ check_unoptimized(const PySTEntryObject* ste) { break; } - PyErr_SyntaxLocationEx(ste->ste_table->st_filename, ste->ste_opt_lineno, - ste->ste_opt_col_offset); + PyErr_SyntaxLocationObject(ste->ste_table->st_filename, + ste->ste_opt_lineno, + ste->ste_opt_col_offset); return 0; } @@ -771,7 +814,6 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, /* Special-case __class__ */ if (!GET_IDENTIFIER(__class__)) goto error; - assert(PySet_Contains(local, __class__) == 1); if (PySet_Add(newbound, __class__) < 0) goto error; } @@ -804,11 +846,9 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, Py_DECREF(temp); /* Check if any local variables must be converted to cell variables */ - if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree, - NULL)) + if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree)) goto error; - else if (ste->ste_type == ClassBlock && !analyze_cells(scopes, newfree, - "__class__")) + else if (ste->ste_type == ClassBlock && !drop_class_free(ste, newfree)) goto error; /* Records the results of the analysis in the symbol table entry */ if (!update_symbols(ste->ste_symbols, scopes, bound, newfree, @@ -899,15 +939,20 @@ symtable_analyze(struct symtable *st) static int symtable_warn(struct symtable *st, char *msg, int lineno) { - if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, st->st_filename, - lineno, NULL, NULL) < 0) { + PyObject *message = PyUnicode_FromString(msg); + if (message == NULL) + return 0; + if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, message, st->st_filename, + lineno, NULL, NULL) < 0) { + Py_DECREF(message); if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) { PyErr_SetString(PyExc_SyntaxError, msg); - PyErr_SyntaxLocationEx(st->st_filename, st->st_cur->ste_lineno, - st->st_cur->ste_col_offset); + PyErr_SyntaxLocationObject(st->st_filename, st->st_cur->ste_lineno, + st->st_cur->ste_col_offset); } return 0; } + Py_DECREF(message); return 1; } @@ -990,9 +1035,9 @@ symtable_add_def(struct symtable *st, PyObject *name, int flag) if ((flag & DEF_PARAM) && (val & DEF_PARAM)) { /* Is it better to use 'mangled' or 'name' here? */ PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT, name); - PyErr_SyntaxLocationEx(st->st_filename, - st->st_cur->ste_lineno, - st->st_cur->ste_col_offset); + PyErr_SyntaxLocationObject(st->st_filename, + st->st_cur->ste_lineno, + st->st_cur->ste_col_offset); goto error; } val |= flag; @@ -1102,6 +1147,25 @@ symtable_new_tmpname(struct symtable *st) static int +symtable_record_directive(struct symtable *st, identifier name, stmt_ty s) +{ + PyObject *data; + int res; + if (!st->st_cur->ste_directives) { + st->st_cur->ste_directives = PyList_New(0); + if (!st->st_cur->ste_directives) + return 0; + } + data = Py_BuildValue("(Oii)", name, s->lineno, s->col_offset); + if (!data) + return 0; + res = PyList_Append(st->st_cur->ste_directives, data); + Py_DECREF(data); + return res == 0; +} + + +static int symtable_visit_stmt(struct symtable *st, stmt_ty s) { if (++st->recursion_depth > st->recursion_limit) { @@ -1146,13 +1210,6 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock, (void *)s, s->lineno, s->col_offset)) VISIT_QUIT(st, 0); - if (!GET_IDENTIFIER(__class__) || - !symtable_add_def(st, __class__, DEF_LOCAL) || - !GET_IDENTIFIER(__locals__) || - !symtable_add_def(st, __locals__, DEF_PARAM)) { - symtable_exit_block(st, s); - VISIT_QUIT(st, 0); - } tmp = st->st_private; st->st_private = s->v.ClassDef.name; VISIT_SEQ(st, stmt, s->v.ClassDef.body); @@ -1240,14 +1297,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) asdl_seq *seq = s->v.Global.names; for (i = 0; i < asdl_seq_LEN(seq); i++) { identifier name = (identifier)asdl_seq_GET(seq, i); - long cur; - if (st->st_cur->ste_type == ClassBlock && - !PyUnicode_CompareWithASCIIString(name, "__class__")) { - PyErr_SetString(PyExc_SyntaxError, "cannot make __class__ global"); - PyErr_SyntaxLocationEx(st->st_filename, s->lineno, s->col_offset); - return 0; - } - cur = symtable_lookup(st, name); + long cur = symtable_lookup(st, name); if (cur < 0) VISIT_QUIT(st, 0); if (cur & (DEF_LOCAL | USE)) { @@ -1268,6 +1318,8 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) } if (!symtable_add_def(st, name, DEF_GLOBAL)) VISIT_QUIT(st, 0); + if (!symtable_record_directive(st, name, s)) + VISIT_QUIT(st, 0); } break; } @@ -1297,6 +1349,8 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) } if (!symtable_add_def(st, name, DEF_NONLOCAL)) VISIT_QUIT(st, 0); + if (!symtable_record_directive(st, name, s)) + VISIT_QUIT(st, 0); } break; } @@ -1407,6 +1461,7 @@ symtable_visit_expr(struct symtable *st, expr_ty e) case Str_kind: case Bytes_kind: case Ellipsis_kind: + case NameConstant_kind: /* Nothing to do here. */ break; /* The following exprs can be assignment targets. */ @@ -1499,10 +1554,10 @@ symtable_visit_annotations(struct symtable *st, stmt_ty s) if (a->args && !symtable_visit_argannotations(st, a->args)) return 0; - if (a->varargannotation) - VISIT(st, expr, a->varargannotation); - if (a->kwargannotation) - VISIT(st, expr, a->kwargannotation); + if (a->vararg && a->vararg->annotation) + VISIT(st, expr, a->vararg->annotation); + if (a->kwarg && a->kwarg->annotation) + VISIT(st, expr, a->kwarg->annotation); if (a->kwonlyargs && !symtable_visit_argannotations(st, a->kwonlyargs)) return 0; if (s->v.FunctionDef.returns) @@ -1521,12 +1576,12 @@ symtable_visit_arguments(struct symtable *st, arguments_ty a) if (a->kwonlyargs && !symtable_visit_params(st, a->kwonlyargs)) return 0; if (a->vararg) { - if (!symtable_add_def(st, a->vararg, DEF_PARAM)) + if (!symtable_add_def(st, a->vararg->arg, DEF_PARAM)) return 0; st->st_cur->ste_varargs = 1; } if (a->kwarg) { - if (!symtable_add_def(st, a->kwarg, DEF_PARAM)) + if (!symtable_add_def(st, a->kwarg->arg, DEF_PARAM)) return 0; st->st_cur->ste_varkeywords = 1; } @@ -1587,7 +1642,7 @@ symtable_visit_alias(struct symtable *st, alias_ty a) int lineno = st->st_cur->ste_lineno; int col_offset = st->st_cur->ste_col_offset; PyErr_SetString(PyExc_SyntaxError, IMPORT_STAR_WARNING); - PyErr_SyntaxLocationEx(st->st_filename, lineno, col_offset); + PyErr_SyntaxLocationObject(st->st_filename, lineno, col_offset); Py_DECREF(store_name); return 0; } diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 222630c..976d5a0 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -32,15 +32,31 @@ extern void *PyWin_DLLhModule; extern const char *PyWin_DLLVersionString; #endif -#ifdef __VMS -#include <unixlib.h> -#endif - #ifdef HAVE_LANGINFO_H #include <locale.h> #include <langinfo.h> #endif +_Py_IDENTIFIER(_); +_Py_IDENTIFIER(__sizeof__); +_Py_IDENTIFIER(buffer); +_Py_IDENTIFIER(builtins); +_Py_IDENTIFIER(encoding); +_Py_IDENTIFIER(path); +_Py_IDENTIFIER(stdout); +_Py_IDENTIFIER(stderr); +_Py_IDENTIFIER(write); + +PyObject * +_PySys_GetObjectId(_Py_Identifier *key) +{ + PyThreadState *tstate = PyThreadState_GET(); + PyObject *sd = tstate->interp->sysdict; + if (sd == NULL) + return NULL; + return _PyDict_GetItemId(sd, key); +} + PyObject * PySys_GetObject(const char *name) { @@ -52,6 +68,21 @@ PySys_GetObject(const char *name) } int +_PySys_SetObjectId(_Py_Identifier *key, PyObject *v) +{ + PyThreadState *tstate = PyThreadState_GET(); + PyObject *sd = tstate->interp->sysdict; + if (v == NULL) { + if (_PyDict_GetItemId(sd, key) == NULL) + return 0; + else + return _PyDict_DelItemId(sd, key); + } + else + return _PyDict_SetItemId(sd, key, v); +} + +int PySys_SetObject(const char *name, PyObject *v) { PyThreadState *tstate = PyThreadState_GET(); @@ -79,8 +110,6 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o) PyObject *encoded, *escaped_str, *repr_str, *buffer, *result; char *stdout_encoding_str; int ret; - _Py_IDENTIFIER(encoding); - _Py_IDENTIFIER(buffer); stdout_encoding = _PyObject_GetAttrId(outf, &PyId_encoding); if (stdout_encoding == NULL) @@ -101,7 +130,6 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o) buffer = _PyObject_GetAttrId(outf, &PyId_buffer); if (buffer) { - _Py_IDENTIFIER(write); result = _PyObject_CallMethodId(buffer, &PyId_write, "(O)", encoded); Py_DECREF(buffer); Py_DECREF(encoded); @@ -137,10 +165,11 @@ sys_displayhook(PyObject *self, PyObject *o) PyObject *outf; PyInterpreterState *interp = PyThreadState_GET()->interp; PyObject *modules = interp->modules; - PyObject *builtins = PyDict_GetItemString(modules, "builtins"); + PyObject *builtins; + static PyObject *newline = NULL; int err; - _Py_IDENTIFIER(_); + builtins = _PyDict_GetItemId(modules, &PyId_builtins); if (builtins == NULL) { PyErr_SetString(PyExc_RuntimeError, "lost builtins module"); return NULL; @@ -155,7 +184,7 @@ sys_displayhook(PyObject *self, PyObject *o) } if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0) return NULL; - outf = PySys_GetObject("stdout"); + outf = _PySys_GetObjectId(&PyId_stdout); if (outf == NULL || outf == Py_None) { PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); return NULL; @@ -173,7 +202,12 @@ sys_displayhook(PyObject *self, PyObject *o) return NULL; } } - if (PyFile_WriteString("\n", outf) != 0) + if (newline == NULL) { + newline = PyUnicode_FromString("\n"); + if (newline == NULL) + return NULL; + } + if (PyFile_WriteObject(newline, outf, Py_PRINT_RAW) != 0) return NULL; if (_PyObject_SetAttrId(builtins, &PyId__, o) != 0) return NULL; @@ -329,15 +363,19 @@ trace_init(void) static PyObject * -call_trampoline(PyThreadState *tstate, PyObject* callback, +call_trampoline(PyObject* callback, PyFrameObject *frame, int what, PyObject *arg) { - PyObject *args = PyTuple_New(3); + PyObject *args; PyObject *whatstr; PyObject *result; + args = PyTuple_New(3); if (args == NULL) return NULL; + if (PyFrame_FastToLocalsWithError(frame) < 0) + return NULL; + Py_INCREF(frame); whatstr = whatstrings[what]; Py_INCREF(whatstr); @@ -349,7 +387,6 @@ call_trampoline(PyThreadState *tstate, PyObject* callback, PyTuple_SET_ITEM(args, 2, arg); /* call the Python-level function */ - PyFrame_FastToLocals(frame); result = PyEval_CallObject(callback, args); PyFrame_LocalsToFast(frame, 1); if (result == NULL) @@ -364,12 +401,11 @@ static int profile_trampoline(PyObject *self, PyFrameObject *frame, int what, PyObject *arg) { - PyThreadState *tstate = frame->f_tstate; PyObject *result; if (arg == NULL) arg = Py_None; - result = call_trampoline(tstate, self, frame, what, arg); + result = call_trampoline(self, frame, what, arg); if (result == NULL) { PyEval_SetProfile(NULL, NULL); return -1; @@ -382,7 +418,6 @@ static int trace_trampoline(PyObject *self, PyFrameObject *frame, int what, PyObject *arg) { - PyThreadState *tstate = frame->f_tstate; PyObject *callback; PyObject *result; @@ -392,7 +427,7 @@ trace_trampoline(PyObject *self, PyFrameObject *frame, callback = frame->f_trace; if (callback == NULL) return 0; - result = call_trampoline(tstate, callback, frame, what, arg); + result = call_trampoline(callback, frame, what, arg); if (result == NULL) { PyEval_SetTrace(NULL, NULL); Py_XDECREF(frame->f_trace); @@ -617,7 +652,7 @@ PyDoc_STRVAR(hash_info_doc, "hash_info\n\ \n\ A struct sequence providing parameters used for computing\n\ -numeric hashes. The attributes are read only."); +hashes. The attributes are read only."); static PyStructSequence_Field hash_info_fields[] = { {"width", "width of the type used for hashing, in bits"}, @@ -626,6 +661,11 @@ static PyStructSequence_Field hash_info_fields[] = { {"inf", "value to be used for hash of a positive infinity"}, {"nan", "value to be used for hash of a nan"}, {"imag", "multiplier used for the imaginary part of a complex number"}, + {"algorithm", "name of the algorithm for hashing of str, bytes and " + "memoryviews"}, + {"hash_bits", "internal output size of hash algorithm"}, + {"seed_bits", "seed size of hash algorithm"}, + {"cutoff", "small string optimization cutoff"}, {NULL, NULL} }; @@ -633,7 +673,7 @@ static PyStructSequence_Desc hash_info_desc = { "sys.hash_info", hash_info_doc, hash_info_fields, - 5, + 9, }; static PyObject * @@ -641,9 +681,11 @@ get_hash_info(void) { PyObject *hash_info; int field = 0; + PyHash_FuncDef *hashfunc; hash_info = PyStructSequence_New(&Hash_InfoType); if (hash_info == NULL) return NULL; + hashfunc = PyHash_GetFuncDef(); PyStructSequence_SET_ITEM(hash_info, field++, PyLong_FromLong(8*sizeof(Py_hash_t))); PyStructSequence_SET_ITEM(hash_info, field++, @@ -654,6 +696,14 @@ get_hash_info(void) PyLong_FromLong(_PyHASH_NAN)); PyStructSequence_SET_ITEM(hash_info, field++, PyLong_FromLong(_PyHASH_IMAG)); + PyStructSequence_SET_ITEM(hash_info, field++, + PyUnicode_FromString(hashfunc->name)); + PyStructSequence_SET_ITEM(hash_info, field++, + PyLong_FromLong(hashfunc->hash_bits)); + PyStructSequence_SET_ITEM(hash_info, field++, + PyLong_FromLong(hashfunc->seed_bits)); + PyStructSequence_SET_ITEM(hash_info, field++, + PyLong_FromLong(Py_HASH_CUTOFF)); if (PyErr_Occurred()) { Py_CLEAR(hash_info); return NULL; @@ -778,7 +828,7 @@ Set the flags used by the interpreter for dlopen calls, such as when the\n\ interpreter loads extension modules. Among other things, this will enable\n\ a lazy resolving of symbols when importing a module, if called as\n\ sys.setdlopenflags(0). To share symbols across extension modules, call as\n\ -sys.setdlopenflags(ctypes.RTLD_GLOBAL). Symbolic names for the flag modules\n\ +sys.setdlopenflags(os.RTLD_GLOBAL). Symbolic names for the flag modules\n\ can be found in the os module (RTLD_xxx constants, e.g. os.RTLD_LAZY)."); static PyObject * @@ -794,7 +844,7 @@ PyDoc_STRVAR(getdlopenflags_doc, "getdlopenflags() -> int\n\ \n\ Return the current value of the flags that are used for dlopen calls.\n\ -The flag constants are defined in the ctypes and DLFCN modules."); +The flag constants are defined in the os module."); #endif /* HAVE_DLOPEN */ @@ -822,7 +872,6 @@ sys_getsizeof(PyObject *self, PyObject *args, PyObject *kwds) static char *kwlist[] = {"object", "default", 0}; PyObject *o, *dflt = NULL; PyObject *method; - _Py_IDENTIFIER(__sizeof__); if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:getsizeof", kwlist, &o, &dflt)) @@ -898,6 +947,19 @@ one higher than you might expect, because it includes the (temporary)\n\ reference as an argument to getrefcount()." ); +static PyObject * +sys_getallocatedblocks(PyObject *self) +{ + return PyLong_FromSsize_t(_Py_GetAllocatedBlocks()); +} + +PyDoc_STRVAR(getallocatedblocks_doc, +"getallocatedblocks() -> integer\n\ +\n\ +Return the number of memory blocks currently allocated, regardless of their\n\ +size." +); + #ifdef COUNT_ALLOCS static PyObject * sys_getcounts(PyObject *self) @@ -1066,6 +1128,8 @@ static PyMethodDef sys_methods[] = { {"getdlopenflags", (PyCFunction)sys_getdlopenflags, METH_NOARGS, getdlopenflags_doc}, #endif + {"getallocatedblocks", (PyCFunction)sys_getallocatedblocks, METH_NOARGS, + getallocatedblocks_doc}, #ifdef COUNT_ALLOCS {"getcounts", (PyCFunction)sys_getcounts, METH_NOARGS}, #endif @@ -1118,7 +1182,7 @@ static PyMethodDef sys_methods[] = { {"settrace", sys_settrace, METH_O, settrace_doc}, {"gettrace", sys_gettrace, METH_NOARGS, gettrace_doc}, {"call_tracing", sys_call_tracing, METH_VARARGS, call_tracing_doc}, - {"_debugmallocstats", sys_debugmallocstats, METH_VARARGS, + {"_debugmallocstats", sys_debugmallocstats, METH_NOARGS, debugmallocstats_doc}, {NULL, NULL} /* sentinel */ }; @@ -1287,6 +1351,7 @@ exec_prefix -- prefix used to find the machine-specific Python library\n\ executable -- absolute path of the executable binary of the Python interpreter\n\ float_info -- a struct sequence with information about the float implementation.\n\ float_repr_style -- string indicating the style of repr() output for floats\n\ +hash_info -- a struct sequence with information about the hash algorithm.\n\ hexversion -- version information encoded as a single integer\n\ implementation -- Python implementation information.\n\ int_info -- a struct sequence with information about the int implementation.\n\ @@ -1353,14 +1418,12 @@ static PyStructSequence_Field flags_fields[] = { {"no_site", "-S"}, {"ignore_environment", "-E"}, {"verbose", "-v"}, -#ifdef RISCOS - {"riscos_wimp", "???"}, -#endif /* {"unbuffered", "-u"}, */ /* {"skip_first", "-x"}, */ {"bytes_warning", "-b"}, {"quiet", "-q"}, {"hash_randomization", "-R"}, + {"isolated", "-I"}, {0} }; @@ -1368,11 +1431,7 @@ static PyStructSequence_Desc flags_desc = { "sys.flags", /* name */ flags__doc__, /* doc */ flags_fields, /* fields */ -#ifdef RISCOS 13 -#else - 12 -#endif }; static PyObject* @@ -1397,14 +1456,12 @@ make_flags(void) SetFlag(Py_NoSiteFlag); SetFlag(Py_IgnoreEnvironmentFlag); SetFlag(Py_VerboseFlag); -#ifdef RISCOS - SetFlag(Py_RISCOSWimpFlag); -#endif /* SetFlag(saw_unbuffered_flag); */ /* SetFlag(skipfirstline); */ SetFlag(Py_BytesWarningFlag); SetFlag(Py_QuietFlag); SetFlag(Py_HashRandomizationFlag); + SetFlag(Py_IsolatedFlag); #undef SetFlag if (PyErr_Occurred()) { @@ -1565,18 +1622,35 @@ static struct PyModuleDef sysmodule = { PyObject * _PySys_Init(void) { - PyObject *m, *v, *sysdict, *version_info; - char *s; + PyObject *m, *sysdict, *version_info; m = PyModule_Create(&sysmodule); if (m == NULL) return NULL; sysdict = PyModule_GetDict(m); -#define SET_SYS_FROM_STRING(key, value) \ - v = value; \ - if (v != NULL) \ - PyDict_SetItemString(sysdict, key, v); \ - Py_XDECREF(v) +#define SET_SYS_FROM_STRING_BORROW(key, value) \ + do { \ + int res; \ + PyObject *v = (value); \ + if (v == NULL) \ + return NULL; \ + res = PyDict_SetItemString(sysdict, key, v); \ + if (res < 0) { \ + return NULL; \ + } \ + } while (0) +#define SET_SYS_FROM_STRING(key, value) \ + do { \ + int res; \ + PyObject *v = (value); \ + if (v == NULL) \ + return NULL; \ + res = PyDict_SetItemString(sysdict, key, v); \ + Py_DECREF(v); \ + if (res < 0) { \ + return NULL; \ + } \ + } while (0) /* Check that stdin is not a directory Using shell redirection, you can redirect stdin to a directory, @@ -1598,10 +1672,10 @@ _PySys_Init(void) /* stdin/stdout/stderr are now set by pythonrun.c */ - PyDict_SetItemString(sysdict, "__displayhook__", - PyDict_GetItemString(sysdict, "displayhook")); - PyDict_SetItemString(sysdict, "__excepthook__", - PyDict_GetItemString(sysdict, "excepthook")); + SET_SYS_FROM_STRING_BORROW("__displayhook__", + PyDict_GetItemString(sysdict, "displayhook")); + SET_SYS_FROM_STRING_BORROW("__excepthook__", + PyDict_GetItemString(sysdict, "excepthook")); SET_SYS_FROM_STRING("version", PyUnicode_FromString(Py_GetVersion())); SET_SYS_FROM_STRING("hexversion", @@ -1635,28 +1709,24 @@ _PySys_Init(void) SET_SYS_FROM_STRING("int_info", PyLong_GetInfo()); /* initialize hash_info */ - if (Hash_InfoType.tp_name == 0) - PyStructSequence_InitType(&Hash_InfoType, &hash_info_desc); + if (Hash_InfoType.tp_name == NULL) { + if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0) + return NULL; + } SET_SYS_FROM_STRING("hash_info", get_hash_info()); SET_SYS_FROM_STRING("maxunicode", PyLong_FromLong(0x10FFFF)); SET_SYS_FROM_STRING("builtin_module_names", list_builtin_module_names()); - { - /* Assumes that longs are at least 2 bytes long. - Should be safe! */ - unsigned long number = 1; - char *value; - - s = (char *) &number; - if (s[0] == 0) - value = "big"; - else - value = "little"; - SET_SYS_FROM_STRING("byteorder", - PyUnicode_FromString(value)); - } +#if PY_BIG_ENDIAN + SET_SYS_FROM_STRING("byteorder", + PyUnicode_FromString("big")); +#else + SET_SYS_FROM_STRING("byteorder", + PyUnicode_FromString("little")); +#endif + #ifdef MS_COREDLL SET_SYS_FROM_STRING("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); @@ -1669,22 +1739,22 @@ _PySys_Init(void) #endif if (warnoptions == NULL) { warnoptions = PyList_New(0); + if (warnoptions == NULL) + return NULL; } else { Py_INCREF(warnoptions); } - if (warnoptions != NULL) { - PyDict_SetItemString(sysdict, "warnoptions", warnoptions); - } + SET_SYS_FROM_STRING_BORROW("warnoptions", warnoptions); - v = get_xoptions(); - if (v != NULL) { - PyDict_SetItemString(sysdict, "_xoptions", v); - } + SET_SYS_FROM_STRING_BORROW("_xoptions", get_xoptions()); /* version_info */ - if (VersionInfoType.tp_name == 0) - PyStructSequence_InitType(&VersionInfoType, &version_info_desc); + if (VersionInfoType.tp_name == NULL) { + if (PyStructSequence_InitType2(&VersionInfoType, + &version_info_desc) < 0) + return NULL; + } version_info = make_version_info(); SET_SYS_FROM_STRING("version_info", version_info); /* prevent user from creating new instances */ @@ -1695,8 +1765,10 @@ _PySys_Init(void) SET_SYS_FROM_STRING("implementation", make_impl_info(version_info)); /* flags */ - if (FlagsType.tp_name == 0) - PyStructSequence_InitType(&FlagsType, &flags_desc); + if (FlagsType.tp_name == 0) { + if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0) + return NULL; + } SET_SYS_FROM_STRING("flags", make_flags()); /* prevent user from creating new instances */ FlagsType.tp_init = NULL; @@ -1706,7 +1778,9 @@ _PySys_Init(void) #if defined(MS_WINDOWS) /* getwindowsversion */ if (WindowsVersionType.tp_name == 0) - PyStructSequence_InitType(&WindowsVersionType, &windows_version_desc); + if (PyStructSequence_InitType2(&WindowsVersionType, + &windows_version_desc) < 0) + return NULL; /* prevent user from creating new instances */ WindowsVersionType.tp_init = NULL; WindowsVersionType.tp_new = NULL; @@ -1770,7 +1844,7 @@ PySys_SetPath(const wchar_t *path) PyObject *v; if ((v = makepathobject(path, DELIM)) == NULL) Py_FatalError("can't create sys.path"); - if (PySys_SetObject("path", v) != 0) + if (_PySys_SetObjectId(&PyId_path, v) != 0) Py_FatalError("can't assign sys.path"); Py_DECREF(v); } @@ -1789,22 +1863,7 @@ makeargvobject(int argc, wchar_t **argv) if (av != NULL) { int i; for (i = 0; i < argc; i++) { -#ifdef __VMS - PyObject *v; - - /* argv[0] is the script pathname if known */ - if (i == 0) { - char* fn = decc$translate_vms(argv[0]); - if ((fn == (char *)0) || fn == (char *)-1) - v = PyUnicode_FromString(argv[0]); - else - v = PyUnicode_FromString( - decc$translate_vms(argv[0])); - } else - v = PyUnicode_FromString(argv[i]); -#else PyObject *v = PyUnicode_FromWideChar(argv[i], -1); -#endif if (v == NULL) { Py_DECREF(av); av = NULL; @@ -1839,7 +1898,7 @@ sys_update_path(int argc, wchar_t **argv) wchar_t fullpath[MAX_PATH]; #endif - path = PySys_GetObject("path"); + path = _PySys_GetObjectId(&PyId_path); if (path == NULL) return; @@ -1938,7 +1997,7 @@ PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath) void PySys_SetArgv(int argc, wchar_t **argv) { - PySys_SetArgvEx(argc, argv, 1); + PySys_SetArgvEx(argc, argv, Py_IsolatedFlag == 0); } /* Reimplementation of PyFile_WriteString() no calling indirectly @@ -1949,7 +2008,6 @@ sys_pyfile_write_unicode(PyObject *unicode, PyObject *file) { PyObject *writer = NULL, *args = NULL, *result = NULL; int err; - _Py_IDENTIFIER(write); if (file == NULL) return -1; @@ -2026,7 +2084,7 @@ sys_pyfile_write(const char *text, PyObject *file) */ static void -sys_write(char *name, FILE *fp, const char *format, va_list va) +sys_write(_Py_Identifier *key, FILE *fp, const char *format, va_list va) { PyObject *file; PyObject *error_type, *error_value, *error_traceback; @@ -2034,7 +2092,7 @@ sys_write(char *name, FILE *fp, const char *format, va_list va) int written; PyErr_Fetch(&error_type, &error_value, &error_traceback); - file = PySys_GetObject(name); + file = _PySys_GetObjectId(key); written = PyOS_vsnprintf(buffer, sizeof(buffer), format, va); if (sys_pyfile_write(buffer, file) != 0) { PyErr_Clear(); @@ -2054,7 +2112,7 @@ PySys_WriteStdout(const char *format, ...) va_list va; va_start(va, format); - sys_write("stdout", stdout, format, va); + sys_write(&PyId_stdout, stdout, format, va); va_end(va); } @@ -2064,19 +2122,19 @@ PySys_WriteStderr(const char *format, ...) va_list va; va_start(va, format); - sys_write("stderr", stderr, format, va); + sys_write(&PyId_stderr, stderr, format, va); va_end(va); } static void -sys_format(char *name, FILE *fp, const char *format, va_list va) +sys_format(_Py_Identifier *key, FILE *fp, const char *format, va_list va) { PyObject *file, *message; PyObject *error_type, *error_value, *error_traceback; char *utf8; PyErr_Fetch(&error_type, &error_value, &error_traceback); - file = PySys_GetObject(name); + file = _PySys_GetObjectId(key); message = PyUnicode_FromFormatV(format, va); if (message != NULL) { if (sys_pyfile_write_unicode(message, file) != 0) { @@ -2096,7 +2154,7 @@ PySys_FormatStdout(const char *format, ...) va_list va; va_start(va, format); - sys_format("stdout", stdout, format, va); + sys_format(&PyId_stdout, stdout, format, va); va_end(va); } @@ -2106,6 +2164,6 @@ PySys_FormatStderr(const char *format, ...) va_list va; va_start(va, format); - sys_format("stderr", stderr, format, va); + sys_format(&PyId_stderr, stderr, format, va); va_end(va); } diff --git a/Python/thread.c b/Python/thread.c index e55d342..d1cb0e6 100644 --- a/Python/thread.c +++ b/Python/thread.c @@ -91,10 +91,6 @@ static size_t _pythread_stacksize = 0; #include "thread_nt.h" #endif -#ifdef OS2_THREADS -#define PYTHREAD_NAME "os2" -#include "thread_os2.h" -#endif /* #ifdef FOOBAR_THREADS @@ -209,7 +205,7 @@ static int nkeys = 0; /* PyThread_create_key() hands out nkeys+1 next */ * segfaults. Now we lock the whole routine. */ static struct key * -find_key(int key, void *value) +find_key(int set_value, int key, void *value) { struct key *p, *prev_p; long id = PyThread_get_thread_ident(); @@ -219,8 +215,11 @@ find_key(int key, void *value) PyThread_acquire_lock(keymutex, 1); prev_p = NULL; for (p = keyhead; p != NULL; p = p->next) { - if (p->id == id && p->key == key) + if (p->id == id && p->key == key) { + if (set_value) + p->value = value; goto Done; + } /* Sanity check. These states should never happen but if * they do we must abort. Otherwise we'll end up spinning in * in a tight loop with the lock held. A similar check is done @@ -231,11 +230,11 @@ find_key(int key, void *value) if (p->next == keyhead) Py_FatalError("tls find_key: circular list(!)"); } - if (value == NULL) { + if (!set_value && value == NULL) { assert(p == NULL); goto Done; } - p = (struct key *)malloc(sizeof(struct key)); + p = (struct key *)PyMem_RawMalloc(sizeof(struct key)); if (p != NULL) { p->id = id; p->key = key; @@ -274,7 +273,7 @@ PyThread_delete_key(int key) while ((p = *q) != NULL) { if (p->key == key) { *q = p->next; - free((void *)p); + PyMem_RawFree((void *)p); /* NB This does *not* free p->value! */ } else @@ -283,19 +282,12 @@ PyThread_delete_key(int key) PyThread_release_lock(keymutex); } -/* Confusing: If the current thread has an association for key, - * value is ignored, and 0 is returned. Else an attempt is made to create - * an association of key to value for the current thread. 0 is returned - * if that succeeds, but -1 is returned if there's not enough memory - * to create the association. value must not be NULL. - */ int PyThread_set_key_value(int key, void *value) { struct key *p; - assert(value != NULL); - p = find_key(key, value); + p = find_key(1, key, value); if (p == NULL) return -1; else @@ -308,7 +300,7 @@ PyThread_set_key_value(int key, void *value) void * PyThread_get_key_value(int key) { - struct key *p = find_key(key, NULL); + struct key *p = find_key(0, key, NULL); if (p == NULL) return NULL; @@ -328,7 +320,7 @@ PyThread_delete_key_value(int key) while ((p = *q) != NULL) { if (p->key == key && p->id == id) { *q = p->next; - free((void *)p); + PyMem_RawFree((void *)p); /* NB This does *not* free p->value! */ break; } @@ -361,7 +353,7 @@ PyThread_ReInitTLS(void) while ((p = *q) != NULL) { if (p->id != id) { *q = p->next; - free((void *)p); + PyMem_RawFree((void *)p); /* NB This does *not* free p->value! */ } else @@ -403,8 +395,10 @@ PyThread_GetInfo(void) int len; #endif - if (ThreadInfoType.tp_name == 0) - PyStructSequence_InitType(&ThreadInfoType, &threadinfo_desc); + if (ThreadInfoType.tp_name == 0) { + if (PyStructSequence_InitType2(&ThreadInfoType, &threadinfo_desc) < 0) + return NULL; + } threadinfo = PyStructSequence_New(&ThreadInfoType); if (threadinfo == NULL) diff --git a/Python/thread_nt.h b/Python/thread_nt.h index 938bf1e..ee2079f 100644 --- a/Python/thread_nt.h +++ b/Python/thread_nt.h @@ -34,7 +34,7 @@ typedef NRMUTEX *PNRMUTEX; PNRMUTEX AllocNonRecursiveMutex() { - PNRMUTEX m = (PNRMUTEX)malloc(sizeof(NRMUTEX)); + PNRMUTEX m = (PNRMUTEX)PyMem_RawMalloc(sizeof(NRMUTEX)); if (!m) return NULL; if (PyCOND_INIT(&m->cv)) @@ -46,7 +46,7 @@ AllocNonRecursiveMutex() m->locked = 0; return m; fail: - free(m); + PyMem_RawFree(m); return NULL; } @@ -56,7 +56,7 @@ FreeNonRecursiveMutex(PNRMUTEX mutex) if (mutex) { PyCOND_FINI(&mutex->cv); PyMUTEX_FINI(&mutex->cs); - free(mutex); + PyMem_RawFree(mutex); } } @@ -107,7 +107,7 @@ LeaveNonRecursiveMutex(PNRMUTEX mutex) result = PyCOND_SIGNAL(&mutex->cv); result &= PyMUTEX_UNLOCK(&mutex->cs); return result; -} +} #else /* if ! _PY_USE_CV_LOCKS */ @@ -130,7 +130,7 @@ FreeNonRecursiveMutex(PNRMUTEX mutex) DWORD EnterNonRecursiveMutex(PNRMUTEX mutex, DWORD milliseconds) { - return WaitForSingleObject(mutex, milliseconds); + return WaitForSingleObjectEx(mutex, milliseconds, FALSE); } BOOL @@ -389,20 +389,11 @@ PyThread_delete_key(int key) TlsFree(key); } -/* We must be careful to emulate the strange semantics implemented in thread.c, - * where the value is only set if it hasn't been set before. - */ int PyThread_set_key_value(int key, void *value) { BOOL ok; - void *oldvalue; - assert(value != NULL); - oldvalue = TlsGetValue(key); - if (oldvalue != NULL) - /* ignore value if already set */ - return 0; ok = TlsSetValue(key, value); if (!ok) return -1; diff --git a/Python/thread_os2.h b/Python/thread_os2.h deleted file mode 100644 index 1b264b5..0000000 --- a/Python/thread_os2.h +++ /dev/null @@ -1,267 +0,0 @@ -/* This code implemented by cvale@netcom.com */ - -#define INCL_DOSPROCESS -#define INCL_DOSSEMAPHORES -#include "os2.h" -#include "limits.h" - -#include "process.h" - -#if defined(PYCC_GCC) -#include <sys/builtin.h> -#include <sys/fmutex.h> -#else -long PyThread_get_thread_ident(void); -#endif - -/* default thread stack size of 64kB */ -#if !defined(THREAD_STACK_SIZE) -#define THREAD_STACK_SIZE 0x10000 -#endif - -#define OS2_STACKSIZE(x) (x ? x : THREAD_STACK_SIZE) - -/* - * Initialization of the C package, should not be needed. - */ -static void -PyThread__init_thread(void) -{ -} - -/* - * Thread support. - */ -long -PyThread_start_new_thread(void (*func)(void *), void *arg) -{ - int thread_id; - - thread_id = _beginthread(func, - NULL, - OS2_STACKSIZE(_pythread_stacksize), - arg); - - if (thread_id == -1) { - dprintf(("_beginthread failed. return %ld\n", errno)); - } - - return thread_id; -} - -long -PyThread_get_thread_ident(void) -{ -#if !defined(PYCC_GCC) - PPIB pib; - PTIB tib; -#endif - - if (!initialized) - PyThread_init_thread(); - -#if defined(PYCC_GCC) - return _gettid(); -#else - DosGetInfoBlocks(&tib, &pib); - return tib->tib_ptib2->tib2_ultid; -#endif -} - -void -PyThread_exit_thread(void) -{ - dprintf(("%ld: PyThread_exit_thread called\n", - PyThread_get_thread_ident())); - if (!initialized) - exit(0); - _endthread(); -} - -/* - * Lock support. This is implemented with an event semaphore and critical - * sections to make it behave more like a posix mutex than its OS/2 - * counterparts. - */ - -typedef struct os2_lock_t { - int is_set; - HEV changed; -} *type_os2_lock; - -PyThread_type_lock -PyThread_allocate_lock(void) -{ -#if defined(PYCC_GCC) - _fmutex *sem = malloc(sizeof(_fmutex)); - if (!initialized) - PyThread_init_thread(); - dprintf(("%ld: PyThread_allocate_lock() -> %lx\n", - PyThread_get_thread_ident(), - (long)sem)); - if (_fmutex_create(sem, 0)) { - free(sem); - sem = NULL; - } - return (PyThread_type_lock)sem; -#else - APIRET rc; - type_os2_lock lock = (type_os2_lock)malloc(sizeof(struct os2_lock_t)); - - dprintf(("PyThread_allocate_lock called\n")); - if (!initialized) - PyThread_init_thread(); - - lock->is_set = 0; - - DosCreateEventSem(NULL, &lock->changed, 0, 0); - - dprintf(("%ld: PyThread_allocate_lock() -> %p\n", - PyThread_get_thread_ident(), - lock->changed)); - - return (PyThread_type_lock)lock; -#endif -} - -void -PyThread_free_lock(PyThread_type_lock aLock) -{ -#if !defined(PYCC_GCC) - type_os2_lock lock = (type_os2_lock)aLock; -#endif - - dprintf(("%ld: PyThread_free_lock(%p) called\n", - PyThread_get_thread_ident(),aLock)); - -#if defined(PYCC_GCC) - if (aLock) { - _fmutex_close((_fmutex *)aLock); - free((_fmutex *)aLock); - } -#else - DosCloseEventSem(lock->changed); - free(aLock); -#endif -} - -/* - * Return 1 on success if the lock was acquired - * - * and 0 if the lock was not acquired. - */ -int -PyThread_acquire_lock(PyThread_type_lock aLock, int waitflag) -{ -#if !defined(PYCC_GCC) - int done = 0; - ULONG count; - PID pid = 0; - TID tid = 0; - type_os2_lock lock = (type_os2_lock)aLock; -#endif - - dprintf(("%ld: PyThread_acquire_lock(%p, %d) called\n", - PyThread_get_thread_ident(), - aLock, - waitflag)); - -#if defined(PYCC_GCC) - /* always successful if the lock doesn't exist */ - if (aLock && - _fmutex_request((_fmutex *)aLock, waitflag ? 0 : _FMR_NOWAIT)) - return 0; -#else - while (!done) { - /* if the lock is currently set, we have to wait for - * the state to change - */ - if (lock->is_set) { - if (!waitflag) - return 0; - DosWaitEventSem(lock->changed, SEM_INDEFINITE_WAIT); - } - - /* enter a critical section and try to get the semaphore. If - * it is still locked, we will try again. - */ - if (DosEnterCritSec()) - return 0; - - if (!lock->is_set) { - lock->is_set = 1; - DosResetEventSem(lock->changed, &count); - done = 1; - } - - DosExitCritSec(); - } -#endif - - return 1; -} - -void -PyThread_release_lock(PyThread_type_lock aLock) -{ -#if !defined(PYCC_GCC) - type_os2_lock lock = (type_os2_lock)aLock; -#endif - - dprintf(("%ld: PyThread_release_lock(%p) called\n", - PyThread_get_thread_ident(), - aLock)); - -#if defined(PYCC_GCC) - if (aLock) - _fmutex_release((_fmutex *)aLock); -#else - if (!lock->is_set) { - dprintf(("%ld: Could not PyThread_release_lock(%p) error: %l\n", - PyThread_get_thread_ident(), - aLock, - GetLastError())); - return; - } - - if (DosEnterCritSec()) { - dprintf(("%ld: Could not PyThread_release_lock(%p) error: %l\n", - PyThread_get_thread_ident(), - aLock, - GetLastError())); - return; - } - - lock->is_set = 0; - DosPostEventSem(lock->changed); - - DosExitCritSec(); -#endif -} - -/* minimum/maximum thread stack sizes supported */ -#define THREAD_MIN_STACKSIZE 0x8000 /* 32kB */ -#define THREAD_MAX_STACKSIZE 0x2000000 /* 32MB */ - -/* set the thread stack size. - * Return 0 if size is valid, -1 otherwise. - */ -static int -_pythread_os2_set_stacksize(size_t size) -{ - /* set to default */ - if (size == 0) { - _pythread_stacksize = 0; - return 0; - } - - /* valid range? */ - if (size >= THREAD_MIN_STACKSIZE && size < THREAD_MAX_STACKSIZE) { - _pythread_stacksize = size; - return 0; - } - - return -1; -} - -#define THREAD_SET_STACKSIZE(x) _pythread_os2_set_stacksize(x) diff --git a/Python/thread_pth.h b/Python/thread_pth.h deleted file mode 100644 index 5704266..0000000 --- a/Python/thread_pth.h +++ /dev/null @@ -1,177 +0,0 @@ - -/* GNU pth threads interface - http://www.gnu.org/software/pth - 2000-05-03 Andy Dustman <andy@dustman.net> - - Adapted from Posix threads interface - 12 May 1997 -- david arnold <davida@pobox.com> - */ - -#include <stdlib.h> -#include <string.h> -#include <pth.h> - -/* A pth mutex isn't sufficient to model the Python lock type - * because pth mutexes can be acquired multiple times by the - * same thread. - * - * The pth_lock struct implements a Python lock as a "locked?" bit - * and a <condition, mutex> pair. In general, if the bit can be acquired - * instantly, it is, else the pair is used to block the thread until the - * bit is cleared. - */ - -typedef struct { - char locked; /* 0=unlocked, 1=locked */ - /* a <cond, mutex> pair to handle an acquire of a locked lock */ - pth_cond_t lock_released; - pth_mutex_t mut; -} pth_lock; - -#define CHECK_STATUS(name) if (status == -1) { printf("%d ", status); perror(name); error = 1; } - -pth_attr_t PyThread_attr; - -/* - * Initialization. - */ - -static void PyThread__init_thread(void) -{ - pth_init(); - PyThread_attr = pth_attr_new(); - pth_attr_set(PyThread_attr, PTH_ATTR_STACK_SIZE, 1<<18); - pth_attr_set(PyThread_attr, PTH_ATTR_JOINABLE, FALSE); -} - -/* - * Thread support. - */ - - -long PyThread_start_new_thread(void (*func)(void *), void *arg) -{ - pth_t th; - dprintf(("PyThread_start_new_thread called\n")); - if (!initialized) - PyThread_init_thread(); - - th = pth_spawn(PyThread_attr, - (void* (*)(void *))func, - (void *)arg - ); - - return th; -} - -long PyThread_get_thread_ident(void) -{ - volatile pth_t threadid; - if (!initialized) - PyThread_init_thread(); - threadid = pth_self(); - return (long) threadid; -} - -void PyThread_exit_thread(void) -{ - dprintf(("PyThread_exit_thread called\n")); - if (!initialized) { - exit(0); - } -} - -/* - * Lock support. - */ -PyThread_type_lock PyThread_allocate_lock(void) -{ - pth_lock *lock; - int status, error = 0; - - dprintf(("PyThread_allocate_lock called\n")); - if (!initialized) - PyThread_init_thread(); - - lock = (pth_lock *) malloc(sizeof(pth_lock)); - memset((void *)lock, '\0', sizeof(pth_lock)); - if (lock) { - lock->locked = 0; - status = pth_mutex_init(&lock->mut); - CHECK_STATUS("pth_mutex_init"); - status = pth_cond_init(&lock->lock_released); - CHECK_STATUS("pth_cond_init"); - if (error) { - free((void *)lock); - lock = NULL; - } - } - dprintf(("PyThread_allocate_lock() -> %p\n", lock)); - return (PyThread_type_lock) lock; -} - -void PyThread_free_lock(PyThread_type_lock lock) -{ - pth_lock *thelock = (pth_lock *)lock; - - dprintf(("PyThread_free_lock(%p) called\n", lock)); - - free((void *)thelock); -} - -int PyThread_acquire_lock(PyThread_type_lock lock, int waitflag) -{ - int success; - pth_lock *thelock = (pth_lock *)lock; - int status, error = 0; - - dprintf(("PyThread_acquire_lock(%p, %d) called\n", lock, waitflag)); - - status = pth_mutex_acquire(&thelock->mut, !waitflag, NULL); - CHECK_STATUS("pth_mutex_acquire[1]"); - success = thelock->locked == 0; - if (success) thelock->locked = 1; - status = pth_mutex_release( &thelock->mut ); - CHECK_STATUS("pth_mutex_release[1]"); - - if ( !success && waitflag ) { - /* continue trying until we get the lock */ - - /* mut must be locked by me -- part of the condition - * protocol */ - status = pth_mutex_acquire( &thelock->mut, !waitflag, NULL ); - CHECK_STATUS("pth_mutex_acquire[2]"); - while ( thelock->locked ) { - status = pth_cond_await(&thelock->lock_released, - &thelock->mut, NULL); - CHECK_STATUS("pth_cond_await"); - } - thelock->locked = 1; - status = pth_mutex_release( &thelock->mut ); - CHECK_STATUS("pth_mutex_release[2]"); - success = 1; - } - if (error) success = 0; - dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success)); - return success; -} - -void PyThread_release_lock(PyThread_type_lock lock) -{ - pth_lock *thelock = (pth_lock *)lock; - int status, error = 0; - - dprintf(("PyThread_release_lock(%p) called\n", lock)); - - status = pth_mutex_acquire( &thelock->mut, 0, NULL ); - CHECK_STATUS("pth_mutex_acquire[3]"); - - thelock->locked = 0; - - status = pth_mutex_release( &thelock->mut ); - CHECK_STATUS("pth_mutex_release[3]"); - - /* wake up someone (anyone, if any) waiting on the lock */ - status = pth_cond_notify( &thelock->lock_released, 0 ); - CHECK_STATUS("pth_cond_notify"); -} diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index e90ae7e..d9f7c76 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -282,14 +282,14 @@ PyThread_allocate_lock(void) if (!initialized) PyThread_init_thread(); - lock = (sem_t *)malloc(sizeof(sem_t)); + lock = (sem_t *)PyMem_RawMalloc(sizeof(sem_t)); if (lock) { status = sem_init(lock,0,1); CHECK_STATUS("sem_init"); if (error) { - free((void *)lock); + PyMem_RawFree((void *)lock); lock = NULL; } } @@ -313,7 +313,7 @@ PyThread_free_lock(PyThread_type_lock lock) status = sem_destroy(thelock); CHECK_STATUS("sem_destroy"); - free((void *)thelock); + PyMem_RawFree((void *)thelock); } /* @@ -410,7 +410,7 @@ PyThread_allocate_lock(void) if (!initialized) PyThread_init_thread(); - lock = (pthread_lock *) malloc(sizeof(pthread_lock)); + lock = (pthread_lock *) PyMem_RawMalloc(sizeof(pthread_lock)); if (lock) { memset((void *)lock, '\0', sizeof(pthread_lock)); lock->locked = 0; @@ -430,7 +430,7 @@ PyThread_allocate_lock(void) CHECK_STATUS("pthread_cond_init"); if (error) { - free((void *)lock); + PyMem_RawFree((void *)lock); lock = 0; } } @@ -457,7 +457,7 @@ PyThread_free_lock(PyThread_type_lock lock) status = pthread_mutex_destroy( &thelock->mut ); CHECK_STATUS("pthread_mutex_destroy"); - free((void *)thelock); + PyMem_RawFree((void *)thelock); } PyLockStatus @@ -627,9 +627,6 @@ int PyThread_set_key_value(int key, void *value) { int fail; - void *oldValue = pthread_getspecific(key); - if (oldValue != NULL) - return 0; fail = pthread_setspecific(key, value); return fail ? -1 : 0; } diff --git a/Python/traceback.c b/Python/traceback.c index 74075c9..2ece192 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -13,7 +13,7 @@ #define OFF(x) offsetof(PyTracebackObject, x) -#define PUTS(fd, str) write(fd, str, strlen(str)) +#define PUTS(fd, str) write(fd, str, (int)strlen(str)) #define MAX_STRING_LENGTH 500 #define MAX_FRAME_DEPTH 100 #define MAX_NTHREADS 100 @@ -21,6 +21,11 @@ /* Function from Parser/tokenizer.c */ extern char * PyTokenizer_FindEncodingFilename(int, PyObject *); +_Py_IDENTIFIER(TextIOWrapper); +_Py_IDENTIFIER(close); +_Py_IDENTIFIER(open); +_Py_IDENTIFIER(path); + static PyObject * tb_dir(PyTracebackObject *self) { @@ -152,7 +157,6 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject * const char* filepath; Py_ssize_t len; PyObject* result; - _Py_IDENTIFIER(open); filebytes = PyUnicode_EncodeFSDefault(filename); if (filebytes == NULL) { @@ -169,7 +173,7 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject * tail++; taillen = strlen(tail); - syspath = PySys_GetObject("path"); + syspath = _PySys_GetObjectId(&PyId_path); if (syspath == NULL || !PyList_Check(syspath)) goto error; npath = PyList_Size(syspath); @@ -232,9 +236,6 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) char buf[MAXPATHLEN+1]; int kind; void *data; - _Py_IDENTIFIER(close); - _Py_IDENTIFIER(open); - _Py_IDENTIFIER(TextIOWrapper); /* open the file */ if (filename == NULL) @@ -246,10 +247,12 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) binary = _PyObject_CallMethodId(io, &PyId_open, "Os", filename, "rb"); if (binary == NULL) { + PyErr_Clear(); + binary = _Py_FindSourceFile(filename, buf, sizeof(buf), io); if (binary == NULL) { Py_DECREF(io); - return 0; + return -1; } } @@ -261,6 +264,8 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) return 0; } found_encoding = PyTokenizer_FindEncodingFilename(fd, filename); + if (found_encoding == NULL) + PyErr_Clear(); encoding = (found_encoding != NULL) ? found_encoding : "utf-8"; /* Reset position */ if (lseek(fd, 0, SEEK_SET) == (off_t)-1) { @@ -469,13 +474,13 @@ dump_decimal(int fd, int value) write(fd, buffer, len); } -/* Format an integer in range [0; 0xffffffff] to hexdecimal of 'width' digits, +/* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits, and write it into the file fd. This function is signal safe. */ static void -dump_hexadecimal(int width, unsigned long value, int fd) +dump_hexadecimal(int fd, unsigned long value, int width) { int len; char buffer[sizeof(unsigned long) * 2 + 1]; @@ -542,15 +547,15 @@ dump_ascii(int fd, PyObject *text) } else if (ch < 0xff) { PUTS(fd, "\\x"); - dump_hexadecimal(2, ch, fd); + dump_hexadecimal(fd, ch, 2); } else if (ch < 0xffff) { PUTS(fd, "\\u"); - dump_hexadecimal(4, ch, fd); + dump_hexadecimal(fd, ch, 4); } else { PUTS(fd, "\\U"); - dump_hexadecimal(8, ch, fd); + dump_hexadecimal(fd, ch, 8); } } if (truncated) @@ -601,7 +606,7 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header) unsigned int depth; if (write_header) - PUTS(fd, "Traceback (most recent call first):\n"); + PUTS(fd, "Stack (most recent call first):\n"); frame = _PyThreadState_GetFrame(tstate); if (frame == NULL) @@ -639,8 +644,8 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current) PUTS(fd, "Current thread 0x"); else PUTS(fd, "Thread 0x"); - dump_hexadecimal(sizeof(long)*2, (unsigned long)tstate->thread_id, fd); - PUTS(fd, ":\n"); + dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(long)*2); + PUTS(fd, " (most recent call first):\n"); } const char* |