diff options
Diffstat (limited to 'Python')
37 files changed, 7679 insertions, 6003 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c index edfcbad..1193c7c 100644 --- a/Python/Python-ast.c +++ b/Python/Python-ast.c @@ -285,6 +285,18 @@ _Py_IDENTIFIER(s); static char *Str_fields[]={ "s", }; +static PyTypeObject *FormattedValue_type; +_Py_IDENTIFIER(conversion); +_Py_IDENTIFIER(format_spec); +static char *FormattedValue_fields[]={ + "value", + "conversion", + "format_spec", +}; +static PyTypeObject *JoinedStr_type; +static char *JoinedStr_fields[]={ + "values", +}; static PyTypeObject *Bytes_type; static char *Bytes_fields[]={ "s", @@ -294,6 +306,10 @@ static char *NameConstant_fields[]={ "value", }; static PyTypeObject *Ellipsis_type; +static PyTypeObject *Constant_type; +static char *Constant_fields[]={ + "value", +}; static PyTypeObject *Attribute_type; _Py_IDENTIFIER(attr); _Py_IDENTIFIER(ctx); @@ -697,6 +713,7 @@ static PyObject* ast2obj_object(void *o) return (PyObject*)o; } #define ast2obj_singleton ast2obj_object +#define ast2obj_constant ast2obj_object #define ast2obj_identifier ast2obj_object #define ast2obj_string ast2obj_object #define ast2obj_bytes ast2obj_object @@ -734,6 +751,19 @@ static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena) return 0; } +static int obj2ast_constant(PyObject* obj, PyObject** out, PyArena* arena) +{ + if (obj) { + if (PyArena_AddPyObject(arena, obj) < 0) { + *out = NULL; + return -1; + } + Py_INCREF(obj); + } + *out = obj; + return 0; +} + static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena) { if (!PyUnicode_CheckExact(obj) && obj != Py_None) { @@ -769,7 +799,7 @@ static int obj2ast_int(PyObject* obj, int* out, PyArena* arena) return 1; } - i = (int)PyLong_AsLong(obj); + i = _PyLong_AsInt(obj); if (i == -1 && PyErr_Occurred()) return 1; *out = i; @@ -917,6 +947,11 @@ static int init_types(void) if (!Num_type) return 0; Str_type = make_type("Str", expr_type, Str_fields, 1); if (!Str_type) return 0; + FormattedValue_type = make_type("FormattedValue", expr_type, + FormattedValue_fields, 3); + if (!FormattedValue_type) return 0; + JoinedStr_type = make_type("JoinedStr", expr_type, JoinedStr_fields, 1); + if (!JoinedStr_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, @@ -924,6 +959,8 @@ static int init_types(void) if (!NameConstant_type) return 0; Ellipsis_type = make_type("Ellipsis", expr_type, NULL, 0); if (!Ellipsis_type) return 0; + Constant_type = make_type("Constant", expr_type, Constant_fields, 1); + if (!Constant_type) return 0; Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3); if (!Attribute_type) return 0; Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3); @@ -2063,6 +2100,42 @@ Str(string s, int lineno, int col_offset, PyArena *arena) } expr_ty +FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno, + int col_offset, PyArena *arena) +{ + expr_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field value is required for FormattedValue"); + return NULL; + } + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = FormattedValue_kind; + p->v.FormattedValue.value = value; + p->v.FormattedValue.conversion = conversion; + p->v.FormattedValue.format_spec = format_spec; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty +JoinedStr(asdl_seq * values, int lineno, int col_offset, PyArena *arena) +{ + expr_ty p; + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = JoinedStr_kind; + p->v.JoinedStr.values = values; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty Bytes(bytes s, int lineno, int col_offset, PyArena *arena) { expr_ty p; @@ -2114,6 +2187,25 @@ Ellipsis(int lineno, int col_offset, PyArena *arena) } expr_ty +Constant(constant value, int lineno, int col_offset, PyArena *arena) +{ + expr_ty p; + if (!value) { + PyErr_SetString(PyExc_ValueError, + "field value is required for Constant"); + return NULL; + } + p = (expr_ty)PyArena_Malloc(arena, sizeof(*p)); + if (!p) + return NULL; + p->kind = Constant_kind; + p->v.Constant.value = value; + p->lineno = lineno; + p->col_offset = col_offset; + return p; +} + +expr_ty Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int col_offset, PyArena *arena) { @@ -3164,6 +3256,34 @@ ast2obj_expr(void* _o) goto failed; Py_DECREF(value); break; + case FormattedValue_kind: + result = PyType_GenericNew(FormattedValue_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_expr(o->v.FormattedValue.value); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_value, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_int(o->v.FormattedValue.conversion); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_conversion, value) == -1) + goto failed; + Py_DECREF(value); + value = ast2obj_expr(o->v.FormattedValue.format_spec); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_format_spec, value) == -1) + goto failed; + Py_DECREF(value); + break; + case JoinedStr_kind: + result = PyType_GenericNew(JoinedStr_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_list(o->v.JoinedStr.values, ast2obj_expr); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_values, value) == -1) + goto failed; + Py_DECREF(value); + break; case Bytes_kind: result = PyType_GenericNew(Bytes_type, NULL, NULL); if (!result) goto failed; @@ -3186,6 +3306,15 @@ ast2obj_expr(void* _o) result = PyType_GenericNew(Ellipsis_type, NULL, NULL); if (!result) goto failed; break; + case Constant_kind: + result = PyType_GenericNew(Constant_type, NULL, NULL); + if (!result) goto failed; + value = ast2obj_constant(o->v.Constant.value); + if (!value) goto failed; + if (_PyObject_SetAttrId(result, &PyId_value, value) == -1) + goto failed; + Py_DECREF(value); + break; case Attribute_kind: result = PyType_GenericNew(Attribute_type, NULL, NULL); if (!result) goto failed; @@ -6025,6 +6154,86 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (*out == NULL) goto failed; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject*)FormattedValue_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + expr_ty value; + int conversion; + expr_ty format_spec; + + if (_PyObject_HasAttrId(obj, &PyId_value)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_value); + if (tmp == NULL) goto failed; + res = obj2ast_expr(tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue"); + return 1; + } + if (exists_not_none(obj, &PyId_conversion)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_conversion); + if (tmp == NULL) goto failed; + res = obj2ast_int(tmp, &conversion, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + conversion = 0; + } + if (exists_not_none(obj, &PyId_format_spec)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_format_spec); + if (tmp == NULL) goto failed; + res = obj2ast_expr(tmp, &format_spec, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + format_spec = NULL; + } + *out = FormattedValue(value, conversion, format_spec, lineno, + col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } + isinstance = PyObject_IsInstance(obj, (PyObject*)JoinedStr_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + asdl_seq* values; + + if (_PyObject_HasAttrId(obj, &PyId_values)) { + int res; + Py_ssize_t len; + Py_ssize_t i; + tmp = _PyObject_GetAttrId(obj, &PyId_values); + if (tmp == NULL) goto failed; + if (!PyList_Check(tmp)) { + PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name); + goto failed; + } + len = PyList_GET_SIZE(tmp); + values = _Py_asdl_seq_new(len, arena); + if (values == 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(values, i, value); + } + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr"); + return 1; + } + *out = JoinedStr(values, lineno, col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject*)Bytes_type); if (isinstance == -1) { return 1; @@ -6079,6 +6288,28 @@ obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena) if (*out == NULL) goto failed; return 0; } + isinstance = PyObject_IsInstance(obj, (PyObject*)Constant_type); + if (isinstance == -1) { + return 1; + } + if (isinstance) { + constant value; + + if (_PyObject_HasAttrId(obj, &PyId_value)) { + int res; + tmp = _PyObject_GetAttrId(obj, &PyId_value); + if (tmp == NULL) goto failed; + res = obj2ast_constant(tmp, &value, arena); + if (res != 0) goto failed; + Py_CLEAR(tmp); + } else { + PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant"); + return 1; + } + *out = Constant(value, lineno, col_offset, arena); + if (*out == NULL) goto failed; + return 0; + } isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type); if (isinstance == -1) { return 1; @@ -7346,12 +7577,18 @@ PyInit__ast(void) if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return NULL; if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return NULL; if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return NULL; + if (PyDict_SetItemString(d, "FormattedValue", + (PyObject*)FormattedValue_type) < 0) return NULL; + if (PyDict_SetItemString(d, "JoinedStr", (PyObject*)JoinedStr_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, "Constant", (PyObject*)Constant_type) < 0) + return NULL; if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) < 0) return NULL; if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) < 0) diff --git a/Python/_warnings.c b/Python/_warnings.c index 978bad1..40f5c8e 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -40,12 +40,11 @@ check_matched(PyObject *obj, PyObject *arg) A NULL return value can mean false or an error. */ static PyObject * -get_warnings_attr(const char *attr) +get_warnings_attr(const char *attr, int try_import) { static PyObject *warnings_str = NULL; PyObject *all_modules; - PyObject *warnings_module; - int result; + PyObject *warnings_module, *obj; if (warnings_str == NULL) { warnings_str = PyUnicode_InternFromString("warnings"); @@ -53,15 +52,34 @@ get_warnings_attr(const char *attr) return NULL; } - all_modules = PyImport_GetModuleDict(); - result = PyDict_Contains(all_modules, warnings_str); - if (result == -1 || result == 0) - return NULL; + /* don't try to import after the start of the Python finallization */ + if (try_import && _Py_Finalizing == NULL) { + warnings_module = PyImport_Import(warnings_str); + if (warnings_module == NULL) { + /* Fallback to the C implementation if we cannot get + the Python implementation */ + PyErr_Clear(); + return NULL; + } + } + else { + all_modules = PyImport_GetModuleDict(); - warnings_module = PyDict_GetItem(all_modules, warnings_str); - if (!PyObject_HasAttrString(warnings_module, attr)) + warnings_module = PyDict_GetItem(all_modules, warnings_str); + if (warnings_module == NULL) return NULL; - return PyObject_GetAttrString(warnings_module, attr); + + Py_INCREF(warnings_module); + } + + if (!PyObject_HasAttrString(warnings_module, attr)) { + Py_DECREF(warnings_module); + return NULL; + } + + obj = PyObject_GetAttrString(warnings_module, attr); + Py_DECREF(warnings_module); + return obj; } @@ -70,7 +88,7 @@ get_once_registry(void) { PyObject *registry; - registry = get_warnings_attr("onceregistry"); + registry = get_warnings_attr("onceregistry", 0); if (registry == NULL) { if (PyErr_Occurred()) return NULL; @@ -87,7 +105,7 @@ get_default_action(void) { PyObject *default_action; - default_action = get_warnings_attr("defaultaction"); + default_action = get_warnings_attr("defaultaction", 0); if (default_action == NULL) { if (PyErr_Occurred()) { return NULL; @@ -110,7 +128,7 @@ get_filter(PyObject *category, PyObject *text, Py_ssize_t lineno, Py_ssize_t i; PyObject *warnings_filters; - warnings_filters = get_warnings_attr("filters"); + warnings_filters = get_warnings_attr("filters", 0); if (warnings_filters == NULL) { if (PyErr_Occurred()) return NULL; @@ -287,8 +305,8 @@ update_registry(PyObject *registry, PyObject *text, PyObject *category, } static void -show_warning(PyObject *filename, int lineno, PyObject *text, PyObject - *category, PyObject *sourceline) +show_warning(PyObject *filename, int lineno, PyObject *text, + PyObject *category, PyObject *sourceline) { PyObject *f_stderr; PyObject *name; @@ -359,10 +377,64 @@ error: PyErr_Clear(); } +static int +call_show_warning(PyObject *category, PyObject *text, PyObject *message, + PyObject *filename, int lineno, PyObject *lineno_obj, + PyObject *sourceline, PyObject *source) +{ + PyObject *show_fn, *msg, *res, *warnmsg_cls = NULL; + + /* If the source parameter is set, try to get the Python implementation. + The Python implementation is able to log the traceback where the source + was allocated, whereas the C implementation doesnt. */ + show_fn = get_warnings_attr("_showwarnmsg", source != NULL); + if (show_fn == NULL) { + if (PyErr_Occurred()) + return -1; + show_warning(filename, lineno, text, category, sourceline); + return 0; + } + + if (!PyCallable_Check(show_fn)) { + PyErr_SetString(PyExc_TypeError, + "warnings._showwarnmsg() must be set to a callable"); + goto error; + } + + warnmsg_cls = get_warnings_attr("WarningMessage", 0); + if (warnmsg_cls == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "unable to get warnings.WarningMessage"); + goto error; + } + + msg = PyObject_CallFunctionObjArgs(warnmsg_cls, message, category, + filename, lineno_obj, Py_None, Py_None, source, + NULL); + Py_DECREF(warnmsg_cls); + if (msg == NULL) + goto error; + + res = PyObject_CallFunctionObjArgs(show_fn, msg, NULL); + Py_DECREF(show_fn); + Py_DECREF(msg); + + if (res == NULL) + return -1; + + Py_DECREF(res); + return 0; + +error: + Py_XDECREF(show_fn); + return -1; +} + static PyObject * warn_explicit(PyObject *category, PyObject *message, PyObject *filename, int lineno, - PyObject *module, PyObject *registry, PyObject *sourceline) + PyObject *module, PyObject *registry, PyObject *sourceline, + PyObject *source) { PyObject *key = NULL, *text = NULL, *result = NULL, *lineno_obj = NULL; PyObject *item = NULL; @@ -470,31 +542,9 @@ warn_explicit(PyObject *category, PyObject *message, if (rc == 1) /* Already warned for this module. */ goto return_none; if (rc == 0) { - PyObject *show_fxn = get_warnings_attr("showwarning"); - if (show_fxn == NULL) { - if (PyErr_Occurred()) - goto cleanup; - show_warning(filename, lineno, text, category, sourceline); - } - else { - PyObject *res; - - if (!PyCallable_Check(show_fxn)) { - PyErr_SetString(PyExc_TypeError, - "warnings.showwarning() must be set to a " - "callable"); - Py_DECREF(show_fxn); - goto cleanup; - } - - res = PyObject_CallFunctionObjArgs(show_fxn, message, category, - filename, lineno_obj, - NULL); - Py_DECREF(show_fxn); - Py_XDECREF(res); - if (res == NULL) - goto cleanup; - } + if (call_show_warning(category, text, message, filename, lineno, + lineno_obj, sourceline, source) < 0) + goto cleanup; } else /* if (rc == -1) */ goto cleanup; @@ -738,7 +788,8 @@ get_category(PyObject *message, PyObject *category) } static PyObject * -do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level) +do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level, + PyObject *source) { PyObject *filename, *module, *registry, *res; int lineno; @@ -747,7 +798,7 @@ do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level) return NULL; res = warn_explicit(category, message, filename, lineno, module, registry, - NULL); + NULL, source); Py_DECREF(filename); Py_DECREF(registry); Py_DECREF(module); @@ -757,25 +808,27 @@ do_warn(PyObject *message, PyObject *category, Py_ssize_t stack_level) static PyObject * warnings_warn(PyObject *self, PyObject *args, PyObject *kwds) { - static char *kw_list[] = { "message", "category", "stacklevel", 0 }; - PyObject *message, *category = NULL; + static char *kw_list[] = {"message", "category", "stacklevel", + "source", NULL}; + PyObject *message, *category = NULL, *source = NULL; Py_ssize_t stack_level = 1; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|On:warn", kw_list, - &message, &category, &stack_level)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OnO:warn", kw_list, + &message, &category, &stack_level, &source)) return NULL; category = get_category(message, category); if (category == NULL) return NULL; - return do_warn(message, category, stack_level); + return do_warn(message, category, stack_level, source); } static PyObject * warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) { static char *kwd_list[] = {"message", "category", "filename", "lineno", - "module", "registry", "module_globals", 0}; + "module", "registry", "module_globals", + "source", 0}; PyObject *message; PyObject *category; PyObject *filename; @@ -783,10 +836,11 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds) PyObject *module = NULL; PyObject *registry = NULL; PyObject *module_globals = NULL; + PyObject *sourceobj = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOO:warn_explicit", + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOOO:warn_explicit", kwd_list, &message, &category, &filename, &lineno, &module, - ®istry, &module_globals)) + ®istry, &module_globals, &sourceobj)) return NULL; if (module_globals) { @@ -842,14 +896,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, sourceobj); Py_DECREF(source_list); return returned; } standard_call: return warn_explicit(category, message, filename, lineno, module, - registry, NULL); + registry, NULL, sourceobj); } static PyObject * @@ -864,14 +918,14 @@ warnings_filters_mutated(PyObject *self, PyObject *args) static int warn_unicode(PyObject *category, PyObject *message, - Py_ssize_t stack_level) + Py_ssize_t stack_level, PyObject *source) { PyObject *res; if (category == NULL) category = PyExc_RuntimeWarning; - res = do_warn(message, category, stack_level); + res = do_warn(message, category, stack_level, source); if (res == NULL) return -1; Py_DECREF(res); @@ -879,12 +933,28 @@ warn_unicode(PyObject *category, PyObject *message, return 0; } +static int +_PyErr_WarnFormatV(PyObject *source, + PyObject *category, Py_ssize_t stack_level, + const char *format, va_list vargs) +{ + PyObject *message; + int res; + + message = PyUnicode_FromFormatV(format, vargs); + if (message == NULL) + return -1; + + res = warn_unicode(category, message, stack_level, source); + Py_DECREF(message); + return res; +} + int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...) { - int ret; - PyObject *message; + int res; va_list vargs; #ifdef HAVE_STDARG_PROTOTYPES @@ -892,25 +962,38 @@ PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, #else va_start(vargs); #endif - message = PyUnicode_FromFormatV(format, vargs); - if (message != NULL) { - ret = warn_unicode(category, message, stack_level); - Py_DECREF(message); - } - else - ret = -1; + res = _PyErr_WarnFormatV(NULL, category, stack_level, format, vargs); va_end(vargs); - return ret; + return res; } int +PyErr_ResourceWarning(PyObject *source, Py_ssize_t stack_level, + const char *format, ...) +{ + int res; + va_list vargs; + +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, format); +#else + va_start(vargs); +#endif + res = _PyErr_WarnFormatV(source, PyExc_ResourceWarning, + stack_level, format, vargs); + va_end(vargs); + return res; +} + + +int PyErr_WarnEx(PyObject *category, const char *text, Py_ssize_t stack_level) { int ret; PyObject *message = PyUnicode_FromString(text); if (message == NULL) return -1; - ret = warn_unicode(category, message, stack_level); + ret = warn_unicode(category, message, stack_level, NULL); Py_DECREF(message); return ret; } @@ -921,7 +1004,7 @@ PyErr_WarnEx(PyObject *category, const char *text, Py_ssize_t stack_level) #undef PyErr_Warn PyAPI_FUNC(int) -PyErr_Warn(PyObject *category, char *text) +PyErr_Warn(PyObject *category, const char *text) { return PyErr_WarnEx(category, text, 1); } @@ -936,7 +1019,7 @@ PyErr_WarnExplicitObject(PyObject *category, PyObject *message, if (category == NULL) category = PyExc_RuntimeWarning; res = warn_explicit(category, message, filename, lineno, - module, registry, NULL); + module, registry, NULL, NULL); if (res == NULL) return -1; Py_DECREF(res); @@ -1000,7 +1083,7 @@ PyErr_WarnExplicitFormat(PyObject *category, if (message != NULL) { PyObject *res; res = warn_explicit(category, message, filename, lineno, - module, registry, NULL); + module, registry, NULL, NULL); Py_DECREF(message); if (res != NULL) { Py_DECREF(res); diff --git a/Python/ast.c b/Python/ast.c index 7743c31..1efd0b7 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -132,6 +132,52 @@ validate_arguments(arguments_ty args) } static int +validate_constant(PyObject *value) +{ + if (value == Py_None || value == Py_Ellipsis) + return 1; + + if (PyLong_CheckExact(value) + || PyFloat_CheckExact(value) + || PyComplex_CheckExact(value) + || PyBool_Check(value) + || PyUnicode_CheckExact(value) + || PyBytes_CheckExact(value)) + return 1; + + if (PyTuple_CheckExact(value) || PyFrozenSet_CheckExact(value)) { + PyObject *it; + + it = PyObject_GetIter(value); + if (it == NULL) + return 0; + + while (1) { + PyObject *item = PyIter_Next(it); + if (item == NULL) { + if (PyErr_Occurred()) { + Py_DECREF(it); + return 0; + } + break; + } + + if (!validate_constant(item)) { + Py_DECREF(it); + Py_DECREF(item); + return 0; + } + Py_DECREF(item); + } + + Py_DECREF(it); + return 1; + } + + return 0; +} + +static int validate_expr(expr_ty exp, expr_context_ty ctx) { int check_ctx = 1; @@ -240,6 +286,14 @@ validate_expr(expr_ty exp, expr_context_ty ctx) return validate_expr(exp->v.Call.func, Load) && validate_exprs(exp->v.Call.args, Load, 0) && validate_keywords(exp->v.Call.keywords); + case Constant_kind: + if (!validate_constant(exp->v.Constant.value)) { + PyErr_Format(PyExc_TypeError, + "got an invalid type in Constant: %s", + Py_TYPE(exp->v.Constant.value)->tp_name); + return 0; + } + return 1; case Num_kind: { PyObject *n = exp->v.Num.n; if (!PyLong_CheckExact(n) && !PyFloat_CheckExact(n) && @@ -257,6 +311,14 @@ validate_expr(expr_ty exp, expr_context_ty ctx) } return 1; } + case JoinedStr_kind: + return validate_exprs(exp->v.JoinedStr.values, Load, 0); + case FormattedValue_kind: + if (validate_expr(exp->v.FormattedValue.value, Load) == 0) + return 0; + if (exp->v.FormattedValue.format_spec) + return validate_expr(exp->v.FormattedValue.format_spec, Load); + return 1; case Bytes_kind: { PyObject *b = exp->v.Bytes.s; if (!PyBytes_CheckExact(b)) { @@ -512,8 +574,7 @@ PyAST_Validate(mod_ty mod) /* Data structure used internally */ struct compiling { - char *c_encoding; /* source encoding */ - PyArena *c_arena; /* arena for allocating memeory */ + PyArena *c_arena; /* Arena for allocating memory. */ PyObject *c_filename; /* filename */ PyObject *c_normalize; /* Normalization function from unicodedata. */ PyObject *c_normalize_args; /* Normalization argument tuple. */ @@ -535,9 +596,7 @@ static stmt_ty ast_for_for_stmt(struct compiling *, const node *, int); static expr_ty ast_for_call(struct compiling *, const node *, expr_ty); static PyObject *parsenumber(struct compiling *, const char *); -static PyObject *parsestr(struct compiling *, const node *n, int *bytesmode); -static PyObject *parsestrplus(struct compiling *, const node *n, - int *bytesmode); +static expr_ty parsestrplus(struct compiling *, const node *n); #define COMP_GENEXP 0 #define COMP_LISTCOMP 1 @@ -701,23 +760,11 @@ PyAST_FromNodeObject(const node *n, PyCompilerFlags *flags, 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) { - c.c_encoding = "utf-8"; - if (TYPE(n) == encoding_decl) { -#if 0 - ast_error(c, n, "encoding declaration in Unicode string"); - goto out; -#endif - n = CHILD(n, 0); - } - } else if (TYPE(n) == encoding_decl) { - c.c_encoding = STR(n); + c.c_normalize = NULL; + c.c_normalize_args = NULL; + + if (TYPE(n) == encoding_decl) n = CHILD(n, 0); - } else { - /* PEP 3120 */ - c.c_encoding = "utf-8"; - } k = 0; switch (TYPE(n)) { @@ -864,7 +911,7 @@ get_operator(const node *n) } } -static const char* FORBIDDEN[] = { +static const char * const FORBIDDEN[] = { "None", "True", "False", @@ -881,7 +928,7 @@ forbidden_name(struct compiling *c, identifier name, const node *n, return 1; } if (full_checks) { - const char **p; + const char * const *p; for (p = FORBIDDEN; *p; p++) { if (PyUnicode_CompareWithASCIIString(name, *p) == 0) { ast_error(c, n, "assignment to keyword"); @@ -943,13 +990,8 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) s = e->v.List.elts; break; case Tuple_kind: - if (asdl_seq_LEN(e->v.Tuple.elts)) { - e->v.Tuple.ctx = ctx; - s = e->v.Tuple.elts; - } - else { - expr_name = "()"; - } + e->v.Tuple.ctx = ctx; + s = e->v.Tuple.elts; break; case Lambda_kind: expr_name = "lambda"; @@ -986,6 +1028,8 @@ set_context(struct compiling *c, expr_ty e, expr_context_ty ctx, const node *n) case Num_kind: case Str_kind: case Bytes_kind: + case JoinedStr_kind: + case FormattedValue_kind: expr_name = "literal"; break; case NameConstant_kind: @@ -1259,16 +1303,20 @@ ast_for_arguments(struct compiling *c, const node *n) and varargslist (lambda definition). parameters: '(' [typedargslist] ')' - typedargslist: ((tfpdef ['=' test] ',')* - ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] - | '**' tfpdef) - | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) + typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) tfpdef: NAME [':' test] - varargslist: ((vfpdef ['=' test] ',')* - ('*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] - | '**' vfpdef) - | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) + varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] + ) vfpdef: NAME + */ int i, j, k, nposargs = 0, nkwonlyargs = 0; int nposdefaults = 0, found_default = 0; @@ -1370,7 +1418,8 @@ ast_for_arguments(struct compiling *c, const node *n) i += 2; /* the name and the comma */ break; case STAR: - if (i+1 >= NCH(n)) { + if (i+1 >= NCH(n) || + (i+2 == NCH(n) && TYPE(CHILD(n, i+1)) == COMMA)) { ast_error(c, CHILD(n, i), "named arguments must follow bare *"); return NULL; @@ -1993,7 +2042,6 @@ ast_for_atom(struct compiling *c, const node *n) | '...' | 'None' | 'True' | 'False' */ node *ch = CHILD(n, 0); - int bytesmode = 0; switch (TYPE(ch)) { case NAME: { @@ -2015,7 +2063,7 @@ ast_for_atom(struct compiling *c, const node *n) return Name(name, Load, LINENO(n), n->n_col_offset, c->c_arena); } case STRING: { - PyObject *str = parsestrplus(c, n, &bytesmode); + expr_ty str = parsestrplus(c, n); if (!str) { const char *errtype = NULL; if (PyErr_ExceptionMatches(PyExc_UnicodeError)) @@ -2032,6 +2080,7 @@ ast_for_atom(struct compiling *c, const node *n) PyOS_snprintf(buf, sizeof(buf), "(%s) %s", errtype, s); Py_DECREF(errstr); } else { + PyErr_Clear(); PyOS_snprintf(buf, sizeof(buf), "(%s) unknown error", errtype); } ast_error(c, n, buf); @@ -2041,14 +2090,7 @@ ast_for_atom(struct compiling *c, const node *n) } return NULL; } - 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 - return Str(str, LINENO(n), n->n_col_offset, c->c_arena); + return str; } case NUMBER: { PyObject *pynum = parsenumber(c, STR(ch)); @@ -3208,14 +3250,14 @@ ast_for_import_stmt(struct compiling *c, const node *n) alias_ty import_alias = alias_for_import_name(c, n, 1); if (!import_alias) return NULL; - asdl_seq_SET(aliases, 0, import_alias); + asdl_seq_SET(aliases, 0, import_alias); } else { for (i = 0; i < NCH(n); i += 2) { alias_ty import_alias = alias_for_import_name(c, CHILD(n, i), 1); if (!import_alias) return NULL; - asdl_seq_SET(aliases, i / 2, import_alias); + asdl_seq_SET(aliases, i / 2, import_alias); } } if (mod != NULL) @@ -3935,82 +3977,932 @@ decode_utf8(struct compiling *c, const char **sPtr, const char *end) } static PyObject * -decode_unicode(struct compiling *c, const char *s, size_t len, int rawmode, const char *encoding) +decode_unicode_with_escapes(struct compiling *c, const char *s, size_t len) { PyObject *v, *u; char *buf; char *p; const char *end; - if (encoding == NULL) { - u = NULL; + /* check for integer overflow */ + if (len > PY_SIZE_MAX / 6) + return NULL; + /* "ä" (2 bytes) may become "\U000000E4" (10 bytes), or 1:5 + "\ä" (3 bytes) may become "\u005c\U000000E4" (16 bytes), or ~1:6 */ + u = PyBytes_FromStringAndSize((char *)NULL, len * 6); + if (u == NULL) + return NULL; + p = buf = PyBytes_AsString(u); + end = s + len; + while (s < end) { + if (*s == '\\') { + *p++ = *s++; + if (*s & 0x80) { + strcpy(p, "u005c"); + p += 5; + } + } + if (*s & 0x80) { /* XXX inefficient */ + PyObject *w; + int kind; + void *data; + Py_ssize_t len, i; + w = decode_utf8(c, &s, end); + if (w == NULL) { + Py_DECREF(u); + return NULL; + } + kind = PyUnicode_KIND(w); + data = PyUnicode_DATA(w); + len = PyUnicode_GET_LENGTH(w); + for (i = 0; i < len; i++) { + Py_UCS4 chr = PyUnicode_READ(kind, data, i); + sprintf(p, "\\U%08x", chr); + p += 10; + } + /* Should be impossible to overflow */ + assert(p - buf <= Py_SIZE(u)); + Py_DECREF(w); + } else { + *p++ = *s++; + } + } + len = p - buf; + s = buf; + + v = PyUnicode_DecodeUnicodeEscape(s, len, NULL); + Py_XDECREF(u); + return v; +} + +/* Compile this expression in to an expr_ty. We know that we can + temporarily modify the character before the start of this string + (it's '{'), and we know we can temporarily modify the character + after this string (it is a '}'). Leverage this to create a + sub-string with enough room for us to add parens around the + expression. This is to allow strings with embedded newlines, for + example. */ +static expr_ty +fstring_compile_expr(PyObject *str, Py_ssize_t expr_start, + Py_ssize_t expr_end, struct compiling *c, const node *n) + +{ + PyCompilerFlags cf; + mod_ty mod; + char *utf_expr; + Py_ssize_t i; + Py_UCS4 end_ch = -1; + int all_whitespace; + PyObject *sub = NULL; + + /* We only decref sub if we allocated it with a PyUnicode_Substring. + decref_sub records that. */ + int decref_sub = 0; + + assert(str); + + assert(expr_start >= 0 && expr_start < PyUnicode_GET_LENGTH(str)); + assert(expr_end >= 0 && expr_end < PyUnicode_GET_LENGTH(str)); + assert(expr_end >= expr_start); + + /* There has to be at least one character on each side of the + expression inside this str. This will have been caught before + we're called. */ + assert(expr_start >= 1); + assert(expr_end <= PyUnicode_GET_LENGTH(str)-1); + + /* If the substring is all whitespace, it's an error. We need to + catch this here, and not when we call PyParser_ASTFromString, + because turning the expression '' in to '()' would go from + being invalid to valid. */ + /* Note that this code says an empty string is all + whitespace. That's important. There's a test for it: f'{}'. */ + all_whitespace = 1; + for (i = expr_start; i < expr_end; i++) { + if (!Py_UNICODE_ISSPACE(PyUnicode_READ_CHAR(str, i))) { + all_whitespace = 0; + break; + } + } + if (all_whitespace) { + ast_error(c, n, "f-string: empty expression not allowed"); + goto error; + } + + /* If the substring will be the entire source string, we can't use + PyUnicode_Substring, since it will return another reference to + our original string. Because we're modifying the string in + place, that's a no-no. So, detect that case and just use our + string directly. */ + + if (expr_start-1 == 0 && expr_end+1 == PyUnicode_GET_LENGTH(str)) { + /* If str is well formed, then the first and last chars must + be '{' and '}', respectively. But, if there's a syntax + error, for example f'{3!', then the last char won't be a + closing brace. So, remember the last character we read in + order for us to restore it. */ + end_ch = PyUnicode_ReadChar(str, expr_end-expr_start+1); + assert(end_ch != (Py_UCS4)-1); + + /* In all cases, however, start_ch must be '{'. */ + assert(PyUnicode_ReadChar(str, 0) == '{'); + + sub = str; } else { - /* check for integer overflow */ - if (len > PY_SIZE_MAX / 6) - return NULL; - /* "ä" (2 bytes) may become "\U000000E4" (10 bytes), or 1:5 - "\ä" (3 bytes) may become "\u005c\U000000E4" (16 bytes), or ~1:6 */ - u = PyBytes_FromStringAndSize((char *)NULL, len * 6); - if (u == NULL) - return NULL; - p = buf = PyBytes_AsString(u); - end = s + len; - while (s < end) { - if (*s == '\\') { - *p++ = *s++; - if (*s & 0x80) { - strcpy(p, "u005c"); - p += 5; + /* Create a substring object. It must be a new object, with + refcount==1, so that we can modify it. */ + sub = PyUnicode_Substring(str, expr_start-1, expr_end+1); + if (!sub) + goto error; + assert(sub != str); /* Make sure it's a new string. */ + decref_sub = 1; /* Remember to deallocate it on error. */ + } + + /* Put () around the expression. */ + if (PyUnicode_WriteChar(sub, 0, '(') < 0 || + PyUnicode_WriteChar(sub, expr_end-expr_start+1, ')') < 0) + goto error; + + /* No need to free the memory returned here: it's managed by the + string. */ + utf_expr = PyUnicode_AsUTF8(sub); + if (!utf_expr) + goto error; + + cf.cf_flags = PyCF_ONLY_AST; + mod = PyParser_ASTFromString(utf_expr, "<fstring>", + Py_eval_input, &cf, c->c_arena); + if (!mod) + goto error; + + if (sub != str) + /* Clear instead of decref in case we ever modify this code to change + the error handling: this is safest because the XDECREF won't try + and decref it when it's NULL. */ + /* No need to restore the chars in sub, since we know it's getting + ready to get deleted (refcount must be 1, since we got a new string + in PyUnicode_Substring). */ + Py_CLEAR(sub); + else { + assert(!decref_sub); + assert(end_ch != (Py_UCS4)-1); + /* Restore str, which we earlier modified directly. */ + if (PyUnicode_WriteChar(str, 0, '{') < 0 || + PyUnicode_WriteChar(str, expr_end-expr_start+1, end_ch) < 0) + goto error; + } + return mod->v.Expression.body; + +error: + /* Only decref sub if it was the result of a call to SubString. */ + if (decref_sub) + Py_XDECREF(sub); + + if (end_ch != (Py_UCS4)-1) { + /* We only get here if we modified str. Make sure that's the + case: str will be equal to sub. */ + if (str == sub) { + /* Don't check the error, because we've already set the + error state (that's why we're in 'error', after + all). */ + PyUnicode_WriteChar(str, 0, '{'); + PyUnicode_WriteChar(str, expr_end-expr_start+1, end_ch); + } + } + return NULL; +} + +/* Return -1 on error. + + Return 0 if we reached the end of the literal. + + Return 1 if we haven't reached the end of the literal, but we want + the caller to process the literal up to this point. Used for + doubled braces. +*/ +static int +fstring_find_literal(PyObject *str, Py_ssize_t *ofs, PyObject **literal, + int recurse_lvl, struct compiling *c, const node *n) +{ + /* Get any literal string. It ends when we hit an un-doubled brace, or the + end of the string. */ + + Py_ssize_t literal_start, literal_end; + int result = 0; + + enum PyUnicode_Kind kind = PyUnicode_KIND(str); + void *data = PyUnicode_DATA(str); + + assert(*literal == NULL); + + literal_start = *ofs; + for (; *ofs < PyUnicode_GET_LENGTH(str); *ofs += 1) { + Py_UCS4 ch = PyUnicode_READ(kind, data, *ofs); + if (ch == '{' || ch == '}') { + /* Check for doubled braces, but only at the top level. If + we checked at every level, then f'{0:{3}}' would fail + with the two closing braces. */ + if (recurse_lvl == 0) { + if (*ofs + 1 < PyUnicode_GET_LENGTH(str) && + PyUnicode_READ(kind, data, *ofs + 1) == ch) { + /* We're going to tell the caller that the literal ends + here, but that they should continue scanning. But also + skip over the second brace when we resume scanning. */ + literal_end = *ofs + 1; + *ofs += 2; + result = 1; + goto done; } - } - if (*s & 0x80) { /* XXX inefficient */ - PyObject *w; - int kind; - void *data; - Py_ssize_t len, i; - w = decode_utf8(c, &s, end); - if (w == NULL) { - Py_DECREF(u); - return NULL; + + /* Where a single '{' is the start of a new expression, a + single '}' is not allowed. */ + if (ch == '}') { + ast_error(c, n, "f-string: single '}' is not allowed"); + return -1; } - kind = PyUnicode_KIND(w); - data = PyUnicode_DATA(w); - len = PyUnicode_GET_LENGTH(w); - for (i = 0; i < len; i++) { - Py_UCS4 chr = PyUnicode_READ(kind, data, i); - sprintf(p, "\\U%08x", chr); - p += 10; + } + + /* We're either at a '{', which means we're starting another + expression; or a '}', which means we're at the end of this + f-string (for a nested format_spec). */ + break; + } + } + literal_end = *ofs; + + assert(*ofs == PyUnicode_GET_LENGTH(str) || + PyUnicode_READ(kind, data, *ofs) == '{' || + PyUnicode_READ(kind, data, *ofs) == '}'); +done: + if (literal_start != literal_end) { + *literal = PyUnicode_Substring(str, literal_start, literal_end); + if (!*literal) + return -1; + } + + return result; +} + +/* Forward declaration because parsing is recursive. */ +static expr_ty +fstring_parse(PyObject *str, Py_ssize_t *ofs, int recurse_lvl, + struct compiling *c, const node *n); + +/* Parse the f-string str, starting at ofs. We know *ofs starts an + expression (so it must be a '{'). Returns the FormattedValue node, + which includes the expression, conversion character, and + format_spec expression. + + Note that I don't do a perfect job here: I don't make sure that a + closing brace doesn't match an opening paren, for example. It + doesn't need to error on all invalid expressions, just correctly + find the end of all valid ones. Any errors inside the expression + will be caught when we parse it later. */ +static int +fstring_find_expr(PyObject *str, Py_ssize_t *ofs, int recurse_lvl, + expr_ty *expression, struct compiling *c, const node *n) +{ + /* Return -1 on error, else 0. */ + + Py_ssize_t expr_start; + Py_ssize_t expr_end; + expr_ty simple_expression; + expr_ty format_spec = NULL; /* Optional format specifier. */ + Py_UCS4 conversion = -1; /* The conversion char. -1 if not specified. */ + + enum PyUnicode_Kind kind = PyUnicode_KIND(str); + void *data = PyUnicode_DATA(str); + + /* 0 if we're not in a string, else the quote char we're trying to + match (single or double quote). */ + Py_UCS4 quote_char = 0; + + /* If we're inside a string, 1=normal, 3=triple-quoted. */ + int string_type = 0; + + /* Keep track of nesting level for braces/parens/brackets in + expressions. */ + Py_ssize_t nested_depth = 0; + + /* Can only nest one level deep. */ + if (recurse_lvl >= 2) { + ast_error(c, n, "f-string: expressions nested too deeply"); + return -1; + } + + /* The first char must be a left brace, or we wouldn't have gotten + here. Skip over it. */ + assert(PyUnicode_READ(kind, data, *ofs) == '{'); + *ofs += 1; + + expr_start = *ofs; + for (; *ofs < PyUnicode_GET_LENGTH(str); *ofs += 1) { + Py_UCS4 ch; + + /* Loop invariants. */ + assert(nested_depth >= 0); + assert(*ofs >= expr_start); + if (quote_char) + assert(string_type == 1 || string_type == 3); + else + assert(string_type == 0); + + ch = PyUnicode_READ(kind, data, *ofs); + if (quote_char) { + /* We're inside a string. See if we're at the end. */ + /* This code needs to implement the same non-error logic + as tok_get from tokenizer.c, at the letter_quote + label. To actually share that code would be a + nightmare. But, it's unlikely to change and is small, + so duplicate it here. Note we don't need to catch all + of the errors, since they'll be caught when parsing the + expression. We just need to match the non-error + cases. Thus we can ignore \n in single-quoted strings, + for example. Or non-terminated strings. */ + if (ch == quote_char) { + /* Does this match the string_type (single or triple + quoted)? */ + if (string_type == 3) { + if (*ofs+2 < PyUnicode_GET_LENGTH(str) && + PyUnicode_READ(kind, data, *ofs+1) == ch && + PyUnicode_READ(kind, data, *ofs+2) == ch) { + /* We're at the end of a triple quoted string. */ + *ofs += 2; + string_type = 0; + quote_char = 0; + continue; + } + } else { + /* We're at the end of a normal string. */ + quote_char = 0; + string_type = 0; + continue; } - /* Should be impossible to overflow */ - assert(p - buf <= Py_SIZE(u)); - Py_DECREF(w); + } + /* We're inside a string, and not finished with the + string. If this is a backslash, skip the next char (it + might be an end quote that needs skipping). Otherwise, + just consume this character normally. */ + if (ch == '\\' && *ofs+1 < PyUnicode_GET_LENGTH(str)) { + /* Just skip the next char, whatever it is. */ + *ofs += 1; + } + } else if (ch == '\'' || ch == '"') { + /* Is this a triple quoted string? */ + if (*ofs+2 < PyUnicode_GET_LENGTH(str) && + PyUnicode_READ(kind, data, *ofs+1) == ch && + PyUnicode_READ(kind, data, *ofs+2) == ch) { + string_type = 3; + *ofs += 2; } else { - *p++ = *s++; + /* Start of a normal string. */ + string_type = 1; } + /* Start looking for the end of the string. */ + quote_char = ch; + } else if (ch == '[' || ch == '{' || ch == '(') { + nested_depth++; + } else if (nested_depth != 0 && + (ch == ']' || ch == '}' || ch == ')')) { + nested_depth--; + } else if (ch == '#') { + /* Error: can't include a comment character, inside parens + or not. */ + ast_error(c, n, "f-string cannot include '#'"); + return -1; + } else if (nested_depth == 0 && + (ch == '!' || ch == ':' || ch == '}')) { + /* First, test for the special case of "!=". Since '=' is + not an allowed conversion character, nothing is lost in + this test. */ + if (ch == '!' && *ofs+1 < PyUnicode_GET_LENGTH(str) && + PyUnicode_READ(kind, data, *ofs+1) == '=') + /* This isn't a conversion character, just continue. */ + continue; + + /* Normal way out of this loop. */ + break; + } else { + /* Just consume this char and loop around. */ } - len = p - buf; - s = buf; } - if (rawmode) - v = PyUnicode_DecodeRawUnicodeEscape(s, len, NULL); - else - v = PyUnicode_DecodeUnicodeEscape(s, len, NULL); - Py_XDECREF(u); - return v; + expr_end = *ofs; + /* If we leave this loop in a string or with mismatched parens, we + don't care. We'll get a syntax error when compiling the + expression. But, we can produce a better error message, so + let's just do that.*/ + if (quote_char) { + ast_error(c, n, "f-string: unterminated string"); + return -1; + } + if (nested_depth) { + ast_error(c, n, "f-string: mismatched '(', '{', or '['"); + return -1; + } + + if (*ofs >= PyUnicode_GET_LENGTH(str)) + goto unexpected_end_of_string; + + /* Compile the expression as soon as possible, so we show errors + related to the expression before errors related to the + conversion or format_spec. */ + simple_expression = fstring_compile_expr(str, expr_start, expr_end, c, n); + if (!simple_expression) + return -1; + + /* Check for a conversion char, if present. */ + if (PyUnicode_READ(kind, data, *ofs) == '!') { + *ofs += 1; + if (*ofs >= PyUnicode_GET_LENGTH(str)) + goto unexpected_end_of_string; + + conversion = PyUnicode_READ(kind, data, *ofs); + *ofs += 1; + + /* Validate the conversion. */ + if (!(conversion == 's' || conversion == 'r' + || conversion == 'a')) { + ast_error(c, n, "f-string: invalid conversion character: " + "expected 's', 'r', or 'a'"); + return -1; + } + } + + /* Check for the format spec, if present. */ + if (*ofs >= PyUnicode_GET_LENGTH(str)) + goto unexpected_end_of_string; + if (PyUnicode_READ(kind, data, *ofs) == ':') { + *ofs += 1; + if (*ofs >= PyUnicode_GET_LENGTH(str)) + goto unexpected_end_of_string; + + /* Parse the format spec. */ + format_spec = fstring_parse(str, ofs, recurse_lvl+1, c, n); + if (!format_spec) + return -1; + } + + if (*ofs >= PyUnicode_GET_LENGTH(str) || + PyUnicode_READ(kind, data, *ofs) != '}') + goto unexpected_end_of_string; + + /* We're at a right brace. Consume it. */ + assert(*ofs < PyUnicode_GET_LENGTH(str)); + assert(PyUnicode_READ(kind, data, *ofs) == '}'); + *ofs += 1; + + /* And now create the FormattedValue node that represents this entire + expression with the conversion and format spec. */ + *expression = FormattedValue(simple_expression, (int)conversion, + format_spec, LINENO(n), n->n_col_offset, + c->c_arena); + if (!*expression) + return -1; + + return 0; + +unexpected_end_of_string: + ast_error(c, n, "f-string: expecting '}'"); + return -1; } -/* s is a Python string literal, including the bracketing quote characters, - * and r &/or b prefixes (if any), and embedded escape sequences (if any). - * parsestr parses it, and returns the decoded Python string object. - */ +/* Return -1 on error. + + Return 0 if we have a literal (possible zero length) and an + expression (zero length if at the end of the string. + + Return 1 if we have a literal, but no expression, and we want the + caller to call us again. This is used to deal with doubled + braces. + + When called multiple times on the string 'a{{b{0}c', this function + will return: + + 1. the literal 'a{' with no expression, and a return value + of 1. Despite the fact that there's no expression, the return + value of 1 means we're not finished yet. + + 2. the literal 'b' and the expression '0', with a return value of + 0. The fact that there's an expression means we're not finished. + + 3. literal 'c' with no expression and a return value of 0. The + combination of the return value of 0 with no expression means + we're finished. +*/ +static int +fstring_find_literal_and_expr(PyObject *str, Py_ssize_t *ofs, int recurse_lvl, + PyObject **literal, expr_ty *expression, + struct compiling *c, const node *n) +{ + int result; + + assert(*literal == NULL && *expression == NULL); + + /* Get any literal string. */ + result = fstring_find_literal(str, ofs, literal, recurse_lvl, c, n); + if (result < 0) + goto error; + + assert(result == 0 || result == 1); + + if (result == 1) + /* We have a literal, but don't look at the expression. */ + return 1; + + assert(*ofs <= PyUnicode_GET_LENGTH(str)); + + if (*ofs >= PyUnicode_GET_LENGTH(str) || + PyUnicode_READ_CHAR(str, *ofs) == '}') + /* We're at the end of the string or the end of a nested + f-string: no expression. The top-level error case where we + expect to be at the end of the string but we're at a '}' is + handled later. */ + return 0; + + /* We must now be the start of an expression, on a '{'. */ + assert(*ofs < PyUnicode_GET_LENGTH(str) && + PyUnicode_READ_CHAR(str, *ofs) == '{'); + + if (fstring_find_expr(str, ofs, recurse_lvl, expression, c, n) < 0) + goto error; + + return 0; + +error: + Py_CLEAR(*literal); + return -1; +} + +#define EXPRLIST_N_CACHED 64 + +typedef struct { + /* Incrementally build an array of expr_ty, so be used in an + asdl_seq. Cache some small but reasonably sized number of + expr_ty's, and then after that start dynamically allocating, + doubling the number allocated each time. Note that the f-string + f'{0}a{1}' contains 3 expr_ty's: 2 FormattedValue's, and one + Str for the literal 'a'. So you add expr_ty's about twice as + fast as you add exressions in an f-string. */ + + Py_ssize_t allocated; /* Number we've allocated. */ + Py_ssize_t size; /* Number we've used. */ + expr_ty *p; /* Pointer to the memory we're actually + using. Will point to 'data' until we + start dynamically allocating. */ + expr_ty data[EXPRLIST_N_CACHED]; +} ExprList; + +#ifdef NDEBUG +#define ExprList_check_invariants(l) +#else +static void +ExprList_check_invariants(ExprList *l) +{ + /* Check our invariants. Make sure this object is "live", and + hasn't been deallocated. */ + assert(l->size >= 0); + assert(l->p != NULL); + if (l->size <= EXPRLIST_N_CACHED) + assert(l->data == l->p); +} +#endif + +static void +ExprList_Init(ExprList *l) +{ + l->allocated = EXPRLIST_N_CACHED; + l->size = 0; + + /* Until we start allocating dynamically, p points to data. */ + l->p = l->data; + + ExprList_check_invariants(l); +} + +static int +ExprList_Append(ExprList *l, expr_ty exp) +{ + ExprList_check_invariants(l); + if (l->size >= l->allocated) { + /* We need to alloc (or realloc) the memory. */ + Py_ssize_t new_size = l->allocated * 2; + + /* See if we've ever allocated anything dynamically. */ + if (l->p == l->data) { + Py_ssize_t i; + /* We're still using the cached data. Switch to + alloc-ing. */ + l->p = PyMem_RawMalloc(sizeof(expr_ty) * new_size); + if (!l->p) + return -1; + /* Copy the cached data into the new buffer. */ + for (i = 0; i < l->size; i++) + l->p[i] = l->data[i]; + } else { + /* Just realloc. */ + expr_ty *tmp = PyMem_RawRealloc(l->p, sizeof(expr_ty) * new_size); + if (!tmp) { + PyMem_RawFree(l->p); + l->p = NULL; + return -1; + } + l->p = tmp; + } + + l->allocated = new_size; + assert(l->allocated == 2 * l->size); + } + + l->p[l->size++] = exp; + + ExprList_check_invariants(l); + return 0; +} + +static void +ExprList_Dealloc(ExprList *l) +{ + ExprList_check_invariants(l); + + /* If there's been an error, or we've never dynamically allocated, + do nothing. */ + if (!l->p || l->p == l->data) { + /* Do nothing. */ + } else { + /* We have dynamically allocated. Free the memory. */ + PyMem_RawFree(l->p); + } + l->p = NULL; + l->size = -1; +} + +static asdl_seq * +ExprList_Finish(ExprList *l, PyArena *arena) +{ + asdl_seq *seq; + + ExprList_check_invariants(l); + + /* Allocate the asdl_seq and copy the expressions in to it. */ + seq = _Py_asdl_seq_new(l->size, arena); + if (seq) { + Py_ssize_t i; + for (i = 0; i < l->size; i++) + asdl_seq_SET(seq, i, l->p[i]); + } + ExprList_Dealloc(l); + return seq; +} + +/* The FstringParser is designed to add a mix of strings and + f-strings, and concat them together as needed. Ultimately, it + generates an expr_ty. */ +typedef struct { + PyObject *last_str; + ExprList expr_list; +} FstringParser; + +#ifdef NDEBUG +#define FstringParser_check_invariants(state) +#else +static void +FstringParser_check_invariants(FstringParser *state) +{ + if (state->last_str) + assert(PyUnicode_CheckExact(state->last_str)); + ExprList_check_invariants(&state->expr_list); +} +#endif + +static void +FstringParser_Init(FstringParser *state) +{ + state->last_str = NULL; + ExprList_Init(&state->expr_list); + FstringParser_check_invariants(state); +} + +static void +FstringParser_Dealloc(FstringParser *state) +{ + FstringParser_check_invariants(state); + + Py_XDECREF(state->last_str); + ExprList_Dealloc(&state->expr_list); +} + +/* Make a Str node, but decref the PyUnicode object being added. */ +static expr_ty +make_str_node_and_del(PyObject **str, struct compiling *c, const node* n) +{ + PyObject *s = *str; + *str = NULL; + assert(PyUnicode_CheckExact(s)); + if (PyArena_AddPyObject(c->c_arena, s) < 0) { + Py_DECREF(s); + return NULL; + } + return Str(s, LINENO(n), n->n_col_offset, c->c_arena); +} + +/* Add a non-f-string (that is, a regular literal string). str is + decref'd. */ +static int +FstringParser_ConcatAndDel(FstringParser *state, PyObject *str) +{ + FstringParser_check_invariants(state); + + assert(PyUnicode_CheckExact(str)); + + if (PyUnicode_GET_LENGTH(str) == 0) { + Py_DECREF(str); + return 0; + } + + if (!state->last_str) { + /* We didn't have a string before, so just remember this one. */ + state->last_str = str; + } else { + /* Concatenate this with the previous string. */ + PyUnicode_AppendAndDel(&state->last_str, str); + if (!state->last_str) + return -1; + } + FstringParser_check_invariants(state); + return 0; +} + +/* Parse an f-string. The f-string is in str, starting at ofs, with no 'f' + or quotes. str is not decref'd, since we don't know if it's used elsewhere. + And if we're only looking at a part of a string, then decref'ing is + definitely not the right thing to do! */ +static int +FstringParser_ConcatFstring(FstringParser *state, PyObject *str, + Py_ssize_t *ofs, int recurse_lvl, + struct compiling *c, const node *n) +{ + FstringParser_check_invariants(state); + + /* Parse the f-string. */ + while (1) { + PyObject *literal = NULL; + expr_ty expression = NULL; + + /* If there's a zero length literal in front of the + expression, literal will be NULL. If we're at the end of + the f-string, expression will be NULL (unless result == 1, + see below). */ + int result = fstring_find_literal_and_expr(str, ofs, recurse_lvl, + &literal, &expression, + c, n); + if (result < 0) + return -1; + + /* Add the literal, if any. */ + if (!literal) { + /* Do nothing. Just leave last_str alone (and possibly + NULL). */ + } else if (!state->last_str) { + state->last_str = literal; + literal = NULL; + } else { + /* We have a literal, concatenate it. */ + assert(PyUnicode_GET_LENGTH(literal) != 0); + if (FstringParser_ConcatAndDel(state, literal) < 0) + return -1; + literal = NULL; + } + assert(!state->last_str || + PyUnicode_GET_LENGTH(state->last_str) != 0); + + /* We've dealt with the literal now. It can't be leaked on further + errors. */ + assert(literal == NULL); + + /* See if we should just loop around to get the next literal + and expression, while ignoring the expression this + time. This is used for un-doubling braces, as an + optimization. */ + if (result == 1) + continue; + + if (!expression) + /* We're done with this f-string. */ + break; + + /* We know we have an expression. Convert any existing string + to a Str node. */ + if (!state->last_str) { + /* Do nothing. No previous literal. */ + } else { + /* Convert the existing last_str literal to a Str node. */ + expr_ty str = make_str_node_and_del(&state->last_str, c, n); + if (!str || ExprList_Append(&state->expr_list, str) < 0) + return -1; + } + + if (ExprList_Append(&state->expr_list, expression) < 0) + return -1; + } + + assert(*ofs <= PyUnicode_GET_LENGTH(str)); + + /* If recurse_lvl is zero, then we must be at the end of the + string. Otherwise, we must be at a right brace. */ + + if (recurse_lvl == 0 && *ofs < PyUnicode_GET_LENGTH(str)) { + ast_error(c, n, "f-string: unexpected end of string"); + return -1; + } + if (recurse_lvl != 0 && PyUnicode_READ_CHAR(str, *ofs) != '}') { + ast_error(c, n, "f-string: expecting '}'"); + return -1; + } + + FstringParser_check_invariants(state); + return 0; +} + +/* Convert the partial state reflected in last_str and expr_list to an + expr_ty. The expr_ty can be a Str, or a JoinedStr. */ +static expr_ty +FstringParser_Finish(FstringParser *state, struct compiling *c, + const node *n) +{ + asdl_seq *seq; + + FstringParser_check_invariants(state); + + /* If we're just a constant string with no expressions, return + that. */ + if(state->expr_list.size == 0) { + if (!state->last_str) { + /* Create a zero length string. */ + state->last_str = PyUnicode_FromStringAndSize(NULL, 0); + if (!state->last_str) + goto error; + } + return make_str_node_and_del(&state->last_str, c, n); + } + + /* Create a Str node out of last_str, if needed. It will be the + last node in our expression list. */ + if (state->last_str) { + expr_ty str = make_str_node_and_del(&state->last_str, c, n); + if (!str || ExprList_Append(&state->expr_list, str) < 0) + goto error; + } + /* This has already been freed. */ + assert(state->last_str == NULL); + + seq = ExprList_Finish(&state->expr_list, c->c_arena); + if (!seq) + goto error; + + /* If there's only one expression, return it. Otherwise, we need + to join them together. */ + if (seq->size == 1) + return seq->elements[0]; + + return JoinedStr(seq, LINENO(n), n->n_col_offset, c->c_arena); + +error: + FstringParser_Dealloc(state); + return NULL; +} + +/* Given an f-string (with no 'f' or quotes) that's in str starting at + ofs, parse it into an expr_ty. Return NULL on error. Does not + decref str. */ +static expr_ty +fstring_parse(PyObject *str, Py_ssize_t *ofs, int recurse_lvl, + struct compiling *c, const node *n) +{ + FstringParser state; + + FstringParser_Init(&state); + if (FstringParser_ConcatFstring(&state, str, ofs, recurse_lvl, + c, n) < 0) { + FstringParser_Dealloc(&state); + return NULL; + } + + return FstringParser_Finish(&state, c, n); +} + +/* n is a Python string literal, including the bracketing quote + characters, and r, b, u, &/or f prefixes (if any), and embedded + escape sequences (if any). parsestr parses it, and returns the + decoded Python string object. If the string is an f-string, set + *fmode and return the unparsed string object. +*/ static PyObject * -parsestr(struct compiling *c, const node *n, int *bytesmode) +parsestr(struct compiling *c, const node *n, int *bytesmode, int *fmode) { size_t len; const char *s = STR(n); int quote = Py_CHARMASK(*s); int rawmode = 0; - int need_encoding; if (Py_ISALPHA(quote)) { while (!*bytesmode || !rawmode) { if (quote == 'b' || quote == 'B') { @@ -4024,15 +4916,24 @@ parsestr(struct compiling *c, const node *n, int *bytesmode) quote = *++s; rawmode = 1; } + else if (quote == 'f' || quote == 'F') { + quote = *++s; + *fmode = 1; + } else { break; } } } + if (*fmode && *bytesmode) { + PyErr_BadInternalCall(); + return NULL; + } if (quote != '\'' && quote != '\"') { PyErr_BadInternalCall(); return NULL; } + /* Skip the leading quote char. */ s++; len = strlen(s); if (len > INT_MAX) { @@ -4041,22 +4942,26 @@ parsestr(struct compiling *c, const node *n, int *bytesmode) return NULL; } if (s[--len] != quote) { + /* Last quote char must match the first. */ PyErr_BadInternalCall(); return NULL; } if (len >= 4 && s[0] == quote && s[1] == quote) { + /* A triple quoted string. We've already skipped one quote at + the start and one at the end of the string. Now skip the + two at the start. */ s += 2; len -= 2; + /* And check that the last two match. */ if (s[--len] != quote || s[--len] != quote) { PyErr_BadInternalCall(); return NULL; } } - if (!*bytesmode && !rawmode) { - return decode_unicode(c, s, len, rawmode, c->c_encoding); - } + /* Avoid invoking escape decoding routines if possible. */ + rawmode = rawmode || strchr(s, '\\') == NULL; if (*bytesmode) { - /* Disallow non-ascii characters (but not escapes) */ + /* Disallow non-ASCII characters. */ const char *ch; for (ch = s; *ch; ch++) { if (Py_CHARMASK(*ch) >= 0x80) { @@ -4065,71 +4970,93 @@ parsestr(struct compiling *c, const node *n, int *bytesmode) return NULL; } } - } - need_encoding = (!*bytesmode && c->c_encoding != NULL && - strcmp(c->c_encoding, "utf-8") != 0); - if (rawmode || strchr(s, '\\') == NULL) { - if (need_encoding) { - PyObject *v, *u = PyUnicode_DecodeUTF8(s, len, NULL); - if (u == NULL || !*bytesmode) - return u; - v = PyUnicode_AsEncodedString(u, c->c_encoding, NULL); - Py_DECREF(u); - return v; - } else if (*bytesmode) { + if (rawmode) return PyBytes_FromStringAndSize(s, len); - } else if (strcmp(c->c_encoding, "utf-8") == 0) { - return PyUnicode_FromStringAndSize(s, len); - } else { - return PyUnicode_DecodeLatin1(s, len, NULL); - } + else + return PyBytes_DecodeEscape(s, len, NULL, /* ignored */ 0, NULL); + } else { + if (rawmode) + return PyUnicode_DecodeUTF8Stateful(s, len, NULL, NULL); + else + return decode_unicode_with_escapes(c, s, len); } - return PyBytes_DecodeEscape(s, len, NULL, 1, - need_encoding ? c->c_encoding : NULL); } -/* Build a Python string object out of a STRING+ atom. This takes care of - * compile-time literal catenation, calling parsestr() on each piece, and - * pasting the intermediate results together. - */ -static PyObject * -parsestrplus(struct compiling *c, const node *n, int *bytesmode) +/* Accepts a STRING+ atom, and produces an expr_ty node. Run through + each STRING atom, and process it as needed. For bytes, just + concatenate them together, and the result will be a Bytes node. For + normal strings and f-strings, concatenate them together. The result + will be a Str node if there were no f-strings; a FormattedValue + node if there's just an f-string (with no leading or trailing + literals), or a JoinedStr node if there are multiple f-strings or + any literals involved. */ +static expr_ty +parsestrplus(struct compiling *c, const node *n) { - PyObject *v; + int bytesmode = 0; + PyObject *bytes_str = NULL; int i; - REQ(CHILD(n, 0), STRING); - v = parsestr(c, CHILD(n, 0), bytesmode); - if (v != NULL) { - /* String literal concatenation */ - for (i = 1; i < NCH(n); i++) { - PyObject *s; - int subbm = 0; - s = parsestr(c, CHILD(n, i), &subbm); - if (s == NULL) - goto onError; - if (*bytesmode != subbm) { - ast_error(c, n, "cannot mix bytes and nonbytes literals"); - Py_DECREF(s); - goto onError; - } - if (PyBytes_Check(v) && PyBytes_Check(s)) { - PyBytes_ConcatAndDel(&v, s); - if (v == NULL) - goto onError; - } - else { - PyObject *temp = PyUnicode_Concat(v, s); - Py_DECREF(s); - Py_DECREF(v); - v = temp; - if (v == NULL) - goto onError; + + FstringParser state; + FstringParser_Init(&state); + + for (i = 0; i < NCH(n); i++) { + int this_bytesmode = 0; + int this_fmode = 0; + PyObject *s; + + REQ(CHILD(n, i), STRING); + s = parsestr(c, CHILD(n, i), &this_bytesmode, &this_fmode); + if (!s) + goto error; + + /* Check that we're not mixing bytes with unicode. */ + if (i != 0 && bytesmode != this_bytesmode) { + ast_error(c, n, "cannot mix bytes and nonbytes literals"); + Py_DECREF(s); + goto error; + } + bytesmode = this_bytesmode; + + assert(bytesmode ? PyBytes_CheckExact(s) : PyUnicode_CheckExact(s)); + + if (bytesmode) { + /* For bytes, concat as we go. */ + if (i == 0) { + /* First time, just remember this value. */ + bytes_str = s; + } else { + PyBytes_ConcatAndDel(&bytes_str, s); + if (!bytes_str) + goto error; } + } else if (this_fmode) { + /* This is an f-string. Concatenate and decref it. */ + Py_ssize_t ofs = 0; + int result = FstringParser_ConcatFstring(&state, s, &ofs, 0, c, n); + Py_DECREF(s); + if (result < 0) + goto error; + } else { + /* This is a regular string. Concatenate it. */ + if (FstringParser_ConcatAndDel(&state, s) < 0) + goto error; } } - return v; + if (bytesmode) { + /* Just return the bytes object and we're done. */ + if (PyArena_AddPyObject(c->c_arena, bytes_str) < 0) + goto error; + return Bytes(bytes_str, LINENO(n), n->n_col_offset, c->c_arena); + } + + /* We're not a bytes string, bytes_str should never have been set. */ + assert(bytes_str == NULL); + + return FstringParser_Finish(&state, c, n); - onError: - Py_XDECREF(v); +error: + Py_XDECREF(bytes_str); + FstringParser_Dealloc(&state); return NULL; } diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index f3d0c9a..0637a2d 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -331,7 +331,7 @@ builtin_any(PyModuleDef *module, PyObject *iterable) Py_DECREF(it); return NULL; } - if (cmp == 1) { + if (cmp > 0) { Py_DECREF(it); Py_RETURN_TRUE; } @@ -469,6 +469,7 @@ filter_next(filterobject *lz) PyObject *it = lz->it; long ok; PyObject *(*iternext)(PyObject *); + int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type; iternext = *Py_TYPE(it)->tp_iternext; for (;;) { @@ -476,12 +477,11 @@ filter_next(filterobject *lz) if (item == NULL) return NULL; - if (lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type) { + if (checktrue) { ok = PyObject_IsTrue(item); } else { PyObject *good; - good = PyObject_CallFunctionObjArgs(lz->func, - item, NULL); + good = PyObject_CallFunctionObjArgs(lz->func, item, NULL); if (good == NULL) { Py_DECREF(item); return NULL; @@ -1174,13 +1174,14 @@ map_next(mapobject *lz) PyObject *result; Py_ssize_t numargs, i; - numargs = PyTuple_Size(lz->iters); + numargs = PyTuple_GET_SIZE(lz->iters); argtuple = PyTuple_New(numargs); if (argtuple == NULL) return NULL; for (i=0 ; i<numargs ; i++) { - val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i)); + PyObject *it = PyTuple_GET_ITEM(lz->iters, i); + val = Py_TYPE(it)->tp_iternext(it); if (val == NULL) { Py_DECREF(argtuple); return NULL; @@ -1930,9 +1931,8 @@ builtin_input_impl(PyModuleDef *module, PyObject *prompt) Py_CLEAR(stringpo); if (po == NULL) goto _readline_errors; - promptstr = PyBytes_AsString(po); - if (promptstr == NULL) - goto _readline_errors; + assert(PyBytes_Check(po)); + promptstr = PyBytes_AS_STRING(po); } else { po = NULL; diff --git a/Python/ceval.c b/Python/ceval.c index 3d69038..38ac509 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -125,7 +125,7 @@ static PyObject * load_args(PyObject ***, int); #ifdef LLTRACE static int lltrace; -static int prtrace(PyObject *, char *); +static int prtrace(PyObject *, const char *); #endif static int call_trace(Py_tracefunc, PyObject *, PyThreadState *, PyFrameObject *, @@ -144,7 +144,7 @@ static int import_all_from(PyObject *, PyObject *); static void format_exc_check_arg(PyObject *, const char *, PyObject *); static void format_exc_unbound(PyCodeObject *co, int oparg); static PyObject * unicode_concatenate(PyObject *, PyObject *, - PyFrameObject *, unsigned char *); + PyFrameObject *, const unsigned short *); static PyObject * special_lookup(PyObject *, _Py_Identifier *); #define NAME_ERROR_MSG \ @@ -800,7 +800,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) int lastopcode = 0; #endif PyObject **stack_pointer; /* Next free slot in value stack */ - unsigned char *next_instr; + const unsigned short *next_instr; int opcode; /* Current opcode */ int oparg; /* Current opcode argument, if any */ enum why_code why; /* Reason for block stack unwind */ @@ -818,7 +818,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) time it is tested. */ int instr_ub = -1, instr_lb = 0, instr_prev = -1; - unsigned char *first_instr; + const unsigned short *first_instr; PyObject *names; PyObject *consts; @@ -886,24 +886,10 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) /* Import the static jump table */ #include "opcode_targets.h" -/* This macro is used when several opcodes defer to the same implementation - (e.g. SETUP_LOOP, SETUP_FINALLY) */ -#define TARGET_WITH_IMPL(op, impl) \ - TARGET_##op: \ - opcode = op; \ - if (HAS_ARG(op)) \ - oparg = NEXTARG(); \ - case op: \ - goto impl; \ - #define TARGET(op) \ TARGET_##op: \ - opcode = op; \ - if (HAS_ARG(op)) \ - oparg = NEXTARG(); \ case op: - #define DISPATCH() \ { \ if (!_Py_atomic_load_relaxed(&eval_breaker)) { \ @@ -917,7 +903,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) { \ if (!lltrace && !_Py_TracingPossible) { \ f->f_lasti = INSTR_OFFSET(); \ - goto *opcode_targets[*next_instr++]; \ + NEXTOPARG(); \ + goto *opcode_targets[opcode]; \ } \ goto fast_next_opcode; \ } @@ -926,7 +913,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) { \ if (!_Py_TracingPossible) { \ f->f_lasti = INSTR_OFFSET(); \ - goto *opcode_targets[*next_instr++]; \ + NEXTOPARG(); \ + goto *opcode_targets[opcode]; \ } \ goto fast_next_opcode; \ } @@ -935,10 +923,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #else #define TARGET(op) \ case op: -#define TARGET_WITH_IMPL(op, impl) \ - /* silence compiler warnings about `impl` unused */ \ - if (0) goto impl; \ - case op: + #define DISPATCH() continue #define FAST_DISPATCH() goto fast_next_opcode #endif @@ -994,12 +979,23 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) /* Code access macros */ -#define INSTR_OFFSET() ((int)(next_instr - first_instr)) -#define NEXTOP() (*next_instr++) -#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2]) -#define PEEKARG() ((next_instr[2]<<8) + next_instr[1]) -#define JUMPTO(x) (next_instr = first_instr + (x)) -#define JUMPBY(x) (next_instr += (x)) +#ifdef WORDS_BIGENDIAN + #define OPCODE(word) ((word) >> 8) + #define OPARG(word) ((word) & 255) +#else + #define OPCODE(word) ((word) & 255) + #define OPARG(word) ((word) >> 8) +#endif +/* The integer overflow is checked by an assertion below. */ +#define INSTR_OFFSET() (2*(int)(next_instr - first_instr)) +#define NEXTOPARG() do { \ + unsigned short word = *next_instr; \ + opcode = OPCODE(word); \ + oparg = OPARG(word); \ + next_instr++; \ + } while (0) +#define JUMPTO(x) (next_instr = first_instr + (x)/2) +#define JUMPBY(x) (next_instr += (x)/2) /* OpCode prediction macros Some opcodes tend to come in pairs thus making it possible to @@ -1012,10 +1008,10 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) processor's own internal branch predication has a high likelihood of success, resulting in a nearly zero-overhead transition to the next opcode. A successful prediction saves a trip through the eval-loop - including its two unpredictable branches, the HAS_ARG test and the - switch-case. Combined with the processor's internal branch prediction, - a successful PREDICT has the effect of making the two opcodes run as if - they were a single new opcode with the bodies combined. + including its unpredictable switch-case branch. Combined with the + processor's internal branch prediction, a successful PREDICT has the + effect of making the two opcodes run as if they were a single new opcode + with the bodies combined. If collecting opcode statistics, your choices are to either keep the predictions turned-on and interpret the results as if some opcodes @@ -1030,13 +1026,19 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) #if defined(DYNAMIC_EXECUTION_PROFILE) || USE_COMPUTED_GOTOS #define PREDICT(op) if (0) goto PRED_##op -#define PREDICTED(op) PRED_##op: -#define PREDICTED_WITH_ARG(op) PRED_##op: #else -#define PREDICT(op) if (*next_instr == op) goto PRED_##op -#define PREDICTED(op) PRED_##op: next_instr++ -#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3 +#define PREDICT(op) \ + do{ \ + unsigned short word = *next_instr; \ + opcode = OPCODE(word); \ + if (opcode == op){ \ + oparg = OPARG(word); \ + next_instr++; \ + goto PRED_##op; \ + } \ + } while(0) #endif +#define PREDICTED(op) PRED_##op: /* Stack manipulation macros */ @@ -1100,7 +1102,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } #define UNWIND_EXCEPT_HANDLER(b) \ - { \ + do { \ PyObject *type, *value, *traceback; \ assert(STACK_LEVEL() >= (b)->b_level + 3); \ while (STACK_LEVEL() > (b)->b_level + 3) { \ @@ -1116,7 +1118,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) Py_XDECREF(type); \ Py_XDECREF(value); \ Py_XDECREF(traceback); \ - } + } while(0) /* Start of code */ @@ -1165,16 +1167,16 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) consts = co->co_consts; fastlocals = f->f_localsplus; freevars = f->f_localsplus + co->co_nlocals; - first_instr = (unsigned char*) PyBytes_AS_STRING(co->co_code); - /* An explanation is in order for the next line. - - f->f_lasti now refers to the index of the last instruction - executed. You might think this was obvious from the name, but - this wasn't always true before 2.3! PyFrame_New now sets - f->f_lasti to -1 (i.e. the index *before* the first instruction) - and YIELD_VALUE doesn't fiddle with f_lasti any more. So this - does work. Promise. - YIELD_FROM sets f_lasti to itself, in order to repeated yield + assert(PyBytes_Check(co->co_code)); + assert(PyBytes_GET_SIZE(co->co_code) <= INT_MAX); + assert(PyBytes_GET_SIZE(co->co_code) % 2 == 0); + assert(_Py_IS_ALIGNED(PyBytes_AS_STRING(co->co_code), 2)); + first_instr = (unsigned short*) PyBytes_AS_STRING(co->co_code); + /* + f->f_lasti refers to the index of the last instruction, + unless it's -1 in which case next_instr should be first_instr. + + YIELD_FROM sets f_lasti to itself, in order to repeatedly yield multiple values. When the PREDICT() macros are enabled, some opcode pairs follow in @@ -1183,9 +1185,13 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) were a single new opcode; accordingly,f->f_lasti will point to the first code in the pair (for instance, GET_ITER followed by FOR_ITER is effectively a single opcode and f->f_lasti will point - at to the beginning of the combined pair.) + to the beginning of the combined pair.) */ - next_instr = first_instr + f->f_lasti + 1; + next_instr = first_instr; + if (f->f_lasti >= 0) { + assert(f->f_lasti % 2 == 0); + next_instr += f->f_lasti/2 + 1; + } stack_pointer = f->f_stacktop; assert(stack_pointer != NULL); f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */ @@ -1249,7 +1255,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) Py_MakePendingCalls() above. */ if (_Py_atomic_load_relaxed(&eval_breaker)) { - if (*next_instr == SETUP_FINALLY) { + if (OPCODE(*next_instr) == SETUP_FINALLY) { /* Make the last opcode before a try: finally: block uninterruptible. */ goto fast_next_opcode; @@ -1322,11 +1328,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) /* Extract opcode and argument */ - opcode = NEXTOP(); - oparg = 0; /* allows oparg to be stored in a register because - it doesn't have to be remembered across a full loop */ - if (HAS_ARG(opcode)) - oparg = NEXTARG(); + NEXTOPARG(); dispatch_opcode: #ifdef DYNAMIC_EXECUTION_PROFILE #ifdef DXPAIRS @@ -1384,7 +1386,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) FAST_DISPATCH(); } - PREDICTED_WITH_ARG(STORE_FAST); + PREDICTED(STORE_FAST); TARGET(STORE_FAST) { PyObject *value = POP(); SETLOCAL(oparg, value); @@ -2111,7 +2113,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) f->f_stacktop = stack_pointer; why = WHY_YIELD; /* and repeat... */ - f->f_lasti--; + f->f_lasti -= 2; goto fast_yield; } @@ -2249,7 +2251,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - PREDICTED_WITH_ARG(UNPACK_SEQUENCE); + PREDICTED(UNPACK_SEQUENCE); TARGET(UNPACK_SEQUENCE) { PyObject *seq = POP(), *item, **items; if (PyTuple_CheckExact(seq) && @@ -2358,7 +2360,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } else { v = PyObject_GetItem(locals, name); - if (v == NULL && _PyErr_OCCURRED()) { + if (v == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear(); @@ -2398,26 +2400,33 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) PyObject *name = GETITEM(names, oparg); PyObject *v; if (PyDict_CheckExact(f->f_globals) - && PyDict_CheckExact(f->f_builtins)) { + && PyDict_CheckExact(f->f_builtins)) + { v = _PyDict_LoadGlobal((PyDictObject *)f->f_globals, (PyDictObject *)f->f_builtins, name); if (v == NULL) { - if (!_PyErr_OCCURRED()) + if (!_PyErr_OCCURRED()) { + /* _PyDict_LoadGlobal() returns NULL without raising + * an exception if the key doesn't exist */ format_exc_check_arg(PyExc_NameError, NAME_ERROR_MSG, name); + } goto error; } Py_INCREF(v); } else { /* Slow-path if globals or builtins is not a dict */ + + /* namespace 1: globals */ v = PyObject_GetItem(f->f_globals, name); if (v == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear(); + /* namespace 2: builtins */ v = PyObject_GetItem(f->f_builtins, name); if (v == NULL) { if (PyErr_ExceptionMatches(PyExc_KeyError)) @@ -2477,7 +2486,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) } else { value = PyObject_GetItem(locals, name); - if (value == NULL && PyErr_Occurred()) { + if (value == NULL) { if (!PyErr_ExceptionMatches(PyExc_KeyError)) goto error; PyErr_Clear(); @@ -2540,9 +2549,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - TARGET_WITH_IMPL(BUILD_TUPLE_UNPACK, _build_list_unpack) - TARGET(BUILD_LIST_UNPACK) - _build_list_unpack: { + TARGET(BUILD_TUPLE_UNPACK) + TARGET(BUILD_LIST_UNPACK) { int convert_to_tuple = opcode == BUILD_TUPLE_UNPACK; int i; PyObject *sum = PyList_New(0); @@ -2639,9 +2647,41 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - TARGET_WITH_IMPL(BUILD_MAP_UNPACK_WITH_CALL, _build_map_unpack) - TARGET(BUILD_MAP_UNPACK) - _build_map_unpack: { + TARGET(BUILD_CONST_KEY_MAP) { + int i; + PyObject *map; + PyObject *keys = TOP(); + if (!PyTuple_CheckExact(keys) || + PyTuple_GET_SIZE(keys) != (Py_ssize_t)oparg) { + PyErr_SetString(PyExc_SystemError, + "bad BUILD_CONST_KEY_MAP keys argument"); + goto error; + } + map = _PyDict_NewPresized((Py_ssize_t)oparg); + if (map == NULL) { + goto error; + } + for (i = oparg; i > 0; i--) { + int err; + PyObject *key = PyTuple_GET_ITEM(keys, oparg - i); + PyObject *value = PEEK(i + 1); + err = PyDict_SetItem(map, key, value); + if (err != 0) { + Py_DECREF(map); + goto error; + } + } + + Py_DECREF(POP()); + while (oparg--) { + Py_DECREF(POP()); + } + PUSH(map); + DISPATCH(); + } + + TARGET(BUILD_MAP_UNPACK_WITH_CALL) + TARGET(BUILD_MAP_UNPACK) { int with_call = opcode == BUILD_MAP_UNPACK_WITH_CALL; int num_maps; int function_location; @@ -2848,7 +2888,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) FAST_DISPATCH(); } - PREDICTED_WITH_ARG(POP_JUMP_IF_FALSE); + PREDICTED(POP_JUMP_IF_FALSE); TARGET(POP_JUMP_IF_FALSE) { PyObject *cond = POP(); int err; @@ -2872,7 +2912,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - PREDICTED_WITH_ARG(POP_JUMP_IF_TRUE); + PREDICTED(POP_JUMP_IF_TRUE); TARGET(POP_JUMP_IF_TRUE) { PyObject *cond = POP(); int err; @@ -2949,7 +2989,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - PREDICTED_WITH_ARG(JUMP_ABSOLUTE); + PREDICTED(JUMP_ABSOLUTE); TARGET(JUMP_ABSOLUTE) { JUMPTO(oparg); #if FAST_LOOPS @@ -3006,7 +3046,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - PREDICTED_WITH_ARG(FOR_ITER); + PREDICTED(FOR_ITER); TARGET(FOR_ITER) { /* before: [iter]; after: [iter, iter()] *or* [] */ PyObject *iter = TOP(); @@ -3044,10 +3084,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) goto fast_block_end; } - TARGET_WITH_IMPL(SETUP_LOOP, _setup_finally) - TARGET_WITH_IMPL(SETUP_EXCEPT, _setup_finally) - TARGET(SETUP_FINALLY) - _setup_finally: { + TARGET(SETUP_LOOP) + TARGET(SETUP_EXCEPT) + TARGET(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. @@ -3242,10 +3281,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) 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: { + TARGET(CALL_FUNCTION_VAR) + TARGET(CALL_FUNCTION_KW) + TARGET(CALL_FUNCTION_VAR_KW) { int na = oparg & 0xff; int nk = (oparg>>8) & 0xff; int flags = (opcode - CALL_FUNCTION) & 3; @@ -3287,117 +3325,36 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } - TARGET_WITH_IMPL(MAKE_CLOSURE, _make_function) - TARGET(MAKE_FUNCTION) - _make_function: { - int posdefaults = oparg & 0xff; - int kwdefaults = (oparg>>8) & 0xff; - int num_annotations = (oparg >> 16) & 0x7fff; + TARGET(MAKE_FUNCTION) { + PyObject *qualname = POP(); + PyObject *codeobj = POP(); + PyFunctionObject *func = (PyFunctionObject *) + PyFunction_NewWithQualName(codeobj, f->f_globals, qualname); - PyObject *qualname = POP(); /* qualname */ - PyObject *code = POP(); /* code object */ - PyObject *func = PyFunction_NewWithQualName(code, f->f_globals, qualname); - Py_DECREF(code); + Py_DECREF(codeobj); Py_DECREF(qualname); - - if (func == NULL) + 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. */ - Py_DECREF(func); - Py_DECREF(closure); - goto error; - } - Py_DECREF(closure); } - if (num_annotations > 0) { - Py_ssize_t name_ix; - PyObject *names = POP(); /* names of args with annotations */ - PyObject *anns = PyDict_New(); - if (anns == NULL) { - Py_DECREF(func); - Py_DECREF(names); - goto error; - } - name_ix = PyTuple_Size(names); - assert(num_annotations == name_ix+1); - while (name_ix > 0) { - PyObject *name, *value; - int err; - --name_ix; - 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); - Py_DECREF(names); - goto error; - } - } - Py_DECREF(names); - - if (PyFunction_SetAnnotations(func, anns) != 0) { - /* Can't happen unless - PyFunction_SetAnnotations changes. */ - Py_DECREF(anns); - Py_DECREF(func); - goto error; - } - Py_DECREF(anns); + if (oparg & 0x08) { + assert(PyTuple_CheckExact(TOP())); + func ->func_closure = POP(); } - - /* XXX Maybe this should be a separate opcode? */ - if (kwdefaults > 0) { - PyObject *defs = PyDict_New(); - if (defs == NULL) { - Py_DECREF(func); - goto error; - } - 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_SetKwDefaults(func, defs) != 0) { - /* Can't happen unless - PyFunction_SetKwDefaults changes. */ - Py_DECREF(func); - Py_DECREF(defs); - goto error; - } - Py_DECREF(defs); + if (oparg & 0x04) { + assert(PyDict_CheckExact(TOP())); + func->func_annotations = POP(); } - if (posdefaults > 0) { - PyObject *defs = PyTuple_New(posdefaults); - if (defs == NULL) { - Py_DECREF(func); - goto error; - } - while (--posdefaults >= 0) - PyTuple_SET_ITEM(defs, posdefaults, POP()); - if (PyFunction_SetDefaults(func, defs) != 0) { - /* Can't happen unless - PyFunction_SetDefaults changes. */ - Py_DECREF(defs); - Py_DECREF(func); - goto error; - } - Py_DECREF(defs); + if (oparg & 0x02) { + assert(PyDict_CheckExact(TOP())); + func->func_kwdefaults = POP(); } - PUSH(func); + if (oparg & 0x01) { + assert(PyTuple_CheckExact(TOP())); + func->func_defaults = POP(); + } + + PUSH((PyObject *)func); DISPATCH(); } @@ -3419,9 +3376,68 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) DISPATCH(); } + TARGET(FORMAT_VALUE) { + /* Handles f-string value formatting. */ + PyObject *result; + PyObject *fmt_spec; + PyObject *value; + PyObject *(*conv_fn)(PyObject *); + int which_conversion = oparg & FVC_MASK; + int have_fmt_spec = (oparg & FVS_MASK) == FVS_HAVE_SPEC; + + fmt_spec = have_fmt_spec ? POP() : NULL; + value = POP(); + + /* See if any conversion is specified. */ + switch (which_conversion) { + case FVC_STR: conv_fn = PyObject_Str; break; + case FVC_REPR: conv_fn = PyObject_Repr; break; + case FVC_ASCII: conv_fn = PyObject_ASCII; break; + + /* Must be 0 (meaning no conversion), since only four + values are allowed by (oparg & FVC_MASK). */ + default: conv_fn = NULL; break; + } + + /* If there's a conversion function, call it and replace + value with that result. Otherwise, just use value, + without conversion. */ + if (conv_fn != NULL) { + result = conv_fn(value); + Py_DECREF(value); + if (result == NULL) { + Py_XDECREF(fmt_spec); + goto error; + } + value = result; + } + + /* If value is a unicode object, and there's no fmt_spec, + then we know the result of format(value) is value + itself. In that case, skip calling format(). I plan to + move this optimization in to PyObject_Format() + itself. */ + if (PyUnicode_CheckExact(value) && fmt_spec == NULL) { + /* Do nothing, just transfer ownership to result. */ + result = value; + } else { + /* Actually call format(). */ + result = PyObject_Format(value, fmt_spec); + Py_DECREF(value); + Py_XDECREF(fmt_spec); + if (result == NULL) { + goto error; + } + } + + PUSH(result); + DISPATCH(); + } + TARGET(EXTENDED_ARG) { - opcode = NEXTOP(); - oparg = oparg<<16 | NEXTARG(); + int oldoparg = oparg; + NEXTOPARG(); + oparg |= oldoparg << 8; goto dispatch_opcode; } @@ -4297,7 +4313,7 @@ Error: #ifdef LLTRACE static int -prtrace(PyObject *v, char *str) +prtrace(PyObject *v, const char *str) { printf("%s ", str); if (PyObject_Print(v, stdout, 0) != 0) @@ -4863,6 +4879,21 @@ update_star_args(int nstack, int nstar, PyObject *stararg, { PyObject *callargs, *w; + if (!nstack) { + if (!stararg) { + /* There are no positional arguments on the stack and there is no + sequence to be unpacked. */ + return PyTuple_New(0); + } + if (PyTuple_CheckExact(stararg)) { + /* No arguments are passed on the stack and the sequence is not a + tuple subclass so we can just pass the stararg tuple directly + to the function. */ + Py_INCREF(stararg); + return stararg; + } + } + callargs = PyTuple_New(nstack + nstar); if (callargs == NULL) { return NULL; @@ -4951,7 +4982,7 @@ ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk) if (flags & CALL_FLAG_KW) { kwdict = EXT_POP(*pp_stack); - if (!PyDict_Check(kwdict)) { + if (!PyDict_CheckExact(kwdict)) { PyObject *d; d = PyDict_New(); if (d == NULL) @@ -5261,7 +5292,7 @@ format_exc_unbound(PyCodeObject *co, int oparg) static PyObject * unicode_concatenate(PyObject *v, PyObject *w, - PyFrameObject *f, unsigned char *next_instr) + PyFrameObject *f, const unsigned short *next_instr) { PyObject *res; if (Py_REFCNT(v) == 2) { @@ -5271,10 +5302,11 @@ unicode_concatenate(PyObject *v, PyObject *w, * 'variable'. We try to delete the variable now to reduce * the refcnt to 1. */ - switch (*next_instr) { + int opcode, oparg; + NEXTOPARG(); + switch (opcode) { case STORE_FAST: { - int oparg = PEEKARG(); PyObject **fastlocals = f->f_localsplus; if (GETLOCAL(oparg) == v) SETLOCAL(oparg, NULL); @@ -5284,7 +5316,7 @@ unicode_concatenate(PyObject *v, PyObject *w, { PyObject **freevars = (f->f_localsplus + f->f_code->co_nlocals); - PyObject *c = freevars[PEEKARG()]; + PyObject *c = freevars[oparg]; if (PyCell_GET(c) == v) PyCell_Set(c, NULL); break; @@ -5292,7 +5324,7 @@ unicode_concatenate(PyObject *v, PyObject *w, case STORE_NAME: { PyObject *names = f->f_code->co_names; - PyObject *name = GETITEM(names, PEEKARG()); + PyObject *name = GETITEM(names, oparg); PyObject *locals = f->f_locals; if (PyDict_CheckExact(locals) && PyDict_GetItem(locals, name) == v) { diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h index 90995e5..6df3ef5 100644 --- a/Python/clinic/bltinmodule.c.h +++ b/Python/clinic/bltinmodule.c.h @@ -94,8 +94,9 @@ builtin_format(PyModuleDef *module, PyObject *args) PyObject *format_spec = NULL; if (!PyArg_ParseTuple(args, "O|U:format", - &value, &format_spec)) + &value, &format_spec)) { goto exit; + } return_value = builtin_format_impl(module, value, format_spec); exit: @@ -120,8 +121,9 @@ builtin_chr(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; int i; - if (!PyArg_Parse(arg, "i:chr", &i)) + if (!PyArg_Parse(arg, "i:chr", &i)) { goto exit; + } return_value = builtin_chr_impl(module, i); exit: @@ -167,8 +169,9 @@ builtin_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) int optimize = -1; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO&s|iii:compile", _keywords, - &source, PyUnicode_FSDecoder, &filename, &mode, &flags, &dont_inherit, &optimize)) + &source, PyUnicode_FSDecoder, &filename, &mode, &flags, &dont_inherit, &optimize)) { goto exit; + } return_value = builtin_compile_impl(module, source, filename, mode, flags, dont_inherit, optimize); exit: @@ -196,8 +199,9 @@ builtin_divmod(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "divmod", 2, 2, - &x, &y)) + &x, &y)) { goto exit; + } return_value = builtin_divmod_impl(module, x, y); exit: @@ -233,8 +237,9 @@ builtin_eval(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "eval", 1, 3, - &source, &globals, &locals)) + &source, &globals, &locals)) { goto exit; + } return_value = builtin_eval_impl(module, source, globals, locals); exit: @@ -270,8 +275,9 @@ builtin_exec(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "exec", 1, 3, - &source, &globals, &locals)) + &source, &globals, &locals)) { goto exit; + } return_value = builtin_exec_impl(module, source, globals, locals); exit: @@ -322,8 +328,9 @@ builtin_hasattr(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "hasattr", 2, 2, - &obj, &name)) + &obj, &name)) { goto exit; + } return_value = builtin_hasattr_impl(module, obj, name); exit: @@ -367,8 +374,9 @@ builtin_setattr(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "setattr", 3, 3, - &obj, &name, &value)) + &obj, &name, &value)) { goto exit; + } return_value = builtin_setattr_impl(module, obj, name, value); exit: @@ -398,8 +406,9 @@ builtin_delattr(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "delattr", 2, 2, - &obj, &name)) + &obj, &name)) { goto exit; + } return_value = builtin_delattr_impl(module, obj, name); exit: @@ -507,8 +516,9 @@ builtin_pow(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "pow", 2, 3, - &x, &y, &z)) + &x, &y, &z)) { goto exit; + } return_value = builtin_pow_impl(module, x, y, z); exit: @@ -541,8 +551,9 @@ builtin_input(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "input", 0, 1, - &prompt)) + &prompt)) { goto exit; + } return_value = builtin_input_impl(module, prompt); exit: @@ -585,8 +596,9 @@ builtin_sum(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "sum", 1, 2, - &iterable, &start)) + &iterable, &start)) { goto exit; + } return_value = builtin_sum_impl(module, iterable, start); exit: @@ -619,8 +631,9 @@ builtin_isinstance(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "isinstance", 2, 2, - &obj, &class_or_tuple)) + &obj, &class_or_tuple)) { goto exit; + } return_value = builtin_isinstance_impl(module, obj, class_or_tuple); exit: @@ -653,11 +666,12 @@ builtin_issubclass(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "issubclass", 2, 2, - &cls, &class_or_tuple)) + &cls, &class_or_tuple)) { goto exit; + } return_value = builtin_issubclass_impl(module, cls, class_or_tuple); exit: return return_value; } -/*[clinic end generated code: output=4bef16b6aa432879 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=940f25126caf8166 input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h index 2477665..9b9f812 100644 --- a/Python/clinic/import.c.h +++ b/Python/clinic/import.c.h @@ -89,8 +89,9 @@ _imp__fix_co_filename(PyModuleDef *module, PyObject *args) PyObject *path; if (!PyArg_ParseTuple(args, "O!U:_fix_co_filename", - &PyCode_Type, &code, &path)) + &PyCode_Type, &code, &path)) { goto exit; + } return_value = _imp__fix_co_filename_impl(module, code, path); exit: @@ -142,8 +143,9 @@ _imp_init_frozen(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:init_frozen", &name)) + if (!PyArg_Parse(arg, "U:init_frozen", &name)) { goto exit; + } return_value = _imp_init_frozen_impl(module, name); exit: @@ -168,8 +170,9 @@ _imp_get_frozen_object(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:get_frozen_object", &name)) + if (!PyArg_Parse(arg, "U:get_frozen_object", &name)) { goto exit; + } return_value = _imp_get_frozen_object_impl(module, name); exit: @@ -194,8 +197,9 @@ _imp_is_frozen_package(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:is_frozen_package", &name)) + if (!PyArg_Parse(arg, "U:is_frozen_package", &name)) { goto exit; + } return_value = _imp_is_frozen_package_impl(module, name); exit: @@ -220,8 +224,9 @@ _imp_is_builtin(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:is_builtin", &name)) + if (!PyArg_Parse(arg, "U:is_builtin", &name)) { goto exit; + } return_value = _imp_is_builtin_impl(module, name); exit: @@ -246,8 +251,9 @@ _imp_is_frozen(PyModuleDef *module, PyObject *arg) PyObject *return_value = NULL; PyObject *name; - if (!PyArg_Parse(arg, "U:is_frozen", &name)) + if (!PyArg_Parse(arg, "U:is_frozen", &name)) { goto exit; + } return_value = _imp_is_frozen_impl(module, name); exit: @@ -277,8 +283,9 @@ _imp_create_dynamic(PyModuleDef *module, PyObject *args) if (!PyArg_UnpackTuple(args, "create_dynamic", 1, 2, - &spec, &file)) + &spec, &file)) { goto exit; + } return_value = _imp_create_dynamic_impl(module, spec, file); exit: @@ -308,8 +315,9 @@ _imp_exec_dynamic(PyModuleDef *module, PyObject *mod) int _return_value; _return_value = _imp_exec_dynamic_impl(module, mod); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -337,8 +345,9 @@ _imp_exec_builtin(PyModuleDef *module, PyObject *mod) int _return_value; _return_value = _imp_exec_builtin_impl(module, mod); - if ((_return_value == -1) && PyErr_Occurred()) + if ((_return_value == -1) && PyErr_Occurred()) { goto exit; + } return_value = PyLong_FromLong((long)_return_value); exit: @@ -352,4 +361,4 @@ exit: #ifndef _IMP_EXEC_DYNAMIC_METHODDEF #define _IMP_EXEC_DYNAMIC_METHODDEF #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=32324a5e46cdfc4b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=22a7225925755674 input=a9049054013a1b77]*/ diff --git a/Python/compile.c b/Python/compile.c index 0c4a6c8..efb6c7e 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -29,6 +29,7 @@ #include "code.h" #include "symtable.h" #include "opcode.h" +#include "wordcode_helpers.h" #define DEFAULT_BLOCK_SIZE 16 #define DEFAULT_BLOCKS 8 @@ -43,7 +44,6 @@ struct instr { unsigned i_jabs : 1; unsigned i_jrel : 1; - unsigned i_hasarg : 1; unsigned char i_opcode; int i_oparg; struct basicblock_ *i_target; /* target block (if jump instruction) */ @@ -171,7 +171,6 @@ 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, 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 *); static int compiler_nameop(struct compiler *, identifier, expr_context_ty); @@ -196,7 +195,7 @@ static int expr_constant(struct compiler *, expr_ty); static int compiler_with(struct compiler *, stmt_ty, int); static int compiler_async_with(struct compiler *, stmt_ty, int); static int compiler_async_for(struct compiler *, stmt_ty); -static int compiler_call_helper(struct compiler *c, Py_ssize_t n, +static int compiler_call_helper(struct compiler *c, int n, asdl_seq *args, asdl_seq *keywords); static int compiler_try_except(struct compiler *, stmt_ty); @@ -477,9 +476,9 @@ compiler_unit_check(struct compiler_unit *u) { basicblock *block; for (block = u->u_blocks; block != NULL; block = block->b_list) { - assert((void *)block != (void *)0xcbcbcbcb); - assert((void *)block != (void *)0xfbfbfbfb); - assert((void *)block != (void *)0xdbdbdbdb); + assert((Py_uintptr_t)block != 0xcbcbcbcbU); + assert((Py_uintptr_t)block != 0xfbfbfbfbU); + assert((Py_uintptr_t)block != 0xdbdbdbdbU); if (block->b_instr != NULL) { assert(block->b_ialloc > 0); assert(block->b_iused > 0); @@ -523,6 +522,7 @@ compiler_enter_scope(struct compiler *c, identifier name, int scope_type, void *key, int lineno) { struct compiler_unit *u; + basicblock *block; u = (struct compiler_unit *)PyObject_Malloc(sizeof( struct compiler_unit)); @@ -620,8 +620,11 @@ compiler_enter_scope(struct compiler *c, identifier name, c->u = u; c->c_nestlevel++; - if (compiler_use_new_block(c) == NULL) + + block = compiler_new_block(c); + if (block == NULL) return 0; + c->u->u_curblock = block; if (u->u_scope_type != COMPILER_SCOPE_MODULE) { if (!compiler_set_qualname(c)) @@ -731,6 +734,7 @@ compiler_set_qualname(struct compiler *c) return 1; } + /* Allocate a new block and return a pointer to it. Returns NULL on error. */ @@ -755,16 +759,6 @@ compiler_new_block(struct compiler *c) } static basicblock * -compiler_use_new_block(struct compiler *c) -{ - basicblock *block = compiler_new_block(c); - if (block == NULL) - return NULL; - c->u->u_curblock = block; - return block; -} - -static basicblock * compiler_next_block(struct compiler *c) { basicblock *block = compiler_new_block(c); @@ -986,6 +980,8 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) return 1 - (oparg & 0xFF); case BUILD_MAP: return 1 - 2*oparg; + case BUILD_CONST_KEY_MAP: + return -oparg; case LOAD_ATTR: return 0; case COMPARE_OP: @@ -1034,11 +1030,10 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) return -NARGS(oparg)-1; case CALL_FUNCTION_VAR_KW: return -NARGS(oparg)-2; - case MAKE_FUNCTION: - return -1 -NARGS(oparg) - ((oparg >> 16) & 0xffff); - case MAKE_CLOSURE: - return -2 - NARGS(oparg) - ((oparg >> 16) & 0xffff); #undef NARGS + case MAKE_FUNCTION: + return -1 - ((oparg & 0x01) != 0) - ((oparg & 0x02) != 0) - + ((oparg & 0x04) != 0) - ((oparg & 0x08) != 0); case BUILD_SLICE: if (oparg == 3) return -2; @@ -1066,6 +1061,10 @@ PyCompile_OpcodeStackEffect(int opcode, int oparg) return 1; case GET_YIELD_FROM_ITER: return 0; + case FORMAT_VALUE: + /* If there's a fmt_spec on the stack, we go from 2->1, + else 1->1. */ + return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0; default: return PY_INVALID_STACK_EFFECT; } @@ -1082,13 +1081,14 @@ compiler_addop(struct compiler *c, int opcode) basicblock *b; struct instr *i; int off; + assert(!HAS_ARG(opcode)); off = compiler_next_instr(c, c->u->u_curblock); if (off < 0) return 0; b = c->u->u_curblock; i = &b->b_instr[off]; i->i_opcode = opcode; - i->i_hasarg = 0; + i->i_oparg = 0; if (opcode == RETURN_VALUE) b->b_return = 1; compiler_set_lineno(c, off); @@ -1165,10 +1165,15 @@ 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); + /* oparg value is unsigned, but a signed C int is usually used to store + it in the C code (like Python/ceval.c). + + Limit to 32-bit signed C int (rather than INT_MAX) for portability. + + The argument of a concrete bytecode instruction is limited to 8-bit. + EXTENDED_ARG is used for 16, 24, and 32-bit arguments. */ + assert(HAS_ARG(opcode)); + assert(0 <= oparg && oparg <= 2147483647); off = compiler_next_instr(c, c->u->u_curblock); if (off < 0) @@ -1176,7 +1181,6 @@ compiler_addop_i(struct compiler *c, int opcode, Py_ssize_t oparg) i = &c->u->u_curblock->b_instr[off]; i->i_opcode = opcode; i->i_oparg = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int); - i->i_hasarg = 1; compiler_set_lineno(c, off); return 1; } @@ -1187,6 +1191,7 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) struct instr *i; int off; + assert(HAS_ARG(opcode)); assert(b != NULL); off = compiler_next_instr(c, c->u->u_curblock); if (off < 0) @@ -1194,7 +1199,6 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) i = &c->u->u_curblock->b_instr[off]; i->i_opcode = opcode; i->i_target = b; - i->i_hasarg = 1; if (absolute) i->i_jabs = 1; else @@ -1203,22 +1207,12 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) return 1; } -/* The distinction between NEW_BLOCK and NEXT_BLOCK is subtle. (I'd - like to find better names.) NEW_BLOCK() creates a new block and sets - it as the current block. NEXT_BLOCK() also creates an implicit jump - from the current block to the new block. -*/ +/* NEXT_BLOCK() creates an implicit jump from the current block + to the new block. -/* The returns inside these macros make it impossible to decref objects - created in the local function. Local objects should use the arena. + The returns inside this macro make it impossible to decref objects + created in the local function. Local objects should use the arena. */ - - -#define NEW_BLOCK(C) { \ - if (compiler_use_new_block((C)) == NULL) \ - return 0; \ -} - #define NEXT_BLOCK(C) { \ if (compiler_next_block((C)) == NULL) \ return 0; \ @@ -1241,6 +1235,15 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute) return 0; \ } +/* Same as ADDOP_O, but steals a reference. */ +#define ADDOP_N(C, OP, O, TYPE) { \ + if (!compiler_addop_o((C), (OP), (C)->u->u_ ## TYPE, (O))) { \ + Py_DECREF((O)); \ + return 0; \ + } \ + Py_DECREF((O)); \ +} + #define ADDOP_NAME(C, OP, O, TYPE) { \ if (!compiler_addop_name((C), (OP), (C)->u->u_ ## TYPE, (O))) \ return 0; \ @@ -1309,7 +1312,49 @@ compiler_isdocstring(stmt_ty s) { if (s->kind != Expr_kind) return 0; - return s->v.Expr.value->kind == Str_kind; + if (s->v.Expr.value->kind == Str_kind) + return 1; + if (s->v.Expr.value->kind == Constant_kind) + return PyUnicode_CheckExact(s->v.Expr.value->v.Constant.value); + return 0; +} + +static int +is_const(expr_ty e) +{ + switch (e->kind) { + case Constant_kind: + case Num_kind: + case Str_kind: + case Bytes_kind: + case Ellipsis_kind: + case NameConstant_kind: + return 1; + default: + return 0; + } +} + +static PyObject * +get_const_value(expr_ty e) +{ + switch (e->kind) { + case Constant_kind: + return e->v.Constant.value; + case Num_kind: + return e->v.Num.n; + case Str_kind: + return e->v.Str.s; + case Bytes_kind: + return e->v.Bytes.s; + case Ellipsis_kind: + return Py_Ellipsis; + case NameConstant_kind: + return e->v.NameConstant.value; + default: + assert(!is_const(e)); + return NULL; + } } /* Compile a sequence of statements, checking for a docstring. */ @@ -1426,53 +1471,50 @@ compiler_lookup_arg(PyObject *dict, PyObject *name) } static int -compiler_make_closure(struct compiler *c, PyCodeObject *co, Py_ssize_t args, PyObject *qualname) +compiler_make_closure(struct compiler *c, PyCodeObject *co, Py_ssize_t flags, PyObject *qualname) { Py_ssize_t i, free = PyCode_GetNumFree(co); if (qualname == NULL) qualname = co->co_name; - if (free == 0) { - ADDOP_O(c, LOAD_CONST, (PyObject*)co, consts); - ADDOP_O(c, LOAD_CONST, qualname, consts); - ADDOP_I(c, MAKE_FUNCTION, args); - return 1; - } - for (i = 0; i < free; ++i) { - /* Bypass com_addop_varname because it will generate - LOAD_DEREF but LOAD_CLOSURE is needed. - */ - PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i); - int arg, reftype; - - /* Special case: If a class contains a method with a - free variable that has the same name as a method, - the name will be considered free *and* local in the - class. It should be handled by the closure, as - well as by the normal name loookup logic. - */ - reftype = get_ref_type(c, name); - if (reftype == CELL) - arg = compiler_lookup_arg(c->u->u_cellvars, name); - else /* (reftype == FREE) */ - arg = compiler_lookup_arg(c->u->u_freevars, name); - if (arg == -1) { - fprintf(stderr, - "lookup %s in %s %d %d\n" - "freevars of %s: %s\n", - PyUnicode_AsUTF8(PyObject_Repr(name)), - PyUnicode_AsUTF8(c->u->u_name), - reftype, arg, - PyUnicode_AsUTF8(co->co_name), - PyUnicode_AsUTF8(PyObject_Repr(co->co_freevars))); - Py_FatalError("compiler_make_closure()"); + if (free) { + for (i = 0; i < free; ++i) { + /* Bypass com_addop_varname because it will generate + LOAD_DEREF but LOAD_CLOSURE is needed. + */ + PyObject *name = PyTuple_GET_ITEM(co->co_freevars, i); + int arg, reftype; + + /* Special case: If a class contains a method with a + free variable that has the same name as a method, + the name will be considered free *and* local in the + class. It should be handled by the closure, as + well as by the normal name loookup logic. + */ + reftype = get_ref_type(c, name); + if (reftype == CELL) + arg = compiler_lookup_arg(c->u->u_cellvars, name); + else /* (reftype == FREE) */ + arg = compiler_lookup_arg(c->u->u_freevars, name); + if (arg == -1) { + fprintf(stderr, + "lookup %s in %s %d %d\n" + "freevars of %s: %s\n", + PyUnicode_AsUTF8(PyObject_Repr(name)), + PyUnicode_AsUTF8(c->u->u_name), + reftype, arg, + PyUnicode_AsUTF8(co->co_name), + PyUnicode_AsUTF8(PyObject_Repr(co->co_freevars))); + Py_FatalError("compiler_make_closure()"); + } + ADDOP_I(c, LOAD_CLOSURE, arg); } - ADDOP_I(c, LOAD_CLOSURE, arg); + flags |= 0x08; + ADDOP_I(c, BUILD_TUPLE, free); } - ADDOP_I(c, BUILD_TUPLE, free); ADDOP_O(c, LOAD_CONST, (PyObject*)co, consts); ADDOP_O(c, LOAD_CONST, qualname, consts); - ADDOP_I(c, MAKE_CLOSURE, args); + ADDOP_I(c, MAKE_FUNCTION, flags); return 1; } @@ -1490,27 +1532,59 @@ compiler_decorators(struct compiler *c, asdl_seq* decos) return 1; } -static int +static Py_ssize_t compiler_visit_kwonlydefaults(struct compiler *c, asdl_seq *kwonlyargs, asdl_seq *kw_defaults) { - int i, default_count = 0; + int i; + PyObject *keys = NULL; + for (i = 0; i < asdl_seq_LEN(kwonlyargs); i++) { arg_ty arg = asdl_seq_GET(kwonlyargs, i); expr_ty default_ = asdl_seq_GET(kw_defaults, i); if (default_) { PyObject *mangled = _Py_Mangle(c->u->u_private, arg->arg); - if (!mangled) - return -1; - ADDOP_O(c, LOAD_CONST, mangled, consts); - Py_DECREF(mangled); + if (!mangled) { + goto error; + } + if (keys == NULL) { + keys = PyList_New(1); + if (keys == NULL) { + Py_DECREF(mangled); + return -1; + } + PyList_SET_ITEM(keys, 0, mangled); + } + else { + int res = PyList_Append(keys, mangled); + Py_DECREF(mangled); + if (res == -1) { + goto error; + } + } if (!compiler_visit_expr(c, default_)) { - return -1; + goto error; } - default_count++; } } - return default_count; + if (keys != NULL) { + Py_ssize_t default_count = PyList_GET_SIZE(keys); + PyObject *keys_tuple = PyList_AsTuple(keys); + Py_DECREF(keys); + if (keys_tuple == NULL) { + return -1; + } + ADDOP_N(c, LOAD_CONST, keys_tuple, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, default_count); + return default_count; + } + else { + return 0; + } + +error: + Py_XDECREF(keys); + return -1; } static int @@ -1549,15 +1623,14 @@ compiler_visit_argannotations(struct compiler *c, asdl_seq* args, return 1; } -static int +static Py_ssize_t compiler_visit_annotations(struct compiler *c, arguments_ty args, expr_ty returns) { - /* Push arg annotations and a list of the argument names. Return the # - of items pushed. The expressions are evaluated out-of-order wrt the - source code. + /* Push arg annotation dict. Return # of items pushed. + The expressions are evaluated out-of-order wrt the source code. - More than 2^16-1 annotations is a SyntaxError. Returns -1 on error. + Returns -1 on error. */ static identifier return_str; PyObject *names; @@ -1589,38 +1662,47 @@ compiler_visit_annotations(struct compiler *c, arguments_ty args, } len = PyList_GET_SIZE(names); - if (len > 65534) { - /* len must fit in 16 bits, and len is incremented below */ - PyErr_SetString(PyExc_SyntaxError, - "too many annotations"); - goto error; - } if (len) { - /* convert names to a tuple and place on stack */ - PyObject *elt; - Py_ssize_t i; - PyObject *s = PyTuple_New(len); - if (!s) - goto error; - for (i = 0; i < len; i++) { - elt = PyList_GET_ITEM(names, i); - Py_INCREF(elt); - PyTuple_SET_ITEM(s, i, elt); + PyObject *keytuple = PyList_AsTuple(names); + Py_DECREF(names); + if (keytuple == NULL) { + return -1; } - ADDOP_O(c, LOAD_CONST, s, consts); - Py_DECREF(s); - len++; /* include the just-pushed tuple */ + ADDOP_N(c, LOAD_CONST, keytuple, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, len); } - Py_DECREF(names); - - /* We just checked that len <= 65535, see above */ - return Py_SAFE_DOWNCAST(len, Py_ssize_t, int); + else { + Py_DECREF(names); + } + return len; error: Py_DECREF(names); return -1; } +static Py_ssize_t +compiler_default_arguments(struct compiler *c, arguments_ty args) +{ + Py_ssize_t funcflags = 0; + if (args->defaults && asdl_seq_LEN(args->defaults) > 0) { + VISIT_SEQ(c, expr, args->defaults); + ADDOP_I(c, BUILD_TUPLE, asdl_seq_LEN(args->defaults)); + funcflags |= 0x01; + } + if (args->kwonlyargs) { + Py_ssize_t res = compiler_visit_kwonlydefaults(c, args->kwonlyargs, + args->kw_defaults); + if (res < 0) { + return -1; + } + else if (res > 0) { + funcflags |= 0x02; + } + } + return funcflags; +} + static int compiler_function(struct compiler *c, stmt_ty s, int is_async) { @@ -1632,12 +1714,11 @@ compiler_function(struct compiler *c, stmt_ty s, int is_async) asdl_seq* decos; asdl_seq *body; stmt_ty st; - Py_ssize_t i, n, arglength; - int docstring, kw_default_count = 0; + Py_ssize_t i, n, funcflags; + int docstring; int num_annotations; int scope_type; - if (is_async) { assert(s->kind == AsyncFunctionDef_kind); @@ -1662,29 +1743,32 @@ compiler_function(struct compiler *c, stmt_ty s, int is_async) 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); - if (res < 0) - return 0; - kw_default_count = res; + + funcflags = compiler_default_arguments(c, args); + if (funcflags == -1) { + return 0; } + num_annotations = compiler_visit_annotations(c, args, returns); - if (num_annotations < 0) + if (num_annotations < 0) { return 0; - assert((num_annotations & 0xFFFF) == num_annotations); + } + else if (num_annotations > 0) { + funcflags |= 0x04; + } - if (!compiler_enter_scope(c, name, - scope_type, (void *)s, - s->lineno)) + if (!compiler_enter_scope(c, name, scope_type, (void *)s, s->lineno)) { return 0; + } st = (stmt_ty)asdl_seq_GET(body, 0); docstring = compiler_isdocstring(st); - if (docstring && c->c_optimize < 2) - first_const = st->v.Expr.value->v.Str.s; + if (docstring && c->c_optimize < 2) { + if (st->v.Expr.value->kind == Constant_kind) + first_const = st->v.Expr.value->v.Constant.value; + else + first_const = st->v.Expr.value->v.Str.s; + } if (compiler_add_o(c, c->u->u_consts, first_const) < 0) { compiler_exit_scope(c); return 0; @@ -1708,12 +1792,9 @@ compiler_function(struct compiler *c, stmt_ty s, int is_async) return 0; } - arglength = asdl_seq_LEN(args->defaults); - arglength |= kw_default_count << 8; - arglength |= num_annotations << 16; if (is_async) co->co_flags |= CO_COROUTINE; - compiler_make_closure(c, co, arglength, qualname); + compiler_make_closure(c, co, funcflags, qualname); Py_DECREF(qualname); Py_DECREF(co); @@ -1873,8 +1954,7 @@ compiler_lambda(struct compiler *c, expr_ty e) PyCodeObject *co; PyObject *qualname; static identifier name; - int kw_default_count = 0; - Py_ssize_t arglength; + Py_ssize_t funcflags; arguments_ty args = e->v.Lambda.args; assert(e->kind == Lambda_kind); @@ -1884,14 +1964,11 @@ 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; + funcflags = compiler_default_arguments(c, args); + if (funcflags == -1) { + return 0; } + if (!compiler_enter_scope(c, name, COMPILER_SCOPE_LAMBDA, (void *)e, e->lineno)) return 0; @@ -1917,9 +1994,7 @@ compiler_lambda(struct compiler *c, expr_ty e) if (co == NULL) return 0; - arglength = asdl_seq_LEN(args->defaults); - arglength |= kw_default_count << 8; - compiler_make_closure(c, co, arglength, qualname); + compiler_make_closure(c, co, funcflags, qualname); Py_DECREF(qualname); Py_DECREF(co); @@ -2595,6 +2670,25 @@ compiler_assert(struct compiler *c, stmt_ty s) } static int +compiler_visit_stmt_expr(struct compiler *c, expr_ty value) +{ + if (c->c_interactive && c->c_nestlevel <= 1) { + VISIT(c, expr, value); + ADDOP(c, PRINT_EXPR); + return 1; + } + + if (is_const(value)) { + /* ignore constant statement */ + return 1; + } + + VISIT(c, expr, value); + ADDOP(c, POP_TOP); + return 1; +} + +static int compiler_visit_stmt(struct compiler *c, stmt_ty s) { Py_ssize_t i, n; @@ -2664,16 +2758,7 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s) case Nonlocal_kind: break; case Expr_kind: - if (c->c_interactive && c->c_nestlevel <= 1) { - VISIT(c, expr, s->v.Expr.value); - ADDOP(c, PRINT_EXPR); - } - else if (s->v.Expr.value->kind != Str_kind && - s->v.Expr.value->kind != Num_kind) { - VISIT(c, expr, s->v.Expr.value); - ADDOP(c, POP_TOP); - } - break; + return compiler_visit_stmt_expr(c, s->v.Expr.value); case Pass_kind: break; case Break_kind: @@ -3075,9 +3160,53 @@ compiler_set(struct compiler *c, expr_ty e) } static int +are_all_items_const(asdl_seq *seq, Py_ssize_t begin, Py_ssize_t end) +{ + Py_ssize_t i; + for (i = begin; i < end; i++) { + expr_ty key = (expr_ty)asdl_seq_GET(seq, i); + if (key == NULL || !is_const(key)) + return 0; + } + return 1; +} + +static int +compiler_subdict(struct compiler *c, expr_ty e, Py_ssize_t begin, Py_ssize_t end) +{ + Py_ssize_t i, n = end - begin; + PyObject *keys, *key; + if (n > 1 && are_all_items_const(e->v.Dict.keys, begin, end)) { + for (i = begin; i < end; i++) { + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); + } + keys = PyTuple_New(n); + if (keys == NULL) { + return 0; + } + for (i = begin; i < end; i++) { + key = get_const_value((expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); + Py_INCREF(key); + PyTuple_SET_ITEM(keys, i - begin, key); + } + ADDOP_N(c, LOAD_CONST, keys, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, n); + } + else { + for (i = begin; i < end; i++) { + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); + VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); + } + ADDOP_I(c, BUILD_MAP, n); + } + return 1; +} + +static int compiler_dict(struct compiler *c, expr_ty e) { - Py_ssize_t i, n, containers, elements; + Py_ssize_t i, n, elements; + int containers; int is_unpacking = 0; n = asdl_seq_LEN(e->v.Dict.values); containers = 0; @@ -3085,7 +3214,8 @@ compiler_dict(struct compiler *c, expr_ty e) for (i = 0; i < n; i++) { is_unpacking = (expr_ty)asdl_seq_GET(e->v.Dict.keys, i) == NULL; if (elements == 0xFFFF || (elements && is_unpacking)) { - ADDOP_I(c, BUILD_MAP, elements); + if (!compiler_subdict(c, e, i - elements, i)) + return 0; containers++; elements = 0; } @@ -3094,13 +3224,12 @@ compiler_dict(struct compiler *c, expr_ty e) containers++; } else { - VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); - VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); elements++; } } if (elements || containers == 0) { - ADDOP_I(c, BUILD_MAP, elements); + if (!compiler_subdict(c, e, n - elements, n)) + return 0; containers++; } /* If there is more than one dict, they need to be merged into a new @@ -3169,15 +3298,127 @@ compiler_call(struct compiler *c, expr_ty e) e->v.Call.keywords); } +static int +compiler_joined_str(struct compiler *c, expr_ty e) +{ + /* Concatenate parts of a string using ''.join(parts). There are + probably better ways of doing this. + + This is used for constructs like "'x=' f'{42}'", which have to + be evaluated at compile time. */ + + static PyObject *empty_string; + static PyObject *join_string; + + if (!empty_string) { + empty_string = PyUnicode_FromString(""); + if (!empty_string) + return 0; + } + if (!join_string) { + join_string = PyUnicode_FromString("join"); + if (!join_string) + return 0; + } + + ADDOP_O(c, LOAD_CONST, empty_string, consts); + ADDOP_NAME(c, LOAD_ATTR, join_string, names); + VISIT_SEQ(c, expr, e->v.JoinedStr.values); + ADDOP_I(c, BUILD_LIST, asdl_seq_LEN(e->v.JoinedStr.values)); + ADDOP_I(c, CALL_FUNCTION, 1); + return 1; +} + +/* Used to implement f-strings. Format a single value. */ +static int +compiler_formatted_value(struct compiler *c, expr_ty e) +{ + /* Our oparg encodes 2 pieces of information: the conversion + character, and whether or not a format_spec was provided. + + Convert the conversion char to 2 bits: + None: 000 0x0 FVC_NONE + !s : 001 0x1 FVC_STR + !r : 010 0x2 FVC_REPR + !a : 011 0x3 FVC_ASCII + + next bit is whether or not we have a format spec: + yes : 100 0x4 + no : 000 0x0 + */ + + int oparg; + + /* Evaluate the expression to be formatted. */ + VISIT(c, expr, e->v.FormattedValue.value); + + switch (e->v.FormattedValue.conversion) { + case 's': oparg = FVC_STR; break; + case 'r': oparg = FVC_REPR; break; + case 'a': oparg = FVC_ASCII; break; + case -1: oparg = FVC_NONE; break; + default: + PyErr_SetString(PyExc_SystemError, + "Unrecognized conversion character"); + return 0; + } + if (e->v.FormattedValue.format_spec) { + /* Evaluate the format spec, and update our opcode arg. */ + VISIT(c, expr, e->v.FormattedValue.format_spec); + oparg |= FVS_HAVE_SPEC; + } + + /* And push our opcode and oparg */ + ADDOP_I(c, FORMAT_VALUE, oparg); + return 1; +} + +static int +compiler_subkwargs(struct compiler *c, asdl_seq *keywords, Py_ssize_t begin, Py_ssize_t end) +{ + Py_ssize_t i, n = end - begin; + keyword_ty kw; + PyObject *keys, *key; + assert(n > 0); + if (n > 1) { + for (i = begin; i < end; i++) { + kw = asdl_seq_GET(keywords, i); + VISIT(c, expr, kw->value); + } + keys = PyTuple_New(n); + if (keys == NULL) { + return 0; + } + for (i = begin; i < end; i++) { + key = ((keyword_ty) asdl_seq_GET(keywords, i))->arg; + Py_INCREF(key); + PyTuple_SET_ITEM(keys, i - begin, key); + } + ADDOP_N(c, LOAD_CONST, keys, consts); + ADDOP_I(c, BUILD_CONST_KEY_MAP, n); + } + else { + /* a for loop only executes once */ + for (i = begin; i < end; i++) { + kw = asdl_seq_GET(keywords, i); + ADDOP_O(c, LOAD_CONST, kw->arg, consts); + VISIT(c, expr, kw->value); + } + ADDOP_I(c, BUILD_MAP, n); + } + return 1; +} + /* shared code between compiler_call and compiler_class */ static int compiler_call_helper(struct compiler *c, - Py_ssize_t n, /* Args already pushed */ + int n, /* Args already pushed */ asdl_seq *args, asdl_seq *keywords) { int code = 0; - Py_ssize_t nelts, i, nseen, nkw; + Py_ssize_t nelts, i, nseen; + int nkw; /* the number of tuples and dictionaries on the stack */ Py_ssize_t nsubargs = 0, nsubkwargs = 0; @@ -3234,29 +3475,38 @@ compiler_call_helper(struct compiler *c, if (kw->arg == NULL) { /* A keyword argument unpacking. */ if (nseen) { - ADDOP_I(c, BUILD_MAP, nseen); + if (nsubkwargs) { + if (!compiler_subkwargs(c, keywords, i - nseen, i)) + return 0; + nsubkwargs++; + } + else { + Py_ssize_t j; + for (j = 0; j < nseen; j++) { + VISIT(c, keyword, asdl_seq_GET(keywords, j)); + } + nkw = nseen; + } nseen = 0; - nsubkwargs++; } VISIT(c, expr, kw->value); nsubkwargs++; } - else if (nsubkwargs) { - /* A keyword argument and we already have a dict. */ - ADDOP_O(c, LOAD_CONST, kw->arg, consts); - VISIT(c, expr, kw->value); - nseen++; - } else { - /* keyword argument */ - VISIT(c, keyword, kw) - nkw++; + nseen++; } } if (nseen) { - /* Pack up any trailing keyword arguments. */ - ADDOP_I(c, BUILD_MAP, nseen); - nsubkwargs++; + if (nsubkwargs) { + /* Pack up any trailing keyword arguments. */ + if (!compiler_subkwargs(c, keywords, nelts - nseen, nelts)) + return 0; + nsubkwargs++; + } + else { + VISIT_SEQ(c, keyword, keywords); + nkw = nseen; + } } if (nsubkwargs) { code |= 2; @@ -3545,6 +3795,8 @@ expr_constant(struct compiler *c, expr_ty e) switch (e->kind) { case Ellipsis_kind: return 1; + case Constant_kind: + return PyObject_IsTrue(e->v.Constant.value); case Num_kind: return PyObject_IsTrue(e->v.Num.n); case Str_kind: @@ -3588,9 +3840,9 @@ expr_constant(struct compiler *c, expr_ty e) BLOCK finally: if an exception was raised: - exc = copy of (exception, instance, traceback) + exc = copy of (exception, instance, traceback) else: - exc = (None, None, None) + exc = (None, None, None) if not (await exit(*exc)): raise */ @@ -3832,12 +4084,19 @@ compiler_visit_expr(struct compiler *c, expr_ty e) return compiler_compare(c, e); case Call_kind: return compiler_call(c, e); + case Constant_kind: + ADDOP_O(c, LOAD_CONST, e->v.Constant.value, consts); + break; case Num_kind: ADDOP_O(c, LOAD_CONST, e->v.Num.n, consts); break; case Str_kind: ADDOP_O(c, LOAD_CONST, e->v.Str.s, consts); break; + case JoinedStr_kind: + return compiler_joined_str(c, e); + case FormattedValue_kind: + return compiler_formatted_value(c, e); case Bytes_kind: ADDOP_O(c, LOAD_CONST, e->v.Bytes.s, consts); break; @@ -4291,18 +4550,6 @@ assemble_free(struct assembler *a) PyObject_Free(a->a_postorder); } -/* Return the size of a basic block in bytes. */ - -static int -instrsize(struct instr *instr) -{ - if (!instr->i_hasarg) - return 1; /* 1 byte for the opcode*/ - if (instr->i_oparg > 0xffff) - return 6; /* 1 (opcode) + 1 (EXTENDED_ARG opcode) + 2 (oparg) + 2(oparg extended) */ - return 3; /* 1 (opcode) + 2 (oparg) */ -} - static int blocksize(basicblock *b) { @@ -4310,7 +4557,7 @@ blocksize(basicblock *b) int size = 0; for (i = 0; i < b->b_iused; i++) - size += instrsize(&b->b_instr[i]); + size += instrsize(b->b_instr[i].i_oparg); return size; } @@ -4329,7 +4576,6 @@ assemble_lnotab(struct assembler *a, struct instr *i) d_lineno = i->i_lineno - a->a_lineno; assert(d_bytecode >= 0); - assert(d_lineno >= 0); if(d_bytecode == 0 && d_lineno == 0) return 1; @@ -4359,9 +4605,21 @@ assemble_lnotab(struct assembler *a, struct instr *i) d_bytecode -= ncodes * 255; a->a_lnotab_off += ncodes * 2; } - assert(d_bytecode <= 255); - if (d_lineno > 255) { - int j, nbytes, ncodes = d_lineno / 255; + assert(0 <= d_bytecode && d_bytecode <= 255); + + if (d_lineno < -128 || 127 < d_lineno) { + int j, nbytes, ncodes, k; + if (d_lineno < 0) { + k = -128; + /* use division on positive numbers */ + ncodes = (-d_lineno) / 128; + } + else { + k = 127; + ncodes = d_lineno / 127; + } + d_lineno -= ncodes * k; + assert(ncodes >= 1); nbytes = a->a_lnotab_off + 2 * ncodes; len = PyBytes_GET_SIZE(a->a_lnotab); if (nbytes >= len) { @@ -4379,15 +4637,15 @@ assemble_lnotab(struct assembler *a, struct instr *i) lnotab = (unsigned char *) PyBytes_AS_STRING(a->a_lnotab) + a->a_lnotab_off; *lnotab++ = d_bytecode; - *lnotab++ = 255; + *lnotab++ = k; d_bytecode = 0; for (j = 1; j < ncodes; j++) { *lnotab++ = 0; - *lnotab++ = 255; + *lnotab++ = k; } - d_lineno -= ncodes * 255; a->a_lnotab_off += ncodes * 2; } + assert(-128 <= d_lineno && d_lineno <= 127); len = PyBytes_GET_SIZE(a->a_lnotab); if (a->a_lnotab_off + 2 >= len) { @@ -4419,15 +4677,12 @@ assemble_lnotab(struct assembler *a, struct instr *i) static int assemble_emit(struct assembler *a, struct instr *i) { - int size, arg = 0, ext = 0; + int size, arg = 0; Py_ssize_t len = PyBytes_GET_SIZE(a->a_bytecode); char *code; - size = instrsize(i); - if (i->i_hasarg) { - arg = i->i_oparg; - ext = arg >> 16; - } + arg = i->i_oparg; + size = instrsize(arg); if (i->i_lineno && !assemble_lnotab(a, i)) return 0; if (a->a_offset + size >= len) { @@ -4438,19 +4693,7 @@ assemble_emit(struct assembler *a, struct instr *i) } code = PyBytes_AS_STRING(a->a_bytecode) + a->a_offset; a->a_offset += size; - if (size == 6) { - assert(i->i_hasarg); - *code++ = (char)EXTENDED_ARG; - *code++ = ext & 0xff; - *code++ = ext >> 8; - arg &= 0xffff; - } - *code++ = i->i_opcode; - if (i->i_hasarg) { - assert(size == 3 || size == 6); - *code++ = arg & 0xff; - *code++ = arg >> 8; - } + write_op_arg((unsigned char*)code, i->i_opcode, arg, size); return 1; } @@ -4458,7 +4701,7 @@ static void assemble_jump_offsets(struct assembler *a, struct compiler *c) { basicblock *b; - int bsize, totsize, extended_arg_count = 0, last_extended_arg_count; + int bsize, totsize, extended_arg_recompile; int i; /* Compute the size of each block and fixup jump args. @@ -4471,27 +4714,26 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) b->b_offset = totsize; totsize += bsize; } - last_extended_arg_count = extended_arg_count; - extended_arg_count = 0; + extended_arg_recompile = 0; for (b = c->u->u_blocks; b != NULL; b = b->b_list) { bsize = b->b_offset; for (i = 0; i < b->b_iused; i++) { struct instr *instr = &b->b_instr[i]; + int isize = instrsize(instr->i_oparg); /* Relative jumps are computed relative to the instruction pointer after fetching the jump instruction. */ - bsize += instrsize(instr); - if (instr->i_jabs) + bsize += isize; + if (instr->i_jabs || instr->i_jrel) { instr->i_oparg = instr->i_target->b_offset; - else if (instr->i_jrel) { - int delta = instr->i_target->b_offset - bsize; - instr->i_oparg = delta; + if (instr->i_jrel) { + instr->i_oparg -= bsize; + } + if (instrsize(instr->i_oparg) != isize) { + extended_arg_recompile = 1; + } } - else - continue; - if (instr->i_oparg > 0xffff) - extended_arg_count++; } } @@ -4501,7 +4743,7 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) The issue is that in the first loop blocksize() is called which calls instrsize() which requires i_oparg be set - appropriately. There is a bootstrap problem because + appropriately. There is a bootstrap problem because i_oparg is calculated in the second loop above. So we loop until we stop seeing new EXTENDED_ARGs. @@ -4509,7 +4751,7 @@ assemble_jump_offsets(struct assembler *a, struct compiler *c) ones in jump instructions. So this should converge fairly quickly. */ - } while (last_extended_arg_count != extended_arg_count); + } while (extended_arg_recompile); } static PyObject * @@ -4655,9 +4897,9 @@ dump_instr(const struct instr *i) char arg[128]; *arg = '\0'; - if (i->i_hasarg) + if (HAS_ARG(i->i_opcode)) { sprintf(arg, "arg: %d ", i->i_oparg); - + } fprintf(stderr, "line: %d, opcode: %d %s%s%s\n", i->i_lineno, i->i_opcode, arg, jabs, jrel); } @@ -4745,4 +4987,3 @@ PyAST_Compile(mod_ty mod, const char *filename, PyCompilerFlags *flags, { return PyAST_CompileEx(mod, filename, flags, -1, arena); } - diff --git a/Python/dtoa.c b/Python/dtoa.c index 3da546e..e0665b6 100644 --- a/Python/dtoa.c +++ b/Python/dtoa.c @@ -747,7 +747,7 @@ pow5mult(Bigint *b, int k) { Bigint *b1, *p5, *p51; int i; - static int p05[3] = { 5, 25, 125 }; + static const int p05[3] = { 5, 25, 125 }; if ((i = k & 3)) { b = multadd(b, p05[i-1], 0); @@ -803,7 +803,7 @@ pow5mult(Bigint *b, int k) { Bigint *b1, *p5, *p51; int i; - static int p05[3] = { 5, 25, 125 }; + static const int p05[3] = { 5, 25, 125 }; if ((i = k & 3)) { b = multadd(b, p05[i-1], 0); @@ -2315,7 +2315,7 @@ rv_alloc(int i) } static char * -nrv_alloc(char *s, char **rve, int n) +nrv_alloc(const char *s, char **rve, int n) { char *rv, *t; diff --git a/Python/dynload_win.c b/Python/dynload_win.c index f2c796e..05050cf 100644 --- a/Python/dynload_win.c +++ b/Python/dynload_win.c @@ -24,12 +24,10 @@ void _Py_DeactivateActCtx(ULONG_PTR cookie); #define PYD_DEBUG_SUFFIX "" #endif -#define STRINGIZE2(x) #x -#define STRINGIZE(x) STRINGIZE2(x) #ifdef PYD_PLATFORM_TAG -#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" STRINGIZE(PY_MAJOR_VERSION) STRINGIZE(PY_MINOR_VERSION) "-" PYD_PLATFORM_TAG ".pyd" +#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) "-" PYD_PLATFORM_TAG ".pyd" #else -#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" STRINGIZE(PY_MAJOR_VERSION) STRINGIZE(PY_MINOR_VERSION) ".pyd" +#define PYD_TAGGED_SUFFIX PYD_DEBUG_SUFFIX ".cp" Py_STRINGIFY(PY_MAJOR_VERSION) Py_STRINGIFY(PY_MINOR_VERSION) ".pyd" #endif #define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd" @@ -43,7 +41,7 @@ const char *_PyImport_DynLoadFiletab[] = { /* Case insensitive string compare, to avoid any dependencies on particular C RTL implementations */ -static int strcasecmp (char *string1, char *string2) +static int strcasecmp (const char *string1, const char *string2) { int first, second; diff --git a/Python/fileutils.c b/Python/fileutils.c index 23eed71..06531d9 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -683,6 +683,10 @@ _Py_fstat(int fd, struct _Py_stat_struct *status) { int res; +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + Py_BEGIN_ALLOW_THREADS res = _Py_fstat_noraise(fd, status); Py_END_ALLOW_THREADS @@ -794,7 +798,7 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) int request; int err; #endif - int flags; + int flags, new_flags; int res; #endif @@ -885,10 +889,18 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works) return -1; } - if (inheritable) - flags &= ~FD_CLOEXEC; - else - flags |= FD_CLOEXEC; + if (inheritable) { + new_flags = flags & ~FD_CLOEXEC; + } + else { + new_flags = flags | FD_CLOEXEC; + } + + if (new_flags == flags) { + /* FD_CLOEXEC flag already set/cleared: nothing to do */ + return 0; + } + res = fcntl(fd, F_SETFD, flags); if (res < 0) { if (raise) @@ -1169,6 +1181,10 @@ _Py_read(int fd, void *buf, size_t count) int err; int async_err = 0; +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + /* _Py_read() must not be called with an exception set, otherwise the * caller may think that read() was interrupted by a signal and the signal * handler raised an exception. */ @@ -1324,6 +1340,10 @@ _Py_write_impl(int fd, const void *buf, size_t count, int gil_held) Py_ssize_t _Py_write(int fd, const void *buf, size_t count) { +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + /* _Py_write() must not be called with an exception set, otherwise the * caller may think that write() was interrupted by a signal and the signal * handler raised an exception. */ @@ -1473,6 +1493,10 @@ _Py_dup(int fd) DWORD ftype; #endif +#ifdef WITH_THREAD + assert(PyGILState_Check()); +#endif + if (!_PyVerify_fd(fd)) { PyErr_SetFromErrno(PyExc_OSError); return -1; diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index 8e9c502..d573288 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -656,7 +656,7 @@ fill_number(_PyUnicodeWriter *writer, const NumberFieldWidths *spec, return 0; } -static char no_grouping[1] = {CHAR_MAX}; +static const char no_grouping[1] = {CHAR_MAX}; /* Find the decimal point character(s?), thousands_separator(s?), and grouping description, either for the current locale if type is diff --git a/Python/frozen.c b/Python/frozen.c index 676f395..7e04f3c 100644 --- a/Python/frozen.c +++ b/Python/frozen.c @@ -14,17 +14,15 @@ the appropriate bytes from M___main__.c. */ static unsigned char M___hello__[] = { - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,20,0,0,0,100,2,0,90,1,0, - 101,2,0,100,0,0,131,1,0,1,100,1,0,83,40,3, - 0,0,0,117,12,0,0,0,72,101,108,108,111,32,119,111, - 114,108,100,33,78,84,40,3,0,0,0,117,4,0,0,0, - 84,114,117,101,117,11,0,0,0,105,110,105,116,105,97,108, - 105,122,101,100,117,5,0,0,0,112,114,105,110,116,40,0, - 0,0,0,40,0,0,0,0,40,0,0,0,0,117,7,0, - 0,0,102,108,97,103,46,112,121,117,8,0,0,0,60,109, - 111,100,117,108,101,62,1,0,0,0,115,2,0,0,0,6, - 1, + 227,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,64,0,0,0,115,16,0,0,0,100,0,90,0,101,1, + 100,1,131,1,1,0,100,2,83,0,41,3,84,122,12,72, + 101,108,108,111,32,119,111,114,108,100,33,78,41,2,218,11, + 105,110,105,116,105,97,108,105,122,101,100,218,5,112,114,105, + 110,116,169,0,114,3,0,0,0,114,3,0,0,0,250,22, + 46,47,84,111,111,108,115,47,102,114,101,101,122,101,47,102, + 108,97,103,46,112,121,218,8,60,109,111,100,117,108,101,62, + 1,0,0,0,115,2,0,0,0,4,1, }; #define SIZE (int)sizeof(M___hello__) diff --git a/Python/frozenmain.c b/Python/frozenmain.c index de8bd35..769b33d 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -99,7 +99,9 @@ Py_FrozenMain(int argc, char **argv) #ifdef MS_WINDOWS PyWinFreeze_ExeTerm(); #endif - Py_Finalize(); + if (Py_FinalizeEx() < 0) { + sts = 120; + } error: PyMem_RawFree(argv_copy); diff --git a/Python/future.c b/Python/future.c index 163f87f..75f2107 100644 --- a/Python/future.c +++ b/Python/future.c @@ -79,7 +79,10 @@ future_parse(PyFutureFeatures *ff, mod_ty mod, PyObject *filename) 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) + if (first->kind == Expr_kind + && (first->v.Expr.value->kind == Str_kind + || (first->v.Expr.value->kind == Constant_kind + && PyUnicode_CheckExact(first->v.Expr.value->v.Constant.value)))) i++; diff --git a/Python/getargs.c b/Python/getargs.c index 8aab067..4418ebb 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -20,12 +20,12 @@ int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, #ifdef HAVE_DECLSPEC_DLL /* Export functions */ -PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, char *, ...); -PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, char *, ...); +PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, const char *, ...); +PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, const char *, ...); PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywords_SizeT(PyObject *, PyObject *, const char *, char **, ...); PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); -PyAPI_FUNC(int) _PyArg_VaParse_SizeT(PyObject *, char *, va_list); +PyAPI_FUNC(int) _PyArg_VaParse_SizeT(PyObject *, const char *, va_list); PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *, PyObject *, const char *, char **, va_list); #endif @@ -56,18 +56,18 @@ typedef struct { /* Forward */ static int vgetargs1(PyObject *, const char *, va_list *, int); 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, - int *, char *, size_t, int, freelist_t *); -static char *convertsimple(PyObject *, const char **, va_list *, int, char *, - size_t, freelist_t *); -static Py_ssize_t convertbuffer(PyObject *, void **p, char **); -static int getbuffer(PyObject *, Py_buffer *, char**); +static const char *convertitem(PyObject *, const char **, va_list *, int, int *, + char *, size_t, freelist_t *); +static const char *converttuple(PyObject *, const char **, va_list *, int, + int *, char *, size_t, int, freelist_t *); +static const char *convertsimple(PyObject *, const char **, va_list *, int, + char *, size_t, freelist_t *); +static Py_ssize_t convertbuffer(PyObject *, void **p, const char **); +static int getbuffer(PyObject *, Py_buffer *, const char**); static int vgetargskeywords(PyObject *, PyObject *, const char *, char **, va_list *, int); -static char *skipitem(const char **, va_list *, int); +static const char *skipitem(const char **, va_list *, int); int PyArg_Parse(PyObject *args, const char *format, ...) @@ -82,7 +82,7 @@ PyArg_Parse(PyObject *args, const char *format, ...) } int -_PyArg_Parse_SizeT(PyObject *args, char *format, ...) +_PyArg_Parse_SizeT(PyObject *args, const char *format, ...) { int retval; va_list va; @@ -107,7 +107,7 @@ PyArg_ParseTuple(PyObject *args, const char *format, ...) } int -_PyArg_ParseTuple_SizeT(PyObject *args, char *format, ...) +_PyArg_ParseTuple_SizeT(PyObject *args, const char *format, ...) { int retval; va_list va; @@ -130,7 +130,7 @@ PyArg_VaParse(PyObject *args, const char *format, va_list va) } int -_PyArg_VaParse_SizeT(PyObject *args, char *format, va_list va) +_PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va) { va_list lva; @@ -208,7 +208,7 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags) int endfmt = 0; const char *formatsave = format; Py_ssize_t i, len; - char *msg; + const char *msg; int compat = flags & FLAG_COMPAT; freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; freelist_t freelist; @@ -394,7 +394,12 @@ seterror(Py_ssize_t iarg, const char *msg, int *levels, const char *fname, PyOS_snprintf(p, sizeof(buf) - (p - buf), " %.256s", msg); message = buf; } - PyErr_SetString(PyExc_TypeError, message); + if (msg[0] == '(') { + PyErr_SetString(PyExc_SystemError, message); + } + else { + PyErr_SetString(PyExc_TypeError, message); + } } @@ -416,7 +421,7 @@ seterror(Py_ssize_t iarg, const char *msg, int *levels, const char *fname, and msgbuf is returned. */ -static char * +static const char * converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, int *levels, char *msgbuf, size_t bufsize, int toplevel, freelist_t *freelist) @@ -474,7 +479,7 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, format = *p_format; for (i = 0; i < n; i++) { - char *msg; + const char *msg; PyObject *item; item = PySequence_GetItem(arg, i); if (item == NULL) { @@ -501,11 +506,11 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags, /* Convert a single item. */ -static char * +static const char * convertitem(PyObject *arg, const char **p_format, va_list *p_va, int flags, int *levels, char *msgbuf, size_t bufsize, freelist_t *freelist) { - char *msg; + const char *msg; const char *format = *p_format; if (*format == '(' /* ')' */) { @@ -530,7 +535,7 @@ convertitem(PyObject *arg, const char **p_format, va_list *p_va, int flags, /* Format an error message generated by convertsimple(). */ -static char * +static const char * converterr(const char *expected, PyObject *arg, char *msgbuf, size_t bufsize) { assert(expected != NULL); @@ -572,7 +577,7 @@ float_argument_error(PyObject *arg) When you add new format codes, please don't forget poor skipitem() below. */ -static char * +static const char * convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, char *msgbuf, size_t bufsize, freelist_t *freelist) { @@ -857,7 +862,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, case 'y': {/* any bytes-like object */ void **p = (void **)va_arg(*p_va, char **); - char *buf; + const char *buf; Py_ssize_t count; if (*format == '*') { if (getbuffer(arg, (Py_buffer*)p, &buf) < 0) @@ -904,7 +909,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, PyBuffer_FillInfo(p, arg, sarg, len, 1, 0); } else { /* any bytes-like object */ - char *buf; + const char *buf; if (getbuffer(arg, p, &buf) < 0) return converterr(buf, arg, msgbuf, bufsize); } @@ -934,7 +939,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } else { /* read-only bytes-like object */ /* XXX Really? */ - char *buf; + const char *buf; Py_ssize_t count = convertbuffer(arg, p, &buf); if (count < 0) return converterr(buf, arg, msgbuf, bufsize); @@ -1051,35 +1056,25 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, return converterr("(AsCharBuffer failed)", arg, msgbuf, bufsize); } - else { - PyObject *u; - - /* Convert object to Unicode */ - u = PyUnicode_FromObject(arg); - if (u == NULL) - return converterr( - "string or unicode or text buffer", - arg, msgbuf, bufsize); - + else if (PyUnicode_Check(arg)) { /* Encode object; use default error handling */ - s = PyUnicode_AsEncodedString(u, + s = PyUnicode_AsEncodedString(arg, encoding, NULL); - Py_DECREF(u); if (s == NULL) return converterr("(encoding failed)", arg, msgbuf, bufsize); - if (!PyBytes_Check(s)) { - Py_DECREF(s); - return converterr( - "(encoder failed to return bytes)", - arg, msgbuf, bufsize); - } + assert(PyBytes_Check(s)); size = PyBytes_GET_SIZE(s); ptr = PyBytes_AS_STRING(s); if (ptr == NULL) ptr = ""; } + else { + return converterr( + recode_strings ? "str" : "str, bytes or bytearray", + arg, msgbuf, bufsize); + } /* Write output; output is guaranteed to be 0-terminated */ if (*format == '#') { @@ -1129,7 +1124,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } else { if (size + 1 > BUFFER_LEN) { Py_DECREF(s); - PyErr_Format(PyExc_TypeError, + PyErr_Format(PyExc_ValueError, "encoded string too long " "(%zd, maximum length %zd)", (Py_ssize_t)size, (Py_ssize_t)(BUFFER_LEN-1)); @@ -1283,7 +1278,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, } static Py_ssize_t -convertbuffer(PyObject *arg, void **p, char **errmsg) +convertbuffer(PyObject *arg, void **p, const char **errmsg) { PyBufferProcs *pb = Py_TYPE(arg)->tp_as_buffer; Py_ssize_t count; @@ -1305,7 +1300,7 @@ convertbuffer(PyObject *arg, void **p, char **errmsg) } static int -getbuffer(PyObject *arg, Py_buffer *view, char **errmsg) +getbuffer(PyObject *arg, Py_buffer *view, const char **errmsg) { if (PyObject_GetBuffer(arg, view, PyBUF_SIMPLE) != 0) { *errmsg = "bytes-like object"; @@ -1448,7 +1443,8 @@ 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; + int i, pos, len; + int skip = 0; Py_ssize_t nargs, nkeywords; PyObject *current_arg; freelistentry_t static_entries[STATIC_FREELIST_ENTRIES]; @@ -1476,9 +1472,17 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, custom_msg++; } + /* scan kwlist and count the number of positional-only parameters */ + for (pos = 0; kwlist[pos] && !*kwlist[pos]; pos++) { + } /* scan kwlist and get greatest possible nbr of args */ - for (len=0; kwlist[len]; len++) - continue; + for (len = pos; kwlist[len]; len++) { + if (!*kwlist[len]) { + PyErr_SetString(PyExc_SystemError, + "Empty keyword parameter name"); + return cleanreturn(0, &freelist); + } + } if (len > STATIC_FREELIST_ENTRIES) { freelist.entries = PyMem_NEW(freelistentry_t, len); @@ -1507,7 +1511,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, keyword = kwlist[i]; if (*format == '|') { if (min != INT_MAX) { - PyErr_SetString(PyExc_RuntimeError, + PyErr_SetString(PyExc_SystemError, "Invalid format string (| specified twice)"); return cleanreturn(0, &freelist); } @@ -1516,14 +1520,14 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, format++; if (max != INT_MAX) { - PyErr_SetString(PyExc_RuntimeError, + PyErr_SetString(PyExc_SystemError, "Invalid format string ($ before |)"); return cleanreturn(0, &freelist); } } if (*format == '$') { if (max != INT_MAX) { - PyErr_SetString(PyExc_RuntimeError, + PyErr_SetString(PyExc_SystemError, "Invalid format string ($ specified twice)"); return cleanreturn(0, &freelist); } @@ -1531,6 +1535,14 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, max = i; format++; + if (max < pos) { + PyErr_SetString(PyExc_SystemError, + "Empty parameter name after $"); + return cleanreturn(0, &freelist); + } + if (skip) { + break; + } if (max < nargs) { PyErr_Format(PyExc_TypeError, "Function takes %s %d positional arguments" @@ -1541,66 +1553,86 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, } } if (IS_END_OF_FORMAT(*format)) { - PyErr_Format(PyExc_RuntimeError, + PyErr_Format(PyExc_SystemError, "More keyword list entries (%d) than " "format specifiers (%d)", len, i); return cleanreturn(0, &freelist); } - current_arg = NULL; - if (nkeywords) { - current_arg = PyDict_GetItemString(keywords, keyword); - } - if (current_arg) { - --nkeywords; - if (i < nargs) { - /* arg present in tuple and in dict */ - PyErr_Format(PyExc_TypeError, - "Argument given by name ('%s') " - "and position (%d)", - keyword, i+1); - return cleanreturn(0, &freelist); + if (!skip) { + current_arg = NULL; + if (nkeywords && i >= pos) { + current_arg = PyDict_GetItemString(keywords, keyword); + if (!current_arg && PyErr_Occurred()) { + return cleanreturn(0, &freelist); + } } - } - else if (nkeywords && PyErr_Occurred()) - return cleanreturn(0, &freelist); - else if (i < nargs) - current_arg = PyTuple_GET_ITEM(args, i); - - if (current_arg) { - msg = convertitem(current_arg, &format, p_va, flags, - levels, msgbuf, sizeof(msgbuf), &freelist); - if (msg) { - seterror(i+1, msg, levels, fname, custom_msg); - return cleanreturn(0, &freelist); + if (current_arg) { + --nkeywords; + if (i < nargs) { + /* arg present in tuple and in dict */ + PyErr_Format(PyExc_TypeError, + "Argument given by name ('%s') " + "and position (%d)", + keyword, i+1); + return cleanreturn(0, &freelist); + } + } + else if (i < nargs) + current_arg = PyTuple_GET_ITEM(args, i); + + if (current_arg) { + msg = convertitem(current_arg, &format, p_va, flags, + levels, msgbuf, sizeof(msgbuf), &freelist); + if (msg) { + seterror(i+1, msg, levels, fname, custom_msg); + return cleanreturn(0, &freelist); + } + continue; } - continue; - } - if (i < min) { - PyErr_Format(PyExc_TypeError, "Required argument " - "'%s' (pos %d) not found", - keyword, i+1); - return cleanreturn(0, &freelist); + if (i < min) { + if (i < pos) { + assert (min == INT_MAX); + assert (max == INT_MAX); + skip = 1; + } + else { + PyErr_Format(PyExc_TypeError, "Required argument " + "'%s' (pos %d) not found", + keyword, i+1); + return cleanreturn(0, &freelist); + } + } + /* current code reports success when all required args + * fulfilled and no keyword args left, with no further + * validation. XXX Maybe skip this in debug build ? + */ + if (!nkeywords && !skip) { + return cleanreturn(1, &freelist); + } } - /* current code reports success when all required args - * fulfilled and no keyword args left, with no further - * validation. XXX Maybe skip this in debug build ? - */ - if (!nkeywords) - return cleanreturn(1, &freelist); /* We are into optional args, skip thru to any remaining * keyword args */ msg = skipitem(&format, p_va, flags); if (msg) { - PyErr_Format(PyExc_RuntimeError, "%s: '%s'", msg, + PyErr_Format(PyExc_SystemError, "%s: '%s'", msg, format); return cleanreturn(0, &freelist); } } + if (skip) { + PyErr_Format(PyExc_TypeError, + "Function takes %s %d positional arguments" + " (%d given)", + (Py_MIN(pos, min) < i) ? "at least" : "exactly", + Py_MIN(pos, min), nargs); + return cleanreturn(0, &freelist); + } + if (!IS_END_OF_FORMAT(*format) && (*format != '|') && (*format != '$')) { - PyErr_Format(PyExc_RuntimeError, + PyErr_Format(PyExc_SystemError, "more argument specifiers than keyword list entries " "(remaining format:'%s')", format); return cleanreturn(0, &freelist); @@ -1618,7 +1650,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, return cleanreturn(0, &freelist); } for (i = 0; i < len; i++) { - if (!PyUnicode_CompareWithASCIIString(key, kwlist[i])) { + if (*kwlist[i] && !PyUnicode_CompareWithASCIIString(key, kwlist[i])) { match = 1; break; } @@ -1637,7 +1669,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format, } -static char * +static const char * skipitem(const char **p_format, va_list *p_va, int flags) { const char *format = *p_format; @@ -1730,7 +1762,7 @@ skipitem(const char **p_format, va_list *p_va, int flags) case '(': /* bypass tuple, not handled at all previously */ { - char *msg; + const char *msg; for (;;) { if (*format==')') break; @@ -1766,16 +1798,9 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m PyObject **o; va_list vargs; -#ifdef HAVE_STDARG_PROTOTYPES - va_start(vargs, max); -#else - va_start(vargs); -#endif - assert(min >= 0); assert(min <= max); if (!PyTuple_Check(args)) { - va_end(vargs); PyErr_SetString(PyExc_SystemError, "PyArg_UnpackTuple() argument list is not a tuple"); return 0; @@ -1793,9 +1818,10 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m "unpacked tuple should have %s%zd elements," " but has %zd", (min == max ? "" : "at least "), min, l); - va_end(vargs); return 0; } + if (l == 0) + return 1; if (l > max) { if (name != NULL) PyErr_Format( @@ -1808,9 +1834,14 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m "unpacked tuple should have %s%zd elements," " but has %zd", (min == max ? "" : "at most "), max, l); - va_end(vargs); return 0; } + +#ifdef HAVE_STDARG_PROTOTYPES + va_start(vargs, max); +#else + va_start(vargs); +#endif for (i = 0; i < l; i++) { o = va_arg(vargs, PyObject **); *o = PyTuple_GET_ITEM(args, i); diff --git a/Python/graminit.c b/Python/graminit.c index 8212b2a..354dc12 100644 --- a/Python/graminit.c +++ b/Python/graminit.c @@ -204,11 +204,13 @@ static arc arcs_9_6[2] = { {32, 7}, {0, 6}, }; -static arc arcs_9_7[2] = { +static arc arcs_9_7[3] = { {30, 12}, {34, 3}, + {0, 7}, }; -static arc arcs_9_8[1] = { +static arc arcs_9_8[2] = { + {32, 13}, {0, 8}, }; static arc arcs_9_9[2] = { @@ -221,35 +223,39 @@ static arc arcs_9_10[3] = { {0, 10}, }; static arc arcs_9_11[3] = { - {30, 13}, - {32, 14}, + {30, 14}, + {32, 15}, {0, 11}, }; static arc arcs_9_12[3] = { {32, 7}, - {31, 15}, + {31, 16}, {0, 12}, }; -static arc arcs_9_13[2] = { - {32, 14}, +static arc arcs_9_13[1] = { {0, 13}, }; static arc arcs_9_14[2] = { - {30, 16}, + {32, 15}, + {0, 14}, +}; +static arc arcs_9_15[3] = { + {30, 17}, {34, 3}, + {0, 15}, }; -static arc arcs_9_15[1] = { +static arc arcs_9_16[1] = { {26, 6}, }; -static arc arcs_9_16[3] = { - {32, 14}, - {31, 17}, - {0, 16}, +static arc arcs_9_17[3] = { + {32, 15}, + {31, 18}, + {0, 17}, }; -static arc arcs_9_17[1] = { - {26, 13}, +static arc arcs_9_18[1] = { + {26, 14}, }; -static state states_9[18] = { +static state states_9[19] = { {3, arcs_9_0}, {3, arcs_9_1}, {3, arcs_9_2}, @@ -257,17 +263,18 @@ static state states_9[18] = { {1, arcs_9_4}, {4, arcs_9_5}, {2, arcs_9_6}, - {2, arcs_9_7}, - {1, arcs_9_8}, + {3, arcs_9_7}, + {2, arcs_9_8}, {2, arcs_9_9}, {3, arcs_9_10}, {3, arcs_9_11}, {3, arcs_9_12}, - {2, arcs_9_13}, + {1, arcs_9_13}, {2, arcs_9_14}, - {1, arcs_9_15}, - {3, arcs_9_16}, - {1, arcs_9_17}, + {3, arcs_9_15}, + {1, arcs_9_16}, + {3, arcs_9_17}, + {1, arcs_9_18}, }; static arc arcs_10_0[1] = { {23, 1}, @@ -319,11 +326,13 @@ static arc arcs_11_6[2] = { {32, 7}, {0, 6}, }; -static arc arcs_11_7[2] = { +static arc arcs_11_7[3] = { {36, 12}, {34, 3}, + {0, 7}, }; -static arc arcs_11_8[1] = { +static arc arcs_11_8[2] = { + {32, 13}, {0, 8}, }; static arc arcs_11_9[2] = { @@ -336,35 +345,39 @@ static arc arcs_11_10[3] = { {0, 10}, }; static arc arcs_11_11[3] = { - {36, 13}, - {32, 14}, + {36, 14}, + {32, 15}, {0, 11}, }; static arc arcs_11_12[3] = { {32, 7}, - {31, 15}, + {31, 16}, {0, 12}, }; -static arc arcs_11_13[2] = { - {32, 14}, +static arc arcs_11_13[1] = { {0, 13}, }; static arc arcs_11_14[2] = { - {36, 16}, + {32, 15}, + {0, 14}, +}; +static arc arcs_11_15[3] = { + {36, 17}, {34, 3}, + {0, 15}, }; -static arc arcs_11_15[1] = { +static arc arcs_11_16[1] = { {26, 6}, }; -static arc arcs_11_16[3] = { - {32, 14}, - {31, 17}, - {0, 16}, +static arc arcs_11_17[3] = { + {32, 15}, + {31, 18}, + {0, 17}, }; -static arc arcs_11_17[1] = { - {26, 13}, +static arc arcs_11_18[1] = { + {26, 14}, }; -static state states_11[18] = { +static state states_11[19] = { {3, arcs_11_0}, {3, arcs_11_1}, {3, arcs_11_2}, @@ -372,17 +385,18 @@ static state states_11[18] = { {1, arcs_11_4}, {4, arcs_11_5}, {2, arcs_11_6}, - {2, arcs_11_7}, - {1, arcs_11_8}, + {3, arcs_11_7}, + {2, arcs_11_8}, {2, arcs_11_9}, {3, arcs_11_10}, {3, arcs_11_11}, {3, arcs_11_12}, - {2, arcs_11_13}, + {1, arcs_11_13}, {2, arcs_11_14}, - {1, arcs_11_15}, - {3, arcs_11_16}, - {1, arcs_11_17}, + {3, arcs_11_15}, + {1, arcs_11_16}, + {3, arcs_11_17}, + {1, arcs_11_18}, }; static arc arcs_12_0[1] = { {23, 1}, @@ -1879,11 +1893,11 @@ static dfa dfas[85] = { "\000\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {264, "parameters", 0, 4, states_8, "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {265, "typedargslist", 0, 18, states_9, + {265, "typedargslist", 0, 19, states_9, "\000\000\200\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {266, "tfpdef", 0, 4, states_10, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, - {267, "varargslist", 0, 18, states_11, + {267, "varargslist", 0, 19, states_11, "\000\000\200\000\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {268, "vfpdef", 0, 2, states_12, "\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"}, diff --git a/Python/import.c b/Python/import.c index 0b843da..d4c358f 100644 --- a/Python/import.c +++ b/Python/import.c @@ -38,14 +38,6 @@ module _imp #include "clinic/import.c.h" -/*[python input] -class fs_unicode_converter(CConverter): - type = 'PyObject *' - converter = 'PyUnicode_FSDecoder' - -[python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=9d6786230166006e]*/ - /* Initialize things */ void @@ -320,7 +312,7 @@ PyImport_GetModuleDict(void) /* List of names to clear in sys */ -static char* sys_deletes[] = { +static const char * const sys_deletes[] = { "path", "argv", "ps1", "ps2", "last_type", "last_value", "last_traceback", "path_hooks", "path_importer_cache", "meta_path", @@ -330,7 +322,7 @@ static char* sys_deletes[] = { NULL }; -static char* sys_files[] = { +static const char * const sys_files[] = { "stdin", "__stdin__", "stdout", "__stdout__", "stderr", "__stderr__", @@ -347,7 +339,7 @@ PyImport_Cleanup(void) PyInterpreterState *interp = PyThreadState_GET()->interp; PyObject *modules = interp->modules; PyObject *weaklist = NULL; - char **p; + const char * const *p; if (modules == NULL) return; /* Already done */ @@ -883,10 +875,8 @@ update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname) if (PyUnicode_Compare(co->co_filename, oldname)) return; - tmp = co->co_filename; - co->co_filename = newname; - Py_INCREF(co->co_filename); - Py_DECREF(tmp); + Py_INCREF(newname); + Py_XSETREF(co->co_filename, newname); constants = co->co_consts; n = PyTuple_GET_SIZE(constants); @@ -1331,10 +1321,8 @@ remove_importlib_frames(void) (always_trim || PyUnicode_CompareWithASCIIString(code->co_name, remove_frames) == 0)) { - PyObject *tmp = *outer_link; - *outer_link = next; Py_XINCREF(next); - Py_DECREF(tmp); + Py_XSETREF(*outer_link, next); prev_link = outer_link; } else { @@ -1361,12 +1349,12 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, _Py_IDENTIFIER(_find_and_load); _Py_IDENTIFIER(_handle_fromlist); _Py_IDENTIFIER(_lock_unlock_module); - _Py_static_string(single_dot, "."); PyObject *abs_name = NULL; PyObject *builtins_import = NULL; PyObject *final_mod = NULL; PyObject *mod = NULL; PyObject *package = NULL; + PyObject *spec = NULL; PyObject *globals = NULL; PyObject *fromlist = NULL; PyInterpreterState *interp = PyThreadState_GET()->interp; @@ -1423,42 +1411,93 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, } else if (level > 0) { package = _PyDict_GetItemId(globals, &PyId___package__); + spec = _PyDict_GetItemId(globals, &PyId___spec__); + if (package != NULL && package != Py_None) { Py_INCREF(package); if (!PyUnicode_Check(package)) { PyErr_SetString(PyExc_TypeError, "package must be a string"); goto error; } + else if (spec != NULL && spec != Py_None) { + int equal; + PyObject *parent = PyObject_GetAttrString(spec, "parent"); + if (parent == NULL) { + goto error; + } + + equal = PyObject_RichCompareBool(package, parent, Py_EQ); + Py_DECREF(parent); + if (equal < 0) { + goto error; + } + else if (equal == 0) { + if (PyErr_WarnEx(PyExc_ImportWarning, + "__package__ != __spec__.parent", 1) < 0) { + goto error; + } + } + } + } + else if (spec != NULL && spec != Py_None) { + package = PyObject_GetAttrString(spec, "parent"); + if (package == NULL) { + goto error; + } + else if (!PyUnicode_Check(package)) { + PyErr_SetString(PyExc_TypeError, + "__spec__.parent must be a string"); + goto error; + } } else { + if (PyErr_WarnEx(PyExc_ImportWarning, + "can't resolve package from __spec__ or __package__, " + "falling back on __name__ and __path__", 1) < 0) { + goto error; + } + package = _PyDict_GetItemId(globals, &PyId___name__); if (package == NULL) { PyErr_SetString(PyExc_KeyError, "'__name__' not in globals"); goto error; } - else if (!PyUnicode_Check(package)) { + + Py_INCREF(package); + if (!PyUnicode_Check(package)) { PyErr_SetString(PyExc_TypeError, "__name__ must be a string"); + goto error; } - Py_INCREF(package); if (_PyDict_GetItemId(globals, &PyId___path__) == NULL) { - PyObject *partition = NULL; - PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot); - if (borrowed_dot == NULL) { + Py_ssize_t dot; + + if (PyUnicode_READY(package) < 0) { goto error; } - partition = PyUnicode_RPartition(package, borrowed_dot); - Py_DECREF(package); - if (partition == NULL) { + + dot = PyUnicode_FindChar(package, '.', + 0, PyUnicode_GET_LENGTH(package), -1); + if (dot == -2) { goto error; } - package = PyTuple_GET_ITEM(partition, 0); - Py_INCREF(package); - Py_DECREF(partition); + + if (dot >= 0) { + PyObject *substr = PyUnicode_Substring(package, 0, dot); + if (substr == NULL) { + goto error; + } + Py_SETREF(package, substr); + } } } - if (PyDict_GetItem(interp->modules, package) == NULL) { + if (PyUnicode_CompareWithASCIIString(package, "") == 0) { + PyErr_SetString(PyExc_ImportError, + "attempted relative import with no known parent package"); + goto error; + } + else if (PyDict_GetItem(interp->modules, package) == NULL) { PyErr_Format(PyExc_SystemError, "Parent module %R not loaded, cannot perform relative " "import", package); @@ -1497,17 +1536,8 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, goto error; if (PyUnicode_GET_LENGTH(name) > 0) { - PyObject *borrowed_dot, *seq = NULL; - - borrowed_dot = _PyUnicode_FromId(&single_dot); - seq = PyTuple_Pack(2, base, name); + abs_name = PyUnicode_FromFormat("%U.%U", base, name); Py_DECREF(base); - if (borrowed_dot == NULL || seq == NULL) { - goto error; - } - - abs_name = PyUnicode_Join(borrowed_dot, seq); - Py_DECREF(seq); if (abs_name == NULL) { goto error; } @@ -1605,43 +1635,36 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, if (has_from < 0) goto error; if (!has_from) { - if (level == 0 || PyUnicode_GET_LENGTH(name) > 0) { - PyObject *front = NULL; - PyObject *partition = NULL; - PyObject *borrowed_dot = _PyUnicode_FromId(&single_dot); - - if (borrowed_dot == NULL) { - goto error; - } + Py_ssize_t len = PyUnicode_GET_LENGTH(name); + if (level == 0 || len > 0) { + Py_ssize_t dot; - partition = PyUnicode_Partition(name, borrowed_dot); - if (partition == NULL) { + dot = PyUnicode_FindChar(name, '.', 0, len, 1); + if (dot == -2) { goto error; } - if (PyUnicode_GET_LENGTH(PyTuple_GET_ITEM(partition, 1)) == 0) { + if (dot == -1) { /* No dot in module name, simple exit */ - Py_DECREF(partition); final_mod = mod; Py_INCREF(mod); goto error; } - front = PyTuple_GET_ITEM(partition, 0); - Py_INCREF(front); - Py_DECREF(partition); - if (level == 0) { + PyObject *front = PyUnicode_Substring(name, 0, dot); + if (front == NULL) { + goto error; + } + final_mod = PyObject_CallFunctionObjArgs(builtins_import, front, NULL); Py_DECREF(front); } else { - Py_ssize_t cut_off = PyUnicode_GET_LENGTH(name) - - PyUnicode_GET_LENGTH(front); + Py_ssize_t cut_off = len - dot; Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name); PyObject *to_return = PyUnicode_Substring(abs_name, 0, abs_name_len - cut_off); - Py_DECREF(front); if (to_return == NULL) { goto error; } diff --git a/Python/importdl.c b/Python/importdl.c index 1aa585d..ac03289 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -23,8 +23,8 @@ extern dl_funcptr _PyImport_FindSharedFuncptr(const char *prefix, const char *pathname, FILE *fp); #endif -static const char *ascii_only_prefix = "PyInit"; -static const char *nonascii_prefix = "PyInitU"; +static const char * const ascii_only_prefix = "PyInit"; +static const char * const nonascii_prefix = "PyInitU"; /* Get the variable part of a module's export symbol name. * Returns a bytes instance. For non-ASCII-named modules, the name is diff --git a/Python/importlib.h b/Python/importlib.h index 7f6b753..e3364b3 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1,171 +1,154 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const 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,169,2,0,0,100,0,0,90,0,0, - 100,1,0,97,1,0,100,2,0,100,3,0,132,0,0,90, - 2,0,100,4,0,100,5,0,132,0,0,90,3,0,71,100, - 6,0,100,7,0,132,0,0,100,7,0,131,2,0,90,4, - 0,105,0,0,90,5,0,105,0,0,90,6,0,71,100,8, - 0,100,9,0,132,0,0,100,9,0,101,7,0,131,3,0, - 90,8,0,71,100,10,0,100,11,0,132,0,0,100,11,0, - 131,2,0,90,9,0,71,100,12,0,100,13,0,132,0,0, - 100,13,0,131,2,0,90,10,0,71,100,14,0,100,15,0, - 132,0,0,100,15,0,131,2,0,90,11,0,100,16,0,100, - 17,0,132,0,0,90,12,0,100,18,0,100,19,0,132,0, - 0,90,13,0,100,20,0,100,21,0,132,0,0,90,14,0, - 100,22,0,100,23,0,100,24,0,100,25,0,132,0,1,90, - 15,0,100,26,0,100,27,0,132,0,0,90,16,0,100,28, - 0,100,29,0,132,0,0,90,17,0,100,30,0,100,31,0, - 132,0,0,90,18,0,100,32,0,100,33,0,132,0,0,90, - 19,0,71,100,34,0,100,35,0,132,0,0,100,35,0,131, - 2,0,90,20,0,71,100,36,0,100,37,0,132,0,0,100, - 37,0,131,2,0,90,21,0,100,38,0,100,1,0,100,39, - 0,100,1,0,100,40,0,100,41,0,132,0,2,90,22,0, - 101,23,0,131,0,0,90,24,0,100,1,0,100,1,0,100, - 42,0,100,43,0,132,2,0,90,25,0,100,44,0,100,45, - 0,100,46,0,100,47,0,132,0,1,90,26,0,100,48,0, - 100,49,0,132,0,0,90,27,0,100,50,0,100,51,0,132, - 0,0,90,28,0,100,52,0,100,53,0,132,0,0,90,29, - 0,100,54,0,100,55,0,132,0,0,90,30,0,100,56,0, - 100,57,0,132,0,0,90,31,0,100,58,0,100,59,0,132, - 0,0,90,32,0,71,100,60,0,100,61,0,132,0,0,100, - 61,0,131,2,0,90,33,0,71,100,62,0,100,63,0,132, - 0,0,100,63,0,131,2,0,90,34,0,71,100,64,0,100, - 65,0,132,0,0,100,65,0,131,2,0,90,35,0,100,66, - 0,100,67,0,132,0,0,90,36,0,100,68,0,100,69,0, - 132,0,0,90,37,0,100,1,0,100,70,0,100,71,0,132, - 1,0,90,38,0,100,72,0,100,73,0,132,0,0,90,39, - 0,100,74,0,90,40,0,101,40,0,100,75,0,23,90,41, - 0,100,76,0,100,77,0,132,0,0,90,42,0,100,78,0, - 100,79,0,132,0,0,90,43,0,100,1,0,100,80,0,100, - 81,0,100,82,0,132,2,0,90,44,0,100,83,0,100,84, - 0,132,0,0,90,45,0,100,85,0,100,86,0,132,0,0, - 90,46,0,100,1,0,100,1,0,102,0,0,100,80,0,100, - 87,0,100,88,0,132,4,0,90,47,0,100,89,0,100,90, - 0,132,0,0,90,48,0,100,91,0,100,92,0,132,0,0, - 90,49,0,100,93,0,100,94,0,132,0,0,90,50,0,100, - 1,0,83,41,95,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,78,99,2, - 0,0,0,0,0,0,0,3,0,0,0,7,0,0,0,67, - 0,0,0,115,92,0,0,0,120,66,0,100,1,0,100,2, - 0,100,3,0,100,4,0,103,4,0,68,93,46,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,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, - 218,7,114,101,112,108,97,99,101,169,0,114,10,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,218, - 5,95,119,114,97,112,27,0,0,0,115,8,0,0,0,0, - 2,25,1,15,1,29,1,114,12,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,218,3,115,121,115,41,1,218,4,110,97,109,101,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,11,95, - 110,101,119,95,109,111,100,117,108,101,35,0,0,0,115,2, - 0,0,0,0,1,114,16,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,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,15,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 8,95,95,105,110,105,116,95,95,43,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,18,0,0,0,114,14,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,19,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,9,95,95,101,110,116, - 101,114,95,95,46,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,11,0,0,0,71,0,0,0,115,77,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,73,0,124,0,0,106,1, - 0,12,114,73,0,121,17,0,116,2,0,106,3,0,124,0, - 0,106,4,0,61,87,110,18,0,4,116,5,0,107,10,0, - 114,72,0,1,1,1,89,110,1,0,88,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,10,0,0,0,41, - 2,218,2,46,48,218,3,97,114,103,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,250,9,60,103,101,110,101, - 120,112,114,62,50,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,22,0,0,0,114,14,0,0,0,114,21,0,0,0, - 114,18,0,0,0,218,8,75,101,121,69,114,114,111,114,41, - 2,114,19,0,0,0,218,4,97,114,103,115,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,218,8,95,95,101, - 120,105,116,95,95,49,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,1,0,0,0,114,0,0,0,0,114,2,0, - 0,0,114,3,0,0,0,114,20,0,0,0,114,23,0,0, - 0,114,30,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,17,0,0,0,39, - 0,0,0,115,8,0,0,0,12,2,6,2,12,3,12,3, - 114,17,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,1,0,0,0,114,0,0,0,0,114,2, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,31,0,0,0,64,0,0,0, - 115,2,0,0,0,12,1,114,31,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, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,216,1,0,0,100,0,90,0,100,1, + 97,1,100,2,100,3,132,0,90,2,100,4,100,5,132,0, + 90,3,71,0,100,6,100,7,132,0,100,7,131,2,90,4, + 105,0,90,5,105,0,90,6,71,0,100,8,100,9,132,0, + 100,9,101,7,131,3,90,8,71,0,100,10,100,11,132,0, + 100,11,131,2,90,9,71,0,100,12,100,13,132,0,100,13, + 131,2,90,10,71,0,100,14,100,15,132,0,100,15,131,2, + 90,11,100,16,100,17,132,0,90,12,100,18,100,19,132,0, + 90,13,100,20,100,21,132,0,90,14,100,22,100,23,156,1, + 100,24,100,25,132,2,90,15,100,26,100,27,132,0,90,16, + 100,28,100,29,132,0,90,17,100,30,100,31,132,0,90,18, + 100,32,100,33,132,0,90,19,71,0,100,34,100,35,132,0, + 100,35,131,2,90,20,71,0,100,36,100,37,132,0,100,37, + 131,2,90,21,100,1,100,1,100,38,156,2,100,39,100,40, + 132,2,90,22,101,23,131,0,90,24,100,94,100,41,100,42, + 132,1,90,25,100,43,100,44,156,1,100,45,100,46,132,2, + 90,26,100,47,100,48,132,0,90,27,100,49,100,50,132,0, + 90,28,100,51,100,52,132,0,90,29,100,53,100,54,132,0, + 90,30,100,55,100,56,132,0,90,31,100,57,100,58,132,0, + 90,32,71,0,100,59,100,60,132,0,100,60,131,2,90,33, + 71,0,100,61,100,62,132,0,100,62,131,2,90,34,71,0, + 100,63,100,64,132,0,100,64,131,2,90,35,100,65,100,66, + 132,0,90,36,100,67,100,68,132,0,90,37,100,95,100,69, + 100,70,132,1,90,38,100,71,100,72,132,0,90,39,100,73, + 90,40,101,40,100,74,23,0,90,41,100,75,100,76,132,0, + 90,42,100,77,100,78,132,0,90,43,100,96,100,80,100,81, + 132,1,90,44,100,82,100,83,132,0,90,45,100,84,100,85, + 132,0,90,46,100,1,100,1,102,0,100,79,102,4,100,86, + 100,87,132,1,90,47,100,88,100,89,132,0,90,48,100,90, + 100,91,132,0,90,49,100,92,100,93,132,0,90,50,100,1, + 83,0,41,97,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,78,99,2,0, + 0,0,0,0,0,0,3,0,0,0,7,0,0,0,67,0, + 0,0,115,60,0,0,0,120,40,100,6,68,0,93,32,125, + 2,116,0,124,1,124,2,131,2,114,6,116,1,124,0,124, + 2,116,2,124,1,124,2,131,2,131,3,1,0,113,6,87, + 0,124,0,106,3,106,4,124,1,106,3,131,1,1,0,100, + 5,83,0,41,7,122,47,83,105,109,112,108,101,32,115,117, + 98,115,116,105,116,117,116,101,32,102,111,114,32,102,117,110, + 99,116,111,111,108,115,46,117,112,100,97,116,101,95,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,4,122,10,95,95,109,111,100,117,108,101, + 95,95,122,8,95,95,110,97,109,101,95,95,122,12,95,95, + 113,117,97,108,110,97,109,101,95,95,122,7,95,95,100,111, + 99,95,95,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,218,7, + 114,101,112,108,97,99,101,169,0,114,10,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,218,5,95, + 119,114,97,112,27,0,0,0,115,8,0,0,0,0,2,10, + 1,10,1,22,1,114,12,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, + 12,0,0,0,116,0,116,1,131,1,124,0,131,1,83,0, + 41,1,78,41,2,218,4,116,121,112,101,218,3,115,121,115, + 41,1,218,4,110,97,109,101,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,11,95,110,101,119,95,109,111, + 100,117,108,101,35,0,0,0,115,2,0,0,0,0,1,114, + 16,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,40,0,0,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, + 90,4,100,4,100,5,132,0,90,5,100,6,100,7,132,0, + 90,6,100,8,83,0,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,10,0, + 0,0,124,1,124,0,95,0,100,0,83,0,41,1,78,41, + 1,218,5,95,110,97,109,101,41,2,218,4,115,101,108,102, + 114,15,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,8,95,95,105,110,105,116,95,95,43,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,18,0,0,0,124,0,106,0,116, + 1,106,2,107,6,124,0,95,3,100,0,83,0,41,1,78, + 41,4,114,18,0,0,0,114,14,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,19,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,9,95,95,101,110,116,101,114, + 95,95,46,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,11,0,0,0,71,0,0,0,115,66,0,0,0, + 116,0,100,1,100,2,132,0,124,1,68,0,131,1,131,1, + 114,62,124,0,106,1,12,0,114,62,121,14,116,2,106,3, + 124,0,106,4,61,0,87,0,110,20,4,0,116,5,107,10, + 114,60,1,0,1,0,1,0,89,0,110,2,88,0,100,0, + 83,0,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,22,0,0,0,124, + 0,93,14,125,1,124,1,100,0,107,9,86,0,1,0,113, + 2,100,0,83,0,41,1,78,114,10,0,0,0,41,2,218, + 2,46,48,218,3,97,114,103,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,250,9,60,103,101,110,101,120,112, + 114,62,50,0,0,0,115,2,0,0,0,4,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, + 22,0,0,0,114,14,0,0,0,114,21,0,0,0,114,18, + 0,0,0,218,8,75,101,121,69,114,114,111,114,41,2,114, + 19,0,0,0,218,4,97,114,103,115,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,8,95,95,101,120,105, + 116,95,95,49,0,0,0,115,10,0,0,0,0,1,26,1, + 2,1,14,1,14,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,1,0,0,0,114,0,0,0,0,114,2,0,0,0, + 114,3,0,0,0,114,20,0,0,0,114,23,0,0,0,114, + 30,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,17,0,0,0,39,0,0, + 0,115,8,0,0,0,8,2,4,2,8,3,8,3,114,17, + 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,12,0,0,0,101,0,90, + 1,100,0,90,2,100,1,83,0,41,2,218,14,95,68,101, + 97,100,108,111,99,107,69,114,114,111,114,78,41,3,114,1, + 0,0,0,114,0,0,0,0,114,2,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,31,0,0,0,64,0,0,0,115,2,0,0,0,8, + 1,114,31,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,56,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, + 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, + 132,0,90,6,100,8,100,9,132,0,90,7,100,10,100,11, + 132,0,90,8,100,12,83,0,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, @@ -178,162 +161,151 @@ const unsigned char _Py_M__importlib[] = { 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,15,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,19,0,0,0,114,15,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,20,0,0,0,74,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,88, - 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,60,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,87,100,0,0,83,41,3,78,70,84, - 41,5,114,34,0,0,0,218,9,103,101,116,95,105,100,101, - 110,116,114,37,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,19,0,0, - 0,90,2,109,101,218,3,116,105,100,114,35,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,12, - 104,97,115,95,100,101,97,100,108,111,99,107,82,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,16,0, - 0,0,67,0,0,0,115,210,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,173,0,120,166,0,124,0,0,106,3,0,143,124,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,124,0,116,7,0,100,4,0,124,0,0, - 22,131,1,0,130,1,0,124,0,0,106,8,0,106,9,0, - 100,5,0,131,1,0,114,157,0,124,0,0,4,106,10,0, - 100,2,0,55,2,95,10,0,87,100,6,0,81,82,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,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,33,0,0,0,233, - 1,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,34,0,0,0,114,40,0,0,0,114,41,0,0, - 0,114,35,0,0,0,114,38,0,0,0,114,37,0,0,0, - 114,44,0,0,0,114,31,0,0,0,114,36,0,0,0,218, - 7,97,99,113,117,105,114,101,114,39,0,0,0,218,7,114, - 101,108,101,97,115,101,41,2,114,19,0,0,0,114,43,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,46,0,0,0,94,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,16,1,18,1,22,2,13,1,21,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,157,0,0,0,116,0, - 0,106,1,0,131,0,0,125,1,0,124,0,0,106,2,0, - 143,129,0,1,124,0,0,106,3,0,124,1,0,107,3,0, - 114,49,0,116,4,0,100,1,0,131,1,0,130,1,0,124, - 0,0,106,5,0,100,2,0,107,4,0,115,70,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, - 146,0,100,0,0,124,0,0,95,3,0,124,0,0,106,7, - 0,114,146,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, - 87,100,0,0,81,82,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, - 33,0,0,0,114,45,0,0,0,41,10,114,34,0,0,0, - 114,40,0,0,0,114,35,0,0,0,114,37,0,0,0,218, - 12,82,117,110,116,105,109,101,69,114,114,111,114,114,38,0, - 0,0,218,14,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,114,39,0,0,0,114,36,0,0,0,114,47,0,0, - 0,41,2,114,19,0,0,0,114,43,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,47,0,0, - 0,119,0,0,0,115,22,0,0,0,0,1,12,1,10,1, - 15,1,12,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,218,6,102,111,114,109,97,116,114,15, - 0,0,0,218,2,105,100,41,1,114,19,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,95, - 95,114,101,112,114,95,95,132,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,1,0,0,0, - 114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,114, - 20,0,0,0,114,44,0,0,0,114,46,0,0,0,114,47, - 0,0,0,114,52,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,32,0,0, - 0,68,0,0,0,115,12,0,0,0,12,4,6,2,12,8, - 12,12,12,25,12,13,114,32,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,33,0,0,0,41, - 2,114,15,0,0,0,114,38,0,0,0,41,2,114,19,0, - 0,0,114,15,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,20,0,0,0,140,0,0,0,115, - 4,0,0,0,0,1,9,1,122,25,95,68,117,109,109,121, + 0,0,0,67,0,0,0,115,48,0,0,0,116,0,106,1, + 131,0,124,0,95,2,116,0,106,1,131,0,124,0,95,3, + 124,1,124,0,95,4,100,0,124,0,95,5,100,1,124,0, + 95,6,100,1,124,0,95,7,100,0,83,0,41,2,78,233, + 0,0,0,0,41,8,218,7,95,116,104,114,101,97,100,90, + 13,97,108,108,111,99,97,116,101,95,108,111,99,107,218,4, + 108,111,99,107,218,6,119,97,107,101,117,112,114,15,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,19,0,0,0,114, + 15,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,20,0,0,0,74,0,0,0,115,12,0,0, + 0,0,1,10,1,10,1,6,1,6,1,6,1,122,20,95, 77,111,100,117,108,101,76,111,99,107,46,95,95,105,110,105, - 116,95,95,99,1,0,0,0,0,0,0,0,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,45,0,0,0,84,41,1,114,38,0,0,0, - 41,1,114,19,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,46,0,0,0,144,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,46,0,0,0,124,0,0,106, - 0,0,100,1,0,107,2,0,114,27,0,116,1,0,100,2, - 0,131,1,0,130,1,0,124,0,0,4,106,0,0,100,3, - 0,56,2,95,0,0,100,0,0,83,41,4,78,114,33,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,45,0,0,0,41,2,114,38,0,0,0,114, - 48,0,0,0,41,1,114,19,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,47,0,0,0,148, - 0,0,0,115,6,0,0,0,0,1,15,1,12,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, + 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, + 2,0,0,0,67,0,0,0,115,64,0,0,0,116,0,106, + 1,131,0,125,1,124,0,106,2,125,2,120,44,116,3,106, + 4,124,2,131,1,125,3,124,3,100,0,107,8,114,38,100, + 1,83,0,124,3,106,2,125,2,124,2,124,1,107,2,114, + 16,100,2,83,0,113,16,87,0,100,0,83,0,41,3,78, + 70,84,41,5,114,34,0,0,0,218,9,103,101,116,95,105, + 100,101,110,116,114,37,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,19, + 0,0,0,90,2,109,101,218,3,116,105,100,114,35,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,12,104,97,115,95,100,101,97,100,108,111,99,107,82,0, + 0,0,115,18,0,0,0,0,2,8,1,6,1,2,1,10, + 1,8,1,4,1,6,1,8,1,122,24,95,77,111,100,117, + 108,101,76,111,99,107,46,104,97,115,95,100,101,97,100,108, + 111,99,107,99,1,0,0,0,0,0,0,0,2,0,0,0, + 16,0,0,0,67,0,0,0,115,168,0,0,0,116,0,106, + 1,131,0,125,1,124,0,116,2,124,1,60,0,122,138,120, + 132,124,0,106,3,143,96,1,0,124,0,106,4,100,1,107, + 2,115,48,124,0,106,5,124,1,107,2,114,72,124,1,124, + 0,95,5,124,0,4,0,106,4,100,2,55,0,2,0,95, + 4,100,3,83,0,124,0,106,6,131,0,114,92,116,7,100, + 4,124,0,22,0,131,1,130,1,124,0,106,8,106,9,100, + 5,131,1,114,118,124,0,4,0,106,10,100,2,55,0,2, + 0,95,10,87,0,100,6,81,0,82,0,88,0,124,0,106, + 8,106,9,131,0,1,0,124,0,106,8,106,11,131,0,1, + 0,113,20,87,0,87,0,100,6,116,2,124,1,61,0,88, + 0,100,6,83,0,41,7,122,185,10,32,32,32,32,32,32, + 32,32,65,99,113,117,105,114,101,32,116,104,101,32,109,111, + 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,33,0,0,0,233,1,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,34,0,0,0,114, + 40,0,0,0,114,41,0,0,0,114,35,0,0,0,114,38, + 0,0,0,114,37,0,0,0,114,44,0,0,0,114,31,0, + 0,0,114,36,0,0,0,218,7,97,99,113,117,105,114,101, + 114,39,0,0,0,218,7,114,101,108,101,97,115,101,41,2, + 114,19,0,0,0,114,43,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,46,0,0,0,94,0, + 0,0,115,32,0,0,0,0,6,8,1,8,1,2,1,2, + 1,8,1,20,1,6,1,14,1,4,1,8,1,12,1,12, + 1,24,2,10,1,18,2,122,19,95,77,111,100,117,108,101, + 76,111,99,107,46,97,99,113,117,105,114,101,99,1,0,0, + 0,0,0,0,0,2,0,0,0,10,0,0,0,67,0,0, + 0,115,122,0,0,0,116,0,106,1,131,0,125,1,124,0, + 106,2,143,98,1,0,124,0,106,3,124,1,107,3,114,34, + 116,4,100,1,131,1,130,1,124,0,106,5,100,2,107,4, + 115,48,116,6,130,1,124,0,4,0,106,5,100,3,56,0, + 2,0,95,5,124,0,106,5,100,2,107,2,114,108,100,0, + 124,0,95,3,124,0,106,7,114,108,124,0,4,0,106,7, + 100,3,56,0,2,0,95,7,124,0,106,8,106,9,131,0, + 1,0,87,0,100,0,81,0,82,0,88,0,100,0,83,0, + 41,4,78,122,31,99,97,110,110,111,116,32,114,101,108,101, + 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32, + 108,111,99,107,114,33,0,0,0,114,45,0,0,0,41,10, + 114,34,0,0,0,114,40,0,0,0,114,35,0,0,0,114, + 37,0,0,0,218,12,82,117,110,116,105,109,101,69,114,114, + 111,114,114,38,0,0,0,218,14,65,115,115,101,114,116,105, + 111,110,69,114,114,111,114,114,39,0,0,0,114,36,0,0, + 0,114,47,0,0,0,41,2,114,19,0,0,0,114,43,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,47,0,0,0,119,0,0,0,115,22,0,0,0,0, + 1,8,1,8,1,10,1,8,1,14,1,14,1,10,1,6, + 1,6,1,14,1,122,19,95,77,111,100,117,108,101,76,111, + 99,107,46,114,101,108,101,97,115,101,99,1,0,0,0,0, + 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, + 18,0,0,0,100,1,106,0,124,0,106,1,116,2,124,0, + 131,1,131,2,83,0,41,2,78,122,23,95,77,111,100,117, + 108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,32, + 123,125,41,3,218,6,102,111,114,109,97,116,114,15,0,0, + 0,218,2,105,100,41,1,114,19,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,8,95,95,114, + 101,112,114,95,95,132,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,1,0,0,0,114,0, + 0,0,0,114,2,0,0,0,114,3,0,0,0,114,20,0, + 0,0,114,44,0,0,0,114,46,0,0,0,114,47,0,0, + 0,114,52,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,32,0,0,0,68, + 0,0,0,115,12,0,0,0,8,4,4,2,8,8,8,12, + 8,25,8,13,114,32,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,48, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100, + 10,83,0,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,16,0,0,0,124,1,124,0,95,0,100, + 1,124,0,95,1,100,0,83,0,41,2,78,114,33,0,0, + 0,41,2,114,15,0,0,0,114,38,0,0,0,41,2,114, + 19,0,0,0,114,15,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,20,0,0,0,140,0,0, + 0,115,4,0,0,0,0,1,6,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,18,0,0,0,124, + 0,4,0,106,0,100,1,55,0,2,0,95,0,100,2,83, + 0,41,3,78,114,45,0,0,0,84,41,1,114,38,0,0, + 0,41,1,114,19,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,46,0,0,0,144,0,0,0, + 115,4,0,0,0,0,1,14,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,36,0,0,0,124,0,106, + 0,100,1,107,2,114,18,116,1,100,2,131,1,130,1,124, + 0,4,0,106,0,100,3,56,0,2,0,95,0,100,0,83, + 0,41,4,78,114,33,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,45,0,0,0,41, + 2,114,38,0,0,0,114,48,0,0,0,41,1,114,19,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,47,0,0,0,148,0,0,0,115,6,0,0,0,0, + 1,10,1,8,1,122,24,95,68,117,109,109,121,77,111,100, + 117,108,101,76,111,99,107,46,114,101,108,101,97,115,101,99, + 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 67,0,0,0,115,18,0,0,0,100,1,106,0,124,0,106, + 1,116,2,124,0,131,1,131,2,83,0,41,2,78,122,28, 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,50, 0,0,0,114,15,0,0,0,114,51,0,0,0,41,1,114, @@ -345,262 +317,249 @@ const unsigned char _Py_M__importlib[] = { 114,3,0,0,0,114,20,0,0,0,114,46,0,0,0,114, 47,0,0,0,114,52,0,0,0,114,10,0,0,0,114,10, 0,0,0,114,10,0,0,0,114,11,0,0,0,114,53,0, - 0,0,136,0,0,0,115,10,0,0,0,12,2,6,2,12, - 4,12,4,12,5,114,53,0,0,0,99,0,0,0,0,0, + 0,0,136,0,0,0,115,10,0,0,0,8,2,4,2,8, + 4,8,4,8,5,114,53,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, + 36,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, + 132,0,90,3,100,3,100,4,132,0,90,4,100,5,100,6, + 132,0,90,5,100,7,83,0,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,18,0,0,0,218,5,95,108,111,99,107,41, - 2,114,19,0,0,0,114,15,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,20,0,0,0,159, - 0,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, - 18,0,0,0,114,55,0,0,0,218,4,95,105,109,112,218, - 12,114,101,108,101,97,115,101,95,108,111,99,107,114,46,0, - 0,0,41,1,114,19,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,23,0,0,0,163,0,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,55,0,0, - 0,114,47,0,0,0,41,3,114,19,0,0,0,114,29,0, - 0,0,90,6,107,119,97,114,103,115,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,30,0,0,0,170,0, - 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,1,0,0,0,114,0, - 0,0,0,114,2,0,0,0,114,20,0,0,0,114,23,0, - 0,0,114,30,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,54,0,0,0, - 157,0,0,0,115,6,0,0,0,12,2,12,4,12,7,114, - 54,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,139,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,135,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,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,218,1,95,41,1,114,15,0,0,0, - 114,10,0,0,0,114,11,0,0,0,218,2,99,98,190,0, - 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,41,7,114,59,0,0,0,114,28, - 0,0,0,114,34,0,0,0,114,53,0,0,0,114,32,0, - 0,0,218,8,95,119,101,97,107,114,101,102,90,3,114,101, - 102,41,3,114,15,0,0,0,114,35,0,0,0,114,61,0, - 0,0,114,10,0,0,0,41,1,114,15,0,0,0,114,11, - 0,0,0,114,56,0,0,0,176,0,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,22,1,114,56,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,56, - 0,0,0,114,57,0,0,0,114,58,0,0,0,114,46,0, - 0,0,114,31,0,0,0,114,47,0,0,0,41,2,114,15, - 0,0,0,114,35,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,19,95,108,111,99,107,95,117, - 110,108,111,99,107,95,109,111,100,117,108,101,195,0,0,0, - 115,14,0,0,0,0,7,12,1,10,1,3,1,14,1,13, - 3,5,2,114,63,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,10,0,0,0,41,3,218,1,102,114,29, - 0,0,0,90,4,107,119,100,115,114,10,0,0,0,114,10, - 0,0,0,114,11,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,214,0,0,0,115,2,0,0,0,0,8,114,65, - 0,0,0,218,9,118,101,114,98,111,115,105,116,121,114,45, - 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,75,0,0,0,116,0,0, - 106,1,0,106,2,0,124,1,0,107,5,0,114,71,0,124, - 0,0,106,3,0,100,6,0,131,1,0,115,43,0,100,3, - 0,124,0,0,23,125,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,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,90,4,102,105,108,101,78, - 41,2,114,67,0,0,0,114,68,0,0,0,41,7,114,14, - 0,0,0,218,5,102,108,97,103,115,218,7,118,101,114,98, - 111,115,101,218,10,115,116,97,114,116,115,119,105,116,104,218, - 5,112,114,105,110,116,114,50,0,0,0,218,6,115,116,100, - 101,114,114,41,3,218,7,109,101,115,115,97,103,101,114,66, - 0,0,0,114,29,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,16,95,118,101,114,98,111,115, - 101,95,109,101,115,115,97,103,101,225,0,0,0,115,8,0, - 0,0,0,2,18,1,15,1,10,1,114,75,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,0,0,2,0,0,0,4,0, - 0,0,19,0,0,0,115,55,0,0,0,124,1,0,116,0, - 0,106,1,0,107,7,0,114,42,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,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,15,0,0,0,41,4,114,14,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,218,11,73,109,112,111,114,116,69,114, - 114,111,114,114,50,0,0,0,41,2,114,19,0,0,0,218, - 8,102,117,108,108,110,97,109,101,41,1,218,3,102,120,110, - 114,10,0,0,0,114,11,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,235,0,0,0,115,8,0,0,0,0,1, - 15,1,18,1,9,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,12, - 0,0,0,41,2,114,79,0,0,0,114,80,0,0,0,114, - 10,0,0,0,41,1,114,79,0,0,0,114,11,0,0,0, - 218,17,95,114,101,113,117,105,114,101,115,95,98,117,105,108, - 116,105,110,233,0,0,0,115,6,0,0,0,0,2,18,5, - 13,1,114,81,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,55,0,0, - 0,116,0,0,106,1,0,124,1,0,131,1,0,115,42,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,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,15,0,0,0,41,4,114, - 57,0,0,0,218,9,105,115,95,102,114,111,122,101,110,114, - 77,0,0,0,114,50,0,0,0,41,2,114,19,0,0,0, - 114,78,0,0,0,41,1,114,79,0,0,0,114,10,0,0, - 0,114,11,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, - 246,0,0,0,115,8,0,0,0,0,1,15,1,18,1,9, - 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,12,0,0,0,41,2,114,79, - 0,0,0,114,83,0,0,0,114,10,0,0,0,41,1,114, - 79,0,0,0,114,11,0,0,0,218,16,95,114,101,113,117, - 105,114,101,115,95,102,114,111,122,101,110,244,0,0,0,115, - 6,0,0,0,0,2,18,5,13,1,114,84,0,0,0,99, - 2,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 67,0,0,0,115,81,0,0,0,116,0,0,124,1,0,124, - 0,0,131,2,0,125,2,0,124,1,0,116,1,0,106,2, - 0,107,6,0,114,67,0,116,1,0,106,2,0,124,1,0, - 25,125,3,0,116,3,0,124,2,0,124,3,0,131,2,0, - 1,116,1,0,106,2,0,124,1,0,25,83,116,4,0,124, - 2,0,131,1,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, - 5,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, - 100,101,114,114,14,0,0,0,114,21,0,0,0,218,5,95, - 101,120,101,99,218,5,95,108,111,97,100,41,4,114,19,0, - 0,0,114,78,0,0,0,218,4,115,112,101,99,218,6,109, - 111,100,117,108,101,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, - 108,101,95,115,104,105,109,0,1,0,0,115,12,0,0,0, - 0,6,15,1,15,1,13,1,13,1,11,2,114,90,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,6,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,71,0,121,17,0,124, - 1,0,106,2,0,124,0,0,131,1,0,83,87,110,18,0, - 4,116,3,0,107,10,0,114,70,0,1,1,1,89,110,1, - 0,88,121,13,0,124,0,0,106,4,0,125,2,0,87,110, - 18,0,4,116,5,0,107,10,0,114,104,0,1,1,1,89, - 110,23,0,88,124,2,0,100,0,0,107,9,0,114,127,0, - 116,6,0,124,2,0,131,1,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,166,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,241,0,1,1,1,124, - 1,0,100,0,0,107,8,0,114,221,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, + 0,0,0,115,16,0,0,0,124,1,124,0,95,0,100,0, + 124,0,95,1,100,0,83,0,41,1,78,41,2,114,18,0, + 0,0,218,5,95,108,111,99,107,41,2,114,19,0,0,0, + 114,15,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,20,0,0,0,159,0,0,0,115,4,0, + 0,0,0,1,6,1,122,27,95,77,111,100,117,108,101,76, + 111,99,107,77,97,110,97,103,101,114,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, + 10,0,0,0,67,0,0,0,115,42,0,0,0,122,16,116, + 0,124,0,106,1,131,1,124,0,95,2,87,0,100,0,116, + 3,106,4,131,0,1,0,88,0,124,0,106,2,106,5,131, + 0,1,0,100,0,83,0,41,1,78,41,6,218,16,95,103, + 101,116,95,109,111,100,117,108,101,95,108,111,99,107,114,18, + 0,0,0,114,55,0,0,0,218,4,95,105,109,112,218,12, + 114,101,108,101,97,115,101,95,108,111,99,107,114,46,0,0, + 0,41,1,114,19,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,23,0,0,0,163,0,0,0, + 115,8,0,0,0,0,1,2,1,16,2,10,1,122,28,95, + 77,111,100,117,108,101,76,111,99,107,77,97,110,97,103,101, + 114,46,95,95,101,110,116,101,114,95,95,99,1,0,0,0, + 0,0,0,0,3,0,0,0,1,0,0,0,79,0,0,0, + 115,14,0,0,0,124,0,106,0,106,1,131,0,1,0,100, + 0,83,0,41,1,78,41,2,114,55,0,0,0,114,47,0, + 0,0,41,3,114,19,0,0,0,114,29,0,0,0,90,6, + 107,119,97,114,103,115,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,30,0,0,0,170,0,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,1,0,0,0,114,0,0,0,0,114, + 2,0,0,0,114,20,0,0,0,114,23,0,0,0,114,30, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,54,0,0,0,157,0,0,0, + 115,6,0,0,0,8,2,8,4,8,7,114,54,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,106,0,0,0,100,1,125,1,121,14, + 116,0,136,0,25,0,131,0,125,1,87,0,110,20,4,0, + 116,1,107,10,114,38,1,0,1,0,1,0,89,0,110,2, + 88,0,124,1,100,1,107,8,114,102,116,2,100,1,107,8, + 114,66,116,3,136,0,131,1,125,1,110,8,116,4,136,0, + 131,1,125,1,135,0,102,1,100,2,100,3,132,8,125,2, + 116,5,106,6,124,1,124,2,131,2,116,0,136,0,60,0, + 124,1,83,0,41,4,122,109,71,101,116,32,111,114,32,99, + 114,101,97,116,101,32,116,104,101,32,109,111,100,117,108,101, + 32,108,111,99,107,32,102,111,114,32,97,32,103,105,118,101, + 110,32,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,10,0,0,0, + 116,0,136,0,61,0,100,0,83,0,41,1,78,41,1,218, + 13,95,109,111,100,117,108,101,95,108,111,99,107,115,41,1, + 218,1,95,41,1,114,15,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,2,99,98,190,0,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,41,7,114,59,0,0,0,114,28,0,0,0,114,34,0, + 0,0,114,53,0,0,0,114,32,0,0,0,218,8,95,119, + 101,97,107,114,101,102,90,3,114,101,102,41,3,114,15,0, + 0,0,114,35,0,0,0,114,61,0,0,0,114,10,0,0, + 0,41,1,114,15,0,0,0,114,11,0,0,0,114,56,0, + 0,0,176,0,0,0,115,24,0,0,0,0,4,4,1,2, + 1,14,1,14,1,6,1,8,1,8,1,10,2,8,1,12, + 2,16,1,114,56,0,0,0,99,1,0,0,0,0,0,0, + 0,2,0,0,0,11,0,0,0,67,0,0,0,115,62,0, + 0,0,116,0,124,0,131,1,125,1,116,1,106,2,131,0, + 1,0,121,12,124,1,106,3,131,0,1,0,87,0,110,20, + 4,0,116,4,107,10,114,48,1,0,1,0,1,0,89,0, + 110,10,88,0,124,1,106,5,131,0,1,0,100,1,83,0, + 41,2,97,21,1,0,0,82,101,108,101,97,115,101,32,116, + 104,101,32,103,108,111,98,97,108,32,105,109,112,111,114,116, + 32,108,111,99,107,44,32,97,110,100,32,97,99,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, + 56,0,0,0,114,57,0,0,0,114,58,0,0,0,114,46, + 0,0,0,114,31,0,0,0,114,47,0,0,0,41,2,114, + 15,0,0,0,114,35,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,19,95,108,111,99,107,95, + 117,110,108,111,99,107,95,109,111,100,117,108,101,195,0,0, + 0,115,14,0,0,0,0,7,8,1,8,1,2,1,12,1, + 14,3,6,2,114,63,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,10, + 0,0,0,124,0,124,1,124,2,142,0,83,0,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,10,0,0,0,41,3,218,1,102,114,29,0,0, + 0,90,4,107,119,100,115,114,10,0,0,0,114,10,0,0, + 0,114,11,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,214,0,0,0,115,2,0,0,0,0,8,114,65,0,0, + 0,114,45,0,0,0,41,1,218,9,118,101,114,98,111,115, + 105,116,121,99,1,0,0,0,1,0,0,0,3,0,0,0, + 4,0,0,0,71,0,0,0,115,56,0,0,0,116,0,106, + 1,106,2,124,1,107,5,114,52,124,0,106,3,100,6,131, + 1,115,30,100,3,124,0,23,0,125,0,116,4,124,0,106, + 5,124,2,140,0,100,4,116,0,106,6,144,1,131,1,1, + 0,100,5,83,0,41,7,122,61,80,114,105,110,116,32,116, + 104,101,32,109,101,115,115,97,103,101,32,116,111,32,115,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,90,4,102,105,108,101,78,41,2,114, + 67,0,0,0,114,68,0,0,0,41,7,114,14,0,0,0, + 218,5,102,108,97,103,115,218,7,118,101,114,98,111,115,101, + 218,10,115,116,97,114,116,115,119,105,116,104,218,5,112,114, + 105,110,116,114,50,0,0,0,218,6,115,116,100,101,114,114, + 41,3,218,7,109,101,115,115,97,103,101,114,66,0,0,0, + 114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,16,95,118,101,114,98,111,115,101,95,109, + 101,115,115,97,103,101,225,0,0,0,115,8,0,0,0,0, + 2,12,1,10,1,8,1,114,75,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,26,0,0,0,135,0,102,1,100,1,100,2,132,8, + 125,1,116,0,124,1,136,0,131,2,1,0,124,1,83,0, + 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,0,0,2,0, + 0,0,4,0,0,0,19,0,0,0,115,40,0,0,0,124, + 1,116,0,106,1,107,7,114,30,116,2,100,1,106,3,124, + 1,131,1,100,2,124,1,144,1,131,1,130,1,136,0,124, + 0,124,1,131,2,83,0,41,3,78,122,29,123,33,114,125, + 32,105,115,32,110,111,116,32,97,32,98,117,105,108,116,45, + 105,110,32,109,111,100,117,108,101,114,15,0,0,0,41,4, + 114,14,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,218,11,73,109,112, + 111,114,116,69,114,114,111,114,114,50,0,0,0,41,2,114, + 19,0,0,0,218,8,102,117,108,108,110,97,109,101,41,1, + 218,3,102,120,110,114,10,0,0,0,114,11,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,235,0,0,0,115,8, + 0,0,0,0,1,10,1,12,1,8,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,12,0,0,0,41,2,114,79,0,0,0,114, + 80,0,0,0,114,10,0,0,0,41,1,114,79,0,0,0, + 114,11,0,0,0,218,17,95,114,101,113,117,105,114,101,115, + 95,98,117,105,108,116,105,110,233,0,0,0,115,6,0,0, + 0,0,2,12,5,10,1,114,81,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,26,0,0,0,135,0,102,1,100,1,100,2,132,8, + 125,1,116,0,124,1,136,0,131,2,1,0,124,1,83,0, + 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,40,0,0,0,116,0,106, + 1,124,1,131,1,115,30,116,2,100,1,106,3,124,1,131, + 1,100,2,124,1,144,1,131,1,130,1,136,0,124,0,124, + 1,131,2,83,0,41,3,78,122,27,123,33,114,125,32,105, + 115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,114,15,0,0,0,41,4,114,57,0,0, + 0,218,9,105,115,95,102,114,111,122,101,110,114,77,0,0, + 0,114,50,0,0,0,41,2,114,19,0,0,0,114,78,0, + 0,0,41,1,114,79,0,0,0,114,10,0,0,0,114,11, + 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,246,0,0, + 0,115,8,0,0,0,0,1,10,1,12,1,8,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,12,0,0,0,41,2,114,79,0,0,0, + 114,83,0,0,0,114,10,0,0,0,41,1,114,79,0,0, + 0,114,11,0,0,0,218,16,95,114,101,113,117,105,114,101, + 115,95,102,114,111,122,101,110,244,0,0,0,115,6,0,0, + 0,0,2,12,5,10,1,114,84,0,0,0,99,2,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, + 0,115,64,0,0,0,116,0,124,1,124,0,131,2,125,2, + 124,1,116,1,106,2,107,6,114,52,116,1,106,2,124,1, + 25,0,125,3,116,3,124,2,124,3,131,2,1,0,116,1, + 106,2,124,1,25,0,83,0,110,8,116,4,124,2,131,1, + 83,0,100,1,83,0,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,5,218,16,115, + 112,101,99,95,102,114,111,109,95,108,111,97,100,101,114,114, + 14,0,0,0,114,21,0,0,0,218,5,95,101,120,101,99, + 218,5,95,108,111,97,100,41,4,114,19,0,0,0,114,78, + 0,0,0,218,4,115,112,101,99,218,6,109,111,100,117,108, + 101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,17,95,108,111,97,100,95,109,111,100,117,108,101,95,115, + 104,105,109,0,1,0,0,115,12,0,0,0,0,6,10,1, + 10,1,10,1,10,1,12,2,114,90,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,218,0,0,0,116,0,124,0,100,1,100,0,131, + 3,125,1,116,1,124,1,100,2,131,2,114,54,121,10,124, + 1,106,2,124,0,131,1,83,0,4,0,116,3,107,10,114, + 52,1,0,1,0,1,0,89,0,110,2,88,0,121,10,124, + 0,106,4,125,2,87,0,110,20,4,0,116,5,107,10,114, + 84,1,0,1,0,1,0,89,0,110,18,88,0,124,2,100, + 0,107,9,114,102,116,6,124,2,131,1,83,0,121,10,124, + 0,106,7,125,3,87,0,110,24,4,0,116,5,107,10,114, + 136,1,0,1,0,1,0,100,3,125,3,89,0,110,2,88, + 0,121,10,124,0,106,8,125,4,87,0,110,52,4,0,116, + 5,107,10,114,200,1,0,1,0,1,0,124,1,100,0,107, + 8,114,184,100,4,106,9,124,3,131,1,83,0,110,12,100, + 5,106,9,124,3,124,1,131,2,83,0,89,0,110,14,88, + 0,100,6,106,9,124,3,124,4,131,2,83,0,100,0,83, + 0,41,7,78,218,10,95,95,108,111,97,100,101,114,95,95, 218,11,109,111,100,117,108,101,95,114,101,112,114,250,1,63, 122,13,60,109,111,100,117,108,101,32,123,33,114,125,62,122, 20,60,109,111,100,117,108,101,32,123,33,114,125,32,40,123, @@ -616,1374 +575,1310 @@ const unsigned char _Py_M__importlib[] = { 88,0,0,0,114,15,0,0,0,218,8,102,105,108,101,110, 97,109,101,114,10,0,0,0,114,10,0,0,0,114,11,0, 0,0,218,12,95,109,111,100,117,108,101,95,114,101,112,114, - 16,1,0,0,115,46,0,0,0,0,2,18,1,15,4,3, - 1,17,1,13,1,5,1,3,1,13,1,13,1,5,2,12, - 1,10,4,3,1,13,1,13,1,11,1,3,1,13,1,13, - 1,12,1,13,2,21,2,114,101,0,0,0,99,0,0,0, + 16,1,0,0,115,46,0,0,0,0,2,12,1,10,4,2, + 1,10,1,14,1,6,1,2,1,10,1,14,1,6,2,8, + 1,8,4,2,1,10,1,14,1,10,1,2,1,10,1,14, + 1,8,1,12,2,18,2,114,101,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, + 0,115,36,0,0,0,101,0,90,1,100,0,90,2,100,1, + 100,2,132,0,90,3,100,3,100,4,132,0,90,4,100,5, + 100,6,132,0,90,5,100,7,83,0,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,95,0,0,0,218,5,95,115,112,101,99,41,2,114,19, - 0,0,0,114,89,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,20,0,0,0,54,1,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,104,0,0,0, - 218,13,95,105,110,105,116,105,97,108,105,122,105,110,103,114, - 103,0,0,0,114,14,0,0,0,114,21,0,0,0,114,15, - 0,0,0,41,1,114,19,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,23,0,0,0,58,1, - 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,10,0,0,0,41,2,114,24,0, - 0,0,114,25,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,26,0,0,0,68,1,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,104,0,0, - 0,114,27,0,0,0,114,14,0,0,0,114,21,0,0,0, - 114,15,0,0,0,114,28,0,0,0,114,75,0,0,0,114, - 99,0,0,0,114,105,0,0,0,41,3,114,19,0,0,0, - 114,29,0,0,0,114,88,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,30,0,0,0,65,1, - 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, + 67,0,0,0,115,18,0,0,0,124,1,124,0,95,0,124, + 1,106,1,124,0,95,2,100,0,83,0,41,1,78,41,3, + 218,7,95,109,111,100,117,108,101,114,95,0,0,0,218,5, + 95,115,112,101,99,41,2,114,19,0,0,0,114,89,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,20,0,0,0,54,1,0,0,115,4,0,0,0,0,1, + 6,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,28,0,0,0,100,1,124,0,106,0,95,1, + 124,0,106,2,116,3,106,4,124,0,106,0,106,5,60,0, + 100,0,83,0,41,2,78,84,41,6,114,104,0,0,0,218, + 13,95,105,110,105,116,105,97,108,105,122,105,110,103,114,103, + 0,0,0,114,14,0,0,0,114,21,0,0,0,114,15,0, + 0,0,41,1,114,19,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,23,0,0,0,58,1,0, + 0,115,4,0,0,0,0,4,8,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,98,0,0, + 0,122,82,124,0,106,0,125,2,116,1,100,1,100,2,132, + 0,124,1,68,0,131,1,131,1,114,64,121,14,116,2,106, + 3,124,2,106,4,61,0,87,0,113,80,4,0,116,5,107, + 10,114,60,1,0,1,0,1,0,89,0,113,80,88,0,110, + 16,116,6,100,3,124,2,106,4,124,2,106,7,131,3,1, + 0,87,0,100,0,100,4,124,0,106,0,95,8,88,0,100, + 0,83,0,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,22,0,0,0, + 124,0,93,14,125,1,124,1,100,0,107,9,86,0,1,0, + 113,2,100,0,83,0,41,1,78,114,10,0,0,0,41,2, + 114,24,0,0,0,114,25,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,26,0,0,0,68,1, + 0,0,115,2,0,0,0,4,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,78,41,6,114,1,0,0,0,114,0,0, - 0,0,114,2,0,0,0,114,20,0,0,0,114,23,0,0, - 0,114,30,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,102,0,0,0,52, - 1,0,0,115,6,0,0,0,12,2,12,4,12,7,114,102, - 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, + 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, + 104,0,0,0,114,27,0,0,0,114,14,0,0,0,114,21, + 0,0,0,114,15,0,0,0,114,28,0,0,0,114,75,0, + 0,0,114,99,0,0,0,114,105,0,0,0,41,3,114,19, + 0,0,0,114,29,0,0,0,114,88,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,114,30,0,0, + 0,65,1,0,0,115,18,0,0,0,0,1,2,1,6,1, + 18,1,2,1,14,1,14,1,8,2,20,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,1,0,0,0, + 114,0,0,0,0,114,2,0,0,0,114,20,0,0,0,114, + 23,0,0,0,114,30,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,102,0, + 0,0,52,1,0,0,115,6,0,0,0,8,2,8,4,8, + 7,114,102,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,64,0,0,0,115,114,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,2, + 100,2,100,3,156,3,100,4,100,5,132,2,90,4,100,6, + 100,7,132,0,90,5,100,8,100,9,132,0,90,6,101,7, + 100,10,100,11,132,0,131,1,90,8,101,8,106,9,100,12, + 100,11,132,0,131,1,90,8,101,7,100,13,100,14,132,0, + 131,1,90,10,101,7,100,15,100,16,132,0,131,1,90,11, + 101,11,106,9,100,17,100,16,132,0,131,1,90,11,100,2, + 83,0,41,18,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,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,15, - 0,0,0,114,99,0,0,0,114,107,0,0,0,114,108,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,19,0,0,0,114,15,0, - 0,0,114,99,0,0,0,114,107,0,0,0,114,108,0,0, - 0,114,109,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,20,0,0,0,116,1,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,147,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,76,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,124,0,0,106, - 5,0,100,0,0,107,9,0,114,116,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,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,50,0,0,0,114,15,0, - 0,0,114,99,0,0,0,114,107,0,0,0,218,6,97,112, - 112,101,110,100,114,110,0,0,0,218,9,95,95,99,108,97, - 115,115,95,95,114,1,0,0,0,218,4,106,111,105,110,41, - 2,114,19,0,0,0,114,29,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,52,0,0,0,128, - 1,0,0,115,16,0,0,0,0,1,15,1,21,1,15,1, - 25,1,15,1,12,1,13,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,11,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,110, - 0,0,0,114,15,0,0,0,114,99,0,0,0,114,107,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,96,0,0,0,41,3,114, - 19,0,0,0,90,5,111,116,104,101,114,90,4,115,109,115, - 108,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 218,6,95,95,101,113,95,95,138,1,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,1,0,0,0,2,0,0,0,67,0,0,0,115,85,0, - 0,0,124,0,0,106,0,0,100,0,0,107,8,0,114,78, - 0,124,0,0,106,1,0,100,0,0,107,9,0,114,78,0, - 124,0,0,106,2,0,114,78,0,116,3,0,100,0,0,107, - 8,0,114,57,0,116,4,0,130,1,0,116,3,0,106,5, - 0,124,0,0,106,1,0,131,1,0,124,0,0,95,0,0, - 124,0,0,106,0,0,83,41,1,78,41,6,114,112,0,0, - 0,114,107,0,0,0,114,111,0,0,0,218,19,95,98,111, - 111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,108, - 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, - 69,114,114,111,114,90,11,95,103,101,116,95,99,97,99,104, - 101,100,41,1,114,19,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,116,0,0,0,150,1,0, - 0,115,12,0,0,0,0,2,15,1,24,1,12,1,6,1, - 21,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,112,0,0,0,41,2,114,19,0,0,0,114,116,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,116,0,0,0,159,1,0,0,115,2,0,0,0,0, - 2,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,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,218,1, - 46,114,33,0,0,0,41,3,114,110,0,0,0,114,15,0, - 0,0,218,10,114,112,97,114,116,105,116,105,111,110,41,1, - 114,19,0,0,0,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,218,6,112,97,114,101,110,116,163,1,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,111,0,0,0,41,1,114,19,0,0,0, + 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,78,41,3,218,6,111,114,105,103,105,110, + 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, + 54,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1, + 124,3,124,0,95,2,124,4,124,0,95,3,124,5,114,32, + 103,0,110,2,100,0,124,0,95,4,100,1,124,0,95,5, + 100,0,124,0,95,6,100,0,83,0,41,2,78,70,41,7, + 114,15,0,0,0,114,99,0,0,0,114,107,0,0,0,114, + 108,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,19,0,0,0,114, + 15,0,0,0,114,99,0,0,0,114,107,0,0,0,114,108, + 0,0,0,114,109,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,20,0,0,0,116,1,0,0, + 115,14,0,0,0,0,2,6,1,6,1,6,1,6,1,14, + 3,6,1,122,19,77,111,100,117,108,101,83,112,101,99,46, + 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, + 0,2,0,0,0,4,0,0,0,67,0,0,0,115,102,0, + 0,0,100,1,106,0,124,0,106,1,131,1,100,2,106,0, + 124,0,106,2,131,1,103,2,125,1,124,0,106,3,100,0, + 107,9,114,52,124,1,106,4,100,3,106,0,124,0,106,3, + 131,1,131,1,1,0,124,0,106,5,100,0,107,9,114,80, + 124,1,106,4,100,4,106,0,124,0,106,5,131,1,131,1, + 1,0,100,5,106,0,124,0,106,6,106,7,100,6,106,8, + 124,1,131,1,131,2,83,0,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,50,0, + 0,0,114,15,0,0,0,114,99,0,0,0,114,107,0,0, + 0,218,6,97,112,112,101,110,100,114,110,0,0,0,218,9, + 95,95,99,108,97,115,115,95,95,114,1,0,0,0,218,4, + 106,111,105,110,41,2,114,19,0,0,0,114,29,0,0,0, 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, - 117,0,0,0,171,1,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,111,0,0,0,41,2,114,19,0,0,0,218,5,118,97, - 108,117,101,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,114,117,0,0,0,175,1,0,0,115,2,0,0,0, - 0,2,41,12,114,1,0,0,0,114,0,0,0,0,114,2, - 0,0,0,114,3,0,0,0,114,20,0,0,0,114,52,0, - 0,0,114,118,0,0,0,218,8,112,114,111,112,101,114,116, - 121,114,116,0,0,0,218,6,115,101,116,116,101,114,114,123, - 0,0,0,114,117,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,106,0,0, - 0,79,1,0,0,115,20,0,0,0,12,35,6,2,15,1, - 15,11,12,10,12,12,18,9,21,4,18,8,18,4,114,106, - 0,0,0,114,107,0,0,0,114,109,0,0,0,99,2,0, + 52,0,0,0,128,1,0,0,115,16,0,0,0,0,1,10, + 1,14,1,10,1,18,1,10,1,8,1,10,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,11, + 0,0,0,67,0,0,0,115,102,0,0,0,124,0,106,0, + 125,2,121,70,124,0,106,1,124,1,106,1,107,2,111,76, + 124,0,106,2,124,1,106,2,107,2,111,76,124,0,106,3, + 124,1,106,3,107,2,111,76,124,2,124,1,106,0,107,2, + 111,76,124,0,106,4,124,1,106,4,107,2,111,76,124,0, + 106,5,124,1,106,5,107,2,83,0,4,0,116,6,107,10, + 114,96,1,0,1,0,1,0,100,1,83,0,88,0,100,0, + 83,0,41,2,78,70,41,7,114,110,0,0,0,114,15,0, + 0,0,114,99,0,0,0,114,107,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,96,0,0,0,41,3,114,19,0,0,0,90,5, + 111,116,104,101,114,90,4,115,109,115,108,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,6,95,95,101,113, + 95,95,138,1,0,0,115,20,0,0,0,0,1,6,1,2, + 1,12,1,12,1,12,1,10,1,12,1,12,1,14,1,122, + 17,77,111,100,117,108,101,83,112,101,99,46,95,95,101,113, + 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, + 0,0,0,67,0,0,0,115,58,0,0,0,124,0,106,0, + 100,0,107,8,114,52,124,0,106,1,100,0,107,9,114,52, + 124,0,106,2,114,52,116,3,100,0,107,8,114,38,116,4, + 130,1,116,3,106,5,124,0,106,1,131,1,124,0,95,0, + 124,0,106,0,83,0,41,1,78,41,6,114,112,0,0,0, + 114,107,0,0,0,114,111,0,0,0,218,19,95,98,111,111, + 116,115,116,114,97,112,95,101,120,116,101,114,110,97,108,218, + 19,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, + 114,114,111,114,90,11,95,103,101,116,95,99,97,99,104,101, + 100,41,1,114,19,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,116,0,0,0,150,1,0,0, + 115,12,0,0,0,0,2,10,1,16,1,8,1,4,1,14, + 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,10,0,0,0,124,1, + 124,0,95,0,100,0,83,0,41,1,78,41,1,114,112,0, + 0,0,41,2,114,19,0,0,0,114,116,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,116,0, + 0,0,159,1,0,0,115,2,0,0,0,0,2,99,1,0, + 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, + 0,0,115,38,0,0,0,124,0,106,0,100,1,107,8,114, + 28,124,0,106,1,106,2,100,2,131,1,100,3,25,0,83, + 0,110,6,124,0,106,1,83,0,100,1,83,0,41,4,122, + 32,84,104,101,32,110,97,109,101,32,111,102,32,116,104,101, + 32,109,111,100,117,108,101,39,115,32,112,97,114,101,110,116, + 46,78,218,1,46,114,33,0,0,0,41,3,114,110,0,0, + 0,114,15,0,0,0,218,10,114,112,97,114,116,105,116,105, + 111,110,41,1,114,19,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,6,112,97,114,101,110,116, + 163,1,0,0,115,6,0,0,0,0,3,10,1,18,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,6,0,0,0,124,0,106,0, + 83,0,41,1,78,41,1,114,111,0,0,0,41,1,114,19, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,117,0,0,0,171,1,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,14,0,0,0,116,0,124,1,131,1,124,0,95,1,100, + 0,83,0,41,1,78,41,2,218,4,98,111,111,108,114,111, + 0,0,0,41,2,114,19,0,0,0,218,5,118,97,108,117, + 101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,117,0,0,0,175,1,0,0,115,2,0,0,0,0,2, + 41,12,114,1,0,0,0,114,0,0,0,0,114,2,0,0, + 0,114,3,0,0,0,114,20,0,0,0,114,52,0,0,0, + 114,118,0,0,0,218,8,112,114,111,112,101,114,116,121,114, + 116,0,0,0,218,6,115,101,116,116,101,114,114,123,0,0, + 0,114,117,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,106,0,0,0,79, + 1,0,0,115,20,0,0,0,8,35,4,2,4,1,14,11, + 8,10,8,12,12,9,14,4,12,8,12,4,114,106,0,0, + 0,41,2,114,107,0,0,0,114,109,0,0,0,99,2,0, 0,0,2,0,0,0,6,0,0,0,15,0,0,0,67,0, - 0,0,115,217,0,0,0,116,0,0,124,1,0,100,1,0, - 131,2,0,114,110,0,116,1,0,100,2,0,107,8,0,114, - 33,0,116,2,0,130,1,0,116,1,0,106,3,0,125,4, - 0,124,3,0,100,2,0,107,8,0,114,70,0,124,4,0, - 124,0,0,100,3,0,124,1,0,131,1,1,83,124,3,0, - 114,82,0,103,0,0,110,3,0,100,2,0,125,5,0,124, - 4,0,124,0,0,100,3,0,124,1,0,100,4,0,124,5, - 0,131,1,2,83,124,3,0,100,2,0,107,8,0,114,192, - 0,116,0,0,124,1,0,100,5,0,131,2,0,114,186,0, - 121,19,0,124,1,0,106,4,0,124,0,0,131,1,0,125, - 3,0,87,113,192,0,4,116,5,0,107,10,0,114,182,0, - 1,1,1,100,2,0,125,3,0,89,113,192,0,88,110,6, - 0,100,6,0,125,3,0,116,6,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,90,12,103,101,116,95,102, - 105,108,101,110,97,109,101,78,114,99,0,0,0,114,110,0, - 0,0,114,109,0,0,0,70,114,107,0,0,0,41,7,114, - 4,0,0,0,114,119,0,0,0,114,120,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,109,0,0,0,114,77,0,0, - 0,114,106,0,0,0,41,6,114,15,0,0,0,114,99,0, - 0,0,114,107,0,0,0,114,109,0,0,0,114,128,0,0, - 0,90,6,115,101,97,114,99,104,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,85,0,0,0,180,1,0, - 0,115,34,0,0,0,0,2,15,1,12,1,6,1,9,2, - 12,1,16,1,18,1,15,1,7,2,12,1,15,1,3,1, - 19,1,13,1,14,3,6,2,114,85,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,118,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,105,0,121,13, - 0,124,0,0,106,3,0,125,1,0,87,110,18,0,4,116, - 1,0,107,10,0,114,104,0,1,1,1,89,110,1,0,88, - 121,13,0,124,0,0,106,4,0,125,5,0,87,110,24,0, - 4,116,1,0,107,10,0,114,144,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,218,0,124,5,0,100,0,0,107,8,0,114,212,0, - 121,13,0,124,1,0,106,5,0,125,2,0,87,113,218,0, - 4,116,1,0,107,10,0,114,208,0,1,1,1,100,0,0, - 125,2,0,89,113,218,0,88,110,6,0,124,5,0,125,2, - 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,1,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,47,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,87,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,107,0,0,0,70,84,41,13,114,95,0,0,0,114,96, - 0,0,0,114,1,0,0,0,114,91,0,0,0,114,98,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,106,0,0,0,114,111,0,0, - 0,114,116,0,0,0,114,110,0,0,0,41,8,114,89,0, - 0,0,114,99,0,0,0,114,107,0,0,0,114,88,0,0, - 0,114,15,0,0,0,90,8,108,111,99,97,116,105,111,110, - 114,116,0,0,0,114,110,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,17,95,115,112,101,99, - 95,102,114,111,109,95,109,111,100,117,108,101,209,1,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,5,1,3, - 1,13,1,13,1,11,1,12,1,12,1,3,1,13,1,13, - 1,14,2,6,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,132,0, - 0,0,218,8,111,118,101,114,114,105,100,101,70,99,2,0, - 0,0,1,0,0,0,5,0,0,0,59,0,0,0,67,0, - 0,0,115,54,2,0,0,124,2,0,115,30,0,116,0,0, - 124,1,0,100,1,0,100,0,0,131,3,0,100,0,0,107, - 8,0,114,67,0,121,16,0,124,0,0,106,1,0,124,1, - 0,95,2,0,87,110,18,0,4,116,3,0,107,10,0,114, - 66,0,1,1,1,89,110,1,0,88,124,2,0,115,97,0, - 116,0,0,124,1,0,100,2,0,100,0,0,131,3,0,100, - 0,0,107,8,0,114,221,0,124,0,0,106,4,0,125,3, - 0,124,3,0,100,0,0,107,8,0,114,187,0,124,0,0, - 106,5,0,100,0,0,107,9,0,114,187,0,116,6,0,100, - 0,0,107,8,0,114,151,0,116,7,0,130,1,0,116,6, - 0,106,8,0,125,4,0,124,4,0,106,9,0,124,4,0, - 131,1,0,125,3,0,124,0,0,106,5,0,124,3,0,95, - 10,0,121,13,0,124,3,0,124,1,0,95,11,0,87,110, - 18,0,4,116,3,0,107,10,0,114,220,0,1,1,1,89, - 110,1,0,88,124,2,0,115,251,0,116,0,0,124,1,0, - 100,3,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 32,1,121,16,0,124,0,0,106,12,0,124,1,0,95,13, - 0,87,110,18,0,4,116,3,0,107,10,0,114,31,1,1, - 1,1,89,110,1,0,88,121,13,0,124,0,0,124,1,0, - 95,14,0,87,110,18,0,4,116,3,0,107,10,0,114,65, - 1,1,1,1,89,110,1,0,88,124,2,0,115,96,1,116, - 0,0,124,1,0,100,4,0,100,0,0,131,3,0,100,0, - 0,107,8,0,114,148,1,124,0,0,106,5,0,100,0,0, - 107,9,0,114,148,1,121,16,0,124,0,0,106,5,0,124, - 1,0,95,15,0,87,110,18,0,4,116,3,0,107,10,0, - 114,147,1,1,1,1,89,110,1,0,88,124,0,0,106,16, - 0,114,50,2,124,2,0,115,187,1,116,0,0,124,1,0, - 100,5,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 224,1,121,16,0,124,0,0,106,17,0,124,1,0,95,18, - 0,87,110,18,0,4,116,3,0,107,10,0,114,223,1,1, - 1,1,89,110,1,0,88,124,2,0,115,254,1,116,0,0, - 124,1,0,100,6,0,100,0,0,131,3,0,100,0,0,107, - 8,0,114,50,2,124,0,0,106,19,0,100,0,0,107,9, - 0,114,50,2,121,16,0,124,0,0,106,19,0,124,1,0, - 95,20,0,87,110,18,0,4,116,3,0,107,10,0,114,49, - 2,1,1,1,89,110,1,0,88,124,1,0,83,41,7,78, - 114,1,0,0,0,114,91,0,0,0,218,11,95,95,112,97, - 99,107,97,103,101,95,95,114,131,0,0,0,114,98,0,0, - 0,114,129,0,0,0,41,21,114,6,0,0,0,114,15,0, - 0,0,114,1,0,0,0,114,96,0,0,0,114,99,0,0, - 0,114,110,0,0,0,114,119,0,0,0,114,120,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,90,5,95,112,97, - 116,104,114,91,0,0,0,114,123,0,0,0,114,134,0,0, - 0,114,95,0,0,0,114,131,0,0,0,114,117,0,0,0, - 114,107,0,0,0,114,98,0,0,0,114,116,0,0,0,114, - 129,0,0,0,41,5,114,88,0,0,0,114,89,0,0,0, - 114,133,0,0,0,114,99,0,0,0,114,135,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,18, - 95,105,110,105,116,95,109,111,100,117,108,101,95,97,116,116, - 114,115,254,1,0,0,115,92,0,0,0,0,4,30,1,3, - 1,16,1,13,1,5,2,30,1,9,1,12,2,15,1,12, - 1,6,1,9,2,15,1,12,1,3,1,13,1,13,1,5, - 2,30,1,3,1,16,1,13,1,5,2,3,1,13,1,13, - 1,5,2,30,1,15,1,3,1,16,1,13,1,5,2,9, - 1,30,1,3,1,16,1,13,1,5,2,30,1,15,1,3, - 1,16,1,13,1,5,1,114,137,0,0,0,99,1,0,0, - 0,0,0,0,0,2,0,0,0,5,0,0,0,67,0,0, - 0,115,129,0,0,0,100,1,0,125,1,0,116,0,0,124, - 0,0,106,1,0,100,2,0,131,2,0,114,45,0,124,0, - 0,106,1,0,106,2,0,124,0,0,131,1,0,125,1,0, - 110,40,0,116,0,0,124,0,0,106,1,0,100,3,0,131, - 2,0,114,85,0,116,3,0,106,4,0,100,4,0,116,5, - 0,100,5,0,100,6,0,131,2,1,1,124,1,0,100,1, - 0,107,8,0,114,112,0,116,6,0,124,0,0,106,7,0, - 131,1,0,125,1,0,116,8,0,124,0,0,124,1,0,131, - 2,0,1,124,1,0,83,41,7,122,43,67,114,101,97,116, - 101,32,97,32,109,111,100,117,108,101,32,98,97,115,101,100, - 32,111,110,32,116,104,101,32,112,114,111,118,105,100,101,100, - 32,115,112,101,99,46,78,218,13,99,114,101,97,116,101,95, - 109,111,100,117,108,101,218,11,101,120,101,99,95,109,111,100, - 117,108,101,122,87,115,116,97,114,116,105,110,103,32,105,110, - 32,80,121,116,104,111,110,32,51,46,54,44,32,108,111,97, - 100,101,114,115,32,100,101,102,105,110,105,110,103,32,101,120, - 101,99,95,109,111,100,117,108,101,40,41,32,109,117,115,116, - 32,97,108,115,111,32,100,101,102,105,110,101,32,99,114,101, - 97,116,101,95,109,111,100,117,108,101,40,41,90,10,115,116, - 97,99,107,108,101,118,101,108,233,2,0,0,0,41,9,114, - 4,0,0,0,114,99,0,0,0,114,138,0,0,0,218,9, - 95,119,97,114,110,105,110,103,115,218,4,119,97,114,110,218, - 18,68,101,112,114,101,99,97,116,105,111,110,87,97,114,110, - 105,110,103,114,16,0,0,0,114,15,0,0,0,114,137,0, - 0,0,41,2,114,88,0,0,0,114,89,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,16,109, - 111,100,117,108,101,95,102,114,111,109,95,115,112,101,99,58, - 2,0,0,115,20,0,0,0,0,3,6,1,18,3,21,1, - 18,1,9,2,13,1,12,1,15,1,13,1,114,144,0,0, - 0,99,1,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,149,0,0,0,124,0,0,106,0, - 0,100,1,0,107,8,0,114,21,0,100,2,0,110,6,0, - 124,0,0,106,0,0,125,1,0,124,0,0,106,1,0,100, - 1,0,107,8,0,114,95,0,124,0,0,106,2,0,100,1, - 0,107,8,0,114,73,0,100,3,0,106,3,0,124,1,0, - 131,1,0,83,100,4,0,106,3,0,124,1,0,124,0,0, - 106,2,0,131,2,0,83,110,50,0,124,0,0,106,4,0, - 114,123,0,100,5,0,106,3,0,124,1,0,124,0,0,106, - 1,0,131,2,0,83,100,6,0,106,3,0,124,0,0,106, - 0,0,124,0,0,106,1,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,93,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,5,114,15,0,0,0,114,107,0,0,0,114,99, - 0,0,0,114,50,0,0,0,114,117,0,0,0,41,2,114, - 88,0,0,0,114,15,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,97,0,0,0,76,2,0, - 0,115,16,0,0,0,0,3,30,1,15,1,15,1,13,2, - 22,2,9,1,19,2,114,97,0,0,0,99,2,0,0,0, - 0,0,0,0,4,0,0,0,12,0,0,0,67,0,0,0, - 115,253,0,0,0,124,0,0,106,0,0,125,2,0,116,1, - 0,106,2,0,131,0,0,1,116,3,0,124,2,0,131,1, - 0,143,208,0,1,116,4,0,106,5,0,106,6,0,124,2, - 0,131,1,0,124,1,0,107,9,0,114,89,0,100,1,0, - 106,7,0,124,2,0,131,1,0,125,3,0,116,8,0,124, - 3,0,100,2,0,124,2,0,131,1,1,130,1,0,124,0, - 0,106,9,0,100,3,0,107,8,0,114,163,0,124,0,0, - 106,10,0,100,3,0,107,8,0,114,140,0,116,8,0,100, - 4,0,100,2,0,124,0,0,106,0,0,131,1,1,130,1, - 0,116,11,0,124,0,0,124,1,0,100,5,0,100,6,0, - 131,2,1,1,124,1,0,83,116,11,0,124,0,0,124,1, - 0,100,5,0,100,6,0,131,2,1,1,116,12,0,124,0, - 0,106,9,0,100,7,0,131,2,0,115,219,0,124,0,0, - 106,9,0,106,13,0,124,2,0,131,1,0,1,110,16,0, - 124,0,0,106,9,0,106,14,0,124,1,0,131,1,0,1, - 87,100,3,0,81,82,88,116,4,0,106,5,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,15,0,0,0,78,122, - 14,109,105,115,115,105,110,103,32,108,111,97,100,101,114,114, - 133,0,0,0,84,114,139,0,0,0,41,15,114,15,0,0, - 0,114,57,0,0,0,218,12,97,99,113,117,105,114,101,95, - 108,111,99,107,114,54,0,0,0,114,14,0,0,0,114,21, - 0,0,0,114,42,0,0,0,114,50,0,0,0,114,77,0, - 0,0,114,99,0,0,0,114,110,0,0,0,114,137,0,0, - 0,114,4,0,0,0,218,11,108,111,97,100,95,109,111,100, - 117,108,101,114,139,0,0,0,41,4,114,88,0,0,0,114, - 89,0,0,0,114,15,0,0,0,218,3,109,115,103,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,114,86,0, - 0,0,93,2,0,0,115,32,0,0,0,0,2,9,1,10, - 1,13,1,24,1,15,1,18,1,15,1,15,1,21,2,19, - 1,4,1,19,1,18,4,19,2,23,1,114,86,0,0,0, - 99,1,0,0,0,0,0,0,0,2,0,0,0,27,0,0, - 0,67,0,0,0,115,3,1,0,0,124,0,0,106,0,0, - 106,1,0,124,0,0,106,2,0,131,1,0,1,116,3,0, - 106,4,0,124,0,0,106,2,0,25,125,1,0,116,5,0, - 124,1,0,100,1,0,100,0,0,131,3,0,100,0,0,107, - 8,0,114,96,0,121,16,0,124,0,0,106,0,0,124,1, - 0,95,6,0,87,110,18,0,4,116,7,0,107,10,0,114, - 95,0,1,1,1,89,110,1,0,88,116,5,0,124,1,0, - 100,2,0,100,0,0,131,3,0,100,0,0,107,8,0,114, - 197,0,121,56,0,124,1,0,106,8,0,124,1,0,95,9, - 0,116,10,0,124,1,0,100,3,0,131,2,0,115,175,0, - 124,0,0,106,2,0,106,11,0,100,4,0,131,1,0,100, - 5,0,25,124,1,0,95,9,0,87,110,18,0,4,116,7, - 0,107,10,0,114,196,0,1,1,1,89,110,1,0,88,116, - 5,0,124,1,0,100,6,0,100,0,0,131,3,0,100,0, - 0,107,8,0,114,255,0,121,13,0,124,0,0,124,1,0, - 95,12,0,87,110,18,0,4,116,7,0,107,10,0,114,254, - 0,1,1,1,89,110,1,0,88,124,1,0,83,41,7,78, - 114,91,0,0,0,114,134,0,0,0,114,131,0,0,0,114, - 121,0,0,0,114,33,0,0,0,114,95,0,0,0,41,13, - 114,99,0,0,0,114,146,0,0,0,114,15,0,0,0,114, - 14,0,0,0,114,21,0,0,0,114,6,0,0,0,114,91, - 0,0,0,114,96,0,0,0,114,1,0,0,0,114,134,0, - 0,0,114,4,0,0,0,114,122,0,0,0,114,95,0,0, - 0,41,2,114,88,0,0,0,114,89,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,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,118,2,0,0,115,40,0,0,0, - 0,4,19,2,16,1,24,1,3,1,16,1,13,1,5,1, - 24,1,3,4,12,1,15,1,29,1,13,1,5,1,24,1, - 3,1,13,1,13,1,5,1,114,148,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,159,0,0,0,124,0,0,106,0,0,100,0,0, - 107,9,0,114,43,0,116,1,0,124,0,0,106,0,0,100, - 1,0,131,2,0,115,43,0,116,2,0,124,0,0,131,1, - 0,83,116,3,0,124,0,0,131,1,0,125,1,0,116,4, - 0,124,1,0,131,1,0,143,75,0,1,124,0,0,106,0, - 0,100,0,0,107,8,0,114,122,0,124,0,0,106,5,0, - 100,0,0,107,8,0,114,138,0,116,6,0,100,2,0,100, - 3,0,124,0,0,106,7,0,131,1,1,130,1,0,110,16, - 0,124,0,0,106,0,0,106,8,0,124,1,0,131,1,0, - 1,87,100,0,0,81,82,88,116,9,0,106,10,0,124,0, - 0,106,7,0,25,83,41,4,78,114,139,0,0,0,122,14, - 109,105,115,115,105,110,103,32,108,111,97,100,101,114,114,15, - 0,0,0,41,11,114,99,0,0,0,114,4,0,0,0,114, - 148,0,0,0,114,144,0,0,0,114,102,0,0,0,114,110, - 0,0,0,114,77,0,0,0,114,15,0,0,0,114,139,0, - 0,0,114,14,0,0,0,114,21,0,0,0,41,2,114,88, + 0,0,115,164,0,0,0,116,0,124,1,100,1,131,2,114, + 80,116,1,100,2,107,8,114,22,116,2,130,1,116,1,106, + 3,125,4,124,3,100,2,107,8,114,50,124,4,124,0,100, + 3,124,1,144,1,131,1,83,0,124,3,114,58,103,0,110, + 2,100,2,125,5,124,4,124,0,100,3,124,1,100,4,124, + 5,144,2,131,1,83,0,124,3,100,2,107,8,114,144,116, + 0,124,1,100,5,131,2,114,140,121,14,124,1,106,4,124, + 0,131,1,125,3,87,0,113,144,4,0,116,5,107,10,114, + 136,1,0,1,0,1,0,100,2,125,3,89,0,113,144,88, + 0,110,4,100,6,125,3,116,6,124,0,124,1,100,7,124, + 2,100,5,124,3,144,2,131,2,83,0,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,90,12,103,101,116,95,102,105,108,101,110,97, + 109,101,78,114,99,0,0,0,114,110,0,0,0,114,109,0, + 0,0,70,114,107,0,0,0,41,7,114,4,0,0,0,114, + 119,0,0,0,114,120,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,109,0,0,0,114,77,0,0,0,114,106,0,0, + 0,41,6,114,15,0,0,0,114,99,0,0,0,114,107,0, + 0,0,114,109,0,0,0,114,128,0,0,0,90,6,115,101, + 97,114,99,104,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,85,0,0,0,180,1,0,0,115,34,0,0, + 0,0,2,10,1,8,1,4,1,6,2,8,1,14,1,12, + 1,10,1,8,2,8,1,10,1,2,1,14,1,14,1,12, + 3,4,2,114,85,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,58,1, + 0,0,121,10,124,0,106,0,125,3,87,0,110,20,4,0, + 116,1,107,10,114,30,1,0,1,0,1,0,89,0,110,14, + 88,0,124,3,100,0,107,9,114,44,124,3,83,0,124,0, + 106,2,125,4,124,1,100,0,107,8,114,90,121,10,124,0, + 106,3,125,1,87,0,110,20,4,0,116,1,107,10,114,88, + 1,0,1,0,1,0,89,0,110,2,88,0,121,10,124,0, + 106,4,125,5,87,0,110,24,4,0,116,1,107,10,114,124, + 1,0,1,0,1,0,100,0,125,5,89,0,110,2,88,0, + 124,2,100,0,107,8,114,184,124,5,100,0,107,8,114,180, + 121,10,124,1,106,5,125,2,87,0,113,184,4,0,116,1, + 107,10,114,176,1,0,1,0,1,0,100,0,125,2,89,0, + 113,184,88,0,110,4,124,5,125,2,121,10,124,0,106,6, + 125,6,87,0,110,24,4,0,116,1,107,10,114,218,1,0, + 1,0,1,0,100,0,125,6,89,0,110,2,88,0,121,14, + 116,7,124,0,106,8,131,1,125,7,87,0,110,26,4,0, + 116,1,107,10,144,1,114,4,1,0,1,0,1,0,100,0, + 125,7,89,0,110,2,88,0,116,9,124,4,124,1,100,1, + 124,2,144,1,131,2,125,3,124,5,100,0,107,8,144,1, + 114,36,100,2,110,2,100,3,124,3,95,10,124,6,124,3, + 95,11,124,7,124,3,95,12,124,3,83,0,41,4,78,114, + 107,0,0,0,70,84,41,13,114,95,0,0,0,114,96,0, + 0,0,114,1,0,0,0,114,91,0,0,0,114,98,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,106,0,0,0,114,111,0,0,0, + 114,116,0,0,0,114,110,0,0,0,41,8,114,89,0,0, + 0,114,99,0,0,0,114,107,0,0,0,114,88,0,0,0, + 114,15,0,0,0,90,8,108,111,99,97,116,105,111,110,114, + 116,0,0,0,114,110,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,218,17,95,115,112,101,99,95, + 102,114,111,109,95,109,111,100,117,108,101,209,1,0,0,115, + 72,0,0,0,0,2,2,1,10,1,14,1,6,2,8,1, + 4,2,6,1,8,1,2,1,10,1,14,2,6,1,2,1, + 10,1,14,1,10,1,8,1,8,1,2,1,10,1,14,1, + 12,2,4,1,2,1,10,1,14,1,10,1,2,1,14,1, + 16,1,10,2,16,1,20,1,6,1,6,1,114,132,0,0, + 0,70,41,1,218,8,111,118,101,114,114,105,100,101,99,2, + 0,0,0,1,0,0,0,5,0,0,0,59,0,0,0,67, + 0,0,0,115,212,1,0,0,124,2,115,20,116,0,124,1, + 100,1,100,0,131,3,100,0,107,8,114,54,121,12,124,0, + 106,1,124,1,95,2,87,0,110,20,4,0,116,3,107,10, + 114,52,1,0,1,0,1,0,89,0,110,2,88,0,124,2, + 115,74,116,0,124,1,100,2,100,0,131,3,100,0,107,8, + 114,166,124,0,106,4,125,3,124,3,100,0,107,8,114,134, + 124,0,106,5,100,0,107,9,114,134,116,6,100,0,107,8, + 114,110,116,7,130,1,116,6,106,8,125,4,124,4,106,9, + 124,4,131,1,125,3,124,0,106,5,124,3,95,10,121,10, + 124,3,124,1,95,11,87,0,110,20,4,0,116,3,107,10, + 114,164,1,0,1,0,1,0,89,0,110,2,88,0,124,2, + 115,186,116,0,124,1,100,3,100,0,131,3,100,0,107,8, + 114,220,121,12,124,0,106,12,124,1,95,13,87,0,110,20, + 4,0,116,3,107,10,114,218,1,0,1,0,1,0,89,0, + 110,2,88,0,121,10,124,0,124,1,95,14,87,0,110,20, + 4,0,116,3,107,10,114,250,1,0,1,0,1,0,89,0, + 110,2,88,0,124,2,144,1,115,20,116,0,124,1,100,4, + 100,0,131,3,100,0,107,8,144,1,114,68,124,0,106,5, + 100,0,107,9,144,1,114,68,121,12,124,0,106,5,124,1, + 95,15,87,0,110,22,4,0,116,3,107,10,144,1,114,66, + 1,0,1,0,1,0,89,0,110,2,88,0,124,0,106,16, + 144,1,114,208,124,2,144,1,115,100,116,0,124,1,100,5, + 100,0,131,3,100,0,107,8,144,1,114,136,121,12,124,0, + 106,17,124,1,95,18,87,0,110,22,4,0,116,3,107,10, + 144,1,114,134,1,0,1,0,1,0,89,0,110,2,88,0, + 124,2,144,1,115,160,116,0,124,1,100,6,100,0,131,3, + 100,0,107,8,144,1,114,208,124,0,106,19,100,0,107,9, + 144,1,114,208,121,12,124,0,106,19,124,1,95,20,87,0, + 110,22,4,0,116,3,107,10,144,1,114,206,1,0,1,0, + 1,0,89,0,110,2,88,0,124,1,83,0,41,7,78,114, + 1,0,0,0,114,91,0,0,0,218,11,95,95,112,97,99, + 107,97,103,101,95,95,114,131,0,0,0,114,98,0,0,0, + 114,129,0,0,0,41,21,114,6,0,0,0,114,15,0,0, + 0,114,1,0,0,0,114,96,0,0,0,114,99,0,0,0, + 114,110,0,0,0,114,119,0,0,0,114,120,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,90,5,95,112,97,116, + 104,114,91,0,0,0,114,123,0,0,0,114,134,0,0,0, + 114,95,0,0,0,114,131,0,0,0,114,117,0,0,0,114, + 107,0,0,0,114,98,0,0,0,114,116,0,0,0,114,129, + 0,0,0,41,5,114,88,0,0,0,114,89,0,0,0,114, + 133,0,0,0,114,99,0,0,0,114,135,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,18,95, + 105,110,105,116,95,109,111,100,117,108,101,95,97,116,116,114, + 115,254,1,0,0,115,92,0,0,0,0,4,20,1,2,1, + 12,1,14,1,6,2,20,1,6,1,8,2,10,1,8,1, + 4,1,6,2,10,1,8,1,2,1,10,1,14,1,6,2, + 20,1,2,1,12,1,14,1,6,2,2,1,10,1,14,1, + 6,2,24,1,12,1,2,1,12,1,16,1,6,2,8,1, + 24,1,2,1,12,1,16,1,6,2,24,1,12,1,2,1, + 12,1,16,1,6,1,114,137,0,0,0,99,1,0,0,0, + 0,0,0,0,2,0,0,0,5,0,0,0,67,0,0,0, + 115,92,0,0,0,100,1,125,1,116,0,124,0,106,1,100, + 2,131,2,114,30,124,0,106,1,106,2,124,0,131,1,125, + 1,110,30,116,0,124,0,106,1,100,3,131,2,114,60,116, + 3,106,4,100,4,116,5,100,5,100,6,144,1,131,2,1, + 0,124,1,100,1,107,8,114,78,116,6,124,0,106,7,131, + 1,125,1,116,8,124,0,124,1,131,2,1,0,124,1,83, + 0,41,7,122,43,67,114,101,97,116,101,32,97,32,109,111, + 100,117,108,101,32,98,97,115,101,100,32,111,110,32,116,104, + 101,32,112,114,111,118,105,100,101,100,32,115,112,101,99,46, + 78,218,13,99,114,101,97,116,101,95,109,111,100,117,108,101, + 218,11,101,120,101,99,95,109,111,100,117,108,101,122,87,115, + 116,97,114,116,105,110,103,32,105,110,32,80,121,116,104,111, + 110,32,51,46,54,44,32,108,111,97,100,101,114,115,32,100, + 101,102,105,110,105,110,103,32,101,120,101,99,95,109,111,100, + 117,108,101,40,41,32,109,117,115,116,32,97,108,115,111,32, + 100,101,102,105,110,101,32,99,114,101,97,116,101,95,109,111, + 100,117,108,101,40,41,218,10,115,116,97,99,107,108,101,118, + 101,108,233,2,0,0,0,41,9,114,4,0,0,0,114,99, + 0,0,0,114,138,0,0,0,218,9,95,119,97,114,110,105, + 110,103,115,218,4,119,97,114,110,218,18,68,101,112,114,101, + 99,97,116,105,111,110,87,97,114,110,105,110,103,114,16,0, + 0,0,114,15,0,0,0,114,137,0,0,0,41,2,114,88, 0,0,0,114,89,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,14,95,108,111,97,100,95,117, - 110,108,111,99,107,101,100,147,2,0,0,115,20,0,0,0, - 0,2,15,2,18,1,10,2,12,1,13,1,15,1,15,1, - 24,3,23,5,114,149,0,0,0,99,1,0,0,0,0,0, - 0,0,1,0,0,0,9,0,0,0,67,0,0,0,115,47, - 0,0,0,116,0,0,106,1,0,131,0,0,1,116,2,0, - 124,0,0,106,3,0,131,1,0,143,15,0,1,116,4,0, - 124,0,0,131,1,0,83,87,100,1,0,81,82,88,100,1, - 0,83,41,2,122,191,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,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, - 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,99,108,111,98,98,101,114,101,100,46,10, - 10,32,32,32,32,78,41,5,114,57,0,0,0,114,145,0, - 0,0,114,54,0,0,0,114,15,0,0,0,114,149,0,0, - 0,41,1,114,88,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,87,0,0,0,170,2,0,0, - 115,6,0,0,0,0,9,10,1,16,1,114,87,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,205,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,6,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,101,6,0,101,15,0,131,1,0, - 90,16,0,100,4,0,83,41,19,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,50,0,0,0,114,1, - 0,0,0,41,1,114,89,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,92,0,0,0,195,2, - 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,107, + 0,0,114,11,0,0,0,218,16,109,111,100,117,108,101,95, + 102,114,111,109,95,115,112,101,99,58,2,0,0,115,20,0, + 0,0,0,3,4,1,12,3,14,1,12,1,6,2,12,1, + 8,1,10,1,10,1,114,145,0,0,0,99,1,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, + 115,110,0,0,0,124,0,106,0,100,1,107,8,114,14,100, + 2,110,4,124,0,106,0,125,1,124,0,106,1,100,1,107, + 8,114,68,124,0,106,2,100,1,107,8,114,52,100,3,106, + 3,124,1,131,1,83,0,113,106,100,4,106,3,124,1,124, + 0,106,2,131,2,83,0,110,38,124,0,106,4,114,90,100, + 5,106,3,124,1,124,0,106,1,131,2,83,0,110,16,100, + 6,106,3,124,0,106,0,124,0,106,1,131,2,83,0,100, + 1,83,0,41,7,122,38,82,101,116,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,93, + 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,5,114,15,0,0,0,114,107,0,0, + 0,114,99,0,0,0,114,50,0,0,0,114,117,0,0,0, + 41,2,114,88,0,0,0,114,15,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,97,0,0,0, + 76,2,0,0,115,16,0,0,0,0,3,20,1,10,1,10, + 1,12,2,16,2,6,1,16,2,114,97,0,0,0,99,2, + 0,0,0,0,0,0,0,4,0,0,0,12,0,0,0,67, + 0,0,0,115,194,0,0,0,124,0,106,0,125,2,116,1, + 106,2,131,0,1,0,116,3,124,2,131,1,143,156,1,0, + 116,4,106,5,106,6,124,2,131,1,124,1,107,9,114,64, + 100,1,106,7,124,2,131,1,125,3,116,8,124,3,100,2, + 124,2,144,1,131,1,130,1,124,0,106,9,100,3,107,8, + 114,120,124,0,106,10,100,3,107,8,114,100,116,8,100,4, + 100,2,124,0,106,0,144,1,131,1,130,1,116,11,124,0, + 124,1,100,5,100,6,144,1,131,2,1,0,124,1,83,0, + 116,11,124,0,124,1,100,5,100,6,144,1,131,2,1,0, + 116,12,124,0,106,9,100,7,131,2,115,162,124,0,106,9, + 106,13,124,2,131,1,1,0,110,12,124,0,106,9,106,14, + 124,1,131,1,1,0,87,0,100,3,81,0,82,0,88,0, + 116,4,106,5,124,2,25,0,83,0,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,15,0,0,0,78,122,14,109,105,115,115,105,110,103, + 32,108,111,97,100,101,114,114,133,0,0,0,84,114,139,0, + 0,0,41,15,114,15,0,0,0,114,57,0,0,0,218,12, + 97,99,113,117,105,114,101,95,108,111,99,107,114,54,0,0, + 0,114,14,0,0,0,114,21,0,0,0,114,42,0,0,0, + 114,50,0,0,0,114,77,0,0,0,114,99,0,0,0,114, + 110,0,0,0,114,137,0,0,0,114,4,0,0,0,218,11, + 108,111,97,100,95,109,111,100,117,108,101,114,139,0,0,0, + 41,4,114,88,0,0,0,114,89,0,0,0,114,15,0,0, + 0,218,3,109,115,103,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,86,0,0,0,93,2,0,0,115,32, + 0,0,0,0,2,6,1,8,1,10,1,16,1,10,1,14, + 1,10,1,10,1,16,2,16,1,4,1,16,1,12,4,14, + 2,22,1,114,86,0,0,0,99,1,0,0,0,0,0,0, + 0,2,0,0,0,27,0,0,0,67,0,0,0,115,206,0, + 0,0,124,0,106,0,106,1,124,0,106,2,131,1,1,0, + 116,3,106,4,124,0,106,2,25,0,125,1,116,5,124,1, + 100,1,100,0,131,3,100,0,107,8,114,76,121,12,124,0, + 106,0,124,1,95,6,87,0,110,20,4,0,116,7,107,10, + 114,74,1,0,1,0,1,0,89,0,110,2,88,0,116,5, + 124,1,100,2,100,0,131,3,100,0,107,8,114,154,121,40, + 124,1,106,8,124,1,95,9,116,10,124,1,100,3,131,2, + 115,130,124,0,106,2,106,11,100,4,131,1,100,5,25,0, + 124,1,95,9,87,0,110,20,4,0,116,7,107,10,114,152, + 1,0,1,0,1,0,89,0,110,2,88,0,116,5,124,1, + 100,6,100,0,131,3,100,0,107,8,114,202,121,10,124,0, + 124,1,95,12,87,0,110,20,4,0,116,7,107,10,114,200, + 1,0,1,0,1,0,89,0,110,2,88,0,124,1,83,0, + 41,7,78,114,91,0,0,0,114,134,0,0,0,114,131,0, + 0,0,114,121,0,0,0,114,33,0,0,0,114,95,0,0, + 0,41,13,114,99,0,0,0,114,147,0,0,0,114,15,0, + 0,0,114,14,0,0,0,114,21,0,0,0,114,6,0,0, + 0,114,91,0,0,0,114,96,0,0,0,114,1,0,0,0, + 114,134,0,0,0,114,4,0,0,0,114,122,0,0,0,114, + 95,0,0,0,41,2,114,88,0,0,0,114,89,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,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,118,2,0,0,115,40, + 0,0,0,0,4,14,2,12,1,16,1,2,1,12,1,14, + 1,6,1,16,1,2,4,8,1,10,1,22,1,14,1,6, + 1,16,1,2,1,10,1,14,1,6,1,114,149,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,120,0,0,0,124,0,106,0,100,0, + 107,9,114,30,116,1,124,0,106,0,100,1,131,2,115,30, + 116,2,124,0,131,1,83,0,116,3,124,0,131,1,125,1, + 116,4,124,1,131,1,143,56,1,0,124,0,106,0,100,0, + 107,8,114,86,124,0,106,5,100,0,107,8,114,98,116,6, + 100,2,100,3,124,0,106,7,144,1,131,1,130,1,110,12, + 124,0,106,0,106,8,124,1,131,1,1,0,87,0,100,0, + 81,0,82,0,88,0,116,9,106,10,124,0,106,7,25,0, + 83,0,41,4,78,114,139,0,0,0,122,14,109,105,115,115, + 105,110,103,32,108,111,97,100,101,114,114,15,0,0,0,41, + 11,114,99,0,0,0,114,4,0,0,0,114,149,0,0,0, + 114,145,0,0,0,114,102,0,0,0,114,110,0,0,0,114, + 77,0,0,0,114,15,0,0,0,114,139,0,0,0,114,14, + 0,0,0,114,21,0,0,0,41,2,114,88,0,0,0,114, + 89,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,14,95,108,111,97,100,95,117,110,108,111,99, + 107,101,100,147,2,0,0,115,20,0,0,0,0,2,10,2, + 12,1,8,2,8,1,10,1,10,1,10,1,18,3,22,5, + 114,150,0,0,0,99,1,0,0,0,0,0,0,0,1,0, + 0,0,9,0,0,0,67,0,0,0,115,38,0,0,0,116, + 0,106,1,131,0,1,0,116,2,124,0,106,3,131,1,143, + 10,1,0,116,4,124,0,131,1,83,0,81,0,82,0,88, + 0,100,1,83,0,41,2,122,191,82,101,116,117,114,110,32, + 97,32,110,101,119,32,109,111,100,117,108,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,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,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,99,108,111,98,98,101,114,101, + 100,46,10,10,32,32,32,32,78,41,5,114,57,0,0,0, + 114,146,0,0,0,114,54,0,0,0,114,15,0,0,0,114, + 150,0,0,0,41,1,114,88,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,87,0,0,0,170, + 2,0,0,115,6,0,0,0,0,9,8,1,12,1,114,87, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,64,0,0,0,115,136,0,0,0,101,0,90, + 1,100,0,90,2,100,1,90,3,101,4,100,2,100,3,132, + 0,131,1,90,5,101,6,100,19,100,5,100,6,132,1,131, + 1,90,7,101,6,100,20,100,7,100,8,132,1,131,1,90, + 8,101,6,100,9,100,10,132,0,131,1,90,9,101,6,100, + 11,100,12,132,0,131,1,90,10,101,6,101,11,100,13,100, + 14,132,0,131,1,131,1,90,12,101,6,101,11,100,15,100, + 16,132,0,131,1,131,1,90,13,101,6,101,11,100,17,100, + 18,132,0,131,1,131,1,90,14,101,6,101,15,131,1,90, + 16,100,4,83,0,41,21,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, + 12,0,0,0,100,1,106,0,124,0,106,1,131,1,83,0, + 41,2,122,115,82,101,116,117,114,110,32,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,50,0,0,0,114,1,0,0,0,41,1,114, + 89,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,114,92,0,0,0,195,2,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,48,0,0,0,124,2,100,0,107, + 9,114,12,100,0,83,0,116,0,106,1,124,1,131,1,114, + 40,116,2,124,1,124,0,100,1,100,2,144,1,131,2,83, + 0,110,4,100,0,83,0,100,0,83,0,41,3,78,114,107, 0,0,0,122,8,98,117,105,108,116,45,105,110,41,3,114, 57,0,0,0,90,10,105,115,95,98,117,105,108,116,105,110, 114,85,0,0,0,41,4,218,3,99,108,115,114,78,0,0, 0,218,4,112,97,116,104,218,6,116,97,114,103,101,116,114, 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,9, 102,105,110,100,95,115,112,101,99,204,2,0,0,115,10,0, - 0,0,0,2,12,1,4,1,15,1,19,2,122,25,66,117, + 0,0,0,2,8,1,4,1,10,1,18,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,154,0,0,0,114,99,0,0,0,41,4,114,151,0,0, - 0,114,78,0,0,0,114,152,0,0,0,114,88,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 11,102,105,110,100,95,109,111,100,117,108,101,213,2,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,2, - 0,0,0,4,0,0,0,67,0,0,0,115,67,0,0,0, - 124,1,0,106,0,0,116,1,0,106,2,0,107,7,0,114, - 51,0,116,3,0,100,1,0,106,4,0,124,1,0,106,0, - 0,131,1,0,100,2,0,124,1,0,106,0,0,131,1,1, - 130,1,0,116,5,0,116,6,0,106,7,0,124,1,0,131, - 2,0,83,41,3,122,24,67,114,101,97,116,101,32,97,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,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,15, - 0,0,0,41,8,114,15,0,0,0,114,14,0,0,0,114, - 76,0,0,0,114,77,0,0,0,114,50,0,0,0,114,65, - 0,0,0,114,57,0,0,0,90,14,99,114,101,97,116,101, - 95,98,117,105,108,116,105,110,41,2,114,19,0,0,0,114, - 88,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,114,138,0,0,0,225,2,0,0,115,8,0,0, - 0,0,3,18,1,21,1,12,1,122,29,66,117,105,108,116, - 105,110,73,109,112,111,114,116,101,114,46,99,114,101,97,116, - 101,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,20,0, - 0,0,116,0,0,116,1,0,106,2,0,124,1,0,131,2, - 0,1,100,1,0,83,41,2,122,22,69,120,101,99,32,97, + 4,0,0,0,3,0,0,0,67,0,0,0,115,30,0,0, + 0,124,0,106,0,124,1,124,2,131,2,125,3,124,3,100, + 1,107,9,114,26,124,3,106,1,83,0,100,1,83,0,41, + 2,122,175,70,105,110,100,32,116,104,101,32,98,117,105,108, + 116,45,105,110,32,109,111,100,117,108,101,46,10,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,155,0,0,0,114,99,0,0,0,41, + 4,114,152,0,0,0,114,78,0,0,0,114,153,0,0,0, + 114,88,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,11,102,105,110,100,95,109,111,100,117,108, + 101,213,2,0,0,115,4,0,0,0,0,9,12,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,2,0,0,0,4,0,0,0,67,0,0,0, + 115,48,0,0,0,124,1,106,0,116,1,106,2,107,7,114, + 36,116,3,100,1,106,4,124,1,106,0,131,1,100,2,124, + 1,106,0,144,1,131,1,130,1,116,5,116,6,106,7,124, + 1,131,2,83,0,41,3,122,24,67,114,101,97,116,101,32, + 97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,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, - 78,41,3,114,65,0,0,0,114,57,0,0,0,90,12,101, - 120,101,99,95,98,117,105,108,116,105,110,41,2,114,19,0, - 0,0,114,89,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,139,0,0,0,233,2,0,0,115, - 2,0,0,0,0,3,122,27,66,117,105,108,116,105,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, - 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, - 10,0,0,0,41,2,114,151,0,0,0,114,78,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 8,103,101,116,95,99,111,100,101,238,2,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,10,0,0,0,41,2, - 114,151,0,0,0,114,78,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,10,103,101,116,95,115, - 111,117,114,99,101,244,2,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, + 114,15,0,0,0,41,8,114,15,0,0,0,114,14,0,0, + 0,114,76,0,0,0,114,77,0,0,0,114,50,0,0,0, + 114,65,0,0,0,114,57,0,0,0,90,14,99,114,101,97, + 116,101,95,98,117,105,108,116,105,110,41,2,114,19,0,0, + 0,114,88,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,138,0,0,0,225,2,0,0,115,8, + 0,0,0,0,3,12,1,14,1,10,1,122,29,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,46,99,114,101, + 97,116,101,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, + 16,0,0,0,116,0,116,1,106,2,124,1,131,2,1,0, + 100,1,83,0,41,2,122,22,69,120,101,99,32,97,32,98, + 117,105,108,116,45,105,110,32,109,111,100,117,108,101,78,41, + 3,114,65,0,0,0,114,57,0,0,0,90,12,101,120,101, + 99,95,98,117,105,108,116,105,110,41,2,114,19,0,0,0, + 114,89,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,139,0,0,0,233,2,0,0,115,2,0, + 0,0,0,3,122,27,66,117,105,108,116,105,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,1,0, + 0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,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,10,0, + 0,0,41,2,114,152,0,0,0,114,78,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,103, + 101,116,95,99,111,100,101,238,2,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,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,10,0,0,0,41,2,114,151,0,0,0,114, - 78,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,114,109,0,0,0,250,2,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, - 17,114,1,0,0,0,114,0,0,0,0,114,2,0,0,0, - 114,3,0,0,0,218,12,115,116,97,116,105,99,109,101,116, - 104,111,100,114,92,0,0,0,218,11,99,108,97,115,115,109, - 101,116,104,111,100,114,154,0,0,0,114,155,0,0,0,114, - 138,0,0,0,114,139,0,0,0,114,81,0,0,0,114,156, - 0,0,0,114,157,0,0,0,114,109,0,0,0,114,90,0, - 0,0,114,146,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,150,0,0,0, - 186,2,0,0,115,30,0,0,0,12,7,6,2,18,9,3, - 1,21,8,3,1,18,11,18,8,18,5,3,1,21,5,3, - 1,21,5,3,1,21,5,114,150,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,211,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,6,0,100,9,0,100,10,0, - 132,0,0,131,1,0,90,9,0,101,4,0,100,11,0,100, - 12,0,132,0,0,131,1,0,90,10,0,101,6,0,100,13, - 0,100,14,0,132,0,0,131,1,0,90,11,0,101,6,0, - 101,12,0,100,15,0,100,16,0,132,0,0,131,1,0,131, - 1,0,90,13,0,101,6,0,101,12,0,100,17,0,100,18, - 0,132,0,0,131,1,0,131,1,0,90,14,0,101,6,0, - 101,12,0,100,19,0,100,20,0,132,0,0,131,1,0,131, - 1,0,90,15,0,100,4,0,83,41,21,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,50,0,0,0,114,1,0,0,0, - 41,1,218,1,109,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,114,92,0,0,0,12,3,0,0,115,2,0, - 0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,111, - 114,116,101,114,46,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,107,0,0,0,90,6,102, - 114,111,122,101,110,41,3,114,57,0,0,0,114,82,0,0, - 0,114,85,0,0,0,41,4,114,151,0,0,0,114,78,0, - 0,0,114,152,0,0,0,114,153,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,154,0,0,0, - 21,3,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,57, - 0,0,0,114,82,0,0,0,41,3,114,151,0,0,0,114, - 78,0,0,0,114,152,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,155,0,0,0,28,3,0, - 0,115,2,0,0,0,0,7,122,26,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,46,102,105,110,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,42,85,115,101,32,100,101,102,97,117,108, - 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, - 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, - 78,114,10,0,0,0,41,2,114,151,0,0,0,114,88,0, + 0,115,4,0,0,0,100,1,83,0,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,10,0,0,0,41,2,114,152, + 0,0,0,114,78,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,10,103,101,116,95,115,111,117, + 114,99,101,244,2,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,83,0,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,10,0,0,0,41,2,114,152,0,0,0,114,78,0, 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,138,0,0,0,37,3,0,0,115,0,0,0,0,122, - 28,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 99,114,101,97,116,101,95,109,111,100,117,108,101,99,1,0, - 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, - 0,0,115,92,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, - 54,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,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,15,0,0,0,41,10,114,95,0,0,0,114, - 15,0,0,0,114,57,0,0,0,114,82,0,0,0,114,77, - 0,0,0,114,50,0,0,0,114,65,0,0,0,218,17,103, - 101,116,95,102,114,111,122,101,110,95,111,98,106,101,99,116, - 218,4,101,120,101,99,114,7,0,0,0,41,3,114,89,0, - 0,0,114,15,0,0,0,218,4,99,111,100,101,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,139,0,0, - 0,41,3,0,0,115,12,0,0,0,0,2,12,1,15,1, - 18,1,9,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, + 0,114,109,0,0,0,250,2,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,2,78, + 78,41,1,78,41,17,114,1,0,0,0,114,0,0,0,0, + 114,2,0,0,0,114,3,0,0,0,218,12,115,116,97,116, + 105,99,109,101,116,104,111,100,114,92,0,0,0,218,11,99, + 108,97,115,115,109,101,116,104,111,100,114,155,0,0,0,114, + 156,0,0,0,114,138,0,0,0,114,139,0,0,0,114,81, + 0,0,0,114,157,0,0,0,114,158,0,0,0,114,109,0, + 0,0,114,90,0,0,0,114,147,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,151,0,0,0,186,2,0,0,115,30,0,0,0,8,7, + 4,2,12,9,2,1,12,8,2,1,12,11,12,8,12,5, + 2,1,14,5,2,1,14,5,2,1,14,5,114,151,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,64,0,0,0,115,140,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,101,4,100,2,100,3,132,0,131, + 1,90,5,101,6,100,21,100,5,100,6,132,1,131,1,90, + 7,101,6,100,22,100,7,100,8,132,1,131,1,90,8,101, + 6,100,9,100,10,132,0,131,1,90,9,101,4,100,11,100, + 12,132,0,131,1,90,10,101,6,100,13,100,14,132,0,131, + 1,90,11,101,6,101,12,100,15,100,16,132,0,131,1,131, + 1,90,13,101,6,101,12,100,17,100,18,132,0,131,1,131, + 1,90,14,101,6,101,12,100,19,100,20,132,0,131,1,131, + 1,90,15,100,4,83,0,41,23,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,12, + 0,0,0,100,1,106,0,124,0,106,1,131,1,83,0,41, + 2,122,115,82,101,116,117,114,110,32,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,50,0,0,0,114,1,0,0,0,41,1,218,1,109,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,92, + 0,0,0,12,3,0,0,115,2,0,0,0,0,7,122,26, + 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,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,36,0,0,0,116,0,106,1,124,1,131,1,114,28,116, + 2,124,1,124,0,100,1,100,2,144,1,131,2,83,0,110, + 4,100,0,83,0,100,0,83,0,41,3,78,114,107,0,0, + 0,90,6,102,114,111,122,101,110,41,3,114,57,0,0,0, + 114,82,0,0,0,114,85,0,0,0,41,4,114,152,0,0, + 0,114,78,0,0,0,114,153,0,0,0,114,154,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 155,0,0,0,21,3,0,0,115,6,0,0,0,0,2,10, + 1,18,2,122,24,70,114,111,122,101,110,73,109,112,111,114, + 116,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, + 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, + 0,0,115,18,0,0,0,116,0,106,1,124,1,131,1,114, + 14,124,0,83,0,100,1,83,0,41,2,122,93,70,105,110, 100,32,97,32,102,114,111,122,101,110,32,109,111,100,117,108, 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,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,90, - 0,0,0,41,2,114,151,0,0,0,114,78,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,146, - 0,0,0,50,3,0,0,115,2,0,0,0,0,7,122,26, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,108, - 111,97,100,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, - 13,0,0,0,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,57,0,0,0,114,162,0,0,0,41,2, - 114,151,0,0,0,114,78,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,156,0,0,0,59,3, - 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,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,10,0,0,0, - 41,2,114,151,0,0,0,114,78,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,157,0,0,0, - 65,3,0,0,115,2,0,0,0,0,4,122,25,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,95, - 115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,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,57,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,151,0,0,0, - 114,78,0,0,0,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,114,109,0,0,0,71,3,0,0,115,2,0, - 0,0,0,4,122,25,70,114,111,122,101,110,73,109,112,111, - 114,116,101,114,46,105,115,95,112,97,99,107,97,103,101,41, - 16,114,1,0,0,0,114,0,0,0,0,114,2,0,0,0, - 114,3,0,0,0,114,158,0,0,0,114,92,0,0,0,114, - 159,0,0,0,114,154,0,0,0,114,155,0,0,0,114,138, - 0,0,0,114,139,0,0,0,114,146,0,0,0,114,84,0, - 0,0,114,156,0,0,0,114,157,0,0,0,114,109,0,0, - 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,160,0,0,0,3,3,0,0,115,30, - 0,0,0,12,7,6,2,18,9,3,1,21,6,3,1,18, - 8,18,4,18,9,18,9,3,1,21,5,3,1,21,5,3, - 1,114,160,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,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,78,41, - 2,114,57,0,0,0,114,145,0,0,0,41,1,114,19,0, + 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,57,0, + 0,0,114,82,0,0,0,41,3,114,152,0,0,0,114,78, + 0,0,0,114,153,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,156,0,0,0,28,3,0,0, + 115,2,0,0,0,0,7,122,26,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,102,105,110,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,83, + 0,41,2,122,42,85,115,101,32,100,101,102,97,117,108,116, + 32,115,101,109,97,110,116,105,99,115,32,102,111,114,32,109, + 111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78, + 114,10,0,0,0,41,2,114,152,0,0,0,114,88,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,138,0,0,0,37,3,0,0,115,0,0,0,0,122,28, + 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,99, + 114,101,97,116,101,95,109,111,100,117,108,101,99,1,0,0, + 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, + 0,115,66,0,0,0,124,0,106,0,106,1,125,1,116,2, + 106,3,124,1,131,1,115,38,116,4,100,1,106,5,124,1, + 131,1,100,2,124,1,144,1,131,1,130,1,116,6,116,2, + 106,7,124,1,131,2,125,2,116,8,124,2,124,0,106,9, + 131,2,1,0,100,0,83,0,41,3,78,122,27,123,33,114, + 125,32,105,115,32,110,111,116,32,97,32,102,114,111,122,101, + 110,32,109,111,100,117,108,101,114,15,0,0,0,41,10,114, + 95,0,0,0,114,15,0,0,0,114,57,0,0,0,114,82, + 0,0,0,114,77,0,0,0,114,50,0,0,0,114,65,0, + 0,0,218,17,103,101,116,95,102,114,111,122,101,110,95,111, + 98,106,101,99,116,218,4,101,120,101,99,114,7,0,0,0, + 41,3,114,89,0,0,0,114,15,0,0,0,218,4,99,111, + 100,101,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,139,0,0,0,41,3,0,0,115,12,0,0,0,0, + 2,8,1,10,1,12,1,8,1,12,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,10,0,0, + 0,116,0,124,0,124,1,131,2,83,0,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,90,0,0,0,41,2,114,152,0,0,0,114,78,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,147,0,0,0,50,3,0,0,115,2,0,0,0,0,7, + 122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,0, + 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, + 0,115,10,0,0,0,116,0,106,1,124,1,131,1,83,0, + 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,57,0,0,0,114,163,0,0,0,41,2,114, + 152,0,0,0,114,78,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,157,0,0,0,59,3,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,4,0,0,0,100,1,83,0,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,10,0,0,0,41, + 2,114,152,0,0,0,114,78,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,158,0,0,0,65, + 3,0,0,115,2,0,0,0,0,4,122,25,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,115, + 111,117,114,99,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,116, + 0,106,1,124,1,131,1,83,0,41,1,122,46,82,101,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,57,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,152,0,0,0,114,78,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 114,109,0,0,0,71,3,0,0,115,2,0,0,0,0,4, + 122,25,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,105,115,95,112,97,99,107,97,103,101,41,2,78,78,41, + 1,78,41,16,114,1,0,0,0,114,0,0,0,0,114,2, + 0,0,0,114,3,0,0,0,114,159,0,0,0,114,92,0, + 0,0,114,160,0,0,0,114,155,0,0,0,114,156,0,0, + 0,114,138,0,0,0,114,139,0,0,0,114,147,0,0,0, + 114,84,0,0,0,114,157,0,0,0,114,158,0,0,0,114, + 109,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,161,0,0,0,3,3,0, + 0,115,30,0,0,0,8,7,4,2,12,9,2,1,12,6, + 2,1,12,8,12,4,12,9,12,9,2,1,14,5,2,1, + 14,5,2,1,114,161,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,32, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100, + 6,83,0,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,12,0,0,0,116,0,106,1,131,0,1, + 0,100,1,83,0,41,2,122,24,65,99,113,117,105,114,101, + 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, + 46,78,41,2,114,57,0,0,0,114,146,0,0,0,41,1, + 114,19,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,23,0,0,0,84,3,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,12,0,0,0,116,0,106,1, + 131,0,1,0,100,1,83,0,41,2,122,60,82,101,108,101, + 97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,108, + 111,99,107,32,114,101,103,97,114,100,108,101,115,115,32,111, + 102,32,97,110,121,32,114,97,105,115,101,100,32,101,120,99, + 101,112,116,105,111,110,115,46,78,41,2,114,57,0,0,0, + 114,58,0,0,0,41,4,114,19,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,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 30,0,0,0,88,3,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, + 1,0,0,0,114,0,0,0,0,114,2,0,0,0,114,3, + 0,0,0,114,23,0,0,0,114,30,0,0,0,114,10,0, 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,23,0,0,0,84,3,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,57,0,0,0,114, - 58,0,0,0,41,4,114,19,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, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,30, - 0,0,0,88,3,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,1, - 0,0,0,114,0,0,0,0,114,2,0,0,0,114,3,0, - 0,0,114,23,0,0,0,114,30,0,0,0,114,10,0,0, + 0,114,166,0,0,0,80,3,0,0,115,6,0,0,0,8, + 2,4,2,8,4,114,166,0,0,0,99,3,0,0,0,0, + 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, + 64,0,0,0,124,1,106,0,100,1,124,2,100,2,24,0, + 131,2,125,3,116,1,124,3,131,1,124,2,107,0,114,36, + 116,2,100,3,131,1,130,1,124,3,100,4,25,0,125,4, + 124,0,114,60,100,5,106,3,124,4,124,0,131,2,83,0, + 124,4,83,0,41,6,122,50,82,101,115,111,108,118,101,32, + 97,32,114,101,108,97,116,105,118,101,32,109,111,100,117,108, + 101,32,110,97,109,101,32,116,111,32,97,110,32,97,98,115, + 111,108,117,116,101,32,111,110,101,46,114,121,0,0,0,114, + 45,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,33,0,0,0,122,5,123, + 125,46,123,125,41,4,218,6,114,115,112,108,105,116,218,3, + 108,101,110,218,10,86,97,108,117,101,69,114,114,111,114,114, + 50,0,0,0,41,5,114,15,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,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,13,95,114,101,115,111,108,118,101, + 95,110,97,109,101,93,3,0,0,115,10,0,0,0,0,2, + 16,1,12,1,8,1,8,1,114,172,0,0,0,99,3,0, + 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, + 0,0,115,34,0,0,0,124,0,106,0,124,1,124,2,131, + 2,125,3,124,3,100,0,107,8,114,24,100,0,83,0,116, + 1,124,1,124,3,131,2,83,0,41,1,78,41,2,114,156, + 0,0,0,114,85,0,0,0,41,4,218,6,102,105,110,100, + 101,114,114,15,0,0,0,114,153,0,0,0,114,99,0,0, 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 114,165,0,0,0,80,3,0,0,115,6,0,0,0,12,2, - 6,2,12,4,114,165,0,0,0,99,3,0,0,0,0,0, - 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,88, - 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,52,0,116,2,0,100,3, - 0,131,1,0,130,1,0,124,3,0,100,4,0,25,125,4, - 0,124,0,0,114,84,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,121,0,0,0,114,45,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, - 33,0,0,0,122,5,123,125,46,123,125,41,4,218,6,114, - 115,112,108,105,116,218,3,108,101,110,218,10,86,97,108,117, - 101,69,114,114,111,114,114,50,0,0,0,41,5,114,15,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,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,218,13,95, - 114,101,115,111,108,118,101,95,110,97,109,101,93,3,0,0, - 115,10,0,0,0,0,2,22,1,18,1,12,1,10,1,114, - 171,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,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,155,0,0,0,114,85,0,0,0,41,4,218,6, - 102,105,110,100,101,114,114,15,0,0,0,114,152,0,0,0, - 114,99,0,0,0,114,10,0,0,0,114,10,0,0,0,114, - 11,0,0,0,218,17,95,102,105,110,100,95,115,112,101,99, - 95,108,101,103,97,99,121,102,3,0,0,115,8,0,0,0, - 0,3,18,1,12,1,4,1,114,173,0,0,0,99,3,0, - 0,0,0,0,0,0,9,0,0,0,27,0,0,0,67,0, - 0,0,115,42,1,0,0,116,0,0,106,1,0,100,1,0, - 107,9,0,114,41,0,116,0,0,106,1,0,12,114,41,0, - 116,2,0,106,3,0,100,2,0,116,4,0,131,2,0,1, - 124,0,0,116,0,0,106,5,0,107,6,0,125,3,0,120, - 235,0,116,0,0,106,1,0,68,93,220,0,125,4,0,116, - 6,0,131,0,0,143,90,0,1,121,13,0,124,4,0,106, - 7,0,125,5,0,87,110,51,0,4,116,8,0,107,10,0, - 114,148,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,1,0,107,8, - 0,114,144,0,119,66,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, - 1,0,81,82,88,124,6,0,100,1,0,107,9,0,114,66, - 0,124,3,0,12,114,26,1,124,0,0,116,0,0,106,5, - 0,107,6,0,114,26,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,2,1,1,1, - 1,124,6,0,83,89,113,30,1,88,124,8,0,100,1,0, - 107,8,0,114,19,1,124,6,0,83,124,8,0,83,113,66, - 0,124,6,0,83,113,66,0,87,100,1,0,83,100,1,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,78,122,22,115, - 121,115,46,109,101,116,97,95,112,97,116,104,32,105,115,32, - 101,109,112,116,121,41,11,114,14,0,0,0,218,9,109,101, - 116,97,95,112,97,116,104,114,141,0,0,0,114,142,0,0, - 0,218,13,73,109,112,111,114,116,87,97,114,110,105,110,103, - 114,21,0,0,0,114,165,0,0,0,114,154,0,0,0,114, - 96,0,0,0,114,173,0,0,0,114,95,0,0,0,41,9, - 114,15,0,0,0,114,152,0,0,0,114,153,0,0,0,90, - 9,105,115,95,114,101,108,111,97,100,114,172,0,0,0,114, - 154,0,0,0,114,88,0,0,0,114,89,0,0,0,114,95, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,218,10,95,102,105,110,100,95,115,112,101,99,111,3, - 0,0,115,48,0,0,0,0,2,25,1,16,4,15,1,16, - 1,10,1,3,1,13,1,13,1,18,1,12,1,8,2,25, - 1,12,2,22,1,13,1,3,1,13,1,13,4,9,2,12, - 1,4,2,7,2,8,2,114,176,0,0,0,99,3,0,0, - 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, - 0,115,185,0,0,0,116,0,0,124,0,0,116,1,0,131, - 2,0,115,42,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, - 124,2,0,100,2,0,107,0,0,114,66,0,116,5,0,100, - 3,0,131,1,0,130,1,0,124,2,0,100,2,0,107,4, - 0,114,150,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,110, - 42,0,124,1,0,116,6,0,106,7,0,107,7,0,114,150, - 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,124,0,0,12, - 114,181,0,124,2,0,100,2,0,107,2,0,114,181,0,116, - 5,0,100,6,0,131,1,0,130,1,0,100,7,0,83,41, - 8,122,28,86,101,114,105,102,121,32,97,114,103,117,109,101, + 218,17,95,102,105,110,100,95,115,112,101,99,95,108,101,103, + 97,99,121,102,3,0,0,115,8,0,0,0,0,3,12,1, + 8,1,4,1,114,174,0,0,0,99,3,0,0,0,0,0, + 0,0,10,0,0,0,27,0,0,0,67,0,0,0,115,244, + 0,0,0,116,0,106,1,125,3,124,3,100,1,107,8,114, + 22,116,2,100,2,131,1,130,1,124,3,115,38,116,3,106, + 4,100,3,116,5,131,2,1,0,124,0,116,0,106,6,107, + 6,125,4,120,190,124,3,68,0,93,178,125,5,116,7,131, + 0,143,72,1,0,121,10,124,5,106,8,125,6,87,0,110, + 42,4,0,116,9,107,10,114,118,1,0,1,0,1,0,116, + 10,124,5,124,0,124,1,131,3,125,7,124,7,100,1,107, + 8,114,114,119,54,89,0,110,14,88,0,124,6,124,0,124, + 1,124,2,131,3,125,7,87,0,100,1,81,0,82,0,88, + 0,124,7,100,1,107,9,114,54,124,4,12,0,114,228,124, + 0,116,0,106,6,107,6,114,228,116,0,106,6,124,0,25, + 0,125,8,121,10,124,8,106,11,125,9,87,0,110,20,4, + 0,116,9,107,10,114,206,1,0,1,0,1,0,124,7,83, + 0,88,0,124,9,100,1,107,8,114,222,124,7,83,0,113, + 232,124,9,83,0,113,54,124,7,83,0,113,54,87,0,100, + 1,83,0,100,1,83,0,41,4,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,78,122,53,115,121,115,46,109,101,116,97,95,112,97, + 116,104,32,105,115,32,78,111,110,101,44,32,80,121,116,104, + 111,110,32,105,115,32,108,105,107,101,108,121,32,115,104,117, + 116,116,105,110,103,32,100,111,119,110,122,22,115,121,115,46, + 109,101,116,97,95,112,97,116,104,32,105,115,32,101,109,112, + 116,121,41,12,114,14,0,0,0,218,9,109,101,116,97,95, + 112,97,116,104,114,77,0,0,0,114,142,0,0,0,114,143, + 0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,105, + 110,103,114,21,0,0,0,114,166,0,0,0,114,155,0,0, + 0,114,96,0,0,0,114,174,0,0,0,114,95,0,0,0, + 41,10,114,15,0,0,0,114,153,0,0,0,114,154,0,0, + 0,114,175,0,0,0,90,9,105,115,95,114,101,108,111,97, + 100,114,173,0,0,0,114,155,0,0,0,114,88,0,0,0, + 114,89,0,0,0,114,95,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,10,95,102,105,110,100, + 95,115,112,101,99,111,3,0,0,115,54,0,0,0,0,2, + 6,1,8,2,8,3,4,1,12,5,10,1,10,1,8,1, + 2,1,10,1,14,1,12,1,8,1,8,2,22,1,8,2, + 16,1,10,1,2,1,10,1,14,4,6,2,8,1,6,2, + 6,2,8,2,114,177,0,0,0,99,3,0,0,0,0,0, + 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,140, + 0,0,0,116,0,124,0,116,1,131,2,115,28,116,2,100, + 1,106,3,116,4,124,0,131,1,131,1,131,1,130,1,124, + 2,100,2,107,0,114,44,116,5,100,3,131,1,130,1,124, + 2,100,2,107,4,114,114,116,0,124,1,116,1,131,2,115, + 72,116,2,100,4,131,1,130,1,110,42,124,1,115,86,116, + 6,100,5,131,1,130,1,110,28,124,1,116,7,106,8,107, + 7,114,114,100,6,125,3,116,9,124,3,106,3,124,1,131, + 1,131,1,130,1,124,0,12,0,114,136,124,2,100,2,107, + 2,114,136,116,5,100,7,131,1,130,1,100,8,83,0,41, + 9,122,28,86,101,114,105,102,121,32,97,114,103,117,109,101, 110,116,115,32,97,114,101,32,34,115,97,110,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,33,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,218, - 10,105,115,105,110,115,116,97,110,99,101,218,3,115,116,114, - 218,9,84,121,112,101,69,114,114,111,114,114,50,0,0,0, - 114,13,0,0,0,114,168,0,0,0,114,14,0,0,0,114, - 21,0,0,0,218,11,83,121,115,116,101,109,69,114,114,111, - 114,41,4,114,15,0,0,0,114,169,0,0,0,114,170,0, - 0,0,114,147,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,218,13,95,115,97,110,105,116,121,95, - 99,104,101,99,107,151,3,0,0,115,24,0,0,0,0,2, - 15,1,27,1,12,1,12,1,12,1,15,1,15,1,15,1, - 6,2,21,1,19,1,114,181,0,0,0,122,16,78,111,32, - 109,111,100,117,108,101,32,110,97,109,101,100,32,122,4,123, - 33,114,125,99,2,0,0,0,0,0,0,0,8,0,0,0, - 12,0,0,0,67,0,0,0,115,40,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,175,0,124,3,0,116, - 1,0,106,2,0,107,7,0,114,59,0,116,3,0,124,1, - 0,124,3,0,131,2,0,1,124,0,0,116,1,0,106,2, - 0,107,6,0,114,85,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,110,61,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,100,0,0,130,2,0,89,110,1,0,88,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,232,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,12,0,116,10,0,124,6,0,131,1,0,125,7, - 0,124,3,0,114,36,1,116,1,0,106,2,0,124,3,0, - 25,125,4,0,116,11,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,124,7,0,83,41,6,78,114,121,0,0,0,114,33,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,15,0,0,0, - 114,140,0,0,0,41,12,114,122,0,0,0,114,14,0,0, - 0,114,21,0,0,0,114,65,0,0,0,114,131,0,0,0, - 114,96,0,0,0,218,8,95,69,82,82,95,77,83,71,114, - 50,0,0,0,114,77,0,0,0,114,176,0,0,0,114,149, - 0,0,0,114,5,0,0,0,41,8,114,15,0,0,0,218, - 7,105,109,112,111,114,116,95,114,152,0,0,0,114,123,0, - 0,0,90,13,112,97,114,101,110,116,95,109,111,100,117,108, - 101,114,147,0,0,0,114,88,0,0,0,114,89,0,0,0, + 111,32,97,32,115,116,114,105,110,103,122,54,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,119,105,116,104,32,110,111,32,107,110, + 111,119,110,32,112,97,114,101,110,116,32,112,97,99,107,97, + 103,101,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,10,218,10,105,115,105,110,115,116,97, + 110,99,101,218,3,115,116,114,218,9,84,121,112,101,69,114, + 114,111,114,114,50,0,0,0,114,13,0,0,0,114,169,0, + 0,0,114,77,0,0,0,114,14,0,0,0,114,21,0,0, + 0,218,11,83,121,115,116,101,109,69,114,114,111,114,41,4, + 114,15,0,0,0,114,170,0,0,0,114,171,0,0,0,114, + 148,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,13,95,115,97,110,105,116,121,95,99,104,101, + 99,107,158,3,0,0,115,28,0,0,0,0,2,10,1,18, + 1,8,1,8,1,8,1,10,1,10,1,4,1,10,2,10, + 1,4,2,14,1,14,1,114,182,0,0,0,122,16,78,111, + 32,109,111,100,117,108,101,32,110,97,109,101,100,32,122,4, + 123,33,114,125,99,2,0,0,0,0,0,0,0,8,0,0, + 0,12,0,0,0,67,0,0,0,115,224,0,0,0,100,0, + 125,2,124,0,106,0,100,1,131,1,100,2,25,0,125,3, + 124,3,114,136,124,3,116,1,106,2,107,7,114,42,116,3, + 124,1,124,3,131,2,1,0,124,0,116,1,106,2,107,6, + 114,62,116,1,106,2,124,0,25,0,83,0,116,1,106,2, + 124,3,25,0,125,4,121,10,124,4,106,4,125,2,87,0, + 110,52,4,0,116,5,107,10,114,134,1,0,1,0,1,0, + 116,6,100,3,23,0,106,7,124,0,124,3,131,2,125,5, + 116,8,124,5,100,4,124,0,144,1,131,1,100,0,130,2, + 89,0,110,2,88,0,116,9,124,0,124,2,131,2,125,6, + 124,6,100,0,107,8,114,176,116,8,116,6,106,7,124,0, + 131,1,100,4,124,0,144,1,131,1,130,1,110,8,116,10, + 124,6,131,1,125,7,124,3,114,220,116,1,106,2,124,3, + 25,0,125,4,116,11,124,4,124,0,106,0,100,1,131,1, + 100,5,25,0,124,7,131,3,1,0,124,7,83,0,41,6, + 78,114,121,0,0,0,114,33,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,15,0,0,0,114,141,0,0,0,41,12, + 114,122,0,0,0,114,14,0,0,0,114,21,0,0,0,114, + 65,0,0,0,114,131,0,0,0,114,96,0,0,0,218,8, + 95,69,82,82,95,77,83,71,114,50,0,0,0,114,77,0, + 0,0,114,177,0,0,0,114,150,0,0,0,114,5,0,0, + 0,41,8,114,15,0,0,0,218,7,105,109,112,111,114,116, + 95,114,153,0,0,0,114,123,0,0,0,90,13,112,97,114, + 101,110,116,95,109,111,100,117,108,101,114,148,0,0,0,114, + 88,0,0,0,114,89,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,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,181,3,0,0,115,42,0,0,0,0,1,4,1,14,1, + 4,1,10,1,10,2,10,1,10,1,10,1,2,1,10,1, + 14,1,16,1,22,1,10,1,8,1,22,2,8,1,4,2, + 10,1,22,1,114,185,0,0,0,99,2,0,0,0,0,0, + 0,0,2,0,0,0,10,0,0,0,67,0,0,0,115,30, + 0,0,0,116,0,124,0,131,1,143,12,1,0,116,1,124, + 0,124,1,131,2,83,0,81,0,82,0,88,0,100,1,83, + 0,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,54, + 0,0,0,114,185,0,0,0,41,2,114,15,0,0,0,114, + 184,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, + 0,0,0,218,14,95,102,105,110,100,95,97,110,100,95,108, + 111,97,100,208,3,0,0,115,4,0,0,0,0,2,10,1, + 114,186,0,0,0,114,33,0,0,0,99,3,0,0,0,0, + 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, + 122,0,0,0,116,0,124,0,124,1,124,2,131,3,1,0, + 124,2,100,1,107,4,114,32,116,1,124,0,124,1,124,2, + 131,3,125,0,116,2,106,3,131,0,1,0,124,0,116,4, + 106,5,107,7,114,60,116,6,124,0,116,7,131,2,83,0, + 116,4,106,5,124,0,25,0,125,3,124,3,100,2,107,8, + 114,110,116,2,106,8,131,0,1,0,100,3,106,9,124,0, + 131,1,125,4,116,10,124,4,100,4,124,0,144,1,131,1, + 130,1,116,11,124,0,131,1,1,0,124,3,83,0,41,5, + 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, + 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, + 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,33,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,15,0,0,0,41,12,114,182, + 0,0,0,114,172,0,0,0,114,57,0,0,0,114,146,0, + 0,0,114,14,0,0,0,114,21,0,0,0,114,186,0,0, + 0,218,11,95,103,99,100,95,105,109,112,111,114,116,114,58, + 0,0,0,114,50,0,0,0,114,77,0,0,0,114,63,0, + 0,0,41,5,114,15,0,0,0,114,170,0,0,0,114,171, + 0,0,0,114,89,0,0,0,114,74,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,114,187,0,0, + 0,214,3,0,0,115,28,0,0,0,0,9,12,1,8,1, + 12,1,8,1,10,1,10,1,10,1,8,1,8,1,4,1, + 6,1,14,1,8,1,114,187,0,0,0,99,3,0,0,0, + 0,0,0,0,6,0,0,0,17,0,0,0,67,0,0,0, + 115,178,0,0,0,116,0,124,0,100,1,131,2,114,174,100, + 2,124,1,107,6,114,58,116,1,124,1,131,1,125,1,124, + 1,106,2,100,2,131,1,1,0,116,0,124,0,100,3,131, + 2,114,58,124,1,106,3,124,0,106,4,131,1,1,0,120, + 114,124,1,68,0,93,106,125,3,116,0,124,0,124,3,131, + 2,115,64,100,4,106,5,124,0,106,6,124,3,131,2,125, + 4,121,14,116,7,124,2,124,4,131,2,1,0,87,0,113, + 64,4,0,116,8,107,10,114,168,1,0,125,5,1,0,122, + 34,116,9,124,5,131,1,106,10,116,11,131,1,114,150,124, + 5,106,12,124,4,107,2,114,150,119,64,130,0,87,0,89, + 0,100,5,100,5,125,5,126,5,88,0,113,64,88,0,113, + 64,87,0,124,0,83,0,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,131,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,4,0,0,0,114,130,0,0,0,218,6, + 114,101,109,111,118,101,218,6,101,120,116,101,110,100,114,189, + 0,0,0,114,50,0,0,0,114,1,0,0,0,114,65,0, + 0,0,114,77,0,0,0,114,179,0,0,0,114,71,0,0, + 0,218,15,95,69,82,82,95,77,83,71,95,80,82,69,70, + 73,88,114,15,0,0,0,41,6,114,89,0,0,0,218,8, + 102,114,111,109,108,105,115,116,114,184,0,0,0,218,1,120, + 90,9,102,114,111,109,95,110,97,109,101,90,3,101,120,99, 114,10,0,0,0,114,10,0,0,0,114,11,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,171,3,0,0,115,42,0,0, - 0,0,1,6,1,19,1,6,1,15,1,13,2,15,1,11, - 1,13,1,3,1,13,1,13,1,22,1,26,1,15,1,12, - 1,30,2,12,1,6,2,13,1,29,1,114,184,0,0,0, - 99,2,0,0,0,0,0,0,0,2,0,0,0,10,0,0, - 0,67,0,0,0,115,37,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,82,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,54,0,0, - 0,114,184,0,0,0,41,2,114,15,0,0,0,114,183,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,218,14,95,102,105,110,100,95,97,110,100,95,108,111,97, - 100,198,3,0,0,115,4,0,0,0,0,2,13,1,114,185, - 0,0,0,114,33,0,0,0,99,3,0,0,0,0,0,0, - 0,5,0,0,0,4,0,0,0,67,0,0,0,115,166,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,46,0,116,1, - 0,124,0,0,124,1,0,124,2,0,131,3,0,125,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,84,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,152,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,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,33,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,15,0,0,0,41,12,114,181,0,0,0,114,171,0, - 0,0,114,57,0,0,0,114,145,0,0,0,114,14,0,0, - 0,114,21,0,0,0,114,185,0,0,0,218,11,95,103,99, - 100,95,105,109,112,111,114,116,114,58,0,0,0,114,50,0, - 0,0,114,77,0,0,0,114,63,0,0,0,41,5,114,15, - 0,0,0,114,169,0,0,0,114,170,0,0,0,114,89,0, - 0,0,114,74,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,114,186,0,0,0,204,3,0,0,115, - 28,0,0,0,0,9,16,1,12,1,18,1,10,1,15,1, - 13,1,13,1,12,1,10,1,6,1,9,1,18,1,10,1, - 114,186,0,0,0,99,3,0,0,0,0,0,0,0,6,0, - 0,0,17,0,0,0,67,0,0,0,115,239,0,0,0,116, - 0,0,124,0,0,100,1,0,131,2,0,114,235,0,100,2, - 0,124,1,0,107,6,0,114,83,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, - 83,0,124,1,0,106,3,0,124,0,0,106,4,0,131,1, - 0,1,120,149,0,124,1,0,68,93,141,0,125,3,0,116, - 0,0,124,0,0,124,3,0,131,2,0,115,90,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,90,0,4,116,8,0,107,10,0,114,230, - 0,1,125,5,0,1,122,47,0,116,9,0,124,5,0,131, - 1,0,106,10,0,116,11,0,131,1,0,114,209,0,124,5, - 0,106,12,0,124,4,0,107,2,0,114,209,0,119,90,0, - 130,0,0,87,89,100,5,0,100,5,0,125,5,0,126,5, - 0,88,113,90,0,88,113,90,0,87,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,131,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,4,0,0,0, - 114,130,0,0,0,218,6,114,101,109,111,118,101,218,6,101, - 120,116,101,110,100,114,188,0,0,0,114,50,0,0,0,114, - 1,0,0,0,114,65,0,0,0,114,77,0,0,0,114,178, - 0,0,0,114,71,0,0,0,218,15,95,69,82,82,95,77, - 83,71,95,80,82,69,70,73,88,114,15,0,0,0,41,6, - 114,89,0,0,0,218,8,102,114,111,109,108,105,115,116,114, - 183,0,0,0,218,1,120,90,9,102,114,111,109,95,110,97, - 109,101,90,3,101,120,99,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,218,16,95,104,97,110,100,108,101,95, - 102,114,111,109,108,105,115,116,228,3,0,0,115,34,0,0, - 0,0,10,15,1,12,1,12,1,13,1,15,1,16,1,13, - 1,15,1,21,1,3,1,17,1,18,4,21,1,15,1,3, - 1,26,1,114,194,0,0,0,99,1,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,72,0, - 0,0,124,0,0,106,0,0,100,1,0,131,1,0,125,1, - 0,124,1,0,100,2,0,107,8,0,114,68,0,124,0,0, - 100,3,0,25,125,1,0,100,4,0,124,0,0,107,7,0, - 114,68,0,124,1,0,106,1,0,100,5,0,131,1,0,100, - 6,0,25,125,1,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,134,0,0,0,78,114,1,0,0,0, - 114,131,0,0,0,114,121,0,0,0,114,33,0,0,0,41, - 2,114,42,0,0,0,114,122,0,0,0,41,2,218,7,103, - 108,111,98,97,108,115,114,169,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,218,17,95,99,97,108, - 99,95,95,95,112,97,99,107,97,103,101,95,95,4,4,0, - 0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1, - 19,1,114,196,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,215,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,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,33,0,0,0,78,114,121,0,0,0,41,8,114, - 186,0,0,0,114,196,0,0,0,218,9,112,97,114,116,105, - 116,105,111,110,114,167,0,0,0,114,14,0,0,0,114,21, - 0,0,0,114,1,0,0,0,114,194,0,0,0,41,9,114, - 15,0,0,0,114,195,0,0,0,218,6,108,111,99,97,108, - 115,114,192,0,0,0,114,170,0,0,0,114,89,0,0,0, - 90,8,103,108,111,98,97,108,115,95,114,169,0,0,0,90, - 7,99,117,116,95,111,102,102,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,10,95,95,105,109,112,111,114, - 116,95,95,19,4,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,199,0,0,0,99,1,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, - 115,53,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,43,0, - 116,2,0,100,1,0,124,0,0,23,131,1,0,130,1,0, - 116,3,0,124,1,0,131,1,0,83,41,2,78,122,25,110, + 16,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, + 116,238,3,0,0,115,34,0,0,0,0,10,10,1,8,1, + 8,1,10,1,10,1,12,1,10,1,10,1,14,1,2,1, + 14,1,16,4,14,1,10,1,2,1,24,1,114,195,0,0, + 0,99,1,0,0,0,0,0,0,0,3,0,0,0,7,0, + 0,0,67,0,0,0,115,160,0,0,0,124,0,106,0,100, + 1,131,1,125,1,124,0,106,0,100,2,131,1,125,2,124, + 1,100,3,107,9,114,92,124,2,100,3,107,9,114,86,124, + 1,124,2,106,1,107,3,114,86,116,2,106,3,100,4,106, + 4,100,5,124,1,155,2,100,6,124,2,106,1,155,2,100, + 7,103,5,131,1,116,5,100,8,100,9,144,1,131,2,1, + 0,124,1,83,0,110,64,124,2,100,3,107,9,114,108,124, + 2,106,1,83,0,110,48,116,2,106,3,100,10,116,5,100, + 8,100,9,144,1,131,2,1,0,124,0,100,11,25,0,125, + 1,100,12,124,0,107,7,114,156,124,1,106,6,100,13,131, + 1,100,14,25,0,125,1,124,1,83,0,41,15,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,134,0,0,0,114,95,0,0,0, + 78,218,0,122,32,95,95,112,97,99,107,97,103,101,95,95, + 32,33,61,32,95,95,115,112,101,99,95,95,46,112,97,114, + 101,110,116,32,40,122,4,32,33,61,32,250,1,41,114,140, + 0,0,0,233,3,0,0,0,122,89,99,97,110,39,116,32, + 114,101,115,111,108,118,101,32,112,97,99,107,97,103,101,32, + 102,114,111,109,32,95,95,115,112,101,99,95,95,32,111,114, + 32,95,95,112,97,99,107,97,103,101,95,95,44,32,102,97, + 108,108,105,110,103,32,98,97,99,107,32,111,110,32,95,95, + 110,97,109,101,95,95,32,97,110,100,32,95,95,112,97,116, + 104,95,95,114,1,0,0,0,114,131,0,0,0,114,121,0, + 0,0,114,33,0,0,0,41,7,114,42,0,0,0,114,123, + 0,0,0,114,142,0,0,0,114,143,0,0,0,114,115,0, + 0,0,114,176,0,0,0,114,122,0,0,0,41,3,218,7, + 103,108,111,98,97,108,115,114,170,0,0,0,114,88,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, + 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, + 101,95,95,14,4,0,0,115,30,0,0,0,0,7,10,1, + 10,1,8,1,18,1,28,2,12,1,6,1,8,1,8,2, + 6,2,12,1,8,1,8,1,14,1,114,200,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,170,0,0,0,124,4,100,1,107,2,114, + 18,116,0,124,0,131,1,125,5,110,36,124,1,100,2,107, + 9,114,30,124,1,110,2,105,0,125,6,116,1,124,6,131, + 1,125,7,116,0,124,0,124,7,124,4,131,3,125,5,124, + 3,115,154,124,4,100,1,107,2,114,86,116,0,124,0,106, + 2,100,3,131,1,100,1,25,0,131,1,83,0,113,166,124, + 0,115,96,124,5,83,0,113,166,116,3,124,0,131,1,116, + 3,124,0,106,2,100,3,131,1,100,1,25,0,131,1,24, + 0,125,8,116,4,106,5,124,5,106,6,100,2,116,3,124, + 5,106,6,131,1,124,8,24,0,133,2,25,0,25,0,83, + 0,110,12,116,7,124,5,124,3,116,0,131,3,83,0,100, + 2,83,0,41,4,97,215,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,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,33,0,0,0,78,114,121,0,0,0,41,8,114,187, + 0,0,0,114,200,0,0,0,218,9,112,97,114,116,105,116, + 105,111,110,114,168,0,0,0,114,14,0,0,0,114,21,0, + 0,0,114,1,0,0,0,114,195,0,0,0,41,9,114,15, + 0,0,0,114,199,0,0,0,218,6,108,111,99,97,108,115, + 114,193,0,0,0,114,171,0,0,0,114,89,0,0,0,90, + 8,103,108,111,98,97,108,115,95,114,170,0,0,0,90,7, + 99,117,116,95,111,102,102,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,10,95,95,105,109,112,111,114,116, + 95,95,41,4,0,0,115,26,0,0,0,0,11,8,1,10, + 2,16,1,8,1,12,1,4,3,8,1,20,1,4,1,6, + 4,26,3,32,2,114,203,0,0,0,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 38,0,0,0,116,0,106,1,124,0,131,1,125,1,124,1, + 100,0,107,8,114,30,116,2,100,1,124,0,23,0,131,1, + 130,1,116,3,124,1,131,1,83,0,41,2,78,122,25,110, 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, - 101,32,110,97,109,101,100,32,41,4,114,150,0,0,0,114, - 154,0,0,0,114,77,0,0,0,114,149,0,0,0,41,2, + 101,32,110,97,109,101,100,32,41,4,114,151,0,0,0,114, + 155,0,0,0,114,77,0,0,0,114,150,0,0,0,41,2, 114,15,0,0,0,114,88,0,0,0,114,10,0,0,0,114, 10,0,0,0,114,11,0,0,0,218,18,95,98,117,105,108, - 116,105,110,95,102,114,111,109,95,110,97,109,101,54,4,0, - 0,115,8,0,0,0,0,1,15,1,12,1,16,1,114,200, + 116,105,110,95,102,114,111,109,95,110,97,109,101,76,4,0, + 0,115,8,0,0,0,0,1,10,1,8,1,12,1,114,204, 0,0,0,99,2,0,0,0,0,0,0,0,12,0,0,0, - 12,0,0,0,67,0,0,0,115,74,1,0,0,124,1,0, - 97,0,0,124,0,0,97,1,0,116,2,0,116,1,0,131, - 1,0,125,2,0,120,123,0,116,1,0,106,3,0,106,4, - 0,131,0,0,68,93,106,0,92,2,0,125,3,0,125,4, - 0,116,5,0,124,4,0,124,2,0,131,2,0,114,40,0, - 124,3,0,116,1,0,106,6,0,107,6,0,114,91,0,116, - 7,0,125,5,0,110,27,0,116,0,0,106,8,0,124,3, - 0,131,1,0,114,40,0,116,9,0,125,5,0,110,3,0, - 113,40,0,116,10,0,124,4,0,124,5,0,131,2,0,125, - 6,0,116,11,0,124,6,0,124,4,0,131,2,0,1,113, - 40,0,87,116,1,0,106,3,0,116,12,0,25,125,7,0, - 120,73,0,100,5,0,68,93,65,0,125,8,0,124,8,0, - 116,1,0,106,3,0,107,7,0,114,206,0,116,13,0,124, - 8,0,131,1,0,125,9,0,110,13,0,116,1,0,106,3, - 0,124,8,0,25,125,9,0,116,14,0,124,7,0,124,8, - 0,124,9,0,131,3,0,1,113,170,0,87,121,16,0,116, - 13,0,100,2,0,131,1,0,125,10,0,87,110,24,0,4, - 116,15,0,107,10,0,114,25,1,1,1,1,100,3,0,125, - 10,0,89,110,1,0,88,116,14,0,124,7,0,100,2,0, - 124,10,0,131,3,0,1,116,13,0,100,4,0,131,1,0, - 125,11,0,116,14,0,124,7,0,100,4,0,124,11,0,131, - 3,0,1,100,3,0,83,41,6,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,141,0,0,0,114,34,0,0,0,78, - 114,62,0,0,0,41,1,122,9,95,119,97,114,110,105,110, - 103,115,41,16,114,57,0,0,0,114,14,0,0,0,114,13, - 0,0,0,114,21,0,0,0,218,5,105,116,101,109,115,114, - 177,0,0,0,114,76,0,0,0,114,150,0,0,0,114,82, - 0,0,0,114,160,0,0,0,114,132,0,0,0,114,137,0, - 0,0,114,1,0,0,0,114,200,0,0,0,114,5,0,0, - 0,114,77,0,0,0,41,12,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,15, - 0,0,0,114,89,0,0,0,114,99,0,0,0,114,88,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,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,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,218,6,95,115,101, - 116,117,112,61,4,0,0,115,50,0,0,0,0,9,6,1, - 6,3,12,1,28,1,15,1,15,1,9,1,15,1,9,2, - 3,1,15,1,17,3,13,1,13,1,15,1,15,2,13,1, - 20,3,3,1,16,1,13,2,11,1,16,3,12,1,114,204, - 0,0,0,99,2,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,87,0,0,0,116,0,0, - 124,0,0,124,1,0,131,2,0,1,116,1,0,106,2,0, - 106,3,0,116,4,0,131,1,0,1,116,1,0,106,2,0, - 106,3,0,116,5,0,131,1,0,1,100,1,0,100,2,0, - 108,6,0,125,2,0,124,2,0,97,7,0,124,2,0,106, - 8,0,116,1,0,106,9,0,116,10,0,25,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,33,0,0,0,78, - 41,11,114,204,0,0,0,114,14,0,0,0,114,174,0,0, - 0,114,113,0,0,0,114,150,0,0,0,114,160,0,0,0, - 218,26,95,102,114,111,122,101,110,95,105,109,112,111,114,116, - 108,105,98,95,101,120,116,101,114,110,97,108,114,119,0,0, - 0,218,8,95,105,110,115,116,97,108,108,114,21,0,0,0, - 114,1,0,0,0,41,3,114,202,0,0,0,114,203,0,0, - 0,114,205,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,206,0,0,0,108,4,0,0,115,12, - 0,0,0,0,2,13,2,16,1,16,3,12,1,6,1,114, - 206,0,0,0,41,51,114,3,0,0,0,114,119,0,0,0, - 114,12,0,0,0,114,16,0,0,0,114,17,0,0,0,114, - 59,0,0,0,114,41,0,0,0,114,48,0,0,0,114,31, - 0,0,0,114,32,0,0,0,114,53,0,0,0,114,54,0, - 0,0,114,56,0,0,0,114,63,0,0,0,114,65,0,0, - 0,114,75,0,0,0,114,81,0,0,0,114,84,0,0,0, - 114,90,0,0,0,114,101,0,0,0,114,102,0,0,0,114, - 106,0,0,0,114,85,0,0,0,218,6,111,98,106,101,99, - 116,90,9,95,80,79,80,85,76,65,84,69,114,132,0,0, - 0,114,137,0,0,0,114,144,0,0,0,114,97,0,0,0, - 114,86,0,0,0,114,148,0,0,0,114,149,0,0,0,114, - 87,0,0,0,114,150,0,0,0,114,160,0,0,0,114,165, - 0,0,0,114,171,0,0,0,114,173,0,0,0,114,176,0, - 0,0,114,181,0,0,0,114,191,0,0,0,114,182,0,0, - 0,114,184,0,0,0,114,185,0,0,0,114,186,0,0,0, - 114,194,0,0,0,114,196,0,0,0,114,199,0,0,0,114, - 200,0,0,0,114,204,0,0,0,114,206,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,218,8,60,109,111,100,117,108,101,62,8,0,0,0, - 115,96,0,0,0,6,17,6,2,12,8,12,4,19,20,6, - 2,6,3,22,4,19,68,19,21,19,19,12,19,12,19,12, - 11,18,8,12,11,12,12,12,16,12,36,19,27,19,101,24, - 26,9,3,18,45,18,60,12,18,12,17,12,25,12,29,12, - 23,12,16,19,73,19,77,19,13,12,9,12,9,15,40,12, - 17,6,1,10,2,12,27,12,6,18,24,12,32,12,15,24, - 35,12,7,12,47, + 12,0,0,0,67,0,0,0,115,244,0,0,0,124,1,97, + 0,124,0,97,1,116,2,116,1,131,1,125,2,120,86,116, + 1,106,3,106,4,131,0,68,0,93,72,92,2,125,3,125, + 4,116,5,124,4,124,2,131,2,114,28,124,3,116,1,106, + 6,107,6,114,62,116,7,125,5,110,18,116,0,106,8,124, + 3,131,1,114,28,116,9,125,5,110,2,113,28,116,10,124, + 4,124,5,131,2,125,6,116,11,124,6,124,4,131,2,1, + 0,113,28,87,0,116,1,106,3,116,12,25,0,125,7,120, + 54,100,5,68,0,93,46,125,8,124,8,116,1,106,3,107, + 7,114,144,116,13,124,8,131,1,125,9,110,10,116,1,106, + 3,124,8,25,0,125,9,116,14,124,7,124,8,124,9,131, + 3,1,0,113,120,87,0,121,12,116,13,100,2,131,1,125, + 10,87,0,110,24,4,0,116,15,107,10,114,206,1,0,1, + 0,1,0,100,3,125,10,89,0,110,2,88,0,116,14,124, + 7,100,2,124,10,131,3,1,0,116,13,100,4,131,1,125, + 11,116,14,124,7,100,4,124,11,131,3,1,0,100,3,83, + 0,41,6,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, + 142,0,0,0,114,34,0,0,0,78,114,62,0,0,0,41, + 1,122,9,95,119,97,114,110,105,110,103,115,41,16,114,57, + 0,0,0,114,14,0,0,0,114,13,0,0,0,114,21,0, + 0,0,218,5,105,116,101,109,115,114,178,0,0,0,114,76, + 0,0,0,114,151,0,0,0,114,82,0,0,0,114,161,0, + 0,0,114,132,0,0,0,114,137,0,0,0,114,1,0,0, + 0,114,204,0,0,0,114,5,0,0,0,114,77,0,0,0, + 41,12,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,15,0,0,0,114,89,0, + 0,0,114,99,0,0,0,114,88,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,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,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,218,6,95,115,101,116,117,112,83,4,0, + 0,115,50,0,0,0,0,9,4,1,4,3,8,1,20,1, + 10,1,10,1,6,1,10,1,6,2,2,1,10,1,14,3, + 10,1,10,1,10,1,10,2,10,1,16,3,2,1,12,1, + 14,2,10,1,12,3,8,1,114,208,0,0,0,99,2,0, + 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, + 0,0,115,66,0,0,0,116,0,124,0,124,1,131,2,1, + 0,116,1,106,2,106,3,116,4,131,1,1,0,116,1,106, + 2,106,3,116,5,131,1,1,0,100,1,100,2,108,6,125, + 2,124,2,97,7,124,2,106,8,116,1,106,9,116,10,25, + 0,131,1,1,0,100,2,83,0,41,3,122,50,73,110,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, + 33,0,0,0,78,41,11,114,208,0,0,0,114,14,0,0, + 0,114,175,0,0,0,114,113,0,0,0,114,151,0,0,0, + 114,161,0,0,0,218,26,95,102,114,111,122,101,110,95,105, + 109,112,111,114,116,108,105,98,95,101,120,116,101,114,110,97, + 108,114,119,0,0,0,218,8,95,105,110,115,116,97,108,108, + 114,21,0,0,0,114,1,0,0,0,41,3,114,206,0,0, + 0,114,207,0,0,0,114,209,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,114,210,0,0,0,130, + 4,0,0,115,12,0,0,0,0,2,10,2,12,1,12,3, + 8,1,4,1,114,210,0,0,0,41,2,78,78,41,1,78, + 41,2,78,114,33,0,0,0,41,51,114,3,0,0,0,114, + 119,0,0,0,114,12,0,0,0,114,16,0,0,0,114,17, + 0,0,0,114,59,0,0,0,114,41,0,0,0,114,48,0, + 0,0,114,31,0,0,0,114,32,0,0,0,114,53,0,0, + 0,114,54,0,0,0,114,56,0,0,0,114,63,0,0,0, + 114,65,0,0,0,114,75,0,0,0,114,81,0,0,0,114, + 84,0,0,0,114,90,0,0,0,114,101,0,0,0,114,102, + 0,0,0,114,106,0,0,0,114,85,0,0,0,218,6,111, + 98,106,101,99,116,90,9,95,80,79,80,85,76,65,84,69, + 114,132,0,0,0,114,137,0,0,0,114,145,0,0,0,114, + 97,0,0,0,114,86,0,0,0,114,149,0,0,0,114,150, + 0,0,0,114,87,0,0,0,114,151,0,0,0,114,161,0, + 0,0,114,166,0,0,0,114,172,0,0,0,114,174,0,0, + 0,114,177,0,0,0,114,182,0,0,0,114,192,0,0,0, + 114,183,0,0,0,114,185,0,0,0,114,186,0,0,0,114, + 187,0,0,0,114,195,0,0,0,114,200,0,0,0,114,203, + 0,0,0,114,204,0,0,0,114,208,0,0,0,114,210,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,8,60,109,111,100,117,108,101,62, + 8,0,0,0,115,96,0,0,0,4,17,4,2,8,8,8, + 4,14,20,4,2,4,3,16,4,14,68,14,21,14,19,8, + 19,8,19,8,11,14,8,8,11,8,12,8,16,8,36,14, + 27,14,101,16,26,6,3,10,45,14,60,8,18,8,17,8, + 25,8,29,8,23,8,16,14,73,14,77,14,13,8,9,8, + 9,10,47,8,20,4,1,8,2,8,27,8,6,10,24,8, + 32,8,27,18,35,8,7,8,47, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index a871f54..ba2f6bb 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,116 +1,99 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_external[] = { - 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,228,2,0,0,100,0,0,90,0,0, - 100,96,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,132,0,0,90, - 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, - 0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0, - 100,25,0,106,15,0,100,26,0,100,27,0,131,2,0,100, - 28,0,23,90,16,0,101,17,0,106,18,0,101,16,0,100, - 27,0,131,2,0,90,19,0,100,29,0,90,20,0,100,30, - 0,90,21,0,100,31,0,103,1,0,90,22,0,100,32,0, - 103,1,0,90,23,0,101,23,0,4,90,24,0,90,25,0, - 100,33,0,100,34,0,100,33,0,100,35,0,100,36,0,132, - 1,1,90,26,0,100,37,0,100,38,0,132,0,0,90,27, - 0,100,39,0,100,40,0,132,0,0,90,28,0,100,41,0, - 100,42,0,132,0,0,90,29,0,100,43,0,100,44,0,132, - 0,0,90,30,0,100,45,0,100,46,0,100,47,0,100,48, - 0,132,0,1,90,31,0,100,49,0,100,50,0,132,0,0, - 90,32,0,100,51,0,100,52,0,132,0,0,90,33,0,100, - 33,0,100,33,0,100,33,0,100,53,0,100,54,0,132,3, - 0,90,34,0,100,33,0,100,33,0,100,33,0,100,55,0, - 100,56,0,132,3,0,90,35,0,100,57,0,100,57,0,100, - 58,0,100,59,0,132,2,0,90,36,0,100,60,0,100,61, - 0,132,0,0,90,37,0,101,38,0,131,0,0,90,39,0, - 100,33,0,100,62,0,100,33,0,100,63,0,101,39,0,100, - 64,0,100,65,0,132,1,2,90,40,0,71,100,66,0,100, - 67,0,132,0,0,100,67,0,131,2,0,90,41,0,71,100, - 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,42, - 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,42, - 0,131,3,0,90,43,0,71,100,72,0,100,73,0,132,0, - 0,100,73,0,131,2,0,90,44,0,71,100,74,0,100,75, - 0,132,0,0,100,75,0,101,44,0,101,43,0,131,4,0, - 90,45,0,71,100,76,0,100,77,0,132,0,0,100,77,0, - 101,44,0,101,42,0,131,4,0,90,46,0,103,0,0,90, - 47,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, - 44,0,101,42,0,131,4,0,90,48,0,71,100,80,0,100, - 81,0,132,0,0,100,81,0,131,2,0,90,49,0,71,100, - 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,50, - 0,71,100,84,0,100,85,0,132,0,0,100,85,0,131,2, - 0,90,51,0,71,100,86,0,100,87,0,132,0,0,100,87, - 0,131,2,0,90,52,0,100,33,0,100,88,0,100,89,0, - 132,1,0,90,53,0,100,90,0,100,91,0,132,0,0,90, - 54,0,100,92,0,100,93,0,132,0,0,90,55,0,100,94, - 0,100,95,0,132,0,0,90,56,0,100,33,0,83,41,97, - 97,94,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,112,97,116,104, - 45,98,97,115,101,100,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,38,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,95,101,120,116,101,114,110,97,108,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, + 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,64,0,0,0,115,236,1,0,0,100,0,90,0,100,91, + 90,1,100,4,100,5,132,0,90,2,100,6,100,7,132,0, + 90,3,100,8,100,9,132,0,90,4,100,10,100,11,132,0, + 90,5,100,12,100,13,132,0,90,6,100,14,100,15,132,0, + 90,7,100,16,100,17,132,0,90,8,100,18,100,19,132,0, + 90,9,100,20,100,21,132,0,90,10,100,92,100,23,100,24, + 132,1,90,11,101,12,101,11,106,13,131,1,90,14,100,25, + 106,15,100,26,100,27,131,2,100,28,23,0,90,16,101,17, + 106,18,101,16,100,27,131,2,90,19,100,29,90,20,100,30, + 90,21,100,31,103,1,90,22,100,32,103,1,90,23,101,23, + 4,0,90,24,90,25,100,93,100,33,100,34,156,1,100,35, + 100,36,132,3,90,26,100,37,100,38,132,0,90,27,100,39, + 100,40,132,0,90,28,100,41,100,42,132,0,90,29,100,43, + 100,44,132,0,90,30,100,45,100,46,132,0,90,31,100,47, + 100,48,132,0,90,32,100,94,100,49,100,50,132,1,90,33, + 100,95,100,51,100,52,132,1,90,34,100,96,100,54,100,55, + 132,1,90,35,100,56,100,57,132,0,90,36,101,37,131,0, + 90,38,100,97,100,33,101,38,100,58,156,2,100,59,100,60, + 132,3,90,39,71,0,100,61,100,62,132,0,100,62,131,2, + 90,40,71,0,100,63,100,64,132,0,100,64,131,2,90,41, + 71,0,100,65,100,66,132,0,100,66,101,41,131,3,90,42, + 71,0,100,67,100,68,132,0,100,68,131,2,90,43,71,0, + 100,69,100,70,132,0,100,70,101,43,101,42,131,4,90,44, + 71,0,100,71,100,72,132,0,100,72,101,43,101,41,131,4, + 90,45,103,0,90,46,71,0,100,73,100,74,132,0,100,74, + 101,43,101,41,131,4,90,47,71,0,100,75,100,76,132,0, + 100,76,131,2,90,48,71,0,100,77,100,78,132,0,100,78, + 131,2,90,49,71,0,100,79,100,80,132,0,100,80,131,2, + 90,50,71,0,100,81,100,82,132,0,100,82,131,2,90,51, + 100,98,100,83,100,84,132,1,90,52,100,85,100,86,132,0, + 90,53,100,87,100,88,132,0,90,54,100,89,100,90,132,0, + 90,55,100,33,83,0,41,99,97,94,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,112,97,116,104,45,98,97,115,101,100,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,34,0,0,0,116,0,106,1,106,2, + 116,3,131,1,114,22,100,1,100,2,132,0,125,0,110,8, + 100,3,100,2,132,0,125,0,124,0,83,0,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,10,0,0,0,100,1,116,0,106,1,107, + 6,83,0,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,38,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,95,101,120,116,101,114,110,97,108, + 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,83,0,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,12,1, + 10,4,8,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,20, + 0,0,0,116,0,124,0,131,1,100,1,64,0,106,1,100, + 2,100,3,131,2,83,0,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,108,3,0,0,0,255,127,255,127,3,0, @@ -120,2477 +103,2324 @@ const unsigned char _Py_M__importlib_external[] = { 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, + 115,12,0,0,0,116,0,106,1,124,0,100,1,131,2,83, + 0,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,20,0,0,0,116,0,106,1,100, + 1,100,2,132,0,124,0,68,0,131,1,131,1,83,0,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,26,0,0,0,103,0,124,0, + 93,18,125,1,124,1,114,4,124,1,106,0,116,1,131,1, + 145,2,113,4,83,0,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,6,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,10,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,98,0,0,0,116, + 0,116,1,131,1,100,1,107,2,114,36,124,0,106,2,116, + 3,131,1,92,3,125,1,125,2,125,3,124,1,124,3,102, + 2,83,0,120,52,116,4,124,0,131,1,68,0,93,40,125, + 4,124,4,116,1,107,6,114,46,124,0,106,5,124,4,100, + 2,100,1,144,1,131,1,92,2,125,1,125,3,124,1,124, + 3,102,2,83,0,113,46,87,0,100,3,124,0,102,2,83, + 0,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,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,218,11,95,112,97,116,104,95,115,112,108,105,116,56,0, + 0,0,115,16,0,0,0,0,2,12,1,16,1,8,1,14, + 1,8,1,20,1,12,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,10,0,0,0,116,0,106,1,124,0,131,1,83,0, + 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,48,0,0,0,121,12,116,0,124, + 0,131,1,125,2,87,0,110,20,4,0,116,1,107,10,114, + 32,1,0,1,0,1,0,100,1,83,0,88,0,124,2,106, + 2,100,2,64,0,124,1,107,2,83,0,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,2,1,12,1,14,1,6,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,31,0,0,0,124,0,0,115, - 18,0,116,0,0,106,1,0,131,0,0,125,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,12,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,193,0,0,0,100,1,0,106, - 0,0,124,0,0,116,1,0,124,0,0,131,1,0,131,2, - 0,125,3,0,116,2,0,106,3,0,124,3,0,116,2,0, - 106,4,0,116,2,0,106,5,0,66,116,2,0,106,6,0, - 66,124,2,0,100,2,0,64,131,3,0,125,4,0,121,61, - 0,116,7,0,106,8,0,124,4,0,100,3,0,131,2,0, - 143,20,0,125,5,0,124,5,0,106,9,0,124,1,0,131, - 1,0,1,87,100,4,0,81,82,88,116,2,0,106,10,0, - 124,3,0,124,0,0,131,2,0,1,87,110,59,0,4,116, - 11,0,107,10,0,114,188,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,180,0,1,1,1,89,110,1,0, - 88,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,20,1,20,1,13, - 1,3,1,17,1,13,1,5,1,114,55,0,0,0,105,23, - 13,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,4,111,112,116,45,122,3,46,112,121,122,4,46,112, - 121,99,78,218,12,111,112,116,105,109,105,122,97,116,105,111, - 110,99,2,0,0,0,1,0,0,0,11,0,0,0,6,0, - 0,0,67,0,0,0,115,87,1,0,0,124,1,0,100,1, - 0,107,9,0,114,76,0,116,0,0,106,1,0,100,2,0, - 116,2,0,131,2,0,1,124,2,0,100,1,0,107,9,0, - 114,58,0,100,3,0,125,3,0,116,3,0,124,3,0,131, - 1,0,130,1,0,124,1,0,114,70,0,100,4,0,110,3, - 0,100,5,0,125,2,0,116,4,0,124,0,0,131,1,0, - 92,2,0,125,4,0,125,5,0,124,5,0,106,5,0,100, - 6,0,131,1,0,92,3,0,125,6,0,125,7,0,125,8, - 0,116,6,0,106,7,0,106,8,0,125,9,0,124,9,0, - 100,1,0,107,8,0,114,154,0,116,9,0,100,7,0,131, - 1,0,130,1,0,100,4,0,106,10,0,124,6,0,114,172, - 0,124,6,0,110,3,0,124,8,0,124,7,0,124,9,0, - 103,3,0,131,1,0,125,10,0,124,2,0,100,1,0,107, - 8,0,114,241,0,116,6,0,106,11,0,106,12,0,100,8, - 0,107,2,0,114,229,0,100,4,0,125,2,0,110,12,0, - 116,6,0,106,11,0,106,12,0,125,2,0,116,13,0,124, - 2,0,131,1,0,125,2,0,124,2,0,100,4,0,107,3, - 0,114,63,1,124,2,0,106,14,0,131,0,0,115,42,1, - 116,15,0,100,9,0,106,16,0,124,2,0,131,1,0,131, - 1,0,130,1,0,100,10,0,106,16,0,124,10,0,116,17, - 0,124,2,0,131,3,0,125,10,0,116,18,0,124,4,0, - 116,19,0,124,10,0,116,20,0,100,8,0,25,23,131,3, - 0,83,41,11,97,254,2,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,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,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,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, - 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, - 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, - 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, - 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, - 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, - 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, - 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, - 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, - 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, - 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, - 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, - 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, - 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, - 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, - 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, - 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,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,10,32,32, - 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, - 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, - 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, - 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, - 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, - 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, - 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,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,122,70,116,104,101,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, - 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, - 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, - 78,111,110,101,114,30,0,0,0,114,29,0,0,0,218,1, - 46,122,36,115,121,115,46,105,109,112,108,101,109,101,110,116, + 0,0,0,67,0,0,0,115,10,0,0,0,116,0,124,0, + 100,1,131,2,83,0,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,22, + 0,0,0,124,0,115,12,116,0,106,1,131,0,125,0,116, + 2,124,0,100,1,131,2,83,0,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,4,1,8,1,114,46,0,0,0,233,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,162,0,0,0,100,1,106,0,124,0, + 116,1,124,0,131,1,131,2,125,3,116,2,106,3,124,3, + 116,2,106,4,116,2,106,5,66,0,116,2,106,6,66,0, + 124,2,100,2,64,0,131,3,125,4,121,50,116,7,106,8, + 124,4,100,3,131,2,143,16,125,5,124,5,106,9,124,1, + 131,1,1,0,87,0,100,4,81,0,82,0,88,0,116,2, + 106,10,124,3,124,0,131,2,1,0,87,0,110,58,4,0, + 116,11,107,10,114,156,1,0,1,0,1,0,121,14,116,2, + 106,12,124,3,131,1,1,0,87,0,110,20,4,0,116,11, + 107,10,114,148,1,0,1,0,1,0,89,0,110,2,88,0, + 130,0,89,0,110,2,88,0,100,4,83,0,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, + 16,1,6,1,26,1,2,3,14,1,20,1,16,1,14,1, + 2,1,14,1,14,1,6,1,114,56,0,0,0,105,44,13, + 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,4,111,112,116,45,122,3,46,112,121,122,4,46,112,121, + 99,78,41,1,218,12,111,112,116,105,109,105,122,97,116,105, + 111,110,99,2,0,0,0,1,0,0,0,11,0,0,0,6, + 0,0,0,67,0,0,0,115,234,0,0,0,124,1,100,1, + 107,9,114,52,116,0,106,1,100,2,116,2,131,2,1,0, + 124,2,100,1,107,9,114,40,100,3,125,3,116,3,124,3, + 131,1,130,1,124,1,114,48,100,4,110,2,100,5,125,2, + 116,4,124,0,131,1,92,2,125,4,125,5,124,5,106,5, + 100,6,131,1,92,3,125,6,125,7,125,8,116,6,106,7, + 106,8,125,9,124,9,100,1,107,8,114,104,116,9,100,7, + 131,1,130,1,100,4,106,10,124,6,114,116,124,6,110,2, + 124,8,124,7,124,9,103,3,131,1,125,10,124,2,100,1, + 107,8,114,162,116,6,106,11,106,12,100,8,107,2,114,154, + 100,4,125,2,110,8,116,6,106,11,106,12,125,2,116,13, + 124,2,131,1,125,2,124,2,100,4,107,3,114,214,124,2, + 106,14,131,0,115,200,116,15,100,9,106,16,124,2,131,1, + 131,1,130,1,100,10,106,16,124,10,116,17,124,2,131,3, + 125,10,116,18,124,4,116,19,124,10,116,20,100,8,25,0, + 23,0,131,3,83,0,41,11,97,254,2,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,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,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,10,10,32,32,32,32,84,104,101,32,39, + 111,112,116,105,109,105,122,97,116,105,111,110,39,32,112,97, + 114,97,109,101,116,101,114,32,99,111,110,116,114,111,108,115, + 32,116,104,101,32,112,114,101,115,117,109,101,100,32,111,112, + 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, + 32,111,102,10,32,32,32,32,116,104,101,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,46,32,73,102,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,105,115,32, + 110,111,116,32,78,111,110,101,44,32,116,104,101,32,115,116, + 114,105,110,103,32,114,101,112,114,101,115,101,110,116,97,116, + 105,111,110,10,32,32,32,32,111,102,32,116,104,101,32,97, + 114,103,117,109,101,110,116,32,105,115,32,116,97,107,101,110, + 32,97,110,100,32,118,101,114,105,102,105,101,100,32,116,111, + 32,98,101,32,97,108,112,104,97,110,117,109,101,114,105,99, + 32,40,101,108,115,101,32,86,97,108,117,101,69,114,114,111, + 114,10,32,32,32,32,105,115,32,114,97,105,115,101,100,41, + 46,10,10,32,32,32,32,84,104,101,32,100,101,98,117,103, + 95,111,118,101,114,114,105,100,101,32,112,97,114,97,109,101, + 116,101,114,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,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,10,32,32,32,32,97,32,84,114,117,101,32,118,97,108, + 117,101,32,105,115,32,116,104,101,32,115,97,109,101,32,97, + 115,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, + 105,122,97,116,105,111,110,39,32,116,111,32,116,104,101,32, + 101,109,112,116,121,32,115,116,114,105,110,103,10,32,32,32, + 32,119,104,105,108,101,32,97,32,70,97,108,115,101,32,118, + 97,108,117,101,32,105,115,32,101,113,117,105,118,97,108,101, + 110,116,32,116,111,32,115,101,116,116,105,110,103,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,116,111,32, + 39,49,39,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,122,70,116,104, + 101,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, + 32,112,97,114,97,109,101,116,101,114,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,59,32,117,115,101,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,105,110,115, + 116,101,97,100,122,50,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,32,111,114,32,111,112,116,105,109,105,122,97, + 116,105,111,110,32,109,117,115,116,32,98,101,32,115,101,116, + 32,116,111,32,78,111,110,101,114,30,0,0,0,114,29,0, + 0,0,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,233,0,0,0,0, + 122,24,123,33,114,125,32,105,115,32,110,111,116,32,97,108, + 112,104,97,110,117,109,101,114,105,99,122,7,123,125,46,123, + 125,123,125,41,21,218,9,95,119,97,114,110,105,110,103,115, + 218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116, + 105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101, + 69,114,114,111,114,114,38,0,0,0,114,32,0,0,0,114, + 7,0,0,0,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,218,5,102,108,97,103,115, + 218,8,111,112,116,105,109,105,122,101,218,3,115,116,114,218, + 7,105,115,97,108,110,117,109,218,10,86,97,108,117,101,69, + 114,114,111,114,114,48,0,0,0,218,4,95,79,80,84,114, + 28,0,0,0,218,8,95,80,89,67,65,67,72,69,218,17, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,41,11,114,35,0,0,0,90,14,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,114,58,0,0,0,218,7,109, + 101,115,115,97,103,101,218,4,104,101,97,100,114,37,0,0, + 0,90,4,98,97,115,101,218,3,115,101,112,218,4,114,101, + 115,116,90,3,116,97,103,90,15,97,108,109,111,115,116,95, + 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,249,0,0,0,115,46, + 0,0,0,0,18,8,1,6,1,6,1,8,1,4,1,8, + 1,12,1,12,1,16,1,8,1,8,1,8,1,24,1,8, + 1,12,1,6,2,8,1,8,1,8,1,8,1,14,1,14, + 1,114,80,0,0,0,99,1,0,0,0,0,0,0,0,8, + 0,0,0,5,0,0,0,67,0,0,0,115,220,0,0,0, + 116,0,106,1,106,2,100,1,107,8,114,20,116,3,100,2, + 131,1,130,1,116,4,124,0,131,1,92,2,125,1,125,2, + 116,4,124,1,131,1,92,2,125,1,125,3,124,3,116,5, + 107,3,114,68,116,6,100,3,106,7,116,5,124,0,131,2, + 131,1,130,1,124,2,106,8,100,4,131,1,125,4,124,4, + 100,11,107,7,114,102,116,6,100,7,106,7,124,2,131,1, + 131,1,130,1,110,86,124,4,100,6,107,2,114,188,124,2, + 106,9,100,4,100,5,131,2,100,12,25,0,125,5,124,5, + 106,10,116,11,131,1,115,150,116,6,100,8,106,7,116,11, + 131,1,131,1,130,1,124,5,116,12,116,11,131,1,100,1, + 133,2,25,0,125,6,124,6,106,13,131,0,115,188,116,6, + 100,9,106,7,124,5,131,1,131,1,130,1,124,2,106,14, + 100,4,131,1,100,10,25,0,125,7,116,15,124,1,124,7, + 116,16,100,10,25,0,23,0,131,2,83,0,41,13,97,110, + 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,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,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,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,47,52,56,56,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,233,0,0,0,0,122,24,123,33, - 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, - 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,41, - 21,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, - 114,110,218,18,68,101,112,114,101,99,97,116,105,111,110,87, - 97,114,110,105,110,103,218,9,84,121,112,101,69,114,114,111, - 114,114,38,0,0,0,114,32,0,0,0,114,7,0,0,0, - 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, + 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, - 114,26,0,0,0,218,5,102,108,97,103,115,218,8,111,112, - 116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,97, - 108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,114, - 114,47,0,0,0,218,4,95,79,80,84,114,28,0,0,0, - 218,8,95,80,89,67,65,67,72,69,218,17,66,89,84,69, - 67,79,68,69,95,83,85,70,70,73,88,69,83,41,11,114, - 35,0,0,0,90,14,100,101,98,117,103,95,111,118,101,114, - 114,105,100,101,114,57,0,0,0,218,7,109,101,115,115,97, - 103,101,218,4,104,101,97,100,114,37,0,0,0,90,4,98, - 97,115,101,218,3,115,101,112,218,4,114,101,115,116,90,3, - 116,97,103,90,15,97,108,109,111,115,116,95,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,247,0,0,0,115,46,0,0,0,0, - 18,12,1,9,1,7,1,12,1,6,1,12,1,18,1,18, - 1,24,1,12,1,12,1,12,1,36,1,12,1,18,1,9, - 2,12,1,12,1,12,1,12,1,21,1,21,1,114,79,0, - 0,0,99,1,0,0,0,0,0,0,0,8,0,0,0,5, - 0,0,0,67,0,0,0,115,62,1,0,0,116,0,0,106, - 1,0,106,2,0,100,1,0,107,8,0,114,30,0,116,3, - 0,100,2,0,131,1,0,130,1,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,102,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,124,2,0,106,8,0,100,4,0,131,1,0,125,4, - 0,124,4,0,100,11,0,107,7,0,114,153,0,116,6,0, - 100,7,0,106,7,0,124,2,0,131,1,0,131,1,0,130, - 1,0,110,125,0,124,4,0,100,6,0,107,2,0,114,22, - 1,124,2,0,106,9,0,100,4,0,100,5,0,131,2,0, - 100,12,0,25,125,5,0,124,5,0,106,10,0,116,11,0, - 131,1,0,115,223,0,116,6,0,100,8,0,106,7,0,116, - 11,0,131,1,0,131,1,0,130,1,0,124,5,0,116,12, - 0,116,11,0,131,1,0,100,1,0,133,2,0,25,125,6, - 0,124,6,0,106,13,0,131,0,0,115,22,1,116,6,0, - 100,9,0,106,7,0,124,5,0,131,1,0,131,1,0,130, - 1,0,124,2,0,106,14,0,100,4,0,131,1,0,100,10, - 0,25,125,7,0,116,15,0,124,1,0,124,7,0,116,16, - 0,100,10,0,25,23,131,2,0,83,41,13,97,110,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,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,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,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,47,52,56,56,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,58,0, - 0,0,114,56,0,0,0,233,3,0,0,0,122,33,101,120, - 112,101,99,116,101,100,32,111,110,108,121,32,50,32,111,114, - 32,51,32,100,111,116,115,32,105,110,32,123,33,114,125,122, - 57,111,112,116,105,109,105,122,97,116,105,111,110,32,112,111, - 114,116,105,111,110,32,111,102,32,102,105,108,101,110,97,109, - 101,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116, - 32,119,105,116,104,32,123,33,114,125,122,52,111,112,116,105, - 109,105,122,97,116,105,111,110,32,108,101,118,101,108,32,123, - 33,114,125,32,105,115,32,110,111,116,32,97,110,32,97,108, - 112,104,97,110,117,109,101,114,105,99,32,118,97,108,117,101, - 114,59,0,0,0,62,2,0,0,0,114,56,0,0,0,114, - 80,0,0,0,233,254,255,255,255,41,17,114,7,0,0,0, - 114,64,0,0,0,114,65,0,0,0,114,66,0,0,0,114, - 38,0,0,0,114,73,0,0,0,114,71,0,0,0,114,47, - 0,0,0,218,5,99,111,117,110,116,114,34,0,0,0,114, - 9,0,0,0,114,72,0,0,0,114,31,0,0,0,114,70, - 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,28, - 0,0,0,218,15,83,79,85,82,67,69,95,83,85,70,70, - 73,88,69,83,41,8,114,35,0,0,0,114,76,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,90,9,100,111,116, - 95,99,111,117,110,116,114,57,0,0,0,90,9,111,112,116, - 95,108,101,118,101,108,90,13,98,97,115,101,95,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,115,111,117,114,99,101,95,102,114,111, - 109,95,99,97,99,104,101,35,1,0,0,115,44,0,0,0, - 0,9,18,1,12,1,18,1,18,1,12,1,9,1,15,1, - 15,1,12,1,9,1,15,1,12,1,22,1,15,1,9,1, - 12,1,22,1,12,1,9,1,12,1,19,1,114,85,0,0, - 0,99,1,0,0,0,0,0,0,0,5,0,0,0,12,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, - 59,0,0,0,78,114,58,0,0,0,114,80,0,0,0,114, - 29,0,0,0,90,2,112,121,233,253,255,255,255,233,255,255, - 255,255,114,87,0,0,0,41,7,114,31,0,0,0,114,32, - 0,0,0,218,5,108,111,119,101,114,114,85,0,0,0,114, - 66,0,0,0,114,71,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,114, - 78,0,0,0,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,68,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,91, - 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 11,0,0,0,67,0,0,0,115,92,0,0,0,124,0,0, - 106,0,0,116,1,0,116,2,0,131,1,0,131,1,0,114, - 59,0,121,14,0,116,3,0,124,0,0,131,1,0,83,87, - 113,88,0,4,116,4,0,107,10,0,114,55,0,1,1,1, - 89,113,88,0,88,110,29,0,124,0,0,106,0,0,116,1, - 0,116,5,0,131,1,0,131,1,0,114,84,0,124,0,0, - 83,100,0,0,83,100,0,0,83,41,1,78,41,6,218,8, - 101,110,100,115,119,105,116,104,218,5,116,117,112,108,101,114, - 84,0,0,0,114,79,0,0,0,114,66,0,0,0,114,74, - 0,0,0,41,1,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,11, - 95,103,101,116,95,99,97,99,104,101,100,87,1,0,0,115, - 16,0,0,0,0,1,21,1,3,1,14,1,13,1,8,1, - 21,1,4,2,114,95,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,99,1,0,0,115,12,0,0, - 0,0,2,3,1,19,1,13,1,11,3,10,1,114,97,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,75,0,0,0,116,0,0,106, - 1,0,106,2,0,124,1,0,107,5,0,114,71,0,124,0, - 0,106,3,0,100,6,0,131,1,0,115,43,0,100,3,0, - 124,0,0,23,125,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,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,99,0,0,0,114,100,0,0,0,41,7,114,7,0,0, - 0,114,67,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,114,75,0,0,0,114, - 98,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,16,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,111,1,0,0,115, - 8,0,0,0,0,2,18,1,15,1,10,1,114,105,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,84,0,0,0,100,1,0,135,0, - 0,102,1,0,100,2,0,100,3,0,134,1,0,125,1,0, - 121,13,0,116,0,0,106,1,0,125,2,0,87,110,30,0, - 4,116,2,0,107,10,0,114,66,0,1,1,1,100,4,0, - 100,5,0,132,0,0,125,2,0,89,110,1,0,88,124,2, - 0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,41, - 6,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,89,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, - 46,0,124,0,0,106,0,0,124,1,0,107,3,0,114,70, - 0,116,1,0,100,1,0,124,0,0,106,0,0,124,1,0, - 102,2,0,22,100,2,0,124,1,0,131,1,1,130,1,0, - 136,0,0,124,0,0,124,1,0,124,2,0,124,3,0,142, - 2,0,83,41,3,78,122,30,108,111,97,100,101,114,32,102, - 111,114,32,37,115,32,99,97,110,110,111,116,32,104,97,110, - 100,108,101,32,37,115,218,4,110,97,109,101,41,2,114,106, - 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, - 41,4,218,4,115,101,108,102,114,106,0,0,0,114,104,0, - 0,0,90,6,107,119,97,114,103,115,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,127,1,0,0,115,12,0,0,0,0,1,12,1, - 12,1,15,1,6,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,99,2,0,0,0,0,0,0,0,3,0,0,0,7, - 0,0,0,83,0,0,0,115,92,0,0,0,120,66,0,100, - 1,0,100,2,0,100,3,0,100,4,0,103,4,0,68,93, - 46,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, - 87,124,0,0,106,3,0,106,4,0,124,1,0,106,3,0, - 131,1,0,1,100,0,0,83,41,5,78,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,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,138,1, - 0,0,115,8,0,0,0,0,1,25,1,15,1,29,1,122, - 26,95,99,104,101,99,107,95,110,97,109,101,46,60,108,111, - 99,97,108,115,62,46,95,119,114,97,112,41,3,218,10,95, - 98,111,111,116,115,116,114,97,112,114,120,0,0,0,218,9, - 78,97,109,101,69,114,114,111,114,41,3,114,109,0,0,0, - 114,110,0,0,0,114,120,0,0,0,114,4,0,0,0,41, - 1,114,109,0,0,0,114,5,0,0,0,218,11,95,99,104, - 101,99,107,95,110,97,109,101,119,1,0,0,115,14,0,0, - 0,0,8,21,7,3,1,13,1,13,2,17,5,13,1,114, - 123,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, - 0,4,0,0,0,67,0,0,0,115,84,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,1,0,107,8,0,114,80,0,116, - 1,0,124,3,0,131,1,0,114,80,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,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,59,0,0,0,41,6,218,11,102,105,110,100,95,108,111, - 97,100,101,114,114,31,0,0,0,114,60,0,0,0,114,61, - 0,0,0,114,47,0,0,0,218,13,73,109,112,111,114,116, - 87,97,114,110,105,110,103,41,5,114,108,0,0,0,218,8, - 102,117,108,108,110,97,109,101,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,147,1,0,0,115,10,0,0,0,0,10,21,1,24,1, - 6,1,29,1,114,130,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,240, - 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,59,0,124,3,0,124,4,0,100,4,0,60,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,100, - 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, - 4,0,141,1,0,130,1,0,110,119,0,116,4,0,124,6, - 0,131,1,0,100,5,0,107,3,0,114,229,0,100,10,0, - 106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,100, - 9,0,124,8,0,131,2,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,31,1,100,11,0,106,1,0, - 124,2,0,131,1,0,125,8,0,116,2,0,100,9,0,124, - 8,0,131,2,0,1,116,5,0,124,8,0,131,1,0,130, - 1,0,124,1,0,100,1,0,107,9,0,114,226,1,121,20, - 0,116,6,0,124,1,0,100,12,0,25,131,1,0,125,9, - 0,87,110,18,0,4,116,7,0,107,10,0,114,83,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,145,1,100,13,0,106,1,0,124, - 2,0,131,1,0,125,8,0,116,2,0,100,9,0,124,8, - 0,131,2,0,1,116,3,0,124,8,0,124,4,0,141,1, - 0,130,1,0,121,18,0,124,1,0,100,14,0,25,100,15, - 0,64,125,10,0,87,110,18,0,4,116,7,0,107,10,0, - 114,183,1,1,1,1,89,110,43,0,88,116,8,0,124,7, - 0,131,1,0,124,10,0,107,3,0,114,226,1,116,3,0, - 100,13,0,106,1,0,124,2,0,131,1,0,124,4,0,141, - 1,0,130,1,0,124,0,0,100,7,0,100,1,0,133,2, - 0,25,83,41,16,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,106,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,2,123,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,105,0,0,0,114,107,0,0,0, - 114,31,0,0,0,218,8,69,79,70,69,114,114,111,114,114, - 14,0,0,0,218,8,75,101,121,69,114,114,111,114,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,106,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, - 75,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, + 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, + 59,0,0,0,114,57,0,0,0,233,3,0,0,0,122,33, + 101,120,112,101,99,116,101,100,32,111,110,108,121,32,50,32, + 111,114,32,51,32,100,111,116,115,32,105,110,32,123,33,114, + 125,122,57,111,112,116,105,109,105,122,97,116,105,111,110,32, + 112,111,114,116,105,111,110,32,111,102,32,102,105,108,101,110, + 97,109,101,32,100,111,101,115,32,110,111,116,32,115,116,97, + 114,116,32,119,105,116,104,32,123,33,114,125,122,52,111,112, + 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, + 32,123,33,114,125,32,105,115,32,110,111,116,32,97,110,32, + 97,108,112,104,97,110,117,109,101,114,105,99,32,118,97,108, + 117,101,114,60,0,0,0,62,2,0,0,0,114,57,0,0, + 0,114,81,0,0,0,233,254,255,255,255,41,17,114,7,0, + 0,0,114,65,0,0,0,114,66,0,0,0,114,67,0,0, + 0,114,38,0,0,0,114,74,0,0,0,114,72,0,0,0, + 114,48,0,0,0,218,5,99,111,117,110,116,114,34,0,0, + 0,114,9,0,0,0,114,73,0,0,0,114,31,0,0,0, + 114,71,0,0,0,218,9,112,97,114,116,105,116,105,111,110, + 114,28,0,0,0,218,15,83,79,85,82,67,69,95,83,85, + 70,70,73,88,69,83,41,8,114,35,0,0,0,114,77,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,90,9,100, + 111,116,95,99,111,117,110,116,114,58,0,0,0,90,9,111, + 112,116,95,108,101,118,101,108,90,13,98,97,115,101,95,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,115,111,117,114,99,101,95,102, + 114,111,109,95,99,97,99,104,101,37,1,0,0,115,44,0, + 0,0,0,9,12,1,8,1,12,1,12,1,8,1,6,1, + 10,1,10,1,8,1,6,1,10,1,8,1,16,1,10,1, + 6,1,8,1,16,1,8,1,6,1,8,1,14,1,114,86, + 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, + 12,0,0,0,67,0,0,0,115,128,0,0,0,116,0,124, + 0,131,1,100,1,107,2,114,16,100,2,83,0,124,0,106, + 1,100,3,131,1,92,3,125,1,125,2,125,3,124,1,12, + 0,115,58,124,3,106,2,131,0,100,7,100,8,133,2,25, + 0,100,6,107,3,114,62,124,0,83,0,121,12,116,3,124, + 0,131,1,125,4,87,0,110,36,4,0,116,4,116,5,102, + 2,107,10,114,110,1,0,1,0,1,0,124,0,100,2,100, + 9,133,2,25,0,125,4,89,0,110,2,88,0,116,6,124, + 4,131,1,114,124,124,4,83,0,124,0,83,0,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,60,0, + 0,0,78,114,59,0,0,0,114,81,0,0,0,114,29,0, + 0,0,90,2,112,121,233,253,255,255,255,233,255,255,255,255, + 114,88,0,0,0,41,7,114,31,0,0,0,114,32,0,0, + 0,218,5,108,111,119,101,114,114,86,0,0,0,114,67,0, + 0,0,114,72,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,114,79,0, + 0,0,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,70, + 1,0,0,115,20,0,0,0,0,7,12,1,4,1,16,1, + 26,1,4,1,2,1,12,1,18,1,18,1,114,92,0,0, + 0,99,1,0,0,0,0,0,0,0,1,0,0,0,11,0, + 0,0,67,0,0,0,115,74,0,0,0,124,0,106,0,116, + 1,116,2,131,1,131,1,114,46,121,8,116,3,124,0,131, + 1,83,0,4,0,116,4,107,10,114,42,1,0,1,0,1, + 0,89,0,113,70,88,0,110,24,124,0,106,0,116,1,116, + 5,131,1,131,1,114,66,124,0,83,0,110,4,100,0,83, + 0,100,0,83,0,41,1,78,41,6,218,8,101,110,100,115, + 119,105,116,104,218,5,116,117,112,108,101,114,85,0,0,0, + 114,80,0,0,0,114,67,0,0,0,114,75,0,0,0,41, + 1,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,11,95,103,101,116, + 95,99,97,99,104,101,100,89,1,0,0,115,16,0,0,0, + 0,1,14,1,2,1,8,1,14,1,8,1,14,1,6,2, + 114,96,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,52,0,0,0,121, + 14,116,0,124,0,131,1,106,1,125,1,87,0,110,24,4, + 0,116,2,107,10,114,38,1,0,1,0,1,0,100,1,125, + 1,89,0,110,2,88,0,124,1,100,2,79,0,125,1,124, + 1,83,0,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,101,1,0,0, + 115,12,0,0,0,0,2,2,1,14,1,14,1,10,3,8, + 1,114,98,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,68,0,0,0, + 100,6,135,0,102,1,100,2,100,3,132,9,125,1,121,10, + 116,0,106,1,125,2,87,0,110,28,4,0,116,2,107,10, + 114,52,1,0,1,0,1,0,100,4,100,5,132,0,125,2, + 89,0,110,2,88,0,124,2,124,1,136,0,131,2,1,0, + 124,1,83,0,41,7,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,64,0,0,0,124, + 1,100,0,107,8,114,16,124,0,106,0,125,1,110,34,124, + 0,106,0,124,1,107,3,114,50,116,1,100,1,124,0,106, + 0,124,1,102,2,22,0,100,2,124,1,144,1,131,1,130, + 1,136,0,124,0,124,1,124,2,124,3,142,2,83,0,41, + 3,78,122,30,108,111,97,100,101,114,32,102,111,114,32,37, + 115,32,99,97,110,110,111,116,32,104,97,110,100,108,101,32, + 37,115,218,4,110,97,109,101,41,2,114,99,0,0,0,218, + 11,73,109,112,111,114,116,69,114,114,111,114,41,4,218,4, + 115,101,108,102,114,99,0,0,0,218,4,97,114,103,115,90, + 6,107,119,97,114,103,115,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, + 121,1,0,0,115,12,0,0,0,0,1,8,1,8,1,10, + 1,4,1,20,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,99, + 2,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0, + 83,0,0,0,115,60,0,0,0,120,40,100,5,68,0,93, + 32,125,2,116,0,124,1,124,2,131,2,114,6,116,1,124, + 0,124,2,116,2,124,1,124,2,131,2,131,3,1,0,113, + 6,87,0,124,0,106,3,106,4,124,1,106,3,131,1,1, + 0,100,0,83,0,41,6,78,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,41,4,122,10,95,95,109,111,100,117,108, + 101,95,95,122,8,95,95,110,97,109,101,95,95,122,12,95, + 95,113,117,97,108,110,97,109,101,95,95,122,7,95,95,100, + 111,99,95,95,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, + 53,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,132,1,0,0,115,8, + 0,0,0,0,1,10,1,10,1,22,1,122,26,95,99,104, + 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, + 62,46,95,119,114,97,112,41,1,78,41,3,218,10,95,98, + 111,111,116,115,116,114,97,112,114,114,0,0,0,218,9,78, + 97,109,101,69,114,114,111,114,41,3,114,103,0,0,0,114, + 104,0,0,0,114,114,0,0,0,114,4,0,0,0,41,1, + 114,103,0,0,0,114,5,0,0,0,218,11,95,99,104,101, + 99,107,95,110,97,109,101,113,1,0,0,115,14,0,0,0, + 0,8,14,7,2,1,10,1,14,2,14,5,10,1,114,117, + 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, + 4,0,0,0,67,0,0,0,115,60,0,0,0,124,0,106, + 0,124,1,131,1,92,2,125,2,125,3,124,2,100,1,107, + 8,114,56,116,1,124,3,131,1,114,56,100,2,125,4,116, + 2,106,3,124,4,106,4,124,3,100,3,25,0,131,1,116, + 5,131,2,1,0,124,2,83,0,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,60,0,0,0,41,6,218,11, + 102,105,110,100,95,108,111,97,100,101,114,114,31,0,0,0, + 114,61,0,0,0,114,62,0,0,0,114,48,0,0,0,218, + 13,73,109,112,111,114,116,87,97,114,110,105,110,103,41,5, + 114,101,0,0,0,218,8,102,117,108,108,110,97,109,101,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,141,1,0,0,115,10,0,0, + 0,0,10,14,1,16,1,4,1,22,1,114,124,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,128,1,0,0,105,0,125,4,124,2, + 100,1,107,9,114,22,124,2,124,4,100,2,60,0,110,4, + 100,3,125,2,124,3,100,1,107,9,114,42,124,3,124,4, + 100,4,60,0,124,0,100,1,100,5,133,2,25,0,125,5, + 124,0,100,5,100,6,133,2,25,0,125,6,124,0,100,6, + 100,7,133,2,25,0,125,7,124,5,116,0,107,3,114,122, + 100,8,106,1,124,2,124,5,131,2,125,8,116,2,106,3, + 100,9,124,8,131,2,1,0,116,4,124,8,124,4,141,1, + 130,1,110,86,116,5,124,6,131,1,100,5,107,3,114,166, + 100,10,106,1,124,2,131,1,125,8,116,2,106,3,100,9, + 124,8,131,2,1,0,116,6,124,8,131,1,130,1,110,42, + 116,5,124,7,131,1,100,5,107,3,114,208,100,11,106,1, + 124,2,131,1,125,8,116,2,106,3,100,9,124,8,131,2, + 1,0,116,6,124,8,131,1,130,1,124,1,100,1,107,9, + 144,1,114,116,121,16,116,7,124,1,100,12,25,0,131,1, + 125,9,87,0,110,20,4,0,116,8,107,10,114,254,1,0, + 1,0,1,0,89,0,110,48,88,0,116,9,124,6,131,1, + 124,9,107,3,144,1,114,46,100,13,106,1,124,2,131,1, + 125,8,116,2,106,3,100,9,124,8,131,2,1,0,116,4, + 124,8,124,4,141,1,130,1,121,16,124,1,100,14,25,0, + 100,15,64,0,125,10,87,0,110,22,4,0,116,8,107,10, + 144,1,114,84,1,0,1,0,1,0,89,0,110,32,88,0, + 116,9,124,7,131,1,124,10,107,3,144,1,114,116,116,4, + 100,13,106,1,124,2,131,1,124,4,141,1,130,1,124,0, + 100,7,100,1,133,2,25,0,83,0,41,16,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,99,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,2,123,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,10,218,12,77,65,71,73, + 67,95,78,85,77,66,69,82,114,48,0,0,0,114,115,0, + 0,0,218,16,95,118,101,114,98,111,115,101,95,109,101,115, + 115,97,103,101,114,100,0,0,0,114,31,0,0,0,218,8, + 69,79,70,69,114,114,111,114,114,14,0,0,0,218,8,75, + 101,121,69,114,114,111,114,114,19,0,0,0,41,11,114,54, + 0,0,0,218,12,115,111,117,114,99,101,95,115,116,97,116, + 115,114,99,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,76,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,158,1,0,0,115,76,0,0,0,0,11,4,1,8, + 1,10,3,4,1,8,1,8,1,12,1,12,1,12,1,8, + 1,12,1,12,1,12,1,12,1,10,1,12,1,10,1,12, + 1,10,1,12,1,8,1,10,1,2,1,16,1,14,1,6, + 2,14,1,10,1,12,1,10,1,2,1,16,1,16,1,6, + 2,14,1,10,1,6,1,114,136,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,86,0,0,0,116,0,106,1,124,0,131,1,125,4, + 116,2,124,4,116,3,131,2,114,58,116,4,106,5,100,1, + 124,2,131,2,1,0,124,3,100,2,107,9,114,52,116,6, + 106,7,124,4,124,3,131,2,1,0,124,4,83,0,110,24, + 116,8,100,3,106,9,124,2,131,1,100,4,124,1,100,5, + 124,2,144,2,131,1,130,1,100,2,83,0,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,164,1,0,0,115,76,0, - 0,0,0,11,6,1,12,1,13,3,6,1,12,1,10,1, - 16,1,16,1,16,1,12,1,18,1,13,1,18,1,18,1, - 15,1,13,1,15,1,18,1,15,1,13,1,12,1,12,1, - 3,1,20,1,13,1,5,2,18,1,15,1,13,1,15,1, - 3,1,18,1,13,1,5,2,18,1,15,1,9,1,114,141, - 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,112,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,75,0,116,4,0,100,1, - 0,124,2,0,131,2,0,1,124,3,0,100,2,0,107,9, - 0,114,71,0,116,5,0,106,6,0,124,4,0,124,3,0, - 131,2,0,1,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,106, - 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,105,0,0,0,218,4,95,105,109,112,90,16,95, - 102,105,120,95,99,111,95,102,105,108,101,110,97,109,101,114, - 107,0,0,0,114,47,0,0,0,41,5,114,53,0,0,0, - 114,106,0,0,0,114,89,0,0,0,114,90,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,219,1,0,0,115,16,0,0,0, - 0,2,15,1,15,1,13,1,12,1,16,1,4,2,18,1, - 114,147,0,0,0,114,59,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, + 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,99,0, + 0,0,114,35,0,0,0,41,10,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,115,0,0,0,114,130,0,0,0,218,4,95,105,109, + 112,90,16,95,102,105,120,95,99,111,95,102,105,108,101,110, + 97,109,101,114,100,0,0,0,114,48,0,0,0,41,5,114, + 54,0,0,0,114,99,0,0,0,114,90,0,0,0,114,91, + 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,213,1,0,0,115, + 16,0,0,0,0,2,10,1,10,1,12,1,8,1,12,1, + 6,2,12,1,114,142,0,0,0,114,60,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,56,0,0,0,116,0,116,1,131,1,125,3, + 124,3,106,2,116,3,124,1,131,1,131,1,1,0,124,3, + 106,2,116,3,124,2,131,1,131,1,1,0,124,3,106,2, + 116,4,106,5,124,0,131,1,131,1,1,0,124,3,83,0, 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,135,0,0,0,218,6,101,120,116,101,110,100,114,17, - 0,0,0,114,142,0,0,0,90,5,100,117,109,112,115,41, - 4,114,146,0,0,0,114,133,0,0,0,114,140,0,0,0, - 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 121,114,129,0,0,0,218,6,101,120,116,101,110,100,114,17, + 0,0,0,114,137,0,0,0,90,5,100,117,109,112,115,41, + 4,114,141,0,0,0,114,127,0,0,0,114,135,0,0,0, + 114,54,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,231,1,0,0,115,10,0,0,0, - 0,3,12,1,19,1,19,1,22,1,114,150,0,0,0,99, + 121,116,101,99,111,100,101,225,1,0,0,115,10,0,0,0, + 0,3,8,1,14,1,14,1,16,1,114,145,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, - 59,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,151, - 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,241,1,0,0,115,10,0,0,0,0,5,12,1, - 18,1,15,1,18,1,114,155,0,0,0,114,127,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,99,2,0,0, - 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, - 0,115,89,1,0,0,124,1,0,100,1,0,107,8,0,114, - 73,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, - 0,131,2,0,114,73,0,121,19,0,124,2,0,106,1,0, - 124,0,0,131,1,0,125,1,0,87,110,18,0,4,116,2, - 0,107,10,0,114,72,0,1,1,1,89,110,1,0,88,116, - 3,0,106,4,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,5,0, - 124,2,0,100,1,0,107,8,0,114,194,0,120,73,0,116, - 6,0,131,0,0,68,93,58,0,92,2,0,125,5,0,125, - 6,0,124,1,0,106,7,0,116,8,0,124,6,0,131,1, - 0,131,1,0,114,128,0,124,5,0,124,0,0,124,1,0, - 131,2,0,125,2,0,124,2,0,124,4,0,95,9,0,80, - 113,128,0,87,100,1,0,83,124,3,0,116,10,0,107,8, - 0,114,23,1,116,0,0,124,2,0,100,6,0,131,2,0, - 114,32,1,121,19,0,124,2,0,106,11,0,124,0,0,131, - 1,0,125,7,0,87,110,18,0,4,116,2,0,107,10,0, - 114,4,1,1,1,1,89,113,32,1,88,124,7,0,114,32, - 1,103,0,0,124,4,0,95,12,0,110,9,0,124,3,0, - 124,4,0,95,12,0,124,4,0,106,12,0,103,0,0,107, - 2,0,114,85,1,124,1,0,114,85,1,116,13,0,124,1, - 0,131,1,0,100,7,0,25,125,8,0,124,4,0,106,12, - 0,106,14,0,124,8,0,131,1,0,1,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,218, - 12,103,101,116,95,102,105,108,101,110,97,109,101,218,6,111, - 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, - 103,101,114,59,0,0,0,41,15,114,115,0,0,0,114,157, - 0,0,0,114,107,0,0,0,114,121,0,0,0,218,10,77, - 111,100,117,108,101,83,112,101,99,90,13,95,115,101,116,95, - 102,105,108,101,97,116,116,114,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,92,0,0,0,114,93,0,0,0,114, - 127,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, - 159,0,0,0,114,156,0,0,0,114,38,0,0,0,218,6, - 97,112,112,101,110,100,41,9,114,106,0,0,0,90,8,108, - 111,99,97,116,105,111,110,114,127,0,0,0,114,156,0,0, - 0,218,4,115,112,101,99,218,12,108,111,97,100,101,114,95, - 99,108,97,115,115,218,8,115,117,102,102,105,120,101,115,114, - 159,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,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,2,2,0,0,115,60,0,0,0,0,12, - 12,4,6,1,15,2,3,1,19,1,13,1,5,8,24,1, - 9,3,12,1,22,1,21,1,15,1,9,1,5,2,4,3, - 12,2,15,1,3,1,19,1,13,1,5,2,6,1,12,2, - 9,1,15,1,6,1,16,1,16,2,114,167,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,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, + 67,0,0,0,115,62,0,0,0,100,1,100,2,108,0,125, + 1,116,1,106,2,124,0,131,1,106,3,125,2,124,1,106, + 4,124,2,131,1,125,3,116,1,106,5,100,2,100,3,131, + 2,125,4,124,4,106,6,124,0,106,6,124,3,100,1,25, + 0,131,1,131,1,83,0,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,60,0,0,0,78,84,41,7,218,8,116, + 111,107,101,110,105,122,101,114,50,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,146,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,235,1,0,0,115,10,0,0, + 0,0,5,8,1,12,1,10,1,12,1,114,150,0,0,0, + 41,2,114,121,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,99,2,0,0,0,2,0,0,0,9,0,0,0, + 19,0,0,0,67,0,0,0,115,8,1,0,0,124,1,100, + 1,107,8,114,58,100,2,125,1,116,0,124,2,100,3,131, + 2,114,58,121,14,124,2,106,1,124,0,131,1,125,1,87, + 0,110,20,4,0,116,2,107,10,114,56,1,0,1,0,1, + 0,89,0,110,2,88,0,116,3,106,4,124,0,124,2,100, + 4,124,1,144,1,131,2,125,4,100,5,124,4,95,5,124, + 2,100,1,107,8,114,146,120,54,116,6,131,0,68,0,93, + 40,92,2,125,5,125,6,124,1,106,7,116,8,124,6,131, + 1,131,1,114,98,124,5,124,0,124,1,131,2,125,2,124, + 2,124,4,95,9,80,0,113,98,87,0,100,1,83,0,124, + 3,116,10,107,8,114,212,116,0,124,2,100,6,131,2,114, + 218,121,14,124,2,106,11,124,0,131,1,125,7,87,0,110, + 20,4,0,116,2,107,10,114,198,1,0,1,0,1,0,89, + 0,113,218,88,0,124,7,114,218,103,0,124,4,95,12,110, + 6,124,3,124,4,95,12,124,4,106,12,103,0,107,2,144, + 1,114,4,124,1,144,1,114,4,116,13,124,1,131,1,100, + 7,25,0,125,8,124,4,106,12,106,14,124,8,131,1,1, + 0,124,4,83,0,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,218,12,103,101,116,95,102,105,108,101,110, + 97,109,101,218,6,111,114,105,103,105,110,84,218,10,105,115, + 95,112,97,99,107,97,103,101,114,60,0,0,0,41,15,114, + 109,0,0,0,114,152,0,0,0,114,100,0,0,0,114,115, + 0,0,0,218,10,77,111,100,117,108,101,83,112,101,99,90, + 13,95,115,101,116,95,102,105,108,101,97,116,116,114,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,93,0,0,0, + 114,94,0,0,0,114,121,0,0,0,218,9,95,80,79,80, + 85,76,65,84,69,114,154,0,0,0,114,151,0,0,0,114, + 38,0,0,0,218,6,97,112,112,101,110,100,41,9,114,99, + 0,0,0,90,8,108,111,99,97,116,105,111,110,114,121,0, + 0,0,114,151,0,0,0,218,4,115,112,101,99,218,12,108, + 111,97,100,101,114,95,99,108,97,115,115,218,8,115,117,102, + 102,105,120,101,115,114,154,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,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,252,1,0,0,115, + 60,0,0,0,0,12,8,4,4,1,10,2,2,1,14,1, + 14,1,6,8,18,1,6,3,8,1,16,1,14,1,10,1, + 6,1,6,2,4,3,8,2,10,1,2,1,14,1,14,1, + 6,2,4,1,8,2,6,1,12,1,6,1,12,1,12,2, + 114,162,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,64,0,0,0,115,80,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,100, + 3,90,5,100,4,90,6,101,7,100,5,100,6,132,0,131, + 1,90,8,101,7,100,7,100,8,132,0,131,1,90,9,101, + 7,100,14,100,10,100,11,132,1,131,1,90,10,101,7,100, + 15,100,12,100,13,132,1,131,1,90,11,100,9,83,0,41, + 16,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,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,218,3, - 99,108,115,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,80,2,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,143,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,47,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,82,88,87,110,22,0,4,116,9, - 0,107,10,0,114,138,0,1,1,1,100,0,0,83,89,110, - 1,0,88,124,5,0,83,41,5,78,114,126,0,0,0,90, - 11,115,121,115,95,118,101,114,115,105,111,110,114,80,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,172,0,0,0,114, - 169,0,0,0,90,10,81,117,101,114,121,86,97,108,117,101, - 114,40,0,0,0,41,6,114,170,0,0,0,114,126,0,0, - 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, - 171,0,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,87,2,0,0,115,22,0,0,0,0,2, - 9,1,12,2,9,1,15,1,22,1,3,1,18,1,29,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,158,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,81,0, - 116,3,0,131,0,0,68,93,70,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,106,7,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,158,0,0,0,41,8,114, - 178,0,0,0,114,39,0,0,0,114,40,0,0,0,114,161, - 0,0,0,114,92,0,0,0,114,93,0,0,0,114,121,0, - 0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,111, - 97,100,101,114,41,8,114,170,0,0,0,114,126,0,0,0, - 114,35,0,0,0,218,6,116,97,114,103,101,116,114,177,0, - 0,0,114,127,0,0,0,114,166,0,0,0,114,164,0,0, - 0,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,102,2,0,0,115, - 26,0,0,0,0,2,15,1,12,1,4,1,3,1,14,1, - 13,1,9,1,22,1,21,1,9,1,15,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, + 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,50, + 0,0,0,121,14,116,0,106,1,116,0,106,2,124,1,131, + 2,83,0,4,0,116,3,107,10,114,44,1,0,1,0,1, + 0,116,0,106,1,116,0,106,4,124,1,131,2,83,0,88, + 0,100,0,83,0,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,218,3,99,108,115,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,74,2,0,0,115,8,0,0,0,0,2,2,1, + 14,1,14,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, + 116,0,0,0,124,0,106,0,114,14,124,0,106,1,125,2, + 110,6,124,0,106,2,125,2,124,2,106,3,100,1,124,1, + 100,2,100,3,116,4,106,5,100,0,100,4,133,2,25,0, + 22,0,144,2,131,0,125,3,121,38,124,0,106,6,124,3, + 131,1,143,18,125,4,116,7,106,8,124,4,100,5,131,2, + 125,5,87,0,100,0,81,0,82,0,88,0,87,0,110,20, + 4,0,116,9,107,10,114,110,1,0,1,0,1,0,100,0, + 83,0,88,0,124,5,83,0,41,6,78,114,120,0,0,0, + 90,11,115,121,115,95,118,101,114,115,105,111,110,122,5,37, + 100,46,37,100,114,57,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, + 48,0,0,0,114,7,0,0,0,218,12,118,101,114,115,105, + 111,110,95,105,110,102,111,114,167,0,0,0,114,164,0,0, + 0,90,10,81,117,101,114,121,86,97,108,117,101,114,40,0, + 0,0,41,6,114,165,0,0,0,114,120,0,0,0,90,12, + 114,101,103,105,115,116,114,121,95,107,101,121,114,166,0,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,81,2,0,0,115,22,0,0,0,0,2,6,1,8, + 2,6,1,10,1,22,1,2,1,12,1,26,1,14,1,6, + 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, + 122,0,0,0,124,0,106,0,124,1,131,1,125,4,124,4, + 100,0,107,8,114,22,100,0,83,0,121,12,116,1,124,4, + 131,1,1,0,87,0,110,20,4,0,116,2,107,10,114,54, + 1,0,1,0,1,0,100,0,83,0,88,0,120,60,116,3, + 131,0,68,0,93,50,92,2,125,5,125,6,124,4,106,4, + 116,5,124,6,131,1,131,1,114,64,116,6,106,7,124,1, + 124,5,124,1,124,4,131,2,100,1,124,4,144,1,131,2, + 125,7,124,7,83,0,113,64,87,0,100,0,83,0,41,2, + 78,114,153,0,0,0,41,8,114,173,0,0,0,114,39,0, + 0,0,114,40,0,0,0,114,156,0,0,0,114,93,0,0, + 0,114,94,0,0,0,114,115,0,0,0,218,16,115,112,101, + 99,95,102,114,111,109,95,108,111,97,100,101,114,41,8,114, + 165,0,0,0,114,120,0,0,0,114,35,0,0,0,218,6, + 116,97,114,103,101,116,114,172,0,0,0,114,121,0,0,0, + 114,161,0,0,0,114,159,0,0,0,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,96,2,0,0,115,26,0,0,0,0,2,10, + 1,8,1,4,1,2,1,12,1,14,1,6,1,16,1,14, + 1,6,1,10,1,8,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,36,0, + 0,0,124,0,106,0,124,1,124,2,131,2,125,3,124,3, + 100,1,107,9,114,28,124,3,106,1,83,0,110,4,100,1, + 83,0,100,1,83,0,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,181,0,0,0,114,127, - 0,0,0,41,4,114,170,0,0,0,114,126,0,0,0,114, - 35,0,0,0,114,164,0,0,0,114,4,0,0,0,114,4, + 32,32,32,32,32,32,78,41,2,114,176,0,0,0,114,121, + 0,0,0,41,4,114,165,0,0,0,114,120,0,0,0,114, + 35,0,0,0,114,159,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,118,2,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, + 111,100,117,108,101,112,2,0,0,115,8,0,0,0,0,7, + 12,1,8,1,8,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,112,0,0,0, - 114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,114, - 175,0,0,0,114,174,0,0,0,114,173,0,0,0,218,11, - 99,108,97,115,115,109,101,116,104,111,100,114,172,0,0,0, - 114,178,0,0,0,114,181,0,0,0,114,182,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,168,0,0,0,68,2,0,0,115,20,0,0, - 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, - 1,21,15,3,1,114,168,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,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,58,0,0,0,114,59,0, - 0,0,114,56,0,0,0,218,8,95,95,105,110,105,116,95, - 95,41,4,114,38,0,0,0,114,157,0,0,0,114,34,0, - 0,0,114,32,0,0,0,41,5,114,108,0,0,0,114,126, - 0,0,0,114,94,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,159,0,0,0,137,2,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,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,41, - 2,122,42,85,115,101,32,100,101,102,97,117,108,116,32,115, - 101,109,97,110,116,105,99,115,32,102,111,114,32,109,111,100, - 117,108,101,32,99,114,101,97,116,105,111,110,46,78,114,4, - 0,0,0,41,2,114,108,0,0,0,114,164,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,13, - 99,114,101,97,116,101,95,109,111,100,117,108,101,145,2,0, - 0,115,0,0,0,0,122,27,95,76,111,97,100,101,114,66, - 97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100, - 117,108,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,54,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,116,4,0,106,5,0,116,6,0,124,2,0,124, - 1,0,106,7,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,8,218,8,103, - 101,116,95,99,111,100,101,114,112,0,0,0,114,107,0,0, - 0,114,47,0,0,0,114,121,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,218,4,101,120,101,99,114,118,0,0, - 0,41,3,114,108,0,0,0,218,6,109,111,100,117,108,101, - 114,146,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, - 101,148,2,0,0,115,10,0,0,0,0,2,18,1,12,1, - 9,1,15,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,99, - 2,0,0,0,0,0,0,0,2,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,124,1,0,131,2,0,83,41,1,78,41,2,114,121, - 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,41,2,114,108,0,0,0,114,126,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,11,108,111,97,100,95,109,111,100,117,108,101,156,2, - 0,0,115,2,0,0,0,0,1,122,25,95,76,111,97,100, - 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, - 100,117,108,101,78,41,8,114,112,0,0,0,114,111,0,0, - 0,114,113,0,0,0,114,114,0,0,0,114,159,0,0,0, - 114,186,0,0,0,114,191,0,0,0,114,193,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,184,0,0,0,132,2,0,0,115,10,0,0, - 0,12,3,6,2,12,8,12,3,12,8,114,184,0,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,108,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,162,2,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,19,0,0,0,100, - 1,0,124,0,0,106,0,0,124,1,0,131,1,0,105,1, - 0,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, + 110,100,95,109,111,100,117,108,101,41,2,78,78,41,1,78, + 41,12,114,106,0,0,0,114,105,0,0,0,114,107,0,0, + 0,114,108,0,0,0,114,170,0,0,0,114,169,0,0,0, + 114,168,0,0,0,218,11,99,108,97,115,115,109,101,116,104, + 111,100,114,167,0,0,0,114,173,0,0,0,114,176,0,0, + 0,114,177,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,163,0,0,0,62, + 2,0,0,115,20,0,0,0,8,2,4,3,4,3,4,2, + 4,2,12,7,12,15,2,1,12,15,2,1,114,163,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,48,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,100, + 8,100,9,132,0,90,7,100,10,83,0,41,11,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,64,0,0,0,116,0,124,0,106, + 1,124,1,131,1,131,1,100,1,25,0,125,2,124,2,106, + 2,100,2,100,1,131,2,100,3,25,0,125,3,124,1,106, + 3,100,2,131,1,100,4,25,0,125,4,124,3,100,5,107, + 2,111,62,124,4,100,5,107,3,83,0,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,59,0,0,0,114,60,0,0,0,114,57,0,0,0, + 218,8,95,95,105,110,105,116,95,95,41,4,114,38,0,0, + 0,114,152,0,0,0,114,34,0,0,0,114,32,0,0,0, + 41,5,114,101,0,0,0,114,120,0,0,0,114,95,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,154,0,0,0,131, + 2,0,0,115,8,0,0,0,0,3,18,1,16,1,14,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,2,0,0,0,1,0,0,0,67,0,0,0,115, + 4,0,0,0,100,1,83,0,41,2,122,42,85,115,101,32, + 100,101,102,97,117,108,116,32,115,101,109,97,110,116,105,99, + 115,32,102,111,114,32,109,111,100,117,108,101,32,99,114,101, + 97,116,105,111,110,46,78,114,4,0,0,0,41,2,114,101, + 0,0,0,114,159,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,13,99,114,101,97,116,101,95, + 109,111,100,117,108,101,139,2,0,0,115,0,0,0,0,122, + 27,95,76,111,97,100,101,114,66,97,115,105,99,115,46,99, + 114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,0, + 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, + 0,115,56,0,0,0,124,0,106,0,124,1,106,1,131,1, + 125,2,124,2,100,1,107,8,114,36,116,2,100,2,106,3, + 124,1,106,1,131,1,131,1,130,1,116,4,106,5,116,6, + 124,2,124,1,106,7,131,3,1,0,100,1,83,0,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,8,218,8, + 103,101,116,95,99,111,100,101,114,106,0,0,0,114,100,0, + 0,0,114,48,0,0,0,114,115,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,218,4,101,120,101,99,114,112,0, + 0,0,41,3,114,101,0,0,0,218,6,109,111,100,117,108, + 101,114,141,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,11,101,120,101,99,95,109,111,100,117, + 108,101,142,2,0,0,115,10,0,0,0,0,2,12,1,8, + 1,6,1,10,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, + 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, + 0,67,0,0,0,115,12,0,0,0,116,0,106,1,124,0, + 124,1,131,2,83,0,41,1,122,26,84,104,105,115,32,109, + 111,100,117,108,101,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,41,2,114,115,0,0,0,218,17,95,108,111, + 97,100,95,109,111,100,117,108,101,95,115,104,105,109,41,2, + 114,101,0,0,0,114,120,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,11,108,111,97,100,95, + 109,111,100,117,108,101,150,2,0,0,115,2,0,0,0,0, + 2,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115, + 46,108,111,97,100,95,109,111,100,117,108,101,78,41,8,114, + 106,0,0,0,114,105,0,0,0,114,107,0,0,0,114,108, + 0,0,0,114,154,0,0,0,114,181,0,0,0,114,186,0, + 0,0,114,188,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,179,0,0,0, + 126,2,0,0,115,10,0,0,0,8,3,4,2,8,8,8, + 3,8,8,114,179,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,64,0,0,0,115,74,0, + 0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,0, + 90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,0, + 90,5,100,7,100,8,132,0,90,6,100,9,100,10,132,0, + 90,7,100,18,100,12,156,1,100,13,100,14,132,2,90,8, + 100,15,100,16,132,0,90,9,100,17,83,0,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,8,0,0,0,116,0,130,1,100,1,83,0,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,101,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,157,2,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,14,0,0,0,100,1,124,0,106,0,124,1,131,1,105, + 1,83,0,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,127,0,0,0,41,1,114,191,0,0,0, + 41,2,114,101,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,165,2,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,12,0,0,0,124,0,106,0,124,2,124,3,131,2,83, + 0,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, - 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,133,0,0,0,41,1,114,196,0,0,0,41, - 2,114,108,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,170,2,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,108,0,0,0,114, - 90,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,183,2,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,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,78,114,4,0,0,0,41,3,114,108, - 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,198,0,0, - 0,193,2,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,106,0,0,0,78,41,5,114,157,0, - 0,0,218,8,103,101,116,95,100,97,116,97,114,40,0,0, - 0,114,107,0,0,0,114,155,0,0,0,41,5,114,108,0, - 0,0,114,126,0,0,0,114,35,0,0,0,114,153,0,0, - 0,218,3,101,120,99,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,200,2,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,34,0,0,0,116,0,0,106,1, - 0,116,2,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,189,0,0,0,218,12,100,111,110,116,95,105, - 110,104,101,114,105,116,84,114,68,0,0,0,41,3,114,121, - 0,0,0,114,188,0,0,0,218,7,99,111,109,112,105,108, - 101,41,4,114,108,0,0,0,114,53,0,0,0,114,35,0, - 0,0,114,203,0,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,210,2,0,0,115,4,0,0,0,0, - 5,21,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,43,0,0, - 0,67,0,0,0,115,174,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,170,1,124,4,0,100,1, - 0,107,9,0,114,170,1,124,3,0,100,1,0,107,9,0, - 114,170,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,110, - 18,0,4,116,2,0,107,10,0,114,169,1,1,1,1,89, - 110,1,0,88,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, + 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,101,0,0,0,114,91,0,0, + 0,90,10,99,97,99,104,101,95,112,97,116,104,114,54,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,178,2,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,83,0,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,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,78,114,4,0,0,0,41,3,114,101,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,193,0,0,0,188,2, + 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,84,0,0,0,124,0,106,0,124,1,131,1, + 125,2,121,14,124,0,106,1,124,2,131,1,125,3,87,0, + 110,50,4,0,116,2,107,10,114,74,1,0,125,4,1,0, + 122,22,116,3,100,1,100,2,124,1,144,1,131,1,124,4, + 130,2,87,0,89,0,100,3,100,3,125,4,126,4,88,0, + 110,2,88,0,116,4,124,3,131,1,83,0,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,99,0, + 0,0,78,41,5,114,152,0,0,0,218,8,103,101,116,95, + 100,97,116,97,114,40,0,0,0,114,100,0,0,0,114,150, + 0,0,0,41,5,114,101,0,0,0,114,120,0,0,0,114, + 35,0,0,0,114,148,0,0,0,218,3,101,120,99,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,195,2,0,0,115,14,0, + 0,0,0,2,10,1,2,1,14,1,16,1,6,1,28,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,114,29,0,0,0,41,1, + 218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,0, + 1,0,0,0,4,0,0,0,9,0,0,0,67,0,0,0, + 115,26,0,0,0,116,0,106,1,116,2,124,1,124,2,100, + 1,100,2,100,3,100,4,124,3,144,2,131,4,83,0,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,184,0,0,0,218,12,100,111,110,116, + 95,105,110,104,101,114,105,116,84,114,69,0,0,0,41,3, + 114,115,0,0,0,114,183,0,0,0,218,7,99,111,109,112, + 105,108,101,41,4,114,101,0,0,0,114,54,0,0,0,114, + 35,0,0,0,114,198,0,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,205,2,0,0,115,4,0,0, + 0,0,5,14,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,43, + 0,0,0,67,0,0,0,115,106,1,0,0,124,0,106,0, + 124,1,131,1,125,2,100,1,125,3,121,12,116,1,124,2, + 131,1,125,4,87,0,110,24,4,0,116,2,107,10,114,50, + 1,0,1,0,1,0,100,1,125,4,89,0,110,174,88,0, + 121,14,124,0,106,3,124,2,131,1,125,5,87,0,110,20, + 4,0,116,4,107,10,114,86,1,0,1,0,1,0,89,0, + 110,138,88,0,116,5,124,5,100,2,25,0,131,1,125,3, + 121,14,124,0,106,6,124,4,131,1,125,6,87,0,110,20, + 4,0,116,7,107,10,114,134,1,0,1,0,1,0,89,0, + 110,90,88,0,121,26,116,8,124,6,100,3,124,5,100,4, + 124,1,100,5,124,4,144,3,131,1,125,7,87,0,110,24, + 4,0,116,9,116,10,102,2,107,10,114,186,1,0,1,0, + 1,0,89,0,110,38,88,0,116,11,106,12,100,6,124,4, + 124,2,131,3,1,0,116,13,124,7,100,4,124,1,100,7, + 124,4,100,8,124,2,144,3,131,1,83,0,124,0,106,6, + 124,2,131,1,125,8,124,0,106,14,124,8,124,2,131,2, + 125,9,116,11,106,12,100,9,124,2,131,2,1,0,116,15, + 106,16,12,0,144,1,114,102,124,4,100,1,107,9,144,1, + 114,102,124,3,100,1,107,9,144,1,114,102,116,17,124,9, + 124,3,116,18,124,8,131,1,131,3,125,6,121,30,124,0, + 106,19,124,2,124,4,124,6,131,3,1,0,116,11,106,12, + 100,10,124,4,131,2,1,0,87,0,110,22,4,0,116,2, + 107,10,144,1,114,100,1,0,1,0,1,0,89,0,110,2, + 88,0,124,9,83,0,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, - 10,10,32,32,32,32,32,32,32,32,78,114,133,0,0,0, - 114,138,0,0,0,114,106,0,0,0,114,35,0,0,0,122, - 13,123,125,32,109,97,116,99,104,101,115,32,123,125,114,89, - 0,0,0,114,90,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,157,0,0,0, - 114,79,0,0,0,114,66,0,0,0,114,197,0,0,0,114, - 195,0,0,0,114,14,0,0,0,114,200,0,0,0,114,40, - 0,0,0,114,141,0,0,0,114,107,0,0,0,114,136,0, - 0,0,114,105,0,0,0,114,147,0,0,0,114,206,0,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,150,0,0,0, - 114,31,0,0,0,114,199,0,0,0,41,10,114,108,0,0, - 0,114,126,0,0,0,114,90,0,0,0,114,139,0,0,0, - 114,89,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,153,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,187,0,0,0, - 218,2,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,5,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, - 87,0,0,0,41,10,114,112,0,0,0,114,111,0,0,0, - 114,113,0,0,0,114,196,0,0,0,114,197,0,0,0,114, - 199,0,0,0,114,198,0,0,0,114,202,0,0,0,114,206, - 0,0,0,114,187,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,194,0,0, - 0,160,2,0,0,115,14,0,0,0,12,2,12,8,12,13, - 12,10,12,7,12,10,18,8,114,194,0,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,106,0,0,0,114,35,0,0,0,41,3,114,108,0,0, - 0,114,126,0,0,0,114,35,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,185,0,0,0,19, - 3,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,2,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,218,9,95,95,99,108,97,115,115,95,95,114,118,0, - 0,0,41,2,114,108,0,0,0,218,5,111,116,104,101,114, + 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,127,0,0,0,114,133, + 0,0,0,114,99,0,0,0,114,35,0,0,0,122,13,123, + 125,32,109,97,116,99,104,101,115,32,123,125,114,90,0,0, + 0,114,91,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,20,114,152,0,0,0,114,80, + 0,0,0,114,67,0,0,0,114,192,0,0,0,114,190,0, + 0,0,114,14,0,0,0,114,195,0,0,0,114,40,0,0, + 0,114,136,0,0,0,114,100,0,0,0,114,131,0,0,0, + 114,115,0,0,0,114,130,0,0,0,114,142,0,0,0,114, + 201,0,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,145, + 0,0,0,114,31,0,0,0,114,194,0,0,0,41,10,114, + 101,0,0,0,114,120,0,0,0,114,91,0,0,0,114,134, + 0,0,0,114,90,0,0,0,218,2,115,116,114,54,0,0, + 0,218,10,98,121,116,101,115,95,100,97,116,97,114,148,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,182, + 0,0,0,213,2,0,0,115,78,0,0,0,0,7,10,1, + 4,1,2,1,12,1,14,1,10,2,2,1,14,1,14,1, + 6,2,12,1,2,1,14,1,14,1,6,2,2,1,6,1, + 8,1,12,1,18,1,6,2,8,1,6,1,10,1,4,1, + 8,1,10,1,12,1,12,1,20,1,10,1,6,1,10,1, + 2,1,14,1,16,1,16,1,6,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,88,0,0,0,41,10,114,106,0,0,0,114,105, + 0,0,0,114,107,0,0,0,114,191,0,0,0,114,192,0, + 0,0,114,194,0,0,0,114,193,0,0,0,114,197,0,0, + 0,114,201,0,0,0,114,182,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 189,0,0,0,155,2,0,0,115,14,0,0,0,8,2,8, + 8,8,13,8,10,8,7,8,10,14,8,114,189,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,0,0,0,0,115,76,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, + 100,5,132,0,90,5,100,6,100,7,132,0,90,6,101,7, + 135,0,102,1,100,8,100,9,132,8,131,1,90,8,101,7, + 100,10,100,11,132,0,131,1,90,9,100,12,100,13,132,0, + 90,10,135,0,83,0,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,16,0,0,0,124,1,124,0,95,0,124,2,124, + 0,95,1,100,1,83,0,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,99,0,0,0,114,35, + 0,0,0,41,3,114,101,0,0,0,114,120,0,0,0,114, + 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,180,0,0,0,14,3,0,0,115,4,0,0, + 0,0,3,6,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,2,0,0,0,67,0,0,0,115, + 24,0,0,0,124,0,106,0,124,1,106,0,107,2,111,22, + 124,0,106,1,124,1,106,1,107,2,83,0,41,1,78,41, + 2,218,9,95,95,99,108,97,115,115,95,95,114,112,0,0, + 0,41,2,114,101,0,0,0,218,5,111,116,104,101,114,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,6, + 95,95,101,113,95,95,20,3,0,0,115,4,0,0,0,0, + 1,12,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,20,0,0,0, + 116,0,124,0,106,1,131,1,116,0,124,0,106,2,131,1, + 65,0,83,0,41,1,78,41,3,218,4,104,97,115,104,114, + 99,0,0,0,114,35,0,0,0,41,1,114,101,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 6,95,95,101,113,95,95,25,3,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,106,0,0,0,114,35,0,0,0, - 41,1,114,108,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, - 29,3,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,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,210,0,0,0,114,193,0,0,0,41,2,114,108,0, - 0,0,114,126,0,0,0,41,1,114,211,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,193,0,0,0,32,3,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, + 8,95,95,104,97,115,104,95,95,24,3,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,16, + 0,0,0,116,0,116,1,124,0,131,2,106,2,124,1,131, + 1,83,0,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,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,205,0,0,0,114,188,0,0,0,41,2, + 114,101,0,0,0,114,120,0,0,0,41,1,114,206,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,188,0,0,0, + 27,3,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,6,0,0,0,124,0,106, + 0,83,0,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,101,0,0,0,114, + 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,152,0,0,0,39,3,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,9,0,0,0,67,0,0, + 0,115,32,0,0,0,116,0,106,1,124,1,100,1,131,2, + 143,10,125,2,124,2,106,2,131,0,83,0,81,0,82,0, + 88,0,100,2,83,0,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,50,0,0,0,114,51,0,0, + 0,90,4,114,101,97,100,41,3,114,101,0,0,0,114,35, + 0,0,0,114,55,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,195,0,0,0,44,3,0,0, + 115,4,0,0,0,0,2,14,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,106,0,0,0,114,105,0,0,0,114,107,0,0,0,114, + 108,0,0,0,114,180,0,0,0,114,208,0,0,0,114,210, + 0,0,0,114,117,0,0,0,114,188,0,0,0,114,152,0, + 0,0,114,195,0,0,0,114,4,0,0,0,114,4,0,0, + 0,41,1,114,206,0,0,0,114,5,0,0,0,114,205,0, + 0,0,9,3,0,0,115,14,0,0,0,8,3,4,2,8, + 6,8,4,8,3,16,12,12,5,114,205,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, + 0,0,0,115,46,0,0,0,101,0,90,1,100,0,90,2, + 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5, + 132,0,90,5,100,6,100,7,156,1,100,8,100,9,132,2, + 90,6,100,10,83,0,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, + 22,0,0,0,116,0,124,1,131,1,125,2,124,2,106,1, + 124,2,106,2,100,1,156,2,83,0,41,2,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,41, + 2,122,5,109,116,105,109,101,122,4,115,105,122,101,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,101,0,0,0,114, + 35,0,0,0,114,203,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,192,0,0,0,54,3,0, + 0,115,4,0,0,0,0,2,8,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,26,0,0, + 0,116,0,124,1,131,1,125,4,124,0,106,1,124,2,124, + 3,100,1,124,4,144,1,131,2,83,0,41,2,78,218,5, + 95,109,111,100,101,41,2,114,98,0,0,0,114,193,0,0, + 0,41,5,114,101,0,0,0,114,91,0,0,0,114,90,0, + 0,0,114,54,0,0,0,114,42,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,194,0,0,0, + 59,3,0,0,115,4,0,0,0,0,2,8,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,105, + 182,1,0,0,41,1,114,215,0,0,0,99,3,0,0,0, + 1,0,0,0,9,0,0,0,17,0,0,0,67,0,0,0, + 115,250,0,0,0,116,0,124,1,131,1,92,2,125,4,125, + 5,103,0,125,6,120,40,124,4,114,56,116,1,124,4,131, + 1,12,0,114,56,116,0,124,4,131,1,92,2,125,4,125, + 7,124,6,106,2,124,7,131,1,1,0,113,18,87,0,120, + 108,116,3,124,6,131,1,68,0,93,96,125,7,116,4,124, + 4,124,7,131,2,125,4,121,14,116,5,106,6,124,4,131, + 1,1,0,87,0,113,68,4,0,116,7,107,10,114,118,1, + 0,1,0,1,0,119,68,89,0,113,68,4,0,116,8,107, + 10,114,162,1,0,125,8,1,0,122,18,116,9,106,10,100, + 1,124,4,124,8,131,3,1,0,100,2,83,0,100,2,125, + 8,126,8,88,0,113,68,88,0,113,68,87,0,121,28,116, + 11,124,1,124,2,124,3,131,3,1,0,116,9,106,10,100, + 3,124,1,131,2,1,0,87,0,110,48,4,0,116,8,107, + 10,114,244,1,0,125,8,1,0,122,20,116,9,106,10,100, + 1,124,1,124,8,131,3,1,0,87,0,89,0,100,2,100, + 2,125,8,126,8,88,0,110,2,88,0,100,2,83,0,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,12,114,38,0,0, + 0,114,46,0,0,0,114,158,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,115,0,0,0,114,130,0,0, + 0,114,56,0,0,0,41,9,114,101,0,0,0,114,35,0, + 0,0,114,54,0,0,0,114,215,0,0,0,218,6,112,97, + 114,101,110,116,114,95,0,0,0,114,27,0,0,0,114,23, + 0,0,0,114,196,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,193,0,0,0,64,3,0,0, + 115,42,0,0,0,0,2,12,1,4,2,16,1,12,1,14, + 2,14,1,10,1,2,1,14,1,14,2,6,1,16,3,6, + 1,8,1,20,1,2,1,12,1,16,1,16,2,8,1,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,106,0, + 0,0,114,105,0,0,0,114,107,0,0,0,114,108,0,0, + 0,114,192,0,0,0,114,194,0,0,0,114,193,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,213,0,0,0,50,3,0,0,115,8,0, + 0,0,8,2,4,2,8,5,8,5,114,213,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,32,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,100,6,83,0,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,56,0,0,0,124,0,106,0,124,1, + 131,1,125,2,124,0,106,1,124,2,131,1,125,3,116,2, + 124,3,100,1,124,1,100,2,124,2,144,2,131,1,125,4, + 116,3,124,4,100,1,124,1,100,3,124,2,144,2,131,1, + 83,0,41,4,78,114,99,0,0,0,114,35,0,0,0,114, + 90,0,0,0,41,4,114,152,0,0,0,114,195,0,0,0, + 114,136,0,0,0,114,142,0,0,0,41,5,114,101,0,0, + 0,114,120,0,0,0,114,35,0,0,0,114,54,0,0,0, + 114,204,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,182,0,0,0,99,3,0,0,115,8,0, + 0,0,0,1,10,1,10,1,18,1,122,29,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,83,0,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,101,0,0,0,114, + 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,197,0,0,0,105,3,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,106,0,0,0,114,105,0,0, + 0,114,107,0,0,0,114,108,0,0,0,114,182,0,0,0, + 114,197,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,218,0,0,0,95,3, + 0,0,115,6,0,0,0,8,2,4,2,8,6,114,218,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,64,0,0,0,115,92,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,100,6,100,7,132,0,90,6, + 100,8,100,9,132,0,90,7,100,10,100,11,132,0,90,8, + 100,12,100,13,132,0,90,9,100,14,100,15,132,0,90,10, + 100,16,100,17,132,0,90,11,101,12,100,18,100,19,132,0, + 131,1,90,13,100,20,83,0,41,21,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,16,0,0,0,124,1,124,0,95,0,124,2, + 124,0,95,1,100,0,83,0,41,1,78,41,2,114,99,0, + 0,0,114,35,0,0,0,41,3,114,101,0,0,0,114,99, + 0,0,0,114,35,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,180,0,0,0,122,3,0,0, + 115,4,0,0,0,0,1,6,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,2,0,0,0,67,0,0,0,115,24,0,0, + 0,124,0,106,0,124,1,106,0,107,2,111,22,124,0,106, + 1,124,1,106,1,107,2,83,0,41,1,78,41,2,114,206, + 0,0,0,114,112,0,0,0,41,2,114,101,0,0,0,114, + 207,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,208,0,0,0,126,3,0,0,115,4,0,0, + 0,0,1,12,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,20,0,0,0,116,0,124,0,106, + 1,131,1,116,0,124,0,106,2,131,1,65,0,83,0,41, + 1,78,41,3,114,209,0,0,0,114,99,0,0,0,114,35, + 0,0,0,41,1,114,101,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,210,0,0,0,130,3, + 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, + 3,0,0,0,4,0,0,0,67,0,0,0,115,36,0,0, + 0,116,0,106,1,116,2,106,3,124,1,131,2,125,2,116, + 0,106,4,100,1,124,1,106,5,124,0,106,6,131,3,1, + 0,124,2,83,0,41,2,122,38,67,114,101,97,116,101,32, + 97,110,32,117,110,105,116,105,97,108,105,122,101,100,32,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,122, + 38,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,123,33,114,125,32,108,111,97,100,101,100,32,102,114, + 111,109,32,123,33,114,125,41,7,114,115,0,0,0,114,183, + 0,0,0,114,140,0,0,0,90,14,99,114,101,97,116,101, + 95,100,121,110,97,109,105,99,114,130,0,0,0,114,99,0, + 0,0,114,35,0,0,0,41,3,114,101,0,0,0,114,159, + 0,0,0,114,185,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,181,0,0,0,133,3,0,0, + 115,10,0,0,0,0,2,4,1,10,1,6,1,12,1,122, + 33,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,99,114,101,97,116,101,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,67,0,0,0,115,36,0,0,0,116,0,106,1, + 116,2,106,3,124,1,131,2,1,0,116,0,106,4,100,1, + 124,0,106,5,124,0,106,6,131,3,1,0,100,2,83,0, + 41,3,122,30,73,110,105,116,105,97,108,105,122,101,32,97, + 110,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,122,40,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,32,123,33,114,125,32,101,120,101,99,117,116, + 101,100,32,102,114,111,109,32,123,33,114,125,78,41,7,114, + 115,0,0,0,114,183,0,0,0,114,140,0,0,0,90,12, + 101,120,101,99,95,100,121,110,97,109,105,99,114,130,0,0, + 0,114,99,0,0,0,114,35,0,0,0,41,2,114,101,0, + 0,0,114,185,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,186,0,0,0,141,3,0,0,115, + 6,0,0,0,0,2,14,1,6,1,122,31,69,120,116,101, + 110,115,105,111,110,70,105,108,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,4,0,0,0,3,0,0,0, + 115,36,0,0,0,116,0,124,0,106,1,131,1,100,1,25, + 0,137,0,116,2,135,0,102,1,100,2,100,3,132,8,116, + 3,68,0,131,1,131,1,83,0,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,26,0,0,0,124,0,93, + 18,125,1,136,0,100,0,124,1,23,0,107,2,86,0,1, + 0,113,2,100,1,83,0,41,2,114,180,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,250,9,60,103,101,110, + 101,120,112,114,62,150,3,0,0,115,2,0,0,0,4,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,218, + 3,97,110,121,218,18,69,88,84,69,78,83,73,79,78,95, + 83,85,70,70,73,88,69,83,41,2,114,101,0,0,0,114, + 120,0,0,0,114,4,0,0,0,41,1,114,221,0,0,0, + 114,5,0,0,0,114,154,0,0,0,147,3,0,0,115,6, + 0,0,0,0,2,14,1,12,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,83,0,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,114,4,0,0,0, + 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,182,0,0,0, + 153,3,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,83,0,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,101,0,0,0,114,120,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,197,0,0,0,157,3,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,6,0,0,0,124,0,106,0,83, + 0,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,108,0,0,0,114,126,0, + 1,114,35,0,0,0,41,2,114,101,0,0,0,114,120,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,157,0,0,0,44,3,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,9,0,0,0,67,0,0,0,115, - 42,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,82,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,108,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, - 200,0,0,0,49,3,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,112,0,0,0,114,111,0, - 0,0,114,113,0,0,0,114,114,0,0,0,114,185,0,0, - 0,114,213,0,0,0,114,215,0,0,0,114,123,0,0,0, - 114,193,0,0,0,114,157,0,0,0,114,200,0,0,0,114, - 4,0,0,0,114,4,0,0,0,41,1,114,211,0,0,0, - 114,5,0,0,0,114,210,0,0,0,14,3,0,0,115,14, - 0,0,0,12,3,6,2,12,6,12,4,12,3,24,12,18, - 5,114,210,0,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,4,0,0,0,67,0,0,0,115,34,0,0,0,116,0, - 0,124,1,0,131,1,0,125,2,0,100,1,0,124,2,0, - 106,1,0,100,2,0,124,2,0,106,2,0,105,2,0,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,133,0,0,0,114,134,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,108,0,0,0, - 114,35,0,0,0,114,208,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,197,0,0,0,59,3, - 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,97,0,0,0,114,198,0,0,0,41,5,114,108,0,0, - 0,114,90,0,0,0,114,89,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,199,0,0,0,64,3,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,220,0,0,0,105,182,1, - 0,0,99,3,0,0,0,1,0,0,0,9,0,0,0,17, - 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,163,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,105,0,0,0,114,55, - 0,0,0,41,9,114,108,0,0,0,114,35,0,0,0,114, - 53,0,0,0,114,220,0,0,0,218,6,112,97,114,101,110, - 116,114,94,0,0,0,114,27,0,0,0,114,23,0,0,0, - 114,201,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,198,0,0,0,69,3,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,112,0,0,0,114,111,0,0,0, - 114,113,0,0,0,114,114,0,0,0,114,197,0,0,0,114, - 199,0,0,0,114,198,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,218,0, - 0,0,55,3,0,0,115,8,0,0,0,12,2,6,2,12, - 5,12,5,114,218,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,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,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,106,0,0,0,114,35,0,0,0,114,89,0,0,0,41, - 4,114,157,0,0,0,114,200,0,0,0,114,141,0,0,0, - 114,147,0,0,0,41,5,114,108,0,0,0,114,126,0,0, - 0,114,35,0,0,0,114,53,0,0,0,114,209,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 187,0,0,0,102,3,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,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,108,0,0,0,114,126,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,202, - 0,0,0,108,3,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,112,0,0,0,114,111,0,0,0,114,113,0,0, - 0,114,114,0,0,0,114,187,0,0,0,114,202,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,223,0,0,0,98,3,0,0,115,6,0, - 0,0,12,2,6,2,12,6,114,223,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0, - 0,0,115,136,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,101,12,0,100,18,0,100, - 19,0,132,0,0,131,1,0,90,13,0,100,20,0,83,41, - 21,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,106,0,0,0,114, - 35,0,0,0,41,3,114,108,0,0,0,114,106,0,0,0, - 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,185,0,0,0,125,3,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,2,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,211,0,0,0,114,118,0,0,0,41, - 2,114,108,0,0,0,114,212,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,213,0,0,0,129, - 3,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,214,0,0,0,114,106,0,0,0,114,35,0,0,0, - 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,215,0,0,0,133,3,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,3,0,0, - 0,4,0,0,0,67,0,0,0,115,47,0,0,0,116,0, - 0,106,1,0,116,2,0,106,3,0,124,1,0,131,2,0, - 125,2,0,116,4,0,100,1,0,124,1,0,106,5,0,124, - 0,0,106,6,0,131,3,0,1,124,2,0,83,41,2,122, - 38,67,114,101,97,116,101,32,97,110,32,117,110,105,116,105, - 97,108,105,122,101,100,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,122,38,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,108, - 111,97,100,101,100,32,102,114,111,109,32,123,33,114,125,41, - 7,114,121,0,0,0,114,188,0,0,0,114,145,0,0,0, - 90,14,99,114,101,97,116,101,95,100,121,110,97,109,105,99, - 114,105,0,0,0,114,106,0,0,0,114,35,0,0,0,41, - 3,114,108,0,0,0,114,164,0,0,0,114,190,0,0,0, + 0,114,152,0,0,0,161,3,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,14,114,106,0,0,0,114,105,0,0,0, + 114,107,0,0,0,114,108,0,0,0,114,180,0,0,0,114, + 208,0,0,0,114,210,0,0,0,114,181,0,0,0,114,186, + 0,0,0,114,154,0,0,0,114,182,0,0,0,114,197,0, + 0,0,114,117,0,0,0,114,152,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,219,0,0,0,114,3,0,0,115,20,0,0,0,8,6, + 4,2,8,4,8,4,8,3,8,8,8,6,8,6,8,4, + 8,4,114,219,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,96,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,100, + 11,132,0,90,8,100,12,100,13,132,0,90,9,100,14,100, + 15,132,0,90,10,100,16,100,17,132,0,90,11,100,18,100, + 19,132,0,90,12,100,20,100,21,132,0,90,13,100,22,83, + 0,41,23,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,36,0,0,0,124,1,124,0,95,0,124,2, + 124,0,95,1,116,2,124,0,106,3,131,0,131,1,124,0, + 95,4,124,3,124,0,95,5,100,0,83,0,41,1,78,41, + 6,218,5,95,110,97,109,101,218,5,95,112,97,116,104,114, + 94,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,101,0,0,0,114,99, + 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,180,0,0,0,174,3,0,0,115,8,0, + 0,0,0,1,6,1,6,1,14,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,38,0,0,0,124,0,106, + 0,106,1,100,1,131,1,92,3,125,1,125,2,125,3,124, + 2,100,2,107,2,114,30,100,6,83,0,124,1,100,5,102, + 2,83,0,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,59,0,0,0,114,30,0,0,0,114, + 7,0,0,0,114,35,0,0,0,90,8,95,95,112,97,116, + 104,95,95,41,2,122,3,115,121,115,122,4,112,97,116,104, + 41,2,114,226,0,0,0,114,32,0,0,0,41,4,114,101, + 0,0,0,114,217,0,0,0,218,3,100,111,116,90,2,109, + 101,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,180,3,0,0,115,8,0, + 0,0,0,2,18,1,8,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,28,0,0,0,124,0,106,0, + 131,0,92,2,125,1,125,2,116,1,116,2,106,3,124,1, + 25,0,124,2,131,2,83,0,41,1,78,41,4,114,233,0, + 0,0,114,111,0,0,0,114,7,0,0,0,218,7,109,111, + 100,117,108,101,115,41,3,114,101,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, - 186,0,0,0,136,3,0,0,115,10,0,0,0,0,2,6, - 1,15,1,6,1,16,1,122,33,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,99,114,101, - 97,116,101,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, - 45,0,0,0,116,0,0,106,1,0,116,2,0,106,3,0, - 124,1,0,131,2,0,1,116,4,0,100,1,0,124,0,0, - 106,5,0,124,0,0,106,6,0,131,3,0,1,100,2,0, - 83,41,3,122,30,73,110,105,116,105,97,108,105,122,101,32, - 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,122,40,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,32,123,33,114,125,32,101,120,101,99,117, - 116,101,100,32,102,114,111,109,32,123,33,114,125,78,41,7, - 114,121,0,0,0,114,188,0,0,0,114,145,0,0,0,90, - 12,101,120,101,99,95,100,121,110,97,109,105,99,114,105,0, - 0,0,114,106,0,0,0,114,35,0,0,0,41,2,114,108, - 0,0,0,114,190,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,191,0,0,0,144,3,0,0, - 115,6,0,0,0,0,2,19,1,6,1,122,31,69,120,116, - 101,110,115,105,111,110,70,105,108,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,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,185,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,250,9,60,103, - 101,110,101,120,112,114,62,153,3,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,218,3,97,110,121,218,18,69,88,84,69,78,83,73,79, - 78,95,83,85,70,70,73,88,69,83,41,2,114,108,0,0, - 0,114,126,0,0,0,114,4,0,0,0,41,1,114,226,0, - 0,0,114,5,0,0,0,114,159,0,0,0,150,3,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,114,4,0, - 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,187,0, - 0,0,156,3,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,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,108,0,0,0,114, - 126,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,202,0,0,0,160,3,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,108,0,0,0, - 114,126,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,157,0,0,0,164,3,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,14,114,112,0,0,0,114,111, - 0,0,0,114,113,0,0,0,114,114,0,0,0,114,185,0, - 0,0,114,213,0,0,0,114,215,0,0,0,114,186,0,0, - 0,114,191,0,0,0,114,159,0,0,0,114,187,0,0,0, - 114,202,0,0,0,114,123,0,0,0,114,157,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,224,0,0,0,117,3,0,0,115,20,0,0, - 0,12,6,6,2,12,4,12,4,12,3,12,8,12,6,12, - 6,12,4,12,4,114,224,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, - 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,218,5,95,110,97,109,101,218,5,95, - 112,97,116,104,114,93,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,108, - 0,0,0,114,106,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,185,0,0,0,177,3, - 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,58,0,0,0,114,30, - 0,0,0,114,7,0,0,0,114,35,0,0,0,90,8,95, - 95,112,97,116,104,95,95,41,2,122,3,115,121,115,122,4, - 112,97,116,104,41,2,114,231,0,0,0,114,32,0,0,0, - 41,4,114,108,0,0,0,114,222,0,0,0,218,3,100,111, - 116,90,2,109,101,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,183,3,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,238,0,0,0, - 114,117,0,0,0,114,7,0,0,0,218,7,109,111,100,117, - 108,101,115,41,3,114,108,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,233,0, - 0,0,193,3,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,118,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,111,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,102,0,124,2,0,106, - 5,0,100,0,0,107,8,0,114,102,0,124,2,0,106,6, - 0,114,102,0,124,2,0,106,6,0,124,0,0,95,7,0, - 124,1,0,124,0,0,95,2,0,124,0,0,106,7,0,83, - 41,1,78,41,8,114,93,0,0,0,114,233,0,0,0,114, - 234,0,0,0,114,235,0,0,0,114,231,0,0,0,114,127, - 0,0,0,114,156,0,0,0,114,232,0,0,0,41,3,114, - 108,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116, - 104,114,164,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,197,3,0,0,115,16,0,0,0,0,2,18,1, - 15,1,21,3,27,1,9,1,12,1,9,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,240, - 0,0,0,41,1,114,108,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,210,3,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,41,1,78,41,2,114,31,0,0,0,114,240,0,0,0, - 41,1,114,108,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,213, - 3,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,232,0,0, - 0,41,1,114,108,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,216,3,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,240,0,0,0,41,2,114,108,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,219,3,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,232, - 0,0,0,114,163,0,0,0,41,2,114,108,0,0,0,114, - 245,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,163,0,0,0,222,3,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,112,0, - 0,0,114,111,0,0,0,114,113,0,0,0,114,114,0,0, - 0,114,185,0,0,0,114,238,0,0,0,114,233,0,0,0, - 114,240,0,0,0,114,242,0,0,0,114,243,0,0,0,114, - 244,0,0,0,114,246,0,0,0,114,163,0,0,0,114,4, + 228,0,0,0,190,3,0,0,115,4,0,0,0,0,1,12, + 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,80,0,0,0,116,0,124,0, + 106,1,131,0,131,1,125,1,124,1,124,0,106,2,107,3, + 114,74,124,0,106,3,124,0,106,4,124,1,131,2,125,2, + 124,2,100,0,107,9,114,68,124,2,106,5,100,0,107,8, + 114,68,124,2,106,6,114,68,124,2,106,6,124,0,95,7, + 124,1,124,0,95,2,124,0,106,7,83,0,41,1,78,41, + 8,114,94,0,0,0,114,228,0,0,0,114,229,0,0,0, + 114,230,0,0,0,114,226,0,0,0,114,121,0,0,0,114, + 151,0,0,0,114,227,0,0,0,41,3,114,101,0,0,0, + 90,11,112,97,114,101,110,116,95,112,97,116,104,114,159,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,194, + 3,0,0,115,16,0,0,0,0,2,12,1,10,1,14,3, + 18,1,6,1,8,1,6,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,12,0,0,0,116, + 0,124,0,106,1,131,0,131,1,83,0,41,1,78,41,2, + 218,4,105,116,101,114,114,235,0,0,0,41,1,114,101,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,207,3,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, + 3,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 67,0,0,0,115,14,0,0,0,124,2,124,0,106,0,124, + 1,60,0,100,0,83,0,41,1,78,41,1,114,227,0,0, + 0,41,3,114,101,0,0,0,218,5,105,110,100,101,120,114, + 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,11,95,95,115,101,116,105,116,101,109,95,95, + 210,3,0,0,115,2,0,0,0,0,1,122,26,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,115,101, + 116,105,116,101,109,95,95,99,1,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, + 0,116,0,124,0,106,1,131,0,131,1,83,0,41,1,78, + 41,2,114,31,0,0,0,114,235,0,0,0,41,1,114,101, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,230,0,0,0,170,3,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,230,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,118, - 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,100,16,0,132, - 0,0,90,11,0,100,17,0,83,41,18,218,16,95,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, - 41,1,78,41,2,114,230,0,0,0,114,232,0,0,0,41, - 4,114,108,0,0,0,114,106,0,0,0,114,35,0,0,0, - 114,236,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,185,0,0,0,228,3,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,95,95,105,110,105,116,95,95,99, + 0,0,218,7,95,95,108,101,110,95,95,213,3,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,12,0,0,0,100,1,106,0,124,0,106,1, + 131,1,83,0,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, + 48,0,0,0,114,227,0,0,0,41,1,114,101,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,216,3,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,12,0,0,0,124,1,124,0,106,0,131,0,107, + 6,83,0,41,1,78,41,1,114,235,0,0,0,41,2,114, + 101,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,219,3,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,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,112,0,0,0,41,2,114,170,0,0,0,114,190, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,11,109,111,100,117,108,101,95,114,101,112,114,231, - 3,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,108,0,0,0,114,126,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,159,0,0,0,240, - 3,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,108,0,0,0,114,126,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,202,0, - 0,0,243,3,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,189,0,0, - 0,114,204,0,0,0,84,41,1,114,205,0,0,0,41,2, - 114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,187,0,0,0,246,3, - 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,1, - 0,83,41,2,122,42,85,115,101,32,100,101,102,97,117,108, - 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, - 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, - 78,114,4,0,0,0,41,2,114,108,0,0,0,114,164,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,186,0,0,0,249,3,0,0,115,0,0,0,0,122, - 30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,46,99,114,101,97,116,101,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,0,0,83,41,1,78, - 114,4,0,0,0,41,2,114,108,0,0,0,114,190,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,191,0,0,0,252,3,0,0,115,2,0,0,0,0,1, + 67,0,0,0,115,16,0,0,0,124,0,106,0,106,1,124, + 1,131,1,1,0,100,0,83,0,41,1,78,41,2,114,227, + 0,0,0,114,158,0,0,0,41,2,114,101,0,0,0,114, + 242,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,158,0,0,0,222,3,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,14,114,106,0, + 0,0,114,105,0,0,0,114,107,0,0,0,114,108,0,0, + 0,114,180,0,0,0,114,233,0,0,0,114,228,0,0,0, + 114,235,0,0,0,114,237,0,0,0,114,239,0,0,0,114, + 240,0,0,0,114,241,0,0,0,114,243,0,0,0,114,158, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,225,0,0,0,167,3,0,0, + 115,22,0,0,0,8,5,4,2,8,6,8,10,8,4,8, + 13,8,3,8,3,8,3,8,3,8,3,114,225,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,64,0,0,0,115,80,0,0,0,101,0,90,1,100,0, + 90,2,100,1,100,2,132,0,90,3,101,4,100,3,100,4, + 132,0,131,1,90,5,100,5,100,6,132,0,90,6,100,7, + 100,8,132,0,90,7,100,9,100,10,132,0,90,8,100,11, + 100,12,132,0,90,9,100,13,100,14,132,0,90,10,100,15, + 100,16,132,0,90,11,100,17,83,0,41,18,218,16,95,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,18,0,0,0,116,0,124,1,124,2,124,3, + 131,3,124,0,95,1,100,0,83,0,41,1,78,41,2,114, + 225,0,0,0,114,227,0,0,0,41,4,114,101,0,0,0, + 114,99,0,0,0,114,35,0,0,0,114,231,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,180, + 0,0,0,228,3,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,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,12, + 0,0,0,100,1,106,0,124,1,106,1,131,1,83,0,41, + 2,122,115,82,101,116,117,114,110,32,114,101,112,114,32,102, + 111,114,32,116,104,101,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,32,32,32,32,84,104,101,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,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,48,0,0,0,114,106,0,0,0,41,2,114, + 165,0,0,0,114,185,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,11,109,111,100,117,108,101, + 95,114,101,112,114,231,3,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,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,32,0,0,0,116,0,0,100,1,0,124,0, - 0,106,1,0,131,2,0,1,116,2,0,106,3,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,4,114,105,0,0,0,114,232,0, - 0,0,114,121,0,0,0,114,192,0,0,0,41,2,114,108, - 0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,193,0,0,0,255,3,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,12,114,112,0,0,0,114, - 111,0,0,0,114,113,0,0,0,114,185,0,0,0,114,183, - 0,0,0,114,248,0,0,0,114,159,0,0,0,114,202,0, - 0,0,114,187,0,0,0,114,186,0,0,0,114,191,0,0, - 0,114,193,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,247,0,0,0,227, - 3,0,0,115,16,0,0,0,12,1,12,3,18,9,12,3, - 12,3,12,3,12,3,12,3,114,247,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,55,0,0,0,120, - 48,0,116,0,0,106,1,0,106,2,0,131,0,0,68,93, - 31,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,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, - 115,0,0,0,114,250,0,0,0,41,2,114,170,0,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,250,0,0,0,16,4,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,107, - 0,0,0,116,0,0,106,1,0,100,1,0,107,9,0,114, - 41,0,116,0,0,106,1,0,12,114,41,0,116,2,0,106, - 3,0,100,2,0,116,4,0,131,2,0,1,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,51,0,4,116,5, - 0,107,10,0,114,94,0,1,1,1,119,51,0,89,113,51, - 0,88,113,51,0,87,100,1,0,83,100,1,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,78,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,41,6,114, - 7,0,0,0,218,10,112,97,116,104,95,104,111,111,107,115, - 114,60,0,0,0,114,61,0,0,0,114,125,0,0,0,114, - 107,0,0,0,41,3,114,170,0,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,24,4,0,0,115,16,0,0,0,0,7,25,1,16, - 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, - 19,0,0,0,67,0,0,0,115,123,0,0,0,124,1,0, - 100,1,0,107,2,0,114,53,0,121,16,0,116,0,0,106, - 1,0,131,0,0,125,1,0,87,110,22,0,4,116,2,0, - 107,10,0,114,52,0,1,1,1,100,2,0,83,89,110,1, - 0,88,121,17,0,116,3,0,106,4,0,124,1,0,25,125, - 2,0,87,110,46,0,4,116,5,0,107,10,0,114,118,0, - 1,1,1,124,0,0,106,6,0,124,1,0,131,1,0,125, - 2,0,124,2,0,116,3,0,106,4,0,124,1,0,60,89, - 110,1,0,88,124,2,0,83,41,3,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,78,41,7,114,3,0,0,0,114,45,0,0,0, - 218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,114, - 114,111,114,114,7,0,0,0,114,251,0,0,0,114,137,0, - 0,0,114,255,0,0,0,41,3,114,170,0,0,0,114,35, - 0,0,0,114,253,0,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,41,4,0, - 0,115,22,0,0,0,0,8,12,1,3,1,16,1,13,3, - 9,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,119,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,103,0,0, - 125,4,0,124,3,0,100,0,0,107,9,0,114,88,0,116, - 3,0,106,4,0,124,1,0,124,3,0,131,2,0,83,116, - 3,0,106,5,0,124,1,0,100,0,0,131,2,0,125,5, - 0,124,4,0,124,5,0,95,6,0,124,5,0,83,41,2, - 78,114,124,0,0,0,41,7,114,115,0,0,0,114,124,0, - 0,0,114,182,0,0,0,114,121,0,0,0,114,179,0,0, - 0,114,160,0,0,0,114,156,0,0,0,41,6,114,170,0, - 0,0,114,126,0,0,0,114,253,0,0,0,114,127,0,0, - 0,114,128,0,0,0,114,164,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,63,4,0,0, - 115,18,0,0,0,0,4,15,1,24,2,15,1,6,1,12, - 1,16,1,18,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,243,0,0,0,103, - 0,0,125,4,0,120,230,0,124,2,0,68,93,191,0,125, - 5,0,116,0,0,124,5,0,116,1,0,116,2,0,102,2, - 0,131,2,0,115,43,0,113,13,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,106,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,139,0,113,13,0,124,7,0,106,7,0, - 100,1,0,107,9,0,114,158,0,124,7,0,83,124,7,0, - 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, - 191,0,116,9,0,100,3,0,131,1,0,130,1,0,124,4, - 0,106,10,0,124,8,0,131,1,0,1,113,13,0,87,116, - 11,0,106,12,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,78,114,181,0,0,0,122,19,115,112,101, - 99,32,109,105,115,115,105,110,103,32,108,111,97,100,101,114, - 41,13,114,143,0,0,0,114,69,0,0,0,218,5,98,121, - 116,101,115,114,1,1,0,0,114,115,0,0,0,114,181,0, - 0,0,114,2,1,0,0,114,127,0,0,0,114,156,0,0, - 0,114,107,0,0,0,114,149,0,0,0,114,121,0,0,0, - 114,160,0,0,0,41,9,114,170,0,0,0,114,126,0,0, - 0,114,35,0,0,0,114,180,0,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,253,0,0,0,114,164,0,0,0,114,128,0,0, + 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,83,0,41,2,78,84, + 114,4,0,0,0,41,2,114,101,0,0,0,114,120,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,78,4,0,0,115, - 40,0,0,0,0,5,6,1,13,1,21,1,3,1,15,1, - 12,1,15,1,21,2,18,1,12,1,3,1,15,1,4,1, - 9,1,12,1,12,5,17,2,18,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,140,0,0,0,124,2,0,100, - 1,0,107,8,0,114,21,0,116,0,0,106,1,0,125,2, - 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, - 58,0,100,1,0,83,124,4,0,106,3,0,100,1,0,107, - 8,0,114,132,0,124,4,0,106,4,0,125,5,0,124,5, - 0,114,125,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,5,1,0,0,114,127,0,0,0, - 114,156,0,0,0,114,158,0,0,0,114,230,0,0,0,41, - 6,114,170,0,0,0,114,126,0,0,0,114,35,0,0,0, - 114,180,0,0,0,114,164,0,0,0,114,4,1,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,181, - 0,0,0,110,4,0,0,115,26,0,0,0,0,4,12,1, - 9,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,181,0,0,0,114,127,0,0,0,41,4,114,170,0,0, - 0,114,126,0,0,0,114,35,0,0,0,114,164,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 182,0,0,0,132,4,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, - 112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,114, - 0,0,0,114,183,0,0,0,114,250,0,0,0,114,255,0, - 0,0,114,1,1,0,0,114,2,1,0,0,114,5,1,0, - 0,114,181,0,0,0,114,182,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 249,0,0,0,12,4,0,0,115,22,0,0,0,12,2,6, - 2,18,8,18,17,18,22,18,15,3,1,18,31,3,1,21, - 21,3,1,114,249,0,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,225,0,0,0,41,1, - 114,127,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 227,0,0,0,161,4,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,58,0,0,0,114,29,0,0, - 0,78,114,87,0,0,0,41,7,114,149,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,108,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,166,0,0,0,114,4,0,0,0, - 41,1,114,127,0,0,0,114,5,0,0,0,114,185,0,0, - 0,155,4,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, - 87,0,0,0,41,1,114,8,1,0,0,41,1,114,108,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,250,0,0,0,169,4,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,2,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,181,0,0,0,114,127,0,0,0,114,156,0,0,0,41, - 3,114,108,0,0,0,114,126,0,0,0,114,164,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 124,0,0,0,175,4,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,127,0,0,0,114,156,0,0,0,41,1,114,167, - 0,0,0,41,7,114,108,0,0,0,114,165,0,0,0,114, - 126,0,0,0,114,35,0,0,0,90,4,115,109,115,108,114, - 180,0,0,0,114,127,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,5,1,0,0,187,4,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,234,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, - 120,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, - 0,0,95,7,0,116,9,0,131,0,0,114,153,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,45, - 1,116,13,0,124,0,0,106,2,0,124,4,0,131,2,0, - 125,8,0,120,100,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,208,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,208,0,87,116,17, - 0,124,8,0,131,1,0,125,3,0,120,123,0,124,0,0, - 106,14,0,68,93,112,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,55,1,116, - 15,0,124,12,0,131,1,0,114,55,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,55,1,87,124,3,0,114,230,1,116,18, - 0,100,9,0,106,19,0,124,8,0,131,1,0,131,1,0, - 1,116,20,0,106,21,0,124,1,0,100,8,0,131,2,0, - 125,13,0,124,8,0,103,1,0,124,13,0,95,22,0,124, - 13,0,83,100,8,0,83,41,11,122,102,84,114,121,32,116, - 111,32,102,105,110,100,32,97,32,115,112,101,99,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,46,32,32,82,101,116,117,114,110,115, - 32,116,104,101,10,32,32,32,32,32,32,32,32,109,97,116, - 99,104,105,110,103,32,115,112,101,99,44,32,111,114,32,78, - 111,110,101,32,105,102,32,110,111,116,32,102,111,117,110,100, - 46,70,114,58,0,0,0,114,56,0,0,0,114,29,0,0, - 0,114,185,0,0,0,122,9,116,114,121,105,110,103,32,123, - 125,114,98,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,87,0,0,0,41,23,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,219,0,0,0,114,40,0,0,0,114,8,1,0, - 0,218,11,95,102,105,108,108,95,99,97,99,104,101,114,6, - 0,0,0,114,11,1,0,0,114,88,0,0,0,114,10,1, - 0,0,114,28,0,0,0,114,7,1,0,0,114,44,0,0, - 0,114,5,1,0,0,114,46,0,0,0,114,105,0,0,0, - 114,47,0,0,0,114,121,0,0,0,114,160,0,0,0,114, - 156,0,0,0,41,14,114,108,0,0,0,114,126,0,0,0, - 114,180,0,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,133,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,225,0,0,0,114,165,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,164,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,181,0, - 0,0,192,4,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,9,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,12,2,22,1,22,1,25,1,16, - 1,12,1,29,1,6,1,19,1,18,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,11,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,7,1, - 100,4,0,100,5,0,132,0,0,124,2,0,68,131,1,0, - 124,0,0,95,17,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,58,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,88,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,10,5,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,114,0,1,0,0, - 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,114,7,0,0,0,114,8,0,0,0,114, - 9,0,0,0,114,9,1,0,0,114,10,1,0,0,114,83, - 0,0,0,114,47,0,0,0,114,88,0,0,0,218,3,97, - 100,100,114,10,0,0,0,114,11,1,0,0,41,9,114,108, - 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,245,0,0,0,114,106, - 0,0,0,114,237,0,0,0,114,225,0,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,13,1,0,0,237,4,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,43,0,0,0,116,0,0,124,0,0,131,1,0,115, - 30,0,116,1,0,100,1,0,100,2,0,124,0,0,131,1, - 1,130,1,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,107, - 0,0,0,41,1,114,35,0,0,0,41,2,114,170,0,0, - 0,114,12,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,22,5,0,0,115,6, - 0,0,0,0,2,12,1,18,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,170,0,0,0,114,12,1, - 0,0,114,18,1,0,0,114,4,0,0,0,41,2,114,170, - 0,0,0,114,12,1,0,0,114,5,0,0,0,218,9,112, - 97,116,104,95,104,111,111,107,12,5,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,108,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,244,0,0, - 0,30,5,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,112,0,0,0,114,111,0,0,0,114,113,0, - 0,0,114,114,0,0,0,114,185,0,0,0,114,250,0,0, - 0,114,130,0,0,0,114,182,0,0,0,114,124,0,0,0, - 114,5,1,0,0,114,181,0,0,0,114,13,1,0,0,114, - 183,0,0,0,114,19,1,0,0,114,244,0,0,0,114,4, + 114,154,0,0,0,240,3,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,83,0,41,2,78,114,30, + 0,0,0,114,4,0,0,0,41,2,114,101,0,0,0,114, + 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,197,0,0,0,243,3,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,18,0,0,0,116,0,100,1,100,2, + 100,3,100,4,100,5,144,1,131,3,83,0,41,6,78,114, + 30,0,0,0,122,8,60,115,116,114,105,110,103,62,114,184, + 0,0,0,114,199,0,0,0,84,41,1,114,200,0,0,0, + 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,182,0,0,0, + 246,3,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,1,83,0,41,2,122,42,85,115,101,32,100,101,102,97, + 117,108,116,32,115,101,109,97,110,116,105,99,115,32,102,111, + 114,32,109,111,100,117,108,101,32,99,114,101,97,116,105,111, + 110,46,78,114,4,0,0,0,41,2,114,101,0,0,0,114, + 159,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,181,0,0,0,249,3,0,0,115,0,0,0, + 0,122,30,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,99,114,101,97,116,101,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,0,83,0,41, + 1,78,114,4,0,0,0,41,2,114,101,0,0,0,114,185, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,6,1,0,0,146,4,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,6,1,0,0,99,4,0,0,0,0,0, - 0,0,6,0,0,0,11,0,0,0,67,0,0,0,115,195, - 0,0,0,124,0,0,106,0,0,100,1,0,131,1,0,125, - 4,0,124,0,0,106,0,0,100,2,0,131,1,0,125,5, - 0,124,4,0,115,99,0,124,5,0,114,54,0,124,5,0, - 106,1,0,125,4,0,110,45,0,124,2,0,124,3,0,107, - 2,0,114,84,0,116,2,0,124,1,0,124,2,0,131,2, - 0,125,4,0,110,15,0,116,3,0,124,1,0,124,2,0, - 131,2,0,125,4,0,124,5,0,115,126,0,116,4,0,124, - 1,0,124,2,0,100,3,0,124,4,0,131,2,1,125,5, - 0,121,44,0,124,5,0,124,0,0,100,2,0,60,124,4, - 0,124,0,0,100,1,0,60,124,2,0,124,0,0,100,4, - 0,60,124,3,0,124,0,0,100,5,0,60,87,110,18,0, - 4,116,5,0,107,10,0,114,190,0,1,1,1,89,110,1, - 0,88,100,0,0,83,41,6,78,218,10,95,95,108,111,97, - 100,101,114,95,95,218,8,95,95,115,112,101,99,95,95,114, - 127,0,0,0,90,8,95,95,102,105,108,101,95,95,90,10, - 95,95,99,97,99,104,101,100,95,95,41,6,218,3,103,101, - 116,114,127,0,0,0,114,223,0,0,0,114,218,0,0,0, - 114,167,0,0,0,218,9,69,120,99,101,112,116,105,111,110, - 41,6,90,2,110,115,114,106,0,0,0,90,8,112,97,116, - 104,110,97,109,101,90,9,99,112,97,116,104,110,97,109,101, - 114,127,0,0,0,114,164,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,14,95,102,105,120,95, - 117,112,95,109,111,100,117,108,101,36,5,0,0,115,34,0, - 0,0,0,2,15,1,15,1,6,1,6,1,12,1,12,1, - 18,2,15,1,6,1,21,1,3,1,10,1,10,1,10,1, - 14,1,13,2,114,24,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, - 224,0,0,0,114,145,0,0,0,218,18,101,120,116,101,110, - 115,105,111,110,95,115,117,102,102,105,120,101,115,114,218,0, - 0,0,114,84,0,0,0,114,223,0,0,0,114,74,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, + 0,0,114,186,0,0,0,252,3,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,26,0,0,0,116,0,106,1,100,1, + 124,0,106,2,131,2,1,0,116,0,106,3,124,0,124,1, + 131,2,83,0,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,4,114,115,0,0,0,114,130,0,0,0,114,227, + 0,0,0,114,187,0,0,0,41,2,114,101,0,0,0,114, + 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,188,0,0,0,255,3,0,0,115,6,0,0, + 0,0,7,6,1,8,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,12,114,106,0,0,0,114,105,0, + 0,0,114,107,0,0,0,114,180,0,0,0,114,178,0,0, + 0,114,245,0,0,0,114,154,0,0,0,114,197,0,0,0, + 114,182,0,0,0,114,181,0,0,0,114,186,0,0,0,114, + 188,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,244,0,0,0,227,3,0, + 0,115,16,0,0,0,8,1,8,3,12,9,8,3,8,3, + 8,3,8,3,8,3,114,244,0,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,90,1,100,0,90,2,100,1,90, + 3,101,4,100,2,100,3,132,0,131,1,90,5,101,4,100, + 4,100,5,132,0,131,1,90,6,101,4,100,6,100,7,132, + 0,131,1,90,7,101,4,100,8,100,9,132,0,131,1,90, + 8,101,4,100,17,100,11,100,12,132,1,131,1,90,9,101, + 4,100,18,100,13,100,14,132,1,131,1,90,10,101,4,100, + 19,100,15,100,16,132,1,131,1,90,11,100,10,83,0,41, + 20,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,42,0,0,0,120,36,116,0,106,1,106,2,131, + 0,68,0,93,22,125,1,116,3,124,1,100,1,131,2,114, + 12,124,1,106,4,131,0,1,0,113,12,87,0,100,2,83, + 0,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,109,0,0,0,114, + 247,0,0,0,41,2,114,165,0,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,247,0,0,0,17,4,0,0,115,6,0,0,0, + 0,4,16,1,10,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,86,0,0,0,116,0, + 106,1,100,1,107,9,114,30,116,0,106,1,12,0,114,30, + 116,2,106,3,100,2,116,4,131,2,1,0,120,50,116,0, + 106,1,68,0,93,36,125,2,121,8,124,2,124,1,131,1, + 83,0,4,0,116,5,107,10,114,72,1,0,1,0,1,0, + 119,38,89,0,113,38,88,0,113,38,87,0,100,1,83,0, + 100,1,83,0,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,78,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,41,6,114,7,0,0,0,218,10,112,97,116,104, + 95,104,111,111,107,115,114,61,0,0,0,114,62,0,0,0, + 114,119,0,0,0,114,100,0,0,0,41,3,114,165,0,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,25,4,0,0,115,16,0,0, + 0,0,7,18,1,12,1,12,1,2,1,8,1,14,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,19,0,0,0,67,0,0,0,115,102, + 0,0,0,124,1,100,1,107,2,114,42,121,12,116,0,106, + 1,131,0,125,1,87,0,110,20,4,0,116,2,107,10,114, + 40,1,0,1,0,1,0,100,2,83,0,88,0,121,14,116, + 3,106,4,124,1,25,0,125,2,87,0,110,40,4,0,116, + 5,107,10,114,96,1,0,1,0,1,0,124,0,106,6,124, + 1,131,1,125,2,124,2,116,3,106,4,124,1,60,0,89, + 0,110,2,88,0,124,2,83,0,41,3,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,78,41,7,114,3,0,0,0,114,45,0,0, + 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, + 114,114,111,114,114,7,0,0,0,114,248,0,0,0,114,132, + 0,0,0,114,252,0,0,0,41,3,114,165,0,0,0,114, + 35,0,0,0,114,250,0,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,42,4, + 0,0,115,22,0,0,0,0,8,8,1,2,1,12,1,14, + 3,6,1,2,1,14,1,14,1,10,1,16,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,82,0,0,0,116,0,124,2,100,1,131,2, + 114,26,124,2,106,1,124,1,131,1,92,2,125,3,125,4, + 110,14,124,2,106,2,124,1,131,1,125,3,103,0,125,4, + 124,3,100,0,107,9,114,60,116,3,106,4,124,1,124,3, + 131,2,83,0,116,3,106,5,124,1,100,0,131,2,125,5, + 124,4,124,5,95,6,124,5,83,0,41,2,78,114,118,0, + 0,0,41,7,114,109,0,0,0,114,118,0,0,0,114,177, + 0,0,0,114,115,0,0,0,114,174,0,0,0,114,155,0, + 0,0,114,151,0,0,0,41,6,114,165,0,0,0,114,120, + 0,0,0,114,250,0,0,0,114,121,0,0,0,114,122,0, + 0,0,114,159,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,64,4,0,0,115,18,0,0, + 0,0,4,10,1,16,2,10,1,4,1,8,1,12,1,12, + 1,6,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,170,0,0,0,103,0,125,4,120, + 160,124,2,68,0,93,130,125,5,116,0,124,5,116,1,116, + 2,102,2,131,2,115,30,113,10,124,0,106,3,124,5,131, + 1,125,6,124,6,100,1,107,9,114,10,116,4,124,6,100, + 2,131,2,114,72,124,6,106,5,124,1,124,3,131,2,125, + 7,110,12,124,0,106,6,124,1,124,6,131,2,125,7,124, + 7,100,1,107,8,114,94,113,10,124,7,106,7,100,1,107, + 9,114,108,124,7,83,0,124,7,106,8,125,8,124,8,100, + 1,107,8,114,130,116,9,100,3,131,1,130,1,124,4,106, + 10,124,8,131,1,1,0,113,10,87,0,116,11,106,12,124, + 1,100,1,131,2,125,7,124,4,124,7,95,8,124,7,83, + 0,100,1,83,0,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,78,114,176,0,0,0,122,19, + 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, + 100,101,114,41,13,114,138,0,0,0,114,70,0,0,0,218, + 5,98,121,116,101,115,114,254,0,0,0,114,109,0,0,0, + 114,176,0,0,0,114,255,0,0,0,114,121,0,0,0,114, + 151,0,0,0,114,100,0,0,0,114,144,0,0,0,114,115, + 0,0,0,114,155,0,0,0,41,9,114,165,0,0,0,114, + 120,0,0,0,114,35,0,0,0,114,175,0,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,250,0,0,0,114,159,0,0,0,114, + 122,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,79,4, + 0,0,115,40,0,0,0,0,5,4,1,10,1,14,1,2, + 1,10,1,8,1,10,1,14,2,12,1,8,1,2,1,10, + 1,4,1,6,1,8,1,8,5,14,2,12,1,6,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,104,0,0,0,124, + 2,100,1,107,8,114,14,116,0,106,1,125,2,124,0,106, + 2,124,1,124,2,124,3,131,3,125,4,124,4,100,1,107, + 8,114,42,100,1,83,0,110,58,124,4,106,3,100,1,107, + 8,114,96,124,4,106,4,125,5,124,5,114,90,100,2,124, + 4,95,5,116,6,124,1,124,5,124,0,106,2,131,3,124, + 4,95,4,124,4,83,0,113,100,100,1,83,0,110,4,124, + 4,83,0,100,1,83,0,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,2,1,0,0,114,121,0,0,0,114, + 151,0,0,0,114,153,0,0,0,114,225,0,0,0,41,6, + 114,165,0,0,0,114,120,0,0,0,114,35,0,0,0,114, + 175,0,0,0,114,159,0,0,0,114,1,1,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,176,0, + 0,0,111,4,0,0,115,26,0,0,0,0,4,8,1,6, + 1,14,1,8,1,6,1,10,1,6,1,4,3,6,1,16, + 1,6,2,6,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,30,0,0,0,124,0,106,0,124,1,124,2,131,2,125, + 3,124,3,100,1,107,8,114,24,100,1,83,0,124,3,106, + 1,83,0,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,176,0,0,0,114,121,0,0,0,41,4, + 114,165,0,0,0,114,120,0,0,0,114,35,0,0,0,114, + 159,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,177,0,0,0,133,4,0,0,115,8,0,0, + 0,0,8,12,1,8,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,1,78,41,2,78,78,41,1,78,41,12,114,106,0, + 0,0,114,105,0,0,0,114,107,0,0,0,114,108,0,0, + 0,114,178,0,0,0,114,247,0,0,0,114,252,0,0,0, + 114,254,0,0,0,114,255,0,0,0,114,2,1,0,0,114, + 176,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,246,0, + 0,0,13,4,0,0,115,22,0,0,0,8,2,4,2,12, + 8,12,17,12,22,12,15,2,1,12,31,2,1,12,21,2, + 1,114,246,0,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,64,0,0,0,115,90,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, + 132,0,90,4,100,4,100,5,132,0,90,5,101,6,90,7, + 100,6,100,7,132,0,90,8,100,8,100,9,132,0,90,9, + 100,19,100,11,100,12,132,1,90,10,100,13,100,14,132,0, + 90,11,101,12,100,15,100,16,132,0,131,1,90,13,100,17, + 100,18,132,0,90,14,100,10,83,0,41,20,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,88,0,0,0, + 103,0,125,3,120,40,124,2,68,0,93,32,92,2,137,0, + 125,4,124,3,106,0,135,0,102,1,100,1,100,2,132,8, + 124,4,68,0,131,1,131,1,1,0,113,10,87,0,124,3, + 124,0,95,1,124,1,112,58,100,3,124,0,95,2,100,6, + 124,0,95,3,116,4,131,0,124,0,95,5,116,4,131,0, + 124,0,95,6,100,5,83,0,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,22,0,0,0, + 124,0,93,14,125,1,124,1,136,0,102,2,86,0,1,0, + 113,2,100,0,83,0,41,1,78,114,4,0,0,0,41,2, + 114,22,0,0,0,114,220,0,0,0,41,1,114,121,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,222,0,0,0, + 162,4,0,0,115,2,0,0,0,4,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,59,0,0,0,114,29,0,0,0,78,114,88, + 0,0,0,41,7,114,144,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, + 101,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,161,0,0,0,114,4,0,0,0,41,1,114,121, + 0,0,0,114,5,0,0,0,114,180,0,0,0,156,4,0, + 0,115,16,0,0,0,0,4,4,1,14,1,28,1,6,2, + 10,1,6,1,8,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,10,0,0,0,100,3,124,0,95,0,100,2,83,0,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,88,0,0,0,41,1,114, + 5,1,0,0,41,1,114,101,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,247,0,0,0,170, + 4,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,2,0,0,0,67,0,0,0,115,42,0, + 0,0,124,0,106,0,124,1,131,1,125,2,124,2,100,1, + 107,8,114,26,100,1,103,0,102,2,83,0,124,2,106,1, + 124,2,106,2,112,38,103,0,102,2,83,0,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,176,0,0,0,114,121,0, + 0,0,114,151,0,0,0,41,3,114,101,0,0,0,114,120, + 0,0,0,114,159,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,118,0,0,0,176,4,0,0, + 115,8,0,0,0,0,7,10,1,8,1,8,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,30,0,0,0,124, + 1,124,2,124,3,131,2,125,6,116,0,124,2,124,3,100, + 1,124,6,100,2,124,4,144,2,131,2,83,0,41,3,78, + 114,121,0,0,0,114,151,0,0,0,41,1,114,162,0,0, + 0,41,7,114,101,0,0,0,114,160,0,0,0,114,120,0, + 0,0,114,35,0,0,0,90,4,115,109,115,108,114,175,0, + 0,0,114,121,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,2,1,0,0,188,4,0,0,115, + 6,0,0,0,0,1,10,1,12,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,100,1,0,0,100,1,125,3,124, + 1,106,0,100,2,131,1,100,3,25,0,125,4,121,24,116, + 1,124,0,106,2,112,34,116,3,106,4,131,0,131,1,106, + 5,125,5,87,0,110,24,4,0,116,6,107,10,114,66,1, + 0,1,0,1,0,100,10,125,5,89,0,110,2,88,0,124, + 5,124,0,106,7,107,3,114,92,124,0,106,8,131,0,1, + 0,124,5,124,0,95,7,116,9,131,0,114,114,124,0,106, + 10,125,6,124,4,106,11,131,0,125,7,110,10,124,0,106, + 12,125,6,124,4,125,7,124,7,124,6,107,6,114,218,116, + 13,124,0,106,2,124,4,131,2,125,8,120,72,124,0,106, + 14,68,0,93,54,92,2,125,9,125,10,100,5,124,9,23, + 0,125,11,116,13,124,8,124,11,131,2,125,12,116,15,124, + 12,131,1,114,152,124,0,106,16,124,10,124,1,124,12,124, + 8,103,1,124,2,131,5,83,0,113,152,87,0,116,17,124, + 8,131,1,125,3,120,90,124,0,106,14,68,0,93,80,92, + 2,125,9,125,10,116,13,124,0,106,2,124,4,124,9,23, + 0,131,2,125,12,116,18,106,19,100,6,124,12,100,7,100, + 3,144,1,131,2,1,0,124,7,124,9,23,0,124,6,107, + 6,114,226,116,15,124,12,131,1,114,226,124,0,106,16,124, + 10,124,1,124,12,100,8,124,2,131,5,83,0,113,226,87, + 0,124,3,144,1,114,96,116,18,106,19,100,9,124,8,131, + 2,1,0,116,18,106,20,124,1,100,8,131,2,125,13,124, + 8,103,1,124,13,95,21,124,13,83,0,100,8,83,0,41, + 11,122,102,84,114,121,32,116,111,32,102,105,110,100,32,97, + 32,115,112,101,99,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,46,32, + 32,82,101,116,117,114,110,115,32,116,104,101,10,32,32,32, + 32,32,32,32,32,109,97,116,99,104,105,110,103,32,115,112, + 101,99,44,32,111,114,32,78,111,110,101,32,105,102,32,110, + 111,116,32,102,111,117,110,100,46,70,114,59,0,0,0,114, + 57,0,0,0,114,29,0,0,0,114,180,0,0,0,122,9, + 116,114,121,105,110,103,32,123,125,90,9,118,101,114,98,111, + 115,105,116,121,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,88,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,214,0,0,0,114,40,0,0,0,114,5,1,0,0,218, + 11,95,102,105,108,108,95,99,97,99,104,101,114,6,0,0, + 0,114,8,1,0,0,114,89,0,0,0,114,7,1,0,0, + 114,28,0,0,0,114,4,1,0,0,114,44,0,0,0,114, + 2,1,0,0,114,46,0,0,0,114,115,0,0,0,114,130, + 0,0,0,114,155,0,0,0,114,151,0,0,0,41,14,114, + 101,0,0,0,114,120,0,0,0,114,175,0,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,127,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,220, + 0,0,0,114,160,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,159,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,5,0,0,0,114,176,0,0,0,193,4,0,0,115, + 70,0,0,0,0,3,4,1,14,1,2,1,24,1,14,1, + 10,1,10,1,8,1,6,2,6,1,6,1,10,2,6,1, + 4,2,8,1,12,1,16,1,8,1,10,1,8,1,24,4, + 8,2,16,1,16,1,18,1,12,1,8,1,10,1,12,1, + 6,1,12,1,12,1,8,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,194,0,0,0,124,0,106,0,125,1, + 121,22,116,1,106,2,124,1,112,22,116,1,106,3,131,0, + 131,1,125,2,87,0,110,30,4,0,116,4,116,5,116,6, + 102,3,107,10,114,58,1,0,1,0,1,0,103,0,125,2, + 89,0,110,2,88,0,116,7,106,8,106,9,100,1,131,1, + 115,84,116,10,124,2,131,1,124,0,95,11,110,78,116,10, + 131,0,125,3,120,64,124,2,68,0,93,56,125,4,124,4, + 106,12,100,2,131,1,92,3,125,5,125,6,125,7,124,6, + 114,138,100,3,106,13,124,5,124,7,106,14,131,0,131,2, + 125,8,110,4,124,5,125,8,124,3,106,15,124,8,131,1, + 1,0,113,96,87,0,124,3,124,0,95,11,116,7,106,8, + 106,9,116,16,131,1,114,190,100,4,100,5,132,0,124,2, + 68,0,131,1,124,0,95,17,100,6,83,0,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,59,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,20,0,0,0,104, + 0,124,0,93,12,125,1,124,1,106,0,131,0,146,2,113, + 4,83,0,114,4,0,0,0,41,1,114,89,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,12,5,0,0,115,2,0,0,0,6,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,114,253,0,0,0,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,114, + 7,0,0,0,114,8,0,0,0,114,9,0,0,0,114,6, + 1,0,0,114,7,1,0,0,114,84,0,0,0,114,48,0, + 0,0,114,89,0,0,0,218,3,97,100,100,114,10,0,0, + 0,114,8,1,0,0,41,9,114,101,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,242,0,0,0,114,99,0,0,0,114,232,0, + 0,0,114,220,0,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,161,0,0,0,59,5,0,0,115,8,0,0,0,0,5, - 18,1,12,1,12,1,114,161,0,0,0,99,1,0,0,0, - 0,0,0,0,12,0,0,0,12,0,0,0,67,0,0,0, - 115,70,2,0,0,124,0,0,97,0,0,116,0,0,106,1, - 0,97,1,0,116,0,0,106,2,0,97,2,0,116,1,0, - 106,3,0,116,4,0,25,125,1,0,120,76,0,100,26,0, - 68,93,68,0,125,2,0,124,2,0,116,1,0,106,3,0, - 107,7,0,114,83,0,116,0,0,106,5,0,124,2,0,131, - 1,0,125,3,0,110,13,0,116,1,0,106,3,0,124,2, - 0,25,125,3,0,116,6,0,124,1,0,124,2,0,124,3, - 0,131,3,0,1,113,44,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,4,0,120,149,0,124,4,0, - 68,93,129,0,92,2,0,125,5,0,125,6,0,116,7,0, - 100,9,0,100,10,0,132,0,0,124,6,0,68,131,1,0, - 131,1,0,115,199,0,116,8,0,130,1,0,124,6,0,100, - 11,0,25,125,7,0,124,5,0,116,1,0,106,3,0,107, - 6,0,114,241,0,116,1,0,106,3,0,124,5,0,25,125, - 8,0,80,113,156,0,121,20,0,116,0,0,106,5,0,124, - 5,0,131,1,0,125,8,0,80,87,113,156,0,4,116,9, - 0,107,10,0,114,28,1,1,1,1,119,156,0,89,113,156, - 0,88,113,156,0,87,116,9,0,100,12,0,131,1,0,130, - 1,0,116,6,0,124,1,0,100,13,0,124,8,0,131,3, - 0,1,116,6,0,124,1,0,100,14,0,124,7,0,131,3, - 0,1,116,6,0,124,1,0,100,15,0,100,16,0,106,10, - 0,124,6,0,131,1,0,131,3,0,1,121,19,0,116,0, - 0,106,5,0,100,17,0,131,1,0,125,9,0,87,110,24, - 0,4,116,9,0,107,10,0,114,147,1,1,1,1,100,18, - 0,125,9,0,89,110,1,0,88,116,6,0,124,1,0,100, - 17,0,124,9,0,131,3,0,1,116,0,0,106,5,0,100, - 19,0,131,1,0,125,10,0,116,6,0,124,1,0,100,19, - 0,124,10,0,131,3,0,1,124,5,0,100,7,0,107,2, - 0,114,238,1,116,0,0,106,5,0,100,20,0,131,1,0, - 125,11,0,116,6,0,124,1,0,100,21,0,124,11,0,131, - 3,0,1,116,6,0,124,1,0,100,22,0,116,11,0,131, - 0,0,131,3,0,1,116,12,0,106,13,0,116,2,0,106, - 14,0,131,0,0,131,1,0,1,124,5,0,100,7,0,107, - 2,0,114,66,2,116,15,0,106,16,0,100,23,0,131,1, - 0,1,100,24,0,116,12,0,107,6,0,114,66,2,100,25, - 0,116,17,0,95,18,0,100,18,0,83,41,27,122,205,83, - 101,116,117,112,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,101,114,115,32,102,111, - 114,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,10, - 32,32,32,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,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,79,116,104,101,114,32,99,111, - 109,112,111,110,101,110,116,115,32,97,114,101,32,101,120,116, - 114,97,99,116,101,100,32,102,114,111,109,32,116,104,101,32, - 99,111,114,101,32,98,111,111,116,115,116,114,97,112,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,114,49,0,0, - 0,114,60,0,0,0,218,8,98,117,105,108,116,105,110,115, - 114,142,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,41,2,114,29,0,0,0,78,41,1,114,31,0,0,0, - 41,2,114,22,0,0,0,114,77,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,227,0,0,0, - 95,5,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,59,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,90, - 7,95,116,104,114,101,97,100,78,90,8,95,119,101,97,107, - 114,101,102,90,6,119,105,110,114,101,103,114,169,0,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,19,114,121,0,0,0, - 114,7,0,0,0,114,145,0,0,0,114,239,0,0,0,114, - 112,0,0,0,90,18,95,98,117,105,108,116,105,110,95,102, - 114,111,109,95,110,97,109,101,114,116,0,0,0,218,3,97, - 108,108,218,14,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,114,107,0,0,0,114,26,0,0,0,114,11,0,0, - 0,114,229,0,0,0,114,149,0,0,0,114,25,1,0,0, - 114,84,0,0,0,114,163,0,0,0,114,168,0,0,0,114, - 173,0,0,0,41,12,218,17,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,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,70,5,0,0,115,82,0,0,0,0, - 8,6,1,9,1,9,3,13,1,13,1,15,1,18,2,13, - 1,20,3,33,1,19,2,31,1,10,1,15,1,13,1,4, - 2,3,1,15,1,5,1,13,1,12,2,12,1,16,1,16, - 1,25,3,3,1,19,1,13,2,11,1,16,3,15,1,16, - 3,12,1,15,1,16,3,19,1,19,1,12,1,13,1,12, - 1,114,33,1,0,0,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,116,0,0,0, - 116,0,0,124,0,0,131,1,0,1,116,1,0,131,0,0, - 125,1,0,116,2,0,106,3,0,106,4,0,116,5,0,106, - 6,0,124,1,0,140,0,0,103,1,0,131,1,0,1,116, - 7,0,106,8,0,100,1,0,107,2,0,114,78,0,116,2, - 0,106,9,0,106,10,0,116,11,0,131,1,0,1,116,2, - 0,106,9,0,106,10,0,116,12,0,131,1,0,1,116,5, - 0,124,0,0,95,5,0,116,13,0,124,0,0,95,13,0, - 100,2,0,83,41,3,122,41,73,110,115,116,97,108,108,32, - 116,104,101,32,112,97,116,104,45,98,97,115,101,100,32,105, - 109,112,111,114,116,32,99,111,109,112,111,110,101,110,116,115, - 46,114,28,1,0,0,78,41,14,114,33,1,0,0,114,161, - 0,0,0,114,7,0,0,0,114,254,0,0,0,114,149,0, - 0,0,114,6,1,0,0,114,19,1,0,0,114,3,0,0, - 0,114,112,0,0,0,218,9,109,101,116,97,95,112,97,116, - 104,114,163,0,0,0,114,168,0,0,0,114,249,0,0,0, - 114,218,0,0,0,41,2,114,32,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,138,5,0,0,115,16,0,0, - 0,0,2,10,1,9,1,28,1,15,1,16,1,16,4,9, - 1,114,35,1,0,0,41,3,122,3,119,105,110,114,1,0, - 0,0,114,2,0,0,0,41,57,114,114,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,218,4,116,121,112,101,218,8,95,95,99, - 111,100,101,95,95,114,144,0,0,0,114,15,0,0,0,114, - 135,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,73,0,0,0,114,72,0,0,0,114,84,0,0,0, - 114,74,0,0,0,90,23,68,69,66,85,71,95,66,89,84, - 69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,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,79,0,0,0, - 114,85,0,0,0,114,91,0,0,0,114,95,0,0,0,114, - 97,0,0,0,114,105,0,0,0,114,123,0,0,0,114,130, - 0,0,0,114,141,0,0,0,114,147,0,0,0,114,150,0, - 0,0,114,155,0,0,0,218,6,111,98,106,101,99,116,114, - 162,0,0,0,114,167,0,0,0,114,168,0,0,0,114,184, - 0,0,0,114,194,0,0,0,114,210,0,0,0,114,218,0, - 0,0,114,223,0,0,0,114,229,0,0,0,114,224,0,0, - 0,114,230,0,0,0,114,247,0,0,0,114,249,0,0,0, - 114,6,1,0,0,114,24,1,0,0,114,161,0,0,0,114, - 33,1,0,0,114,35,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,100,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,15,114,22,1,18,2,6,1, - 6,2,9,2,9,2,10,2,21,44,12,33,12,19,12,12, - 12,12,18,8,12,28,12,17,21,55,21,12,18,10,12,14, - 9,3,12,1,15,65,19,64,19,28,22,110,19,41,25,43, - 25,16,6,3,25,53,19,57,19,41,19,134,19,146,15,23, - 12,11,12,68, + 114,10,1,0,0,239,4,0,0,115,34,0,0,0,0,2, + 6,1,2,1,22,1,20,3,10,3,12,1,12,7,6,1, + 10,1,16,1,4,1,18,2,4,1,14,1,6,1,12,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,18,0, + 0,0,135,0,135,1,102,2,100,1,100,2,132,8,125,2, + 124,2,83,0,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,32,0,0,0,116,0,124,0,131,1,115, + 22,116,1,100,1,100,2,124,0,144,1,131,1,130,1,136, + 0,124,0,136,1,140,1,83,0,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,100,0,0,0,41,1,114,35,0, + 0,0,41,2,114,165,0,0,0,114,9,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,24,5,0,0,115,6,0,0,0,0,2,8,1,14, + 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,165,0,0,0,114,9,1,0,0,114,15,1,0,0,114, + 4,0,0,0,41,2,114,165,0,0,0,114,9,1,0,0, + 114,5,0,0,0,218,9,112,97,116,104,95,104,111,111,107, + 14,5,0,0,115,4,0,0,0,0,10,14,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,12,0,0,0,100,1,106, + 0,124,0,106,1,131,1,83,0,41,2,78,122,16,70,105, + 108,101,70,105,110,100,101,114,40,123,33,114,125,41,41,2, + 114,48,0,0,0,114,35,0,0,0,41,1,114,101,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 114,241,0,0,0,32,5,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,1,78,41,15,114,106,0,0,0,114, + 105,0,0,0,114,107,0,0,0,114,108,0,0,0,114,180, + 0,0,0,114,247,0,0,0,114,124,0,0,0,114,177,0, + 0,0,114,118,0,0,0,114,2,1,0,0,114,176,0,0, + 0,114,10,1,0,0,114,178,0,0,0,114,16,1,0,0, + 114,241,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,3,1,0,0,147,4, + 0,0,115,20,0,0,0,8,7,4,2,8,14,8,4,4, + 2,8,12,8,5,10,46,8,31,12,18,114,3,1,0,0, + 99,4,0,0,0,0,0,0,0,6,0,0,0,11,0,0, + 0,67,0,0,0,115,148,0,0,0,124,0,106,0,100,1, + 131,1,125,4,124,0,106,0,100,2,131,1,125,5,124,4, + 115,66,124,5,114,36,124,5,106,1,125,4,110,30,124,2, + 124,3,107,2,114,56,116,2,124,1,124,2,131,2,125,4, + 110,10,116,3,124,1,124,2,131,2,125,4,124,5,115,86, + 116,4,124,1,124,2,100,3,124,4,144,1,131,2,125,5, + 121,36,124,5,124,0,100,2,60,0,124,4,124,0,100,1, + 60,0,124,2,124,0,100,4,60,0,124,3,124,0,100,5, + 60,0,87,0,110,20,4,0,116,5,107,10,114,142,1,0, + 1,0,1,0,89,0,110,2,88,0,100,0,83,0,41,6, + 78,218,10,95,95,108,111,97,100,101,114,95,95,218,8,95, + 95,115,112,101,99,95,95,114,121,0,0,0,90,8,95,95, + 102,105,108,101,95,95,90,10,95,95,99,97,99,104,101,100, + 95,95,41,6,218,3,103,101,116,114,121,0,0,0,114,218, + 0,0,0,114,213,0,0,0,114,162,0,0,0,218,9,69, + 120,99,101,112,116,105,111,110,41,6,90,2,110,115,114,99, + 0,0,0,90,8,112,97,116,104,110,97,109,101,90,9,99, + 112,97,116,104,110,97,109,101,114,121,0,0,0,114,159,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,14,95,102,105,120,95,117,112,95,109,111,100,117,108, + 101,38,5,0,0,115,34,0,0,0,0,2,10,1,10,1, + 4,1,4,1,8,1,8,1,12,2,10,1,4,1,16,1, + 2,1,8,1,8,1,8,1,12,1,14,2,114,21,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,38,0,0,0,116,0,116,1,106, + 2,131,0,102,2,125,0,116,3,116,4,102,2,125,1,116, + 5,116,6,102,2,125,2,124,0,124,1,124,2,103,3,83, + 0,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,219,0,0,0,114,140,0,0,0, + 218,18,101,120,116,101,110,115,105,111,110,95,115,117,102,102, + 105,120,101,115,114,213,0,0,0,114,85,0,0,0,114,218, + 0,0,0,114,75,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,156,0,0,0,61,5,0,0, + 115,8,0,0,0,0,5,12,1,8,1,8,1,114,156,0, + 0,0,99,1,0,0,0,0,0,0,0,12,0,0,0,12, + 0,0,0,67,0,0,0,115,188,1,0,0,124,0,97,0, + 116,0,106,1,97,1,116,0,106,2,97,2,116,1,106,3, + 116,4,25,0,125,1,120,56,100,26,68,0,93,48,125,2, + 124,2,116,1,106,3,107,7,114,58,116,0,106,5,124,2, + 131,1,125,3,110,10,116,1,106,3,124,2,25,0,125,3, + 116,6,124,1,124,2,124,3,131,3,1,0,113,32,87,0, + 100,5,100,6,103,1,102,2,100,7,100,8,100,6,103,2, + 102,2,102,2,125,4,120,118,124,4,68,0,93,102,92,2, + 125,5,125,6,116,7,100,9,100,10,132,0,124,6,68,0, + 131,1,131,1,115,142,116,8,130,1,124,6,100,11,25,0, + 125,7,124,5,116,1,106,3,107,6,114,174,116,1,106,3, + 124,5,25,0,125,8,80,0,113,112,121,16,116,0,106,5, + 124,5,131,1,125,8,80,0,87,0,113,112,4,0,116,9, + 107,10,114,212,1,0,1,0,1,0,119,112,89,0,113,112, + 88,0,113,112,87,0,116,9,100,12,131,1,130,1,116,6, + 124,1,100,13,124,8,131,3,1,0,116,6,124,1,100,14, + 124,7,131,3,1,0,116,6,124,1,100,15,100,16,106,10, + 124,6,131,1,131,3,1,0,121,14,116,0,106,5,100,17, + 131,1,125,9,87,0,110,26,4,0,116,9,107,10,144,1, + 114,52,1,0,1,0,1,0,100,18,125,9,89,0,110,2, + 88,0,116,6,124,1,100,17,124,9,131,3,1,0,116,0, + 106,5,100,19,131,1,125,10,116,6,124,1,100,19,124,10, + 131,3,1,0,124,5,100,7,107,2,144,1,114,120,116,0, + 106,5,100,20,131,1,125,11,116,6,124,1,100,21,124,11, + 131,3,1,0,116,6,124,1,100,22,116,11,131,0,131,3, + 1,0,116,12,106,13,116,2,106,14,131,0,131,1,1,0, + 124,5,100,7,107,2,144,1,114,184,116,15,106,16,100,23, + 131,1,1,0,100,24,116,12,107,6,144,1,114,184,100,25, + 116,17,95,18,100,18,83,0,41,27,122,205,83,101,116,117, + 112,32,116,104,101,32,112,97,116,104,45,98,97,115,101,100, + 32,105,109,112,111,114,116,101,114,115,32,102,111,114,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,10,32,32,32, + 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,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,79,116,104,101,114,32,99,111,109,112,111, + 110,101,110,116,115,32,97,114,101,32,101,120,116,114,97,99, + 116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,114, + 101,32,98,111,111,116,115,116,114,97,112,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,114,50,0,0,0,114,61, + 0,0,0,218,8,98,117,105,108,116,105,110,115,114,137,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,26,0,0,0,124,0,93, + 18,125,1,116,0,124,1,131,1,100,0,107,2,86,0,1, + 0,113,2,100,1,83,0,41,2,114,29,0,0,0,78,41, + 1,114,31,0,0,0,41,2,114,22,0,0,0,114,78,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,222,0,0,0,97,5,0,0,115,2,0,0,0,4, + 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,60,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,90,7,95,116,104,114,101,97,100,78,90, + 8,95,119,101,97,107,114,101,102,90,6,119,105,110,114,101, + 103,114,164,0,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, + 19,114,115,0,0,0,114,7,0,0,0,114,140,0,0,0, + 114,234,0,0,0,114,106,0,0,0,90,18,95,98,117,105, + 108,116,105,110,95,102,114,111,109,95,110,97,109,101,114,110, + 0,0,0,218,3,97,108,108,218,14,65,115,115,101,114,116, + 105,111,110,69,114,114,111,114,114,100,0,0,0,114,26,0, + 0,0,114,11,0,0,0,114,224,0,0,0,114,144,0,0, + 0,114,22,1,0,0,114,85,0,0,0,114,158,0,0,0, + 114,163,0,0,0,114,168,0,0,0,41,12,218,17,95,98, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,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,72,5,0,0, + 115,82,0,0,0,0,8,4,1,6,1,6,3,10,1,10, + 1,10,1,12,2,10,1,16,3,22,1,14,2,22,1,8, + 1,10,1,10,1,4,2,2,1,10,1,6,1,14,1,12, + 2,8,1,12,1,12,1,18,3,2,1,14,1,16,2,10, + 1,12,3,10,1,12,3,10,1,10,1,12,3,14,1,14, + 1,10,1,10,1,10,1,114,30,1,0,0,99,1,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, + 0,115,84,0,0,0,116,0,124,0,131,1,1,0,116,1, + 131,0,125,1,116,2,106,3,106,4,116,5,106,6,124,1, + 140,0,103,1,131,1,1,0,116,7,106,8,100,1,107,2, + 114,56,116,2,106,9,106,10,116,11,131,1,1,0,116,2, + 106,9,106,10,116,12,131,1,1,0,116,5,124,0,95,5, + 116,13,124,0,95,13,100,2,83,0,41,3,122,41,73,110, + 115,116,97,108,108,32,116,104,101,32,112,97,116,104,45,98, + 97,115,101,100,32,105,109,112,111,114,116,32,99,111,109,112, + 111,110,101,110,116,115,46,114,25,1,0,0,78,41,14,114, + 30,1,0,0,114,156,0,0,0,114,7,0,0,0,114,251, + 0,0,0,114,144,0,0,0,114,3,1,0,0,114,16,1, + 0,0,114,3,0,0,0,114,106,0,0,0,218,9,109,101, + 116,97,95,112,97,116,104,114,158,0,0,0,114,163,0,0, + 0,114,246,0,0,0,114,213,0,0,0,41,2,114,29,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,140,5, + 0,0,115,16,0,0,0,0,2,8,1,6,1,20,1,10, + 1,12,1,12,4,6,1,114,32,1,0,0,41,3,122,3, + 119,105,110,114,1,0,0,0,114,2,0,0,0,41,1,114, + 47,0,0,0,41,1,78,41,3,78,78,78,41,3,78,78, + 78,41,2,114,60,0,0,0,114,60,0,0,0,41,1,78, + 41,1,78,41,56,114,108,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,56,0,0, + 0,218,4,116,121,112,101,218,8,95,95,99,111,100,101,95, + 95,114,139,0,0,0,114,15,0,0,0,114,129,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,74,0, + 0,0,114,73,0,0,0,114,85,0,0,0,114,75,0,0, + 0,90,23,68,69,66,85,71,95,66,89,84,69,67,79,68, + 69,95,83,85,70,70,73,88,69,83,90,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,80,0,0,0,114,86,0,0, + 0,114,92,0,0,0,114,96,0,0,0,114,98,0,0,0, + 114,117,0,0,0,114,124,0,0,0,114,136,0,0,0,114, + 142,0,0,0,114,145,0,0,0,114,150,0,0,0,218,6, + 111,98,106,101,99,116,114,157,0,0,0,114,162,0,0,0, + 114,163,0,0,0,114,179,0,0,0,114,189,0,0,0,114, + 205,0,0,0,114,213,0,0,0,114,218,0,0,0,114,224, + 0,0,0,114,219,0,0,0,114,225,0,0,0,114,244,0, + 0,0,114,246,0,0,0,114,3,1,0,0,114,21,1,0, + 0,114,156,0,0,0,114,30,1,0,0,114,32,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,102,0,0,0,4,17,4,3,8,12,8,5,8, + 5,8,6,8,12,8,10,8,9,8,5,8,7,10,22,10, + 116,16,1,12,2,4,1,4,2,6,2,6,2,8,2,16, + 44,8,33,8,19,8,12,8,12,8,28,8,17,10,55,10, + 12,10,10,8,14,6,3,4,1,14,65,14,64,14,29,16, + 110,14,41,18,45,18,16,4,3,18,53,14,60,14,42,14, + 127,0,7,14,127,0,20,10,23,8,11,8,68, }; diff --git a/Python/makeopcodetargets.py b/Python/makeopcodetargets.py index d9a0855..023c9e6 100755 --- a/Python/makeopcodetargets.py +++ b/Python/makeopcodetargets.py @@ -3,24 +3,34 @@ (for compilers supporting computed gotos or "labels-as-values", such as gcc). """ -# This code should stay compatible with Python 2.3, at least while -# some of the buildbots have Python 2.3 as their system Python. - -import imp import os +import sys -def find_module(modname): - """Finds and returns a module in the local dist/checkout. - """ - modpath = os.path.join( - os.path.dirname(os.path.dirname(__file__)), "Lib") - return imp.load_module(modname, *imp.find_module(modname, [modpath])) +try: + from importlib.machinery import SourceFileLoader +except ImportError: + import imp + + def find_module(modname): + """Finds and returns a module in the local dist/checkout. + """ + modpath = os.path.join( + os.path.dirname(os.path.dirname(__file__)), "Lib") + return imp.load_module(modname, *imp.find_module(modname, [modpath])) +else: + def find_module(modname): + """Finds and returns a module in the local dist/checkout. + """ + modpath = os.path.join( + os.path.dirname(os.path.dirname(__file__)), "Lib", modname + ".py") + return SourceFileLoader(modname, modpath).load_module() + def write_contents(f): """Write C code contents to the target file object. """ - opcode = find_module("opcode") + opcode = find_module('opcode') targets = ['_unknown_opcode'] * 256 for opname, op in opcode.opmap.items(): targets[op] = "TARGET_%s" % opname @@ -29,15 +39,17 @@ def write_contents(f): f.write("\n};\n") -if __name__ == "__main__": - import sys - assert len(sys.argv) < 3, "Too many arguments" +def main(): + if len(sys.argv) >= 3: + sys.exit("Too many arguments") if len(sys.argv) == 2: target = sys.argv[1] else: target = "Python/opcode_targets.h" - f = open(target, "w") - try: + with open(target, "w") as f: write_contents(f) - finally: - f.close() + print("Jump table written into %s" % target) + + +if __name__ == "__main__": + main() diff --git a/Python/marshal.c b/Python/marshal.c index 5b8de99..627a842 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -263,10 +263,10 @@ w_ref(PyObject *v, char *flag, WFILE *p) if (Py_REFCNT(v) == 1) return 0; - entry = _Py_hashtable_get_entry(p->hashtable, v); + entry = _Py_HASHTABLE_GET_ENTRY(p->hashtable, v); if (entry != NULL) { /* write the reference index to the stream */ - _Py_HASHTABLE_ENTRY_READ_DATA(p->hashtable, &w, sizeof(w), entry); + _Py_HASHTABLE_ENTRY_READ_DATA(p->hashtable, entry, w); /* we don't store "long" indices in the dict */ assert(0 <= w && w <= 0x7fffffff); w_byte(TYPE_REF, p); @@ -571,7 +571,8 @@ static int w_init_refs(WFILE *wf, int version) { if (version >= 3) { - wf->hashtable = _Py_hashtable_new(sizeof(int), _Py_hashtable_hash_ptr, + wf->hashtable = _Py_hashtable_new(sizeof(PyObject *), sizeof(int), + _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct); if (wf->hashtable == NULL) { PyErr_NoMemory(); @@ -582,9 +583,13 @@ w_init_refs(WFILE *wf, int version) } static int -w_decref_entry(_Py_hashtable_entry_t *entry, void *Py_UNUSED(data)) +w_decref_entry(_Py_hashtable_t *ht, _Py_hashtable_entry_t *entry, + void *Py_UNUSED(data)) { - Py_XDECREF(entry->key); + PyObject *entry_key; + + _Py_HASHTABLE_ENTRY_READ_KEY(ht, entry, entry_key); + Py_XDECREF(entry_key); return 0; } @@ -643,7 +648,7 @@ typedef struct { PyObject *refs; /* a list */ } RFILE; -static char * +static const char * r_string(Py_ssize_t n, RFILE *p) { Py_ssize_t read = -1; @@ -729,7 +734,7 @@ r_byte(RFILE *p) c = getc(p->fp); } else { - char *ptr = r_string(1, p); + const char *ptr = r_string(1, p); if (ptr != NULL) c = *(unsigned char *) ptr; } @@ -740,9 +745,9 @@ static int r_short(RFILE *p) { short x = -1; - unsigned char *buffer; + const unsigned char *buffer; - buffer = (unsigned char *) r_string(2, p); + buffer = (const unsigned char *) r_string(2, p); if (buffer != NULL) { x = buffer[0]; x |= buffer[1] << 8; @@ -756,9 +761,9 @@ static long r_long(RFILE *p) { long x = -1; - unsigned char *buffer; + const unsigned char *buffer; - buffer = (unsigned char *) r_string(4, p); + buffer = (const unsigned char *) r_string(4, p); if (buffer != NULL) { x = buffer[0]; x |= (long)buffer[1] << 8; @@ -978,7 +983,8 @@ r_object(RFILE *p) case TYPE_FLOAT: { - char buf[256], *ptr; + char buf[256]; + const char *ptr; double dx; n = r_byte(p); if (n == EOF) { @@ -1001,9 +1007,9 @@ r_object(RFILE *p) case TYPE_BINARY_FLOAT: { - unsigned char *buf; + const unsigned char *buf; double x; - buf = (unsigned char *) r_string(8, p); + buf = (const unsigned char *) r_string(8, p); if (buf == NULL) break; x = _PyFloat_Unpack8(buf, 1); @@ -1016,7 +1022,8 @@ r_object(RFILE *p) case TYPE_COMPLEX: { - char buf[256], *ptr; + char buf[256]; + const char *ptr; Py_complex c; n = r_byte(p); if (n == EOF) { @@ -1053,15 +1060,15 @@ r_object(RFILE *p) case TYPE_BINARY_COMPLEX: { - unsigned char *buf; + const unsigned char *buf; Py_complex c; - buf = (unsigned char *) r_string(8, p); + buf = (const unsigned char *) r_string(8, p); if (buf == NULL) break; c.real = _PyFloat_Unpack8(buf, 1); if (c.real == -1.0 && PyErr_Occurred()) break; - buf = (unsigned char *) r_string(8, p); + buf = (const unsigned char *) r_string(8, p); if (buf == NULL) break; c.imag = _PyFloat_Unpack8(buf, 1); @@ -1074,7 +1081,7 @@ r_object(RFILE *p) case TYPE_STRING: { - char *ptr; + const char *ptr; n = r_long(p); if (PyErr_Occurred()) break; @@ -1119,7 +1126,7 @@ r_object(RFILE *p) } _read_ascii: { - char *ptr; + const char *ptr; ptr = r_string(n, p); if (ptr == NULL) break; @@ -1137,7 +1144,7 @@ r_object(RFILE *p) is_interned = 1; case TYPE_UNICODE: { - char *buffer; + const char *buffer; n = r_long(p); if (PyErr_Occurred()) @@ -1264,41 +1271,52 @@ r_object(RFILE *p) PyErr_SetString(PyExc_ValueError, "bad marshal data (set size out of range)"); break; } - v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); - 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 ) { - if (!PyErr_Occurred()) - PyErr_SetString(PyExc_TypeError, - "NULL object in marshal data for set"); - Py_DECREF(v); - v = NULL; + if (n == 0 && type == TYPE_FROZENSET) { + /* call frozenset() to get the empty frozenset singleton */ + v = PyObject_CallFunction((PyObject*)&PyFrozenSet_Type, NULL); + if (v == NULL) break; + R_REF(v); + retval = v; + } + else { + v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL); + 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 (PySet_Add(v, v2) == -1) { - Py_DECREF(v); - Py_DECREF(v2); - v = NULL; + if (v == NULL) break; + + for (i = 0; i < n; i++) { + v2 = r_object(p); + if ( v2 == NULL ) { + if (!PyErr_Occurred()) + PyErr_SetString(PyExc_TypeError, + "NULL object in marshal data for set"); + Py_DECREF(v); + v = NULL; + break; + } + if (PySet_Add(v, v2) == -1) { + Py_DECREF(v); + Py_DECREF(v2); + v = NULL; + break; + } + Py_DECREF(v2); } - Py_DECREF(v2); + if (type != TYPE_SET) + v = r_ref_insert(v, idx, flag, p); + retval = v; } - if (type != TYPE_SET) - v = r_ref_insert(v, idx, flag, p); - retval = v; break; case TYPE_CODE: diff --git a/Python/modsupport.c b/Python/modsupport.c index 0d09371..dac18be 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -318,7 +318,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) case 'U': /* XXX deprecated alias */ { PyObject *v; - char *str = va_arg(*p_va, char *); + const char *str = va_arg(*p_va, const char *); Py_ssize_t n; if (**p_format == '#') { ++*p_format; @@ -351,7 +351,7 @@ do_mkvalue(const char **p_format, va_list *p_va, int flags) case 'y': { PyObject *v; - char *str = va_arg(*p_va, char *); + const char *str = va_arg(*p_va, const char *); Py_ssize_t n; if (**p_format == '#') { ++*p_format; diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c index 98429d4..a85790e 100644 --- a/Python/mystrtoul.c +++ b/Python/mystrtoul.c @@ -17,7 +17,7 @@ * smallmax[base] is the largest unsigned long i such that * i * base doesn't overflow unsigned long. */ -static unsigned long smallmax[] = { +static const unsigned long smallmax[] = { 0, /* bases 0 and 1 are invalid */ 0, ULONG_MAX / 2, @@ -62,14 +62,14 @@ static unsigned long smallmax[] = { * Note that this is pessimistic if sizeof(long) > 4. */ #if SIZEOF_LONG == 4 -static int digitlimit[] = { +static const int digitlimit[] = { 0, 0, 32, 20, 16, 13, 12, 11, 10, 10, /* 0 - 9 */ 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, /* 10 - 19 */ 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, /* 20 - 29 */ 6, 6, 6, 6, 6, 6, 6}; /* 30 - 36 */ #elif SIZEOF_LONG == 8 /* [int(math.floor(math.log(2**64, i))) for i in range(2, 37)] */ -static int digitlimit[] = { +static const int digitlimit[] = { 0, 0, 64, 40, 32, 27, 24, 22, 21, 20, /* 0 - 9 */ 19, 18, 17, 17, 16, 16, 16, 15, 15, 15, /* 10 - 19 */ 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, /* 20 - 29 */ diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 19259e1..6182e80 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -133,7 +133,7 @@ static void *opcode_targets[256] = { &&TARGET_CALL_FUNCTION, &&TARGET_MAKE_FUNCTION, &&TARGET_BUILD_SLICE, - &&TARGET_MAKE_CLOSURE, + &&_unknown_opcode, &&TARGET_LOAD_CLOSURE, &&TARGET_LOAD_DEREF, &&TARGET_STORE_DEREF, @@ -154,8 +154,8 @@ static void *opcode_targets[256] = { &&TARGET_BUILD_TUPLE_UNPACK, &&TARGET_BUILD_SET_UNPACK, &&TARGET_SETUP_ASYNC_WITH, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_FORMAT_VALUE, + &&TARGET_BUILD_CONST_KEY_MAP, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, diff --git a/Python/peephole.c b/Python/peephole.c index 4e657fa..62625f7 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -8,8 +8,8 @@ #include "code.h" #include "symtable.h" #include "opcode.h" +#include "wordcode_helpers.h" -#define GETARG(arr, i) ((int)((arr[i+2]<<8) + arr[i+1])) #define UNCONDITIONAL_JUMP(op) (op==JUMP_ABSOLUTE || op==JUMP_FORWARD) #define CONDITIONAL_JUMP(op) (op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP) @@ -17,22 +17,15 @@ || op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP) #define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP) -#define GETJUMPTGT(arr, i) (GETARG(arr,i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+3)) -#define SETARG(arr, i, val) do { \ - assert(0 <= val && val <= 0xffff); \ - arr[i+2] = (unsigned char)(((unsigned int)val)>>8); \ - arr[i+1] = (unsigned char)(((unsigned int)val) & 255); \ -} while(0) -#define CODESIZE(op) (HAS_ARG(op) ? 3 : 1) -#define ISBASICBLOCK(blocks, start, bytes) \ - (blocks[start]==blocks[start+bytes-1]) +#define GETJUMPTGT(arr, i) (get_arg(arr, i) + (ABSOLUTE_JUMP(arr[i]) ? 0 : i+2)) +#define ISBASICBLOCK(blocks, start, end) \ + (blocks[start]==blocks[end]) #define CONST_STACK_CREATE() { \ const_stack_size = 256; \ const_stack = PyMem_New(PyObject *, const_stack_size); \ - load_const_stack = PyMem_New(Py_ssize_t, const_stack_size); \ - if (!const_stack || !load_const_stack) { \ + if (!const_stack) { \ PyErr_NoMemory(); \ goto exitError; \ } \ @@ -41,27 +34,23 @@ #define CONST_STACK_DELETE() do { \ if (const_stack) \ PyMem_Free(const_stack); \ - if (load_const_stack) \ - PyMem_Free(load_const_stack); \ } while(0) -#define CONST_STACK_LEN() (const_stack_top + 1) +#define CONST_STACK_LEN() ((unsigned)(const_stack_top + 1)) #define CONST_STACK_PUSH_OP(i) do { \ PyObject *_x; \ assert(codestr[i] == LOAD_CONST); \ - assert(PyList_GET_SIZE(consts) > GETARG(codestr, i)); \ - _x = PyList_GET_ITEM(consts, GETARG(codestr, i)); \ + assert(PyList_GET_SIZE(consts) > (Py_ssize_t)get_arg(codestr, i)); \ + _x = PyList_GET_ITEM(consts, get_arg(codestr, i)); \ if (++const_stack_top >= const_stack_size) { \ const_stack_size *= 2; \ PyMem_Resize(const_stack, PyObject *, const_stack_size); \ - PyMem_Resize(load_const_stack, Py_ssize_t, const_stack_size); \ - if (!const_stack || !load_const_stack) { \ + if (!const_stack) { \ PyErr_NoMemory(); \ goto exitError; \ } \ } \ - load_const_stack[const_stack_top] = i; \ const_stack[const_stack_top] = _x; \ in_consts = 1; \ } while(0) @@ -70,22 +59,108 @@ const_stack_top = -1; \ } while(0) -#define CONST_STACK_TOP() \ - const_stack[const_stack_top] - #define CONST_STACK_LASTN(i) \ - &const_stack[const_stack_top - i + 1] + &const_stack[CONST_STACK_LEN() - i] #define CONST_STACK_POP(i) do { \ - assert(const_stack_top + 1 >= i); \ + assert(CONST_STACK_LEN() >= i); \ const_stack_top -= i; \ } while(0) -#define CONST_STACK_OP_LASTN(i) \ - ((const_stack_top >= i - 1) ? load_const_stack[const_stack_top - i + 1] : -1) +/* Scans back N consecutive LOAD_CONST instructions, skipping NOPs, + returns index of the Nth last's LOAD_CONST's EXTENDED_ARG prefix. + Callers are responsible to check CONST_STACK_LEN beforehand. +*/ +static Py_ssize_t +lastn_const_start(unsigned char *codestr, Py_ssize_t i, Py_ssize_t n) +{ + assert(n > 0 && (i&1) == 0); + for (;;) { + i -= 2; + assert(i >= 0); + if (codestr[i] == LOAD_CONST) { + if (!--n) { + while (i > 0 && codestr[i-2] == EXTENDED_ARG) { + i -= 2; + } + return i; + } + } + else { + assert(codestr[i] == NOP || codestr[i] == EXTENDED_ARG); + } + } +} + +/* Scans through EXTENDED ARGs, seeking the index of the effective opcode */ +static Py_ssize_t +find_op(unsigned char *codestr, Py_ssize_t i) +{ + assert((i&1) == 0); + while (codestr[i] == EXTENDED_ARG) { + i += 2; + } + return i; +} + +/* Given the index of the effective opcode, + scan back to construct the oparg with EXTENDED_ARG */ +static unsigned int +get_arg(unsigned char *codestr, Py_ssize_t i) +{ + unsigned int oparg = codestr[i+1]; + assert((i&1) == 0); + if (i >= 2 && codestr[i-2] == EXTENDED_ARG) { + oparg |= codestr[i-1] << 8; + if (i >= 4 && codestr[i-4] == EXTENDED_ARG) { + oparg |= codestr[i-3] << 16; + if (i >= 6 && codestr[i-6] == EXTENDED_ARG) { + oparg |= codestr[i-5] << 24; + } + } + } + return oparg; +} + +/* Given the index of the effective opcode, + attempt to replace the argument, taking into account EXTENDED_ARG. + Returns -1 on failure, or the new op index on success */ +static Py_ssize_t +set_arg(unsigned char *codestr, Py_ssize_t i, unsigned int oparg) +{ + unsigned int curarg = get_arg(codestr, i); + int curilen, newilen; + if (curarg == oparg) + return i; + curilen = instrsize(curarg); + newilen = instrsize(oparg); + if (curilen < newilen) { + return -1; + } + + write_op_arg(codestr + i + 2 - curilen, codestr[i], oparg, newilen); + memset(codestr + i + 2 - curilen + newilen, NOP, curilen - newilen); + return i-curilen+newilen; +} +/* Attempt to write op/arg at end of specified region of memory. + Preceding memory in the region is overwritten with NOPs. + Returns -1 on failure, op index on success */ +static Py_ssize_t +copy_op_arg(unsigned char *codestr, Py_ssize_t i, unsigned char op, + unsigned int oparg, Py_ssize_t maxi) +{ + int ilen = instrsize(oparg); + assert((i&1) == 0); + if (i + ilen > maxi) { + return -1; + } + write_op_arg(codestr + maxi - ilen, op, oparg, ilen); + memset(codestr + i, NOP, maxi - i - ilen); + return maxi - 2; +} -/* Replace LOAD_CONST c1. LOAD_CONST c2 ... LOAD_CONST cn BUILD_TUPLE n +/* Replace LOAD_CONST c1, LOAD_CONST c2 ... LOAD_CONST cn, BUILD_TUPLE n with LOAD_CONST (c1, c2, ... cn). The consts table must still be in list form so that the new constant (c1, c2, ... cn) can be appended. @@ -94,9 +169,10 @@ Also works for BUILD_LIST and BUILT_SET when followed by an "in" or "not in" test; for BUILD_SET it assembles a frozenset rather than a tuple. */ -static int -tuple_of_constants(unsigned char *codestr, Py_ssize_t n, - PyObject *consts, PyObject **objs) +static Py_ssize_t +fold_tuple_on_constants(unsigned char *codestr, Py_ssize_t c_start, + Py_ssize_t opcode_end, unsigned char opcode, + PyObject *consts, PyObject **objs, int n) { PyObject *newconst, *constant; Py_ssize_t i, len_consts; @@ -106,9 +182,9 @@ tuple_of_constants(unsigned char *codestr, Py_ssize_t n, /* Buildup new tuple of constants */ newconst = PyTuple_New(n); - if (newconst == NULL) - return 0; - len_consts = PyList_GET_SIZE(consts); + if (newconst == NULL) { + return -1; + } for (i=0 ; i<n ; i++) { constant = objs[i]; Py_INCREF(constant); @@ -116,30 +192,26 @@ tuple_of_constants(unsigned char *codestr, Py_ssize_t n, } /* If it's a BUILD_SET, use the PyTuple we just built to create a - PyFrozenSet, and use that as the constant instead: */ - if (codestr[0] == BUILD_SET) { - PyObject *tuple = newconst; - newconst = PyFrozenSet_New(tuple); - Py_DECREF(tuple); - if (newconst == NULL) - return 0; + PyFrozenSet, and use that as the constant instead: */ + if (opcode == BUILD_SET) { + Py_SETREF(newconst, PyFrozenSet_New(newconst)); + if (newconst == NULL) { + return -1; + } } /* Append folded constant onto consts */ + len_consts = PyList_GET_SIZE(consts); if (PyList_Append(consts, newconst)) { Py_DECREF(newconst); - return 0; + return -1; } Py_DECREF(newconst); - /* Write NOPs over old LOAD_CONSTS and - add a new LOAD_CONST newconst on top of the BUILD_TUPLE n */ - codestr[0] = LOAD_CONST; - SETARG(codestr, 0, len_consts); - return 1; + return copy_op_arg(codestr, c_start, LOAD_CONST, len_consts, opcode_end); } -/* Replace LOAD_CONST c1. LOAD_CONST c2 BINOP +/* Replace LOAD_CONST c1, LOAD_CONST c2, BINOP with LOAD_CONST binop(c1,c2) The consts table must still be in list form so that the new constant can be appended. @@ -149,20 +221,21 @@ tuple_of_constants(unsigned char *codestr, Py_ssize_t n, is below a threshold value. That keeps pyc files from becoming large in the presence of code like: (None,)*1000. */ -static int -fold_binops_on_constants(unsigned char *codestr, PyObject *consts, PyObject **objs) +static Py_ssize_t +fold_binops_on_constants(unsigned char *codestr, Py_ssize_t c_start, + Py_ssize_t opcode_end, unsigned char opcode, + PyObject *consts, PyObject **objs) { PyObject *newconst, *v, *w; Py_ssize_t len_consts, size; - int opcode; /* Pre-conditions */ assert(PyList_CheckExact(consts)); + len_consts = PyList_GET_SIZE(consts); /* Create new constant */ v = objs[0]; w = objs[1]; - opcode = codestr[0]; switch (opcode) { case BINARY_POWER: newconst = PyNumber_Power(v, w, Py_None); @@ -208,50 +281,48 @@ fold_binops_on_constants(unsigned char *codestr, PyObject *consts, PyObject **ob PyErr_Format(PyExc_SystemError, "unexpected binary operation %d on a constant", opcode); - return 0; + return -1; } if (newconst == NULL) { - if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) + if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) { PyErr_Clear(); - return 0; + } + return -1; } size = PyObject_Size(newconst); if (size == -1) { - if (PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) - return 0; + if (PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) { + return -1; + } PyErr_Clear(); } else if (size > 20) { Py_DECREF(newconst); - return 0; + return -1; } /* Append folded constant into consts table */ - len_consts = PyList_GET_SIZE(consts); if (PyList_Append(consts, newconst)) { Py_DECREF(newconst); - return 0; + return -1; } Py_DECREF(newconst); - /* Write NOP NOP NOP NOP LOAD_CONST newconst */ - codestr[-2] = LOAD_CONST; - SETARG(codestr, -2, len_consts); - return 1; + return copy_op_arg(codestr, c_start, LOAD_CONST, len_consts, opcode_end); } -static int -fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts, PyObject *v) +static Py_ssize_t +fold_unaryops_on_constants(unsigned char *codestr, Py_ssize_t c_start, + Py_ssize_t opcode_end, unsigned char opcode, + PyObject *consts, PyObject *v) { PyObject *newconst; Py_ssize_t len_consts; - int opcode; /* Pre-conditions */ assert(PyList_CheckExact(consts)); - assert(codestr[0] == LOAD_CONST); + len_consts = PyList_GET_SIZE(consts); /* Create new constant */ - opcode = codestr[3]; switch (opcode) { case UNARY_NEGATIVE: newconst = PyNumber_Negative(v); @@ -267,35 +338,31 @@ fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts, PyObject *v PyErr_Format(PyExc_SystemError, "unexpected unary operation %d on a constant", opcode); - return 0; + return -1; } if (newconst == NULL) { - if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) + if(!PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) { PyErr_Clear(); - return 0; + } + return -1; } /* Append folded constant into consts table */ - len_consts = PyList_GET_SIZE(consts); if (PyList_Append(consts, newconst)) { Py_DECREF(newconst); PyErr_Clear(); - return 0; + return -1; } Py_DECREF(newconst); - /* Write NOP LOAD_CONST newconst */ - codestr[0] = NOP; - codestr[1] = LOAD_CONST; - SETARG(codestr, 1, len_consts); - return 1; + return copy_op_arg(codestr, c_start, LOAD_CONST, len_consts, opcode_end); } static unsigned int * markblocks(unsigned char *code, Py_ssize_t len) { unsigned int *blocks = PyMem_New(unsigned int, len); - int i,j, opcode, blockcnt = 0; + int i, j, opcode, blockcnt = 0; if (blocks == NULL) { PyErr_NoMemory(); @@ -304,7 +371,7 @@ markblocks(unsigned char *code, Py_ssize_t len) memset(blocks, 0, len*sizeof(int)); /* Mark labels in the first pass */ - for (i=0 ; i<len ; i+=CODESIZE(opcode)) { + for (i=0 ; i<len ; i+=2) { opcode = code[i]; switch (opcode) { case FOR_ITER: @@ -326,7 +393,7 @@ markblocks(unsigned char *code, Py_ssize_t len) } } /* Build block numbers in the second pass */ - for (i=0 ; i<len ; i++) { + for (i=0 ; i<len ; i+=2) { blockcnt += blocks[i]; /* increment blockcnt over labels */ blocks[i] = blockcnt; } @@ -337,33 +404,27 @@ markblocks(unsigned char *code, Py_ssize_t len) The consts object should still be in list form to allow new constants to be appended. - To keep the optimizer simple, it bails out (does nothing) for code that - has a length over 32,700, and does not calculate extended arguments. - That allows us to avoid overflow and sign issues. Likewise, it bails when - the lineno table has complex encoding for gaps >= 255. EXTENDED_ARG can - appear before MAKE_FUNCTION; in this case both opcodes are skipped. - EXTENDED_ARG preceding any other opcode causes the optimizer to bail. + To keep the optimizer simple, it bails when the lineno table has complex + encoding for gaps >= 255. Optimizations are restricted to simple transformations occurring within a single basic block. All transformations keep the code size the same or smaller. For those that reduce size, the gaps are initially filled with NOPs. Later those NOPs are removed and the jump addresses retargeted in - a single pass. Line numbering is adjusted accordingly. */ + a single pass. */ PyObject * PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, - PyObject *lineno_obj) + PyObject *lnotab_obj) { - Py_ssize_t i, j, codelen; - int nops, h, adj; - int tgt, tgttgt, opcode; + Py_ssize_t h, i, nexti, op_start, codelen, tgt; + unsigned int j, nops; + unsigned char opcode, nextop; unsigned char *codestr = NULL; - unsigned char *lineno; - int *addrmap = NULL; - int new_line, cum_orig_line, last_line; + unsigned char *lnotab; + unsigned int cum_orig_offset, last_offset; Py_ssize_t tabsiz; PyObject **const_stack = NULL; - Py_ssize_t *load_const_stack = NULL; Py_ssize_t const_stack_top = -1; Py_ssize_t const_stack_size = 0; int in_consts = 0; /* whether we are in a LOAD_CONST sequence */ @@ -373,18 +434,21 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, if (PyErr_Occurred()) goto exitError; - /* Bypass optimization when the lineno table is too complex */ - assert(PyBytes_Check(lineno_obj)); - lineno = (unsigned char*)PyBytes_AS_STRING(lineno_obj); - tabsiz = PyBytes_GET_SIZE(lineno_obj); - if (memchr(lineno, 255, tabsiz) != NULL) + /* Bypass optimization when the lnotab table is too complex */ + assert(PyBytes_Check(lnotab_obj)); + lnotab = (unsigned char*)PyBytes_AS_STRING(lnotab_obj); + tabsiz = PyBytes_GET_SIZE(lnotab_obj); + assert(tabsiz == 0 || Py_REFCNT(lnotab_obj) == 1); + if (memchr(lnotab, 255, tabsiz) != NULL) { + /* 255 value are used for multibyte bytecode instructions */ goto exitUnchanged; + } + /* Note: -128 and 127 special values for line number delta are ok, + the peephole optimizer doesn't modify line numbers. */ - /* Avoid situations where jump retargeting could overflow */ assert(PyBytes_Check(code)); codelen = PyBytes_GET_SIZE(code); - if (codelen > 32700) - goto exitUnchanged; + assert(codelen % 2 == 0); /* Make a modifiable copy of the code string */ codestr = (unsigned char *)PyMem_Malloc(codelen); @@ -395,21 +459,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, codestr = (unsigned char *)memcpy(codestr, PyBytes_AS_STRING(code), codelen); - /* Verify that RETURN_VALUE terminates the codestring. This allows - the various transformation patterns to look ahead several - instructions without additional checks to make sure they are not - looking beyond the end of the code string. - */ - if (codestr[codelen-1] != RETURN_VALUE) - goto exitUnchanged; - - /* Mapping to new jump targets after NOPs are removed */ - addrmap = PyMem_New(int, codelen); - if (addrmap == NULL) { - PyErr_NoMemory(); - goto exitError; - } - blocks = markblocks(codestr, codelen); if (blocks == NULL) goto exitError; @@ -417,9 +466,17 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, CONST_STACK_CREATE(); - for (i=0 ; i<codelen ; i += CODESIZE(codestr[i])) { - reoptimize_current: + for (i=find_op(codestr, 0) ; i<codelen ; i=nexti) { opcode = codestr[i]; + op_start = i; + while (op_start >= 2 && codestr[op_start-2] == EXTENDED_ARG) { + op_start -= 2; + } + + nexti = i + 2; + while (nexti < codelen && codestr[nexti] == EXTENDED_ARG) + nexti += 2; + nextop = nexti < codelen ? codestr[nexti] : 0; if (!in_consts) { CONST_STACK_RESET(); @@ -430,14 +487,12 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Replace UNARY_NOT POP_JUMP_IF_FALSE with POP_JUMP_IF_TRUE */ case UNARY_NOT: - if (codestr[i+1] != POP_JUMP_IF_FALSE - || !ISBASICBLOCK(blocks,i,4)) - continue; - j = GETARG(codestr, i+1); - codestr[i] = POP_JUMP_IF_TRUE; - SETARG(codestr, i, j); - codestr[i+3] = NOP; - goto reoptimize_current; + if (nextop != POP_JUMP_IF_FALSE + || !ISBASICBLOCK(blocks, op_start, i+2)) + break; + memset(codestr + op_start, NOP, i - op_start + 2); + codestr[nexti] = POP_JUMP_IF_TRUE; + break; /* not a is b --> a is not b not a in b --> a not in b @@ -445,78 +500,79 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, not a not in b --> a in b */ case COMPARE_OP: - j = GETARG(codestr, i); - if (j < 6 || j > 9 || - codestr[i+3] != UNARY_NOT || - !ISBASICBLOCK(blocks,i,4)) - continue; - SETARG(codestr, i, (j^1)); - codestr[i+3] = NOP; + j = get_arg(codestr, i); + if (j < 6 || j > 9 || + nextop != UNARY_NOT || + !ISBASICBLOCK(blocks, op_start, i + 2)) + break; + codestr[i+1] = (j^1); + memset(codestr + i + 2, NOP, nexti - i); break; /* Skip over LOAD_CONST trueconst - POP_JUMP_IF_FALSE xx. This improves - "while 1" performance. */ + POP_JUMP_IF_FALSE xx. This improves + "while 1" performance. */ case LOAD_CONST: CONST_STACK_PUSH_OP(i); - j = GETARG(codestr, i); - if (codestr[i+3] != POP_JUMP_IF_FALSE || - !ISBASICBLOCK(blocks,i,6) || - !PyObject_IsTrue(PyList_GET_ITEM(consts, j))) - continue; - memset(codestr+i, NOP, 6); - CONST_STACK_RESET(); + if (nextop != POP_JUMP_IF_FALSE || + !ISBASICBLOCK(blocks, op_start, i + 2) || + !PyObject_IsTrue(PyList_GET_ITEM(consts, get_arg(codestr, i)))) + break; + memset(codestr + op_start, NOP, nexti - op_start + 2); + CONST_STACK_POP(1); break; - /* Try to fold tuples of constants (includes a case for lists and sets - which are only used for "in" and "not in" tests). + /* Try to fold tuples of constants (includes a case for lists + and sets which are only used for "in" and "not in" tests). Skip over BUILD_SEQN 1 UNPACK_SEQN 1. Replace BUILD_SEQN 2 UNPACK_SEQN 2 with ROT2. Replace BUILD_SEQN 3 UNPACK_SEQN 3 with ROT3 ROT2. */ case BUILD_TUPLE: case BUILD_LIST: case BUILD_SET: - j = GETARG(codestr, i); - if (j == 0) - break; - h = CONST_STACK_OP_LASTN(j); - assert((h >= 0 || CONST_STACK_LEN() < j)); - if (h >= 0 && j > 0 && j <= CONST_STACK_LEN() && - ((opcode == BUILD_TUPLE && - ISBASICBLOCK(blocks, h, i-h+3)) || - ((opcode == BUILD_LIST || opcode == BUILD_SET) && - codestr[i+3]==COMPARE_OP && - ISBASICBLOCK(blocks, h, i-h+6) && - (GETARG(codestr,i+3)==6 || - GETARG(codestr,i+3)==7))) && - tuple_of_constants(&codestr[i], j, consts, CONST_STACK_LASTN(j))) { - assert(codestr[i] == LOAD_CONST); - memset(&codestr[h], NOP, i - h); - CONST_STACK_POP(j); - CONST_STACK_PUSH_OP(i); - break; + j = get_arg(codestr, i); + if (j > 0 && CONST_STACK_LEN() >= j) { + h = lastn_const_start(codestr, op_start, j); + if ((opcode == BUILD_TUPLE && + ISBASICBLOCK(blocks, h, op_start)) || + ((opcode == BUILD_LIST || opcode == BUILD_SET) && + ((nextop==COMPARE_OP && + (codestr[nexti+1]==6 || + codestr[nexti+1]==7)) || + nextop == GET_ITER) && ISBASICBLOCK(blocks, h, i + 2))) { + h = fold_tuple_on_constants(codestr, h, i+2, opcode, + consts, CONST_STACK_LASTN(j), j); + if (h >= 0) { + CONST_STACK_POP(j); + CONST_STACK_PUSH_OP(h); + } + break; + } } - if (codestr[i+3] != UNPACK_SEQUENCE || - !ISBASICBLOCK(blocks,i,6) || - j != GETARG(codestr, i+3) || + if (nextop != UNPACK_SEQUENCE || + !ISBASICBLOCK(blocks, op_start, i + 2) || + j != get_arg(codestr, nexti) || opcode == BUILD_SET) - continue; - if (j == 1) { - memset(codestr+i, NOP, 6); + break; + if (j < 2) { + memset(codestr+op_start, NOP, nexti - op_start + 2); } else if (j == 2) { - codestr[i] = ROT_TWO; - memset(codestr+i+1, NOP, 5); + codestr[op_start] = ROT_TWO; + codestr[op_start + 1] = 0; + memset(codestr + op_start + 2, NOP, nexti - op_start); CONST_STACK_RESET(); } else if (j == 3) { - codestr[i] = ROT_THREE; - codestr[i+1] = ROT_TWO; - memset(codestr+i+2, NOP, 4); + codestr[op_start] = ROT_THREE; + codestr[op_start + 1] = 0; + codestr[op_start + 2] = ROT_TWO; + codestr[op_start + 3] = 0; + memset(codestr + op_start + 4, NOP, nexti - op_start - 2); CONST_STACK_RESET(); } break; /* Fold binary ops on constants. - LOAD_CONST c1 LOAD_CONST c2 BINOP --> LOAD_CONST binop(c1,c2) */ + LOAD_CONST c1 LOAD_CONST c2 BINOP --> LOAD_CONST binop(c1,c2) */ case BINARY_POWER: case BINARY_MULTIPLY: case BINARY_TRUE_DIVIDE: @@ -530,35 +586,34 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case BINARY_AND: case BINARY_XOR: case BINARY_OR: - /* NOTE: LOAD_CONST is saved at `i-2` since it has an arg - while BINOP hasn't */ - h = CONST_STACK_OP_LASTN(2); - assert((h >= 0 || CONST_STACK_LEN() < 2)); - if (h >= 0 && - ISBASICBLOCK(blocks, h, i-h+1) && - fold_binops_on_constants(&codestr[i], consts, CONST_STACK_LASTN(2))) { - i -= 2; - memset(&codestr[h], NOP, i - h); - assert(codestr[i] == LOAD_CONST); - CONST_STACK_POP(2); - CONST_STACK_PUSH_OP(i); + if (CONST_STACK_LEN() < 2) + break; + h = lastn_const_start(codestr, op_start, 2); + if (ISBASICBLOCK(blocks, h, op_start)) { + h = fold_binops_on_constants(codestr, h, i+2, opcode, + consts, CONST_STACK_LASTN(2)); + if (h >= 0) { + CONST_STACK_POP(2); + CONST_STACK_PUSH_OP(h); + } } break; /* Fold unary ops on constants. - LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */ + LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */ case UNARY_NEGATIVE: case UNARY_INVERT: case UNARY_POSITIVE: - h = CONST_STACK_OP_LASTN(1); - assert((h >= 0 || CONST_STACK_LEN() < 1)); - if (h >= 0 && - ISBASICBLOCK(blocks, h, i-h+1) && - fold_unaryops_on_constants(&codestr[i-3], consts, CONST_STACK_TOP())) { - i -= 2; - assert(codestr[i] == LOAD_CONST); - CONST_STACK_POP(1); - CONST_STACK_PUSH_OP(i); + if (CONST_STACK_LEN() < 1) + break; + h = lastn_const_start(codestr, op_start, 1); + if (ISBASICBLOCK(blocks, h, op_start)) { + h = fold_unaryops_on_constants(codestr, h, i+2, opcode, + consts, *CONST_STACK_LASTN(1)); + if (h >= 0) { + CONST_STACK_POP(1); + CONST_STACK_PUSH_OP(h); + } } break; @@ -573,25 +628,24 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, x:JUMP_IF_FALSE_OR_POP y y:JUMP_IF_FALSE_OR_POP z --> x:JUMP_IF_FALSE_OR_POP z x:JUMP_IF_FALSE_OR_POP y y:JUMP_IF_TRUE_OR_POP z - --> x:POP_JUMP_IF_FALSE y+3 - where y+3 is the instruction following the second test. + --> x:POP_JUMP_IF_FALSE y+2 + where y+2 is the instruction following the second test. */ case JUMP_IF_FALSE_OR_POP: case JUMP_IF_TRUE_OR_POP: - tgt = GETJUMPTGT(codestr, i); + h = get_arg(codestr, i); + tgt = find_op(codestr, h); + j = codestr[tgt]; if (CONDITIONAL_JUMP(j)) { /* NOTE: all possible jumps here are absolute! */ if (JUMPS_ON_TRUE(j) == JUMPS_ON_TRUE(opcode)) { /* The second jump will be - taken iff the first is. */ - tgttgt = GETJUMPTGT(codestr, tgt); - /* The current opcode inherits - its target's stack behaviour */ - codestr[i] = j; - SETARG(codestr, i, tgttgt); - goto reoptimize_current; + taken iff the first is. + The current opcode inherits + its target's stack effect */ + h = set_arg(codestr, i, get_arg(codestr, tgt)); } else { /* The second jump is not taken if the first is (so jump past @@ -600,12 +654,15 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, they're not taken (so change the first jump to pop its argument when it's taken). */ - if (JUMPS_ON_TRUE(opcode)) - codestr[i] = POP_JUMP_IF_TRUE; - else - codestr[i] = POP_JUMP_IF_FALSE; - SETARG(codestr, i, (tgt + 3)); - goto reoptimize_current; + h = set_arg(codestr, i, tgt + 2); + j = opcode == JUMP_IF_TRUE_OR_POP ? + POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE; + } + + if (h >= 0) { + nexti = h; + codestr[nexti] = j; + break; } } /* Intentional fallthrough */ @@ -622,73 +679,73 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case SETUP_FINALLY: case SETUP_WITH: case SETUP_ASYNC_WITH: - tgt = GETJUMPTGT(codestr, i); + h = GETJUMPTGT(codestr, i); + tgt = find_op(codestr, h); /* Replace JUMP_* to a RETURN into just a RETURN */ if (UNCONDITIONAL_JUMP(opcode) && codestr[tgt] == RETURN_VALUE) { - codestr[i] = RETURN_VALUE; - memset(codestr+i+1, NOP, 2); - continue; + codestr[op_start] = RETURN_VALUE; + codestr[op_start + 1] = 0; + memset(codestr + op_start + 2, NOP, i - op_start); + } else if (UNCONDITIONAL_JUMP(codestr[tgt])) { + j = GETJUMPTGT(codestr, tgt); + if (opcode == JUMP_FORWARD) { /* JMP_ABS can go backwards */ + opcode = JUMP_ABSOLUTE; + } else if (!ABSOLUTE_JUMP(opcode)) { + if ((Py_ssize_t)j < i + 2) { + break; /* No backward relative jumps */ + } + j -= i + 2; /* Calc relative jump addr */ + } + copy_op_arg(codestr, op_start, opcode, j, i+2); } - if (!UNCONDITIONAL_JUMP(codestr[tgt])) - continue; - tgttgt = GETJUMPTGT(codestr, tgt); - if (opcode == JUMP_FORWARD) /* JMP_ABS can go backwards */ - opcode = JUMP_ABSOLUTE; - if (!ABSOLUTE_JUMP(opcode)) - tgttgt -= i + 3; /* Calc relative jump addr */ - if (tgttgt < 0) /* No backward relative jumps */ - continue; - codestr[i] = opcode; - SETARG(codestr, i, tgttgt); - break; - - case EXTENDED_ARG: - if (codestr[i+3] != MAKE_FUNCTION) - goto exitUnchanged; - /* don't visit MAKE_FUNCTION as GETARG will be wrong */ - i += 3; break; - /* Replace RETURN LOAD_CONST None RETURN with just RETURN */ - /* Remove unreachable JUMPs after RETURN */ + /* Remove unreachable ops after RETURN */ case RETURN_VALUE: - if (i+4 >= codelen) - continue; - if (codestr[i+4] == RETURN_VALUE && - ISBASICBLOCK(blocks,i,5)) - memset(codestr+i+1, NOP, 4); - else if (UNCONDITIONAL_JUMP(codestr[i+1]) && - ISBASICBLOCK(blocks,i,4)) - memset(codestr+i+1, NOP, 3); + h = i + 2; + while (h + 2 < codelen && ISBASICBLOCK(blocks, i, h + 2)) { + h += 2; + } + if (h > i + 2) { + memset(codestr + i + 2, NOP, h - i); + nexti = find_op(codestr, h); + } break; } } - /* Fixup linenotab */ - for (i=0, nops=0 ; i<codelen ; i += CODESIZE(codestr[i])) { + /* Fixup lnotab */ + for (i=0, nops=0 ; i<codelen ; i += 2) { assert(i - nops <= INT_MAX); - addrmap[i] = (int)(i - nops); + /* original code offset => new code offset */ + blocks[i] = i - nops; if (codestr[i] == NOP) - nops++; + nops += 2; } - cum_orig_line = 0; - last_line = 0; + cum_orig_offset = 0; + last_offset = 0; for (i=0 ; i < tabsiz ; i+=2) { - cum_orig_line += lineno[i]; - new_line = addrmap[cum_orig_line]; - assert (new_line - last_line < 255); - lineno[i] =((unsigned char)(new_line - last_line)); - last_line = new_line; + unsigned int offset_delta, new_offset; + cum_orig_offset += lnotab[i]; + assert((cum_orig_offset & 1) == 0); + new_offset = blocks[cum_orig_offset]; + offset_delta = new_offset - last_offset; + assert(offset_delta <= 255); + lnotab[i] = (unsigned char)offset_delta; + last_offset = new_offset; } /* Remove NOPs and fixup jump targets */ - for (i=0, h=0 ; i<codelen ; ) { + for (op_start=0, i=0, h=0 ; i<codelen ; i+=2, op_start=i) { + j = codestr[i+1]; + while (codestr[i] == EXTENDED_ARG) { + i += 2; + j = j<<8 | codestr[i+1]; + } opcode = codestr[i]; switch (opcode) { - case NOP: - i++; - continue; + case NOP:continue; case JUMP_ABSOLUTE: case CONTINUE_LOOP: @@ -696,8 +753,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case POP_JUMP_IF_TRUE: case JUMP_IF_FALSE_OR_POP: case JUMP_IF_TRUE_OR_POP: - j = addrmap[GETARG(codestr, i)]; - SETARG(codestr, i, j); + j = blocks[j]; break; case FOR_ITER: @@ -707,34 +763,31 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case SETUP_FINALLY: case SETUP_WITH: case SETUP_ASYNC_WITH: - j = addrmap[GETARG(codestr, i) + i + 3] - addrmap[i] - 3; - SETARG(codestr, i, j); + j = blocks[j + i + 2] - blocks[i] - 2; break; } - adj = CODESIZE(opcode); - while (adj--) - codestr[h++] = codestr[i++]; + nexti = i - op_start + 2; + if (instrsize(j) > nexti) + goto exitUnchanged; + /* If instrsize(j) < nexti, we'll emit EXTENDED_ARG 0 */ + write_op_arg(codestr + h, opcode, j, nexti); + h += nexti; } - assert(h + nops == codelen); + assert(h + (Py_ssize_t)nops == codelen); - code = PyBytes_FromStringAndSize((char *)codestr, h); CONST_STACK_DELETE(); - PyMem_Free(addrmap); - PyMem_Free(codestr); PyMem_Free(blocks); + code = PyBytes_FromStringAndSize((char *)codestr, h); + PyMem_Free(codestr); return code; exitError: code = NULL; exitUnchanged: - CONST_STACK_DELETE(); - if (blocks != NULL) - PyMem_Free(blocks); - if (addrmap != NULL) - PyMem_Free(addrmap); - if (codestr != NULL) - PyMem_Free(codestr); Py_XINCREF(code); + CONST_STACK_DELETE(); + PyMem_Free(blocks); + PyMem_Free(codestr); return code; } diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index ce52990..7187fe4 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -154,8 +154,8 @@ Py_SetStandardStreamEncoding(const char *encoding, const char *errors) return 0; } -/* Global initializations. Can be undone by Py_Finalize(). Don't - call this twice without an intervening Py_Finalize() call. When +/* Global initializations. Can be undone by Py_FinalizeEx(). Don't + call this twice without an intervening Py_FinalizeEx() call. When initializations fail, a fatal error is issued and the function does not return. On return, the first thread and interpreter state have been created. @@ -223,6 +223,8 @@ get_locale_encoding(void) return NULL; } return get_codec_name(codeset); +#elif defined(__ANDROID__) + return get_codec_name("UTF-8"); #else PyErr_SetNone(PyExc_NotImplementedError); return NULL; @@ -327,11 +329,11 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) (void) PyThreadState_Swap(tstate); #ifdef WITH_THREAD - /* We can't call _PyEval_FiniThreads() in Py_Finalize because + /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because destroying the GIL might fail when it is being referenced from another running thread (see issue #9901). Instead we destroy the previously created GIL here, which ensures - that we can call Py_Initialize / Py_Finalize multiple times. */ + that we can call Py_Initialize / Py_FinalizeEx multiple times. */ _PyEval_FiniThreads(); /* Auto-thread-state API */ @@ -477,28 +479,35 @@ file_is_closed(PyObject *fobj) return r > 0; } -static void +static int flush_std_files(void) { PyObject *fout = _PySys_GetObjectId(&PyId_stdout); PyObject *ferr = _PySys_GetObjectId(&PyId_stderr); PyObject *tmp; + int status = 0; if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); - if (tmp == NULL) + if (tmp == NULL) { PyErr_WriteUnraisable(fout); + status = -1; + } else Py_DECREF(tmp); } if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { tmp = _PyObject_CallMethodId(ferr, &PyId_flush, ""); - if (tmp == NULL) + if (tmp == NULL) { PyErr_Clear(); + status = -1; + } else Py_DECREF(tmp); } + + return status; } /* Undo the effect of Py_Initialize(). @@ -515,14 +524,15 @@ flush_std_files(void) */ -void -Py_Finalize(void) +int +Py_FinalizeEx(void) { PyInterpreterState *interp; PyThreadState *tstate; + int status = 0; if (!initialized) - return; + return status; wait_for_thread_shutdown(); @@ -547,7 +557,9 @@ Py_Finalize(void) initialized = 0; /* Flush sys.stdout and sys.stderr */ - flush_std_files(); + if (flush_std_files() < 0) { + status = -1; + } /* Disable signal handling */ PyOS_FiniInterrupts(); @@ -576,7 +588,9 @@ Py_Finalize(void) PyImport_Cleanup(); /* Flush sys.stdout and sys.stderr (again, in case more was printed) */ - flush_std_files(); + if (flush_std_files() < 0) { + status = -1; + } /* Collect final garbage. This disposes of cycles created by * class definitions, for example. @@ -680,6 +694,7 @@ Py_Finalize(void) /* Delete current thread. After this, many C API calls become crashy. */ PyThreadState_Swap(NULL); + PyInterpreterState_Delete(interp); #ifdef Py_TRACE_REFS @@ -690,12 +705,22 @@ Py_Finalize(void) if (Py_GETENV("PYTHONDUMPREFS")) _Py_PrintReferenceAddresses(stderr); #endif /* Py_TRACE_REFS */ -#ifdef PYMALLOC_DEBUG - if (Py_GETENV("PYTHONMALLOCSTATS")) - _PyObject_DebugMallocStats(stderr); +#ifdef WITH_PYMALLOC + if (_PyMem_PymallocEnabled()) { + char *opt = Py_GETENV("PYTHONMALLOCSTATS"); + if (opt != NULL && *opt != '\0') + _PyObject_DebugMallocStats(stderr); + } #endif call_ll_exitfuncs(); + return status; +} + +void +Py_Finalize(void) +{ + Py_FinalizeEx(); } /* Create and initialize a new interpreter and thread, and return the @@ -721,6 +746,10 @@ Py_NewInterpreter(void) if (!initialized) Py_FatalError("Py_NewInterpreter: call Py_Initialize first"); + /* Issue #10915, #15751: The GIL API doesn't work with multiple + interpreters: disable PyGILState_Check(). */ + _PyGILState_check_enabled = 0; + interp = PyInterpreterState_New(); if (interp == NULL) return NULL; @@ -777,7 +806,7 @@ Py_NewInterpreter(void) if (initstdio() < 0) Py_FatalError( - "Py_Initialize: can't initialize sys standard streams"); + "Py_Initialize: can't initialize sys standard streams"); initmain(interp); if (!Py_NoSiteFlag) initsite(); @@ -803,7 +832,7 @@ handle_error: frames, and that it is its interpreter's only remaining thread. It is a fatal error to violate these constraints. - (Py_Finalize() doesn't have these constraints -- it zaps + (Py_FinalizeEx() doesn't have these constraints -- it zaps everything, regardless.) Locking: as above. @@ -972,6 +1001,9 @@ is_valid_fd(int fd) if (fd < 0 || !_PyVerify_fd(fd)) return 0; _Py_BEGIN_SUPPRESS_IPH + /* Prefer dup() over fstat(). fstat() can require input/output whereas + dup() doesn't, there is a low risk of EMFILE/ENFILE at Python + startup. */ fd2 = dup(fd); if (fd2 >= 0) close(fd2); @@ -982,8 +1014,8 @@ is_valid_fd(int fd) /* returns Py_None if the fd is not valid */ static PyObject* create_stdio(PyObject* io, - int fd, int write_mode, char* name, - char* encoding, char* errors) + int fd, int write_mode, const char* name, + const char* encoding, const char* errors) { PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; const char* mode; @@ -1013,7 +1045,8 @@ create_stdio(PyObject* io, mode = "rb"; buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi", fd, mode, buffering, - Py_None, Py_None, Py_None, 0); + Py_None, Py_None, /* encoding, errors */ + Py_None, 0); /* newline, closefd */ if (buf == NULL) goto error; @@ -1243,25 +1276,11 @@ initstdio(void) static void _Py_FatalError_DumpTracebacks(int fd) { - PyThreadState *tstate; - -#ifdef WITH_THREAD - /* PyGILState_GetThisThreadState() works even if the GIL was released */ - tstate = PyGILState_GetThisThreadState(); -#else - tstate = PyThreadState_GET(); -#endif - if (tstate == NULL) { - /* _Py_DumpTracebackThreads() requires the thread state to display - * frames */ - return; - } - fputc('\n', stderr); fflush(stderr); /* display the current Python stack */ - _Py_DumpTracebackThreads(fd, tstate->interp, tstate); + _Py_DumpTracebackThreads(fd, NULL, NULL); } /* Print the current exception (if an exception is set) with its traceback, @@ -1462,7 +1481,9 @@ call_ll_exitfuncs(void) void Py_Exit(int sts) { - Py_Finalize(); + if (Py_FinalizeEx() < 0) { + sts = 120; + } exit(sts); } diff --git a/Python/pystate.c b/Python/pystate.c index 6d1c6d0..ba4dd4c 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -25,7 +25,7 @@ to avoid the expense of doing their own locking). #ifdef HAVE_DLFCN_H #include <dlfcn.h> #endif -#ifndef RTLD_LAZY +#if !HAVE_DECL_RTLD_LAZY #define RTLD_LAZY 1 #endif #endif @@ -34,6 +34,8 @@ to avoid the expense of doing their own locking). extern "C" { #endif +int _PyGILState_check_enabled = 1; + #ifdef WITH_THREAD #include "pythread.h" static PyThread_type_lock head_mutex = NULL; /* Protects interp->tstate_head */ @@ -45,7 +47,7 @@ static PyThread_type_lock head_mutex = NULL; /* Protects interp->tstate_head */ GILState implementation */ static PyInterpreterState *autoInterpreterState = NULL; -static int autoTLSkey = 0; +static int autoTLSkey = -1; #else #define HEAD_INIT() /* Nothing */ #define HEAD_LOCK() /* Nothing */ @@ -89,7 +91,7 @@ PyInterpreterState_New(void) interp->fscodec_initialized = 0; interp->importlib = NULL; #ifdef HAVE_DLOPEN -#ifdef RTLD_NOW +#if HAVE_DECL_RTLD_NOW interp->dlopenflags = RTLD_NOW; #else interp->dlopenflags = RTLD_LAZY; @@ -449,10 +451,10 @@ PyThreadState_DeleteCurrent() if (tstate == NULL) Py_FatalError( "PyThreadState_DeleteCurrent: no current tstate"); - SET_TSTATE(NULL); + tstate_delete_common(tstate); if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate) PyThread_delete_key_value(autoTLSkey); - tstate_delete_common(tstate); + SET_TSTATE(NULL); PyEval_ReleaseLock(); } #endif /* WITH_THREAD */ @@ -696,7 +698,7 @@ PyThreadState_IsCurrent(PyThreadState *tstate) } /* Internal initialization/finalization functions called by - Py_Initialize/Py_Finalize + Py_Initialize/Py_FinalizeEx */ void _PyGILState_Init(PyInterpreterState *i, PyThreadState *t) @@ -712,10 +714,17 @@ _PyGILState_Init(PyInterpreterState *i, PyThreadState *t) _PyGILState_NoteThreadState(t); } +PyInterpreterState * +_PyGILState_GetInterpreterStateUnsafe(void) +{ + return autoInterpreterState; +} + void _PyGILState_Fini(void) { PyThread_delete_key(autoTLSkey); + autoTLSkey = -1; autoInterpreterState = NULL; } @@ -784,8 +793,19 @@ PyGILState_GetThisThreadState(void) int PyGILState_Check(void) { - PyThreadState *tstate = GET_TSTATE(); - return tstate && (tstate == PyGILState_GetThisThreadState()); + PyThreadState *tstate; + + if (!_PyGILState_check_enabled) + return 1; + + if (autoTLSkey == -1) + return 1; + + tstate = GET_TSTATE(); + if (tstate == NULL) + return 0; + + return (tstate == PyGILState_GetThisThreadState()); } PyGILState_STATE diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 209c908..5f3af92 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -881,12 +881,12 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val, #define OFS_E 2 /* The lengths of these are known to the code below, so don't change them */ -static char *lc_float_strings[] = { +static const char * const lc_float_strings[] = { "inf", "nan", "e", }; -static char *uc_float_strings[] = { +static const char * const uc_float_strings[] = { "INF", "NAN", "E", @@ -925,7 +925,8 @@ static char * format_float_short(double d, char format_code, int mode, int precision, int always_add_sign, int add_dot_0_if_integer, - int use_alt_formatting, char **float_strings, int *type) + int use_alt_formatting, const char * const *float_strings, + int *type) { char *buf = NULL; char *p = NULL; @@ -1176,7 +1177,7 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val, int flags, int *type) { - char **float_strings = lc_float_strings; + const char * const *float_strings = lc_float_strings; int mode; /* Validate format_code, and map upper and lower case. Compute the diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 7fbf06e..678ebfe 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -431,7 +431,7 @@ static int parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, int *lineno, int *offset, PyObject **text) { - long hold; + int hold; PyObject *v; _Py_IDENTIFIER(msg); _Py_IDENTIFIER(filename); @@ -464,11 +464,11 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, v = _PyObject_GetAttrId(err, &PyId_lineno); if (!v) goto finally; - hold = PyLong_AsLong(v); + hold = _PyLong_AsInt(v); Py_DECREF(v); if (hold < 0 && PyErr_Occurred()) goto finally; - *lineno = (int)hold; + *lineno = hold; v = _PyObject_GetAttrId(err, &PyId_offset); if (!v) @@ -477,11 +477,11 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename, *offset = -1; Py_DECREF(v); } else { - hold = PyLong_AsLong(v); + hold = _PyLong_AsInt(v); Py_DECREF(v); if (hold < 0 && PyErr_Occurred()) goto finally; - *offset = (int)hold; + *offset = hold; } v = _PyObject_GetAttrId(err, &PyId_text); @@ -791,11 +791,11 @@ print_exception(PyObject *f, PyObject *value) PyErr_Clear(); } -static const char *cause_message = +static const char cause_message[] = "\nThe above exception was the direct cause " "of the following exception:\n\n"; -static const char *context_message = +static const char context_message[] = "\nDuring handling of the above exception, " "another exception occurred:\n\n"; @@ -1144,8 +1144,8 @@ PyParser_ASTFromString(const char *s, const char *filename_str, int start, mod_ty PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc, - int start, char *ps1, - char *ps2, PyCompilerFlags *flags, int *errcode, + int start, const char *ps1, + const char *ps2, PyCompilerFlags *flags, int *errcode, PyArena *arena) { mod_ty mod; @@ -1177,8 +1177,8 @@ PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc, mod_ty PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc, - int start, char *ps1, - char *ps2, PyCompilerFlags *flags, int *errcode, + int start, const char *ps1, + const char *ps2, PyCompilerFlags *flags, int *errcode, PyArena *arena) { mod_ty mod; diff --git a/Python/pytime.c b/Python/pytime.c index 7f65824..81682ca 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -7,6 +7,11 @@ #include <mach/mach_time.h> /* mach_absolute_time(), mach_timebase_info() */ #endif +#define _PyTime_check_mul_overflow(a, b) \ + (assert(b > 0), \ + (_PyTime_t)(a) < _PyTime_MIN / (_PyTime_t)(b) \ + || _PyTime_MAX / (_PyTime_t)(b) < (_PyTime_t)(a)) + /* To millisecond (10^-3) */ #define SEC_TO_MS 1000 @@ -38,7 +43,7 @@ _PyLong_AsTime_t(PyObject *obj) val = PyLong_AsLongLong(obj); #else long val; - assert(sizeof(time_t) <= sizeof(long)); + Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); val = PyLong_AsLong(obj); #endif if (val == -1 && PyErr_Occurred()) { @@ -55,55 +60,88 @@ _PyLong_FromTime_t(time_t t) #if defined(HAVE_LONG_LONG) && SIZEOF_TIME_T == SIZEOF_LONG_LONG return PyLong_FromLongLong((PY_LONG_LONG)t); #else - assert(sizeof(time_t) <= sizeof(long)); + Py_BUILD_ASSERT(sizeof(time_t) <= sizeof(long)); return PyLong_FromLong((long)t); #endif } +/* Round to nearest with ties going to nearest even integer + (_PyTime_ROUND_HALF_EVEN) */ +static double +_PyTime_RoundHalfEven(double x) +{ + double rounded = round(x); + if (fabs(x-rounded) == 0.5) + /* halfway case: round to even */ + rounded = 2.0*round(x/2.0); + return rounded; +} + +static double +_PyTime_Round(double x, _PyTime_round_t round) +{ + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + d = x; + if (round == _PyTime_ROUND_HALF_EVEN) + d = _PyTime_RoundHalfEven(d); + else if (round == _PyTime_ROUND_CEILING) + d = ceil(d); + else + d = floor(d); + return d; +} + static int -_PyTime_ObjectToDenominator(PyObject *obj, time_t *sec, long *numerator, +_PyTime_DoubleToDenominator(double d, time_t *sec, long *numerator, double denominator, _PyTime_round_t round) { - assert(denominator <= LONG_MAX); - if (PyFloat_Check(obj)) { - double d, intpart, err; - /* volatile avoids unsafe optimization on float enabled by gcc -O3 */ - volatile double floatpart; + double intpart, err; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double floatpart; - d = PyFloat_AsDouble(obj); - floatpart = modf(d, &intpart); - if (floatpart < 0) { - floatpart = 1.0 + floatpart; - intpart -= 1.0; - } + floatpart = modf(d, &intpart); - floatpart *= denominator; - if (round == _PyTime_ROUND_CEILING) { - floatpart = ceil(floatpart); - if (floatpart >= denominator) { - floatpart = 0.0; - intpart += 1.0; - } - } - else { - floatpart = floor(floatpart); - } + floatpart *= denominator; + floatpart = _PyTime_Round(floatpart, round); + if (floatpart >= denominator) { + floatpart -= denominator; + intpart += 1.0; + } + else if (floatpart < 0) { + floatpart += denominator; + intpart -= 1.0; + } + assert(0.0 <= floatpart && floatpart < denominator); - *sec = (time_t)intpart; - err = intpart - (double)*sec; - if (err <= -1.0 || err >= 1.0) { - error_time_t_overflow(); - return -1; - } + *sec = (time_t)intpart; + *numerator = (long)floatpart; - *numerator = (long)floatpart; - return 0; + err = intpart - (double)*sec; + if (err <= -1.0 || err >= 1.0) { + error_time_t_overflow(); + return -1; + } + return 0; +} + +static int +_PyTime_ObjectToDenominator(PyObject *obj, time_t *sec, long *numerator, + double denominator, _PyTime_round_t round) +{ + assert(denominator <= (double)LONG_MAX); + + if (PyFloat_Check(obj)) { + double d = PyFloat_AsDouble(obj); + return _PyTime_DoubleToDenominator(d, sec, numerator, + denominator, round); } else { *sec = _PyLong_AsTime_t(obj); + *numerator = 0; if (*sec == (time_t)-1 && PyErr_Occurred()) return -1; - *numerator = 0; return 0; } } @@ -112,13 +150,12 @@ int _PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round) { if (PyFloat_Check(obj)) { - double d, intpart, err; + double intpart, err; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; d = PyFloat_AsDouble(obj); - if (round == _PyTime_ROUND_CEILING) - d = ceil(d); - else - d = floor(d); + d = _PyTime_Round(d, round); (void)modf(d, &intpart); *sec = (time_t)intpart; @@ -141,14 +178,20 @@ int _PyTime_ObjectToTimespec(PyObject *obj, time_t *sec, long *nsec, _PyTime_round_t round) { - return _PyTime_ObjectToDenominator(obj, sec, nsec, 1e9, round); + int res; + res = _PyTime_ObjectToDenominator(obj, sec, nsec, 1e9, round); + assert(0 <= *nsec && *nsec < SEC_TO_NS); + return res; } int _PyTime_ObjectToTimeval(PyObject *obj, time_t *sec, long *usec, _PyTime_round_t round) { - return _PyTime_ObjectToDenominator(obj, sec, usec, 1e6, round); + int res; + res = _PyTime_ObjectToDenominator(obj, sec, usec, 1e6, round); + assert(0 <= *usec && *usec < SEC_TO_US); + return res; } static void @@ -162,12 +205,15 @@ _PyTime_t _PyTime_FromSeconds(int seconds) { _PyTime_t t; + t = (_PyTime_t)seconds; /* ensure that integer overflow cannot happen, int type should have 32 bits, whereas _PyTime_t type has at least 64 bits (SEC_TO_MS takes 30 bits). */ - assert((seconds >= 0 && seconds <= _PyTime_MAX / SEC_TO_NS) - || (seconds < 0 && seconds >= _PyTime_MIN / SEC_TO_NS)); - t = (_PyTime_t)seconds * SEC_TO_NS; + Py_BUILD_ASSERT(INT_MAX <= _PyTime_MAX / SEC_TO_NS); + Py_BUILD_ASSERT(INT_MIN >= _PyTime_MIN / SEC_TO_NS); + assert((t >= 0 && t <= _PyTime_MAX / SEC_TO_NS) + || (t < 0 && t >= _PyTime_MIN / SEC_TO_NS)); + t *= SEC_TO_NS; return t; } @@ -175,7 +221,7 @@ _PyTime_t _PyTime_FromNanoseconds(PY_LONG_LONG ns) { _PyTime_t t; - assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); + Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); t = Py_SAFE_DOWNCAST(ns, PY_LONG_LONG, _PyTime_t); return t; } @@ -187,12 +233,15 @@ _PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts, int raise) _PyTime_t t; int res = 0; - t = (_PyTime_t)ts->tv_sec * SEC_TO_NS; - if (t / SEC_TO_NS != ts->tv_sec) { + Py_BUILD_ASSERT(sizeof(ts->tv_sec) <= sizeof(_PyTime_t)); + t = (_PyTime_t)ts->tv_sec; + + if (_PyTime_check_mul_overflow(t, SEC_TO_NS)) { if (raise) _PyTime_overflow(); res = -1; } + t = t * SEC_TO_NS; t += ts->tv_nsec; @@ -206,12 +255,15 @@ _PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv, int raise) _PyTime_t t; int res = 0; - t = (_PyTime_t)tv->tv_sec * SEC_TO_NS; - if (t / SEC_TO_NS != tv->tv_sec) { + Py_BUILD_ASSERT(sizeof(tv->tv_sec) <= sizeof(_PyTime_t)); + t = (_PyTime_t)tv->tv_sec; + + if (_PyTime_check_mul_overflow(t, SEC_TO_NS)) { if (raise) _PyTime_overflow(); res = -1; } + t = t * SEC_TO_NS; t += (_PyTime_t)tv->tv_usec * US_TO_NS; @@ -221,50 +273,59 @@ _PyTime_FromTimeval(_PyTime_t *tp, struct timeval *tv, int raise) #endif static int -_PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, - long to_nanoseconds) +_PyTime_FromFloatObject(_PyTime_t *t, double value, _PyTime_round_t round, + long unit_to_ns) { - if (PyFloat_Check(obj)) { - /* volatile avoids unsafe optimization on float enabled by gcc -O3 */ - volatile double d, err; + double err; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; - /* convert to a number of nanoseconds */ - d = PyFloat_AsDouble(obj); - d *= to_nanoseconds; + /* convert to a number of nanoseconds */ + d = value; + d *= (double)unit_to_ns; + d = _PyTime_Round(d, round); - if (round == _PyTime_ROUND_CEILING) - d = ceil(d); - else - d = floor(d); + *t = (_PyTime_t)d; + err = d - (double)*t; + if (fabs(err) >= 1.0) { + _PyTime_overflow(); + return -1; + } + return 0; +} - *t = (_PyTime_t)d; - err = d - (double)*t; - if (fabs(err) >= 1.0) { - _PyTime_overflow(); - return -1; - } - return 0; +static int +_PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, + long unit_to_ns) +{ + if (PyFloat_Check(obj)) { + double d; + d = PyFloat_AsDouble(obj); + return _PyTime_FromFloatObject(t, d, round, unit_to_ns); } else { #ifdef HAVE_LONG_LONG PY_LONG_LONG sec; + Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); + sec = PyLong_AsLongLong(obj); - assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); #else long sec; + Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); + sec = PyLong_AsLong(obj); - assert(sizeof(PY_LONG_LONG) <= sizeof(_PyTime_t)); #endif if (sec == -1 && PyErr_Occurred()) { if (PyErr_ExceptionMatches(PyExc_OverflowError)) _PyTime_overflow(); return -1; } - *t = sec * to_nanoseconds; - if (*t / to_nanoseconds != sec) { + + if (_PyTime_check_mul_overflow(sec, unit_to_ns)) { _PyTime_overflow(); return -1; } + *t = sec * unit_to_ns; return 0; } } @@ -284,22 +345,31 @@ _PyTime_FromMillisecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t roun double _PyTime_AsSecondsDouble(_PyTime_t t) { - _PyTime_t sec, ns; - /* Divide using integers to avoid rounding issues on the integer part. - 1e-9 cannot be stored exactly in IEEE 64-bit. */ - sec = t / SEC_TO_NS; - ns = t % SEC_TO_NS; - return (double)sec + (double)ns * 1e-9; + /* volatile avoids optimization changing how numbers are rounded */ + volatile double d; + + if (t % SEC_TO_NS == 0) { + _PyTime_t secs; + /* Divide using integers to avoid rounding issues on the integer part. + 1e-9 cannot be stored exactly in IEEE 64-bit. */ + secs = t / SEC_TO_NS; + d = (double)secs; + } + else { + d = (double)t; + d /= 1e9; + } + return d; } PyObject * _PyTime_AsNanosecondsObject(_PyTime_t t) { #ifdef HAVE_LONG_LONG - assert(sizeof(PY_LONG_LONG) >= sizeof(_PyTime_t)); + Py_BUILD_ASSERT(sizeof(PY_LONG_LONG) >= sizeof(_PyTime_t)); return PyLong_FromLongLong((PY_LONG_LONG)t); #else - assert(sizeof(long) >= sizeof(_PyTime_t)); + Py_BUILD_ASSERT(sizeof(long) >= sizeof(_PyTime_t)); return PyLong_FromLong((long)t); #endif } @@ -309,7 +379,20 @@ _PyTime_Divide(const _PyTime_t t, const _PyTime_t k, const _PyTime_round_t round) { assert(k > 1); - if (round == _PyTime_ROUND_CEILING) { + if (round == _PyTime_ROUND_HALF_EVEN) { + _PyTime_t x, r, abs_r; + x = t / k; + r = t % k; + abs_r = Py_ABS(r); + if (abs_r > k / 2 || (abs_r == k / 2 && (Py_ABS(x) & 1))) { + if (t >= 0) + x++; + else + x--; + } + return x; + } + else if (round == _PyTime_ROUND_CEILING) { if (t >= 0) return (t + k - 1) / k; else @@ -373,7 +456,7 @@ static int _PyTime_AsTimevalStruct_impl(_PyTime_t t, struct timeval *tv, _PyTime_round_t round, int raise) { - _PyTime_t secs; + _PyTime_t secs, secs2; int us; int res; @@ -386,7 +469,8 @@ _PyTime_AsTimevalStruct_impl(_PyTime_t t, struct timeval *tv, #endif tv->tv_usec = us; - if (res < 0 || (_PyTime_t)tv->tv_sec != secs) { + secs2 = (_PyTime_t)tv->tv_sec; + if (res < 0 || secs2 != secs) { if (raise) error_time_t_overflow(); return -1; @@ -424,6 +508,7 @@ _PyTime_AsTimevalTime_t(_PyTime_t t, time_t *p_secs, int *us, return 0; } + #if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_KQUEUE) int _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts) @@ -437,13 +522,13 @@ _PyTime_AsTimespec(_PyTime_t t, struct timespec *ts) secs -= 1; } ts->tv_sec = (time_t)secs; + assert(0 <= nsec && nsec < SEC_TO_NS); + ts->tv_nsec = nsec; + if ((_PyTime_t)ts->tv_sec != secs) { - _PyTime_overflow(); + error_time_t_overflow(); return -1; } - ts->tv_nsec = nsec; - - assert(0 <= ts->tv_nsec && ts->tv_nsec <= 999999999); return 0; } #endif @@ -557,19 +642,20 @@ _PyTime_GetSystemClockWithInfo(_PyTime_t *t, _Py_clock_info_t *info) return pygettimeofday(t, info, 1); } - static int pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) { #if defined(MS_WINDOWS) - ULONGLONG result; + ULONGLONG ticks; + _PyTime_t t; assert(info == NULL || raise); - result = GetTickCount64(); + ticks = GetTickCount64(); + Py_BUILD_ASSERT(sizeof(ticks) <= sizeof(_PyTime_t)); + t = (_PyTime_t)ticks; - *tp = result * MS_TO_NS; - if (*tp / MS_TO_NS != result) { + if (_PyTime_check_mul_overflow(t, MS_TO_NS)) { if (raise) { _PyTime_overflow(); return -1; @@ -577,6 +663,7 @@ pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) /* Hello, time traveler! */ assert(0); } + *tp = t * MS_TO_NS; if (info) { DWORD timeAdjustment, timeIncrement; @@ -689,8 +776,5 @@ _PyTime_Init(void) if (_PyTime_GetMonotonicClockWithInfo(&t, NULL) < 0) return -1; - /* check that _PyTime_FromSeconds() cannot overflow */ - assert(INT_MAX <= _PyTime_MAX / SEC_TO_NS); - assert(INT_MIN >= _PyTime_MIN / SEC_TO_NS); return 0; } diff --git a/Python/random.c b/Python/random.c index b961020..cbdebbe 100644 --- a/Python/random.c +++ b/Python/random.c @@ -132,11 +132,14 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) * see https://bugs.python.org/issue26839. To avoid this, use the * GRND_NONBLOCK flag. */ const int flags = GRND_NONBLOCK; + + char *dest; int n; if (!getrandom_works) return 0; + dest = buffer; while (0 < size) { #ifdef sun /* Issue #26735: On Solaris, getrandom() is limited to returning up @@ -150,11 +153,11 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) #ifdef HAVE_GETRANDOM if (raise) { Py_BEGIN_ALLOW_THREADS - n = getrandom(buffer, n, flags); + n = getrandom(dest, n, flags); Py_END_ALLOW_THREADS } else { - n = getrandom(buffer, n, flags); + n = getrandom(dest, n, flags); } #else /* On Linux, use the syscall() function because the GNU libc doesn't @@ -162,11 +165,11 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) * https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ if (raise) { Py_BEGIN_ALLOW_THREADS - n = syscall(SYS_getrandom, buffer, n, flags); + n = syscall(SYS_getrandom, dest, n, flags); Py_END_ALLOW_THREADS } else { - n = syscall(SYS_getrandom, buffer, n, flags); + n = syscall(SYS_getrandom, dest, n, flags); } #endif @@ -204,7 +207,7 @@ py_getrandom(void *buffer, Py_ssize_t size, int raise) return -1; } - buffer += n; + dest += n; size -= n; } return 1; @@ -404,7 +407,7 @@ _PyRandom_Init(void) char *env; unsigned char *secret = (unsigned char *)&_Py_HashSecret.uc; Py_ssize_t secret_size = sizeof(_Py_HashSecret_t); - assert(secret_size == sizeof(_Py_HashSecret.uc)); + Py_BUILD_ASSERT(sizeof(_Py_HashSecret_t) == sizeof(_Py_HashSecret.uc)); if (_Py_HashSecret_Initialized) return; diff --git a/Python/symtable.c b/Python/symtable.c index 1591a20..3f03184 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -160,7 +160,7 @@ PyTypeObject PySTEntry_Type = { }; static int symtable_analyze(struct symtable *st); -static int symtable_warn(struct symtable *st, char *msg, int lineno); +static int symtable_warn(struct symtable *st, const char *msg, int lineno); static int symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block, void *ast, int lineno, int col_offset); @@ -908,7 +908,7 @@ symtable_analyze(struct symtable *st) static int -symtable_warn(struct symtable *st, char *msg, int lineno) +symtable_warn(struct symtable *st, const char *msg, int lineno) { PyObject *message = PyUnicode_FromString(msg); if (message == NULL) @@ -1447,6 +1447,15 @@ symtable_visit_expr(struct symtable *st, expr_ty e) VISIT_SEQ(st, expr, e->v.Call.args); VISIT_SEQ_WITH_NULL(st, keyword, e->v.Call.keywords); break; + case FormattedValue_kind: + VISIT(st, expr, e->v.FormattedValue.value); + if (e->v.FormattedValue.format_spec) + VISIT(st, expr, e->v.FormattedValue.format_spec); + break; + case JoinedStr_kind: + VISIT_SEQ(st, expr, e->v.JoinedStr.values); + break; + case Constant_kind: case Num_kind: case Str_kind: case Bytes_kind: diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 8d7e05a..56175d9 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -20,6 +20,7 @@ Data members: #include "pythread.h" #include "osdefs.h" +#include <locale.h> #ifdef MS_WINDOWS #define WIN32_LEAN_AND_MEAN @@ -33,7 +34,6 @@ extern const char *PyWin_DLLVersionString; #endif #ifdef HAVE_LANGINFO_H -#include <locale.h> #include <langinfo.h> #endif @@ -346,8 +346,10 @@ static PyObject *whatstrings[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static int trace_init(void) { - static char *whatnames[7] = {"call", "exception", "line", "return", - "c_call", "c_exception", "c_return"}; + static const char * const whatnames[7] = { + "call", "exception", "line", "return", + "c_call", "c_exception", "c_return" + }; PyObject *name; int i; for (i = 0; i < 7; ++i) { @@ -434,10 +436,7 @@ trace_trampoline(PyObject *self, PyFrameObject *frame, return -1; } if (result != Py_None) { - PyObject *temp = frame->f_trace; - frame->f_trace = NULL; - Py_XDECREF(temp); - frame->f_trace = result; + Py_XSETREF(frame->f_trace, result); } else { Py_DECREF(result); @@ -1152,8 +1151,10 @@ static PyObject * sys_debugmallocstats(PyObject *self, PyObject *args) { #ifdef WITH_PYMALLOC - _PyObject_DebugMallocStats(stderr); - fputc('\n', stderr); + if (_PyMem_PymallocEnabled()) { + _PyObject_DebugMallocStats(stderr); + fputc('\n', stderr); + } #endif _PyObject_DebugTypeStats(stderr); @@ -1643,15 +1644,11 @@ make_version_info(void) /* sys.implementation values */ #define NAME "cpython" const char *_PySys_ImplName = NAME; -#define QUOTE(arg) #arg -#define STRIFY(name) QUOTE(name) -#define MAJOR STRIFY(PY_MAJOR_VERSION) -#define MINOR STRIFY(PY_MINOR_VERSION) +#define MAJOR Py_STRINGIFY(PY_MAJOR_VERSION) +#define MINOR Py_STRINGIFY(PY_MINOR_VERSION) #define TAG NAME "-" MAJOR MINOR const char *_PySys_ImplCacheTag = TAG; #undef NAME -#undef QUOTE -#undef STRIFY #undef MAJOR #undef MINOR #undef TAG @@ -1696,6 +1693,16 @@ make_impl_info(PyObject *version_info) if (res < 0) goto error; +#ifdef MULTIARCH + value = PyUnicode_FromString(MULTIARCH); + if (value == NULL) + goto error; + res = PyDict_SetItemString(impl_info, "_multiarch", value); + Py_DECREF(value); + if (res < 0) + goto error; +#endif + /* dict ready */ ns = _PyNamespace_New(impl_info); diff --git a/Python/traceback.c b/Python/traceback.c index 941d1cb..62a6b1e 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -479,40 +479,26 @@ PyTraceBack_Print(PyObject *v, PyObject *f) This function is signal safe. */ -static void -reverse_string(char *text, const size_t len) -{ - char tmp; - size_t i, j; - if (len == 0) - return; - for (i=0, j=len-1; i < j; i++, j--) { - tmp = text[i]; - text[i] = text[j]; - text[j] = tmp; - } -} - -/* Format an integer in range [0; 999999] to decimal, - and write it into the file fd. - - This function is signal safe. */ - -static void -dump_decimal(int fd, int value) +void +_Py_DumpDecimal(int fd, unsigned long value) { - char buffer[7]; - int len; - if (value < 0 || 999999 < value) - return; - len = 0; + /* maximum number of characters required for output of %lld or %p. + We need at most ceil(log10(256)*SIZEOF_LONG_LONG) digits, + plus 1 for the null byte. 53/22 is an upper bound for log10(256). */ + char buffer[1 + (sizeof(unsigned long)*53-1) / 22 + 1]; + char *ptr, *end; + + end = &buffer[Py_ARRAY_LENGTH(buffer) - 1]; + ptr = end; + *ptr = '\0'; do { - buffer[len] = '0' + (value % 10); + --ptr; + assert(ptr >= buffer); + *ptr = '0' + (value % 10); value /= 10; - len++; } while (value); - reverse_string(buffer, len); - _Py_write_noraise(fd, buffer, len); + + _Py_write_noraise(fd, ptr, end - ptr); } /* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits, @@ -520,27 +506,31 @@ dump_decimal(int fd, int value) This function is signal safe. */ -static void -dump_hexadecimal(int fd, unsigned long value, int width) +void +_Py_DumpHexadecimal(int fd, unsigned long value, Py_ssize_t width) { - int len; - char buffer[sizeof(unsigned long) * 2 + 1]; - len = 0; + char buffer[sizeof(unsigned long) * 2 + 1], *ptr, *end; + const Py_ssize_t size = Py_ARRAY_LENGTH(buffer) - 1; + + if (width > size) + width = size; + /* it's ok if width is negative */ + + end = &buffer[size]; + ptr = end; + *ptr = '\0'; do { - buffer[len] = Py_hexdigits[value & 15]; + --ptr; + assert(ptr >= buffer); + *ptr = Py_hexdigits[value & 15]; value >>= 4; - len++; - } while (len < width || value); - reverse_string(buffer, len); - _Py_write_noraise(fd, buffer, len); -} + } while ((end - ptr) < width || value); -/* Write an unicode object into the file fd using ascii+backslashreplace. - - This function is signal safe. */ + _Py_write_noraise(fd, ptr, end - ptr); +} -static void -dump_ascii(int fd, PyObject *text) +void +_Py_DumpASCII(int fd, PyObject *text) { PyASCIIObject *ascii = (PyASCIIObject *)text; Py_ssize_t i, size; @@ -550,32 +540,36 @@ dump_ascii(int fd, PyObject *text) wchar_t *wstr = NULL; Py_UCS4 ch; + if (!PyUnicode_Check(text)) + return; + size = ascii->length; kind = ascii->state.kind; - if (ascii->state.compact) { + if (kind == PyUnicode_WCHAR_KIND) { + wstr = ((PyASCIIObject *)text)->wstr; + if (wstr == NULL) + return; + size = ((PyCompactUnicodeObject *)text)->wstr_length; + } + else if (ascii->state.compact) { if (ascii->state.ascii) data = ((PyASCIIObject*)text) + 1; else data = ((PyCompactUnicodeObject*)text) + 1; } - else if (kind != PyUnicode_WCHAR_KIND) { + else { data = ((PyUnicodeObject *)text)->data.any; if (data == NULL) return; } - else { - wstr = ((PyASCIIObject *)text)->wstr; - if (wstr == NULL) - return; - size = ((PyCompactUnicodeObject *)text)->wstr_length; - } if (MAX_STRING_LENGTH < size) { size = MAX_STRING_LENGTH; truncated = 1; } - else + else { truncated = 0; + } for (i=0; i < size; i++) { if (kind != PyUnicode_WCHAR_KIND) @@ -589,19 +583,20 @@ dump_ascii(int fd, PyObject *text) } else if (ch <= 0xff) { PUTS(fd, "\\x"); - dump_hexadecimal(fd, ch, 2); + _Py_DumpHexadecimal(fd, ch, 2); } else if (ch <= 0xffff) { PUTS(fd, "\\u"); - dump_hexadecimal(fd, ch, 4); + _Py_DumpHexadecimal(fd, ch, 4); } else { PUTS(fd, "\\U"); - dump_hexadecimal(fd, ch, 8); + _Py_DumpHexadecimal(fd, ch, 8); } } - if (truncated) + if (truncated) { PUTS(fd, "..."); + } } /* Write a frame into the file fd: "File "xxx", line xxx in xxx". @@ -620,7 +615,7 @@ dump_frame(int fd, PyFrameObject *frame) && PyUnicode_Check(code->co_filename)) { PUTS(fd, "\""); - dump_ascii(fd, code->co_filename); + _Py_DumpASCII(fd, code->co_filename); PUTS(fd, "\""); } else { PUTS(fd, "???"); @@ -629,14 +624,21 @@ dump_frame(int fd, PyFrameObject *frame) /* PyFrame_GetLineNumber() was introduced in Python 2.7.0 and 3.2.0 */ lineno = PyCode_Addr2Line(code, frame->f_lasti); PUTS(fd, ", line "); - dump_decimal(fd, lineno); + if (lineno >= 0) { + _Py_DumpDecimal(fd, (unsigned long)lineno); + } + else { + PUTS(fd, "???"); + } PUTS(fd, " in "); if (code != NULL && code->co_name != NULL - && PyUnicode_Check(code->co_name)) - dump_ascii(fd, code->co_name); - else + && PyUnicode_Check(code->co_name)) { + _Py_DumpASCII(fd, code->co_name); + } + else { PUTS(fd, "???"); + } PUTS(fd, "\n"); } @@ -692,7 +694,9 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current) PUTS(fd, "Current thread 0x"); else PUTS(fd, "Thread 0x"); - dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(unsigned long)*2); + _Py_DumpHexadecimal(fd, + (unsigned long)tstate->thread_id, + sizeof(unsigned long) * 2); PUTS(fd, " (most recent call first):\n"); } @@ -704,11 +708,56 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current) handlers if signals were received. */ const char* _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, - PyThreadState *current_thread) + PyThreadState *current_tstate) { PyThreadState *tstate; unsigned int nthreads; +#ifdef WITH_THREAD + if (current_tstate == NULL) { + /* _Py_DumpTracebackThreads() is called from signal handlers by + faulthandler. + + SIGSEGV, SIGFPE, SIGABRT, SIGBUS and SIGILL are synchronous signals + and are thus delivered to the thread that caused the fault. Get the + Python thread state of the current thread. + + PyThreadState_Get() doesn't give the state of the thread that caused + the fault if the thread released the GIL, and so this function + cannot be used. Read the thread local storage (TLS) instead: call + PyGILState_GetThisThreadState(). */ + current_tstate = PyGILState_GetThisThreadState(); + } + + if (interp == NULL) { + if (current_tstate == NULL) { + interp = _PyGILState_GetInterpreterStateUnsafe(); + if (interp == NULL) { + /* We need the interpreter state to get Python threads */ + return "unable to get the interpreter state"; + } + } + else { + interp = current_tstate->interp; + } + } +#else + if (current_tstate == NULL) { + /* Call _PyThreadState_UncheckedGet() instead of PyThreadState_Get() + to not fail with a fatal error if the thread state is NULL. */ + current_thread = _PyThreadState_UncheckedGet(); + } + + if (interp == NULL) { + if (current_tstate == NULL) { + /* We need the interpreter state to get Python threads */ + return "unable to get the interpreter state"; + } + interp = current_tstate->interp; + } +#endif + assert(interp != NULL); + /* Get the current interpreter from the current thread */ tstate = PyInterpreterState_ThreadHead(interp); if (tstate == NULL) @@ -726,7 +775,7 @@ _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, PUTS(fd, "...\n"); break; } - write_thread_id(fd, tstate, tstate == current_thread); + write_thread_id(fd, tstate, tstate == current_tstate); dump_traceback(fd, tstate, 0); tstate = PyThreadState_Next(tstate); nthreads++; diff --git a/Python/wordcode_helpers.h b/Python/wordcode_helpers.h new file mode 100644 index 0000000..b61ba33 --- /dev/null +++ b/Python/wordcode_helpers.h @@ -0,0 +1,38 @@ +/* This file contains code shared by the compiler and the peephole + optimizer. + */ + +/* Minimum number of bytes necessary to encode instruction with EXTENDED_ARGs */ +static int +instrsize(unsigned int oparg) +{ + return oparg <= 0xff ? 2 : + oparg <= 0xffff ? 4 : + oparg <= 0xffffff ? 6 : + 8; +} + +/* Spits out op/oparg pair using ilen bytes. codestr should be pointed at the + desired location of the first EXTENDED_ARG */ +static void +write_op_arg(unsigned char *codestr, unsigned char opcode, + unsigned int oparg, int ilen) +{ + switch (ilen) { + case 8: + *codestr++ = EXTENDED_ARG; + *codestr++ = (oparg >> 24) & 0xff; + case 6: + *codestr++ = EXTENDED_ARG; + *codestr++ = (oparg >> 16) & 0xff; + case 4: + *codestr++ = EXTENDED_ARG; + *codestr++ = (oparg >> 8) & 0xff; + case 2: + *codestr++ = opcode; + *codestr++ = oparg & 0xff; + break; + default: + assert(0); + } +} |