diff -r bf24b2e1be24 -r f0b459af26fb FAILING --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FAILING Fri Feb 03 15:24:06 2012 -0500 @@ -0,0 +1,19 @@ +# Result of running ``make test`` on 2011-08-02 +# Diff when done from cmd-line; maybe runpy? +test_cmd_line_script +# Detection of import failure from missing file now invalid +test_pydoc +# os.__file__ is not an absolute path ... supposedly +test_site +# Tracing is not ignoring _importlib +test_trace +# Sub-interpreter encoding lookup is failing; module is successfully imported, +# but not ending up in sys.modules. +# :PyImport_Import() +# Python/import.c:PyImport_ImportModuleNoBlock() +# :_PyCodecRegistry_Init() +# Python/codecs.c:_PyCodec_Lookup() +# :initfsencoding() +# Python/pythonrun.c:Py_NewInterpreter() +# _testcapimodule.c:run_in_subinterp() +test_capi diff -r bf24b2e1be24 -r f0b459af26fb Include/import.h --- a/Include/import.h Fri Feb 03 12:08:32 2012 -0500 +++ b/Include/import.h Fri Feb 03 15:24:06 2012 -0500 @@ -7,6 +7,9 @@ extern "C" { #endif +PyAPI_FUNC(void) _PyImportZip_Init(void); + +PyMODINIT_FUNC PyInit_imp(void); PyAPI_FUNC(long) PyImport_GetMagicNumber(void); PyAPI_FUNC(const char *) PyImport_GetMagicTag(void); PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule( diff -r bf24b2e1be24 -r f0b459af26fb Include/pystate.h --- a/Include/pystate.h Fri Feb 03 12:08:32 2012 -0500 +++ b/Include/pystate.h Fri Feb 03 15:24:06 2012 -0500 @@ -33,6 +33,8 @@ int codecs_initialized; int fscodec_initialized; + PyObject *__import__; + #ifdef HAVE_DLOPEN int dlopenflags; #endif diff -r bf24b2e1be24 -r f0b459af26fb Include/pythonrun.h --- a/Include/pythonrun.h Fri Feb 03 12:08:32 2012 -0500 +++ b/Include/pythonrun.h Fri Feb 03 15:24:06 2012 -0500 @@ -188,7 +188,7 @@ PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void); PyAPI_FUNC(PyObject *) _PySys_Init(void); PyAPI_FUNC(void) _PyImport_Init(void); -PyAPI_FUNC(void) _PyExc_Init(void); +PyAPI_FUNC(void) _PyExc_Init(PyObject * bltinmod); PyAPI_FUNC(void) _PyImportHooks_Init(void); PyAPI_FUNC(int) _PyFrame_Init(void); PyAPI_FUNC(void) _PyFloat_Init(void); diff -r bf24b2e1be24 -r f0b459af26fb Lib/_importlib.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/_importlib.py Fri Feb 03 15:24:06 2012 -0500 @@ -0,0 +1,1052 @@ +"""Core implementation of import. + +This module is NOT meant to be directly imported! It has been designed such +that it can be bootstrapped into Python as the implementation of import. As +such it requires the injection of specific modules and attributes in order to +work. One should use importlib as the public-facing version of this module. + +""" + +# Injected modules are '_warnings', 'imp', 'sys', 'marshal', '_io', +# and '_os' (a.k.a. 'posix', 'nt' or 'os2'). +# Injected attribute is path_sep. +# Most injection is handled by _setup(). +# +# When editing this code be aware that code executed at import time CANNOT +# reference any injected objects! This includes not only global code but also +# anything specified at the class level. + + +# Bootstrap-related code ###################################################### + +# TODO: when not on any of these platforms, replace _case_ok() w/ +# ``lambda x,y: True``. +CASE_OK_PLATFORMS = 'win', 'cygwin', 'darwin' + +def _case_ok(directory, check): + """Check if the directory contains something matching 'check' + case-sensitively when running on Windows or OS X. + + If running on Window or OS X and PYTHONCASEOK is a defined environment + variable then no case-sensitive check is performed. No check is done to see + if what is being checked for exists, so if the platform is not Windows or + OS X then assume the case is fine. + + """ + if (any(map(sys.platform.startswith, CASE_OK_PLATFORMS)) and + b'PYTHONCASEOK' not in _os.environ): + if not directory: + directory = '.' + if check in _os.listdir(directory): + return True + else: + return False + else: + return True + + + +# TODO: Expose from marshal +def _w_long(x): + """Convert a 32-bit integer to little-endian. + + XXX Temporary until marshal's long functions are exposed. + + """ + x = int(x) + int_bytes = [] + int_bytes.append(x & 0xFF) + int_bytes.append((x >> 8) & 0xFF) + int_bytes.append((x >> 16) & 0xFF) + int_bytes.append((x >> 24) & 0xFF) + return bytearray(int_bytes) + + +# TODO: Expose from marshal +def _r_long(int_bytes): + """Convert 4 bytes in little-endian to an integer. + + XXX Temporary until marshal's long function are exposed. + + """ + x = int_bytes[0] + x |= int_bytes[1] << 8 + x |= int_bytes[2] << 16 + x |= int_bytes[3] << 24 + return x + + + +# XXX Could also expose Modules/getpath.c:joinpath() +def _path_join(*args): + """Replacement for os.path.join.""" + return path_sep.join(x[:-len(path_sep)] if x.endswith(path_sep) else x + for x in args if x) + + +def _path_exists(path): + """Replacement for os.path.exists.""" + try: + _os.stat(path) + except OSError: + return False + else: + return True + + +def _path_is_mode_type(path, mode): + """Test whether the path is the specified mode type.""" + try: + stat_info = _os.stat(path) + except OSError: + return False + return (stat_info.st_mode & 0o170000) == mode + + +# XXX Could also expose Modules/getpath.c:isfile() +def _path_isfile(path): + """Replacement for os.path.isfile.""" + return _path_is_mode_type(path, 0o100000) + + +# XXX Could also expose Modules/getpath.c:isdir() +def _path_isdir(path): + """Replacement for os.path.isdir.""" + if not path: + path = _os.getcwd() + return _path_is_mode_type(path, 0o040000) + + +def _path_without_ext(path, ext_type): + """Replacement for os.path.splitext()[0].""" + for suffix in _suffix_list(ext_type): + if path.endswith(suffix): + return path[:-len(suffix)] + else: + raise ValueError("path is not of the specified type") + + +def _path_absolute(path): + """Replacement for os.path.abspath.""" + if not path: + path = _os.getcwd() + try: + return _os._getfullpathname(path) + except AttributeError: + if path.startswith('/'): + return path + else: + return _path_join(_os.getcwd(), path) + + +def _write_atomic(path, data): + """Best-effort function to write data to a path atomically. + Be prepared to handle a FileExistsError if concurrent writing of the + temporary file is attempted.""" + # Renaming should be atomic on most platforms (including Windows). + # Under Windows, the limitation is that we can't rename() to an existing + # path, while POSIX will overwrite it. But here we don't really care + # if there is a glimpse of time during which the final pyc file doesn't + # exist. + # id() is used to generate a pseudo-random filename. + path_tmp = '{}.{}'.format(path, id(path)) + fd = _os.open(path_tmp, _os.O_EXCL | _os.O_CREAT | _os.O_WRONLY, 0o666) + try: + with _io.FileIO(fd, 'wb') as file: + file.write(data) + try: + _os.rename(path_tmp, path) + except FileExistsError: + # Windows (if we had access to MoveFileEx, we could overwrite) + _os.unlink(path) + _os.rename(path_tmp, path) + except OSError: + try: + _os.unlink(path_tmp) + except OSError: + pass + raise + + +def _wrap(new, old): + """Simple substitute for functools.wraps.""" + for replace in ['__module__', '__name__', '__qualname__', '__doc__']: + if hasattr(old, replace): + setattr(new, replace, getattr(old, replace)) + new.__dict__.update(old.__dict__) + + +code_type = type(_wrap.__code__) + +# Finder/loader utility code ################################################## + +def set_package(fxn): + """Set __package__ on the returned module.""" + def set_package_wrapper(*args, **kwargs): + module = fxn(*args, **kwargs) + if not hasattr(module, '__package__') or module.__package__ is None: + module.__package__ = module.__name__ + if not hasattr(module, '__path__'): + module.__package__ = module.__package__.rpartition('.')[0] + return module + _wrap(set_package_wrapper, fxn) + return set_package_wrapper + + +def set_loader(fxn): + """Set __loader__ on the returned module.""" + def set_loader_wrapper(self, *args, **kwargs): + module = fxn(self, *args, **kwargs) + if not hasattr(module, '__loader__'): + module.__loader__ = self + return module + _wrap(set_loader_wrapper, fxn) + return set_loader_wrapper + + +def module_for_loader(fxn): + """Decorator to handle selecting the proper module for loaders. + + The decorated function is passed the module to use instead of the module + name. The module passed in to the function is either from sys.modules if + it already exists or is a new module which has __name__ set and is inserted + into sys.modules. If an exception is raised and the decorator created the + module it is subsequently removed from sys.modules. + + The decorator assumes that the decorated function takes the module name as + the second argument. + + """ + def module_for_loader_wrapper(self, fullname, *args, **kwargs): + module = sys.modules.get(fullname) + is_reload = bool(module) + if not is_reload: + # This must be done before open() is called as the 'io' module + # implicitly imports 'locale' and would otherwise trigger an + # infinite loop. + module = imp.new_module(fullname) + sys.modules[fullname] = module + try: + return fxn(self, module, *args, **kwargs) + except: + if not is_reload: + del sys.modules[fullname] + raise + _wrap(module_for_loader_wrapper, fxn) + return module_for_loader_wrapper + + +def _check_name(method): + """Decorator to verify that the module being requested matches the one the + loader can handle. + + The first argument (self) must define _name which the second argument is + compared against. If the comparison fails then ImportError is raised. + + """ + def _check_name_wrapper(self, name, *args, **kwargs): + if self._name != name: + raise ImportError("loader cannot handle %s" % name) + return method(self, name, *args, **kwargs) + _wrap(_check_name_wrapper, method) + return _check_name_wrapper + + +def _requires_builtin(fxn): + """Decorator to verify the named module is built-in.""" + def _requires_builtin_wrapper(self, fullname): + if fullname not in sys.builtin_module_names: + raise ImportError("{0} is not a built-in module".format(fullname)) + return fxn(self, fullname) + _wrap(_requires_builtin_wrapper, fxn) + return _requires_builtin_wrapper + + +def _requires_frozen(fxn): + """Decorator to verify the named module is frozen.""" + def _requires_frozen_wrapper(self, fullname): + if not imp.is_frozen(fullname): + raise ImportError("{0} is not a frozen module".format(fullname)) + return fxn(self, fullname) + _wrap(_requires_frozen_wrapper, fxn) + return _requires_frozen_wrapper + + +def _suffix_list(suffix_type): + """Return a list of file suffixes based on the imp file type.""" + return [suffix[0] for suffix in imp.get_suffixes() + if suffix[2] == suffix_type] + + +# Loaders ##################################################################### + +class BuiltinImporter: + + """Meta path import for built-in modules. + + All methods are either class or static methods to avoid the need to + instantiate the class. + + """ + + @classmethod + def find_module(cls, fullname, path=None): + """Find the built-in module. + + If 'path' is ever specified then the search is considered a failure. + + """ + if path is not None: + return None + return cls if imp.is_builtin(fullname) else None + + @classmethod + @set_package + @set_loader + @_requires_builtin + def load_module(cls, fullname): + """Load a built-in module.""" + is_reload = fullname in sys.modules + try: + return imp.init_builtin(fullname) + except: + if not is_reload and fullname in sys.modules: + del sys.modules[fullname] + raise + + @classmethod + @_requires_builtin + def get_code(cls, fullname): + """Return None as built-in modules do not have code objects.""" + return None + + @classmethod + @_requires_builtin + def get_source(cls, fullname): + """Return None as built-in modules do not have source code.""" + return None + + @classmethod + @_requires_builtin + def is_package(cls, fullname): + """Return None as built-in modules are never packages.""" + return False + + +class FrozenImporter: + + """Meta path import for frozen modules. + + All methods are either class or static methods to avoid the need to + instantiate the class. + + """ + + @classmethod + def find_module(cls, fullname, path=None): + """Find a frozen module.""" + return cls if imp.is_frozen(fullname) else None + + @classmethod + @set_package + @set_loader + @_requires_frozen + def load_module(cls, fullname): + """Load a frozen module.""" + is_reload = fullname in sys.modules + try: + return imp.init_frozen(fullname) + except: + if not is_reload and fullname in sys.modules: + del sys.modules[fullname] + raise + + @classmethod + @_requires_frozen + def get_code(cls, fullname): + """Return the code object for the frozen module.""" + return imp.get_frozen_object(fullname) + + @classmethod + @_requires_frozen + def get_source(cls, fullname): + """Return None as frozen modules do not have source code.""" + return None + + @classmethod + @_requires_frozen + def is_package(cls, fullname): + """Return if the frozen module is a package.""" + return imp.is_frozen_package(fullname) + + +class _LoaderBasics: + + """Base class of common code needed by both SourceLoader and + _SourcelessFileLoader.""" + + def is_package(self, fullname): + """Concrete implementation of InspectLoader.is_package by checking if + the path returned by get_filename has a filename of '__init__.py'.""" + filename = self.get_filename(fullname).rpartition(path_sep)[2] + return filename.rsplit('.', 1)[0] == '__init__' + + def _bytes_from_bytecode(self, fullname, data, source_stats): + """Return the marshalled bytes from bytecode, verifying the magic + number, timestamp and source size along the way. + + If source_stats is None then skip the timestamp check. + + """ + magic = data[:4] + raw_timestamp = data[4:8] + raw_size = data[8:12] + if len(magic) != 4 or magic != imp.get_magic(): + raise ImportError("bad magic number in {}".format(fullname)) + elif len(raw_timestamp) != 4: + raise EOFError("bad timestamp in {}".format(fullname)) + elif len(raw_size) != 4: + raise EOFError("bad size in {}".format(fullname)) + if source_stats is not None: + try: + source_mtime = int(source_stats['mtime']) + except KeyError: + pass + else: + if _r_long(raw_timestamp) != source_mtime: + raise ImportError("bytecode is stale for {}".format(fullname)) + try: + source_size = source_stats['size'] & 0xFFFFFFFF + except KeyError: + pass + else: + if _r_long(raw_size) != source_size: + raise ImportError("bytecode is stale for {}".format(fullname)) + # Can't return the code object as errors from marshal loading need to + # propagate even when source is available. + return data[12:] + + @module_for_loader + def _load_module(self, module, *, sourceless=False): + """Helper for load_module able to handle either source or sourceless + loading.""" + name = module.__name__ + code_object = self.get_code(name) + module.__file__ = self.get_filename(name) + if not sourceless: + module.__cached__ = imp.cache_from_source(module.__file__) + else: + module.__cached__ = module.__file__ + module.__package__ = name + if self.is_package(name): + module.__path__ = [module.__file__.rsplit(path_sep, 1)[0]] + else: + module.__package__ = module.__package__.rpartition('.')[0] + module.__loader__ = self + exec(code_object, module.__dict__) + return module + + +class SourceLoader(_LoaderBasics): + + def path_mtime(self, path): + """Optional method that returns the modification time (an int) for the + specified path, where path is a str. + """ + raise NotImplementedError + + def path_stats(self, path): + """Optional method returning a metadata dict for the specified path + to by the path (str). + Possible keys: + - 'mtime' (mandatory) is the numeric timestamp of last source + code modification; + - 'size' (optional) is the size in bytes of the source code. + + Implementing this method allows the loader to read bytecode files. + """ + return {'mtime': self.path_mtime(path)} + + def set_data(self, path, data): + """Optional method which writes data (bytes) to a file path (a str). + + Implementing this method allows for the writing of bytecode files. + + """ + raise NotImplementedError + + + def get_source(self, fullname): + """Concrete implementation of InspectLoader.get_source.""" + import tokenize + path = self.get_filename(fullname) + try: + source_bytes = self.get_data(path) + except IOError: + raise ImportError("source not available through get_data()") + encoding = tokenize.detect_encoding(_io.BytesIO(source_bytes).readline) + newline_decoder = _io.IncrementalNewlineDecoder(None, True) + return newline_decoder.decode(source_bytes.decode(encoding[0])) + + def get_code(self, fullname): + """Concrete implementation of InspectLoader.get_code. + + Reading of bytecode requires path_stats to be implemented. To write + bytecode, set_data must also be implemented. + + """ + source_path = self.get_filename(fullname) + bytecode_path = imp.cache_from_source(source_path) + source_mtime = None + if bytecode_path is not None: + try: + st = self.path_stats(source_path) + except NotImplementedError: + pass + else: + source_mtime = int(st['mtime']) + try: + data = self.get_data(bytecode_path) + except IOError: + pass + else: + try: + bytes_data = self._bytes_from_bytecode(fullname, data, + st) + except (ImportError, EOFError): + pass + else: + found = marshal.loads(bytes_data) + if isinstance(found, code_type): + imp._fix_co_filename(found, source_path) + return found + else: + msg = "Non-code object in {}" + raise ImportError(msg.format(bytecode_path)) + source_bytes = self.get_data(source_path) + code_object = compile(source_bytes, source_path, 'exec', + dont_inherit=True) + if (not sys.dont_write_bytecode and bytecode_path is not None and + source_mtime is not None): + # If e.g. Jython ever implements imp.cache_from_source to have + # their own cached file format, this block of code will most likely + # throw an exception. + data = bytearray(imp.get_magic()) + data.extend(_w_long(source_mtime)) + data.extend(_w_long(len(source_bytes))) + data.extend(marshal.dumps(code_object)) + try: + self.set_data(bytecode_path, data) + except NotImplementedError: + pass + return code_object + + def load_module(self, fullname): + """Concrete implementation of Loader.load_module. + + Requires ExecutionLoader.get_filename and ResourceLoader.get_data to be + implemented to load source code. Use of bytecode is dictated by whether + get_code uses/writes bytecode. + + """ + return self._load_module(fullname) + + +class _FileLoader: + + """Base file loader class which implements the loader protocol methods that + require file system usage.""" + + def __init__(self, fullname, path): + """Cache the module name and the path to the file found by the + finder.""" + self._name = fullname + self._path = path + + @_check_name + def get_filename(self, fullname): + """Return the path to the source file as found by the finder.""" + return self._path + + def get_data(self, path): + """Return the data from path as raw bytes.""" + with _io.FileIO(path, 'r') as file: + return file.read() + + +class _SourceFileLoader(_FileLoader, SourceLoader): + + """Concrete implementation of SourceLoader using the file system.""" + + def path_stats(self, path): + """Return the metadat for the path.""" + st = _os.stat(path) + return {'mtime': st.st_mtime, 'size': st.st_size} + + def set_data(self, path, data): + """Write bytes data to a file.""" + parent, _, filename = path.rpartition(path_sep) + path_parts = [] + # Figure out what directories are missing. + while parent and not _path_isdir(parent): + parent, _, part = parent.rpartition(path_sep) + path_parts.append(part) + # Create needed directories. + for part in reversed(path_parts): + parent = _path_join(parent, part) + try: + _os.mkdir(parent) + except FileExistsError: + # Probably another Python process already created the dir. + continue + except PermissionError: + # If can't get proper access, then just forget about writing + # the data. + return + try: + _write_atomic(path, data) + except (PermissionError, FileExistsError): + # Don't worry if you can't write bytecode or someone is writing + # it at the same time. + pass + + +class _SourcelessFileLoader(_FileLoader, _LoaderBasics): + + """Loader which handles sourceless file imports.""" + + def load_module(self, fullname): + return self._load_module(fullname, sourceless=True) + + def get_code(self, fullname): + path = self.get_filename(fullname) + data = self.get_data(path) + bytes_data = self._bytes_from_bytecode(fullname, data, None) + found = marshal.loads(bytes_data) + if isinstance(found, code_type): + return found + else: + raise ImportError("Non-code object in {}".format(path)) + + def get_source(self, fullname): + """Return None as there is no source code.""" + return None + + +class _ExtensionFileLoader: + + """Loader for extension modules. + + The constructor is designed to work with FileFinder. + + """ + + def __init__(self, name, path): + """Initialize the loader. + + If is_pkg is True then an exception is raised as extension modules + cannot be the __init__ module for an extension module. + + """ + self._name = name + self._path = path + + @_check_name + @set_package + @set_loader + def load_module(self, fullname): + """Load an extension module.""" + is_reload = fullname in sys.modules + try: + return imp.load_dynamic(fullname, self._path) + except: + if not is_reload and fullname in sys.modules: + del sys.modules[fullname] + raise + + @_check_name + def is_package(self, fullname): + """Return False as an extension module can never be a package.""" + return False + + @_check_name + def get_code(self, fullname): + """Return None as an extension module cannot create a code object.""" + return None + + @_check_name + def get_source(self, fullname): + """Return None as extension modules have no source code.""" + return None + + +# Finders ##################################################################### + +class PathFinder: + + """Meta path finder for sys.(path|path_hooks|path_importer_cache).""" + + @classmethod + def _path_hooks(cls, path, hooks=None): + """Search sequence of hooks for a finder for 'path'. + + If 'hooks' is false then use sys.path_hooks. + + """ + if not hooks: + hooks = sys.path_hooks + for hook in hooks: + try: + return hook(path) + except ImportError: + continue + else: + raise ImportError("no path hook found for {0}".format(path)) + + @classmethod + def _path_importer_cache(cls, path, default=None): + """Get the finder for the path from sys.path_importer_cache. + + If the path is not in the cache, find the appropriate finder and cache + it. If None is cached, get the default finder and cache that + (if applicable). + + Because of NullImporter, some finder should be returned. The only + explicit fail case is if None is cached but the path cannot be used for + the default hook, for which ImportError is raised. + + """ + try: + finder = sys.path_importer_cache[path] + except KeyError: + finder = cls._path_hooks(path) + sys.path_importer_cache[path] = finder + else: + if finder is None and default: + # Raises ImportError on failure. + finder = default(path) + sys.path_importer_cache[path] = finder + return finder + + @classmethod + def find_module(cls, fullname, path=None): + """Find the module on sys.path or 'path' based on sys.path_hooks and + sys.path_importer_cache.""" + if not path: + path = sys.path + for entry in path: + try: + finder = cls._path_importer_cache(entry) + except ImportError: + continue + if finder: + loader = finder.find_module(fullname) + if loader: + return loader + else: + return None + + +class _FileFinder: + + """File-based finder. + + Constructor takes a list of objects detailing what file extensions their + loader supports along with whether it can be used for a package. + + """ + + def __init__(self, path, *details): + """Initialize with finder details.""" + packages = [] + modules = [] + for detail in details: + modules.extend((suffix, detail.loader) for suffix in detail.suffixes) + if detail.supports_packages: + packages.extend((suffix, detail.loader) + for suffix in detail.suffixes) + self.packages = packages + self.modules = modules + self.path = path + + def find_module(self, fullname): + """Try to find a loader for the specified module.""" + tail_module = fullname.rpartition('.')[2] + base_path = _path_join(self.path, tail_module) + if _path_isdir(base_path) and _case_ok(self.path, tail_module): + for suffix, loader in self.packages: + init_filename = '__init__' + suffix + full_path = _path_join(base_path, init_filename) + if (_path_isfile(full_path) and + _case_ok(base_path, init_filename)): + return loader(fullname, full_path) + else: + msg = "Not importing directory {}: missing __init__" + _warnings.warn(msg.format(base_path), ImportWarning) + for suffix, loader in self.modules: + mod_filename = tail_module + suffix + full_path = _path_join(self.path, mod_filename) + if _path_isfile(full_path) and _case_ok(self.path, mod_filename): + return loader(fullname, full_path) + return None + +class _SourceFinderDetails: + + loader = _SourceFileLoader + supports_packages = True + + def __init__(self): + self.suffixes = _suffix_list(imp.PY_SOURCE) + +class _SourcelessFinderDetails: + + loader = _SourcelessFileLoader + supports_packages = True + + def __init__(self): + self.suffixes = _suffix_list(imp.PY_COMPILED) + + +class _ExtensionFinderDetails: + + loader = _ExtensionFileLoader + supports_packages = False + + def __init__(self): + self.suffixes = _suffix_list(imp.C_EXTENSION) + + +# Import itself ############################################################### + +def _file_path_hook(path): + """If the path is a directory, return a file-based finder.""" + if _path_isdir(path): + return _FileFinder(path, _ExtensionFinderDetails(), + _SourceFinderDetails(), + _SourcelessFinderDetails()) + else: + raise ImportError("only directories are supported") + + +_DEFAULT_PATH_HOOK = _file_path_hook + +class _DefaultPathFinder(PathFinder): + + """Subclass of PathFinder that implements implicit semantics for + __import__.""" + + @classmethod + def _path_hooks(cls, path): + """Search sys.path_hooks as well as implicit path hooks.""" + try: + return super()._path_hooks(path) + except ImportError: + implicit_hooks = [_DEFAULT_PATH_HOOK, imp.NullImporter] + return super()._path_hooks(path, implicit_hooks) + + @classmethod + def _path_importer_cache(cls, path): + """Use the default path hook when None is stored in + sys.path_importer_cache.""" + return super()._path_importer_cache(path, _DEFAULT_PATH_HOOK) + + +class _ImportLockContext: + + """Context manager for the import lock.""" + + def __enter__(self): + """Acquire the import lock.""" + imp.acquire_lock() + + def __exit__(self, exc_type, exc_value, exc_traceback): + """Release the import lock regardless of any raised exceptions.""" + imp.release_lock() + + +_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, _DefaultPathFinder] + +_ERR_MSG = 'No module named {!r}' + +def _gcd_import(name, package=None, level=0): + """Import and return the module based on its name, the package the call is + being made from, and the level adjustment. + + This function represents the greatest common denominator of functionality + between import_module and __import__. This includes setting __package__ if + the loader did not. + + """ + if package: + if not hasattr(package, 'rindex'): + raise ValueError("__package__ not set to a string") + elif package not in sys.modules: + msg = ("Parent module {0!r} not loaded, cannot perform relative " + "import") + raise SystemError(msg.format(package)) + if not name and level == 0: + raise ValueError("Empty module name") + if level > 0: + dot = len(package) + for x in range(level, 1, -1): + try: + dot = package.rindex('.', 0, dot) + except ValueError: + raise ValueError("attempted relative import beyond " + "top-level package") + if name: + name = "{0}.{1}".format(package[:dot], name) + else: + name = package[:dot] + with _ImportLockContext(): + try: + module = sys.modules[name] + if module is None: + message = ("import of {} halted; " + "None in sys.modules".format(name)) + raise ImportError(message) + return module + except KeyError: + pass + parent = name.rpartition('.')[0] + path = None + if parent: + if parent not in sys.modules: + _gcd_import(parent) + # Backwards-compatibility; be nicer to skip the dict lookup. + parent_module = sys.modules[parent] + try: + path = parent_module.__path__ + except AttributeError: + msg = (_ERR_MSG + '; {} is not a package').format(name, parent) + raise ImportError(msg) + meta_path = sys.meta_path + _IMPLICIT_META_PATH + for finder in meta_path: + loader = finder.find_module(name, path) + if loader is not None: + # The parent import may have already imported this module. + if name not in sys.modules: + loader.load_module(name) + break + else: + raise ImportError(_ERR_MSG.format(name)) + # Backwards-compatibility; be nicer to skip the dict lookup. + module = sys.modules[name] + if parent: + # Set the module as an attribute on its parent. + setattr(parent_module, name.rpartition('.')[2], module) + # Set __package__ if the loader did not. + if not hasattr(module, '__package__') or module.__package__ is None: + # Watch out for what comes out of sys.modules to not be a module, + # e.g. an int. + try: + module.__package__ = module.__name__ + if not hasattr(module, '__path__'): + module.__package__ = module.__package__.rpartition('.')[0] + except AttributeError: + pass + return module + + +def __import__(name, globals={}, locals={}, fromlist=[], level=0): + """Import a module. + + The 'globals' argument is used to infer where the import is occuring from + to handle relative imports. The 'locals' argument is ignored. The + 'fromlist' argument specifies what should exist as attributes on the module + being imported (e.g. ``from module import ``). The 'level' + argument represents the package location to import from in a relative + import (e.g. ``from ..pkg import mod`` would have a 'level' of 2). + + """ + if not hasattr(name, 'rpartition'): + raise TypeError("module name must be str, not {}".format(type(name))) + if level == 0: + module = _gcd_import(name) + else: + # __package__ is not guaranteed to be defined or could be set to None + # to represent that its proper value is unknown + package = globals.get('__package__') + if package is None: + package = globals['__name__'] + if '__path__' not in globals: + package = package.rpartition('.')[0] + module = _gcd_import(name, package, level) + # The hell that is fromlist ... + if not fromlist: + # Return up to the first dot in 'name'. This is complicated by the fact + # that 'name' may be relative. + if level == 0: + return sys.modules[name.partition('.')[0]] + elif not name: + return module + else: + cut_off = len(name) - len(name.partition('.')[0]) + return sys.modules[module.__name__[:-cut_off]] + else: + # If a package was imported, try to import stuff from fromlist. + if hasattr(module, '__path__'): + if '*' in fromlist and hasattr(module, '__all__'): + fromlist = list(fromlist) + fromlist.remove('*') + fromlist.extend(module.__all__) + for x in (y for y in fromlist if not hasattr(module,y)): + try: + _gcd_import('{0}.{1}'.format(module.__name__, x)) + except ImportError: + pass + return module + + +def _setup(sys_module, imp_module): + """Setup importlib by importing needed builtin modules and injecting them + into the global namespace. + + It is assumed that both imp and sys have already been imported and + injected. It is also assumed that os.sep has been set to the global + variable 'path_sep' as it is a basic requirement for source loading. + + """ + global imp, sys + imp = imp_module + sys = sys_module + + self_module = sys.modules[__name__] + for builtin_name in ('_io', '_warnings', 'builtins', 'marshal'): + if builtin_name not in sys.modules: + builtin_module = BuiltinImporter.load_module(builtin_name) + else: + builtin_module = sys.modules[builtin_name] + setattr(self_module, builtin_name, builtin_module) + + for builtin_os, path_sep in [('posix', '/'), ('nt', '\\'), ('os2', '\\')]: + if builtin_os in sys.modules: + os_module = sys.modules[builtin_os] + break + else: + try: + os_module = BuiltinImporter.load_module(builtin_os) + # TODO: rip out os2 code after 3.3 is released as per PEP 11 + if builtin_os == 'os2' and 'EMX GCC' in sys.version: + path_sep = '/' + break + except ImportError: + continue + else: + raise ImportError('importlib requires posix or nt') + setattr(self_module, '_os', os_module) + setattr(self_module, 'path_sep', path_sep) + + +def _install(sys_module, imp_module): + """Install importlib as the implementation of import. + + It is assumed that imp and sys have been imported and injected into the + global namespace for the module prior to calling this function. + + """ + _setup(sys_module, imp_module) + orig_import = builtins.__import__ + builtins.__import__ = __import__ + builtins.__original_import__ = orig_import + diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/__init__.py --- a/Lib/importlib/__init__.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/__init__.py Fri Feb 03 15:24:06 2012 -0500 @@ -20,48 +20,23 @@ """ __all__ = ['__import__', 'import_module'] -from . import _bootstrap +import _importlib -import os -import re -import tokenize +import imp +import sys # To simplify imports in test code -_w_long = _bootstrap._w_long -_r_long = _bootstrap._r_long +_w_long = _importlib._w_long +_r_long = _importlib._r_long # Bootstrap help ##################################################### - -# Required built-in modules. -try: - import posix as _os -except ImportError: - try: - import nt as _os - except ImportError: - try: - import os2 as _os - except ImportError: - raise ImportError('posix, nt, or os2 module required for importlib') -_bootstrap._os = _os -import imp, sys, marshal, _io -_bootstrap.imp = imp -_bootstrap.sys = sys -_bootstrap.marshal = marshal -_bootstrap._io = _io -import _warnings -_bootstrap._warnings = _warnings - - -from os import sep -# For os.path.join replacement; pull from Include/osdefs.h:SEP . -_bootstrap.path_sep = sep +_importlib._setup(sys, imp) # Public API ######################################################### -from ._bootstrap import __import__ +from _importlib import __import__ def import_module(name, package=None): @@ -80,4 +55,4 @@ if character != '.': break level += 1 - return _bootstrap._gcd_import(name[level:], package, level) + return _importlib._gcd_import(name[level:], package, level) diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py Fri Feb 03 12:08:32 2012 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,996 +0,0 @@ -"""Core implementation of import. - -This module is NOT meant to be directly imported! It has been designed such -that it can be bootstrapped into Python as the implementation of import. As -such it requires the injection of specific modules and attributes in order to -work. One should use importlib as the public-facing version of this module. - -""" - -# Injected modules are '_warnings', 'imp', 'sys', 'marshal', '_io', -# and '_os' (a.k.a. 'posix', 'nt' or 'os2'). -# Injected attribute is path_sep. -# -# When editing this code be aware that code executed at import time CANNOT -# reference any injected objects! This includes not only global code but also -# anything specified at the class level. - - -# Bootstrap-related code ###################################################### - -# TODO: when not on any of these platforms, replace _case_ok() w/ -# ``lambda x,y: True``. -CASE_OK_PLATFORMS = 'win', 'cygwin', 'darwin' - -def _case_ok(directory, check): - """Check if the directory contains something matching 'check' - case-sensitively when running on Windows or OS X. - - If running on Window or OS X and PYTHONCASEOK is a defined environment - variable then no case-sensitive check is performed. No check is done to see - if what is being checked for exists, so if the platform is not Windows or - OS X then assume the case is fine. - - """ - if (any(map(sys.platform.startswith, CASE_OK_PLATFORMS)) and - b'PYTHONCASEOK' not in _os.environ): - if not directory: - directory = '.' - if check in _os.listdir(directory): - return True - else: - return False - else: - return True - - - -# TODO: Expose from marshal -def _w_long(x): - """Convert a 32-bit integer to little-endian. - - XXX Temporary until marshal's long functions are exposed. - - """ - x = int(x) - int_bytes = [] - int_bytes.append(x & 0xFF) - int_bytes.append((x >> 8) & 0xFF) - int_bytes.append((x >> 16) & 0xFF) - int_bytes.append((x >> 24) & 0xFF) - return bytearray(int_bytes) - - -# TODO: Expose from marshal -def _r_long(int_bytes): - """Convert 4 bytes in little-endian to an integer. - - XXX Temporary until marshal's long function are exposed. - - """ - x = int_bytes[0] - x |= int_bytes[1] << 8 - x |= int_bytes[2] << 16 - x |= int_bytes[3] << 24 - return x - - - -# XXX Could also expose Modules/getpath.c:joinpath() -def _path_join(*args): - """Replacement for os.path.join.""" - return path_sep.join(x[:-len(path_sep)] if x.endswith(path_sep) else x - for x in args if x) - - -def _path_exists(path): - """Replacement for os.path.exists.""" - try: - _os.stat(path) - except OSError: - return False - else: - return True - - -def _path_is_mode_type(path, mode): - """Test whether the path is the specified mode type.""" - try: - stat_info = _os.stat(path) - except OSError: - return False - return (stat_info.st_mode & 0o170000) == mode - - -# XXX Could also expose Modules/getpath.c:isfile() -def _path_isfile(path): - """Replacement for os.path.isfile.""" - return _path_is_mode_type(path, 0o100000) - - -# XXX Could also expose Modules/getpath.c:isdir() -def _path_isdir(path): - """Replacement for os.path.isdir.""" - if not path: - path = _os.getcwd() - return _path_is_mode_type(path, 0o040000) - - -def _path_without_ext(path, ext_type): - """Replacement for os.path.splitext()[0].""" - for suffix in _suffix_list(ext_type): - if path.endswith(suffix): - return path[:-len(suffix)] - else: - raise ValueError("path is not of the specified type") - - -def _path_absolute(path): - """Replacement for os.path.abspath.""" - if not path: - path = _os.getcwd() - try: - return _os._getfullpathname(path) - except AttributeError: - if path.startswith('/'): - return path - else: - return _path_join(_os.getcwd(), path) - - -def _write_atomic(path, data): - """Best-effort function to write data to a path atomically. - Be prepared to handle a FileExistsError if concurrent writing of the - temporary file is attempted.""" - # Renaming should be atomic on most platforms (including Windows). - # Under Windows, the limitation is that we can't rename() to an existing - # path, while POSIX will overwrite it. But here we don't really care - # if there is a glimpse of time during which the final pyc file doesn't - # exist. - # id() is used to generate a pseudo-random filename. - path_tmp = '{}.{}'.format(path, id(path)) - fd = _os.open(path_tmp, _os.O_EXCL | _os.O_CREAT | _os.O_WRONLY, 0o666) - try: - with _io.FileIO(fd, 'wb') as file: - file.write(data) - try: - _os.rename(path_tmp, path) - except FileExistsError: - # Windows (if we had access to MoveFileEx, we could overwrite) - _os.unlink(path) - _os.rename(path_tmp, path) - except OSError: - try: - _os.unlink(path_tmp) - except OSError: - pass - raise - - -def _wrap(new, old): - """Simple substitute for functools.wraps.""" - for replace in ['__module__', '__name__', '__qualname__', '__doc__']: - setattr(new, replace, getattr(old, replace)) - new.__dict__.update(old.__dict__) - - -code_type = type(_wrap.__code__) - -# Finder/loader utility code ################################################## - -def set_package(fxn): - """Set __package__ on the returned module.""" - def set_package_wrapper(*args, **kwargs): - module = fxn(*args, **kwargs) - if not hasattr(module, '__package__') or module.__package__ is None: - module.__package__ = module.__name__ - if not hasattr(module, '__path__'): - module.__package__ = module.__package__.rpartition('.')[0] - return module - _wrap(set_package_wrapper, fxn) - return set_package_wrapper - - -def set_loader(fxn): - """Set __loader__ on the returned module.""" - def set_loader_wrapper(self, *args, **kwargs): - module = fxn(self, *args, **kwargs) - if not hasattr(module, '__loader__'): - module.__loader__ = self - return module - _wrap(set_loader_wrapper, fxn) - return set_loader_wrapper - - -def module_for_loader(fxn): - """Decorator to handle selecting the proper module for loaders. - - The decorated function is passed the module to use instead of the module - name. The module passed in to the function is either from sys.modules if - it already exists or is a new module which has __name__ set and is inserted - into sys.modules. If an exception is raised and the decorator created the - module it is subsequently removed from sys.modules. - - The decorator assumes that the decorated function takes the module name as - the second argument. - - """ - def module_for_loader_wrapper(self, fullname, *args, **kwargs): - module = sys.modules.get(fullname) - is_reload = bool(module) - if not is_reload: - # This must be done before open() is called as the 'io' module - # implicitly imports 'locale' and would otherwise trigger an - # infinite loop. - module = imp.new_module(fullname) - sys.modules[fullname] = module - try: - return fxn(self, module, *args, **kwargs) - except: - if not is_reload: - del sys.modules[fullname] - raise - _wrap(module_for_loader_wrapper, fxn) - return module_for_loader_wrapper - - -def _check_name(method): - """Decorator to verify that the module being requested matches the one the - loader can handle. - - The first argument (self) must define _name which the second argument is - compared against. If the comparison fails then ImportError is raised. - - """ - def _check_name_wrapper(self, name, *args, **kwargs): - if self._name != name: - raise ImportError("loader cannot handle %s" % name) - return method(self, name, *args, **kwargs) - _wrap(_check_name_wrapper, method) - return _check_name_wrapper - - -def _requires_builtin(fxn): - """Decorator to verify the named module is built-in.""" - def _requires_builtin_wrapper(self, fullname): - if fullname not in sys.builtin_module_names: - raise ImportError("{0} is not a built-in module".format(fullname)) - return fxn(self, fullname) - _wrap(_requires_builtin_wrapper, fxn) - return _requires_builtin_wrapper - - -def _requires_frozen(fxn): - """Decorator to verify the named module is frozen.""" - def _requires_frozen_wrapper(self, fullname): - if not imp.is_frozen(fullname): - raise ImportError("{0} is not a frozen module".format(fullname)) - return fxn(self, fullname) - _wrap(_requires_frozen_wrapper, fxn) - return _requires_frozen_wrapper - - -def _suffix_list(suffix_type): - """Return a list of file suffixes based on the imp file type.""" - return [suffix[0] for suffix in imp.get_suffixes() - if suffix[2] == suffix_type] - - -# Loaders ##################################################################### - -class BuiltinImporter: - - """Meta path import for built-in modules. - - All methods are either class or static methods to avoid the need to - instantiate the class. - - """ - - @classmethod - def find_module(cls, fullname, path=None): - """Find the built-in module. - - If 'path' is ever specified then the search is considered a failure. - - """ - if path is not None: - return None - return cls if imp.is_builtin(fullname) else None - - @classmethod - @set_package - @set_loader - @_requires_builtin - def load_module(cls, fullname): - """Load a built-in module.""" - is_reload = fullname in sys.modules - try: - return imp.init_builtin(fullname) - except: - if not is_reload and fullname in sys.modules: - del sys.modules[fullname] - raise - - @classmethod - @_requires_builtin - def get_code(cls, fullname): - """Return None as built-in modules do not have code objects.""" - return None - - @classmethod - @_requires_builtin - def get_source(cls, fullname): - """Return None as built-in modules do not have source code.""" - return None - - @classmethod - @_requires_builtin - def is_package(cls, fullname): - """Return None as built-in modules are never packages.""" - return False - - -class FrozenImporter: - - """Meta path import for frozen modules. - - All methods are either class or static methods to avoid the need to - instantiate the class. - - """ - - @classmethod - def find_module(cls, fullname, path=None): - """Find a frozen module.""" - return cls if imp.is_frozen(fullname) else None - - @classmethod - @set_package - @set_loader - @_requires_frozen - def load_module(cls, fullname): - """Load a frozen module.""" - is_reload = fullname in sys.modules - try: - return imp.init_frozen(fullname) - except: - if not is_reload and fullname in sys.modules: - del sys.modules[fullname] - raise - - @classmethod - @_requires_frozen - def get_code(cls, fullname): - """Return the code object for the frozen module.""" - return imp.get_frozen_object(fullname) - - @classmethod - @_requires_frozen - def get_source(cls, fullname): - """Return None as frozen modules do not have source code.""" - return None - - @classmethod - @_requires_frozen - def is_package(cls, fullname): - """Return if the frozen module is a package.""" - return imp.is_frozen_package(fullname) - - -class _LoaderBasics: - - """Base class of common code needed by both SourceLoader and - _SourcelessFileLoader.""" - - def is_package(self, fullname): - """Concrete implementation of InspectLoader.is_package by checking if - the path returned by get_filename has a filename of '__init__.py'.""" - filename = self.get_filename(fullname).rpartition(path_sep)[2] - return filename.rsplit('.', 1)[0] == '__init__' - - def _bytes_from_bytecode(self, fullname, data, source_stats): - """Return the marshalled bytes from bytecode, verifying the magic - number, timestamp and source size along the way. - - If source_stats is None then skip the timestamp check. - - """ - magic = data[:4] - raw_timestamp = data[4:8] - raw_size = data[8:12] - if len(magic) != 4 or magic != imp.get_magic(): - raise ImportError("bad magic number in {}".format(fullname)) - elif len(raw_timestamp) != 4: - raise EOFError("bad timestamp in {}".format(fullname)) - elif len(raw_size) != 4: - raise EOFError("bad size in {}".format(fullname)) - if source_stats is not None: - try: - source_mtime = int(source_stats['mtime']) - except KeyError: - pass - else: - if _r_long(raw_timestamp) != source_mtime: - raise ImportError("bytecode is stale for {}".format(fullname)) - try: - source_size = source_stats['size'] & 0xFFFFFFFF - except KeyError: - pass - else: - if _r_long(raw_size) != source_size: - raise ImportError("bytecode is stale for {}".format(fullname)) - # Can't return the code object as errors from marshal loading need to - # propagate even when source is available. - return data[12:] - - @module_for_loader - def _load_module(self, module, *, sourceless=False): - """Helper for load_module able to handle either source or sourceless - loading.""" - name = module.__name__ - code_object = self.get_code(name) - module.__file__ = self.get_filename(name) - if not sourceless: - module.__cached__ = imp.cache_from_source(module.__file__) - else: - module.__cached__ = module.__file__ - module.__package__ = name - if self.is_package(name): - module.__path__ = [module.__file__.rsplit(path_sep, 1)[0]] - else: - module.__package__ = module.__package__.rpartition('.')[0] - module.__loader__ = self - exec(code_object, module.__dict__) - return module - - -class SourceLoader(_LoaderBasics): - - def path_mtime(self, path): - """Optional method that returns the modification time (an int) for the - specified path, where path is a str. - """ - raise NotImplementedError - - def path_stats(self, path): - """Optional method returning a metadata dict for the specified path - to by the path (str). - Possible keys: - - 'mtime' (mandatory) is the numeric timestamp of last source - code modification; - - 'size' (optional) is the size in bytes of the source code. - - Implementing this method allows the loader to read bytecode files. - """ - return {'mtime': self.path_mtime(path)} - - def set_data(self, path, data): - """Optional method which writes data (bytes) to a file path (a str). - - Implementing this method allows for the writing of bytecode files. - - """ - raise NotImplementedError - - - def get_source(self, fullname): - """Concrete implementation of InspectLoader.get_source.""" - import tokenize - path = self.get_filename(fullname) - try: - source_bytes = self.get_data(path) - except IOError: - raise ImportError("source not available through get_data()") - encoding = tokenize.detect_encoding(_io.BytesIO(source_bytes).readline) - newline_decoder = _io.IncrementalNewlineDecoder(None, True) - return newline_decoder.decode(source_bytes.decode(encoding[0])) - - def get_code(self, fullname): - """Concrete implementation of InspectLoader.get_code. - - Reading of bytecode requires path_stats to be implemented. To write - bytecode, set_data must also be implemented. - - """ - source_path = self.get_filename(fullname) - bytecode_path = imp.cache_from_source(source_path) - source_mtime = None - if bytecode_path is not None: - try: - st = self.path_stats(source_path) - except NotImplementedError: - pass - else: - source_mtime = int(st['mtime']) - try: - data = self.get_data(bytecode_path) - except IOError: - pass - else: - try: - bytes_data = self._bytes_from_bytecode(fullname, data, - st) - except (ImportError, EOFError): - pass - else: - found = marshal.loads(bytes_data) - if isinstance(found, code_type): - imp._fix_co_filename(found, source_path) - return found - else: - msg = "Non-code object in {}" - raise ImportError(msg.format(bytecode_path)) - source_bytes = self.get_data(source_path) - code_object = compile(source_bytes, source_path, 'exec', - dont_inherit=True) - if (not sys.dont_write_bytecode and bytecode_path is not None and - source_mtime is not None): - # If e.g. Jython ever implements imp.cache_from_source to have - # their own cached file format, this block of code will most likely - # throw an exception. - data = bytearray(imp.get_magic()) - data.extend(_w_long(source_mtime)) - data.extend(_w_long(len(source_bytes))) - data.extend(marshal.dumps(code_object)) - try: - self.set_data(bytecode_path, data) - except NotImplementedError: - pass - return code_object - - def load_module(self, fullname): - """Concrete implementation of Loader.load_module. - - Requires ExecutionLoader.get_filename and ResourceLoader.get_data to be - implemented to load source code. Use of bytecode is dictated by whether - get_code uses/writes bytecode. - - """ - return self._load_module(fullname) - - -class _FileLoader: - - """Base file loader class which implements the loader protocol methods that - require file system usage.""" - - def __init__(self, fullname, path): - """Cache the module name and the path to the file found by the - finder.""" - self._name = fullname - self._path = path - - @_check_name - def get_filename(self, fullname): - """Return the path to the source file as found by the finder.""" - return self._path - - def get_data(self, path): - """Return the data from path as raw bytes.""" - with _io.FileIO(path, 'r') as file: - return file.read() - - -class _SourceFileLoader(_FileLoader, SourceLoader): - - """Concrete implementation of SourceLoader using the file system.""" - - def path_stats(self, path): - """Return the metadat for the path.""" - st = _os.stat(path) - return {'mtime': st.st_mtime, 'size': st.st_size} - - def set_data(self, path, data): - """Write bytes data to a file.""" - parent, _, filename = path.rpartition(path_sep) - path_parts = [] - # Figure out what directories are missing. - while parent and not _path_isdir(parent): - parent, _, part = parent.rpartition(path_sep) - path_parts.append(part) - # Create needed directories. - for part in reversed(path_parts): - parent = _path_join(parent, part) - try: - _os.mkdir(parent) - except FileExistsError: - # Probably another Python process already created the dir. - continue - except PermissionError: - # If can't get proper access, then just forget about writing - # the data. - return - try: - _write_atomic(path, data) - except (PermissionError, FileExistsError): - # Don't worry if you can't write bytecode or someone is writing - # it at the same time. - pass - - -class _SourcelessFileLoader(_FileLoader, _LoaderBasics): - - """Loader which handles sourceless file imports.""" - - def load_module(self, fullname): - return self._load_module(fullname, sourceless=True) - - def get_code(self, fullname): - path = self.get_filename(fullname) - data = self.get_data(path) - bytes_data = self._bytes_from_bytecode(fullname, data, None) - found = marshal.loads(bytes_data) - if isinstance(found, code_type): - return found - else: - raise ImportError("Non-code object in {}".format(path)) - - def get_source(self, fullname): - """Return None as there is no source code.""" - return None - - -class _ExtensionFileLoader: - - """Loader for extension modules. - - The constructor is designed to work with FileFinder. - - """ - - def __init__(self, name, path): - """Initialize the loader. - - If is_pkg is True then an exception is raised as extension modules - cannot be the __init__ module for an extension module. - - """ - self._name = name - self._path = path - - @_check_name - @set_package - @set_loader - def load_module(self, fullname): - """Load an extension module.""" - is_reload = fullname in sys.modules - try: - return imp.load_dynamic(fullname, self._path) - except: - if not is_reload and fullname in sys.modules: - del sys.modules[fullname] - raise - - @_check_name - def is_package(self, fullname): - """Return False as an extension module can never be a package.""" - return False - - @_check_name - def get_code(self, fullname): - """Return None as an extension module cannot create a code object.""" - return None - - @_check_name - def get_source(self, fullname): - """Return None as extension modules have no source code.""" - return None - - -# Finders ##################################################################### - -class PathFinder: - - """Meta path finder for sys.(path|path_hooks|path_importer_cache).""" - - @classmethod - def _path_hooks(cls, path, hooks=None): - """Search sequence of hooks for a finder for 'path'. - - If 'hooks' is false then use sys.path_hooks. - - """ - if not hooks: - hooks = sys.path_hooks - for hook in hooks: - try: - return hook(path) - except ImportError: - continue - else: - raise ImportError("no path hook found for {0}".format(path)) - - @classmethod - def _path_importer_cache(cls, path, default=None): - """Get the finder for the path from sys.path_importer_cache. - - If the path is not in the cache, find the appropriate finder and cache - it. If None is cached, get the default finder and cache that - (if applicable). - - Because of NullImporter, some finder should be returned. The only - explicit fail case is if None is cached but the path cannot be used for - the default hook, for which ImportError is raised. - - """ - try: - finder = sys.path_importer_cache[path] - except KeyError: - finder = cls._path_hooks(path) - sys.path_importer_cache[path] = finder - else: - if finder is None and default: - # Raises ImportError on failure. - finder = default(path) - sys.path_importer_cache[path] = finder - return finder - - @classmethod - def find_module(cls, fullname, path=None): - """Find the module on sys.path or 'path' based on sys.path_hooks and - sys.path_importer_cache.""" - if not path: - path = sys.path - for entry in path: - try: - finder = cls._path_importer_cache(entry) - except ImportError: - continue - if finder: - loader = finder.find_module(fullname) - if loader: - return loader - else: - return None - - -class _FileFinder: - - """File-based finder. - - Constructor takes a list of objects detailing what file extensions their - loader supports along with whether it can be used for a package. - - """ - - def __init__(self, path, *details): - """Initialize with finder details.""" - packages = [] - modules = [] - for detail in details: - modules.extend((suffix, detail.loader) for suffix in detail.suffixes) - if detail.supports_packages: - packages.extend((suffix, detail.loader) - for suffix in detail.suffixes) - self.packages = packages - self.modules = modules - self.path = path - - def find_module(self, fullname): - """Try to find a loader for the specified module.""" - tail_module = fullname.rpartition('.')[2] - base_path = _path_join(self.path, tail_module) - if _path_isdir(base_path) and _case_ok(self.path, tail_module): - for suffix, loader in self.packages: - init_filename = '__init__' + suffix - full_path = _path_join(base_path, init_filename) - if (_path_isfile(full_path) and - _case_ok(base_path, init_filename)): - return loader(fullname, full_path) - else: - msg = "Not importing directory {}: missing __init__" - _warnings.warn(msg.format(base_path), ImportWarning) - for suffix, loader in self.modules: - mod_filename = tail_module + suffix - full_path = _path_join(self.path, mod_filename) - if _path_isfile(full_path) and _case_ok(self.path, mod_filename): - return loader(fullname, full_path) - return None - -class _SourceFinderDetails: - - loader = _SourceFileLoader - supports_packages = True - - def __init__(self): - self.suffixes = _suffix_list(imp.PY_SOURCE) - -class _SourcelessFinderDetails: - - loader = _SourcelessFileLoader - supports_packages = True - - def __init__(self): - self.suffixes = _suffix_list(imp.PY_COMPILED) - - -class _ExtensionFinderDetails: - - loader = _ExtensionFileLoader - supports_packages = False - - def __init__(self): - self.suffixes = _suffix_list(imp.C_EXTENSION) - - -# Import itself ############################################################### - -def _file_path_hook(path): - """If the path is a directory, return a file-based finder.""" - if _path_isdir(path): - return _FileFinder(path, _ExtensionFinderDetails(), - _SourceFinderDetails(), - _SourcelessFinderDetails()) - else: - raise ImportError("only directories are supported") - - -_DEFAULT_PATH_HOOK = _file_path_hook - -class _DefaultPathFinder(PathFinder): - - """Subclass of PathFinder that implements implicit semantics for - __import__.""" - - @classmethod - def _path_hooks(cls, path): - """Search sys.path_hooks as well as implicit path hooks.""" - try: - return super()._path_hooks(path) - except ImportError: - implicit_hooks = [_DEFAULT_PATH_HOOK, imp.NullImporter] - return super()._path_hooks(path, implicit_hooks) - - @classmethod - def _path_importer_cache(cls, path): - """Use the default path hook when None is stored in - sys.path_importer_cache.""" - return super()._path_importer_cache(path, _DEFAULT_PATH_HOOK) - - -class _ImportLockContext: - - """Context manager for the import lock.""" - - def __enter__(self): - """Acquire the import lock.""" - imp.acquire_lock() - - def __exit__(self, exc_type, exc_value, exc_traceback): - """Release the import lock regardless of any raised exceptions.""" - imp.release_lock() - - -_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, _DefaultPathFinder] - -_ERR_MSG = 'No module named {!r}' - -def _gcd_import(name, package=None, level=0): - """Import and return the module based on its name, the package the call is - being made from, and the level adjustment. - - This function represents the greatest common denominator of functionality - between import_module and __import__. This includes setting __package__ if - the loader did not. - - """ - if package: - if not hasattr(package, 'rindex'): - raise ValueError("__package__ not set to a string") - elif package not in sys.modules: - msg = ("Parent module {0!r} not loaded, cannot perform relative " - "import") - raise SystemError(msg.format(package)) - if not name and level == 0: - raise ValueError("Empty module name") - if level > 0: - dot = len(package) - for x in range(level, 1, -1): - try: - dot = package.rindex('.', 0, dot) - except ValueError: - raise ValueError("attempted relative import beyond " - "top-level package") - if name: - name = "{0}.{1}".format(package[:dot], name) - else: - name = package[:dot] - with _ImportLockContext(): - try: - module = sys.modules[name] - if module is None: - message = ("import of {} halted; " - "None in sys.modules".format(name)) - raise ImportError(message) - return module - except KeyError: - pass - parent = name.rpartition('.')[0] - path = None - if parent: - if parent not in sys.modules: - _gcd_import(parent) - # Backwards-compatibility; be nicer to skip the dict lookup. - parent_module = sys.modules[parent] - try: - path = parent_module.__path__ - except AttributeError: - msg = (_ERR_MSG + '; {} is not a package').format(name, parent) - raise ImportError(msg) - meta_path = sys.meta_path + _IMPLICIT_META_PATH - for finder in meta_path: - loader = finder.find_module(name, path) - if loader is not None: - # The parent import may have already imported this module. - if name not in sys.modules: - loader.load_module(name) - break - else: - raise ImportError(_ERR_MSG.format(name)) - # Backwards-compatibility; be nicer to skip the dict lookup. - module = sys.modules[name] - if parent: - # Set the module as an attribute on its parent. - setattr(parent_module, name.rpartition('.')[2], module) - # Set __package__ if the loader did not. - if not hasattr(module, '__package__') or module.__package__ is None: - # Watch out for what comes out of sys.modules to not be a module, - # e.g. an int. - try: - module.__package__ = module.__name__ - if not hasattr(module, '__path__'): - module.__package__ = module.__package__.rpartition('.')[0] - except AttributeError: - pass - return module - - -def __import__(name, globals={}, locals={}, fromlist=[], level=0): - """Import a module. - - The 'globals' argument is used to infer where the import is occuring from - to handle relative imports. The 'locals' argument is ignored. The - 'fromlist' argument specifies what should exist as attributes on the module - being imported (e.g. ``from module import ``). The 'level' - argument represents the package location to import from in a relative - import (e.g. ``from ..pkg import mod`` would have a 'level' of 2). - - """ - if not hasattr(name, 'rpartition'): - raise TypeError("module name must be str, not {}".format(type(name))) - if level == 0: - module = _gcd_import(name) - else: - # __package__ is not guaranteed to be defined or could be set to None - # to represent that its proper value is unknown - package = globals.get('__package__') - if package is None: - package = globals['__name__'] - if '__path__' not in globals: - package = package.rpartition('.')[0] - module = _gcd_import(name, package, level) - # The hell that is fromlist ... - if not fromlist: - # Return up to the first dot in 'name'. This is complicated by the fact - # that 'name' may be relative. - if level == 0: - return sys.modules[name.partition('.')[0]] - elif not name: - return module - else: - cut_off = len(name) - len(name.partition('.')[0]) - return sys.modules[module.__name__[:-cut_off]] - else: - # If a package was imported, try to import stuff from fromlist. - if hasattr(module, '__path__'): - if '*' in fromlist and hasattr(module, '__all__'): - fromlist = list(fromlist) - fromlist.remove('*') - fromlist.extend(module.__all__) - for x in (y for y in fromlist if not hasattr(module,y)): - try: - _gcd_import('{0}.{1}'.format(module.__name__, x)) - except ImportError: - pass - return module diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/abc.py --- a/Lib/importlib/abc.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/abc.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,7 +1,7 @@ """Abstract base classes related to import.""" -from . import _bootstrap from . import machinery from . import util +import _importlib import abc import imp import io @@ -104,7 +104,7 @@ raise NotImplementedError -class SourceLoader(_bootstrap.SourceLoader, ResourceLoader, ExecutionLoader): +class SourceLoader(_importlib.SourceLoader, ResourceLoader, ExecutionLoader): """Abstract base class for loading source code (and optionally any corresponding bytecode). @@ -260,7 +260,7 @@ raw_timestamp = data[4:8] if len(raw_timestamp) < 4: raise EOFError("bad timestamp in {}".format(fullname)) - pyc_timestamp = _bootstrap._r_long(raw_timestamp) + pyc_timestamp = _importlib._r_long(raw_timestamp) bytecode = data[8:] # Verify that the magic number is valid. if imp.get_magic() != magic: @@ -292,7 +292,7 @@ # Generate bytecode and write it out. if not sys.dont_write_bytecode: data = bytearray(imp.get_magic()) - data.extend(_bootstrap._w_long(source_timestamp)) + data.extend(_importlib._w_long(source_timestamp)) data.extend(marshal.dumps(code_object)) self.write_bytecode(fullname, data) return code_object diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/machinery.py --- a/Lib/importlib/machinery.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/machinery.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,5 +1,4 @@ """The machinery of importlib: finders, loaders, hooks, etc.""" - -from ._bootstrap import BuiltinImporter -from ._bootstrap import FrozenImporter -from ._bootstrap import PathFinder +from _importlib import BuiltinImporter +from _importlib import FrozenImporter +from _importlib import PathFinder diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/benchmark.py --- a/Lib/importlib/test/benchmark.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/benchmark.py Fri Feb 03 15:24:06 2012 -0500 @@ -173,9 +173,9 @@ print("]", "best is", format(max(results), ',d')) new_results[benchmark.__doc__] = results prev_results[import_.__module__] = new_results - if 'importlib._bootstrap' in prev_results and 'builtins' in prev_results: + if '_importlib' in prev_results and 'builtins' in prev_results: print('\n\nComparing importlib vs. __import__\n') - importlib_results = prev_results['importlib._bootstrap'] + importlib_results = prev_results['_importlib'] builtins_results = prev_results['builtins'] for benchmark in benchmarks: benchmark_name = benchmark.__doc__ diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/extension/test_case_sensitivity.py --- a/Lib/importlib/test/extension/test_case_sensitivity.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/extension/test_case_sensitivity.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,7 +1,7 @@ import sys from test import support import unittest -from importlib import _bootstrap +import _importlib from .. import util from . import util as ext_util @@ -13,14 +13,14 @@ good_name = ext_util.NAME bad_name = good_name.upper() assert good_name != bad_name - finder = _bootstrap._FileFinder(ext_util.PATH, - _bootstrap._ExtensionFinderDetails()) + finder = _importlib._FileFinder(ext_util.PATH, + _importlib._ExtensionFinderDetails()) return finder.find_module(bad_name) def test_case_sensitive(self): with support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in _bootstrap._os.environ: + if b'PYTHONCASEOK' in _importlib._os.environ: self.skipTest('os.environ changes not reflected in ' '_os.environ') loader = self.find_module() @@ -29,7 +29,7 @@ def test_case_insensitivity(self): with support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in _bootstrap._os.environ: + if b'PYTHONCASEOK' not in _importlib._os.environ: self.skipTest('os.environ changes not reflected in ' '_os.environ') loader = self.find_module() diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/extension/test_finder.py --- a/Lib/importlib/test/extension/test_finder.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/extension/test_finder.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,4 +1,4 @@ -from importlib import _bootstrap +import _importlib from .. import abc from . import util @@ -9,8 +9,8 @@ """Test the finder for extension modules.""" def find_module(self, fullname): - importer = _bootstrap._FileFinder(util.PATH, - _bootstrap._ExtensionFinderDetails()) + importer = _importlib._FileFinder(util.PATH, + _importlib._ExtensionFinderDetails()) return importer.find_module(fullname) def test_module(self): diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/extension/test_loader.py --- a/Lib/importlib/test/extension/test_loader.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/extension/test_loader.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,4 +1,4 @@ -from importlib import _bootstrap +import _importlib from . import util as ext_util from .. import abc from .. import util @@ -12,7 +12,7 @@ """Test load_module() for extension modules.""" def load_module(self, fullname): - loader = _bootstrap._ExtensionFileLoader(ext_util.NAME, + loader = _importlib._ExtensionFileLoader(ext_util.NAME, ext_util.FILEPATH) return loader.load_module(fullname) @@ -25,7 +25,7 @@ self.assertEqual(getattr(module, attr), value) self.assertTrue(ext_util.NAME in sys.modules) self.assertTrue(isinstance(module.__loader__, - _bootstrap._ExtensionFileLoader)) + _importlib._ExtensionFileLoader)) def test_package(self): # Extensions are not found in packages. diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/extension/test_path_hook.py --- a/Lib/importlib/test/extension/test_path_hook.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/extension/test_path_hook.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,4 +1,4 @@ -from importlib import _bootstrap +import _importlib from . import util import collections @@ -14,7 +14,7 @@ # XXX Should it only work for directories containing an extension module? def hook(self, entry): - return _bootstrap._file_path_hook(entry) + return _importlib._file_path_hook(entry) def test_success(self): # Path hook should handle a directory where a known extension module diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/import_/test_path.py --- a/Lib/importlib/test/import_/test_path.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/import_/test_path.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,4 +1,4 @@ -from importlib import _bootstrap +import _importlib from importlib import machinery from .. import util from . import util as import_util @@ -77,7 +77,7 @@ class DefaultPathFinderTests(unittest.TestCase): - """Test importlib._bootstrap._DefaultPathFinder.""" + """Test _importlib._DefaultPathFinder.""" def test_implicit_hooks(self): # Test that the implicit path hooks are used. @@ -87,14 +87,14 @@ existing_path = tempfile.mkdtemp() try: with util.import_state(): - nothing = _bootstrap._DefaultPathFinder.find_module(module, + nothing = _importlib._DefaultPathFinder.find_module(module, path=[existing_path]) self.assertTrue(nothing is None) self.assertTrue(existing_path in sys.path_importer_cache) result = isinstance(sys.path_importer_cache[existing_path], imp.NullImporter) self.assertFalse(result) - nothing = _bootstrap._DefaultPathFinder.find_module(module, + nothing = _importlib._DefaultPathFinder.find_module(module, path=[bad_path]) self.assertTrue(nothing is None) self.assertTrue(bad_path in sys.path_importer_cache) @@ -111,16 +111,16 @@ importer = util.mock_modules(module) path = '' # XXX Not blackbox. - original_hook = _bootstrap._DEFAULT_PATH_HOOK + original_hook = _importlib._DEFAULT_PATH_HOOK mock_hook = import_util.mock_path_hook(path, importer=importer) - _bootstrap._DEFAULT_PATH_HOOK = mock_hook + _importlib._DEFAULT_PATH_HOOK = mock_hook try: with util.import_state(path_importer_cache={path: None}): - loader = _bootstrap._DefaultPathFinder.find_module(module, + loader = _importlib._DefaultPathFinder.find_module(module, path=[path]) self.assertTrue(loader is importer) finally: - _bootstrap._DEFAULT_PATH_HOOK = original_hook + _importlib._DEFAULT_PATH_HOOK = original_hook def test_main(): diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/import_/util.py --- a/Lib/importlib/test/import_/util.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/import_/util.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,6 +1,5 @@ import functools import importlib -import importlib._bootstrap import unittest diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/regrtest.py --- a/Lib/importlib/test/regrtest.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/regrtest.py Fri Feb 03 15:24:06 2012 -0500 @@ -13,16 +13,4 @@ if __name__ == '__main__': __builtins__.__import__ = importlib.__import__ - exclude = ['--exclude', - 'test_frozen', # Does not expect __loader__ attribute - 'test_pkg', # Does not expect __loader__ attribute - 'test_pydoc', # Does not expect __loader__ attribute - ] - - # Switching on --exclude implies running all test but the ones listed, so - # only use it when one is not running an explicit test - if len(sys.argv) == 1: - # No programmatic way to specify tests to exclude - sys.argv.extend(exclude) - regrtest.main(quiet=True, verbose2=True) diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/source/test_case_sensitivity.py --- a/Lib/importlib/test/source/test_case_sensitivity.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/source/test_case_sensitivity.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,5 +1,5 @@ """Test case-sensitivity (PEP 235).""" -from importlib import _bootstrap +import _importlib from .. import util from . import util as source_util import os @@ -19,9 +19,9 @@ assert name != name.lower() def find(self, path): - finder = _bootstrap._FileFinder(path, - _bootstrap._SourceFinderDetails(), - _bootstrap._SourcelessFinderDetails()) + finder = _importlib._FileFinder(path, + _importlib._SourceFinderDetails(), + _importlib._SourcelessFinderDetails()) return finder.find_module(self.name) def sensitivity_test(self): @@ -37,7 +37,7 @@ def test_sensitive(self): with test_support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in _bootstrap._os.environ: + if b'PYTHONCASEOK' in _importlib._os.environ: self.skipTest('os.environ changes not reflected in ' '_os.environ') sensitive, insensitive = self.sensitivity_test() @@ -48,7 +48,7 @@ def test_insensitive(self): with test_support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in _bootstrap._os.environ: + if b'PYTHONCASEOK' not in _importlib._os.environ: self.skipTest('os.environ changes not reflected in ' '_os.environ') sensitive, insensitive = self.sensitivity_test() diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/source/test_file_loader.py --- a/Lib/importlib/test/source/test_file_loader.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/source/test_file_loader.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,5 +1,5 @@ +import _importlib import importlib -from importlib import _bootstrap from .. import abc from .. import util from . import util as source_util @@ -27,7 +27,7 @@ # [basic] def test_module(self): with source_util.create_modules('_temp') as mapping: - loader = _bootstrap._SourceFileLoader('_temp', mapping['_temp']) + loader = _importlib._SourceFileLoader('_temp', mapping['_temp']) module = loader.load_module('_temp') self.assertTrue('_temp' in sys.modules) check = {'__name__': '_temp', '__file__': mapping['_temp'], @@ -37,7 +37,7 @@ def test_package(self): with source_util.create_modules('_pkg.__init__') as mapping: - loader = _bootstrap._SourceFileLoader('_pkg', + loader = _importlib._SourceFileLoader('_pkg', mapping['_pkg.__init__']) module = loader.load_module('_pkg') self.assertTrue('_pkg' in sys.modules) @@ -50,7 +50,7 @@ def test_lacking_parent(self): with source_util.create_modules('_pkg.__init__', '_pkg.mod')as mapping: - loader = _bootstrap._SourceFileLoader('_pkg.mod', + loader = _importlib._SourceFileLoader('_pkg.mod', mapping['_pkg.mod']) module = loader.load_module('_pkg.mod') self.assertTrue('_pkg.mod' in sys.modules) @@ -65,7 +65,7 @@ def test_module_reuse(self): with source_util.create_modules('_temp') as mapping: - loader = _bootstrap._SourceFileLoader('_temp', mapping['_temp']) + loader = _importlib._SourceFileLoader('_temp', mapping['_temp']) module = loader.load_module('_temp') module_id = id(module) module_dict_id = id(module.__dict__) @@ -90,7 +90,7 @@ setattr(orig_module, attr, value) with open(mapping[name], 'w') as file: file.write('+++ bad syntax +++') - loader = _bootstrap._SourceFileLoader('_temp', mapping['_temp']) + loader = _importlib._SourceFileLoader('_temp', mapping['_temp']) with self.assertRaises(SyntaxError): loader.load_module(name) for attr in attributes: @@ -101,7 +101,7 @@ with source_util.create_modules('_temp') as mapping: with open(mapping['_temp'], 'w') as file: file.write('=') - loader = _bootstrap._SourceFileLoader('_temp', mapping['_temp']) + loader = _importlib._SourceFileLoader('_temp', mapping['_temp']) with self.assertRaises(SyntaxError): loader.load_module('_temp') self.assertTrue('_temp' not in sys.modules) @@ -114,7 +114,7 @@ file.write("# test file for importlib") try: with util.uncache('_temp'): - loader = _bootstrap._SourceFileLoader('_temp', file_path) + loader = _importlib._SourceFileLoader('_temp', file_path) mod = loader.load_module('_temp') self.assertEqual(file_path, mod.__file__) self.assertEqual(imp.cache_from_source(file_path), @@ -140,7 +140,7 @@ if e.errno != getattr(errno, 'EOVERFLOW', None): raise self.skipTest("cannot set modification time to large integer ({})".format(e)) - loader = _bootstrap._SourceFileLoader('_temp', mapping['_temp']) + loader = _importlib._SourceFileLoader('_temp', mapping['_temp']) mod = loader.load_module('_temp') # Sanity checks. self.assertEqual(mod.__cached__, compiled) @@ -253,7 +253,7 @@ class SourceLoaderBadBytecodeTest(BadBytecodeTest): - loader = _bootstrap._SourceFileLoader + loader = _importlib._SourceFileLoader @source_util.writes_bytecode_files def test_empty_file(self): @@ -377,7 +377,7 @@ class SourcelessLoaderBadBytecodeTest(BadBytecodeTest): - loader = _bootstrap._SourcelessFileLoader + loader = _importlib._SourcelessFileLoader def test_empty_file(self): def test(name, mapping, bytecode_path): diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/source/test_finder.py --- a/Lib/importlib/test/source/test_finder.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/source/test_finder.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,10 +1,11 @@ -from importlib import _bootstrap from .. import abc from . import util as source_util + +import _importlib +import errno +import os +import py_compile from test.support import make_legacy_pyc -import os -import errno -import py_compile import unittest import warnings @@ -34,9 +35,9 @@ """ def import_(self, root, module): - finder = _bootstrap._FileFinder(root, - _bootstrap._SourceFinderDetails(), - _bootstrap._SourcelessFinderDetails()) + finder = _importlib._FileFinder(root, + _importlib._SourceFinderDetails(), + _importlib._SourcelessFinderDetails()) return finder.find_module(module) def run_test(self, test, create=None, *, compile_=None, unlink=None): @@ -134,7 +135,7 @@ def test_empty_string_for_dir(self): # The empty string from sys.path means to search in the cwd. - finder = _bootstrap._FileFinder('', _bootstrap._SourceFinderDetails()) + finder = _importlib._FileFinder('', _importlib._SourceFinderDetails()) with open('mod.py', 'w') as file: file.write("# test file for importlib") try: diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/source/test_path_hook.py --- a/Lib/importlib/test/source/test_path_hook.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/source/test_path_hook.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,5 +1,6 @@ -from importlib import _bootstrap from . import util as source_util + +import _importlib import unittest @@ -9,12 +10,12 @@ def test_success(self): with source_util.create_modules('dummy') as mapping: - self.assertTrue(hasattr(_bootstrap._file_path_hook(mapping['.root']), + self.assertTrue(hasattr(_importlib._file_path_hook(mapping['.root']), 'find_module')) def test_empty_string(self): # The empty string represents the cwd. - self.assertTrue(hasattr(_bootstrap._file_path_hook(''), 'find_module')) + self.assertTrue(hasattr(_importlib._file_path_hook(''), 'find_module')) def test_main(): diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/test/source/test_source_encoding.py --- a/Lib/importlib/test/source/test_source_encoding.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/test/source/test_source_encoding.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,6 +1,6 @@ -from importlib import _bootstrap from . import util as source_util +import _importlib import codecs import re import sys @@ -35,7 +35,7 @@ with source_util.create_modules(self.module_name) as mapping: with open(mapping[self.module_name], 'wb') as file: file.write(source) - loader = _bootstrap._SourceFileLoader(self.module_name, + loader = _importlib._SourceFileLoader(self.module_name, mapping[self.module_name]) return loader.load_module(self.module_name) @@ -97,7 +97,7 @@ with source_util.create_modules(module_name) as mapping: with open(mapping[module_name], 'wb') as file: file.write(source) - loader = _bootstrap._SourceFileLoader(module_name, + loader = _importlib._SourceFileLoader(module_name, mapping[module_name]) return loader.load_module(module_name) diff -r bf24b2e1be24 -r f0b459af26fb Lib/importlib/util.py --- a/Lib/importlib/util.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/importlib/util.py Fri Feb 03 15:24:06 2012 -0500 @@ -1,5 +1,5 @@ """Utility code for constructing importers, etc.""" -from ._bootstrap import module_for_loader -from ._bootstrap import set_loader -from ._bootstrap import set_package +from _importlib import module_for_loader +from _importlib import set_loader +from _importlib import set_package diff -r bf24b2e1be24 -r f0b459af26fb Lib/os.py --- a/Lib/os.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/os.py Fri Feb 03 15:24:06 2012 -0500 @@ -38,6 +38,8 @@ except AttributeError: return [n for n in dir(module) if n[0] != '_'] +# Any introduction of a new "_os" module and/or path separator requires +# updating importlib. if 'posix' in _names: name = 'posix' linesep = '\n' diff -r bf24b2e1be24 -r f0b459af26fb Lib/test/test_frozen.py --- a/Lib/test/test_frozen.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/test/test_frozen.py Fri Feb 03 15:24:06 2012 -0500 @@ -6,37 +6,31 @@ class FrozenTests(unittest.TestCase): def test_frozen(self): - with captured_stdout() as stdout: - try: - import __hello__ - except ImportError as x: - self.fail("import __hello__ failed:" + str(x)) - self.assertEqual(__hello__.initialized, True) - self.assertEqual(len(dir(__hello__)), 7, dir(__hello__)) - self.assertEqual(stdout.getvalue(), 'Hello world!\n') + try: + import __hello__ + except ImportError as x: + self.fail("import __hello__ failed:" + str(x)) + self.assertEqual(__hello__.initialized, True) + self.assertEqual(len(dir(__hello__)), 8, dir(__hello__)) - with captured_stdout() as stdout: - try: - import __phello__ - except ImportError as x: - self.fail("import __phello__ failed:" + str(x)) - self.assertEqual(__phello__.initialized, True) - if not "__phello__.spam" in sys.modules: - self.assertEqual(len(dir(__phello__)), 8, dir(__phello__)) - else: - self.assertEqual(len(dir(__phello__)), 9, dir(__phello__)) - self.assertEqual(__phello__.__path__, [__phello__.__name__]) - self.assertEqual(stdout.getvalue(), 'Hello world!\n') + try: + import __phello__ + except ImportError as x: + self.fail("import __phello__ failed:" + str(x)) + self.assertEqual(__phello__.initialized, True) + if not "__phello__.spam" in sys.modules: + self.assertEqual(len(dir(__phello__)), 9, dir(__phello__)) + else: + self.assertEqual(len(dir(__phello__)), 10, dir(__phello__)) + self.assertEqual(__phello__.__path__, [__phello__.__name__]) - with captured_stdout() as stdout: - try: - import __phello__.spam - except ImportError as x: - self.fail("import __phello__.spam failed:" + str(x)) - self.assertEqual(__phello__.spam.initialized, True) - self.assertEqual(len(dir(__phello__.spam)), 7) - self.assertEqual(len(dir(__phello__)), 9) - self.assertEqual(stdout.getvalue(), 'Hello world!\n') + try: + import __phello__.spam + except ImportError as x: + self.fail("import __phello__.spam failed:" + str(x)) + self.assertEqual(__phello__.spam.initialized, True) + self.assertEqual(len(dir(__phello__.spam)), 8) + self.assertEqual(len(dir(__phello__)), 10) try: import __phello__.foo diff -r bf24b2e1be24 -r f0b459af26fb Lib/test/test_pkg.py --- a/Lib/test/test_pkg.py Fri Feb 03 12:08:32 2012 -0500 +++ b/Lib/test/test_pkg.py Fri Feb 03 15:24:06 2012 -0500 @@ -196,14 +196,15 @@ import t5 self.assertEqual(fixdir(dir(t5)), - ['__cached__', '__doc__', '__file__', '__name__', - '__package__', '__path__', 'foo', 'string', 't5']) + ['__cached__', '__doc__', '__file__', '__loader__', + '__name__', '__package__', '__path__', 'foo', + 'string', 't5']) self.assertEqual(fixdir(dir(t5.foo)), - ['__cached__', '__doc__', '__file__', '__name__', - '__package__', 'string']) + ['__cached__', '__doc__', '__file__', '__loader__', + '__name__', '__package__', 'string']) self.assertEqual(fixdir(dir(t5.string)), - ['__cached__', '__doc__', '__file__', '__name__', - '__package__', 'spam']) + ['__cached__', '__doc__', '__file__', '__loader__', + '__name__', '__package__', 'spam']) def test_6(self): hier = [ @@ -219,14 +220,14 @@ import t6 self.assertEqual(fixdir(dir(t6)), ['__all__', '__cached__', '__doc__', '__file__', - '__name__', '__package__', '__path__']) + '__loader__', '__name__', '__package__', '__path__']) s = """ import t6 from t6 import * self.assertEqual(fixdir(dir(t6)), ['__all__', '__cached__', '__doc__', '__file__', - '__name__', '__package__', '__path__', - 'eggs', 'ham', 'spam']) + '__loader__', '__name__', '__package__', + '__path__', 'eggs', 'ham', 'spam']) self.assertEqual(dir(), ['eggs', 'ham', 'self', 'spam', 't6']) """ self.run_code(s) @@ -252,19 +253,19 @@ t7, sub, subsub = None, None, None import t7 as tas self.assertEqual(fixdir(dir(tas)), - ['__cached__', '__doc__', '__file__', '__name__', - '__package__', '__path__']) + ['__cached__', '__doc__', '__file__', '__loader__', + '__name__', '__package__', '__path__']) self.assertFalse(t7) from t7 import sub as subpar self.assertEqual(fixdir(dir(subpar)), - ['__cached__', '__doc__', '__file__', '__name__', - '__package__', '__path__']) + ['__cached__', '__doc__', '__file__', '__loader__', + '__name__', '__package__', '__path__']) self.assertFalse(t7) self.assertFalse(sub) from t7.sub import subsub as subsubsub self.assertEqual(fixdir(dir(subsubsub)), - ['__cached__', '__doc__', '__file__', '__name__', - '__package__', '__path__', 'spam']) + ['__cached__', '__doc__', '__file__', '__loader__', + '__name__', '__package__', '__path__', 'spam']) self.assertFalse(t7) self.assertFalse(sub) self.assertFalse(subsub) diff -r bf24b2e1be24 -r f0b459af26fb Makefile.pre.in --- a/Makefile.pre.in Fri Feb 03 12:08:32 2012 -0500 +++ b/Makefile.pre.in Fri Feb 03 15:24:06 2012 -0500 @@ -760,6 +760,7 @@ $(srcdir)/Include/unicodeobject.h \ $(srcdir)/Include/warnings.h \ $(srcdir)/Include/weakrefobject.h \ + $(srcdir)/Python/importlib.h \ pyconfig.h \ $(PARSER_HEADERS) diff -r bf24b2e1be24 -r f0b459af26fb Modules/_io/_iomodule.c --- a/Modules/_io/_iomodule.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Modules/_io/_iomodule.c Fri Feb 03 15:24:06 2012 -0500 @@ -1,9 +1,9 @@ /* An implementation of the new I/O lib as defined by PEP 3116 - "New I/O" - + Classes defined here: UnsupportedOperation, BlockingIOError. Functions defined here: open(). - + Mostly written by Amaury Forgeot d'Arc */ @@ -595,10 +595,8 @@ state = IO_MOD_STATE(m); state->initialized = 0; - /* put os in the module state */ - state->os_module = PyImport_ImportModule("os"); - if (state->os_module == NULL) - goto fail; + /* os put in the module state by TextIOWrapper when needed */ + state->os_module = NULL; #define ADD_TYPE(type, name) \ if (PyType_Ready(type) < 0) \ diff -r bf24b2e1be24 -r f0b459af26fb Modules/_io/textio.c --- a/Modules/_io/textio.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Modules/_io/textio.c Fri Feb 03 15:24:06 2012 -0500 @@ -875,6 +875,14 @@ } } else { + if (state->os_module == NULL) { + state->os_module = PyImport_ImportModule("os"); + if (state->os_module == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "unable to import the os module"); + goto error; + } + } self->encoding = _PyObject_CallMethodId(state->os_module, &PyId_device_encoding, "N", fileno); diff -r bf24b2e1be24 -r f0b459af26fb Objects/exceptions.c --- a/Objects/exceptions.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Objects/exceptions.c Fri Feb 03 15:24:06 2012 -0500 @@ -2267,9 +2267,9 @@ #endif /* MS_WINDOWS */ void -_PyExc_Init(void) +_PyExc_Init(PyObject *bltinmod) { - PyObject *bltinmod, *bdict; + PyObject *bdict; PRE_INIT(BaseException) PRE_INIT(Exception) @@ -2337,9 +2337,6 @@ PRE_INIT(ProcessLookupError); PRE_INIT(TimeoutError); - bltinmod = PyImport_ImportModule("builtins"); - if (bltinmod == NULL) - Py_FatalError("exceptions bootstrapping error."); bdict = PyModule_GetDict(bltinmod); if (bdict == NULL) Py_FatalError("exceptions bootstrapping error."); diff -r bf24b2e1be24 -r f0b459af26fb Python/bltinmodule.c --- a/Python/bltinmodule.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Python/bltinmodule.c Fri Feb 03 15:24:06 2012 -0500 @@ -189,6 +189,7 @@ PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL; int level = -1; + Py_FatalError("builtin __import__ called!"); if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__", kwlist, &name, &globals, &locals, &fromlist, &level)) return NULL; diff -r bf24b2e1be24 -r f0b459af26fb Python/frozen.c --- a/Python/frozen.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Python/frozen.c Fri Feb 03 15:24:06 2012 -0500 @@ -2,6 +2,7 @@ /* Dummy frozen modules initializer */ #include "Python.h" +#include "importlib.h" /* In order to test the support for frozen modules, by default we define a single frozen module, __hello__. Loading it will print @@ -28,6 +29,8 @@ #define SIZE (int)sizeof(M___hello__) static struct _frozen _PyImport_FrozenModules[] = { + /* importlib */ + {"_frozen_importlib", M__importlib, (int)sizeof(M__importlib)}, /* Test module */ {"__hello__", M___hello__, SIZE}, /* Test package (negative size indicates package-ness) */ diff -r bf24b2e1be24 -r f0b459af26fb Python/import.c --- a/Python/import.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Python/import.c Fri Feb 03 15:24:06 2012 -0500 @@ -202,17 +202,13 @@ void _PyImportHooks_Init(void) { - PyObject *v, *path_hooks = NULL, *zimpimport; + PyObject *v, *path_hooks = NULL; int err = 0; - /* adding sys.path_hooks and sys.path_importer_cache, setting up - zipimport */ if (PyType_Ready(&PyNullImporter_Type) < 0) goto error; - if (Py_VerboseFlag) - PySys_WriteStderr("# installing zipimport hook\n"); - + /* adding sys.path_hooks and sys.path_importer_cache */ v = PyList_New(0); if (v == NULL) goto error; @@ -238,6 +234,20 @@ "path_importer_cache, or NullImporter failed" ); } + Py_DECREF(path_hooks); +} + +void +_PyImportZip_Init(void) +{ + PyObject *path_hooks, *zimpimport; + + path_hooks = PySys_GetObject("path_hooks"); + if (path_hooks == NULL) + goto error; + + if (Py_VerboseFlag) + PySys_WriteStderr("# installing zipimport hook\n"); zimpimport = PyImport_ImportModule("zipimport"); if (zimpimport == NULL) { @@ -258,16 +268,20 @@ } else { /* sys.path_hooks.append(zipimporter) */ - err = PyList_Append(path_hooks, zipimporter); + if (PyList_Append(path_hooks, zipimporter)) + goto error; Py_DECREF(zipimporter); - if (err) - goto error; if (Py_VerboseFlag) PySys_WriteStderr( "# installed zipimport hook\n"); } } - Py_DECREF(path_hooks); + + return; + + error: + PyErr_Print(); + Py_FatalError("initializing zipimport or NullImporter failed"); } /* Locking primitives to prevent parallel imports of the same module @@ -2899,15 +2913,27 @@ PyObject *locals, PyObject *fromlist, int level) { + PyObject *level_ob; PyObject *mod; - _PyImport_AcquireLock(); - mod = import_module_level(name, globals, locals, fromlist, level); - if (_PyImport_ReleaseLock() < 0) { + PyInterpreterState *interp = PyThreadState_GET()->interp; + + level_ob = PyLong_FromLong((long)level); + if (level_ob == NULL) { + PyErr_SetString(PyExc_RuntimeError, + "can't create an int for use by __import__"); + return NULL; + } + + /* _PyImport_AcquireLock(); */ + mod = PyObject_CallFunctionObjArgs(interp->__import__, name, globals, + locals, fromlist, level_ob); + Py_DECREF(level_ob); + /*if (_PyImport_ReleaseLock() < 0) { Py_XDECREF(mod); PyErr_SetString(PyExc_RuntimeError, "not holding the import lock"); return NULL; - } + }*/ return mod; } diff -r bf24b2e1be24 -r f0b459af26fb Python/importlib.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Python/importlib.h Fri Feb 03 15:24:06 2012 -0500 @@ -0,0 +1,3065 @@ +unsigned char M__importlib[] = { + 99,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0, + 0,64,0,0,0,115,155,2,0,0,100,0,0,90,0,0, + 100,85,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,132,0,0,90,11,0,100,24, + 0,100,25,0,132,0,0,90,12,0,100,26,0,100,27,0, + 132,0,0,90,13,0,101,14,0,101,13,0,106,15,0,131, + 1,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,100,34,0,100,35,0,132, + 0,0,90,20,0,100,36,0,100,37,0,132,0,0,90,21, + 0,100,38,0,100,39,0,132,0,0,90,22,0,100,40,0, + 100,41,0,132,0,0,90,23,0,71,100,42,0,100,43,0, + 132,0,0,100,43,0,131,2,0,90,24,0,71,100,44,0, + 100,45,0,132,0,0,100,45,0,131,2,0,90,25,0,71, + 100,46,0,100,47,0,132,0,0,100,47,0,131,2,0,90, + 26,0,71,100,48,0,100,49,0,132,0,0,100,49,0,101, + 26,0,131,3,0,90,27,0,71,100,50,0,100,51,0,132, + 0,0,100,51,0,131,2,0,90,28,0,71,100,52,0,100, + 53,0,132,0,0,100,53,0,101,28,0,101,27,0,131,4, + 0,90,29,0,71,100,54,0,100,55,0,132,0,0,100,55, + 0,101,28,0,101,26,0,131,4,0,90,30,0,71,100,56, + 0,100,57,0,132,0,0,100,57,0,131,2,0,90,31,0, + 71,100,58,0,100,59,0,132,0,0,100,59,0,131,2,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,71,100,66,0, + 100,67,0,132,0,0,100,67,0,131,2,0,90,36,0,100, + 68,0,100,69,0,132,0,0,90,37,0,101,37,0,90,38, + 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,32, + 0,131,3,0,90,39,0,71,100,72,0,100,73,0,132,0, + 0,100,73,0,131,2,0,90,40,0,101,24,0,101,25,0, + 101,39,0,103,3,0,90,41,0,100,74,0,90,42,0,100, + 84,0,100,75,0,100,76,0,100,77,0,132,2,0,90,44, + 0,105,0,0,105,0,0,103,0,0,100,75,0,100,78,0, + 100,79,0,132,4,0,90,45,0,100,80,0,100,81,0,132, + 0,0,90,46,0,100,82,0,100,83,0,132,0,0,90,47, + 0,100,84,0,83,40,86,0,0,0,117,83,1,0,0,67, + 111,114,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,105,109,112,111,114,116,46,10,10,84, + 104,105,115,32,109,111,100,117,108,101,32,105,115,32,78,79, + 84,32,109,101,97,110,116,32,116,111,32,98,101,32,100,105, + 114,101,99,116,108,121,32,105,109,112,111,114,116,101,100,33, + 32,73,116,32,104,97,115,32,98,101,101,110,32,100,101,115, + 105,103,110,101,100,32,115,117,99,104,10,116,104,97,116,32, + 105,116,32,99,97,110,32,98,101,32,98,111,111,116,115,116, + 114,97,112,112,101,100,32,105,110,116,111,32,80,121,116,104, + 111,110,32,97,115,32,116,104,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,111, + 114,116,46,32,65,115,10,115,117,99,104,32,105,116,32,114, + 101,113,117,105,114,101,115,32,116,104,101,32,105,110,106,101, + 99,116,105,111,110,32,111,102,32,115,112,101,99,105,102,105, + 99,32,109,111,100,117,108,101,115,32,97,110,100,32,97,116, + 116,114,105,98,117,116,101,115,32,105,110,32,111,114,100,101, + 114,32,116,111,10,119,111,114,107,46,32,79,110,101,32,115, + 104,111,117,108,100,32,117,115,101,32,105,109,112,111,114,116, + 108,105,98,32,97,115,32,116,104,101,32,112,117,98,108,105, + 99,45,102,97,99,105,110,103,32,118,101,114,115,105,111,110, + 32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,46, + 10,10,117,3,0,0,0,119,105,110,117,6,0,0,0,99, + 121,103,119,105,110,117,6,0,0,0,100,97,114,119,105,110, + 99,2,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,67,0,0,0,115,97,0,0,0,116,0,0,116,1,0, + 116,2,0,106,3,0,106,4,0,116,5,0,131,2,0,131, + 1,0,114,89,0,100,1,0,116,6,0,106,7,0,107,7, + 0,114,89,0,124,0,0,115,57,0,100,2,0,125,0,0, + 110,0,0,124,1,0,116,6,0,106,8,0,124,0,0,131, + 1,0,107,6,0,114,82,0,100,4,0,83,100,5,0,83, + 110,4,0,100,4,0,83,100,3,0,83,40,6,0,0,0, + 117,135,1,0,0,67,104,101,99,107,32,105,102,32,116,104, + 101,32,100,105,114,101,99,116,111,114,121,32,99,111,110,116, + 97,105,110,115,32,115,111,109,101,116,104,105,110,103,32,109, + 97,116,99,104,105,110,103,32,39,99,104,101,99,107,39,10, + 32,32,32,32,99,97,115,101,45,115,101,110,115,105,116,105, + 118,101,108,121,32,119,104,101,110,32,114,117,110,110,105,110, + 103,32,111,110,32,87,105,110,100,111,119,115,32,111,114,32, + 79,83,32,88,46,10,10,32,32,32,32,73,102,32,114,117, + 110,110,105,110,103,32,111,110,32,87,105,110,100,111,119,32, + 111,114,32,79,83,32,88,32,97,110,100,32,80,89,84,72, + 79,78,67,65,83,69,79,75,32,105,115,32,97,32,100,101, + 102,105,110,101,100,32,101,110,118,105,114,111,110,109,101,110, + 116,10,32,32,32,32,118,97,114,105,97,98,108,101,32,116, + 104,101,110,32,110,111,32,99,97,115,101,45,115,101,110,115, + 105,116,105,118,101,32,99,104,101,99,107,32,105,115,32,112, + 101,114,102,111,114,109,101,100,46,32,78,111,32,99,104,101, + 99,107,32,105,115,32,100,111,110,101,32,116,111,32,115,101, + 101,10,32,32,32,32,105,102,32,119,104,97,116,32,105,115, + 32,98,101,105,110,103,32,99,104,101,99,107,101,100,32,102, + 111,114,32,101,120,105,115,116,115,44,32,115,111,32,105,102, + 32,116,104,101,32,112,108,97,116,102,111,114,109,32,105,115, + 32,110,111,116,32,87,105,110,100,111,119,115,32,111,114,10, + 32,32,32,32,79,83,32,88,32,116,104,101,110,32,97,115, + 115,117,109,101,32,116,104,101,32,99,97,115,101,32,105,115, + 32,102,105,110,101,46,10,10,32,32,32,32,115,12,0,0, + 0,80,89,84,72,79,78,67,65,83,69,79,75,117,1,0, + 0,0,46,78,84,70,40,11,0,0,0,117,3,0,0,0, + 97,110,121,117,3,0,0,0,109,97,112,117,3,0,0,0, + 115,121,115,117,8,0,0,0,112,108,97,116,102,111,114,109, + 117,10,0,0,0,115,116,97,114,116,115,119,105,116,104,117, + 17,0,0,0,67,65,83,69,95,79,75,95,80,76,65,84, + 70,79,82,77,83,117,3,0,0,0,95,111,115,117,7,0, + 0,0,101,110,118,105,114,111,110,117,7,0,0,0,108,105, + 115,116,100,105,114,117,4,0,0,0,84,114,117,101,117,5, + 0,0,0,70,97,108,115,101,40,2,0,0,0,117,9,0, + 0,0,100,105,114,101,99,116,111,114,121,117,5,0,0,0, + 99,104,101,99,107,40,0,0,0,0,40,0,0,0,0,117, + 75,0,0,0,47,85,115,101,114,115,47,98,99,97,110,110, + 111,110,47,68,101,118,101,108,111,112,101,114,47,114,101,112, + 111,47,99,112,121,116,104,111,110,47,98,111,111,116,115,116, + 114,97,112,95,105,109,112,111,114,116,108,105,98,47,76,105, + 98,47,95,105,109,112,111,114,116,108,105,98,46,112,121,117, + 8,0,0,0,95,99,97,115,101,95,111,107,26,0,0,0, + 115,16,0,0,0,0,10,27,1,15,1,6,1,9,1,21, + 1,4,2,7,2,117,8,0,0,0,95,99,97,115,101,95, + 111,107,99,1,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,67,0,0,0,115,108,0,0,0,116,0,0,124, + 0,0,131,1,0,125,0,0,103,0,0,125,1,0,124,1, + 0,106,1,0,124,0,0,100,1,0,64,131,1,0,1,124, + 1,0,106,1,0,124,0,0,100,2,0,63,100,1,0,64, + 131,1,0,1,124,1,0,106,1,0,124,0,0,100,3,0, + 63,100,1,0,64,131,1,0,1,124,1,0,106,1,0,124, + 0,0,100,4,0,63,100,1,0,64,131,1,0,1,116,2, + 0,124,1,0,131,1,0,83,40,5,0,0,0,117,111,0, + 0,0,67,111,110,118,101,114,116,32,97,32,51,50,45,98, + 105,116,32,105,110,116,101,103,101,114,32,116,111,32,108,105, + 116,116,108,101,45,101,110,100,105,97,110,46,10,10,32,32, + 32,32,88,88,88,32,84,101,109,112,111,114,97,114,121,32, + 117,110,116,105,108,32,109,97,114,115,104,97,108,39,115,32, + 108,111,110,103,32,102,117,110,99,116,105,111,110,115,32,97, + 114,101,32,101,120,112,111,115,101,100,46,10,10,32,32,32, + 32,105,255,0,0,0,105,8,0,0,0,105,16,0,0,0, + 105,24,0,0,0,40,3,0,0,0,117,3,0,0,0,105, + 110,116,117,6,0,0,0,97,112,112,101,110,100,117,9,0, + 0,0,98,121,116,101,97,114,114,97,121,40,2,0,0,0, + 117,1,0,0,0,120,117,9,0,0,0,105,110,116,95,98, + 121,116,101,115,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,7, + 0,0,0,95,119,95,108,111,110,103,50,0,0,0,115,14, + 0,0,0,0,6,12,1,6,1,17,1,21,1,21,1,21, + 1,117,7,0,0,0,95,119,95,108,111,110,103,99,1,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,68,0,0,0,124,0,0,100,1,0,25,125,1, + 0,124,1,0,124,0,0,100,2,0,25,100,3,0,62,79, + 125,1,0,124,1,0,124,0,0,100,4,0,25,100,5,0, + 62,79,125,1,0,124,1,0,124,0,0,100,6,0,25,100, + 7,0,62,79,125,1,0,124,1,0,83,40,8,0,0,0, + 117,115,0,0,0,67,111,110,118,101,114,116,32,52,32,98, + 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, + 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, + 103,101,114,46,10,10,32,32,32,32,88,88,88,32,84,101, + 109,112,111,114,97,114,121,32,117,110,116,105,108,32,109,97, + 114,115,104,97,108,39,115,32,108,111,110,103,32,102,117,110, + 99,116,105,111,110,32,97,114,101,32,101,120,112,111,115,101, + 100,46,10,10,32,32,32,32,105,0,0,0,0,105,1,0, + 0,0,105,8,0,0,0,105,2,0,0,0,105,16,0,0, + 0,105,3,0,0,0,105,24,0,0,0,40,0,0,0,0, + 40,2,0,0,0,117,9,0,0,0,105,110,116,95,98,121, + 116,101,115,117,1,0,0,0,120,40,0,0,0,0,40,0, + 0,0,0,117,75,0,0,0,47,85,115,101,114,115,47,98, + 99,97,110,110,111,110,47,68,101,118,101,108,111,112,101,114, + 47,114,101,112,111,47,99,112,121,116,104,111,110,47,98,111, + 111,116,115,116,114,97,112,95,105,109,112,111,114,116,108,105, + 98,47,76,105,98,47,95,105,109,112,111,114,116,108,105,98, + 46,112,121,117,7,0,0,0,95,114,95,108,111,110,103,66, + 0,0,0,115,10,0,0,0,0,6,10,1,18,1,18,1, + 18,1,117,7,0,0,0,95,114,95,108,111,110,103,99,0, + 0,0,0,0,0,0,0,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,40,3,0,0,0,117,29,0,0,0,82,101,112,108, + 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, + 97,116,104,46,106,111,105,110,46,99,1,0,0,0,0,0, + 0,0,2,0,0,0,5,0,0,0,115,0,0,0,115,65, + 0,0,0,124,0,0,93,55,0,125,1,0,124,1,0,114, + 3,0,124,1,0,106,0,0,116,1,0,131,1,0,114,53, + 0,124,1,0,100,0,0,116,2,0,116,1,0,131,1,0, + 11,133,2,0,25,110,3,0,124,1,0,86,1,113,3,0, + 100,0,0,83,40,1,0,0,0,78,40,3,0,0,0,117, + 8,0,0,0,101,110,100,115,119,105,116,104,117,8,0,0, + 0,112,97,116,104,95,115,101,112,117,3,0,0,0,108,101, + 110,40,2,0,0,0,117,2,0,0,0,46,48,117,1,0, + 0,0,120,40,0,0,0,0,40,0,0,0,0,117,75,0, + 0,0,47,85,115,101,114,115,47,98,99,97,110,110,111,110, + 47,68,101,118,101,108,111,112,101,114,47,114,101,112,111,47, + 99,112,121,116,104,111,110,47,98,111,111,116,115,116,114,97, + 112,95,105,109,112,111,114,116,108,105,98,47,76,105,98,47, + 95,105,109,112,111,114,116,108,105,98,46,112,121,117,9,0, + 0,0,60,103,101,110,101,120,112,114,62,83,0,0,0,115, + 2,0,0,0,6,1,117,29,0,0,0,95,112,97,116,104, + 95,106,111,105,110,46,60,108,111,99,97,108,115,62,46,60, + 103,101,110,101,120,112,114,62,40,2,0,0,0,117,8,0, + 0,0,112,97,116,104,95,115,101,112,117,4,0,0,0,106, + 111,105,110,40,1,0,0,0,117,4,0,0,0,97,114,103, + 115,40,0,0,0,0,40,0,0,0,0,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,10,0,0,0, + 95,112,97,116,104,95,106,111,105,110,81,0,0,0,115,4, + 0,0,0,0,2,15,1,117,10,0,0,0,95,112,97,116, + 104,95,106,111,105,110,99,1,0,0,0,0,0,0,0,1, + 0,0,0,11,0,0,0,67,0,0,0,115,50,0,0,0, + 121,17,0,116,0,0,106,1,0,124,0,0,131,1,0,1, + 87,110,22,0,4,116,2,0,107,10,0,114,41,0,1,1, + 1,100,2,0,83,89,110,5,0,88,100,3,0,83,100,1, + 0,83,40,4,0,0,0,117,31,0,0,0,82,101,112,108, + 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, + 97,116,104,46,101,120,105,115,116,115,46,78,70,84,40,5, + 0,0,0,117,3,0,0,0,95,111,115,117,4,0,0,0, + 115,116,97,116,117,7,0,0,0,79,83,69,114,114,111,114, + 117,5,0,0,0,70,97,108,115,101,117,4,0,0,0,84, + 114,117,101,40,1,0,0,0,117,4,0,0,0,112,97,116, + 104,40,0,0,0,0,40,0,0,0,0,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,12,0,0,0, + 95,112,97,116,104,95,101,120,105,115,116,115,87,0,0,0, + 115,10,0,0,0,0,2,3,1,17,1,13,1,9,2,117, + 12,0,0,0,95,112,97,116,104,95,101,120,105,115,116,115, + 99,2,0,0,0,0,0,0,0,3,0,0,0,11,0,0, + 0,67,0,0,0,115,61,0,0,0,121,19,0,116,0,0, + 106,1,0,124,0,0,131,1,0,125,2,0,87,110,22,0, + 4,116,2,0,107,10,0,114,43,0,1,1,1,100,2,0, + 83,89,110,1,0,88,124,2,0,106,4,0,100,1,0,64, + 124,1,0,107,2,0,83,40,3,0,0,0,117,49,0,0, + 0,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104, + 101,32,112,97,116,104,32,105,115,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,109,111,100,101,32,116,121,112, + 101,46,105,0,240,0,0,70,40,5,0,0,0,117,3,0, + 0,0,95,111,115,117,4,0,0,0,115,116,97,116,117,7, + 0,0,0,79,83,69,114,114,111,114,117,5,0,0,0,70, + 97,108,115,101,117,7,0,0,0,115,116,95,109,111,100,101, + 40,3,0,0,0,117,4,0,0,0,112,97,116,104,117,4, + 0,0,0,109,111,100,101,117,9,0,0,0,115,116,97,116, + 95,105,110,102,111,40,0,0,0,0,40,0,0,0,0,117, + 75,0,0,0,47,85,115,101,114,115,47,98,99,97,110,110, + 111,110,47,68,101,118,101,108,111,112,101,114,47,114,101,112, + 111,47,99,112,121,116,104,111,110,47,98,111,111,116,115,116, + 114,97,112,95,105,109,112,111,114,116,108,105,98,47,76,105, + 98,47,95,105,109,112,111,114,116,108,105,98,46,112,121,117, + 18,0,0,0,95,112,97,116,104,95,105,115,95,109,111,100, + 101,95,116,121,112,101,97,0,0,0,115,10,0,0,0,0, + 2,3,1,19,1,13,1,9,1,117,18,0,0,0,95,112, + 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, + 99,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,115,13,0,0,0,116,0,0,124,0,0, + 100,1,0,131,2,0,83,40,2,0,0,0,117,31,0,0, + 0,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114, + 32,111,115,46,112,97,116,104,46,105,115,102,105,108,101,46, + 105,0,128,0,0,40,1,0,0,0,117,18,0,0,0,95, + 112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,112, + 101,40,1,0,0,0,117,4,0,0,0,112,97,116,104,40, + 0,0,0,0,40,0,0,0,0,117,75,0,0,0,47,85, + 115,101,114,115,47,98,99,97,110,110,111,110,47,68,101,118, + 101,108,111,112,101,114,47,114,101,112,111,47,99,112,121,116, + 104,111,110,47,98,111,111,116,115,116,114,97,112,95,105,109, + 112,111,114,116,108,105,98,47,76,105,98,47,95,105,109,112, + 111,114,116,108,105,98,46,112,121,117,12,0,0,0,95,112, + 97,116,104,95,105,115,102,105,108,101,107,0,0,0,115,2, + 0,0,0,0,2,117,12,0,0,0,95,112,97,116,104,95, + 105,115,102,105,108,101,99,1,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,34,0,0,0, + 124,0,0,115,21,0,116,0,0,106,1,0,131,0,0,125, + 0,0,110,0,0,116,2,0,124,0,0,100,1,0,131,2, + 0,83,40,2,0,0,0,117,30,0,0,0,82,101,112,108, + 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, + 97,116,104,46,105,115,100,105,114,46,105,0,64,0,0,40, + 3,0,0,0,117,3,0,0,0,95,111,115,117,6,0,0, + 0,103,101,116,99,119,100,117,18,0,0,0,95,112,97,116, + 104,95,105,115,95,109,111,100,101,95,116,121,112,101,40,1, + 0,0,0,117,4,0,0,0,112,97,116,104,40,0,0,0, + 0,40,0,0,0,0,117,75,0,0,0,47,85,115,101,114, + 115,47,98,99,97,110,110,111,110,47,68,101,118,101,108,111, + 112,101,114,47,114,101,112,111,47,99,112,121,116,104,111,110, + 47,98,111,111,116,115,116,114,97,112,95,105,109,112,111,114, + 116,108,105,98,47,76,105,98,47,95,105,109,112,111,114,116, + 108,105,98,46,112,121,117,11,0,0,0,95,112,97,116,104, + 95,105,115,100,105,114,113,0,0,0,115,6,0,0,0,0, + 2,6,1,15,1,117,11,0,0,0,95,112,97,116,104,95, + 105,115,100,105,114,99,2,0,0,0,0,0,0,0,3,0, + 0,0,5,0,0,0,67,0,0,0,115,75,0,0,0,120, + 68,0,116,0,0,124,1,0,131,1,0,68,93,42,0,125, + 2,0,124,0,0,106,1,0,124,2,0,131,1,0,114,13, + 0,124,0,0,100,1,0,116,2,0,124,2,0,131,1,0, + 11,133,2,0,25,83,113,13,0,87,116,3,0,100,2,0, + 131,1,0,130,1,0,100,1,0,83,40,3,0,0,0,117, + 38,0,0,0,82,101,112,108,97,99,101,109,101,110,116,32, + 102,111,114,32,111,115,46,112,97,116,104,46,115,112,108,105, + 116,101,120,116,40,41,91,48,93,46,78,117,33,0,0,0, + 112,97,116,104,32,105,115,32,110,111,116,32,111,102,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,116,121,112, + 101,40,4,0,0,0,117,12,0,0,0,95,115,117,102,102, + 105,120,95,108,105,115,116,117,8,0,0,0,101,110,100,115, + 119,105,116,104,117,3,0,0,0,108,101,110,117,10,0,0, + 0,86,97,108,117,101,69,114,114,111,114,40,3,0,0,0, + 117,4,0,0,0,112,97,116,104,117,8,0,0,0,101,120, + 116,95,116,121,112,101,117,6,0,0,0,115,117,102,102,105, + 120,40,0,0,0,0,40,0,0,0,0,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,17,0,0,0, + 95,112,97,116,104,95,119,105,116,104,111,117,116,95,101,120, + 116,120,0,0,0,115,8,0,0,0,0,2,19,1,15,1, + 25,2,117,17,0,0,0,95,112,97,116,104,95,119,105,116, + 104,111,117,116,95,101,120,116,99,1,0,0,0,0,0,0, + 0,1,0,0,0,11,0,0,0,67,0,0,0,115,101,0, + 0,0,124,0,0,115,21,0,116,0,0,106,1,0,131,0, + 0,125,0,0,110,0,0,121,17,0,116,0,0,106,2,0, + 124,0,0,131,1,0,83,87,110,56,0,4,116,3,0,107, + 10,0,114,96,0,1,1,1,124,0,0,106,4,0,100,1, + 0,131,1,0,114,73,0,124,0,0,83,116,5,0,116,0, + 0,106,1,0,131,0,0,124,0,0,131,2,0,83,89,110, + 1,0,88,100,2,0,83,40,3,0,0,0,117,32,0,0, + 0,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114, + 32,111,115,46,112,97,116,104,46,97,98,115,112,97,116,104, + 46,117,1,0,0,0,47,78,40,6,0,0,0,117,3,0, + 0,0,95,111,115,117,6,0,0,0,103,101,116,99,119,100, + 117,16,0,0,0,95,103,101,116,102,117,108,108,112,97,116, + 104,110,97,109,101,117,14,0,0,0,65,116,116,114,105,98, + 117,116,101,69,114,114,111,114,117,10,0,0,0,115,116,97, + 114,116,115,119,105,116,104,117,10,0,0,0,95,112,97,116, + 104,95,106,111,105,110,40,1,0,0,0,117,4,0,0,0, + 112,97,116,104,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,14, + 0,0,0,95,112,97,116,104,95,97,98,115,111,108,117,116, + 101,129,0,0,0,115,16,0,0,0,0,2,6,1,15,1, + 3,1,17,1,13,1,15,1,4,2,117,14,0,0,0,95, + 112,97,116,104,95,97,98,115,111,108,117,116,101,99,2,0, + 0,0,0,0,0,0,5,0,0,0,23,0,0,0,67,0, + 0,0,115,242,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,2,0,116, + 2,0,106,3,0,124,2,0,116,2,0,106,4,0,116,2, + 0,106,5,0,66,116,2,0,106,6,0,66,100,2,0,131, + 3,0,125,3,0,121,114,0,116,7,0,106,8,0,124,3, + 0,100,3,0,131,2,0,143,20,0,125,4,0,124,4,0, + 106,9,0,124,1,0,131,1,0,1,87,100,4,0,81,88, + 121,20,0,116,2,0,106,10,0,124,2,0,124,0,0,131, + 2,0,1,87,110,47,0,4,116,11,0,107,10,0,114,174, + 0,1,1,1,116,2,0,106,12,0,124,0,0,131,1,0, + 1,116,2,0,106,10,0,124,2,0,124,0,0,131,2,0, + 1,89,110,1,0,88,87,110,59,0,4,116,13,0,107,10, + 0,114,237,0,1,1,1,121,17,0,116,2,0,106,12,0, + 124,2,0,131,1,0,1,87,110,18,0,4,116,13,0,107, + 10,0,114,229,0,1,1,1,89,110,1,0,88,130,0,0, + 89,110,1,0,88,100,4,0,83,40,5,0,0,0,117,162, + 0,0,0,66,101,115,116,45,101,102,102,111,114,116,32,102, + 117,110,99,116,105,111,110,32,116,111,32,119,114,105,116,101, + 32,100,97,116,97,32,116,111,32,97,32,112,97,116,104,32, + 97,116,111,109,105,99,97,108,108,121,46,10,32,32,32,32, + 66,101,32,112,114,101,112,97,114,101,100,32,116,111,32,104, + 97,110,100,108,101,32,97,32,70,105,108,101,69,120,105,115, + 116,115,69,114,114,111,114,32,105,102,32,99,111,110,99,117, + 114,114,101,110,116,32,119,114,105,116,105,110,103,32,111,102, + 32,116,104,101,10,32,32,32,32,116,101,109,112,111,114,97, + 114,121,32,102,105,108,101,32,105,115,32,97,116,116,101,109, + 112,116,101,100,46,117,5,0,0,0,123,125,46,123,125,105, + 182,1,0,0,117,2,0,0,0,119,98,78,40,14,0,0, + 0,117,6,0,0,0,102,111,114,109,97,116,117,2,0,0, + 0,105,100,117,3,0,0,0,95,111,115,117,4,0,0,0, + 111,112,101,110,117,6,0,0,0,79,95,69,88,67,76,117, + 7,0,0,0,79,95,67,82,69,65,84,117,8,0,0,0, + 79,95,87,82,79,78,76,89,117,3,0,0,0,95,105,111, + 117,6,0,0,0,70,105,108,101,73,79,117,5,0,0,0, + 119,114,105,116,101,117,6,0,0,0,114,101,110,97,109,101, + 117,15,0,0,0,70,105,108,101,69,120,105,115,116,115,69, + 114,114,111,114,117,6,0,0,0,117,110,108,105,110,107,117, + 7,0,0,0,79,83,69,114,114,111,114,40,5,0,0,0, + 117,4,0,0,0,112,97,116,104,117,4,0,0,0,100,97, + 116,97,117,8,0,0,0,112,97,116,104,95,116,109,112,117, + 2,0,0,0,102,100,117,4,0,0,0,102,105,108,101,40, + 0,0,0,0,40,0,0,0,0,117,75,0,0,0,47,85, + 115,101,114,115,47,98,99,97,110,110,111,110,47,68,101,118, + 101,108,111,112,101,114,47,114,101,112,111,47,99,112,121,116, + 104,111,110,47,98,111,111,116,115,116,114,97,112,95,105,109, + 112,111,114,116,108,105,98,47,76,105,98,47,95,105,109,112, + 111,114,116,108,105,98,46,112,121,117,13,0,0,0,95,119, + 114,105,116,101,95,97,116,111,109,105,99,142,0,0,0,115, + 32,0,0,0,0,10,24,1,38,1,3,1,21,1,19,1, + 3,1,20,1,13,2,13,1,25,1,13,1,3,1,17,1, + 13,1,5,1,117,13,0,0,0,95,119,114,105,116,101,95, + 97,116,111,109,105,99,99,2,0,0,0,0,0,0,0,3, + 0,0,0,7,0,0,0,67,0,0,0,115,95,0,0,0, + 120,69,0,100,1,0,100,2,0,100,3,0,100,4,0,103, + 4,0,68,93,49,0,125,2,0,116,0,0,124,1,0,124, + 2,0,131,2,0,114,19,0,116,1,0,124,0,0,124,2, + 0,116,2,0,124,1,0,124,2,0,131,2,0,131,3,0, + 1,113,19,0,113,19,0,87,124,0,0,106,3,0,106,4, + 0,124,1,0,106,3,0,131,1,0,1,100,5,0,83,40, + 6,0,0,0,117,38,0,0,0,83,105,109,112,108,101,32, + 115,117,98,115,116,105,116,117,116,101,32,102,111,114,32,102, + 117,110,99,116,111,111,108,115,46,119,114,97,112,115,46,117, + 10,0,0,0,95,95,109,111,100,117,108,101,95,95,117,8, + 0,0,0,95,95,110,97,109,101,95,95,117,12,0,0,0, + 95,95,113,117,97,108,110,97,109,101,95,95,117,7,0,0, + 0,95,95,100,111,99,95,95,78,40,5,0,0,0,117,7, + 0,0,0,104,97,115,97,116,116,114,117,7,0,0,0,115, + 101,116,97,116,116,114,117,7,0,0,0,103,101,116,97,116, + 116,114,117,8,0,0,0,95,95,100,105,99,116,95,95,117, + 6,0,0,0,117,112,100,97,116,101,40,3,0,0,0,117, + 3,0,0,0,110,101,119,117,3,0,0,0,111,108,100,117, + 7,0,0,0,114,101,112,108,97,99,101,40,0,0,0,0, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,5,0,0,0,95,119,114,97,112,171, + 0,0,0,115,8,0,0,0,0,2,25,1,15,1,32,1, + 117,5,0,0,0,95,119,114,97,112,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115, + 35,0,0,0,135,0,0,102,1,0,100,1,0,100,2,0, + 134,0,0,125,1,0,116,0,0,124,1,0,136,0,0,131, + 2,0,1,124,1,0,83,40,3,0,0,0,117,39,0,0, + 0,83,101,116,32,95,95,112,97,99,107,97,103,101,95,95, + 32,111,110,32,116,104,101,32,114,101,116,117,114,110,101,100, + 32,109,111,100,117,108,101,46,99,0,0,0,0,0,0,0, + 0,3,0,0,0,4,0,0,0,31,0,0,0,115,108,0, + 0,0,136,0,0,124,0,0,124,1,0,142,0,0,125,2, + 0,116,0,0,124,2,0,100,1,0,131,2,0,12,115,46, + 0,124,2,0,106,1,0,100,0,0,107,8,0,114,104,0, + 124,2,0,106,3,0,124,2,0,95,1,0,116,0,0,124, + 2,0,100,2,0,131,2,0,115,104,0,124,2,0,106,1, + 0,106,4,0,100,3,0,131,1,0,100,4,0,25,124,2, + 0,95,1,0,113,104,0,110,0,0,124,2,0,83,40,5, + 0,0,0,78,117,11,0,0,0,95,95,112,97,99,107,97, + 103,101,95,95,117,8,0,0,0,95,95,112,97,116,104,95, + 95,117,1,0,0,0,46,105,0,0,0,0,40,5,0,0, + 0,117,7,0,0,0,104,97,115,97,116,116,114,117,11,0, + 0,0,95,95,112,97,99,107,97,103,101,95,95,117,4,0, + 0,0,78,111,110,101,117,8,0,0,0,95,95,110,97,109, + 101,95,95,117,10,0,0,0,114,112,97,114,116,105,116,105, + 111,110,40,3,0,0,0,117,4,0,0,0,97,114,103,115, + 117,6,0,0,0,107,119,97,114,103,115,117,6,0,0,0, + 109,111,100,117,108,101,40,1,0,0,0,117,3,0,0,0, + 102,120,110,40,0,0,0,0,117,75,0,0,0,47,85,115, + 101,114,115,47,98,99,97,110,110,111,110,47,68,101,118,101, + 108,111,112,101,114,47,114,101,112,111,47,99,112,121,116,104, + 111,110,47,98,111,111,116,115,116,114,97,112,95,105,109,112, + 111,114,116,108,105,98,47,76,105,98,47,95,105,109,112,111, + 114,116,108,105,98,46,112,121,117,19,0,0,0,115,101,116, + 95,112,97,99,107,97,103,101,95,119,114,97,112,112,101,114, + 185,0,0,0,115,12,0,0,0,0,1,15,1,31,1,12, + 1,15,1,31,1,117,40,0,0,0,115,101,116,95,112,97, + 99,107,97,103,101,46,60,108,111,99,97,108,115,62,46,115, + 101,116,95,112,97,99,107,97,103,101,95,119,114,97,112,112, + 101,114,40,1,0,0,0,117,5,0,0,0,95,119,114,97, + 112,40,2,0,0,0,117,3,0,0,0,102,120,110,117,19, + 0,0,0,115,101,116,95,112,97,99,107,97,103,101,95,119, + 114,97,112,112,101,114,40,0,0,0,0,40,1,0,0,0, + 117,3,0,0,0,102,120,110,117,75,0,0,0,47,85,115, + 101,114,115,47,98,99,97,110,110,111,110,47,68,101,118,101, + 108,111,112,101,114,47,114,101,112,111,47,99,112,121,116,104, + 111,110,47,98,111,111,116,115,116,114,97,112,95,105,109,112, + 111,114,116,108,105,98,47,76,105,98,47,95,105,109,112,111, + 114,116,108,105,98,46,112,121,117,11,0,0,0,115,101,116, + 95,112,97,99,107,97,103,101,183,0,0,0,115,6,0,0, + 0,0,2,18,7,13,1,117,11,0,0,0,115,101,116,95, + 112,97,99,107,97,103,101,99,1,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,3,0,0,0,115,35,0,0, + 0,135,0,0,102,1,0,100,1,0,100,2,0,134,0,0, + 125,1,0,116,0,0,124,1,0,136,0,0,131,2,0,1, + 124,1,0,83,40,3,0,0,0,117,38,0,0,0,83,101, + 116,32,95,95,108,111,97,100,101,114,95,95,32,111,110,32, + 116,104,101,32,114,101,116,117,114,110,101,100,32,109,111,100, + 117,108,101,46,99,1,0,0,0,0,0,0,0,4,0,0, + 0,4,0,0,0,31,0,0,0,115,49,0,0,0,136,0, + 0,124,0,0,124,1,0,124,2,0,142,1,0,125,3,0, + 116,0,0,124,3,0,100,1,0,131,2,0,115,45,0,124, + 0,0,124,3,0,95,1,0,110,0,0,124,3,0,83,40, + 2,0,0,0,78,117,10,0,0,0,95,95,108,111,97,100, + 101,114,95,95,40,2,0,0,0,117,7,0,0,0,104,97, + 115,97,116,116,114,117,10,0,0,0,95,95,108,111,97,100, + 101,114,95,95,40,4,0,0,0,117,4,0,0,0,115,101, + 108,102,117,4,0,0,0,97,114,103,115,117,6,0,0,0, + 107,119,97,114,103,115,117,6,0,0,0,109,111,100,117,108, + 101,40,1,0,0,0,117,3,0,0,0,102,120,110,40,0, + 0,0,0,117,75,0,0,0,47,85,115,101,114,115,47,98, + 99,97,110,110,111,110,47,68,101,118,101,108,111,112,101,114, + 47,114,101,112,111,47,99,112,121,116,104,111,110,47,98,111, + 111,116,115,116,114,97,112,95,105,109,112,111,114,116,108,105, + 98,47,76,105,98,47,95,105,109,112,111,114,116,108,105,98, + 46,112,121,117,18,0,0,0,115,101,116,95,108,111,97,100, + 101,114,95,119,114,97,112,112,101,114,198,0,0,0,115,8, + 0,0,0,0,1,18,1,15,1,12,1,117,38,0,0,0, + 115,101,116,95,108,111,97,100,101,114,46,60,108,111,99,97, + 108,115,62,46,115,101,116,95,108,111,97,100,101,114,95,119, + 114,97,112,112,101,114,40,1,0,0,0,117,5,0,0,0, + 95,119,114,97,112,40,2,0,0,0,117,3,0,0,0,102, + 120,110,117,18,0,0,0,115,101,116,95,108,111,97,100,101, + 114,95,119,114,97,112,112,101,114,40,0,0,0,0,40,1, + 0,0,0,117,3,0,0,0,102,120,110,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,10,0,0,0, + 115,101,116,95,108,111,97,100,101,114,196,0,0,0,115,6, + 0,0,0,0,2,18,5,13,1,117,10,0,0,0,115,101, + 116,95,108,111,97,100,101,114,99,1,0,0,0,0,0,0, + 0,2,0,0,0,3,0,0,0,3,0,0,0,115,35,0, + 0,0,135,0,0,102,1,0,100,1,0,100,2,0,134,0, + 0,125,1,0,116,0,0,124,1,0,136,0,0,131,2,0, + 1,124,1,0,83,40,3,0,0,0,117,28,2,0,0,68, + 101,99,111,114,97,116,111,114,32,116,111,32,104,97,110,100, + 108,101,32,115,101,108,101,99,116,105,110,103,32,116,104,101, + 32,112,114,111,112,101,114,32,109,111,100,117,108,101,32,102, + 111,114,32,108,111,97,100,101,114,115,46,10,10,32,32,32, + 32,84,104,101,32,100,101,99,111,114,97,116,101,100,32,102, + 117,110,99,116,105,111,110,32,105,115,32,112,97,115,115,101, + 100,32,116,104,101,32,109,111,100,117,108,101,32,116,111,32, + 117,115,101,32,105,110,115,116,101,97,100,32,111,102,32,116, + 104,101,32,109,111,100,117,108,101,10,32,32,32,32,110,97, + 109,101,46,32,84,104,101,32,109,111,100,117,108,101,32,112, + 97,115,115,101,100,32,105,110,32,116,111,32,116,104,101,32, + 102,117,110,99,116,105,111,110,32,105,115,32,101,105,116,104, + 101,114,32,102,114,111,109,32,115,121,115,46,109,111,100,117, + 108,101,115,32,105,102,10,32,32,32,32,105,116,32,97,108, + 114,101,97,100,121,32,101,120,105,115,116,115,32,111,114,32, + 105,115,32,97,32,110,101,119,32,109,111,100,117,108,101,32, + 119,104,105,99,104,32,104,97,115,32,95,95,110,97,109,101, + 95,95,32,115,101,116,32,97,110,100,32,105,115,32,105,110, + 115,101,114,116,101,100,10,32,32,32,32,105,110,116,111,32, + 115,121,115,46,109,111,100,117,108,101,115,46,32,73,102,32, + 97,110,32,101,120,99,101,112,116,105,111,110,32,105,115,32, + 114,97,105,115,101,100,32,97,110,100,32,116,104,101,32,100, + 101,99,111,114,97,116,111,114,32,99,114,101,97,116,101,100, + 32,116,104,101,10,32,32,32,32,109,111,100,117,108,101,32, + 105,116,32,105,115,32,115,117,98,115,101,113,117,101,110,116, + 108,121,32,114,101,109,111,118,101,100,32,102,114,111,109,32, + 115,121,115,46,109,111,100,117,108,101,115,46,10,10,32,32, + 32,32,84,104,101,32,100,101,99,111,114,97,116,111,114,32, + 97,115,115,117,109,101,115,32,116,104,97,116,32,116,104,101, + 32,100,101,99,111,114,97,116,101,100,32,102,117,110,99,116, + 105,111,110,32,116,97,107,101,115,32,116,104,101,32,109,111, + 100,117,108,101,32,110,97,109,101,32,97,115,10,32,32,32, + 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, + 109,101,110,116,46,10,10,32,32,32,32,99,2,0,0,0, + 0,0,0,0,6,0,0,0,11,0,0,0,31,0,0,0, + 115,127,0,0,0,116,0,0,106,1,0,106,2,0,124,1, + 0,131,1,0,125,4,0,116,3,0,124,4,0,131,1,0, + 125,5,0,124,5,0,115,67,0,116,4,0,106,5,0,124, + 1,0,131,1,0,125,4,0,124,4,0,116,0,0,106,1, + 0,124,1,0,60,110,0,0,121,23,0,136,0,0,124,0, + 0,124,4,0,124,2,0,124,3,0,142,2,0,83,87,110, + 30,0,1,1,1,124,5,0,115,115,0,116,0,0,106,1, + 0,124,1,0,61,110,0,0,130,0,0,89,110,1,0,88, + 100,0,0,83,40,1,0,0,0,78,40,6,0,0,0,117, + 3,0,0,0,115,121,115,117,7,0,0,0,109,111,100,117, + 108,101,115,117,3,0,0,0,103,101,116,117,4,0,0,0, + 98,111,111,108,117,3,0,0,0,105,109,112,117,10,0,0, + 0,110,101,119,95,109,111,100,117,108,101,40,6,0,0,0, + 117,4,0,0,0,115,101,108,102,117,8,0,0,0,102,117, + 108,108,110,97,109,101,117,4,0,0,0,97,114,103,115,117, + 6,0,0,0,107,119,97,114,103,115,117,6,0,0,0,109, + 111,100,117,108,101,117,9,0,0,0,105,115,95,114,101,108, + 111,97,100,40,1,0,0,0,117,3,0,0,0,102,120,110, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,25,0,0,0,109,111,100,117,108,101, + 95,102,111,114,95,108,111,97,100,101,114,95,119,114,97,112, + 112,101,114,220,0,0,0,115,22,0,0,0,0,1,18,1, + 12,1,6,4,15,1,16,1,3,1,23,1,3,1,6,1, + 13,1,117,52,0,0,0,109,111,100,117,108,101,95,102,111, + 114,95,108,111,97,100,101,114,46,60,108,111,99,97,108,115, + 62,46,109,111,100,117,108,101,95,102,111,114,95,108,111,97, + 100,101,114,95,119,114,97,112,112,101,114,40,1,0,0,0, + 117,5,0,0,0,95,119,114,97,112,40,2,0,0,0,117, + 3,0,0,0,102,120,110,117,25,0,0,0,109,111,100,117, + 108,101,95,102,111,114,95,108,111,97,100,101,114,95,119,114, + 97,112,112,101,114,40,0,0,0,0,40,1,0,0,0,117, + 3,0,0,0,102,120,110,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,17,0,0,0,109,111,100,117, + 108,101,95,102,111,114,95,108,111,97,100,101,114,207,0,0, + 0,115,6,0,0,0,0,13,18,15,13,1,117,17,0,0, + 0,109,111,100,117,108,101,95,102,111,114,95,108,111,97,100, + 101,114,99,1,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,3,0,0,0,115,35,0,0,0,135,0,0,102, + 1,0,100,1,0,100,2,0,134,0,0,125,1,0,116,0, + 0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,40, + 3,0,0,0,117,252,0,0,0,68,101,99,111,114,97,116, + 111,114,32,116,111,32,118,101,114,105,102,121,32,116,104,97, + 116,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105, + 110,103,32,114,101,113,117,101,115,116,101,100,32,109,97,116, + 99,104,101,115,32,116,104,101,32,111,110,101,32,116,104,101, + 10,32,32,32,32,108,111,97,100,101,114,32,99,97,110,32, + 104,97,110,100,108,101,46,10,10,32,32,32,32,84,104,101, + 32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,32, + 40,115,101,108,102,41,32,109,117,115,116,32,100,101,102,105, + 110,101,32,95,110,97,109,101,32,119,104,105,99,104,32,116, + 104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101, + 110,116,32,105,115,10,32,32,32,32,99,111,109,112,97,114, + 101,100,32,97,103,97,105,110,115,116,46,32,73,102,32,116, + 104,101,32,99,111,109,112,97,114,105,115,111,110,32,102,97, + 105,108,115,32,116,104,101,110,32,73,109,112,111,114,116,69, + 114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,10, + 10,32,32,32,32,99,2,0,0,0,0,0,0,0,4,0, + 0,0,5,0,0,0,31,0,0,0,115,53,0,0,0,124, + 0,0,106,0,0,124,1,0,107,3,0,114,34,0,116,1, + 0,100,1,0,124,1,0,22,131,1,0,130,1,0,110,0, + 0,136,0,0,124,0,0,124,1,0,124,2,0,124,3,0, + 142,2,0,83,40,2,0,0,0,78,117,23,0,0,0,108, + 111,97,100,101,114,32,99,97,110,110,111,116,32,104,97,110, + 100,108,101,32,37,115,40,2,0,0,0,117,5,0,0,0, + 95,110,97,109,101,117,11,0,0,0,73,109,112,111,114,116, + 69,114,114,111,114,40,4,0,0,0,117,4,0,0,0,115, + 101,108,102,117,4,0,0,0,110,97,109,101,117,4,0,0, + 0,97,114,103,115,117,6,0,0,0,107,119,97,114,103,115, + 40,1,0,0,0,117,6,0,0,0,109,101,116,104,111,100, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,19,0,0,0,95,99,104,101,99,107, + 95,110,97,109,101,95,119,114,97,112,112,101,114,247,0,0, + 0,115,6,0,0,0,0,1,15,1,19,1,117,40,0,0, + 0,95,99,104,101,99,107,95,110,97,109,101,46,60,108,111, + 99,97,108,115,62,46,95,99,104,101,99,107,95,110,97,109, + 101,95,119,114,97,112,112,101,114,40,1,0,0,0,117,5, + 0,0,0,95,119,114,97,112,40,2,0,0,0,117,6,0, + 0,0,109,101,116,104,111,100,117,19,0,0,0,95,99,104, + 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, + 40,0,0,0,0,40,1,0,0,0,117,6,0,0,0,109, + 101,116,104,111,100,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,11,0,0,0,95,99,104,101,99,107, + 95,110,97,109,101,239,0,0,0,115,6,0,0,0,0,8, + 18,4,13,1,117,11,0,0,0,95,99,104,101,99,107,95, + 110,97,109,101,99,1,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,3,0,0,0,115,35,0,0,0,135,0, + 0,102,1,0,100,1,0,100,2,0,134,0,0,125,1,0, + 116,0,0,124,1,0,136,0,0,131,2,0,1,124,1,0, + 83,40,3,0,0,0,117,49,0,0,0,68,101,99,111,114, + 97,116,111,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,3,0,0,0,19,0,0, + 0,115,52,0,0,0,124,1,0,116,0,0,106,1,0,107, + 7,0,114,39,0,116,2,0,100,1,0,106,3,0,124,1, + 0,131,1,0,131,1,0,130,1,0,110,0,0,136,0,0, + 124,0,0,124,1,0,131,2,0,83,40,2,0,0,0,78, + 117,28,0,0,0,123,48,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,40,4,0,0,0,117,3,0,0,0,115,121,115,117,20, + 0,0,0,98,117,105,108,116,105,110,95,109,111,100,117,108, + 101,95,110,97,109,101,115,117,11,0,0,0,73,109,112,111, + 114,116,69,114,114,111,114,117,6,0,0,0,102,111,114,109, + 97,116,40,2,0,0,0,117,4,0,0,0,115,101,108,102, + 117,8,0,0,0,102,117,108,108,110,97,109,101,40,1,0, + 0,0,117,3,0,0,0,102,120,110,40,0,0,0,0,117, + 75,0,0,0,47,85,115,101,114,115,47,98,99,97,110,110, + 111,110,47,68,101,118,101,108,111,112,101,114,47,114,101,112, + 111,47,99,112,121,116,104,111,110,47,98,111,111,116,115,116, + 114,97,112,95,105,109,112,111,114,116,108,105,98,47,76,105, + 98,47,95,105,109,112,111,114,116,108,105,98,46,112,121,117, + 25,0,0,0,95,114,101,113,117,105,114,101,115,95,98,117, + 105,108,116,105,110,95,119,114,97,112,112,101,114,1,1,0, + 0,115,6,0,0,0,0,1,15,1,24,1,117,52,0,0, + 0,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116, + 105,110,46,60,108,111,99,97,108,115,62,46,95,114,101,113, + 117,105,114,101,115,95,98,117,105,108,116,105,110,95,119,114, + 97,112,112,101,114,40,1,0,0,0,117,5,0,0,0,95, + 119,114,97,112,40,2,0,0,0,117,3,0,0,0,102,120, + 110,117,25,0,0,0,95,114,101,113,117,105,114,101,115,95, + 98,117,105,108,116,105,110,95,119,114,97,112,112,101,114,40, + 0,0,0,0,40,1,0,0,0,117,3,0,0,0,102,120, + 110,117,75,0,0,0,47,85,115,101,114,115,47,98,99,97, + 110,110,111,110,47,68,101,118,101,108,111,112,101,114,47,114, + 101,112,111,47,99,112,121,116,104,111,110,47,98,111,111,116, + 115,116,114,97,112,95,105,109,112,111,114,116,108,105,98,47, + 76,105,98,47,95,105,109,112,111,114,116,108,105,98,46,112, + 121,117,17,0,0,0,95,114,101,113,117,105,114,101,115,95, + 98,117,105,108,116,105,110,255,0,0,0,115,6,0,0,0, + 0,2,18,4,13,1,117,17,0,0,0,95,114,101,113,117, + 105,114,101,115,95,98,117,105,108,116,105,110,99,1,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,0, + 0,115,35,0,0,0,135,0,0,102,1,0,100,1,0,100, + 2,0,134,0,0,125,1,0,116,0,0,124,1,0,136,0, + 0,131,2,0,1,124,1,0,83,40,3,0,0,0,117,47, + 0,0,0,68,101,99,111,114,97,116,111,114,32,116,111,32, + 118,101,114,105,102,121,32,116,104,101,32,110,97,109,101,100, + 32,109,111,100,117,108,101,32,105,115,32,102,114,111,122,101, + 110,46,99,2,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,19,0,0,0,115,52,0,0,0,116,0,0,106, + 1,0,124,1,0,131,1,0,115,39,0,116,2,0,100,1, + 0,106,3,0,124,1,0,131,1,0,131,1,0,130,1,0, + 110,0,0,136,0,0,124,0,0,124,1,0,131,2,0,83, + 40,2,0,0,0,78,117,26,0,0,0,123,48,125,32,105, + 115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,40,4,0,0,0,117,3,0,0,0,105, + 109,112,117,9,0,0,0,105,115,95,102,114,111,122,101,110, + 117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114, + 117,6,0,0,0,102,111,114,109,97,116,40,2,0,0,0, + 117,4,0,0,0,115,101,108,102,117,8,0,0,0,102,117, + 108,108,110,97,109,101,40,1,0,0,0,117,3,0,0,0, + 102,120,110,40,0,0,0,0,117,75,0,0,0,47,85,115, + 101,114,115,47,98,99,97,110,110,111,110,47,68,101,118,101, + 108,111,112,101,114,47,114,101,112,111,47,99,112,121,116,104, + 111,110,47,98,111,111,116,115,116,114,97,112,95,105,109,112, + 111,114,116,108,105,98,47,76,105,98,47,95,105,109,112,111, + 114,116,108,105,98,46,112,121,117,24,0,0,0,95,114,101, + 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, + 97,112,112,101,114,11,1,0,0,115,6,0,0,0,0,1, + 15,1,24,1,117,50,0,0,0,95,114,101,113,117,105,114, + 101,115,95,102,114,111,122,101,110,46,60,108,111,99,97,108, + 115,62,46,95,114,101,113,117,105,114,101,115,95,102,114,111, + 122,101,110,95,119,114,97,112,112,101,114,40,1,0,0,0, + 117,5,0,0,0,95,119,114,97,112,40,2,0,0,0,117, + 3,0,0,0,102,120,110,117,24,0,0,0,95,114,101,113, + 117,105,114,101,115,95,102,114,111,122,101,110,95,119,114,97, + 112,112,101,114,40,0,0,0,0,40,1,0,0,0,117,3, + 0,0,0,102,120,110,117,75,0,0,0,47,85,115,101,114, + 115,47,98,99,97,110,110,111,110,47,68,101,118,101,108,111, + 112,101,114,47,114,101,112,111,47,99,112,121,116,104,111,110, + 47,98,111,111,116,115,116,114,97,112,95,105,109,112,111,114, + 116,108,105,98,47,76,105,98,47,95,105,109,112,111,114,116, + 108,105,98,46,112,121,117,16,0,0,0,95,114,101,113,117, + 105,114,101,115,95,102,114,111,122,101,110,9,1,0,0,115, + 6,0,0,0,0,2,18,4,13,1,117,16,0,0,0,95, + 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,99, + 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 3,0,0,0,115,29,0,0,0,135,0,0,102,1,0,100, + 1,0,100,2,0,134,0,0,116,0,0,106,1,0,131,0, + 0,68,131,1,0,83,40,3,0,0,0,117,58,0,0,0, + 82,101,116,117,114,110,32,97,32,108,105,115,116,32,111,102, + 32,102,105,108,101,32,115,117,102,102,105,120,101,115,32,98, + 97,115,101,100,32,111,110,32,116,104,101,32,105,109,112,32, + 102,105,108,101,32,116,121,112,101,46,99,1,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,19,0,0,0,115, + 42,0,0,0,103,0,0,124,0,0,93,32,0,125,1,0, + 124,1,0,100,0,0,25,136,0,0,107,2,0,114,6,0, + 124,1,0,100,1,0,25,145,2,0,113,6,0,83,40,2, + 0,0,0,105,2,0,0,0,105,0,0,0,0,40,0,0, + 0,0,40,2,0,0,0,117,2,0,0,0,46,48,117,6, + 0,0,0,115,117,102,102,105,120,40,1,0,0,0,117,11, + 0,0,0,115,117,102,102,105,120,95,116,121,112,101,40,0, + 0,0,0,117,75,0,0,0,47,85,115,101,114,115,47,98, + 99,97,110,110,111,110,47,68,101,118,101,108,111,112,101,114, + 47,114,101,112,111,47,99,112,121,116,104,111,110,47,98,111, + 111,116,115,116,114,97,112,95,105,109,112,111,114,116,108,105, + 98,47,76,105,98,47,95,105,109,112,111,114,116,108,105,98, + 46,112,121,117,10,0,0,0,60,108,105,115,116,99,111,109, + 112,62,21,1,0,0,115,4,0,0,0,9,0,3,1,117, + 32,0,0,0,95,115,117,102,102,105,120,95,108,105,115,116, + 46,60,108,111,99,97,108,115,62,46,60,108,105,115,116,99, + 111,109,112,62,40,2,0,0,0,117,3,0,0,0,105,109, + 112,117,12,0,0,0,103,101,116,95,115,117,102,102,105,120, + 101,115,40,1,0,0,0,117,11,0,0,0,115,117,102,102, + 105,120,95,116,121,112,101,40,0,0,0,0,40,1,0,0, + 0,117,11,0,0,0,115,117,102,102,105,120,95,116,121,112, + 101,117,75,0,0,0,47,85,115,101,114,115,47,98,99,97, + 110,110,111,110,47,68,101,118,101,108,111,112,101,114,47,114, + 101,112,111,47,99,112,121,116,104,111,110,47,98,111,111,116, + 115,116,114,97,112,95,105,109,112,111,114,116,108,105,98,47, + 76,105,98,47,95,105,109,112,111,114,116,108,105,98,46,112, + 121,117,12,0,0,0,95,115,117,102,102,105,120,95,108,105, + 115,116,19,1,0,0,115,2,0,0,0,0,2,117,12,0, + 0,0,95,115,117,102,102,105,120,95,108,105,115,116,99,1, + 0,0,0,0,0,0,0,1,0,0,0,6,0,0,0,66, + 0,0,0,115,155,0,0,0,124,0,0,69,101,0,0,90, + 1,0,100,0,0,90,2,0,100,1,0,90,3,0,101,4, + 0,100,12,0,100,2,0,100,3,0,132,1,0,131,1,0, + 90,6,0,101,4,0,101,7,0,101,8,0,101,9,0,100, + 4,0,100,5,0,132,0,0,131,1,0,131,1,0,131,1, + 0,131,1,0,90,10,0,101,4,0,101,9,0,100,6,0, + 100,7,0,132,0,0,131,1,0,131,1,0,90,11,0,101, + 4,0,101,9,0,100,8,0,100,9,0,132,0,0,131,1, + 0,131,1,0,90,12,0,101,4,0,101,9,0,100,10,0, + 100,11,0,132,0,0,131,1,0,131,1,0,90,13,0,100, + 12,0,83,40,13,0,0,0,117,15,0,0,0,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,117,144,0,0, + 0,77,101,116,97,32,112,97,116,104,32,105,109,112,111,114, + 116,32,102,111,114,32,98,117,105,108,116,45,105,110,32,109, + 111,100,117,108,101,115,46,10,10,32,32,32,32,65,108,108, + 32,109,101,116,104,111,100,115,32,97,114,101,32,101,105,116, + 104,101,114,32,99,108,97,115,115,32,111,114,32,115,116,97, + 116,105,99,32,109,101,116,104,111,100,115,32,116,111,32,97, + 118,111,105,100,32,116,104,101,32,110,101,101,100,32,116,111, + 10,32,32,32,32,105,110,115,116,97,110,116,105,97,116,101, + 32,116,104,101,32,99,108,97,115,115,46,10,10,32,32,32, + 32,99,3,0,0,0,0,0,0,0,3,0,0,0,2,0, + 0,0,67,0,0,0,115,39,0,0,0,124,2,0,100,1, + 0,107,9,0,114,16,0,100,1,0,83,116,1,0,106,2, + 0,124,1,0,131,1,0,114,35,0,124,0,0,83,100,1, + 0,83,40,2,0,0,0,117,113,0,0,0,70,105,110,100, + 32,116,104,101,32,98,117,105,108,116,45,105,110,32,109,111, + 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,73, + 102,32,39,112,97,116,104,39,32,105,115,32,101,118,101,114, + 32,115,112,101,99,105,102,105,101,100,32,116,104,101,110,32, + 116,104,101,32,115,101,97,114,99,104,32,105,115,32,99,111, + 110,115,105,100,101,114,101,100,32,97,32,102,97,105,108,117, + 114,101,46,10,10,32,32,32,32,32,32,32,32,78,40,3, + 0,0,0,117,4,0,0,0,78,111,110,101,117,3,0,0, + 0,105,109,112,117,10,0,0,0,105,115,95,98,117,105,108, + 116,105,110,40,3,0,0,0,117,3,0,0,0,99,108,115, + 117,8,0,0,0,102,117,108,108,110,97,109,101,117,4,0, + 0,0,112,97,116,104,40,0,0,0,0,40,0,0,0,0, + 117,75,0,0,0,47,85,115,101,114,115,47,98,99,97,110, + 110,111,110,47,68,101,118,101,108,111,112,101,114,47,114,101, + 112,111,47,99,112,121,116,104,111,110,47,98,111,111,116,115, + 116,114,97,112,95,105,109,112,111,114,116,108,105,98,47,76, + 105,98,47,95,105,109,112,111,114,116,108,105,98,46,112,121, + 117,11,0,0,0,102,105,110,100,95,109,111,100,117,108,101, + 36,1,0,0,115,6,0,0,0,0,7,12,1,4,1,117, + 27,0,0,0,66,117,105,108,116,105,110,73,109,112,111,114, + 116,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,3,0,0,0,9,0,0,0, + 67,0,0,0,115,85,0,0,0,124,1,0,116,0,0,106, + 1,0,107,6,0,125,2,0,121,17,0,116,2,0,106,3, + 0,124,1,0,131,1,0,83,87,110,46,0,1,1,1,124, + 2,0,12,114,73,0,124,1,0,116,0,0,106,1,0,107, + 6,0,114,73,0,116,0,0,106,1,0,124,1,0,61,110, + 0,0,130,0,0,89,110,1,0,88,100,1,0,83,40,2, + 0,0,0,117,23,0,0,0,76,111,97,100,32,97,32,98, + 117,105,108,116,45,105,110,32,109,111,100,117,108,101,46,78, + 40,4,0,0,0,117,3,0,0,0,115,121,115,117,7,0, + 0,0,109,111,100,117,108,101,115,117,3,0,0,0,105,109, + 112,117,12,0,0,0,105,110,105,116,95,98,117,105,108,116, + 105,110,40,3,0,0,0,117,3,0,0,0,99,108,115,117, + 8,0,0,0,102,117,108,108,110,97,109,101,117,9,0,0, + 0,105,115,95,114,101,108,111,97,100,40,0,0,0,0,40, + 0,0,0,0,117,75,0,0,0,47,85,115,101,114,115,47, + 98,99,97,110,110,111,110,47,68,101,118,101,108,111,112,101, + 114,47,114,101,112,111,47,99,112,121,116,104,111,110,47,98, + 111,111,116,115,116,114,97,112,95,105,109,112,111,114,116,108, + 105,98,47,76,105,98,47,95,105,109,112,111,114,116,108,105, + 98,46,112,121,117,11,0,0,0,108,111,97,100,95,109,111, + 100,117,108,101,47,1,0,0,115,14,0,0,0,0,6,15, + 1,3,1,17,1,3,1,22,1,13,1,117,27,0,0,0, + 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, + 108,111,97,100,95,109,111,100,117,108,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,0,83,40,2,0,0,0,117,57, + 0,0,0,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,99, + 111,100,101,32,111,98,106,101,99,116,115,46,78,40,1,0, + 0,0,117,4,0,0,0,78,111,110,101,40,2,0,0,0, + 117,3,0,0,0,99,108,115,117,8,0,0,0,102,117,108, + 108,110,97,109,101,40,0,0,0,0,40,0,0,0,0,117, + 75,0,0,0,47,85,115,101,114,115,47,98,99,97,110,110, + 111,110,47,68,101,118,101,108,111,112,101,114,47,114,101,112, + 111,47,99,112,121,116,104,111,110,47,98,111,111,116,115,116, + 114,97,112,95,105,109,112,111,114,116,108,105,98,47,76,105, + 98,47,95,105,109,112,111,114,116,108,105,98,46,112,121,117, + 8,0,0,0,103,101,116,95,99,111,100,101,61,1,0,0, + 115,2,0,0,0,0,4,117,24,0,0,0,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,46,103,101,116,95, + 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, + 0,83,40,2,0,0,0,117,56,0,0,0,82,101,116,117, + 114,110,32,78,111,110,101,32,97,115,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,100,111,32,110, + 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, + 111,100,101,46,78,40,1,0,0,0,117,4,0,0,0,78, + 111,110,101,40,2,0,0,0,117,3,0,0,0,99,108,115, + 117,8,0,0,0,102,117,108,108,110,97,109,101,40,0,0, + 0,0,40,0,0,0,0,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,10,0,0,0,103,101,116,95, + 115,111,117,114,99,101,67,1,0,0,115,2,0,0,0,0, + 4,117,26,0,0,0,66,117,105,108,116,105,110,73,109,112, + 111,114,116,101,114,46,103,101,116,95,115,111,117,114,99,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,4,0,0,0,100,1,0,83,40,2, + 0,0,0,117,51,0,0,0,82,101,116,117,114,110,32,78, + 111,110,101,32,97,115,32,98,117,105,108,116,45,105,110,32, + 109,111,100,117,108,101,115,32,97,114,101,32,110,101,118,101, + 114,32,112,97,99,107,97,103,101,115,46,70,40,1,0,0, + 0,117,5,0,0,0,70,97,108,115,101,40,2,0,0,0, + 117,3,0,0,0,99,108,115,117,8,0,0,0,102,117,108, + 108,110,97,109,101,40,0,0,0,0,40,0,0,0,0,117, + 75,0,0,0,47,85,115,101,114,115,47,98,99,97,110,110, + 111,110,47,68,101,118,101,108,111,112,101,114,47,114,101,112, + 111,47,99,112,121,116,104,111,110,47,98,111,111,116,115,116, + 114,97,112,95,105,109,112,111,114,116,108,105,98,47,76,105, + 98,47,95,105,109,112,111,114,116,108,105,98,46,112,121,117, + 10,0,0,0,105,115,95,112,97,99,107,97,103,101,73,1, + 0,0,115,2,0,0,0,0,4,117,26,0,0,0,66,117, + 105,108,116,105,110,73,109,112,111,114,116,101,114,46,105,115, + 95,112,97,99,107,97,103,101,78,40,14,0,0,0,117,8, + 0,0,0,95,95,110,97,109,101,95,95,117,10,0,0,0, + 95,95,109,111,100,117,108,101,95,95,117,12,0,0,0,95, + 95,113,117,97,108,110,97,109,101,95,95,117,7,0,0,0, + 95,95,100,111,99,95,95,117,11,0,0,0,99,108,97,115, + 115,109,101,116,104,111,100,117,4,0,0,0,78,111,110,101, + 117,11,0,0,0,102,105,110,100,95,109,111,100,117,108,101, + 117,11,0,0,0,115,101,116,95,112,97,99,107,97,103,101, + 117,10,0,0,0,115,101,116,95,108,111,97,100,101,114,117, + 17,0,0,0,95,114,101,113,117,105,114,101,115,95,98,117, + 105,108,116,105,110,117,11,0,0,0,108,111,97,100,95,109, + 111,100,117,108,101,117,8,0,0,0,103,101,116,95,99,111, + 100,101,117,10,0,0,0,103,101,116,95,115,111,117,114,99, + 101,117,10,0,0,0,105,115,95,112,97,99,107,97,103,101, + 40,1,0,0,0,117,10,0,0,0,95,95,108,111,99,97, + 108,115,95,95,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,15, + 0,0,0,66,117,105,108,116,105,110,73,109,112,111,114,116, + 101,114,27,1,0,0,115,26,0,0,0,16,7,6,2,3, + 1,18,10,3,1,3,1,3,1,27,11,3,1,21,5,3, + 1,21,5,3,1,117,15,0,0,0,66,117,105,108,116,105, + 110,73,109,112,111,114,116,101,114,99,1,0,0,0,0,0, + 0,0,1,0,0,0,6,0,0,0,66,0,0,0,115,155, + 0,0,0,124,0,0,69,101,0,0,90,1,0,100,0,0, + 90,2,0,100,1,0,90,3,0,101,4,0,100,12,0,100, + 2,0,100,3,0,132,1,0,131,1,0,90,6,0,101,4, + 0,101,7,0,101,8,0,101,9,0,100,4,0,100,5,0, + 132,0,0,131,1,0,131,1,0,131,1,0,131,1,0,90, + 10,0,101,4,0,101,9,0,100,6,0,100,7,0,132,0, + 0,131,1,0,131,1,0,90,11,0,101,4,0,101,9,0, + 100,8,0,100,9,0,132,0,0,131,1,0,131,1,0,90, + 12,0,101,4,0,101,9,0,100,10,0,100,11,0,132,0, + 0,131,1,0,131,1,0,90,13,0,100,12,0,83,40,13, + 0,0,0,117,14,0,0,0,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,117,142,0,0,0,77,101,116,97,32, + 112,97,116,104,32,105,109,112,111,114,116,32,102,111,114,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,115,46,10, + 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, + 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, + 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, + 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, + 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, + 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, + 115,115,46,10,10,32,32,32,32,99,3,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,23, + 0,0,0,116,0,0,106,1,0,124,1,0,131,1,0,114, + 19,0,124,0,0,83,100,1,0,83,40,2,0,0,0,117, + 21,0,0,0,70,105,110,100,32,97,32,102,114,111,122,101, + 110,32,109,111,100,117,108,101,46,78,40,3,0,0,0,117, + 3,0,0,0,105,109,112,117,9,0,0,0,105,115,95,102, + 114,111,122,101,110,117,4,0,0,0,78,111,110,101,40,3, + 0,0,0,117,3,0,0,0,99,108,115,117,8,0,0,0, + 102,117,108,108,110,97,109,101,117,4,0,0,0,112,97,116, + 104,40,0,0,0,0,40,0,0,0,0,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,11,0,0,0, + 102,105,110,100,95,109,111,100,117,108,101,89,1,0,0,115, + 2,0,0,0,0,3,117,26,0,0,0,70,114,111,122,101, + 110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,3,0, + 0,0,9,0,0,0,67,0,0,0,115,85,0,0,0,124, + 1,0,116,0,0,106,1,0,107,6,0,125,2,0,121,17, + 0,116,2,0,106,3,0,124,1,0,131,1,0,83,87,110, + 46,0,1,1,1,124,2,0,12,114,73,0,124,1,0,116, + 0,0,106,1,0,107,6,0,114,73,0,116,0,0,106,1, + 0,124,1,0,61,110,0,0,130,0,0,89,110,1,0,88, + 100,1,0,83,40,2,0,0,0,117,21,0,0,0,76,111, + 97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,46,78,40,4,0,0,0,117,3,0,0,0,115,121, + 115,117,7,0,0,0,109,111,100,117,108,101,115,117,3,0, + 0,0,105,109,112,117,11,0,0,0,105,110,105,116,95,102, + 114,111,122,101,110,40,3,0,0,0,117,3,0,0,0,99, + 108,115,117,8,0,0,0,102,117,108,108,110,97,109,101,117, + 9,0,0,0,105,115,95,114,101,108,111,97,100,40,0,0, + 0,0,40,0,0,0,0,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,11,0,0,0,108,111,97,100, + 95,109,111,100,117,108,101,94,1,0,0,115,14,0,0,0, + 0,6,15,1,3,1,17,1,3,1,22,1,13,1,117,26, + 0,0,0,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,13,0,0,0,116,0,0,106,1,0,124,1,0, + 131,1,0,83,40,1,0,0,0,117,45,0,0,0,82,101, + 116,117,114,110,32,116,104,101,32,99,111,100,101,32,111,98, + 106,101,99,116,32,102,111,114,32,116,104,101,32,102,114,111, + 122,101,110,32,109,111,100,117,108,101,46,40,2,0,0,0, + 117,3,0,0,0,105,109,112,117,17,0,0,0,103,101,116, + 95,102,114,111,122,101,110,95,111,98,106,101,99,116,40,2, + 0,0,0,117,3,0,0,0,99,108,115,117,8,0,0,0, + 102,117,108,108,110,97,109,101,40,0,0,0,0,40,0,0, + 0,0,117,75,0,0,0,47,85,115,101,114,115,47,98,99, + 97,110,110,111,110,47,68,101,118,101,108,111,112,101,114,47, + 114,101,112,111,47,99,112,121,116,104,111,110,47,98,111,111, + 116,115,116,114,97,112,95,105,109,112,111,114,116,108,105,98, + 47,76,105,98,47,95,105,109,112,111,114,116,108,105,98,46, + 112,121,117,8,0,0,0,103,101,116,95,99,111,100,101,108, + 1,0,0,115,2,0,0,0,0,4,117,23,0,0,0,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,46,103,101, + 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, + 100,1,0,83,40,2,0,0,0,117,54,0,0,0,82,101, + 116,117,114,110,32,78,111,110,101,32,97,115,32,102,114,111, + 122,101,110,32,109,111,100,117,108,101,115,32,100,111,32,110, + 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, + 111,100,101,46,78,40,1,0,0,0,117,4,0,0,0,78, + 111,110,101,40,2,0,0,0,117,3,0,0,0,99,108,115, + 117,8,0,0,0,102,117,108,108,110,97,109,101,40,0,0, + 0,0,40,0,0,0,0,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,10,0,0,0,103,101,116,95, + 115,111,117,114,99,101,114,1,0,0,115,2,0,0,0,0, + 4,117,25,0,0,0,70,114,111,122,101,110,73,109,112,111, + 114,116,101,114,46,103,101,116,95,115,111,117,114,99,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, + 67,0,0,0,115,13,0,0,0,116,0,0,106,1,0,124, + 1,0,131,1,0,83,40,1,0,0,0,117,41,0,0,0, + 82,101,116,117,114,110,32,105,102,32,116,104,101,32,102,114, + 111,122,101,110,32,109,111,100,117,108,101,32,105,115,32,97, + 32,112,97,99,107,97,103,101,46,40,2,0,0,0,117,3, + 0,0,0,105,109,112,117,17,0,0,0,105,115,95,102,114, + 111,122,101,110,95,112,97,99,107,97,103,101,40,2,0,0, + 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, + 108,108,110,97,109,101,40,0,0,0,0,40,0,0,0,0, + 117,75,0,0,0,47,85,115,101,114,115,47,98,99,97,110, + 110,111,110,47,68,101,118,101,108,111,112,101,114,47,114,101, + 112,111,47,99,112,121,116,104,111,110,47,98,111,111,116,115, + 116,114,97,112,95,105,109,112,111,114,116,108,105,98,47,76, + 105,98,47,95,105,109,112,111,114,116,108,105,98,46,112,121, + 117,10,0,0,0,105,115,95,112,97,99,107,97,103,101,120, + 1,0,0,115,2,0,0,0,0,4,117,25,0,0,0,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,46,105,115, + 95,112,97,99,107,97,103,101,78,40,14,0,0,0,117,8, + 0,0,0,95,95,110,97,109,101,95,95,117,10,0,0,0, + 95,95,109,111,100,117,108,101,95,95,117,12,0,0,0,95, + 95,113,117,97,108,110,97,109,101,95,95,117,7,0,0,0, + 95,95,100,111,99,95,95,117,11,0,0,0,99,108,97,115, + 115,109,101,116,104,111,100,117,4,0,0,0,78,111,110,101, + 117,11,0,0,0,102,105,110,100,95,109,111,100,117,108,101, + 117,11,0,0,0,115,101,116,95,112,97,99,107,97,103,101, + 117,10,0,0,0,115,101,116,95,108,111,97,100,101,114,117, + 16,0,0,0,95,114,101,113,117,105,114,101,115,95,102,114, + 111,122,101,110,117,11,0,0,0,108,111,97,100,95,109,111, + 100,117,108,101,117,8,0,0,0,103,101,116,95,99,111,100, + 101,117,10,0,0,0,103,101,116,95,115,111,117,114,99,101, + 117,10,0,0,0,105,115,95,112,97,99,107,97,103,101,40, + 1,0,0,0,117,10,0,0,0,95,95,108,111,99,97,108, + 115,95,95,40,0,0,0,0,40,0,0,0,0,117,75,0, + 0,0,47,85,115,101,114,115,47,98,99,97,110,110,111,110, + 47,68,101,118,101,108,111,112,101,114,47,114,101,112,111,47, + 99,112,121,116,104,111,110,47,98,111,111,116,115,116,114,97, + 112,95,105,109,112,111,114,116,108,105,98,47,76,105,98,47, + 95,105,109,112,111,114,116,108,105,98,46,112,121,117,14,0, + 0,0,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 80,1,0,0,115,26,0,0,0,16,7,6,2,3,1,18, + 4,3,1,3,1,3,1,27,11,3,1,21,5,3,1,21, + 5,3,1,117,14,0,0,0,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,99,1,0,0,0,0,0,0,0,1, + 0,0,0,5,0,0,0,66,0,0,0,115,74,0,0,0, + 124,0,0,69,101,0,0,90,1,0,100,0,0,90,2,0, + 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, + 4,0,100,4,0,100,5,0,132,0,0,90,5,0,101,6, + 0,100,6,0,100,10,0,100,7,0,100,8,0,132,0,1, + 131,1,0,90,8,0,100,9,0,83,40,11,0,0,0,117, + 13,0,0,0,95,76,111,97,100,101,114,66,97,115,105,99, + 115,117,84,0,0,0,66,97,115,101,32,99,108,97,115,115, + 32,111,102,32,99,111,109,109,111,110,32,99,111,100,101,32, + 110,101,101,100,101,100,32,98,121,32,98,111,116,104,32,83, + 111,117,114,99,101,76,111,97,100,101,114,32,97,110,100,10, + 32,32,32,32,95,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,3,0,0,0,3,0,0,0,67,0,0,0,115, + 54,0,0,0,124,0,0,106,0,0,124,1,0,131,1,0, + 106,1,0,116,2,0,131,1,0,100,1,0,25,125,2,0, + 124,2,0,106,3,0,100,2,0,100,3,0,131,2,0,100, + 4,0,25,100,5,0,107,2,0,83,40,6,0,0,0,117, + 141,0,0,0,67,111,110,99,114,101,116,101,32,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, + 110,115,112,101,99,116,76,111,97,100,101,114,46,105,115,95, + 112,97,99,107,97,103,101,32,98,121,32,99,104,101,99,107, + 105,110,103,32,105,102,10,32,32,32,32,32,32,32,32,116, + 104,101,32,112,97,116,104,32,114,101,116,117,114,110,101,100, + 32,98,121,32,103,101,116,95,102,105,108,101,110,97,109,101, + 32,104,97,115,32,97,32,102,105,108,101,110,97,109,101,32, + 111,102,32,39,95,95,105,110,105,116,95,95,46,112,121,39, + 46,105,2,0,0,0,117,1,0,0,0,46,105,1,0,0, + 0,105,0,0,0,0,117,8,0,0,0,95,95,105,110,105, + 116,95,95,40,4,0,0,0,117,12,0,0,0,103,101,116, + 95,102,105,108,101,110,97,109,101,117,10,0,0,0,114,112, + 97,114,116,105,116,105,111,110,117,8,0,0,0,112,97,116, + 104,95,115,101,112,117,6,0,0,0,114,115,112,108,105,116, + 40,3,0,0,0,117,4,0,0,0,115,101,108,102,117,8, + 0,0,0,102,117,108,108,110,97,109,101,117,8,0,0,0, + 102,105,108,101,110,97,109,101,40,0,0,0,0,40,0,0, + 0,0,117,75,0,0,0,47,85,115,101,114,115,47,98,99, + 97,110,110,111,110,47,68,101,118,101,108,111,112,101,114,47, + 114,101,112,111,47,99,112,121,116,104,111,110,47,98,111,111, + 116,115,116,114,97,112,95,105,109,112,111,114,116,108,105,98, + 47,76,105,98,47,95,105,109,112,111,114,116,108,105,98,46, + 112,121,117,10,0,0,0,105,115,95,112,97,99,107,97,103, + 101,132,1,0,0,115,4,0,0,0,0,3,28,1,117,24, + 0,0,0,95,76,111,97,100,101,114,66,97,115,105,99,115, + 46,105,115,95,112,97,99,107,97,103,101,99,4,0,0,0, + 0,0,0,0,9,0,0,0,20,0,0,0,67,0,0,0, + 115,129,1,0,0,124,2,0,100,1,0,100,2,0,133,2, + 0,25,125,4,0,124,2,0,100,2,0,100,3,0,133,2, + 0,25,125,5,0,124,2,0,100,3,0,100,4,0,133,2, + 0,25,125,6,0,116,0,0,124,4,0,131,1,0,100,2, + 0,107,3,0,115,84,0,124,4,0,116,1,0,106,2,0, + 131,0,0,107,3,0,114,108,0,116,3,0,100,5,0,106, + 4,0,124,1,0,131,1,0,131,1,0,130,1,0,110,84, + 0,116,0,0,124,5,0,131,1,0,100,2,0,107,3,0, + 114,150,0,116,5,0,100,6,0,106,4,0,124,1,0,131, + 1,0,131,1,0,130,1,0,110,42,0,116,0,0,124,6, + 0,131,1,0,100,2,0,107,3,0,114,192,0,116,5,0, + 100,7,0,106,4,0,124,1,0,131,1,0,131,1,0,130, + 1,0,110,0,0,124,3,0,100,1,0,107,9,0,114,115, + 1,121,20,0,116,7,0,124,3,0,100,8,0,25,131,1, + 0,125,7,0,87,110,18,0,4,116,8,0,107,10,0,114, + 244,0,1,1,1,89,110,43,0,88,116,9,0,124,5,0, + 131,1,0,124,7,0,107,3,0,114,31,1,116,3,0,100, + 9,0,106,4,0,124,1,0,131,1,0,131,1,0,130,1, + 0,110,0,0,121,18,0,124,3,0,100,10,0,25,100,11, + 0,64,125,8,0,87,110,18,0,4,116,8,0,107,10,0, + 114,69,1,1,1,1,89,113,115,1,88,116,9,0,124,6, + 0,131,1,0,124,8,0,107,3,0,114,115,1,116,3,0, + 100,9,0,106,4,0,124,1,0,131,1,0,131,1,0,130, + 1,0,113,115,1,110,0,0,124,2,0,100,4,0,100,1, + 0,133,2,0,25,83,40,12,0,0,0,117,193,0,0,0, + 82,101,116,117,114,110,32,116,104,101,32,109,97,114,115,104, + 97,108,108,101,100,32,98,121,116,101,115,32,102,114,111,109, + 32,98,121,116,101,99,111,100,101,44,32,118,101,114,105,102, + 121,105,110,103,32,116,104,101,32,109,97,103,105,99,10,32, + 32,32,32,32,32,32,32,110,117,109,98,101,114,44,32,116, + 105,109,101,115,116,97,109,112,32,97,110,100,32,115,111,117, + 114,99,101,32,115,105,122,101,32,97,108,111,110,103,32,116, + 104,101,32,119,97,121,46,10,10,32,32,32,32,32,32,32, + 32,73,102,32,115,111,117,114,99,101,95,115,116,97,116,115, + 32,105,115,32,78,111,110,101,32,116,104,101,110,32,115,107, + 105,112,32,116,104,101,32,116,105,109,101,115,116,97,109,112, + 32,99,104,101,99,107,46,10,10,32,32,32,32,32,32,32, + 32,78,105,4,0,0,0,105,8,0,0,0,105,12,0,0, + 0,117,22,0,0,0,98,97,100,32,109,97,103,105,99,32, + 110,117,109,98,101,114,32,105,110,32,123,125,117,19,0,0, + 0,98,97,100,32,116,105,109,101,115,116,97,109,112,32,105, + 110,32,123,125,117,14,0,0,0,98,97,100,32,115,105,122, + 101,32,105,110,32,123,125,117,5,0,0,0,109,116,105,109, + 101,117,24,0,0,0,98,121,116,101,99,111,100,101,32,105, + 115,32,115,116,97,108,101,32,102,111,114,32,123,125,117,4, + 0,0,0,115,105,122,101,73,255,255,255,255,0,0,0,0, + 40,10,0,0,0,117,3,0,0,0,108,101,110,117,3,0, + 0,0,105,109,112,117,9,0,0,0,103,101,116,95,109,97, + 103,105,99,117,11,0,0,0,73,109,112,111,114,116,69,114, + 114,111,114,117,6,0,0,0,102,111,114,109,97,116,117,8, + 0,0,0,69,79,70,69,114,114,111,114,117,4,0,0,0, + 78,111,110,101,117,3,0,0,0,105,110,116,117,8,0,0, + 0,75,101,121,69,114,114,111,114,117,7,0,0,0,95,114, + 95,108,111,110,103,40,9,0,0,0,117,4,0,0,0,115, + 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,101, + 117,4,0,0,0,100,97,116,97,117,12,0,0,0,115,111, + 117,114,99,101,95,115,116,97,116,115,117,5,0,0,0,109, + 97,103,105,99,117,13,0,0,0,114,97,119,95,116,105,109, + 101,115,116,97,109,112,117,8,0,0,0,114,97,119,95,115, + 105,122,101,117,12,0,0,0,115,111,117,114,99,101,95,109, + 116,105,109,101,117,11,0,0,0,115,111,117,114,99,101,95, + 115,105,122,101,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,20, + 0,0,0,95,98,121,116,101,115,95,102,114,111,109,95,98, + 121,116,101,99,111,100,101,138,1,0,0,115,46,0,0,0, + 0,7,16,1,16,1,16,1,36,1,24,1,18,1,24,1, + 18,1,24,1,12,1,3,1,20,1,13,1,5,2,18,1, + 24,1,3,1,18,1,13,1,5,2,18,1,27,3,117,34, + 0,0,0,95,76,111,97,100,101,114,66,97,115,105,99,115, + 46,95,98,121,116,101,115,95,102,114,111,109,95,98,121,116, + 101,99,111,100,101,117,10,0,0,0,115,111,117,114,99,101, + 108,101,115,115,99,2,0,0,0,1,0,0,0,5,0,0, + 0,3,0,0,0,67,0,0,0,115,196,0,0,0,124,1, + 0,106,0,0,125,3,0,124,0,0,106,1,0,124,3,0, + 131,1,0,125,4,0,124,0,0,106,2,0,124,3,0,131, + 1,0,124,1,0,95,3,0,124,2,0,115,72,0,116,4, + 0,106,5,0,124,1,0,106,3,0,131,1,0,124,1,0, + 95,6,0,110,12,0,124,1,0,106,3,0,124,1,0,95, + 6,0,124,3,0,124,1,0,95,7,0,124,0,0,106,8, + 0,124,3,0,131,1,0,114,142,0,124,1,0,106,3,0, + 106,9,0,116,10,0,100,1,0,131,2,0,100,2,0,25, + 103,1,0,124,1,0,95,11,0,110,25,0,124,1,0,106, + 7,0,106,12,0,100,3,0,131,1,0,100,2,0,25,124, + 1,0,95,7,0,124,0,0,124,1,0,95,13,0,116,14, + 0,124,4,0,124,1,0,106,15,0,131,2,0,1,124,1, + 0,83,40,4,0,0,0,117,82,0,0,0,72,101,108,112, + 101,114,32,102,111,114,32,108,111,97,100,95,109,111,100,117, + 108,101,32,97,98,108,101,32,116,111,32,104,97,110,100,108, + 101,32,101,105,116,104,101,114,32,115,111,117,114,99,101,32, + 111,114,32,115,111,117,114,99,101,108,101,115,115,10,32,32, + 32,32,32,32,32,32,108,111,97,100,105,110,103,46,105,1, + 0,0,0,105,0,0,0,0,117,1,0,0,0,46,40,16, + 0,0,0,117,8,0,0,0,95,95,110,97,109,101,95,95, + 117,8,0,0,0,103,101,116,95,99,111,100,101,117,12,0, + 0,0,103,101,116,95,102,105,108,101,110,97,109,101,117,8, + 0,0,0,95,95,102,105,108,101,95,95,117,3,0,0,0, + 105,109,112,117,17,0,0,0,99,97,99,104,101,95,102,114, + 111,109,95,115,111,117,114,99,101,117,10,0,0,0,95,95, + 99,97,99,104,101,100,95,95,117,11,0,0,0,95,95,112, + 97,99,107,97,103,101,95,95,117,10,0,0,0,105,115,95, + 112,97,99,107,97,103,101,117,6,0,0,0,114,115,112,108, + 105,116,117,8,0,0,0,112,97,116,104,95,115,101,112,117, + 8,0,0,0,95,95,112,97,116,104,95,95,117,10,0,0, + 0,114,112,97,114,116,105,116,105,111,110,117,10,0,0,0, + 95,95,108,111,97,100,101,114,95,95,117,4,0,0,0,101, + 120,101,99,117,8,0,0,0,95,95,100,105,99,116,95,95, + 40,5,0,0,0,117,4,0,0,0,115,101,108,102,117,6, + 0,0,0,109,111,100,117,108,101,117,10,0,0,0,115,111, + 117,114,99,101,108,101,115,115,117,4,0,0,0,110,97,109, + 101,117,11,0,0,0,99,111,100,101,95,111,98,106,101,99, + 116,40,0,0,0,0,40,0,0,0,0,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,12,0,0,0, + 95,108,111,97,100,95,109,111,100,117,108,101,173,1,0,0, + 115,26,0,0,0,0,4,9,1,15,1,18,1,6,1,24, + 2,12,1,9,1,15,1,34,2,25,1,9,1,16,1,117, + 26,0,0,0,95,76,111,97,100,101,114,66,97,115,105,99, + 115,46,95,108,111,97,100,95,109,111,100,117,108,101,78,70, + 40,9,0,0,0,117,8,0,0,0,95,95,110,97,109,101, + 95,95,117,10,0,0,0,95,95,109,111,100,117,108,101,95, + 95,117,12,0,0,0,95,95,113,117,97,108,110,97,109,101, + 95,95,117,7,0,0,0,95,95,100,111,99,95,95,117,10, + 0,0,0,105,115,95,112,97,99,107,97,103,101,117,20,0, + 0,0,95,98,121,116,101,115,95,102,114,111,109,95,98,121, + 116,101,99,111,100,101,117,17,0,0,0,109,111,100,117,108, + 101,95,102,111,114,95,108,111,97,100,101,114,117,5,0,0, + 0,70,97,108,115,101,117,12,0,0,0,95,108,111,97,100, + 95,109,111,100,117,108,101,40,1,0,0,0,117,10,0,0, + 0,95,95,108,111,99,97,108,115,95,95,40,0,0,0,0, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,13,0,0,0,95,76,111,97,100,101, + 114,66,97,115,105,99,115,127,1,0,0,115,10,0,0,0, + 16,3,6,2,12,6,12,35,6,1,117,13,0,0,0,95, + 76,111,97,100,101,114,66,97,115,105,99,115,99,1,0,0, + 0,0,0,0,0,1,0,0,0,2,0,0,0,66,0,0, + 0,115,92,0,0,0,124,0,0,69,101,0,0,90,1,0, + 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, + 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, + 0,100,6,0,132,0,0,90,5,0,100,7,0,100,8,0, + 132,0,0,90,6,0,100,9,0,100,10,0,132,0,0,90, + 7,0,100,11,0,100,12,0,132,0,0,90,8,0,100,13, + 0,83,40,14,0,0,0,117,12,0,0,0,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,40,2,0,0, + 0,117,121,0,0,0,79,112,116,105,111,110,97,108,32,109, + 101,116,104,111,100,32,116,104,97,116,32,114,101,116,117,114, + 110,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116, + 105,111,110,32,116,105,109,101,32,40,97,110,32,105,110,116, + 41,32,102,111,114,32,116,104,101,10,32,32,32,32,32,32, + 32,32,115,112,101,99,105,102,105,101,100,32,112,97,116,104, + 44,32,119,104,101,114,101,32,112,97,116,104,32,105,115,32, + 97,32,115,116,114,46,10,32,32,32,32,32,32,32,32,78, + 40,1,0,0,0,117,19,0,0,0,78,111,116,73,109,112, + 108,101,109,101,110,116,101,100,69,114,114,111,114,40,2,0, + 0,0,117,4,0,0,0,115,101,108,102,117,4,0,0,0, + 112,97,116,104,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,10, + 0,0,0,112,97,116,104,95,109,116,105,109,101,196,1,0, + 0,115,2,0,0,0,0,4,117,23,0,0,0,83,111,117, + 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,109, + 116,105,109,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,67,0,0,0,115,20,0,0,0,105,1, + 0,124,0,0,106,0,0,124,1,0,131,1,0,100,1,0, + 54,83,40,2,0,0,0,117,114,1,0,0,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,114,101,116,117, + 114,110,105,110,103,32,97,32,109,101,116,97,100,97,116,97, + 32,100,105,99,116,32,102,111,114,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,112,97,116,104,10,32,32,32, + 32,32,32,32,32,116,111,32,98,121,32,116,104,101,32,112, + 97,116,104,32,40,115,116,114,41,46,10,32,32,32,32,32, + 32,32,32,80,111,115,115,105,98,108,101,32,107,101,121,115, + 58,10,32,32,32,32,32,32,32,32,45,32,39,109,116,105, + 109,101,39,32,40,109,97,110,100,97,116,111,114,121,41,32, + 105,115,32,116,104,101,32,110,117,109,101,114,105,99,32,116, + 105,109,101,115,116,97,109,112,32,111,102,32,108,97,115,116, + 32,115,111,117,114,99,101,10,32,32,32,32,32,32,32,32, + 32,32,99,111,100,101,32,109,111,100,105,102,105,99,97,116, + 105,111,110,59,10,32,32,32,32,32,32,32,32,45,32,39, + 115,105,122,101,39,32,40,111,112,116,105,111,110,97,108,41, + 32,105,115,32,116,104,101,32,115,105,122,101,32,105,110,32, + 98,121,116,101,115,32,111,102,32,116,104,101,32,115,111,117, + 114,99,101,32,99,111,100,101,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,117,5, + 0,0,0,109,116,105,109,101,40,1,0,0,0,117,10,0, + 0,0,112,97,116,104,95,109,116,105,109,101,40,2,0,0, + 0,117,4,0,0,0,115,101,108,102,117,4,0,0,0,112, + 97,116,104,40,0,0,0,0,40,0,0,0,0,117,75,0, + 0,0,47,85,115,101,114,115,47,98,99,97,110,110,111,110, + 47,68,101,118,101,108,111,112,101,114,47,114,101,112,111,47, + 99,112,121,116,104,111,110,47,98,111,111,116,115,116,114,97, + 112,95,105,109,112,111,114,116,108,105,98,47,76,105,98,47, + 95,105,109,112,111,114,116,108,105,98,46,112,121,117,10,0, + 0,0,112,97,116,104,95,115,116,97,116,115,202,1,0,0, + 115,2,0,0,0,0,10,117,23,0,0,0,83,111,117,114, + 99,101,76,111,97,100,101,114,46,112,97,116,104,95,115,116, + 97,116,115,99,3,0,0,0,0,0,0,0,3,0,0,0, + 1,0,0,0,67,0,0,0,115,10,0,0,0,116,0,0, + 130,1,0,100,1,0,83,40,2,0,0,0,117,151,0,0, + 0,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, + 32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97, + 116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32, + 102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114, + 41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, + 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, + 116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32, + 116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98, + 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10, + 32,32,32,32,32,32,32,32,78,40,1,0,0,0,117,19, + 0,0,0,78,111,116,73,109,112,108,101,109,101,110,116,101, + 100,69,114,114,111,114,40,3,0,0,0,117,4,0,0,0, + 115,101,108,102,117,4,0,0,0,112,97,116,104,117,4,0, + 0,0,100,97,116,97,40,0,0,0,0,40,0,0,0,0, + 117,75,0,0,0,47,85,115,101,114,115,47,98,99,97,110, + 110,111,110,47,68,101,118,101,108,111,112,101,114,47,114,101, + 112,111,47,99,112,121,116,104,111,110,47,98,111,111,116,115, + 116,114,97,112,95,105,109,112,111,114,116,108,105,98,47,76, + 105,98,47,95,105,109,112,111,114,116,108,105,98,46,112,121, + 117,8,0,0,0,115,101,116,95,100,97,116,97,214,1,0, + 0,115,2,0,0,0,0,6,117,21,0,0,0,83,111,117, + 114,99,101,76,111,97,100,101,114,46,115,101,116,95,100,97, + 116,97,99,2,0,0,0,0,0,0,0,7,0,0,0,12, + 0,0,0,67,0,0,0,115,150,0,0,0,100,1,0,100, + 2,0,108,0,0,125,2,0,124,0,0,106,1,0,124,1, + 0,131,1,0,125,3,0,121,19,0,124,0,0,106,2,0, + 124,3,0,131,1,0,125,4,0,87,110,30,0,4,116,3, + 0,107,10,0,114,78,0,1,1,1,116,4,0,100,3,0, + 131,1,0,130,1,0,89,110,1,0,88,124,2,0,106,5, + 0,116,6,0,106,7,0,124,4,0,131,1,0,106,8,0, + 131,1,0,125,5,0,116,6,0,106,9,0,100,2,0,100, + 4,0,131,2,0,125,6,0,124,6,0,106,12,0,124,4, + 0,106,12,0,124,5,0,100,1,0,25,131,1,0,131,1, + 0,83,40,5,0,0,0,117,52,0,0,0,67,111,110,99, + 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, + 105,0,0,0,0,78,117,39,0,0,0,115,111,117,114,99, + 101,32,110,111,116,32,97,118,97,105,108,97,98,108,101,32, + 116,104,114,111,117,103,104,32,103,101,116,95,100,97,116,97, + 40,41,84,40,13,0,0,0,117,8,0,0,0,116,111,107, + 101,110,105,122,101,117,12,0,0,0,103,101,116,95,102,105, + 108,101,110,97,109,101,117,8,0,0,0,103,101,116,95,100, + 97,116,97,117,7,0,0,0,73,79,69,114,114,111,114,117, + 11,0,0,0,73,109,112,111,114,116,69,114,114,111,114,117, + 15,0,0,0,100,101,116,101,99,116,95,101,110,99,111,100, + 105,110,103,117,3,0,0,0,95,105,111,117,7,0,0,0, + 66,121,116,101,115,73,79,117,8,0,0,0,114,101,97,100, + 108,105,110,101,117,25,0,0,0,73,110,99,114,101,109,101, + 110,116,97,108,78,101,119,108,105,110,101,68,101,99,111,100, + 101,114,117,4,0,0,0,78,111,110,101,117,4,0,0,0, + 84,114,117,101,117,6,0,0,0,100,101,99,111,100,101,40, + 7,0,0,0,117,4,0,0,0,115,101,108,102,117,8,0, + 0,0,102,117,108,108,110,97,109,101,117,8,0,0,0,116, + 111,107,101,110,105,122,101,117,4,0,0,0,112,97,116,104, + 117,12,0,0,0,115,111,117,114,99,101,95,98,121,116,101, + 115,117,8,0,0,0,101,110,99,111,100,105,110,103,117,15, + 0,0,0,110,101,119,108,105,110,101,95,100,101,99,111,100, + 101,114,40,0,0,0,0,40,0,0,0,0,117,75,0,0, + 0,47,85,115,101,114,115,47,98,99,97,110,110,111,110,47, + 68,101,118,101,108,111,112,101,114,47,114,101,112,111,47,99, + 112,121,116,104,111,110,47,98,111,111,116,115,116,114,97,112, + 95,105,109,112,111,114,116,108,105,98,47,76,105,98,47,95, + 105,109,112,111,114,116,108,105,98,46,112,121,117,10,0,0, + 0,103,101,116,95,115,111,117,114,99,101,223,1,0,0,115, + 18,0,0,0,0,2,12,1,15,1,3,1,19,1,13,1, + 17,1,27,1,18,1,117,23,0,0,0,83,111,117,114,99, + 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,99,2,0,0,0,0,0,0,0,12,0,0,0,37, + 0,0,0,67,0,0,0,115,225,1,0,0,124,0,0,106, + 0,0,124,1,0,131,1,0,125,2,0,116,1,0,106,2, + 0,124,2,0,131,1,0,125,3,0,100,5,0,125,4,0, + 124,3,0,100,5,0,107,9,0,114,20,1,121,19,0,124, + 0,0,106,4,0,124,2,0,131,1,0,125,5,0,87,110, + 18,0,4,116,5,0,107,10,0,114,87,0,1,1,1,89, + 113,20,1,88,116,6,0,124,5,0,100,1,0,25,131,1, + 0,125,4,0,121,19,0,124,0,0,106,7,0,124,3,0, + 131,1,0,125,6,0,87,110,18,0,4,116,8,0,107,10, + 0,114,143,0,1,1,1,89,113,20,1,88,121,25,0,124, + 0,0,106,9,0,124,1,0,124,6,0,124,5,0,131,3, + 0,125,7,0,87,110,24,0,4,116,10,0,116,11,0,102, + 2,0,107,10,0,114,195,0,1,1,1,89,113,20,1,88, + 116,12,0,106,13,0,124,7,0,131,1,0,125,8,0,116, + 14,0,124,8,0,116,15,0,131,2,0,114,246,0,116,1, + 0,106,16,0,124,8,0,124,2,0,131,2,0,1,124,8, + 0,83,100,2,0,125,9,0,116,10,0,124,9,0,106,17, + 0,124,3,0,131,1,0,131,1,0,130,1,0,110,0,0, + 124,0,0,106,7,0,124,2,0,131,1,0,125,10,0,116, + 18,0,124,10,0,124,2,0,100,3,0,100,4,0,100,6, + 0,131,3,1,125,11,0,116,20,0,106,21,0,12,114,221, + 1,124,3,0,100,5,0,107,9,0,114,221,1,124,4,0, + 100,5,0,107,9,0,114,221,1,116,22,0,116,1,0,106, + 23,0,131,0,0,131,1,0,125,6,0,124,6,0,106,24, + 0,116,25,0,124,4,0,131,1,0,131,1,0,1,124,6, + 0,106,24,0,116,25,0,116,26,0,124,10,0,131,1,0, + 131,1,0,131,1,0,1,124,6,0,106,24,0,116,12,0, + 106,27,0,124,11,0,131,1,0,131,1,0,1,121,20,0, + 124,0,0,106,28,0,124,3,0,124,6,0,131,2,0,1, + 87,113,221,1,4,116,5,0,107,10,0,114,217,1,1,1, + 1,89,113,221,1,88,110,0,0,124,11,0,83,40,7,0, + 0,0,117,190,0,0,0,67,111,110,99,114,101,116,101,32, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,111, + 102,32,73,110,115,112,101,99,116,76,111,97,100,101,114,46, + 103,101,116,95,99,111,100,101,46,10,10,32,32,32,32,32, + 32,32,32,82,101,97,100,105,110,103,32,111,102,32,98,121, + 116,101,99,111,100,101,32,114,101,113,117,105,114,101,115,32, + 112,97,116,104,95,115,116,97,116,115,32,116,111,32,98,101, + 32,105,109,112,108,101,109,101,110,116,101,100,46,32,84,111, + 32,119,114,105,116,101,10,32,32,32,32,32,32,32,32,98, + 121,116,101,99,111,100,101,44,32,115,101,116,95,100,97,116, + 97,32,109,117,115,116,32,97,108,115,111,32,98,101,32,105, + 109,112,108,101,109,101,110,116,101,100,46,10,10,32,32,32, + 32,32,32,32,32,117,5,0,0,0,109,116,105,109,101,117, + 21,0,0,0,78,111,110,45,99,111,100,101,32,111,98,106, + 101,99,116,32,105,110,32,123,125,117,4,0,0,0,101,120, + 101,99,117,12,0,0,0,100,111,110,116,95,105,110,104,101, + 114,105,116,78,84,40,29,0,0,0,117,12,0,0,0,103, + 101,116,95,102,105,108,101,110,97,109,101,117,3,0,0,0, + 105,109,112,117,17,0,0,0,99,97,99,104,101,95,102,114, + 111,109,95,115,111,117,114,99,101,117,4,0,0,0,78,111, + 110,101,117,10,0,0,0,112,97,116,104,95,115,116,97,116, + 115,117,19,0,0,0,78,111,116,73,109,112,108,101,109,101, + 110,116,101,100,69,114,114,111,114,117,3,0,0,0,105,110, + 116,117,8,0,0,0,103,101,116,95,100,97,116,97,117,7, + 0,0,0,73,79,69,114,114,111,114,117,20,0,0,0,95, + 98,121,116,101,115,95,102,114,111,109,95,98,121,116,101,99, + 111,100,101,117,11,0,0,0,73,109,112,111,114,116,69,114, + 114,111,114,117,8,0,0,0,69,79,70,69,114,114,111,114, + 117,7,0,0,0,109,97,114,115,104,97,108,117,5,0,0, + 0,108,111,97,100,115,117,10,0,0,0,105,115,105,110,115, + 116,97,110,99,101,117,9,0,0,0,99,111,100,101,95,116, + 121,112,101,117,16,0,0,0,95,102,105,120,95,99,111,95, + 102,105,108,101,110,97,109,101,117,6,0,0,0,102,111,114, + 109,97,116,117,7,0,0,0,99,111,109,112,105,108,101,117, + 4,0,0,0,84,114,117,101,117,3,0,0,0,115,121,115, + 117,19,0,0,0,100,111,110,116,95,119,114,105,116,101,95, + 98,121,116,101,99,111,100,101,117,9,0,0,0,98,121,116, + 101,97,114,114,97,121,117,9,0,0,0,103,101,116,95,109, + 97,103,105,99,117,6,0,0,0,101,120,116,101,110,100,117, + 7,0,0,0,95,119,95,108,111,110,103,117,3,0,0,0, + 108,101,110,117,5,0,0,0,100,117,109,112,115,117,8,0, + 0,0,115,101,116,95,100,97,116,97,40,12,0,0,0,117, + 4,0,0,0,115,101,108,102,117,8,0,0,0,102,117,108, + 108,110,97,109,101,117,11,0,0,0,115,111,117,114,99,101, + 95,112,97,116,104,117,13,0,0,0,98,121,116,101,99,111, + 100,101,95,112,97,116,104,117,12,0,0,0,115,111,117,114, + 99,101,95,109,116,105,109,101,117,2,0,0,0,115,116,117, + 4,0,0,0,100,97,116,97,117,10,0,0,0,98,121,116, + 101,115,95,100,97,116,97,117,5,0,0,0,102,111,117,110, + 100,117,3,0,0,0,109,115,103,117,12,0,0,0,115,111, + 117,114,99,101,95,98,121,116,101,115,117,11,0,0,0,99, + 111,100,101,95,111,98,106,101,99,116,40,0,0,0,0,40, + 0,0,0,0,117,75,0,0,0,47,85,115,101,114,115,47, + 98,99,97,110,110,111,110,47,68,101,118,101,108,111,112,101, + 114,47,114,101,112,111,47,99,112,121,116,104,111,110,47,98, + 111,111,116,115,116,114,97,112,95,105,109,112,111,114,116,108, + 105,98,47,76,105,98,47,95,105,109,112,111,114,116,108,105, + 98,46,112,121,117,8,0,0,0,103,101,116,95,99,111,100, + 101,235,1,0,0,115,76,0,0,0,0,7,15,1,15,1, + 6,1,12,1,3,1,19,1,13,1,5,2,16,1,3,1, + 19,1,13,1,5,2,3,1,12,1,13,1,19,1,5,2, + 15,1,15,1,16,1,4,2,6,1,24,1,15,1,15,1, + 9,1,22,1,12,4,18,1,19,1,25,1,22,1,3,1, + 20,1,13,1,8,1,117,21,0,0,0,83,111,117,114,99, + 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,115,13,0,0,0,124,0,0,106,0,0, + 124,1,0,131,1,0,83,40,1,0,0,0,117,0,1,0, + 0,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,76,111,97,100, + 101,114,46,108,111,97,100,95,109,111,100,117,108,101,46,10, + 10,32,32,32,32,32,32,32,32,82,101,113,117,105,114,101, + 115,32,69,120,101,99,117,116,105,111,110,76,111,97,100,101, + 114,46,103,101,116,95,102,105,108,101,110,97,109,101,32,97, + 110,100,32,82,101,115,111,117,114,99,101,76,111,97,100,101, + 114,46,103,101,116,95,100,97,116,97,32,116,111,32,98,101, + 10,32,32,32,32,32,32,32,32,105,109,112,108,101,109,101, + 110,116,101,100,32,116,111,32,108,111,97,100,32,115,111,117, + 114,99,101,32,99,111,100,101,46,32,85,115,101,32,111,102, + 32,98,121,116,101,99,111,100,101,32,105,115,32,100,105,99, + 116,97,116,101,100,32,98,121,32,119,104,101,116,104,101,114, + 10,32,32,32,32,32,32,32,32,103,101,116,95,99,111,100, + 101,32,117,115,101,115,47,119,114,105,116,101,115,32,98,121, + 116,101,99,111,100,101,46,10,10,32,32,32,32,32,32,32, + 32,40,1,0,0,0,117,12,0,0,0,95,108,111,97,100, + 95,109,111,100,117,108,101,40,2,0,0,0,117,4,0,0, + 0,115,101,108,102,117,8,0,0,0,102,117,108,108,110,97, + 109,101,40,0,0,0,0,40,0,0,0,0,117,75,0,0, + 0,47,85,115,101,114,115,47,98,99,97,110,110,111,110,47, + 68,101,118,101,108,111,112,101,114,47,114,101,112,111,47,99, + 112,121,116,104,111,110,47,98,111,111,116,115,116,114,97,112, + 95,105,109,112,111,114,116,108,105,98,47,76,105,98,47,95, + 105,109,112,111,114,116,108,105,98,46,112,121,117,11,0,0, + 0,108,111,97,100,95,109,111,100,117,108,101,32,2,0,0, + 115,2,0,0,0,0,8,117,24,0,0,0,83,111,117,114, + 99,101,76,111,97,100,101,114,46,108,111,97,100,95,109,111, + 100,117,108,101,78,40,9,0,0,0,117,8,0,0,0,95, + 95,110,97,109,101,95,95,117,10,0,0,0,95,95,109,111, + 100,117,108,101,95,95,117,12,0,0,0,95,95,113,117,97, + 108,110,97,109,101,95,95,117,10,0,0,0,112,97,116,104, + 95,109,116,105,109,101,117,10,0,0,0,112,97,116,104,95, + 115,116,97,116,115,117,8,0,0,0,115,101,116,95,100,97, + 116,97,117,10,0,0,0,103,101,116,95,115,111,117,114,99, + 101,117,8,0,0,0,103,101,116,95,99,111,100,101,117,11, + 0,0,0,108,111,97,100,95,109,111,100,117,108,101,40,1, + 0,0,0,117,10,0,0,0,95,95,108,111,99,97,108,115, + 95,95,40,0,0,0,0,40,0,0,0,0,117,75,0,0, + 0,47,85,115,101,114,115,47,98,99,97,110,110,111,110,47, + 68,101,118,101,108,111,112,101,114,47,114,101,112,111,47,99, + 112,121,116,104,111,110,47,98,111,111,116,115,116,114,97,112, + 95,105,109,112,111,114,116,108,105,98,47,76,105,98,47,95, + 105,109,112,111,114,116,108,105,98,46,112,121,117,12,0,0, + 0,83,111,117,114,99,101,76,111,97,100,101,114,194,1,0, + 0,115,12,0,0,0,16,2,12,6,12,12,12,9,12,12, + 12,53,117,12,0,0,0,83,111,117,114,99,101,76,111,97, + 100,101,114,99,1,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,66,0,0,0,115,68,0,0,0,124,0,0, + 69,101,0,0,90,1,0,100,0,0,90,2,0,100,1,0, + 90,3,0,100,2,0,100,3,0,132,0,0,90,4,0,101, + 5,0,100,4,0,100,5,0,132,0,0,131,1,0,90,6, + 0,100,6,0,100,7,0,132,0,0,90,7,0,100,8,0, + 83,40,9,0,0,0,117,11,0,0,0,95,70,105,108,101, + 76,111,97,100,101,114,117,103,0,0,0,66,97,115,101,32, + 102,105,108,101,32,108,111,97,100,101,114,32,99,108,97,115, + 115,32,119,104,105,99,104,32,105,109,112,108,101,109,101,110, + 116,115,32,116,104,101,32,108,111,97,100,101,114,32,112,114, + 111,116,111,99,111,108,32,109,101,116,104,111,100,115,32,116, + 104,97,116,10,32,32,32,32,114,101,113,117,105,114,101,32, + 102,105,108,101,32,115,121,115,116,101,109,32,117,115,97,103, + 101,46,99,3,0,0,0,0,0,0,0,3,0,0,0,2, + 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, + 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,1, + 0,83,40,2,0,0,0,117,75,0,0,0,67,97,99,104, + 101,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, + 101,32,97,110,100,32,116,104,101,32,112,97,116,104,32,116, + 111,32,116,104,101,32,102,105,108,101,32,102,111,117,110,100, + 32,98,121,32,116,104,101,10,32,32,32,32,32,32,32,32, + 102,105,110,100,101,114,46,78,40,2,0,0,0,117,5,0, + 0,0,95,110,97,109,101,117,5,0,0,0,95,112,97,116, + 104,40,3,0,0,0,117,4,0,0,0,115,101,108,102,117, + 8,0,0,0,102,117,108,108,110,97,109,101,117,4,0,0, + 0,112,97,116,104,40,0,0,0,0,40,0,0,0,0,117, + 75,0,0,0,47,85,115,101,114,115,47,98,99,97,110,110, + 111,110,47,68,101,118,101,108,111,112,101,114,47,114,101,112, + 111,47,99,112,121,116,104,111,110,47,98,111,111,116,115,116, + 114,97,112,95,105,109,112,111,114,116,108,105,98,47,76,105, + 98,47,95,105,109,112,111,114,116,108,105,98,46,112,121,117, + 8,0,0,0,95,95,105,110,105,116,95,95,48,2,0,0, + 115,4,0,0,0,0,3,9,1,117,20,0,0,0,95,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,1, + 0,0,0,67,0,0,0,115,7,0,0,0,124,0,0,106, + 0,0,83,40,1,0,0,0,117,58,0,0,0,82,101,116, + 117,114,110,32,116,104,101,32,112,97,116,104,32,116,111,32, + 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,32, + 97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,32, + 102,105,110,100,101,114,46,40,1,0,0,0,117,5,0,0, + 0,95,112,97,116,104,40,2,0,0,0,117,4,0,0,0, + 115,101,108,102,117,8,0,0,0,102,117,108,108,110,97,109, + 101,40,0,0,0,0,40,0,0,0,0,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,12,0,0,0, + 103,101,116,95,102,105,108,101,110,97,109,101,54,2,0,0, + 115,2,0,0,0,0,3,117,24,0,0,0,95,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,102,105,108,101, + 110,97,109,101,99,2,0,0,0,0,0,0,0,3,0,0, + 0,8,0,0,0,67,0,0,0,115,41,0,0,0,116,0, + 0,106,1,0,124,1,0,100,1,0,131,2,0,143,17,0, + 125,2,0,124,2,0,106,2,0,131,0,0,83,87,100,2, + 0,81,88,100,2,0,83,40,3,0,0,0,117,39,0,0, + 0,82,101,116,117,114,110,32,116,104,101,32,100,97,116,97, + 32,102,114,111,109,32,112,97,116,104,32,97,115,32,114,97, + 119,32,98,121,116,101,115,46,117,1,0,0,0,114,78,40, + 3,0,0,0,117,3,0,0,0,95,105,111,117,6,0,0, + 0,70,105,108,101,73,79,117,4,0,0,0,114,101,97,100, + 40,3,0,0,0,117,4,0,0,0,115,101,108,102,117,4, + 0,0,0,112,97,116,104,117,4,0,0,0,102,105,108,101, + 40,0,0,0,0,40,0,0,0,0,117,75,0,0,0,47, + 85,115,101,114,115,47,98,99,97,110,110,111,110,47,68,101, + 118,101,108,111,112,101,114,47,114,101,112,111,47,99,112,121, + 116,104,111,110,47,98,111,111,116,115,116,114,97,112,95,105, + 109,112,111,114,116,108,105,98,47,76,105,98,47,95,105,109, + 112,111,114,116,108,105,98,46,112,121,117,8,0,0,0,103, + 101,116,95,100,97,116,97,59,2,0,0,115,4,0,0,0, + 0,2,21,1,117,20,0,0,0,95,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,100,97,116,97,78,40,8, + 0,0,0,117,8,0,0,0,95,95,110,97,109,101,95,95, + 117,10,0,0,0,95,95,109,111,100,117,108,101,95,95,117, + 12,0,0,0,95,95,113,117,97,108,110,97,109,101,95,95, + 117,7,0,0,0,95,95,100,111,99,95,95,117,8,0,0, + 0,95,95,105,110,105,116,95,95,117,11,0,0,0,95,99, + 104,101,99,107,95,110,97,109,101,117,12,0,0,0,103,101, + 116,95,102,105,108,101,110,97,109,101,117,8,0,0,0,103, + 101,116,95,100,97,116,97,40,1,0,0,0,117,10,0,0, + 0,95,95,108,111,99,97,108,115,95,95,40,0,0,0,0, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,11,0,0,0,95,70,105,108,101,76, + 111,97,100,101,114,43,2,0,0,115,8,0,0,0,16,3, + 6,2,12,6,18,5,117,11,0,0,0,95,70,105,108,101, + 76,111,97,100,101,114,99,1,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,66,0,0,0,115,50,0,0,0, + 124,0,0,69,101,0,0,90,1,0,100,0,0,90,2,0, + 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, + 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, + 0,83,40,7,0,0,0,117,17,0,0,0,95,83,111,117, + 114,99,101,70,105,108,101,76,111,97,100,101,114,117,62,0, + 0,0,67,111,110,99,114,101,116,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,83,111,117, + 114,99,101,76,111,97,100,101,114,32,117,115,105,110,103,32, + 116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,46, + 99,2,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,67,0,0,0,115,39,0,0,0,116,0,0,106,1,0, + 124,1,0,131,1,0,125,2,0,105,2,0,124,2,0,106, + 2,0,100,1,0,54,124,2,0,106,3,0,100,2,0,54, + 83,40,3,0,0,0,117,32,0,0,0,82,101,116,117,114, + 110,32,116,104,101,32,109,101,116,97,100,97,116,32,102,111, + 114,32,116,104,101,32,112,97,116,104,46,117,5,0,0,0, + 109,116,105,109,101,117,4,0,0,0,115,105,122,101,40,4, + 0,0,0,117,3,0,0,0,95,111,115,117,4,0,0,0, + 115,116,97,116,117,8,0,0,0,115,116,95,109,116,105,109, + 101,117,7,0,0,0,115,116,95,115,105,122,101,40,3,0, + 0,0,117,4,0,0,0,115,101,108,102,117,4,0,0,0, + 112,97,116,104,117,2,0,0,0,115,116,40,0,0,0,0, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,10,0,0,0,112,97,116,104,95,115, + 116,97,116,115,69,2,0,0,115,4,0,0,0,0,2,15, + 1,117,28,0,0,0,95,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,3,0,0,0,0,0,0,0,8,0,0,0,13, + 0,0,0,67,0,0,0,115,241,0,0,0,124,1,0,106, + 0,0,116,1,0,131,1,0,92,3,0,125,3,0,125,4, + 0,125,5,0,103,0,0,125,6,0,120,60,0,124,3,0, + 114,92,0,116,2,0,124,3,0,131,1,0,12,114,92,0, + 124,3,0,106,0,0,116,1,0,131,1,0,92,3,0,125, + 3,0,125,4,0,125,7,0,124,6,0,106,3,0,124,7, + 0,131,1,0,1,113,33,0,87,120,97,0,116,4,0,124, + 6,0,131,1,0,68,93,83,0,125,7,0,116,5,0,124, + 3,0,124,7,0,131,2,0,125,3,0,121,17,0,116,6, + 0,106,7,0,124,3,0,131,1,0,1,87,113,106,0,4, + 116,8,0,107,10,0,114,167,0,1,1,1,119,106,0,89, + 113,106,0,4,116,9,0,107,10,0,114,188,0,1,1,1, + 100,1,0,83,89,113,106,0,88,113,106,0,87,121,17,0, + 116,10,0,124,1,0,124,2,0,131,2,0,1,87,110,24, + 0,4,116,9,0,116,8,0,102,2,0,107,10,0,114,236, + 0,1,1,1,89,110,1,0,88,100,1,0,83,40,2,0, + 0,0,117,27,0,0,0,87,114,105,116,101,32,98,121,116, + 101,115,32,100,97,116,97,32,116,111,32,97,32,102,105,108, + 101,46,78,40,11,0,0,0,117,10,0,0,0,114,112,97, + 114,116,105,116,105,111,110,117,8,0,0,0,112,97,116,104, + 95,115,101,112,117,11,0,0,0,95,112,97,116,104,95,105, + 115,100,105,114,117,6,0,0,0,97,112,112,101,110,100,117, + 8,0,0,0,114,101,118,101,114,115,101,100,117,10,0,0, + 0,95,112,97,116,104,95,106,111,105,110,117,3,0,0,0, + 95,111,115,117,5,0,0,0,109,107,100,105,114,117,15,0, + 0,0,70,105,108,101,69,120,105,115,116,115,69,114,114,111, + 114,117,15,0,0,0,80,101,114,109,105,115,115,105,111,110, + 69,114,114,111,114,117,13,0,0,0,95,119,114,105,116,101, + 95,97,116,111,109,105,99,40,8,0,0,0,117,4,0,0, + 0,115,101,108,102,117,4,0,0,0,112,97,116,104,117,4, + 0,0,0,100,97,116,97,117,6,0,0,0,112,97,114,101, + 110,116,117,1,0,0,0,95,117,8,0,0,0,102,105,108, + 101,110,97,109,101,117,10,0,0,0,112,97,116,104,95,112, + 97,114,116,115,117,4,0,0,0,112,97,114,116,40,0,0, + 0,0,40,0,0,0,0,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,8,0,0,0,115,101,116,95, + 100,97,116,97,74,2,0,0,115,34,0,0,0,0,2,24, + 1,6,2,22,1,24,1,17,2,19,1,15,1,3,1,17, + 1,13,2,7,1,13,3,13,1,3,1,17,1,19,3,117, + 26,0,0,0,95,83,111,117,114,99,101,70,105,108,101,76, + 111,97,100,101,114,46,115,101,116,95,100,97,116,97,78,40, + 6,0,0,0,117,8,0,0,0,95,95,110,97,109,101,95, + 95,117,10,0,0,0,95,95,109,111,100,117,108,101,95,95, + 117,12,0,0,0,95,95,113,117,97,108,110,97,109,101,95, + 95,117,7,0,0,0,95,95,100,111,99,95,95,117,10,0, + 0,0,112,97,116,104,95,115,116,97,116,115,117,8,0,0, + 0,115,101,116,95,100,97,116,97,40,1,0,0,0,117,10, + 0,0,0,95,95,108,111,99,97,108,115,95,95,40,0,0, + 0,0,40,0,0,0,0,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,17,0,0,0,95,83,111,117, + 114,99,101,70,105,108,101,76,111,97,100,101,114,65,2,0, + 0,115,6,0,0,0,16,2,6,2,12,5,117,17,0,0, + 0,95,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,99,1,0,0,0,0,0,0,0,1,0,0,0,2, + 0,0,0,66,0,0,0,115,62,0,0,0,124,0,0,69, + 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, + 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, + 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, + 132,0,0,90,6,0,100,8,0,83,40,9,0,0,0,117, + 21,0,0,0,95,83,111,117,114,99,101,108,101,115,115,70, + 105,108,101,76,111,97,100,101,114,117,45,0,0,0,76,111, + 97,100,101,114,32,119,104,105,99,104,32,104,97,110,100,108, + 101,115,32,115,111,117,114,99,101,108,101,115,115,32,102,105, + 108,101,32,105,109,112,111,114,116,115,46,99,2,0,0,0, + 0,0,0,0,2,0,0,0,4,0,0,0,67,0,0,0, + 115,19,0,0,0,124,0,0,106,0,0,124,1,0,100,1, + 0,100,2,0,131,1,1,83,40,3,0,0,0,78,117,10, + 0,0,0,115,111,117,114,99,101,108,101,115,115,84,40,2, + 0,0,0,117,12,0,0,0,95,108,111,97,100,95,109,111, + 100,117,108,101,117,4,0,0,0,84,114,117,101,40,2,0, + 0,0,117,4,0,0,0,115,101,108,102,117,8,0,0,0, + 102,117,108,108,110,97,109,101,40,0,0,0,0,40,0,0, + 0,0,117,75,0,0,0,47,85,115,101,114,115,47,98,99, + 97,110,110,111,110,47,68,101,118,101,108,111,112,101,114,47, + 114,101,112,111,47,99,112,121,116,104,111,110,47,98,111,111, + 116,115,116,114,97,112,95,105,109,112,111,114,116,108,105,98, + 47,76,105,98,47,95,105,109,112,111,114,116,108,105,98,46, + 112,121,117,11,0,0,0,108,111,97,100,95,109,111,100,117, + 108,101,106,2,0,0,115,2,0,0,0,0,1,117,33,0, + 0,0,95,83,111,117,114,99,101,108,101,115,115,70,105,108, + 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,6,0,0,0, + 4,0,0,0,67,0,0,0,115,110,0,0,0,124,0,0, + 106,0,0,124,1,0,131,1,0,125,2,0,124,0,0,106, + 1,0,124,2,0,131,1,0,125,3,0,124,0,0,106,2, + 0,124,1,0,124,3,0,100,0,0,131,3,0,125,4,0, + 116,4,0,106,5,0,124,4,0,131,1,0,125,5,0,116, + 6,0,124,5,0,116,7,0,131,2,0,114,85,0,124,5, + 0,83,116,8,0,100,1,0,106,9,0,124,2,0,131,1, + 0,131,1,0,130,1,0,100,0,0,83,40,2,0,0,0, + 78,117,21,0,0,0,78,111,110,45,99,111,100,101,32,111, + 98,106,101,99,116,32,105,110,32,123,125,40,10,0,0,0, + 117,12,0,0,0,103,101,116,95,102,105,108,101,110,97,109, + 101,117,8,0,0,0,103,101,116,95,100,97,116,97,117,20, + 0,0,0,95,98,121,116,101,115,95,102,114,111,109,95,98, + 121,116,101,99,111,100,101,117,4,0,0,0,78,111,110,101, + 117,7,0,0,0,109,97,114,115,104,97,108,117,5,0,0, + 0,108,111,97,100,115,117,10,0,0,0,105,115,105,110,115, + 116,97,110,99,101,117,9,0,0,0,99,111,100,101,95,116, + 121,112,101,117,11,0,0,0,73,109,112,111,114,116,69,114, + 114,111,114,117,6,0,0,0,102,111,114,109,97,116,40,6, + 0,0,0,117,4,0,0,0,115,101,108,102,117,8,0,0, + 0,102,117,108,108,110,97,109,101,117,4,0,0,0,112,97, + 116,104,117,4,0,0,0,100,97,116,97,117,10,0,0,0, + 98,121,116,101,115,95,100,97,116,97,117,5,0,0,0,102, + 111,117,110,100,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,8, + 0,0,0,103,101,116,95,99,111,100,101,109,2,0,0,115, + 14,0,0,0,0,1,15,1,15,1,21,1,15,1,15,1, + 4,2,117,30,0,0,0,95,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,0,83,40,2,0,0,0,117,39,0,0,0,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,116,104,101,114, + 101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,99, + 111,100,101,46,78,40,1,0,0,0,117,4,0,0,0,78, + 111,110,101,40,2,0,0,0,117,4,0,0,0,115,101,108, + 102,117,8,0,0,0,102,117,108,108,110,97,109,101,40,0, + 0,0,0,40,0,0,0,0,117,75,0,0,0,47,85,115, + 101,114,115,47,98,99,97,110,110,111,110,47,68,101,118,101, + 108,111,112,101,114,47,114,101,112,111,47,99,112,121,116,104, + 111,110,47,98,111,111,116,115,116,114,97,112,95,105,109,112, + 111,114,116,108,105,98,47,76,105,98,47,95,105,109,112,111, + 114,116,108,105,98,46,112,121,117,10,0,0,0,103,101,116, + 95,115,111,117,114,99,101,119,2,0,0,115,2,0,0,0, + 0,2,117,32,0,0,0,95,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,78,40,7,0,0,0,117,8,0, + 0,0,95,95,110,97,109,101,95,95,117,10,0,0,0,95, + 95,109,111,100,117,108,101,95,95,117,12,0,0,0,95,95, + 113,117,97,108,110,97,109,101,95,95,117,7,0,0,0,95, + 95,100,111,99,95,95,117,11,0,0,0,108,111,97,100,95, + 109,111,100,117,108,101,117,8,0,0,0,103,101,116,95,99, + 111,100,101,117,10,0,0,0,103,101,116,95,115,111,117,114, + 99,101,40,1,0,0,0,117,10,0,0,0,95,95,108,111, + 99,97,108,115,95,95,40,0,0,0,0,40,0,0,0,0, + 117,75,0,0,0,47,85,115,101,114,115,47,98,99,97,110, + 110,111,110,47,68,101,118,101,108,111,112,101,114,47,114,101, + 112,111,47,99,112,121,116,104,111,110,47,98,111,111,116,115, + 116,114,97,112,95,105,109,112,111,114,116,108,105,98,47,76, + 105,98,47,95,105,109,112,111,114,116,108,105,98,46,112,121, + 117,21,0,0,0,95,83,111,117,114,99,101,108,101,115,115, + 70,105,108,101,76,111,97,100,101,114,102,2,0,0,115,8, + 0,0,0,16,2,6,2,12,3,12,10,117,21,0,0,0, + 95,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, + 111,97,100,101,114,99,1,0,0,0,0,0,0,0,1,0, + 0,0,5,0,0,0,66,0,0,0,115,122,0,0,0,124, + 0,0,69,101,0,0,90,1,0,100,0,0,90,2,0,100, + 1,0,90,3,0,100,2,0,100,3,0,132,0,0,90,4, + 0,101,5,0,101,6,0,101,7,0,100,4,0,100,5,0, + 132,0,0,131,1,0,131,1,0,131,1,0,90,8,0,101, + 5,0,100,6,0,100,7,0,132,0,0,131,1,0,90,9, + 0,101,5,0,100,8,0,100,9,0,132,0,0,131,1,0, + 90,10,0,101,5,0,100,10,0,100,11,0,132,0,0,131, + 1,0,90,11,0,100,12,0,83,40,13,0,0,0,117,20, + 0,0,0,95,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,117,93,0,0,0,76,111,97,100, + 101,114,32,102,111,114,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,84, + 104,101,32,99,111,110,115,116,114,117,99,116,111,114,32,105, + 115,32,100,101,115,105,103,110,101,100,32,116,111,32,119,111, + 114,107,32,119,105,116,104,32,70,105,108,101,70,105,110,100, + 101,114,46,10,10,32,32,32,32,99,3,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,22, + 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, + 0,0,95,1,0,100,1,0,83,40,2,0,0,0,117,171, + 0,0,0,73,110,105,116,105,97,108,105,122,101,32,116,104, + 101,32,108,111,97,100,101,114,46,10,10,32,32,32,32,32, + 32,32,32,73,102,32,105,115,95,112,107,103,32,105,115,32, + 84,114,117,101,32,116,104,101,110,32,97,110,32,101,120,99, + 101,112,116,105,111,110,32,105,115,32,114,97,105,115,101,100, + 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,115,10,32,32,32,32,32,32,32,32,99,97, + 110,110,111,116,32,98,101,32,116,104,101,32,95,95,105,110, + 105,116,95,95,32,109,111,100,117,108,101,32,102,111,114,32, + 97,110,32,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,78,40, + 2,0,0,0,117,5,0,0,0,95,110,97,109,101,117,5, + 0,0,0,95,112,97,116,104,40,3,0,0,0,117,4,0, + 0,0,115,101,108,102,117,4,0,0,0,110,97,109,101,117, + 4,0,0,0,112,97,116,104,40,0,0,0,0,40,0,0, + 0,0,117,75,0,0,0,47,85,115,101,114,115,47,98,99, + 97,110,110,111,110,47,68,101,118,101,108,111,112,101,114,47, + 114,101,112,111,47,99,112,121,116,104,111,110,47,98,111,111, + 116,115,116,114,97,112,95,105,109,112,111,114,116,108,105,98, + 47,76,105,98,47,95,105,109,112,111,114,116,108,105,98,46, + 112,121,117,8,0,0,0,95,95,105,110,105,116,95,95,132, + 2,0,0,115,4,0,0,0,0,7,9,1,117,29,0,0, + 0,95,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,3,0,0,0,9,0,0,0,67, + 0,0,0,115,91,0,0,0,124,1,0,116,0,0,106,1, + 0,107,6,0,125,2,0,121,23,0,116,2,0,106,3,0, + 124,1,0,124,0,0,106,4,0,131,2,0,83,87,110,46, + 0,1,1,1,124,2,0,12,114,79,0,124,1,0,116,0, + 0,106,1,0,107,6,0,114,79,0,116,0,0,106,1,0, + 124,1,0,61,110,0,0,130,0,0,89,110,1,0,88,100, + 1,0,83,40,2,0,0,0,117,25,0,0,0,76,111,97, + 100,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,46,78,40,5,0,0,0,117,3,0,0, + 0,115,121,115,117,7,0,0,0,109,111,100,117,108,101,115, + 117,3,0,0,0,105,109,112,117,12,0,0,0,108,111,97, + 100,95,100,121,110,97,109,105,99,117,5,0,0,0,95,112, + 97,116,104,40,3,0,0,0,117,4,0,0,0,115,101,108, + 102,117,8,0,0,0,102,117,108,108,110,97,109,101,117,9, + 0,0,0,105,115,95,114,101,108,111,97,100,40,0,0,0, + 0,40,0,0,0,0,117,75,0,0,0,47,85,115,101,114, + 115,47,98,99,97,110,110,111,110,47,68,101,118,101,108,111, + 112,101,114,47,114,101,112,111,47,99,112,121,116,104,111,110, + 47,98,111,111,116,115,116,114,97,112,95,105,109,112,111,114, + 116,108,105,98,47,76,105,98,47,95,105,109,112,111,114,116, + 108,105,98,46,112,121,117,11,0,0,0,108,111,97,100,95, + 109,111,100,117,108,101,142,2,0,0,115,14,0,0,0,0, + 5,15,1,3,1,23,1,3,1,22,1,13,1,117,32,0, + 0,0,95,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,108,111,97,100,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, + 40,2,0,0,0,117,59,0,0,0,82,101,116,117,114,110, + 32,70,97,108,115,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,32,110,101,118,101,114,32,98,101,32,97,32,112,97,99, + 107,97,103,101,46,70,40,1,0,0,0,117,5,0,0,0, + 70,97,108,115,101,40,2,0,0,0,117,4,0,0,0,115, + 101,108,102,117,8,0,0,0,102,117,108,108,110,97,109,101, + 40,0,0,0,0,40,0,0,0,0,117,75,0,0,0,47, + 85,115,101,114,115,47,98,99,97,110,110,111,110,47,68,101, + 118,101,108,111,112,101,114,47,114,101,112,111,47,99,112,121, + 116,104,111,110,47,98,111,111,116,115,116,114,97,112,95,105, + 109,112,111,114,116,108,105,98,47,76,105,98,47,95,105,109, + 112,111,114,116,108,105,98,46,112,121,117,10,0,0,0,105, + 115,95,112,97,99,107,97,103,101,155,2,0,0,115,2,0, + 0,0,0,3,117,31,0,0,0,95,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,115, + 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,0,83,40,2,0,0,0,117,63,0,0,0, + 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,97, + 110,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,32,99,97,110,110,111,116,32,99,114,101,97,116,101, + 32,97,32,99,111,100,101,32,111,98,106,101,99,116,46,78, + 40,1,0,0,0,117,4,0,0,0,78,111,110,101,40,2, + 0,0,0,117,4,0,0,0,115,101,108,102,117,8,0,0, + 0,102,117,108,108,110,97,109,101,40,0,0,0,0,40,0, + 0,0,0,117,75,0,0,0,47,85,115,101,114,115,47,98, + 99,97,110,110,111,110,47,68,101,118,101,108,111,112,101,114, + 47,114,101,112,111,47,99,112,121,116,104,111,110,47,98,111, + 111,116,115,116,114,97,112,95,105,109,112,111,114,116,108,105, + 98,47,76,105,98,47,95,105,109,112,111,114,116,108,105,98, + 46,112,121,117,8,0,0,0,103,101,116,95,99,111,100,101, + 160,2,0,0,115,2,0,0,0,0,3,117,29,0,0,0, + 95,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,115,4,0,0,0,100,1,0,83,40,2,0,0,0, + 117,53,0,0,0,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, + 117,114,99,101,32,99,111,100,101,46,78,40,1,0,0,0, + 117,4,0,0,0,78,111,110,101,40,2,0,0,0,117,4, + 0,0,0,115,101,108,102,117,8,0,0,0,102,117,108,108, + 110,97,109,101,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,10, + 0,0,0,103,101,116,95,115,111,117,114,99,101,165,2,0, + 0,115,2,0,0,0,0,3,117,31,0,0,0,95,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,115,111,117,114,99,101,78,40,12,0, + 0,0,117,8,0,0,0,95,95,110,97,109,101,95,95,117, + 10,0,0,0,95,95,109,111,100,117,108,101,95,95,117,12, + 0,0,0,95,95,113,117,97,108,110,97,109,101,95,95,117, + 7,0,0,0,95,95,100,111,99,95,95,117,8,0,0,0, + 95,95,105,110,105,116,95,95,117,11,0,0,0,95,99,104, + 101,99,107,95,110,97,109,101,117,11,0,0,0,115,101,116, + 95,112,97,99,107,97,103,101,117,10,0,0,0,115,101,116, + 95,108,111,97,100,101,114,117,11,0,0,0,108,111,97,100, + 95,109,111,100,117,108,101,117,10,0,0,0,105,115,95,112, + 97,99,107,97,103,101,117,8,0,0,0,103,101,116,95,99, + 111,100,101,117,10,0,0,0,103,101,116,95,115,111,117,114, + 99,101,40,1,0,0,0,117,10,0,0,0,95,95,108,111, + 99,97,108,115,95,95,40,0,0,0,0,40,0,0,0,0, + 117,75,0,0,0,47,85,115,101,114,115,47,98,99,97,110, + 110,111,110,47,68,101,118,101,108,111,112,101,114,47,114,101, + 112,111,47,99,112,121,116,104,111,110,47,98,111,111,116,115, + 116,114,97,112,95,105,109,112,111,114,116,108,105,98,47,76, + 105,98,47,95,105,109,112,111,114,116,108,105,98,46,112,121, + 117,20,0,0,0,95,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,124,2,0,0,115,16,0, + 0,0,16,6,6,2,12,10,3,1,3,1,24,11,18,5, + 18,5,117,20,0,0,0,95,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,99,1,0,0,0, + 0,0,0,0,1,0,0,0,4,0,0,0,66,0,0,0, + 115,89,0,0,0,124,0,0,69,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,90,3,0,101,4,0,100,8, + 0,100,2,0,100,3,0,132,1,0,131,1,0,90,6,0, + 101,4,0,100,8,0,100,4,0,100,5,0,132,1,0,131, + 1,0,90,7,0,101,4,0,100,8,0,100,6,0,100,7, + 0,132,1,0,131,1,0,90,8,0,100,8,0,83,40,9, + 0,0,0,117,10,0,0,0,80,97,116,104,70,105,110,100, + 101,114,117,63,0,0,0,77,101,116,97,32,112,97,116,104, + 32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,46, + 40,112,97,116,104,124,112,97,116,104,95,104,111,111,107,115, + 124,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,41,46,99,3,0,0,0,0,0,0,0,4, + 0,0,0,12,0,0,0,67,0,0,0,115,98,0,0,0, + 124,2,0,115,18,0,116,0,0,106,1,0,125,2,0,110, + 0,0,120,73,0,124,2,0,68,93,44,0,125,3,0,121, + 14,0,124,3,0,124,1,0,131,1,0,83,87,113,25,0, + 4,116,2,0,107,10,0,114,68,0,1,1,1,119,25,0, + 89,113,25,0,88,113,25,0,87,116,2,0,100,1,0,106, + 3,0,124,1,0,131,1,0,131,1,0,130,1,0,100,2, + 0,83,40,3,0,0,0,117,113,0,0,0,83,101,97,114, + 99,104,32,115,101,113,117,101,110,99,101,32,111,102,32,104, + 111,111,107,115,32,102,111,114,32,97,32,102,105,110,100,101, + 114,32,102,111,114,32,39,112,97,116,104,39,46,10,10,32, + 32,32,32,32,32,32,32,73,102,32,39,104,111,111,107,115, + 39,32,105,115,32,102,97,108,115,101,32,116,104,101,110,32, + 117,115,101,32,115,121,115,46,112,97,116,104,95,104,111,111, + 107,115,46,10,10,32,32,32,32,32,32,32,32,117,26,0, + 0,0,110,111,32,112,97,116,104,32,104,111,111,107,32,102, + 111,117,110,100,32,102,111,114,32,123,48,125,78,40,4,0, + 0,0,117,3,0,0,0,115,121,115,117,10,0,0,0,112, + 97,116,104,95,104,111,111,107,115,117,11,0,0,0,73,109, + 112,111,114,116,69,114,114,111,114,117,6,0,0,0,102,111, + 114,109,97,116,40,4,0,0,0,117,3,0,0,0,99,108, + 115,117,4,0,0,0,112,97,116,104,117,5,0,0,0,104, + 111,111,107,115,117,4,0,0,0,104,111,111,107,40,0,0, + 0,0,40,0,0,0,0,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,11,0,0,0,95,112,97,116, + 104,95,104,111,111,107,115,177,2,0,0,115,16,0,0,0, + 0,7,6,1,12,1,13,1,3,1,14,1,13,1,12,2, + 117,22,0,0,0,80,97,116,104,70,105,110,100,101,114,46, + 95,112,97,116,104,95,104,111,111,107,115,99,3,0,0,0, + 0,0,0,0,4,0,0,0,12,0,0,0,67,0,0,0, + 115,116,0,0,0,121,17,0,116,0,0,106,1,0,124,1, + 0,25,125,3,0,87,110,46,0,4,116,2,0,107,10,0, + 114,65,0,1,1,1,124,0,0,106,3,0,124,1,0,131, + 1,0,125,3,0,124,3,0,116,0,0,106,1,0,124,1, + 0,60,89,110,47,0,88,124,3,0,100,1,0,107,8,0, + 114,112,0,124,2,0,114,112,0,124,2,0,124,1,0,131, + 1,0,125,3,0,124,3,0,116,0,0,106,1,0,124,1, + 0,60,110,0,0,124,3,0,83,40,2,0,0,0,117,199, + 1,0,0,71,101,116,32,116,104,101,32,102,105,110,100,101, + 114,32,102,111,114,32,116,104,101,32,112,97,116,104,32,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,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,32,97,110,100,32,99,97,99,104,101,10,32,32,32, + 32,32,32,32,32,105,116,46,32,73,102,32,78,111,110,101, + 32,105,115,32,99,97,99,104,101,100,44,32,103,101,116,32, + 116,104,101,32,100,101,102,97,117,108,116,32,102,105,110,100, + 101,114,32,97,110,100,32,99,97,99,104,101,32,116,104,97, + 116,10,32,32,32,32,32,32,32,32,40,105,102,32,97,112, + 112,108,105,99,97,98,108,101,41,46,10,10,32,32,32,32, + 32,32,32,32,66,101,99,97,117,115,101,32,111,102,32,78, + 117,108,108,73,109,112,111,114,116,101,114,44,32,115,111,109, + 101,32,102,105,110,100,101,114,32,115,104,111,117,108,100,32, + 98,101,32,114,101,116,117,114,110,101,100,46,32,84,104,101, + 32,111,110,108,121,10,32,32,32,32,32,32,32,32,101,120, + 112,108,105,99,105,116,32,102,97,105,108,32,99,97,115,101, + 32,105,115,32,105,102,32,78,111,110,101,32,105,115,32,99, + 97,99,104,101,100,32,98,117,116,32,116,104,101,32,112,97, + 116,104,32,99,97,110,110,111,116,32,98,101,32,117,115,101, + 100,32,102,111,114,10,32,32,32,32,32,32,32,32,116,104, + 101,32,100,101,102,97,117,108,116,32,104,111,111,107,44,32, + 102,111,114,32,119,104,105,99,104,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,32,32,32,32,78,40,5,0,0,0, + 117,3,0,0,0,115,121,115,117,19,0,0,0,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 117,8,0,0,0,75,101,121,69,114,114,111,114,117,11,0, + 0,0,95,112,97,116,104,95,104,111,111,107,115,117,4,0, + 0,0,78,111,110,101,40,4,0,0,0,117,3,0,0,0, + 99,108,115,117,4,0,0,0,112,97,116,104,117,7,0,0, + 0,100,101,102,97,117,108,116,117,6,0,0,0,102,105,110, + 100,101,114,40,0,0,0,0,40,0,0,0,0,117,75,0, + 0,0,47,85,115,101,114,115,47,98,99,97,110,110,111,110, + 47,68,101,118,101,108,111,112,101,114,47,114,101,112,111,47, + 99,112,121,116,104,111,110,47,98,111,111,116,115,116,114,97, + 112,95,105,109,112,111,114,116,108,105,98,47,76,105,98,47, + 95,105,109,112,111,114,116,108,105,98,46,112,121,117,20,0, + 0,0,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,194,2,0,0,115,18,0,0,0,0, + 13,3,1,17,1,13,1,15,1,18,2,18,2,12,1,16, + 1,117,31,0,0,0,80,97,116,104,70,105,110,100,101,114, + 46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,99,3,0,0,0,0,0,0,0,6,0, + 0,0,12,0,0,0,67,0,0,0,115,120,0,0,0,124, + 2,0,115,18,0,116,0,0,106,1,0,125,2,0,110,0, + 0,120,95,0,124,2,0,68,93,83,0,125,3,0,121,19, + 0,124,0,0,106,2,0,124,3,0,131,1,0,125,4,0, + 87,110,21,0,4,116,3,0,107,10,0,114,73,0,1,1, + 1,119,25,0,89,110,1,0,88,124,4,0,114,25,0,124, + 4,0,106,4,0,124,1,0,131,1,0,125,5,0,124,5, + 0,114,108,0,124,5,0,83,113,25,0,113,25,0,87,100, + 1,0,83,100,1,0,83,40,2,0,0,0,117,98,0,0, + 0,70,105,110,100,32,116,104,101,32,109,111,100,117,108,101, + 32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,32, + 39,112,97,116,104,39,32,98,97,115,101,100,32,111,110,32, + 115,121,115,46,112,97,116,104,95,104,111,111,107,115,32,97, + 110,100,10,32,32,32,32,32,32,32,32,115,121,115,46,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, + 104,101,46,78,40,6,0,0,0,117,3,0,0,0,115,121, + 115,117,4,0,0,0,112,97,116,104,117,20,0,0,0,95, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,117,11,0,0,0,73,109,112,111,114,116,69,114, + 114,111,114,117,11,0,0,0,102,105,110,100,95,109,111,100, + 117,108,101,117,4,0,0,0,78,111,110,101,40,6,0,0, + 0,117,3,0,0,0,99,108,115,117,8,0,0,0,102,117, + 108,108,110,97,109,101,117,4,0,0,0,112,97,116,104,117, + 5,0,0,0,101,110,116,114,121,117,6,0,0,0,102,105, + 110,100,101,114,117,6,0,0,0,108,111,97,100,101,114,40, + 0,0,0,0,40,0,0,0,0,117,75,0,0,0,47,85, + 115,101,114,115,47,98,99,97,110,110,111,110,47,68,101,118, + 101,108,111,112,101,114,47,114,101,112,111,47,99,112,121,116, + 104,111,110,47,98,111,111,116,115,116,114,97,112,95,105,109, + 112,111,114,116,108,105,98,47,76,105,98,47,95,105,109,112, + 111,114,116,108,105,98,46,112,121,117,11,0,0,0,102,105, + 110,100,95,109,111,100,117,108,101,219,2,0,0,115,24,0, + 0,0,0,4,6,1,12,1,13,1,3,1,19,1,13,1, + 8,1,6,1,15,1,6,1,11,2,117,22,0,0,0,80, + 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,109, + 111,100,117,108,101,78,40,9,0,0,0,117,8,0,0,0, + 95,95,110,97,109,101,95,95,117,10,0,0,0,95,95,109, + 111,100,117,108,101,95,95,117,12,0,0,0,95,95,113,117, + 97,108,110,97,109,101,95,95,117,7,0,0,0,95,95,100, + 111,99,95,95,117,11,0,0,0,99,108,97,115,115,109,101, + 116,104,111,100,117,4,0,0,0,78,111,110,101,117,11,0, + 0,0,95,112,97,116,104,95,104,111,111,107,115,117,20,0, + 0,0,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,117,11,0,0,0,102,105,110,100,95, + 109,111,100,117,108,101,40,1,0,0,0,117,10,0,0,0, + 95,95,108,111,99,97,108,115,95,95,40,0,0,0,0,40, + 0,0,0,0,117,75,0,0,0,47,85,115,101,114,115,47, + 98,99,97,110,110,111,110,47,68,101,118,101,108,111,112,101, + 114,47,114,101,112,111,47,99,112,121,116,104,111,110,47,98, + 111,111,116,115,116,114,97,112,95,105,109,112,111,114,116,108, + 105,98,47,76,105,98,47,95,105,109,112,111,114,116,108,105, + 98,46,112,121,117,10,0,0,0,80,97,116,104,70,105,110, + 100,101,114,173,2,0,0,115,14,0,0,0,16,2,6,2, + 3,1,18,16,3,1,18,24,3,1,117,10,0,0,0,80, + 97,116,104,70,105,110,100,101,114,99,1,0,0,0,0,0, + 0,0,1,0,0,0,2,0,0,0,66,0,0,0,115,50, + 0,0,0,124,0,0,69,101,0,0,90,1,0,100,0,0, + 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, + 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, + 0,100,6,0,83,40,7,0,0,0,117,11,0,0,0,95, + 70,105,108,101,70,105,110,100,101,114,117,171,0,0,0,70, + 105,108,101,45,98,97,115,101,100,32,102,105,110,100,101,114, + 46,10,10,32,32,32,32,67,111,110,115,116,114,117,99,116, + 111,114,32,116,97,107,101,115,32,97,32,108,105,115,116,32, + 111,102,32,111,98,106,101,99,116,115,32,100,101,116,97,105, + 108,105,110,103,32,119,104,97,116,32,102,105,108,101,32,101, + 120,116,101,110,115,105,111,110,115,32,116,104,101,105,114,10, + 32,32,32,32,108,111,97,100,101,114,32,115,117,112,112,111, + 114,116,115,32,97,108,111,110,103,32,119,105,116,104,32,119, + 104,101,116,104,101,114,32,105,116,32,99,97,110,32,98,101, + 32,117,115,101,100,32,102,111,114,32,97,32,112,97,99,107, + 97,103,101,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, + 142,0,0,0,103,0,0,125,3,0,103,0,0,125,4,0, + 120,96,0,124,2,0,68,93,88,0,137,0,0,124,4,0, + 106,0,0,135,0,0,102,1,0,100,1,0,100,2,0,134, + 0,0,136,0,0,106,1,0,68,131,1,0,131,1,0,1, + 136,0,0,106,2,0,114,19,0,124,3,0,106,0,0,135, + 0,0,102,1,0,100,3,0,100,2,0,134,0,0,136,0, + 0,106,1,0,68,131,1,0,131,1,0,1,113,19,0,113, + 19,0,87,124,3,0,124,0,0,95,3,0,124,4,0,124, + 0,0,95,4,0,124,1,0,124,0,0,95,5,0,100,4, + 0,83,40,5,0,0,0,117,31,0,0,0,73,110,105,116, + 105,97,108,105,122,101,32,119,105,116,104,32,102,105,110,100, + 101,114,32,100,101,116,97,105,108,115,46,99,1,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0, + 115,30,0,0,0,124,0,0,93,20,0,125,1,0,124,1, + 0,136,0,0,106,0,0,102,2,0,86,1,113,3,0,100, + 0,0,83,40,1,0,0,0,78,40,1,0,0,0,117,6, + 0,0,0,108,111,97,100,101,114,40,2,0,0,0,117,2, + 0,0,0,46,48,117,6,0,0,0,115,117,102,102,105,120, + 40,1,0,0,0,117,6,0,0,0,100,101,116,97,105,108, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,9,0,0,0,60,103,101,110,101,120, + 112,114,62,252,2,0,0,115,2,0,0,0,6,0,117,39, + 0,0,0,95,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,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,51,0,0,0,115, + 30,0,0,0,124,0,0,93,20,0,125,1,0,124,1,0, + 136,0,0,106,0,0,102,2,0,86,1,113,3,0,100,0, + 0,83,40,1,0,0,0,78,40,1,0,0,0,117,6,0, + 0,0,108,111,97,100,101,114,40,2,0,0,0,117,2,0, + 0,0,46,48,117,6,0,0,0,115,117,102,102,105,120,40, + 1,0,0,0,117,6,0,0,0,100,101,116,97,105,108,40, + 0,0,0,0,117,75,0,0,0,47,85,115,101,114,115,47, + 98,99,97,110,110,111,110,47,68,101,118,101,108,111,112,101, + 114,47,114,101,112,111,47,99,112,121,116,104,111,110,47,98, + 111,111,116,115,116,114,97,112,95,105,109,112,111,114,116,108, + 105,98,47,76,105,98,47,95,105,109,112,111,114,116,108,105, + 98,46,112,121,117,9,0,0,0,60,103,101,110,101,120,112, + 114,62,254,2,0,0,115,2,0,0,0,6,1,78,40,6, + 0,0,0,117,6,0,0,0,101,120,116,101,110,100,117,8, + 0,0,0,115,117,102,102,105,120,101,115,117,17,0,0,0, + 115,117,112,112,111,114,116,115,95,112,97,99,107,97,103,101, + 115,117,8,0,0,0,112,97,99,107,97,103,101,115,117,7, + 0,0,0,109,111,100,117,108,101,115,117,4,0,0,0,112, + 97,116,104,40,5,0,0,0,117,4,0,0,0,115,101,108, + 102,117,4,0,0,0,112,97,116,104,117,7,0,0,0,100, + 101,116,97,105,108,115,117,8,0,0,0,112,97,99,107,97, + 103,101,115,117,7,0,0,0,109,111,100,117,108,101,115,40, + 0,0,0,0,40,1,0,0,0,117,6,0,0,0,100,101, + 116,97,105,108,117,75,0,0,0,47,85,115,101,114,115,47, + 98,99,97,110,110,111,110,47,68,101,118,101,108,111,112,101, + 114,47,114,101,112,111,47,99,112,121,116,104,111,110,47,98, + 111,111,116,115,116,114,97,112,95,105,109,112,111,114,116,108, + 105,98,47,76,105,98,47,95,105,109,112,111,114,116,108,105, + 98,46,112,121,117,8,0,0,0,95,95,105,110,105,116,95, + 95,247,2,0,0,115,20,0,0,0,0,2,6,1,6,1, + 13,1,35,1,9,1,21,1,21,1,9,1,9,1,117,20, + 0,0,0,95,70,105,108,101,70,105,110,100,101,114,46,95, + 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0, + 10,0,0,0,6,0,0,0,67,0,0,0,115,37,1,0, + 0,124,1,0,106,0,0,100,1,0,131,1,0,100,2,0, + 25,125,2,0,116,1,0,124,0,0,106,2,0,124,2,0, + 131,2,0,125,3,0,116,3,0,124,3,0,131,1,0,114, + 192,0,116,4,0,124,0,0,106,2,0,124,2,0,131,2, + 0,114,192,0,120,122,0,124,0,0,106,5,0,68,93,77, + 0,92,2,0,125,4,0,125,5,0,100,3,0,124,4,0, + 23,125,6,0,116,1,0,124,3,0,124,6,0,131,2,0, + 125,7,0,116,6,0,124,7,0,131,1,0,114,77,0,116, + 4,0,124,3,0,124,6,0,131,2,0,114,77,0,124,5, + 0,124,1,0,124,7,0,131,2,0,83,113,77,0,87,100, + 4,0,125,8,0,116,7,0,106,8,0,124,8,0,106,9, + 0,124,3,0,131,1,0,116,10,0,131,2,0,1,110,0, + 0,120,94,0,124,0,0,106,11,0,68,93,83,0,92,2, + 0,125,4,0,125,5,0,124,2,0,124,4,0,23,125,9, + 0,116,1,0,124,0,0,106,2,0,124,9,0,131,2,0, + 125,7,0,116,6,0,124,7,0,131,1,0,114,202,0,116, + 4,0,124,0,0,106,2,0,124,9,0,131,2,0,114,202, + 0,124,5,0,124,1,0,124,7,0,131,2,0,83,113,202, + 0,87,100,5,0,83,40,6,0,0,0,117,46,0,0,0, + 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, + 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, + 99,105,102,105,101,100,32,109,111,100,117,108,101,46,117,1, + 0,0,0,46,105,2,0,0,0,117,8,0,0,0,95,95, + 105,110,105,116,95,95,117,44,0,0,0,78,111,116,32,105, + 109,112,111,114,116,105,110,103,32,100,105,114,101,99,116,111, + 114,121,32,123,125,58,32,109,105,115,115,105,110,103,32,95, + 95,105,110,105,116,95,95,78,40,13,0,0,0,117,10,0, + 0,0,114,112,97,114,116,105,116,105,111,110,117,10,0,0, + 0,95,112,97,116,104,95,106,111,105,110,117,4,0,0,0, + 112,97,116,104,117,11,0,0,0,95,112,97,116,104,95,105, + 115,100,105,114,117,8,0,0,0,95,99,97,115,101,95,111, + 107,117,8,0,0,0,112,97,99,107,97,103,101,115,117,12, + 0,0,0,95,112,97,116,104,95,105,115,102,105,108,101,117, + 9,0,0,0,95,119,97,114,110,105,110,103,115,117,4,0, + 0,0,119,97,114,110,117,6,0,0,0,102,111,114,109,97, + 116,117,13,0,0,0,73,109,112,111,114,116,87,97,114,110, + 105,110,103,117,7,0,0,0,109,111,100,117,108,101,115,117, + 4,0,0,0,78,111,110,101,40,10,0,0,0,117,4,0, + 0,0,115,101,108,102,117,8,0,0,0,102,117,108,108,110, + 97,109,101,117,11,0,0,0,116,97,105,108,95,109,111,100, + 117,108,101,117,9,0,0,0,98,97,115,101,95,112,97,116, + 104,117,6,0,0,0,115,117,102,102,105,120,117,6,0,0, + 0,108,111,97,100,101,114,117,13,0,0,0,105,110,105,116, + 95,102,105,108,101,110,97,109,101,117,9,0,0,0,102,117, + 108,108,95,112,97,116,104,117,3,0,0,0,109,115,103,117, + 12,0,0,0,109,111,100,95,102,105,108,101,110,97,109,101, + 40,0,0,0,0,40,0,0,0,0,117,75,0,0,0,47, + 85,115,101,114,115,47,98,99,97,110,110,111,110,47,68,101, + 118,101,108,111,112,101,114,47,114,101,112,111,47,99,112,121, + 116,104,111,110,47,98,111,111,116,115,116,114,97,112,95,105, + 109,112,111,114,116,108,105,98,47,76,105,98,47,95,105,109, + 112,111,114,116,108,105,98,46,112,121,117,11,0,0,0,102, + 105,110,100,95,109,111,100,117,108,101,4,3,0,0,115,34, + 0,0,0,0,2,19,1,18,1,30,1,22,1,10,1,15, + 1,12,1,15,1,17,2,6,1,28,1,22,1,10,1,18, + 1,30,1,17,1,117,23,0,0,0,95,70,105,108,101,70, + 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, + 101,78,40,6,0,0,0,117,8,0,0,0,95,95,110,97, + 109,101,95,95,117,10,0,0,0,95,95,109,111,100,117,108, + 101,95,95,117,12,0,0,0,95,95,113,117,97,108,110,97, + 109,101,95,95,117,7,0,0,0,95,95,100,111,99,95,95, + 117,8,0,0,0,95,95,105,110,105,116,95,95,117,11,0, + 0,0,102,105,110,100,95,109,111,100,117,108,101,40,1,0, + 0,0,117,10,0,0,0,95,95,108,111,99,97,108,115,95, + 95,40,0,0,0,0,40,0,0,0,0,117,75,0,0,0, + 47,85,115,101,114,115,47,98,99,97,110,110,111,110,47,68, + 101,118,101,108,111,112,101,114,47,114,101,112,111,47,99,112, + 121,116,104,111,110,47,98,111,111,116,115,116,114,97,112,95, + 105,109,112,111,114,116,108,105,98,47,76,105,98,47,95,105, + 109,112,111,114,116,108,105,98,46,112,121,117,11,0,0,0, + 95,70,105,108,101,70,105,110,100,101,114,238,2,0,0,115, + 6,0,0,0,16,7,6,2,12,13,117,11,0,0,0,95, + 70,105,108,101,70,105,110,100,101,114,99,1,0,0,0,0, + 0,0,0,1,0,0,0,2,0,0,0,66,0,0,0,115, + 44,0,0,0,124,0,0,69,101,0,0,90,1,0,100,0, + 0,90,2,0,101,3,0,90,4,0,100,4,0,90,6,0, + 100,1,0,100,2,0,132,0,0,90,7,0,100,3,0,83, + 40,5,0,0,0,117,20,0,0,0,95,83,111,117,114,99, + 101,70,105,110,100,101,114,68,101,116,97,105,108,115,99,1, + 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, + 0,0,0,115,22,0,0,0,116,0,0,116,1,0,106,2, + 0,131,1,0,124,0,0,95,3,0,100,0,0,83,40,1, + 0,0,0,78,40,4,0,0,0,117,12,0,0,0,95,115, + 117,102,102,105,120,95,108,105,115,116,117,3,0,0,0,105, + 109,112,117,9,0,0,0,80,89,95,83,79,85,82,67,69, + 117,8,0,0,0,115,117,102,102,105,120,101,115,40,1,0, + 0,0,117,4,0,0,0,115,101,108,102,40,0,0,0,0, + 40,0,0,0,0,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,8,0,0,0,95,95,105,110,105,116, + 95,95,30,3,0,0,115,2,0,0,0,0,1,117,29,0, + 0,0,95,83,111,117,114,99,101,70,105,110,100,101,114,68, + 101,116,97,105,108,115,46,95,95,105,110,105,116,95,95,78, + 84,40,8,0,0,0,117,8,0,0,0,95,95,110,97,109, + 101,95,95,117,10,0,0,0,95,95,109,111,100,117,108,101, + 95,95,117,12,0,0,0,95,95,113,117,97,108,110,97,109, + 101,95,95,117,17,0,0,0,95,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,117,6,0,0,0,108,111, + 97,100,101,114,117,4,0,0,0,84,114,117,101,117,17,0, + 0,0,115,117,112,112,111,114,116,115,95,112,97,99,107,97, + 103,101,115,117,8,0,0,0,95,95,105,110,105,116,95,95, + 40,1,0,0,0,117,10,0,0,0,95,95,108,111,99,97, + 108,115,95,95,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,20, + 0,0,0,95,83,111,117,114,99,101,70,105,110,100,101,114, + 68,101,116,97,105,108,115,25,3,0,0,115,6,0,0,0, + 16,2,6,1,6,2,117,20,0,0,0,95,83,111,117,114, + 99,101,70,105,110,100,101,114,68,101,116,97,105,108,115,99, + 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, + 66,0,0,0,115,44,0,0,0,124,0,0,69,101,0,0, + 90,1,0,100,0,0,90,2,0,101,3,0,90,4,0,100, + 4,0,90,6,0,100,1,0,100,2,0,132,0,0,90,7, + 0,100,3,0,83,40,5,0,0,0,117,24,0,0,0,95, + 83,111,117,114,99,101,108,101,115,115,70,105,110,100,101,114, + 68,101,116,97,105,108,115,99,1,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,22,0,0, + 0,116,0,0,116,1,0,106,2,0,131,1,0,124,0,0, + 95,3,0,100,0,0,83,40,1,0,0,0,78,40,4,0, + 0,0,117,12,0,0,0,95,115,117,102,102,105,120,95,108, + 105,115,116,117,3,0,0,0,105,109,112,117,11,0,0,0, + 80,89,95,67,79,77,80,73,76,69,68,117,8,0,0,0, + 115,117,102,102,105,120,101,115,40,1,0,0,0,117,4,0, + 0,0,115,101,108,102,40,0,0,0,0,40,0,0,0,0, + 117,75,0,0,0,47,85,115,101,114,115,47,98,99,97,110, + 110,111,110,47,68,101,118,101,108,111,112,101,114,47,114,101, + 112,111,47,99,112,121,116,104,111,110,47,98,111,111,116,115, + 116,114,97,112,95,105,109,112,111,114,116,108,105,98,47,76, + 105,98,47,95,105,109,112,111,114,116,108,105,98,46,112,121, + 117,8,0,0,0,95,95,105,110,105,116,95,95,38,3,0, + 0,115,2,0,0,0,0,1,117,33,0,0,0,95,83,111, + 117,114,99,101,108,101,115,115,70,105,110,100,101,114,68,101, + 116,97,105,108,115,46,95,95,105,110,105,116,95,95,78,84, + 40,8,0,0,0,117,8,0,0,0,95,95,110,97,109,101, + 95,95,117,10,0,0,0,95,95,109,111,100,117,108,101,95, + 95,117,12,0,0,0,95,95,113,117,97,108,110,97,109,101, + 95,95,117,21,0,0,0,95,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,117,6,0,0, + 0,108,111,97,100,101,114,117,4,0,0,0,84,114,117,101, + 117,17,0,0,0,115,117,112,112,111,114,116,115,95,112,97, + 99,107,97,103,101,115,117,8,0,0,0,95,95,105,110,105, + 116,95,95,40,1,0,0,0,117,10,0,0,0,95,95,108, + 111,99,97,108,115,95,95,40,0,0,0,0,40,0,0,0, + 0,117,75,0,0,0,47,85,115,101,114,115,47,98,99,97, + 110,110,111,110,47,68,101,118,101,108,111,112,101,114,47,114, + 101,112,111,47,99,112,121,116,104,111,110,47,98,111,111,116, + 115,116,114,97,112,95,105,109,112,111,114,116,108,105,98,47, + 76,105,98,47,95,105,109,112,111,114,116,108,105,98,46,112, + 121,117,24,0,0,0,95,83,111,117,114,99,101,108,101,115, + 115,70,105,110,100,101,114,68,101,116,97,105,108,115,33,3, + 0,0,115,6,0,0,0,16,2,6,1,6,2,117,24,0, + 0,0,95,83,111,117,114,99,101,108,101,115,115,70,105,110, + 100,101,114,68,101,116,97,105,108,115,99,1,0,0,0,0, + 0,0,0,1,0,0,0,2,0,0,0,66,0,0,0,115, + 44,0,0,0,124,0,0,69,101,0,0,90,1,0,100,0, + 0,90,2,0,101,3,0,90,4,0,100,4,0,90,6,0, + 100,1,0,100,2,0,132,0,0,90,7,0,100,3,0,83, + 40,5,0,0,0,117,23,0,0,0,95,69,120,116,101,110, + 115,105,111,110,70,105,110,100,101,114,68,101,116,97,105,108, + 115,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, + 0,0,67,0,0,0,115,22,0,0,0,116,0,0,116,1, + 0,106,2,0,131,1,0,124,0,0,95,3,0,100,0,0, + 83,40,1,0,0,0,78,40,4,0,0,0,117,12,0,0, + 0,95,115,117,102,102,105,120,95,108,105,115,116,117,3,0, + 0,0,105,109,112,117,11,0,0,0,67,95,69,88,84,69, + 78,83,73,79,78,117,8,0,0,0,115,117,102,102,105,120, + 101,115,40,1,0,0,0,117,4,0,0,0,115,101,108,102, + 40,0,0,0,0,40,0,0,0,0,117,75,0,0,0,47, + 85,115,101,114,115,47,98,99,97,110,110,111,110,47,68,101, + 118,101,108,111,112,101,114,47,114,101,112,111,47,99,112,121, + 116,104,111,110,47,98,111,111,116,115,116,114,97,112,95,105, + 109,112,111,114,116,108,105,98,47,76,105,98,47,95,105,109, + 112,111,114,116,108,105,98,46,112,121,117,8,0,0,0,95, + 95,105,110,105,116,95,95,47,3,0,0,115,2,0,0,0, + 0,1,117,32,0,0,0,95,69,120,116,101,110,115,105,111, + 110,70,105,110,100,101,114,68,101,116,97,105,108,115,46,95, + 95,105,110,105,116,95,95,78,70,40,8,0,0,0,117,8, + 0,0,0,95,95,110,97,109,101,95,95,117,10,0,0,0, + 95,95,109,111,100,117,108,101,95,95,117,12,0,0,0,95, + 95,113,117,97,108,110,97,109,101,95,95,117,20,0,0,0, + 95,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,117,6,0,0,0,108,111,97,100,101,114,117, + 5,0,0,0,70,97,108,115,101,117,17,0,0,0,115,117, + 112,112,111,114,116,115,95,112,97,99,107,97,103,101,115,117, + 8,0,0,0,95,95,105,110,105,116,95,95,40,1,0,0, + 0,117,10,0,0,0,95,95,108,111,99,97,108,115,95,95, + 40,0,0,0,0,40,0,0,0,0,117,75,0,0,0,47, + 85,115,101,114,115,47,98,99,97,110,110,111,110,47,68,101, + 118,101,108,111,112,101,114,47,114,101,112,111,47,99,112,121, + 116,104,111,110,47,98,111,111,116,115,116,114,97,112,95,105, + 109,112,111,114,116,108,105,98,47,76,105,98,47,95,105,109, + 112,111,114,116,108,105,98,46,112,121,117,23,0,0,0,95, + 69,120,116,101,110,115,105,111,110,70,105,110,100,101,114,68, + 101,116,97,105,108,115,42,3,0,0,115,6,0,0,0,16, + 2,6,1,6,2,117,23,0,0,0,95,69,120,116,101,110, + 115,105,111,110,70,105,110,100,101,114,68,101,116,97,105,108, + 115,99,1,0,0,0,0,0,0,0,1,0,0,0,5,0, + 0,0,67,0,0,0,115,56,0,0,0,116,0,0,124,0, + 0,131,1,0,114,40,0,116,1,0,124,0,0,116,2,0, + 131,0,0,116,3,0,131,0,0,116,4,0,131,0,0,131, + 4,0,83,116,5,0,100,1,0,131,1,0,130,1,0,100, + 2,0,83,40,3,0,0,0,117,55,0,0,0,73,102,32, + 116,104,101,32,112,97,116,104,32,105,115,32,97,32,100,105, + 114,101,99,116,111,114,121,44,32,114,101,116,117,114,110,32, + 97,32,102,105,108,101,45,98,97,115,101,100,32,102,105,110, + 100,101,114,46,117,30,0,0,0,111,110,108,121,32,100,105, + 114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,117, + 112,112,111,114,116,101,100,78,40,6,0,0,0,117,11,0, + 0,0,95,112,97,116,104,95,105,115,100,105,114,117,11,0, + 0,0,95,70,105,108,101,70,105,110,100,101,114,117,23,0, + 0,0,95,69,120,116,101,110,115,105,111,110,70,105,110,100, + 101,114,68,101,116,97,105,108,115,117,20,0,0,0,95,83, + 111,117,114,99,101,70,105,110,100,101,114,68,101,116,97,105, + 108,115,117,24,0,0,0,95,83,111,117,114,99,101,108,101, + 115,115,70,105,110,100,101,114,68,101,116,97,105,108,115,117, + 11,0,0,0,73,109,112,111,114,116,69,114,114,111,114,40, + 1,0,0,0,117,4,0,0,0,112,97,116,104,40,0,0, + 0,0,40,0,0,0,0,117,75,0,0,0,47,85,115,101, + 114,115,47,98,99,97,110,110,111,110,47,68,101,118,101,108, + 111,112,101,114,47,114,101,112,111,47,99,112,121,116,104,111, + 110,47,98,111,111,116,115,116,114,97,112,95,105,109,112,111, + 114,116,108,105,98,47,76,105,98,47,95,105,109,112,111,114, + 116,108,105,98,46,112,121,117,15,0,0,0,95,102,105,108, + 101,95,112,97,116,104,95,104,111,111,107,53,3,0,0,115, + 10,0,0,0,0,2,12,1,12,1,6,1,10,2,117,15, + 0,0,0,95,102,105,108,101,95,112,97,116,104,95,104,111, + 111,107,99,1,0,0,0,0,0,0,0,1,0,0,0,4, + 0,0,0,2,0,0,0,115,74,0,0,0,124,0,0,69, + 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, + 3,0,101,4,0,135,0,0,102,1,0,100,2,0,100,3, + 0,134,0,0,131,1,0,90,5,0,101,4,0,135,0,0, + 102,1,0,100,4,0,100,5,0,134,0,0,131,1,0,90, + 6,0,135,0,0,83,40,6,0,0,0,117,18,0,0,0, + 95,68,101,102,97,117,108,116,80,97,116,104,70,105,110,100, + 101,114,117,77,0,0,0,83,117,98,99,108,97,115,115,32, + 111,102,32,80,97,116,104,70,105,110,100,101,114,32,116,104, + 97,116,32,105,109,112,108,101,109,101,110,116,115,32,105,109, + 112,108,105,99,105,116,32,115,101,109,97,110,116,105,99,115, + 32,102,111,114,10,32,32,32,32,95,95,105,109,112,111,114, + 116,95,95,46,99,2,0,0,0,0,0,0,0,3,0,0, + 0,11,0,0,0,3,0,0,0,115,79,0,0,0,121,20, + 0,116,0,0,131,0,0,106,1,0,124,1,0,131,1,0, + 83,87,110,52,0,4,116,2,0,107,10,0,114,74,0,1, + 1,1,116,3,0,116,4,0,106,5,0,103,2,0,125,2, + 0,116,0,0,131,0,0,106,1,0,124,1,0,124,2,0, + 131,2,0,83,89,110,1,0,88,100,1,0,83,40,2,0, + 0,0,117,53,0,0,0,83,101,97,114,99,104,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,97,115,32, + 119,101,108,108,32,97,115,32,105,109,112,108,105,99,105,116, + 32,112,97,116,104,32,104,111,111,107,115,46,78,40,6,0, + 0,0,117,5,0,0,0,115,117,112,101,114,117,11,0,0, + 0,95,112,97,116,104,95,104,111,111,107,115,117,11,0,0, + 0,73,109,112,111,114,116,69,114,114,111,114,117,18,0,0, + 0,95,68,69,70,65,85,76,84,95,80,65,84,72,95,72, + 79,79,75,117,3,0,0,0,105,109,112,117,12,0,0,0, + 78,117,108,108,73,109,112,111,114,116,101,114,40,3,0,0, + 0,117,3,0,0,0,99,108,115,117,4,0,0,0,112,97, + 116,104,117,14,0,0,0,105,109,112,108,105,99,105,116,95, + 104,111,111,107,115,40,1,0,0,0,117,10,0,0,0,64, + 95,95,99,108,97,115,115,95,95,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,11, + 0,0,0,95,112,97,116,104,95,104,111,111,107,115,70,3, + 0,0,115,10,0,0,0,0,3,3,1,20,1,13,1,15, + 1,117,30,0,0,0,95,68,101,102,97,117,108,116,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,2,0,0, + 0,3,0,0,0,3,0,0,0,115,19,0,0,0,116,0, + 0,131,0,0,106,1,0,124,1,0,116,2,0,131,2,0, + 83,40,1,0,0,0,117,81,0,0,0,85,115,101,32,116, + 104,101,32,100,101,102,97,117,108,116,32,112,97,116,104,32, + 104,111,111,107,32,119,104,101,110,32,78,111,110,101,32,105, + 115,32,115,116,111,114,101,100,32,105,110,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,40,3,0,0, + 0,117,5,0,0,0,115,117,112,101,114,117,20,0,0,0, + 95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,117,18,0,0,0,95,68,69,70,65,85,76, + 84,95,80,65,84,72,95,72,79,79,75,40,2,0,0,0, + 117,3,0,0,0,99,108,115,117,4,0,0,0,112,97,116, + 104,40,1,0,0,0,117,10,0,0,0,64,95,95,99,108, + 97,115,115,95,95,40,0,0,0,0,117,75,0,0,0,47, + 85,115,101,114,115,47,98,99,97,110,110,111,110,47,68,101, + 118,101,108,111,112,101,114,47,114,101,112,111,47,99,112,121, + 116,104,111,110,47,98,111,111,116,115,116,114,97,112,95,105, + 109,112,111,114,116,108,105,98,47,76,105,98,47,95,105,109, + 112,111,114,116,108,105,98,46,112,121,117,20,0,0,0,95, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,79,3,0,0,115,2,0,0,0,0,4,117,39, + 0,0,0,95,68,101,102,97,117,108,116,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,40,7,0,0,0,117, + 8,0,0,0,95,95,110,97,109,101,95,95,117,10,0,0, + 0,95,95,109,111,100,117,108,101,95,95,117,12,0,0,0, + 95,95,113,117,97,108,110,97,109,101,95,95,117,7,0,0, + 0,95,95,100,111,99,95,95,117,11,0,0,0,99,108,97, + 115,115,109,101,116,104,111,100,117,11,0,0,0,95,112,97, + 116,104,95,104,111,111,107,115,117,20,0,0,0,95,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,40,1,0,0,0,117,10,0,0,0,95,95,108,111,99, + 97,108,115,95,95,40,0,0,0,0,40,1,0,0,0,117, + 10,0,0,0,64,95,95,99,108,97,115,115,95,95,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,18, + 0,0,0,95,68,101,102,97,117,108,116,80,97,116,104,70, + 105,110,100,101,114,65,3,0,0,115,6,0,0,0,16,3, + 6,2,24,9,117,18,0,0,0,95,68,101,102,97,117,108, + 116,80,97,116,104,70,105,110,100,101,114,99,1,0,0,0, + 0,0,0,0,1,0,0,0,2,0,0,0,66,0,0,0, + 115,50,0,0,0,124,0,0,69,101,0,0,90,1,0,100, + 0,0,90,2,0,100,1,0,90,3,0,100,2,0,100,3, + 0,132,0,0,90,4,0,100,4,0,100,5,0,132,0,0, + 90,5,0,100,6,0,83,40,7,0,0,0,117,18,0,0, + 0,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, + 101,120,116,117,36,0,0,0,67,111,110,116,101,120,116,32, + 109,97,110,97,103,101,114,32,102,111,114,32,116,104,101,32, + 105,109,112,111,114,116,32,108,111,99,107,46,99,1,0,0, + 0,0,0,0,0,1,0,0,0,1,0,0,0,67,0,0, + 0,115,14,0,0,0,116,0,0,106,1,0,131,0,0,1, + 100,1,0,83,40,2,0,0,0,117,24,0,0,0,65,99, + 113,117,105,114,101,32,116,104,101,32,105,109,112,111,114,116, + 32,108,111,99,107,46,78,40,2,0,0,0,117,3,0,0, + 0,105,109,112,117,12,0,0,0,97,99,113,117,105,114,101, + 95,108,111,99,107,40,1,0,0,0,117,4,0,0,0,115, + 101,108,102,40,0,0,0,0,40,0,0,0,0,117,75,0, + 0,0,47,85,115,101,114,115,47,98,99,97,110,110,111,110, + 47,68,101,118,101,108,111,112,101,114,47,114,101,112,111,47, + 99,112,121,116,104,111,110,47,98,111,111,116,115,116,114,97, + 112,95,105,109,112,111,114,116,108,105,98,47,76,105,98,47, + 95,105,109,112,111,114,116,108,105,98,46,112,121,117,9,0, + 0,0,95,95,101,110,116,101,114,95,95,90,3,0,0,115, + 2,0,0,0,0,2,117,28,0,0,0,95,73,109,112,111, + 114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,95, + 101,110,116,101,114,95,95,99,4,0,0,0,0,0,0,0, + 4,0,0,0,1,0,0,0,67,0,0,0,115,14,0,0, + 0,116,0,0,106,1,0,131,0,0,1,100,1,0,83,40, + 2,0,0,0,117,60,0,0,0,82,101,108,101,97,115,101, + 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, + 32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,97, + 110,121,32,114,97,105,115,101,100,32,101,120,99,101,112,116, + 105,111,110,115,46,78,40,2,0,0,0,117,3,0,0,0, + 105,109,112,117,12,0,0,0,114,101,108,101,97,115,101,95, + 108,111,99,107,40,4,0,0,0,117,4,0,0,0,115,101, + 108,102,117,8,0,0,0,101,120,99,95,116,121,112,101,117, + 9,0,0,0,101,120,99,95,118,97,108,117,101,117,13,0, + 0,0,101,120,99,95,116,114,97,99,101,98,97,99,107,40, + 0,0,0,0,40,0,0,0,0,117,75,0,0,0,47,85, + 115,101,114,115,47,98,99,97,110,110,111,110,47,68,101,118, + 101,108,111,112,101,114,47,114,101,112,111,47,99,112,121,116, + 104,111,110,47,98,111,111,116,115,116,114,97,112,95,105,109, + 112,111,114,116,108,105,98,47,76,105,98,47,95,105,109,112, + 111,114,116,108,105,98,46,112,121,117,8,0,0,0,95,95, + 101,120,105,116,95,95,94,3,0,0,115,2,0,0,0,0, + 2,117,27,0,0,0,95,73,109,112,111,114,116,76,111,99, + 107,67,111,110,116,101,120,116,46,95,95,101,120,105,116,95, + 95,78,40,6,0,0,0,117,8,0,0,0,95,95,110,97, + 109,101,95,95,117,10,0,0,0,95,95,109,111,100,117,108, + 101,95,95,117,12,0,0,0,95,95,113,117,97,108,110,97, + 109,101,95,95,117,7,0,0,0,95,95,100,111,99,95,95, + 117,9,0,0,0,95,95,101,110,116,101,114,95,95,117,8, + 0,0,0,95,95,101,120,105,116,95,95,40,1,0,0,0, + 117,10,0,0,0,95,95,108,111,99,97,108,115,95,95,40, + 0,0,0,0,40,0,0,0,0,117,75,0,0,0,47,85, + 115,101,114,115,47,98,99,97,110,110,111,110,47,68,101,118, + 101,108,111,112,101,114,47,114,101,112,111,47,99,112,121,116, + 104,111,110,47,98,111,111,116,115,116,114,97,112,95,105,109, + 112,111,114,116,108,105,98,47,76,105,98,47,95,105,109,112, + 111,114,116,108,105,98,46,112,121,117,18,0,0,0,95,73, + 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, + 86,3,0,0,115,6,0,0,0,16,2,6,2,12,4,117, + 18,0,0,0,95,73,109,112,111,114,116,76,111,99,107,67, + 111,110,116,101,120,116,117,20,0,0,0,78,111,32,109,111, + 100,117,108,101,32,110,97,109,101,100,32,123,33,114,125,105, + 0,0,0,0,99,3,0,0,0,0,0,0,0,14,0,0, + 0,36,0,0,0,67,0,0,0,115,49,3,0,0,124,1, + 0,114,84,0,116,0,0,124,1,0,100,1,0,131,2,0, + 115,36,0,116,1,0,100,2,0,131,1,0,130,1,0,113, + 84,0,124,1,0,116,2,0,106,3,0,107,7,0,114,84, + 0,100,3,0,125,3,0,116,4,0,124,3,0,106,5,0, + 124,1,0,131,1,0,131,1,0,130,1,0,113,84,0,110, + 0,0,124,0,0,12,114,118,0,124,2,0,100,4,0,107, + 2,0,114,118,0,116,1,0,100,5,0,131,1,0,130,1, + 0,110,0,0,124,2,0,100,4,0,107,4,0,114,29,1, + 116,6,0,124,1,0,131,1,0,125,4,0,120,84,0,116, + 7,0,124,2,0,100,6,0,100,16,0,131,3,0,68,93, + 64,0,125,5,0,121,25,0,124,1,0,106,8,0,100,7, + 0,100,4,0,124,4,0,131,3,0,125,4,0,87,113,161, + 0,4,116,1,0,107,10,0,114,224,0,1,1,1,116,1, + 0,100,8,0,131,1,0,130,1,0,89,113,161,0,88,113, + 161,0,87,124,0,0,114,10,1,100,9,0,106,5,0,124, + 1,0,100,10,0,124,4,0,133,2,0,25,124,0,0,131, + 2,0,125,0,0,113,29,1,124,1,0,100,10,0,124,4, + 0,133,2,0,25,125,0,0,110,0,0,116,9,0,131,0, + 0,143,5,2,1,121,63,0,116,2,0,106,3,0,124,0, + 0,25,125,6,0,124,6,0,100,10,0,107,8,0,114,97, + 1,100,11,0,106,5,0,124,0,0,131,1,0,125,7,0, + 116,11,0,124,7,0,131,1,0,130,1,0,110,0,0,124, + 6,0,83,87,110,18,0,4,116,12,0,107,10,0,114,122, + 1,1,1,1,89,110,1,0,88,124,0,0,106,13,0,100, + 7,0,131,1,0,100,4,0,25,125,8,0,100,10,0,125, + 9,0,124,8,0,114,10,2,124,8,0,116,2,0,106,3, + 0,107,7,0,114,182,1,116,14,0,124,8,0,131,1,0, + 1,110,0,0,116,2,0,106,3,0,124,8,0,25,125,10, + 0,121,13,0,124,10,0,106,15,0,125,9,0,87,113,10, + 2,4,116,16,0,107,10,0,114,6,2,1,1,1,116,17, + 0,100,12,0,23,106,5,0,124,0,0,124,8,0,131,2, + 0,125,3,0,116,11,0,124,3,0,131,1,0,130,1,0, + 89,113,10,2,88,110,0,0,116,2,0,106,18,0,116,19, + 0,23,125,11,0,120,100,0,124,11,0,68,93,71,0,125, + 12,0,124,12,0,106,20,0,124,0,0,124,9,0,131,2, + 0,125,13,0,124,13,0,100,10,0,107,9,0,114,30,2, + 124,0,0,116,2,0,106,3,0,107,7,0,114,97,2,124, + 13,0,106,21,0,124,0,0,131,1,0,1,110,0,0,80, + 113,30,2,113,30,2,87,116,11,0,116,17,0,106,5,0, + 124,0,0,131,1,0,131,1,0,130,1,0,116,2,0,106, + 3,0,124,0,0,25,125,6,0,124,8,0,114,177,2,116, + 22,0,124,10,0,124,0,0,106,13,0,100,7,0,131,1, + 0,100,13,0,25,124,6,0,131,3,0,1,110,0,0,116, + 0,0,124,6,0,100,14,0,131,2,0,12,115,208,2,124, + 6,0,106,23,0,100,10,0,107,8,0,114,35,3,121,59, + 0,124,6,0,106,24,0,124,6,0,95,23,0,116,0,0, + 124,6,0,100,15,0,131,2,0,115,10,3,124,6,0,106, + 23,0,106,13,0,100,7,0,131,1,0,100,4,0,25,124, + 6,0,95,23,0,110,0,0,87,113,35,3,4,116,16,0, + 107,10,0,114,31,3,1,1,1,89,113,35,3,88,110,0, + 0,124,6,0,83,87,100,10,0,81,88,100,10,0,83,40, + 17,0,0,0,117,50,1,0,0,73,109,112,111,114,116,32, + 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,109, + 111,100,117,108,101,32,98,97,115,101,100,32,111,110,32,105, + 116,115,32,110,97,109,101,44,32,116,104,101,32,112,97,99, + 107,97,103,101,32,116,104,101,32,99,97,108,108,32,105,115, + 10,32,32,32,32,98,101,105,110,103,32,109,97,100,101,32, + 102,114,111,109,44,32,97,110,100,32,116,104,101,32,108,101, + 118,101,108,32,97,100,106,117,115,116,109,101,110,116,46,10, + 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, + 111,110,32,114,101,112,114,101,115,101,110,116,115,32,116,104, + 101,32,103,114,101,97,116,101,115,116,32,99,111,109,109,111, + 110,32,100,101,110,111,109,105,110,97,116,111,114,32,111,102, + 32,102,117,110,99,116,105,111,110,97,108,105,116,121,10,32, + 32,32,32,98,101,116,119,101,101,110,32,105,109,112,111,114, + 116,95,109,111,100,117,108,101,32,97,110,100,32,95,95,105, + 109,112,111,114,116,95,95,46,32,84,104,105,115,32,105,110, + 99,108,117,100,101,115,32,115,101,116,116,105,110,103,32,95, + 95,112,97,99,107,97,103,101,95,95,32,105,102,10,32,32, + 32,32,116,104,101,32,108,111,97,100,101,114,32,100,105,100, + 32,110,111,116,46,10,10,32,32,32,32,117,6,0,0,0, + 114,105,110,100,101,120,117,31,0,0,0,95,95,112,97,99, + 107,97,103,101,95,95,32,110,111,116,32,115,101,116,32,116, + 111,32,97,32,115,116,114,105,110,103,117,62,0,0,0,80, + 97,114,101,110,116,32,109,111,100,117,108,101,32,123,48,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,105,0,0, + 0,0,117,17,0,0,0,69,109,112,116,121,32,109,111,100, + 117,108,101,32,110,97,109,101,105,1,0,0,0,117,1,0, + 0,0,46,117,50,0,0,0,97,116,116,101,109,112,116,101, + 100,32,114,101,108,97,116,105,118,101,32,105,109,112,111,114, + 116,32,98,101,121,111,110,100,32,116,111,112,45,108,101,118, + 101,108,32,112,97,99,107,97,103,101,117,7,0,0,0,123, + 48,125,46,123,49,125,78,117,40,0,0,0,105,109,112,111, + 114,116,32,111,102,32,123,125,32,104,97,108,116,101,100,59, + 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100, + 117,108,101,115,117,21,0,0,0,59,32,123,125,32,105,115, + 32,110,111,116,32,97,32,112,97,99,107,97,103,101,105,2, + 0,0,0,117,11,0,0,0,95,95,112,97,99,107,97,103, + 101,95,95,117,8,0,0,0,95,95,112,97,116,104,95,95, + 105,255,255,255,255,40,25,0,0,0,117,7,0,0,0,104, + 97,115,97,116,116,114,117,10,0,0,0,86,97,108,117,101, + 69,114,114,111,114,117,3,0,0,0,115,121,115,117,7,0, + 0,0,109,111,100,117,108,101,115,117,11,0,0,0,83,121, + 115,116,101,109,69,114,114,111,114,117,6,0,0,0,102,111, + 114,109,97,116,117,3,0,0,0,108,101,110,117,5,0,0, + 0,114,97,110,103,101,117,6,0,0,0,114,105,110,100,101, + 120,117,18,0,0,0,95,73,109,112,111,114,116,76,111,99, + 107,67,111,110,116,101,120,116,117,4,0,0,0,78,111,110, + 101,117,11,0,0,0,73,109,112,111,114,116,69,114,114,111, + 114,117,8,0,0,0,75,101,121,69,114,114,111,114,117,10, + 0,0,0,114,112,97,114,116,105,116,105,111,110,117,11,0, + 0,0,95,103,99,100,95,105,109,112,111,114,116,117,8,0, + 0,0,95,95,112,97,116,104,95,95,117,14,0,0,0,65, + 116,116,114,105,98,117,116,101,69,114,114,111,114,117,8,0, + 0,0,95,69,82,82,95,77,83,71,117,9,0,0,0,109, + 101,116,97,95,112,97,116,104,117,19,0,0,0,95,73,77, + 80,76,73,67,73,84,95,77,69,84,65,95,80,65,84,72, + 117,11,0,0,0,102,105,110,100,95,109,111,100,117,108,101, + 117,11,0,0,0,108,111,97,100,95,109,111,100,117,108,101, + 117,7,0,0,0,115,101,116,97,116,116,114,117,11,0,0, + 0,95,95,112,97,99,107,97,103,101,95,95,117,8,0,0, + 0,95,95,110,97,109,101,95,95,40,14,0,0,0,117,4, + 0,0,0,110,97,109,101,117,7,0,0,0,112,97,99,107, + 97,103,101,117,5,0,0,0,108,101,118,101,108,117,3,0, + 0,0,109,115,103,117,3,0,0,0,100,111,116,117,1,0, + 0,0,120,117,6,0,0,0,109,111,100,117,108,101,117,7, + 0,0,0,109,101,115,115,97,103,101,117,6,0,0,0,112, + 97,114,101,110,116,117,4,0,0,0,112,97,116,104,117,13, + 0,0,0,112,97,114,101,110,116,95,109,111,100,117,108,101, + 117,9,0,0,0,109,101,116,97,95,112,97,116,104,117,6, + 0,0,0,102,105,110,100,101,114,117,6,0,0,0,108,111, + 97,100,101,114,40,0,0,0,0,40,0,0,0,0,117,75, + 0,0,0,47,85,115,101,114,115,47,98,99,97,110,110,111, + 110,47,68,101,118,101,108,111,112,101,114,47,114,101,112,111, + 47,99,112,121,116,104,111,110,47,98,111,111,116,115,116,114, + 97,112,95,105,109,112,111,114,116,108,105,98,47,76,105,98, + 47,95,105,109,112,111,114,116,108,105,98,46,112,121,117,11, + 0,0,0,95,103,99,100,95,105,109,112,111,114,116,103,3, + 0,0,115,116,0,0,0,0,9,6,1,15,1,15,1,15, + 1,6,2,27,1,19,1,15,1,12,1,12,1,25,1,3, + 1,25,1,13,1,21,2,6,1,31,2,19,1,10,1,3, + 1,13,1,12,1,6,1,9,1,15,1,8,1,13,1,5, + 1,19,1,6,1,6,1,15,1,13,2,13,1,3,1,13, + 1,13,1,22,1,20,1,13,1,13,1,18,1,12,2,15, + 1,16,1,8,2,21,2,13,1,6,2,32,2,31,3,3, + 1,12,1,15,1,32,1,13,1,8,1,117,11,0,0,0, + 95,103,99,100,95,105,109,112,111,114,116,99,5,0,0,0, + 0,0,0,0,8,0,0,0,13,0,0,0,3,0,0,0, + 115,206,1,0,0,116,0,0,124,0,0,100,1,0,131,2, + 0,115,45,0,116,1,0,100,2,0,106,2,0,116,3,0, + 124,0,0,131,1,0,131,1,0,131,1,0,130,1,0,110, + 0,0,124,4,0,100,3,0,107,2,0,114,72,0,116,4, + 0,124,0,0,131,1,0,137,0,0,110,92,0,124,1,0, + 106,5,0,100,4,0,131,1,0,125,5,0,124,5,0,100, + 8,0,107,8,0,114,146,0,124,1,0,100,5,0,25,125, + 5,0,100,6,0,124,1,0,107,7,0,114,146,0,124,5, + 0,106,7,0,100,7,0,131,1,0,100,3,0,25,125,5, + 0,113,146,0,110,0,0,116,4,0,124,0,0,124,5,0, + 124,4,0,131,3,0,137,0,0,124,3,0,115,23,1,124, + 4,0,100,3,0,107,2,0,114,206,0,116,8,0,106,9, + 0,124,0,0,106,10,0,100,7,0,131,1,0,100,3,0, + 25,25,83,124,0,0,115,216,0,136,0,0,83,116,11,0, + 124,0,0,131,1,0,116,11,0,124,0,0,106,10,0,100, + 7,0,131,1,0,100,3,0,25,131,1,0,24,125,6,0, + 116,8,0,106,9,0,136,0,0,106,12,0,100,8,0,124, + 6,0,11,133,2,0,25,25,83,110,179,0,116,0,0,136, + 0,0,100,6,0,131,2,0,114,198,1,100,9,0,124,3, + 0,107,6,0,114,109,1,116,0,0,136,0,0,100,10,0, + 131,2,0,114,109,1,116,13,0,124,3,0,131,1,0,125, + 3,0,124,3,0,106,14,0,100,9,0,131,1,0,1,124, + 3,0,106,15,0,136,0,0,106,16,0,131,1,0,1,110, + 0,0,120,86,0,135,0,0,102,1,0,100,11,0,100,12, + 0,134,0,0,124,3,0,68,131,1,0,68,93,56,0,125, + 7,0,121,29,0,116,4,0,100,13,0,106,2,0,136,0, + 0,106,12,0,124,7,0,131,2,0,131,1,0,1,87,113, + 135,1,4,116,17,0,107,10,0,114,190,1,1,1,1,89, + 113,135,1,88,113,135,1,87,110,0,0,136,0,0,83,100, + 8,0,83,40,14,0,0,0,117,214,1,0,0,73,109,112, + 111,114,116,32,97,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,84,104,101,32,39,103,108,111,98,97,108,115,39, + 32,97,114,103,117,109,101,110,116,32,105,115,32,117,115,101, + 100,32,116,111,32,105,110,102,101,114,32,119,104,101,114,101, + 32,116,104,101,32,105,109,112,111,114,116,32,105,115,32,111, + 99,99,117,114,105,110,103,32,102,114,111,109,10,32,32,32, + 32,116,111,32,104,97,110,100,108,101,32,114,101,108,97,116, + 105,118,101,32,105,109,112,111,114,116,115,46,32,84,104,101, + 32,39,108,111,99,97,108,115,39,32,97,114,103,117,109,101, + 110,116,32,105,115,32,105,103,110,111,114,101,100,46,32,84, + 104,101,10,32,32,32,32,39,102,114,111,109,108,105,115,116, + 39,32,97,114,103,117,109,101,110,116,32,115,112,101,99,105, + 102,105,101,115,32,119,104,97,116,32,115,104,111,117,108,100, + 32,101,120,105,115,116,32,97,115,32,97,116,116,114,105,98, + 117,116,101,115,32,111,110,32,116,104,101,32,109,111,100,117, + 108,101,10,32,32,32,32,98,101,105,110,103,32,105,109,112, + 111,114,116,101,100,32,40,101,46,103,46,32,96,96,102,114, + 111,109,32,109,111,100,117,108,101,32,105,109,112,111,114,116, + 32,60,102,114,111,109,108,105,115,116,62,96,96,41,46,32, + 32,84,104,101,32,39,108,101,118,101,108,39,10,32,32,32, + 32,97,114,103,117,109,101,110,116,32,114,101,112,114,101,115, + 101,110,116,115,32,116,104,101,32,112,97,99,107,97,103,101, + 32,108,111,99,97,116,105,111,110,32,116,111,32,105,109,112, + 111,114,116,32,102,114,111,109,32,105,110,32,97,32,114,101, + 108,97,116,105,118,101,10,32,32,32,32,105,109,112,111,114, + 116,32,40,101,46,103,46,32,96,96,102,114,111,109,32,46, + 46,112,107,103,32,105,109,112,111,114,116,32,109,111,100,96, + 96,32,119,111,117,108,100,32,104,97,118,101,32,97,32,39, + 108,101,118,101,108,39,32,111,102,32,50,41,46,10,10,32, + 32,32,32,117,10,0,0,0,114,112,97,114,116,105,116,105, + 111,110,117,31,0,0,0,109,111,100,117,108,101,32,110,97, + 109,101,32,109,117,115,116,32,98,101,32,115,116,114,44,32, + 110,111,116,32,123,125,105,0,0,0,0,117,11,0,0,0, + 95,95,112,97,99,107,97,103,101,95,95,117,8,0,0,0, + 95,95,110,97,109,101,95,95,117,8,0,0,0,95,95,112, + 97,116,104,95,95,117,1,0,0,0,46,78,117,1,0,0, + 0,42,117,7,0,0,0,95,95,97,108,108,95,95,99,1, + 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,51, + 0,0,0,115,36,0,0,0,124,0,0,93,26,0,125,1, + 0,116,0,0,136,0,0,124,1,0,131,2,0,115,3,0, + 124,1,0,86,1,113,3,0,100,0,0,83,40,1,0,0, + 0,78,40,1,0,0,0,117,7,0,0,0,104,97,115,97, + 116,116,114,40,2,0,0,0,117,2,0,0,0,46,48,117, + 1,0,0,0,121,40,1,0,0,0,117,6,0,0,0,109, + 111,100,117,108,101,40,0,0,0,0,117,75,0,0,0,47, + 85,115,101,114,115,47,98,99,97,110,110,111,110,47,68,101, + 118,101,108,111,112,101,114,47,114,101,112,111,47,99,112,121, + 116,104,111,110,47,98,111,111,116,115,116,114,97,112,95,105, + 109,112,111,114,116,108,105,98,47,76,105,98,47,95,105,109, + 112,111,114,116,108,105,98,46,112,121,117,9,0,0,0,60, + 103,101,110,101,120,112,114,62,225,3,0,0,115,2,0,0, + 0,6,0,117,29,0,0,0,95,95,105,109,112,111,114,116, + 95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110, + 101,120,112,114,62,117,7,0,0,0,123,48,125,46,123,49, + 125,40,18,0,0,0,117,7,0,0,0,104,97,115,97,116, + 116,114,117,9,0,0,0,84,121,112,101,69,114,114,111,114, + 117,6,0,0,0,102,111,114,109,97,116,117,4,0,0,0, + 116,121,112,101,117,11,0,0,0,95,103,99,100,95,105,109, + 112,111,114,116,117,3,0,0,0,103,101,116,117,4,0,0, + 0,78,111,110,101,117,10,0,0,0,114,112,97,114,116,105, + 116,105,111,110,117,3,0,0,0,115,121,115,117,7,0,0, + 0,109,111,100,117,108,101,115,117,9,0,0,0,112,97,114, + 116,105,116,105,111,110,117,3,0,0,0,108,101,110,117,8, + 0,0,0,95,95,110,97,109,101,95,95,117,4,0,0,0, + 108,105,115,116,117,6,0,0,0,114,101,109,111,118,101,117, + 6,0,0,0,101,120,116,101,110,100,117,7,0,0,0,95, + 95,97,108,108,95,95,117,11,0,0,0,73,109,112,111,114, + 116,69,114,114,111,114,40,8,0,0,0,117,4,0,0,0, + 110,97,109,101,117,7,0,0,0,103,108,111,98,97,108,115, + 117,6,0,0,0,108,111,99,97,108,115,117,8,0,0,0, + 102,114,111,109,108,105,115,116,117,5,0,0,0,108,101,118, + 101,108,117,7,0,0,0,112,97,99,107,97,103,101,117,7, + 0,0,0,99,117,116,95,111,102,102,117,1,0,0,0,120, + 40,0,0,0,0,40,1,0,0,0,117,6,0,0,0,109, + 111,100,117,108,101,117,75,0,0,0,47,85,115,101,114,115, + 47,98,99,97,110,110,111,110,47,68,101,118,101,108,111,112, + 101,114,47,114,101,112,111,47,99,112,121,116,104,111,110,47, + 98,111,111,116,115,116,114,97,112,95,105,109,112,111,114,116, + 108,105,98,47,76,105,98,47,95,105,109,112,111,114,116,108, + 105,98,46,112,121,117,10,0,0,0,95,95,105,109,112,111, + 114,116,95,95,183,3,0,0,115,56,0,0,0,0,11,15, + 1,30,1,12,1,15,4,15,1,12,1,10,1,12,1,25, + 1,18,2,6,3,12,1,24,1,6,1,4,2,35,1,28, + 3,15,1,27,1,12,1,13,1,19,1,32,1,3,1,29, + 1,13,1,12,1,117,10,0,0,0,95,95,105,109,112,111, + 114,116,95,95,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,124,1, + 0,97,0,0,124,0,0,97,1,0,116,1,0,106,2,0, + 116,3,0,25,125,2,0,120,76,0,100,15,0,68,93,68, + 0,125,3,0,124,3,0,116,1,0,106,2,0,107,7,0, + 114,71,0,116,4,0,106,5,0,124,3,0,131,1,0,125, + 4,0,110,13,0,116,1,0,106,2,0,124,3,0,25,125, + 4,0,116,6,0,124,2,0,124,3,0,124,4,0,131,3, + 0,1,113,32,0,87,120,153,0,100,16,0,100,17,0,100, + 18,0,103,3,0,68,93,124,0,92,2,0,125,5,0,125, + 6,0,124,5,0,116,1,0,106,2,0,107,6,0,114,164, + 0,116,1,0,106,2,0,124,5,0,25,125,7,0,80,113, + 120,0,121,56,0,116,4,0,106,5,0,124,5,0,131,1, + 0,125,7,0,124,5,0,100,9,0,107,2,0,114,218,0, + 100,10,0,116,1,0,106,7,0,107,6,0,114,218,0,100, + 6,0,125,6,0,110,0,0,80,87,113,120,0,4,116,8, + 0,107,10,0,114,243,0,1,1,1,119,120,0,89,113,120, + 0,88,113,120,0,87,116,8,0,100,11,0,131,1,0,130, + 1,0,116,6,0,124,2,0,100,12,0,124,7,0,131,3, + 0,1,116,6,0,124,2,0,100,13,0,124,6,0,131,3, + 0,1,100,14,0,83,40,19,0,0,0,117,68,1,0,0, + 83,101,116,117,112,32,105,109,112,111,114,116,108,105,98,32, + 98,121,32,105,109,112,111,114,116,105,110,103,32,110,101,101, + 100,101,100,32,98,117,105,108,116,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,73,116,32,105,115, + 32,97,115,115,117,109,101,100,32,116,104,97,116,32,98,111, + 116,104,32,105,109,112,32,97,110,100,32,115,121,115,32,104, + 97,118,101,32,97,108,114,101,97,100,121,32,98,101,101,110, + 32,105,109,112,111,114,116,101,100,32,97,110,100,10,32,32, + 32,32,105,110,106,101,99,116,101,100,46,32,73,116,32,105, + 115,32,97,108,115,111,32,97,115,115,117,109,101,100,32,116, + 104,97,116,32,111,115,46,115,101,112,32,104,97,115,32,98, + 101,101,110,32,115,101,116,32,116,111,32,116,104,101,32,103, + 108,111,98,97,108,10,32,32,32,32,118,97,114,105,97,98, + 108,101,32,39,112,97,116,104,95,115,101,112,39,32,97,115, + 32,105,116,32,105,115,32,97,32,98,97,115,105,99,32,114, + 101,113,117,105,114,101,109,101,110,116,32,102,111,114,32,115, + 111,117,114,99,101,32,108,111,97,100,105,110,103,46,10,10, + 32,32,32,32,117,3,0,0,0,95,105,111,117,9,0,0, + 0,95,119,97,114,110,105,110,103,115,117,8,0,0,0,98, + 117,105,108,116,105,110,115,117,7,0,0,0,109,97,114,115, + 104,97,108,117,5,0,0,0,112,111,115,105,120,117,1,0, + 0,0,47,117,2,0,0,0,110,116,117,1,0,0,0,92, + 117,3,0,0,0,111,115,50,117,7,0,0,0,69,77,88, + 32,71,67,67,117,30,0,0,0,105,109,112,111,114,116,108, + 105,98,32,114,101,113,117,105,114,101,115,32,112,111,115,105, + 120,32,111,114,32,110,116,117,3,0,0,0,95,111,115,117, + 8,0,0,0,112,97,116,104,95,115,101,112,78,40,4,0, + 0,0,117,3,0,0,0,95,105,111,117,9,0,0,0,95, + 119,97,114,110,105,110,103,115,117,8,0,0,0,98,117,105, + 108,116,105,110,115,117,7,0,0,0,109,97,114,115,104,97, + 108,40,2,0,0,0,117,5,0,0,0,112,111,115,105,120, + 117,1,0,0,0,47,40,2,0,0,0,117,2,0,0,0, + 110,116,117,1,0,0,0,92,40,2,0,0,0,117,3,0, + 0,0,111,115,50,117,1,0,0,0,92,40,9,0,0,0, + 117,3,0,0,0,105,109,112,117,3,0,0,0,115,121,115, + 117,7,0,0,0,109,111,100,117,108,101,115,117,8,0,0, + 0,95,95,110,97,109,101,95,95,117,15,0,0,0,66,117, + 105,108,116,105,110,73,109,112,111,114,116,101,114,117,11,0, + 0,0,108,111,97,100,95,109,111,100,117,108,101,117,7,0, + 0,0,115,101,116,97,116,116,114,117,7,0,0,0,118,101, + 114,115,105,111,110,117,11,0,0,0,73,109,112,111,114,116, + 69,114,114,111,114,40,8,0,0,0,117,10,0,0,0,115, + 121,115,95,109,111,100,117,108,101,117,10,0,0,0,105,109, + 112,95,109,111,100,117,108,101,117,11,0,0,0,115,101,108, + 102,95,109,111,100,117,108,101,117,12,0,0,0,98,117,105, + 108,116,105,110,95,110,97,109,101,117,14,0,0,0,98,117, + 105,108,116,105,110,95,109,111,100,117,108,101,117,10,0,0, + 0,98,117,105,108,116,105,110,95,111,115,117,8,0,0,0, + 112,97,116,104,95,115,101,112,117,9,0,0,0,111,115,95, + 109,111,100,117,108,101,40,0,0,0,0,40,0,0,0,0, + 117,75,0,0,0,47,85,115,101,114,115,47,98,99,97,110, + 110,111,110,47,68,101,118,101,108,111,112,101,114,47,114,101, + 112,111,47,99,112,121,116,104,111,110,47,98,111,111,116,115, + 116,114,97,112,95,105,109,112,111,114,116,108,105,98,47,76, + 105,98,47,95,105,109,112,111,114,116,108,105,98,46,112,121, + 117,6,0,0,0,95,115,101,116,117,112,233,3,0,0,115, + 44,0,0,0,0,10,6,1,6,2,13,1,13,1,15,1, + 18,2,13,1,20,2,28,1,15,1,13,1,4,2,3,1, + 15,2,27,1,9,1,5,1,13,1,12,2,12,1,16,1, + 117,6,0,0,0,95,115,101,116,117,112,99,2,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,44,0,0,0,116,0,0,124,0,0,124,1,0,131,2, + 0,1,116,1,0,106,2,0,125,2,0,116,2,0,116,1, + 0,95,2,0,124,2,0,116,1,0,95,3,0,100,1,0, + 83,40,2,0,0,0,117,201,0,0,0,73,110,115,116,97, + 108,108,32,105,109,112,111,114,116,108,105,98,32,97,115,32, + 116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,105,109,112,111,114,116,46,10,10,32, + 32,32,32,73,116,32,105,115,32,97,115,115,117,109,101,100, + 32,116,104,97,116,32,105,109,112,32,97,110,100,32,115,121, + 115,32,104,97,118,101,32,98,101,101,110,32,105,109,112,111, + 114,116,101,100,32,97,110,100,32,105,110,106,101,99,116,101, + 100,32,105,110,116,111,32,116,104,101,10,32,32,32,32,103, + 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,32, + 102,111,114,32,116,104,101,32,109,111,100,117,108,101,32,112, + 114,105,111,114,32,116,111,32,99,97,108,108,105,110,103,32, + 116,104,105,115,32,102,117,110,99,116,105,111,110,46,10,10, + 32,32,32,32,78,40,4,0,0,0,117,6,0,0,0,95, + 115,101,116,117,112,117,8,0,0,0,98,117,105,108,116,105, + 110,115,117,10,0,0,0,95,95,105,109,112,111,114,116,95, + 95,117,19,0,0,0,95,95,111,114,105,103,105,110,97,108, + 95,105,109,112,111,114,116,95,95,40,3,0,0,0,117,10, + 0,0,0,115,121,115,95,109,111,100,117,108,101,117,10,0, + 0,0,105,109,112,95,109,111,100,117,108,101,117,11,0,0, + 0,111,114,105,103,95,105,109,112,111,114,116,40,0,0,0, + 0,40,0,0,0,0,117,75,0,0,0,47,85,115,101,114, + 115,47,98,99,97,110,110,111,110,47,68,101,118,101,108,111, + 112,101,114,47,114,101,112,111,47,99,112,121,116,104,111,110, + 47,98,111,111,116,115,116,114,97,112,95,105,109,112,111,114, + 116,108,105,98,47,76,105,98,47,95,105,109,112,111,114,116, + 108,105,98,46,112,121,117,8,0,0,0,95,105,110,115,116, + 97,108,108,17,4,0,0,115,8,0,0,0,0,7,13,1, + 9,1,9,1,117,8,0,0,0,95,105,110,115,116,97,108, + 108,78,40,3,0,0,0,117,3,0,0,0,119,105,110,117, + 6,0,0,0,99,121,103,119,105,110,117,6,0,0,0,100, + 97,114,119,105,110,40,48,0,0,0,117,7,0,0,0,95, + 95,100,111,99,95,95,117,17,0,0,0,67,65,83,69,95, + 79,75,95,80,76,65,84,70,79,82,77,83,117,8,0,0, + 0,95,99,97,115,101,95,111,107,117,7,0,0,0,95,119, + 95,108,111,110,103,117,7,0,0,0,95,114,95,108,111,110, + 103,117,10,0,0,0,95,112,97,116,104,95,106,111,105,110, + 117,12,0,0,0,95,112,97,116,104,95,101,120,105,115,116, + 115,117,18,0,0,0,95,112,97,116,104,95,105,115,95,109, + 111,100,101,95,116,121,112,101,117,12,0,0,0,95,112,97, + 116,104,95,105,115,102,105,108,101,117,11,0,0,0,95,112, + 97,116,104,95,105,115,100,105,114,117,17,0,0,0,95,112, + 97,116,104,95,119,105,116,104,111,117,116,95,101,120,116,117, + 14,0,0,0,95,112,97,116,104,95,97,98,115,111,108,117, + 116,101,117,13,0,0,0,95,119,114,105,116,101,95,97,116, + 111,109,105,99,117,5,0,0,0,95,119,114,97,112,117,4, + 0,0,0,116,121,112,101,117,8,0,0,0,95,95,99,111, + 100,101,95,95,117,9,0,0,0,99,111,100,101,95,116,121, + 112,101,117,11,0,0,0,115,101,116,95,112,97,99,107,97, + 103,101,117,10,0,0,0,115,101,116,95,108,111,97,100,101, + 114,117,17,0,0,0,109,111,100,117,108,101,95,102,111,114, + 95,108,111,97,100,101,114,117,11,0,0,0,95,99,104,101, + 99,107,95,110,97,109,101,117,17,0,0,0,95,114,101,113, + 117,105,114,101,115,95,98,117,105,108,116,105,110,117,16,0, + 0,0,95,114,101,113,117,105,114,101,115,95,102,114,111,122, + 101,110,117,12,0,0,0,95,115,117,102,102,105,120,95,108, + 105,115,116,117,15,0,0,0,66,117,105,108,116,105,110,73, + 109,112,111,114,116,101,114,117,14,0,0,0,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,117,13,0,0,0,95, + 76,111,97,100,101,114,66,97,115,105,99,115,117,12,0,0, + 0,83,111,117,114,99,101,76,111,97,100,101,114,117,11,0, + 0,0,95,70,105,108,101,76,111,97,100,101,114,117,17,0, + 0,0,95,83,111,117,114,99,101,70,105,108,101,76,111,97, + 100,101,114,117,21,0,0,0,95,83,111,117,114,99,101,108, + 101,115,115,70,105,108,101,76,111,97,100,101,114,117,20,0, + 0,0,95,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,117,10,0,0,0,80,97,116,104,70, + 105,110,100,101,114,117,11,0,0,0,95,70,105,108,101,70, + 105,110,100,101,114,117,20,0,0,0,95,83,111,117,114,99, + 101,70,105,110,100,101,114,68,101,116,97,105,108,115,117,24, + 0,0,0,95,83,111,117,114,99,101,108,101,115,115,70,105, + 110,100,101,114,68,101,116,97,105,108,115,117,23,0,0,0, + 95,69,120,116,101,110,115,105,111,110,70,105,110,100,101,114, + 68,101,116,97,105,108,115,117,15,0,0,0,95,102,105,108, + 101,95,112,97,116,104,95,104,111,111,107,117,18,0,0,0, + 95,68,69,70,65,85,76,84,95,80,65,84,72,95,72,79, + 79,75,117,18,0,0,0,95,68,101,102,97,117,108,116,80, + 97,116,104,70,105,110,100,101,114,117,18,0,0,0,95,73, + 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, + 117,19,0,0,0,95,73,77,80,76,73,67,73,84,95,77, + 69,84,65,95,80,65,84,72,117,8,0,0,0,95,69,82, + 82,95,77,83,71,117,4,0,0,0,78,111,110,101,117,11, + 0,0,0,95,103,99,100,95,105,109,112,111,114,116,117,10, + 0,0,0,95,95,105,109,112,111,114,116,95,95,117,6,0, + 0,0,95,115,101,116,117,112,117,8,0,0,0,95,105,110, + 115,116,97,108,108,40,0,0,0,0,40,0,0,0,0,40, + 0,0,0,0,117,75,0,0,0,47,85,115,101,114,115,47, + 98,99,97,110,110,111,110,47,68,101,118,101,108,111,112,101, + 114,47,114,101,112,111,47,99,112,121,116,104,111,110,47,98, + 111,111,116,115,116,114,97,112,95,105,109,112,111,114,116,108, + 105,98,47,76,105,98,47,95,105,109,112,111,114,116,108,105, + 98,46,112,121,117,8,0,0,0,60,109,111,100,117,108,101, + 62,8,0,0,0,115,88,0,0,0,6,16,6,2,12,24, + 12,16,12,15,12,6,12,10,12,10,12,6,12,7,12,9, + 12,13,12,29,12,8,15,4,12,13,12,11,12,32,12,16, + 12,10,12,10,12,8,19,53,19,47,19,67,22,105,19,22, + 25,37,25,22,19,49,19,65,19,43,19,8,19,9,19,11, + 12,10,6,2,22,21,19,13,15,2,6,2,18,80,24,50, + 12,40, +}; diff -r bf24b2e1be24 -r f0b459af26fb Python/pystate.c --- a/Python/pystate.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Python/pystate.c Fri Feb 03 15:24:06 2012 -0500 @@ -80,6 +80,7 @@ interp->codec_error_registry = NULL; interp->codecs_initialized = 0; interp->fscodec_initialized = 0; + interp->__import__ = NULL; #ifdef HAVE_DLOPEN #ifdef RTLD_NOW interp->dlopenflags = RTLD_NOW; @@ -117,6 +118,7 @@ Py_CLEAR(interp->modules_reloading); Py_CLEAR(interp->sysdict); Py_CLEAR(interp->builtins); + Py_XDECREF(interp->__import__); } diff -r bf24b2e1be24 -r f0b459af26fb Python/pythonrun.c --- a/Python/pythonrun.c Fri Feb 03 12:08:32 2012 -0500 +++ b/Python/pythonrun.c Fri Feb 03 15:24:06 2012 -0500 @@ -189,6 +189,55 @@ #endif } +static void +import_init(PyInterpreterState *interp, PyObject *sysmod) +{ + PyObject *importlib; + PyObject *impmod; + PyObject *sys_modules; + PyObject *value; + + /* Import _importlib through its frozen version, _frozen_importlib. */ + /* XXX(bcannon): The file path for _frozen_importlib is completely off + */ + if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) { + Py_FatalError("Py_Initialize: can't import _frozen_importlib"); + } + importlib = PyImport_AddModule("_frozen_importlib"); + if (importlib == NULL) { + Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from " + "sys.modules"); + } + Py_INCREF(importlib); + + /* Install _importlib as __import__ */ + impmod = PyInit_imp(); + if (impmod == NULL) { + Py_FatalError("Py_Initialize: can't import imp"); + } + sys_modules = PyImport_GetModuleDict(); + if (PyDict_SetItemString(sys_modules, "imp", impmod) < 0) { + Py_FatalError("Py_Initialize: can't save imp to sys.modules"); + } + + value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod); + if (value == NULL) { + Py_FatalError("Py_Initialize: importlib install failed"); + } + Py_DECREF(value); + /* XXX(bcannon) Not good for sub-interpreters. + * See if imported frozen modules are cached in any way globally. + * Make C-level __import__ a per-interpreter thing. + */ + interp->__import__ = PyObject_GetAttrString(importlib, "__import__"); + if (interp->__import__ == NULL) { + Py_FatalError("Py_Initialize: can't save __import__ for C usage"); + } + Py_INCREF(interp->__import__); + Py_DECREF(importlib); +} + + void Py_InitializeEx(int install_sigs) { @@ -274,7 +323,7 @@ Py_INCREF(interp->builtins); /* initialize builtin exceptions */ - _PyExc_Init(); + _PyExc_Init(bimod); sysmod = _PySys_Init(); if (sysmod == NULL) @@ -308,6 +357,10 @@ /* Initialize _warnings. */ _PyWarnings_Init(); + import_init(interp, sysmod); + + _PyImportZip_Init(); + _PyTime_Init(); if (initfsencoding(interp) < 0) @@ -631,11 +684,12 @@ } /* initialize builtin exceptions */ - _PyExc_Init(); + _PyExc_Init(bimod); sysmod = _PyImport_FindBuiltin("sys"); if (bimod != NULL && sysmod != NULL) { PyObject *pstderr; + interp->sysdict = PyModule_GetDict(sysmod); if (interp->sysdict == NULL) goto handle_error; @@ -654,6 +708,8 @@ _PyImportHooks_Init(); + import_init(interp, sysmod); + if (initfsencoding(interp) < 0) goto handle_error; diff -r bf24b2e1be24 -r f0b459af26fb Tools/freeze/freeze_importlib.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Tools/freeze/freeze_importlib.py Fri Feb 03 15:24:06 2012 -0500 @@ -0,0 +1,23 @@ +import imp +import importlib.machinery +import marshal +import sys + +import makefreeze + + +loader = importlib.machinery.PathFinder.find_module('_importlib') +assert loader +code = loader.get_code('_importlib') +""" +with open('../../Lib/_importlib.py', 'r') as file: + source = file.read() + +code = compile(source, 'Lib/_importlib.py', 'exec') +""" +# Sanity check +module = imp.new_module('_importlib') +exec(marshal.loads(marshal.dumps(code)), module.__dict__) + +with open('../../Python/importlib.h', 'w') as file: + makefreeze.writecode(file, '_importlib', marshal.dumps(code))